{ "database": { "rules": "database.rules.json" }, "hosting": { "public": "dist", "cleanUrls": true, "redirects": [ ////////////////////////////////////////////////////////////////////////////////////////////// // README: // Redirects must also be handled by the ServiceWorker. If you add a redirect rule here, // make sure it is compatible with the configuration in `ngsw-config.json`. ////////////////////////////////////////////////////////////////////////////////////////////// // A random bad indexed page that used `api/api` {"type": 301, "source": "/api/api/:rest*", "destination": "/api/:rest*"}, // Guide renames/removals {"type": 301, "source": "/docs/*/latest/cli-quickstart.html", "destination": "/guide/quickstart"}, {"type": 301, "source": "/docs/*/latest/glossary.html", "destination": "/guide/glossary"}, {"type": 301, "source": "/docs/*/latest/quickstart.html", "destination": "/guide/quickstart"}, {"type": 301, "source": "/docs/*/latest/guide/server-communication.html", "destination": "/guide/http"}, {"type": 301, "source": "/docs/*/latest/guide/style-guide.html", "destination": "/guide/styleguide"}, {"type": 301, "source": "/guide/cli-quickstart", "destination": "/guide/quickstart"}, {"type": 301, "source": "/guide/service-worker-getstart", "destination": "/guide/service-worker-getting-started"}, {"type": 301, "source": "/guide/service-worker-comm", "destination": "/guide/service-worker-communications"}, {"type": 301, "source": "/guide/service-worker-configref", "destination": "/guide/service-worker-config"}, {"type": 301, "source": "/guide/webpack", "destination": "https://v5.angular.io/guide/webpack"}, // some top level guide pages on old site were moved below the guide folder {"type": 301, "source": "/styleguide", "destination": "/guide/styleguide"}, {"type": 301, "source": "/docs/styleguide", "destination": "/guide/styleguide"}, // news is now blog {"type": 301, "source": "/news*", "destination": "https://blog.angular.io/"}, // cookbook guides were moved (and sometime renamed or removed) {"type": 301, "source": "/docs/*/latest/cookbook", "destination": "/docs"}, {"type": 301, "source": "/docs/*/latest/cookbook/", "destination": "/docs"}, {"type": 301, "source": "/docs/*/latest/cookbook/index.html", "destination": "/docs"}, {"type": 301, "source": "/**/cookbook/ts-to-js*", "destination": "https://github.com/angular/angular/blob/master/aio/content/guide/change-log.md#es6--described-in-typescript-to-javascript-2016-11-14"}, {"type": 301, "source": "/docs/*/latest/cookbook/a1-a2-quick-reference.html", "destination": "/guide/ajs-quick-reference"}, {"type": 301, "source": "/docs/*/latest/cookbook/component-communication.html", "destination": "/guide/component-interaction"}, {"type": 301, "source": "/docs/*/latest/cookbook/dependency-injection.html", "destination": "/guide/dependency-injection-in-action"}, {"type": 301, "source": "/docs/*/latest/cookbook/:cookbook.html", "destination": "/guide/:cookbook"}, // Forms related code was moved from the `common` to `forms` package (and NgFor was renamed to NgForOf) {"type": 301, "source": "/**/NgFor-*", "destination": "/api/common/NgForOf"}, {"type": 301, "source": "/**/api/common/index/MaxLengthValidator-*", "destination": "/api/forms/MaxLengthValidator"}, {"type": 301, "source": "/**/api/common/ControlGroup*", "destination": "/api/forms/FormGroup"}, {"type": 301, "source": "/**/api/common/Control*", "destination": "/api/forms/FormControl"}, {"type": 301, "source": "/**/api/common/SelectControlValueAccessor-*", "destination": "/api/forms/SelectControlValueAccessor"}, {"type": 301, "source": "/**/api/common/NgModel", "destination": "/api/forms/NgModel"}, // Animations moves, renames and removals {"type": 301, "source": "/api/animate/:rest*", "destination": "/api/animations/:rest*"}, // AnimationStateDeclarationMetadata was removed {"type": 301, "source": "/**/AnimationStateDeclarationMetadata*", "destination": "/api/animations"}, // `AnimationDriver` was moved to the `animations/browser` package {"type": 301, "source": "/api/platform-browser/AnimationDriver", "destination": "/api/animations/browser/AnimationDriver"}, // The `testing` package was renamed to `core/testing` {"type": 301, "source": "/api/testing/:api-*", "destination": "/api/core/testing/:api"}, // CORE_DIRECTIVES & PLATFORM_PIPES were removed and are now in the CommonModule {"type": 301, "source": "/**/CORE_DIRECTIVES*", "destination": "/api/common/CommonModule"}, {"type": 301, "source": "/**/PLATFORM_PIPES*", "destination": "/api/common/CommonModule"}, // DirectiveMetadata is now covered by the Directive decorator {"type": 301, "source": "/**/DirectiveMetadata-*", "destination": "/api/core/Directive"}, // OptionalMetadata is now covered by the Optional decorator {"type": 301, "source": "/**/OptionalMetadata-*", "destination": "/api/core/Optional"}, // HTTP_PROVIDERS was removed and is now provided in HttpModule {"type": 301, "source": "/**/HTTP_PROVIDERS*", "destination": "/api/http/HttpModule"}, // URLs that use the old scheme of adding the type to the end (e.g. `SomeClass-class`) {"type": 301, "source": "/api/:package/:api-*", "destination": "/api/:package/:api"}, {"type": 301, "source": "/api/:package/testing/index/:api-*", "destination": "/api/:package/testing/:api"}, {"type": 301, "source": "/api/:package/testing/:api-*", "destination": "/api/:package/testing/:api"}, {"type": 301, "source": "/api/upgrade/:package/index/:api-*", "destination": "/api/upgrade/:package/:api"}, {"type": 301, "source": "/api/upgrade/:package/:api-*", "destination": "/api/upgrade/:package/:api"}, // URLs that use the old scheme before we moved the docs to the angular/angular repo {"type": 301, "source": "/docs/*/latest", "destination": "/docs"}, {"type": 301, "source": "/docs/*/latest/api/", "destination": "/api"}, {"type": 301, "source": "/docs/*/latest/api/:package", "destination": "/api/:package"}, {"type": 301, "source": "/docs/*/latest/api/testing/:api-*", "destination": "/api/core/testing/:api"}, {"type": 301, "source": "/docs/*/latest/api/:package/:api-*", "destination": "/api/:package/:api"}, {"type": 301, "source": "/docs/*/latest/api/:package/index/:api-*", "destination": "/api/:package/:api"}, {"type": 301, "source": "/docs/*/latest/api/:package/testing", "destination": "/api/:package/testing"}, {"type": 301, "source": "/docs/*/latest/api/:package/testing/index/:api-*", "destination": "/api/:package/testing/:api"}, {"type": 301, "source": "/docs/*/latest/api/platform-browser/animations/index/:api-*", "destination": "/api/platform-browser/animations/:api"}, {"type": 301, "source": "/docs/*/latest/api/upgrade/:package/:api-*", "destination": "/api/upgrade/:package/:api"}, {"type": 301, "source": "/docs/*/latest/api/upgrade/:package/index/:api-*", "destination": "/api/upgrade/:package/:api"}, {"type": 301, "source": "/docs/*/latest/glossary", "destination": "/guide/glossary"}, {"type": 301, "source": "/docs/*/latest/guide/", "destination": "/docs"}, {"type": 301, "source": "/docs/*/latest/guide/lifecycle-hooks", "destination": "/guide/lifecycle-hooks"}, {"type": 301, "source": "/docs/*/latest/:rest*", "destination": "/:rest*"}, {"type": 301, "source": "/docs/latest/:rest*", "destination": "/:rest*"}, {"type": 301, "source": "/docs/styleguide*", "destination": "/guide/styleguide"}, {"type": 301, "source": "/guide/metadata", "destination": "/guide/aot-compiler"}, {"type": 301, "source": "/guide/ngmodule", "destination": "/guide/ngmodules"}, {"type": 301, "source": "/guide/learning-angular*", "destination": "/guide/quickstart"}, {"type": 301, "source": "/testing", "destination": "/guide/testing"}, {"type": 301, "source": "/testing/**", "destination": "/guide/testing"} ], "rewrites": [ { "source": "**/!(*.*)", "destination": "/index.html" } ], "headers": [ { "source": "/", "headers": [ { "key": "Link", "value": ";rel=preload;as=fetch,;rel=preload;as=fetch" } ] } ] } }