diff --git a/.travis.yml b/.travis.yml index 5cb224e..4389fb7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,6 @@ sudo: required script: - npm run lint - npm run test:unit -- npm run test:bundle - 'if [ "$TRAVIS_SECURE_ENV_VARS" = "true" ]; then npm run test:sauce; fi' after_success: - npm run report-coverage diff --git a/README.md b/README.md index 3bec397..80facda 100644 --- a/README.md +++ b/README.md @@ -30,28 +30,28 @@ These include: `Version`, `EventId`, `Timestamp`, `TenantId`, `EventBody.Timesta ### Setup -Install from Bower: +Install `d2l-telemetry-browser-client` via NPM: ```shell -bower install Brightspace/d2l-telemetry-browser-client +npm install Brightspace/d2l-telemetry-browser-client ``` -Then import `d2l-telemetry-browser-client.html`: +#### NPM -```html - +In NPM, require it normally: + +```javascript +const d2lTelemetryBrowserClient = require('d2l-telemetry-browser-client'); ``` -The HTML import will reference the library from the CDN, but using bower and html imports will allow you to de-dupe different versions. +#### ES6 -Alternatively you can reference it directly from the CDN +In ES6, use an `import` statement: -```html - +```javascript +import d2lTelemetryBrowserClient from 'd2l-telemetry-browser-client'; ``` -Finally reference the library using the global variable `d2lTelemetryBrowserClient` - The client uses [`d2l-fetch`](https://github.com/Brightspace/d2l-fetch) for making the API requests to the telemetry service. See the [`d2l-fetch browser compatibility`](https://github.com/Brightspace/d2l-fetch#browser-compatibility) instructions for additional requirements. @@ -59,7 +59,7 @@ See the [`d2l-fetch browser compatibility`](https://github.com/Brightspace/d2l-f ```js -const client = new window.d2lTelemetryBrowserClient.Client({ +const client = new d2lTelemetryBrowserClient.Client({ endpoint }); @@ -69,11 +69,11 @@ const id = 'http://prd.activityfeed.us-east-1.brightspace.com/api/v1/d2l:orgUnit // by current BDP processing. Even though these events are not yet going to BDP, suggestion // is to either use an internal identifier or encode the URL. // The URL is included as a new EventBody.Object.Url property. -const eventBody = new window.d2lTelemetryBrowserClient.EventBody() +const eventBody = new d2lTelemetryBrowserClient.EventBody() .setAction('Created') .setObject(encodeURIComponent(id), 'Article', id); -const event = new window.d2lTelemetryBrowserClient.TelemetryEvent() +const event = new d2lTelemetryBrowserClient.TelemetryEvent() .setDate(new Date()) .setType('TelemetryEvent') .setSourceId('activityfeed') @@ -92,15 +92,9 @@ yarn install yarn run test ``` -This library builds a de-umdified browserify bundle that is exposed on the global object as `d2lTelemetryBrowserClient`. - ### Publishing -The Travis CI build on master branch will bump the version of the library, publish the dist/ bundle to the CDN and commit an updated `./d2l-telemetry-browser-client.html` html import file referencing the CDN library back to the repo. - -Refer to `./update.sh` and `./travis.yml` for details on how this publish process works. - -You can control the level of verison bump by including either `[increment major]` or `[increment patch]` in your commit message. By default it will increment minor. +You can control the level of version bump by including either `[increment major]` or `[increment patch]` in your commit message. By default it will increment minor. [ci-url]: https://travis-ci.org/Brightspace/d2l-telemetry-browser-client diff --git a/bower.json b/bower.json deleted file mode 100644 index 34c8e40..0000000 --- a/bower.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "d2l-telemetry-browser-client", - "description": "Client for sending telemetry from the browser to a telemetry service", - "main": "d2l-telemetry-browser-client.html", - "authors": [ - "D2L Corporation" - ], - "license": "Apache-2.0", - "keywords": [ - "telemetry", - "browser", - "analytics" - ], - "homepage": "https://github.com/Brightspace/d2l-telemetry-browser-client", - "private": true, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ], - "dependencies": { - "d2l-fetch": "brightspace/d2l-fetch#^1.8.0" - } -} diff --git a/d2l-telemetry-browser-client.html b/d2l-telemetry-browser-client.html deleted file mode 100644 index 097feab..0000000 --- a/d2l-telemetry-browser-client.html +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/d2l-telemetry-browser-client.js b/d2l-telemetry-browser-client.js new file mode 100644 index 0000000..32868b3 --- /dev/null +++ b/d2l-telemetry-browser-client.js @@ -0,0 +1,8 @@ +import d2lTelemetryBrowserClient from './src/index.js'; + +window.d2lTelemetryBrowserClient = {}; +window.d2lTelemetryBrowserClient.Client = d2lTelemetryBrowserClient.Client; +window.d2lTelemetryBrowserClient.TelemetryEvent = d2lTelemetryBrowserClient.TelemetryEvent; +window.d2lTelemetryBrowserClient.EventBody = d2lTelemetryBrowserClient.EventBody; +window.d2lTelemetryBrowserClient.PerformanceEventBody = d2lTelemetryBrowserClient.PerformanceEventBody; +window.d2lTelemetryBrowserClient.ProblemEventBody = d2lTelemetryBrowserClient.ProblemEventBody; diff --git a/karma-bundle.conf.js b/karma-bundle.conf.js deleted file mode 100644 index b37e683..0000000 --- a/karma-bundle.conf.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = function(config) { - config.set({ - autoWatch: false, - browsers: ['ChromeHeadless'], - colors: true, - concurrency: Infinity, - frameworks: ['mocha', 'chai'], - files: [ - 'dist/d2l-telemetry-browser-client.js', - 'test/bundle.js' - ], - logLevel: config.LOG_WARN, - port: 9876, - reporters: ['progress'], - singleRun: true - }); -}; diff --git a/karma.conf.js b/karma.conf.js index c89612b..6e23452 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -20,9 +20,6 @@ module.exports = function(config) { 'node_modules/whatwg-fetch/fetch.js', 'test/*' ], - exclude: [ - 'test/bundle.js' - ], logLevel: config.LOG_WARN, port: 9876, preprocessors: { diff --git a/package.json b/package.json index 12169c9..baa6860 100644 --- a/package.json +++ b/package.json @@ -1,22 +1,16 @@ { "name": "d2l-telemetry-browser-client", - "version": "0.0.1", + "version": "1.0.0", "description": "Client for sending telemetry from the browser to a telemetry service", "private": true, "main": "src/index.js", + "module": "src/index.js", "scripts": { - "prebuild": "rimraf dist && mkdir dist", - "build": "browserify -g uglifyify -t babelify -p deumdify -s d2lTelemetryBrowserClient ./src/index.js > ./dist/d2l-telemetry-browser-client.js", "lint": "eslint src test", - "test": "npm run lint && npm run test:unit && npm run test:bundle", - "pretest:bundle": "npm run build", - "test:bundle": "karma start karma-bundle.conf.js", + "test": "npm run lint && npm run test:unit", "test:unit": "cross-env NODE_ENV=test karma start karma.conf.js", "test:sauce": "cross-env NODE_ENV=test karma start karma-sauce.conf.js", - "report-coverage": "cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", - "publish-location": "node publishLocation", - "prepublish-release": "npm run build", - "publish-release": "frau-publisher && npm run publish-location" + "report-coverage": "cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js" }, "repository": { "type": "git", @@ -24,19 +18,6 @@ }, "author": "D2L Corporation", "license": "Apache-2.0", - "config": { - "frauPublisher": { - "files": "./dist/**", - "moduleType": "lib", - "targetDirectory": "d2l-telemetry-browser-client", - "creds": { - "key": "AKIAIA66UIEEOZM63VEQ", - "secretVar": "CDN_SECRET" - }, - "devTagVar": "TRAVIS_COMMIT", - "versionVar": "TRAVIS_TAG" - } - }, "devDependencies": { "babel-plugin-istanbul": "^4.1.5", "babel-preset-env": "^1.6.1", @@ -47,10 +28,8 @@ "chai": "^4.1.2", "coveralls": "^3.0.0", "cross-env": "^5.1.3", - "deumdify": "^1.2.5", "eslint": "^4.15.0", "eslint-config-brightspace": "^0.3.1", - "frau-publisher": "^2.6.2", "karma": "^2.0.0", "karma-browserify": "^5.1.3", "karma-chai": "^0.1.0", @@ -61,9 +40,7 @@ "karma-sauce-launcher": "^1.2.0", "mocha": "^4.1.0", "promise-polyfill": "^7.1.0", - "rimraf": "^2.6.2", "sinon": "^4.4.2", - "uglifyify": "^4.0.5", "whatwg-fetch": "^2.0.3" }, "babel": { diff --git a/publishLocation.js b/publishLocation.js deleted file mode 100644 index 841d41d..0000000 --- a/publishLocation.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; -var publisherOptions = require('./package.json').config.frauPublisher; -publisherOptions.devTag = process.env.TRAVIS_COMMIT || publisherOptions.devTagVar; -publisherOptions.version = process.env.TRAVIS_TAG; -var publisher = require('frau-publisher').lib(publisherOptions); -console.log('build published to:', publisher.getLocation() + 'd2l-telemetry-browser-client.js'); //eslint-disable-line no-console diff --git a/src/index.js b/src/index.js index 46a1906..3cf1148 100644 --- a/src/index.js +++ b/src/index.js @@ -4,8 +4,10 @@ import {EventBody} from './eventBody'; import {PerformanceEventBody} from './performanceEventBody'; import {ProblemEventBody} from './problemEventBody'; -module.exports.Client = Client; -module.exports.TelemetryEvent = TelemetryEvent; -module.exports.EventBody = EventBody; -module.exports.PerformanceEventBody = PerformanceEventBody; -module.exports.ProblemEventBody = ProblemEventBody; +export default { + Client, + TelemetryEvent, + EventBody, + PerformanceEventBody, + ProblemEventBody +}; diff --git a/test/bundle.js b/test/bundle.js deleted file mode 100644 index bd11f4d..0000000 --- a/test/bundle.js +++ /dev/null @@ -1,43 +0,0 @@ -describe('test suite', () => { - - describe('bundle', () => { - it('should have "d2lTelemetryBrowserClient" defined as a global variable', () => { - expect(window['d2lTelemetryBrowserClient']).to.not.be.undefined; - }); - }); - - describe('client', () => { - it('should have a Client ctor', () => { - const client = new window['d2lTelemetryBrowserClient'].Client(); - expect(client.logUserEvent).to.not.be.undefined; - }); - }); - - describe('event', () => { - it('should have a TelemetryEvent ctor', () => { - const event = new window['d2lTelemetryBrowserClient'].TelemetryEvent(); - expect(event.setType).to.not.be.undefined; - }); - }); - - describe('eventBody', () => { - it('should have an EventBody ctor', () => { - const eventBody = new window['d2lTelemetryBrowserClient'].EventBody(); - expect(eventBody.setTypeGuid).to.not.be.undefined; - }); - }); - - describe('performanceEventBody', () => { - it('should have a PerformanceEventBody ctor', () => { - const performanceEventBody = new window['d2lTelemetryBrowserClient'].PerformanceEventBody(); - expect(performanceEventBody.addUserTiming).to.not.be.undefined; - }); - }); - - describe('problemEventBody', () => { - it('should have a ProblemEventBody ctor', () => { - const problemEventBody = new window['d2lTelemetryBrowserClient'].ProblemEventBody(); - expect(problemEventBody.setProblemType).to.not.be.undefined; - }); - }); -}); diff --git a/test/event.js b/test/event.js index 1213088..5d29f61 100644 --- a/test/event.js +++ b/test/event.js @@ -1,5 +1,6 @@ -const TelemetryEvent = require('../src/index').TelemetryEvent; -const EventBody = require('../src/index').EventBody; +import d2lTelemetryBrowserClient from '../src/index'; +const TelemetryEvent = d2lTelemetryBrowserClient.TelemetryEvent; +const EventBody = d2lTelemetryBrowserClient.EventBody; describe('Event', () => { var event; diff --git a/test/eventBody.js b/test/eventBody.js index 489fcb8..4bc9ac3 100644 --- a/test/eventBody.js +++ b/test/eventBody.js @@ -1,4 +1,5 @@ -const EventBody = require('../src/index').EventBody; +import d2lTelemetryBrowserClient from '../src/index'; +const EventBody = d2lTelemetryBrowserClient.EventBody; describe('EventBody', () => { var eventBody; diff --git a/test/index.js b/test/index.js index ceffc22..0bfdbf7 100644 --- a/test/index.js +++ b/test/index.js @@ -1,6 +1,7 @@ -const Client = require('../src/index').Client; -const TelemetryEvent = require('../src/index').TelemetryEvent; -const EventBody = require('../src/index').EventBody; +import d2lTelemetryBrowserClient from '../src/index'; +const Client = d2lTelemetryBrowserClient.Client; +const TelemetryEvent = d2lTelemetryBrowserClient.TelemetryEvent; +const EventBody = d2lTelemetryBrowserClient.EventBody; const sinon = require('sinon'); diff --git a/test/performanceEventBody.js b/test/performanceEventBody.js index 14d8a29..c37938f 100644 --- a/test/performanceEventBody.js +++ b/test/performanceEventBody.js @@ -1,4 +1,5 @@ -const PerformanceEventBody = require('../src/index').PerformanceEventBody; +import d2lTelemetryBrowserClient from '../src/index'; +const PerformanceEventBody = d2lTelemetryBrowserClient.PerformanceEventBody; describe('PerformanceEventBody', () => { var eventBody; diff --git a/test/problemEventBody.js b/test/problemEventBody.js index 0db44df..4a1b7dc 100644 --- a/test/problemEventBody.js +++ b/test/problemEventBody.js @@ -1,4 +1,5 @@ -const ProblemEventBody = require('../src/index').ProblemEventBody; +import d2lTelemetryBrowserClient from '../src/index'; +const ProblemEventBody = d2lTelemetryBrowserClient.ProblemEventBody; describe('ProblemEventBody', () => { var eventBody; diff --git a/update.sh b/update.sh index c000990..c69b177 100644 --- a/update.sh +++ b/update.sh @@ -1,8 +1,6 @@ #!/bin/bash set -e -echo "Generating HTML import and publishing to CDN" - if ! [ "$TRAVIS_BRANCH" == "master" ] || ! [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo "Version is only bumped on master" exit 0 @@ -52,9 +50,7 @@ git config --global user.email "travis@travis-ci.com" git config --global user.name "Travis CI" echo "Updating from ${lastVersion} to v${newVersion}" -echo "" > d2l-telemetry-browser-client.html -echo "" >> d2l-telemetry-browser-client.html -echo "" >> d2l-telemetry-browser-client.html +sed -i "s/\"version\": \".*\"/\"version\": \""$newVersion"\"/" package.json # Add the updated d2l-telemetry-browser-client.html, and add a new tag to create the release git add . @@ -63,12 +59,5 @@ git commit -m "[skip ci] Update to v${newVersion}" echo "About to tag new version" git tag -a v${newVersion} -m "v${newVersion} - ${lastLogMessageShort}" -echo "git status" -git status - echo "push new tag" git push upstream HEAD:master --tags - -# Publish the release via frau-publisher -export TRAVIS_TAG=$newVersion -npm run publish-release