diff --git a/e2e/bazel/app.test.ts b/e2e/bazel/app.test.ts index 7293a83049..46b3957eb5 100644 --- a/e2e/bazel/app.test.ts +++ b/e2e/bazel/app.test.ts @@ -1,33 +1,44 @@ -import {checkFilesExists, cleanup, copyMissingPackages, newApp, readFile, runCLI, runCommand, runSchematic, updateFile} from '../utils'; +import {checkFilesExists, cleanup, copyMissingPackages, newBazelApp, readFile, runCLI, runSchematic} from '../utils'; describe('application', () => { beforeEach(cleanup); - it('creates a new application in a workspace', () => { - runSchematic('@nrwl/bazel:application --name=proj'); - runSchematic('@nrwl/bazel:app --name=myApp'); + describe('generate', () => { + it('should work', () => { + newBazelApp('--collection=@nrwl/bazel --skip-install'); + runSchematic('@nrwl/bazel:app --name=myApp'); - checkFilesExists( - `tsconfig.json`, `WORKSPACE`, `BUILD.bazel`, `apps/my-app/BUILD.bazel`, `apps/my-app/src/index.html`, - `apps/my-app/src/app/app.module.ts`, `apps/my-app/src/app/app.component.ts`); + checkFilesExists( + `tsconfig.json`, `WORKSPACE`, `BUILD.bazel`, `apps/my-app/BUILD.bazel`, `apps/my-app/src/index.html`, + `apps/my-app/src/app/app.module.ts`, `apps/my-app/src/app/app.component.ts`); - expect(readFile('apps/my-app/src/app/app.module.ts')).toContain('bootstrap: [AppComponent]'); + expect(readFile('apps/my-app/src/app/app.module.ts')).toContain('bootstrap: [AppComponent]'); - const cliConfig = JSON.parse(readFile('.angular-cli.json')); - expect(cliConfig.apps.length).toEqual(1); - expect(cliConfig.apps[0].name).toEqual('myApp'); - expect(cliConfig.apps[0].root).toEqual('apps/my-app/src'); + const cliConfig = JSON.parse(readFile('.angular-cli.json')); + expect(cliConfig.apps.length).toEqual(1); + expect(cliConfig.apps[0].name).toEqual('myApp'); + expect(cliConfig.apps[0].root).toEqual('apps/my-app/src'); + }); + + it('should work with multiple applications', () => { + runSchematic('@nrwl/bazel:application --name=proj'); + runSchematic('@nrwl/bazel:app --name=first'); + runSchematic('@nrwl/bazel:app --name=second'); + + const cliConfig = JSON.parse(readFile('.angular-cli.json')); + expect(cliConfig.apps[0].name).toEqual('first'); + expect(cliConfig.apps[0].root).toEqual('apps/first/src'); + expect(cliConfig.apps[1].name).toEqual('second'); + expect(cliConfig.apps[1].root).toEqual('apps/second/src'); + }); }); - it('creates multiple applications in a workspace', () => { - runSchematic('@nrwl/bazel:application --name=proj'); - runSchematic('@nrwl/bazel:app --name=first'); - runSchematic('@nrwl/bazel:app --name=second'); - - const cliConfig = JSON.parse(readFile('.angular-cli.json')); - expect(cliConfig.apps[0].name).toEqual('first'); - expect(cliConfig.apps[0].root).toEqual('apps/first/src'); - expect(cliConfig.apps[1].name).toEqual('second'); - expect(cliConfig.apps[1].root).toEqual('apps/second/src'); + describe('build', () => { + it('should work', () => { + newBazelApp('--collection=@nrwl/bazel'); + copyMissingPackages(); + runSchematic('@nrwl/bazel:app --name=app'); + expect(runCLI('build')).toContain('main.bundle.js'); + }); }); }); diff --git a/e2e/bazel/lib.test.ts b/e2e/bazel/lib.test.ts index 9c2cc080da..772342c39d 100644 --- a/e2e/bazel/lib.test.ts +++ b/e2e/bazel/lib.test.ts @@ -1,18 +1,30 @@ -import {checkFilesExists, cleanup, copyMissingPackages, newApp, readFile, runCLI, runCommand, runSchematic, updateFile} from '../utils'; +import {checkFilesExists, cleanup, copyMissingPackages, newBazelApp, readFile, runCLI, runSchematic} from '../utils'; describe('library', () => { beforeEach(cleanup); - it('creates a new library in a workspace', () => { - runSchematic('@nrwl/bazel:application --name=proj'); - runSchematic('@nrwl/bazel:lib --name=myLib'); + describe('generate', () => { + it('should work', () => { + newBazelApp('--collection=@nrwl/bazel --skip-install'); + runSchematic('@nrwl/bazel:lib --name=myLib'); - checkFilesExists( - 'tsconfig.json', 'WORKSPACE', 'BUILD.bazel', 'libs/my-lib/BUILD.bazel', 'libs/my-lib/index.ts', - 'libs/my-lib/src/my-lib.ts'); + checkFilesExists( + 'tsconfig.json', 'WORKSPACE', 'BUILD.bazel', 'libs/my-lib/BUILD.bazel', 'libs/my-lib/index.ts', + 'libs/my-lib/src/my-lib.ts'); - const cliConfig = JSON.parse(readFile('.angular-cli.json')); - expect(cliConfig.apps[0].name).toEqual('myLib'); - expect(cliConfig.apps[0].root).toEqual('libs/my-lib/src'); + const cliConfig = JSON.parse(readFile('.angular-cli.json')); + expect(cliConfig.apps[0].name).toEqual('myLib'); + expect(cliConfig.apps[0].root).toEqual('libs/my-lib/src'); + }); + }); + + describe('build', () => { + it('should work', () => { + newBazelApp('--collection=@nrwl/bazel'); + copyMissingPackages(); + runSchematic('@nrwl/bazel:lib --name=lib'); + + expect(runCLI('build')).not.toContain('error'); + }); }); }); diff --git a/e2e/bazel/nglib.test.ts b/e2e/bazel/nglib.test.ts index 46537cedfa..0c616c7178 100644 --- a/e2e/bazel/nglib.test.ts +++ b/e2e/bazel/nglib.test.ts @@ -1,18 +1,30 @@ -import {checkFilesExists, cleanup, copyMissingPackages, newApp, readFile, runCLI, runCommand, runSchematic, updateFile} from '../utils'; +import {checkFilesExists, cleanup, copyMissingPackages, newApp, newBazelApp, readFile, runCLI, runCommand, runSchematic, updateFile} from '../utils'; describe('angular library', () => { beforeEach(cleanup); - it('creates a new angularlibrary in a workspace', () => { - runSchematic('@nrwl/bazel:application --name=proj'); - runSchematic('@nrwl/bazel:nglib --name=myLib'); + describe('generate', () => { + it('creates a new angularlibrary in a workspace', () => { + newBazelApp('--collection=@nrwl/bazel --skip-install'); + runSchematic('@nrwl/bazel:nglib --name=myLib'); - checkFilesExists( - 'tsconfig.json', 'WORKSPACE', 'BUILD.bazel', 'libs/my-lib/BUILD.bazel', 'libs/my-lib/index.ts', - 'libs/my-lib/src/my-lib.module.ts'); + checkFilesExists( + 'tsconfig.json', 'WORKSPACE', 'BUILD.bazel', 'libs/my-lib/BUILD.bazel', 'libs/my-lib/index.ts', + 'libs/my-lib/src/my-lib.module.ts'); - const cliConfig = JSON.parse(readFile('.angular-cli.json')); - expect(cliConfig.apps[0].name).toEqual('myLib'); - expect(cliConfig.apps[0].root).toEqual('libs/my-lib/src'); + const cliConfig = JSON.parse(readFile('.angular-cli.json')); + expect(cliConfig.apps[0].name).toEqual('myLib'); + expect(cliConfig.apps[0].root).toEqual('libs/my-lib/src'); + }); + }); + + describe('build', () => { + it('should work', () => { + newBazelApp('--collection=@nrwl/bazel'); + copyMissingPackages(); + runSchematic('@nrwl/bazel:nglib --name=myLib'); + + expect(runCLI('build')).not.toContain('error'); + }); }); }); diff --git a/e2e/bazel/workspace.test.ts b/e2e/bazel/workspace.test.ts index ab71f94da8..a51fa2514a 100644 --- a/e2e/bazel/workspace.test.ts +++ b/e2e/bazel/workspace.test.ts @@ -1,11 +1,10 @@ -import {checkFilesExists, cleanup, copyMissingPackages, newApp, readFile, runCLI, runCommand, runSchematic, updateFile} from '../utils'; +import {checkFilesExists, cleanup, copyMissingPackages, newApp, newBazelApp, readFile, runCLI, runCommand, runSchematic, updateFile} from '../utils'; describe('workspace', () => { beforeEach(cleanup); it('creates a new workspace for developing angular applications', () => { - runSchematic('@nrwl/bazel:application --name=proj --version=0.1'); - + newBazelApp('--collection=@nrwl/bazel --skip-install'); checkFilesExists(`tsconfig.json`, `WORKSPACE`, `BUILD.bazel`); }); }); diff --git a/e2e/utils.ts b/e2e/utils.ts index c470ed698a..431ff82d1d 100644 --- a/e2e/utils.ts +++ b/e2e/utils.ts @@ -1,5 +1,5 @@ import {execSync} from 'child_process'; -import {readFileSync, statSync, writeFileSync} from 'fs'; +import {linkSync, mkdirSync, readFileSync, statSync, symlinkSync, writeFileSync} from 'fs'; import * as path from 'path'; const projectName: string = 'proj'; @@ -8,6 +8,14 @@ export function newApp(command?: string): string { return execSync(`../node_modules/.bin/ng new proj ${command}`, {cwd: `./tmp`}).toString(); } +export function newBazelApp(command?: string): string { + const res = newApp(command); + const cliPath = path.join('tmp', projectName, 'node_modules', '@angular', 'cli'); + execSync(`rm -rf ${cliPath}`); + execSync(`cp -r node_modules/clis/bazel ${cliPath}`); + return res; +} + export function runCLI(command?: string): string { return execSync(`../../node_modules/.bin/ng ${command}`, {cwd: `./tmp/${projectName}`}).toString(); } @@ -81,7 +89,3 @@ function copyNodeModule(path: string, name: string) { execSync(`rm -rf tmp/${path}/node_modules/${name}`); execSync(`cp -r node_modules/${name} tmp/${path}/node_modules/${name}`); } - -export function addNodeModule(path: string, module: string): void { - execSync(`cp -r node_modules/${module} tmp/${path}/node_modules/${module}`); -} diff --git a/package.json b/package.json index 4dd6a73bef..840d2d6474 100644 --- a/package.json +++ b/package.json @@ -7,13 +7,15 @@ "scripts": { "build": "./scripts/build.sh", "e2e": "yarn build && ./scripts/e2e.sh", + "e2e:bazel": "yarn build && ./scripts/e2e-bazel.sh", "format": "./scripts/format.sh", "linknpm": "./scripts/link.sh", "package": "./scripts/package.sh", "release": "./scripts/release.sh", "copy-to-cli": "./scripts/copy-to-cli.sh", "test": "yarn build && ./scripts/test.sh", - "publish_npm": "./scripts/publish.sh" + "publish_npm": "./scripts/publish.sh", + "postinstall": "./scripts/copy-clis.sh" }, "dependencies" :{ "jasmine-marbles": "0.1.0" @@ -30,6 +32,7 @@ "@angular/upgrade": "4.3.5", "@angular/compiler-cli": "4.3.5", "@angular/cli": "nrwl/fix-cli-build", + "bazel-cli": "nrwl/bazel-cli-build", "@ngrx/store": "4.0.3", "@ngrx/router-store": "4.0.3", "@ngrx/effects": "4.0.3", diff --git a/packages/bazel/src/app/files/__directory__/__fileName__/BUILD.bazel__tmpl__ b/packages/bazel/src/app/files/__directory__/__fileName__/BUILD.bazel__tmpl__ index e01a4277a0..73a9f873c0 100644 --- a/packages/bazel/src/app/files/__directory__/__fileName__/BUILD.bazel__tmpl__ +++ b/packages/bazel/src/app/files/__directory__/__fileName__/BUILD.bazel__tmpl__ @@ -5,6 +5,7 @@ load("@nrwl//:webpack.bzl", "webpack_bundle") ng_module( name = "module", srcs = glob(["**/*.ts"], exclude = ["e2e/**/*.ts"]), + assets = glob(["**/*.css", "**/*.html"]), deps = [], tsconfig = "//:tsconfig.json" ) @@ -30,7 +31,7 @@ filegroup( ) webpack_bundle( - name = "<%= name %>", + name = "<%= fileName %>", srcs = ["compile_and_static"], config = "@nrwl//:webpack.config.js" ) diff --git a/packages/bazel/src/nglib/files/__directory__/__fileName__/BUILD.bazel__tmpl__ b/packages/bazel/src/nglib/files/__directory__/__fileName__/BUILD.bazel__tmpl__ index fc25f34be9..143769b486 100644 --- a/packages/bazel/src/nglib/files/__directory__/__fileName__/BUILD.bazel__tmpl__ +++ b/packages/bazel/src/nglib/files/__directory__/__fileName__/BUILD.bazel__tmpl__ @@ -4,6 +4,7 @@ load("@angular//:index.bzl", "ng_module") ng_module( name = "module", srcs = glob(["**/*.ts"]), + assets = glob(["**/*.css", "**/*.html"]), deps = [ # "//libs/libname", ], diff --git a/packages/bazel/src/utils/webpack.config.js b/packages/bazel/src/utils/webpack.config.js index 603f76166c..fc6dde8176 100644 --- a/packages/bazel/src/utils/webpack.config.js +++ b/packages/bazel/src/utils/webpack.config.js @@ -27,11 +27,13 @@ module.exports = function(env) { return acc; }, {}); + const root = path.join(binDir, '..', '..', '..'); + // victor todo: remove it when ng_module rule is fixed const alias = Object.assign({}, aliasesForApps, { - '@angular/core/core': '@angular/core/@angular/core.es5', - '@angular/common/common': '@angular/common/@angular/common.es5', - '@angular/platform-browser/platform-browser': '@angular/platform-browser/@angular/platform-browser.es5' + 'node_modules/@angular/core/index': '@angular/core/bundles/core.umd', + 'node_modules/@angular/common/index': `@angular/common/bundles/common.umd`, + 'node_modules/@angular/platform-browser/index': '@angular/platform-browser/bundles/platform-browser.umd' }); return { @@ -40,7 +42,8 @@ module.exports = function(env) { ".js" ], "modules": [ - "./node_modules" + binDir, + `./node_modules`, ], "symlinks": true, alias diff --git a/packages/bazel/src/workspace/files/angular.tsconfig.json__tmpl__ b/packages/bazel/src/workspace/files/angular.tsconfig.json__tmpl__ index 82be05efbe..ecb3f69431 100644 --- a/packages/bazel/src/workspace/files/angular.tsconfig.json__tmpl__ +++ b/packages/bazel/src/workspace/files/angular.tsconfig.json__tmpl__ @@ -20,6 +20,7 @@ "node_modules/@angular/router/**", // Workaround bug introduced by 079d884 "node_modules/@angular/common/i18n_data*", + "node_modules/@angular/common/locales.d.ts", "node_modules/@angular/tsc-wrapped/**" ] } \ No newline at end of file diff --git a/packages/bazel/src/workspace/files/package.json__tmpl__ b/packages/bazel/src/workspace/files/package.json__tmpl__ index 183984d479..af5c3dcac3 100644 --- a/packages/bazel/src/workspace/files/package.json__tmpl__ +++ b/packages/bazel/src/workspace/files/package.json__tmpl__ @@ -13,27 +13,27 @@ }, "private": true, "dependencies": { - "@angular/animations": "angular/animations-builds#e2dbac0", - "@angular/common": "angular/common-builds#7a7b4de", - "@angular/compiler": "angular/compiler-builds#977d532", - "@angular/core": "angular/core-builds#69354cb", - "@angular/forms": "angular/forms-builds#1d39c45", - "@angular/http": "angular/http-builds#eeb7088", - "@angular/platform-browser": "angular/platform-browser-builds#132d63f", - "@angular/platform-browser-dynamic": "angular/platform-browser-dynamic-builds#87bb057", - "@angular/router": "angular/router-builds#7715987", + "@angular/animations": "5.0.0-beta.7", + "@angular/common": "5.0.0-beta.7", + "@angular/compiler": "5.0.0-beta.7", + "@angular/core": "5.0.0-beta.7", + "@angular/forms": "5.0.0-beta.7", + "@angular/http": "5.0.0-beta.7", + "@angular/platform-browser": "5.0.0-beta.7", + "@angular/platform-browser-dynamic": "5.0.0-beta.7", + "@angular/router": "5.0.0-beta.7", "core-js": "^2.4.1", "rxjs": "^5.4.2", "zone.js": "^0.8.14" }, "devDependencies": { - "@angular/cli": "https://github.com/nrwl/bazel-cli-build", - "@bazel/typescript": "0.0.10", - "@nrwl/schematics": "https://github.com/nrwl/schematics-build", - "@nrwl/bazel": "https://github.com/nrwl/bazel-build", - "@angular/bazel": "angular/bazel-builds#2cbc03c", - "@angular/compiler-cli": "angular/compiler-cli-builds#03ca098", - "@angular/language-service": "angular/language-service-builds#fefdacc", + "@angular/cli": "nrwl/bazel-cli-build", + "@bazel/typescript": "0.1.0", + "@nrwl/schematics": "nrwl/schematics-build", + "@nrwl/bazel": "nrwl/bazel-build", + "@angular/bazel": "5.0.0-beta.7", + "@angular/compiler-cli": "5.0.0-beta.7", + "@angular/language-service": "5.0.0-beta.7", "@types/jasmine": "~2.5.53", "@types/jasminewd2": "~2.0.2", "@types/node": "~6.0.60", @@ -49,7 +49,7 @@ "protractor": "~5.1.2", "ts-node": "~3.2.0", "tslint": "~5.3.2", - "typescript": "2.3.4", + "typescript": "2.5.1", "protobufjs": "5.0.0", "karma-spec-reporter": "0.0.31", "karma-webpack": "2.0.4" diff --git a/scripts/copy-clis.sh b/scripts/copy-clis.sh new file mode 100755 index 0000000000..120f4f2861 --- /dev/null +++ b/scripts/copy-clis.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +rm -rf ./node_modules/clis +mkdir ./node_modules/clis +cp -rf ./node_modules/@angular/cli ./node_modules/clis/standard +cp -rf ./node_modules/bazel-cli ./node_modules/clis/bazel +rm -rf ./node_modules/clis/bazel/node_modules diff --git a/scripts/e2e-bazel.sh b/scripts/e2e-bazel.sh new file mode 100755 index 0000000000..d0cd7647d3 --- /dev/null +++ b/scripts/e2e-bazel.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +./scripts/link.sh +rm -rf tmp +jest --maxWorkers=1 ./build/e2e/bazel diff --git a/yarn.lock b/yarn.lock index 221f1c84cc..6a03b09c6c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,14 @@ # yarn lockfile v1 +"@angular-devkit/build-optimizer@0.0.13": + version "0.0.13" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.0.13.tgz#cf397af76abe899aa909d4a735106694ca1f08cf" + dependencies: + loader-utils "^1.1.0" + source-map "^0.5.6" + typescript "^2.3.3" + "@angular-devkit/build-optimizer@~0.0.15": version "0.0.16" resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.0.16.tgz#d7eb151e42dd8b22ba8972334e8d22659c60fc58" @@ -14,6 +22,15 @@ version "0.0.10" resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-0.0.10.tgz#fb4d2d691d737978042cb3885813f6212c20dc2b" +"@angular-devkit/schematics@0.0.17": + version "0.0.17" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-0.0.17.tgz#61d086a266adafd8790972c87dd8f7a44f004de6" + dependencies: + "@angular-devkit/core" "0.0.10" + "@ngtools/json-schema" "^1.1.0" + minimist "^1.2.0" + rxjs "^5.4.2" + "@angular-devkit/schematics@0.0.19", "@angular-devkit/schematics@~0.0.18": version "0.0.19" resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-0.0.19.tgz#dd1a65004a26c1913a7ff4d1d8e90b9eeba85b81" @@ -161,6 +178,15 @@ version "1.1.0" resolved "https://registry.yarnpkg.com/@ngtools/json-schema/-/json-schema-1.1.0.tgz#c3a0c544d62392acc2813a42c8a0dc6f58f86922" +"@ngtools/webpack@1.7.0-beta.1": + version "1.7.0-beta.1" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-1.7.0-beta.1.tgz#9dbef601930bed7aa65b40995ace75223b0af036" + dependencies: + enhanced-resolve "^3.1.0" + loader-utils "^1.0.2" + magic-string "^0.22.3" + source-map "^0.5.6" + "@ngtools/webpack@1.7.0-rc.2": version "1.7.0-rc.2" resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-1.7.0-rc.2.tgz#39e207d5e33a275d5c310ea8fb8b58c5be98270b" @@ -170,6 +196,16 @@ magic-string "^0.22.3" source-map "^0.5.6" +"@nrwl/nx@https://github.com/nrwl/nx-build": + version "0.0.1" + resolved "https://github.com/nrwl/nx-build#c6522e2eff170dcb86b828ed714fdf2ad6ea7c5e" + dependencies: + jasmine-marbles "0.1.0" + +"@schematics/angular@0.0.27": + version "0.0.27" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-0.0.27.tgz#5067451954b59545f9e96a1b84588a6757fbc563" + "@schematics/angular@0.0.30", "@schematics/angular@~0.0.30": version "0.0.30" resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-0.0.30.tgz#4969782c7874275931ffb21919a94a4e7d0d362a" @@ -265,6 +301,10 @@ ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" +ansi-escapes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" + ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -616,6 +656,70 @@ batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" +bazel-cli@nrwl/bazel-cli-build: + version "1.4.0-beta.1" + resolved "https://codeload.github.com/nrwl/bazel-cli-build/tar.gz/c9ffda1468f587417289eaba6a51ad1323f8fafe" + dependencies: + "@angular-devkit/build-optimizer" "0.0.13" + "@angular-devkit/schematics" "0.0.17" + "@ngtools/json-schema" "1.1.0" + "@ngtools/webpack" "1.7.0-beta.1" + "@nrwl/nx" "https://github.com/nrwl/nx-build" + "@schematics/angular" "0.0.27" + autoprefixer "^6.5.3" + chalk "^2.0.1" + circular-dependency-plugin "^3.0.0" + common-tags "^1.3.1" + core-object "^3.1.0" + css-loader "^0.28.1" + cssnano "^3.10.0" + denodeify "^1.2.1" + ember-cli-string-utils "^1.0.0" + exports-loader "^0.6.3" + extract-text-webpack-plugin "3.0.0" + file-loader "^0.10.0" + fs-extra "^4.0.0" + get-caller-file "^1.0.0" + glob "^7.0.3" + heimdalljs "^0.2.4" + heimdalljs-logger "^0.1.9" + html-webpack-plugin "^2.29.0" + inquirer "^3.0.0" + istanbul-instrumenter-loader "^2.0.0" + karma-source-map-support "^1.2.0" + less "^2.7.2" + less-loader "^4.0.5" + license-webpack-plugin "^1.0.0" + lodash "^4.11.1" + memory-fs "^0.4.1" + node-modules-path "^1.0.0" + nopt "^4.0.1" + opn "~5.1.0" + portfinder "~1.0.12" + postcss-loader "^1.3.3" + postcss-url "^5.1.2" + raw-loader "^0.5.1" + resolve "^1.1.7" + rxjs "^5.4.2" + sass-loader "^6.0.3" + semver "^5.1.0" + silent-error "^1.0.0" + source-map-loader "^0.2.0" + source-map-support "^0.4.1" + style-loader "^0.13.1" + stylus "^0.54.5" + stylus-loader "^3.0.1" + typescript ">=2.0.0 <2.5.0" + url-loader "^0.5.7" + webpack "~3.4.1" + webpack-concat-plugin "1.4.0" + webpack-dev-middleware "^1.11.0" + webpack-dev-server "~2.5.1" + webpack-merge "^4.1.0" + zone.js "^0.8.14" + optionalDependencies: + node-sass "^4.3.0" + bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" @@ -957,6 +1061,16 @@ clean-css@4.1.x: dependencies: source-map "0.5.x" +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -1905,6 +2019,14 @@ extend@^3.0.0, extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +external-editor@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -1960,6 +2082,12 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + file-loader@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.1.tgz#815034119891fc6441fb5a64c11bc93c22ddd842" @@ -2454,6 +2582,10 @@ iconv-lite@0.4.15: version "0.4.15" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" +iconv-lite@^0.4.17: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -2515,6 +2647,25 @@ ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" +inquirer@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + dependencies: + ansi-escapes "^3.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" + internal-ip@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" @@ -2677,6 +2828,10 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -3041,6 +3196,10 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jschardet@^1.4.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.5.1.tgz#c519f629f86b3a5bedba58a88d311309eec097f9" + jsdom@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" @@ -3340,7 +3499,7 @@ lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.11.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.5.0, lodash@~4.17.4: +lodash@^4.0.0, lodash@^4.11.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -3574,6 +3733,10 @@ multicast-dns@^6.0.1: dns-packet "^1.0.1" thunky "^0.1.0" +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + nan@^2.3.0, nan@^2.3.2: version "2.6.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" @@ -3823,6 +3986,12 @@ once@^1.3.0, once@^1.3.3, once@^1.4.0: dependencies: wrappy "1" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + opn@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" @@ -4725,6 +4894,13 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: dependencies: path-parse "^1.0.5" +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" @@ -4748,6 +4924,22 @@ rsvp@~3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.2.1.tgz#07cb4a5df25add9e826ebc67dcc9fd89db27d84a" +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + rxjs@5.4.3, rxjs@^5.4.2: version "5.4.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.3.tgz#0758cddee6033d68e0fd53676f0f3596ce3d483f" @@ -4916,7 +5108,7 @@ shellwords@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" -signal-exit@^3.0.0: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -4980,6 +5172,17 @@ socket.io@1.7.3: socket.io-client "1.7.3" socket.io-parser "2.3.1" +sockjs-client@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.2.tgz#f0212a8550e4c9468c8cceaeefd2e3493c033ad5" + dependencies: + debug "^2.2.0" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.1" + sockjs-client@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" @@ -5148,7 +5351,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: +string-width@^2.0.0, string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -5305,6 +5508,10 @@ throat@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836" +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + thunky@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e" @@ -5320,7 +5527,7 @@ timers-browserify@^2.0.2: global "^4.3.2" setimmediate "^1.0.4" -tmp@0.0.31, tmp@0.0.x: +tmp@0.0.31, tmp@0.0.x, tmp@^0.0.31: version "0.0.31" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" dependencies: @@ -5404,7 +5611,7 @@ type-is@~1.6.15: media-typer "0.3.0" mime-types "~2.1.15" -typescript@2.4.2, typescript@^2.3.3: +typescript@2.4.2, "typescript@>=2.0.0 <2.5.0", typescript@^2.3.3: version "2.4.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.2.tgz#f8395f85d459276067c988aa41837a8f82870844" @@ -5496,7 +5703,7 @@ url-parse@1.0.x: querystringify "0.0.x" requires-port "1.0.x" -url-parse@^1.1.8: +url-parse@^1.1.1, url-parse@^1.1.8: version "1.1.9" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19" dependencies: @@ -5633,6 +5840,32 @@ webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.11.0, webpack-dev-midd range-parser "^1.0.3" time-stamp "^2.0.0" +webpack-dev-server@~2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.5.1.tgz#a02e726a87bb603db5d71abb7d6d2649bf10c769" + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^1.6.0" + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + del "^3.0.0" + express "^4.13.3" + html-entities "^1.2.0" + http-proxy-middleware "~0.17.4" + internal-ip "^1.2.0" + opn "4.0.2" + portfinder "^1.0.9" + selfsigned "^1.9.1" + serve-index "^1.7.2" + sockjs "0.3.18" + sockjs-client "1.1.2" + spdy "^3.4.1" + strip-ansi "^3.0.0" + supports-color "^3.1.1" + webpack-dev-middleware "^1.11.0" + yargs "^6.0.0" + webpack-dev-server@~2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.7.1.tgz#21580f5a08cd065c71144cf6f61c345bca59a8b8" @@ -5674,6 +5907,33 @@ webpack-sources@^1.0.1: source-list-map "^2.0.0" source-map "~0.5.3" +webpack@~3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.4.1.tgz#4c3f4f3fb318155a4db0cb6a36ff05c5697418f4" + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^5.1.5" + ajv-keywords "^2.0.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + webpack@~3.5.5: version "3.5.5" resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.5.5.tgz#3226f09fc8b3e435ff781e7af34f82b68b26996c"