diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 86b5e736c16..5132bfcbefc 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,6 +1,7 @@ # Angular Material components /src/lib/* @jelbourn /src/lib/autocomplete/** @kara @crisbeto +/src/lib/badge/** @amcdnl /src/lib/bottom-sheet/** @jelbourn @crisbeto /src/lib/button-toggle/** @tinayuangao /src/lib/button/** @tinayuangao @@ -18,9 +19,11 @@ /src/lib/list/** @jelbourn @crisbeto @devversion /src/lib/menu/** @kara @crisbeto /src/lib/paginator/** @andrewseguin +/src/lib/prebuilt-themes/** @jelbourn /src/lib/progress-bar/** @jelbourn @crisbeto @josephperrott /src/lib/progress-spinner/** @jelbourn @crisbeto @josephperrott /src/lib/radio/** @tinayuangao @devversion +/src/lib/schematics/** @amcdnl /src/lib/select/** @kara @crisbeto /src/lib/sidenav/** @mmalerba /src/lib/slide-toggle/** @devversion @@ -32,7 +35,6 @@ /src/lib/tabs/** @andrewseguin /src/lib/toolbar/** @devversion /src/lib/tooltip/** @andrewseguin -/src/lib/badge/** @amcdnl /src/lib/tree/** @tinayuangao # Angular Material core @@ -42,10 +44,10 @@ /src/lib/core/datetime/** @mmalerba /src/lib/core/error/** @crisbeto @mmalerba /src/lib/core/gestures/** @jelbourn +/src/lib/core/label/** @kara @mmalerba /src/lib/core/line/** @jelbourn /src/lib/core/option/** @kara @crisbeto /src/lib/core/placeholder/** @kara @mmalerba -/src/lib/core/label/** @kara @mmalerba /src/lib/core/ripple/** @devversion /src/lib/core/selection/** @tinayuangao @jelbourn /src/lib/core/selection/pseudo*/** @crisbeto @jelbourn @@ -93,8 +95,9 @@ /src/demo-app/* @jelbourn /src/demo-app/a11y/** @tinayuangao /src/demo-app/autocomplete/** @kara @crisbeto -/src/demo-app/bottom-sheet/** @jelbourn @crisbeto +/src/demo-app/badge/** @amcdnl /src/demo-app/baseline/** @mmalerba +/src/demo-app/bottom-sheet/** @jelbourn @crisbeto /src/demo-app/button-toggle/** @tinayuangao /src/demo-app/button/** @tinayuangao /src/demo-app/card/** @jelbourn @@ -135,7 +138,6 @@ /src/demo-app/tooltip/** @andrewseguin /src/demo-app/tree/** @tinayuangao /src/demo-app/typography/** @crisbeto -/src/demo-app/badge/** @amcdnl # E2E app /e2e/* @jelbourn @@ -179,9 +181,6 @@ /src/e2e-app/slide-toggle/** @devversion /src/e2e-app/tabs/** @andrewseguin -# Schematics -/schematics/** @amcdnl - # Universal app /src/universal-app/** @jelbourn diff --git a/.gitignore b/.gitignore index 15c67c16da3..f19f22ba8ac 100644 --- a/.gitignore +++ b/.gitignore @@ -41,5 +41,5 @@ testem.log /.git # schematics -/schematics/**/*.js -/schematics/**/*.map \ No newline at end of file +/src/lib/schematics/**/*.js +/src/lib/schematics/**/*.map diff --git a/BUILD.bazel b/BUILD.bazel index 64d9b28e813..592756e92db 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -14,12 +14,15 @@ filegroup( # TODO(alexeagle): figure out what to do srcs = glob(["/".join(["node_modules", pkg, "**", ext]) for pkg in [ "@angular", + "@angular-devkit", + "@schematics", "@types", "bytebuffer", "hammerjs", "jasmine", "minimist", "moment", + "parse5", "protobufjs", "protractor", "reflect-metadata", diff --git a/package-lock.json b/package-lock.json index 871893847c0..f99deede3aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@angular-devkit/core": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.4.5.tgz", - "integrity": "sha512-yXQSKwtROV3lm+4TeO3HYjYveIA/YTnVqfn3uBwyYtA0hRpZGxZyGOY31v523qcRTvO9xMH0S0zjTq+uyraz0w==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.4.6.tgz", + "integrity": "sha512-xf3sH98IE3G8BaksoUFBg3QNzFIq/wKNF6Qr116yxEJJoO+ikgAQlHG0z+2rIUTW4+qibJKXHAGjUKA6g5bYdw==", "dev": true, "requires": { "ajv": "5.5.2", @@ -28,9 +28,9 @@ } }, "@angular-devkit/schematics": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.4.5.tgz", - "integrity": "sha512-kIHEmjCIumy/0rD3tqYm3tACnJbidj8RpUQq4VbPs/cEnTVjqwNDLJV/Uaa3qgvzTtt5JyBkUnZcUj7t9ppsKg==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.4.6.tgz", + "integrity": "sha512-Iw9OB98/5oszKXha5MiXy3jCHzXUula+Pmo57owdqWtgAxpAFmkNC2QM91kcKgZpMJBjEQsADTu8Alv2aCGFcw==", "dev": true, "requires": { "@ngtools/json-schema": "1.1.0", @@ -235,24 +235,24 @@ "dev": true }, "@firebase/auth": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.3.4.tgz", - "integrity": "sha512-lpKpPGVyNEuQasukVgxrti/GptEZDE24B/UnRmvjiwpVlOpVPLsaNJkklLiODlH7DS3yIyGHWYqojNl3iaTEmA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.4.0.tgz", + "integrity": "sha512-+ocmny3Ja6WOrucmnu7iwedI0G3AqOMCSwqlC9cMpKPQubQhmOPogTD8GZsY4t/nkBxmcRTUjQWfV7UsNwY4+w==", "dev": true, "requires": { - "@firebase/auth-types": "0.1.2" + "@firebase/auth-types": "0.2.0" } }, "@firebase/auth-types": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.1.2.tgz", - "integrity": "sha512-pofZTXrz/urWmH+5opF4jpuv6GEaWOQtX9dl4AKAjOYoLceRyJn4OEeZodsDYdp6kLyARH1mcYtFMyZ9jvUtYg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.2.0.tgz", + "integrity": "sha512-3Ny3xP0DeeeFz92093PHyloIDSFhzajib0X6BZZkz3hS3c/qt+xvACTKpz1jHrQTQAhNL8fGBvO8LsZHrnDT0Q==", "dev": true }, "@firebase/database": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.2.0.tgz", - "integrity": "sha512-3IYqpxFv3ZIOc+JmGKqn+Yyg36lsxmw/bzZrmsm2YG0Rk9uJkPCGMXxRI+K5+8RYZmQxotL+USRxGYzk0wKvjw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.2.1.tgz", + "integrity": "sha512-IxONy7MM+Vmnx7bupBujmUyaTqE0n9Jt5xW/2gyLRc9i2wOxNR0XDlJ3Oc12+bksW/zMXHJU1hNO1jxRmIKmsw==", "dev": true, "requires": { "@firebase/database-types": "0.2.0", @@ -269,9 +269,9 @@ "dev": true }, "@firebase/firestore": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-0.3.5.tgz", - "integrity": "sha512-lJXLIZ1gVEg6SyB64C40qXcdfLfIVTglpwN67AXHUvfjEKjxc6dvgzJkecF8ennwMeWBwMI86toLApB37t+Xbw==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-0.3.6.tgz", + "integrity": "sha512-omMsncTflPW3Tm6Xbq/4u7lofkttN5yv12RslpQ+ts4BHSeWHan2KYToChup451ViC/8zqmSS8669vOQ5Y3YFg==", "dev": true, "requires": { "@firebase/firestore-types": "0.2.2", @@ -287,6 +287,23 @@ "integrity": "sha512-yuC07Zi8p0myCQoU62O0fnGcNEcWZnKEGcQ1tj71Qh3E3Dw7qPJ75kXeeL95Bh1PHI0+TqAcDTEb9yVG9xIUVw==", "dev": true }, + "@firebase/functions": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.1.0.tgz", + "integrity": "sha512-cZpD4NO8v84pbgR6Fk8+DW4KGLKltmu20+WF8lJQao7H3M+10QecCvOfaXanUjxjVZzCFXOJ3EIqoNLT/HQciQ==", + "dev": true, + "requires": { + "@firebase/functions-types": "0.1.0", + "@firebase/messaging-types": "0.1.2", + "isomorphic-fetch": "2.2.1" + } + }, + "@firebase/functions-types": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.1.0.tgz", + "integrity": "sha512-Mm0e1OJqLaGJoBxhKC/eYfSo+yE39GpR1fRszintKmW5VKf3JMgmLrHTs/lxvtg03RQXgjdqJIJnRGFic5Z4kg==", + "dev": true + }, "@firebase/logger": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.0.tgz", @@ -311,13 +328,14 @@ "dev": true }, "@firebase/polyfill": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.2.0.tgz", - "integrity": "sha512-ylgKsY017TvDH9P01ewccwLBF/yhoj4W1lEad47cuhlOr1EOmSB3fUOVLiFUfElndPJdcpyEUMPK6Tm4hc7Ycw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.0.tgz", + "integrity": "sha512-nE8LMXBhvWdHBlxtjkZkid8WzowBbxUC+mcYdsEbvx5A7hWswisFZO8XwoKnM1jYYSOpDrtxFmyqWBAc15DmRg==", "dev": true, "requires": { "promise-polyfill": "7.1.0", - "tslib": "1.9.0" + "tslib": "1.9.0", + "whatwg-fetch": "2.0.3" } }, "@firebase/storage": { @@ -359,7 +377,7 @@ "requires": { "array-uniq": "1.0.3", "arrify": "1.0.1", - "concat-stream": "1.6.1", + "concat-stream": "1.6.2", "create-error-class": "3.0.2", "duplexify": "3.5.4", "ent": "2.2.0", @@ -1424,7 +1442,7 @@ "arrify": "1.0.1", "async": "2.6.0", "compressible": "2.0.13", - "concat-stream": "1.6.1", + "concat-stream": "1.6.2", "create-error-class": "3.0.2", "duplexify": "3.5.4", "extend": "3.0.1", @@ -1524,9 +1542,9 @@ "dev": true }, "@schematics/angular": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-0.4.5.tgz", - "integrity": "sha512-81NmeSvVG5avb2SHHpQeaDc12QQNlEN937CxhzNjGmKTBuLjkVFF39pffkkRIFQ5ybSvUEB8Fi/OfNyF+1VaBw==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-0.4.6.tgz", + "integrity": "sha512-dszECpURkT05a7D0QFEvIZKGhIK3I9Y3//KnZ//Ajt5Qc7/Ulk8OzyzumYcpS78ZF95hXOMZTHfs1kGt5zZ3Ew==", "dev": true, "requires": { "typescript": "2.6.2" @@ -1565,7 +1583,7 @@ "integrity": "sha512-Z5nu9Pbxj9yNeXIK3UwGlRdJth4cZ5sCq05nI7FaI6B0oz28nxkOtp6Lsz0ZnmLHJGvOJfB/VHxSTbVq/i6ujA==", "dev": true, "requires": { - "@types/node": "7.0.56" + "@types/node": "7.0.57" } }, "@types/glob": { @@ -1576,7 +1594,15 @@ "requires": { "@types/events": "1.2.0", "@types/minimatch": "3.0.3", - "@types/node": "7.0.56" + "@types/node": "9.6.0" + }, + "dependencies": { + "@types/node": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.0.tgz", + "integrity": "sha512-h3YZbOq2+ZoDFI1z8Zx0Ck/xRWkOESVaLdgLdd/c25mMQ1Y2CAkILu9ny5A15S5f32gGcQdaUIZ2jzYr8D7IFg==", + "dev": true + } } }, "@types/google-cloud__storage": { @@ -1585,7 +1611,7 @@ "integrity": "sha512-010Llp+5ze+XWWmZuLDxs0pZgFjOgtJQVt9icJ0Ed67ZFLq7PnXkYx8x/k9nwDojR5/X4XoLPNqB1F627TScdQ==", "dev": true, "requires": { - "@types/node": "7.0.56" + "@types/node": "7.0.57" } }, "@types/gulp": { @@ -1594,7 +1620,7 @@ "integrity": "sha1-g8WcaBzCM9Hsf4LSaVVVZvoTMVY=", "dev": true, "requires": { - "@types/node": "7.0.56", + "@types/node": "7.0.57", "@types/orchestrator": "0.3.2", "@types/vinyl": "2.0.2" } @@ -1623,7 +1649,7 @@ "integrity": "sha1-njnQT2/k82+nR3VmytH6+AsqZx8=", "dev": true, "requires": { - "@types/node": "7.0.56" + "@types/node": "7.0.57" } }, "@types/minimatch": { @@ -1639,9 +1665,9 @@ "dev": true }, "@types/node": { - "version": "7.0.56", - "resolved": "http://registry.npmjs.org/@types/node/-/node-7.0.56.tgz", - "integrity": "sha512-NgjN3xPyqbAXSIpznNAR5Cisx5uKqJWxcS9kefzSFEX/9J7O01/FHyfnvPI7SztBf9p6c8mqOn3olZWJx3ja6g==", + "version": "7.0.57", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.57.tgz", + "integrity": "sha512-Iikf0IAus1OX++3Jrc1R2bsZggO+m22G5ee56JccYKejx5GNT3nHhY8v6J4OXId1hXXlb0n45hcaVwZwQcZZ6w==", "dev": true }, "@types/orchestrator": { @@ -1650,7 +1676,7 @@ "integrity": "sha512-cKB4yTX0wGaRCSkdHDX2fkGQbMAA8UOshC2U7DQky1CE5o+5q2iQQ8VkbPbE/88uaTtsusvBPMcCX7dgmjxBhQ==", "dev": true, "requires": { - "@types/node": "7.0.56", + "@types/node": "7.0.57", "@types/q": "1.0.7" } }, @@ -1667,7 +1693,7 @@ "dev": true, "requires": { "@types/gulp": "3.8.32", - "@types/node": "7.0.56" + "@types/node": "7.0.57" } }, "@types/selenium-webdriver": { @@ -1683,7 +1709,7 @@ "dev": true, "requires": { "@types/glob": "5.0.35", - "@types/node": "7.0.56" + "@types/node": "7.0.57" } }, "@types/vinyl": { @@ -1692,7 +1718,7 @@ "integrity": "sha512-2iYpNuOl98SrLPBZfEN9Mh2JCJ2EI9HU35SfgBEb51DcmaHkhp8cKMblYeBqMQiwXMgAD3W60DbQ4i/UdLiXhw==", "dev": true, "requires": { - "@types/node": "7.0.56" + "@types/node": "7.0.57" } }, "JSONStream": { @@ -2164,7 +2190,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000815", + "caniuse-db": "1.0.30000819", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.18", @@ -2367,12 +2393,13 @@ "dev": true }, "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { - "readable-stream": "2.3.5" + "readable-stream": "2.3.5", + "safe-buffer": "5.1.1" } }, "blob": { @@ -2487,8 +2514,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000815", - "electron-to-chromium": "1.3.38" + "caniuse-db": "1.0.30000819", + "electron-to-chromium": "1.3.40" } }, "browserstack": { @@ -2604,6 +2631,12 @@ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, "buffered-spawn": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffered-spawn/-/buffered-spawn-1.1.2.tgz", @@ -2725,6 +2758,15 @@ "lowercase-keys": "1.0.0", "normalize-url": "2.0.1", "responselike": "1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true, + "optional": true + } } }, "call-me-maybe": { @@ -2772,15 +2814,15 @@ } }, "caniuse-db": { - "version": "1.0.30000815", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000815.tgz", - "integrity": "sha1-DiGPoTPQ0HHIhqoEG0NSWMx0aJE=", + "version": "1.0.30000819", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000819.tgz", + "integrity": "sha1-w7fdVZ5ebWPV3Kpiusa9BMdhlwk=", "dev": true }, "caniuse-lite": { - "version": "1.0.30000815", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000815.tgz", - "integrity": "sha512-PGSOPK6gFe5fWd+eD0u2bG0aOsN1qC4B1E66tl3jOsIoKkTIcBYAc2+O6AeNzKW8RsFykWgnhkTlfOyuTzgI9A==", + "version": "1.0.30000819", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000819.tgz", + "integrity": "sha512-9i1d8eiKA6dLvsMrVrXOTP9/1sd9iIv4iC/UbPbIa9iQd9Gcnozi2sQ0d69TiQY9l7Alt7YIWISOBwyGSM6H0Q==", "dev": true }, "canonical-path": { @@ -3129,9 +3171,9 @@ } }, "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, "clone-buffer": { @@ -3141,13 +3183,13 @@ "dev": true }, "clone-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.0.tgz", - "integrity": "sha1-6uCiQT9VwJQvgYwin+/OhF1/Oxw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz", + "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==", "dev": true, "requires": { "is-regexp": "1.0.0", - "is-supported-regexp-flag": "1.0.0" + "is-supported-regexp-flag": "1.0.1" } }, "clone-response": { @@ -3257,9 +3299,9 @@ } }, "commander": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.0.tgz", - "integrity": "sha512-7B1ilBwtYSbetCgTY1NJFg+gVpestg0fdA1MhC1Vs4ssyfSXnCAjFr+QcQM9/RedXC0EaUx1sG8Smgw2VfgKEg==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, "commondir": { @@ -3370,11 +3412,12 @@ "dev": true }, "concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { + "buffer-from": "1.0.0", "inherits": "2.0.3", "readable-stream": "2.3.5", "typedarray": "0.0.6" @@ -3476,22 +3519,22 @@ "dev": true }, "conventional-changelog": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.18.tgz", - "integrity": "sha512-swf5bqhm7PsY2cw6zxuPy6+rZiiGwEpQnrWki+L+z2oZI53QSYwU4brpljmmWss821AsiwmVL+7V6hP+ER+TBA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.19.tgz", + "integrity": "sha512-QlZpBVekLp5U8FWR8CAu0co5CM80ImhhR+nkRkEvp/cJpeiDSct410Pxz/Xec5F4ii+2tfUVChFa94qFjmLf5A==", "dev": true, "requires": { "conventional-changelog-angular": "1.6.6", - "conventional-changelog-atom": "0.2.4", - "conventional-changelog-codemirror": "0.3.4", - "conventional-changelog-core": "2.0.5", - "conventional-changelog-ember": "0.3.6", - "conventional-changelog-eslint": "1.0.5", - "conventional-changelog-express": "0.3.4", + "conventional-changelog-atom": "0.2.5", + "conventional-changelog-codemirror": "0.3.5", + "conventional-changelog-core": "2.0.6", + "conventional-changelog-ember": "0.3.7", + "conventional-changelog-eslint": "1.0.6", + "conventional-changelog-express": "0.3.5", "conventional-changelog-jquery": "0.1.0", "conventional-changelog-jscs": "0.1.0", - "conventional-changelog-jshint": "0.3.4", - "conventional-changelog-preset-loader": "1.1.6" + "conventional-changelog-jshint": "0.3.5", + "conventional-changelog-preset-loader": "1.1.7" } }, "conventional-changelog-angular": { @@ -3513,9 +3556,9 @@ } }, "conventional-changelog-atom": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.4.tgz", - "integrity": "sha512-4+hmbBwcAwx1XzDZ4aEOxk/ONU0iay10G0u/sld16ksgnRUHN7CxmZollm3FFaptr6VADMq1qxomA+JlpblBlg==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.5.tgz", + "integrity": "sha512-JNkzZ/T9B7BeY5ec5gxKJY/ZArZF668J+jOtT44l06zkRLEHTBBWYMWB9BW2YBquZjUiJdlsYIK2VKZRpHGMcg==", "dev": true, "requires": { "q": "1.5.1" @@ -3530,9 +3573,9 @@ } }, "conventional-changelog-codemirror": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.4.tgz", - "integrity": "sha512-8M7pGgQVzRU//vG3rFlLYqqBywOLxu9XM0/lc1/1Ll7RuKA79PgK9TDpuPmQDHFnqGS7D1YiZpC3Z0D9AIYExg==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.5.tgz", + "integrity": "sha512-TRcKG8wNSEOCQf7giKRTcmXH9lPyrLbYT4jMQxh2LtZ/6WUgS/ocyHk+60Pei5x5woxX+KABx2CTorr08eV2Xg==", "dev": true, "requires": { "q": "1.5.1" @@ -3547,18 +3590,18 @@ } }, "conventional-changelog-core": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.5.tgz", - "integrity": "sha512-lP1s7Z3NyEFcG78bWy7GG7nXsq9OpAJgo2xbyAlVBDweLSL5ghvyEZlkEamnAQpIUVK0CAVhs8nPvCiQuXT/VA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.6.tgz", + "integrity": "sha512-md2KnSj/6UTBHdD/bisCyWOEEX+2pxGDWquGsK9AGUlAdV+PUJEPbK5taEMhpb0fx0o2YiXxS6h92BIBd8HX6w==", "dev": true, "requires": { - "conventional-changelog-writer": "3.0.4", - "conventional-commits-parser": "2.1.5", + "conventional-changelog-writer": "3.0.5", + "conventional-commits-parser": "2.1.6", "dateformat": "3.0.3", "get-pkg-repo": "1.4.0", - "git-raw-commits": "1.3.4", + "git-raw-commits": "1.3.5", "git-remote-origin-url": "2.0.0", - "git-semver-tags": "1.3.4", + "git-semver-tags": "1.3.5", "lodash": "4.17.5", "normalize-package-data": "2.4.0", "q": "1.5.1", @@ -3582,9 +3625,9 @@ } }, "conventional-changelog-ember": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.6.tgz", - "integrity": "sha512-hBM1xb5IrjNtsjXaGryPF/Wn36cwyjkNeqX/CIDbJv/1kRFBHsWoSPYBiNVEpg8xE5fcK4DbPhGTDN2sVoPeiA==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.7.tgz", + "integrity": "sha512-wu0Q6CO/9wll9cedpnWhQqe3z+eJz92hOZxdXyDiu7n0Sp9NC42Nvh/wCNwwWW7/FaPsVXGzbxpYylpebSC1+Q==", "dev": true, "requires": { "q": "1.5.1" @@ -3599,9 +3642,9 @@ } }, "conventional-changelog-eslint": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.5.tgz", - "integrity": "sha512-7NUv+gMOS8Y49uPFRgF7kuLZqpnrKa2bQMZZsc62NzvaJmjUktnV03PYHuXhTDEHt5guvV9gyEFtUpgHCDkojg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.6.tgz", + "integrity": "sha512-+ZOmJez6R3z9DH/OBd6nd4l+saJzyi27i/gqwglW+ibC8XJe+B0lt56MFB1Su8EmjZyX4iDXf/QRUoXT1jzGyQ==", "dev": true, "requires": { "q": "1.5.1" @@ -3616,9 +3659,9 @@ } }, "conventional-changelog-express": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.4.tgz", - "integrity": "sha512-M+UUb715TXT6l9vyMf4HYvAepnQn0AYTcPi6KHrFsd80E0HErjQnqStBg8i3+Qm7EV9+RyATQEnIhSzHbdQ7+A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.5.tgz", + "integrity": "sha512-1H0+evGa2CLUe0VPpiynI3jSP2uMSuvT/iGKzsd5R7iko85Lkwh91Mx9VVgH8scU6RKweEpy2Wn8HN+/0wM6Lg==", "dev": true, "requires": { "q": "1.5.1" @@ -3651,9 +3694,9 @@ } }, "conventional-changelog-jshint": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.4.tgz", - "integrity": "sha512-CdrqwDgL56b176FVxHmhuOvnO1dRDQvrMaHyuIVjcFlOXukATz2wVT17g8jQU3LvybVbyXvJRbdD5pboo7/1KQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.5.tgz", + "integrity": "sha512-K1dOn53tMah5ggkR95/V+1foi0cxALl4AWIks6RR0jLE0vOktn9utDgCQD7HcRbQ4i2U2odhYbPTbIFRJs1fIA==", "dev": true, "requires": { "compare-func": "1.3.2", @@ -3669,19 +3712,19 @@ } }, "conventional-changelog-preset-loader": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.6.tgz", - "integrity": "sha512-yWPIP9wwsCKeUSPYApnApWhKIDjWRIX/uHejGS1tYfEsQR/bwpDFET7LYiHT+ujNbrlf6h1s3NlPGheOd4yJRQ==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.7.tgz", + "integrity": "sha512-Lx188u/dEFrwcZ+CWYm/3BXM9HEMUV0hxxVX9VMZ12wsXXZokYnJe5RJC6ZcLvElsjCKehtmT+gGio5QdvCOTg==", "dev": true }, "conventional-changelog-writer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.4.tgz", - "integrity": "sha512-EUf/hWiEj3IOa5Jk8XDzM6oS0WgijlYGkUfLc+mDnLH9RwpZqhYIBwgJHWHzEB4My013wx2FhmUu45P6tQrucw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.5.tgz", + "integrity": "sha512-4nVvhRvvtdbBSfoeK+1QIbjqjx4Y+VddF4NRcsJgInDnA/TuVel0SXLCtTOeRH1DueFctiuILfVqdammBxmWEQ==", "dev": true, "requires": { "compare-func": "1.3.2", - "conventional-commits-filter": "1.1.5", + "conventional-commits-filter": "1.1.6", "dateformat": "3.0.3", "handlebars": "4.0.11", "json-stringify-safe": "5.0.1", @@ -3827,19 +3870,19 @@ } }, "conventional-commits-filter": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.5.tgz", - "integrity": "sha512-mj3+WLj8UZE72zO9jocZjx8+W4Bwnx/KHoIz1vb4F8XUXj0XSjp8Y3MFkpRyIpsRiCBX+DkDjxGKF/nfeu7BGw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz", + "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==", "dev": true, "requires": { "is-subset": "0.1.1", - "modify-values": "1.0.0" + "modify-values": "1.0.1" } }, "conventional-commits-parser": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.5.tgz", - "integrity": "sha512-jaAP61py+ISMF3/n3yIiIuY5h6mJlucOqawu5mLB1HaQADLvg/y5UB3pT7HSucZJan34lp7+7ylQPfbKEGmxrA==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.6.tgz", + "integrity": "sha512-3Z77cAKSvEG3D5BSm3IFkOTP2qz8TZX8e8OPU7BGP2ruP7zPs7laHSqiZ7eYup835FKP4yyj+DHjmcvmOyp/0w==", "dev": true, "requires": { "JSONStream": "1.3.2", @@ -4322,13 +4365,13 @@ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { - "clone": "1.0.3" + "clone": "1.0.4" }, "dependencies": { "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true } } @@ -4369,7 +4412,7 @@ "requires": { "globby": "5.0.0", "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", "object-assign": "4.1.1", "pify": "2.3.0", "pinkie-promise": "2.0.1", @@ -4428,7 +4471,7 @@ "integrity": "sha1-koRk1vknNgfT9muaV+JZ5jVmd1U=", "dev": true, "requires": { - "commander": "2.15.0", + "commander": "2.15.1", "debug": "2.6.9", "filing-cabinet": "1.14.0", "precinct": "3.8.0" @@ -4627,7 +4670,7 @@ "glob": "7.1.2", "htmlparser2": "3.9.2", "lodash": "4.17.5", - "marked": "0.3.17", + "marked": "0.3.18", "minimatch": "3.0.4", "mkdirp": "0.5.1", "mkdirp-promise": "5.0.1", @@ -4852,9 +4895,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.38", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.38.tgz", - "integrity": "sha1-SSNLAMBZL2KSH5QmvM7+4j3ghrs=", + "version": "1.3.40", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.40.tgz", + "integrity": "sha1-H71tl779crim+SHcONIkE9L2/d8=", "dev": true }, "empower": { @@ -4883,6 +4926,15 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "0.4.19" + } + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -5238,7 +5290,7 @@ "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=", "dev": true, "requires": { - "clone-regexp": "1.0.0" + "clone-regexp": "1.0.1" } }, "exit": { @@ -5476,7 +5528,7 @@ "glob-parent": "3.1.0", "is-glob": "4.0.0", "merge2": "1.2.1", - "micromatch": "3.1.9" + "micromatch": "3.1.10" }, "dependencies": { "arr-diff": { @@ -5760,9 +5812,9 @@ "dev": true }, "micromatch": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", - "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { "arr-diff": "4.0.0", @@ -5857,34 +5909,17 @@ "dev": true, "requires": { "app-module-path": "2.2.0", - "commander": "2.15.0", + "commander": "2.15.1", "debug": "3.1.0", "enhanced-resolve": "3.4.1", "is-relative-path": "1.0.2", "module-definition": "2.2.4", "module-lookup-amd": "5.0.1", - "resolve": "1.5.0", + "resolve": "1.6.0", "resolve-dependency-path": "1.0.2", "sass-lookup": "1.1.0", "stylus-lookup": "1.0.2", "typescript": "2.7.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } } }, "fill-range": { @@ -5976,7 +6011,7 @@ "requires": { "detect-file": "1.0.0", "is-glob": "3.1.0", - "micromatch": "3.1.9", + "micromatch": "3.1.10", "resolve-dir": "1.0.1" }, "dependencies": { @@ -6240,9 +6275,9 @@ "dev": true }, "micromatch": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", - "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { "arr-diff": "4.0.0", @@ -6276,17 +6311,18 @@ } }, "firebase": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-4.11.0.tgz", - "integrity": "sha512-G1fX9+q3YXjdz3Wdmq7TM3EmLnxSmhsZtOyyhKg5hYfHi0XoOyQrva/JJmROQ+Dz2Ku+hWpi8tUwOCt7uxKfng==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-4.12.0.tgz", + "integrity": "sha512-mH9KWOtpY8y/jL2P8Wf/YNDOi4jmnj2l7KgskPwKHVGEMOx8/pO8AilGbZfF69VGmAAJ321KfJEqJ5jNd4i4Gg==", "dev": true, "requires": { "@firebase/app": "0.1.10", - "@firebase/auth": "0.3.4", - "@firebase/database": "0.2.0", - "@firebase/firestore": "0.3.5", + "@firebase/auth": "0.4.0", + "@firebase/database": "0.2.1", + "@firebase/firestore": "0.3.6", + "@firebase/functions": "0.1.0", "@firebase/messaging": "0.2.2", - "@firebase/polyfill": "0.2.0", + "@firebase/polyfill": "0.3.0", "@firebase/storage": "0.1.8", "dom-storage": "2.0.2", "xmlhttprequest": "1.8.0" @@ -6299,20 +6335,20 @@ "dev": true, "requires": { "@firebase/app": "0.1.10", - "@firebase/database": "0.2.0", + "@firebase/database": "0.2.1", "@google-cloud/firestore": "0.13.0", "@google-cloud/storage": "1.6.0", "@types/google-cloud__storage": "1.1.7", - "@types/node": "8.9.5", + "@types/node": "8.10.0", "faye-websocket": "0.9.3", "jsonwebtoken": "8.1.0", "node-forge": "0.7.1" }, "dependencies": { "@types/node": { - "version": "8.9.5", - "resolved": "http://registry.npmjs.org/@types/node/-/node-8.9.5.tgz", - "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.0.tgz", + "integrity": "sha512-7IGHZQfRfa0bCd7zUBVUGFKFn31SpaLDFfNoCAqkTGQO5JlHC9BwQA/CG9KZlABFxIUtXznyFgechjPQEGrUTg==", "dev": true }, "faye-websocket": { @@ -6351,9 +6387,9 @@ } }, "firebase-tools": { - "version": "3.17.6", - "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-3.17.6.tgz", - "integrity": "sha1-eCRgFtk8jdEsRVkSlLRtMTkoJeI=", + "version": "3.17.7", + "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-3.17.7.tgz", + "integrity": "sha1-PVowEbkXhk4QOJ0th8n5KocJZwc=", "dev": true, "requires": { "@google-cloud/functions-emulator": "1.0.0-beta.4", @@ -6362,7 +6398,7 @@ "chalk": "1.1.3", "cjson": "0.3.3", "cli-table": "0.3.1", - "commander": "2.15.0", + "commander": "2.15.1", "configstore": "1.4.0", "cross-env": "5.1.4", "cross-spawn": "4.0.2", @@ -6389,7 +6425,7 @@ "rsvp": "3.6.2", "semver": "5.5.0", "superstatic": "5.0.1", - "tar": "4.4.0", + "tar": "4.4.1", "tmp": "0.0.33", "universal-analytics": "0.3.11", "update-notifier": "0.5.0", @@ -6795,7 +6831,7 @@ "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "dev": true, "requires": { - "minipass": "2.2.1" + "minipass": "2.2.4" } }, "fs.realpath": { @@ -7866,9 +7902,9 @@ } }, "git-raw-commits": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.4.tgz", - "integrity": "sha512-G3O+41xHbscpgL5nA0DUkbFVgaAz5rd57AMSIMew8p7C8SyFwZDyn08MoXHkTl9zcD0LmxsLFPxbqFY4YPbpPA==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.5.tgz", + "integrity": "sha512-r6NFrgh9oGzHwMA0go6sEa8jgR+N2/74HPXIXR59asiJzxPXpmk3aM5SMH2bLGsmTPwJtysgbf8EE/LwWHqGgg==", "dev": true, "requires": { "dargs": "4.1.0", @@ -8035,9 +8071,9 @@ } }, "git-semver-tags": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.4.tgz", - "integrity": "sha512-Xe2Z74MwXZfAezuaO6e6cA4nsgeCiARPzaBp23gma325c/OXdt//PhrknptIaynNeUp2yWtmikV7k5RIicgGIQ==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.5.tgz", + "integrity": "sha512-+uttbaoLSIvxdJWQKmRcs/G3uHitbypvpM41rz1C48Eeq7AI47Mzh+hQ5xX2mY1Kehpv5WGe4yXg1LbSw29d2A==", "dev": true, "requires": { "meow": "4.0.0", @@ -8565,9 +8601,9 @@ }, "dependencies": { "@types/node": { - "version": "8.9.5", - "resolved": "http://registry.npmjs.org/@types/node/-/node-8.9.5.tgz", - "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.0.tgz", + "integrity": "sha512-7IGHZQfRfa0bCd7zUBVUGFKFn31SpaLDFfNoCAqkTGQO5JlHC9BwQA/CG9KZlABFxIUtXznyFgechjPQEGrUTg==", "dev": true }, "grpc": { @@ -9438,7 +9474,7 @@ "@protobufjs/pool": "1.1.0", "@protobufjs/utf8": "1.1.0", "@types/long": "3.0.32", - "@types/node": "8.9.5", + "@types/node": "8.10.0", "long": "4.0.0" } } @@ -9466,9 +9502,9 @@ }, "dependencies": { "@types/node": { - "version": "8.9.5", - "resolved": "http://registry.npmjs.org/@types/node/-/node-8.9.5.tgz", - "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.0.tgz", + "integrity": "sha512-7IGHZQfRfa0bCd7zUBVUGFKFn31SpaLDFfNoCAqkTGQO5JlHC9BwQA/CG9KZlABFxIUtXznyFgechjPQEGrUTg==", "dev": true }, "globby": { @@ -9508,7 +9544,7 @@ "@protobufjs/pool": "1.1.0", "@protobufjs/utf8": "1.1.0", "@types/long": "3.0.32", - "@types/node": "8.9.5", + "@types/node": "8.10.0", "long": "4.0.0" } } @@ -9587,7 +9623,7 @@ "into-stream": "3.1.0", "is-retry-allowed": "1.1.0", "isurl": "1.0.0", - "lowercase-keys": "1.0.0", + "lowercase-keys": "1.0.1", "mimic-response": "1.0.0", "p-cancelable": "0.3.0", "p-timeout": "2.0.1", @@ -10849,14 +10885,14 @@ } }, "gulp-conventional-changelog": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/gulp-conventional-changelog/-/gulp-conventional-changelog-1.1.18.tgz", - "integrity": "sha512-bkGObiMucy/TqNpB4/NOtNc5aWfEfTcRFyItpQ4inNPC6ZIvFeCT6EPOy4MjbXF47NT6/dubuteln5nJjAmFyA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/gulp-conventional-changelog/-/gulp-conventional-changelog-1.1.19.tgz", + "integrity": "sha512-VUdpBrQZ3aGXogngdMfWDJlyBzmUDRDeFla4coLI/UnRKAGvYlU/n0pSuWk7zLHcXacfK0y4OglzxoXb/E8DQA==", "dev": true, "requires": { "add-stream": "1.0.0", - "concat-stream": "1.6.1", - "conventional-changelog": "1.1.18", + "concat-stream": "1.6.2", + "conventional-changelog": "1.1.19", "fancy-log": "1.3.2", "object-assign": "4.1.1", "plugin-error": "1.0.1", @@ -10875,9 +10911,9 @@ }, "dependencies": { "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, "clone-stats": { @@ -10976,7 +11012,7 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.3", + "clone": "1.0.4", "clone-stats": "0.0.1", "replace-ext": "0.0.1" } @@ -11012,7 +11048,7 @@ "requires": { "bufferstreams": "1.1.3", "gulp-util": "3.0.8", - "html-minifier": "3.5.11", + "html-minifier": "3.5.12", "object-assign": "4.1.1", "readable-stream": "2.3.5", "tryit": "1.0.3" @@ -11036,7 +11072,7 @@ "dev": true, "requires": { "gulp-util": "3.0.8", - "marked": "0.3.17", + "marked": "0.3.18", "through2": "2.0.3" } }, @@ -11105,9 +11141,9 @@ }, "dependencies": { "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, "clone-stats": { @@ -11134,7 +11170,7 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.3", + "clone": "1.0.4", "clone-stats": "0.0.1", "replace-ext": "0.0.1" } @@ -11411,19 +11447,19 @@ } }, "html-minifier": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.11.tgz", - "integrity": "sha512-kIi9C090qWW5cGxEf+EwNUczduyVR6krk29WB3zDSWBQN6xuh/1jCXgmY4SvqzaJMOZFCnf8wcNzA8iPsfLiUQ==", + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.12.tgz", + "integrity": "sha512-+N778qLf0RWBscD0TPGoYdeGNDZ0s76/0pQhY1/409EOudcENkm9IbSkk37RDyPdg/09GVHTKotU4ya93RF1Gg==", "dev": true, "requires": { "camel-case": "3.0.0", "clean-css": "4.1.11", - "commander": "2.15.0", + "commander": "2.15.1", "he": "1.1.1", "ncname": "1.0.0", "param-case": "2.1.1", "relateurl": "0.2.7", - "uglify-js": "3.3.15" + "uglify-js": "3.3.16" }, "dependencies": { "source-map": { @@ -11433,12 +11469,12 @@ "dev": true }, "uglify-js": { - "version": "3.3.15", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.15.tgz", - "integrity": "sha512-bqtBCAINYXX/OkdnqMGpbXr+OPWc00hsozRpk+dAtfnbdk2jjKiLmyOkQ7zamg648lVMnzATL8JrSN6LmaVpYA==", + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.16.tgz", + "integrity": "sha512-FMh5SRqJRGhv9BbaTffENIpDDQIoPDR8DBraunGORGhySArsXlw9++CN+BWzPBLpoI4RcSnpfGPnilTxWL3Vvg==", "dev": true, "requires": { - "commander": "2.15.0", + "commander": "2.15.1", "source-map": "0.6.1" } } @@ -11993,9 +12029,9 @@ "dev": true }, "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { "is-path-inside": "1.0.1" @@ -12103,9 +12139,9 @@ "dev": true }, "is-supported-regexp-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.0.tgz", - "integrity": "sha1-i1IMhfrnolM4LUsCZS4EVXbhO7g=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz", + "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==", "dev": true }, "is-text-path": { @@ -12142,9 +12178,9 @@ } }, "is-url": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz", - "integrity": "sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.3.tgz", + "integrity": "sha512-vmOHLvzbcnsdFz8wQPXj1lgI5SE8AUlUGMenzuZzRFjoReb1WB+pLt9GrIo7BTker+aTcwrjTDle7odioWeqyw==", "dev": true }, "is-utf8": { @@ -12204,6 +12240,16 @@ "isarray": "1.0.0" } }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, + "requires": { + "node-fetch": "1.7.3", + "whatwg-fetch": "2.0.3" + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -12326,14 +12372,6 @@ "exit": "0.1.2", "glob": "7.1.2", "jasmine-core": "2.8.0" - }, - "dependencies": { - "jasmine-core": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", - "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", - "dev": true - } } }, "jasmine-core": { @@ -12438,7 +12476,7 @@ "escodegen": "1.9.1", "html-encoding-sniffer": "1.0.2", "iconv-lite": "0.4.19", - "nwmatcher": "1.4.3", + "nwmatcher": "1.4.4", "parse5": "1.5.1", "request": "2.85.0", "sax": "1.2.4", @@ -12913,7 +12951,7 @@ "is-plain-object": "2.0.4", "object.map": "1.0.1", "rechoir": "0.6.2", - "resolve": "1.5.0" + "resolve": "1.6.0" } }, "livereload-js": { @@ -13381,9 +13419,9 @@ } }, "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, "lru-cache": { @@ -13579,9 +13617,9 @@ "dev": true }, "marked": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.17.tgz", - "integrity": "sha512-+AKbNsjZl6jFfLPwHhWmGTqE009wTKn3RTmn9K8oUKHrX/abPJjtcRtXpYB/FFrwPJRUA86LX/de3T0knkPCmQ==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.18.tgz", + "integrity": "sha512-49i2QYhfULqaXzNZpxC808PisuCTGT2fgG0zrzdCI9N3rIfAWfW0nggvbXr6zvpynZdOG5+9xNxdzP0kwZnERw==", "dev": true }, "match-stream": { @@ -13840,11 +13878,12 @@ } }, "minipass": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.1.tgz", - "integrity": "sha512-u1aUllxPJUI07cOqzR7reGmQxmCqlH88uIIsf6XZFEWgw7gXKpJdR+5R9Y3KEDmWYkdIz9wXZs3C0jOPxejk/Q==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, "requires": { + "safe-buffer": "5.1.1", "yallist": "3.0.2" }, "dependencies": { @@ -13862,7 +13901,7 @@ "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "dev": true, "requires": { - "minipass": "2.2.1" + "minipass": "2.2.4" } }, "mixin-deep": { @@ -13917,9 +13956,9 @@ "dev": true }, "modify-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.0.tgz", - "integrity": "sha1-4rbN65zhn5kxelNyLz2/XfXqqrI=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true }, "module-definition": { @@ -13938,7 +13977,7 @@ "integrity": "sha512-rmljyiMrPqEfeOD1myMULVgnv1pRUqq1Dv/Xn0f9g36wCDWvqj07arG0fCEbKqU1sYFXptnaC1o+0oR7JpwOtg==", "dev": true, "requires": { - "commander": "2.15.0", + "commander": "2.15.1", "debug": "3.1.0", "file-exists": "2.0.0", "find": "0.2.9", @@ -14180,6 +14219,16 @@ "lower-case": "1.1.4" } }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } + }, "node-forge": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.4.tgz", @@ -14343,7 +14392,7 @@ "dev": true, "requires": { "chalk": "1.1.3", - "commander": "2.15.0", + "commander": "2.15.1", "is-my-json-valid": "2.17.2", "pinkie-promise": "2.0.1" } @@ -14550,9 +14599,9 @@ } }, "nwmatcher": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", - "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", "dev": true }, "oauth-sign": { @@ -14989,7 +15038,7 @@ "is-redirect": "1.0.0", "is-retry-allowed": "1.1.0", "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", + "lowercase-keys": "1.0.1", "node-status-codes": "1.0.0", "object-assign": "4.1.1", "parse-json": "2.2.0", @@ -15356,9 +15405,9 @@ } }, "postcss-less": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-1.1.3.tgz", - "integrity": "sha512-WS0wsQxRm+kmN8wEYAGZ3t4lnoNfoyx9EJZrhiPR1K0lMHR0UNWnz52Ya5QRXChHtY75Ef+kDc05FpnBujebgw==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-1.1.5.tgz", + "integrity": "sha512-QQIiIqgEjNnquc0d4b6HDOSFZxbFQoy4MPpli2lSLpKhMyBkKwwca2HFqu4xzxlKID/F2fxSOowwtKpgczhF7A==", "dev": true, "requires": { "postcss": "5.2.18" @@ -15379,7 +15428,7 @@ "chalk": "2.3.2", "lodash": "4.17.5", "log-symbols": "2.2.0", - "postcss": "6.0.19" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { @@ -15418,9 +15467,9 @@ } }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "dev": true, "requires": { "chalk": "2.3.2", @@ -15457,7 +15506,7 @@ "integrity": "sha1-t1Pv9sfArqXoN1++TN6L+QY/8UI=", "dev": true, "requires": { - "postcss": "6.0.19" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { @@ -15487,9 +15536,9 @@ "dev": true }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "dev": true, "requires": { "chalk": "2.3.2", @@ -15521,7 +15570,7 @@ "dev": true, "requires": { "gonzales-pe": "4.2.3", - "postcss": "6.0.19" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { @@ -15566,9 +15615,9 @@ "dev": true }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "dev": true, "requires": { "chalk": "2.3.2", @@ -15599,7 +15648,7 @@ "integrity": "sha512-IFj42Hz2cBHHFvZTqkJqU08JCCM/MZU5/uNkTUZBaBFP2d4C5unw4HyCL52RfCwJb6KoVUD3eoepxMh1dfBFCQ==", "dev": true, "requires": { - "postcss": "6.0.19" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { @@ -15629,9 +15678,9 @@ "dev": true }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "dev": true, "requires": { "chalk": "2.3.2", @@ -15805,7 +15854,7 @@ "integrity": "sha1-JZqUkKhUd6HyaYn73y+ybETyR1o=", "dev": true, "requires": { - "commander": "2.15.0", + "commander": "2.15.1", "debug": "3.1.0", "detective-amd": "2.4.0", "detective-cjs": "2.0.0", @@ -15990,7 +16039,7 @@ "integrity": "sha512-8z1TWtc/I9Kn4fkfg87DhkSAi0arul7DHBEeJ70sy66teQAeffjQED1s0Gduigme7hxHRYdYEKbhHYz28fpv5w==", "dev": true, "requires": { - "@types/node": "6.0.102", + "@types/node": "6.0.103", "@types/q": "0.0.32", "@types/selenium-webdriver": "2.53.43", "blocking-proxy": "1.0.1", @@ -16008,9 +16057,9 @@ }, "dependencies": { "@types/node": { - "version": "6.0.102", - "resolved": "http://registry.npmjs.org/@types/node/-/node-6.0.102.tgz", - "integrity": "sha512-EhNufyBoC1Kqaj+XMHGzi6mPUC8wVABOMTPE5XaSJc49LIVvXsyrV1HYMAPTUViT7E4wLUB38OdDmb+HshjGmA==", + "version": "6.0.103", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.103.tgz", + "integrity": "sha512-EHU5B9OlENiGEziLiC2XjhjBoVTiX6s4JwZrMHkLQzrzOA0bfZKfcT3fZaalgujcrs2O97VgKaxqguwV+12UJQ==", "dev": true }, "@types/q": { @@ -16421,7 +16470,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.5.0" + "resolve": "1.6.0" } }, "redent": { @@ -16679,9 +16728,9 @@ "dev": true }, "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", + "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", "dev": true, "requires": { "path-parse": "1.0.5" @@ -16731,7 +16780,7 @@ "dev": true, "optional": true, "requires": { - "lowercase-keys": "1.0.0" + "lowercase-keys": "1.0.1" } }, "restore-cursor": { @@ -16807,14 +16856,14 @@ } }, "rollup-plugin-node-resolve": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.2.0.tgz", - "integrity": "sha512-stvVrKaQiNu65ObGJLCHyHH/NXjiPMt/ZHwvl444KgJPrii1zCgyg+NTK2Uy6WExL+OuUWdHd7T8EoPQDtYEkw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.3.0.tgz", + "integrity": "sha512-9zHGr3oUJq6G+X0oRMYlzid9fXicBdiydhwGChdyeNRGPcN/majtegApRKHLR5drboUvEWU+QeUmGTyEZQs3WA==", "dev": true, "requires": { "builtin-modules": "2.0.0", "is-module": "1.0.0", - "resolve": "1.5.0" + "resolve": "1.6.0" }, "dependencies": { "builtin-modules": { @@ -17887,7 +17936,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "source-map-resolve": { "version": "0.5.1", @@ -17906,6 +17956,7 @@ "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, "requires": { "source-map": "0.5.7" } @@ -18340,9 +18391,9 @@ "micromatch": "2.3.11", "normalize-selector": "0.2.0", "pify": "3.0.0", - "postcss": "6.0.19", + "postcss": "6.0.21", "postcss-html": "0.12.0", - "postcss-less": "1.1.3", + "postcss-less": "1.1.5", "postcss-media-query-parser": "0.2.3", "postcss-reporter": "5.0.0", "postcss-resolve-nested-selector": "0.1.1", @@ -18382,10 +18433,10 @@ "dev": true, "requires": { "browserslist": "2.11.3", - "caniuse-lite": "1.0.30000815", + "caniuse-lite": "1.0.30000819", "normalize-range": "0.1.2", "num2fraction": "1.2.2", - "postcss": "6.0.19", + "postcss": "6.0.21", "postcss-value-parser": "3.3.0" } }, @@ -18395,8 +18446,8 @@ "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000815", - "electron-to-chromium": "1.3.38" + "caniuse-lite": "1.0.30000819", + "electron-to-chromium": "1.3.40" } }, "camelcase": { @@ -18520,9 +18571,9 @@ } }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "dev": true, "requires": { "chalk": "2.3.2", @@ -18643,7 +18694,7 @@ "integrity": "sha512-3qgLZytikQQEVn1/FrhY7B68gPUUGY3R1Q1vTiD5xT+Ti1DP/8iZuwFet9ONs5+bmL8pZoDQ6JrQHVgrNlK6mA==", "dev": true, "requires": { - "postcss": "6.0.19" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { @@ -18673,9 +18724,9 @@ "dev": true }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "dev": true, "requires": { "chalk": "2.3.2", @@ -18721,7 +18772,7 @@ "glob": "7.1.2", "glob-slasher": "1.0.1", "home-dir": "1.0.0", - "is-url": "1.2.2", + "is-url": "1.2.3", "join-path": "1.1.1", "lodash": "4.17.5", "mime-types": "2.1.18", @@ -18903,7 +18954,7 @@ "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", "dev": true, "requires": { - "ajv": "6.2.1", + "ajv": "6.3.0", "ajv-keywords": "3.1.0", "chalk": "2.3.2", "lodash": "4.17.5", @@ -18912,9 +18963,9 @@ }, "dependencies": { "ajv": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", - "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.3.0.tgz", + "integrity": "sha1-FlCkERTvAFdMrBC4Ay2PTBSBLac=", "dev": true, "requires": { "fast-deep-equal": "1.1.0", @@ -18997,16 +19048,17 @@ "dev": true }, "tar": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.0.tgz", - "integrity": "sha512-gJlTiiErwo96K904FnoYWl+5+FBgS+FimU6GMh66XLdLa55al8+d4jeDfPoGwSNHdtWI5FJP6xurmVqhBuGJpQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", "dev": true, "requires": { "chownr": "1.0.1", "fs-minipass": "1.2.5", - "minipass": "2.2.1", + "minipass": "2.2.4", "minizlib": "1.1.0", "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", "yallist": "3.0.2" }, "dependencies": { @@ -19024,7 +19076,7 @@ "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", "dev": true, "requires": { - "bl": "1.2.1", + "bl": "1.2.2", "end-of-stream": "1.4.1", "readable-stream": "2.3.5", "xtend": "4.0.1" @@ -19519,14 +19571,29 @@ } }, "tsickle": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.24.1.tgz", - "integrity": "sha512-XloFQZhVhgjpQsi3u2ORNRJvuID5sflOg6HfP093IqAbhE1+fIUXznULpdDwHgG4p+v8w78KdHruQtkWUKx5AQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.27.2.tgz", + "integrity": "sha512-KW+ZgY0t2cq2Qib1sfdgMiRnk+cr3brUtzZoVWjv+Ot3jNxVorFBUH+6In6hl8Dg7BI2AAFf69NHkwvZNMSFwA==", "requires": { "minimist": "1.2.0", "mkdirp": "0.5.1", - "source-map": "0.5.7", - "source-map-support": "0.4.18" + "source-map": "0.6.1", + "source-map-support": "0.5.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.4.tgz", + "integrity": "sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==", + "requires": { + "source-map": "0.6.1" + } + } } }, "tslib": { @@ -19543,12 +19610,12 @@ "babel-code-frame": "6.26.0", "builtin-modules": "1.1.1", "chalk": "2.3.2", - "commander": "2.15.0", + "commander": "2.15.1", "diff": "3.5.0", "glob": "7.1.2", "js-yaml": "3.11.0", "minimatch": "3.0.4", - "resolve": "1.5.0", + "resolve": "1.6.0", "semver": "5.5.0", "tslib": "1.9.0", "tsutils": "2.22.2" @@ -20093,7 +20160,7 @@ "infinity-agent": "2.0.3", "is-redirect": "1.0.0", "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", + "lowercase-keys": "1.0.1", "nested-error-stacks": "1.0.2", "object-assign": "3.0.0", "prepend-http": "1.0.4", @@ -20410,7 +20477,7 @@ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "clone": "2.1.1", + "clone": "2.1.2", "clone-buffer": "1.0.0", "clone-stats": "1.0.0", "cloneable-readable": "1.1.2", @@ -20624,7 +20691,7 @@ "dev": true, "requires": { "chalk": "1.1.3", - "commander": "2.15.0", + "commander": "2.15.1", "is-my-json-valid": "2.17.2", "pinkie-promise": "2.0.1" } @@ -20805,6 +20872,12 @@ "iconv-lite": "0.4.19" } }, + "whatwg-fetch": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", + "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=", + "dev": true + }, "whatwg-url": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-3.1.0.tgz", diff --git a/packages.bzl b/packages.bzl index c8e7504a47f..2162ca15b60 100644 --- a/packages.bzl +++ b/packages.bzl @@ -14,6 +14,7 @@ CDK_PACKAGES = [ "portal", "layout", "stepper", + "text-field", "collections", ] @@ -21,8 +22,8 @@ MATERIAL_PACKAGES = [ "autocomplete", "badge", "bottom-sheet", - "button-toggle", "button", + "button-toggle", "card", "checkbox", "chips", @@ -52,4 +53,5 @@ MATERIAL_PACKAGES = [ "tabs", "toolbar", "tooltip", + "tree", ] diff --git a/schematics/utils/package.ts b/schematics/utils/package.ts deleted file mode 100644 index cb3b9a33b0d..00000000000 --- a/schematics/utils/package.ts +++ /dev/null @@ -1,22 +0,0 @@ -import {Tree} from '@angular-devkit/schematics'; - -/** - * Adds a package to the package.json - */ -export function addPackageToPackageJson(host: Tree, type: string, pkg: string, version: string) { - if (host.exists('package.json')) { - const sourceText = host.read('package.json')!.toString('utf-8'); - const json = JSON.parse(sourceText); - if (!json[type]) { - json[type] = {}; - } - - if (!json[type][pkg]) { - json[type][pkg] = version; - } - - host.overwrite('package.json', JSON.stringify(json, null, 2)); - } - - return host; -} \ No newline at end of file diff --git a/src/cdk/BUILD.bazel b/src/cdk/BUILD.bazel index 50c5f56e8cc..f5b7dc088f9 100644 --- a/src/cdk/BUILD.bazel +++ b/src/cdk/BUILD.bazel @@ -1,5 +1,5 @@ package(default_visibility=["//visibility:public"]) -load("@build_bazel_rules_typescript//:defs.bzl", "ts_library", "ts_config") +load("@build_bazel_rules_typescript//:defs.bzl", "ts_library") load("@angular//:index.bzl", "ng_package") load("//:packages.bzl", "CDK_PACKAGES") load("//src/cdk:rollup_globals.bzl", "CDK_ROLLUP_GLOBALS") @@ -14,7 +14,7 @@ ts_library( srcs = glob(["*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/cdk", deps = [], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # Creates the @angular/cdk package published to npm. diff --git a/src/cdk/overlay/BUILD.bazel b/src/cdk/overlay/BUILD.bazel index 463bf45133a..5cc38c50972 100644 --- a/src/cdk/overlay/BUILD.bazel +++ b/src/cdk/overlay/BUILD.bazel @@ -1,5 +1,6 @@ package(default_visibility=["//visibility:public"]) load("@angular//:index.bzl", "ng_module") +load("@io_bazel_rules_sass//sass:sass.bzl", "sass_library") load("@build_bazel_rules_typescript//:defs.bzl", "ts_library", "ts_web_test") ng_module( @@ -24,6 +25,11 @@ filegroup( srcs = glob(["**/_*.scss"]), ) +sass_library( + name = "overlay_scss_lib", + srcs = [":overlay_scss_partials"], +) + ts_library( name = "overlay_test_sources", testonly = 1, diff --git a/src/cdk/text-field/BUILD.bazel b/src/cdk/text-field/BUILD.bazel index c9f9d13f79c..d1436f15850 100644 --- a/src/cdk/text-field/BUILD.bazel +++ b/src/cdk/text-field/BUILD.bazel @@ -10,12 +10,18 @@ ng_module( "@rxjs", "//src/cdk/platform", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", +) + +# TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup +filegroup( + name = "text_field_scss_partials", + srcs = glob(["**/_*.scss"]), ) sass_library( name = "text_field_scss_lib", - srcs = glob(["**/_*.scss"]), + srcs = [":text_field_scss_partials"], ) sass_binary( @@ -28,7 +34,7 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "text_field_prebuilt_css", - srcs = [":text_field_prebuilt_scss"], + srcs = [":text_field_prebuilt_scss.css"], outs = ["text-field-prebuilt.css"], - cmd = "cat $(locations :text_field_prebuilt_scss) > $@", + cmd = "cp $< $@", ) diff --git a/src/lib/BUILD.bazel b/src/lib/BUILD.bazel index 170f713dfab..9c7d4b52d68 100644 --- a/src/lib/BUILD.bazel +++ b/src/lib/BUILD.bazel @@ -1,16 +1,56 @@ +load("@build_bazel_rules_typescript//:defs.bzl", "ts_library") +load("@angular//:index.bzl", "ng_package", "ng_module") load("//tools:sass_bundle.bzl", "sass_bundle") load("//:packages.bzl", "MATERIAL_PACKAGES") -load("@angular//:index.bzl", "ng_package") +load("//src/lib:rollup_globals.bzl", "MATERIAL_ROLLUP_GLOBALS") +# Export the root material tsconfig so that subpackages can reference it directly. +exports_files(["tsconfig-build.json"]) + +# Root "@angular/material" entry-point. +ng_module( + name = "material", + srcs = glob(["*.ts"], exclude=["**/*.spec.ts"]), + module_name = "@angular/material", + deps = ["//src/lib/%s" % p for p in MATERIAL_PACKAGES], + tsconfig = "//src/lib:tsconfig-build.json", +) + sass_bundle( name = "theming_bundle", + # Use the filegroup rules for these sass partials directly because sass_library doesn't + # act like a filegroup. srcs = [ "//src/cdk/a11y:a11y_scss_partials", "//src/cdk/overlay:overlay_scss_partials", + "//src/cdk/text-field:text_field_scss_partials", ] + [ "//src/lib/%s:%s_scss_partials" % (p, p.replace('-', '_')) for p in MATERIAL_PACKAGES ], entry_point = '//src/lib/core:theming/_all-theme.scss', output_name = "_theming.scss", ) + +# TODO(jelbourn): uncomment when 6.0.0-rc.1 comes out +# Creates the @angular/material package published to npm. +#ng_package( +# name = "npm_package", +# srcs = [ +# "package.json", +# ], +# entry_point = "src/lib/public_api.js", +# entry_point_name = "material", +# globals = MATERIAL_ROLLUP_GLOBALS, +# data = [ +# ":theming_bundle", +# "//src/lib/prebuilt-themes:indigo-pink", +# "//src/lib/prebuilt-themes:deeppurple-amber", +# "//src/lib/prebuilt-themes:pink-bluegrey", +# "//src/lib/prebuilt-themes:purple-green", +# ], +# packages = ["//src/lib/schematics:npm_package"], +# deps = [ +# ":material", +# ] + ["//src/lib/%s" % p for p in MATERIAL_PACKAGES], +#) diff --git a/src/lib/autocomplete/BUILD.bazel b/src/lib/autocomplete/BUILD.bazel index d8f8c286718..6fe3521b2b2 100644 --- a/src/lib/autocomplete/BUILD.bazel +++ b/src/lib/autocomplete/BUILD.bazel @@ -7,7 +7,7 @@ ng_module( name = "autocomplete", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/autocomplete", - assets = [":autocomplete_css"], + assets = [":autocomplete_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/lib/form-field", @@ -18,7 +18,7 @@ ng_module( "//src/cdk/portal", "//src/cdk/overlay", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -37,8 +37,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "autocomplete_css", - srcs = [":autocomplete_scss"], + srcs = [":autocomplete_scss.css"], outs = ["autocomplete.css"], - cmd = "cat $(locations :autocomplete_scss) > $@", + cmd = "cp $< $@", ) +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/badge/BUILD.bazel b/src/lib/badge/BUILD.bazel index 99147117dbe..1a5b2e0fda2 100644 --- a/src/lib/badge/BUILD.bazel +++ b/src/lib/badge/BUILD.bazel @@ -11,8 +11,8 @@ ng_module( "//src/lib/core", "//src/cdk/a11y", "//src/cdk/coercion", - ], - tsconfig = ":tsconfig-build.json", + ] + glob(["**/*.html"]), + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -20,3 +20,8 @@ filegroup( name = "badge_scss_partials", srcs = glob(["**/_*.scss"]), ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/bottom-sheet/BUILD.bazel b/src/lib/bottom-sheet/BUILD.bazel index 3c9cfc84c0d..5b6eb40444c 100644 --- a/src/lib/bottom-sheet/BUILD.bazel +++ b/src/lib/bottom-sheet/BUILD.bazel @@ -6,10 +6,10 @@ load("@io_bazel_rules_sass//sass:sass.bzl", "sass_library", "sass_binary") ng_module( name = "bottom-sheet", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), - module_name = "@angular/material/bottom_sheet", + module_name = "@angular/material/bottom-sheet", assets = [ ":bottom_sheet_container_css", - ], + ] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/a11y", @@ -19,7 +19,7 @@ ng_module( "//src/cdk/layout", "@rxjs", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -38,7 +38,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "bottom_sheet_container_css", - srcs = [":bottom_sheet_container_scss"], + srcs = [":bottom_sheet_container_scss.css"], outs = ["bottom-sheet-container.css"], - cmd = "cat $(locations :bottom_sheet_container_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/button-toggle/BUILD.bazel b/src/lib/button-toggle/BUILD.bazel index 21bb2c4ef5e..78cb729c10a 100644 --- a/src/lib/button-toggle/BUILD.bazel +++ b/src/lib/button-toggle/BUILD.bazel @@ -6,15 +6,15 @@ load("@io_bazel_rules_sass//sass:sass.bzl", "sass_library", "sass_binary") ng_module( name = "button-toggle", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), - module_name = "@angular/material/button_toggle", - assets = [":button_toggle_css"], + module_name = "@angular/material/button-toggle", + assets = [":button_toggle_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/a11y", "//src/cdk/coercion", "//src/cdk/collections", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -33,7 +33,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "button_toggle_css", - srcs = [":button_toggle_scss"], + srcs = [":button_toggle_scss.css"], outs = ["button-toggle.css"], - cmd = "cat $(locations :button_toggle_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/button/BUILD.bazel b/src/lib/button/BUILD.bazel index 794c982d9b6..301acb24b38 100644 --- a/src/lib/button/BUILD.bazel +++ b/src/lib/button/BUILD.bazel @@ -7,13 +7,13 @@ ng_module( name = "button", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/button", - assets = [":button_css"], + assets = [":button_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/a11y", "//src/cdk/platform", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): remove this when sass_library acts like a filegroup @@ -39,8 +39,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "button_css", - srcs = [":button_scss"], + srcs = [":button_scss.css"], outs = ["button.css"], - cmd = "cat $(locations :button_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/card/BUILD.bazel b/src/lib/card/BUILD.bazel index 55c634e4d68..b766537cc7f 100644 --- a/src/lib/card/BUILD.bazel +++ b/src/lib/card/BUILD.bazel @@ -7,11 +7,11 @@ ng_module( name = "card", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/card", - assets = [":card_css"], + assets = [":card_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -30,7 +30,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "card_css", - srcs = [":card_scss"], + srcs = [":card_scss.css"], outs = ["card.css"], - cmd = "cat $(locations :card_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/checkbox/BUILD.bazel b/src/lib/checkbox/BUILD.bazel index 696f9e42336..70786050e98 100644 --- a/src/lib/checkbox/BUILD.bazel +++ b/src/lib/checkbox/BUILD.bazel @@ -7,14 +7,14 @@ ng_module( name = "checkbox", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/checkbox", - assets = [":checkbox_css"], + assets = [":checkbox_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/a11y", "//src/cdk/coercion", "//src/cdk/observers", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -33,8 +33,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "checkbox_css", - srcs = [":checkbox_scss"], + srcs = [":checkbox_scss.css"], outs = ["checkbox.css"], - cmd = "cat $(locations :checkbox_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/chips/BUILD.bazel b/src/lib/chips/BUILD.bazel index cde5ad0bdcb..714bccf3ba0 100644 --- a/src/lib/chips/BUILD.bazel +++ b/src/lib/chips/BUILD.bazel @@ -7,17 +7,18 @@ ng_module( name = "chips", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/chips", - assets = [":chips_css"], + assets = [":chips_css"] + glob(["**/*.html"]), deps = [ - "//src/lib/core", - "//src/lib/form-field", "//src/cdk/a11y", "//src/cdk/bidi", "//src/cdk/coercion", "//src/cdk/collections", "//src/cdk/keycodes", + "//src/cdk/platform", + "//src/lib/core", + "//src/lib/form-field", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -36,8 +37,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "chips_css", - srcs = [":chips_scss"], + srcs = [":chips_scss.css"], outs = ["chips.css"], - cmd = "cat $(locations :chips_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/core/BUILD.bazel b/src/lib/core/BUILD.bazel index 83c0e66654e..8e3c6f55315 100644 --- a/src/lib/core/BUILD.bazel +++ b/src/lib/core/BUILD.bazel @@ -2,6 +2,7 @@ package(default_visibility=["//visibility:public"]) load("@angular//:index.bzl", "ng_module") load("@io_bazel_rules_sass//sass:sass.bzl", "sass_library", "sass_binary") +load("//:packages.bzl", "MATERIAL_PACKAGES") exports_files(["theming/_theming.scss"]) @@ -10,7 +11,11 @@ ng_module( name = "core", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/core", - assets = [":pseudo_checkbox_css", ":option_css", ":optgroup_css"], + assets = [ + ":pseudo_checkbox_css", + ":option_css", + ":optgroup_css", + ] + glob(["**/*.html"]), deps = [ "//src/cdk/bidi", "//src/cdk/coercion", @@ -18,21 +23,27 @@ ng_module( "//src/cdk/platform", "@rxjs", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): remove this when sass_library acts like a filegroup filegroup( name = "core_scss_partials", - srcs = glob(["**/_*.scss"]), + srcs = glob([ + "**/_*.scss" + ], exclude = ["theming/_all-theme.scss"]), ) # Library of all core scss partials. sass_library( name = "core_scss_lib", srcs = [":core_scss_partials"], - deps = ["//src/cdk/a11y:a11y_scss_lib"], + deps = [ + "//src/cdk/a11y:a11y_scss_lib", + "//src/cdk/overlay:overlay_scss_lib", + "//src/cdk/text-field:text_field_scss_lib", + ], ) sass_binary( @@ -57,21 +68,60 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "pseudo_checkbox_css", - srcs = [":pseudo_checkbox_scss"], + srcs = [":pseudo_checkbox_scss.css"], outs = ["selection/pseudo-checkbox/pseudo-checkbox.css"], - cmd = "cat $(locations :pseudo_checkbox_scss) > $@", + cmd = "cp $< $@", ) genrule( name = "option_css", - srcs = [":option_scss"], + srcs = [":option_scss.css"], outs = ["option/option.css"], - cmd = "cat $(locations :option_scss) > $@", + cmd = "cp $< $@", ) genrule( name = "optgroup_css", - srcs = [":optgroup_scss"], + srcs = [":optgroup_scss.css"], outs = ["option/optgroup.css"], - cmd = "cat $(locations :optgroup_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "all_themes", + srcs = [ + "theming/_all-theme.scss", + "typography/_all-typography.scss", + ], + deps = [":core_scss_lib"] + ["//src/lib/%s:theme" % p for p in MATERIAL_PACKAGES], +) + +sass_binary( + name = "indigo_pink_prebuilt", + src = "theming/prebuilt/indigo-pink.scss", + deps = [":all_themes"], +) + +sass_binary( + name = "deeppurple-amber_prebuilt", + src = "theming/prebuilt/deeppurple-amber.scss", + deps = [":all_themes"], +) + +sass_binary( + name = "pink-bluegrey_prebuilt", + src = "theming/prebuilt/pink-bluegrey.scss", + deps = [":all_themes"], +) + +sass_binary( + name = "purple-green_prebuilt", + src = "theming/prebuilt/purple-green.scss", + deps = [":all_themes"], +) + +# This rule exists so that we can use MATERIAL_PACKAGES to enumerate all themes. +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/core/typography/_all-typography.scss b/src/lib/core/typography/_all-typography.scss index 2f3acd58ba0..52f391d7607 100644 --- a/src/lib/core/typography/_all-typography.scss +++ b/src/lib/core/typography/_all-typography.scss @@ -1,5 +1,6 @@ @import './typography'; @import '../../autocomplete/autocomplete-theme'; +@import '../../badge/badge-theme'; @import '../../bottom-sheet/bottom-sheet-theme'; @import '../../button/button-theme'; @import '../../button-toggle/button-toggle-theme'; diff --git a/src/lib/datepicker/BUILD.bazel b/src/lib/datepicker/BUILD.bazel index 44aca5ee6ed..e14898c758e 100644 --- a/src/lib/datepicker/BUILD.bazel +++ b/src/lib/datepicker/BUILD.bazel @@ -12,7 +12,7 @@ ng_module( ":datepicker_toggle_css", ":calendar_body_css", ":calendar_css", - ], + ] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/lib/button", @@ -25,7 +25,7 @@ ng_module( "//src/cdk/portal", "//src/cdk/overlay", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -62,34 +62,39 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "datepicker_content_css", - srcs = [":datepicker_content_scss"], + srcs = [":datepicker_content_scss.css"], outs = ["datepicker-content.css"], - cmd = "cat $(locations :datepicker_content_scss) > $@", + cmd = "cp $< $@", ) # TODO(jelbourn): remove this when sass_binary supports specifying an output filename and dir. # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "datepicker_toggle_css", - srcs = [":datepicker_toggle_scss"], + srcs = [":datepicker_toggle_scss.css"], outs = ["datepicker-toggle.css"], - cmd = "cat $(locations :datepicker_toggle_scss) > $@", + cmd = "cp $< $@", ) # TODO(jelbourn): remove this when sass_binary supports specifying an output filename and dir. # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "calendar_css", - srcs = [":calendar_scss"], + srcs = [":calendar_scss.css"], outs = ["calendar.css"], - cmd = "cat $(locations :calendar_scss) > $@", + cmd = "cp $< $@", ) # TODO(jelbourn): remove this when sass_binary supports specifying an output filename and dir. # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "calendar_body_css", - srcs = [":calendar_body_scss"], + srcs = [":calendar_body_scss.css"], outs = ["calendar-body.css"], - cmd = "cat $(locations :calendar_body_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/dialog/BUILD.bazel b/src/lib/dialog/BUILD.bazel index 7cabde57f77..32d768b3e9b 100644 --- a/src/lib/dialog/BUILD.bazel +++ b/src/lib/dialog/BUILD.bazel @@ -7,7 +7,7 @@ ng_module( name = "dialog", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/dialog", - assets = [":dialog_css"], + assets = [":dialog_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/a11y", @@ -16,7 +16,7 @@ ng_module( "//src/cdk/overlay", "//src/cdk/portal", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -35,7 +35,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "dialog_css", - srcs = [":dialog_scss"], + srcs = [":dialog_scss.css"], outs = ["dialog.css"], - cmd = "cat $(locations :dialog_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/divider/BUILD.bazel b/src/lib/divider/BUILD.bazel index 8deed623abe..2687e16ecbe 100644 --- a/src/lib/divider/BUILD.bazel +++ b/src/lib/divider/BUILD.bazel @@ -7,12 +7,12 @@ ng_module( name = "divider", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/divider", - assets = [":divider_css"], + assets = [":divider_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/coercion", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) @@ -38,7 +38,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "divider_css", - srcs = [":divider_scss"], + srcs = [":divider_scss.css"], outs = ["divider.css"], - cmd = "cat $(locations :divider_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/expansion/BUILD.bazel b/src/lib/expansion/BUILD.bazel index da3a4449932..1fd54e79c10 100644 --- a/src/lib/expansion/BUILD.bazel +++ b/src/lib/expansion/BUILD.bazel @@ -10,7 +10,7 @@ ng_module( assets = [ ":expansion_panel_css", "expansion_panel_header_css", - ], + ] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/a11y", @@ -20,7 +20,7 @@ ng_module( "//src/cdk/keycodes", "//src/cdk/portal", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -45,16 +45,21 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "expansion_panel_css", - srcs = [":expansion_panel_scss"], + srcs = [":expansion_panel_scss.css"], outs = ["expansion-panel.css"], - cmd = "cat $(locations :expansion_panel_scss) > $@", + cmd = "cp $< $@", ) # TODO(jelbourn): remove this when sass_binary supports specifying an output filename and dir. # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "expansion_panel_header_css", - srcs = [":expansion_panel_header_scss"], + srcs = [":expansion_panel_header_scss.css"], outs = ["expansion-panel-header.css"], - cmd = "cat $(locations :expansion_panel_header_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/form-field/BUILD.bazel b/src/lib/form-field/BUILD.bazel index 202bff2b682..528002dbba2 100644 --- a/src/lib/form-field/BUILD.bazel +++ b/src/lib/form-field/BUILD.bazel @@ -14,13 +14,13 @@ ng_module( ":form_field_outline_css", ":form_field_standard_css", "//src/lib/input:input_css" - ], + ] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/coercion", "//src/cdk/platform", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -63,35 +63,40 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "form_field_css", - srcs = [":form_field_scss"], + srcs = [":form_field_scss.css"], outs = ["form-field.css"], - cmd = "cat $(locations :form_field_scss) > $@", + cmd = "cp $< $@", ) genrule( name = "form_field_fill_css", - srcs = [":form_field_fill_scss"], + srcs = [":form_field_fill_scss.css"], outs = ["form-field-fill.css"], - cmd = "cat $(locations :form_field_fill_scss) > $@", + cmd = "cp $< $@", ) genrule( name = "form_field_legacy_css", - srcs = [":form_field_legacy_scss"], + srcs = [":form_field_legacy_scss.css"], outs = ["form-field-legacy.css"], - cmd = "cat $(locations :form_field_legacy_scss) > $@", + cmd = "cp $< $@", ) genrule( name = "form_field_outline_css", - srcs = [":form_field_outline_scss"], + srcs = [":form_field_outline_scss.css"], outs = ["form-field-outline.css"], - cmd = "cat $(locations :form_field_outline_scss) > $@", + cmd = "cp $< $@", ) genrule( name = "form_field_standard_css", - srcs = [":form_field_standard_scss"], + srcs = [":form_field_standard_scss.css"], outs = ["form-field-standard.css"], - cmd = "cat $(locations :form_field_standard_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/grid-list/BUILD.bazel b/src/lib/grid-list/BUILD.bazel index b5c63056b1a..0002339f9cd 100644 --- a/src/lib/grid-list/BUILD.bazel +++ b/src/lib/grid-list/BUILD.bazel @@ -7,12 +7,12 @@ ng_module( name = "grid-list", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/grid-list", - assets = [":grid_list_css"], + assets = [":grid_list_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/bidi", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -31,7 +31,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "grid_list_css", - srcs = [":grid_list_scss"], + srcs = [":grid_list_scss.css"], outs = ["grid-list.css"], - cmd = "cat $(locations :grid_list_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/icon/BUILD.bazel b/src/lib/icon/BUILD.bazel index 808c701178b..b4af0e74e86 100644 --- a/src/lib/icon/BUILD.bazel +++ b/src/lib/icon/BUILD.bazel @@ -7,11 +7,11 @@ ng_module( name = "icon", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/icon", - assets = [":icon_css"], + assets = [":icon_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -30,8 +30,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "icon_css", - srcs = [":icon_scss"], + srcs = [":icon_scss.css"], outs = ["icon.css"], - cmd = "cat $(locations :icon_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 00000000000..676ca90f1ff --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1,9 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +export * from './public-api'; diff --git a/src/lib/input/BUILD.bazel b/src/lib/input/BUILD.bazel index 78e20c98e56..c6a10e4cb0b 100644 --- a/src/lib/input/BUILD.bazel +++ b/src/lib/input/BUILD.bazel @@ -7,6 +7,9 @@ ng_module( name = "input", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/input", + assets = [ + ":input_css", + ] + glob(["**/*.html"]), deps = [ "@rxjs", "//src/lib/core", @@ -15,7 +18,7 @@ ng_module( "//src/cdk/platform", "//src/cdk/text-field", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -34,8 +37,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "input_css", - srcs = [":input_scss"], + srcs = [":input_scss.css"], outs = ["input.css"], - cmd = "cat $(locations :input_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/list/BUILD.bazel b/src/lib/list/BUILD.bazel index ff6f02abe52..c4ff1366e98 100644 --- a/src/lib/list/BUILD.bazel +++ b/src/lib/list/BUILD.bazel @@ -7,7 +7,7 @@ ng_module( name = "list", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/list", - assets = [":list_css"], + assets = [":list_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/lib/divider", @@ -16,7 +16,7 @@ ng_module( "//src/cdk/collections", "//src/cdk/keycodes", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) @@ -36,7 +36,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "list_css", - srcs = [":list_scss"], + srcs = [":list_scss.css"], outs = ["list.css"], - cmd = "cat $(locations :list_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/menu/BUILD.bazel b/src/lib/menu/BUILD.bazel index 16eb45e72f7..41549800e7b 100644 --- a/src/lib/menu/BUILD.bazel +++ b/src/lib/menu/BUILD.bazel @@ -7,7 +7,7 @@ ng_module( name = "menu", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/menu", - assets = [":menu_css"], + assets = [":menu_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/a11y", @@ -17,7 +17,7 @@ ng_module( "//src/cdk/overlay", "//src/cdk/portal", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -36,7 +36,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "menu_css", - srcs = [":menu_scss"], + srcs = [":menu_scss.css"], outs = ["menu.css"], - cmd = "cat $(locations :menu_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/paginator/BUILD.bazel b/src/lib/paginator/BUILD.bazel index 85220bb31e6..741956bca57 100644 --- a/src/lib/paginator/BUILD.bazel +++ b/src/lib/paginator/BUILD.bazel @@ -7,7 +7,7 @@ ng_module( name = "paginator", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/paginator", - assets = [":paginator_css"], + assets = [":paginator_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/lib/button", @@ -15,7 +15,7 @@ ng_module( "//src/lib/tooltip", "@rxjs", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) @@ -35,8 +35,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "paginator_css", - srcs = [":paginator_scss"], + srcs = [":paginator_scss.css"], outs = ["paginator.css"], - cmd = "cat $(locations :paginator_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/prebuilt-themes/BUILD.bazel b/src/lib/prebuilt-themes/BUILD.bazel new file mode 100644 index 00000000000..6db80f22356 --- /dev/null +++ b/src/lib/prebuilt-themes/BUILD.bazel @@ -0,0 +1,33 @@ +package(default_visibility=["//visibility:public"]) + +# We use these genrules to put the prebuilt themes into the bazel-generated npm +# package in the right spot. The *right* thing to do would be to move them, but +# we would need to update references for Google apps. + +genrule( + name = "indigo-pink", + srcs = ["//src/lib/core:indigo_pink_prebuilt.css"], + outs = ["indigo-pink.css"], + cmd = "cp $< $@", +) + +genrule( + name = "deeppurple-amber", + srcs = ["//src/lib/core:deeppurple-amber_prebuilt.css"], + outs = ["deeppurple-amber.css"], + cmd = "cp $< $@", +) + +genrule( + name = "pink-bluegrey", + srcs = ["//src/lib/core:pink-bluegrey_prebuilt.css"], + outs = ["pink-bluegrey.css"], + cmd = "cp $< $@", +) + +genrule( + name = "purple-green", + srcs = ["//src/lib/core:purple-green_prebuilt.css"], + outs = ["purple-green.css"], + cmd = "cp $< $@", +) diff --git a/src/lib/progress-bar/BUILD.bazel b/src/lib/progress-bar/BUILD.bazel index 383362aae51..8f30a701d5b 100644 --- a/src/lib/progress-bar/BUILD.bazel +++ b/src/lib/progress-bar/BUILD.bazel @@ -6,12 +6,12 @@ load("@io_bazel_rules_sass//sass:sass.bzl", "sass_library", "sass_binary") ng_module( name = "progress-bar", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), - module_name = "@angular/material/progress_bar", - assets = [":progress_bar_css"], + module_name = "@angular/material/progress-bar", + assets = [":progress_bar_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) @@ -31,8 +31,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "progress_bar_css", - srcs = [":progress_bar_scss"], + srcs = [":progress_bar_scss.css"], outs = ["progress-bar.css"], - cmd = "cat $(locations :progress_bar_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/progress-spinner/BUILD.bazel b/src/lib/progress-spinner/BUILD.bazel index 193907e1c0a..9d863993e5d 100644 --- a/src/lib/progress-spinner/BUILD.bazel +++ b/src/lib/progress-spinner/BUILD.bazel @@ -6,12 +6,13 @@ load("@io_bazel_rules_sass//sass:sass.bzl", "sass_library", "sass_binary") ng_module( name = "progress-spinner", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), - module_name = "@angular/material/progress_spinner", - assets = [":progress_spinner_css"], + module_name = "@angular/material/progress-spinner", + assets = [":progress_spinner_css"] + glob(["**/*.html"]), deps = [ + "//src/cdk/platform", "//src/lib/core", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -30,8 +31,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "progress_spinner_css", - srcs = [":progress_spinner_scss"], + srcs = [":progress_spinner_scss.css"], outs = ["progress-spinner.css"], - cmd = "cat $(locations :progress_spinner_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/radio/BUILD.bazel b/src/lib/radio/BUILD.bazel index 6ae78586bef..f288a59d1d3 100644 --- a/src/lib/radio/BUILD.bazel +++ b/src/lib/radio/BUILD.bazel @@ -7,14 +7,14 @@ ng_module( name = "radio", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/radio", - assets = [":radio_css"], + assets = [":radio_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/a11y", "//src/cdk/coercion", "//src/cdk/collections", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -33,8 +33,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "radio_css", - srcs = [":radio_scss"], + srcs = [":radio_scss.css"], outs = ["radio.css"], - cmd = "cat $(locations :radio_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/rollup_globals.bzl b/src/lib/rollup_globals.bzl new file mode 100644 index 00000000000..34a98e9cb54 --- /dev/null +++ b/src/lib/rollup_globals.bzl @@ -0,0 +1,12 @@ +load("//:packages.bzl", "MATERIAL_PACKAGES") + +# Base rollup globals for dependencies and the root entry-point. +MATERIAL_ROLLUP_GLOBALS = { + 'tslib': 'tslib', + '@angular/material': 'ng.material', +} + +# Rollup globals for subpackages, e.g., {"@angular/material/list": "ng.material.list"} +MATERIAL_ROLLUP_GLOBALS.update({ + "@angular/material/%s" % p: "ng.material.%s" % p for p in MATERIAL_PACKAGES +}) diff --git a/src/lib/schematics/BUILD.bazel b/src/lib/schematics/BUILD.bazel new file mode 100644 index 00000000000..2bb4454db45 --- /dev/null +++ b/src/lib/schematics/BUILD.bazel @@ -0,0 +1,21 @@ +package(default_visibility = ["//visibility:public"]) + +load("@build_bazel_rules_typescript//:defs.bzl", "ts_library") +load("@build_bazel_rules_nodejs//:defs.bzl", "npm_package") + + +ts_library( + name = "schematics", + module_name = "@angular/material/schematics", + srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts", "**/files/**/*"]), + tsconfig = ":tsconfig.json", +) + +# This package is intended to be combined into the main @angular/material package as a dep. +npm_package( + name = "npm_package", + srcs = [ + ":collection.json", + ] + glob(["**/files/**/*", "**/schema.json"]), + deps = [":schematics"], +) diff --git a/schematics/README.md b/src/lib/schematics/README.md similarity index 100% rename from schematics/README.md rename to src/lib/schematics/README.md diff --git a/schematics/collection.json b/src/lib/schematics/collection.json similarity index 100% rename from schematics/collection.json rename to src/lib/schematics/collection.json diff --git a/schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__styleext__ b/src/lib/schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__styleext__ similarity index 100% rename from schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__styleext__ rename to src/lib/schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__styleext__ diff --git a/schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html b/src/lib/schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html similarity index 100% rename from schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html rename to src/lib/schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html diff --git a/schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts b/src/lib/schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts similarity index 100% rename from schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts rename to src/lib/schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts diff --git a/schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts b/src/lib/schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts similarity index 100% rename from schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts rename to src/lib/schematics/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts diff --git a/src/lib/schematics/dashboard/index.js b/src/lib/schematics/dashboard/index.js new file mode 100644 index 00000000000..0a5066bc499 --- /dev/null +++ b/src/lib/schematics/dashboard/index.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const schematics_1 = require("@angular-devkit/schematics"); +const ast_1 = require("../utils/ast"); +const find_module_1 = require("../utils/devkit-utils/find-module"); +const component_1 = require("../utils/devkit-utils/component"); +/** + * Scaffolds a new navigation component. + * Internally it bootstraps the base component schematic + */ +function default_1(options) { + return schematics_1.chain([ + component_1.buildComponent(Object.assign({}, options)), + options.skipImport ? schematics_1.noop() : addNavModulesToModule(options) + ]); +} +exports.default = default_1; +/** + * Adds the required modules to the relative module. + */ +function addNavModulesToModule(options) { + return (host) => { + const modulePath = find_module_1.findModuleFromOptions(host, options); + ast_1.addModuleImportToModule(host, modulePath, 'MatGridListModule', '@angular/material'); + ast_1.addModuleImportToModule(host, modulePath, 'MatCardModule', '@angular/material'); + ast_1.addModuleImportToModule(host, modulePath, 'MatMenuModule', '@angular/material'); + ast_1.addModuleImportToModule(host, modulePath, 'MatIconModule', '@angular/material'); + ast_1.addModuleImportToModule(host, modulePath, 'MatButtonModule', '@angular/material'); + return host; + }; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/lib/schematics/dashboard/index.js.map b/src/lib/schematics/dashboard/index.js.map new file mode 100644 index 00000000000..756f1107a79 --- /dev/null +++ b/src/lib/schematics/dashboard/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;AAAA,2DAAqF;AAErF,sCAAqD;AACrD,mEAAwE;AACxE,+DAA+D;AAE/D;;;GAGG;AACH,mBAAwB,OAAe;IACrC,MAAM,CAAC,kBAAK,CAAC;QACX,0BAAc,mBAAM,OAAO,EAAG;QAC9B,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAI,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC;KAC7D,CAAC,CAAC;AACL,CAAC;AALD,4BAKC;AAED;;GAEG;AACH,+BAA+B,OAAe;IAC5C,MAAM,CAAC,CAAC,IAAU,EAAE,EAAE;QACpB,MAAM,UAAU,GAAG,mCAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;QACpF,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;QAChF,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;QAChF,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;QAChF,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/schematics/dashboard/index.ts b/src/lib/schematics/dashboard/index.ts similarity index 100% rename from schematics/dashboard/index.ts rename to src/lib/schematics/dashboard/index.ts diff --git a/src/lib/schematics/dashboard/index_spec.js b/src/lib/schematics/dashboard/index_spec.js new file mode 100644 index 00000000000..8461097c43e --- /dev/null +++ b/src/lib/schematics/dashboard/index_spec.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const testing_1 = require("@angular-devkit/schematics/testing"); +const path_1 = require("path"); +const testing_2 = require("../utils/testing"); +const test_1 = require("@schematics/angular/utility/test"); +const collectionPath = path_1.join(__dirname, '../collection.json'); +describe('material-dashboard-schematic', () => { + let runner; + const options = { + name: 'foo', + path: 'app', + sourceDir: 'src', + inlineStyle: false, + inlineTemplate: false, + changeDetection: 'Default', + styleext: 'css', + spec: true, + module: undefined, + export: false, + prefix: undefined, + viewEncapsulation: undefined, + }; + beforeEach(() => { + runner = new testing_1.SchematicTestRunner('schematics', collectionPath); + }); + it('should create dashboard files and add them to module', () => { + const tree = runner.runSchematic('materialDashboard', Object.assign({}, options), testing_2.createTestApp()); + const files = tree.files; + expect(files).toContain('/src/app/foo/foo.component.css'); + expect(files).toContain('/src/app/foo/foo.component.html'); + expect(files).toContain('/src/app/foo/foo.component.spec.ts'); + expect(files).toContain('/src/app/foo/foo.component.ts'); + const moduleContent = test_1.getFileContent(tree, '/src/app/app.module.ts'); + expect(moduleContent).toMatch(/import.*Foo.*from '.\/foo\/foo.component'/); + expect(moduleContent).toMatch(/declarations:\s*\[[^\]]+?,\r?\n\s+FooComponent\r?\n/m); + }); + it('should add dashboard imports to module', () => { + const tree = runner.runSchematic('materialDashboard', Object.assign({}, options), testing_2.createTestApp()); + const moduleContent = test_1.getFileContent(tree, '/src/app/app.module.ts'); + expect(moduleContent).toContain('MatGridListModule'); + expect(moduleContent).toContain('MatCardModule'); + expect(moduleContent).toContain('MatMenuModule'); + expect(moduleContent).toContain('MatIconModule'); + expect(moduleContent).toContain('MatButtonModule'); + expect(moduleContent).toContain( + // tslint:disable-next-line + `import { MatGridListModule, MatCardModule, MatMenuModule, MatIconModule, MatButtonModule } from '@angular/material';`); + }); +}); +//# sourceMappingURL=index_spec.js.map \ No newline at end of file diff --git a/src/lib/schematics/dashboard/index_spec.js.map b/src/lib/schematics/dashboard/index_spec.js.map new file mode 100644 index 00000000000..c121a8dea69 --- /dev/null +++ b/src/lib/schematics/dashboard/index_spec.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index_spec.js","sourceRoot":"","sources":["index_spec.ts"],"names":[],"mappings":";;AAAA,gEAAuE;AACvE,+BAA0B;AAE1B,8CAA+C;AAC/C,2DAAgE;AAEhE,MAAM,cAAc,GAAG,WAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAE7D,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAI,MAA2B,CAAC;IAChC,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,KAAK;QAClB,cAAc,EAAE,KAAK;QACrB,eAAe,EAAE,SAAS;QAC1B,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,SAAS;QACjB,iBAAiB,EAAE,SAAS;KAC7B,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,6BAAmB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,mBAAmB,oBAAO,OAAO,GAAI,uBAAa,EAAE,CAAC,CAAC;QACvF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAEzD,MAAM,aAAa,GAAG,qBAAc,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;QACrE,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAC3E,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,mBAAmB,oBAAO,OAAO,GAAI,uBAAa,EAAE,CAAC,CAAC;QACvF,MAAM,aAAa,GAAG,qBAAc,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;QAErE,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACrD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAEnD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS;QAC7B,2BAA2B;QAC3B,sHAAsH,CAAC,CAAC;IAC5H,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/schematics/dashboard/index_spec.ts b/src/lib/schematics/dashboard/index_spec.ts similarity index 100% rename from schematics/dashboard/index_spec.ts rename to src/lib/schematics/dashboard/index_spec.ts diff --git a/schematics/dashboard/schema.json b/src/lib/schematics/dashboard/schema.json similarity index 100% rename from schematics/dashboard/schema.json rename to src/lib/schematics/dashboard/schema.json diff --git a/schematics/dashboard/schema.d.ts b/src/lib/schematics/dashboard/schema.ts similarity index 100% rename from schematics/dashboard/schema.d.ts rename to src/lib/schematics/dashboard/schema.ts diff --git a/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__styleext__ b/src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__styleext__ similarity index 100% rename from schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__styleext__ rename to src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__styleext__ diff --git a/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html b/src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html similarity index 100% rename from schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html rename to src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html diff --git a/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts b/src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts similarity index 100% rename from schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts rename to src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts diff --git a/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts b/src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts similarity index 100% rename from schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts rename to src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts diff --git a/src/lib/schematics/nav/index.js b/src/lib/schematics/nav/index.js new file mode 100644 index 00000000000..138fc9e68c6 --- /dev/null +++ b/src/lib/schematics/nav/index.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const schematics_1 = require("@angular-devkit/schematics"); +const ast_1 = require("../utils/ast"); +const find_module_1 = require("../utils/devkit-utils/find-module"); +const component_1 = require("../utils/devkit-utils/component"); +/** + * Scaffolds a new navigation component. + * Internally it bootstraps the base component schematic + */ +function default_1(options) { + return schematics_1.chain([ + component_1.buildComponent(Object.assign({}, options)), + options.skipImport ? schematics_1.noop() : addNavModulesToModule(options) + ]); +} +exports.default = default_1; +/** + * Adds the required modules to the relative module. + */ +function addNavModulesToModule(options) { + return (host) => { + const modulePath = find_module_1.findModuleFromOptions(host, options); + ast_1.addModuleImportToModule(host, modulePath, 'LayoutModule', '@angular/cdk/layout'); + ast_1.addModuleImportToModule(host, modulePath, 'MatToolbarModule', '@angular/material'); + ast_1.addModuleImportToModule(host, modulePath, 'MatButtonModule', '@angular/material'); + ast_1.addModuleImportToModule(host, modulePath, 'MatSidenavModule', '@angular/material'); + ast_1.addModuleImportToModule(host, modulePath, 'MatIconModule', '@angular/material'); + ast_1.addModuleImportToModule(host, modulePath, 'MatListModule', '@angular/material'); + return host; + }; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/lib/schematics/nav/index.js.map b/src/lib/schematics/nav/index.js.map new file mode 100644 index 00000000000..09a69cb201e --- /dev/null +++ b/src/lib/schematics/nav/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;AAAA,2DAAqF;AAErF,sCAAqD;AACrD,mEAAwE;AACxE,+DAA+D;AAE/D;;;GAGG;AACH,mBAAwB,OAAe;IACrC,MAAM,CAAC,kBAAK,CAAC;QACX,0BAAc,mBAAM,OAAO,EAAG;QAC9B,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAI,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC;KAC7D,CAAC,CAAC;AACL,CAAC;AALD,4BAKC;AAED;;GAEG;AACH,+BAA+B,OAAe;IAC5C,MAAM,CAAC,CAAC,IAAU,EAAE,EAAE;QACpB,MAAM,UAAU,GAAG,mCAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB,CAAC,CAAC;QACjF,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;QACnF,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;QAClF,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;QACnF,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;QAChF,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;QAChF,MAAM,CAAC,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/schematics/nav/index.ts b/src/lib/schematics/nav/index.ts similarity index 100% rename from schematics/nav/index.ts rename to src/lib/schematics/nav/index.ts diff --git a/src/lib/schematics/nav/index_spec.js b/src/lib/schematics/nav/index_spec.js new file mode 100644 index 00000000000..ac9916ae808 --- /dev/null +++ b/src/lib/schematics/nav/index_spec.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const testing_1 = require("@angular-devkit/schematics/testing"); +const path_1 = require("path"); +const testing_2 = require("../utils/testing"); +const test_1 = require("@schematics/angular/utility/test"); +const collectionPath = path_1.join(__dirname, '../collection.json'); +describe('material-nav-schematic', () => { + let runner; + const options = { + name: 'foo', + path: 'app', + sourceDir: 'src', + inlineStyle: false, + inlineTemplate: false, + changeDetection: 'Default', + styleext: 'css', + spec: true, + module: undefined, + export: false, + prefix: undefined, + viewEncapsulation: undefined, + }; + beforeEach(() => { + runner = new testing_1.SchematicTestRunner('schematics', collectionPath); + }); + it('should create nav files and add them to module', () => { + const tree = runner.runSchematic('materialNav', Object.assign({}, options), testing_2.createTestApp()); + const files = tree.files; + expect(files).toContain('/src/app/foo/foo.component.css'); + expect(files).toContain('/src/app/foo/foo.component.html'); + expect(files).toContain('/src/app/foo/foo.component.spec.ts'); + expect(files).toContain('/src/app/foo/foo.component.ts'); + const moduleContent = test_1.getFileContent(tree, '/src/app/app.module.ts'); + expect(moduleContent).toMatch(/import.*Foo.*from '.\/foo\/foo.component'/); + expect(moduleContent).toMatch(/declarations:\s*\[[^\]]+?,\r?\n\s+FooComponent\r?\n/m); + }); + it('should add nav imports to module', () => { + const tree = runner.runSchematic('materialNav', Object.assign({}, options), testing_2.createTestApp()); + const moduleContent = test_1.getFileContent(tree, '/src/app/app.module.ts'); + expect(moduleContent).toContain('LayoutModule'); + expect(moduleContent).toContain('MatToolbarModule'); + expect(moduleContent).toContain('MatButtonModule'); + expect(moduleContent).toContain('MatSidenavModule'); + expect(moduleContent).toContain('MatIconModule'); + expect(moduleContent).toContain('MatListModule'); + expect(moduleContent).toContain(`import { LayoutModule } from '@angular/cdk/layout';`); + expect(moduleContent).toContain( + // tslint:disable-next-line + `import { MatToolbarModule, MatButtonModule, MatSidenavModule, MatIconModule, MatListModule } from '@angular/material';`); + }); +}); +//# sourceMappingURL=index_spec.js.map \ No newline at end of file diff --git a/src/lib/schematics/nav/index_spec.js.map b/src/lib/schematics/nav/index_spec.js.map new file mode 100644 index 00000000000..1b8f3a13ae8 --- /dev/null +++ b/src/lib/schematics/nav/index_spec.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index_spec.js","sourceRoot":"","sources":["index_spec.ts"],"names":[],"mappings":";;AAAA,gEAAuE;AACvE,+BAA0B;AAE1B,8CAA+C;AAC/C,2DAAgE;AAEhE,MAAM,cAAc,GAAG,WAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAE7D,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,MAA2B,CAAC;IAChC,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,KAAK;QAClB,cAAc,EAAE,KAAK;QACrB,eAAe,EAAE,SAAS;QAC1B,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,SAAS;QACjB,iBAAiB,EAAE,SAAS;KAC7B,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,6BAAmB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,aAAa,oBAAO,OAAO,GAAI,uBAAa,EAAE,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAEzD,MAAM,aAAa,GAAG,qBAAc,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;QACrE,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAC3E,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,aAAa,oBAAO,OAAO,GAAI,uBAAa,EAAE,CAAC,CAAC;QACjF,MAAM,aAAa,GAAG,qBAAc,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;QAErE,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAChD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACpD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACnD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACpD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAEjD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,qDAAqD,CAAC,CAAC;QACvF,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS;QAC7B,2BAA2B;QAC3B,wHAAwH,CAAC,CAAC;IAC9H,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/schematics/nav/index_spec.ts b/src/lib/schematics/nav/index_spec.ts similarity index 100% rename from schematics/nav/index_spec.ts rename to src/lib/schematics/nav/index_spec.ts diff --git a/schematics/nav/schema.json b/src/lib/schematics/nav/schema.json similarity index 100% rename from schematics/nav/schema.json rename to src/lib/schematics/nav/schema.json diff --git a/schematics/nav/schema.d.ts b/src/lib/schematics/nav/schema.ts similarity index 100% rename from schematics/nav/schema.d.ts rename to src/lib/schematics/nav/schema.ts diff --git a/schematics/shell/README.md b/src/lib/schematics/shell/README.md similarity index 100% rename from schematics/shell/README.md rename to src/lib/schematics/shell/README.md diff --git a/src/lib/schematics/shell/custom-theme.js b/src/lib/schematics/shell/custom-theme.js new file mode 100644 index 00000000000..eb5e12de44a --- /dev/null +++ b/src/lib/schematics/shell/custom-theme.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Create custom theme for the given application configuration. + */ +function createCustomTheme(app) { + const name = app.name || 'app'; + return ` +// Custom Theming for Angular Material +// For more information: https://material.angular.io/guide/theming +@import '~@angular/material/theming'; +// Plus imports for other components in your app. + +// Include the common styles for Angular Material. We include this here so that you only +// have to load a single css file for Angular Material in your app. +// Be sure that you only ever include this mixin once! +@include mat-core(); + +// Define the palettes for your theme using the Material Design palettes available in palette.scss +// (imported above). For each palette, you can optionally specify a default, lighter, and darker +// hue. Available color palettes: https://www.google.com/design/spec/style/color.html +$${name}-primary: mat-palette($mat-indigo); +$${name}-accent: mat-palette($mat-pink, A200, A100, A400); + +// The warn palette is optional (defaults to red). +$${name}-warn: mat-palette($mat-red); + +// Create the theme object (a Sass map containing all of the palettes). +$${name}-theme: mat-light-theme($${name}-primary, $${name}-accent, $${name}-warn); + +// Include theme styles for core and each component used in your app. +// Alternatively, you can import and @include the theme mixins for each component +// that you are using. +@include angular-material-theme($${name}-theme); + +`; +} +exports.createCustomTheme = createCustomTheme; +//# sourceMappingURL=custom-theme.js.map \ No newline at end of file diff --git a/src/lib/schematics/shell/custom-theme.js.map b/src/lib/schematics/shell/custom-theme.js.map new file mode 100644 index 00000000000..bdd16248cde --- /dev/null +++ b/src/lib/schematics/shell/custom-theme.js.map @@ -0,0 +1 @@ +{"version":3,"file":"custom-theme.js","sourceRoot":"","sources":["custom-theme.ts"],"names":[],"mappings":";;AAEA;;GAEG;AACH,2BAAkC,GAAc;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;IACjC,MAAM,CAAC;;;;;;;;;;;;;;GAcJ,IAAI;GACJ,IAAI;;;GAGJ,IAAI;;;GAGJ,IAAI,4BAA4B,IAAI,cAAc,IAAI,aAAa,IAAI;;;;;mCAKvC,IAAI;;CAEtC,CAAC;AACF,CAAC;AA/BD,8CA+BC"} \ No newline at end of file diff --git a/schematics/shell/custom-theme.ts b/src/lib/schematics/shell/custom-theme.ts similarity index 100% rename from schematics/shell/custom-theme.ts rename to src/lib/schematics/shell/custom-theme.ts diff --git a/src/lib/schematics/shell/index.js b/src/lib/schematics/shell/index.js new file mode 100644 index 00000000000..ff6a1dd8e75 --- /dev/null +++ b/src/lib/schematics/shell/index.js @@ -0,0 +1,104 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const schematics_1 = require("@angular-devkit/schematics"); +const lib_versions_1 = require("../utils/lib-versions"); +const config_1 = require("../utils/devkit-utils/config"); +const ast_1 = require("../utils/ast"); +const html_1 = require("../utils/html"); +const package_1 = require("../utils/package"); +const custom_theme_1 = require("./custom-theme"); +const core_1 = require("@angular-devkit/core"); +const change_1 = require("../utils/devkit-utils/change"); +/** + * Scaffolds the basics of a Angular Material application, this includes: + * - Add Packages to package.json + * - Adds pre-built themes to styles.ext + * - Adds Browser Animation to app.momdule + */ +function default_1(options) { + return schematics_1.chain([ + options && options.skipPackageJson ? schematics_1.noop() : addMaterialToPackageJson(options), + addThemeToAppStyles(options), + addAnimationRootConfig(), + addFontsToIndex() + ]); +} +exports.default = default_1; +/** + * Add material, cdk, annimations to package.json + */ +function addMaterialToPackageJson(options) { + return (host) => { + package_1.addPackageToPackageJson(host, 'dependencies', '@angular/cdk', lib_versions_1.cdkVersion); + package_1.addPackageToPackageJson(host, 'dependencies', '@angular/material', lib_versions_1.materialVersion); + package_1.addPackageToPackageJson(host, 'dependencies', '@angular/animations', lib_versions_1.angularVersion); + return host; + }; +} +/** + * Add pre-built styles to style.ext file + */ +function addThemeToAppStyles(options) { + return (host) => { + const config = config_1.getConfig(host); + const themeName = options && options.theme ? options.theme : 'indigo-pink'; + const app = config_1.getAppFromConfig(config, '0'); + if (themeName === 'custom') { + insertCustomTheme(app, host); + } + else { + insertPrebuiltTheme(app, host, themeName, config); + } + return host; + }; +} +/** + * Insert a custom theme to styles.scss file. + */ +function insertCustomTheme(app, host) { + const stylesPath = core_1.normalize(`/${app.root}/styles.scss`); + const buffer = host.read(stylesPath); + if (!buffer) { + throw new schematics_1.SchematicsException(`Could not find file for path: ${stylesPath}`); + } + const src = buffer.toString(); + const insertion = new change_1.InsertChange(stylesPath, 0, custom_theme_1.createCustomTheme(app)); + const recorder = host.beginUpdate(stylesPath); + recorder.insertLeft(insertion.pos, insertion.toAdd); + host.commitUpdate(recorder); +} +/** + * Insert a pre-built theme to .angular-cli.json file. + */ +function insertPrebuiltTheme(app, host, themeName, config) { + const themeSrc = `../node_modules/@angular/material/prebuilt-themes/${themeName}.css`; + const hasCurrentTheme = app.styles.find((s) => s.indexOf(themeSrc) > -1); + const hasOtherTheme = app.styles.find((s) => s.indexOf('@angular/material/prebuilt-themes') > -1); + if (!hasCurrentTheme && !hasOtherTheme) { + app.styles.splice(0, 0, themeSrc); + } + if (hasOtherTheme) { + throw new schematics_1.SchematicsException(`Another theme is already defined.`); + } + host.overwrite('.angular-cli.json', JSON.stringify(config, null, 2)); +} +/** + * Add browser animation module to app.module + */ +function addAnimationRootConfig() { + return (host) => { + ast_1.addModuleImportToRootModule(host, 'BrowserAnimationsModule', '@angular/platform-browser/animations'); + return host; + }; +} +/** + * Adds fonts to the index.ext file + */ +function addFontsToIndex() { + return (host) => { + html_1.addHeadLink(host, ``); + html_1.addHeadLink(host, ``); + return host; + }; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/lib/schematics/shell/index.js.map b/src/lib/schematics/shell/index.js.map new file mode 100644 index 00000000000..abd18b8e2cb --- /dev/null +++ b/src/lib/schematics/shell/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/schematics/shell/index.ts b/src/lib/schematics/shell/index.ts similarity index 100% rename from schematics/shell/index.ts rename to src/lib/schematics/shell/index.ts diff --git a/src/lib/schematics/shell/index_spec.js b/src/lib/schematics/shell/index_spec.js new file mode 100644 index 00000000000..1e2c924352c --- /dev/null +++ b/src/lib/schematics/shell/index_spec.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const testing_1 = require("@angular-devkit/schematics/testing"); +const path_1 = require("path"); +const test_1 = require("@schematics/angular/utility/test"); +const testing_2 = require("../utils/testing"); +const config_1 = require("@schematics/angular/utility/config"); +const ast_1 = require("../utils/ast"); +const core_1 = require("@angular-devkit/core"); +const collectionPath = path_1.join(__dirname, '../collection.json'); +describe('material-shell-schematic', () => { + let runner; + let appTree; + beforeEach(() => { + appTree = testing_2.createTestApp(); + runner = new testing_1.SchematicTestRunner('schematics', collectionPath); + }); + it('should update package.json', () => { + const tree = runner.runSchematic('materialShell', {}, appTree); + const packageJson = JSON.parse(test_1.getFileContent(tree, '/package.json')); + expect(packageJson.dependencies['@angular/material']).toBeDefined(); + expect(packageJson.dependencies['@angular/cdk']).toBeDefined(); + }); + it('should add default theme', () => { + const tree = runner.runSchematic('materialShell', {}, appTree); + const config = config_1.getConfig(tree); + config.apps.forEach(app => { + expect(app.styles).toContain('../node_modules/@angular/material/prebuilt-themes/indigo-pink.css'); + }); + }); + it('should add custom theme', () => { + const tree = runner.runSchematic('materialShell', { + theme: 'custom' + }, appTree); + const config = config_1.getConfig(tree); + const app = config_1.getAppFromConfig(config, '0'); + const stylesPath = core_1.normalize(`/${app.root}/styles.scss`); + const buffer = tree.read(stylesPath); + const src = buffer.toString(); + expect(src.indexOf(`@import '~@angular/material/theming';`)).toBeGreaterThan(-1); + expect(src.indexOf(`$app-primary`)).toBeGreaterThan(-1); + }); + it('should add font links', () => { + const tree = runner.runSchematic('materialShell', {}, appTree); + const indexPath = ast_1.getIndexHtmlPath(tree); + const buffer = tree.read(indexPath); + const indexSrc = buffer.toString(); + expect(indexSrc.indexOf('fonts.googleapis.com')).toBeGreaterThan(-1); + }); +}); +//# sourceMappingURL=index_spec.js.map \ No newline at end of file diff --git a/src/lib/schematics/shell/index_spec.js.map b/src/lib/schematics/shell/index_spec.js.map new file mode 100644 index 00000000000..c37c1507cb3 --- /dev/null +++ b/src/lib/schematics/shell/index_spec.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index_spec.js","sourceRoot":"","sources":["index_spec.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/schematics/shell/index_spec.ts b/src/lib/schematics/shell/index_spec.ts similarity index 100% rename from schematics/shell/index_spec.ts rename to src/lib/schematics/shell/index_spec.ts diff --git a/schematics/shell/schema.json b/src/lib/schematics/shell/schema.json similarity index 100% rename from schematics/shell/schema.json rename to src/lib/schematics/shell/schema.json diff --git a/schematics/shell/schema.d.ts b/src/lib/schematics/shell/schema.ts similarity index 100% rename from schematics/shell/schema.d.ts rename to src/lib/schematics/shell/schema.ts diff --git a/schematics/table/README.md b/src/lib/schematics/table/README.md similarity index 100% rename from schematics/table/README.md rename to src/lib/schematics/table/README.md diff --git a/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__-datasource.ts b/src/lib/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__-datasource.ts similarity index 100% rename from schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__-datasource.ts rename to src/lib/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__-datasource.ts diff --git a/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__styleext__ b/src/lib/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__styleext__ similarity index 100% rename from schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__styleext__ rename to src/lib/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__styleext__ diff --git a/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html b/src/lib/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html similarity index 100% rename from schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html rename to src/lib/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html diff --git a/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts b/src/lib/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts similarity index 100% rename from schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts rename to src/lib/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts diff --git a/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts b/src/lib/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts similarity index 100% rename from schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts rename to src/lib/schematics/table/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts diff --git a/src/lib/schematics/table/index.js b/src/lib/schematics/table/index.js new file mode 100644 index 00000000000..1a18eaeec10 --- /dev/null +++ b/src/lib/schematics/table/index.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const schematics_1 = require("@angular-devkit/schematics"); +const ast_1 = require("../utils/ast"); +const find_module_1 = require("../utils/devkit-utils/find-module"); +const component_1 = require("../utils/devkit-utils/component"); +/** + * Scaffolds a new table component. + * Internally it bootstraps the base component schematic + */ +function default_1(options) { + return schematics_1.chain([ + component_1.buildComponent(Object.assign({}, options)), + options.skipImport ? schematics_1.noop() : addTableModulesToModule(options) + ]); +} +exports.default = default_1; +/** + * Adds the required modules to the relative module. + */ +function addTableModulesToModule(options) { + return (host) => { + const modulePath = find_module_1.findModuleFromOptions(host, options); + ast_1.addModuleImportToModule(host, modulePath, 'MatTableModule', '@angular/material'); + ast_1.addModuleImportToModule(host, modulePath, 'MatPaginatorModule', '@angular/material'); + ast_1.addModuleImportToModule(host, modulePath, 'MatSortModule', '@angular/material'); + return host; + }; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/src/lib/schematics/table/index.js.map b/src/lib/schematics/table/index.js.map new file mode 100644 index 00000000000..a4aefc0fe2a --- /dev/null +++ b/src/lib/schematics/table/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;AAAA,2DAAqF;AAErF,sCAAqD;AACrD,mEAAwE;AACxE,+DAA+D;AAE/D;;;GAGG;AACH,mBAAwB,OAAe;IACrC,MAAM,CAAC,kBAAK,CAAC;QACX,0BAAc,mBAAK,OAAO,EAAE;QAC5B,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAI,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC;AALD,4BAKC;AAED;;GAEG;AACH,iCAAiC,OAAe;IAC9C,MAAM,CAAC,CAAC,IAAU,EAAE,EAAE;QACpB,MAAM,UAAU,GAAG,mCAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;QACjF,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;QACrF,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;QAChF,MAAM,CAAC,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/schematics/table/index.ts b/src/lib/schematics/table/index.ts similarity index 100% rename from schematics/table/index.ts rename to src/lib/schematics/table/index.ts diff --git a/src/lib/schematics/table/index_spec.js b/src/lib/schematics/table/index_spec.js new file mode 100644 index 00000000000..eba626b5ca7 --- /dev/null +++ b/src/lib/schematics/table/index_spec.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const testing_1 = require("@angular-devkit/schematics/testing"); +const path_1 = require("path"); +const testing_2 = require("../utils/testing"); +const test_1 = require("@schematics/angular/utility/test"); +const collectionPath = path_1.join(__dirname, '../collection.json'); +describe('material-table-schematic', () => { + let runner; + const options = { + name: 'foo', + path: 'app', + sourceDir: 'src', + inlineStyle: false, + inlineTemplate: false, + changeDetection: 'Default', + styleext: 'css', + spec: true, + module: undefined, + export: false, + prefix: undefined, + viewEncapsulation: undefined, + }; + beforeEach(() => { + runner = new testing_1.SchematicTestRunner('schematics', collectionPath); + }); + it('should create table files and add them to module', () => { + const tree = runner.runSchematic('materialTable', Object.assign({}, options), testing_2.createTestApp()); + const files = tree.files; + expect(files).toContain('/src/app/foo/foo.component.css'); + expect(files).toContain('/src/app/foo/foo.component.html'); + expect(files).toContain('/src/app/foo/foo.component.spec.ts'); + expect(files).toContain('/src/app/foo/foo.component.ts'); + expect(files).toContain('/src/app/foo/foo-datasource.ts'); + const moduleContent = test_1.getFileContent(tree, '/src/app/app.module.ts'); + expect(moduleContent).toMatch(/import.*Foo.*from '.\/foo\/foo.component'/); + expect(moduleContent).toMatch(/declarations:\s*\[[^\]]+?,\r?\n\s+FooComponent\r?\n/m); + const datasourceContent = test_1.getFileContent(tree, '/src/app/foo/foo-datasource.ts'); + expect(datasourceContent).toContain('FooItem'); + expect(datasourceContent).toContain('FooDataSource'); + const componentContent = test_1.getFileContent(tree, '/src/app/foo/foo.component.ts'); + expect(componentContent).toContain('FooDataSource'); + }); + it('should add table imports to module', () => { + const tree = runner.runSchematic('materialTable', Object.assign({}, options), testing_2.createTestApp()); + const moduleContent = test_1.getFileContent(tree, '/src/app/app.module.ts'); + expect(moduleContent).toContain('MatTableModule'); + expect(moduleContent).toContain('MatPaginatorModule'); + expect(moduleContent).toContain('MatSortModule'); + expect(moduleContent).toContain(`import { MatTableModule, MatPaginatorModule, MatSortModule } from '@angular/material';`); + }); +}); +//# sourceMappingURL=index_spec.js.map \ No newline at end of file diff --git a/src/lib/schematics/table/index_spec.js.map b/src/lib/schematics/table/index_spec.js.map new file mode 100644 index 00000000000..6a5bb16331e --- /dev/null +++ b/src/lib/schematics/table/index_spec.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index_spec.js","sourceRoot":"","sources":["index_spec.ts"],"names":[],"mappings":";;AAAA,gEAAuE;AACvE,+BAA0B;AAE1B,8CAA+C;AAC/C,2DAAgE;AAEhE,MAAM,cAAc,GAAG,WAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAE7D,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,MAA2B,CAAC;IAChC,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,KAAK;QAClB,cAAc,EAAE,KAAK;QACrB,eAAe,EAAE,SAAS;QAC1B,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,SAAS;QACjB,iBAAiB,EAAE,SAAS;KAC7B,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,6BAAmB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,oBAAO,OAAO,GAAI,uBAAa,EAAE,CAAC,CAAC;QACnF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAE1D,MAAM,aAAa,GAAG,qBAAc,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;QACrE,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAC3E,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC;QAEtF,MAAM,iBAAiB,GAAG,qBAAc,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;QACjF,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAErD,MAAM,gBAAgB,GAAG,qBAAc,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;QAC/E,MAAM,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,oBAAO,OAAO,GAAI,uBAAa,EAAE,CAAC,CAAC;QACnF,MAAM,aAAa,GAAG,qBAAc,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;QAErE,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAClD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACtD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAEjD,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAC7B,wFAAwF,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/schematics/table/index_spec.ts b/src/lib/schematics/table/index_spec.ts similarity index 100% rename from schematics/table/index_spec.ts rename to src/lib/schematics/table/index_spec.ts diff --git a/schematics/table/schema.json b/src/lib/schematics/table/schema.json similarity index 100% rename from schematics/table/schema.json rename to src/lib/schematics/table/schema.json diff --git a/schematics/table/schema.d.ts b/src/lib/schematics/table/schema.ts similarity index 100% rename from schematics/table/schema.d.ts rename to src/lib/schematics/table/schema.ts diff --git a/schematics/tsconfig.json b/src/lib/schematics/tsconfig.json similarity index 89% rename from schematics/tsconfig.json rename to src/lib/schematics/tsconfig.json index 974b22b0fba..c35130d2d8d 100644 --- a/schematics/tsconfig.json +++ b/src/lib/schematics/tsconfig.json @@ -3,7 +3,7 @@ "lib": ["es2017", "dom"], "module": "commonjs", "moduleResolution": "node", - "outDir": "../dist/schematics", + "outDir": "../../../dist/schematics", "noEmitOnError": false, "skipDefaultLibCheck": true, "skipLibCheck": true, diff --git a/src/lib/schematics/utils/ast.js b/src/lib/schematics/utils/ast.js new file mode 100644 index 00000000000..b5d718b6200 --- /dev/null +++ b/src/lib/schematics/utils/ast.js @@ -0,0 +1,61 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const schematics_1 = require("@angular-devkit/schematics"); +const ts = require("typescript"); +const ast_utils_1 = require("./devkit-utils/ast-utils"); +const ng_ast_utils_1 = require("./devkit-utils/ng-ast-utils"); +const change_1 = require("./devkit-utils/change"); +const config_1 = require("./devkit-utils/config"); +const core_1 = require("@angular-devkit/core"); +/** + * Reads file given path and returns TypeScript source file. + */ +function getSourceFile(host, path) { + const buffer = host.read(path); + if (!buffer) { + throw new schematics_1.SchematicsException(`Could not find file for path: ${path}`); + } + const content = buffer.toString(); + const source = ts.createSourceFile(path, content, ts.ScriptTarget.Latest, true); + return source; +} +exports.getSourceFile = getSourceFile; +/** + * Import and add module to root app module. + */ +function addModuleImportToRootModule(host, moduleName, src) { + const config = config_1.getConfig(host); + const app = config_1.getAppFromConfig(config, '0'); + const modulePath = ng_ast_utils_1.getAppModulePath(host, app); + addModuleImportToModule(host, modulePath, moduleName, src); +} +exports.addModuleImportToRootModule = addModuleImportToRootModule; +/** + * Import and add module to specific module path. + * @param host the tree we are updating + * @param modulePath src location of the module to import + * @param moduleName name of module to import + * @param src src location to import + */ +function addModuleImportToModule(host, modulePath, moduleName, src) { + const moduleSource = getSourceFile(host, modulePath); + const changes = ast_utils_1.addImportToModule(moduleSource, modulePath, moduleName, src); + const recorder = host.beginUpdate(modulePath); + changes.forEach((change) => { + if (change instanceof change_1.InsertChange) { + recorder.insertLeft(change.pos, change.toAdd); + } + }); + host.commitUpdate(recorder); +} +exports.addModuleImportToModule = addModuleImportToModule; +/** + * Gets the app index.html file + */ +function getIndexHtmlPath(host) { + const config = config_1.getConfig(host); + const app = config_1.getAppFromConfig(config, '0'); + return core_1.normalize(`/${app.root}/${app.index}`); +} +exports.getIndexHtmlPath = getIndexHtmlPath; +//# sourceMappingURL=ast.js.map \ No newline at end of file diff --git a/src/lib/schematics/utils/ast.js.map b/src/lib/schematics/utils/ast.js.map new file mode 100644 index 00000000000..b278722c64c --- /dev/null +++ b/src/lib/schematics/utils/ast.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ast.js","sourceRoot":"","sources":["ast.ts"],"names":[],"mappings":";;AAAA,2DAA+D;AAE/D,iCAAiC;AACjC,wDAA2D;AAC3D,8DAA6D;AAC7D,kDAAmD;AACnD,kDAAkE;AAClE,+CAA+C;AAE/C;;GAEG;AACH,uBAA8B,IAAU,EAAE,IAAY;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACZ,MAAM,IAAI,gCAAmB,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChF,MAAM,CAAC,MAAM,CAAC;AAChB,CAAC;AARD,sCAQC;AAED;;GAEG;AACH,qCAA4C,IAAU,EAAE,UAAkB,EAAE,GAAW;IACrF,MAAM,MAAM,GAAG,kBAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,yBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,+BAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/C,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC;AALD,kEAKC;AAED;;;;;;GAMG;AACH,iCACI,IAAU,EAAE,UAAkB,EAAE,UAAkB,EAAE,GAAW;IACjE,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,6BAAiB,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAE9C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACzB,EAAE,CAAC,CAAC,MAAM,YAAY,qBAAY,CAAC,CAAC,CAAC;YACnC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAbD,0DAaC;AAED;;GAEG;AACH,0BAAiC,IAAU;IACzC,MAAM,MAAM,GAAG,kBAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,yBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,MAAM,CAAC,gBAAS,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AAChD,CAAC;AAJD,4CAIC"} \ No newline at end of file diff --git a/schematics/utils/ast.ts b/src/lib/schematics/utils/ast.ts similarity index 100% rename from schematics/utils/ast.ts rename to src/lib/schematics/utils/ast.ts diff --git a/schematics/utils/devkit-utils/README.md b/src/lib/schematics/utils/devkit-utils/README.md similarity index 100% rename from schematics/utils/devkit-utils/README.md rename to src/lib/schematics/utils/devkit-utils/README.md diff --git a/src/lib/schematics/utils/devkit-utils/ast-utils.js b/src/lib/schematics/utils/devkit-utils/ast-utils.js new file mode 100644 index 00000000000..c01ea6b26e2 --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/ast-utils.js @@ -0,0 +1,393 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +const ts = require("typescript"); +const change_1 = require("./change"); +const route_utils_1 = require("./route-utils"); +/** + * Find all nodes from the AST in the subtree of node of SyntaxKind kind. + * @param node + * @param kind + * @param max The maximum number of items to return. + * @return all nodes of kind, or [] if none is found + */ +function findNodes(node, kind, max = Infinity) { + if (!node || max == 0) { + return []; + } + const arr = []; + if (node.kind === kind) { + arr.push(node); + max--; + } + if (max > 0) { + for (const child of node.getChildren()) { + findNodes(child, kind, max).forEach(node => { + if (max > 0) { + arr.push(node); + } + max--; + }); + if (max <= 0) { + break; + } + } + } + return arr; +} +exports.findNodes = findNodes; +/** + * Get all the nodes from a source. + * @param sourceFile The source file object. + * @returns {Observable} An observable of all the nodes in the source. + */ +function getSourceNodes(sourceFile) { + const nodes = [sourceFile]; + const result = []; + while (nodes.length > 0) { + const node = nodes.shift(); + if (node) { + result.push(node); + if (node.getChildCount(sourceFile) >= 0) { + nodes.unshift(...node.getChildren()); + } + } + } + return result; +} +exports.getSourceNodes = getSourceNodes; +function findNode(node, kind, text) { + if (node.kind === kind && node.getText() === text) { + // throw new Error(node.getText()); + return node; + } + let foundNode = null; + ts.forEachChild(node, childNode => { + foundNode = foundNode || findNode(childNode, kind, text); + }); + return foundNode; +} +exports.findNode = findNode; +/** + * Helper for sorting nodes. + * @return function to sort nodes in increasing order of position in sourceFile + */ +function nodesByPosition(first, second) { + return first.pos - second.pos; +} +/** + * Insert `toInsert` after the last occurence of `ts.SyntaxKind[nodes[i].kind]` + * or after the last of occurence of `syntaxKind` if the last occurence is a sub child + * of ts.SyntaxKind[nodes[i].kind] and save the changes in file. + * + * @param nodes insert after the last occurence of nodes + * @param toInsert string to insert + * @param file file to insert changes into + * @param fallbackPos position to insert if toInsert happens to be the first occurence + * @param syntaxKind the ts.SyntaxKind of the subchildren to insert after + * @return Change instance + * @throw Error if toInsert is first occurence but fall back is not set + */ +function insertAfterLastOccurrence(nodes, toInsert, file, fallbackPos, syntaxKind) { + let lastItem = nodes.sort(nodesByPosition).pop(); + if (!lastItem) { + throw new Error(); + } + if (syntaxKind) { + lastItem = findNodes(lastItem, syntaxKind).sort(nodesByPosition).pop(); + } + if (!lastItem && fallbackPos == undefined) { + throw new Error(`tried to insert ${toInsert} as first occurence with no fallback position`); + } + const lastItemPosition = lastItem ? lastItem.end : fallbackPos; + return new change_1.InsertChange(file, lastItemPosition, toInsert); +} +exports.insertAfterLastOccurrence = insertAfterLastOccurrence; +function getContentOfKeyLiteral(_source, node) { + if (node.kind == ts.SyntaxKind.Identifier) { + return node.text; + } + else if (node.kind == ts.SyntaxKind.StringLiteral) { + return node.text; + } + else { + return null; + } +} +exports.getContentOfKeyLiteral = getContentOfKeyLiteral; +function _angularImportsFromNode(node, _sourceFile) { + const ms = node.moduleSpecifier; + let modulePath; + switch (ms.kind) { + case ts.SyntaxKind.StringLiteral: + modulePath = ms.text; + break; + default: + return {}; + } + if (!modulePath.startsWith('@angular/')) { + return {}; + } + if (node.importClause) { + if (node.importClause.name) { + // This is of the form `import Name from 'path'`. Ignore. + return {}; + } + else if (node.importClause.namedBindings) { + const nb = node.importClause.namedBindings; + if (nb.kind == ts.SyntaxKind.NamespaceImport) { + // This is of the form `import * as name from 'path'`. Return `name.`. + return { + [nb.name.text + '.']: modulePath, + }; + } + else { + // This is of the form `import {a,b,c} from 'path'` + const namedImports = nb; + return namedImports.elements + .map((is) => is.propertyName ? is.propertyName.text : is.name.text) + .reduce((acc, curr) => { + acc[curr] = modulePath; + return acc; + }, {}); + } + } + return {}; + } + else { + // This is of the form `import 'path';`. Nothing to do. + return {}; + } +} +function getDecoratorMetadata(source, identifier, module) { + const angularImports = findNodes(source, ts.SyntaxKind.ImportDeclaration) + .map((node) => _angularImportsFromNode(node, source)) + .reduce((acc, current) => { + for (const key of Object.keys(current)) { + acc[key] = current[key]; + } + return acc; + }, {}); + return getSourceNodes(source) + .filter(node => { + return node.kind == ts.SyntaxKind.Decorator + && node.expression.kind == ts.SyntaxKind.CallExpression; + }) + .map(node => node.expression) + .filter(expr => { + if (expr.expression.kind == ts.SyntaxKind.Identifier) { + const id = expr.expression; + return id.getFullText(source) == identifier + && angularImports[id.getFullText(source)] === module; + } + else if (expr.expression.kind == ts.SyntaxKind.PropertyAccessExpression) { + // This covers foo.NgModule when importing * as foo. + const paExpr = expr.expression; + // If the left expression is not an identifier, just give up at that point. + if (paExpr.expression.kind !== ts.SyntaxKind.Identifier) { + return false; + } + const id = paExpr.name.text; + const moduleId = paExpr.expression.getText(source); + return id === identifier && (angularImports[moduleId + '.'] === module); + } + return false; + }) + .filter(expr => expr.arguments[0] + && expr.arguments[0].kind == ts.SyntaxKind.ObjectLiteralExpression) + .map(expr => expr.arguments[0]); +} +exports.getDecoratorMetadata = getDecoratorMetadata; +function addSymbolToNgModuleMetadata(source, ngModulePath, metadataField, symbolName, importPath = null) { + const nodes = getDecoratorMetadata(source, 'NgModule', '@angular/core'); + let node = nodes[0]; // tslint:disable-line:no-any + // Find the decorator declaration. + if (!node) { + return []; + } + // Get all the children property assignment of object literals. + const matchingProperties = node.properties + .filter(prop => prop.kind == ts.SyntaxKind.PropertyAssignment) + .filter((prop) => { + const name = prop.name; + switch (name.kind) { + case ts.SyntaxKind.Identifier: + return name.getText(source) == metadataField; + case ts.SyntaxKind.StringLiteral: + return name.text == metadataField; + } + return false; + }); + // Get the last node of the array literal. + if (!matchingProperties) { + return []; + } + if (matchingProperties.length == 0) { + // We haven't found the field in the metadata declaration. Insert a new field. + const expr = node; + let position; + let toInsert; + if (expr.properties.length == 0) { + position = expr.getEnd() - 1; + toInsert = ` ${metadataField}: [${symbolName}]\n`; + } + else { + node = expr.properties[expr.properties.length - 1]; + position = node.getEnd(); + // Get the indentation of the last element, if any. + const text = node.getFullText(source); + const matches = text.match(/^\r?\n\s*/); + if (matches.length > 0) { + toInsert = `,${matches[0]}${metadataField}: [${symbolName}]`; + } + else { + toInsert = `, ${metadataField}: [${symbolName}]`; + } + } + if (importPath !== null) { + return [ + new change_1.InsertChange(ngModulePath, position, toInsert), + route_utils_1.insertImport(source, ngModulePath, symbolName.replace(/\..*$/, ''), importPath), + ]; + } + else { + return [new change_1.InsertChange(ngModulePath, position, toInsert)]; + } + } + const assignment = matchingProperties[0]; + // If it's not an array, nothing we can do really. + if (assignment.initializer.kind !== ts.SyntaxKind.ArrayLiteralExpression) { + return []; + } + const arrLiteral = assignment.initializer; + if (arrLiteral.elements.length == 0) { + // Forward the property. + node = arrLiteral; + } + else { + node = arrLiteral.elements; + } + if (!node) { + console.log('No app module found. Please add your new class to your component.'); + return []; + } + if (Array.isArray(node)) { + const nodeArray = node; + const symbolsArray = nodeArray.map(node => node.getText()); + if (symbolsArray.includes(symbolName)) { + return []; + } + node = node[node.length - 1]; + } + let toInsert; + let position = node.getEnd(); + if (node.kind == ts.SyntaxKind.ObjectLiteralExpression) { + // We haven't found the field in the metadata declaration. Insert a new + // field. + const expr = node; + if (expr.properties.length == 0) { + position = expr.getEnd() - 1; + toInsert = ` ${metadataField}: [${symbolName}]\n`; + } + else { + node = expr.properties[expr.properties.length - 1]; + position = node.getEnd(); + // Get the indentation of the last element, if any. + const text = node.getFullText(source); + if (text.match('^\r?\r?\n')) { + toInsert = `,${text.match(/^\r?\n\s+/)[0]}${metadataField}: [${symbolName}]`; + } + else { + toInsert = `, ${metadataField}: [${symbolName}]`; + } + } + } + else if (node.kind == ts.SyntaxKind.ArrayLiteralExpression) { + // We found the field but it's empty. Insert it just before the `]`. + position--; + toInsert = `${symbolName}`; + } + else { + // Get the indentation of the last element, if any. + const text = node.getFullText(source); + if (text.match(/^\r?\n/)) { + toInsert = `,${text.match(/^\r?\n(\r?)\s+/)[0]}${symbolName}`; + } + else { + toInsert = `, ${symbolName}`; + } + } + if (importPath !== null) { + return [ + new change_1.InsertChange(ngModulePath, position, toInsert), + route_utils_1.insertImport(source, ngModulePath, symbolName.replace(/\..*$/, ''), importPath), + ]; + } + return [new change_1.InsertChange(ngModulePath, position, toInsert)]; +} +exports.addSymbolToNgModuleMetadata = addSymbolToNgModuleMetadata; +/** + * Custom function to insert a declaration (component, pipe, directive) + * into NgModule declarations. It also imports the component. + */ +function addDeclarationToModule(source, modulePath, classifiedName, importPath) { + return addSymbolToNgModuleMetadata(source, modulePath, 'declarations', classifiedName, importPath); +} +exports.addDeclarationToModule = addDeclarationToModule; +/** + * Custom function to insert an NgModule into NgModule imports. It also imports the module. + */ +function addImportToModule(source, modulePath, classifiedName, importPath) { + return addSymbolToNgModuleMetadata(source, modulePath, 'imports', classifiedName, importPath); +} +exports.addImportToModule = addImportToModule; +/** + * Custom function to insert a provider into NgModule. It also imports it. + */ +function addProviderToModule(source, modulePath, classifiedName, importPath) { + return addSymbolToNgModuleMetadata(source, modulePath, 'providers', classifiedName, importPath); +} +exports.addProviderToModule = addProviderToModule; +/** + * Custom function to insert an export into NgModule. It also imports it. + */ +function addExportToModule(source, modulePath, classifiedName, importPath) { + return addSymbolToNgModuleMetadata(source, modulePath, 'exports', classifiedName, importPath); +} +exports.addExportToModule = addExportToModule; +/** + * Custom function to insert an export into NgModule. It also imports it. + */ +function addBootstrapToModule(source, modulePath, classifiedName, importPath) { + return addSymbolToNgModuleMetadata(source, modulePath, 'bootstrap', classifiedName, importPath); +} +exports.addBootstrapToModule = addBootstrapToModule; +/** + * Determine if an import already exists. + */ +function isImported(source, classifiedName, importPath) { + const allNodes = getSourceNodes(source); + const matchingNodes = allNodes + .filter(node => node.kind === ts.SyntaxKind.ImportDeclaration) + .filter((imp) => imp.moduleSpecifier.kind === ts.SyntaxKind.StringLiteral) + .filter((imp) => { + return imp.moduleSpecifier.text === importPath; + }) + .filter((imp) => { + if (!imp.importClause) { + return false; + } + const nodes = findNodes(imp.importClause, ts.SyntaxKind.ImportSpecifier) + .filter(n => n.getText() === classifiedName); + return nodes.length > 0; + }); + return matchingNodes.length > 0; +} +exports.isImported = isImported; +//# sourceMappingURL=ast-utils.js.map \ No newline at end of file diff --git a/src/lib/schematics/utils/devkit-utils/ast-utils.js.map b/src/lib/schematics/utils/devkit-utils/ast-utils.js.map new file mode 100644 index 00000000000..d49471a915d --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/ast-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["ast-utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/schematics/utils/devkit-utils/ast-utils.ts b/src/lib/schematics/utils/devkit-utils/ast-utils.ts similarity index 100% rename from schematics/utils/devkit-utils/ast-utils.ts rename to src/lib/schematics/utils/devkit-utils/ast-utils.ts diff --git a/src/lib/schematics/utils/devkit-utils/change.js b/src/lib/schematics/utils/devkit-utils/change.js new file mode 100644 index 00000000000..8c8046c4d48 --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/change.js @@ -0,0 +1,94 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * An operation that does nothing. + */ +class NoopChange { + constructor() { + this.description = 'No operation.'; + this.order = Infinity; + this.path = null; + } + apply() { return Promise.resolve(); } +} +exports.NoopChange = NoopChange; +/** + * Will add text to the source code. + */ +class InsertChange { + constructor(path, pos, toAdd) { + this.path = path; + this.pos = pos; + this.toAdd = toAdd; + if (pos < 0) { + throw new Error('Negative positions are invalid'); + } + this.description = `Inserted ${toAdd} into position ${pos} of ${path}`; + this.order = pos; + } + /** + * This method does not insert spaces if there is none in the original string. + */ + apply(host) { + return host.read(this.path).then(content => { + const prefix = content.substring(0, this.pos); + const suffix = content.substring(this.pos); + return host.write(this.path, `${prefix}${this.toAdd}${suffix}`); + }); + } +} +exports.InsertChange = InsertChange; +/** + * Will remove text from the source code. + */ +class RemoveChange { + constructor(path, pos, toRemove) { + this.path = path; + this.pos = pos; + this.toRemove = toRemove; + if (pos < 0) { + throw new Error('Negative positions are invalid'); + } + this.description = `Removed ${toRemove} into position ${pos} of ${path}`; + this.order = pos; + } + apply(host) { + return host.read(this.path).then(content => { + const prefix = content.substring(0, this.pos); + const suffix = content.substring(this.pos + this.toRemove.length); + // TODO: throw error if toRemove doesn't match removed string. + return host.write(this.path, `${prefix}${suffix}`); + }); + } +} +exports.RemoveChange = RemoveChange; +/** + * Will replace text from the source code. + */ +class ReplaceChange { + constructor(path, pos, oldText, newText) { + this.path = path; + this.pos = pos; + this.oldText = oldText; + this.newText = newText; + if (pos < 0) { + throw new Error('Negative positions are invalid'); + } + this.description = `Replaced ${oldText} into position ${pos} of ${path} with ${newText}`; + this.order = pos; + } + apply(host) { + return host.read(this.path).then(content => { + const prefix = content.substring(0, this.pos); + const suffix = content.substring(this.pos + this.oldText.length); + const text = content.substring(this.pos, this.pos + this.oldText.length); + if (text !== this.oldText) { + return Promise.reject(new Error(`Invalid replace: "${text}" != "${this.oldText}".`)); + } + // TODO: throw error if oldText doesn't match removed string. + return host.write(this.path, `${prefix}${this.newText}${suffix}`); + }); + } +} +exports.ReplaceChange = ReplaceChange; +//# sourceMappingURL=change.js.map \ No newline at end of file diff --git a/src/lib/schematics/utils/devkit-utils/change.js.map b/src/lib/schematics/utils/devkit-utils/change.js.map new file mode 100644 index 00000000000..63ad8aefb59 --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/change.js.map @@ -0,0 +1 @@ +{"version":3,"file":"change.js","sourceRoot":"","sources":["change.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/schematics/utils/devkit-utils/change.ts b/src/lib/schematics/utils/devkit-utils/change.ts similarity index 100% rename from schematics/utils/devkit-utils/change.ts rename to src/lib/schematics/utils/devkit-utils/change.ts diff --git a/src/lib/schematics/utils/devkit-utils/component.js b/src/lib/schematics/utils/devkit-utils/component.js new file mode 100644 index 00000000000..f8c7b5f0364 --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/component.js @@ -0,0 +1,89 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const core_1 = require("@angular-devkit/core"); +const schematics_1 = require("@angular-devkit/schematics"); +require("rxjs/add/operator/merge"); +const ts = require("typescript"); +const stringUtils = require("@schematics/angular/strings"); +const ast_utils_1 = require("./ast-utils"); +const change_1 = require("./change"); +const find_module_1 = require("./find-module"); +function addDeclarationToNgModule(options) { + return (host) => { + if (options.skipImport || !options.module) { + return host; + } + const modulePath = options.module; + const text = host.read(modulePath); + if (text === null) { + throw new schematics_1.SchematicsException(`File ${modulePath} does not exist.`); + } + const sourceText = text.toString('utf-8'); + const source = ts.createSourceFile(modulePath, sourceText, ts.ScriptTarget.Latest, true); + const componentPath = `/${options.sourceDir}/${options.path}/` + + (options.flat ? '' : stringUtils.dasherize(options.name) + '/') + + stringUtils.dasherize(options.name) + + '.component'; + const relativePath = find_module_1.buildRelativePath(modulePath, componentPath); + const classifiedName = stringUtils.classify(`${options.name}Component`); + const declarationChanges = ast_utils_1.addDeclarationToModule(source, modulePath, classifiedName, relativePath); + const declarationRecorder = host.beginUpdate(modulePath); + for (const change of declarationChanges) { + if (change instanceof change_1.InsertChange) { + declarationRecorder.insertLeft(change.pos, change.toAdd); + } + } + host.commitUpdate(declarationRecorder); + if (options.export) { + // Need to refresh the AST because we overwrote the file in the host. + const text = host.read(modulePath); + if (text === null) { + throw new schematics_1.SchematicsException(`File ${modulePath} does not exist.`); + } + const sourceText = text.toString('utf-8'); + const source = ts.createSourceFile(modulePath, sourceText, ts.ScriptTarget.Latest, true); + const exportRecorder = host.beginUpdate(modulePath); + const exportChanges = ast_utils_1.addExportToModule(source, modulePath, stringUtils.classify(`${options.name}Component`), relativePath); + for (const change of exportChanges) { + if (change instanceof change_1.InsertChange) { + exportRecorder.insertLeft(change.pos, change.toAdd); + } + } + host.commitUpdate(exportRecorder); + } + return host; + }; +} +function buildSelector(options) { + let selector = stringUtils.dasherize(options.name); + if (options.prefix) { + selector = `${options.prefix}-${selector}`; + } + return selector; +} +function buildComponent(options) { + const sourceDir = options.sourceDir; + if (!sourceDir) { + throw new schematics_1.SchematicsException(`sourceDir option is required.`); + } + return (host, context) => { + options.selector = options.selector || buildSelector(options); + options.path = options.path ? core_1.normalize(options.path) : options.path; + options.module = find_module_1.findModuleFromOptions(host, options); + const templateSource = schematics_1.apply(schematics_1.url('./files'), [ + options.spec ? schematics_1.noop() : schematics_1.filter(path => !path.endsWith('.spec.ts')), + options.inlineStyle ? schematics_1.filter(path => !path.endsWith('.__styleext__')) : schematics_1.noop(), + options.inlineTemplate ? schematics_1.filter(path => !path.endsWith('.html')) : schematics_1.noop(), + schematics_1.template(Object.assign({}, stringUtils, { 'if-flat': (s) => options.flat ? '' : s }, options)), + schematics_1.move(sourceDir), + ]); + return schematics_1.chain([ + schematics_1.branchAndMerge(schematics_1.chain([ + addDeclarationToNgModule(options), + schematics_1.mergeWith(templateSource), + ])), + ])(host, context); + }; +} +exports.buildComponent = buildComponent; +//# sourceMappingURL=component.js.map \ No newline at end of file diff --git a/src/lib/schematics/utils/devkit-utils/component.js.map b/src/lib/schematics/utils/devkit-utils/component.js.map new file mode 100644 index 00000000000..501120b228c --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/component.js.map @@ -0,0 +1 @@ +{"version":3,"file":"component.js","sourceRoot":"","sources":["component.ts"],"names":[],"mappings":";;AAAA,+CAAiD;AACjD,2DAcoC;AACpC,mCAAiC;AACjC,iCAAiC;AACjC,2DAA2D;AAC3D,2CAAwE;AACxE,qCAAwC;AACxC,+CAAyE;AAGzE,kCAAkC,OAAY;IAC5C,MAAM,CAAC,CAAC,IAAU,EAAE,EAAE;QACpB,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;YAClB,MAAM,IAAI,gCAAmB,CAAC,QAAQ,UAAU,kBAAkB,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEzF,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG;cACtC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;cAC/D,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;cACnC,YAAY,CAAC;QACrC,MAAM,YAAY,GAAG,+BAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAClE,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC;QACxE,MAAM,kBAAkB,GAAG,kCAAsB,CAAC,MAAM,EACN,UAAU,EACV,cAAc,EACd,YAAY,CAAC,CAAC;QAEhE,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACzD,GAAG,CAAC,CAAC,MAAM,MAAM,IAAI,kBAAkB,CAAC,CAAC,CAAC;YACxC,EAAE,CAAC,CAAC,MAAM,YAAY,qBAAY,CAAC,CAAC,CAAC;gBACnC,mBAAmB,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAEvC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACnB,qEAAqE;YACrE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;gBAClB,MAAM,IAAI,gCAAmB,CAAC,QAAQ,UAAU,kBAAkB,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAEzF,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACpD,MAAM,aAAa,GAAG,6BAAiB,CAAC,MAAM,EAAE,UAAU,EAClB,WAAW,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,WAAW,CAAC,EAChD,YAAY,CAAC,CAAC;YAEtD,GAAG,CAAC,CAAC,MAAM,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC;gBACnC,EAAE,CAAC,CAAC,MAAM,YAAY,qBAAY,CAAC,CAAC,CAAC;oBACnC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;QAGD,MAAM,CAAC,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAGD,uBAAuB,OAAY;IACjC,IAAI,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACnB,QAAQ,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC;AAClB,CAAC;AAGD,wBAA+B,OAAY;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACpC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACf,MAAM,IAAI,gCAAmB,CAAC,+BAA+B,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,CAAC,IAAU,EAAE,OAAyB,EAAE,EAAE;QAC/C,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACrE,OAAO,CAAC,MAAM,GAAG,mCAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEtD,MAAM,cAAc,GAAG,kBAAK,CAAC,gBAAG,CAAC,SAAS,CAAC,EAAE;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAI,EAAE,CAAC,CAAC,CAAC,mBAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAClE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,mBAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAI,EAAE;YAC9E,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,mBAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAI,EAAE;YACzE,qBAAQ,mBACH,WAAW,IACd,SAAS,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAC5C,OAAO,EACV;YACF,iBAAI,CAAC,SAAS,CAAC;SAChB,CAAC,CAAC;QAEH,MAAM,CAAC,kBAAK,CAAC;YACX,2BAAc,CAAC,kBAAK,CAAC;gBACnB,wBAAwB,CAAC,OAAO,CAAC;gBACjC,sBAAS,CAAC,cAAc,CAAC;aAC1B,CAAC,CAAC;SACJ,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AA9BD,wCA8BC"} \ No newline at end of file diff --git a/schematics/utils/devkit-utils/component.ts b/src/lib/schematics/utils/devkit-utils/component.ts similarity index 99% rename from schematics/utils/devkit-utils/component.ts rename to src/lib/schematics/utils/devkit-utils/component.ts index 88c8fecd760..2421493846f 100644 --- a/schematics/utils/devkit-utils/component.ts +++ b/src/lib/schematics/utils/devkit-utils/component.ts @@ -14,7 +14,6 @@ import { Tree, url, } from '@angular-devkit/schematics'; -import 'rxjs/add/operator/merge'; import * as ts from 'typescript'; import {addDeclarationToModule, addExportToModule} from './ast-utils'; import {InsertChange} from './change'; diff --git a/src/lib/schematics/utils/devkit-utils/config.js b/src/lib/schematics/utils/devkit-utils/config.js new file mode 100644 index 00000000000..aa2bc3bc180 --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/config.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +const schematics_1 = require("@angular-devkit/schematics"); +exports.configPath = '/.angular-cli.json'; +function getConfig(host) { + const configBuffer = host.read(exports.configPath); + if (configBuffer === null) { + throw new schematics_1.SchematicsException('Could not find .angular-cli.json'); + } + const config = JSON.parse(configBuffer.toString()); + return config; +} +exports.getConfig = getConfig; +function getAppFromConfig(config, appIndexOrName) { + if (!config.apps) { + return null; + } + if (parseInt(appIndexOrName) >= 0) { + return config.apps[parseInt(appIndexOrName)]; + } + return config.apps.filter((app) => app.name === appIndexOrName)[0]; +} +exports.getAppFromConfig = getAppFromConfig; +//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/src/lib/schematics/utils/devkit-utils/config.js.map b/src/lib/schematics/utils/devkit-utils/config.js.map new file mode 100644 index 00000000000..f0f2c95cfda --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"config.js","sourceRoot":"","sources":["config.ts"],"names":[],"mappings":";;AAAA;;;;;;GAMG;AACH,2DAAuE;AAkb1D,QAAA,UAAU,GAAG,oBAAoB,CAAC;AAE/C,mBAA0B,IAAU;IAClC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,CAAC;IAC3C,EAAE,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC;QAC1B,MAAM,IAAI,gCAAmB,CAAC,kCAAkC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEnD,MAAM,CAAC,MAAM,CAAC;AAChB,CAAC;AATD,8BASC;AAED,0BAAiC,MAAiB,EAAE,cAAsB;IACxE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAVD,4CAUC"} \ No newline at end of file diff --git a/schematics/utils/devkit-utils/config.ts b/src/lib/schematics/utils/devkit-utils/config.ts similarity index 100% rename from schematics/utils/devkit-utils/config.ts rename to src/lib/schematics/utils/devkit-utils/config.ts diff --git a/src/lib/schematics/utils/devkit-utils/find-module.js b/src/lib/schematics/utils/devkit-utils/find-module.js new file mode 100644 index 00000000000..c87f184d330 --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/find-module.js @@ -0,0 +1,94 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +const core_1 = require("@angular-devkit/core"); +const strings_1 = require("@schematics/angular/strings"); +/** + * Find the module referred by a set of options passed to the schematics. + */ +function findModuleFromOptions(host, options) { + if (options.hasOwnProperty('skipImport') && options.skipImport) { + return undefined; + } + if (!options.module) { + const pathToCheck = (options.sourceDir || '') + '/' + (options.path || '') + + (options.flat ? '' : '/' + strings_1.dasherize(options.name)); + return core_1.normalize(findModule(host, pathToCheck)); + } + else { + const modulePath = core_1.normalize('/' + options.sourceDir + '/' + (options.appRoot || options.path) + '/' + options.module); + const moduleBaseName = core_1.normalize(modulePath).split('/').pop(); + if (host.exists(modulePath)) { + return core_1.normalize(modulePath); + } + else if (host.exists(modulePath + '.ts')) { + return core_1.normalize(modulePath + '.ts'); + } + else if (host.exists(modulePath + '.module.ts')) { + return core_1.normalize(modulePath + '.module.ts'); + } + else if (host.exists(modulePath + '/' + moduleBaseName + '.module.ts')) { + return core_1.normalize(modulePath + '/' + moduleBaseName + '.module.ts'); + } + else { + throw new Error('Specified module does not exist'); + } + } +} +exports.findModuleFromOptions = findModuleFromOptions; +/** + * Function to find the "closest" module to a generated file's path. + */ +function findModule(host, generateDir) { + let dir = host.getDir('/' + generateDir); + const moduleRe = /\.module\.ts$/; + const routingModuleRe = /-routing\.module\.ts/; + while (dir) { + const matches = dir.subfiles.filter(p => moduleRe.test(p) && !routingModuleRe.test(p)); + if (matches.length == 1) { + return core_1.join(dir.path, matches[0]); + } + else if (matches.length > 1) { + throw new Error('More than one module matches. Use skip-import option to skip importing ' + + 'the component into the closest module.'); + } + dir = dir.parent; + } + throw new Error('Could not find an NgModule for the new component. Use the skip-import ' + + 'option to skip importing components in NgModule.'); +} +exports.findModule = findModule; +/** + * Build a relative path from one file path to another file path. + */ +function buildRelativePath(from, to) { + from = core_1.normalize(from); + to = core_1.normalize(to); + // Convert to arrays. + const fromParts = from.split('/'); + const toParts = to.split('/'); + // Remove file names (preserving destination) + fromParts.pop(); + const toFileName = toParts.pop(); + const relativePath = core_1.relative(core_1.normalize(fromParts.join('/')), core_1.normalize(toParts.join('/'))); + let pathPrefix = ''; + // Set the path prefix for same dir or child dir, parent dir starts with `..` + if (!relativePath) { + pathPrefix = '.'; + } + else if (!relativePath.startsWith('.')) { + pathPrefix = `./`; + } + if (pathPrefix && !pathPrefix.endsWith('/')) { + pathPrefix += '/'; + } + return pathPrefix + (relativePath ? relativePath + '/' : '') + toFileName; +} +exports.buildRelativePath = buildRelativePath; +//# sourceMappingURL=find-module.js.map \ No newline at end of file diff --git a/src/lib/schematics/utils/devkit-utils/find-module.js.map b/src/lib/schematics/utils/devkit-utils/find-module.js.map new file mode 100644 index 00000000000..6b898273a29 --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/find-module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"find-module.js","sourceRoot":"","sources":["find-module.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/schematics/utils/devkit-utils/find-module.ts b/src/lib/schematics/utils/devkit-utils/find-module.ts similarity index 100% rename from schematics/utils/devkit-utils/find-module.ts rename to src/lib/schematics/utils/devkit-utils/find-module.ts diff --git a/src/lib/schematics/utils/devkit-utils/ng-ast-utils.js b/src/lib/schematics/utils/devkit-utils/ng-ast-utils.js new file mode 100644 index 00000000000..18d9e529829 --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/ng-ast-utils.js @@ -0,0 +1,73 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +const core_1 = require("@angular-devkit/core"); +const schematics_1 = require("@angular-devkit/schematics"); +const ts = require("typescript"); +const ast_utils_1 = require("./ast-utils"); +function findBootstrapModuleCall(host, mainPath) { + const mainBuffer = host.read(mainPath); + if (!mainBuffer) { + throw new schematics_1.SchematicsException(`Main file (${mainPath}) not found`); + } + const mainText = mainBuffer.toString('utf-8'); + const source = ts.createSourceFile(mainPath, mainText, ts.ScriptTarget.Latest, true); + const allNodes = ast_utils_1.getSourceNodes(source); + let bootstrapCall = null; + for (const node of allNodes) { + let bootstrapCallNode = null; + bootstrapCallNode = ast_utils_1.findNode(node, ts.SyntaxKind.Identifier, 'bootstrapModule'); + // Walk up the parent until CallExpression is found. + while (bootstrapCallNode && bootstrapCallNode.parent + && bootstrapCallNode.parent.kind !== ts.SyntaxKind.CallExpression) { + bootstrapCallNode = bootstrapCallNode.parent; + } + if (bootstrapCallNode !== null && + bootstrapCallNode.parent !== undefined && + bootstrapCallNode.parent.kind === ts.SyntaxKind.CallExpression) { + bootstrapCall = bootstrapCallNode.parent; + break; + } + } + return bootstrapCall; +} +exports.findBootstrapModuleCall = findBootstrapModuleCall; +function findBootstrapModulePath(host, mainPath) { + const bootstrapCall = findBootstrapModuleCall(host, mainPath); + if (!bootstrapCall) { + throw new schematics_1.SchematicsException('Bootstrap call not found'); + } + const bootstrapModule = bootstrapCall.arguments[0]; + const mainBuffer = host.read(mainPath); + if (!mainBuffer) { + throw new schematics_1.SchematicsException(`Client app main file (${mainPath}) not found`); + } + const mainText = mainBuffer.toString('utf-8'); + const source = ts.createSourceFile(mainPath, mainText, ts.ScriptTarget.Latest, true); + const allNodes = ast_utils_1.getSourceNodes(source); + const bootstrapModuleRelativePath = allNodes + .filter(node => node.kind === ts.SyntaxKind.ImportDeclaration) + .filter(imp => { + return ast_utils_1.findNode(imp, ts.SyntaxKind.Identifier, bootstrapModule.getText()); + }) + .map((imp) => { + const modulePathStringLiteral = imp.moduleSpecifier; + return modulePathStringLiteral.text; + })[0]; + return bootstrapModuleRelativePath; +} +exports.findBootstrapModulePath = findBootstrapModulePath; +function getAppModulePath(host, app) { + const mainPath = core_1.normalize(`/${app.root}/${app.main}`); + const moduleRelativePath = findBootstrapModulePath(host, mainPath); + const modulePath = core_1.normalize(`/${app.root}/${moduleRelativePath}.ts`); + return modulePath; +} +exports.getAppModulePath = getAppModulePath; +//# sourceMappingURL=ng-ast-utils.js.map \ No newline at end of file diff --git a/src/lib/schematics/utils/devkit-utils/ng-ast-utils.js.map b/src/lib/schematics/utils/devkit-utils/ng-ast-utils.js.map new file mode 100644 index 00000000000..1fb2b296dcb --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/ng-ast-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ng-ast-utils.js","sourceRoot":"","sources":["ng-ast-utils.ts"],"names":[],"mappings":";;AAAA;;;;;;GAMG;AACH,+CAAiD;AACjD,2DAAuE;AACvE,iCAAiC;AACjC,2CAAuD;AAGvD,iCAAwC,IAAU,EAAE,QAAgB;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAChB,MAAM,IAAI,gCAAmB,CAAC,cAAc,QAAQ,aAAa,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAErF,MAAM,QAAQ,GAAG,0BAAc,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,aAAa,GAA6B,IAAI,CAAC;IAEnD,GAAG,CAAC,CAAC,MAAM,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC;QAE5B,IAAI,iBAAiB,GAAmB,IAAI,CAAC;QAC7C,iBAAiB,GAAG,oBAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAEhF,oDAAoD;QACpD,OAAO,iBAAiB,IAAI,iBAAiB,CAAC,MAAM;eAC/C,iBAAiB,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;YAEpE,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC;QAC/C,CAAC;QAED,EAAE,CAAC,CAAC,iBAAiB,KAAK,IAAI;YAC5B,iBAAiB,CAAC,MAAM,KAAK,SAAS;YACtC,iBAAiB,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;YACjE,aAAa,GAAG,iBAAiB,CAAC,MAA2B,CAAC;YAC9D,KAAK,CAAC;QACR,CAAC;IACH,CAAC;IAED,MAAM,CAAC,aAAa,CAAC;AACvB,CAAC;AAjCD,0DAiCC;AAED,iCAAwC,IAAU,EAAE,QAAgB;IAClE,MAAM,aAAa,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9D,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QACnB,MAAM,IAAI,gCAAmB,CAAC,0BAA0B,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,eAAe,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAChB,MAAM,IAAI,gCAAmB,CAAC,yBAAyB,QAAQ,aAAa,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,0BAAc,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,2BAA2B,GAAG,QAAQ;SACzC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;SAC7D,MAAM,CAAC,GAAG,CAAC,EAAE;QACZ,MAAM,CAAC,oBAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,GAAyB,EAAE,EAAE;QACjC,MAAM,uBAAuB,GAAsB,GAAG,CAAC,eAAe,CAAC;QAEvE,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC;IACtC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAER,MAAM,CAAC,2BAA2B,CAAC;AACrC,CAAC;AA3BD,0DA2BC;AAED,0BAAiC,IAAU,EAAE,GAAc;IACzD,MAAM,QAAQ,GAAG,gBAAS,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,gBAAS,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,kBAAkB,KAAK,CAAC,CAAC;IAEtE,MAAM,CAAC,UAAU,CAAC;AACpB,CAAC;AAND,4CAMC"} \ No newline at end of file diff --git a/schematics/utils/devkit-utils/ng-ast-utils.ts b/src/lib/schematics/utils/devkit-utils/ng-ast-utils.ts similarity index 100% rename from schematics/utils/devkit-utils/ng-ast-utils.ts rename to src/lib/schematics/utils/devkit-utils/ng-ast-utils.ts diff --git a/src/lib/schematics/utils/devkit-utils/route-utils.js b/src/lib/schematics/utils/devkit-utils/route-utils.js new file mode 100644 index 00000000000..131e1df1f53 --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/route-utils.js @@ -0,0 +1,73 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +const ts = require("typescript"); +const ast_utils_1 = require("./ast-utils"); +const change_1 = require("./change"); +/** +* Add Import `import { symbolName } from fileName` if the import doesn't exit +* already. Assumes fileToEdit can be resolved and accessed. +* @param fileToEdit (file we want to add import to) +* @param symbolName (item to import) +* @param fileName (path to the file) +* @param isDefault (if true, import follows style for importing default exports) +* @return Change +*/ +function insertImport(source, fileToEdit, symbolName, fileName, isDefault = false) { + const rootNode = source; + const allImports = ast_utils_1.findNodes(rootNode, ts.SyntaxKind.ImportDeclaration); + // get nodes that map to import statements from the file fileName + const relevantImports = allImports.filter(node => { + // StringLiteral of the ImportDeclaration is the import file (fileName in this case). + const importFiles = node.getChildren() + .filter(child => child.kind === ts.SyntaxKind.StringLiteral) + .map(n => n.text); + return importFiles.filter(file => file === fileName).length === 1; + }); + if (relevantImports.length > 0) { + let importsAsterisk = false; + // imports from import file + const imports = []; + relevantImports.forEach(n => { + Array.prototype.push.apply(imports, ast_utils_1.findNodes(n, ts.SyntaxKind.Identifier)); + if (ast_utils_1.findNodes(n, ts.SyntaxKind.AsteriskToken).length > 0) { + importsAsterisk = true; + } + }); + // if imports * from fileName, don't add symbolName + if (importsAsterisk) { + return new change_1.NoopChange(); + } + const importTextNodes = imports.filter(n => n.text === symbolName); + // insert import if it's not there + if (importTextNodes.length === 0) { + const fallbackPos = ast_utils_1.findNodes(relevantImports[0], ts.SyntaxKind.CloseBraceToken)[0].getStart() || + ast_utils_1.findNodes(relevantImports[0], ts.SyntaxKind.FromKeyword)[0].getStart(); + return ast_utils_1.insertAfterLastOccurrence(imports, `, ${symbolName}`, fileToEdit, fallbackPos); + } + return new change_1.NoopChange(); + } + // no such import declaration exists + const useStrict = ast_utils_1.findNodes(rootNode, ts.SyntaxKind.StringLiteral) + .filter((n) => n.text === 'use strict'); + let fallbackPos = 0; + if (useStrict.length > 0) { + fallbackPos = useStrict[0].end; + } + const open = isDefault ? '' : '{ '; + const close = isDefault ? '' : ' }'; + // if there are no imports or 'use strict' statement, insert import at beginning of file + const insertAtBeginning = allImports.length === 0 && useStrict.length === 0; + const separator = insertAtBeginning ? '' : ';\n'; + const toInsert = `${separator}import ${open}${symbolName}${close}` + + ` from '${fileName}'${insertAtBeginning ? ';\n' : ''}`; + return ast_utils_1.insertAfterLastOccurrence(allImports, toInsert, fileToEdit, fallbackPos, ts.SyntaxKind.StringLiteral); +} +exports.insertImport = insertImport; +//# sourceMappingURL=route-utils.js.map \ No newline at end of file diff --git a/src/lib/schematics/utils/devkit-utils/route-utils.js.map b/src/lib/schematics/utils/devkit-utils/route-utils.js.map new file mode 100644 index 00000000000..2e5af1d0b90 --- /dev/null +++ b/src/lib/schematics/utils/devkit-utils/route-utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"route-utils.js","sourceRoot":"","sources":["route-utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/schematics/utils/devkit-utils/route-utils.ts b/src/lib/schematics/utils/devkit-utils/route-utils.ts similarity index 100% rename from schematics/utils/devkit-utils/route-utils.ts rename to src/lib/schematics/utils/devkit-utils/route-utils.ts diff --git a/src/lib/schematics/utils/html.js b/src/lib/schematics/utils/html.js new file mode 100644 index 00000000000..5f66b1bad63 --- /dev/null +++ b/src/lib/schematics/utils/html.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const schematics_1 = require("@angular-devkit/schematics"); +const parse5 = require("parse5"); +const ast_1 = require("./ast"); +const change_1 = require("./devkit-utils/change"); +/** + * Parses the index.html file to get the HEAD tag position. + * @param host the tree we are traversing + * @param src the src path of the html file to parse + */ +function getHeadTag(host, src) { + const document = parse5.parse(src, { locationInfo: true }); + let head; + const visit = (nodes) => { + nodes.forEach(node => { + const element = node; + if (element.tagName === 'head') { + head = element; + } + else { + if (element.childNodes) { + visit(element.childNodes); + } + } + }); + }; + visit(document.childNodes); + if (!head) { + throw new schematics_1.SchematicsException('Head element not found!'); + } + return { + position: head.__location.startTag.endOffset + }; +} +exports.getHeadTag = getHeadTag; +/** + * Adds a link to the index.html head tag Example: + * `` + * @param host the tree we are updating + * @param link html element string we are inserting. + */ +function addHeadLink(host, link) { + const indexPath = ast_1.getIndexHtmlPath(host); + const buffer = host.read(indexPath); + if (!buffer) { + throw new schematics_1.SchematicsException(`Could not find file for path: ${indexPath}`); + } + const src = buffer.toString(); + if (src.indexOf(link) === -1) { + const node = getHeadTag(host, src); + const insertion = new change_1.InsertChange(indexPath, node.position, link); + const recorder = host.beginUpdate(indexPath); + recorder.insertLeft(insertion.pos, insertion.toAdd); + host.commitUpdate(recorder); + } +} +exports.addHeadLink = addHeadLink; +//# sourceMappingURL=html.js.map \ No newline at end of file diff --git a/src/lib/schematics/utils/html.js.map b/src/lib/schematics/utils/html.js.map new file mode 100644 index 00000000000..66519c741c3 --- /dev/null +++ b/src/lib/schematics/utils/html.js.map @@ -0,0 +1 @@ +{"version":3,"file":"html.js","sourceRoot":"","sources":["html.ts"],"names":[],"mappings":";;AAAA,2DAAqE;AACrE,iCAAiC;AACjC,+BAAuC;AACvC,kDAAmD;AAEnD;;;;GAIG;AACH,oBAA2B,IAAU,EAAE,GAAW;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAC/B,EAAC,YAAY,EAAE,IAAI,EAAC,CAAgC,CAAC;IAEvD,IAAI,IAAI,CAAC;IACT,MAAM,KAAK,GAAG,CAAC,KAAgC,EAAE,EAAE;QACjD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,MAAM,OAAO,GAA+B,IAAI,CAAC;YACjD,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC;gBAC/B,IAAI,GAAG,OAAO,CAAC;YACjB,CAAC;YAAC,IAAI,CAAC,CAAC;gBACN,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;oBACvB,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE3B,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACV,MAAM,IAAI,gCAAmB,CAAC,yBAAyB,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC;QACL,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS;KAC7C,CAAC;AACJ,CAAC;AA3BD,gCA2BC;AAED;;;;;GAKG;AACH,qBAA4B,IAAU,EAAE,IAAY;IAClD,MAAM,SAAS,GAAG,sBAAgB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACZ,MAAM,IAAI,gCAAmB,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC9B,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,qBAAY,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC7C,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAfD,kCAeC"} \ No newline at end of file diff --git a/schematics/utils/html.ts b/src/lib/schematics/utils/html.ts similarity index 100% rename from schematics/utils/html.ts rename to src/lib/schematics/utils/html.ts diff --git a/src/lib/schematics/utils/lib-versions.js b/src/lib/schematics/utils/lib-versions.js new file mode 100644 index 00000000000..350605eccc2 --- /dev/null +++ b/src/lib/schematics/utils/lib-versions.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.materialVersion = '^5.2.0'; +exports.cdkVersion = '^5.2.0'; +exports.angularVersion = '^5.2.0'; +//# sourceMappingURL=lib-versions.js.map \ No newline at end of file diff --git a/src/lib/schematics/utils/lib-versions.js.map b/src/lib/schematics/utils/lib-versions.js.map new file mode 100644 index 00000000000..5ca99458451 --- /dev/null +++ b/src/lib/schematics/utils/lib-versions.js.map @@ -0,0 +1 @@ +{"version":3,"file":"lib-versions.js","sourceRoot":"","sources":["lib-versions.ts"],"names":[],"mappings":";;AAAa,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,UAAU,GAAG,QAAQ,CAAC;AACtB,QAAA,cAAc,GAAG,QAAQ,CAAC"} \ No newline at end of file diff --git a/schematics/utils/lib-versions.ts b/src/lib/schematics/utils/lib-versions.ts similarity index 100% rename from schematics/utils/lib-versions.ts rename to src/lib/schematics/utils/lib-versions.ts diff --git a/src/lib/schematics/utils/package.js b/src/lib/schematics/utils/package.js new file mode 100644 index 00000000000..f7010f71dc2 --- /dev/null +++ b/src/lib/schematics/utils/package.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Adds a package to the package.json + */ +function addPackageToPackageJson(host, type, pkg, version) { + if (host.exists('package.json')) { + const sourceText = host.read('package.json').toString('utf-8'); + const json = JSON.parse(sourceText); + if (!json[type]) { + json[type] = {}; + } + if (!json[type][pkg]) { + json[type][pkg] = version; + } + host.overwrite('package.json', JSON.stringify(json, null, 2)); + } + return host; +} +exports.addPackageToPackageJson = addPackageToPackageJson; +//# sourceMappingURL=package.js.map \ No newline at end of file diff --git a/src/lib/schematics/utils/package.js.map b/src/lib/schematics/utils/package.js.map new file mode 100644 index 00000000000..dbc92204e2f --- /dev/null +++ b/src/lib/schematics/utils/package.js.map @@ -0,0 +1 @@ +{"version":3,"file":"package.js","sourceRoot":"","sources":["package.ts"],"names":[],"mappings":";;AAEA;;GAEG;AACH,iCAAwC,IAAU,EAAE,IAAY,EAAE,GAAW,EAAE,OAAe;IAC1F,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACpC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;QAED,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,IAAI,CAAC;AAChB,CAAC;AAhBD,0DAgBC"} \ No newline at end of file diff --git a/src/lib/schematics/utils/package.ts b/src/lib/schematics/utils/package.ts new file mode 100644 index 00000000000..41e53e009d1 --- /dev/null +++ b/src/lib/schematics/utils/package.ts @@ -0,0 +1,23 @@ +import {Tree} from '@angular-devkit/schematics'; + +/** + * Adds a package to the package.json + */ +export function addPackageToPackageJson( + host: Tree, type: string, pkg: string, version: string): Tree { + if (host.exists('package.json')) { + const sourceText = host.read('package.json')!.toString('utf-8'); + const json = JSON.parse(sourceText); + if (!json[type]) { + json[type] = {}; + } + + if (!json[type][pkg]) { + json[type][pkg] = version; + } + + host.overwrite('package.json', JSON.stringify(json, null, 2)); + } + + return host; +} diff --git a/src/lib/schematics/utils/testing.js b/src/lib/schematics/utils/testing.js new file mode 100644 index 00000000000..ff0ef9b3fcc --- /dev/null +++ b/src/lib/schematics/utils/testing.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const path_1 = require("path"); +const testing_1 = require("@angular-devkit/schematics/testing"); +const collectionPath = path_1.join('./node_modules/@schematics/angular/collection.json'); +/** + * Create a base app used for testing. + */ +function createTestApp() { + const baseRunner = new testing_1.SchematicTestRunner('schematics', collectionPath); + return baseRunner.runSchematic('application', { + directory: '', + name: 'app', + prefix: 'app', + sourceDir: 'src', + inlineStyle: false, + inlineTemplate: false, + viewEncapsulation: 'None', + version: '1.2.3', + routing: true, + style: 'scss', + skipTests: false, + minimal: false, + }); +} +exports.createTestApp = createTestApp; +//# sourceMappingURL=testing.js.map \ No newline at end of file diff --git a/src/lib/schematics/utils/testing.js.map b/src/lib/schematics/utils/testing.js.map new file mode 100644 index 00000000000..1a1d32ca02a --- /dev/null +++ b/src/lib/schematics/utils/testing.js.map @@ -0,0 +1 @@ +{"version":3,"file":"testing.js","sourceRoot":"","sources":["testing.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAC1B,gEAAuE;AAEvE,MAAM,cAAc,GAAG,WAAI,CAAC,oDAAoD,CAAC,CAAC;AAElF;;GAEG;AACH;IACE,MAAM,UAAU,GAAG,IAAI,6BAAmB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACzE,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,EAAE;QAC5C,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,KAAK;QAClB,cAAc,EAAE,KAAK;QACrB,iBAAiB,EAAE,MAAM;QACzB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC;AAhBD,sCAgBC"} \ No newline at end of file diff --git a/schematics/utils/testing.ts b/src/lib/schematics/utils/testing.ts similarity index 80% rename from schematics/utils/testing.ts rename to src/lib/schematics/utils/testing.ts index 10273f1126d..30303659695 100644 --- a/schematics/utils/testing.ts +++ b/src/lib/schematics/utils/testing.ts @@ -1,12 +1,12 @@ import {join} from 'path'; -import {SchematicTestRunner} from '@angular-devkit/schematics/testing'; +import {SchematicTestRunner, UnitTestTree} from '@angular-devkit/schematics/testing'; const collectionPath = join('./node_modules/@schematics/angular/collection.json'); /** * Create a base app used for testing. */ -export function createTestApp() { +export function createTestApp(): UnitTestTree { const baseRunner = new SchematicTestRunner('schematics', collectionPath); return baseRunner.runSchematic('application', { directory: '', diff --git a/src/lib/select/BUILD.bazel b/src/lib/select/BUILD.bazel index ae7e6ff9dd9..f5df710a75d 100644 --- a/src/lib/select/BUILD.bazel +++ b/src/lib/select/BUILD.bazel @@ -7,7 +7,7 @@ ng_module( name = "select", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/select", - assets = [":select_css"], + assets = [":select_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/lib/form-field", @@ -19,7 +19,7 @@ ng_module( "//src/cdk/overlay", "@rxjs", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -38,8 +38,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "select_css", - srcs = [":select_scss"], + srcs = [":select_scss.css"], outs = ["select.css"], - cmd = "cat $(locations :select_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/sidenav/BUILD.bazel b/src/lib/sidenav/BUILD.bazel index ac92ac1fbf2..5b22e77191d 100644 --- a/src/lib/sidenav/BUILD.bazel +++ b/src/lib/sidenav/BUILD.bazel @@ -7,17 +7,18 @@ ng_module( name = "sidenav", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/sidenav", - assets = [":drawer_css"], + assets = [":drawer_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/a11y", "//src/cdk/bidi", "//src/cdk/coercion", "//src/cdk/keycodes", + "//src/cdk/platform", "//src/cdk/scrolling", "@rxjs", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -36,7 +37,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "drawer_css", - srcs = [":drawer_scss"], + srcs = [":drawer_scss.css"], outs = ["drawer.css"], - cmd = "cat $(locations :drawer_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/slide-toggle/BUILD.bazel b/src/lib/slide-toggle/BUILD.bazel index 854b9b5a7ba..5a4bb397fbd 100644 --- a/src/lib/slide-toggle/BUILD.bazel +++ b/src/lib/slide-toggle/BUILD.bazel @@ -6,8 +6,8 @@ load("@io_bazel_rules_sass//sass:sass.bzl", "sass_library", "sass_binary") ng_module( name = "slide-toggle", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), - module_name = "@angular/material/slide_toggle", - assets = [":slide_toggle_css"], + module_name = "@angular/material/slide-toggle", + assets = [":slide_toggle_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/a11y", @@ -15,7 +15,7 @@ ng_module( "//src/cdk/observers", "//src/cdk/platform", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -34,8 +34,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "slide_toggle_css", - srcs = [":slide_toggle_scss"], + srcs = [":slide_toggle_scss.css"], outs = ["slide-toggle.css"], - cmd = "cat $(locations :slide_toggle_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/slider/BUILD.bazel b/src/lib/slider/BUILD.bazel index 22a7628ef16..0c3536046ca 100644 --- a/src/lib/slider/BUILD.bazel +++ b/src/lib/slider/BUILD.bazel @@ -7,7 +7,7 @@ ng_module( name = "slider", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/slider", - assets = [":slider_css"], + assets = [":slider_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/a11y", @@ -16,7 +16,7 @@ ng_module( "//src/cdk/keycodes", "@rxjs", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -35,8 +35,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "slider_css", - srcs = [":slider_scss"], + srcs = [":slider_scss.css"], outs = ["slider.css"], - cmd = "cat $(locations :slider_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/snack-bar/BUILD.bazel b/src/lib/snack-bar/BUILD.bazel index c5812df20a0..eff4885b0b8 100644 --- a/src/lib/snack-bar/BUILD.bazel +++ b/src/lib/snack-bar/BUILD.bazel @@ -6,11 +6,11 @@ load("@io_bazel_rules_sass//sass:sass.bzl", "sass_library", "sass_binary") ng_module( name = "snack-bar", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), - module_name = "@angular/material/snack_bar", + module_name = "@angular/material/snack-bar", assets = [ ":snack_bar_container_css", "simple_snack_bar_css", - ], + ] + glob(["**/*.html"]), deps = [ "//src/lib/button", "//src/lib/core", @@ -20,7 +20,7 @@ ng_module( "//src/cdk/portal", "@rxjs", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -45,16 +45,21 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "snack_bar_container_css", - srcs = [":snack_bar_container_scss"], + srcs = [":snack_bar_container_scss.css"], outs = ["snack-bar-container.css"], - cmd = "cat $(locations :snack_bar_container_scss) > $@", + cmd = "cp $< $@", ) # TODO(jelbourn): remove this when sass_binary supports specifying an output filename and dir. # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "simple_snack_bar_css", - srcs = [":simple_snack_bar_scss"], + srcs = [":simple_snack_bar_scss.css"], outs = ["simple-snack-bar.css"], - cmd = "cat $(locations :simple_snack_bar_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/sort/BUILD.bazel b/src/lib/sort/BUILD.bazel index a6bc512d9ad..8052fcd7289 100644 --- a/src/lib/sort/BUILD.bazel +++ b/src/lib/sort/BUILD.bazel @@ -7,14 +7,14 @@ ng_module( name = "sort", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/sort", - assets = [":sort_header_css"], + assets = [":sort_header_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/coercion", "//src/cdk/table", "@rxjs", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -33,8 +33,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "sort_header_css", - srcs = [":sort_header_scss"], + srcs = [":sort_header_scss.css"], outs = ["sort-header.css"], - cmd = "cat $(locations :sort_header_scss) > $@", + cmd = "cp $< $@", ) +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/sort/_sort-theme.scss b/src/lib/sort/_sort-theme.scss new file mode 100644 index 00000000000..9fbc536e2bd --- /dev/null +++ b/src/lib/sort/_sort-theme.scss @@ -0,0 +1,3 @@ + +// Empty mixin to be consistent with all other components. +@mixin mat-sort-theme($theme) { } diff --git a/src/lib/stepper/BUILD.bazel b/src/lib/stepper/BUILD.bazel index 180ddce15de..4aedaaaa94d 100644 --- a/src/lib/stepper/BUILD.bazel +++ b/src/lib/stepper/BUILD.bazel @@ -10,18 +10,19 @@ ng_module( assets = [ ":stepper_css", ":step_header_css", - ], + ] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/lib/button", "//src/lib/icon", "//src/cdk/a11y", + "//src/cdk/bidi", "//src/cdk/coercion", "//src/cdk/portal", "//src/cdk/stepper", "@rxjs", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -46,17 +47,22 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "stepper_css", - srcs = [":stepper_scss"], + srcs = [":stepper_scss.css"], outs = ["stepper.css"], - cmd = "cat $(locations :stepper_scss) > $@", + cmd = "cp $< $@", ) # TODO(jelbourn): remove this when sass_binary supports specifying an output filename and dir. # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "step_header_css", - srcs = [":step_header_scss"], + srcs = [":step_header_scss.css"], outs = ["step-header.css"], - cmd = "cat $(locations :step_header_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/table/BUILD.bazel b/src/lib/table/BUILD.bazel index 954feb70710..9ae4d69d2e8 100644 --- a/src/lib/table/BUILD.bazel +++ b/src/lib/table/BUILD.bazel @@ -14,8 +14,8 @@ ng_module( "//src/lib/sort", "//src/cdk/table", "@rxjs", - ], - tsconfig = ":tsconfig-build.json", + ] + glob(["**/*.html"]), + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -34,7 +34,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "table_css", - srcs = [":table_scss"], + srcs = [":table_scss.css"], outs = ["table.css"], - cmd = "cat $(locations :table_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/tabs/BUILD.bazel b/src/lib/tabs/BUILD.bazel index d89205cbe04..126494324b8 100644 --- a/src/lib/tabs/BUILD.bazel +++ b/src/lib/tabs/BUILD.bazel @@ -8,11 +8,11 @@ ng_module( srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/tabs", assets = [ - "tab_body_css", - "tab_header_css", - "tab_group_css", - "tab_nav_bar_css", - ], + ":tab_body_css", + ":tab_header_css", + ":tab_group_css", + ":tab_nav_bar_css", + ] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/bidi", @@ -22,7 +22,7 @@ ng_module( "//src/cdk/scrolling", "@rxjs", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) @@ -79,35 +79,40 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "tab_body_css", - srcs = [":tab_body_scss"], + srcs = [":tab_body_scss.css"], outs = ["tab-body.css"], - cmd = "cat $(locations :tab_body_scss) > $@", + cmd = "cp $< $@", ) # TODO(jelbourn): remove this when sass_binary supports specifying an output filename and dir. # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "tab_header_css", - srcs = [":tab_header_scss"], + srcs = [":tab_header_scss.css"], outs = ["tab-header.css"], - cmd = "cat $(locations :tab_header_scss) > $@", + cmd = "cp $< $@", ) # TODO(jelbourn): remove this when sass_binary supports specifying an output filename and dir. # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "tab_group_css", - srcs = [":tab_group_scss"], + srcs = [":tab_group_scss.css"], outs = ["tab-group.css"], - cmd = "cat $(locations :tab_group_scss) > $@", + cmd = "cp $< $@", ) # TODO(jelbourn): remove this when sass_binary supports specifying an output filename and dir. # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "tab_nav_bar_css", - srcs = [":tab_nav_bar_scss"], + srcs = [":tab_nav_bar_scss.css"], outs = ["tab-nav-bar/tab-nav-bar.css"], - cmd = "cat $(locations :tab_nav_bar_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/toolbar/BUILD.bazel b/src/lib/toolbar/BUILD.bazel index 90c54468a6b..f5283540c92 100644 --- a/src/lib/toolbar/BUILD.bazel +++ b/src/lib/toolbar/BUILD.bazel @@ -7,12 +7,12 @@ ng_module( name = "toolbar", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/toolbar", - assets = [":toolbar_css"], + assets = [":toolbar_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/platform", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -31,7 +31,12 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "toolbar_css", - srcs = [":toolbar_scss"], + srcs = [":toolbar_scss.css"], outs = ["toolbar.css"], - cmd = "cat $(locations :toolbar_scss) > $@", + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), ) diff --git a/src/lib/tooltip/BUILD.bazel b/src/lib/tooltip/BUILD.bazel index e052d987b64..3942df8082c 100644 --- a/src/lib/tooltip/BUILD.bazel +++ b/src/lib/tooltip/BUILD.bazel @@ -7,7 +7,7 @@ ng_module( name = "tooltip", srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), module_name = "@angular/material/tooltip", - assets = [":tooltip_css"], + assets = [":tooltip_css"] + glob(["**/*.html"]), deps = [ "//src/lib/core", "//src/cdk/a11y", @@ -21,7 +21,7 @@ ng_module( "//src/cdk/layout", "@rxjs", ], - tsconfig = ":tsconfig-build.json", + tsconfig = "//src/lib:tsconfig-build.json", ) # TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup @@ -40,8 +40,13 @@ sass_binary( # Copy the output of the sass_binary such that the filename and path match what we expect. genrule( name = "tooltip_css", - srcs = [":tooltip_scss"], + srcs = [":tooltip_scss.css"], outs = ["tooltip.css"], - cmd = "cat $(locations :tooltip_scss) > $@", + cmd = "cp $< $@", ) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/tree/BUILD.bazel b/src/lib/tree/BUILD.bazel new file mode 100644 index 00000000000..60a65d3dd42 --- /dev/null +++ b/src/lib/tree/BUILD.bazel @@ -0,0 +1,43 @@ +package(default_visibility=["//visibility:public"]) +load("@angular//:index.bzl", "ng_module") +load("@io_bazel_rules_sass//sass:sass.bzl", "sass_library", "sass_binary") + + +ng_module( + name = "tree", + srcs = glob(["**/*.ts"], exclude=["**/*.spec.ts"]), + module_name = "@angular/material/tree", + assets = [":tree_css"] + glob(["**/*.html"]), + deps = [ + "//src/cdk/tree", + "//src/lib/core", + "@rxjs", + ], + tsconfig = "//src/lib:tsconfig-build.json", +) + +# TODO(jelbourn): replace this w/ sass_library when it supports acting like a filegroup +filegroup( + name = "tree_scss_partials", + srcs = glob(["**/_*.scss"]), +) + +sass_binary( + name = "tree_scss", + src = "tree.scss", + deps = ["//src/lib/core:core_scss_lib"], +) + +# TODO(jelbourn): remove this when sass_binary supports specifying an output filename and dir. +# Copy the output of the sass_binary such that the filename and path match what we expect. +genrule( + name = "tree_css", + srcs = [":tree_scss.css"], + outs = ["tree.css"], + cmd = "cp $< $@", +) + +sass_library( + name = "theme", + srcs = glob(["**/*-theme.scss"]), +) diff --git a/src/lib/tsconfig-tests.json b/src/lib/tsconfig-tests.json index 77e8290b4a3..2708f12857c 100644 --- a/src/lib/tsconfig-tests.json +++ b/src/lib/tsconfig-tests.json @@ -22,5 +22,8 @@ "include": [ "**/*.spec.ts", "index.ts" - ] + ], + "exclude": [ + "**/schematics/**/*.ts", + ], } diff --git a/src/material-examples/material-module.ts b/src/material-examples/material-module.ts index 099754511db..8979a916cfc 100644 --- a/src/material-examples/material-module.ts +++ b/src/material-examples/material-module.ts @@ -13,6 +13,42 @@ import { } from '@angular/material'; @NgModule({ + imports: [ + CdkTableModule, + CdkTreeModule, + MatAutocompleteModule, + MatButtonModule, + MatButtonToggleModule, + MatCardModule, + MatCheckboxModule, + MatChipsModule, + MatDatepickerModule, + MatDialogModule, + MatDividerModule, + MatExpansionModule, + MatFormFieldModule, + MatGridListModule, + MatIconModule, + MatInputModule, + MatListModule, + MatMenuModule, + MatPaginatorModule, + MatProgressBarModule, + MatProgressSpinnerModule, + MatRadioModule, + MatSelectModule, + MatSidenavModule, + MatSlideToggleModule, + MatSliderModule, + MatSnackBarModule, + MatSortModule, + MatStepperModule, + MatTableModule, + MatTabsModule, + MatToolbarModule, + MatTooltipModule, + MatTreeModule + ], exports: [ CdkTableModule, CdkTreeModule, diff --git a/tools/gulp/tasks/material-release.ts b/tools/gulp/tasks/material-release.ts index 925b699ebdd..6e874d72c9f 100644 --- a/tools/gulp/tasks/material-release.ts +++ b/tools/gulp/tasks/material-release.ts @@ -11,8 +11,8 @@ import {tsBuildTask} from '../util/task_helpers'; const gulpRename = require('gulp-rename'); const distDir = buildConfig.outputDir; -const schematicsDir = join(buildConfig.projectDir, 'schematics'); const {sourceDir, outputDir} = materialPackage; +const schematicsDir = join(sourceDir, 'schematics'); /** Path to the directory where all releases are created. */ const releasesDir = join(distDir, 'releases'); diff --git a/tools/sass_bundle.bzl b/tools/sass_bundle.bzl index 77bea0325e0..a6f24509ca1 100644 --- a/tools/sass_bundle.bzl +++ b/tools/sass_bundle.bzl @@ -18,7 +18,7 @@ def _sass_bundle(ctx): # Define an "action" that will run the nodejs_binary executable. This is # the main thing that sass_bundle rule does. ctx.actions.run( - inputs = ctx.files.srcs, + inputs = ctx.files.srcs + ctx.files.entry_point, executable = ctx.executable._sass_bundle, outputs = [ctx.outputs.output_name], arguments = [args], diff --git a/tslint.json b/tslint.json index 6d84aa302cc..54688dd0387 100644 --- a/tslint.json +++ b/tslint.json @@ -119,5 +119,8 @@ ], "deletion-target": true, "no-unescaped-html-tag": true + }, + "linterOptions": { + "exclude": ["src/lib/schematics/**/*"] } }