diff --git a/lib/index.d.ts b/lib/index.d.ts index d78c7a90..d2b9a111 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -64,6 +64,10 @@ export declare namespace SegmentAnalytics { integrations?: SegmentIntegration; } + type PageProperties = Object; + type PageOptions = Object; + type PageCallback = () => void; + interface AnalyticsJS { Integrations: { [name: string]: unknown }; require: any; @@ -215,16 +219,86 @@ export declare namespace SegmentAnalytics { properties?: any ): AnalyticsJS; + /** - * Trigger a pageview, labeling the current page with an optional `category`, - * `name` and `properties`. + * Trigger a pageview. */ page( category: string, name: string, - properties: any, - options: any, - fn: unknown + properties: PageProperties, + options: PageOptions, + callback: PageCallback, + ): AnalyticsJS; + + /** + * Trigger a pageview. + */ + page( + category: string, + name: string, + properties: PageProperties, + callback: PageCallback, + ): AnalyticsJS; + + /** + * Trigger a pageview. + */ + page( + category: string, + name: string, + callback: PageCallback, + ): AnalyticsJS; + + /** + * Trigger a pageview. + */ + page( + name: string, + properties: PageProperties, + options: PageOptions, + callback: PageCallback, + ): AnalyticsJS; + + /** + * Trigger a pageview. + */ + page( + name: string, + properties: PageProperties, + callback: PageCallback, + ): AnalyticsJS; + + /** + * Trigger a pageview. + */ + page( + name: string, + callback: PageCallback, + ): AnalyticsJS; + + /** + * Trigger a pageview. + */ + page( + name: string, + ): AnalyticsJS; + + /** + * Trigger a pageview. + */ + page( + properties: PageProperties, + options: PageOptions, + callback: PageCallback, + ): AnalyticsJS; + + /** + * Trigger a pageview. + */ + page( + properties: PageProperties, + callback: PageCallback, ): AnalyticsJS; /** diff --git a/test/analytics.test.js b/test/analytics.test.js index e42d90a5..7c539a56 100644 --- a/test/analytics.test.js +++ b/test/analytics.test.js @@ -730,6 +730,18 @@ describe('Analytics', function() { }); }); + it('should accept (name)', function() { + defaults.name = 'name'; + Test.prototype.page = sinon.spy(); + var test = new Test(); + test.invoke = sinon.spy(); + analytics.use(Test); + analytics.add(test); + analytics.initialize(); + analytics.page('Test Page Event'); + assert(test.invoke.called); + }); + it('should accept (properties, options, callback)', function(done) { analytics.page({}, {}, function() { var page = analytics._invoke.args[0][1];