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":"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"}
\ 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/**/*"]
}
}