- Generates a stats.json file which can be analyzed using tools such as: webpack-bundle-analyzer or https://webpack.github.io/analyse.
+ Generates a stats.json file which can be analyzed using tools such as: webpack-bundle-analyzer or https://webpack.github.io/analyse/.
diff --git a/docs/documentation/1-x/e2e.md b/docs/documentation/1-x/e2e.md
index ebfaf64e8d96..6e638298b67d 100644
--- a/docs/documentation/1-x/e2e.md
+++ b/docs/documentation/1-x/e2e.md
@@ -11,7 +11,7 @@
ng e2e
```
-End-to-end tests are run via [Protractor](https://angular.github.io/protractor/).
+End-to-end tests are run via [Protractor](http://www.protractortest.org/).
## Options
diff --git a/docs/documentation/1-x/home.md b/docs/documentation/1-x/home.md
index ca01215d4f02..a03e9c185ecb 100644
--- a/docs/documentation/1-x/home.md
+++ b/docs/documentation/1-x/home.md
@@ -42,7 +42,7 @@ ng e2e
```
Before running the tests make sure you are serving the app via `ng serve`.
-End-to-end tests are run via [Protractor](https://angular.github.io/protractor/).
+End-to-end tests are run via [Protractor](http://www.protractortest.org/).
### Additional Commands
* [ng new](1-x/new)
diff --git a/docs/documentation/1-x/lint.md b/docs/documentation/1-x/lint.md
index 95d94bb5b73d..46a005c8741e 100644
--- a/docs/documentation/1-x/lint.md
+++ b/docs/documentation/1-x/lint.md
@@ -42,6 +42,6 @@
--format (aliases: -t) default value: prose
diff --git a/docs/documentation/1-x/stories/autoprefixer.md b/docs/documentation/1-x/stories/autoprefixer.md
index 78b55b553b64..c6902fccaf3b 100644
--- a/docs/documentation/1-x/stories/autoprefixer.md
+++ b/docs/documentation/1-x/stories/autoprefixer.md
@@ -4,7 +4,7 @@ Currently, the CLI uses [Autoprefixer](https://github.com/postcss/autoprefixer)
with different browser and browser versions. You may find it necessary to target specific browsers
or exclude certain browser versions from your build.
-Internally, Autoprefixer relies on a library called [Browserslist](https://github.com/ai/browserslist)
+Internally, Autoprefixer relies on a library called [Browserslist](https://github.com/browserslist/browserslist)
to figure out which browsers to support with prefixing.
There are a few ways to tell Autoprefixer what browsers to target:
@@ -26,7 +26,7 @@ last 2 versions
```
Autoprefixer will look for the configuration file/property to use when it prefixes your css.
-Check out the [browserslist repo](https://github.com/ai/browserslist) for more examples of how to target
+Check out the [browserslist repo](https://github.com/browserslist/browserslist) for more examples of how to target
specific browsers and versions.
_Side note:_
diff --git a/docs/documentation/1-x/stories/configure-hmr.md b/docs/documentation/1-x/stories/configure-hmr.md
index daa0c3ca56e6..1823e8f1ba79 100644
--- a/docs/documentation/1-x/stories/configure-hmr.md
+++ b/docs/documentation/1-x/stories/configure-hmr.md
@@ -3,12 +3,12 @@
Hot Module Replacement (HMR) is a WebPack feature to update code in a running app without rebuilding it.
This results in faster updates and less full page-reloads.
-You can read more about HMR by visiting [this page](https://webpack.js.org/guides/hot-module-replacement).
+You can read more about HMR by visiting [this page](https://webpack.js.org/guides/hot-module-replacement/).
In order to get HMR working with Angular CLI we first need to add a new environment and enable it.
Next we need to update the bootstrap process of our app to enable the
-[@angularclass/hmr](https://github.com/AngularClass/angular-hmr) module.
+[@angularclass/hmr](https://github.com/gdi2290/angular-hmr) module.
### Add environment for HMR
diff --git a/docs/documentation/1-x/stories/github-pages.md b/docs/documentation/1-x/stories/github-pages.md
index cce3c10a5cb5..2bb0d0f28f7f 100644
--- a/docs/documentation/1-x/stories/github-pages.md
+++ b/docs/documentation/1-x/stories/github-pages.md
@@ -17,5 +17,5 @@ Commit your changes and push. On the GitHub project page, configure it to
And that's all you need to do! Now you can see your page at
`https://USER_NAME.github.io/PROJECT_NAME/`.
-You can also use [angular-cli-ghpages](https://github.com/angular-buch/angular-cli-ghpages), a full
+You can also use [angular-cli-ghpages](https://github.com/angular-schule/angular-cli-ghpages), a full
featured package that does this all this for you and has extra functionality.
diff --git a/docs/documentation/1-x/stories/include-font-awesome.md b/docs/documentation/1-x/stories/include-font-awesome.md
index a9973d3f5214..e1175cfad0e6 100644
--- a/docs/documentation/1-x/stories/include-font-awesome.md
+++ b/docs/documentation/1-x/stories/include-font-awesome.md
@@ -1,8 +1,8 @@
-# Include [Font Awesome](http://fontawesome.io/)
+# Include [Font Awesome](https://fontawesome.com/)
-[Font Awesome](http://fontawesome.io/) gives you scalable vector icons that can instantly be customized — size, color, drop shadow, and anything that can be done with the power of CSS.
+[Font Awesome](https://fontawesome.com/) gives you scalable vector icons that can instantly be customized — size, color, drop shadow, and anything that can be done with the power of CSS.
Create a new project and navigate into the project...
```
@@ -56,4 +56,4 @@ After saving this file, return to the browser to see the Font Awesome icon next
### More Info
-- [Examples](http://fontawesome.io/examples/)
+- [Examples](https://fontawesome.com/how-to-use/on-the-web/setup/getting-started?using=web-fonts-with-css)
diff --git a/docs/documentation/1-x/stories/internationalization.md b/docs/documentation/1-x/stories/internationalization.md
index fe317b3b3317..3bcbef13cc13 100644
--- a/docs/documentation/1-x/stories/internationalization.md
+++ b/docs/documentation/1-x/stories/internationalization.md
@@ -6,7 +6,7 @@ If you are working on internationalization, the CLI can help you with the follow
- build
The first thing that you have to do is to setup your application to use i18n.
-To do that you can follow [the cookbook on angular.io](https://angular.io/docs/ts/latest/cookbook/i18n.html).
+To do that you can follow [the cookbook on angular.io](https://angular.io/guide/i18n).
### Extraction
When your app is ready, you can extract the strings to translate from your templates with the
diff --git a/docs/documentation/build.md b/docs/documentation/build.md
index 8a02af3b9c6b..ba25703f56b1 100644
--- a/docs/documentation/build.md
+++ b/docs/documentation/build.md
@@ -113,7 +113,7 @@ See https://github.com/angular/angular-cli/issues/7797 for details.
--optimization
- Defines the optimization level of the build.
+ Enables optimization of the build output.
@@ -152,6 +152,15 @@ See https://github.com/angular/angular-cli/issues/7797 for details.
Output in-file eval sourcemaps.
+
+ vendor-source-map
+
+ --vendor-source-map
+
+
+ Resolve vendor packages sourcemaps.
+
+vendor-chunk
@@ -383,7 +392,7 @@ See https://github.com/angular/angular-cli/issues/7797 for details.
--stats-json
- Generates a 'stats.json' file which can be analyzed using tools such as: webpack-bundle-analyzer or webpack.github.io/analyse.
+ Generates a 'stats.json' file which can be analyzed using tools such as: #webpack-bundle-analyzer' or https: //webpack.github.io/analyse.
diff --git a/docs/documentation/e2e.md b/docs/documentation/e2e.md
index 32dccb64fd58..2f9c0d40a695 100644
--- a/docs/documentation/e2e.md
+++ b/docs/documentation/e2e.md
@@ -15,7 +15,7 @@ ng e2e [project]
ng e2e
```
-End-to-end tests are run via [Protractor](https://angular.github.io/protractor/).
+End-to-end tests are run via [Protractor](http://www.protractortest.org/).
## Options
diff --git a/docs/documentation/generate/library.md b/docs/documentation/generate/library.md
index 7407d90da8e3..2d62e7985834 100644
--- a/docs/documentation/generate/library.md
+++ b/docs/documentation/generate/library.md
@@ -51,6 +51,15 @@ Generate a library project for Angular.
Do not add dependencies to package.json.
+
+ skip-install
+
+ --skip-install
+
+
+ Do not add dependencies to package.json.
+
+skip-ts-config
diff --git a/docs/documentation/home.md b/docs/documentation/home.md
index ded2cbfdf131..83762c301ab0 100644
--- a/docs/documentation/home.md
+++ b/docs/documentation/home.md
@@ -33,7 +33,7 @@ or `ng serve --prod` will also make use of uglifying and tree-shaking functional
ng test
```
-Tests will execute after a build is executed via [Karma](http://karma-runner.github.io/0.13/index.html), and it will automatically watch your files for changes. You can run tests a single time via `--watch=false`.
+Tests will execute after a build is executed via [Karma](http://karma-runner.github.io/0.13/index.html), and it will automatically watch your files for changes. You can run tests a single time via `--watch=false` or `--single-run`.
### Running end-to-end tests
@@ -42,7 +42,7 @@ ng e2e
```
Before running the tests make sure you are serving the app via `ng serve`.
-End-to-end tests are run via [Protractor](https://angular.github.io/protractor/).
+End-to-end tests are run via [Protractor](http://www.protractortest.org/).
### Additional Commands
* [ng new](new)
@@ -52,7 +52,7 @@ End-to-end tests are run via [Protractor](https://angular.github.io/protractor/)
* [ng test](test)
* [ng e2e](e2e)
* [ng build](build)
-* [ng config](config)
+* [ng get/ng set](config)
* [ng doc](doc)
* [ng xi18n](xi18n)
* [ng update](update)
diff --git a/docs/documentation/lint.md b/docs/documentation/lint.md
index 8bfd3bb634f1..46cf98642821 100644
--- a/docs/documentation/lint.md
+++ b/docs/documentation/lint.md
@@ -70,6 +70,6 @@ ng lint [project]
--format
-
+
\ No newline at end of file
diff --git a/docs/documentation/stories.md b/docs/documentation/stories.md
index 75f7771686aa..3d21cda0a10c 100644
--- a/docs/documentation/stories.md
+++ b/docs/documentation/stories.md
@@ -3,7 +3,9 @@
# Stories describing how to do more with the CLI
- [1.0 Update](stories/1.0-update)
+ - [App Shell](stories/app-shell)
- [Asset Configuration](stories/asset-configuration)
+ - [Autocompletion](stories/autocompletion)
- [Configure Hot Module Replacement](stories/configure-hmr)
- [CSS Preprocessors](stories/css-preprocessors)
- [Global Lib](stories/global-lib)
diff --git a/docs/documentation/stories/app-shell.md b/docs/documentation/stories/app-shell.md
new file mode 100644
index 000000000000..2428f65b2f65
--- /dev/null
+++ b/docs/documentation/stories/app-shell.md
@@ -0,0 +1,54 @@
+
+
+# App shell
+
+App shell is a way to render a portion of your application via a route at build time. This gives users a meaningful first paint of your application because the browser does not need to initialize any JavaScript, just rendering the HTML.
+
+## Steps
+
+### Step 1: Prepare the application
+
+An application must be set up with routing. This can be accomplished by running:
+```
+ng new my-app --routing
+```
+Or if you have an existing application you can manually add routing by including the RouterModule and defining a `` within your app.
+
+
+### Step 2: Create the app shell
+```
+ng generate app-shell --client-project my-app --universal-project server-app
+```
+`my-app` is the name of your client application
+`server-app` is the name of the universal (or server) application
+
+After running this command you will notice that the `angular.json` configuration file has been updated. Two new targets were added (and a few other changes):
+```
+"server": {
+ "builder": "@angular-devkit/build-angular:server",
+ "options": {
+ "outputPath": "dist/my-app-server",
+ "main": "src/main.server.ts",
+ "tsConfig": "src/tsconfig.server.json"
+ }
+},
+"app-shell": {
+ "builder": "@angular-devkit/build-angular:app-shell",
+ "options": {
+ "browserTarget": "my-app:build",
+ "serverTarget": "my-app:server",
+ "route": "shell"
+ }
+}
+```
+
+### Step 3: Verify the app is built with the shell content
+
+build with the app shell target
+```
+ng run my-app:app-shell
+```
+
+Verify the build output
+Open dist/app-shell/index.html
+look for text "app-shell works!" which verifies that the app shell route was rendered as part of the output
diff --git a/docs/documentation/stories/application-environments.md b/docs/documentation/stories/application-environments.md
index 6dc5f948150b..635bc2d39fe6 100644
--- a/docs/documentation/stories/application-environments.md
+++ b/docs/documentation/stories/application-environments.md
@@ -28,7 +28,7 @@ This is useful for using different code or variables when creating a new build.
By default no file is replaced in the build.
You can add additional configurations as required.
-To add a **staging** environment, create a copy of `src/environments/environment.ts` called `src/environments/environment.staging.ts`, then add a `staging` configuration to `angular.jsob`:
+To add a **staging** environment, create a copy of `src/environments/environment.ts` called `src/environments/environment.staging.ts`, then add a `staging` configuration to `angular.json`:
```json
"configurations": {
diff --git a/docs/documentation/stories/autoprefixer.md b/docs/documentation/stories/autoprefixer.md
index 78b55b553b64..c6902fccaf3b 100644
--- a/docs/documentation/stories/autoprefixer.md
+++ b/docs/documentation/stories/autoprefixer.md
@@ -4,7 +4,7 @@ Currently, the CLI uses [Autoprefixer](https://github.com/postcss/autoprefixer)
with different browser and browser versions. You may find it necessary to target specific browsers
or exclude certain browser versions from your build.
-Internally, Autoprefixer relies on a library called [Browserslist](https://github.com/ai/browserslist)
+Internally, Autoprefixer relies on a library called [Browserslist](https://github.com/browserslist/browserslist)
to figure out which browsers to support with prefixing.
There are a few ways to tell Autoprefixer what browsers to target:
@@ -26,7 +26,7 @@ last 2 versions
```
Autoprefixer will look for the configuration file/property to use when it prefixes your css.
-Check out the [browserslist repo](https://github.com/ai/browserslist) for more examples of how to target
+Check out the [browserslist repo](https://github.com/browserslist/browserslist) for more examples of how to target
specific browsers and versions.
_Side note:_
diff --git a/docs/documentation/stories/configure-hmr.md b/docs/documentation/stories/configure-hmr.md
index 978c25b3313a..58e34ac9245b 100644
--- a/docs/documentation/stories/configure-hmr.md
+++ b/docs/documentation/stories/configure-hmr.md
@@ -3,12 +3,12 @@
Hot Module Replacement (HMR) is a WebPack feature to update code in a running app without rebuilding it.
This results in faster updates and less full page-reloads.
-You can read more about HMR by visiting [this page](https://webpack.js.org/guides/hot-module-replacement).
+You can read more about HMR by visiting [this page](https://webpack.js.org/guides/hot-module-replacement/).
In order to get HMR working with Angular CLI we first need to add a new environment and enable it.
Next we need to update the bootstrap process of our app to enable the
-[@angularclass/hmr](https://github.com/AngularClass/angular-hmr) module.
+[@angularclass/hmr](https://github.com/gdi2290/angular-hmr) module.
### Add environment for HMR
@@ -41,25 +41,48 @@ export const environment = {
```
-Update `angular.json` to include an hmr environment as explained [here](./application-environments) and add a configuration within serve to enable hmr.
+Update `angular.json` to include an hmr environment as explained [here](./application-environments)
+and add configurations within build and serve to enable hmr. Note that `` here
+represents the name of the project you are adding this configuration to in `angular.json`.
```json
- "serve": {
- "configuration": {
+ "build": {
+ "configurations": {
...
"hmr": {
- "hmr": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.hmr.ts"
}
- ],
+ ]
+ }
+ }
+ },
+ ...
+ "serve": {
+ "configurations": {
+ ...
+ "hmr": {
+ "hmr": true,
+ "browserTarget": ":build:hmr"
}
}
}
```
+Add the necessary types to `src/tsconfig.app.json`
+
+```json
+{
+ ...
+ "compilerOptions": {
+ ...
+ "types": ["node"]
+ },
+}
+```
+
Run `ng serve` with the flag `--configuration hmr` to enable hmr and select the new environment:
```bash
@@ -134,7 +157,7 @@ if (environment.hmr) {
console.log('Are you using the --hmr flag for ng serve?');
}
} else {
- bootstrap();
+ bootstrap().catch(err => console.log(err));
}
```
diff --git a/docs/documentation/stories/continuous-integration.md b/docs/documentation/stories/continuous-integration.md
index 7c079084114b..269bab08997c 100644
--- a/docs/documentation/stories/continuous-integration.md
+++ b/docs/documentation/stories/continuous-integration.md
@@ -23,22 +23,24 @@ set up Circle CI and Travis CI.
Even though `ng test` and `ng e2e` already run on your environment, they need to be adjusted to
run in CI environments.
-When using Chrome in CI environments it has to be started without sandboxing.
-We can achieve that by editing our test configs.
+We'll use [Headless Chrome](https://developers.google.com/web/updates/2017/04/headless-chrome#cli) in CI environments. In some environments we need to start the browser without
+sandboxing or disable the gpu. Here we'll do both.
-In `karma.conf.js`, add a custom launcher called `ChromeNoSandbox` below `browsers`:
+In `karma.conf.js`, add a custom launcher called `ChromeHeadlessCI` below `browsers`:
```
browsers: ['Chrome'],
customLaunchers: {
- ChromeNoSandbox: {
- base: 'Chrome',
- flags: ['--no-sandbox']
+ ChromeHeadlessCI: {
+ base: 'ChromeHeadless',
+ flags: ['--no-sandbox', '--disable-gpu']
}
},
```
-Create a new file in the root of your project called `protractor-ci.conf.js`, that extends
+We'll override the `browsers` option from the command line to use our new configuration.
+
+Create a new file in the `e2e` directory of your project called `protractor-ci.conf.js`, that extends
the original `protractor.conf.js`:
```
@@ -47,22 +49,24 @@ const config = require('./protractor.conf').config;
config.capabilities = {
browserName: 'chrome',
chromeOptions: {
- args: ['--no-sandbox']
+ args: ['--headless', '--no-sandbox', '--disable-gpu']
}
};
exports.config = config;
```
-Now you can run the following commands to use the `--no-sandbox` flag:
+Now you can run the following commands to use the new configurations:
```
-ng test --single-run --no-progress --browser=ChromeNoSandbox
-ng e2e --no-progress --config=protractor-ci.conf.js
+ng test --watch=false --progress=false --browsers=ChromeHeadlessCI
+ng e2e --protractor-config=./e2e/protractor-ci.conf.js
```
-For CI environments it's also a good idea to disable progress reporting (via `--no-progress`)
-to avoid spamming the server log with progress messages.
+For CI environments it's also a good idea to disable progress reporting (via `--progress=false`)
+to avoid spamming the server log with progress messages. We've added that option to `ng test`. An equivalent
+option has been requested for
+`ng e2e` [(#11412)](https://github.com/angular/angular-cli/issues/11412).
## Using Circle CI
@@ -76,28 +80,27 @@ jobs:
build:
working_directory: ~/my-project
docker:
+ # specify the version you desire here
+ # see https://hub.docker.com/r/circleci/node/tags/
- image: circleci/node:8-browsers
steps:
- checkout
- restore_cache:
- key: my-project-{{ .Branch }}-{{ checksum "package.json" }}
+ key: my-project-{{ .Branch }}-{{ checksum "package-lock.json" }}
- run: npm install
- save_cache:
- key: my-project-{{ .Branch }}-{{ checksum "package.json" }}
+ key: my-project-{{ .Branch }}-{{ checksum "package-lock.json" }}
paths:
- - "node_modules"
- - run: xvfb-run -a npm run test -- --single-run --no-progress --browser=ChromeNoSandbox
- - run: xvfb-run -a npm run e2e -- --no-progress --config=protractor-ci.conf.js
-
+ - "node_modules"
+ - run: npm run test -- --watch=false --progress=false --browsers=ChromeHeadlessCI
+ - run: npm run e2e -- --protractor-config=./e2e/protractor-ci.conf.js
```
We're doing a few things here:
-
- `node_modules` is cached.
- - [npm run](https://docs.npmjs.com/cli/run-script) is used to run `ng` because `@angular/cli` is
+ - we use [npm run](https://docs.npmjs.com/cli/run-script) to run `ng` because `@angular/cli` is
not installed globally. The double dash (`--`) is needed to pass arguments into the npm script.
- - `xvfb-run` is used to run `npm run` to run a command using a virtual screen, which is needed by
- Chrome.
Commit your changes and push them to your repository.
@@ -119,7 +122,7 @@ sudo: false
language: node_js
node_js:
- "8"
-
+
addons:
apt:
sources:
@@ -135,17 +138,10 @@ install:
- npm install
script:
- # Use Chromium instead of Chrome.
- - export CHROME_BIN=chromium-browser
- - xvfb-run -a npm run test -- --single-run --no-progress --browser=ChromeNoSandbox
- - xvfb-run -a npm run e2e -- --no-progress --config=protractor-ci.conf.js
-
+ - npm run test -- --watch=false --progress=false --browsers=ChromeHeadlessCI
+ - npm run e2e -- --protractor-config=./e2e/protractor-ci.conf.js
```
-Although the syntax is different, we're mostly doing the same steps as were done in the
-Circle CI config.
-The only difference is that Travis doesn't come with Chrome, so we use Chromium instead.
-
Commit your changes and push them to your repository.
Next you'll need to [sign up for Travis CI](https://travis-ci.org/auth) and
@@ -153,3 +149,23 @@ Next you'll need to [sign up for Travis CI](https://travis-ci.org/auth) and
You'll need to push a new commit to trigger a build.
Be sure to check out the [Travis CI docs](https://docs.travis-ci.com/) if you want to know more.
+
+## ChromeDriver
+
+In CI environments it's a good idea to to use a specific version of [ChromeDriver](http://chromedriver.chromium.org/)
+instead of allowing `ng e2e` to use the latest one. CI environments often use older versions of chrome, which are unsupported by newer versions of ChromeDriver.
+
+An easy way to do this is to define a NPM script:
+
+```text
+"webdriver-update-ci": "webdriver-manager update --standalone false --gecko false --versions.chrome 2.37"
+```
+
+And then on CI environments you call that script followed by the e2e command without updating webdriver:
+
+```text
+npm run webdriver-update-ci
+ng e2e --webdriver-update=false
+```
+
+This way you will always use a specific version of chrome driver between runs.
\ No newline at end of file
diff --git a/docs/documentation/stories/create-library.md b/docs/documentation/stories/create-library.md
index 11cd73044cce..8ccf97421c49 100644
--- a/docs/documentation/stories/create-library.md
+++ b/docs/documentation/stories/create-library.md
@@ -78,29 +78,24 @@ directory for the library beforehand, removing old code leftover code from previ
## Why do I need to build the library everytime I make changes?
Running `ng build my-lib` every time you change a file is bothersome and takes time.
+In `Angular CLI` version `6.2` an incremental builds functionality has been added to improve the experience of library developers.
+Everytime a file is changed a partial build is performed that emits the amended files.
-Some similar setups instead add the path to the source code directly inside tsconfig.
-This makes seeing changes in your app faster.
+The feature can be using by passing `--watch` command argument as show below;
-But doing that is risky.
-When you do that, the build system for your app is building the library as well.
-But your library is built using a different build system than your app.
-
-Those two build systems can build things slightly different, or support completely different
-features.
-
-This leads to subtle bugs where your published library behaves differently from the one in your
-development setup.
-
-For this reason we decided to err on the side of caution, and make the recommended usage
-the safe one.
-
-In the future we want to add watch support to building libraries so it is faster to see changes.
+```bash
+ng build my-lib --watch
+```
-We are also planning to add internal dependency support to Angular CLI.
-This means that Angular CLI would know your app depends on your library, and automatically rebuilds
-the library when the app needs it.
+Note: This feature requires that Angular's Compiler Option [enableResourceInlining](https://angular.io/guide/aot-compiler#enableresourceinlining) is enabled.
+This can be done by adding the below in your `tsconfig.lib.json`.
+```javascript
+"angularCompilerOptions": {
+ "enableResourceInlining": true,
+ ...
+}
+```
## Note for upgraded projects
diff --git a/docs/documentation/stories/github-pages.md b/docs/documentation/stories/github-pages.md
index cce3c10a5cb5..658c8340a863 100644
--- a/docs/documentation/stories/github-pages.md
+++ b/docs/documentation/stories/github-pages.md
@@ -17,5 +17,12 @@ Commit your changes and push. On the GitHub project page, configure it to
And that's all you need to do! Now you can see your page at
`https://USER_NAME.github.io/PROJECT_NAME/`.
-You can also use [angular-cli-ghpages](https://github.com/angular-buch/angular-cli-ghpages), a full
+You can also use [angular-cli-ghpages](https://github.com/angular-schule/angular-cli-ghpages), a full
featured package that does this all this for you and has extra functionality.
+All you need is a single command:
+
+```bash
+ngh --dir=dist/docs
+```
+
+It takes care of pushing to the `gh-pages` branch and copying your `index.html` to `404.html`.
diff --git a/docs/documentation/stories/include-font-awesome.md b/docs/documentation/stories/include-font-awesome.md
index 9ae3d79f0572..084dbec7d498 100644
--- a/docs/documentation/stories/include-font-awesome.md
+++ b/docs/documentation/stories/include-font-awesome.md
@@ -1,8 +1,10 @@
-# Include [Font Awesome](http://fontawesome.io/)
+# Include [Font Awesome](https://fontawesome.com/)
-[Font Awesome](http://fontawesome.io/) gives you scalable vector icons that can instantly be customized — size, color, drop shadow, and anything that can be done with the power of CSS.
+[Font Awesome](https://fontawesome.com/) gives you scalable vector icons that can instantly be customized — size, color, drop shadow, and anything that can be done with the power of CSS.
+
+### Using CSS
Create a new project and navigate into the project...
```
@@ -15,22 +17,49 @@ Install the `font-awesome` library and add the dependency to package.json...
npm install --save font-awesome
```
-### Using CSS
-
To add Font Awesome CSS icons to your app...
```json
// in angular.json
"build": {
"options": {
"styles": [
- "node_modules/font-awesome/css/font-awesome.css"
+ "node_modules/font-awesome/css/font-awesome.css",
"styles.css"
],
}
}
```
+
### Using SASS
+Create a new project and navigate into the project...
+```
+ng new my-app --style=scss
+cd my-app
+```
+
+Install the `font-awesome` library and add the dependency to package.json...
+```bash
+npm install --save font-awesome
+```
+
+To add Font Awesome CSS icons to your app...
+```json
+// in angular.json
+"build": {
+ "options": {
+ "styles": [
+ "node_modules/font-awesome/css/font-awesome.css",
+ "styles.scss"
+ ],
+ }
+}
+```
+
+### Using SASS w/ Custom Variables
+
+Follow steps for `Using SASS` then continue.
+
Create an empty file _variables.scss in src/.
Add the following to _variables.scss:
@@ -59,4 +88,4 @@ After saving this file, return to the browser to see the Font Awesome icon next
### More Info
-- [Examples](http://fontawesome.io/examples/)
+- [Examples](https://fontawesome.com/how-to-use/on-the-web/setup/getting-started?using=web-fonts-with-css)
diff --git a/docs/documentation/stories/internationalization.md b/docs/documentation/stories/internationalization.md
index b3f213ece5d5..2acd551752ba 100644
--- a/docs/documentation/stories/internationalization.md
+++ b/docs/documentation/stories/internationalization.md
@@ -6,7 +6,7 @@ If you are working on internationalization, the CLI can help you with the follow
- build
The first thing that you have to do is to setup your application to use i18n.
-To do that you can follow [the cookbook on angular.io](https://angular.io/docs/ts/latest/cookbook/i18n.html).
+To do that you can follow [the cookbook on angular.io](https://angular.io/guide/i18n).
### Extraction
When your app is ready, you can extract the strings to translate from your templates with the
diff --git a/docs/documentation/stories/universal-rendering.md b/docs/documentation/stories/universal-rendering.md
index f4b7a4027276..cb007b6eb712 100644
--- a/docs/documentation/stories/universal-rendering.md
+++ b/docs/documentation/stories/universal-rendering.md
@@ -23,7 +23,8 @@ Install `@angular/platform-server` into your project. Make sure you use the same
> You'll also need ts-loader (for your webpack build we'll show later) and @nguniversal/module-map-ngfactory-loader, as it's used to handle lazy-loading in the context of a server-render. (by loading the chunks right away)
```bash
-$ npm install --save @angular/platform-server @nguniversal/module-map-ngfactory-loader ts-loader
+$ npm install --save @angular/platform-server @nguniversal/module-map-ngfactory-loader express
+$ npm install --save-dev ts-loader webpack-cli
```
## Step 1: Prepare your App for Universal rendering
@@ -33,7 +34,7 @@ The first thing you need to do is make your `AppModule` compatible with Universa
### src/app/app.module.ts:
-```javascript
+```typescript
@NgModule({
bootstrap: [AppComponent],
imports: [
@@ -143,7 +144,7 @@ target:
## Building the bundle
-With these steps complete, you should be able to build a server bundle for your application, using the `--app` flag to tell the CLI to build the server bundle, referencing its index of `1` in the `"apps"` array in `.angular-cli.json`:
+With these steps complete, you should be able to build a server bundle for your application, using your project name and command name from `angular.json` to tell the CLI to build the server bundle.
```bash
# This builds your project using the server target, and places the output
@@ -216,6 +217,9 @@ import * as express from 'express';
import { join } from 'path';
import { readFileSync } from 'fs';
+// Import module map for lazy loading
+import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';
+
// Faster server renders w/ Prod mode (dev mode never needed)
enableProdMode();
@@ -228,11 +232,6 @@ const DIST_FOLDER = join(process.cwd(), 'dist');
// Our index.html we'll use as our template
const template = readFileSync(join(DIST_FOLDER, 'browser', 'index.html')).toString();
-// * NOTE :: leave this as require() since this file is built Dynamically from webpack
-const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main.bundle');
-
-const { provideModuleMap } = require('@nguniversal/module-map-ngfactory-loader');
-
app.engine('html', (_, options, callback) => {
renderModuleFactory(AppServerModuleNgFactory, {
// Our index.html
@@ -279,29 +278,40 @@ const path = require('path');
const webpack = require('webpack');
module.exports = {
- entry: { server: './server.ts' },
- resolve: { extensions: ['.js', '.ts'] },
+ mode: 'none',
+ entry: {
+ server: './server.ts',
+ },
target: 'node',
- // this makes sure we include node_modules and other 3rd party libraries
- externals: [/(node_modules|main\..*\.js)/],
+ resolve: { extensions: ['.ts', '.js'] },
+ optimization: {
+ minimize: false
+ },
output: {
+ // Puts the output at the root of the dist folder
path: path.join(__dirname, 'dist'),
filename: '[name].js'
},
module: {
rules: [
- { test: /\.ts$/, loader: 'ts-loader' }
+ { test: /\.ts$/, loader: 'ts-loader' },
+ {
+ // Mark files inside `@angular/core` as using SystemJS style dynamic imports.
+ // Removing this will cause deprecation warnings to appear.
+ test: /(\\|\/)@angular(\\|\/)core(\\|\/).+\.js$/,
+ parser: { system: true },
+ },
]
},
plugins: [
- // Temporary Fix for issue: https://github.com/angular/angular/issues/11580
- // for "WARNING Critical dependency: the request of a dependency is an expression"
new webpack.ContextReplacementPlugin(
+ // fixes WARNING Critical dependency: the request of a dependency is an expression
/(.+)?angular(\\|\/)core(.+)?/,
path.join(__dirname, 'src'), // location of your src
{} // a map of your routes
),
new webpack.ContextReplacementPlugin(
+ // fixes WARNING Critical dependency: the request of a dependency is an expression
/(.+)?express(\\|\/)(.+)?/,
path.join(__dirname, 'src'),
{}
@@ -332,13 +342,12 @@ Now lets create a few handy scripts to help us do all of this in the future.
```json
"scripts": {
-
// These will be your common scripts
"build:ssr": "npm run build:client-and-server-bundles && npm run webpack:server",
"serve:ssr": "node dist/server.js",
// Helpers for the above scripts
- "build:client-and-server-bundles": "ng build --prod && ng build --prod --app 1 --output-hashing=false",
+ "build:client-and-server-bundles": "ng build --prod && ng run your-project-name:server",
"webpack:server": "webpack --config webpack.server.config.js --progress --colors"
}
```
diff --git a/docs/process/release.md b/docs/process/release.md
index 093845e4d103..6ae887075057 100644
--- a/docs/process/release.md
+++ b/docs/process/release.md
@@ -1,18 +1,8 @@
-
-# CLI Release Process
-
> Hans Larsen (hansl@google.com)
-> October 7th, 2016
-> Updated December 15th, 2016
-
-
-## Prerequisite
+> June 8th, 2018
-1. Only the caretaker should be able to release the CLI to NPM.
-1. This document contains information that is only accessible to Google employees.
-1. This document contains steps that can only be performed by contributors to the project (needs write access).
-## Setting Up Local Repository
+# Setting Up Local Repository
1. Clone the Angular-CLI repo. A local copy works just fine.
1. Create an upstream remote:
@@ -20,11 +10,79 @@
$ git remote add upstream https://github.com/angular/angular-cli.git
```
+# Caretaker
+
+The caretaker should triage issues, merge PR, and sheppard the release.
+
+Caretaker calendar can be found [here](https://calendar.google.com/calendar?cid=Z29vZ2xlLmNvbV9zZjlvODF0NGE4NzE5ZmtiMnBoZnA4MGk2Z0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t).
+
+## Triaging Issues
+TBD
+
+## Merging PRs
+TBD
+
+### Maintaining Patch Branches
+Everytime a PR is merged, commits need to be cherry-picked to an associated branch;
+* the latest patch branch (e.g. `1.2.x` or `1.3.x-rc.0`) should also be updated by cherry-picking all _applicable_
+ commits to it. `fix()`, `docs()`, `refactor()` and
+
+Say the following PR is merged;
+
+```text
+* fix(@angular/cli): fix path when doing stuff
+* refactor(@angular-devkit/core): replace Fizz with Buzz
+* feat(@angular-devkit/core): add new feature
+* fix(@angular-devkit/core): fix something related to new feature
+* refactor(@angular-devkit/core): move stuff to new feature
+```
+
+Only the first 2 commits should be cherry picked to the patch branch, as the last 3 are related to a new feature.
+
+# Release
+
+## Shepparding
+
+As commits are cherry-picked when PRs are merged, creating the release should be a matter of updating the version
+numbers. This can be done with the following command.
+
+See `scripts/release.ts` for the full list of release types, e.g. patch updates the third number per semver.
+
+```bash
+devkit-admin release patch --force # replace with minor-beta etc.
+git commit -a -m 'release: vXX'
+git tag 'vXX'
+git push upstream && git push upstream --tags
+```
+
+### Publishing
+
+**This can ONLY be done by a Google employee.**
+
+**It is a good idea to wait for CI to be green on the patch branch and tag before doing the release.**
+
+Check out the patch tag (e.g. `v6.7.8`), then run:
+```sh
+devkit-admin publish
+```
+
+Check out the minor tag (e.g. `v6.8.0-beta.0`), then run:
+```bash
+devkit-admin publish --tag next
+```
+
+### Release Notes
+
+`devkit-admin changelog` takes `from` and `to` arguments which are any valid git ref.
+For example, running the following command will output the release notes on stdout between v1.2.3 and 1.2.4:
+
+```bash
+devkit-admin changelog --from=v1.2.3 --to=v1.2.4
+```
-## Updating Local Repository
+Copy paste the output (you can use `| pbcopy` on MacOS or `|xclip` on Linux) and create the release notes on github for the tag just
+released. If you have an API token for GitHub you can create a draft automatically by using the `--githubToken` flag.
+You just have then to confirm the draft.
+**Tags containing `beta` or `rc` should be marked as pre-release.**
-| | |
-|------|-----|
-|Author:|Hans Larsen|
-|Date:| October 7th, 2016|
diff --git a/docs/specifications/update.md b/docs/specifications/update.md
new file mode 100644
index 000000000000..b81f35f5fdb2
--- /dev/null
+++ b/docs/specifications/update.md
@@ -0,0 +1,192 @@
+
+# Update Command
+
+`ng update` is a new command in the CLI to update one or multiple packages, its peer dependencies, and the peer dependencies that depends on it.
+
+If there are inconsistencies, for example if peer dependencies cannot be matches by a simple semver range, the tool will error out (and nothing will be committed on the filesystem).
+
+## Command Line Usage
+
+```bash
+ng update [options]
+```
+
+You can specify more than one package. Each package follows the convention of `[@scope/]packageName[@version-range-or-dist-tag]`. Packages not found in your dependencies will trigger an error. Any package that has a higher version in your `package.json` will trigger an error.
+
+| Flag | Argument | Description |
+|---|---|---|
+| `--all` | `boolean` | If true, implies that all dependencies should be updated. Defaults is false, using dependencies from the command line instead. |
+| `--force` | `boolean` | If true, skip the verification step and perform the update even if some peer dependencies would be invalidated. Peer dependencies errors will still be shown as warning. Defaults to false. |
+| `--next` | `boolean` | If true, allows version discovery to include Beta and RC. Defaults to false. |
+| `--migrate-only` | `boolean` | If true, don't change the `package.json` file, only apply migration scripts. |
+| `--from` | `version` | Apply migrations from a certain version number. |
+| `--to` | `version` | Apply migrations up to a certain version number (inclusive). By default will update to the installed version. |
+
+## Details
+
+The schematic performs the following steps, in order:
+
+1. Get all installed package names and versions from the `package.json` into `dependencyMap: Map`.
+1. From that map, fetch all `package.json` from the NPM repository, which contains all versions, and gather them in a `Map`.
+ 1. At the same time, update the `Map<>` with the version of the package which is believed to be installed (largest version number matching the version range).
+ 1. **WARNING**: this might not be the exact installed versions, unfortunately. We should have a proper `package-lock.json` loader, and support `yarn.lock` as well, but these are stretch goals (and where do we stop).
+1. For each packages mentioned on the command line, update to the target version (by default largest non-beta non-rc version):
+
+ ```python
+ # ARGV The packages being requested by the user.
+ # NPM A map of package name to a map of version to PackageJson structure.
+ # V A map of package name to available versions.
+ # PKG A map of package name to PackageJson structure, for the installed versions.
+ # next A flag for the "--next" command line argument.
+
+ # First add all updating packages' peer dependencies. This should be recursive but simplified
+ # here for readability.
+ ARGV += [ NPM[p][max([ v for v in V[p] if (not is_beta(v) or next) ])].peerDependencies
+ for p in ARGV ]
+
+ for p in ARGV:
+ x = max([ v for v in V[p] if (not is_beta(v) or next) ])
+
+ for other in set(PKG.keys()) - set([ p ]):
+ # Verify all packages' peer dependencies.
+ if has(other.peerDependencies, p) and !compatible(x, other.peerDependencies[p]):
+ showError('Cannot update dependency "%s": "%s" is incompatible with the updated dependency' % (x, other))
+
+ if any( has(other.peerDependencies, peer) and !compatible(x, other.peerDependencies[peer])
+ for peer in PKG[p].peerDependencies.keys() ):
+ showError('Cannot update dependency "%s": "%s" depends on an incompatible peer dependency' % (x, other))
+
+ update_package_json(p, x)
+```
+
+
+
+## Library Developers
+
+Libraries are responsible for defining their own update schematics. The `ng update` tool will update the package.json, and if it detects am `"ng-update"` key in package.json of the library, will run the update schematic on it (with version information metadata).
+
+If a library does not define the `"ng-update"` key in their package.json, they are considered not supporting the update workflow and `ng update` is basically equivalent to `npm install`.
+
+### Migration
+
+In order to implement migrations in a library, the author must add the `ng-update` key to its `package.json`. This key contains the following fields:
+
+| Field Name | Type | Description |
+|---|---|---|
+| `requirements` | `{ [packageName: string]: VersionRange }` | A map of package names to version to check for minimal requirement. If one of the libraries listed here does not match the version range specified in `requirements`, an error will be shown to the user to manually update those libraries. For example, `@angular/core` does not support updates from versions earlier than 5, so this field would be `{ '@angular/core': '>= 5' }`.
+| `migrations` | `string` | A relative path (or resolved using Node module resolution) to a Schematics collection definition. |
+| `packageGroup` | `string[]` | A list of npm packages that are to be grouped together. When running the update schematic it will automatically include all packages as part of the packageGroup in the update (if the user also installed them). |
+| `packageGroupName` | `string` | The name of the packageGroup to use. By default, uses the first package in the packageGroup. The packageGroupName needs to be part of the packageGroup and should be a valid package name. |
+
+#### Example given:
+Library my-lib wants to have 2 steps to update from version 4 -> 4.5 and 4.5 to 5. It would add this information in its `package.json`:
+
+```json
+{
+ "ng-update": {
+ "requirements": {
+ "my-lib": "^5"
+ },
+ "migrations": "./migrations/migration-collection.json"
+ }
+}
+```
+
+And create a migration collection (same schema as the Schematics collection):
+
+```json
+{
+ "schematics": {
+ "migration-01": {
+ "version": "6",
+ "factory": "./update-6"
+ },
+ "migration-02": {
+ "version": "6.2",
+ "factory": "./update-6_2"
+ },
+ "migration-03": {
+ "version": "6.3",
+ "factory": "./update-6_3"
+ },
+ "migration-04": {
+ "version": "7",
+ "factory": "./update-7"
+ },
+ "migration-05": {
+ "version": "8",
+ "factory": "./update-8"
+ }
+ }
+}
+```
+
+The update tool would then read the current version of library installed, check against all `version` fields and run the schematics, until it reaches the version required by the user (inclusively). If such a collection is used to update from version 5 to version 7, the `01`, `02`, `03,` and `04` functions would be called. If the current version is 7 and a `--refactor-only` flag is passed, it would run the migration `04` only. More arguments are needed to know from which version you are updating.
+
+Running `ng update @angular/core` would be the same as `ng generate @angular/core/migrations:migration-01`.
+
+## Use cases
+
+### Help
+
+`ng update`, shows what updates would be applied;
+
+```sh
+$ ng update
+We analyzed your package.json, there's some packages to update:
+
+Name Version Command to update
+----------------------------------------------------------------------------
+@angular/cli 1.7.0 > 6.0.0 ng update @angular/cli
+@angular/core 5.4.3 > 6.0.1 ng update @angular/core
+@angular/material 5.2.1 > 6.0.0 ng update @angular/material
+@angular/router 5.4.3 > 6.0.1 ng update @angular/core
+
+There might be additional packages that are outdated.
+```
+
+### Simple Multi-steps
+
+I have a dependency on Angular, Material and CLI. I want to update the CLI, then Angular, then Material in separate steps.
+
+#### Details
+1. `ng update @angular/cli`.
+Updates the CLI and packages that have a peer dependencies on the CLI (none), running refactoring tools from CLI 1 to 6.
+1. `ng update @angular/core`.
+Updates the Core package and all packages that have a peer dependency on it. This can get tricky if `@angular/material` get caught in the update because the version installed does not directly allow the new version of `@angular/core`. In this case
+
+### Complex Case
+
+package.json:
+
+```json
+{
+ "dependencies": {
+ "@angular/material": "5.0.0",
+ "@angular/core": "5.5.5"
+ }
+}
+```
+
+Commands:
+
+```bash
+ng update @angular/core
+```
+
+- updates `@angular/core` to the `latest` dist-tag (6.0.0)
+- sees that `@angular/material` is not compatible with 6.0.0; **error out.**
+
+```bash
+ng update @angular/material
+```
+
+- update `@angular/material` to latest version, that should be compatible with the current `@angular/core`.
+- if that version is not compatible with you
+- tell the user about a higher version that requires an update to `@angular/core`.
+
+
+## Notes
+
+1. if someone is on CLI 1.5, the command is not supported. The user needs to update to `@angular/cli@latest`, then `ng update @angular/cli`. Post install hook will check versions of cli configuration and show a message to run the `ng update` command.
+1. NPM proxies or cache are not supported by the first version of this command.
diff --git a/etc/cli.angular.io/.firebaserc b/etc/cli.angular.io/.firebaserc
new file mode 100644
index 000000000000..3f1a5bf73284
--- /dev/null
+++ b/etc/cli.angular.io/.firebaserc
@@ -0,0 +1,5 @@
+{
+ "projects": {
+ "default": "cli-angular-io"
+ }
+}
diff --git a/etc/cli.angular.io/README.md b/etc/cli.angular.io/README.md
new file mode 100644
index 000000000000..5e0190d83dc3
--- /dev/null
+++ b/etc/cli.angular.io/README.md
@@ -0,0 +1,14 @@
+
+# Angular CLI microsite
+
+This folder contains all the static files used for the Angular CLI microsite
+(http://cli.angular.io).
+
+To make changes on the frontend, just update the files here, and ask the
+caretaker to deploy the new site when the commit is merged. Your commit should
+be of scope `docs:` (**NOT** `fix` or `feat`).
+
+## Deploy
+
+To deploy, use your firebase credentials to login, then use `firebase deploy`
+from this folder. There is currently no build step.
diff --git a/etc/cli.angular.io/angular-logo-with-text.svg b/etc/cli.angular.io/angular-logo-with-text.svg
new file mode 100644
index 000000000000..51b8487acc9a
--- /dev/null
+++ b/etc/cli.angular.io/angular-logo-with-text.svg
@@ -0,0 +1,32 @@
+
\ No newline at end of file
diff --git a/etc/cli.angular.io/angular-logo.svg b/etc/cli.angular.io/angular-logo.svg
new file mode 100644
index 000000000000..fc8b6e94fc32
--- /dev/null
+++ b/etc/cli.angular.io/angular-logo.svg
@@ -0,0 +1,19 @@
+
\ No newline at end of file
diff --git a/etc/cli.angular.io/cli-logo.svg b/etc/cli.angular.io/cli-logo.svg
new file mode 100644
index 000000000000..fff3d73bfb7c
--- /dev/null
+++ b/etc/cli.angular.io/cli-logo.svg
@@ -0,0 +1,326 @@
+
+
diff --git a/etc/cli.angular.io/favicon.ico b/etc/cli.angular.io/favicon.ico
new file mode 100644
index 000000000000..4dace951fab2
Binary files /dev/null and b/etc/cli.angular.io/favicon.ico differ
diff --git a/etc/cli.angular.io/firebase.json b/etc/cli.angular.io/firebase.json
new file mode 100644
index 000000000000..b55622a85956
--- /dev/null
+++ b/etc/cli.angular.io/firebase.json
@@ -0,0 +1,16 @@
+{
+ "hosting": {
+ "public": "",
+ "ignore": [
+ "firebase.json",
+ "README.md",
+ "**/.*"
+ ],
+ "rewrites": [
+ {
+ "source": "/**/!(*.@(js|ts|html|css|json|svg|png|jpg|jpeg))",
+ "destination": "/index.html"
+ }
+ ]
+ }
+}
diff --git a/etc/cli.angular.io/index.html b/etc/cli.angular.io/index.html
new file mode 100644
index 000000000000..c512512f37a4
--- /dev/null
+++ b/etc/cli.angular.io/index.html
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+ Angular CLI
+
+
+
+
+
+
+
+
+
+
The Angular CLI makes it easy to create an application that already works, right out of the box. It already follows our best practices!
+
+
+
+
ng generate
+
Generate components, routes, services and pipes with a simple command. The CLI will also create simple test shells for all of these.
+
+
+
+
ng serve
+
Easily test your app locally while developing.
+
+
+
+
Test, Lint, Format
+
Make your code really shine. Run your unittests or your end-to-end tests with the breeze of a command. Execute the official Angular linter and run clang format.
The MIT License
+
+Copyright (c) Google, Inc. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+