diff --git a/.gitignore b/.gitignore index ddb607f67..bd183e3ea 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ pids # Coverage directory used by tools like istanbul coverage +packages/*/coverage/ .nyc_output # node-waf configuration @@ -16,10 +17,12 @@ coverage # Compiled binary addons (http://nodejs.org/api/addons.html) build/Release +packages/*/build/Release # Dependency directory # https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git node_modules +packages/*/node_modules/ .tmp @@ -29,8 +32,12 @@ node_modules .idea/ typings +packages/*/typings .tsdrc +packages/*/typings jsconfig.json coverage dist +packages/*/dist spec-js +packages/*/spec-js diff --git a/.nycrc.json b/.nycrc.json new file mode 100644 index 000000000..468989cdf --- /dev/null +++ b/.nycrc.json @@ -0,0 +1,16 @@ +{ + "exclude": [ + "**/teambition-sdk-testutil/**", + "**/teambition-sdk-core/spec-js/src/teambition.js", + "**/teambition-sdk-core/spec-js/src/utils/internalTypes.js" + ], + "include": [ + "**/spec-js/src/**" + ], + "extension": [ + ".ts" + ], + "reporter": ["html", "lcov"], + "all": true, + "cache": true +} diff --git a/.travis.yml b/.travis.yml index 9463788df..630faf9d2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,5 +2,11 @@ language: node_js node_js: - "6" +before_install: + - curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 0.27.5 + - export PATH="$HOME/.yarn/bin:$PATH" +cache: + yarn: true + script: - "npm run build_all" diff --git a/.yarnrc b/.yarnrc index 142dad817..fe0e450ec 100644 --- a/.yarnrc +++ b/.yarnrc @@ -1 +1,3 @@ registry "https://registry.npmjs.org" + +workspaces-experimental true diff --git a/circle.yml b/circle.yml index 33bc94bc8..7ee9880fd 100644 --- a/circle.yml +++ b/circle.yml @@ -12,12 +12,13 @@ dependencies: - ~/.cache/yarn test: - before: - - greenkeeper-lockfile-update override: - yarn test + pre: + - greenkeeper-lockfile-update + - yarn build_all post: - - npm run build_cjs && npm run check_circular_dependencies + - npm run check_circular_dependencies - cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js - greenkeeper-lockfile-upload diff --git a/lerna.json b/lerna.json new file mode 100644 index 000000000..a2c8c5b0b --- /dev/null +++ b/lerna.json @@ -0,0 +1,6 @@ +{ + "lerna": "2.0.0", + "version": "independent", + "npmClient": "yarn", + "useWorkSpaces": true +} diff --git a/package.json b/package.json index 7673b1b51..1ec349b1c 100644 --- a/package.json +++ b/package.json @@ -1,29 +1,16 @@ { + "private": true, "name": "teambition-sdk", "version": "0.8.17", "description": "Front-End SDK for Teambition", - "main": "./index.js", - "typings": "./index.d.ts", + "workspaces": [ + "packages/*" + ], "scripts": { - "build_all": "rm -rf dist && mkdir dist && mkdir dist/bundle && npm run build_es6 && npm run build_cjs && npm run build_bundle && npm run build_mock && npm run build_mock_cjs && npm run build_test && npm run build_socket", - "build_bundle": "rm -rf dist/bundle/tbsdk.umd.js && ts-node ./tools/tasks/bundle.sdk.ts", - "build_cjs": "rm -rf dist/cjs && tsc src/index.ts -m commonjs --outDir dist/cjs --sourcemap --inlineSources --target ES5 -d --diagnostics --pretty --strict --noUnusedLocals --noUnusedParameters --experimentalDecorators --suppressImplicitAnyIndexErrors --moduleResolution node --importHelpers --noEmitHelpers --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom", - "build_es6": "rm -rf dist/es6 && tsc src/index.ts -m es2015 --outDir dist/es6 --sourcemap --inlineSources --target ES2015 -d --diagnostics --pretty --strict --noUnusedLocals --noUnusedParameters --experimentalDecorators --suppressImplicitAnyIndexErrors --moduleResolution node --importHelpers --noEmitHelpers --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom", - "build_mock": "rm -rf dist/mock-es6 && tsc mock/index.ts -m es2015 --outDir dist/mock-es6 --sourcemap --inlineSources --target ES5 -d --diagnostics --pretty --strict --noUnusedLocals --noUnusedParameters --experimentalDecorators --suppressImplicitAnyIndexErrors --moduleResolution node --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom && ts-node ./tools/tasks/bundle.mock.ts", - "build_mock_cjs": "rm -rf dist/mock-cjs && tsc mock/index.ts -m commonjs --outDir dist/mock-cjs --sourcemap --inlineSources --target ES5 -d --diagnostics --pretty --strict --noUnusedLocals --noUnusedParameters --experimentalDecorators --suppressImplicitAnyIndexErrors --moduleResolution node --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom", - "build_socket": "rm -rf dist/bundle/tbsdk.socket.js && tsc ./src/SocketApp.ts ./src/teambition.ts -m commonjs --outDir dist/socket --sourcemap --inlineSources --target ES5 -d --diagnostics --pretty --experimentalDecorators --suppressImplicitAnyIndexErrors --moduleResolution node --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom && ts-node ./tools/tasks/bundle.socket.ts", - "build_test": "rm -rf spec-js && tsc test/app.ts -m commonjs --sourcemap --inlineSources --outDir spec-js --target ES2015 --diagnostics --pretty --experimentalDecorators --suppressImplicitAnyIndexErrors --types \"node,chai,sinon,sinon-chai\" --moduleResolution node", - "check_circular_dependencies": "madge ./dist/cjs --circular", - "copy_files": "cp README.md package.json ./dist/cjs/", - "cover": "npm run build_test && rm -rf ./coverage && nyc --reporter=html --reporter=lcov --exclude=node_modules --exclude=spec-js/test --exclude=spec-js/mock --exclude=spec-js/src/sockets/SocketClient.js tman --mocha spec-js/test/app.js", - "lint": "tslint ./src/**/*.ts ./mock/**/*.ts ./test/*.ts ./test/apis/**/*.ts ./test/mock/**/*.ts ./test/utils/**/*.ts", - "publish_sdk": "npm run build_all && npm run copy_files && npm publish ./dist/cjs", - "publish_all": "npm run publish_sdk && ts-node ./tools/tasks/publish.ts && cp -r ./dist/mock-cjs/** ./.tmp/mock && cp -r ./dist/socket/** ./.tmp/socket && npm publish .tmp/mock/ && npm publish .tmp/socket/", - "test": "npm run lint && npm run cover", - "version": "ts-node tools/tasks/version.ts && git add .", - "watch": "npm run watch_test & ts-node ./tools/tasks/test.ts", - "watch_cjs": "tsc src/index.ts -m commonjs --outDir dist/cjs --sourcemap --inlineSources --target ES5 -d --diagnostics --pretty --experimentalDecorators --strict --noUnusedLocals --noUnusedParameters --suppressImplicitAnyIndexErrors --moduleResolution node --skipLibCheck -w --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom", - "watch_test": "tsc test/app.ts -m commonjs --outDir spec-js --sourcemap --inlineSources --target ES2015 --diagnostics --pretty --experimentalDecorators --suppressImplicitAnyIndexErrors --types \"node,chai,sinon,sinon-chai\" --moduleResolution node --skipLibCheck -w" + "build_all": "lerna exec npm run build_cjs", + "check_circular_dependencies": "madge ./packages/*/dist/cjs --circular", + "lint": "lerna exec npm run lint", + "test": "rm -rf ./coverage && nyc lerna exec npm test" }, "repository": { "type": "git", @@ -61,6 +48,7 @@ "google-closure-compiler-js": "^20170521.0.0", "isomorphic-fetch": "^2.2.1", "jsonrpc-lite": "^1.2.3", + "lerna": "^2.0.0", "madge": "^1.6.0", "moment": "^2.18.1", "node-watch": "^0.5.4", @@ -75,7 +63,9 @@ "sinon": "^2.3.8", "sinon-chai": "^2.11.0", "snapper-consumer": "^1.3.6", - "teambition-sdk-mock": "^0.6.8", + "teambition-sdk-core": "^0.8.13", + "teambition-sdk-request": "^0.8.13", + "teambition-sdk-testutil": "^0.8.13", "tman": "^1.7.1", "ts-node": "^3.2.0", "tslib": "^1.7.1", diff --git a/packages/teambition-sdk-core/package.json b/packages/teambition-sdk-core/package.json new file mode 100644 index 000000000..b6e9d8c09 --- /dev/null +++ b/packages/teambition-sdk-core/package.json @@ -0,0 +1,84 @@ +{ + "name": "teambition-sdk-core", + "version": "0.8.13", + "description": "Front-End SDK (Core) for Teambition", + "main": "./dist/cjs/index.js", + "typings": "./dist/cjs/index.d.ts", + "scripts": { + "build_all": "rm -rf dist && mkdir dist && mkdir dist/bundle && npm run build_es6 && npm run build_cjs && npm run build_bundle && npm run build_mock && npm run build_mock_cjs && npm run build_test && npm run build_socket", + "build_bundle": "rm -rf dist/bundle/tbsdk.umd.js && ts-node ./tools/tasks/bundle.sdk.ts", + "build_cjs": "rm -rf dist/cjs && tsc src/index.ts -m commonjs --outDir dist/cjs --sourcemap --inlineSources --target ES5 -d --diagnostics --pretty --strict --noUnusedLocals --noUnusedParameters --experimentalDecorators --suppressImplicitAnyIndexErrors --moduleResolution node --importHelpers --noEmitHelpers --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom", + "build_es6": "rm -rf dist/es6 && tsc src/index.ts -m es2015 --outDir dist/es6 --sourcemap --inlineSources --target ES2015 -d --diagnostics --pretty --strict --noUnusedLocals --noUnusedParameters --experimentalDecorators --suppressImplicitAnyIndexErrors --moduleResolution node --importHelpers --noEmitHelpers --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom", + "build_mock": "rm -rf dist/mock-es6 && tsc mock/index.ts -m es2015 --outDir dist/mock-es6 --sourcemap --inlineSources --target ES5 -d --diagnostics --pretty --strict --noUnusedLocals --noUnusedParameters --experimentalDecorators --suppressImplicitAnyIndexErrors --moduleResolution node --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom && ts-node ./tools/tasks/bundle.mock.ts", + "build_mock_cjs": "rm -rf dist/mock-cjs && tsc mock/index.ts -m commonjs --outDir dist/mock-cjs --sourcemap --inlineSources --target ES5 -d --diagnostics --pretty --strict --noUnusedLocals --noUnusedParameters --experimentalDecorators --suppressImplicitAnyIndexErrors --moduleResolution node --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom", + "build_socket": "rm -rf dist/bundle/tbsdk.socket.js && tsc ./src/SocketApp.ts ./src/teambition.ts -m commonjs --outDir dist/socket --sourcemap --inlineSources --target ES5 -d --diagnostics --pretty --experimentalDecorators --suppressImplicitAnyIndexErrors --moduleResolution node --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom && ts-node ./tools/tasks/bundle.socket.ts", + "build_test": "rm -rf spec-js && tsc --project test", + "copy_files": "cp README.md package.json ./dist/cjs/", + "lint": "tslint --project . --config ../../tslint.json", + "publish_sdk": "npm run build_all && npm run copy_files && npm publish ./dist/cjs", + "publish_all": "npm run publish_sdk && ts-node ./tools/tasks/publish.ts && cp -r ./dist/mock-cjs/** ./.tmp/mock && cp -r ./dist/socket/** ./.tmp/socket && npm publish .tmp/mock/ && npm publish .tmp/socket/", + "test": "npm run lint && npm run build_test && tman --mocha spec-js/test/app.js", + "version": "ts-node tools/tasks/version.ts && git add .", + "watch": "npm run watch_test & ts-node ../../tools/tasks/test.ts $!", + "watch_cjs": "tsc src/index.ts -m commonjs --outDir dist/cjs --sourcemap --inlineSources --target ES5 -d --diagnostics --pretty --experimentalDecorators --strict --noUnusedLocals --noUnusedParameters --suppressImplicitAnyIndexErrors --moduleResolution node --skipLibCheck -w --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom", + "watch_test": "tsc --project test --watch --skipLibCheck" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/teambition/teambition-sdk.git" + }, + "keywords": [ + "teambition", + "sdk", + "teambition-sdk" + ], + "author": "lynweklm@gmail.com", + "license": "MIT", + "bugs": { + "url": "https://github.com/teambition/teambition-sdk/issues" + }, + "homepage": "https://github.com/teambition/teambition-sdk#readme", + "peerDependencies": { + "reactivedb": "~0.9.9", + "rrule": "2.2.0", + "rxjs": "^5.2.0", + "snapper-consumer": "^1.3.6", + "tslib": "^1.6.0" + }, + "devDependencies": { + "@types/chai": "^4.0.1", + "@types/lodash": "^4.14.64", + "@types/lovefield": "^2.0.32", + "@types/node": "^8.0.14", + "@types/sinon": "^2.3.3", + "@types/sinon-chai": "^2.7.28", + "chai": "^4.1.0", + "coveralls": "^2.13.1", + "engine.io-client": "^3.1.0", + "fetch-mock": "^5.10.0", + "google-closure-compiler-js": "^20170521.0.0", + "isomorphic-fetch": "^2.2.1", + "jsonrpc-lite": "^1.2.3", + "madge": "^1.6.0", + "moment": "^2.18.1", + "node-watch": "^0.5.4", + "nyc": "^11.0.1", + "reactivedb": "~0.9.9", + "rollup": "^0.42.0", + "rollup-plugin-alias": "^1.3.1", + "rollup-plugin-commonjs": "^8.0.2", + "rollup-plugin-node-resolve": "^3.0.0", + "rrule": "2.2.0", + "rxjs": "^5.4.2", + "sinon": "^2.3.8", + "sinon-chai": "^2.11.0", + "snapper-consumer": "^1.3.6", + "teambition-sdk-testutil": "^0.8.13", + "tman": "^1.7.1", + "ts-node": "^3.2.0", + "tslib": "^1.7.1", + "tslint": "^5.5.0", + "tslint-eslint-rules": "^4.1.1", + "typescript": "^2.4.2" + } +} diff --git a/src/Net/Http.ts b/packages/teambition-sdk-core/src/Net/Http.ts similarity index 100% rename from src/Net/Http.ts rename to packages/teambition-sdk-core/src/Net/Http.ts diff --git a/src/Net/Net.ts b/packages/teambition-sdk-core/src/Net/Net.ts similarity index 100% rename from src/Net/Net.ts rename to packages/teambition-sdk-core/src/Net/Net.ts diff --git a/src/Net/index.ts b/packages/teambition-sdk-core/src/Net/index.ts similarity index 100% rename from src/Net/index.ts rename to packages/teambition-sdk-core/src/Net/index.ts diff --git a/src/SDK.ts b/packages/teambition-sdk-core/src/SDK.ts similarity index 100% rename from src/SDK.ts rename to packages/teambition-sdk-core/src/SDK.ts diff --git a/src/SDKFetch.ts b/packages/teambition-sdk-core/src/SDKFetch.ts similarity index 100% rename from src/SDKFetch.ts rename to packages/teambition-sdk-core/src/SDKFetch.ts diff --git a/src/SocketApp.ts b/packages/teambition-sdk-core/src/SocketApp.ts similarity index 100% rename from src/SocketApp.ts rename to packages/teambition-sdk-core/src/SocketApp.ts diff --git a/src/fetchs/SocketFetch.ts b/packages/teambition-sdk-core/src/fetchs/SocketFetch.ts similarity index 100% rename from src/fetchs/SocketFetch.ts rename to packages/teambition-sdk-core/src/fetchs/SocketFetch.ts diff --git a/src/index.ts b/packages/teambition-sdk-core/src/index.ts similarity index 59% rename from src/index.ts rename to packages/teambition-sdk-core/src/index.ts index e8b5a752d..81cb5aeb1 100644 --- a/src/index.ts +++ b/packages/teambition-sdk-core/src/index.ts @@ -1,14 +1,14 @@ /// import 'tslib' -import { forEach, clone, uuid, concat, dropEle } from './utils/index' +import { forEach, clone, uuid, concat, dropEle, pagination, capitalizeFirstLetter } from './utils/index' -export const Utils = { forEach, clone, uuid, concat, dropEle } +export const Utils = { forEach, clone, uuid, concat, dropEle, pagination, capitalizeFirstLetter } +export { PagingQuery, UrlPagingQuery } from './utils/internalTypes' export { eventParser } from './sockets/EventParser' // export apis import './sockets/SocketClient' -import './apis' import './schemas' export * from './schemas' diff --git a/src/schemas/Activity.ts b/packages/teambition-sdk-core/src/schemas/Activity.ts similarity index 100% rename from src/schemas/Activity.ts rename to packages/teambition-sdk-core/src/schemas/Activity.ts diff --git a/src/schemas/Application.ts b/packages/teambition-sdk-core/src/schemas/Application.ts similarity index 100% rename from src/schemas/Application.ts rename to packages/teambition-sdk-core/src/schemas/Application.ts diff --git a/src/schemas/Collection.ts b/packages/teambition-sdk-core/src/schemas/Collection.ts similarity index 100% rename from src/schemas/Collection.ts rename to packages/teambition-sdk-core/src/schemas/Collection.ts diff --git a/src/schemas/CustomRole.ts b/packages/teambition-sdk-core/src/schemas/CustomRole.ts similarity index 100% rename from src/schemas/CustomRole.ts rename to packages/teambition-sdk-core/src/schemas/CustomRole.ts diff --git a/src/schemas/DefaultRole.ts b/packages/teambition-sdk-core/src/schemas/DefaultRole.ts similarity index 100% rename from src/schemas/DefaultRole.ts rename to packages/teambition-sdk-core/src/schemas/DefaultRole.ts diff --git a/src/schemas/Entry.ts b/packages/teambition-sdk-core/src/schemas/Entry.ts similarity index 100% rename from src/schemas/Entry.ts rename to packages/teambition-sdk-core/src/schemas/Entry.ts diff --git a/src/schemas/Entrycategory.ts b/packages/teambition-sdk-core/src/schemas/Entrycategory.ts similarity index 100% rename from src/schemas/Entrycategory.ts rename to packages/teambition-sdk-core/src/schemas/Entrycategory.ts diff --git a/src/schemas/Event.ts b/packages/teambition-sdk-core/src/schemas/Event.ts similarity index 100% rename from src/schemas/Event.ts rename to packages/teambition-sdk-core/src/schemas/Event.ts diff --git a/src/schemas/Feedback.ts b/packages/teambition-sdk-core/src/schemas/Feedback.ts similarity index 100% rename from src/schemas/Feedback.ts rename to packages/teambition-sdk-core/src/schemas/Feedback.ts diff --git a/src/schemas/File.ts b/packages/teambition-sdk-core/src/schemas/File.ts similarity index 100% rename from src/schemas/File.ts rename to packages/teambition-sdk-core/src/schemas/File.ts diff --git a/src/schemas/Group.ts b/packages/teambition-sdk-core/src/schemas/Group.ts similarity index 100% rename from src/schemas/Group.ts rename to packages/teambition-sdk-core/src/schemas/Group.ts diff --git a/src/schemas/HomeActivity.ts b/packages/teambition-sdk-core/src/schemas/HomeActivity.ts similarity index 100% rename from src/schemas/HomeActivity.ts rename to packages/teambition-sdk-core/src/schemas/HomeActivity.ts diff --git a/src/schemas/Like.ts b/packages/teambition-sdk-core/src/schemas/Like.ts similarity index 100% rename from src/schemas/Like.ts rename to packages/teambition-sdk-core/src/schemas/Like.ts diff --git a/src/schemas/Member.ts b/packages/teambition-sdk-core/src/schemas/Member.ts similarity index 100% rename from src/schemas/Member.ts rename to packages/teambition-sdk-core/src/schemas/Member.ts diff --git a/src/schemas/Message.ts b/packages/teambition-sdk-core/src/schemas/Message.ts similarity index 100% rename from src/schemas/Message.ts rename to packages/teambition-sdk-core/src/schemas/Message.ts diff --git a/src/schemas/ObjectLink.ts b/packages/teambition-sdk-core/src/schemas/ObjectLink.ts similarity index 100% rename from src/schemas/ObjectLink.ts rename to packages/teambition-sdk-core/src/schemas/ObjectLink.ts diff --git a/src/schemas/Organization.ts b/packages/teambition-sdk-core/src/schemas/Organization.ts similarity index 100% rename from src/schemas/Organization.ts rename to packages/teambition-sdk-core/src/schemas/Organization.ts diff --git a/src/schemas/Post.ts b/packages/teambition-sdk-core/src/schemas/Post.ts similarity index 100% rename from src/schemas/Post.ts rename to packages/teambition-sdk-core/src/schemas/Post.ts diff --git a/src/schemas/Preference.ts b/packages/teambition-sdk-core/src/schemas/Preference.ts similarity index 100% rename from src/schemas/Preference.ts rename to packages/teambition-sdk-core/src/schemas/Preference.ts diff --git a/src/schemas/Project.ts b/packages/teambition-sdk-core/src/schemas/Project.ts similarity index 100% rename from src/schemas/Project.ts rename to packages/teambition-sdk-core/src/schemas/Project.ts diff --git a/src/schemas/Room.ts b/packages/teambition-sdk-core/src/schemas/Room.ts similarity index 100% rename from src/schemas/Room.ts rename to packages/teambition-sdk-core/src/schemas/Room.ts diff --git a/src/schemas/Stage.ts b/packages/teambition-sdk-core/src/schemas/Stage.ts similarity index 100% rename from src/schemas/Stage.ts rename to packages/teambition-sdk-core/src/schemas/Stage.ts diff --git a/src/schemas/Subscribe.ts b/packages/teambition-sdk-core/src/schemas/Subscribe.ts similarity index 100% rename from src/schemas/Subscribe.ts rename to packages/teambition-sdk-core/src/schemas/Subscribe.ts diff --git a/src/schemas/Subtask.ts b/packages/teambition-sdk-core/src/schemas/Subtask.ts similarity index 100% rename from src/schemas/Subtask.ts rename to packages/teambition-sdk-core/src/schemas/Subtask.ts diff --git a/src/schemas/Tag.ts b/packages/teambition-sdk-core/src/schemas/Tag.ts similarity index 100% rename from src/schemas/Tag.ts rename to packages/teambition-sdk-core/src/schemas/Tag.ts diff --git a/src/schemas/TapChart.ts b/packages/teambition-sdk-core/src/schemas/TapChart.ts similarity index 100% rename from src/schemas/TapChart.ts rename to packages/teambition-sdk-core/src/schemas/TapChart.ts diff --git a/src/schemas/TapDashboard.ts b/packages/teambition-sdk-core/src/schemas/TapDashboard.ts similarity index 100% rename from src/schemas/TapDashboard.ts rename to packages/teambition-sdk-core/src/schemas/TapDashboard.ts diff --git a/src/schemas/TapQuestion.ts b/packages/teambition-sdk-core/src/schemas/TapQuestion.ts similarity index 100% rename from src/schemas/TapQuestion.ts rename to packages/teambition-sdk-core/src/schemas/TapQuestion.ts diff --git a/src/schemas/Task.ts b/packages/teambition-sdk-core/src/schemas/Task.ts similarity index 100% rename from src/schemas/Task.ts rename to packages/teambition-sdk-core/src/schemas/Task.ts diff --git a/src/schemas/Tasklist.ts b/packages/teambition-sdk-core/src/schemas/Tasklist.ts similarity index 100% rename from src/schemas/Tasklist.ts rename to packages/teambition-sdk-core/src/schemas/Tasklist.ts diff --git a/src/schemas/Team.ts b/packages/teambition-sdk-core/src/schemas/Team.ts similarity index 100% rename from src/schemas/Team.ts rename to packages/teambition-sdk-core/src/schemas/Team.ts diff --git a/src/schemas/UserMe.ts b/packages/teambition-sdk-core/src/schemas/UserMe.ts similarity index 100% rename from src/schemas/UserMe.ts rename to packages/teambition-sdk-core/src/schemas/UserMe.ts diff --git a/src/schemas/index.ts b/packages/teambition-sdk-core/src/schemas/index.ts similarity index 100% rename from src/schemas/index.ts rename to packages/teambition-sdk-core/src/schemas/index.ts diff --git a/src/sockets/EventMaps.ts b/packages/teambition-sdk-core/src/sockets/EventMaps.ts similarity index 100% rename from src/sockets/EventMaps.ts rename to packages/teambition-sdk-core/src/sockets/EventMaps.ts diff --git a/src/sockets/EventParser.ts b/packages/teambition-sdk-core/src/sockets/EventParser.ts similarity index 100% rename from src/sockets/EventParser.ts rename to packages/teambition-sdk-core/src/sockets/EventParser.ts diff --git a/src/sockets/SocketClient.ts b/packages/teambition-sdk-core/src/sockets/SocketClient.ts similarity index 100% rename from src/sockets/SocketClient.ts rename to packages/teambition-sdk-core/src/sockets/SocketClient.ts diff --git a/src/teambition.ts b/packages/teambition-sdk-core/src/teambition.ts similarity index 100% rename from src/teambition.ts rename to packages/teambition-sdk-core/src/teambition.ts diff --git a/src/testable.ts b/packages/teambition-sdk-core/src/testable.ts similarity index 100% rename from src/testable.ts rename to packages/teambition-sdk-core/src/testable.ts diff --git a/src/utils/Dirty.ts b/packages/teambition-sdk-core/src/utils/Dirty.ts similarity index 100% rename from src/utils/Dirty.ts rename to packages/teambition-sdk-core/src/utils/Dirty.ts diff --git a/src/utils/Logger.ts b/packages/teambition-sdk-core/src/utils/Logger.ts similarity index 100% rename from src/utils/Logger.ts rename to packages/teambition-sdk-core/src/utils/Logger.ts diff --git a/src/utils/helper.ts b/packages/teambition-sdk-core/src/utils/helper.ts similarity index 100% rename from src/utils/helper.ts rename to packages/teambition-sdk-core/src/utils/helper.ts diff --git a/src/utils/index.ts b/packages/teambition-sdk-core/src/utils/index.ts similarity index 100% rename from src/utils/index.ts rename to packages/teambition-sdk-core/src/utils/index.ts diff --git a/src/utils/internalTypes.ts b/packages/teambition-sdk-core/src/utils/internalTypes.ts similarity index 100% rename from src/utils/internalTypes.ts rename to packages/teambition-sdk-core/src/utils/internalTypes.ts diff --git a/test/SDKFetch.spec.ts b/packages/teambition-sdk-core/test/SDKFetch.spec.ts similarity index 100% rename from test/SDKFetch.spec.ts rename to packages/teambition-sdk-core/test/SDKFetch.spec.ts diff --git a/test/app.ts b/packages/teambition-sdk-core/test/app.ts similarity index 94% rename from test/app.ts rename to packages/teambition-sdk-core/test/app.ts index b4db5b3b9..0d4b63421 100644 --- a/test/app.ts +++ b/packages/teambition-sdk-core/test/app.ts @@ -9,6 +9,5 @@ export * from './utils/httpErrorSpec' export * from './mock/MockSpec' -import './apis' import './sockets' import './net' diff --git a/test/index.ts b/packages/teambition-sdk-core/test/index.ts similarity index 64% rename from test/index.ts rename to packages/teambition-sdk-core/test/index.ts index cf648d9d6..f9572a8f3 100644 --- a/test/index.ts +++ b/packages/teambition-sdk-core/test/index.ts @@ -16,15 +16,5 @@ export function createSdk() { return sdk } -export function createSdkWithoutRDB() { - return new SDK() -} - -export function loadRDB(sdk: SDK) { - const database = new Database(DataStoreType.MEMORY, false, `teambition-sdk-test`, 1) - return sdk.initReactiveDB(database) -} - export * from '../src/index' export * from '../src/utils/index' -export * from '../mock/index' diff --git a/test/mock/MockFetch.ts b/packages/teambition-sdk-core/test/mock/MockFetch.ts similarity index 92% rename from test/mock/MockFetch.ts rename to packages/teambition-sdk-core/test/mock/MockFetch.ts index a21932c00..b380f5c44 100644 --- a/test/mock/MockFetch.ts +++ b/packages/teambition-sdk-core/test/mock/MockFetch.ts @@ -1,4 +1,5 @@ -import { Backend, SDKFetch } from '../index' +import { Backend } from 'teambition-sdk-testutil' +import { SDKFetch } from '../index' function throwIfSlashPath(path: string) { if (path.charAt(0) === '/') { diff --git a/test/mock/MockSpec.ts b/packages/teambition-sdk-core/test/mock/MockSpec.ts similarity index 98% rename from test/mock/MockSpec.ts rename to packages/teambition-sdk-core/test/mock/MockSpec.ts index 4efdc6df2..345db8c86 100644 --- a/test/mock/MockSpec.ts +++ b/packages/teambition-sdk-core/test/mock/MockSpec.ts @@ -2,7 +2,7 @@ import * as chai from 'chai' import * as sinon from 'sinon' import * as sinonChai from 'sinon-chai' -import { Backend, parseObject, reParseQuery } from '../index' +import { Backend, parseObject, reParseQuery } from 'teambition-sdk-testutil' import { describe, it, beforeEach } from 'tman' const expect = chai.expect diff --git a/test/net/http.ts b/packages/teambition-sdk-core/test/net/http.ts similarity index 100% rename from test/net/http.ts rename to packages/teambition-sdk-core/test/net/http.ts diff --git a/test/net/index.ts b/packages/teambition-sdk-core/test/net/index.ts similarity index 56% rename from test/net/index.ts rename to packages/teambition-sdk-core/test/net/index.ts index 0f4580329..4c53ede0a 100644 --- a/test/net/index.ts +++ b/packages/teambition-sdk-core/test/net/index.ts @@ -1,3 +1,2 @@ -import './asyncLoadRDB' import './net' import './http' diff --git a/test/net/net.ts b/packages/teambition-sdk-core/test/net/net.ts similarity index 97% rename from test/net/net.ts rename to packages/teambition-sdk-core/test/net/net.ts index 51f208ef7..f88305b70 100644 --- a/test/net/net.ts +++ b/packages/teambition-sdk-core/test/net/net.ts @@ -4,11 +4,13 @@ import { Database, DataStoreType } from 'reactivedb' import { expect, use } from 'chai' import { spy } from 'sinon' import * as SinonChai from 'sinon-chai' +import { Backend, EventsFixture } from 'teambition-sdk-testutil' import '../../src/schemas' import { schemas, CacheStrategy } from '../../src/SDK' -import { Net, Backend, SDKFetch, forEach, uuid, Http, EventSchema, } from '..' +import { Net, SDKFetch, forEach, uuid, Http, EventSchema, } from '..' import { ApiResult } from '../../src/Net/Net' -import { normalEvent, projectEvents } from '../fixtures/events.fixture' + +const { normalEvent, projectEvents } = EventsFixture use(SinonChai) @@ -18,10 +20,13 @@ describe('Net test', () => { let database: Database let version = 1 let subscription: Subscription | undefined + let spyFetch: sinon.SinonSpy + const sdkFetch = new SDKFetch() const apiHost = sdkFetch.getAPIHost() const path = 'test' const http = new Http(`${apiHost}/${path}`) + beforeEach(() => { httpBackend = new Backend() net = new Net(schemas) @@ -35,6 +40,7 @@ describe('Net test', () => { afterEach(function* () { httpBackend.restore() + spyFetch && spyFetch.restore() if (subscription instanceof Subscription) { subscription.unsubscribe() } @@ -212,7 +218,7 @@ describe('Net test', () => { httpBackend.whenGET(`${apiHost}/${path}`) .respond(projectEvents) - const spyFetch = spy(sdkFetch, 'get') + spyFetch = spy(sdkFetch, 'get') const newLocation = 'new_event_location' @@ -256,15 +262,13 @@ describe('Net test', () => { expect(spyFetch.callCount).to.equal(2) expect(events.length).to.equal(projectEvents.length + 1) }) - - spyFetch.restore() }) - it('should handle empty Array', function* () { + it.skip('should handle empty Array', function* () { httpBackend.whenGET(`${apiHost}/${path}`) .respond([]) - const spyFetch = spy(sdkFetch, 'get') + spyFetch = spy(sdkFetch, 'get') const newLocation = 'new_event_location' @@ -308,8 +312,6 @@ describe('Net test', () => { expect(spyFetch.callCount).to.equal(2) expect(events.length).to.equal(1) }) - - spyFetch.restore() }) it('should get result from cached Response and consumed by `values`', function* () { @@ -444,7 +446,7 @@ describe('Net test', () => { expect(r).to.deep.equal(projectEvents) }) - const spyFetch = spy(sdkFetch, 'get') + spyFetch = spy(sdkFetch, 'get') const newLocation = 'new_event_location' diff --git a/test/sockets/eventParser.spec.ts b/packages/teambition-sdk-core/test/sockets/eventParser.spec.ts similarity index 95% rename from test/sockets/eventParser.spec.ts rename to packages/teambition-sdk-core/test/sockets/eventParser.spec.ts index 462588772..9519db840 100644 --- a/test/sockets/eventParser.spec.ts +++ b/packages/teambition-sdk-core/test/sockets/eventParser.spec.ts @@ -1,7 +1,9 @@ -import { eventParser, RequestEvent } from '../index' +import { RequestEvent } from 'teambition-sdk-testutil' import { describe, beforeEach, it } from 'tman' import { expect } from 'chai' +import { eventParser } from '../index' + describe('eventParser', () => { let event: RequestEvent diff --git a/test/sockets/index.ts b/packages/teambition-sdk-core/test/sockets/index.ts similarity index 100% rename from test/sockets/index.ts rename to packages/teambition-sdk-core/test/sockets/index.ts diff --git a/test/sockets/sockets.spec.ts b/packages/teambition-sdk-core/test/sockets/sockets.spec.ts similarity index 95% rename from test/sockets/sockets.spec.ts rename to packages/teambition-sdk-core/test/sockets/sockets.spec.ts index 0cb0527ef..bdfb49015 100644 --- a/test/sockets/sockets.spec.ts +++ b/packages/teambition-sdk-core/test/sockets/sockets.spec.ts @@ -1,6 +1,7 @@ import { describe, beforeEach, afterEach, it } from 'tman' import { expect } from 'chai' -import { createSdk, SDK, SocketMock, SDKFetch } from '../' +import { SocketMock } from 'teambition-sdk-testutil' +import { createSdk, SDK, SDKFetch } from '../' import { restore } from '../utils' import * as sinon from 'sinon' import { Logger } from 'reactivedb' diff --git a/packages/teambition-sdk-core/test/tsconfig.json b/packages/teambition-sdk-core/test/tsconfig.json new file mode 100644 index 000000000..38c4e91ba --- /dev/null +++ b/packages/teambition-sdk-core/test/tsconfig.json @@ -0,0 +1,25 @@ +{ + "files": [ + "app.ts" + ], + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + + "outDir": "../spec-js", + "target": "ES2015", + + "sourceMap": true, + "inlineSources": true, + "diagnostics": true, + "pretty": true, + "experimentalDecorators": true, + "suppressImplicitAnyIndexErrors": true, + "types": [ + "node", + "chai", + "sinon", + "sinon-chai" + ] + } +} diff --git a/test/utils.ts b/packages/teambition-sdk-core/test/utils.ts similarity index 100% rename from test/utils.ts rename to packages/teambition-sdk-core/test/utils.ts diff --git a/test/utils/httpErrorSpec.ts b/packages/teambition-sdk-core/test/utils/httpErrorSpec.ts similarity index 92% rename from test/utils/httpErrorSpec.ts rename to packages/teambition-sdk-core/test/utils/httpErrorSpec.ts index 8f2172e9e..e4ba9c2c5 100644 --- a/test/utils/httpErrorSpec.ts +++ b/packages/teambition-sdk-core/test/utils/httpErrorSpec.ts @@ -1,8 +1,9 @@ import * as chai from 'chai' import { Subject } from 'rxjs/Subject' import { describe, it, beforeEach, afterEach } from 'tman' +import { Backend } from 'teambition-sdk-testutil' -import { Http, Backend, HttpErrorMessage, SDKFetch } from '../index' +import { Http, HttpErrorMessage, SDKFetch } from '../index' const expect = chai.expect diff --git a/test/utils/utils.ts b/packages/teambition-sdk-core/test/utils/utils.ts similarity index 100% rename from test/utils/utils.ts rename to packages/teambition-sdk-core/test/utils/utils.ts diff --git a/packages/teambition-sdk-core/tsconfig.json b/packages/teambition-sdk-core/tsconfig.json new file mode 100644 index 000000000..9b0fd1e35 --- /dev/null +++ b/packages/teambition-sdk-core/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "target": "es6", + "importHelpers": true, + "experimentalDecorators": true, + "inlineSourceMap": true, + "outDir": ".tmp", + "module": "commonjs", + "emitDecoratorMetadata": true, + "types": [ + "node" + ], + "typeRoots": [ + "node_modules/@types" + ], + "baseUrl": ".", + "paths": { + "fixtures/*": ["../../fixtures/*"] + }, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "suppressImplicitAnyIndexErrors": true + }, + "exclude": [ + "node_modules", + "tools/build", + "dist" + ], + "compileOnSave": false +} diff --git a/packages/teambition-sdk-request/package.json b/packages/teambition-sdk-request/package.json new file mode 100644 index 000000000..acfe00445 --- /dev/null +++ b/packages/teambition-sdk-request/package.json @@ -0,0 +1,67 @@ +{ + "name": "teambition-sdk-request", + "version": "0.8.13", + "description": "Front-End SDK (Request) for Teambition", + "main": "./dist/cjs/index.js", + "typings": "./dist/cjs/index.d.ts", + "scripts": { + "build_cjs": "rm -rf dist/cjs && tsc src/index.ts -m commonjs --outDir dist/cjs --sourcemap --inlineSources --target ES5 -d --diagnostics --pretty --strict --noUnusedLocals --noUnusedParameters --experimentalDecorators --suppressImplicitAnyIndexErrors --moduleResolution node --importHelpers --noEmitHelpers --lib es5,es2015.iterable,es2015.collection,es2015.promise,es2015.core,dom", + "build_test": "rm -rf spec-js && tsc --project test", + "lint": "tslint --project . --config ../../tslint.json", + "test": "npm run lint && npm run build_test && tman --mocha spec-js/test/app.js", + "watch_test": "tsc --project test --watch --skipLibCheck", + "watch": "npm run watch_test & ts-node ../../tools/tasks/test.ts $!" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/teambition/teambition-sdk.git" + }, + "keywords": [ + "teambition", + "sdk", + "teambition-sdk" + ], + "author": "lynweklm@gmail.com", + "license": "MIT", + "bugs": { + "url": "https://github.com/teambition/teambition-sdk/issues" + }, + "homepage": "https://github.com/teambition/teambition-sdk#readme", + "peerDependencies": { + "rxjs": "^5.2.0", + "tslib": "^1.6.0" + }, + "devDependencies": { + "@types/chai": "^4.0.1", + "@types/lodash": "^4.14.64", + "@types/node": "^8.0.14", + "@types/sinon": "^2.3.3", + "@types/sinon-chai": "^2.7.28", + "chai": "^4.1.0", + "coveralls": "^2.13.1", + "fetch-mock": "^5.10.0", + "google-closure-compiler-js": "^20170521.0.0", + "isomorphic-fetch": "^2.2.1", + "jsonrpc-lite": "^1.2.3", + "madge": "^1.6.0", + "moment": "^2.18.1", + "node-watch": "^0.5.4", + "nyc": "^11.0.1", + "reactivedb": "~0.9.9", + "rollup": "^0.42.0", + "rollup-plugin-alias": "^1.3.1", + "rollup-plugin-commonjs": "^8.0.2", + "rollup-plugin-node-resolve": "^3.0.0", + "rxjs": "^5.4.2", + "sinon": "^2.3.8", + "sinon-chai": "^2.11.0", + "teambition-sdk-core": "^0.8.13", + "teambition-sdk-testutil": "^0.8.13", + "tman": "^1.7.1", + "ts-node": "^3.2.0", + "tslib": "^1.7.1", + "tslint": "^5.5.0", + "tslint-eslint-rules": "^4.1.1", + "typescript": "^2.4.2" + } +} diff --git a/src/apis/event/EventGenerator.ts b/packages/teambition-sdk-request/src/event/EventGenerator.ts similarity index 97% rename from src/apis/event/EventGenerator.ts rename to packages/teambition-sdk-request/src/event/EventGenerator.ts index 14b31cba0..03813e449 100644 --- a/src/apis/event/EventGenerator.ts +++ b/packages/teambition-sdk-request/src/event/EventGenerator.ts @@ -1,6 +1,5 @@ -import { EventSchema } from '../../schemas/Event' +import { EventSchema, Utils } from 'teambition-sdk-core' import { isRecurrence } from './utils' -import { clone } from '../../utils' import { EventId } from 'teambition-types' const { rrulestr } = require('rrule') @@ -36,7 +35,7 @@ export class EventGenerator implements IterableIterator // 从给予的 startDate 和 endDate 生成一个 EventSchema 对象; // 当用于普通日程,不需要提供参数。 private makeEvent(timeframe?: Timeframe): EventSchema { - const target = clone(this.event) + const target = Utils.clone(this.event) if (!this.isRecurrence || !timeframe) { return target diff --git a/src/apis/event/README.md b/packages/teambition-sdk-request/src/event/README.md similarity index 100% rename from src/apis/event/README.md rename to packages/teambition-sdk-request/src/event/README.md diff --git a/src/apis/event/get.ts b/packages/teambition-sdk-request/src/event/get.ts similarity index 79% rename from src/apis/event/get.ts rename to packages/teambition-sdk-request/src/event/get.ts index 28777b0af..609a2679a 100644 --- a/src/apis/event/get.ts +++ b/packages/teambition-sdk-request/src/event/get.ts @@ -1,12 +1,11 @@ import 'rxjs/add/operator/toArray' import { Observable } from 'rxjs/Observable' import { QueryToken } from 'reactivedb' -import { SDKFetch } from '../../SDKFetch' -import { SDK, CacheStrategy } from '../../SDK' -import { EventSchema } from '../../schemas/Event' -import { EventGenerator } from './EventGenerator' +import { CacheStrategy, SDK, SDKFetch, EventSchema } from 'teambition-sdk-core' import { EventId } from 'teambition-types' +import { EventGenerator } from './EventGenerator' + export function getEventFetch( this: SDKFetch, eventId: EventId, @@ -17,7 +16,8 @@ export function getEventFetch( SDKFetch.prototype.getEvent = getEventFetch -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { getEvent: typeof getEventFetch } @@ -46,7 +46,8 @@ export function getEvent( SDK.prototype.getEvent = getEvent -declare module '../../SDK' { +declare module 'teambition-sdk-core/dist/cjs/SDK' { + // tslint:disable-next-line no-shadowed-variable interface SDK { getEvent: typeof getEvent } diff --git a/packages/teambition-sdk-request/src/event/index.ts b/packages/teambition-sdk-request/src/event/index.ts new file mode 100644 index 000000000..2c11ee1f3 --- /dev/null +++ b/packages/teambition-sdk-request/src/event/index.ts @@ -0,0 +1,4 @@ +import './get' + +export { EventGenerator } from './EventGenerator' +export { isRecurrence } from './utils' diff --git a/src/apis/event/utils.ts b/packages/teambition-sdk-request/src/event/utils.ts similarity index 65% rename from src/apis/event/utils.ts rename to packages/teambition-sdk-request/src/event/utils.ts index 3fc89aa5f..cae3b91c1 100644 --- a/src/apis/event/utils.ts +++ b/packages/teambition-sdk-request/src/event/utils.ts @@ -1,3 +1,3 @@ -import { EventSchema } from '../../schemas/Event' +import { EventSchema } from 'teambition-sdk-core' export const isRecurrence = (event: EventSchema) => event.recurrence && event.recurrence.length diff --git a/src/apis/file/get.ts b/packages/teambition-sdk-request/src/file/get.ts similarity index 75% rename from src/apis/file/get.ts rename to packages/teambition-sdk-request/src/file/get.ts index acf6fbb32..c59357459 100644 --- a/src/apis/file/get.ts +++ b/packages/teambition-sdk-request/src/file/get.ts @@ -1,8 +1,6 @@ import { Observable } from 'rxjs/Observable' import { QueryToken } from 'reactivedb' -import { SDK, CacheStrategy } from '../../SDK' -import { SDKFetch } from '../../SDKFetch' -import { FileSchema } from '../../schemas/File' +import { CacheStrategy, SDK, SDKFetch, FileSchema } from 'teambition-sdk-core' import { FileId } from 'teambition-types' export function getFileFetch( @@ -15,7 +13,8 @@ export function getFileFetch( SDKFetch.prototype.getFile = getFileFetch -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { getFile: typeof getFileFetch } @@ -43,7 +42,8 @@ export function getFile ( SDK.prototype.getFile = getFile -declare module '../../SDK' { +declare module 'teambition-sdk-core/dist/cjs/SDK' { + // tslint:disable-next-line no-shadowed-variable interface SDK { getFile: typeof getFile } diff --git a/src/apis/event/index.ts b/packages/teambition-sdk-request/src/file/index.ts similarity index 100% rename from src/apis/event/index.ts rename to packages/teambition-sdk-request/src/file/index.ts diff --git a/src/apis/index.ts b/packages/teambition-sdk-request/src/index.ts similarity index 80% rename from src/apis/index.ts rename to packages/teambition-sdk-request/src/index.ts index a797f7d2f..1bc4c1f9d 100644 --- a/src/apis/index.ts +++ b/packages/teambition-sdk-request/src/index.ts @@ -8,3 +8,5 @@ import './user' import './project' import './search' import './organization' + +export { EventGenerator } from './event' diff --git a/src/apis/like/get.ts b/packages/teambition-sdk-request/src/like/get.ts similarity index 78% rename from src/apis/like/get.ts rename to packages/teambition-sdk-request/src/like/get.ts index af3b91992..3c5eb757d 100644 --- a/src/apis/like/get.ts +++ b/packages/teambition-sdk-request/src/like/get.ts @@ -1,8 +1,6 @@ import { Observable } from 'rxjs/Observable' import { QueryToken } from 'reactivedb' -import { LikeSchema } from '../../schemas/Like' -import { SDKFetch } from '../../SDKFetch' -import { SDK, CacheStrategy } from '../../SDK' +import { CacheStrategy, LikeSchema, SDK, SDKFetch } from 'teambition-sdk-core' import { DetailObjectId, DetailObjectType } from 'teambition-types' export function getLikeFetch ( @@ -17,7 +15,8 @@ export function getLikeFetch ( SDKFetch.prototype.getLike = getLikeFetch -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { getLike: typeof getLikeFetch } @@ -40,7 +39,8 @@ export function getLike ( SDK.prototype.getLike = getLike -declare module '../../SDK' { +declare module 'teambition-sdk-core/dist/cjs/SDK' { + // tslint:disable-next-line no-shadowed-variable interface SDK { getLike: typeof getLike } diff --git a/src/apis/like/index.ts b/packages/teambition-sdk-request/src/like/index.ts similarity index 100% rename from src/apis/like/index.ts rename to packages/teambition-sdk-request/src/like/index.ts diff --git a/src/apis/like/toggleLike.ts b/packages/teambition-sdk-request/src/like/toggleLike.ts similarity index 80% rename from src/apis/like/toggleLike.ts rename to packages/teambition-sdk-request/src/like/toggleLike.ts index c40d2f942..3e4628ee2 100644 --- a/src/apis/like/toggleLike.ts +++ b/packages/teambition-sdk-request/src/like/toggleLike.ts @@ -1,7 +1,5 @@ import { Observable } from 'rxjs/Observable' -import { LikeSchema } from '../../schemas/Like' -import { SDKFetch } from '../../SDKFetch' -import { SDK } from '../../SDK' +import { LikeSchema, SDK, SDKFetch } from 'teambition-sdk-core' import { DetailObjectId, DetailObjectType } from 'teambition-types' export function toggleLikeFetch ( @@ -21,7 +19,8 @@ export function toggleLikeFetch ( SDKFetch.prototype.toggleLike = toggleLikeFetch -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { toggleLike: typeof toggleLikeFetch } @@ -43,7 +42,8 @@ export function toggleLike ( SDK.prototype.toggleLike = toggleLike -declare module '../../SDK' { +declare module 'teambition-sdk-core/dist/cjs/SDK' { + // tslint:disable-next-line no-shadowed-variable interface SDK { toggleLike: typeof toggleLike } diff --git a/src/apis/my/count.ts b/packages/teambition-sdk-request/src/my/count.ts similarity index 71% rename from src/apis/my/count.ts rename to packages/teambition-sdk-request/src/my/count.ts index 656fe53c8..2959f93cc 100644 --- a/src/apis/my/count.ts +++ b/packages/teambition-sdk-request/src/my/count.ts @@ -1,6 +1,5 @@ import { Observable } from 'rxjs/Observable' -import { SDKFetch } from '../../SDKFetch' -import { SDK } from '../../SDK' +import { SDK, SDKFetch } from 'teambition-sdk-core' export interface MyCountData { favoritesCount: number @@ -19,7 +18,8 @@ export function getMyCountFetch( SDKFetch.prototype.getMyCount = getMyCountFetch -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { getMyCount: typeof getMyCountFetch } @@ -33,7 +33,8 @@ export function getMyCount( SDK.prototype.getMyCount = getMyCount -declare module '../../SDK' { +declare module 'teambition-sdk-core/dist/cjs/SDK' { + // tslint:disable-next-line no-shadowed-variable interface SDK { getMyCount: typeof getMyCount } diff --git a/src/apis/my/index.ts b/packages/teambition-sdk-request/src/my/index.ts similarity index 100% rename from src/apis/my/index.ts rename to packages/teambition-sdk-request/src/my/index.ts diff --git a/src/apis/my/recent.ts b/packages/teambition-sdk-request/src/my/recent.ts similarity index 88% rename from src/apis/my/recent.ts rename to packages/teambition-sdk-request/src/my/recent.ts index 48056c0be..addb6b4cb 100644 --- a/src/apis/my/recent.ts +++ b/packages/teambition-sdk-request/src/my/recent.ts @@ -1,11 +1,9 @@ import { Observable } from 'rxjs/Observable' import { QueryToken } from 'reactivedb' -import { forEach } from '../../utils' -import { SDKFetch } from '../../SDKFetch' -import { SDK, CacheStrategy } from '../../SDK' -import { TaskSchema, EventSchema, SubtaskSchema } from '../../schemas' +import { CacheStrategy, SDK, SDKFetch, TaskSchema, EventSchema, SubtaskSchema, Utils } from 'teambition-sdk-core' import { UserId } from 'teambition-types' -import { EventGenerator } from '../event/EventGenerator' + +import { EventGenerator } from '../event' export interface RecentTaskData extends TaskSchema { type: 'task' @@ -26,8 +24,6 @@ export interface MyRecentQuery { export type RecentData = RecentEventData | RecentSubtaskData | RecentTaskData -export type RecentResult = EventGenerator | RecentSubtaskData | RecentTaskData - export function getMyRecentFetch( this: SDKFetch, query: MyRecentQuery @@ -37,12 +33,15 @@ export function getMyRecentFetch( SDKFetch.prototype.getMyRecent = getMyRecentFetch -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { getMyRecent: typeof getMyRecentFetch } } +export type RecentResult = EventGenerator | RecentSubtaskData | RecentTaskData + export function getMyRecent( this: SDK, userId: UserId, @@ -80,7 +79,7 @@ export function getMyRecent( }) taskToken = taskToken.map(task$ => task$ - .do(tasks => forEach(tasks, task => { + .do(tasks => Utils.forEach(tasks, task => { task.type = 'task' }) )) @@ -160,7 +159,7 @@ export function getMyRecent( }) subtaskToken = subtaskToken.map(task$ => task$ - .do(subtasks => forEach(subtasks, subtask => { + .do(subtasks => Utils.forEach(subtasks, subtask => { subtask.type = 'subtask' }) )) @@ -170,7 +169,8 @@ export function getMyRecent( SDK.prototype.getMyRecent = getMyRecent -declare module '../../SDK' { +declare module 'teambition-sdk-core/dist/cjs/SDK' { + // tslint:disable-next-line no-shadowed-variable interface SDK { getMyRecent: typeof getMyRecent } diff --git a/src/apis/organization/index.ts b/packages/teambition-sdk-request/src/organization/index.ts similarity index 100% rename from src/apis/organization/index.ts rename to packages/teambition-sdk-request/src/organization/index.ts diff --git a/src/apis/organization/projects.ts b/packages/teambition-sdk-request/src/organization/projects.ts similarity index 91% rename from src/apis/organization/projects.ts rename to packages/teambition-sdk-request/src/organization/projects.ts index 989efe4aa..8605a1f09 100644 --- a/src/apis/organization/projects.ts +++ b/packages/teambition-sdk-request/src/organization/projects.ts @@ -1,8 +1,8 @@ import { Observable } from 'rxjs/Observable' +import { SDKFetch, ProjectSchema } from 'teambition-sdk-core' import { OrganizationId, TagId } from 'teambition-types' -import { SDKFetch } from '../../SDKFetch' -import { ProjectSchema } from '../../schemas/Project' -import { UrlPagingQuery } from '../../utils/internalTypes' + +import { UrlPagingQuery } from '../utils' export function getAllOrganizationProjects( this: SDKFetch, @@ -58,7 +58,8 @@ SDKFetch.prototype.getStarredOrganizationProjects = getStarredOrganizationProjec SDKFetch.prototype.getOrganizationProjectsByTagId = getOrganizationProjectsByTagId SDKFetch.prototype.getUngroupedOrganizationProjects = getUngroupedOrganizationProjects -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { getAllOrganizationProjects: typeof getAllOrganizationProjects, getJoinedOrganizationProjects: typeof getJoinedOrganizationProjects, diff --git a/src/apis/post/create.ts b/packages/teambition-sdk-request/src/post/create.ts similarity index 76% rename from src/apis/post/create.ts rename to packages/teambition-sdk-request/src/post/create.ts index 35ac241b0..25dbc1188 100644 --- a/src/apis/post/create.ts +++ b/packages/teambition-sdk-request/src/post/create.ts @@ -1,7 +1,5 @@ import { Observable } from 'rxjs/Observable' -import { SDK } from '../../SDK' -import { SDKFetch } from '../../SDKFetch' -import { PostModeOptions, PostSchema } from '../../schemas/Post' +import { SDK, SDKFetch, PostModeOptions, PostSchema } from 'teambition-sdk-core' import { ProjectId, Visibility, FileId, UserId, TagId } from 'teambition-types' export interface CreatePostOptions { @@ -21,7 +19,8 @@ export function createPostFetch(this: SDKFetch, options: CreatePostOptions): Obs SDKFetch.prototype.createPost = createPostFetch -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable export interface SDKFetch { createPost: typeof createPostFetch } @@ -37,7 +36,8 @@ export function createPost (this: SDK, options: CreatePostOptions): Observable

( SDKFetch.prototype.getPosts = getPostsFetch -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { getPosts: typeof getPostsFetch } @@ -71,7 +70,8 @@ export function getAllProjectPosts ( SDK.prototype.getAllProjectPosts = getAllProjectPosts -declare module '../../SDK' { +declare module 'teambition-sdk-core/dist/cjs/SDK' { + // tslint:disable-next-line no-shadowed-variable export interface SDK { getAllProjectPosts: typeof getAllProjectPosts } diff --git a/src/apis/post/index.ts b/packages/teambition-sdk-request/src/post/index.ts similarity index 100% rename from src/apis/post/index.ts rename to packages/teambition-sdk-request/src/post/index.ts diff --git a/src/apis/post/update.ts b/packages/teambition-sdk-request/src/post/update.ts similarity index 77% rename from src/apis/post/update.ts rename to packages/teambition-sdk-request/src/post/update.ts index 4aac21c77..e23b09be0 100644 --- a/src/apis/post/update.ts +++ b/packages/teambition-sdk-request/src/post/update.ts @@ -1,8 +1,6 @@ import { Observable } from 'rxjs/Observable' +import { SDK, SDKFetch, PostModeOptions } from 'teambition-sdk-core' import { FileId, UserId, PostId } from 'teambition-types' -import { SDK } from '../../SDK' -import { SDKFetch } from '../../SDKFetch' -import { PostModeOptions } from '../../schemas/Post' export interface UpdatePostOptions { title?: string @@ -23,7 +21,8 @@ export function updatePostFetch( SDKFetch.prototype.updatePost = updatePostFetch -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { updatePost: typeof updatePostFetch } @@ -44,7 +43,8 @@ export function updatePost( SDK.prototype.updatePost = updatePost -declare module '../../SDK' { +declare module 'teambition-sdk-core/dist/cjs/SDK' { + // tslint:disable-next-line no-shadowed-variable interface SDK { updatePost: typeof updatePost } diff --git a/src/apis/project/index.ts b/packages/teambition-sdk-request/src/project/index.ts similarity index 100% rename from src/apis/project/index.ts rename to packages/teambition-sdk-request/src/project/index.ts diff --git a/src/apis/project/personal.ts b/packages/teambition-sdk-request/src/project/personal.ts similarity index 74% rename from src/apis/project/personal.ts rename to packages/teambition-sdk-request/src/project/personal.ts index f0307b83b..a9808dbb0 100644 --- a/src/apis/project/personal.ts +++ b/packages/teambition-sdk-request/src/project/personal.ts @@ -1,7 +1,7 @@ import { Observable } from 'rxjs/Observable' -import { SDKFetch } from '../../SDKFetch' -import { ProjectSchema } from '../../schemas/Project' -import { UrlPagingQuery } from '../../utils/internalTypes' +import { ProjectSchema, SDKFetch } from 'teambition-sdk-core' + +import { UrlPagingQuery } from '../utils' export type GetPersonalProjectsQueryParams = { isArchived: boolean, @@ -21,7 +21,8 @@ export function getPersonalProjects( SDKFetch.prototype.getPersonalProjects = getPersonalProjects -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { getPersonalProjects: typeof getPersonalProjects } diff --git a/src/apis/search/index.ts b/packages/teambition-sdk-request/src/search/index.ts similarity index 100% rename from src/apis/search/index.ts rename to packages/teambition-sdk-request/src/search/index.ts diff --git a/src/apis/search/members.ts b/packages/teambition-sdk-request/src/search/members.ts similarity index 95% rename from src/apis/search/members.ts rename to packages/teambition-sdk-request/src/search/members.ts index 4251216e6..a13b4b9a1 100644 --- a/src/apis/search/members.ts +++ b/packages/teambition-sdk-request/src/search/members.ts @@ -1,6 +1,6 @@ import { Observable } from 'rxjs/Observable' +import { SDKFetch } from 'teambition-sdk-core' import { UserId, TeamId, ProjectId, OrganizationId, GroupId } from 'teambition-types' -import { SDKFetch } from '../../SDKFetch' /** * 后端从 members/search 接口正常返回的数据结构。 @@ -94,7 +94,8 @@ SDKFetch.prototype.searchMembersInOrganization = searchMembersInOrganization SDKFetch.prototype.searchMembersInGroup = searchMembersInGroup SDKFetch.prototype.searchMembers = searchMembers -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { searchMembersInTeam: typeof searchMembersInTeam, searchMembersInProject: typeof searchMembersInProject, diff --git a/src/apis/task/get.ts b/packages/teambition-sdk-request/src/task/get.ts similarity index 80% rename from src/apis/task/get.ts rename to packages/teambition-sdk-request/src/task/get.ts index eecd7b0b8..c43916f1d 100644 --- a/src/apis/task/get.ts +++ b/packages/teambition-sdk-request/src/task/get.ts @@ -1,8 +1,6 @@ import { Observable } from 'rxjs/Observable' import { QueryToken } from 'reactivedb' -import { SDKFetch } from '../../SDKFetch' -import { SDK, CacheStrategy } from '../../SDK' -import { TaskSchema } from '../../schemas/Task' +import { CacheStrategy, SDK, SDKFetch, TaskSchema } from 'teambition-sdk-core' import { TaskId } from 'teambition-types' export function getTaskFetch( @@ -15,7 +13,8 @@ export function getTaskFetch( SDKFetch.prototype.getTask = getTaskFetch -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { getTask: typeof getTaskFetch } @@ -50,7 +49,8 @@ export function getTask( SDK.prototype.getTask = getTask -declare module '../../SDK' { +declare module 'teambition-sdk-core/dist/cjs/SDK' { + // tslint:disable-next-line no-shadowed-variable interface SDK { getTask: typeof getTask } diff --git a/src/apis/file/index.ts b/packages/teambition-sdk-request/src/task/index.ts similarity index 100% rename from src/apis/file/index.ts rename to packages/teambition-sdk-request/src/task/index.ts diff --git a/src/apis/user/addEmail.ts b/packages/teambition-sdk-request/src/user/addEmail.ts similarity index 69% rename from src/apis/user/addEmail.ts rename to packages/teambition-sdk-request/src/user/addEmail.ts index 201f16f0e..38268fb30 100644 --- a/src/apis/user/addEmail.ts +++ b/packages/teambition-sdk-request/src/user/addEmail.ts @@ -1,6 +1,5 @@ import { Observable } from 'rxjs/Observable' -import { SDK } from '../../SDK' -import { SDKFetch } from '../../SDKFetch' +import { SDK, SDKFetch } from 'teambition-sdk-core' export function addEmailFetch ( this: SDKFetch, @@ -11,7 +10,8 @@ export function addEmailFetch ( SDKFetch.prototype.addEmail = addEmailFetch -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { addEmail: typeof addEmailFetch } @@ -31,7 +31,8 @@ export function addEmail( SDK.prototype.addEmail = addEmail -declare module '../../SDK' { +declare module 'teambition-sdk-core/dist/cjs/SDK' { + // tslint:disable-next-line no-shadowed-variable interface SDK { addEmail: typeof addEmail } diff --git a/src/apis/user/get.ts b/packages/teambition-sdk-request/src/user/get.ts similarity index 67% rename from src/apis/user/get.ts rename to packages/teambition-sdk-request/src/user/get.ts index 89921d330..d71fd0bd6 100644 --- a/src/apis/user/get.ts +++ b/packages/teambition-sdk-request/src/user/get.ts @@ -1,6 +1,5 @@ import { QueryToken } from 'reactivedb' -import { SDK, CacheStrategy } from '../../SDK' -import { UserMe } from '../../schemas/UserMe' +import { SDK, CacheStrategy, UserMe } from 'teambition-sdk-core' export function getUserMe ( this: SDK @@ -15,7 +14,8 @@ export function getUserMe ( SDK.prototype.getUserMe = getUserMe -declare module '../../SDK' { +declare module 'teambition-sdk-core/dist/cjs/SDK' { + // tslint:disable-next-line no-shadowed-variable interface SDK { getUserMe: typeof getUserMe } diff --git a/src/apis/user/index.ts b/packages/teambition-sdk-request/src/user/index.ts similarity index 100% rename from src/apis/user/index.ts rename to packages/teambition-sdk-request/src/user/index.ts index 03bda0ecb..d4a99703d 100644 --- a/src/apis/user/index.ts +++ b/packages/teambition-sdk-request/src/user/index.ts @@ -1,3 +1,3 @@ +import './addEmail' import './get' import './update' -import './addEmail' diff --git a/src/apis/user/update.ts b/packages/teambition-sdk-request/src/user/update.ts similarity index 69% rename from src/apis/user/update.ts rename to packages/teambition-sdk-request/src/user/update.ts index 78b2a6611..dd47e091c 100644 --- a/src/apis/user/update.ts +++ b/packages/teambition-sdk-request/src/user/update.ts @@ -1,6 +1,5 @@ import { Observable } from 'rxjs/Observable' -import { SDK } from '../../SDK' -import { SDKFetch } from '../../SDKFetch' +import { SDK, SDKFetch } from 'teambition-sdk-core' export function updateUserFetch ( this: SDKFetch, @@ -11,7 +10,8 @@ export function updateUserFetch ( SDKFetch.prototype.updateUser = updateUserFetch -declare module '../../SDKFetch' { +declare module 'teambition-sdk-core/dist/cjs/SDKFetch' { + // tslint:disable-next-line no-shadowed-variable interface SDKFetch { updateUser: typeof updateUserFetch } @@ -31,7 +31,8 @@ export function updateUser( SDK.prototype.updateUser = updateUser -declare module '../../SDK' { +declare module 'teambition-sdk-core/dist/cjs/SDK' { + // tslint:disable-next-line no-shadowed-variable interface SDK { updateUser: typeof updateUser } diff --git a/packages/teambition-sdk-request/src/utils.ts b/packages/teambition-sdk-request/src/utils.ts new file mode 100644 index 000000000..1148819ff --- /dev/null +++ b/packages/teambition-sdk-request/src/utils.ts @@ -0,0 +1,37 @@ +import { Utils } from 'teambition-sdk-core' + +export interface PagingQuery { + page: number, + count: number +} + +export interface UrlPagingQuery extends PagingQuery {} + +export interface SqlPagingQuery { + skip: number, + limit: number +} + +const omitKeys = (srcObj: PagingQuery, ...keysToBeOmitted: string[]) => { + const omitKeySet = new Set(keysToBeOmitted) + return Object.keys(srcObj) + .filter((key) => !(omitKeySet.has(key))) + .reduce((destObj, key) => { + destObj[key] = srcObj[key] + return destObj + }, {}) +} + +export const normPagingQuery = ( + query: Partial = {} +): { forUrl: UrlPagingQuery, forSql: SqlPagingQuery } => { + const defaultPaging = { count: 500, page: 1 } + + let q: any = { ...defaultPaging, ...query } + const forUrl = omitKeys(q, 'orderBy') as UrlPagingQuery + + q = { ...q, ...Utils.pagination(q.count, q.page) } + const forSql = omitKeys(q, 'count', 'page') as SqlPagingQuery + + return { forUrl, forSql } +} diff --git a/test/apis/EventGenerator.spec.ts b/packages/teambition-sdk-request/test/apis/EventGenerator.spec.ts similarity index 93% rename from test/apis/EventGenerator.spec.ts rename to packages/teambition-sdk-request/test/apis/EventGenerator.spec.ts index c4c66b2a3..a55b981a4 100644 --- a/test/apis/EventGenerator.spec.ts +++ b/packages/teambition-sdk-request/test/apis/EventGenerator.spec.ts @@ -1,15 +1,17 @@ import { describe, beforeEach, it } from 'tman' import { expect } from 'chai' import * as Moment from 'moment' -import { +import { EventsFixture } from 'teambition-sdk-testutil' +import { EventGenerator } from '../../src/event/EventGenerator' +import { Utils } from 'teambition-sdk-core' + +const { recurrenceByMonth, recurrenceHasEnd, recurrenceStartAtAnExcludedDate, emptyRecurrence, normalEvent -} from '../fixtures/events.fixture' -import { EventGenerator } from '../../src/apis/event/EventGenerator' -import { clone } from '../index' +} = EventsFixture describe('EventGenerator spec', () => { let eventGenerator: EventGenerator @@ -31,7 +33,7 @@ describe('EventGenerator spec', () => { it('should get next event for a recurrent event', () => { const nextEvent = eventGenerator.next() - const expected = clone(recurrenceByMonth); + const expected = Utils.clone(recurrenceByMonth); ['_id', 'startDate', 'endDate'] .forEach(f => { delete nextEvent.value![f] @@ -76,7 +78,7 @@ describe('EventGenerator spec', () => { const egen = new EventGenerator(recurrenceStartAtAnExcludedDate as any) const actual = egen.next().value! delete actual['_id'] - const expected = clone(recurrenceStartAtAnExcludedDate) + const expected = Utils.clone(recurrenceStartAtAnExcludedDate) delete expected['_id'] expected.startDate = '2017-06-07T09:00:00.000Z' expected.endDate = '2017-06-07T10:00:00.000Z' @@ -152,15 +154,20 @@ describe('EventGenerator spec', () => { }) it('takeFrom() an out range Date should return empty array', () => { - const now = new Date - const result = eventGenerator.takeFrom(Moment(now).add(-10, 'year').toDate(), Moment(now).add(-9, 'year').toDate()) + const refDate = recurrenceByMonth.startDate + const fromDate = Moment(refDate).subtract(10, 'years').toDate() + const toDate = Moment(refDate).subtract(9, 'years').toDate() + const result = eventGenerator.takeFrom(fromDate, toDate) + expect(result).to.deep.equal([]) }) it('takeFrom() should return correct values', () => { - const now = new Date - const result = eventGenerator.takeFrom(now, Moment(now).add(10, 'month').toDate()) + const fromDate = new Date('2017-08-01T00:00:00Z') + const toDate = Moment(fromDate).add(10, 'month').toDate() + const result = eventGenerator.takeFrom(fromDate, toDate) const [ first ] = result + expect(result.length).to.equal(10) result.forEach((r, index) => { expect(r.startDate).to.equal(Moment(first.startDate).add(index, 'month').toISOString()) @@ -245,7 +252,7 @@ describe('EventGenerator spec', () => { let startDate = new Date(recurrenceByMonth.startDate) const firstMonthEvent = eventGenerator.after(startDate) delete firstMonthEvent!['_id'] - const firstEvent = clone(recurrenceByMonth) + const firstEvent = Utils.clone(recurrenceByMonth) delete firstEvent['_id'] expect(firstMonthEvent).to.deep.equal(firstEvent) diff --git a/test/apis/event.spec.ts b/packages/teambition-sdk-request/test/apis/event.spec.ts similarity index 88% rename from test/apis/event.spec.ts rename to packages/teambition-sdk-request/test/apis/event.spec.ts index ea0ec4db1..93553910c 100644 --- a/test/apis/event.spec.ts +++ b/packages/teambition-sdk-request/test/apis/event.spec.ts @@ -1,8 +1,9 @@ import * as moment from 'moment' import { describe, beforeEach, afterEach, it } from 'tman' import { expect } from 'chai' -import { createSdk, SDK, SocketMock, EventSchema } from '../index' -import * as Fixture from '../fixtures/events.fixture' +import { SDK, EventSchema } from 'teambition-sdk-core' +import { EventsFixture, SocketMock } from 'teambition-sdk-testutil' +import { createSdk } from '../index' import { mock, restore, equals, looseDeepEqual, clone } from '../utils' describe('EventApi Spec', () => { @@ -22,7 +23,7 @@ describe('EventApi Spec', () => { describe('EventsAPI request spec', () => { it('should get normal event', function* () { - const fixture = Fixture.normalEvent + const fixture = EventsFixture.normalEvent mockResponse(fixture) yield sdk.getEvent(fixture._id) @@ -35,7 +36,7 @@ describe('EventApi Spec', () => { }) it('should get recurrnece event', function* () { - const fixture = Fixture.recurrenceByMonth + const fixture = EventsFixture.recurrenceByMonth mockResponse(fixture) yield sdk.getEvent(fixture._id) @@ -59,7 +60,7 @@ describe('EventApi Spec', () => { }) it('should observe recurrnece event change', function* () { - const fixture = Fixture.recurrenceByMonth + const fixture = EventsFixture.recurrenceByMonth mockResponse(fixture) const signal = sdk.getEvent(fixture._id) @@ -86,7 +87,7 @@ describe('EventApi Spec', () => { }) it('should combine two QueryToken', function* () { - const fixture = Fixture.recurrenceByMonth + const fixture = EventsFixture.recurrenceByMonth mockResponse(fixture) const token1 = sdk.getEvent(fixture._id) @@ -111,7 +112,7 @@ describe('EventApi Spec', () => { describe('EventsAPI socket spec', () => { it('new event should add cache', function* () { - const fixture = Fixture.normalEvent + const fixture = EventsFixture.normalEvent yield socket.emit('new', 'event', '', fixture) @@ -123,7 +124,7 @@ describe('EventApi Spec', () => { }) it('update event should change cache', function* () { - const fixture = Fixture.normalEvent + const fixture = EventsFixture.normalEvent yield sdk.database.insert('Event', fixture) @@ -138,7 +139,7 @@ describe('EventApi Spec', () => { }) it('delete event should delete cache', function* () { - const fixture = Fixture.normalEvent + const fixture = EventsFixture.normalEvent yield sdk.database.insert('Event', fixture) diff --git a/test/apis/file.spec.ts b/packages/teambition-sdk-request/test/apis/file.spec.ts similarity index 82% rename from test/apis/file.spec.ts rename to packages/teambition-sdk-request/test/apis/file.spec.ts index bca361264..27418591b 100644 --- a/test/apis/file.spec.ts +++ b/packages/teambition-sdk-request/test/apis/file.spec.ts @@ -1,7 +1,8 @@ import { describe, beforeEach, afterEach, it } from 'tman' import { expect } from 'chai' -import { createSdk, SDK, SocketMock, FileSchema } from '../index' -import * as Fixture from '../fixtures/files.fixture' +import { SDK, FileSchema } from 'teambition-sdk-core' +import { FilesFixture, SocketMock } from 'teambition-sdk-testutil' +import { createSdk } from '../index' import { mock, restore, looseDeepEqual } from '../utils' describe('FileApi Spec', () => { @@ -21,7 +22,7 @@ describe('FileApi Spec', () => { describe('FileApi request spec', () => { it('should get file', function* () { - const [ fixture ] = Fixture.projectFiles + const [ fixture ] = FilesFixture.projectFiles mockResponse(fixture) yield sdk.getFile(fixture._id) @@ -35,7 +36,7 @@ describe('FileApi Spec', () => { describe('FileApi socket spec', () => { it('new file should add cache', function* () { - const [ fixture ] = Fixture.projectFiles + const [ fixture ] = FilesFixture.projectFiles yield socket.emit('new', 'work', '', fixture) @@ -47,7 +48,7 @@ describe('FileApi Spec', () => { }) it('update file should change cache', function* () { - const [ fixture ] = Fixture.projectFiles + const [ fixture ] = FilesFixture.projectFiles yield sdk.database.insert('File', fixture) @@ -62,7 +63,7 @@ describe('FileApi Spec', () => { }) it('delete file should delete cache', function* () { - const [ fixture ] = Fixture.projectFiles + const [ fixture ] = FilesFixture.projectFiles yield sdk.database.insert('File', fixture) diff --git a/test/apis/index.ts b/packages/teambition-sdk-request/test/apis/index.ts similarity index 100% rename from test/apis/index.ts rename to packages/teambition-sdk-request/test/apis/index.ts index dc47213cf..f084265f0 100644 --- a/test/apis/index.ts +++ b/packages/teambition-sdk-request/test/apis/index.ts @@ -1,11 +1,11 @@ import './event.spec' import './EventGenerator.spec' +import './file.spec' import './like.spec' import './my.spec' +import './organization.spec' import './post.spec' -import './task.spec' -import './user.spec' -import './file.spec' import './project.spec' import './search.spec' -import './organization.spec' +import './task.spec' +import './user.spec' diff --git a/test/apis/like.spec.ts b/packages/teambition-sdk-request/test/apis/like.spec.ts similarity index 89% rename from test/apis/like.spec.ts rename to packages/teambition-sdk-request/test/apis/like.spec.ts index 2df39b09e..99833f1ed 100644 --- a/test/apis/like.spec.ts +++ b/packages/teambition-sdk-request/test/apis/like.spec.ts @@ -1,8 +1,9 @@ 'use strict' import { expect } from 'chai' import { describe, it, beforeEach, afterEach } from 'tman' -import { createSdk, SocketMock, SDK, LikeSchema } from '../index' -import like from '../fixtures/like.fixture' +import { SDK, LikeSchema } from 'teambition-sdk-core' +import { LikeFixture as like, SocketMock } from 'teambition-sdk-testutil' +import { createSdk } from '../index' import { mock, restore } from '../utils' describe('LikeApi Spec: ', () => { diff --git a/test/apis/my.spec.ts b/packages/teambition-sdk-request/test/apis/my.spec.ts similarity index 68% rename from test/apis/my.spec.ts rename to packages/teambition-sdk-request/test/apis/my.spec.ts index ae1362aff..93d410025 100644 --- a/test/apis/my.spec.ts +++ b/packages/teambition-sdk-request/test/apis/my.spec.ts @@ -1,12 +1,23 @@ import { describe, it, beforeEach, afterEach } from 'tman' import { expect } from 'chai' -import { createSdk, SocketMock, SDK, TaskSchema } from '../index' -import { EventGenerator } from '../../src/apis/event/EventGenerator' -import * as Fixture from '../fixtures/my.fixture' +import { SDK, EventSchema, TaskSchema } from 'teambition-sdk-core' +import { MyFixture, SocketMock } from 'teambition-sdk-testutil' +import { createSdk } from '../index' +import { EventGenerator, isRecurrence } from '../../src/event' import { mock, restore } from '../utils' +function normIfRecurrentEvent(myRecent: any[]): any[] { + return myRecent.map((eventOrTask): any => { + if (eventOrTask.type === 'task' || !isRecurrence(eventOrTask as any)) { + return eventOrTask + } + const egen = new EventGenerator(eventOrTask as any) + return egen.next().value + }) +} + describe('MyApi Spec', () => { - const userId = Fixture.myRecent[0]['_executorId'] + const userId = MyFixture.myRecent[0]['_executorId'] let sdk: SDK let mockResponse: (m: T, delay?: number | Promise) => void let socket: SocketMock @@ -23,7 +34,7 @@ describe('MyApi Spec', () => { describe('MyApi request Spec', () => { it('should get my recent data', function* () { - mockResponse(Fixture.myRecent) + mockResponse(MyFixture.myRecent) const token = sdk.getMyRecent(userId, { dueDate: '2017-02-13T03:38:54.252Z', @@ -36,7 +47,7 @@ describe('MyApi Spec', () => { return new Date(x.updated).valueOf() - new Date(y.updated).valueOf() + new Date(x.created).valueOf() - new Date(y.created).valueOf() } - const expected = Fixture.norm(Fixture.myRecent).sort(compareFn) + const expected = normIfRecurrentEvent(MyFixture.myRecent).sort(compareFn) const actual = r.map(_r => { if (_r.type === 'task') { if (!(_r as TaskSchema).recurrence) { @@ -60,10 +71,10 @@ describe('MyApi Spec', () => { }) it('should get my count', function* () { - mockResponse(Fixture.count) + mockResponse(MyFixture.count) const ret = yield sdk.getMyCount() - expect(ret).is.deep.equal(Fixture.count) + expect(ret).is.deep.equal(MyFixture.count) }) }) }) diff --git a/test/apis/organization.spec.ts b/packages/teambition-sdk-request/test/apis/organization.spec.ts similarity index 97% rename from test/apis/organization.spec.ts rename to packages/teambition-sdk-request/test/apis/organization.spec.ts index 8e3a5b357..6a134914a 100644 --- a/test/apis/organization.spec.ts +++ b/packages/teambition-sdk-request/test/apis/organization.spec.ts @@ -1,14 +1,14 @@ import { describe, before, beforeEach, it, afterEach, after } from 'tman' import { expect } from 'chai' import { Scheduler } from 'rxjs' -import { SDKFetch } from '../' +import { SDKFetch } from 'teambition-sdk-core' import { getAllOrganizationProjects, getJoinedOrganizationProjects, getPublicOrganizationProjects, getStarredOrganizationProjects, getUngroupedOrganizationProjects -} from '../../src/apis/organization/projects' +} from '../../src/organization/projects' const fetchMock = require('fetch-mock') diff --git a/test/apis/post.spec.ts b/packages/teambition-sdk-request/test/apis/post.spec.ts similarity index 96% rename from test/apis/post.spec.ts rename to packages/teambition-sdk-request/test/apis/post.spec.ts index 3df03ae61..877955fad 100644 --- a/test/apis/post.spec.ts +++ b/packages/teambition-sdk-request/test/apis/post.spec.ts @@ -1,10 +1,13 @@ import { describe, beforeEach, afterEach, it } from 'tman' import { expect } from 'chai' -import { createSdk, SDK, PostSchema, SocketMock } from '../index' -import { projectPosts, myProjectPosts, tagPosts } from '../fixtures/posts.fixture' +import { SDK, PostSchema } from 'teambition-sdk-core' +import { PostsFixture, SocketMock } from 'teambition-sdk-testutil' +import { createSdk } from '../index' import { mock, restore, equals } from '../utils' import { shuffle } from 'lodash' +const { projectPosts, myProjectPosts, tagPosts } = PostsFixture + describe('PostApi Spec', () => { let sdk: SDK let mockResponse: (m: T, delay?: number | Promise) => void diff --git a/test/apis/project.spec.ts b/packages/teambition-sdk-request/test/apis/project.spec.ts similarity index 96% rename from test/apis/project.spec.ts rename to packages/teambition-sdk-request/test/apis/project.spec.ts index 048454d9b..bbacc843e 100644 --- a/test/apis/project.spec.ts +++ b/packages/teambition-sdk-request/test/apis/project.spec.ts @@ -3,8 +3,8 @@ import { expect } from 'chai' import { Scheduler } from 'rxjs' import { GetPersonalProjectsQueryParams -} from '../../src/apis/project/personal' -import { SDKFetch } from '../' +} from '../../src/project/personal' +import { SDKFetch } from 'teambition-sdk-core' const fetchMock = require('fetch-mock') diff --git a/test/apis/search.spec.ts b/packages/teambition-sdk-request/test/apis/search.spec.ts similarity index 98% rename from test/apis/search.spec.ts rename to packages/teambition-sdk-request/test/apis/search.spec.ts index 08994f4fb..3194c519a 100644 --- a/test/apis/search.spec.ts +++ b/packages/teambition-sdk-request/test/apis/search.spec.ts @@ -8,8 +8,8 @@ import { searchMembersInGroup, ScopeType, buildPath as buildPathForMemberSearching -} from '../../src/apis/search/members' -import { SDKFetch } from '../' +} from '../../src/search/members' +import { SDKFetch } from 'teambition-sdk-core' const fetchMock = require('fetch-mock') diff --git a/test/apis/task.spec.ts b/packages/teambition-sdk-request/test/apis/task.spec.ts similarity index 84% rename from test/apis/task.spec.ts rename to packages/teambition-sdk-request/test/apis/task.spec.ts index 80adf5eac..2eabc1cb4 100644 --- a/test/apis/task.spec.ts +++ b/packages/teambition-sdk-request/test/apis/task.spec.ts @@ -1,7 +1,8 @@ import { describe, beforeEach, afterEach, it } from 'tman' import { expect } from 'chai' -import { createSdk, SDK, SocketMock, TaskSchema } from '../index' -import * as Fixture from '../fixtures/tasks.fixture' +import { SDK, TaskSchema } from 'teambition-sdk-core' +import { SocketMock, TasksFixture } from 'teambition-sdk-testutil' +import { createSdk } from '../index' import { mock, restore, looseDeepEqual } from '../utils' describe('TaskApi Spec', () => { @@ -21,7 +22,7 @@ describe('TaskApi Spec', () => { describe('TasksAPI request spec', () => { it('should get task', function* () { - const fixture = Fixture.task + const fixture = TasksFixture.task mockResponse(fixture) yield sdk.getTask(fixture._id) @@ -35,7 +36,7 @@ describe('TaskApi Spec', () => { describe('TasksAPI socket spec', () => { it('new task should add cache', function* () { - const fixture = Fixture.task + const fixture = TasksFixture.task yield socket.emit('new', 'task', '', fixture) @@ -48,7 +49,7 @@ describe('TaskApi Spec', () => { }) it('update task should change cache', function* () { - const fixture = Fixture.task + const fixture = TasksFixture.task yield sdk.database.insert('Task', fixture) @@ -63,7 +64,7 @@ describe('TaskApi Spec', () => { }) it('delete task should delete cache', function* () { - const fixture = Fixture.task + const fixture = TasksFixture.task yield sdk.database.insert('Task', fixture) diff --git a/test/apis/user.spec.ts b/packages/teambition-sdk-request/test/apis/user.spec.ts similarity index 93% rename from test/apis/user.spec.ts rename to packages/teambition-sdk-request/test/apis/user.spec.ts index 3d08ee388..695bc40fe 100644 --- a/test/apis/user.spec.ts +++ b/packages/teambition-sdk-request/test/apis/user.spec.ts @@ -1,7 +1,8 @@ import { describe, beforeEach, afterEach, it } from 'tman' import { expect } from 'chai' -import { createSdk, SDK, SocketMock, UserMe } from '../index' -import userMe from '../fixtures/user.fixture' +import { SDK, UserMe } from 'teambition-sdk-core' +import { SocketMock, UserFixture as userMe } from 'teambition-sdk-testutil' +import { createSdk } from '../index' import { mock, restore } from '../utils' describe('UserApi Spec', () => { diff --git a/packages/teambition-sdk-request/test/app.ts b/packages/teambition-sdk-request/test/app.ts new file mode 100644 index 000000000..6eb7d15b1 --- /dev/null +++ b/packages/teambition-sdk-request/test/app.ts @@ -0,0 +1,12 @@ +'use strict' +import 'isomorphic-fetch' + +process.env.NODE_ENV = 'production' + +export { run, setExit, reset, mocha } from 'tman' + +import './apis' + +import './asyncLoadRDB.spec' + +import '../src/index' diff --git a/test/net/asyncLoadRDB.ts b/packages/teambition-sdk-request/test/asyncLoadRDB.spec.ts similarity index 85% rename from test/net/asyncLoadRDB.ts rename to packages/teambition-sdk-request/test/asyncLoadRDB.spec.ts index 139339f0b..7b2eb2f71 100644 --- a/test/net/asyncLoadRDB.ts +++ b/packages/teambition-sdk-request/test/asyncLoadRDB.spec.ts @@ -1,30 +1,25 @@ import { describe, beforeEach, afterEach, it } from 'tman' import { expect } from 'chai' import { Subscription } from 'rxjs' +import { SDK, TaskSchema, PostSchema, LikeSchema } from 'teambition-sdk-core' import { - createSdkWithoutRDB, - loadRDB, - SDK, - TaskSchema, - PostSchema, - LikeSchema, - SocketMock -} from '../index' -import { projectPosts } from '../fixtures/posts.fixture' -import like from '../fixtures/like.fixture' -import userMe from '../fixtures/user.fixture' -import { task } from '../fixtures/tasks.fixture' -import * as myFixture from '../fixtures/my.fixture' -import { EventGenerator } from '../../src/apis/event/EventGenerator' - -import { mock, restore, equals } from '../utils' + SocketMock, + LikeFixture as like, + MyFixture, + PostsFixture, + TasksFixture, + UserFixture as userMe, +} from 'teambition-sdk-testutil' + +import { mock, restore, equals } from './utils' +import { createSdkWithoutRDB, loadRDB, normIfRecurrentEvent, EventGenerator } from './index' describe('Async load reactivedb Spec', () => { let sdk: SDK let mockResponse: (m: T, delay?: number | Promise) => void let socket: SocketMock - const userId = myFixture.myRecent[0]['_executorId'] + const userId = MyFixture.myRecent[0]['_executorId'] beforeEach(() => { sdk = createSdkWithoutRDB() @@ -41,7 +36,7 @@ describe('Async load reactivedb Spec', () => { describe('No reactivedb request spec', () => { it('getPost should response correct data without reactivedb', function* () { - const [fixture] = projectPosts + const [fixture] = PostsFixture.projectPosts mockResponse(fixture) yield sdk.getPost(fixture._id) @@ -74,7 +69,7 @@ describe('Async load reactivedb Spec', () => { }) it('getTask should response correct data without reactivedb', function* () { - const fixture = task + const fixture = TasksFixture.task mockResponse(fixture) yield sdk.getTask(fixture._id) .values() @@ -86,7 +81,7 @@ describe('Async load reactivedb Spec', () => { describe('ReactiveDB async load in', () => { it('getMyRecent should response correct data when reactivedb async load in', done => { - mockResponse(myFixture.myRecent) + mockResponse(MyFixture.myRecent) const token = sdk.getMyRecent(userId, { dueDate: '2017-02-13T03:38:54.252Z', @@ -101,7 +96,7 @@ describe('Async load reactivedb Spec', () => { return new Date(x.updated).valueOf() - new Date(y.updated).valueOf() + new Date(x.created).valueOf() - new Date(y.created).valueOf() } - const expected = myFixture.norm(myFixture.myRecent).sort(compareFn) + const expected = normIfRecurrentEvent(MyFixture.myRecent).sort(compareFn) const actual = r.map(_r => { if (_r.type === 'task') { if (!(_r as TaskSchema).recurrence) { @@ -128,7 +123,7 @@ describe('Async load reactivedb Spec', () => { }) it('response cache should work when reactivedb async load in', function* () { - const [fixture] = projectPosts + const [fixture] = PostsFixture.projectPosts mockResponse(fixture) yield sdk.getPost(fixture._id) @@ -166,7 +161,7 @@ describe('Async load reactivedb Spec', () => { describe('Socket spec when reactivedb async load in', () => { it('socket::destroy should work when reactivedb load in', function* () { - const [ fixture ] = projectPosts + const [ fixture ] = PostsFixture.projectPosts mockResponse(fixture) @@ -185,7 +180,7 @@ describe('Async load reactivedb Spec', () => { }) it('socket::change should work when reactivedb load in', function* () { - const [fixture] = projectPosts + const [fixture] = PostsFixture.projectPosts mockResponse(fixture) yield sdk.getPost(fixture._id) @@ -205,7 +200,7 @@ describe('Async load reactivedb Spec', () => { }) it('socket::new should work when reactivedb load in', function* () { - const [fixture] = projectPosts + const [fixture] = PostsFixture.projectPosts yield socket.emit('new', 'post', '', fixture) diff --git a/packages/teambition-sdk-request/test/index.ts b/packages/teambition-sdk-request/test/index.ts new file mode 100644 index 000000000..6a58db97b --- /dev/null +++ b/packages/teambition-sdk-request/test/index.ts @@ -0,0 +1,37 @@ +'use strict' +import { Database, DataStoreType } from 'reactivedb' +import { SDK } from 'teambition-sdk-core' +import { testable } from 'teambition-sdk-core/dist/cjs/testable' +import { EventGenerator, isRecurrence } from '../src/event' + +testable.UseXMLHTTPRequest = false + +export function createSdk() { + const sdk = new SDK() + + const database = new Database(DataStoreType.MEMORY, false, 'teambition-sdk', 1) + sdk.initReactiveDB(database) + + return sdk +} + +export function createSdkWithoutRDB() { + return new SDK() +} + +export function loadRDB(sdk: SDK) { + const database = new Database(DataStoreType.MEMORY, false, `teambition-sdk-test`, 1) + return sdk.initReactiveDB(database) +} + +export function normIfRecurrentEvent(myRecent: any[]): any[] { + return myRecent.map((eventOrTask): any => { + if (eventOrTask.type === 'task' || !isRecurrence(eventOrTask as any)) { + return eventOrTask + } + const egen = new EventGenerator(eventOrTask as any) + return egen.next().value + }) +} + +export * from '../src/index' diff --git a/packages/teambition-sdk-request/test/mock/MockFetch.ts b/packages/teambition-sdk-request/test/mock/MockFetch.ts new file mode 100644 index 000000000..5c214df24 --- /dev/null +++ b/packages/teambition-sdk-request/test/mock/MockFetch.ts @@ -0,0 +1,45 @@ +import { SDKFetch } from 'teambition-sdk-core' +import { Backend } from 'teambition-sdk-testutil' + +function throwIfSlashPath(path: string) { + if (path.charAt(0) === '/') { + throw new Error(`There shouldn't be a slash before path (${path})`) + } +} + +export class MockFetch extends SDKFetch { + private httpBackend = new Backend + private _apiHost = new SDKFetch().getAPIHost() + + mockGet(path: string, query?: any) { + throwIfSlashPath(path) + return { + mockResponse: this.httpBackend.whenGET(`${this._apiHost}/${path}`, query), + request: this.get(path, query) + } + } + + mockPut(path: string, body?: any) { + throwIfSlashPath(path) + return { + mockResponse: this.httpBackend.whenPUT(`${this._apiHost}/${path}`, body), + request: this.put(path, body) + } + } + + mockPost(path: string, body?: any) { + throwIfSlashPath(path) + return { + mockResponse: this.httpBackend.whenPOST(`${this._apiHost}/${path}`, body), + request: this.post(path, body) + } + } + + mockDelete(path: string) { + throwIfSlashPath(path) + return { + mockResponse: this.httpBackend.whenDELETE(`${this._apiHost}/${path}`), + request: this.delete(path) + } + } +} diff --git a/packages/teambition-sdk-request/test/tsconfig.json b/packages/teambition-sdk-request/test/tsconfig.json new file mode 100644 index 000000000..38c4e91ba --- /dev/null +++ b/packages/teambition-sdk-request/test/tsconfig.json @@ -0,0 +1,25 @@ +{ + "files": [ + "app.ts" + ], + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + + "outDir": "../spec-js", + "target": "ES2015", + + "sourceMap": true, + "inlineSources": true, + "diagnostics": true, + "pretty": true, + "experimentalDecorators": true, + "suppressImplicitAnyIndexErrors": true, + "types": [ + "node", + "chai", + "sinon", + "sinon-chai" + ] + } +} diff --git a/packages/teambition-sdk-request/test/utils.ts b/packages/teambition-sdk-request/test/utils.ts new file mode 100644 index 000000000..993f47b17 --- /dev/null +++ b/packages/teambition-sdk-request/test/utils.ts @@ -0,0 +1,83 @@ +'use strict' +import { expect } from 'chai' +import { SDK, SDKFetch, Utils } from 'teambition-sdk-core' +import { MockFetch } from './mock/MockFetch' + +export function notInclude(collection: any[], ele: any) { + let result = true + const unionFlag = ele['_id'] + Utils.forEach(collection, val => { + if (val['_id'] === unionFlag) { + result = false + } + }) + return result +} + +export function clone (a: T): T { + return JSON.parse(JSON.stringify(a)) +} + +/** + * deep equal between a and b + * loose property compare + * a: { + * foo: 1, + * bar: 2 + * } + * b: { + * foo: 1, + * bar: 2, + * baz: 3 + * } + * equals(a, b) // pass + */ +export function equals(a: any, b: any) { + const _a = clone(a) + const _b = clone(b) + Utils.forEach(_b, (_, key) => { + if (typeof a[key] === 'undefined') { + delete _b[key] + } + }) + function deleteUndefined(obj: any) { + Utils.forEach(obj, (val, key) => { + if (typeof val === 'undefined') { + delete _a[key] + } else if (val && typeof val === 'object') { + deleteUndefined(val) + } + }) + } + deleteUndefined(_a) + expect(_a).to.deep.equal(_b) +} + +export function looseDeepEqual(a: any, b: any) { + Utils.forEach(a, (val, key) => { + if (val && typeof val === 'object') { + looseDeepEqual(val, b[key]) + } else if (val) { + expect(val).to.deep.equal(b[key]) + } + }) +} + +export function mock(sdk: SDK) { + const mockFetch = new MockFetch + const methods = ['get', 'put', 'post', 'delete'] + + return (m: T, schedule?: number | Promise) => { + methods.forEach(method => { + sdk.fetch[method] = function(url: string, arg2?: any) { + const mockResult = mockFetch[`mock${Utils.capitalizeFirstLetter(method)}`](url, arg2) + mockResult.mockResponse.respond(m, schedule) + return mockResult.request + } + }) + } +} + +export function restore(sdk: SDK) { + sdk.fetch = new SDKFetch +} diff --git a/tsconfig.json b/packages/teambition-sdk-request/tsconfig.json similarity index 93% rename from tsconfig.json rename to packages/teambition-sdk-request/tsconfig.json index 31fdf902d..e4bd95e6b 100644 --- a/tsconfig.json +++ b/packages/teambition-sdk-request/tsconfig.json @@ -7,6 +7,9 @@ "outDir": ".tmp", "module": "commonjs", "emitDecoratorMetadata": true, + "types": [ + "node" + ], "typeRoots": [ "node_modules/@types" ], diff --git a/packages/teambition-sdk-testutil/package.json b/packages/teambition-sdk-testutil/package.json new file mode 100644 index 000000000..c46ec0e0b --- /dev/null +++ b/packages/teambition-sdk-testutil/package.json @@ -0,0 +1,38 @@ +{ + "private": true, + "name": "teambition-sdk-testutil", + "version": "0.8.13", + "description": "Front-End SDK (TestUtil) for Teambition", + "main": "./dist/cjs/index.js", + "typings": "./dist/cjs/index.d.ts", + "scripts": { + "build_cjs": "rm -rf dist/cjs && tsc", + "lint": "tslint --project . --exclude src/fixture/**/*.ts --config ../../tslint.json", + "test": "npm run lint" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/teambition/teambition-sdk.git" + }, + "keywords": [ + "teambition", + "sdk", + "teambition-sdk", + "mock", + "fixture" + ], + "author": "lynweklm@gmail.com", + "license": "MIT", + "bugs": { + "url": "https://github.com/teambition/teambition-sdk/issues" + }, + "homepage": "https://github.com/teambition/teambition-sdk#readme", + "peerDependencies": { + "core-js": "^2.4.1" + }, + "devDependencies": { + "tslint": "^5.5.0", + "tslint-eslint-rules": "^4.1.1", + "typescript": "^2.4.2" + } +} diff --git a/test/fixtures/events.fixture.ts b/packages/teambition-sdk-testutil/src/fixture/events.fixture.ts similarity index 99% rename from test/fixtures/events.fixture.ts rename to packages/teambition-sdk-testutil/src/fixture/events.fixture.ts index 88e6c6ee0..cc35a018a 100644 --- a/test/fixtures/events.fixture.ts +++ b/packages/teambition-sdk-testutil/src/fixture/events.fixture.ts @@ -1,3 +1,4 @@ +export namespace EventsFixture { export const normalEvent = { _id: '579033c828bb08a462fe352c', endDate: '2018-06-04T17:00:00.000Z', @@ -597,3 +598,4 @@ export const projectEvents = [ shareStatus: 0 } ] +} diff --git a/test/fixtures/files.fixture.ts b/packages/teambition-sdk-testutil/src/fixture/files.fixture.ts similarity index 99% rename from test/fixtures/files.fixture.ts rename to packages/teambition-sdk-testutil/src/fixture/files.fixture.ts index 13c7fb108..4b288157c 100644 --- a/test/fixtures/files.fixture.ts +++ b/packages/teambition-sdk-testutil/src/fixture/files.fixture.ts @@ -1,5 +1,5 @@ // tslint:disable:max-line-length - +export namespace FilesFixture { export const projectFiles = [ { _id: '591a7356318116ef9b4a5c50', @@ -2052,3 +2052,4 @@ export const projectFiles = [ shareStatus: 0 } ] +} diff --git a/packages/teambition-sdk-testutil/src/fixture/index.ts b/packages/teambition-sdk-testutil/src/fixture/index.ts new file mode 100644 index 000000000..2b7580e7d --- /dev/null +++ b/packages/teambition-sdk-testutil/src/fixture/index.ts @@ -0,0 +1,7 @@ +export { EventsFixture } from './events.fixture' +export { FilesFixture } from './files.fixture' +export { default as LikeFixture } from './like.fixture' +export { MyFixture } from './my.fixture' +export { PostsFixture } from './posts.fixture' +export { TasksFixture } from './tasks.fixture' +export { default as UserFixture } from './user.fixture' diff --git a/test/fixtures/like.fixture.ts b/packages/teambition-sdk-testutil/src/fixture/like.fixture.ts similarity index 100% rename from test/fixtures/like.fixture.ts rename to packages/teambition-sdk-testutil/src/fixture/like.fixture.ts diff --git a/test/fixtures/my.fixture.ts b/packages/teambition-sdk-testutil/src/fixture/my.fixture.ts similarity index 99% rename from test/fixtures/my.fixture.ts rename to packages/teambition-sdk-testutil/src/fixture/my.fixture.ts index 44724e4a0..fe4edd6b5 100644 --- a/test/fixtures/my.fixture.ts +++ b/packages/teambition-sdk-testutil/src/fixture/my.fixture.ts @@ -1,19 +1,4 @@ -import { EventSchema } from '../index' -import { EventGenerator } from '../../src/apis/event/EventGenerator' - -export function norm(myRecent: any[]): any[] { - const transFns: any[] = [firstOfARecurrentEvent] - return myRecent.map((x) => transFns.reduce((y, f) => f(y), x)) -} - -function firstOfARecurrentEvent(recent: any): any | EventSchema { - if (!recent.recurrence || !recent.recurrence.length || recent.type === 'task') { - return recent - } - const egen = new EventGenerator(recent) - return egen.next().value -} - +export namespace MyFixture { export const myRecent = [ { _id: '5698933d78eaa265030f9c37', @@ -7001,7 +6986,6 @@ export const myRecent = [ return r }) - export const count = { organizationsCount: 1, notesCount: 20, @@ -7010,3 +6994,5 @@ export const count = { tasksCount: 160, subtasksCount: 19 } + +} diff --git a/test/fixtures/posts.fixture.ts b/packages/teambition-sdk-testutil/src/fixture/posts.fixture.ts similarity index 99% rename from test/fixtures/posts.fixture.ts rename to packages/teambition-sdk-testutil/src/fixture/posts.fixture.ts index 1854f3957..77fcf3d64 100644 --- a/test/fixtures/posts.fixture.ts +++ b/packages/teambition-sdk-testutil/src/fixture/posts.fixture.ts @@ -1,3 +1,4 @@ +export namespace PostsFixture { export const projectPosts = [ { _id: '587ee5510f399a3a37e0e182', @@ -2976,3 +2977,4 @@ export const tagPosts = [ attachmentsCount: 0 } ] +} diff --git a/test/fixtures/tasks.fixture.ts b/packages/teambition-sdk-testutil/src/fixture/tasks.fixture.ts similarity index 98% rename from test/fixtures/tasks.fixture.ts rename to packages/teambition-sdk-testutil/src/fixture/tasks.fixture.ts index f26fd9286..3eb191499 100644 --- a/test/fixtures/tasks.fixture.ts +++ b/packages/teambition-sdk-testutil/src/fixture/tasks.fixture.ts @@ -1,3 +1,5 @@ +export namespace TasksFixture { + export const task = { _id: '5698933d78eaa265030f9c37', _creatorId: '56986d43542ce1a2798c8cfb', @@ -91,4 +93,6 @@ export const task = { }, isFavorite: false, shareStatus: 0 -} \ No newline at end of file +} + +} diff --git a/test/fixtures/user.fixture.ts b/packages/teambition-sdk-testutil/src/fixture/user.fixture.ts similarity index 100% rename from test/fixtures/user.fixture.ts rename to packages/teambition-sdk-testutil/src/fixture/user.fixture.ts diff --git a/packages/teambition-sdk-testutil/src/index.ts b/packages/teambition-sdk-testutil/src/index.ts new file mode 100644 index 000000000..b40c873f3 --- /dev/null +++ b/packages/teambition-sdk-testutil/src/index.ts @@ -0,0 +1,2 @@ +export * from './mock' +export * from './fixture' diff --git a/mock/backend.ts b/packages/teambition-sdk-testutil/src/mock/backend.ts similarity index 100% rename from mock/backend.ts rename to packages/teambition-sdk-testutil/src/mock/backend.ts diff --git a/mock/index.ts b/packages/teambition-sdk-testutil/src/mock/index.ts similarity index 100% rename from mock/index.ts rename to packages/teambition-sdk-testutil/src/mock/index.ts diff --git a/mock/mock.ts b/packages/teambition-sdk-testutil/src/mock/mock.ts similarity index 100% rename from mock/mock.ts rename to packages/teambition-sdk-testutil/src/mock/mock.ts diff --git a/mock/response.ts b/packages/teambition-sdk-testutil/src/mock/response.ts similarity index 100% rename from mock/response.ts rename to packages/teambition-sdk-testutil/src/mock/response.ts diff --git a/mock/socket.ts b/packages/teambition-sdk-testutil/src/mock/socket.ts similarity index 100% rename from mock/socket.ts rename to packages/teambition-sdk-testutil/src/mock/socket.ts diff --git a/mock/utils.ts b/packages/teambition-sdk-testutil/src/mock/utils.ts similarity index 100% rename from mock/utils.ts rename to packages/teambition-sdk-testutil/src/mock/utils.ts diff --git a/packages/teambition-sdk-testutil/tsconfig.json b/packages/teambition-sdk-testutil/tsconfig.json new file mode 100644 index 000000000..9af9b0894 --- /dev/null +++ b/packages/teambition-sdk-testutil/tsconfig.json @@ -0,0 +1,44 @@ +{ + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "outDir": "dist/cjs", + "target": "ES5", + + "types": [ + "node" + ], + "typeRoots": [ + "node_modules/@types" + ], + + "inlineSources": true, + "inlineSourceMap": true, + "declaration": true, + "diagnostics": true, + "pretty": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "suppressImplicitAnyIndexErrors": true, + + "lib": [ + "es5", + "es2015.iterable", + "es2015.collection", + "es2015.promise", + "es2015.core", + "dom" + ], + "importHelpers": true, + "noEmitHelpers": true + }, + "files": [ + "src/index.ts" + ] +} + diff --git a/src/apis/task/index.ts b/src/apis/task/index.ts deleted file mode 100644 index 9de69eec2..000000000 --- a/src/apis/task/index.ts +++ /dev/null @@ -1 +0,0 @@ -import './get' diff --git a/tools/tasks/test.ts b/tools/tasks/test.ts index fe451fa80..082c2bea4 100644 --- a/tools/tasks/test.ts +++ b/tools/tasks/test.ts @@ -42,4 +42,12 @@ process.on('uncaughtException', (err: any) => { console.info(`Caught exception: ${err.stack}`) }) +process.on('SIGINT', () => { + const watchCompilePid = Number(process.argv[2]) + if (watchCompilePid) { + process.kill(watchCompilePid) + } + process.exit() +}) + console.info('\x1b[1m\x1b[34mwatch start\x1b[39m\x1b[22m') diff --git a/tools/tslint.json b/tools/tslint.json new file mode 100644 index 000000000..38ebefa73 --- /dev/null +++ b/tools/tslint.json @@ -0,0 +1,6 @@ +{ + "extends": ["../tslint.json"], + "rules": { + "no-shadowed-variable": false + } +} diff --git a/yarn.lock b/yarn.lock index 5849bee58..838ae5352 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,20 +3,20 @@ "@types/chai@*", "@types/chai@^4.0.1": - version "4.0.1" - resolved "https://registry.npmjs.org/@types/chai/-/chai-4.0.1.tgz#37fea779617cfec3fd2b19a0247e8bbdd5133bf6" + version "4.0.3" + resolved "https://registry.npmjs.org/@types/chai/-/chai-4.0.3.tgz#6c2264b195cd2bb4c95c108487e13df0c8567c3e" "@types/lodash@^4.14.64": - version "4.14.65" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.65.tgz#a0f78d71ffcd3c02628d5f616410c98c424326d5" + version "4.14.73" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.73.tgz#9837e47db8643ba5bcef2c7921f37d90f9c24213" "@types/lovefield@^2.0.32": - version "2.0.32" - resolved "https://registry.npmjs.org/@types/lovefield/-/lovefield-2.0.32.tgz#61680e2bd678abf6cd261a7b487d2a2481f7cb95" + version "2.1.0" + resolved "https://registry.npmjs.org/@types/lovefield/-/lovefield-2.1.0.tgz#513d88b343c137c033706d4d684a8003256fe485" "@types/node@^8.0.14": - version "8.0.17" - resolved "https://registry.npmjs.org/@types/node/-/node-8.0.17.tgz#677bc8c118cfb76013febb62ede1f31d2c7222a1" + version "8.0.22" + resolved "https://registry.npmjs.org/@types/node/-/node-8.0.22.tgz#9c6bfee1f45f5e9952ff6b487e657ecca48c7777" "@types/sinon-chai@^2.7.28": version "2.7.28" @@ -29,6 +29,13 @@ version "2.3.3" resolved "https://registry.npmjs.org/@types/sinon/-/sinon-2.3.3.tgz#1f20b96f954b4997a09c1c0a20264aaba6b00147" +JSONStream@^1.0.4: + version "1.3.1" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + abbrev@1: version "1.1.0" resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" @@ -37,6 +44,10 @@ acorn@^4.0.1: version "4.0.13" resolved "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + after@0.8.2: version "0.8.2" resolved "https://registry.npmjs.org/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" @@ -53,10 +64,18 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +ansi-escapes@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -81,10 +100,21 @@ append-transform@^0.4.0: dependencies: default-require-extensions "^1.0.0" +aproba@^1.0.3: + version "1.1.2" + resolved "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" + archy@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^1.0.7: version "1.0.9" resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" @@ -105,8 +135,26 @@ arr-diff@^2.0.0: arr-flatten "^1.0.1" arr-flatten@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: version "1.0.3" - resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" array-unique@^0.2.1: version "0.2.1" @@ -140,7 +188,7 @@ ast-module-types@^2.3.1, ast-module-types@^2.3.2: version "2.3.2" resolved "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.3.2.tgz#4bb1de2d729678824429e22a628d03e87df4ad11" -async@^1.4.0: +async@^1.4.0, async@^1.5.0: version "1.5.2" resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -165,12 +213,12 @@ babel-code-frame@^6.22.0: js-tokens "^3.0.0" babel-generator@^6.18.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" + version "6.25.0" + resolved "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" dependencies: babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.24.1" + babel-types "^6.25.0" detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.2.0" @@ -184,52 +232,52 @@ babel-messages@^6.23.0: babel-runtime "^6.22.0" babel-runtime@^6.22.0: - version "6.23.0" - resolved "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + version "6.25.0" + resolved "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz#33b98eaa5d482bb01a8d1aa6b437ad2b01aec41c" dependencies: core-js "^2.4.0" regenerator-runtime "^0.10.0" babel-template@^6.16.0: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" + version "6.25.0" + resolved "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" dependencies: babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babylon "^6.11.0" + babel-traverse "^6.25.0" + babel-types "^6.25.0" + babylon "^6.17.2" lodash "^4.2.0" -babel-traverse@^6.18.0, babel-traverse@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" +babel-traverse@^6.18.0, babel-traverse@^6.25.0: + version "6.25.0" + resolved "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" dependencies: babel-code-frame "^6.22.0" babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.24.1" - babylon "^6.15.0" + babel-types "^6.25.0" + babylon "^6.17.2" debug "^2.2.0" globals "^9.0.0" invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.18.0, babel-types@^6.24.1: - version "6.24.1" - resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" +babel-types@^6.18.0, babel-types@^6.25.0: + version "6.25.0" + resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" dependencies: babel-runtime "^6.22.0" esutils "^2.0.2" lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.17.0: - version "6.17.2" - resolved "https://registry.npmjs.org/babylon/-/babylon-6.17.2.tgz#201d25ef5f892c41bae49488b08db0dd476e9f5c" +babylon@^6.17.0, babylon@^6.17.2, babylon@^6.17.4: + version "6.18.0" + resolved "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" base64-arraybuffer@0.1.5: version "0.1.5" @@ -258,10 +306,10 @@ boom@2.x.x: hoek "2.x.x" brace-expansion@^1.1.7: - version "1.1.7" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" + version "1.1.8" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" dependencies: - balanced-match "^0.4.1" + balanced-match "^1.0.0" concat-map "0.0.1" braces@^1.8.2: @@ -282,6 +330,10 @@ builtin-modules@^1.0.0, builtin-modules@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + caching-transform@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1" @@ -294,10 +346,21 @@ callsite@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + camelcase@^1.0.2: version "1.2.1" resolved "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + camelcase@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" @@ -318,8 +381,8 @@ center-align@^0.1.1: lazy-cache "^1.0.3" chai@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/chai/-/chai-4.1.0.tgz#331a0391b55c3af8740ae9c3b7458bc1c3805e6d" + version "4.1.1" + resolved "https://registry.npmjs.org/chai/-/chai-4.1.1.tgz#66e21279e6f3c6415ff8231878227900e2171b39" dependencies: assertion-error "^1.0.1" check-error "^1.0.1" @@ -339,8 +402,8 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: supports-color "^2.0.0" chalk@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz#dbec49436d2ae15f536114e76d14656cdbc0f44d" + version "2.1.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" dependencies: ansi-styles "^3.1.0" escape-string-regexp "^1.0.5" @@ -350,6 +413,10 @@ check-error@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -360,6 +427,10 @@ cli-spinners@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.0.0.tgz#ef987ed3d48391ac3dab9180b406a742180d6e6a" +cli-width@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -384,10 +455,14 @@ clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" -clone@^1.0.0: +clone@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" +clone@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + cloneable-readable@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117" @@ -396,6 +471,13 @@ cloneable-readable@^1.0.0: process-nextick-args "^1.0.6" through2 "^2.0.1" +cmd-shim@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -414,22 +496,27 @@ colors@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" +columnify@^1.5.4: + version "1.5.4" + resolved "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" dependencies: delayed-stream "~1.0.0" -commander@^2.8.1, commander@~2.11.0: +command-join@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/command-join/-/command-join-2.0.0.tgz#52e8b984f4872d952ff1bdc8b98397d27c7144cf" + +commander@^2.8.1, commander@^2.9.0, commander@~2.11.0: version "2.11.0" resolved "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" -commander@^2.9.0: - version "2.9.0" - resolved "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - commander@~2.6.0: version "2.6.0" resolved "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz#9df7e52fb2a0cb0fb89058ee80c3104225f37e1d" @@ -444,6 +531,13 @@ commondir@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" +compare-func@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" + dependencies: + array-ify "^1.0.0" + dot-prop "^3.0.0" + component-emitter@1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" @@ -456,15 +550,186 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +concat-stream@^1.4.10: + version "1.6.0" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +conventional-changelog-angular@^1.3.4: + version "1.4.0" + resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.4.0.tgz#118b9f7d41a3d99500bfb6bea1f3525e055e8b9b" + dependencies: + compare-func "^1.3.1" + github-url-from-git "^1.4.0" + q "^1.4.1" + read-pkg-up "^2.0.0" + +conventional-changelog-atom@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.1.1.tgz#d40a9b297961b53c745e5d1718fd1a3379f6a92f" + dependencies: + q "^1.4.1" + +conventional-changelog-cli@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-1.3.2.tgz#33abf2b5720a9b094df38e81741ccb502e1a4125" + dependencies: + add-stream "^1.0.0" + conventional-changelog "^1.1.4" + lodash "^4.1.0" + meow "^3.7.0" + tempfile "^1.1.1" + +conventional-changelog-codemirror@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.1.0.tgz#7577a591dbf9b538e7a150a7ee62f65a2872b334" + dependencies: + q "^1.4.1" + +conventional-changelog-core@^1.9.0: + version "1.9.0" + resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-1.9.0.tgz#de5dfbc091847656508d4a389e35c9a1bc49e7f4" + dependencies: + conventional-changelog-writer "^1.1.0" + conventional-commits-parser "^1.0.0" + dateformat "^1.0.12" + get-pkg-repo "^1.0.0" + git-raw-commits "^1.2.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^1.2.0" + lodash "^4.0.0" + normalize-package-data "^2.3.5" + q "^1.4.1" + read-pkg "^1.1.0" + read-pkg-up "^1.0.1" + through2 "^2.0.0" + +conventional-changelog-ember@^0.2.6: + version "0.2.6" + resolved "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.2.6.tgz#8b7355419f5127493c4c562473ab2fc792f1c2b6" + dependencies: + q "^1.4.1" + +conventional-changelog-eslint@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-0.1.0.tgz#a52411e999e0501ce500b856b0a643d0330907e2" + dependencies: + q "^1.4.1" + +conventional-changelog-express@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.1.0.tgz#55c6c841c811962036c037bdbd964a54ae310fce" + dependencies: + q "^1.4.1" + +conventional-changelog-jquery@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz#0208397162e3846986e71273b6c79c5b5f80f510" + dependencies: + q "^1.4.1" + +conventional-changelog-jscs@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz#0479eb443cc7d72c58bf0bcf0ef1d444a92f0e5c" + dependencies: + q "^1.4.1" + +conventional-changelog-jshint@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.1.0.tgz#00cab8e9a3317487abd94c4d84671342918d2a07" + dependencies: + compare-func "^1.3.1" + q "^1.4.1" + +conventional-changelog-writer@^1.1.0: + version "1.4.1" + resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-1.4.1.tgz#3f4cb4d003ebb56989d30d345893b52a43639c8e" + dependencies: + compare-func "^1.3.1" + conventional-commits-filter "^1.0.0" + dateformat "^1.0.11" + handlebars "^4.0.2" + json-stringify-safe "^5.0.1" + lodash "^4.0.0" + meow "^3.3.0" + semver "^5.0.1" + split "^1.0.0" + through2 "^2.0.0" + +conventional-changelog@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.4.tgz#108bc750c2a317e200e2f9b413caaa1f8c7efa3b" + dependencies: + conventional-changelog-angular "^1.3.4" + conventional-changelog-atom "^0.1.0" + conventional-changelog-codemirror "^0.1.0" + conventional-changelog-core "^1.9.0" + conventional-changelog-ember "^0.2.6" + conventional-changelog-eslint "^0.1.0" + conventional-changelog-express "^0.1.0" + conventional-changelog-jquery "^0.1.0" + conventional-changelog-jscs "^0.1.0" + conventional-changelog-jshint "^0.1.0" + +conventional-commits-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.0.0.tgz#6fc2a659372bc3f2339cf9ffff7e1b0344b93039" + dependencies: + is-subset "^0.1.1" + modify-values "^1.0.0" + +conventional-commits-parser@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-1.3.0.tgz#e327b53194e1a7ad5dc63479ee9099a52b024865" + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.0" + lodash "^4.2.1" + meow "^3.3.0" + split2 "^2.0.0" + through2 "^2.0.0" + trim-off-newlines "^1.0.0" + +conventional-commits-parser@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.0.0.tgz#71d01910cb0a99aeb20c144e50f81f4df3178447" + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.0" + lodash "^4.2.1" + meow "^3.3.0" + split2 "^2.0.0" + through2 "^2.0.0" + trim-off-newlines "^1.0.0" + +conventional-recommended-bump@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.0.1.tgz#56b8ae553a8a1152fa069e767599e1f6948bd36c" + dependencies: + concat-stream "^1.4.10" + conventional-commits-filter "^1.0.0" + conventional-commits-parser "^2.0.0" + git-raw-commits "^1.2.0" + git-semver-tags "^1.2.1" + meow "^3.3.0" + object-assign "^4.0.1" + convert-source-map@^1.3.0: version "1.5.0" resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + version "2.5.0" + resolved "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086" -core-util-is@~1.0.0: +core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -478,25 +743,52 @@ coveralls@^2.13.1: minimist "1.2.0" request "2.79.0" -cross-spawn@^4, cross-spawn@^4.0.0: +cross-spawn@^4: version "4.0.2" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" dependencies: lru-cache "^4.0.1" which "^1.2.9" +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cryptiles@2.x.x: version "2.0.5" resolved "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" dependencies: boom "2.x.x" +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +dargs@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + dependencies: + number-is-nan "^1.0.0" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" dependencies: assert-plus "^1.0.0" +dateformat@^1.0.11, dateformat@^1.0.12: + version "1.0.12" + resolved "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + debug-log@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" @@ -513,10 +805,14 @@ debug@~2.2.0: dependencies: ms "0.7.1" -decamelize@^1.0.0, decamelize@^1.1.1: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + deep-eql@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-2.0.2.tgz#b1bac06e56f0a76777686d50c9feb75c2ed7679a" @@ -537,10 +833,20 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + dependencies: + clone "^1.0.2" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + dependency-tree@5.8.0: version "5.8.0" resolved "https://registry.npmjs.org/dependency-tree/-/dependency-tree-5.8.0.tgz#0abd5aee789b49be5121a92cf6697bb7a1332d70" @@ -556,6 +862,10 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + detective-amd@^2.4.0: version "2.4.0" resolved "https://registry.npmjs.org/detective-amd/-/detective-amd-2.4.0.tgz#5eb0df4ef5c18a94033b07daf136dbcd5fc75cd5" @@ -606,11 +916,7 @@ detective-stylus@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.0.tgz#50aee7db8babb990381f010c63fabba5b58e54cd" -diff@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" - -diff@^3.2.0, diff@~3.3.0: +diff@^3.1.0, diff@^3.2.0, diff@~3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" @@ -621,6 +927,16 @@ doctrine@^0.7.2: esutils "^1.1.6" isarray "0.0.1" +dot-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + dependencies: + is-obj "^1.0.0" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -720,12 +1036,24 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -execa@^0.5.0: - version "0.5.1" - resolved "https://registry.npmjs.org/execa/-/execa-0.5.1.tgz#de3fb85cb8d6e91c85bcbceb164581785cb57b36" +execa@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/execa/-/execa-0.6.3.tgz#57b69a594f081759c69e5370f0d17b9cb11658fe" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" dependencies: - cross-spawn "^4.0.0" - get-stream "^2.2.0" + cross-spawn "^5.0.1" + get-stream "^3.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" p-finally "^1.0.0" @@ -748,28 +1076,42 @@ extend@~3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +external-editor@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972" + dependencies: + iconv-lite "^0.4.17" + jschardet "^1.4.2" + tmp "^0.0.31" + extglob@^0.3.1: version "0.3.2" resolved "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" dependencies: is-extglob "^1.0.0" -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" fetch-mock@^5.10.0: - version "5.11.0" - resolved "https://registry.npmjs.org/fetch-mock/-/fetch-mock-5.11.0.tgz#eb48125e71c2e1c645a26ac280a1d03b46cd005f" + version "5.12.2" + resolved "https://registry.npmjs.org/fetch-mock/-/fetch-mock-5.12.2.tgz#07fde6b71f718328b4ce9b81c82a7c11c05d9748" dependencies: glob-to-regexp "^0.3.0" node-fetch "^1.3.3" path-to-regexp "^1.7.0" +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + file-exists@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/file-exists/-/file-exists-1.0.0.tgz#e6d269b56567b8922581398e990dd7078f72d616" @@ -867,6 +1209,14 @@ formatio@1.2.0: dependencies: samsam "1.x" +fs-extra@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + fs-extra@~0.6.4: version "0.6.4" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-0.6.4.tgz#f46f0c75b7841f8d200b3348cd4d691d5a099d15" @@ -880,6 +1230,19 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + generate-function@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" @@ -905,12 +1268,27 @@ get-func-name@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" -get-stream@^2.2.0: - version "2.3.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" +get-pkg-repo@^1.0.0: + version "1.4.0" + resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" dependencies: - object-assign "^4.0.1" - pinkie-promise "^2.0.0" + hosted-git-info "^2.1.4" + meow "^3.3.0" + normalize-package-data "^2.3.0" + parse-github-repo-url "^1.3.0" + through2 "^2.0.0" + +get-port@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/get-port/-/get-port-3.1.0.tgz#ef01b18a84ca6486970ff99e54446141a73ffd3e" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" getpass@^0.1.1: version "0.1.7" @@ -918,6 +1296,40 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +git-raw-commits@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.2.0.tgz#0f3a8bfd99ae0f2d8b9224d58892975e9a52d03c" + dependencies: + dargs "^4.0.1" + lodash.template "^4.0.2" + meow "^3.3.0" + split2 "^2.0.0" + through2 "^2.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^1.2.0, git-semver-tags@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.2.1.tgz#6ccd2a52e735b736748dc762444fcd9588e27490" + dependencies: + meow "^3.3.0" + semver "^5.0.1" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + dependencies: + ini "^1.3.2" + +github-url-from-git@^1.4.0: + version "1.5.0" + resolved "https://registry.npmjs.org/github-url-from-git/-/github-url-from-git-1.5.0.tgz#f985fedcc0a9aa579dc88d7aff068d55cc6251a0" + glob-base@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -935,7 +1347,7 @@ glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" -glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@~7.1.2: +glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@~7.1.2: version "7.1.2" resolved "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -950,6 +1362,16 @@ globals@^9.0.0: version "9.18.0" resolved "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + gonzales-pe@^3.4.4: version "3.4.7" resolved "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-3.4.7.tgz#17c7be67ad6caff6277a3e387ac736e983d280ec" @@ -964,7 +1386,7 @@ google-closure-compiler-js@^20170521.0.0: vinyl "^2.0.1" webpack-core "^0.6.8" -graceful-fs@^4.1.11, graceful-fs@^4.1.2: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -978,7 +1400,7 @@ graphviz@^0.0.8: dependencies: temp "~0.4.0" -handlebars@^4.0.3: +handlebars@^4.0.2, handlebars@^4.0.3: version "4.0.10" resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" dependencies: @@ -1021,6 +1443,10 @@ has-flag@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + hawk@~3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -1035,8 +1461,8 @@ hoek@2.x.x: resolved "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" hosted-git-info@^2.1.4: - version "2.4.2" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" + version "2.5.0" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" http-signature@~1.1.0: version "1.1.1" @@ -1046,14 +1472,20 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" -iconv-lite@~0.4.13: - version "0.4.17" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d" +iconv-lite@^0.4.17, iconv-lite@~0.4.13: + version "0.4.18" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + indexof@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" @@ -1065,14 +1497,33 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@~2.0.1: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -ini@~1.3.0: +ini@^1.3.2, ini@~1.3.0: version "1.3.4" resolved "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" +inquirer@^3.0.6: + version "3.2.1" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-3.2.1.tgz#06ceb0f540f45ca548c17d6840959878265fa175" + dependencies: + ansi-escapes "^2.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + invariant@^2.2.0: version "2.2.2" resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" @@ -1097,6 +1548,12 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" +is-ci@^1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" @@ -1150,12 +1607,26 @@ is-my-json-valid@^2.12.4: jsonpointer "^4.0.0" xtend "^4.0.0" -is-number@^2.0.2, is-number@^2.1.0: +is-number@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -1164,18 +1635,32 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + is-property@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" is-relative-path@^1.0.1, is-relative-path@~1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.1.tgz#ac72793a2d60c049e50676e04a24a8d8f263dc26" + version "1.0.2" + resolved "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz#091b46a0d67c1ed0fe85f1f8cfdde006bb251d46" is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-subset@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + +is-text-path@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + dependencies: + text-extensions "^1.0.0" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -1227,15 +1712,15 @@ istanbul-lib-hook@^1.0.7: dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.7.2: - version "1.7.2" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz#6014b03d3470fb77638d5802508c255c06312e56" +istanbul-lib-instrument@^1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.4.tgz#e9fd920e4767f3d19edc765e2d6b3f5ccbd0eea8" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" - babylon "^6.13.0" + babylon "^6.17.4" istanbul-lib-coverage "^1.1.1" semver "^5.3.0" @@ -1264,15 +1749,9 @@ istanbul-reports@^1.1.1: dependencies: handlebars "^4.0.3" -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" - js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + version "3.0.2" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" js-yaml@3.6.1: version "3.6.1" @@ -1292,6 +1771,10 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jschardet@^1.4.2: + version "1.5.1" + resolved "https://registry.npmjs.org/jschardet/-/jschardet-1.5.1.tgz#c519f629f86b3a5bedba58a88d311309eec097f9" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -1300,30 +1783,40 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" +jsonfile@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" + optionalDependencies: + graceful-fs "^4.1.6" + jsonfile@~1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-1.0.1.tgz#ea5efe40b83690b98667614a7392fc60e842c0dd" +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" jsonrpc-lite@^1.2.3, jsonrpc-lite@~1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/jsonrpc-lite/-/jsonrpc-lite-1.2.3.tgz#2556de9a5a42879c65f19b2f23803241e782deba" + version "1.2.4" + resolved "https://registry.npmjs.org/jsonrpc-lite/-/jsonrpc-lite-1.2.4.tgz#dd90fa26636269cc0c9fd3730631f88dd80d9d58" jsprim@^1.2.2: - version "1.4.0" - resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + version "1.4.1" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" dependencies: assert-plus "1.0.0" - extsprintf "1.0.2" + extsprintf "1.3.0" json-schema "0.2.3" - verror "1.3.6" + verror "1.10.0" kind-of@^3.0.2: version "3.2.2" @@ -1331,6 +1824,12 @@ kind-of@^3.0.2: dependencies: is-buffer "^1.1.5" +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" @@ -1345,6 +1844,46 @@ lcov-parse@0.0.10: version "0.0.10" resolved "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" +lerna@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lerna/-/lerna-2.0.0.tgz#49a72fe70e06aebfd7ea23efb2ab41abe60ebeea" + dependencies: + async "^1.5.0" + chalk "^1.1.1" + cmd-shim "^2.0.2" + columnify "^1.5.4" + command-join "^2.0.0" + conventional-changelog-cli "^1.3.1" + conventional-recommended-bump "^1.0.0" + dedent "^0.7.0" + execa "^0.6.3" + find-up "^2.1.0" + fs-extra "^3.0.1" + get-port "^3.1.0" + glob "^7.1.2" + globby "^6.1.0" + graceful-fs "^4.1.11" + inquirer "^3.0.6" + is-ci "^1.0.10" + load-json-file "^2.0.0" + lodash "^4.17.4" + minimatch "^3.0.4" + npmlog "^4.1.0" + p-finally "^1.0.0" + path-exists "^3.0.0" + read-cmd-shim "^1.0.1" + read-pkg "^2.0.0" + rimraf "^2.6.1" + safe-buffer "^5.0.1" + semver "^5.1.0" + signal-exit "^3.0.2" + strong-log-transformer "^1.0.6" + temp-write "^3.3.0" + write-file-atomic "^2.1.0" + write-json-file "^2.1.0" + write-pkg "^3.0.1" + yargs "^8.0.1" + levn@~0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -1378,10 +1917,31 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash@4.13.1, lodash@^4.2.0: +lodash._reinterpolate@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash.template@^4.0.2: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" + dependencies: + lodash._reinterpolate "~3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" + dependencies: + lodash._reinterpolate "~3.0.0" + +lodash@4.13.1: version "4.13.1" resolved "https://registry.npmjs.org/lodash/-/lodash-4.13.1.tgz#83e4b10913f48496d4d16fec4a560af2ee744b68" +lodash@^4.0.0, lodash@^4.1.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: + version "4.17.4" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + log-driver@1.2.5: version "1.2.5" resolved "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" @@ -1406,6 +1966,13 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0" +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + lovefield@2.1.12: version "2.1.12" resolved "https://registry.npmjs.org/lovefield/-/lovefield-2.1.12.tgz#07fb9f1d7840578ec784706cad0fbe7de4c93f52" @@ -1414,11 +1981,11 @@ lovefield@2.1.12: nopt "~2.2.1" lru-cache@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.0.tgz#59be49a683b8d986a939f1ca60fdb6989f4b2046" + version "4.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" + pseudomap "^1.0.2" + yallist "^2.1.2" madge@^1.6.0: version "1.6.0" @@ -1443,10 +2010,20 @@ magic-string@^0.19.0: dependencies: vlq "^0.2.1" +make-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978" + dependencies: + pify "^2.3.0" + make-error@^1.1.1: version "1.3.0" resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96" +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + md5-hex@^1.2.0: version "1.3.0" resolved "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4" @@ -1470,11 +2047,26 @@ memory-fs@^0.4.0: errno "^0.1.3" readable-stream "^2.0.1" +meow@^3.3.0, meow@^3.7.0: + version "3.7.0" + resolved "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + merge-source-map@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.3.tgz#da1415f2722a5119db07b14c4f973410863a2abf" + version "1.0.4" + resolved "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" dependencies: - source-map "^0.5.3" + source-map "^0.5.6" micromatch@^2.3.11: version "2.3.11" @@ -1494,15 +2086,15 @@ micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" -mime-db@~1.27.0: - version "1.27.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" +mime-db@~1.29.0: + version "1.29.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.15" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + version "2.1.16" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" dependencies: - mime-db "~1.27.0" + mime-db "~1.29.0" mimic-fn@^1.0.0: version "1.1.0" @@ -1514,7 +2106,7 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8, minimist@~0.0.1: +minimist@0.0.8: version "0.0.8" resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -1522,20 +2114,32 @@ minimist@1.1.x: version "1.1.3" resolved "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" -minimist@1.2.0, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +minimist@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + mkdirp@0.3.x: version "0.3.5" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" -mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" +modify-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.0.tgz#e2b6cdeb9ce19f99317a53722f3dbf5df5eaaab2" + module-definition@^2.2.4: version "2.2.4" resolved "https://registry.npmjs.org/module-definition/-/module-definition-2.2.4.tgz#c0a3771de58cf6bcf12aed2476706c596ad4b2cb" @@ -1554,7 +2158,7 @@ module-lookup-amd@^4.0.2: requirejs "~2.2.0" requirejs-config-file "~2.0.0" -moment@^2.18.1: +moment@^2.18.1, moment@^2.6.0: version "2.18.1" resolved "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" @@ -1566,6 +2170,10 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + mz@^2.4.0: version "2.6.0" resolved "https://registry.npmjs.org/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce" @@ -1589,8 +2197,8 @@ nesthydrationjs@^1.0.2: lodash "4.13.1" node-fetch@^1.0.1, node-fetch@^1.3.3: - version "1.7.1" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz#899cb3d0a3c92f952c47f1b876f4c8aeabd400d5" + version "1.7.2" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.2.tgz#c54e9aac57e432875233525f3c891c4159ffefd7" dependencies: encoding "^0.1.11" is-stream "^1.0.1" @@ -1602,8 +2210,8 @@ node-source-walk@^3.0.0, node-source-walk@^3.2.0: babylon "^6.17.0" node-watch@^0.5.4: - version "0.5.4" - resolved "https://registry.npmjs.org/node-watch/-/node-watch-0.5.4.tgz#bdad41b23d23444e895c797d73ad5d49e3833309" + version "0.5.5" + resolved "https://registry.npmjs.org/node-watch/-/node-watch-0.5.5.tgz#34865ba8bc6861ab086acdcc3403e40ed55c3274" nopt@~2.2.1: version "2.2.1" @@ -1611,9 +2219,9 @@ nopt@~2.2.1: dependencies: abbrev "1" -normalize-package-data@^2.3.2: - version "2.3.8" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" +normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5: + version "2.4.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" @@ -1632,13 +2240,22 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npmlog@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" nyc@^11.0.1: - version "11.0.2" - resolved "https://registry.npmjs.org/nyc/-/nyc-11.0.2.tgz#9e592a697186028253b668516c38f079c39c08f3" + version "11.1.0" + resolved "https://registry.npmjs.org/nyc/-/nyc-11.1.0.tgz#d6b3c5e16892a25af63138ba484676aa8a22eda7" dependencies: archy "^1.0.0" arrify "^1.0.1" @@ -1652,7 +2269,7 @@ nyc@^11.0.1: glob "^7.0.6" istanbul-lib-coverage "^1.1.1" istanbul-lib-hook "^1.0.7" - istanbul-lib-instrument "^1.7.2" + istanbul-lib-instrument "^1.7.4" istanbul-lib-report "^1.1.1" istanbul-lib-source-maps "^1.2.1" istanbul-reports "^1.1.1" @@ -1663,7 +2280,7 @@ nyc@^11.0.1: resolve-from "^2.0.0" rimraf "^2.5.4" signal-exit "^3.0.1" - spawn-wrap "^1.3.6" + spawn-wrap "^1.3.8" test-exclude "^4.1.1" yargs "^8.0.1" yargs-parser "^5.0.0" @@ -1731,13 +2348,17 @@ os-homedir@^1.0.1: resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" os-locale@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/os-locale/-/os-locale-2.0.0.tgz#15918ded510522b81ee7ae5a309d54f639fc39a4" + version "2.1.0" + resolved "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" dependencies: - execa "^0.5.0" + execa "^0.7.0" lcid "^1.0.0" mem "^1.1.0" +os-tmpdir@^1.0.0, os-tmpdir@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -1752,6 +2373,10 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +parse-github-repo-url@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.0.tgz#286c53e2c9962e0641649ee3ac9508fca4dd959c" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -1835,7 +2460,7 @@ pathval@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" -pify@^2.0.0: +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -1903,7 +2528,7 @@ prr@~0.0.0: version "0.0.0" resolved "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" -pseudomap@^1.0.1: +pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -1911,16 +2536,20 @@ punycode@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +q@^1.4.1: + version "1.5.0" + resolved "https://registry.npmjs.org/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" + qs@~6.3.0: version "6.3.2" resolved "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + version "1.1.7" + resolved "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" + is-number "^3.0.0" + kind-of "^4.0.0" rc@^1.1.6: version "1.2.1" @@ -1932,13 +2561,19 @@ rc@^1.1.6: strip-json-comments "~2.0.1" reactivedb@~0.9.9: - version "0.9.9" - resolved "https://registry.npmjs.org/reactivedb/-/reactivedb-0.9.9.tgz#6fd974b6de2395c8da1a7bcbef6a483191113f4e" + version "0.9.13" + resolved "https://registry.npmjs.org/reactivedb/-/reactivedb-0.9.13.tgz#8954d728d35c97fc702c20eb0a66f8427c8f0184" dependencies: "@types/lovefield" "^2.0.32" lovefield "2.1.12" nesthydrationjs "^1.0.2" +read-cmd-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" + dependencies: + graceful-fs "^4.1.2" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -1953,7 +2588,7 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" -read-pkg@^1.0.0: +read-pkg@^1.0.0, read-pkg@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" dependencies: @@ -1969,18 +2604,25 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.1, readable-stream@^2.1.5: - version "2.2.11" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz#0796b31f8d7688007ff0b93a8088d34aa17c0f72" +readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2: + version "2.3.3" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: core-util-is "~1.0.0" - inherits "~2.0.1" + inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~1.0.6" - safe-buffer "~5.0.1" - string_decoder "~1.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" util-deprecate "~1.0.1" +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + regenerator-runtime@^0.10.0: version "0.10.5" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" @@ -2072,8 +2714,8 @@ resolve@1.1.7, resolve@~1.1.7: resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: - version "1.3.3" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" + version "1.4.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" dependencies: path-parse "^1.0.5" @@ -2107,8 +2749,8 @@ rollup-plugin-alias@^1.3.1: slash "^1.0.0" rollup-plugin-commonjs@^8.0.2: - version "8.0.2" - resolved "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.0.2.tgz#98b1589bfe32a6c0f67790b60c0b499972afed89" + version "8.1.0" + resolved "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.1.0.tgz#8ac9a87e6ea4c0d136e3e0e25ef41058957622b0" dependencies: acorn "^4.0.1" estree-walker "^0.3.0" @@ -2142,12 +2784,32 @@ rrule@2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/rrule/-/rrule-2.2.0.tgz#f346c523bf73707dafe562c222650467b49f6d5c" +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + rxjs@^5.4.2: - version "5.4.2" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-5.4.2.tgz#2a3236fcbf03df57bae06fd6972fd99e5c08fcf7" + version "5.4.3" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-5.4.3.tgz#0758cddee6033d68e0fd53676f0f3596ce3d483f" dependencies: symbol-observable "^1.0.1" +safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + safe-buffer@~5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" @@ -2163,21 +2825,31 @@ sass-lookup@^1.0.2: commander "~2.8.1" is-relative-path "~1.0.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.1.0, semver@^5.3.0: + version "5.4.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + signal-exit@^3.0.0, signal-exit@^3.0.1, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" sinon-chai@^2.11.0: - version "2.12.0" - resolved "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.12.0.tgz#da71e9642ef7b893ba3cf2af806396a00aa45927" + version "2.13.0" + resolved "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.13.0.tgz#b9a42e801c20234bfc2f43b29e6f4f61b60990c4" sinon@^2.3.8: version "2.4.1" @@ -2213,6 +2885,18 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +sort-keys@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + dependencies: + is-plain-obj "^1.0.0" + source-list-map@~0.1.7: version "0.1.8" resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" @@ -2223,6 +2907,12 @@ source-map-support@^0.4.0: dependencies: source-map "^0.5.6" +source-map-support@^0.4.16: + version "0.4.16" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.16.tgz#16fecf98212467d017d586a2af68d628b9421cd8" + dependencies: + source-map "^0.5.6" + source-map@^0.4.4, source-map@~0.4.1: version "0.4.4" resolved "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -2239,9 +2929,9 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" -spawn-wrap@^1.3.6: - version "1.3.6" - resolved "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.3.6.tgz#ccec4a949d8ce7e2b1a35cf4671d683d2e76a1d1" +spawn-wrap@^1.3.8: + version "1.3.8" + resolved "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.3.8.tgz#fa2a79b990cbb0bb0018dca6748d88367b19ec31" dependencies: foreground-child "^1.5.6" mkdirp "^0.5.0" @@ -2264,13 +2954,25 @@ spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +split2@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/split2/-/split2-2.1.1.tgz#7a1f551e176a90ecd3345f7246a0cfe175ef4fd0" + dependencies: + through2 "^2.0.2" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + dependencies: + through "2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.13.0" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" + version "1.13.1" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -2279,11 +2981,10 @@ sshpk@^1.7.0: optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" jsbn "~0.1.0" tweetnacl "~0.14.0" -string-width@^1.0.1: +string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: @@ -2291,18 +2992,18 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" +string-width@^2.0.0, string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: is-fullwidth-code-point "^2.0.0" - strip-ansi "^3.0.0" + strip-ansi "^4.0.0" -string_decoder@~1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz#b29e1f4e1125fa97a10382b8a533737b7491e179" +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: - safe-buffer "~5.0.1" + safe-buffer "~5.1.0" stringify-object@~0.1.7: version "0.1.8" @@ -2318,6 +3019,12 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -2332,10 +3039,26 @@ strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +strong-log-transformer@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz#f7fb93758a69a571140181277eea0c2eb1301fa3" + dependencies: + byline "^5.0.0" + duplexer "^0.1.1" + minimist "^0.1.0" + moment "^2.6.0" + through "^2.3.4" + stylus-lookup@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-1.0.1.tgz#a8cbc2e0d2d871574c37f0e29b46b18dc99f1d69" @@ -2365,17 +3088,35 @@ symbol-observable@^1.0.1: resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" tapable@^0.2.5: - version "0.2.6" - resolved "https://registry.npmjs.org/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" + version "0.2.8" + resolved "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" -teambition-sdk-mock@^0.6.8: - version "0.6.9" - resolved "https://registry.npmjs.org/teambition-sdk-mock/-/teambition-sdk-mock-0.6.9.tgz#c95584d461580f053b676e8c70eea880052e463c" +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + +temp-write@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/temp-write/-/temp-write-3.3.0.tgz#c1a96de2b36061342eae81f44ff001aec8f615a9" + dependencies: + graceful-fs "^4.1.2" + is-stream "^1.1.0" + make-dir "^1.0.0" + pify "^2.2.0" + temp-dir "^1.0.0" + uuid "^3.0.1" temp@~0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz#671ad63d57be0fe9d7294664b3fc400636678a60" +tempfile@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" + dependencies: + os-tmpdir "^1.0.0" + uuid "^2.0.1" + test-exclude@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" @@ -2390,6 +3131,10 @@ text-encoding@0.6.4: version "0.6.4" resolved "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" +text-extensions@^1.0.0: + version "1.5.0" + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.5.0.tgz#d1cb2d14b5d0bc45bfdca8a08a473f68c7eb0cbc" + thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -2402,13 +3147,17 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" -through2@^2.0.1: +through2@^2.0.0, through2@^2.0.1, through2@^2.0.2: version "2.0.3" resolved "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" dependencies: readable-stream "^2.1.5" xtend "~4.0.1" +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + thunks@~4.8.0: version "4.8.0" resolved "https://registry.npmjs.org/thunks/-/thunks-4.8.0.tgz#63d5fff7f6a957d6953c46dc72829dd5462a8ab4" @@ -2423,6 +3172,12 @@ tman@^1.7.1: supports-color "~4.2.0" thunks "~4.8.0" +tmp@^0.0.31: + version "0.0.31" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + dependencies: + os-tmpdir "~1.0.1" + to-fast-properties@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -2437,6 +3192,14 @@ traverse-chain@~0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-off-newlines@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -2476,8 +3239,8 @@ tslint-eslint-rules@^4.1.1: tsutils "^1.4.0" tslint@^5.5.0: - version "5.5.0" - resolved "https://registry.npmjs.org/tslint/-/tslint-5.5.0.tgz#10e8dab3e3061fa61e9442e8cee3982acf20a6aa" + version "5.6.0" + resolved "https://registry.npmjs.org/tslint/-/tslint-5.6.0.tgz#088aa6c6026623338650b2900828ab3edf59f6cf" dependencies: babel-code-frame "^6.22.0" colors "^1.1.2" @@ -2488,13 +3251,13 @@ tslint@^5.5.0: resolve "^1.3.2" semver "^5.3.0" tslib "^1.7.1" - tsutils "^2.5.1" + tsutils "^2.7.1" tsutils@^1.4.0: version "1.9.1" resolved "https://registry.npmjs.org/tsutils/-/tsutils-1.9.1.tgz#b9f9ab44e55af9681831d5f28d0aeeaf5c750cb0" -tsutils@^2.5.1: +tsutils@^2.7.1: version "2.8.0" resolved "https://registry.npmjs.org/tsutils/-/tsutils-2.8.0.tgz#0160173729b3bf138628dd14a1537e00851d814a" dependencies: @@ -2522,13 +3285,17 @@ type-detect@^4.0.0: version "4.0.3" resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz#0e3f2670b44099b0b46c284d136a7ef49c74c2ea" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + typescript@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/typescript/-/typescript-2.4.2.tgz#f8395f85d459276067c988aa41837a8f82870844" uglify-js@^2.6: - version "2.8.28" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.28.tgz#e335032df9bb20dcb918f164589d5af47f38834a" + version "2.8.29" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -2551,6 +3318,10 @@ underscore@~1.7.0: version "1.7.0" resolved "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" +universalify@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + user-home@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" @@ -2559,9 +3330,13 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +uuid@^2.0.1: + version "2.0.3" + resolved "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + +uuid@^3.0.0, uuid@^3.0.1: + version "3.1.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" v8flags@^3.0.0: version "3.0.0" @@ -2576,21 +3351,22 @@ validate-npm-package-license@^3.0.1: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" -verror@1.3.6: - version "1.3.6" - resolved "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: - extsprintf "1.0.2" + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" vinyl@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/vinyl/-/vinyl-2.0.2.tgz#0a3713d8d4e9221c58f10ca16c0116c9e25eda7c" + version "2.1.0" + resolved "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c" dependencies: - clone "^1.0.0" + clone "^2.1.1" clone-buffer "^1.0.0" clone-stats "^1.0.0" cloneable-readable "^1.0.0" - is-stream "^1.1.0" remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" @@ -2602,6 +3378,12 @@ walkdir@^0.0.11: version "0.0.11" resolved "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz#a16d025eb931bd03b52f308caed0f40fcebe9532" +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + dependencies: + defaults "^1.0.3" + webpack-core@^0.6.8: version "0.6.9" resolved "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" @@ -2618,11 +3400,17 @@ which-module@^2.0.0: resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" which@^1.2.4, which@^1.2.9: - version "1.2.14" - resolved "https://registry.npmjs.org/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + version "1.3.0" + resolved "https://registry.npmjs.org/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: isexe "^2.0.0" +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + window-size@0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" @@ -2658,6 +3446,32 @@ write-file-atomic@^1.1.4: imurmurhash "^0.1.4" slide "^1.1.5" +write-file-atomic@^2.0.0, write-file-atomic@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.1.0.tgz#1769f4b551eedce419f0505deae2e26763542d37" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write-json-file@^2.1.0, write-json-file@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-2.2.0.tgz#51862506bbb3b619eefab7859f1fd6c6d0530876" + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + pify "^2.0.0" + sort-keys "^1.1.1" + write-file-atomic "^2.0.0" + +write-pkg@^3.0.1: + version "3.1.0" + resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-3.1.0.tgz#030a9994cc9993d25b4e75a9f1a1923607291ce9" + dependencies: + sort-keys "^2.0.0" + write-json-file "^2.2.0" + ws@~2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" @@ -2677,7 +3491,7 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -yallist@^2.0.0: +yallist@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -2694,8 +3508,8 @@ yargs-parser@^7.0.0: camelcase "^4.1.0" yargs@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-8.0.1.tgz#420ef75e840c1457a80adcca9bc6fa3849de51aa" + version "8.0.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" dependencies: camelcase "^4.1.0" cliui "^3.2.0"