diff --git a/aio/content/cli/help/build-info.json b/aio/content/cli/help/build-info.json
index c578dd0072f06..cb832f370d511 100644
--- a/aio/content/cli/help/build-info.json
+++ b/aio/content/cli/help/build-info.json
@@ -1,4 +1,4 @@
{
"branchName": "refs/heads/main",
- "sha": "81c55a67fc38f47d14387584cf9593286ddd18c1"
+ "sha": "47810588dd3e0458285fe60a9f530021c8a915a3"
}
\ No newline at end of file
diff --git a/aio/content/cli/help/build.json b/aio/content/cli/help/build.json
index d641477669533..9f8effcf8af1f 100644
--- a/aio/content/cli/help/build.json
+++ b/aio/content/cli/help/build.json
@@ -3,7 +3,7 @@
"command": "ng build [project]",
"shortDescription": "Compiles an Angular application or library into an output directory named dist/ at the given output path.",
"longDescriptionRelativePath": "@angular/cli/src/commands/build/long-description.md",
- "longDescription": "The command can be used to build a project of type \"application\" or \"library\".\nWhen used to build a library, a different builder is invoked, and only the `ts-config`, `configuration`, and `watch` options are applied.\nAll other options apply only to building applications.\n\nThe application builder uses the [webpack](https://webpack.js.org/) build tool, with default configuration options specified in the workspace configuration file (`angular.json`) or with a named alternative configuration.\nA \"development\" configuration is created by default when you use the CLI to create the project, and you can use that configuration by specifying the `--configuration development`.\n\nThe configuration options generally correspond to the command options.\nYou can override individual configuration defaults by specifying the corresponding options on the command line.\nThe command can accept option names given in dash-case.\nNote that in the configuration file, you must specify names in camelCase.\n\nSome additional options can only be set through the configuration file,\neither by direct editing or with the `ng config` command.\nThese include `assets`, `styles`, and `scripts` objects that provide runtime-global resources to include in the project.\nResources in CSS, such as images and fonts, are automatically written and fingerprinted at the root of the output folder.\n\nFor further details, see [Workspace Configuration](guide/workspace-config).\n",
+ "longDescription": "The command can be used to build a project of type \"application\" or \"library\".\nWhen used to build a library, a different builder is invoked, and only the `ts-config`, `configuration`, and `watch` options are applied.\nAll other options apply only to building applications.\n\nThe application builder uses the [esbuild](https://esbuild.github.io/) build tool, with default configuration options specified in the workspace configuration file (`angular.json`) or with a named alternative configuration.\nA \"development\" configuration is created by default when you use the CLI to create the project, and you can use that configuration by specifying the `--configuration development`.\n\nThe configuration options generally correspond to the command options.\nYou can override individual configuration defaults by specifying the corresponding options on the command line.\nThe command can accept option names given in dash-case.\nNote that in the configuration file, you must specify names in camelCase.\n\nSome additional options can only be set through the configuration file,\neither by direct editing or with the `ng config` command.\nThese include `assets`, `styles`, and `scripts` objects that provide runtime-global resources to include in the project.\nResources in CSS, such as images and fonts, are automatically written and fingerprinted at the root of the output folder.\n\nFor further details, see [Workspace Configuration](guide/workspace-config).\n",
"aliases": [
"b"
],
@@ -12,7 +12,7 @@
{
"name": "allowed-common-js-dependencies",
"type": "array",
- "description": "A list of CommonJS packages that are allowed to be used without a build time warning."
+ "description": "A list of CommonJS or AMD packages that are allowed to be used without a build time warning. Use `'*'` to allow all."
},
{
"name": "aot",
diff --git a/aio/content/cli/help/update.json b/aio/content/cli/help/update.json
index e34fd16d8e293..7534ebc78c988 100644
--- a/aio/content/cli/help/update.json
+++ b/aio/content/cli/help/update.json
@@ -31,7 +31,7 @@
{
"name": "from",
"type": "string",
- "description": "Version from which to migrate from. Only available with a single package being updated, and only with 'migrate-only'."
+ "description": "Version from which to migrate from. Only available when a single package is updated, and only with 'migrate-only'."
},
{
"name": "help",
@@ -46,7 +46,7 @@
{
"name": "name",
"type": "string",
- "description": "The name of the migration to run. Only available with a single package being updated, and only with 'migrate-only' option."
+ "description": "The name of the migration to run. Only available when a single package is updated."
},
{
"name": "next",
@@ -71,7 +71,7 @@
{
"name": "to",
"type": "string",
- "description": "Version up to which to apply migrations. Only available with a single package being updated, and only with 'migrate-only' option. Requires 'from' to be specified. Default to the installed version detected."
+ "description": "Version up to which to apply migrations. Only available when a single package is updated, and only with 'migrate-only' option. Requires 'from' to be specified. Default to the installed version detected."
},
{
"name": "verbose",
diff --git a/aio/content/guide/app-shell.md b/aio/content/guide/app-shell.md
index 0d729b174af2c..8a274c597991e 100644
--- a/aio/content/guide/app-shell.md
+++ b/aio/content/guide/app-shell.md
@@ -7,17 +7,17 @@ This gives users a meaningful first paint of your application that appears quick
Learn more in [The App Shell Model](https://developers.google.com/web/fundamentals/architecture/app-shell).
-## Step 1: Prepare the application
+## Step 1: Generate an application
Do this with the following Angular CLI command:
-ng new my-app --routing
+ng new my-app
-For an existing application, you have to manually add the `RouterModule` and defining a `` within your application.
+For an existing application, you have to manually add the `Router` and defining a `` within your application.
## Step 2: Create the application shell
@@ -31,62 +31,28 @@ ng generate app-shell
For more information about this command, see [App shell command](cli/generate#app-shell-command).
-After running this command you can see that the `angular.json` configuration file has been updated to add two new targets, with a few other changes.
-
-
-
-"server": {
- "builder": "@angular-devkit/build-angular:server",
- "defaultConfiguration": "production",
- "options": {
- "outputPath": "dist/my-app/server",
- "main": "src/main.server.ts",
- "tsConfig": "tsconfig.server.json"
- },
- "configurations": {
- "development": {
- "outputHashing": "none",
- },
- "production": {
- "outputHashing": "media",
- "fileReplacements": [
- {
- "replace": "src/environments/environment.ts",
- "with": "src/environments/environment.prod.ts"
- }
- ],
- "sourceMap": false,
- "optimization": true
- }
- }
-},
-"app-shell": {
- "builder": "@angular-devkit/build-angular:app-shell",
- "defaultConfiguration": "production",
- "options": {
- "route": "shell"
- },
- "configurations": {
- "development": {
- "browserTarget": "my-app:build:development",
- "serverTarget": "my-app:server:development",
- },
- "production": {
- "browserTarget": "my-app:build:production",
- "serverTarget": "my-app:server:production"
- }
- }
-}
+The command updates the application code and adds extra files to the project structure.
+
+
+
+ src
+ ├── app
+ │ ├── app.config.server.ts # server application configuration
+ │ └── app-shell # app-shell component
+ │ ├── app-shell.component.html
+ │ ├── app-shell.component.scss
+ │ ├── app-shell.component.spec.ts
+ │ └── app-shell.component.ts
+ └── main.server.ts # main server application bootstrapping
-## Step 3: Verify the application is built with the shell content
-Use the Angular CLI to build the `app-shell` target.
+## Step 3: Verify the application is built with the shell content
-ng run my-app:app-shell:development
+ng build --configuration=development
@@ -94,7 +60,7 @@ Or to use the production configuration.
-ng run my-app:app-shell:production
+ng build
@@ -107,4 +73,4 @@ Look for default text `app-shell works!` to show that the application shell rout
-@reviewed 2022-02-28
+@reviewed 2023-10-20
diff --git a/aio/content/guide/prerendering.md b/aio/content/guide/prerendering.md
index b44fceb2870db..1732290db0306 100644
--- a/aio/content/guide/prerendering.md
+++ b/aio/content/guide/prerendering.md
@@ -1,63 +1,65 @@
-# Prerendering static pages
+# Prerendering (SSG)
-Angular Universal lets you prerender the pages of your application.
-Prerendering is the process where a dynamic page is processed at build time generating static HTML.
+Prerendering, commonly referred to as Static Site Generation (SSG), represents the method by which pages are rendered to static HTML files during the build process.
+
+ndering maintains the same performance benefits of [server-side rendering (SSR)](/guide/universal/#why-do-it). But achieves a reduced Time to First Byte (TTFB), ultimately enhancing user experience. The key distinction lies in its approach that pages are served as static content, and there is no request-based rendering.
+
+When the data necessary for server-side rendering remains consistent across all users, the strategy of prerendering emerges as a valuable alternative. Rather than dynamically rendering pages for each user request, prerendering takes a proactive approach by rendering them in advance.
## How to prerender a page
-To prerender a static page make sure to add Server-Side Rendering (SSR) capabilities to your application.
-For more information see the [universal guide](guide/universal).
-Once SSR is added, run the following command:
+To prerender a static page, add SSR capabilities to your application with the following Angular CLI command:
-npm run prerender
+ng add @angular/ssr
-### Build options for prerendering
+
-When you add prerendering to your application, the following build options are available:
+To create an application with prerendering capabilities from the beginning use the [ng new --ssr](cli/new) command.
-| Options | Details |
-|:--- |:--- |
-| `browserTarget` | Specify the target to build. |
-| `serverTarget` | Specify the Server target to use for prerendering the application. |
-| `routes` | Define an array of extra routes to prerender. |
-| `guessRoutes` | Whether builder should extract routes and guess which paths to render. Defaults to `true`. |
-| `routesFile` | Specify a file that contains a list of all routes to prerender, separated by newlines. This option is useful if you have a large number of routes. |
-| `numProcesses` | Specify the number of CPUs to be used while running the prerendering command. |
+
-### Prerendering dynamic routes
+Once SSR is added, you can generate the static pages by running the build command:
-You can prerender dynamic routes.
-An example of a dynamic route is `product/:id`, where `id` is dynamically provided.
+
-To prerender dynamic routes, choose one from the following options:
+ng build
-* Provide extra routes in the command line
-* Provide routes using a file
-* Prerender specific routes
+
-#### Provide extra routes in the command line
+### Build options for prerender
-While running the prerender command, you can provide extra routes.
-For example:
+The application builder `prerender` option can be either a Boolean or an Object for more fine-tuned configuration.
+When the option is `false`, no prerendering is done. When it's is `true`, all options use the default value. When it's is an Object, each option can be individually configured.
-
+| Options | Details | Default Value |
+| :--------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------ |
+| `discoverRoutes` | Whether the builder should process the Angular Router configuration to find all unparameterized routes and prerender them. | `true` |
+| `routesFile` | The path to a file that contains a list of all routes to prerender, separated by newlines. This option is useful if you want to prerender routes with parameterized URLs. | |
-ng run <app-name>:prerender --routes /product/1 /product/2
+
-
+…
+"architect": {
+ "build": {
+ "builder": "@angular-devkit/build-angular:application",
+ "options": {
+ "prerender": {
+ "discoverRoutes": false
+ },
+ },
+…
-#### Providing extra routes using a file
+
-You can provide routes using a file to create static pages.
-This method is useful if you have a large number of routes to create. For example, product details for an e-commerce application, which might come from an external source, like a Database or Content Management System (CMS).
+### Prerendering parameterized routes
-To provide routes using a file, use the `--routes-file` option with the name of a `.txt` file containing the routes.
+You can prerender parameterized routes using the `routesFile` option. An example of a parameterized route is `product/:id`, where `id` is dynamically provided. To specify these routes, they should be listed in a text file, with each route on a separate line.
-For example, you could create this file by using a script to extract IDs from a database and save them to a `routes.txt` file:
+For an app with a large number of parameterized routes, consider generating this file using a script before running `ng build`.
@@ -66,24 +68,24 @@ For example, you could create this file by using a script to extract IDs from a
-When your `.txt` file is ready, run the following command to prerender the static files with dynamic values:
+With routes specified in the `routes.txt` file, use the `routesFile` option to configure the builder to prerender the product routes.
-
+
-ng run <app-name>:prerender --routes-file routes.txt
+…
+"architect": {
+ "build": {
+ "builder": "@angular-devkit/build-angular:application",
+ "options": {
+ "prerender": {
+ "routesFile": "routes.txt"
+ },
+ },
+…
-#### Prerendering specific routes
-
-You can also pass specific routes to the prerender command.
-If you choose this option, make sure to turn off the `guessRoutes` option.
-
-
-
-ng run <app-name>:prerender --no-guess-routes --routes /product/1 /product/2
-
-
+This configures `ng build` to prerender `/products/1` and `/products/555` at build time.
@@ -91,4 +93,4 @@ ng run <app-name>:prerender --no-guess-routes --routes /product/1 /product
-@reviewed 2022-02-28
+@reviewed 2023-10-23
diff --git a/aio/src/app/app.component.html b/aio/src/app/app.component.html
index 1cfca34f6e661..8fb6fd2372ac1 100644
--- a/aio/src/app/app.component.html
+++ b/aio/src/app/app.component.html
@@ -11,11 +11,11 @@
-
-
+
+
- Help Angular by taking a quick survey!
- Go to survey
+ We have a lot to share, tune in on November 6th!
+ Join us live
diff --git a/aio/yarn.lock b/aio/yarn.lock
index da399e151069a..a7af322e99dc8 100644
--- a/aio/yarn.lock
+++ b/aio/yarn.lock
@@ -544,12 +544,7 @@
"@babel/highlight" "^7.22.13"
chalk "^2.4.2"
-"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9":
- version "7.22.20"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0"
- integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==
-
-"@babel/compat-data@^7.23.2":
+"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.2":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc"
integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==
@@ -596,7 +591,7 @@
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/core@7.23.2":
+"@babel/core@7.23.2", "@babel/core@^7.12.3", "@babel/core@^7.16.0":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94"
integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==
@@ -617,28 +612,7 @@
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/core@^7.12.3", "@babel/core@^7.16.0":
- version "7.22.20"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.20.tgz#e3d0eed84c049e2a2ae0a64d27b6a37edec385b7"
- integrity sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==
- dependencies:
- "@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.22.13"
- "@babel/generator" "^7.22.15"
- "@babel/helper-compilation-targets" "^7.22.15"
- "@babel/helper-module-transforms" "^7.22.20"
- "@babel/helpers" "^7.22.15"
- "@babel/parser" "^7.22.16"
- "@babel/template" "^7.22.15"
- "@babel/traverse" "^7.22.20"
- "@babel/types" "^7.22.19"
- convert-source-map "^1.7.0"
- debug "^4.1.0"
- gensync "^1.0.0-beta.2"
- json5 "^2.2.3"
- semver "^6.3.1"
-
-"@babel/generator@7.22.15", "@babel/generator@^7.22.15":
+"@babel/generator@7.22.15":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339"
integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==
@@ -648,7 +622,7 @@
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
-"@babel/generator@7.23.0", "@babel/generator@^7.23.0":
+"@babel/generator@7.23.0", "@babel/generator@^7.22.15", "@babel/generator@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420"
integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==
@@ -707,17 +681,6 @@
regexpu-core "^5.3.1"
semver "^6.3.1"
-"@babel/helper-define-polyfill-provider@^0.4.2":
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7"
- integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==
- dependencies:
- "@babel/helper-compilation-targets" "^7.22.6"
- "@babel/helper-plugin-utils" "^7.22.5"
- debug "^4.1.1"
- lodash.debounce "^4.0.8"
- resolve "^1.14.2"
-
"@babel/helper-define-polyfill-provider@^0.4.3":
version "0.4.3"
resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba"
@@ -734,15 +697,7 @@
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
-"@babel/helper-function-name@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be"
- integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==
- dependencies:
- "@babel/template" "^7.22.5"
- "@babel/types" "^7.22.5"
-
-"@babel/helper-function-name@^7.23.0":
+"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
@@ -758,11 +713,11 @@
"@babel/types" "^7.22.5"
"@babel/helper-member-expression-to-functions@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz#b95a144896f6d491ca7863576f820f3628818621"
- integrity sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366"
+ integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==
dependencies:
- "@babel/types" "^7.22.15"
+ "@babel/types" "^7.23.0"
"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5":
version "7.22.15"
@@ -771,18 +726,7 @@
dependencies:
"@babel/types" "^7.22.15"
-"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.17", "@babel/helper-module-transforms@^7.22.20", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9":
- version "7.22.20"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz#da9edc14794babbe7386df438f3768067132f59e"
- integrity sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==
- dependencies:
- "@babel/helper-environment-visitor" "^7.22.20"
- "@babel/helper-module-imports" "^7.22.15"
- "@babel/helper-simple-access" "^7.22.5"
- "@babel/helper-split-export-declaration" "^7.22.6"
- "@babel/helper-validator-identifier" "^7.22.20"
-
-"@babel/helper-module-transforms@^7.23.0":
+"@babel/helper-module-transforms@^7.22.17", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e"
integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==
@@ -849,7 +793,7 @@
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
-"@babel/helper-validator-identifier@^7.22.19", "@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.22.5":
+"@babel/helper-validator-identifier@^7.22.20":
version "7.22.20"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
@@ -868,25 +812,7 @@
"@babel/template" "^7.22.15"
"@babel/types" "^7.22.19"
-"@babel/helpers@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1"
- integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==
- dependencies:
- "@babel/template" "^7.22.15"
- "@babel/traverse" "^7.22.15"
- "@babel/types" "^7.22.15"
-
-"@babel/helpers@^7.23.0":
- version "7.23.1"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15"
- integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==
- dependencies:
- "@babel/template" "^7.22.15"
- "@babel/traverse" "^7.23.0"
- "@babel/types" "^7.23.0"
-
-"@babel/helpers@^7.23.2":
+"@babel/helpers@^7.22.15", "@babel/helpers@^7.23.0", "@babel/helpers@^7.23.2":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767"
integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==
@@ -904,12 +830,7 @@
chalk "^2.4.2"
js-tokens "^4.0.0"
-"@babel/parser@^7.14.7", "@babel/parser@^7.20.15", "@babel/parser@^7.22.15", "@babel/parser@^7.22.16":
- version "7.22.16"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95"
- integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==
-
-"@babel/parser@^7.23.0":
+"@babel/parser@^7.14.7", "@babel/parser@^7.20.15", "@babel/parser@^7.22.15", "@babel/parser@^7.22.16", "@babel/parser@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
@@ -1079,7 +1000,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-async-generator-functions@7.22.15", "@babel/plugin-transform-async-generator-functions@^7.22.15":
+"@babel/plugin-transform-async-generator-functions@7.22.15":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3"
integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==
@@ -1089,7 +1010,7 @@
"@babel/helper-remap-async-to-generator" "^7.22.9"
"@babel/plugin-syntax-async-generators" "^7.8.4"
-"@babel/plugin-transform-async-generator-functions@7.23.2", "@babel/plugin-transform-async-generator-functions@^7.23.2":
+"@babel/plugin-transform-async-generator-functions@7.23.2", "@babel/plugin-transform-async-generator-functions@^7.22.15", "@babel/plugin-transform-async-generator-functions@^7.23.2":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz#054afe290d64c6f576f371ccc321772c8ea87ebb"
integrity sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==
@@ -1115,14 +1036,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-block-scoping@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz#494eb82b87b5f8b1d8f6f28ea74078ec0a10a841"
- integrity sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.22.5"
-
-"@babel/plugin-transform-block-scoping@^7.23.0":
+"@babel/plugin-transform-block-scoping@^7.22.15", "@babel/plugin-transform-block-scoping@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022"
integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==
@@ -1169,14 +1083,7 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/template" "^7.22.5"
-"@babel/plugin-transform-destructuring@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz#e7404ea5bb3387073b9754be654eecb578324694"
- integrity sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==
- dependencies:
- "@babel/helper-plugin-utils" "^7.22.5"
-
-"@babel/plugin-transform-destructuring@^7.23.0":
+"@babel/plugin-transform-destructuring@^7.22.15", "@babel/plugin-transform-destructuring@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c"
integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==
@@ -1268,15 +1175,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-modules-amd@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526"
- integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==
- dependencies:
- "@babel/helper-module-transforms" "^7.22.5"
- "@babel/helper-plugin-utils" "^7.22.5"
-
-"@babel/plugin-transform-modules-amd@^7.23.0":
+"@babel/plugin-transform-modules-amd@^7.22.5", "@babel/plugin-transform-modules-amd@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88"
integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==
@@ -1284,16 +1183,7 @@
"@babel/helper-module-transforms" "^7.23.0"
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/plugin-transform-modules-commonjs@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz#b11810117ed4ee7691b29bd29fd9f3f98276034f"
- integrity sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==
- dependencies:
- "@babel/helper-module-transforms" "^7.22.15"
- "@babel/helper-plugin-utils" "^7.22.5"
- "@babel/helper-simple-access" "^7.22.5"
-
-"@babel/plugin-transform-modules-commonjs@^7.23.0":
+"@babel/plugin-transform-modules-commonjs@^7.22.15", "@babel/plugin-transform-modules-commonjs@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481"
integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==
@@ -1302,17 +1192,7 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/helper-simple-access" "^7.22.5"
-"@babel/plugin-transform-modules-systemjs@^7.22.11":
- version "7.22.11"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1"
- integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==
- dependencies:
- "@babel/helper-hoist-variables" "^7.22.5"
- "@babel/helper-module-transforms" "^7.22.9"
- "@babel/helper-plugin-utils" "^7.22.5"
- "@babel/helper-validator-identifier" "^7.22.5"
-
-"@babel/plugin-transform-modules-systemjs@^7.23.0":
+"@babel/plugin-transform-modules-systemjs@^7.22.11", "@babel/plugin-transform-modules-systemjs@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160"
integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==
@@ -1388,16 +1268,7 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
-"@babel/plugin-transform-optional-chaining@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz#d7a5996c2f7ca4ad2ad16dbb74444e5c4385b1ba"
- integrity sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==
- dependencies:
- "@babel/helper-plugin-utils" "^7.22.5"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
- "@babel/plugin-syntax-optional-chaining" "^7.8.3"
-
-"@babel/plugin-transform-optional-chaining@^7.23.0":
+"@babel/plugin-transform-optional-chaining@^7.22.15", "@babel/plugin-transform-optional-chaining@^7.23.0":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158"
integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==
@@ -1731,21 +1602,21 @@
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
"@babel/runtime-corejs3@^7.16.5":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.15.tgz#7aeb9460598a997b0fe74982a5b02fb9e5d264d9"
- integrity sha512-SAj8oKi8UogVi6eXQXKNPu8qZ78Yzy7zawrlTr0M+IuW/g8Qe9gVDhGcF9h1S69OyACpYoLxEzpjs1M15sI5wQ==
+ version "7.23.2"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.2.tgz#a5cd9d8b408fb946b2f074b21ea40c04e516795c"
+ integrity sha512-54cIh74Z1rp4oIjsHjqN+WM4fMyCBYe+LpZ9jWm51CZ1fbH3SkAzQD/3XLoNkjbJ7YEmjobLXyvQrFypRHOrXw==
dependencies:
core-js-pure "^3.30.2"
regenerator-runtime "^0.14.0"
-"@babel/runtime@7.22.15", "@babel/runtime@^7.8.4":
+"@babel/runtime@7.22.15":
version "7.22.15"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8"
integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==
dependencies:
regenerator-runtime "^0.14.0"
-"@babel/runtime@7.23.2":
+"@babel/runtime@7.23.2", "@babel/runtime@^7.8.4":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885"
integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==
@@ -1761,39 +1632,7 @@
"@babel/parser" "^7.22.15"
"@babel/types" "^7.22.15"
-"@babel/traverse@^7.22.15", "@babel/traverse@^7.22.17", "@babel/traverse@^7.22.20":
- version "7.22.20"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.20.tgz#db572d9cb5c79e02d83e5618b82f6991c07584c9"
- integrity sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==
- dependencies:
- "@babel/code-frame" "^7.22.13"
- "@babel/generator" "^7.22.15"
- "@babel/helper-environment-visitor" "^7.22.20"
- "@babel/helper-function-name" "^7.22.5"
- "@babel/helper-hoist-variables" "^7.22.5"
- "@babel/helper-split-export-declaration" "^7.22.6"
- "@babel/parser" "^7.22.16"
- "@babel/types" "^7.22.19"
- debug "^4.1.0"
- globals "^11.1.0"
-
-"@babel/traverse@^7.23.0":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53"
- integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==
- dependencies:
- "@babel/code-frame" "^7.22.13"
- "@babel/generator" "^7.23.0"
- "@babel/helper-environment-visitor" "^7.22.20"
- "@babel/helper-function-name" "^7.23.0"
- "@babel/helper-hoist-variables" "^7.22.5"
- "@babel/helper-split-export-declaration" "^7.22.6"
- "@babel/parser" "^7.23.0"
- "@babel/types" "^7.23.0"
- debug "^4.1.0"
- globals "^11.1.0"
-
-"@babel/traverse@^7.23.2":
+"@babel/traverse@^7.22.17", "@babel/traverse@^7.23.0", "@babel/traverse@^7.23.2":
version "7.23.2"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8"
integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==
@@ -1809,16 +1648,7 @@
debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.5", "@babel/types@^7.4.4":
- version "7.22.19"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.19.tgz#7425343253556916e440e662bb221a93ddb75684"
- integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==
- dependencies:
- "@babel/helper-string-parser" "^7.22.5"
- "@babel/helper-validator-identifier" "^7.22.19"
- to-fast-properties "^2.0.0"
-
-"@babel/types@^7.22.19", "@babel/types@^7.23.0":
+"@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4":
version "7.23.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb"
integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==
@@ -1911,6 +1741,11 @@
resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
+"@colors/colors@1.6.0", "@colors/colors@^1.6.0":
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0"
+ integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==
+
"@cspotcode/source-map-support@^0.8.0":
version "0.8.1"
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
@@ -2279,9 +2114,9 @@
eslint-visitor-keys "^3.3.0"
"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1":
- version "4.8.1"
- resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c"
- integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.1.tgz#449dfa81a57a1d755b09aa58d826c1262e4283b4"
+ integrity sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==
"@eslint/eslintrc@^2.1.2":
version "2.1.2"
@@ -2327,15 +2162,15 @@
integrity sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==
"@google-cloud/pubsub@^3.0.1":
- version "3.7.3"
- resolved "https://registry.yarnpkg.com/@google-cloud/pubsub/-/pubsub-3.7.3.tgz#4ec354fab0e6492654b4365024e0b15def23a08b"
- integrity sha512-ZRDC4g7tpIJ8fkAp4MiU+tDfousM/q6pXK6ytFn0cbYEdNQuWOf4wqopNYMOUJ+AIjaTbgmNw77dStOKTc9Acg==
+ version "3.7.5"
+ resolved "https://registry.yarnpkg.com/@google-cloud/pubsub/-/pubsub-3.7.5.tgz#3fed656b7e7ea3a4618d5590004f08321a1389b9"
+ integrity sha512-4Qrry4vIToth5mqduVslltWVsyb7DR8OhnkBA3F7XiE0jgQsiuUfwp/RB2F559aXnRbwcfmjvP4jSuEaGcjrCQ==
dependencies:
"@google-cloud/paginator" "^4.0.0"
"@google-cloud/precise-date" "^3.0.0"
"@google-cloud/projectify" "^3.0.0"
"@google-cloud/promisify" "^2.0.0"
- "@opentelemetry/api" "^1.0.0"
+ "@opentelemetry/api" "^1.6.0"
"@opentelemetry/semantic-conventions" "~1.3.0"
"@types/duplexify" "^3.6.0"
"@types/long" "^4.0.0"
@@ -2454,9 +2289,9 @@
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
- version "0.3.19"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811"
- integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==
+ version "0.3.20"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f"
+ integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==
dependencies:
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
@@ -3254,10 +3089,11 @@
fastq "^1.6.0"
"@npmcli/agent@^2.0.0":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.1.1.tgz#31095663b8feef27ec3eccd5254a35b8fc70353a"
- integrity sha512-6RlbiOAi6L6uUYF4/CDEkDZQnKw0XDsFJVrEpnib8rAx2WRMOsUyAdgnvDpX/fdkDWxtqE+NHwF465llI2wR0g==
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.0.tgz#e81f00fdb2a670750ff7731bbefb47ecbf0ccf44"
+ integrity sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==
dependencies:
+ agent-base "^7.1.0"
http-proxy-agent "^7.0.0"
https-proxy-agent "^7.0.1"
lru-cache "^10.0.1"
@@ -3386,7 +3222,7 @@
resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.2.2.tgz#0afbeb2133613a5a3b0083e18a250472ccf45932"
integrity sha512-liHtyVVOttcqHIV3Xrg/1AJzEgfiOCeqJsleHXHGgPr1fxPx7SIZaa3/QnDY1lNMN+t6Gvj0/r2Ba3iuptYD3Q==
-"@opentelemetry/api@^1.0.0":
+"@opentelemetry/api@^1.6.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.6.0.tgz#de2c6823203d6f319511898bb5de7e70f5267e19"
integrity sha512-OWlrQAnWn9577PhVgqjUvMr1pg57Bc4jv0iL4w0PRuOSRvq67rvHW9Ie/dZVMvCzhSCB+UxhcY/PmCmFj33Q+g==
@@ -3675,24 +3511,24 @@
integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==
"@types/body-parser@*":
- version "1.19.3"
- resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.3.tgz#fb558014374f7d9e56c8f34bab2042a3a07d25cd"
- integrity sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==
+ version "1.19.4"
+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.4.tgz#78ad68f1f79eb851aa3634db0c7f57f6f601b462"
+ integrity sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==
dependencies:
"@types/connect" "*"
"@types/node" "*"
"@types/bonjour@^3.5.9":
- version "3.5.11"
- resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.11.tgz#fbaa46a1529ea5c5e46cde36e4be6a880db55b84"
- integrity sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg==
+ version "3.5.12"
+ resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.12.tgz#49badafb988e6c433ca675a5fd769b93b7649fc8"
+ integrity sha512-ky0kWSqXVxSqgqJvPIkgFkcn4C8MnRog308Ou8xBBIVo39OmUFy+jqNe0nPwLCDFxUpmT9EvT91YzOJgkDRcFg==
dependencies:
"@types/node" "*"
"@types/browser-sync@^2.26.3":
- version "2.27.1"
- resolved "https://registry.yarnpkg.com/@types/browser-sync/-/browser-sync-2.27.1.tgz#e6147254d020e600d1382fc6c4fd9243231ed0ca"
- integrity sha512-p/qAU+3dqq/CqobNiiZkIsernNfQe/35QEtor8Oae/WWgMLLhceFogCaAMe7pO4T8Z5WL/Co522YBo2sk/I7AQ==
+ version "2.27.3"
+ resolved "https://registry.yarnpkg.com/@types/browser-sync/-/browser-sync-2.27.3.tgz#bfd0eb70f49d71b80048ee3929a3a85959c19f6a"
+ integrity sha512-AG4+p6Wfg99BtiGTBIWN4u6JHm0nEG74krPU06pWoCFnMhNcpLfurfg5zcPUe8tNqhxJ3ZppZ6D5vxq+CCqbGQ==
dependencies:
"@types/micromatch" "^2"
"@types/node" "*"
@@ -3700,17 +3536,17 @@
chokidar "^3.0.0"
"@types/connect-history-api-fallback@^1.3.5":
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz#6e5e3602d93bda975cebc3449e1a318340af9e20"
- integrity sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw==
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.2.tgz#acf51e088b3bb6507f7b093bd2b0de20940179cc"
+ integrity sha512-gX2j9x+NzSh4zOhnRPSdPPmTepS4DfxES0AvIFv3jGv5QyeAJf6u6dY5/BAoAJU9Qq1uTvwOku8SSC2GnCRl6Q==
dependencies:
"@types/express-serve-static-core" "*"
"@types/node" "*"
"@types/connect@*":
- version "3.4.36"
- resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab"
- integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==
+ version "3.4.37"
+ resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.37.tgz#c66a96689fd3127c8772eb3e9e5c6028ec1a9af5"
+ integrity sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==
dependencies:
"@types/node" "*"
@@ -3720,44 +3556,44 @@
integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==
"@types/cors@^2.8.12":
- version "2.8.14"
- resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.14.tgz#94eeb1c95eda6a8ab54870a3bf88854512f43a92"
- integrity sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==
+ version "2.8.15"
+ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.15.tgz#eb143aa2f8807ddd78e83cbff141bbedd91b60ee"
+ integrity sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==
dependencies:
"@types/node" "*"
"@types/duplexify@^3.6.0":
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/@types/duplexify/-/duplexify-3.6.1.tgz#5685721cf7dc4a21b6f0e8a8efbec6b4d2fbafad"
- integrity sha512-n0zoEj/fMdMOvqbHxmqnza/kXyoGgJmEpsXjpP+gEqE1Ye4yNqc7xWipKnUoMpWhMuzJQSfK2gMrwlElly7OGQ==
+ version "3.6.3"
+ resolved "https://registry.yarnpkg.com/@types/duplexify/-/duplexify-3.6.3.tgz#42b1716c5d52a42ba9072696c0d33ca0a9bffd6d"
+ integrity sha512-KE0Yb3JraglJMB53+A/RMXbd9w//pQfiSqkrsoAxKcNOEIe1EHfEgbvoi2lkk2AvhhJtplugJSB2Mptc3DZMNA==
dependencies:
"@types/node" "*"
"@types/eslint-scope@^3.7.3":
- version "3.7.4"
- resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
- integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==
+ version "3.7.6"
+ resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.6.tgz#585578b368ed170e67de8aae7b93f54a1b2fdc26"
+ integrity sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ==
dependencies:
"@types/eslint" "*"
"@types/estree" "*"
"@types/eslint@*":
- version "8.44.2"
- resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.2.tgz#0d21c505f98a89b8dd4d37fa162b09da6089199a"
- integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==
+ version "8.44.5"
+ resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.5.tgz#24d7f3b07aff47a13b570efd5c52d96f38cd352e"
+ integrity sha512-Ol2eio8LtD/tGM4Ga7Jb83NuFwEv3NqvssSlifXL9xuFpSyQZw0ecmm2Kux6iU0KxQmp95hlPmGCzGJ0TCFeRA==
dependencies:
"@types/estree" "*"
"@types/json-schema" "*"
"@types/estree@*", "@types/estree@^1.0.0":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
- integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.3.tgz#2be19e759a3dd18c79f9f436bd7363556c1a73dd"
+ integrity sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==
"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33":
- version "4.17.36"
- resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz#baa9022119bdc05a4adfe740ffc97b5f9360e545"
- integrity sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==
+ version "4.17.38"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.38.tgz#d9c1d3a134a1226d84ec8e40c182f960f969d5a4"
+ integrity sha512-hXOtc0tuDHZPFwwhuBJXPbjemWtXnJjbvuuyNH2Y5Z6in+iXc63c4eXYDc7GGGqHy+iwYqAJMdaItqdnbcBKmg==
dependencies:
"@types/node" "*"
"@types/qs" "*"
@@ -3765,9 +3601,9 @@
"@types/send" "*"
"@types/express@*", "@types/express@^4.17.13":
- version "4.17.17"
- resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4"
- integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==
+ version "4.17.20"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.20.tgz#e7c9b40276d29e38a4e3564d7a3d65911e2aa433"
+ integrity sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw==
dependencies:
"@types/body-parser" "*"
"@types/express-serve-static-core" "^4.17.33"
@@ -3783,36 +3619,36 @@
"@types/node" "*"
"@types/http-errors@*":
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.2.tgz#a86e00bbde8950364f8e7846687259ffcd96e8c2"
- integrity sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.3.tgz#c54e61f79b3947d040f150abd58f71efb422ff62"
+ integrity sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==
"@types/http-proxy@^1.17.8":
- version "1.17.12"
- resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.12.tgz#86e849e9eeae0362548803c37a0a1afc616bd96b"
- integrity sha512-kQtujO08dVtQ2wXAuSFfk9ASy3sug4+ogFR8Kd8UgP8PEuc1/G/8yjYRmp//PcDNJEUKOza/MrQu15bouEUCiw==
+ version "1.17.13"
+ resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.13.tgz#dd3a4da550580eb0557d4c7128a2ff1d1a38d465"
+ integrity sha512-GkhdWcMNiR5QSQRYnJ+/oXzu0+7JJEPC8vkWXK351BkhjraZF+1W13CUYARUvX9+NqIU2n6YHA4iwywsc/M6Sw==
dependencies:
"@types/node" "*"
"@types/is-windows@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@types/is-windows/-/is-windows-1.0.0.tgz#1011fa129d87091e2f6faf9042d6704cdf2e7be0"
- integrity sha512-tJ1rq04tGKuIJoWIH0Gyuwv4RQ3+tIu7wQrC0MV47raQ44kIzXSSFKfrxFUOWVRvesoF7mrTqigXmqoZJsXwTg==
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@types/is-windows/-/is-windows-1.0.1.tgz#ed99ac3cb86a45796022c52e79c61974af9ffd8b"
+ integrity sha512-5ca2iU1+JNRb0dOFFDXQ3bukIzkVM8Ft4Wn5rDj9y4tUOtE3DOdfrMH1qegdvx08VU2RRCSyQ7beTZ/WKF0BgQ==
"@types/istanbul-lib-coverage@^2.0.1":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
- integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#fdfdd69fa16d530047d9963635bd77c71a08c068"
+ integrity sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==
"@types/jasmine@~5.1.0":
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.0.tgz#581b2f7393942a56acd3542fe168c803d7d588d6"
- integrity sha512-XOV0KsqXNX2gUSqk05RWeolIMgaAQ7+l/ozOBoQ8NGwLg+E7J9vgagODtNgfim4jCzEUP0oJ3gnXeC+Zv+Xi1A==
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.1.tgz#7d2a2a983e1e822858ea9e30d90e11a3fe408fc0"
+ integrity sha512-qL4GoZHHJl1JQ0vK31OtXMfkfGxYJnysmYz9kk0E8j5W96ThKykBF90uD3PcVmQUAzulbsaus2eFiBhCH5itfw==
"@types/json-schema@*", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
- version "7.0.13"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85"
- integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==
+ version "7.0.14"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1"
+ integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==
"@types/json5@^0.0.29":
version "0.0.29"
@@ -3820,9 +3656,9 @@
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
"@types/linkify-it@*":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.3.tgz#15a0712296c5041733c79efe233ba17ae5a7587b"
- integrity sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.4.tgz#def6a9bb0ce78140860602f16ace37a9997f086a"
+ integrity sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==
"@types/long@^4.0.0":
version "4.0.2"
@@ -3830,9 +3666,9 @@
integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==
"@types/lunr@^2.3.3":
- version "2.3.5"
- resolved "https://registry.yarnpkg.com/@types/lunr/-/lunr-2.3.5.tgz#de3a04b085477ce1d7519c8cbdceed92f9310593"
- integrity sha512-C4xYh7A4FRKg70AWJCe27oJYVPhUlEY5MQ4dKbRR7G6Xsb2HiqO672yWHRvWxl8/h7IuISvwDjv88ECHUEsV2A==
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/@types/lunr/-/lunr-2.3.6.tgz#8b3e1b856094a1706d7c90975160f0afb2479da3"
+ integrity sha512-gNcIX3YUvGrfEtL98j/YjIMWqwThoJok3Vm4uqTRfg2xeAkIb1TT7eQrB20zzA/2mPG7XTkLPxLxkJIV1o/cVw==
"@types/markdown-it@^12.2.3":
version "12.2.3"
@@ -3843,38 +3679,38 @@
"@types/mdurl" "*"
"@types/marked@^5.0.1":
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/@types/marked/-/marked-5.0.1.tgz#15acd796d722b91bf00738c8c8539aaf5034f0c6"
- integrity sha512-Y3pAUzHKh605fN6fvASsz5FDSWbZcs/65Q6xYRmnIP9ZIYz27T4IOmXfH9gWJV1dpi7f1e7z7nBGUTx/a0ptpA==
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@types/marked/-/marked-5.0.2.tgz#ca6b0cd7a5c8799c8cd0963df0b3e1a9021dcdfa"
+ integrity sha512-OucS4KMHhFzhz27KxmWg7J+kIYqyqoW5kdIEI319hqARQQUTqhao3M/F+uFnDXD0Rg72iDDZxZNxq5gvctmLlg==
"@types/mdast@^3.0.0":
- version "3.0.12"
- resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.12.tgz#beeb511b977c875a5b0cc92eab6fcac2f0895514"
- integrity sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==
+ version "3.0.14"
+ resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.14.tgz#0735473a5b35be032b9f2685b7413cbab1b8a639"
+ integrity sha512-gVZ04PGgw1qLZKsnWnyFv4ORnaJ+DXLdHTVSFbU8yX6xZ34Bjg4Q32yPkmveUP1yItXReKfB0Aknlh/3zxTKAw==
dependencies:
"@types/unist" "^2"
"@types/mdurl@*":
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9"
- integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.4.tgz#574bfbec51eb41ab5f444116c8555bc4347feba5"
+ integrity sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==
"@types/micromatch@^2":
- version "2.3.31"
- resolved "https://registry.yarnpkg.com/@types/micromatch/-/micromatch-2.3.31.tgz#d13641cb6965294ed1b1d2ad561a331d6306962b"
- integrity sha512-17WSoNz/GKLSfcomM8cMoJJQG2cDKvsoDFTtbwjEMxcizGb0HT6EBRi8qR7NW+XSaVdxHzq/WV/TUOm5f/ksag==
+ version "2.3.33"
+ resolved "https://registry.yarnpkg.com/@types/micromatch/-/micromatch-2.3.33.tgz#0da66e90b706ae798ccea8b03cbb635869b0b266"
+ integrity sha512-jgUM0r/NgVdakSese7wLBk8dYZMUfJUMd3ByAiA1w4b+M3DNgdiqqK4Y4fdhDuTWY5CzxvUZzW6dceIGNrlVVg==
dependencies:
"@types/parse-glob" "*"
"@types/mime@*":
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10"
- integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.2.tgz#c1ae807f13d308ee7511a5b81c74f327028e66e8"
+ integrity sha512-Wj+fqpTLtTbG7c0tH47dkahefpLKEbB+xAZuLq7b4/IDHPl/n6VoXcyUQ2bypFlbSwvCr0y+bD4euTTqTJsPxQ==
"@types/mime@^1":
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
- integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.3.tgz#bbe64987e0eb05de150c305005055c7ad784a9ce"
+ integrity sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==
"@types/minimatch@^5.1.2":
version "5.1.2"
@@ -3882,9 +3718,11 @@
integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==
"@types/node@*", "@types/node@>=10.0.0", "@types/node@>=12.12.47", "@types/node@>=13.7.0":
- version "20.6.3"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.3.tgz#5b763b321cd3b80f6b8dde7a37e1a77ff9358dd9"
- integrity sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==
+ version "20.8.7"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.7.tgz#ad23827850843de973096edfc5abc9e922492a25"
+ integrity sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==
+ dependencies:
+ undici-types "~5.25.1"
"@types/node@16.10.9":
version "16.10.9"
@@ -3902,9 +3740,9 @@
integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==
"@types/parse-glob@*":
- version "3.0.29"
- resolved "https://registry.yarnpkg.com/@types/parse-glob/-/parse-glob-3.0.29.tgz#6a40ec7ebd2418ee69ee397e48e42169268a10bf"
- integrity sha512-OFwMPH5eJOhtwR92GMjTNWukaKTdWQC12cBgRvrTQl5CwhruSq6734wi1CTSh5Qjm/pMJWaKOOPKZOp6FpIkXQ==
+ version "3.0.31"
+ resolved "https://registry.yarnpkg.com/@types/parse-glob/-/parse-glob-3.0.31.tgz#92e77b8a062fc55989d479de5b9357e7ae7fdfcc"
+ integrity sha512-83YRiYrTOabm7i0bVYuXBgBTZR5acCBUgNmR4LEihR/vXvujTtiyRzWDTAMh7qicFqlhV+6ItebPRkf4yK64Xg==
"@types/q@^0.0.32":
version "0.0.32"
@@ -3912,14 +3750,14 @@
integrity sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==
"@types/qs@*":
- version "6.9.8"
- resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45"
- integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==
+ version "6.9.9"
+ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.9.tgz#66f7b26288f6799d279edf13da7ccd40d2fa9197"
+ integrity sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==
"@types/range-parser@*":
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
- integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.6.tgz#7cb33992049fd7340d5b10c0098e104184dfcd2a"
+ integrity sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==
"@types/retry@0.12.0":
version "0.12.0"
@@ -3935,82 +3773,82 @@
"@types/node" "*"
"@types/selenium-webdriver@^3.0.0":
- version "3.0.23"
- resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.23.tgz#59b96c11b63b74f88bdf7adfdf2018b6a844db8a"
- integrity sha512-f4lAmp7rmGgsTkRPjgHOpQumgpqjQ0RxbEkOwCwLVSsa5gCnni4GMBfqmN0nObFeDRZj/DTTsx99SOjOXRW2bQ==
+ version "3.0.24"
+ resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.24.tgz#788aac3b3ad788339c01e586fb0fa6ab15d3ee11"
+ integrity sha512-PKUsOV485ZiB466i6xuhpjiASvcC6+SSZqOwU7DIMn1as8DGrATWdMvjuG7scbyxk/e1SYwAzDB2LbobLxy0Qw==
"@types/selenium-webdriver@^4.0.18":
- version "4.1.16"
- resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.1.16.tgz#8438a3027c7905f516f7b2fbf85e7ded3763bc53"
- integrity sha512-ETje9rr7nTrD0r/mNnIuCAF7fAZ2xKE/1WyxXZZH9N9Cy2NKJTrpEd7SCdzuIlm/1iu1gjHCVbaDwT+MuDrVZg==
+ version "4.1.18"
+ resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.1.18.tgz#8c197a8b09a9116f2dcd7551235227e737b36235"
+ integrity sha512-oBh2f+bbspYPkZoexEIaU8tV6/DR4FBCcMT8vKlFn7yhUTxYzKLgugA2nO0G/hYrwJiHn3EF95+n/GrPdIV5wA==
dependencies:
"@types/ws" "*"
"@types/semver@^7.3.12":
- version "7.5.2"
- resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564"
- integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==
+ version "7.5.3"
+ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04"
+ integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==
"@types/send@*", "@types/send@^0.17.1":
- version "0.17.1"
- resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301"
- integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==
+ version "0.17.3"
+ resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.3.tgz#81b2ea5a3a18aad357405af2d643ccbe5a09020b"
+ integrity sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==
dependencies:
"@types/mime" "^1"
"@types/node" "*"
"@types/serve-index@^1.9.1":
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278"
- integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.3.tgz#af9403916eb6fbf7d6ec6f47b2a4c46eb3222cc9"
+ integrity sha512-4KG+yMEuvDPRrYq5fyVm/I2uqAJSAwZK9VSa+Zf+zUq9/oxSSvy3kkIqyL+jjStv6UCVi8/Aho0NHtB1Fwosrg==
dependencies:
"@types/express" "*"
"@types/serve-static@*", "@types/serve-static@^1.13.10":
- version "1.15.2"
- resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a"
- integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==
+ version "1.15.4"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.4.tgz#44b5895a68ca637f06c229119e1c774ca88f81b2"
+ integrity sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==
dependencies:
"@types/http-errors" "*"
"@types/mime" "*"
"@types/node" "*"
"@types/sockjs@^0.3.33":
- version "0.3.33"
- resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f"
- integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==
+ version "0.3.35"
+ resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.35.tgz#f4a568c73d2a8071944bd6ffdca0d4e66810cd21"
+ integrity sha512-tIF57KB+ZvOBpAQwSaACfEu7htponHXaFzP7RfKYgsOS0NoYnn+9+jzp7bbq4fWerizI3dTB4NfAZoyeQKWJLw==
dependencies:
"@types/node" "*"
"@types/tmp@^0.2.1":
- version "0.2.4"
- resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.4.tgz#1e26f791b94a95474f1f3322a721dfb065b876fb"
- integrity sha512-Vq3rwM+2KgiLacq68EjTJD9cuJ/ne5pXntWn8B8Rxj25SLkGAhCgooCZ1lhcIcV5OFveJ+s5Cqpi+XKfFM/xZA==
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.5.tgz#0f3a71d0a94cbd5de45b0aa641575dd503e43ed4"
+ integrity sha512-KodRrjqWrk/3VyzfR4aeXkf2n5Ssg+bvVUhXlvHVffLiIHriLlrO3vYobB+Kvnr9DkNzMiyWHT3G6hT/xX0ryQ==
"@types/triple-beam@^1.3.2":
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.3.tgz#726ae98a5f6418c8f24f9b0f2a9f81a8664876ae"
- integrity sha512-6tOUG+nVHn0cJbVp25JFayS5UE6+xlbcNF9Lo9mU7U0zk3zeUShZied4YEQZjy1JBF043FSkdXw8YkUJuVtB5g==
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.4.tgz#a1d5f480245db86e2f4777000065d4fe7467a012"
+ integrity sha512-HlJjF3wxV4R2VQkFpKe0YqJLilYNgtRtsqqZtby7RkVsSs+i+vbyzjtUwpFEdUCKcrGzCiEJE7F/0mKjh0sunA==
"@types/trusted-types@^2.0.2":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.4.tgz#2b38784cd16957d3782e8e2b31c03bc1d13b4d65"
- integrity sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.5.tgz#5cac7e7df3275bb95f79594f192d97da3b4fd5fe"
+ integrity sha512-I3pkr8j/6tmQtKV/ZzHtuaqYSQvyjGRKH4go60Rr0IDLlFxuRT5V32uvB1mecM5G1EVAUyF/4r4QZ1GHgz+mxA==
"@types/unist@*", "@types/unist@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.0.tgz#988ae8af1e5239e89f9fbb1ade4c935f4eeedf9a"
- integrity sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.1.tgz#778652d02ddec1bfc9e5e938fec8d407b8e56cba"
+ integrity sha512-ue/hDUpPjC85m+PM9OQDMZr3LywT+CT6mPsQq8OJtCLiERkGRcQUFvu9XASF5XWqyZFXbf15lvb3JFJ4dRLWPg==
"@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2":
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.8.tgz#bb197b9639aa1a04cf464a617fe800cccd92ad5c"
- integrity sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==
+ version "2.0.9"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.9.tgz#72e164381659a49557b0a078b28308f2c6a3e1ce"
+ integrity sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ==
"@types/uuid@^9.0.0":
- version "9.0.4"
- resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.4.tgz#e884a59338da907bda8d2ed03e01c5c49d036f1c"
- integrity sha512-zAuJWQflfx6dYJM62vna+Sn5aeSWhh3OB+wfUEACNcqUSc0AGc5JKl+ycL1vrH7frGTXhJchYjE1Hak8L819dA==
+ version "9.0.5"
+ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.5.tgz#25a71eb73eba95ac0e559ff3dd018fc08294acf6"
+ integrity sha512-xfHdwa1FMJ082prjSJpoEI57GZITiQz10r3vEJCHa2khEFQjKy91aWKz6+zybzssCvXUwE1LQWgWVwZ4nYUvHQ==
"@types/vfile-message@*":
version "2.0.0"
@@ -4029,9 +3867,9 @@
"@types/vfile-message" "*"
"@types/ws@*", "@types/ws@^8.5.5":
- version "8.5.5"
- resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb"
- integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==
+ version "8.5.7"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.7.tgz#1ca585074fe5d2c81dec7a3d451f244a2a6d83cb"
+ integrity sha512-6UrLjiDUvn40CMrAubXuIVtj2PEfKDffJS7ychvnPU44j+KVeXmdHHTgqcM/dxLUTHxlXHiFM8Skmb8ozGdTnQ==
dependencies:
"@types/node" "*"
@@ -4043,21 +3881,21 @@
"@types/node" "*"
"@types/yargs-parser@*":
- version "21.0.0"
- resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
- integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==
+ version "21.0.1"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b"
+ integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==
"@types/yargs@^17.0.0":
- version "17.0.24"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902"
- integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==
+ version "17.0.28"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.28.tgz#d106e4301fbacde3d1796ab27374dd16588ec851"
+ integrity sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw==
dependencies:
"@types/yargs-parser" "*"
"@types/yauzl@^2.9.1":
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
- integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.1.tgz#4e8f299f0934d60f36c74f59cb5a8483fd786691"
+ integrity sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==
dependencies:
"@types/node" "*"
@@ -4350,9 +4188,9 @@
integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==
"@yarnpkg/parsers@^3.0.0-rc.18":
- version "3.0.0-rc.51"
- resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.51.tgz#b6628fdb00e984c54f7eca8b8cbd71cc52fabe73"
- integrity sha512-E3sHAnUcyvGbXDCY1YJTVTwovF1UFP8IVJ6CFGgTST8RGD2gRQqqmW8dZykpaDWKqO6RBqwJcfmJMyqYBBpixw==
+ version "3.0.0-rc.53"
+ resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.53.tgz#9b5eba91567d8c0f1f5224b1c4477036ea285622"
+ integrity sha512-kprOp3hV9l7B9oqjgTQIM04mmEaYBYcccUXVIM1NFFf10HqnD9joTfZ1cAqx9lpccWzgUnHkrhVwhhlGjPzyIw==
dependencies:
js-yaml "^3.10.0"
tslib "^2.4.0"
@@ -4947,9 +4785,9 @@ axios@0.21.4:
follow-redirects "^1.14.0"
axios@^1.0.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267"
- integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.1.tgz#11fbaa11fc35f431193a9564109c88c1f27b585f"
+ integrity sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==
dependencies:
follow-redirects "^1.15.0"
form-data "^4.0.0"
@@ -4986,16 +4824,7 @@ babel-plugin-istanbul@6.1.1:
istanbul-lib-instrument "^5.0.4"
test-exclude "^6.0.0"
-babel-plugin-polyfill-corejs2@^0.4.5:
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c"
- integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==
- dependencies:
- "@babel/compat-data" "^7.22.6"
- "@babel/helper-define-polyfill-provider" "^0.4.2"
- semver "^6.3.1"
-
-babel-plugin-polyfill-corejs2@^0.4.6:
+babel-plugin-polyfill-corejs2@^0.4.5, babel-plugin-polyfill-corejs2@^0.4.6:
version "0.4.6"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313"
integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==
@@ -5004,15 +4833,7 @@ babel-plugin-polyfill-corejs2@^0.4.6:
"@babel/helper-define-polyfill-provider" "^0.4.3"
semver "^6.3.1"
-babel-plugin-polyfill-corejs3@^0.8.3:
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52"
- integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==
- dependencies:
- "@babel/helper-define-polyfill-provider" "^0.4.2"
- core-js-compat "^3.31.0"
-
-babel-plugin-polyfill-corejs3@^0.8.5:
+babel-plugin-polyfill-corejs3@^0.8.3, babel-plugin-polyfill-corejs3@^0.8.5:
version "0.8.5"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz#a75fa1b0c3fc5bd6837f9ec465c0f48031b8cab1"
integrity sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==
@@ -5020,14 +4841,7 @@ babel-plugin-polyfill-corejs3@^0.8.5:
"@babel/helper-define-polyfill-provider" "^0.4.3"
core-js-compat "^3.32.2"
-babel-plugin-polyfill-regenerator@^0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326"
- integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==
- dependencies:
- "@babel/helper-define-polyfill-provider" "^0.4.2"
-
-babel-plugin-polyfill-regenerator@^0.5.3:
+babel-plugin-polyfill-regenerator@^0.5.2, babel-plugin-polyfill-regenerator@^0.5.3:
version "0.5.3"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5"
integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==
@@ -5263,17 +5077,7 @@ browser-sync@2.29.3, browser-sync@^2.27.7:
ua-parser-js "^1.0.33"
yargs "^17.3.1"
-browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.5, browserslist@^4.21.9:
- version "4.21.10"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0"
- integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==
- dependencies:
- caniuse-lite "^1.0.30001517"
- electron-to-chromium "^1.4.477"
- node-releases "^2.0.13"
- update-browserslist-db "^1.0.11"
-
-browserslist@^4.22.1:
+browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.5, browserslist@^4.21.9, browserslist@^4.22.1:
version "4.22.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619"
integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==
@@ -5436,15 +5240,10 @@ camelcase@^6.2.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520:
- version "1.0.30001538"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz#9dbc6b9af1ff06b5eb12350c2012b3af56744f3f"
- integrity sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==
-
-caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541:
- version "1.0.30001547"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz#d4f92efc488aab3c7f92c738d3977c2a3180472b"
- integrity sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==
+caniuse-lite@^1.0.30001520, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541:
+ version "1.0.30001550"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001550.tgz#6ec6a2239eb2a8123cc26cfe0571db5c79eb8669"
+ integrity sha512-p82WjBYIypO0ukTsd/FG3Xxs+4tFeaY9pfT4amQL8KWtYH7H9nYwReGAbMTJ0hsmRO8IfDtsS6p3ZWj8+1c2RQ==
canonical-path@1.0.0, canonical-path@^1.0.0:
version "1.0.0"
@@ -5624,9 +5423,9 @@ ci-info@^2.0.0:
integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
ci-info@^3.7.0:
- version "3.8.0"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91"
- integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
+ integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
cjson@^0.3.1:
version "0.3.3"
@@ -6054,14 +5853,7 @@ copy-webpack-plugin@11.0.0:
schema-utils "^4.0.0"
serialize-javascript "^6.0.0"
-core-js-compat@^3.31.0:
- version "3.32.2"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c"
- integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==
- dependencies:
- browserslist "^4.21.10"
-
-core-js-compat@^3.32.2:
+core-js-compat@^3.31.0, core-js-compat@^3.32.2:
version "3.33.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.0.tgz#24aa230b228406450b2277b7c8bfebae932df966"
integrity sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==
@@ -6069,9 +5861,9 @@ core-js-compat@^3.32.2:
browserslist "^4.22.1"
core-js-pure@^3.30.2:
- version "3.32.2"
- resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.32.2.tgz#b7dbdac528625cf87eb0523b532eb61551b9a6d1"
- integrity sha512-Y2rxThOuNywTjnX/PgA5vWM6CZ9QB9sz9oGeCixV8MqXZO70z/5SHzf9EeBrEBK0PN36DnEBBu9O/aGWzKuMZQ==
+ version "3.33.0"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.33.0.tgz#938a28754b4d82017a7a8cbd2727b1abecc63591"
+ integrity sha512-FKSIDtJnds/YFIEaZ4HszRX7hkxGpNKM7FC9aJ9WLJbSd3lD4vOltFuVIBLR8asSx9frkTSqL0dw90SKQxgKrg==
core-util-is@1.0.2:
version "1.0.2"
@@ -6256,9 +6048,9 @@ cssstyle@^3.0.0:
rrweb-cssom "^0.6.0"
csv-parse@^5.0.4:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-5.5.0.tgz#2313421e69b650dae32a79ac884b20b21ca1d9da"
- integrity sha512-RxruSK3M4XgzcD7Trm2wEN+SJ26ChIb903+IWxNOcB5q4jT2Cs+hFr6QP39J05EohshRFEvyzEBoZ/466S2sbw==
+ version "5.5.2"
+ resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-5.5.2.tgz#ab525e642093dccff7c5cca5c7b71fd3e99fe8f2"
+ integrity sha512-YRVtvdtUNXZCMyK5zd5Wty1W6dNTpGKdqQd4EQ8tl/c6KW1aMBB1Kg1ppky5FONKmEqGJ/8WjLlTNLPne4ioVA==
custom-event@~1.0.0:
version "1.0.1"
@@ -6277,10 +6069,10 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"
-data-uri-to-buffer@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz#db89a9e279c2ffe74f50637a59a32fb23b3e4d7c"
- integrity sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==
+data-uri-to-buffer@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz#540bd4c8753a25ee129035aebdedf63b078703c7"
+ integrity sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==
data-urls@^4.0.0:
version "4.0.0"
@@ -6395,9 +6187,9 @@ defaults@^1.0.3:
clone "^1.0.2"
define-data-property@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451"
- integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3"
+ integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==
dependencies:
get-intrinsic "^1.2.1"
gopd "^1.0.1"
@@ -6753,15 +6545,10 @@ ejs@^3.1.7:
dependencies:
jake "^10.8.5"
-electron-to-chromium@^1.4.477:
- version "1.4.525"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.525.tgz#614284f33901fbecd3e90176c0d60590cd939700"
- integrity sha512-GIZ620hDK4YmIqAWkscG4W6RwY6gOx1y5J6f4JUQwctiJrqH2oxZYU4mXHi35oV32tr630UcepBzSBGJ/WYcZA==
-
electron-to-chromium@^1.4.535:
- version "1.4.551"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.551.tgz#14db6660a88f66ce095ea2657abe5653bc7f42ed"
- integrity sha512-/Ng/W/kFv7wdEHYzxdK7Cv0BHEGSkSB3M0Ssl8Ndr1eMiYeas/+Mv4cNaDqamqWx6nd2uQZfPz6g25z25M/sdw==
+ version "1.4.557"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.557.tgz#f3941b569c82b7bb909411855c6ff9bfe1507829"
+ integrity sha512-6x0zsxyMXpnMJnHrondrD3SuAeKcwij9S+83j2qHAQPXbGTDDfgImzzwgGlzrIcXbHQ42tkG4qA6U860cImNhw==
emoji-regex@^8.0.0:
version "8.0.0"
@@ -6819,9 +6606,9 @@ engine.io-parser@~5.2.1:
integrity sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==
engine.io@~6.5.2:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.2.tgz#769348ced9d56bd47bd83d308ec1c3375e85937c"
- integrity sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==
+ version "6.5.3"
+ resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.3.tgz#80b0692912cef3a417e1b7433301d6397bf0374b"
+ integrity sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==
dependencies:
"@types/cookie" "^0.4.1"
"@types/cors" "^2.8.12"
@@ -7721,9 +7508,9 @@ find-yarn-workspace-root@^2.0.0:
micromatch "^4.0.2"
firebase-tools@^12.0.0:
- version "12.5.4"
- resolved "https://registry.yarnpkg.com/firebase-tools/-/firebase-tools-12.5.4.tgz#5235b857cc0d384b2036cd7a25c812cd487d4746"
- integrity sha512-fLE+91tJp3PNZPyB6kN9zfn5rkQWhzPX3mlsAGKTMJUA5TLeZA1YlfBbgPr2DJUO47cHN/9b0BYUQjYcYsBPgw==
+ version "12.7.0"
+ resolved "https://registry.yarnpkg.com/firebase-tools/-/firebase-tools-12.7.0.tgz#e28692a7cfb22b21d2492947d3a498d4722e5fc6"
+ integrity sha512-NBXYEbY9FE20BcEivxL0agXkehNTtcFhQmGGPPWrxntVgWOnbrzy4fh1xjZnQSRgZu4VpEWthXDM+oCkn6ouKQ==
dependencies:
"@google-cloud/pubsub" "^3.0.1"
abort-controller "^3.0.0"
@@ -7787,11 +7574,11 @@ firebase-tools@^12.0.0:
ws "^7.2.3"
flat-cache@^3.0.4:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f"
- integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b"
+ integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==
dependencies:
- flatted "^3.2.7"
+ flatted "^3.2.9"
keyv "^4.5.3"
rimraf "^3.0.2"
@@ -7800,7 +7587,7 @@ flat@^5.0.2:
resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
-flatted@^3.2.7:
+flatted@^3.2.7, flatted@^3.2.9:
version "3.2.9"
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
@@ -7867,9 +7654,9 @@ forwarded@0.2.0:
integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
fraction.js@^4.2.0, fraction.js@^4.3.6:
- version "4.3.6"
- resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.6.tgz#e9e3acec6c9a28cf7bc36cbe35eea4ceb2c5c92d"
- integrity sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==
+ version "4.3.7"
+ resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
+ integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
fresh@0.5.2, fresh@^0.5.2:
version "0.5.2"
@@ -7951,9 +7738,9 @@ fs-minipass@^3.0.0:
minipass "^7.0.3"
fs-monkey@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.4.tgz#ee8c1b53d3fe8bb7e5d2c5c5dfc0168afdd2f747"
- integrity sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788"
+ integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==
fs.realpath@^1.0.0:
version "1.0.0"
@@ -7966,9 +7753,9 @@ fsevents@~2.3.2:
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
function-bind@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
function.prototype.name@^1.1.6:
version "1.1.6"
@@ -8102,12 +7889,12 @@ get-symbol-description@^1.0.0:
get-intrinsic "^1.1.1"
get-uri@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.1.tgz#cff2ba8d456c3513a04b70c45de4dbcca5b1527c"
- integrity sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.2.tgz#e019521646f4a8ff6d291fbaea2c46da204bb75b"
+ integrity sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==
dependencies:
basic-ftp "^5.0.2"
- data-uri-to-buffer "^5.0.1"
+ data-uri-to-buffer "^6.0.0"
debug "^4.3.4"
fs-extra "^8.1.0"
@@ -8168,13 +7955,13 @@ glob@7.1.4:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^10.2.2, glob@^10.2.5:
- version "10.3.4"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.4.tgz#c85c9c7ab98669102b6defda76d35c5b1ef9766f"
- integrity sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==
+glob@^10.2.2, glob@^10.3.7:
+ version "10.3.10"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
+ integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
dependencies:
foreground-child "^3.1.0"
- jackspeak "^2.0.3"
+ jackspeak "^2.3.5"
minimatch "^9.0.1"
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
path-scurry "^1.10.1"
@@ -8227,9 +8014,9 @@ globals@^11.1.0:
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
globals@^13.19.0:
- version "13.21.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571"
- integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==
+ version "13.23.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02"
+ integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==
dependencies:
type-fest "^0.20.2"
@@ -8469,11 +8256,9 @@ has-yarn@^2.1.0:
integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==
has@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
- dependencies:
- function-bind "^1.1.1"
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6"
+ integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==
hast-util-from-parse5@^5.0.0:
version "5.0.3"
@@ -9521,10 +9306,10 @@ istanbul-reports@^3.0.2, istanbul-reports@^3.0.5:
html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0"
-jackspeak@^2.0.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.3.tgz#95e4cbcc03b3eb357bf6bcce14a903fb3d1151e1"
- integrity sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==
+jackspeak@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
+ integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
dependencies:
"@isaacs/cliui" "^8.0.2"
optionalDependencies:
@@ -9975,9 +9760,9 @@ karma@~6.4.0:
yargs "^16.1.1"
keyv@^4.5.3:
- version "4.5.3"
- resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25"
- integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==
+ version "4.5.4"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
dependencies:
json-buffer "3.0.1"
@@ -10011,12 +9796,12 @@ kuler@^2.0.0:
integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==
launch-editor@^2.6.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7"
- integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c"
+ integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==
dependencies:
picocolors "^1.0.0"
- shell-quote "^1.7.3"
+ shell-quote "^1.8.1"
lazystream@^1.0.0:
version "1.0.1"
@@ -10399,11 +10184,11 @@ log4js@^6.4.1:
streamroller "^3.1.5"
logform@^2.3.2, logform@^2.4.0:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/logform/-/logform-2.5.1.tgz#44c77c34becd71b3a42a3970c77929e52c6ed48b"
- integrity sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5"
+ integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==
dependencies:
- "@colors/colors" "1.5.0"
+ "@colors/colors" "1.6.0"
"@types/triple-beam" "^1.3.2"
fecha "^4.2.0"
ms "^2.1.1"
@@ -10606,9 +10391,9 @@ marked@^4.0.10, marked@^4.0.14:
integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==
marked@^9.0.0:
- version "9.0.3"
- resolved "https://registry.yarnpkg.com/marked/-/marked-9.0.3.tgz#95be5e8cba93f2c2ca1d6503794c4f02d81c97d9"
- integrity sha512-pI/k4nzBG1PEq1J3XFEHxVvjicfjl8rgaMaqclouGSMPhk7Q3Ejb2ZRxx/ZQOcQ1909HzVoWCFYq6oLgtL4BpQ==
+ version "9.1.2"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-9.1.2.tgz#a54ca772d2b5a43de7d8ed40111354b4b7985527"
+ integrity sha512-qoKMJqK0w6vkLk8+KnKZAH6neUZSNaQqVZ/h2yZ9S7CbLuFHyS2viB0jnqcWF9UKjwsAbMrQtnQhdmdvOVOw9w==
marky@^1.2.2:
version "1.2.5"
@@ -10849,9 +10634,9 @@ minipass@^5.0.0:
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974"
- integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
+ integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
minizlib@^2.1.1, minizlib@^2.1.2:
version "2.1.2"
@@ -11099,9 +10884,9 @@ npm-bundled@^3.0.0:
npm-normalize-package-bin "^3.0.0"
npm-install-checks@^6.0.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.2.0.tgz#fae55b9967b03ac309695ec96629492d5cedf371"
- integrity sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g==
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe"
+ integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==
dependencies:
semver "^7.1.1"
@@ -11138,9 +10923,9 @@ npm-pick-manifest@9.0.0, npm-pick-manifest@^9.0.0:
semver "^7.3.5"
npm-registry-fetch@^16.0.0:
- version "16.0.0"
- resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-16.0.0.tgz#7529dd7c64c16a1bc8af72f99df73dfe98bb9549"
- integrity sha512-JFCpAPUpvpwfSydv99u85yhP68rNIxSFmDpNbNnRWKSe3gpjHnWL8v320gATwRzjtgmZ9Jfe37+ZPOLZPwz6BQ==
+ version "16.1.0"
+ resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz#10227b7b36c97bc1cf2902a24e4f710cfe62803c"
+ integrity sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw==
dependencies:
make-fetch-happen "^13.0.0"
minipass "^7.0.2"
@@ -11269,9 +11054,9 @@ object-hash@^3.0.0:
integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
object-inspect@^1.12.3, object-inspect@^1.9.0:
- version "1.12.3"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
- integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.0.tgz#42695d3879e1cd5bda6df5062164d80c996e23e2"
+ integrity sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==
object-is@^1.1.5:
version "1.1.5"
@@ -11927,7 +11712,7 @@ postcss@8.4.29:
picocolors "^1.0.0"
source-map-js "^1.0.2"
-postcss@8.4.31:
+postcss@8.4.31, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.27:
version "8.4.31"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
@@ -11936,26 +11721,17 @@ postcss@8.4.31:
picocolors "^1.0.0"
source-map-js "^1.0.2"
-postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.27:
- version "8.4.30"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7"
- integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==
- dependencies:
- nanoid "^3.3.6"
- picocolors "^1.0.0"
- source-map-js "^1.0.2"
-
preact-render-to-string@^6.2.1:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-6.2.1.tgz#bd4f01f9a6b91b16b281343e665d110487f68d67"
- integrity sha512-5t7nFeMUextd53igL3GAakAAMaUD+dVWDHaRYaeh1tbPIjQIBtgJnMw6vf8VS/lviV0ggFtkgebatPxvtJsXyQ==
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-6.2.2.tgz#eb086b6db5d57468ab2c184896884fb0a818245d"
+ integrity sha512-YDfXQiVeYZutFR8/DpxLSbW3W6b7GgjBExRBxOOqcjrGq5rA9cziitQdNPMZe4RVMSdfBnf4hYqyeLs/KvtIuA==
dependencies:
pretty-format "^3.8.0"
preact@^10.17.1:
- version "10.17.1"
- resolved "https://registry.yarnpkg.com/preact/-/preact-10.17.1.tgz#0a1b3c658c019e759326b9648c62912cf5c2dde1"
- integrity sha512-X9BODrvQ4Ekwv9GURm9AKAGaomqXmip7NQTZgY7gcNmr7XE83adOMJvd3N42id1tMFU7ojiynRsYnY6/BRFxLA==
+ version "10.18.1"
+ resolved "https://registry.yarnpkg.com/preact/-/preact-10.18.1.tgz#3b84bb305f0b05f4ad5784b981d15fcec4e105da"
+ integrity sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg==
prelude-ls@^1.2.1:
version "1.2.1"
@@ -12664,7 +12440,7 @@ resolve-url-loader@5.0.0:
postcss "^8.2.14"
source-map "0.6.1"
-resolve@1.22.8:
+resolve@1.22.8, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.22.4, resolve@^1.3.2, resolve@~1.22.1:
version "1.22.8"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -12673,15 +12449,6 @@ resolve@1.22.8:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
-resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.22.4, resolve@^1.3.2, resolve@~1.22.1:
- version "1.22.6"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362"
- integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==
- dependencies:
- is-core-module "^2.13.0"
- path-parse "^1.0.7"
- supports-preserve-symlinks-flag "^1.0.0"
-
resolve@~1.19.0:
version "1.19.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c"
@@ -12749,11 +12516,11 @@ rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.3:
glob "^7.1.3"
rimraf@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.1.tgz#0881323ab94ad45fec7c0221f27ea1a142f3f0d0"
- integrity sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf"
+ integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==
dependencies:
- glob "^10.2.5"
+ glob "^10.3.7"
robots-parser@^3.0.0:
version "3.0.1"
@@ -12761,9 +12528,9 @@ robots-parser@^3.0.0:
integrity sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==
rollup@^3.27.1:
- version "3.29.2"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.2.tgz#cbc76cd5b03b9f9e93be991d23a1dff9c6d5b740"
- integrity sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==
+ version "3.29.4"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981"
+ integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==
optionalDependencies:
fsevents "~2.3.2"
@@ -12880,9 +12647,9 @@ safevalues@^0.3.4:
integrity sha512-LRneZZRXNgjzwG4bDQdOTSbze3fHm1EAKN/8bePxnlEZiBmkYEDggaHbuvHI9/hoqHbGfsEA7tWS9GhYHZBBsw==
safevalues@^0.5.0:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/safevalues/-/safevalues-0.5.1.tgz#3275e4c275b7aa91fc234ad98346cdfd7d35382e"
- integrity sha512-LlnIuLDYHC7BZn+/xXjaHyMiqkMxKHWTpt9bpXKqR8afVd4MJD9ZcEFuMhUNspp9oUw6MJPhaKJFu39zQxVvOg==
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/safevalues/-/safevalues-0.5.2.tgz#f0ec859de1cdf95d237d059429916b63a1dc3213"
+ integrity sha512-8MeVqP6q2UompeFEUVphKZyLzeenFrSATIAAeSE5+6aGiozwVe3mK61TCODNrBFHocBJdpGL/lCmdYWiocdMng==
sass-loader@13.3.2:
version "13.3.2"
@@ -12908,9 +12675,9 @@ saucelabs@^1.5.0:
https-proxy-agent "^2.2.1"
sax@>=0.6.0, sax@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
- integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0"
+ integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==
saxes@^6.0.0:
version "6.0.0"
@@ -13194,7 +12961,7 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-shell-quote@^1.6.1, shell-quote@^1.7.3:
+shell-quote@^1.6.1, shell-quote@^1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
@@ -13423,9 +13190,9 @@ spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1:
spdx-license-ids "^3.0.0"
spdx-license-ids@^3.0.0:
- version "3.0.15"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz#142460aabaca062bc7cd4cc87b7d50725ed6a4ba"
- integrity sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==
+ version "3.0.16"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f"
+ integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==
spdx-license-list@^2.1.0:
version "2.1.0"
@@ -13922,9 +13689,9 @@ terser@5.21.0:
source-map-support "~0.5.20"
terser@^5.16.8:
- version "5.20.0"
- resolved "https://registry.yarnpkg.com/terser/-/terser-5.20.0.tgz#ea42aea62578703e33def47d5c5b93c49772423e"
- integrity sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==
+ version "5.22.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.22.0.tgz#4f18103f84c5c9437aafb7a14918273310a8a49d"
+ integrity sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==
dependencies:
"@jridgewell/source-map" "^0.3.3"
acorn "^8.8.2"
@@ -14358,6 +14125,11 @@ underscore@~1.13.2:
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441"
integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==
+undici-types@~5.25.1:
+ version "5.25.3"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.25.3.tgz#e044115914c85f0bcbb229f346ab739f064998c3"
+ integrity sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==
+
unherit@^1.0.4:
version "1.1.3"
resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22"
@@ -14546,14 +14318,6 @@ unpipe@1.0.0, unpipe@~1.0.0:
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
-update-browserslist-db@^1.0.11:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940"
- integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
- dependencies:
- escalade "^3.1.1"
- picocolors "^1.0.0"
-
update-browserslist-db@^1.0.13:
version "1.0.13"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
@@ -15117,9 +14881,9 @@ wildcard@^2.0.0:
integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
winston-transport@^4.4.0, winston-transport@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.5.0.tgz#6e7b0dd04d393171ed5e4e4905db265f7ab384fa"
- integrity sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.6.0.tgz#f1c1a665ad1b366df72199e27892721832a19e1b"
+ integrity sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==
dependencies:
logform "^2.3.2"
readable-stream "^3.6.0"
@@ -15138,11 +14902,11 @@ winston@^2.1.1:
stack-trace "0.0.x"
winston@^3.0.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/winston/-/winston-3.10.0.tgz#d033cb7bd3ced026fed13bf9d92c55b903116803"
- integrity sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/winston/-/winston-3.11.0.tgz#2d50b0a695a2758bb1c95279f0a88e858163ed91"
+ integrity sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==
dependencies:
- "@colors/colors" "1.5.0"
+ "@colors/colors" "^1.6.0"
"@dabh/diagnostics" "^2.0.2"
async "^3.2.3"
is-stream "^2.0.0"
@@ -15297,9 +15061,9 @@ yallist@^4.0.0:
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yaml@^2.2.1, yaml@^2.2.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144"
- integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.3.tgz#01f6d18ef036446340007db8e016810e5d64aad9"
+ integrity sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==
yargs-parser@21.1.1, yargs-parser@^21.0.0, yargs-parser@^21.1.1:
version "21.1.1"
diff --git a/goldens/size-tracking/aio-payloads.json b/goldens/size-tracking/aio-payloads.json
index d7e719e4a5263..4a155b75ed3b3 100755
--- a/goldens/size-tracking/aio-payloads.json
+++ b/goldens/size-tracking/aio-payloads.json
@@ -2,7 +2,7 @@
"aio": {
"uncompressed": {
"runtime": 4252,
- "main": 501754,
+ "main": 506861,
"polyfills": 33862,
"styles": 60209,
"light-theme": 34317,
diff --git a/integration/platform-server/projects/ngmodule/server.ts b/integration/platform-server/projects/ngmodule/server.ts
index e908b269c8e7b..6201fb1d19670 100644
--- a/integration/platform-server/projects/ngmodule/server.ts
+++ b/integration/platform-server/projects/ngmodule/server.ts
@@ -38,15 +38,18 @@ app.get('/api-2', (req, res) => {
// All regular routes use the Universal engine
app.get('*', (req, res) => {
+ const { protocol, originalUrl, baseUrl, headers } = req;
+
renderModule(AppServerModule, {
document: indexHtml,
- url: req.url,
- extraProviders: [{provide: APP_BASE_HREF, useValue: req.baseUrl}],
+ url: `${protocol}://${headers.host}${originalUrl}`,
+ extraProviders: [{provide: APP_BASE_HREF, useValue: baseUrl}],
}).then((response: string) => {
res.send(response);
});
});
+
app.listen(4206, () => {
console.log('Server listening on port 4206!');
});
diff --git a/integration/platform-server/projects/ngmodule/src/app/http-transferstate-lazy/http-transfer-state.component.ts b/integration/platform-server/projects/ngmodule/src/app/http-transferstate-lazy/http-transfer-state.component.ts
index a4a04a74b2b4e..76b1e62ce4f7c 100644
--- a/integration/platform-server/projects/ngmodule/src/app/http-transferstate-lazy/http-transfer-state.component.ts
+++ b/integration/platform-server/projects/ngmodule/src/app/http-transferstate-lazy/http-transfer-state.component.ts
@@ -29,7 +29,7 @@ export class TransferStateComponent implements OnInit {
ngOnInit(): void {
// Test that HTTP cache works when HTTP call is made in a lifecycle hook.
- this.httpClient.get('http://localhost:4206/api-2').subscribe((response) => {
+ this.httpClient.get('/api-2').subscribe((response) => {
this.responseTwo = response.data;
});
}
diff --git a/integration/platform-server/projects/standalone/server.ts b/integration/platform-server/projects/standalone/server.ts
index ac1b37df48fb9..572d0c3d67b89 100644
--- a/integration/platform-server/projects/standalone/server.ts
+++ b/integration/platform-server/projects/standalone/server.ts
@@ -38,10 +38,12 @@ app.get('/api-2', (req, res) => {
// All regular routes use the Universal engine
app.get('*', (req, res) => {
+ const { protocol, originalUrl, baseUrl, headers } = req;
+
renderApplication(bootstrap, {
document: indexHtml,
- url: req.url,
- platformProviders: [{provide: APP_BASE_HREF, useValue: req.baseUrl}],
+ url: `${protocol}://${headers.host}${originalUrl}`,
+ platformProviders: [{provide: APP_BASE_HREF, useValue: baseUrl}],
}).then((response: string) => {
res.send(response);
});
diff --git a/integration/platform-server/projects/standalone/src/app/http-transferstate-lazy/http-transfer-state.component.ts b/integration/platform-server/projects/standalone/src/app/http-transferstate-lazy/http-transfer-state.component.ts
index dfaa84a5138f7..eda820d63ccc9 100644
--- a/integration/platform-server/projects/standalone/src/app/http-transferstate-lazy/http-transfer-state.component.ts
+++ b/integration/platform-server/projects/standalone/src/app/http-transferstate-lazy/http-transfer-state.component.ts
@@ -31,7 +31,7 @@ export class TransferStateComponent implements OnInit {
ngOnInit(): void {
// Test that HTTP cache works when HTTP call is made in a lifecycle hook.
- this.httpClient.get('http://localhost:4206/api-2').subscribe((response) => {
+ this.httpClient.get('/api-2').subscribe((response) => {
this.responseTwo = response.data;
});
}
diff --git a/packages/common/http/public_api.ts b/packages/common/http/public_api.ts
index 4a0a4c30ca52d..277680b844510 100644
--- a/packages/common/http/public_api.ts
+++ b/packages/common/http/public_api.ts
@@ -21,3 +21,6 @@ export {HttpDownloadProgressEvent, HttpErrorResponse, HttpEvent, HttpEventType,
export {HttpTransferCacheOptions, withHttpTransferCache as ɵwithHttpTransferCache} from './src/transfer_cache';
export {HttpXhrBackend} from './src/xhr';
export {HttpXsrfTokenExtractor} from './src/xsrf';
+
+// Private exports
+export * from './src/private_export';
diff --git a/packages/common/http/src/private_export.ts b/packages/common/http/src/private_export.ts
new file mode 100644
index 0000000000000..d5b0ff7cb9f87
--- /dev/null
+++ b/packages/common/http/src/private_export.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 {HTTP_ROOT_INTERCEPTOR_FNS as ɵHTTP_ROOT_INTERCEPTOR_FNS} from './interceptor';
diff --git a/packages/common/http/src/transfer_cache.ts b/packages/common/http/src/transfer_cache.ts
index 9e7247e658da7..78f31ab849704 100644
--- a/packages/common/http/src/transfer_cache.ts
+++ b/packages/common/http/src/transfer_cache.ts
@@ -6,7 +6,7 @@
* found in the LICENSE file at https://angular.io/license
*/
-import {APP_BOOTSTRAP_LISTENER, ApplicationRef, inject, InjectionToken, makeStateKey, Provider, StateKey, TransferState, ɵENABLED_SSR_FEATURES as ENABLED_SSR_FEATURES, ɵformatRuntimeError as formatRuntimeError, ɵtruncateMiddle as truncateMiddle, ɵwhenStable as whenStable} from '@angular/core';
+import {APP_BOOTSTRAP_LISTENER, ApplicationRef, inject, InjectionToken, makeStateKey, Provider, StateKey, TransferState, ɵformatRuntimeError as formatRuntimeError, ɵtruncateMiddle as truncateMiddle, ɵwhenStable as whenStable} from '@angular/core';
import {Observable, of} from 'rxjs';
import {tap} from 'rxjs/operators';
@@ -201,7 +201,7 @@ export function withHttpTransferCache(cacheOptions: HttpTransferCacheOptions): P
{
provide: CACHE_OPTIONS,
useFactory: (): CacheOptions => {
- inject(ENABLED_SSR_FEATURES).add('httpcache');
+ performance.mark('mark_use_counter', {detail: {feature: 'NgHttpTransferCache'}});
return {isCacheActive: true, ...cacheOptions};
}
},
diff --git a/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_block.ts b/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_block.ts
index 183667b5d92c7..e0534583c2ca5 100644
--- a/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_block.ts
+++ b/packages/compiler-cli/src/ngtsc/typecheck/src/type_check_block.ts
@@ -1327,12 +1327,15 @@ class TcbSwitchOp extends TcbOp {
}
override execute(): null {
- const expression = tcbExpression(this.block.expression, this.tcb, this.scope);
-
// Since we'll use the expression in multiple comparisons, we don't want to
// log the same diagnostic more than once. Ignore this expression since we already
// produced a `TcbExpressionOp`.
- markIgnoreDiagnostics(expression);
+ const comparisonExpression = tcbExpression(this.block.expression, this.tcb, this.scope);
+ markIgnoreDiagnostics(comparisonExpression);
+
+ // Wrap the comparisson expression in parentheses so we don't ignore
+ // diagnostics when comparing incompatible types (see #52315).
+ const expression = ts.factory.createParenthesizedExpression(comparisonExpression);
const root = this.generateCase(0, expression, null);
if (root !== undefined) {
diff --git a/packages/compiler-cli/src/ngtsc/typecheck/test/type_check_block_spec.ts b/packages/compiler-cli/src/ngtsc/typecheck/test/type_check_block_spec.ts
index ddd10ebb4b368..6c5b4fc9e5a08 100644
--- a/packages/compiler-cli/src/ngtsc/typecheck/test/type_check_block_spec.ts
+++ b/packages/compiler-cli/src/ngtsc/typecheck/test/type_check_block_spec.ts
@@ -1468,8 +1468,8 @@ describe('type check blocks', () => {
expect(tcb(TEMPLATE))
.toContain(
- 'if (((this).expr) === 1) { "" + ((this).one()); } else if ' +
- '(((this).expr) === 2) { "" + ((this).two()); } else { "" + ((this).default()); }');
+ 'if ((((this).expr)) === 1) { "" + ((this).one()); } else if ' +
+ '((((this).expr)) === 2) { "" + ((this).two()); } else { "" + ((this).default()); }');
});
it('should generate a switch block that only has a default case', () => {
@@ -1501,9 +1501,10 @@ describe('type check blocks', () => {
const result = tcb(TEMPLATE);
- expect(result).toContain(`if (((this).expr) === 1) (this).one();`);
- expect(result).toContain(`if (((this).expr) === 2) (this).two();`);
- expect(result).toContain(`if (((this).expr) !== 1 && ((this).expr) !== 2) (this).default();`);
+ expect(result).toContain(`if ((((this).expr)) === 1) (this).one();`);
+ expect(result).toContain(`if ((((this).expr)) === 2) (this).two();`);
+ expect(result).toContain(
+ `if ((((this).expr)) !== 1 && (((this).expr)) !== 2) (this).default();`);
});
it('should generate a switch block inside a template', () => {
@@ -1526,8 +1527,8 @@ describe('type check blocks', () => {
expect(tcb(TEMPLATE))
.toContain(
'var _t1: any = null!; { var _t2 = (_t1.exp); _t2(); ' +
- 'if (_t2() === "one") { "" + ((this).one()); } ' +
- 'else if (_t2() === "two") { "" + ((this).two()); } ' +
+ 'if ((_t2()) === "one") { "" + ((this).one()); } ' +
+ 'else if ((_t2()) === "two") { "" + ((this).two()); } ' +
'else { "" + ((this).default()); } }');
});
});
diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/TEST_CASES.json b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/TEST_CASES.json
index f10cd5e366be1..2b96eddb5cba4 100644
--- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/TEST_CASES.json
+++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/TEST_CASES.json
@@ -223,8 +223,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should generate a for block with an empty block",
@@ -241,8 +240,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should generate a for block that tracks by index",
@@ -259,8 +257,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should generate a for block that tracks by a field on the item",
@@ -277,8 +274,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should generate a nested for block",
@@ -295,8 +291,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should generate a for block with template variables",
@@ -313,8 +308,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should generate a for block with aliased template variables",
@@ -331,8 +325,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should be able to refer to aliased template variables in nested for blocks",
@@ -349,8 +342,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should be able to use for loop variables in an event listener",
@@ -367,8 +359,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should parenthesize context variables used in an expression",
@@ -385,8 +376,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should implicitly allocate data slots for primary and empty block",
@@ -403,8 +393,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should not expose for loop variables to the surrounding scope",
@@ -421,8 +410,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should optimize tracking function that calls a method on the component with $index and the item from the root template",
@@ -439,8 +427,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should optimize tracking function that calls a method on the component with $index and the item from a nested template",
@@ -457,8 +444,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should reuse identical pure tracking functions",
@@ -475,8 +461,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should reuse identical impure tracking functions",
@@ -493,8 +478,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should preserve object and array literals inside tracking expressions",
@@ -511,8 +495,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
},
{
"description": "should generate an for loop block using a pipe in its expression",
@@ -529,8 +512,7 @@
],
"failureMessage": "Incorrect template"
}
- ],
- "skipForTemplatePipeline": true
+ ]
}
]
-}
+}
\ No newline at end of file
diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_aliased_template_variables_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_aliased_template_variables_template.js
index 03cb9913909d1..37bb40bff2c88 100644
--- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_aliased_template_variables_template.js
+++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_aliased_template_variables_template.js
@@ -3,9 +3,9 @@ function MyApp_For_3_Template(rf, ctx) {
$r3$.ɵɵtext(0);
}
if (rf & 2) {
- const idx_r2 = ctx.$index;
- const co_r3 = ctx.$count;
- $r3$.ɵɵtextInterpolate6(" Index: ", idx_r2, " First: ", idx_r2 === 0, " Last: ", idx_r2 === co_r3 - 1, " Even: ", idx_r2 % 2 === 0, " Odd: ", idx_r2 % 2 !== 0, " Count: ", co_r3, " ");
+ const $idx_r2$ = ctx.$index;
+ const $co_r3$ = ctx.$count;
+ $r3$.ɵɵtextInterpolate6(" Index: ", $idx_r2$, " First: ", $idx_r2$ === 0, " Last: ", $idx_r2$ === $co_r3$ - 1, " Even: ", $idx_r2$ % 2 === 0, " Odd: ", $idx_r2$ % 2 !== 0, " Count: ", $co_r3$, " ");
}
}
…
diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_template_variables_listener_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_template_variables_listener_template.js
index 6e817aac928ab..7d92b1a16adf7 100644
--- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_template_variables_listener_template.js
+++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_template_variables_listener_template.js
@@ -1,13 +1,13 @@
function MyApp_For_3_Template(rf, ctx) {
if (rf & 1) {
- const _r5 = $r3$.ɵɵgetCurrentView();
+ const $_r5$ = $r3$.ɵɵgetCurrentView();
$r3$.ɵɵelementStart(0, "div", 0);
$r3$.ɵɵlistener("click", function MyApp_For_3_Template_div_click_0_listener() {
- const restoredCtx = $r3$.ɵɵrestoreView(_r5);
- const $index_r2 = restoredCtx.$index;
- const $count_r3 = restoredCtx.$count;
- const ctx_r4 = $r3$.ɵɵnextContext();
- return $r3$.ɵɵresetView(ctx_r4.log($index_r2, $index_r2 % 2 === 0, $index_r2 === 0, $count_r3));
+ const $restoredCtx$ = $r3$.ɵɵrestoreView($_r5$);
+ const $index_r2$ = $restoredCtx$.$index;
+ const $count_r3$ = $restoredCtx$.$count;
+ const $ctx_r4$ = $r3$.ɵɵnextContext();
+ return $r3$.ɵɵresetView($ctx_r4$.log($index_r2$, $index_r2$ % 2 === 0, $index_r2$ === 0, $count_r3$));
});
$r3$.ɵɵelementEnd();
}
diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_template_variables_scope_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_template_variables_scope_template.js
index 19fe4cdfaad85..318d36737e95b 100644
--- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_template_variables_scope_template.js
+++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_template_variables_scope_template.js
@@ -3,9 +3,9 @@ function MyApp_For_2_Template(rf, ctx) {
$r3$.ɵɵtext(0);
}
if (rf & 2) {
- const $index_r2 = ctx.$index;
- const $count_r3 = ctx.$count;
- $r3$.ɵɵtextInterpolate4(" ", $index_r2, " ", $count_r3, " ", $index_r2 === 0, " ", $index_r2 === $count_r3 - 1, " ");
+ const $index_r2$ = ctx.$index;
+ const $count_r3$ = ctx.$count;
+ $r3$.ɵɵtextInterpolate4(" ", $index_r2$, " ", $count_r3$, " ", $index_r2$ === 0, " ", $index_r2$ === $count_r3$ - 1, " ");
}
}
…
diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_template_variables_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_template_variables_template.js
index 8469eb53ee48c..2b59b289be744 100644
--- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_template_variables_template.js
+++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_template_variables_template.js
@@ -3,9 +3,9 @@ function MyApp_For_3_Template(rf, ctx) {
$r3$.ɵɵtext(0);
}
if (rf & 2) {
- const $index_r2 = ctx.$index;
- const $count_r3 = ctx.$count;
- $r3$.ɵɵtextInterpolate6(" Index: ", $index_r2, " First: ", $index_r2 === 0, " Last: ", $index_r2 === $count_r3 - 1, " Even: ", $index_r2 % 2 === 0, " Odd: ", $index_r2 % 2 !== 0, " Count: ", $count_r3, " ");
+ const $index_r2$ = ctx.$index;
+ const $count_r3$ = ctx.$count;
+ $r3$.ɵɵtextInterpolate6(" Index: ", $index_r2$, " First: ", $index_r2$ === 0, " Last: ", $index_r2$ === $count_r3$ - 1, " Even: ", $index_r2$ % 2 === 0, " Odd: ", $index_r2$ % 2 !== 0, " Count: ", $count_r3$, " ");
}
}
…
diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_variables_expression_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_variables_expression_template.js
index fa1ea2e56c6d3..bd86ab1956f71 100644
--- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_variables_expression_template.js
+++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_variables_expression_template.js
@@ -3,7 +3,7 @@ function MyApp_For_1_Template(rf, ctx) {
$r3$.ɵɵtext(0);
}
if (rf & 2) {
- const $index_r2 = ctx.$index;
- $r3$.ɵɵtextInterpolate1(" ", ($index_r2 % 2 !== 0) + "", " ");
+ const $index_r2$ = ctx.$index;
+ $r3$.ɵɵtextInterpolate1(" ", ($index_r2$ % 2 !== 0) + "", " ");
}
}
diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_with_empty_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_with_empty_template.js
index a721b02fba7a1..f4f411557d8a0 100644
--- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_with_empty_template.js
+++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/for_with_empty_template.js
@@ -3,8 +3,8 @@ function MyApp_For_3_Template(rf, ctx) {
$r3$.ɵɵtext(0);
}
if (rf & 2) {
- const item_r2 = ctx.$implicit;
- $r3$.ɵɵtextInterpolate1(" ", item_r2.name, " ");
+ const $item_r2$ = ctx.$implicit;
+ $r3$.ɵɵtextInterpolate1(" ", $item_r2$.name, " ");
}
}
diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/nested_for_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/nested_for_template.js
index 596ac9770bb5a..bd60b00b9577f 100644
--- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/nested_for_template.js
+++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/nested_for_template.js
@@ -3,9 +3,9 @@ function MyApp_For_3_For_2_Template(rf, ctx) {
$r3$.ɵɵtext(0);
}
if (rf & 2) {
- const subitem_r5 = ctx.$implicit;
- const item_r1 = $r3$.ɵɵnextContext().$implicit;
- $r3$.ɵɵtextInterpolate2(" ", subitem_r5, " from ", item_r1.name, " ");
+ const $subitem_r5$ = ctx.$implicit;
+ const $item_r1$ = $r3$.ɵɵnextContext().$implicit;
+ $r3$.ɵɵtextInterpolate2(" ", $subitem_r5$, " from ", $item_r1$.name, " ");
}
}
@@ -15,9 +15,9 @@ function MyApp_For_3_Template(rf, ctx) {
$r3$.ɵɵrepeaterCreate(1, MyApp_For_3_For_2_Template, 1, 2, $r3$.ɵɵrepeaterTrackByIndex);
}
if (rf & 2) {
- const item_r1 = ctx.$implicit;
- $r3$.ɵɵtextInterpolate1(" ", item_r1.name, " ");
- $r3$.ɵɵrepeater(1, item_r1.subItems);
+ const $item_r1$ = ctx.$implicit;
+ $r3$.ɵɵtextInterpolate1(" ", $item_r1$.name, " ");
+ $r3$.ɵɵrepeater(1, $item_r1$.subItems);
}
}
…
diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/nested_for_template_variables_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/nested_for_template_variables_template.js
index b361148616a72..40a371c87b6ae 100644
--- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/nested_for_template_variables_template.js
+++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_control_flow/nested_for_template_variables_template.js
@@ -3,9 +3,9 @@ function MyApp_For_3_For_2_Template(rf, ctx) {
$r3$.ɵɵtext(0);
}
if (rf & 2) {
- const $count_r7 = ctx.$count;
- const outerCount_r3 = $r3$.ɵɵnextContext().$count;
- $r3$.ɵɵtextInterpolate2(" Outer: ", outerCount_r3, " Inner: ", $count_r7, " ");
+ const $count_r7$ = ctx.$count;
+ const $outerCount_r3$ = $r3$.ɵɵnextContext().$count;
+ $r3$.ɵɵtextInterpolate2(" Outer: ", $outerCount_r3$, " Inner: ", $count_r7$, " ");
}
}
@@ -15,9 +15,9 @@ function MyApp_For_3_Template(rf, ctx) {
$r3$.ɵɵrepeaterCreate(1, MyApp_For_3_For_2_Template, 1, 2, $r3$.ɵɵrepeaterTrackByIdentity);
}
if (rf & 2) {
- const item_r1 = ctx.$implicit;
- $r3$.ɵɵtextInterpolate1(" ", item_r1.name, " ");
- $r3$.ɵɵrepeater(1, item_r1.subItems);
+ const $item_r1$ = ctx.$implicit;
+ $r3$.ɵɵtextInterpolate1(" ", $item_r1$.name, " ");
+ $r3$.ɵɵrepeater(1, $item_r1$.subItems);
}
}
…
diff --git a/packages/compiler-cli/test/ngtsc/template_typecheck_spec.ts b/packages/compiler-cli/test/ngtsc/template_typecheck_spec.ts
index ce2c910c16fda..00b576b753c2e 100644
--- a/packages/compiler-cli/test/ngtsc/template_typecheck_spec.ts
+++ b/packages/compiler-cli/test/ngtsc/template_typecheck_spec.ts
@@ -4294,6 +4294,31 @@ suppress
]);
});
+ it('should produce a diagnostic if @switch and @case have different types', () => {
+ env.write('test.ts', `
+ import {Component} from '@angular/core';
+
+ @Component({
+ template: \`
+ @switch (expr) {
+ @case (1) {
+ {{expr}}
+ }
+ }
+ \`,
+ standalone: true,
+ })
+ export class Main {
+ expr = true;
+ }
+ `);
+
+ const diags = env.driveDiagnostics();
+ expect(diags.map(d => ts.flattenDiagnosticMessageText(d.messageText, ''))).toEqual([
+ `This comparison appears to be unintentional because the types 'boolean' and 'number' have no overlap.`,
+ ]);
+ });
+
it('should narrow the type in listener inside switch cases with expressions', () => {
env.write('test.ts', `
import {Component} from '@angular/core';
diff --git a/packages/compiler/src/ml_parser/ast.ts b/packages/compiler/src/ml_parser/ast.ts
index 776fbffaaff24..1d608a28861a4 100644
--- a/packages/compiler/src/ml_parser/ast.ts
+++ b/packages/compiler/src/ml_parser/ast.ts
@@ -89,8 +89,8 @@ export class Comment implements BaseNode {
export class Block implements BaseNode {
constructor(
public name: string, public parameters: BlockParameter[], public children: Node[],
- public sourceSpan: ParseSourceSpan, public startSourceSpan: ParseSourceSpan,
- public endSourceSpan: ParseSourceSpan|null = null) {}
+ public sourceSpan: ParseSourceSpan, public nameSpan: ParseSourceSpan,
+ public startSourceSpan: ParseSourceSpan, public endSourceSpan: ParseSourceSpan|null = null) {}
visit(visitor: Visitor, context: any) {
return visitor.visitBlock(this, context);
diff --git a/packages/compiler/src/ml_parser/html_whitespaces.ts b/packages/compiler/src/ml_parser/html_whitespaces.ts
index 279cf78892378..3863ad078e72d 100644
--- a/packages/compiler/src/ml_parser/html_whitespaces.ts
+++ b/packages/compiler/src/ml_parser/html_whitespaces.ts
@@ -101,7 +101,7 @@ export class WhitespaceVisitor implements html.Visitor {
visitBlock(block: html.Block, context: any): any {
return new html.Block(
block.name, block.parameters, visitAllWithSiblings(this, block.children), block.sourceSpan,
- block.startSourceSpan, block.endSourceSpan);
+ block.nameSpan, block.startSourceSpan, block.endSourceSpan);
}
visitBlockParameter(parameter: html.BlockParameter, context: any) {
diff --git a/packages/compiler/src/ml_parser/icu_ast_expander.ts b/packages/compiler/src/ml_parser/icu_ast_expander.ts
index 6f56a46dd208c..613fff283e644 100644
--- a/packages/compiler/src/ml_parser/icu_ast_expander.ts
+++ b/packages/compiler/src/ml_parser/icu_ast_expander.ts
@@ -91,7 +91,7 @@ class _Expander implements html.Visitor {
visitBlock(block: html.Block, context: any) {
return new html.Block(
block.name, block.parameters, html.visitAll(this, block.children), block.sourceSpan,
- block.startSourceSpan, block.endSourceSpan);
+ block.nameSpan, block.startSourceSpan, block.endSourceSpan);
}
visitBlockParameter(parameter: html.BlockParameter, context: any) {
diff --git a/packages/compiler/src/ml_parser/lexer.ts b/packages/compiler/src/ml_parser/lexer.ts
index 8ab09b013ce37..f2842341809ff 100644
--- a/packages/compiler/src/ml_parser/lexer.ts
+++ b/packages/compiler/src/ml_parser/lexer.ts
@@ -918,7 +918,7 @@ class _Tokenizer {
}
if (this._tokenizeBlocks && !this._inInterpolation && !this._isInExpansion() &&
- (this._isBlockStart() || this._cursor.peek() === chars.$RBRACE)) {
+ (this._cursor.peek() === chars.$AT || this._cursor.peek() === chars.$RBRACE)) {
return true;
}
@@ -944,19 +944,6 @@ class _Tokenizer {
return false;
}
- private _isBlockStart(): boolean {
- if (this._tokenizeBlocks && this._cursor.peek() === chars.$AT) {
- const tmp = this._cursor.clone();
-
- // If it is, also verify that the next character is a valid block identifier.
- tmp.advance();
- if (isBlockNameChar(tmp.peek())) {
- return true;
- }
- }
- return false;
- }
-
private _readUntil(char: number): string {
const start = this._cursor.clone();
this._attemptUntilChar(char);
diff --git a/packages/compiler/src/ml_parser/parser.ts b/packages/compiler/src/ml_parser/parser.ts
index 45aaca43e8f4a..d70550790573a 100644
--- a/packages/compiler/src/ml_parser/parser.ts
+++ b/packages/compiler/src/ml_parser/parser.ts
@@ -474,7 +474,7 @@ class _TreeBuilder {
const span = new ParseSourceSpan(token.sourceSpan.start, end, token.sourceSpan.fullStart);
// Create a separate `startSpan` because `span` will be modified when there is an `end` span.
const startSpan = new ParseSourceSpan(token.sourceSpan.start, end, token.sourceSpan.fullStart);
- const block = new html.Block(token.parts[0], parameters, [], span, startSpan);
+ const block = new html.Block(token.parts[0], parameters, [], span, token.sourceSpan, startSpan);
this._pushContainer(block, false);
}
@@ -500,7 +500,7 @@ class _TreeBuilder {
const span = new ParseSourceSpan(token.sourceSpan.start, end, token.sourceSpan.fullStart);
// Create a separate `startSpan` because `span` will be modified when there is an `end` span.
const startSpan = new ParseSourceSpan(token.sourceSpan.start, end, token.sourceSpan.fullStart);
- const block = new html.Block(token.parts[0], parameters, [], span, startSpan);
+ const block = new html.Block(token.parts[0], parameters, [], span, token.sourceSpan, startSpan);
this._pushContainer(block, false);
// Incomplete blocks don't have children so we close them immediately and report an error.
diff --git a/packages/compiler/src/render3/r3_ast.ts b/packages/compiler/src/render3/r3_ast.ts
index c182e9eb1d378..6fe2c2346dd5b 100644
--- a/packages/compiler/src/render3/r3_ast.ts
+++ b/packages/compiler/src/render3/r3_ast.ts
@@ -315,7 +315,8 @@ export class IfBlockBranch implements Node {
}
export class UnknownBlock implements Node {
- constructor(public name: string, public sourceSpan: ParseSourceSpan) {}
+ constructor(
+ public name: string, public sourceSpan: ParseSourceSpan, public nameSpan: ParseSourceSpan) {}
visit(visitor: Visitor): Result {
return visitor.visitUnknownBlock(this);
diff --git a/packages/compiler/src/render3/r3_control_flow.ts b/packages/compiler/src/render3/r3_control_flow.ts
index 9e48563ac2e0c..b5960f15baf99 100644
--- a/packages/compiler/src/render3/r3_control_flow.ts
+++ b/packages/compiler/src/render3/r3_control_flow.ts
@@ -163,7 +163,7 @@ export function createSwitchBlock(
}
if ((node.name !== 'case' || node.parameters.length === 0) && node.name !== 'default') {
- unknownBlocks.push(new t.UnknownBlock(node.name, node.sourceSpan));
+ unknownBlocks.push(new t.UnknownBlock(node.name, node.sourceSpan, node.nameSpan));
continue;
}
diff --git a/packages/compiler/src/render3/r3_template_transform.ts b/packages/compiler/src/render3/r3_template_transform.ts
index 5706b60a30ed5..ee43a862ea8e4 100644
--- a/packages/compiler/src/render3/r3_template_transform.ts
+++ b/packages/compiler/src/render3/r3_template_transform.ts
@@ -383,7 +383,7 @@ class HtmlAstToIvyAst implements html.Visitor {
}
result = {
- node: new t.UnknownBlock(block.name, block.sourceSpan),
+ node: new t.UnknownBlock(block.name, block.sourceSpan, block.nameSpan),
errors: [new ParseError(block.sourceSpan, errorMessage)],
};
break;
diff --git a/packages/compiler/src/template/pipeline/ir/src/enums.ts b/packages/compiler/src/template/pipeline/ir/src/enums.ts
index 9cec6f5078871..f91b0535eb6da 100644
--- a/packages/compiler/src/template/pipeline/ir/src/enums.ts
+++ b/packages/compiler/src/template/pipeline/ir/src/enums.ts
@@ -185,6 +185,16 @@ export enum OpKind {
*/
Projection,
+ /**
+ * Create a repeater creation instruction op.
+ */
+ RepeaterCreate,
+
+ /**
+ * An update up for a repeater.
+ */
+ Repeater,
+
/**
* The start of an i18n block.
*/
@@ -235,6 +245,11 @@ export enum ExpressionKind {
*/
Context,
+ /**
+ * A reference to the view context, for use inside a track function.
+ */
+ TrackContext,
+
/**
* Read of a variable declared in a `VariableOp`.
*/
@@ -334,8 +349,24 @@ export enum ExpressionKind {
* A test expression for a conditional op.
*/
ConditionalCase,
+
+ /**
+ * A variable for use inside a repeater, providing one of the ambiently-available context
+ * properties ($even, $first, etc.).
+ */
+ DerivedRepeaterVar,
}
+export enum VariableFlags {
+ None = 0b0000,
+
+ /**
+ * Always inline this variable, regardless of the number of times it's used.
+ * An `AlwaysInline` variable may not depend on context, because doing so may cause side effects
+ * that are illegal when multi-inlined. (The optimizer will enforce this constraint.)
+ */
+ AlwaysInline = 0b0001,
+}
/**
* Distinguishes between different kinds of `SemanticVariable`s.
*/
@@ -354,6 +385,11 @@ export enum SemanticVariableKind {
* Represents a saved state that can be used to restore a view in a listener handler function.
*/
SavedView,
+
+ /**
+ * An alias generated by a special embedded view type (e.g. a `@for` block).
+ */
+ Alias,
}
/**
diff --git a/packages/compiler/src/template/pipeline/ir/src/expression.ts b/packages/compiler/src/template/pipeline/ir/src/expression.ts
index a58313bd90068..9e77c8f47cf5a 100644
--- a/packages/compiler/src/template/pipeline/ir/src/expression.ts
+++ b/packages/compiler/src/template/pipeline/ir/src/expression.ts
@@ -20,11 +20,11 @@ import {Interpolation, type UpdateOp} from './ops/update';
/**
* An `o.Expression` subtype representing a logical expression in the intermediate representation.
*/
-export type Expression =
- LexicalReadExpr|ReferenceExpr|ContextExpr|NextContextExpr|GetCurrentViewExpr|RestoreViewExpr|
- ResetViewExpr|ReadVariableExpr|PureFunctionExpr|PureFunctionParameterExpr|PipeBindingExpr|
- PipeBindingVariadicExpr|SafePropertyReadExpr|SafeKeyedReadExpr|SafeInvokeFunctionExpr|EmptyExpr|
- AssignTemporaryExpr|ReadTemporaryExpr|SanitizerExpr|SlotLiteralExpr|ConditionalCaseExpr;
+export type Expression = LexicalReadExpr|ReferenceExpr|ContextExpr|NextContextExpr|
+ GetCurrentViewExpr|RestoreViewExpr|ResetViewExpr|ReadVariableExpr|PureFunctionExpr|
+ PureFunctionParameterExpr|PipeBindingExpr|PipeBindingVariadicExpr|SafePropertyReadExpr|
+ SafeKeyedReadExpr|SafeInvokeFunctionExpr|EmptyExpr|AssignTemporaryExpr|ReadTemporaryExpr|
+ SanitizerExpr|SlotLiteralExpr|ConditionalCaseExpr|DerivedRepeaterVarExpr;
/**
* Transformer type which converts expressions into general `o.Expression`s (which may be an
@@ -69,8 +69,11 @@ export class LexicalReadExpr extends ExpressionBase {
override visitExpression(visitor: o.ExpressionVisitor, context: any): void {}
- override isEquivalent(): boolean {
- return false;
+ override isEquivalent(other: LexicalReadExpr): boolean {
+ // We assume that the lexical reads are in the same context, which must be true for parent
+ // expressions to be equivalent.
+ // TODO: is this generally safe?
+ return this.name === other.name;
}
override isConstant(): boolean {
@@ -144,6 +147,33 @@ export class ContextExpr extends ExpressionBase {
}
}
+/**
+ * A reference to the current view context inside a track function.
+ */
+export class TrackContextExpr extends ExpressionBase {
+ override readonly kind = ExpressionKind.TrackContext;
+
+ constructor(readonly view: XrefId) {
+ super();
+ }
+
+ override visitExpression(): void {}
+
+ override isEquivalent(e: o.Expression): boolean {
+ return e instanceof TrackContextExpr && e.view === this.view;
+ }
+
+ override isConstant(): boolean {
+ return false;
+ }
+
+ override transformInternalExpressions(): void {}
+
+ override clone(): TrackContextExpr {
+ return new TrackContextExpr(this.view);
+ }
+}
+
/**
* Runtime operation to navigate to the next view context in the view hierarchy.
*/
@@ -806,6 +836,39 @@ export class ConditionalCaseExpr extends ExpressionBase {
}
}
+export enum DerivedRepeaterVarIdentity {
+ First,
+ Last,
+ Even,
+ Odd,
+}
+
+export class DerivedRepeaterVarExpr extends ExpressionBase {
+ override readonly kind = ExpressionKind.DerivedRepeaterVar;
+
+ constructor(readonly xref: XrefId, readonly identity: DerivedRepeaterVarIdentity) {
+ super();
+ }
+
+ override transformInternalExpressions(transform: ExpressionTransform, flags: VisitorContextFlag):
+ void {}
+
+ override visitExpression(visitor: o.ExpressionVisitor, context: any) {}
+
+ override isEquivalent(e: o.Expression): boolean {
+ return e instanceof DerivedRepeaterVarExpr && e.identity === this.identity &&
+ e.xref === this.xref;
+ }
+
+ override isConstant(): boolean {
+ return false;
+ }
+
+ override clone(): o.Expression {
+ return new DerivedRepeaterVarExpr(this.xref, this.identity);
+ }
+}
+
/**
* Visits all `Expression`s in the AST of `op` with the `visitor` function.
*/
@@ -903,6 +966,15 @@ export function transformExpressionsInOp(
transformExpressionsInStatement(statement, transform, flags);
}
break;
+ case OpKind.RepeaterCreate:
+ op.track = transformExpressionsInExpression(op.track, transform, flags);
+ if (op.trackByFn !== null) {
+ op.trackByFn = transformExpressionsInExpression(op.trackByFn, transform, flags);
+ }
+ break;
+ case OpKind.Repeater:
+ op.collection = transformExpressionsInExpression(op.collection, transform, flags);
+ break;
case OpKind.I18n:
case OpKind.I18nStart:
for (const [placeholder, expression] of op.params) {
diff --git a/packages/compiler/src/template/pipeline/ir/src/ops/create.ts b/packages/compiler/src/template/pipeline/ir/src/ops/create.ts
index 132b23e8388d7..cf9a14a72c74e 100644
--- a/packages/compiler/src/template/pipeline/ir/src/ops/create.ts
+++ b/packages/compiler/src/template/pipeline/ir/src/ops/create.ts
@@ -20,24 +20,24 @@ import type {UpdateOp} from './update';
/**
* An operation usable on the creation side of the IR.
*/
-export type CreateOp =
- ListEndOp|StatementOp|ElementOp|ElementStartOp|ElementEndOp|ContainerOp|
- ContainerStartOp|ContainerEndOp|TemplateOp|EnableBindingsOp|DisableBindingsOp|TextOp|ListenerOp|
- PipeOp|VariableOp|NamespaceOp|ProjectionDefOp|ProjectionOp|ExtractedAttributeOp|
- DeferOp|DeferSecondaryBlockOp|DeferOnOp|ExtractedMessageOp|I18nOp|I18nStartOp|I18nEndOp|IcuOp;
+export type CreateOp = ListEndOp|StatementOp|ElementOp|ElementStartOp|
+ ElementEndOp|ContainerOp|ContainerStartOp|ContainerEndOp|TemplateOp|EnableBindingsOp|
+ DisableBindingsOp|TextOp|ListenerOp|PipeOp|VariableOp|NamespaceOp|ProjectionDefOp|
+ ProjectionOp|ExtractedAttributeOp|DeferOp|DeferSecondaryBlockOp|DeferOnOp|RepeaterCreateOp|
+ ExtractedMessageOp|I18nOp|I18nStartOp|I18nEndOp|IcuOp;
/**
* An operation representing the creation of an element or container.
*/
export type ElementOrContainerOps =
- ElementOp|ElementStartOp|ContainerOp|ContainerStartOp|TemplateOp|ProjectionOp;
+ ElementOp|ElementStartOp|ContainerOp|ContainerStartOp|TemplateOp|ProjectionOp|RepeaterCreateOp;
/**
* The set of OpKinds that represent the creation of an element or container
*/
const elementContainerOpKinds = new Set([
OpKind.Element, OpKind.ElementStart, OpKind.Container, OpKind.ContainerStart, OpKind.Template,
- OpKind.Projection
+ OpKind.Projection, OpKind.RepeaterCreate
]);
/**
@@ -102,7 +102,7 @@ export interface ElementOrContainerOpBase extends Op, ConsumesSlotOpTr
}
export interface ElementOpBase extends ElementOrContainerOpBase {
- kind: OpKind.Element|OpKind.ElementStart|OpKind.Template;
+ kind: OpKind.Element|OpKind.ElementStart|OpKind.Template|OpKind.RepeaterCreate;
/**
* The HTML tag name for this element.
@@ -215,6 +215,89 @@ export function createTemplateOp(
};
}
+/**
+ * An op that creates a repeater (e.g. a for loop).
+ */
+export interface RepeaterCreateOp extends ElementOpBase {
+ kind: OpKind.RepeaterCreate;
+
+ /**
+ * The number of declaration slots used by this repeater's template, or `null` if slots have not
+ * yet been assigned.
+ */
+ decls: number|null;
+
+ /**
+ * The number of binding variable slots used by this repeater's, or `null` if binding variables
+ * have not yet been counted.
+ */
+ vars: number|null;
+
+ /**
+ * The Xref of the empty view function. (For the primary view function, use the `xref` property).
+ */
+ emptyView: XrefId|null;
+
+ /**
+ * The track expression to use while iterating.
+ */
+ track: o.Expression;
+
+ /**
+ * `null` initially, then an `o.Expression`. Might be a track expression, or might be a reference
+ * into the constant pool.
+ */
+ trackByFn: o.Expression|null;
+
+ /**
+ * Context variables avaialable in this block.
+ */
+ varNames: RepeaterVarNames;
+
+ /**
+ * Whether the repeater track function relies on the component instance.
+ */
+ usesComponentInstance: boolean;
+
+ sourceSpan: ParseSourceSpan;
+}
+
+// TODO: add source spans?
+export interface RepeaterVarNames {
+ $index: string;
+ $count: string;
+ $first: string;
+ $last: string;
+ $even: string;
+ $odd: string;
+ $implicit: string;
+}
+
+export function createRepeaterCreateOp(
+ primaryView: XrefId, emptyView: XrefId|null, track: o.Expression, varNames: RepeaterVarNames,
+ sourceSpan: ParseSourceSpan): RepeaterCreateOp {
+ return {
+ kind: OpKind.RepeaterCreate,
+ attributes: null,
+ xref: primaryView,
+ emptyView,
+ track,
+ trackByFn: null,
+ tag: 'For',
+ namespace: Namespace.HTML,
+ nonBindable: false,
+ localRefs: [],
+ decls: null,
+ vars: null,
+ varNames,
+ usesComponentInstance: false,
+ sourceSpan,
+ ...TRAIT_CONSUMES_SLOT,
+ ...NEW_OP,
+ numSlotsUsed: emptyView === null ? 2 : 3,
+ };
+}
+
/**
* Logical operation representing the end of an element structure in the creation IR.
*
diff --git a/packages/compiler/src/template/pipeline/ir/src/ops/shared.ts b/packages/compiler/src/template/pipeline/ir/src/ops/shared.ts
index 07ee7aa93c600..306c0b6780b11 100644
--- a/packages/compiler/src/template/pipeline/ir/src/ops/shared.ts
+++ b/packages/compiler/src/template/pipeline/ir/src/ops/shared.ts
@@ -7,7 +7,7 @@
*/
import * as o from '../../../../../output/output_ast';
-import {OpKind} from '../enums';
+import {OpKind, VariableFlags} from '../enums';
import {Op, XrefId} from '../operations';
import {SemanticVariable} from '../variable';
@@ -68,18 +68,22 @@ export interface VariableOp> extends Op {
* Expression representing the value of the variable.
*/
initializer: o.Expression;
+
+ flags: VariableFlags;
}
/**
* Create a `VariableOp`.
*/
export function createVariableOp>(
- xref: XrefId, variable: SemanticVariable, initializer: o.Expression): VariableOp {
+ xref: XrefId, variable: SemanticVariable, initializer: o.Expression,
+ flags: VariableFlags): VariableOp {
return {
kind: OpKind.Variable,
xref,
variable,
initializer,
+ flags,
...NEW_OP,
};
}
diff --git a/packages/compiler/src/template/pipeline/ir/src/ops/update.ts b/packages/compiler/src/template/pipeline/ir/src/ops/update.ts
index 1e6ccb82cf386..28c23d7b21f53 100644
--- a/packages/compiler/src/template/pipeline/ir/src/ops/update.ts
+++ b/packages/compiler/src/template/pipeline/ir/src/ops/update.ts
@@ -13,7 +13,7 @@ import {ParseSourceSpan} from '../../../../../parse_util';
import {BindingKind, I18nParamResolutionTime, OpKind} from '../enums';
import type {ConditionalCaseExpr} from '../expression';
import {Op, XrefId} from '../operations';
-import {ConsumesVarsTrait, DependsOnSlotContextOpTrait, TRAIT_CONSUMES_VARS, TRAIT_DEPENDS_ON_SLOT_CONTEXT, TRAIT_USES_SLOT_INDEX, UsesSlotIndexTrait} from '../traits';
+import {ConsumesSlotOpTrait, ConsumesVarsTrait, DependsOnSlotContextOpTrait, TRAIT_CONSUMES_SLOT, TRAIT_CONSUMES_VARS, TRAIT_DEPENDS_ON_SLOT_CONTEXT, TRAIT_USES_SLOT_INDEX, UsesSlotIndexTrait} from '../traits';
import type {HostPropertyOp} from './host';
import {ListEndOp, NEW_OP, StatementOp, VariableOp} from './shared';
@@ -24,7 +24,7 @@ import {ListEndOp, NEW_OP, StatementOp, VariableOp} from './shared';
*/
export type UpdateOp = ListEndOp|StatementOp|PropertyOp|AttributeOp|StylePropOp|
ClassPropOp|StyleMapOp|ClassMapOp|InterpolateTextOp|AdvanceOp|VariableOp|BindingOp|
- HostPropertyOp|ConditionalOp|I18nExpressionOp|I18nApplyOp|IcuUpdateOp;
+ HostPropertyOp|ConditionalOp|I18nExpressionOp|I18nApplyOp|IcuUpdateOp|RepeaterOp;
/**
* A logical operation to perform string interpolation on a text node.
@@ -535,6 +535,34 @@ export function createConditionalOp(
};
}
+export interface RepeaterOp extends Op, UsesSlotIndexTrait {
+ kind: OpKind.Repeater;
+
+ /**
+ * The RepeaterCreate op associated with this repeater.
+ */
+ target: XrefId;
+
+ /**
+ * The collection provided to the for loop as its expression.
+ */
+ collection: o.Expression;
+
+ sourceSpan: ParseSourceSpan;
+}
+
+export function createRepeaterOp(
+ repeaterCreate: XrefId, collection: o.Expression, sourceSpan: ParseSourceSpan): RepeaterOp {
+ return {
+ kind: OpKind.Repeater,
+ target: repeaterCreate,
+ collection,
+ sourceSpan,
+ ...NEW_OP,
+ ...TRAIT_USES_SLOT_INDEX,
+ };
+}
+
/**
* An op that represents an expression in an i18n message.
*/
@@ -571,6 +599,8 @@ export interface I18nExpressionOp extends Op, ConsumesVarsTrait,
sourceSpan: ParseSourceSpan;
}
+
+
/**
* Create an i18n expression op.
*/
@@ -598,7 +628,7 @@ export interface I18nApplyOp extends Op, UsesSlotIndexTrait {
kind: OpKind.I18nApply;
/**
- * The i18n block to which expressions are applied.
+ * The i18n block to which expressions are applied
*/
target: XrefId;
@@ -606,7 +636,7 @@ export interface I18nApplyOp extends Op, UsesSlotIndexTrait {
}
/**
- * Creates an op to apply i18n expression ops.
+ *Creates an op to apply i18n expression ops
*/
export function createI18nApplyOp(target: XrefId, sourceSpan: ParseSourceSpan): I18nApplyOp {
return {
diff --git a/packages/compiler/src/template/pipeline/ir/src/variable.ts b/packages/compiler/src/template/pipeline/ir/src/variable.ts
index 6980b70572de9..50eb7f5d9de44 100644
--- a/packages/compiler/src/template/pipeline/ir/src/variable.ts
+++ b/packages/compiler/src/template/pipeline/ir/src/variable.ts
@@ -6,13 +6,14 @@
* found in the LICENSE file at https://angular.io/license
*/
+import * as o from '../../../../output/output_ast';
import type {SemanticVariableKind} from './enums';
import type {XrefId} from './operations';
/**
* Union type for the different kinds of variables.
*/
-export type SemanticVariable = ContextVariable|IdentifierVariable|SavedViewVariable;
+export type SemanticVariable = ContextVariable|IdentifierVariable|SavedViewVariable|AliasVariable;
export interface SemanticVariableBase {
kind: SemanticVariableKind;
@@ -64,3 +65,13 @@ export interface SavedViewVariable extends SemanticVariableBase {
*/
view: XrefId;
}
+
+/**
+ * A variable that will be inlined at every location it is used. An alias is also allowed to depend
+ * on the value of a semantic variable.
+ */
+export interface AliasVariable extends SemanticVariableBase {
+ kind: SemanticVariableKind.Alias;
+ identifier: string;
+ expression: o.Expression;
+}
diff --git a/packages/compiler/src/template/pipeline/src/compilation.ts b/packages/compiler/src/template/pipeline/src/compilation.ts
index b89fc3a3cbdec..dfcb07ab545ed 100644
--- a/packages/compiler/src/template/pipeline/src/compilation.ts
+++ b/packages/compiler/src/template/pipeline/src/compilation.ts
@@ -202,6 +202,12 @@ export class ViewCompilationUnit extends CompilationUnit {
*/
readonly contextVariables = new Map();
+ /**
+ * Set of aliases available within this view. An alias is a variable whose provided expression is
+ * inlined at every location it is used. It may also depend on context variables, by name.
+ */
+ readonly aliases = new Set();
+
/**
* Number of declaration slots used within this view, or `null` if slots have not yet been
* allocated.
diff --git a/packages/compiler/src/template/pipeline/src/emit.ts b/packages/compiler/src/template/pipeline/src/emit.ts
index 4f57ef02f042d..31b62ec6077d8 100644
--- a/packages/compiler/src/template/pipeline/src/emit.ts
+++ b/packages/compiler/src/template/pipeline/src/emit.ts
@@ -1,4 +1,5 @@
/**
+ *
* @license
* Copyright Google LLC All Rights Reserved.
*
@@ -23,6 +24,7 @@ import {phaseConditionals} from './phases/conditionals';
import {phaseConstCollection} from './phases/const_collection';
import {phaseEmptyElements} from './phases/empty_elements';
import {phaseExpandSafeReads} from './phases/expand_safe_reads';
+import {phaseRepeaterDerivedVars} from './phases/repeater_derived_vars';
import {phaseGenerateAdvance} from './phases/generate_advance';
import {phaseGenerateProjectionDef} from './phases/generate_projection_def';
import {phaseGenerateVariables} from './phases/generate_variables';
@@ -61,6 +63,9 @@ import {phaseTemporaryVariables} from './phases/temporary_variables';
import {phaseVarCounting} from './phases/var_counting';
import {phaseVariableOptimization} from './phases/variable_optimization';
import {phaseWrapIcus} from './phases/wrap_icus';
+import {phaseTrackVariables} from './phases/track_variables';
+import {phaseTrackFnGeneration} from './phases/track_fn_generation';
+import {phaseTrackFnOptimization} from './phases/track_fn_optimization';
type Phase = {
fn: (job: CompilationJob) => void; kind: Kind.Both | Kind.Host | Kind.Tmpl;
@@ -96,7 +101,10 @@ const phases: Phase[] = [
{kind: Kind.Tmpl, fn: phaseSaveRestoreView},
{kind: Kind.Tmpl, fn: phaseFindAnyCasts},
{kind: Kind.Both, fn: phaseResolveDollarEvent},
+ {kind: Kind.Tmpl, fn: phaseRepeaterDerivedVars},
+ {kind: Kind.Tmpl, fn: phaseTrackVariables},
{kind: Kind.Both, fn: phaseResolveNames},
+ {kind: Kind.Tmpl, fn: phaseTrackFnOptimization},
{kind: Kind.Both, fn: phaseResolveContexts},
{kind: Kind.Tmpl, fn: phaseResolveSanitizers}, // TODO: run in both
{kind: Kind.Tmpl, fn: phaseLocalRefs},
@@ -105,6 +113,7 @@ const phases: Phase[] = [
{kind: Kind.Both, fn: phaseTemporaryVariables},
{kind: Kind.Tmpl, fn: phaseSlotAllocation},
{kind: Kind.Tmpl, fn: phaseResolveI18nPlaceholders},
+ {kind: Kind.Tmpl, fn: phaseTrackFnGeneration},
{kind: Kind.Tmpl, fn: phaseI18nMessageExtraction},
{kind: Kind.Tmpl, fn: phaseI18nConstCollection},
{kind: Kind.Tmpl, fn: phaseConstTraitCollection},
diff --git a/packages/compiler/src/template/pipeline/src/ingest.ts b/packages/compiler/src/template/pipeline/src/ingest.ts
index f3501a0164cca..5001e4ea3f2d7 100644
--- a/packages/compiler/src/template/pipeline/src/ingest.ts
+++ b/packages/compiler/src/template/pipeline/src/ingest.ts
@@ -14,6 +14,7 @@ import {splitNsName} from '../../../ml_parser/tags';
import * as o from '../../../output/output_ast';
import {ParseSourceSpan} from '../../../parse_util';
import * as t from '../../../render3/r3_ast';
+import {Identifiers} from '../../../render3/r3_identifiers';
import {BindingParser} from '../../../template_parser/binding_parser';
import * as ir from '../ir';
@@ -131,6 +132,8 @@ function ingestNodes(unit: ViewCompilationUnit, template: t.Node[]): void {
ingestDeferBlock(unit, node);
} else if (node instanceof t.Icu) {
ingestIcu(unit, node);
+ } else if (node instanceof t.ForLoopBlock) {
+ ingestForBlock(unit, node);
} else {
throw new Error(`Unsupported template node: ${node.constructor.name}`);
}
@@ -395,6 +398,64 @@ function ingestIcu(unit: ViewCompilationUnit, icu: t.Icu) {
}
}
+/**
+ * Ingest an `@for` block into the given `ViewCompilation`.
+ */
+function ingestForBlock(unit: ViewCompilationUnit, forBlock: t.ForLoopBlock): void {
+ const repeaterView = unit.job.allocateView(unit.xref);
+
+ const createRepeaterAlias = (ident: string, repeaterVar: ir.DerivedRepeaterVarIdentity) => {
+ repeaterView.aliases.add({
+ kind: ir.SemanticVariableKind.Alias,
+ name: null,
+ identifier: ident,
+ expression: new ir.DerivedRepeaterVarExpr(repeaterView.xref, repeaterVar),
+ });
+ };
+
+ // Set all the context variables and aliases available in the repeater.
+ repeaterView.contextVariables.set(forBlock.item.name, forBlock.item.value);
+ repeaterView.contextVariables.set(
+ forBlock.contextVariables.$index.name, forBlock.contextVariables.$index.value);
+ repeaterView.contextVariables.set(
+ forBlock.contextVariables.$count.name, forBlock.contextVariables.$count.value);
+ createRepeaterAlias(forBlock.contextVariables.$first.name, ir.DerivedRepeaterVarIdentity.First);
+ createRepeaterAlias(forBlock.contextVariables.$last.name, ir.DerivedRepeaterVarIdentity.Last);
+ createRepeaterAlias(forBlock.contextVariables.$even.name, ir.DerivedRepeaterVarIdentity.Even);
+ createRepeaterAlias(forBlock.contextVariables.$odd.name, ir.DerivedRepeaterVarIdentity.Odd);
+
+ const sourceSpan = convertSourceSpan(forBlock.trackBy.span, forBlock.sourceSpan);
+ const track = convertAst(forBlock.trackBy, unit.job, sourceSpan);
+
+ ingestNodes(repeaterView, forBlock.children);
+
+ let emptyView: ViewCompilationUnit|null = null;
+ if (forBlock.empty !== null) {
+ emptyView = unit.job.allocateView(unit.xref);
+ ingestNodes(emptyView, forBlock.empty.children);
+ }
+
+ const varNames: ir.RepeaterVarNames = {
+ $index: forBlock.contextVariables.$index.name,
+ $count: forBlock.contextVariables.$count.name,
+ $first: forBlock.contextVariables.$first.name,
+ $last: forBlock.contextVariables.$last.name,
+ $even: forBlock.contextVariables.$even.name,
+ $odd: forBlock.contextVariables.$odd.name,
+ $implicit: forBlock.item.name,
+ };
+
+ const repeaterCreate = ir.createRepeaterCreateOp(
+ repeaterView.xref, emptyView?.xref ?? null, track, varNames, forBlock.sourceSpan);
+ unit.create.push(repeaterCreate);
+
+ const expression = convertAst(
+ forBlock.expression, unit.job,
+ convertSourceSpan(forBlock.expression.span, forBlock.sourceSpan));
+ const repeater = ir.createRepeaterOp(repeaterCreate.xref, expression, forBlock.sourceSpan);
+ unit.update.push(repeater);
+}
+
/**
* Convert a template AST expression into an output AST expression.
*/
@@ -452,7 +513,8 @@ function convertAst(
} else if (ast instanceof e.LiteralMap) {
const entries = ast.keys.map((key, idx) => {
const value = ast.values[idx];
- // TODO: should literals have source maps, or do we just map the whole surrounding expression?
+ // TODO: should literals have source maps, or do we just map the whole surrounding
+ // expression?
return new o.LiteralMapEntry(key.key, convertAst(value, job, baseSourceSpan), key.quoted);
});
return new o.LiteralMapExpr(entries, undefined, convertSourceSpan(ast.span, baseSourceSpan));
diff --git a/packages/compiler/src/template/pipeline/src/instruction.ts b/packages/compiler/src/template/pipeline/src/instruction.ts
index 430f5fb5d7a9a..d0d11ee5fe069 100644
--- a/packages/compiler/src/template/pipeline/src/instruction.ts
+++ b/packages/compiler/src/template/pipeline/src/instruction.ts
@@ -233,6 +233,33 @@ export function i18nStart(slot: number, constIndex: number, subTemplateIndex: nu
return call(Identifiers.i18nStart, args, null);
}
+export function repeaterCreate(
+ slot: number, viewFnName: string, decls: number, vars: number, trackByFn: o.Expression,
+ trackByUsesComponentInstance: boolean, emptyViewFnName: string|null, emptyDecls: number|null,
+ emptyVars: number|null, sourceSpan: ParseSourceSpan|null): ir.CreateOp {
+ let args = [
+ o.literal(slot),
+ o.variable(viewFnName),
+ o.literal(decls),
+ o.literal(vars),
+ trackByFn,
+ ];
+ if (trackByUsesComponentInstance || emptyViewFnName !== null) {
+ args.push(o.literal(trackByUsesComponentInstance));
+ if (emptyViewFnName !== null) {
+ args.push(o.variable(emptyViewFnName));
+ args.push(o.literal(emptyDecls));
+ args.push(o.literal(emptyVars));
+ }
+ }
+ return call(Identifiers.repeaterCreate, args, sourceSpan);
+}
+
+export function repeater(
+ metadataSlot: number, collection: o.Expression, sourceSpan: ParseSourceSpan|null): ir.UpdateOp {
+ return call(Identifiers.repeater, [o.literal(metadataSlot), collection], sourceSpan);
+}
+
export function i18n(slot: number, constIndex: number, subTemplateIndex: number): ir.CreateOp {
const args = [o.literal(slot), o.literal(constIndex)];
if (subTemplateIndex) {
diff --git a/packages/compiler/src/template/pipeline/src/phases/generate_variables.ts b/packages/compiler/src/template/pipeline/src/phases/generate_variables.ts
index 78b9ce6fe9444..3263036c22d3f 100644
--- a/packages/compiler/src/template/pipeline/src/phases/generate_variables.ts
+++ b/packages/compiler/src/template/pipeline/src/phases/generate_variables.ts
@@ -43,6 +43,7 @@ function recursivelyProcessView(view: ViewCompilationUnit, parentScope: Scope|nu
for (const op of view.create) {
switch (op.kind) {
case ir.OpKind.Template:
+ case ir.OpKind.RepeaterCreate:
// Descend into child embedded views.
recursivelyProcessView(view.job.views.get(op.xref)!, scope);
break;
@@ -71,6 +72,8 @@ interface Scope {
contextVariables: Map;
+ aliases: Set;
+
/**
* Local references collected from elements within the view.
*/
@@ -122,6 +125,7 @@ function getScopeForView(view: ViewCompilationUnit, parent: Scope|null): Scope {
view: view.xref,
},
contextVariables: new Map(),
+ aliases: view.aliases,
references: [],
parent,
};
@@ -177,23 +181,32 @@ function generateVariablesInScopeForView(
// view with a `nextContext` expression. This context switching operation itself declares a
// variable, because the context of the view may be referenced directly.
newOps.push(ir.createVariableOp(
- view.job.allocateXrefId(), scope.viewContextVariable, new ir.NextContextExpr()));
+ view.job.allocateXrefId(), scope.viewContextVariable, new ir.NextContextExpr(),
+ ir.VariableFlags.None));
}
// Add variables for all context variables available in this scope's view.
- for (const [name, value] of view.job.views.get(scope.view)!.contextVariables) {
+ const scopeView = view.job.views.get(scope.view)!;
+ for (const [name, value] of scopeView.contextVariables) {
const context = new ir.ContextExpr(scope.view);
// We either read the context, or, if the variable is CTX_REF, use the context directly.
const variable = value === ir.CTX_REF ? context : new o.ReadPropExpr(context, value);
// Add the variable declaration.
newOps.push(ir.createVariableOp(
- view.job.allocateXrefId(), scope.contextVariables.get(name)!, variable));
+ view.job.allocateXrefId(), scope.contextVariables.get(name)!, variable,
+ ir.VariableFlags.None));
+ }
+
+ for (const alias of scopeView.aliases) {
+ newOps.push(ir.createVariableOp(
+ view.job.allocateXrefId(), alias, alias.expression.clone(), ir.VariableFlags.AlwaysInline));
}
// Add variables for all local references declared for elements in this scope.
for (const ref of scope.references) {
newOps.push(ir.createVariableOp(
- view.job.allocateXrefId(), ref.variable, new ir.ReferenceExpr(ref.targetId, ref.offset)));
+ view.job.allocateXrefId(), ref.variable, new ir.ReferenceExpr(ref.targetId, ref.offset),
+ ir.VariableFlags.None));
}
if (scope.parent !== null) {
diff --git a/packages/compiler/src/template/pipeline/src/phases/naming.ts b/packages/compiler/src/template/pipeline/src/phases/naming.ts
index 7032e62e55364..75c81afc27090 100644
--- a/packages/compiler/src/template/pipeline/src/phases/naming.ts
+++ b/packages/compiler/src/template/pipeline/src/phases/naming.ts
@@ -65,6 +65,28 @@ function addNamesToView(
case ir.OpKind.Variable:
varNames.set(op.xref, getVariableName(op.variable, state));
break;
+ case ir.OpKind.RepeaterCreate:
+ if (!(unit instanceof ViewCompilationUnit)) {
+ throw new Error(`AssertionError: must be compiling a component`);
+ }
+ if (op.slot === null) {
+ throw new Error(`Expected slot to be assigned`);
+ }
+ if (op.emptyView !== null) {
+ const emptyView = unit.job.views.get(op.emptyView)!;
+ // Repeater empty view function is at slot +2 (metadata is in the first slot).
+ addNamesToView(
+ emptyView,
+ `${baseName}_${prefixWithNamespace(`${op.tag}Empty`, op.namespace)}_${op.slot + 2}`,
+ state, compatibility);
+ }
+ const repeaterToken =
+ op.tag === null ? '' : '_' + prefixWithNamespace(op.tag, op.namespace);
+ // Repeater primary view function is at slot +1 (metadata is in the first slot).
+ addNamesToView(
+ unit.job.views.get(op.xref)!, `${baseName}${repeaterToken}_${op.slot + 1}`, state,
+ compatibility);
+ break;
case ir.OpKind.Template:
if (!(unit instanceof ViewCompilationUnit)) {
throw new Error(`AssertionError: must be compiling a component`);
@@ -112,10 +134,12 @@ function getVariableName(variable: ir.SemanticVariable, state: {index: number}):
variable.name = `ctx_r${state.index++}`;
break;
case ir.SemanticVariableKind.Identifier:
- variable.name = `${variable.identifier}_${state.index++}`;
+ // TODO: Prefix increment and `_r` for compatiblity only.
+ variable.name = `${variable.identifier}_r${++state.index}`;
break;
default:
- variable.name = `_r${state.index++}`;
+ // TODO: Prefix increment for compatibility only.
+ variable.name = `_r${++state.index}`;
break;
}
}
diff --git a/packages/compiler/src/template/pipeline/src/phases/pipe_creation.ts b/packages/compiler/src/template/pipeline/src/phases/pipe_creation.ts
index 5b28683a37162..9b77b7bb12ac5 100644
--- a/packages/compiler/src/template/pipeline/src/phases/pipe_creation.ts
+++ b/packages/compiler/src/template/pipeline/src/phases/pipe_creation.ts
@@ -30,7 +30,11 @@ function processPipeBindingsInView(unit: CompilationUnit): void {
throw new Error(`AssertionError: pipe bindings should not appear in child expressions`);
}
- if (!ir.hasDependsOnSlotContextTrait(updateOp)) {
+ // This update op must be associated with a create op that consumes a slot (either by
+ // depending on the ambient context of `target`, or merely referencing that create op via
+ // `target`).
+ if (!ir.hasDependsOnSlotContextTrait(updateOp) &&
+ !ir.hasUsesSlotIndexTrait(updateOp)) {
throw new Error(`AssertionError: pipe binding associated with non-slot operation ${
ir.OpKind[updateOp.kind]}`);
}
diff --git a/packages/compiler/src/template/pipeline/src/phases/pure_function_extraction.ts b/packages/compiler/src/template/pipeline/src/phases/pure_function_extraction.ts
index 94be6bfb34003..0e0dfcc0e7bd3 100644
--- a/packages/compiler/src/template/pipeline/src/phases/pure_function_extraction.ts
+++ b/packages/compiler/src/template/pipeline/src/phases/pure_function_extraction.ts
@@ -41,6 +41,7 @@ class PureFunctionConstant extends GenericKeyFn implements SharedConstantDefinit
}
}
+ // TODO: Use the new pool method `getSharedFunctionReference`
toSharedConstantDeclaration(declName: string, keyExpr: o.Expression): o.Statement {
const fnParams: o.FnParam[] = [];
for (let idx = 0; idx < this.numArgs; idx++) {
diff --git a/packages/compiler/src/template/pipeline/src/phases/reify.ts b/packages/compiler/src/template/pipeline/src/phases/reify.ts
index d36050bd6dcea..d32830f82ddb4 100644
--- a/packages/compiler/src/template/pipeline/src/phases/reify.ts
+++ b/packages/compiler/src/template/pipeline/src/phases/reify.ts
@@ -164,6 +164,42 @@ function reifyCreateOperations(unit: CompilationUnit, ops: ir.OpList(
op, ng.projection(op.slot, op.projectionSlotIndex, op.attributes));
break;
+ case ir.OpKind.RepeaterCreate:
+ if (op.slot === null) {
+ throw new Error('No slot was assigned for repeater instruction');
+ }
+ if (!(unit instanceof ViewCompilationUnit)) {
+ throw new Error(`AssertionError: must be compiling a component`);
+ }
+ const repeaterView = unit.job.views.get(op.xref)!;
+ if (repeaterView.fnName === null) {
+ throw new Error(`AssertionError: expected repeater primary view to have been named`);
+ }
+
+ let emptyViewFnName: string|null = null;
+ let emptyDecls: number|null = null;
+ let emptyVars: number|null = null;
+ if (op.emptyView !== null) {
+ const emptyView = unit.job.views.get(op.emptyView);
+ if (emptyView === undefined) {
+ throw new Error(
+ 'AssertionError: repeater had empty view xref, but empty view was not found');
+ }
+ if (emptyView.fnName === null || emptyView.decls === null || emptyView.vars === null) {
+ throw new Error(
+ `AssertionError: expected repeater empty view to have been named and counted`);
+ }
+ emptyViewFnName = emptyView.fnName;
+ emptyDecls = emptyView.decls;
+ emptyVars = emptyView.vars;
+ }
+
+ ir.OpList.replace(
+ op,
+ ng.repeaterCreate(
+ op.slot, repeaterView.fnName, op.decls!, op.vars!, op.trackByFn!,
+ op.usesComponentInstance, emptyViewFnName, emptyDecls, emptyVars, op.sourceSpan));
+ break;
case ir.OpKind.Statement:
// Pass statement operations directly through.
break;
@@ -280,6 +316,9 @@ function reifyUpdateOperations(_unit: CompilationUnit, ops: ir.OpList();
+
+ for (const unit of job.units) {
+ for (const op of unit.ops()) {
+ if (op.kind === ir.OpKind.RepeaterCreate) {
+ repeaters.set(op.xref, op);
+ }
+ }
+ }
+
+ for (const unit of job.units) {
+ for (const op of unit.ops()) {
+ ir.transformExpressionsInOp(op, expr => {
+ if (!(expr instanceof ir.DerivedRepeaterVarExpr)) {
+ return expr;
+ }
+ const repeaterOp = repeaters.get(expr.xref)!;
+
+ switch (expr.identity) {
+ case ir.DerivedRepeaterVarIdentity.First:
+ return new o.BinaryOperatorExpr(
+ o.BinaryOperator.Identical, new ir.LexicalReadExpr(repeaterOp.varNames.$index),
+ o.literal(0));
+ case ir.DerivedRepeaterVarIdentity.Last:
+ return new o.BinaryOperatorExpr(
+ o.BinaryOperator.Identical, new ir.LexicalReadExpr(repeaterOp.varNames.$index),
+ new o.BinaryOperatorExpr(
+ o.BinaryOperator.Minus, new ir.LexicalReadExpr(repeaterOp.varNames.$count),
+ o.literal(1)));
+ case ir.DerivedRepeaterVarIdentity.Even:
+ return new o.BinaryOperatorExpr(
+ o.BinaryOperator.Identical,
+ new o.BinaryOperatorExpr(
+ o.BinaryOperator.Modulo, new ir.LexicalReadExpr(repeaterOp.varNames.$index),
+ o.literal(2)),
+ o.literal(0));
+ case ir.DerivedRepeaterVarIdentity.Odd:
+ return new o.BinaryOperatorExpr(
+ o.BinaryOperator.NotIdentical,
+ new o.BinaryOperatorExpr(
+ o.BinaryOperator.Modulo, new ir.LexicalReadExpr(repeaterOp.varNames.$index),
+ o.literal(2)),
+ o.literal(0));
+ }
+ }, ir.VisitorContextFlag.None);
+ }
+ }
+}
diff --git a/packages/compiler/src/template/pipeline/src/phases/resolve_names.ts b/packages/compiler/src/template/pipeline/src/phases/resolve_names.ts
index 770750d0bcc13..4a4abb8d23e5b 100644
--- a/packages/compiler/src/template/pipeline/src/phases/resolve_names.ts
+++ b/packages/compiler/src/template/pipeline/src/phases/resolve_names.ts
@@ -42,6 +42,7 @@ function processLexicalScope(
case ir.OpKind.Variable:
switch (op.variable.kind) {
case ir.SemanticVariableKind.Identifier:
+ case ir.SemanticVariableKind.Alias:
// This variable represents some kind of identifier which can be used in the template.
if (scope.has(op.variable.identifier)) {
continue;
diff --git a/packages/compiler/src/template/pipeline/src/phases/save_restore_view.ts b/packages/compiler/src/template/pipeline/src/phases/save_restore_view.ts
index 908f571313029..72d5df4da0d00 100644
--- a/packages/compiler/src/template/pipeline/src/phases/save_restore_view.ts
+++ b/packages/compiler/src/template/pipeline/src/phases/save_restore_view.ts
@@ -19,7 +19,7 @@ export function phaseSaveRestoreView(job: ComponentCompilationJob): void {
name: null,
view: view.xref,
},
- new ir.GetCurrentViewExpr()),
+ new ir.GetCurrentViewExpr(), ir.VariableFlags.None),
]);
for (const op of view.create) {
@@ -56,7 +56,7 @@ function addSaveRestoreViewOperationToListener(unit: ViewCompilationUnit, op: ir
name: null,
view: unit.xref,
},
- new ir.RestoreViewExpr(unit.xref)),
+ new ir.RestoreViewExpr(unit.xref), ir.VariableFlags.None),
]);
// The "restore view" operation in listeners requires a call to `resetView` to reset the
diff --git a/packages/compiler/src/template/pipeline/src/phases/slot_allocation.ts b/packages/compiler/src/template/pipeline/src/phases/slot_allocation.ts
index 605cf8e84ec54..0c92e15d82385 100644
--- a/packages/compiler/src/template/pipeline/src/phases/slot_allocation.ts
+++ b/packages/compiler/src/template/pipeline/src/phases/slot_allocation.ts
@@ -58,14 +58,14 @@ export function phaseSlotAllocation(job: ComponentCompilationJob): void {
// propagate the number of slots used for each view into the operation which declares it.
for (const unit of job.units) {
for (const op of unit.ops()) {
- if (op.kind === ir.OpKind.Template) {
+ if (op.kind === ir.OpKind.Template || op.kind === ir.OpKind.RepeaterCreate) {
// Record the number of slots used by the view this `ir.TemplateOp` declares in the
// operation itself, so it can be emitted later.
const childView = job.views.get(op.xref)!;
op.decls = childView.decls;
}
- if (ir.hasUsesSlotIndexTrait(op) && op.targetSlot === null) {
+ if (ir.hasUsesSlotIndexTrait(op) && op.target !== null && op.targetSlot === null) {
if (!slotMap.has(op.target)) {
// We do expect to find a slot allocated for everything which might be referenced.
throw new Error(
diff --git a/packages/compiler/src/template/pipeline/src/phases/track_fn_generation.ts b/packages/compiler/src/template/pipeline/src/phases/track_fn_generation.ts
new file mode 100644
index 0000000000000..8938c2e7e52a2
--- /dev/null
+++ b/packages/compiler/src/template/pipeline/src/phases/track_fn_generation.ts
@@ -0,0 +1,56 @@
+/**
+ * @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
+ */
+
+import * as o from '../../../../output/output_ast';
+import {Identifiers} from '../../../../render3/r3_identifiers';
+import * as ir from '../../ir';
+
+import type {CompilationJob} from '../compilation';
+
+/**
+ * Generate track functions that need to be extracted to the constant pool. This entails wrapping
+ * them in an arrow (or traditional) function, replacing context reads with `this.`, and storing
+ * them in the constant pool.
+ *
+ * Note that, if a track function was previously optimized, it will not need to be extracted, and
+ * this phase is a no-op.
+ */
+export function phaseTrackFnGeneration(job: CompilationJob): void {
+ for (const unit of job.units) {
+ for (const op of unit.create) {
+ if (op.kind !== ir.OpKind.RepeaterCreate) {
+ continue;
+ }
+ if (op.trackByFn !== null) {
+ // The final track function was already set, probably because it was optimized.
+ continue;
+ }
+
+ // Find all component context reads.
+ let usesComponentContext = false;
+ op.track = ir.transformExpressionsInExpression(op.track, expr => {
+ if (expr instanceof ir.TrackContextExpr) {
+ usesComponentContext = true;
+ return o.variable('this');
+ }
+ return expr;
+ }, ir.VisitorContextFlag.None);
+
+ let fn: o.FunctionExpr|o.ArrowFunctionExpr;
+
+ const fnParams = [new o.FnParam('$index'), new o.FnParam('$item')];
+ if (usesComponentContext) {
+ fn = new o.FunctionExpr(fnParams, [new o.ReturnStatement(op.track)]);
+ } else {
+ fn = o.arrowFn(fnParams, op.track);
+ }
+
+ op.trackByFn = job.pool.getSharedFunctionReference(fn, '_forTrack');
+ }
+ }
+}
diff --git a/packages/compiler/src/template/pipeline/src/phases/track_fn_optimization.ts b/packages/compiler/src/template/pipeline/src/phases/track_fn_optimization.ts
new file mode 100644
index 0000000000000..b2c507f30aaf8
--- /dev/null
+++ b/packages/compiler/src/template/pipeline/src/phases/track_fn_optimization.ts
@@ -0,0 +1,83 @@
+/**
+ * @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
+ */
+
+import * as o from '../../../../output/output_ast';
+import {Identifiers} from '../../../../render3/r3_identifiers';
+import * as ir from '../../ir';
+
+import type {CompilationJob} from '../compilation';
+
+export function phaseTrackFnOptimization(job: CompilationJob): void {
+ for (const unit of job.units) {
+ for (const op of unit.create) {
+ if (op.kind !== ir.OpKind.RepeaterCreate) {
+ continue;
+ }
+ if (op.track instanceof o.ReadVarExpr && op.track.name === '$index') {
+ // Top-level access of `$index` uses the built in `repeaterTrackByIndex`.
+ op.trackByFn = o.importExpr(Identifiers.repeaterTrackByIndex);
+ } else if (op.track instanceof o.ReadVarExpr && op.track.name === '$item') {
+ // Top-level access of the item uses the built in `repeaterTrackByIdentity`.
+ op.trackByFn = o.importExpr(Identifiers.repeaterTrackByIdentity);
+ } else if (isTrackByFunctionCall(job.root.xref, op.track)) {
+ // Top-level method calls in the form of `fn($index, item)` can be passed in directly.
+ if (op.track.receiver.receiver.view === unit.xref) {
+ // TODO: this may be wrong
+ op.trackByFn = op.track.receiver;
+ } else {
+ // This is a plain method call, but not in the component's root view.
+ // We need to get the component instance, and then call the method on it.
+ op.trackByFn =
+ o.importExpr(Identifiers.componentInstance).callFn([]).prop(op.track.receiver.name);
+ // Because the context is not avaiable (without a special function), we don't want to
+ // try to resolve it later. Let's get rid of it by overwriting the original track
+ // expression (which won't be used anyway).
+ op.track = op.trackByFn;
+ }
+ } else {
+ // The track function could not be optimized.
+ // Replace context reads with a special IR expression, since context reads in a track
+ // function are emitted specially.
+ op.track = ir.transformExpressionsInExpression(op.track, expr => {
+ if (expr instanceof ir.ContextExpr) {
+ op.usesComponentInstance = true;
+ return new ir.TrackContextExpr(expr.view);
+ }
+ return expr;
+ }, ir.VisitorContextFlag.None);
+ }
+ }
+ }
+}
+
+function isTrackByFunctionCall(
+ rootView: ir.XrefId, expr: o.Expression): expr is o.InvokeFunctionExpr&{
+ receiver: o.ReadPropExpr &
+ {
+ receiver: ir.ContextExpr
+ }
+} {
+ if (!(expr instanceof o.InvokeFunctionExpr) || expr.args.length !== 2) {
+ return false;
+ }
+
+ if (!(expr.receiver instanceof o.ReadPropExpr &&
+ expr.receiver.receiver instanceof ir.ContextExpr) ||
+ expr.receiver.receiver.view !== rootView) {
+ return false;
+ }
+
+ const [arg0, arg1] = expr.args;
+ if (!(arg0 instanceof o.ReadVarExpr) || arg0.name !== '$index') {
+ return false;
+ }
+ if (!(arg1 instanceof o.ReadVarExpr) || arg1.name !== '$item') {
+ return false;
+ }
+ return true;
+}
diff --git a/packages/compiler/src/template/pipeline/src/phases/track_variables.ts b/packages/compiler/src/template/pipeline/src/phases/track_variables.ts
new file mode 100644
index 0000000000000..1e7130f6977ec
--- /dev/null
+++ b/packages/compiler/src/template/pipeline/src/phases/track_variables.ts
@@ -0,0 +1,35 @@
+/**
+ * @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
+ */
+
+import * as o from '../../../../output/output_ast';
+import * as ir from '../../ir';
+
+import type {CompilationJob} from '../compilation';
+
+export function phaseTrackVariables(job: CompilationJob): void {
+ for (const unit of job.units) {
+ for (const op of unit.create) {
+ if (op.kind !== ir.OpKind.RepeaterCreate) {
+ continue;
+ }
+
+ op.track = ir.transformExpressionsInExpression(op.track, expr => {
+ if (expr instanceof ir.LexicalReadExpr) {
+ if (expr.name === op.varNames.$index) {
+ return o.variable('$index');
+ } else if (expr.name === op.varNames.$implicit) {
+ return o.variable('$item');
+ }
+
+ // TODO: handle prohibited context variables (emit as globals?)
+ }
+ return expr;
+ }, ir.VisitorContextFlag.None);
+ }
+ }
+}
diff --git a/packages/compiler/src/template/pipeline/src/phases/var_counting.ts b/packages/compiler/src/template/pipeline/src/phases/var_counting.ts
index 3767043f21c68..f1a81afdfd8ff 100644
--- a/packages/compiler/src/template/pipeline/src/phases/var_counting.ts
+++ b/packages/compiler/src/template/pipeline/src/phases/var_counting.ts
@@ -53,7 +53,7 @@ export function phaseVarCounting(job: CompilationJob): void {
// an embedded view).
for (const unit of job.units) {
for (const op of unit.create) {
- if (op.kind !== ir.OpKind.Template) {
+ if (op.kind !== ir.OpKind.Template && op.kind !== ir.OpKind.RepeaterCreate) {
continue;
}
diff --git a/packages/compiler/src/template/pipeline/src/phases/variable_optimization.ts b/packages/compiler/src/template/pipeline/src/phases/variable_optimization.ts
index 7ce5acb1b2016..4cced45e941f2 100644
--- a/packages/compiler/src/template/pipeline/src/phases/variable_optimization.ts
+++ b/packages/compiler/src/template/pipeline/src/phases/variable_optimization.ts
@@ -30,6 +30,15 @@ import {CompilationJob} from '../compilation';
*/
export function phaseVariableOptimization(job: CompilationJob): void {
for (const unit of job.units) {
+ inlineAlwaysInlineVariables(unit.create);
+ inlineAlwaysInlineVariables(unit.update);
+
+ for (const op of unit.create) {
+ if (op.kind === ir.OpKind.Listener) {
+ inlineAlwaysInlineVariables(op.handlerOps);
+ }
+ }
+
optimizeVariablesInOpList(unit.create, job.compatibility);
optimizeVariablesInOpList(unit.update, job.compatibility);
@@ -95,6 +104,33 @@ interface OpInfo {
fences: Fence;
}
+function inlineAlwaysInlineVariables(ops: ir.OpList): void {
+ const vars = new Map>();
+ for (const op of ops) {
+ if (op.kind === ir.OpKind.Variable && op.flags & ir.VariableFlags.AlwaysInline) {
+ ir.visitExpressionsInOp(op, expr => {
+ if (ir.isIrExpression(expr) && fencesForIrExpression(expr) !== Fence.None) {
+ throw new Error(`AssertionError: A context-sensitive variable was marked AlwaysInline`);
+ }
+ });
+ vars.set(op.xref, op);
+ }
+
+ ir.transformExpressionsInOp(op, expr => {
+ if (expr instanceof ir.ReadVariableExpr && vars.has(expr.xref)) {
+ const varOp = vars.get(expr.xref)!;
+ // Inline by cloning, because we might inline into multiple places.
+ return varOp.initializer.clone();
+ }
+ return expr;
+ }, ir.VisitorContextFlag.None);
+ }
+
+ for (const op of vars.values()) {
+ ir.OpList.remove(op as ir.CreateOp | ir.UpdateOp);
+ }
+}
+
/**
* Process a list of operations and optimize variables within that list.
*/
@@ -174,10 +210,15 @@ function optimizeVariablesInOpList(
// Next, inline any remaining variables with exactly one usage.
const toInline: ir.XrefId[] = [];
for (const [id, count] of varUsages) {
+ const decl = varDecls.get(id)!;
+ const varInfo = opMap.get(decl as ir.CreateOp | ir.UpdateOp)!;
// We can inline variables that:
- // - are used once
+ // - are used exactly once, and
// - are not used remotely
- if (count !== 1) {
+ // OR
+ // - are marked for always inlining
+ const isAlwaysInline = !!(decl.flags & ir.VariableFlags.AlwaysInline);
+ if (count !== 1 || isAlwaysInline) {
// We can't inline this variable as it's used more than once.
continue;
}
@@ -196,6 +237,12 @@ function optimizeVariablesInOpList(
// no future operation will make inlining legal.
const decl = varDecls.get(candidate)!;
const varInfo = opMap.get(decl as ir.CreateOp | ir.UpdateOp)!;
+ const isAlwaysInline = !!(decl.flags & ir.VariableFlags.AlwaysInline);
+
+ if (isAlwaysInline) {
+ throw new Error(
+ `AssertionError: Found an 'AlwaysInline' variable after the always inlining pass.`);
+ }
// Scan operations following the variable declaration and look for the point where that variable
// is used. There should only be one usage given the precondition above.
diff --git a/packages/compiler/test/ml_parser/lexer_spec.ts b/packages/compiler/test/ml_parser/lexer_spec.ts
index b7a6e1ccd29de..b345adc5452eb 100644
--- a/packages/compiler/test/ml_parser/lexer_spec.ts
+++ b/packages/compiler/test/ml_parser/lexer_spec.ts
@@ -278,6 +278,1252 @@ describe('HtmlLexer', () => {
]);
});
});
+
+ describe('escapable raw text', () => {
+ it('should parse text', () => {
+ expect(tokenizeAndHumanizeParts(`t\ne\rs\r\nt`)).toEqual([
+ [TokenType.TAG_OPEN_START, '', 'title'],
+ [TokenType.TAG_OPEN_END],
+ [TokenType.ESCAPABLE_RAW_TEXT, 't\ne\ns\nt'],
+ [TokenType.TAG_CLOSE, '', 'title'],
+ [TokenType.EOF],
+ ]);
+ });
+
+ it('should detect entities', () => {
+ expect(tokenizeAndHumanizeParts(`&`)).toEqual([
+ [TokenType.TAG_OPEN_START, '', 'title'],
+ [TokenType.TAG_OPEN_END],
+ [TokenType.ESCAPABLE_RAW_TEXT, ''],
+ [TokenType.ENCODED_ENTITY, '&', '&'],
+ [TokenType.ESCAPABLE_RAW_TEXT, ''],
+ [TokenType.TAG_CLOSE, '', 'title'],
+ [TokenType.EOF],
+ ]);
+ });
+
+ it('should ignore other opening tags', () => {
+ expect(tokenizeAndHumanizeParts(`a
`)).toEqual([
+ [TokenType.TAG_OPEN_START, '', 'title'],
+ [TokenType.TAG_OPEN_END],
+ [TokenType.ESCAPABLE_RAW_TEXT, 'a
`, {tokenizeExpansionForms: true}))
+ .toEqual([[
+ TokenType.RAW_TEXT,
+ `Unexpected character "EOF" (Do you have an unescaped "{" in your template? Use "{{ '{' }}") to escape it.)`,
+ '0:21',
+ ]]);
+ });
+
+ it('should report unescaped "{" as an error, even after a prematurely terminated interpolation',
+ () => {
+ expect(tokenizeAndHumanizeErrors(
+ `{{b}}
import {a} from 'a';
`,
+ {tokenizeExpansionForms: true}))
+ .toEqual([[
+ TokenType.RAW_TEXT,
+ `Unexpected character "EOF" (Do you have an unescaped "{" in your template? Use "{{ '{' }}") to escape it.)`,
+ '0:56',
+ ]]);
+ });
+
+ it('should include 2 lines of context in message', () => {
+ const src = '111\n222\n333\nE\n444\n555\n666\n';
+ const file = new ParseSourceFile(src, 'file://');
+ const location = new ParseLocation(file, 12, 123, 456);
+ const span = new ParseSourceSpan(location, location);
+ const error = new TokenError('**ERROR**', null!, span);
+ expect(error.toString())
+ .toEqual(`**ERROR** ("\n222\n333\n[ERROR ->]E\n444\n555\n"): file://@123:456`);
+ });
+ });
+
+ describe('unicode characters', () => {
+ it('should support unicode characters', () => {
+ expect(tokenizeAndHumanizeSourceSpans(`