@segment/analytics.js-core
Advanced tools
Comparing version 3.4.1 to 3.5.0
3.5.0 / 2018-04-25 | ||
================== | ||
* Add Metrics | ||
3.4.1 / 2018-04-23 | ||
@@ -3,0 +8,0 @@ ================== |
@@ -20,2 +20,3 @@ 'use strict'; | ||
var cookie = require('./cookie'); | ||
var metrics = require('./metrics'); | ||
var debug = require('debug'); | ||
@@ -158,5 +159,13 @@ var defaults = require('@ndhoule/defaults'); | ||
try { | ||
metrics.increment('analytics_js.integration.invoke', { | ||
method: 'initialize', | ||
integration_name: integration.name | ||
}); | ||
integration.initialize(); | ||
} catch (e) { | ||
var integrationName = integration.name; | ||
metrics.increment('analytics_js.integration.invoke.error', { | ||
method: 'initialize', | ||
integration_name: integration.name | ||
}); | ||
self.failedInitializations.push(integrationName); | ||
@@ -578,2 +587,3 @@ self.log('Error initializing %s integration: %o', integrationName, e); | ||
cookie.options(options.cookie); | ||
metrics.options(options.metrics); | ||
store.options(options.localStorage); | ||
@@ -611,2 +621,5 @@ user.options(options.user); | ||
var self = this; | ||
metrics.increment('analytics_js.invoke', { | ||
method: method | ||
}); | ||
this.emit('invoke', facade); | ||
@@ -623,4 +636,12 @@ | ||
try { | ||
metrics.increment('analytics_js.integration.invoke', { | ||
method: method, | ||
integration_name: integration.name | ||
}); | ||
integration.invoke.call(integration, method, facade); | ||
} catch (e) { | ||
metrics.increment('analytics_js.integration.invoke.error', { | ||
method: method, | ||
integration_name: integration.name | ||
}); | ||
self.log('Error invoking .%s method of %s integration: %o', method, name, e); | ||
@@ -736,1 +757,2 @@ } | ||
module.exports.store = store; | ||
module.exports.metrics = metrics; |
{ | ||
"name": "@segment/analytics.js-core", | ||
"author": "Segment <friends@segment.com>", | ||
"version": "3.4.1", | ||
"version": "3.5.0", | ||
"description": "The hassle-free way to integrate analytics into any web application.", | ||
@@ -59,3 +59,4 @@ "keywords": [ | ||
"segmentio-facade": "^3.0.2", | ||
"uuid": "^2.0.2" | ||
"uuid": "^2.0.2", | ||
"@segment/send-json": "^3.0.0" | ||
}, | ||
@@ -62,0 +63,0 @@ "devDependencies": { |
@@ -22,2 +22,3 @@ 'use strict'; | ||
var user = analytics.user(); | ||
var metrics = Analytics.metrics; | ||
@@ -108,2 +109,3 @@ describe('Analytics', function() { | ||
sinon.spy(group, 'load'); | ||
sinon.spy(metrics, 'increment'); | ||
}); | ||
@@ -114,2 +116,3 @@ | ||
group.load.restore(); | ||
metrics.increment.restore(); | ||
}); | ||
@@ -161,2 +164,21 @@ | ||
it('should record a metric for integration errors', function() { | ||
Test.prototype.initialize = function() { throw new Error('Uh oh!'); }; | ||
var test = new Test(); | ||
analytics.use(Test); | ||
analytics.add(test); | ||
analytics.initialize(); | ||
assert(analytics.initialized); | ||
sinon.assert.calledTwice(metrics.increment); | ||
sinon.assert.calledWith(metrics.increment, 'analytics_js.integration.invoke', { | ||
method: 'initialize', | ||
integration_name: 'Test' | ||
}); | ||
sinon.assert.calledWith(metrics.increment, 'analytics_js.integration.invoke.error', { | ||
method: 'initialize', | ||
integration_name: 'Test' | ||
}); | ||
}); | ||
it('should not error without settings', function() { | ||
@@ -205,2 +227,15 @@ analytics.initialize(); | ||
it('should listen on integration ready events', function(done) { | ||
Test.readyOnInitialize(); | ||
analytics.addIntegration(Test); | ||
analytics.ready(done); | ||
analytics.initialize(settings); | ||
sinon.assert.calledOnce(metrics.increment); | ||
sinon.assert.calledWith(metrics.increment, 'analytics_js.integration.invoke', { | ||
method: 'initialize', | ||
integration_name: 'Test' | ||
}); | ||
}); | ||
it('should still call ready with unknown integrations', function(done) { | ||
@@ -305,4 +340,10 @@ analytics.ready(done); | ||
analytics.initialize(settings); | ||
sinon.spy(metrics, 'increment'); | ||
}); | ||
afterEach(function() { | ||
metrics.increment.restore(); | ||
}); | ||
it('should invoke a method on integration with facade', function() { | ||
@@ -336,2 +377,33 @@ var a = new Identify({ userId: 'id', traits: { trait: true } }); | ||
it('should record a metric when invoking an integration', function() { | ||
analytics.track('Test Event'); | ||
sinon.assert.calledTwice(metrics.increment); | ||
sinon.assert.calledWith(metrics.increment, 'analytics_js.invoke', { | ||
method: 'track' | ||
}); | ||
sinon.assert.calledWith(metrics.increment, 'analytics_js.integration.invoke', { | ||
method: 'track', | ||
integration_name: 'Test' | ||
}); | ||
}); | ||
it('should record a metric when invoking an integration', function() { | ||
Test.prototype.invoke = function() { throw new Error('Uh oh!'); }; | ||
analytics.identify('prateek'); | ||
sinon.assert.calledThrice(metrics.increment); | ||
sinon.assert.calledWith(metrics.increment, 'analytics_js.invoke', { | ||
method: 'identify' | ||
}); | ||
sinon.assert.calledWith(metrics.increment, 'analytics_js.integration.invoke', { | ||
method: 'identify', | ||
integration_name: 'Test' | ||
}); | ||
sinon.assert.calledWith(metrics.increment, 'analytics_js.integration.invoke.error', { | ||
method: 'identify', | ||
integration_name: 'Test' | ||
}); | ||
}); | ||
it('should support .integrations to disable / select integrations', function() { | ||
@@ -361,2 +433,3 @@ var opts = { integrations: { Test: false } }; | ||
sinon.stub(group, 'options'); | ||
sinon.stub(metrics, 'options'); | ||
}); | ||
@@ -369,2 +442,3 @@ | ||
group.options.restore(); | ||
metrics.options.restore(); | ||
}); | ||
@@ -377,2 +451,7 @@ | ||
it('should set metrics options', function() { | ||
analytics._options({ metrics: { option: true } }); | ||
assert(metrics.options.calledWith({ option: true })); | ||
}); | ||
it('should set store options', function() { | ||
@@ -379,0 +458,0 @@ analytics._options({ localStorage: { option: true } }); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
186731
34
4265
0
35
+ Added@segment/send-json@^3.0.0
+ Added@segment/base64-encode@2.0.2(transitive)
+ Added@segment/send-json@3.0.0(transitive)
+ Addedhas-cors@1.1.0(transitive)
+ Addedjsonp@0.2.1(transitive)
+ Addedutf8-encode@1.0.0(transitive)