From 775eeab1ce3812e43070e7b18fa22adfa8e02ff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Stanimirovi=C4=87?= Date: Mon, 30 Sep 2024 16:00:22 +0200 Subject: [PATCH 01/35] feat(create-analog): set project title based on project name; sort deps (#1374) --- .prettierignore | 4 +-- packages/create-analog/index.js | 34 ++++++++++++++++++- .../create-analog/template-blog/README.md | 2 +- .../create-analog/template-blog/index.html | 2 +- .../template-blog/src/app/app.component.ts | 2 +- .../create-analog/template-latest/README.md | 2 +- .../create-analog/template-latest/index.html | 2 +- .../template-latest/src/app/app.component.ts | 2 +- .../create-analog/template-minimal/README.md | 2 +- .../create-analog/template-minimal/index.html | 2 +- .../template-minimal/src/app/app.component.ts | 2 +- 11 files changed, 44 insertions(+), 12 deletions(-) diff --git a/.prettierignore b/.prettierignore index 8906a286e..00b299c77 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,5 +8,5 @@ pnpm-lock.yaml /.nx/cache .angular *.analog - -/.nx/workspace-data \ No newline at end of file +/.nx/workspace-data +/packages/create-analog/template-* diff --git a/packages/create-analog/index.js b/packages/create-analog/index.js index 02d039d75..e44124fa7 100755 --- a/packages/create-analog/index.js +++ b/packages/create-analog/index.js @@ -221,13 +221,21 @@ async function init() { ensureSyntaxHighlighter(root, pkg, highlighter); } - if (!skipTailwind) addTailwindDevDependencies(pkg); + if (!skipTailwind) { + addTailwindDevDependencies(pkg); + } + if (pkgManager === 'yarn') { addYarnDevDependencies(pkg, template); } + pkg.dependencies = sortObjectKeys(pkg.dependencies); + pkg.devDependencies = sortObjectKeys(pkg.devDependencies); + write('package.json', JSON.stringify(pkg, null, 2)); + setProjectTitle(root, getProjectName()); + console.log(`\nInitializing git repository:`); execSync(`git init ${targetDir} && cd ${targetDir} && git add .`); @@ -416,6 +424,30 @@ function ensureSyntaxHighlighter(root, pkg, highlighter) { ); } +function sortObjectKeys(obj) { + return Object.keys(obj) + .sort() + .reduce((result, key) => { + result[key] = obj[key]; + return result; + }, {}); +} + +function setProjectTitle(root, title) { + const filePaths = [ + path.join(root, 'index.html'), + path.join(root, 'README.md'), + ]; + + for (const filePath of filePaths) { + const fileContent = fs.readFileSync(filePath, 'utf-8'); + fs.writeFileSync( + filePath, + fileContent.replace(/__PROJECT_TITLE__/g, title) + ); + } +} + init().catch((e) => { console.error(e); }); diff --git a/packages/create-analog/template-blog/README.md b/packages/create-analog/template-blog/README.md index 684df4a42..e98b397bb 100644 --- a/packages/create-analog/template-blog/README.md +++ b/packages/create-analog/template-blog/README.md @@ -1,4 +1,4 @@ -# Analog App +# __PROJECT_TITLE__ This project was generated with [Analog](https://analogjs.org), the fullstack meta-framework for Angular. diff --git a/packages/create-analog/template-blog/index.html b/packages/create-analog/template-blog/index.html index 8867d1378..e91f5f547 100644 --- a/packages/create-analog/template-blog/index.html +++ b/packages/create-analog/template-blog/index.html @@ -2,7 +2,7 @@ - My Blog + __PROJECT_TITLE__ diff --git a/packages/create-analog/template-blog/src/app/app.component.ts b/packages/create-analog/template-blog/src/app/app.component.ts index b63d55698..6e622f453 100644 --- a/packages/create-analog/template-blog/src/app/app.component.ts +++ b/packages/create-analog/template-blog/src/app/app.component.ts @@ -9,7 +9,7 @@ import { RouterOutlet } from '@angular/router'; - + `, styles: [ ` diff --git a/packages/create-analog/template-latest/README.md b/packages/create-analog/template-latest/README.md index 684df4a42..e98b397bb 100644 --- a/packages/create-analog/template-latest/README.md +++ b/packages/create-analog/template-latest/README.md @@ -1,4 +1,4 @@ -# Analog App +# __PROJECT_TITLE__ This project was generated with [Analog](https://analogjs.org), the fullstack meta-framework for Angular. diff --git a/packages/create-analog/template-latest/index.html b/packages/create-analog/template-latest/index.html index 5facc429a..e91f5f547 100644 --- a/packages/create-analog/template-latest/index.html +++ b/packages/create-analog/template-latest/index.html @@ -2,7 +2,7 @@ - My App + __PROJECT_TITLE__ diff --git a/packages/create-analog/template-latest/src/app/app.component.ts b/packages/create-analog/template-latest/src/app/app.component.ts index 2e02d1604..14e5bd0fe 100644 --- a/packages/create-analog/template-latest/src/app/app.component.ts +++ b/packages/create-analog/template-latest/src/app/app.component.ts @@ -5,7 +5,7 @@ import { RouterOutlet } from '@angular/router'; selector: 'app-root', standalone: true, imports: [RouterOutlet], - template: ` `, + template: ``, styles: [ ` :host { diff --git a/packages/create-analog/template-minimal/README.md b/packages/create-analog/template-minimal/README.md index a0c58e960..facd994d1 100644 --- a/packages/create-analog/template-minimal/README.md +++ b/packages/create-analog/template-minimal/README.md @@ -1,4 +1,4 @@ -# Analog App +# __PROJECT_TITLE__ This project was generated with [Analog](https://analogjs.org), the fullstack meta-framework for Angular. diff --git a/packages/create-analog/template-minimal/index.html b/packages/create-analog/template-minimal/index.html index 5facc429a..e91f5f547 100644 --- a/packages/create-analog/template-minimal/index.html +++ b/packages/create-analog/template-minimal/index.html @@ -2,7 +2,7 @@ - My App + __PROJECT_TITLE__ diff --git a/packages/create-analog/template-minimal/src/app/app.component.ts b/packages/create-analog/template-minimal/src/app/app.component.ts index a3de393be..83d323862 100644 --- a/packages/create-analog/template-minimal/src/app/app.component.ts +++ b/packages/create-analog/template-minimal/src/app/app.component.ts @@ -5,6 +5,6 @@ import { RouterOutlet } from '@angular/router'; selector: 'app-root', standalone: true, imports: [RouterOutlet], - template: ``, + template: ``, }) export class AppComponent {} From 9feaaa42314915db6003189eebec81ac6274de1e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 30 Sep 2024 14:01:03 +0000 Subject: [PATCH 02/35] chore: release 1.9.0-beta.1 [skip ci] --- CHANGELOG.md | 6 ++++++ package.json | 2 +- packages/astro-angular/package.json | 4 ++-- packages/content/package.json | 2 +- packages/create-analog/package.json | 2 +- .../create-analog/template-angular-v16/package.json | 10 +++++----- .../create-analog/template-angular-v17/package.json | 10 +++++----- packages/create-analog/template-blog/package.json | 10 +++++----- packages/create-analog/template-latest/package.json | 10 +++++----- packages/platform/package.json | 6 +++--- packages/router/package.json | 4 ++-- packages/vite-plugin-angular/package.json | 2 +- packages/vite-plugin-nitro/package.json | 2 +- packages/vitest-angular/package.json | 2 +- 14 files changed, 39 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 146fa886f..0b8a33973 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# [1.9.0-beta.1](https://github.com/analogjs/analog/compare/v1.8.2...v1.9.0-beta.1) (2024-09-30) + +### Features + +- **create-analog:** set project title based on project name; sort deps ([#1374](https://github.com/analogjs/analog/issues/1374)) ([775eeab](https://github.com/analogjs/analog/commit/775eeab1ce3812e43070e7b18fa22adfa8e02ff3)) + ## [1.8.2](https://github.com/analogjs/analog/compare/v1.8.1...v1.8.2) (2024-09-30) ### Bug Fixes diff --git a/package.json b/package.json index fb7e6cf33..c34d5566a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "analogjs-platform", - "version": "1.8.2", + "version": "1.9.0-beta.1", "license": "MIT", "type": "module", "scripts": { diff --git a/packages/astro-angular/package.json b/packages/astro-angular/package.json index de6354bc8..0fc6f366d 100644 --- a/packages/astro-angular/package.json +++ b/packages/astro-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/astro-angular", - "version": "1.8.2", + "version": "1.9.0-beta.1", "description": "Use Angular components within Astro", "type": "module", "author": "Brandon Roberts ", @@ -32,7 +32,7 @@ "url": "https://github.com/sponsors/brandonroberts" }, "dependencies": { - "@analogjs/vite-plugin-angular": "^1.8.2" + "@analogjs/vite-plugin-angular": "^1.9.0-beta.1" }, "peerDependencies": { "@angular-devkit/build-angular": ">=16.0.0", diff --git a/packages/content/package.json b/packages/content/package.json index 2cd21a6b1..97d860372 100644 --- a/packages/content/package.json +++ b/packages/content/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/content", - "version": "1.8.2", + "version": "1.9.0-beta.1", "description": "Content Rendering for Analog", "type": "module", "author": "Brandon Roberts ", diff --git a/packages/create-analog/package.json b/packages/create-analog/package.json index 2721b946c..dfe9421d3 100644 --- a/packages/create-analog/package.json +++ b/packages/create-analog/package.json @@ -1,6 +1,6 @@ { "name": "create-analog", - "version": "1.8.2", + "version": "1.9.0-beta.1", "type": "module", "license": "MIT", "author": "Brandon Roberts", diff --git a/packages/create-analog/template-angular-v16/package.json b/packages/create-analog/template-angular-v16/package.json index 5b9fb5bbd..c39c366f5 100644 --- a/packages/create-analog/template-angular-v16/package.json +++ b/packages/create-analog/template-angular-v16/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.8.2", - "@analogjs/router": "^1.8.2", + "@analogjs/content": "^1.9.0-beta.1", + "@analogjs/router": "^1.9.0-beta.1", "@angular/animations": "^16.2.0", "@angular/common": "^16.2.0", "@angular/compiler": "^16.2.0", @@ -38,9 +38,9 @@ "zone.js": "~0.13.0" }, "devDependencies": { - "@analogjs/platform": "^1.8.2", - "@analogjs/vite-plugin-angular": "^1.8.2", - "@analogjs/vitest-angular": "^1.8.2", + "@analogjs/platform": "^1.9.0-beta.1", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.1", + "@analogjs/vitest-angular": "^1.9.0-beta.1", "@angular-devkit/build-angular": "^16.2.0", "@angular/cli": "^16.2.0", "@angular/compiler-cli": "^16.2.0", diff --git a/packages/create-analog/template-angular-v17/package.json b/packages/create-analog/template-angular-v17/package.json index 3aa0775dc..da103571f 100644 --- a/packages/create-analog/template-angular-v17/package.json +++ b/packages/create-analog/template-angular-v17/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.8.2", - "@analogjs/router": "^1.8.2", + "@analogjs/content": "^1.9.0-beta.1", + "@analogjs/router": "^1.9.0-beta.1", "@angular/animations": "^17.2.0", "@angular/common": "^17.2.0", "@angular/compiler": "^17.2.0", @@ -38,9 +38,9 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@analogjs/platform": "^1.8.2", - "@analogjs/vite-plugin-angular": "^1.8.2", - "@analogjs/vitest-angular": "^1.8.2", + "@analogjs/platform": "^1.9.0-beta.1", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.1", + "@analogjs/vitest-angular": "^1.9.0-beta.1", "@angular-devkit/build-angular": "^17.2.0", "@angular/cli": "^17.2.0", "@angular/compiler-cli": "^17.2.0", diff --git a/packages/create-analog/template-blog/package.json b/packages/create-analog/template-blog/package.json index 6a86f7419..b934a17d1 100644 --- a/packages/create-analog/template-blog/package.json +++ b/packages/create-analog/template-blog/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.8.2", - "@analogjs/router": "^1.8.2", + "@analogjs/content": "^1.9.0-beta.1", + "@analogjs/router": "^1.9.0-beta.1", "@angular/animations": "^18.0.0", "@angular/build": "^18.0.0", "@angular/common": "^18.0.0", @@ -36,9 +36,9 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@analogjs/platform": "^1.8.2", - "@analogjs/vite-plugin-angular": "^1.8.2", - "@analogjs/vitest-angular": "^1.8.2", + "@analogjs/platform": "^1.9.0-beta.1", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.1", + "@analogjs/vitest-angular": "^1.9.0-beta.1", "@angular/cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0", "jsdom": "^22.1.0", diff --git a/packages/create-analog/template-latest/package.json b/packages/create-analog/template-latest/package.json index b6afffb75..33316e59f 100644 --- a/packages/create-analog/template-latest/package.json +++ b/packages/create-analog/template-latest/package.json @@ -15,8 +15,8 @@ }, "private": true, "dependencies": { - "@analogjs/content": "^1.8.2", - "@analogjs/router": "^1.8.2", + "@analogjs/content": "^1.9.0-beta.1", + "@analogjs/router": "^1.9.0-beta.1", "@angular/animations": "^18.0.0", "@angular/build": "^18.0.0", "@angular/common": "^18.0.0", @@ -38,9 +38,9 @@ "zone.js": "~0.14.3" }, "devDependencies": { - "@analogjs/platform": "^1.8.2", - "@analogjs/vite-plugin-angular": "^1.8.2", - "@analogjs/vitest-angular": "^1.8.2", + "@analogjs/platform": "^1.9.0-beta.1", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.1", + "@analogjs/vitest-angular": "^1.9.0-beta.1", "@angular/cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0", "jsdom": "^22.0.0", diff --git a/packages/platform/package.json b/packages/platform/package.json index ccacb4cdc..51184e322 100644 --- a/packages/platform/package.json +++ b/packages/platform/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/platform", - "version": "1.8.2", + "version": "1.9.0-beta.1", "description": "The fullstack meta-framework for Angular", "type": "module", "author": "Brandon Roberts ", @@ -29,8 +29,8 @@ }, "dependencies": { "nitropack": "^2.9.0", - "@analogjs/vite-plugin-angular": "^1.8.2", - "@analogjs/vite-plugin-nitro": "^1.8.2", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.1", + "@analogjs/vite-plugin-nitro": "^1.9.0-beta.1", "vitefu": "^0.2.5" }, "peerDependencies": { diff --git a/packages/router/package.json b/packages/router/package.json index a16e60122..3ee3b0b0b 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/router", - "version": "1.8.2", + "version": "1.9.0-beta.1", "description": "Filesystem-based routing for Angular", "type": "module", "author": "Brandon Roberts ", @@ -24,7 +24,7 @@ "url": "https://github.com/sponsors/brandonroberts" }, "peerDependencies": { - "@analogjs/content": "^1.8.2", + "@analogjs/content": "^1.9.0-beta.1", "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "@angular/router": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" }, diff --git a/packages/vite-plugin-angular/package.json b/packages/vite-plugin-angular/package.json index aed322b26..1a7aa5c92 100644 --- a/packages/vite-plugin-angular/package.json +++ b/packages/vite-plugin-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vite-plugin-angular", - "version": "1.8.2", + "version": "1.9.0-beta.1", "description": "Vite Plugin for Angular", "type": "module", "keywords": [ diff --git a/packages/vite-plugin-nitro/package.json b/packages/vite-plugin-nitro/package.json index d1364aa1e..db338ff96 100644 --- a/packages/vite-plugin-nitro/package.json +++ b/packages/vite-plugin-nitro/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vite-plugin-nitro", - "version": "1.8.2", + "version": "1.9.0-beta.1", "description": "A Vite plugin for adding a nitro API server", "type": "module", "author": "Brandon Roberts ", diff --git a/packages/vitest-angular/package.json b/packages/vitest-angular/package.json index a35aacf8c..7f47349b0 100644 --- a/packages/vitest-angular/package.json +++ b/packages/vitest-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vitest-angular", - "version": "1.8.2", + "version": "1.9.0-beta.1", "description": "Vitest Builder for Angular", "type": "module", "author": "Brandon Roberts ", From 9b46f081d1fd20e2c4e99ca6eee0e09237568704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Stanimirovi=C4=87?= Date: Tue, 1 Oct 2024 20:01:22 +0200 Subject: [PATCH 03/35] feat(create-analog): optionally generate new projects with Analog SFCs (#1375) --- packages/create-analog/__tests__/cli.spec.ts | 20 ++- packages/create-analog/files/analog-env.d.ts | 9 ++ packages/create-analog/files/styles.css | 5 + packages/create-analog/index.js | 122 +++++++++++++----- .../template-blog/src/app/app-root.ag | 25 ++++ .../template-blog/src/app/app-root.spec.ts | 20 +++ .../src/app/app.component.spec.ts | 7 +- .../template-blog/src/app/app.component.ts | 33 +++-- .../src/app/pages/blog/[slug].page.ag | 24 ++++ .../src/app/pages/blog/[slug].page.ts | 14 +- .../src/app/pages/blog/index.page.ag | 32 +++++ .../src/app/pages/blog/index.page.ts | 30 ++--- .../template-blog/src/main.server.ts | 4 +- .../create-analog/template-blog/src/main.ts | 4 +- .../template-blog/vite.config.ts | 2 +- .../template-latest/src/app/app-root.ag | 16 +++ .../template-latest/src/app/app-root.spec.ts | 20 +++ .../template-latest/src/app/app.component.ts | 18 ++- .../src/app/pages/index.page.ag | 53 ++++++++ .../src/app/pages/index.page.ts | 40 +++--- .../template-latest/src/main.server.ts | 4 +- .../create-analog/template-latest/src/main.ts | 4 +- .../template-latest/src/styles.css | 5 + .../template-latest/vite.config.ts | 2 +- .../template-minimal/src/app/app-root.ag | 7 + .../src/app/pages/index.page.ag | 32 +++++ .../src/app/pages/index.page.ts | 7 +- .../template-minimal/src/main.server.ts | 4 +- .../template-minimal/src/main.ts | 4 +- .../template-minimal/vite.config.ts | 2 +- 30 files changed, 440 insertions(+), 129 deletions(-) create mode 100644 packages/create-analog/files/analog-env.d.ts create mode 100644 packages/create-analog/template-blog/src/app/app-root.ag create mode 100644 packages/create-analog/template-blog/src/app/app-root.spec.ts create mode 100644 packages/create-analog/template-blog/src/app/pages/blog/[slug].page.ag create mode 100644 packages/create-analog/template-blog/src/app/pages/blog/index.page.ag create mode 100644 packages/create-analog/template-latest/src/app/app-root.ag create mode 100644 packages/create-analog/template-latest/src/app/app-root.spec.ts create mode 100644 packages/create-analog/template-latest/src/app/pages/index.page.ag create mode 100644 packages/create-analog/template-minimal/src/app/app-root.ag create mode 100644 packages/create-analog/template-minimal/src/app/pages/index.page.ag diff --git a/packages/create-analog/__tests__/cli.spec.ts b/packages/create-analog/__tests__/cli.spec.ts index 83cb71bae..38bc5dbde 100644 --- a/packages/create-analog/__tests__/cli.spec.ts +++ b/packages/create-analog/__tests__/cli.spec.ts @@ -79,10 +79,15 @@ test('asks to overwrite non-empty current directory', () => { test('successfully scaffolds a project based on angular starter template', () => { const { stdout } = run( - [projectName, '--template', 'latest', '--skipTailwind'], - { - cwd: __dirname, - } + [ + projectName, + '--template', + 'latest', + '--skipTailwind', + '--analogSFC', + 'false', + ], + { cwd: __dirname } ); const generatedFiles = readdirSync(genPath).sort(); @@ -92,9 +97,10 @@ test('successfully scaffolds a project based on angular starter template', () => }); test('works with the -t alias', () => { - const { stdout } = run([projectName, '-t', 'latest', '--skipTailwind'], { - cwd: __dirname, - }); + const { stdout } = run( + [projectName, '-t', 'latest', '--skipTailwind', '--analogSFC', 'false'], + { cwd: __dirname } + ); const generatedFiles = readdirSync(genPath).sort(); // Assertions diff --git a/packages/create-analog/files/analog-env.d.ts b/packages/create-analog/files/analog-env.d.ts new file mode 100644 index 000000000..dc96faf05 --- /dev/null +++ b/packages/create-analog/files/analog-env.d.ts @@ -0,0 +1,9 @@ +declare module '*.analog' { + const cmp: any; + export default cmp; +} + +declare module '*.ag' { + const cmp: any; + export default cmp; +} diff --git a/packages/create-analog/files/styles.css b/packages/create-analog/files/styles.css index 6c77ebbd3..6042c5dfe 100644 --- a/packages/create-analog/files/styles.css +++ b/packages/create-analog/files/styles.css @@ -26,6 +26,7 @@ a { color: #646cff; text-decoration: inherit; } + a:hover { color: #535bf2; } @@ -54,9 +55,11 @@ button { cursor: pointer; transition: border-color 0.25s; } + button:hover { border-color: #646cff; } + button:focus, button:focus-visible { outline: 4px auto -webkit-focus-ring-color; @@ -75,9 +78,11 @@ button:focus-visible { color: #213547; background-color: #ffffff; } + a:hover { color: #747bff; } + button { background-color: #f9f9f9; } diff --git a/packages/create-analog/index.js b/packages/create-analog/index.js index e44124fa7..25aebbd5a 100755 --- a/packages/create-analog/index.js +++ b/packages/create-analog/index.js @@ -4,8 +4,8 @@ import { blue, green, red, reset, yellow } from 'kolorist'; import minimist from 'minimist'; import { execSync } from 'node:child_process'; -import fs, { readdirSync } from 'node:fs'; -import path, { join } from 'node:path'; +import fs from 'node:fs'; +import path from 'node:path'; import { fileURLToPath } from 'node:url'; import prompts from 'prompts'; @@ -64,7 +64,8 @@ const renameFiles = { async function init() { let targetDir = formatTargetDir(argv._[0]); let template = argv.template || argv.t; - let skipTailwind = argv.skipTailwind || false; + let skipTailwind = fromBoolArg(argv.skipTailwind); + let useAnalogSFC = fromBoolArg(argv.analogSFC); const defaultTargetDir = 'analog-project'; const getProjectName = () => @@ -135,7 +136,12 @@ async function init() { initial: 1, }, { - type: skipTailwind ? null : 'confirm', + type: useAnalogSFC === undefined ? 'confirm' : null, + name: 'analogSFC', + message: 'Would you like to use Analog SFCs?', + }, + { + type: skipTailwind === undefined ? 'confirm' : null, name: 'tailwind', message: 'Would you like to add Tailwind to your project?', }, @@ -157,6 +163,7 @@ async function init() { overwrite, packageName, variant, + analogSFC, tailwind, syntaxHighlighter, } = result; @@ -173,7 +180,8 @@ async function init() { template = variant || framework || template; // determine syntax highlighter let highlighter = syntaxHighlighter ?? (template === 'blog' ? 'prism' : null); - skipTailwind = !tailwind || skipTailwind; + skipTailwind = skipTailwind ?? !tailwind; + useAnalogSFC = useAnalogSFC ?? analogSFC; console.log(`\nScaffolding project in ${root}...`); @@ -235,6 +243,7 @@ async function init() { write('package.json', JSON.stringify(pkg, null, 2)); setProjectTitle(root, getProjectName()); + setComponentFormat(root, filesDir, write, template, useAnalogSFC); console.log(`\nInitializing git repository:`); execSync(`git init ${targetDir} && cd ${targetDir} && git add .`); @@ -397,31 +406,19 @@ function addYarnDevDependencies(pkg, template) { } function ensureSyntaxHighlighter(root, pkg, highlighter) { - const appConfigPath = path.join(root, 'src/app/app.config.ts'); - const appConfigContent = fs.readFileSync(appConfigPath, 'utf-8'); - - fs.writeFileSync( - appConfigPath, - appConfigContent - .replace(/__HIGHLIGHTER__/g, HIGHLIGHTERS[highlighter].highlighter) - .replace( - /__HIGHLIGHTER_ENTRY_POINT__/g, - HIGHLIGHTERS[highlighter].entryPoint - ) - ); + replacePlaceholders(root, 'src/app/app.config.ts', { + __HIGHLIGHTER__: HIGHLIGHTERS[highlighter].highlighter, + __HIGHLIGHTER_ENTRY_POINT__: HIGHLIGHTERS[highlighter].entryPoint, + }); const dependencies = HIGHLIGHTERS[highlighter].dependencies; for (const [name, version] of Object.entries(dependencies)) { pkg.dependencies[name] = version; } - const viteConfigPath = path.join(root, 'vite.config.ts'); - const viteConfigContent = fs.readFileSync(viteConfigPath, 'utf-8'); - - fs.writeFileSync( - viteConfigPath, - viteConfigContent.replace(/__CONTENT_HIGHLIGHTER__/g, highlighter) - ); + replacePlaceholders(root, 'vite.config.ts', { + __CONTENT_HIGHLIGHTER__: highlighter, + }); } function sortObjectKeys(obj) { @@ -434,20 +431,81 @@ function sortObjectKeys(obj) { } function setProjectTitle(root, title) { - const filePaths = [ - path.join(root, 'index.html'), - path.join(root, 'README.md'), - ]; + replacePlaceholders(root, ['index.html', 'README.md'], { + __PROJECT_TITLE__: title, + }); +} + +function setComponentFormat(root, filesDir, write, template, useAnalogSFC) { + const getSFCConfig = () => { + const sfcConfigOption = + 'vite: { experimental: { supportAnalogFormat: true } }'; + + return template === 'latest' + ? `{ ${sfcConfigOption} }` + : `\n ${sfcConfigOption},`; + }; + + replacePlaceholders(root, 'vite.config.ts', { + __ANALOG_SFC_CONFIG__: useAnalogSFC ? getSFCConfig() : '', + }); + replacePlaceholders(root, ['src/main.ts', 'src/main.server.ts'], { + __APP_COMPONENT__: useAnalogSFC ? 'App' : 'AppComponent', + __APP_COMPONENT_IMPORT__: useAnalogSFC + ? "import App from './app/app-root.ag';" + : "import { AppComponent } from './app/app.component';", + }); + + const cmpForDelete = useAnalogSFC ? 'app.component' : 'app-root'; + const deleteExt = useAnalogSFC ? 'ts' : 'ag'; + deleteFiles(root, [ + useAnalogSFC ? `src/app/${cmpForDelete}.ts` : `src/app/${cmpForDelete}.ag`, + template === 'blog' + ? [ + `src/app/pages/blog/index.page.${deleteExt}`, + `src/app/pages/blog/[slug].page.${deleteExt}`, + ] + : `src/app/pages/index.page.${deleteExt}`, + template !== 'minimal' && `src/app/${cmpForDelete}.spec.ts`, + ]); + + if (useAnalogSFC) { + write( + 'src/analog-env.d.ts', + fs.readFileSync(path.join(filesDir, 'analog-env.d.ts'), 'utf-8') + ); + } +} - for (const filePath of filePaths) { +function replacePlaceholders(root, files, config) { + for (const file of toFlatArray(files)) { + const filePath = path.join(root, file); const fileContent = fs.readFileSync(filePath, 'utf-8'); - fs.writeFileSync( - filePath, - fileContent.replace(/__PROJECT_TITLE__/g, title) + const newFileContent = Object.keys(config).reduce( + (content, placeholder) => + content.replace(RegExp(placeholder, 'g'), config[placeholder]), + fileContent ); + fs.writeFileSync(filePath, newFileContent); + } +} + +function deleteFiles(root, files) { + for (const file of toFlatArray(files)) { + fs.unlinkSync(path.join(root, file)); } } +function toFlatArray(value) { + return (Array.isArray(value) ? value : [value]).filter(Boolean).flat(); +} + +function fromBoolArg(arg) { + return ['boolean', 'undefined'].includes(typeof arg) + ? arg + : ['', 'true'].includes(arg); +} + init().catch((e) => { console.error(e); }); diff --git a/packages/create-analog/template-blog/src/app/app-root.ag b/packages/create-analog/template-blog/src/app/app-root.ag new file mode 100644 index 000000000..475243d87 --- /dev/null +++ b/packages/create-analog/template-blog/src/app/app-root.ag @@ -0,0 +1,25 @@ + + + + + diff --git a/packages/create-analog/template-blog/src/app/app-root.spec.ts b/packages/create-analog/template-blog/src/app/app-root.spec.ts new file mode 100644 index 000000000..381dfd390 --- /dev/null +++ b/packages/create-analog/template-blog/src/app/app-root.spec.ts @@ -0,0 +1,20 @@ +import { TestBed } from '@angular/core/testing'; +import { provideRouter } from '@angular/router'; +import { provideLocationMocks } from '@angular/common/testing'; + +import App from './app-root.ag'; + +describe('App', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [App], + providers: [provideRouter([]), provideLocationMocks()], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(App); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); +}); diff --git a/packages/create-analog/template-blog/src/app/app.component.spec.ts b/packages/create-analog/template-blog/src/app/app.component.spec.ts index f41b352bb..9a08b4b25 100644 --- a/packages/create-analog/template-blog/src/app/app.component.spec.ts +++ b/packages/create-analog/template-blog/src/app/app.component.spec.ts @@ -1,11 +1,14 @@ import { TestBed } from '@angular/core/testing'; -import { RouterTestingModule } from '@angular/router/testing'; +import { provideRouter } from '@angular/router'; +import { provideLocationMocks } from '@angular/common/testing'; + import { AppComponent } from './app.component'; describe('AppComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [RouterTestingModule, AppComponent], + imports: [AppComponent], + providers: [provideRouter([]), provideLocationMocks()], }).compileComponents(); }); diff --git a/packages/create-analog/template-blog/src/app/app.component.ts b/packages/create-analog/template-blog/src/app/app.component.ts index 6e622f453..ca0e58e80 100644 --- a/packages/create-analog/template-blog/src/app/app.component.ts +++ b/packages/create-analog/template-blog/src/app/app.component.ts @@ -1,30 +1,29 @@ import { Component } from '@angular/core'; -import { RouterOutlet } from '@angular/router'; +import { RouterLink, RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', standalone: true, - imports: [RouterOutlet], + imports: [RouterLink, RouterOutlet], template: ` + `, - styles: [ - ` - :host { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; - } + styles: ` + :host { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; + } - nav { - text-align: left; - padding: 0 0 2rem 0; - } - `, - ], + nav { + text-align: left; + padding: 0 0 2rem 0; + } + `, }) export class AppComponent {} diff --git a/packages/create-analog/template-blog/src/app/pages/blog/[slug].page.ag b/packages/create-analog/template-blog/src/app/pages/blog/[slug].page.ag new file mode 100644 index 000000000..06ed3d831 --- /dev/null +++ b/packages/create-analog/template-blog/src/app/pages/blog/[slug].page.ag @@ -0,0 +1,24 @@ + + + + + diff --git a/packages/create-analog/template-blog/src/app/pages/blog/[slug].page.ts b/packages/create-analog/template-blog/src/app/pages/blog/[slug].page.ts index 5a341ee1c..451550a30 100644 --- a/packages/create-analog/template-blog/src/app/pages/blog/[slug].page.ts +++ b/packages/create-analog/template-blog/src/app/pages/blog/[slug].page.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; -import { injectContent, MarkdownComponent } from '@analogjs/content'; import { AsyncPipe } from '@angular/common'; +import { injectContent, MarkdownComponent } from '@analogjs/content'; import PostAttributes from '../../post-attributes'; @@ -16,13 +16,11 @@ import PostAttributes from '../../post-attributes'; } `, - styles: [ - ` - .post__image { - max-height: 40vh; - } - `, - ], + styles: ` + .post__image { + max-height: 40vh; + } + `, }) export default class BlogPostComponent { readonly post$ = injectContent('slug'); diff --git a/packages/create-analog/template-blog/src/app/pages/blog/index.page.ag b/packages/create-analog/template-blog/src/app/pages/blog/index.page.ag new file mode 100644 index 000000000..ca7272786 --- /dev/null +++ b/packages/create-analog/template-blog/src/app/pages/blog/index.page.ag @@ -0,0 +1,32 @@ + + + + + diff --git a/packages/create-analog/template-blog/src/app/pages/blog/index.page.ts b/packages/create-analog/template-blog/src/app/pages/blog/index.page.ts index a1d75ce27..94410bb89 100644 --- a/packages/create-analog/template-blog/src/app/pages/blog/index.page.ts +++ b/packages/create-analog/template-blog/src/app/pages/blog/index.page.ts @@ -1,7 +1,8 @@ import { Component } from '@angular/core'; +import { RouterLink } from '@angular/router'; import { injectContentFiles } from '@analogjs/content'; + import PostAttributes from '../../post-attributes'; -import { RouterLink } from '@angular/router'; @Component({ selector: 'app-blog', @@ -9,27 +10,26 @@ import { RouterLink } from '@angular/router'; imports: [RouterLink], template: `

Blog Archive

- @for (post of posts;track post.attributes.slug) { + + @for (post of posts; track post.attributes.slug) {

{{ post.attributes.title }}

{{ post.attributes.description }}

} `, - styles: [ - ` - a { - text-align: left; - display: block; - margin-bottom: 2rem; - } + styles: ` + a { + text-align: left; + display: block; + margin-bottom: 2rem; + } - .post__title, - .post__desc { - margin: 0; - } - `, - ], + .post__title, + .post__desc { + margin: 0; + } + `, }) export default class BlogComponent { readonly posts = injectContentFiles(); diff --git a/packages/create-analog/template-blog/src/main.server.ts b/packages/create-analog/template-blog/src/main.server.ts index 2b6d4d14b..f365e2b63 100644 --- a/packages/create-analog/template-blog/src/main.server.ts +++ b/packages/create-analog/template-blog/src/main.server.ts @@ -6,15 +6,15 @@ import { renderApplication } from '@angular/platform-server'; import { provideServerContext } from '@analogjs/router/server'; import { ServerContext } from '@analogjs/router/tokens'; +__APP_COMPONENT_IMPORT__ import { config } from './app/app.config.server'; -import { AppComponent } from './app/app.component'; if (import.meta.env.PROD) { enableProdMode(); } export function bootstrap() { - return bootstrapApplication(AppComponent, config); + return bootstrapApplication(__APP_COMPONENT__, config); } export default async function render( diff --git a/packages/create-analog/template-blog/src/main.ts b/packages/create-analog/template-blog/src/main.ts index e77461139..4b0822a08 100644 --- a/packages/create-analog/template-blog/src/main.ts +++ b/packages/create-analog/template-blog/src/main.ts @@ -1,7 +1,7 @@ import 'zone.js'; import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; +__APP_COMPONENT_IMPORT__ import { appConfig } from './app/app.config'; -bootstrapApplication(AppComponent, appConfig); +bootstrapApplication(__APP_COMPONENT__, appConfig); diff --git a/packages/create-analog/template-blog/vite.config.ts b/packages/create-analog/template-blog/vite.config.ts index 4d6e0095b..af7ee9ada 100644 --- a/packages/create-analog/template-blog/vite.config.ts +++ b/packages/create-analog/template-blog/vite.config.ts @@ -18,7 +18,7 @@ export default defineConfig(({ mode }) => ({ }, prerender: { routes: ['/blog', '/blog/2022-12-27-my-first-post'], - }, + },__ANALOG_SFC_CONFIG__ }), ], test: { diff --git a/packages/create-analog/template-latest/src/app/app-root.ag b/packages/create-analog/template-latest/src/app/app-root.ag new file mode 100644 index 000000000..08f108322 --- /dev/null +++ b/packages/create-analog/template-latest/src/app/app-root.ag @@ -0,0 +1,16 @@ + + + + + diff --git a/packages/create-analog/template-latest/src/app/app-root.spec.ts b/packages/create-analog/template-latest/src/app/app-root.spec.ts new file mode 100644 index 000000000..381dfd390 --- /dev/null +++ b/packages/create-analog/template-latest/src/app/app-root.spec.ts @@ -0,0 +1,20 @@ +import { TestBed } from '@angular/core/testing'; +import { provideRouter } from '@angular/router'; +import { provideLocationMocks } from '@angular/common/testing'; + +import App from './app-root.ag'; + +describe('App', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [App], + providers: [provideRouter([]), provideLocationMocks()], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(App); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); +}); diff --git a/packages/create-analog/template-latest/src/app/app.component.ts b/packages/create-analog/template-latest/src/app/app.component.ts index 14e5bd0fe..5dab86b4d 100644 --- a/packages/create-analog/template-latest/src/app/app.component.ts +++ b/packages/create-analog/template-latest/src/app/app.component.ts @@ -6,15 +6,13 @@ import { RouterOutlet } from '@angular/router'; standalone: true, imports: [RouterOutlet], template: ``, - styles: [ - ` - :host { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; - } - `, - ], + styles: ` + :host { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; + } + `, }) export class AppComponent {} diff --git a/packages/create-analog/template-latest/src/app/pages/index.page.ag b/packages/create-analog/template-latest/src/app/pages/index.page.ag new file mode 100644 index 000000000..fd85cac98 --- /dev/null +++ b/packages/create-analog/template-latest/src/app/pages/index.page.ag @@ -0,0 +1,53 @@ + + + + + diff --git a/packages/create-analog/template-latest/src/app/pages/index.page.ts b/packages/create-analog/template-latest/src/app/pages/index.page.ts index 5dd0a886b..ef1194c80 100644 --- a/packages/create-analog/template-latest/src/app/pages/index.page.ts +++ b/packages/create-analog/template-latest/src/app/pages/index.page.ts @@ -21,30 +21,30 @@ import { Component, signal } from '@angular/core';

Docs | GitHub | - Sponsor + + Sponsor +

`, - styles: [ - ` - .logo { - will-change: filter; - } - .logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); - } - .read-the-docs > * { - color: #fff; - } + styles: ` + .logo { + will-change: filter; + } - @media (prefers-color-scheme: light) { - .read-the-docs > * { - color: #213547; - } + .logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); + } + + .read-the-docs > * { + color: #fff; + } + + @media (prefers-color-scheme: light) { + .read-the-docs > * { + color: #213547; } - `, - ], + } + `, }) export default class HomeComponent { count = signal(0); diff --git a/packages/create-analog/template-latest/src/main.server.ts b/packages/create-analog/template-latest/src/main.server.ts index 2b6d4d14b..f365e2b63 100644 --- a/packages/create-analog/template-latest/src/main.server.ts +++ b/packages/create-analog/template-latest/src/main.server.ts @@ -6,15 +6,15 @@ import { renderApplication } from '@angular/platform-server'; import { provideServerContext } from '@analogjs/router/server'; import { ServerContext } from '@analogjs/router/tokens'; +__APP_COMPONENT_IMPORT__ import { config } from './app/app.config.server'; -import { AppComponent } from './app/app.component'; if (import.meta.env.PROD) { enableProdMode(); } export function bootstrap() { - return bootstrapApplication(AppComponent, config); + return bootstrapApplication(__APP_COMPONENT__, config); } export default async function render( diff --git a/packages/create-analog/template-latest/src/main.ts b/packages/create-analog/template-latest/src/main.ts index e77461139..4b0822a08 100644 --- a/packages/create-analog/template-latest/src/main.ts +++ b/packages/create-analog/template-latest/src/main.ts @@ -1,7 +1,7 @@ import 'zone.js'; import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; +__APP_COMPONENT_IMPORT__ import { appConfig } from './app/app.config'; -bootstrapApplication(AppComponent, appConfig); +bootstrapApplication(__APP_COMPONENT__, appConfig); diff --git a/packages/create-analog/template-latest/src/styles.css b/packages/create-analog/template-latest/src/styles.css index 8e92f8fcd..e35981187 100644 --- a/packages/create-analog/template-latest/src/styles.css +++ b/packages/create-analog/template-latest/src/styles.css @@ -21,6 +21,7 @@ a { color: #646cff; text-decoration: inherit; } + a:hover { color: #535bf2; } @@ -49,9 +50,11 @@ button { cursor: pointer; transition: border-color 0.25s; } + button:hover { border-color: #646cff; } + button:focus, button:focus-visible { outline: 4px auto -webkit-focus-ring-color; @@ -66,9 +69,11 @@ button:focus-visible { color: #213547; background-color: #ffffff; } + a:hover { color: #747bff; } + button { background-color: #f9f9f9; } diff --git a/packages/create-analog/template-latest/vite.config.ts b/packages/create-analog/template-latest/vite.config.ts index 60b72b68d..ec4afce89 100644 --- a/packages/create-analog/template-latest/vite.config.ts +++ b/packages/create-analog/template-latest/vite.config.ts @@ -11,7 +11,7 @@ export default defineConfig(({ mode }) => ({ resolve: { mainFields: ['module'], }, - plugins: [analog()], + plugins: [analog(__ANALOG_SFC_CONFIG__)], test: { globals: true, environment: 'jsdom', diff --git a/packages/create-analog/template-minimal/src/app/app-root.ag b/packages/create-analog/template-minimal/src/app/app-root.ag new file mode 100644 index 000000000..f4385145d --- /dev/null +++ b/packages/create-analog/template-minimal/src/app/app-root.ag @@ -0,0 +1,7 @@ + + + diff --git a/packages/create-analog/template-minimal/src/app/pages/index.page.ag b/packages/create-analog/template-minimal/src/app/pages/index.page.ag new file mode 100644 index 000000000..5646b3014 --- /dev/null +++ b/packages/create-analog/template-minimal/src/app/pages/index.page.ag @@ -0,0 +1,32 @@ + + + diff --git a/packages/create-analog/template-minimal/src/app/pages/index.page.ts b/packages/create-analog/template-minimal/src/app/pages/index.page.ts index c352f4fc9..b5628dd63 100644 --- a/packages/create-analog/template-minimal/src/app/pages/index.page.ts +++ b/packages/create-analog/template-minimal/src/app/pages/index.page.ts @@ -11,9 +11,9 @@ import { Component } from '@angular/core';

Docs | GitHub | - Sponsor + + Sponsor +

`, styles: ` @@ -23,6 +23,7 @@ import { Component } from '@angular/core'; justify-content: center; align-items: center; } + .read-the-docs > * { color: #fff; } diff --git a/packages/create-analog/template-minimal/src/main.server.ts b/packages/create-analog/template-minimal/src/main.server.ts index 2b6d4d14b..f365e2b63 100644 --- a/packages/create-analog/template-minimal/src/main.server.ts +++ b/packages/create-analog/template-minimal/src/main.server.ts @@ -6,15 +6,15 @@ import { renderApplication } from '@angular/platform-server'; import { provideServerContext } from '@analogjs/router/server'; import { ServerContext } from '@analogjs/router/tokens'; +__APP_COMPONENT_IMPORT__ import { config } from './app/app.config.server'; -import { AppComponent } from './app/app.component'; if (import.meta.env.PROD) { enableProdMode(); } export function bootstrap() { - return bootstrapApplication(AppComponent, config); + return bootstrapApplication(__APP_COMPONENT__, config); } export default async function render( diff --git a/packages/create-analog/template-minimal/src/main.ts b/packages/create-analog/template-minimal/src/main.ts index e77461139..4b0822a08 100644 --- a/packages/create-analog/template-minimal/src/main.ts +++ b/packages/create-analog/template-minimal/src/main.ts @@ -1,7 +1,7 @@ import 'zone.js'; import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; +__APP_COMPONENT_IMPORT__ import { appConfig } from './app/app.config'; -bootstrapApplication(AppComponent, appConfig); +bootstrapApplication(__APP_COMPONENT__, appConfig); diff --git a/packages/create-analog/template-minimal/vite.config.ts b/packages/create-analog/template-minimal/vite.config.ts index d93f11676..3e7c39d5e 100644 --- a/packages/create-analog/template-minimal/vite.config.ts +++ b/packages/create-analog/template-minimal/vite.config.ts @@ -17,7 +17,7 @@ export default defineConfig(({ mode }) => ({ static: true, prerender: { routes: [], - }, + },__ANALOG_SFC_CONFIG__ }), ], })); From e866d00e1a99b06ae27963d833e711e37c740b52 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 1 Oct 2024 18:02:02 +0000 Subject: [PATCH 04/35] chore: release 1.9.0-beta.2 [skip ci] --- CHANGELOG.md | 6 ++++++ package.json | 2 +- packages/astro-angular/package.json | 4 ++-- packages/content/package.json | 2 +- packages/create-analog/package.json | 2 +- .../create-analog/template-angular-v16/package.json | 10 +++++----- .../create-analog/template-angular-v17/package.json | 10 +++++----- packages/create-analog/template-blog/package.json | 10 +++++----- packages/create-analog/template-latest/package.json | 10 +++++----- packages/platform/package.json | 6 +++--- packages/router/package.json | 4 ++-- packages/vite-plugin-angular/package.json | 2 +- packages/vite-plugin-nitro/package.json | 2 +- packages/vitest-angular/package.json | 2 +- 14 files changed, 39 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b8a33973..8f2fd5914 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# [1.9.0-beta.2](https://github.com/analogjs/analog/compare/v1.9.0-beta.1...v1.9.0-beta.2) (2024-10-01) + +### Features + +- **create-analog:** optionally generate new projects with Analog SFCs ([#1375](https://github.com/analogjs/analog/issues/1375)) ([9b46f08](https://github.com/analogjs/analog/commit/9b46f081d1fd20e2c4e99ca6eee0e09237568704)) + # [1.9.0-beta.1](https://github.com/analogjs/analog/compare/v1.8.2...v1.9.0-beta.1) (2024-09-30) ### Features diff --git a/package.json b/package.json index c34d5566a..a3e18d770 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "analogjs-platform", - "version": "1.9.0-beta.1", + "version": "1.9.0-beta.2", "license": "MIT", "type": "module", "scripts": { diff --git a/packages/astro-angular/package.json b/packages/astro-angular/package.json index 0fc6f366d..8d0012dcf 100644 --- a/packages/astro-angular/package.json +++ b/packages/astro-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/astro-angular", - "version": "1.9.0-beta.1", + "version": "1.9.0-beta.2", "description": "Use Angular components within Astro", "type": "module", "author": "Brandon Roberts ", @@ -32,7 +32,7 @@ "url": "https://github.com/sponsors/brandonroberts" }, "dependencies": { - "@analogjs/vite-plugin-angular": "^1.9.0-beta.1" + "@analogjs/vite-plugin-angular": "^1.9.0-beta.2" }, "peerDependencies": { "@angular-devkit/build-angular": ">=16.0.0", diff --git a/packages/content/package.json b/packages/content/package.json index 97d860372..42e1506f3 100644 --- a/packages/content/package.json +++ b/packages/content/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/content", - "version": "1.9.0-beta.1", + "version": "1.9.0-beta.2", "description": "Content Rendering for Analog", "type": "module", "author": "Brandon Roberts ", diff --git a/packages/create-analog/package.json b/packages/create-analog/package.json index dfe9421d3..0b722b5ea 100644 --- a/packages/create-analog/package.json +++ b/packages/create-analog/package.json @@ -1,6 +1,6 @@ { "name": "create-analog", - "version": "1.9.0-beta.1", + "version": "1.9.0-beta.2", "type": "module", "license": "MIT", "author": "Brandon Roberts", diff --git a/packages/create-analog/template-angular-v16/package.json b/packages/create-analog/template-angular-v16/package.json index c39c366f5..8482cb9dd 100644 --- a/packages/create-analog/template-angular-v16/package.json +++ b/packages/create-analog/template-angular-v16/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.1", - "@analogjs/router": "^1.9.0-beta.1", + "@analogjs/content": "^1.9.0-beta.2", + "@analogjs/router": "^1.9.0-beta.2", "@angular/animations": "^16.2.0", "@angular/common": "^16.2.0", "@angular/compiler": "^16.2.0", @@ -38,9 +38,9 @@ "zone.js": "~0.13.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.1", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.1", - "@analogjs/vitest-angular": "^1.9.0-beta.1", + "@analogjs/platform": "^1.9.0-beta.2", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.2", + "@analogjs/vitest-angular": "^1.9.0-beta.2", "@angular-devkit/build-angular": "^16.2.0", "@angular/cli": "^16.2.0", "@angular/compiler-cli": "^16.2.0", diff --git a/packages/create-analog/template-angular-v17/package.json b/packages/create-analog/template-angular-v17/package.json index da103571f..b361c1b82 100644 --- a/packages/create-analog/template-angular-v17/package.json +++ b/packages/create-analog/template-angular-v17/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.1", - "@analogjs/router": "^1.9.0-beta.1", + "@analogjs/content": "^1.9.0-beta.2", + "@analogjs/router": "^1.9.0-beta.2", "@angular/animations": "^17.2.0", "@angular/common": "^17.2.0", "@angular/compiler": "^17.2.0", @@ -38,9 +38,9 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.1", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.1", - "@analogjs/vitest-angular": "^1.9.0-beta.1", + "@analogjs/platform": "^1.9.0-beta.2", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.2", + "@analogjs/vitest-angular": "^1.9.0-beta.2", "@angular-devkit/build-angular": "^17.2.0", "@angular/cli": "^17.2.0", "@angular/compiler-cli": "^17.2.0", diff --git a/packages/create-analog/template-blog/package.json b/packages/create-analog/template-blog/package.json index b934a17d1..fda61931f 100644 --- a/packages/create-analog/template-blog/package.json +++ b/packages/create-analog/template-blog/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.1", - "@analogjs/router": "^1.9.0-beta.1", + "@analogjs/content": "^1.9.0-beta.2", + "@analogjs/router": "^1.9.0-beta.2", "@angular/animations": "^18.0.0", "@angular/build": "^18.0.0", "@angular/common": "^18.0.0", @@ -36,9 +36,9 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.1", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.1", - "@analogjs/vitest-angular": "^1.9.0-beta.1", + "@analogjs/platform": "^1.9.0-beta.2", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.2", + "@analogjs/vitest-angular": "^1.9.0-beta.2", "@angular/cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0", "jsdom": "^22.1.0", diff --git a/packages/create-analog/template-latest/package.json b/packages/create-analog/template-latest/package.json index 33316e59f..7a9cdf463 100644 --- a/packages/create-analog/template-latest/package.json +++ b/packages/create-analog/template-latest/package.json @@ -15,8 +15,8 @@ }, "private": true, "dependencies": { - "@analogjs/content": "^1.9.0-beta.1", - "@analogjs/router": "^1.9.0-beta.1", + "@analogjs/content": "^1.9.0-beta.2", + "@analogjs/router": "^1.9.0-beta.2", "@angular/animations": "^18.0.0", "@angular/build": "^18.0.0", "@angular/common": "^18.0.0", @@ -38,9 +38,9 @@ "zone.js": "~0.14.3" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.1", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.1", - "@analogjs/vitest-angular": "^1.9.0-beta.1", + "@analogjs/platform": "^1.9.0-beta.2", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.2", + "@analogjs/vitest-angular": "^1.9.0-beta.2", "@angular/cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0", "jsdom": "^22.0.0", diff --git a/packages/platform/package.json b/packages/platform/package.json index 51184e322..08e9beb4b 100644 --- a/packages/platform/package.json +++ b/packages/platform/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/platform", - "version": "1.9.0-beta.1", + "version": "1.9.0-beta.2", "description": "The fullstack meta-framework for Angular", "type": "module", "author": "Brandon Roberts ", @@ -29,8 +29,8 @@ }, "dependencies": { "nitropack": "^2.9.0", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.1", - "@analogjs/vite-plugin-nitro": "^1.9.0-beta.1", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.2", + "@analogjs/vite-plugin-nitro": "^1.9.0-beta.2", "vitefu": "^0.2.5" }, "peerDependencies": { diff --git a/packages/router/package.json b/packages/router/package.json index 3ee3b0b0b..3739585bd 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/router", - "version": "1.9.0-beta.1", + "version": "1.9.0-beta.2", "description": "Filesystem-based routing for Angular", "type": "module", "author": "Brandon Roberts ", @@ -24,7 +24,7 @@ "url": "https://github.com/sponsors/brandonroberts" }, "peerDependencies": { - "@analogjs/content": "^1.9.0-beta.1", + "@analogjs/content": "^1.9.0-beta.2", "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "@angular/router": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" }, diff --git a/packages/vite-plugin-angular/package.json b/packages/vite-plugin-angular/package.json index 1a7aa5c92..33725b596 100644 --- a/packages/vite-plugin-angular/package.json +++ b/packages/vite-plugin-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vite-plugin-angular", - "version": "1.9.0-beta.1", + "version": "1.9.0-beta.2", "description": "Vite Plugin for Angular", "type": "module", "keywords": [ diff --git a/packages/vite-plugin-nitro/package.json b/packages/vite-plugin-nitro/package.json index db338ff96..f301fa23d 100644 --- a/packages/vite-plugin-nitro/package.json +++ b/packages/vite-plugin-nitro/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vite-plugin-nitro", - "version": "1.9.0-beta.1", + "version": "1.9.0-beta.2", "description": "A Vite plugin for adding a nitro API server", "type": "module", "author": "Brandon Roberts ", diff --git a/packages/vitest-angular/package.json b/packages/vitest-angular/package.json index 7f47349b0..46678eb4b 100644 --- a/packages/vitest-angular/package.json +++ b/packages/vitest-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vitest-angular", - "version": "1.9.0-beta.1", + "version": "1.9.0-beta.2", "description": "Vitest Builder for Angular", "type": "module", "author": "Brandon Roberts ", From f72087f43bd09fb51407f3e699d7265d05b96e44 Mon Sep 17 00:00:00 2001 From: Brandon Roberts Date: Wed, 2 Oct 2024 11:33:21 -0500 Subject: [PATCH 05/35] fix(vite-plugin-nitro): add option use proxy for API requests instead of custom middleware (#1378) --- packages/platform/src/lib/options.ts | 6 ++++ .../platform/src/lib/platform-plugin.spec.ts | 12 ------- packages/platform/src/lib/platform-plugin.ts | 10 +----- packages/vite-plugin-nitro/src/lib/options.ts | 8 +++++ .../src/lib/vite-nitro-plugin.spec.data.ts | 1 + .../src/lib/vite-plugin-nitro.ts | 35 ++++++++++++++----- 6 files changed, 42 insertions(+), 30 deletions(-) diff --git a/packages/platform/src/lib/options.ts b/packages/platform/src/lib/options.ts index 83b8d87e0..129909309 100644 --- a/packages/platform/src/lib/options.ts +++ b/packages/platform/src/lib/options.ts @@ -53,6 +53,12 @@ export interface Options { * Additional files to include in compilation */ include?: string[]; + /** + * Toggles internal API middleware. + * If disabled, a proxy request is used to route /api + * requests to / in the production server build. + */ + useAPIMiddleware?: boolean; } export interface PrerenderContentDir { diff --git a/packages/platform/src/lib/platform-plugin.spec.ts b/packages/platform/src/lib/platform-plugin.spec.ts index c1b8c532c..0da585525 100644 --- a/packages/platform/src/lib/platform-plugin.spec.ts +++ b/packages/platform/src/lib/platform-plugin.spec.ts @@ -48,16 +48,4 @@ describe('platformPlugin', () => { expect(viteNitroPluginSpy).toHaveBeenCalledWith({ ssr: false }, undefined); expect(ssrBuildPluginSpy).not.toHaveBeenCalled(); }); - - it('should pass the custom endpoint as part of the nitro runtimeConfig if options.apiPrefix is set to false', async () => { - const customPrefix = 'custom-endpoint'; - const { viteNitroPluginSpy, platformPlugin } = await setup(); - platformPlugin({ apiPrefix: customPrefix }); - - expect(viteNitroPluginSpy).toHaveBeenCalledWith(expect.anything(), { - runtimeConfig: { - apiPrefix: customPrefix, - }, - }); - }); }); diff --git a/packages/platform/src/lib/platform-plugin.ts b/packages/platform/src/lib/platform-plugin.ts index 18b08bfc7..ee40ee1f1 100644 --- a/packages/platform/src/lib/platform-plugin.ts +++ b/packages/platform/src/lib/platform-plugin.ts @@ -12,20 +12,12 @@ import { depsPlugin } from './deps-plugin.js'; import { injectHTMLPlugin } from './ssr/inject-html-plugin.js'; export function platformPlugin(opts: Options = {}): Plugin[] { - const { apiPrefix, ...platformOptions } = { + const { ...platformOptions } = { ssr: true, ...opts, }; let nitroOptions = platformOptions?.nitro; - if (apiPrefix) { - nitroOptions = { - ...nitroOptions, - runtimeConfig: { - apiPrefix, - }, - }; - } return [ ...viteNitroPlugin(platformOptions, nitroOptions), diff --git a/packages/vite-plugin-nitro/src/lib/options.ts b/packages/vite-plugin-nitro/src/lib/options.ts index 8b070532d..d250d3e2e 100644 --- a/packages/vite-plugin-nitro/src/lib/options.ts +++ b/packages/vite-plugin-nitro/src/lib/options.ts @@ -19,6 +19,14 @@ export interface Options { * Additional API paths to include */ additionalAPIDirs?: string[]; + apiPrefix?: string; + + /** + * Toggles internal API middleware. + * If disabled, a proxy request is used to route /api + * requests to / in the production server build. + */ + useAPIMiddleware?: boolean; } export interface PrerenderOptions { diff --git a/packages/vite-plugin-nitro/src/lib/vite-nitro-plugin.spec.data.ts b/packages/vite-plugin-nitro/src/lib/vite-nitro-plugin.spec.data.ts index 9e2b356c1..321456622 100644 --- a/packages/vite-plugin-nitro/src/lib/vite-nitro-plugin.spec.data.ts +++ b/packages/vite-plugin-nitro/src/lib/vite-nitro-plugin.spec.data.ts @@ -36,6 +36,7 @@ export const mockNitroConfig: NitroConfig = { }, ], }, + routeRules: undefined, }; export async function mockBuildFunctions() { diff --git a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts index 1bf304275..51d50be3f 100644 --- a/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts +++ b/packages/vite-plugin-nitro/src/lib/vite-plugin-nitro.ts @@ -30,7 +30,11 @@ const __dirname = dirname(__filename); export function nitro(options?: Options, nitroOptions?: NitroConfig): Plugin[] { const workspaceRoot = options?.workspaceRoot ?? process.cwd(); const isTest = process.env['NODE_ENV'] === 'test' || !!process.env['VITEST']; - const apiPrefix = `/${nitroOptions?.runtimeConfig?.['apiPrefix'] ?? 'api'}`; + const apiPrefix = `/${options?.apiPrefix || 'api'}`; + const useAPIMiddleware = + typeof options?.useAPIMiddleware !== 'undefined' + ? options?.useAPIMiddleware + : true; let isBuild = false; let isServe = false; @@ -120,12 +124,21 @@ export function nitro(options?: Options, nitroOptions?: NitroConfig): Plugin[] { plugins: [pageEndpointsPlugin()], }, handlers: [ - { - handler: apiMiddlewareHandler, - middleware: true, - }, + ...(useAPIMiddleware + ? [ + { + handler: apiMiddlewareHandler, + middleware: true, + }, + ] + : []), ...pageHandlers, ], + routeRules: useAPIMiddleware + ? undefined + : { + [`${apiPrefix}/**`]: { proxy: { to: '/**' } }, + }, }; if (isVercelPreset(buildPreset)) { @@ -260,10 +273,14 @@ export function nitro(options?: Options, nitroOptions?: NitroConfig): Plugin[] { }, moduleSideEffects: ['zone.js/node', 'zone.js/fesm2015/zone-node'], handlers: [ - { - handler: apiMiddlewareHandler, - middleware: true, - }, + ...(useAPIMiddleware + ? [ + { + handler: apiMiddlewareHandler, + middleware: true, + }, + ] + : []), ...pageHandlers, ], }; From 44578dbf5a40ea0e38f082f3f8e3a03314459c59 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 2 Oct 2024 16:34:00 +0000 Subject: [PATCH 06/35] chore: release 1.9.0-beta.3 [skip ci] --- CHANGELOG.md | 6 ++++++ package.json | 2 +- packages/astro-angular/package.json | 4 ++-- packages/content/package.json | 2 +- packages/create-analog/package.json | 2 +- .../create-analog/template-angular-v16/package.json | 10 +++++----- .../create-analog/template-angular-v17/package.json | 10 +++++----- packages/create-analog/template-blog/package.json | 10 +++++----- packages/create-analog/template-latest/package.json | 10 +++++----- packages/platform/package.json | 6 +++--- packages/router/package.json | 4 ++-- packages/vite-plugin-angular/package.json | 2 +- packages/vite-plugin-nitro/package.json | 2 +- packages/vitest-angular/package.json | 2 +- 14 files changed, 39 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f2fd5914..8e8806761 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# [1.9.0-beta.3](https://github.com/analogjs/analog/compare/v1.9.0-beta.2...v1.9.0-beta.3) (2024-10-02) + +### Bug Fixes + +- **vite-plugin-nitro:** add option use proxy for API requests instead of custom middleware ([#1378](https://github.com/analogjs/analog/issues/1378)) ([f72087f](https://github.com/analogjs/analog/commit/f72087f43bd09fb51407f3e699d7265d05b96e44)) + # [1.9.0-beta.2](https://github.com/analogjs/analog/compare/v1.9.0-beta.1...v1.9.0-beta.2) (2024-10-01) ### Features diff --git a/package.json b/package.json index a3e18d770..caf6bb90f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "analogjs-platform", - "version": "1.9.0-beta.2", + "version": "1.9.0-beta.3", "license": "MIT", "type": "module", "scripts": { diff --git a/packages/astro-angular/package.json b/packages/astro-angular/package.json index 8d0012dcf..3fa833444 100644 --- a/packages/astro-angular/package.json +++ b/packages/astro-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/astro-angular", - "version": "1.9.0-beta.2", + "version": "1.9.0-beta.3", "description": "Use Angular components within Astro", "type": "module", "author": "Brandon Roberts ", @@ -32,7 +32,7 @@ "url": "https://github.com/sponsors/brandonroberts" }, "dependencies": { - "@analogjs/vite-plugin-angular": "^1.9.0-beta.2" + "@analogjs/vite-plugin-angular": "^1.9.0-beta.3" }, "peerDependencies": { "@angular-devkit/build-angular": ">=16.0.0", diff --git a/packages/content/package.json b/packages/content/package.json index 42e1506f3..d3016333a 100644 --- a/packages/content/package.json +++ b/packages/content/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/content", - "version": "1.9.0-beta.2", + "version": "1.9.0-beta.3", "description": "Content Rendering for Analog", "type": "module", "author": "Brandon Roberts ", diff --git a/packages/create-analog/package.json b/packages/create-analog/package.json index 0b722b5ea..db821aa80 100644 --- a/packages/create-analog/package.json +++ b/packages/create-analog/package.json @@ -1,6 +1,6 @@ { "name": "create-analog", - "version": "1.9.0-beta.2", + "version": "1.9.0-beta.3", "type": "module", "license": "MIT", "author": "Brandon Roberts", diff --git a/packages/create-analog/template-angular-v16/package.json b/packages/create-analog/template-angular-v16/package.json index 8482cb9dd..1a1b90b0c 100644 --- a/packages/create-analog/template-angular-v16/package.json +++ b/packages/create-analog/template-angular-v16/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.2", - "@analogjs/router": "^1.9.0-beta.2", + "@analogjs/content": "^1.9.0-beta.3", + "@analogjs/router": "^1.9.0-beta.3", "@angular/animations": "^16.2.0", "@angular/common": "^16.2.0", "@angular/compiler": "^16.2.0", @@ -38,9 +38,9 @@ "zone.js": "~0.13.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.2", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.2", - "@analogjs/vitest-angular": "^1.9.0-beta.2", + "@analogjs/platform": "^1.9.0-beta.3", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.3", + "@analogjs/vitest-angular": "^1.9.0-beta.3", "@angular-devkit/build-angular": "^16.2.0", "@angular/cli": "^16.2.0", "@angular/compiler-cli": "^16.2.0", diff --git a/packages/create-analog/template-angular-v17/package.json b/packages/create-analog/template-angular-v17/package.json index b361c1b82..7fad53c98 100644 --- a/packages/create-analog/template-angular-v17/package.json +++ b/packages/create-analog/template-angular-v17/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.2", - "@analogjs/router": "^1.9.0-beta.2", + "@analogjs/content": "^1.9.0-beta.3", + "@analogjs/router": "^1.9.0-beta.3", "@angular/animations": "^17.2.0", "@angular/common": "^17.2.0", "@angular/compiler": "^17.2.0", @@ -38,9 +38,9 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.2", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.2", - "@analogjs/vitest-angular": "^1.9.0-beta.2", + "@analogjs/platform": "^1.9.0-beta.3", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.3", + "@analogjs/vitest-angular": "^1.9.0-beta.3", "@angular-devkit/build-angular": "^17.2.0", "@angular/cli": "^17.2.0", "@angular/compiler-cli": "^17.2.0", diff --git a/packages/create-analog/template-blog/package.json b/packages/create-analog/template-blog/package.json index fda61931f..b2509ab68 100644 --- a/packages/create-analog/template-blog/package.json +++ b/packages/create-analog/template-blog/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.2", - "@analogjs/router": "^1.9.0-beta.2", + "@analogjs/content": "^1.9.0-beta.3", + "@analogjs/router": "^1.9.0-beta.3", "@angular/animations": "^18.0.0", "@angular/build": "^18.0.0", "@angular/common": "^18.0.0", @@ -36,9 +36,9 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.2", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.2", - "@analogjs/vitest-angular": "^1.9.0-beta.2", + "@analogjs/platform": "^1.9.0-beta.3", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.3", + "@analogjs/vitest-angular": "^1.9.0-beta.3", "@angular/cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0", "jsdom": "^22.1.0", diff --git a/packages/create-analog/template-latest/package.json b/packages/create-analog/template-latest/package.json index 7a9cdf463..d16adcb43 100644 --- a/packages/create-analog/template-latest/package.json +++ b/packages/create-analog/template-latest/package.json @@ -15,8 +15,8 @@ }, "private": true, "dependencies": { - "@analogjs/content": "^1.9.0-beta.2", - "@analogjs/router": "^1.9.0-beta.2", + "@analogjs/content": "^1.9.0-beta.3", + "@analogjs/router": "^1.9.0-beta.3", "@angular/animations": "^18.0.0", "@angular/build": "^18.0.0", "@angular/common": "^18.0.0", @@ -38,9 +38,9 @@ "zone.js": "~0.14.3" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.2", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.2", - "@analogjs/vitest-angular": "^1.9.0-beta.2", + "@analogjs/platform": "^1.9.0-beta.3", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.3", + "@analogjs/vitest-angular": "^1.9.0-beta.3", "@angular/cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0", "jsdom": "^22.0.0", diff --git a/packages/platform/package.json b/packages/platform/package.json index 08e9beb4b..e62fd0e9f 100644 --- a/packages/platform/package.json +++ b/packages/platform/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/platform", - "version": "1.9.0-beta.2", + "version": "1.9.0-beta.3", "description": "The fullstack meta-framework for Angular", "type": "module", "author": "Brandon Roberts ", @@ -29,8 +29,8 @@ }, "dependencies": { "nitropack": "^2.9.0", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.2", - "@analogjs/vite-plugin-nitro": "^1.9.0-beta.2", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.3", + "@analogjs/vite-plugin-nitro": "^1.9.0-beta.3", "vitefu": "^0.2.5" }, "peerDependencies": { diff --git a/packages/router/package.json b/packages/router/package.json index 3739585bd..9b8ac2a21 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/router", - "version": "1.9.0-beta.2", + "version": "1.9.0-beta.3", "description": "Filesystem-based routing for Angular", "type": "module", "author": "Brandon Roberts ", @@ -24,7 +24,7 @@ "url": "https://github.com/sponsors/brandonroberts" }, "peerDependencies": { - "@analogjs/content": "^1.9.0-beta.2", + "@analogjs/content": "^1.9.0-beta.3", "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "@angular/router": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" }, diff --git a/packages/vite-plugin-angular/package.json b/packages/vite-plugin-angular/package.json index 33725b596..9d58804a8 100644 --- a/packages/vite-plugin-angular/package.json +++ b/packages/vite-plugin-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vite-plugin-angular", - "version": "1.9.0-beta.2", + "version": "1.9.0-beta.3", "description": "Vite Plugin for Angular", "type": "module", "keywords": [ diff --git a/packages/vite-plugin-nitro/package.json b/packages/vite-plugin-nitro/package.json index f301fa23d..bb94b7f69 100644 --- a/packages/vite-plugin-nitro/package.json +++ b/packages/vite-plugin-nitro/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vite-plugin-nitro", - "version": "1.9.0-beta.2", + "version": "1.9.0-beta.3", "description": "A Vite plugin for adding a nitro API server", "type": "module", "author": "Brandon Roberts ", diff --git a/packages/vitest-angular/package.json b/packages/vitest-angular/package.json index 46678eb4b..6814e0354 100644 --- a/packages/vitest-angular/package.json +++ b/packages/vitest-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vitest-angular", - "version": "1.9.0-beta.2", + "version": "1.9.0-beta.3", "description": "Vitest Builder for Angular", "type": "module", "author": "Brandon Roberts ", From 1d15109b40935319d7fdf32af751acb1f6effaf7 Mon Sep 17 00:00:00 2001 From: Brandon Roberts Date: Thu, 3 Oct 2024 17:26:02 -0500 Subject: [PATCH 07/35] feat(router): introduce server support for form actions (#1346) --- .../src/app/pages/form-action.directive.ts | 86 +++++++++++++++++++ .../src/app/pages/newsletter.page.ts | 52 +++++++++++ .../src/app/pages/newsletter.server.ts | 30 +++++++ apps/analog-app/src/app/pages/search.page.ts | 32 +++++++ .../analog-app/src/app/pages/search.server.ts | 12 +++ .../router/server/actions/ng-package.json | 5 ++ packages/router/server/actions/src/actions.ts | 46 ++++++++++ packages/router/server/actions/src/index.ts | 1 + packages/router/src/lib/route-config.ts | 2 + .../src/lib/plugins/page-endpoints.ts | 47 +++++++--- 10 files changed, 302 insertions(+), 11 deletions(-) create mode 100644 apps/analog-app/src/app/pages/form-action.directive.ts create mode 100644 apps/analog-app/src/app/pages/newsletter.page.ts create mode 100644 apps/analog-app/src/app/pages/newsletter.server.ts create mode 100644 apps/analog-app/src/app/pages/search.page.ts create mode 100644 apps/analog-app/src/app/pages/search.server.ts create mode 100644 packages/router/server/actions/ng-package.json create mode 100644 packages/router/server/actions/src/actions.ts create mode 100644 packages/router/server/actions/src/index.ts diff --git a/apps/analog-app/src/app/pages/form-action.directive.ts b/apps/analog-app/src/app/pages/form-action.directive.ts new file mode 100644 index 000000000..b7d13f92a --- /dev/null +++ b/apps/analog-app/src/app/pages/form-action.directive.ts @@ -0,0 +1,86 @@ +import { Directive, inject, input, output } from '@angular/core'; +import { Params, Router } from '@angular/router'; + +@Directive({ + selector: 'form[action],form[method]', + host: { + '(submit)': `submitted($event)`, + }, + standalone: true, +}) +export class FormAction { + action = input(''); + onSuccess = output(); + onError = output(); + state = output< + 'submitting' | 'error' | 'redirect' | 'success' | 'navigate' + >(); + router = inject(Router); + + submitted($event: { target: HTMLFormElement } & Event) { + $event.preventDefault(); + + this.state.emit('submitting'); + const body = new FormData($event.target); + const path = window.location.pathname; + + if ($event.target.method.toUpperCase() === 'GET') { + this._handleGet(body, path); + } else { + this._handlePost(body, path, $event); + } + } + + private _handleGet(body: FormData, path: string) { + const params: Params = {}; + body.forEach((formVal, formKey) => (params[formKey] = formVal)); + + this.state.emit('navigate'); + this.router.navigate([path], { + queryParams: params, + onSameUrlNavigation: 'reload', + }); + } + + private _handlePost( + body: FormData, + path: string, + $event: { target: HTMLFormElement } & Event + ) { + fetch(this.action() || `/api/_analog/pages${path}`, { + method: $event.target.method, + body, + }) + .then((res) => { + if (res.ok) { + if (res.redirected) { + const redirectUrl = new URL(res.url).pathname; + this.state.emit('redirect'); + this.router.navigate([redirectUrl]); + } else if (res.headers.get('Content-type') === 'application/json') { + res.json().then((result) => { + this.onSuccess.emit(result); + this.state.emit('success'); + }); + } else { + res.text().then((result) => { + this.onSuccess.emit(result); + this.state.emit('success'); + }); + } + } else { + if (res.headers.get('X-Analog-Errors')) { + res.json().then((errors: unknown) => { + this.onError.emit(errors); + this.state.emit('error'); + }); + } else { + this.state.emit('error'); + } + } + }) + .catch((_) => { + this.state.emit('error'); + }); + } +} diff --git a/apps/analog-app/src/app/pages/newsletter.page.ts b/apps/analog-app/src/app/pages/newsletter.page.ts new file mode 100644 index 000000000..108127be8 --- /dev/null +++ b/apps/analog-app/src/app/pages/newsletter.page.ts @@ -0,0 +1,52 @@ +import { Component, signal } from '@angular/core'; + +import { FormAction } from './form-action.directive'; + +type FormErrors = + | { + email?: string; + } + | undefined; + +@Component({ + selector: 'app-newsletter-page', + standalone: true, + imports: [FormAction], + template: ` +

Newsletter Signup

+ + @if (!signedUp()) { +
+
+ + +
+ + +
+ + @if( errors()?.email ) { +

{{ errors()?.email }}

+ } } @else { +
Thanks for signing up!
+ } + `, +}) +export default class NewsletterComponent { + signedUp = signal(false); + errors = signal(undefined); + + onSuccess() { + this.signedUp.set(true); + } + + onError(result?: FormErrors) { + this.errors.set(result); + console.log({ result }); + } +} diff --git a/apps/analog-app/src/app/pages/newsletter.server.ts b/apps/analog-app/src/app/pages/newsletter.server.ts new file mode 100644 index 000000000..6ab124d83 --- /dev/null +++ b/apps/analog-app/src/app/pages/newsletter.server.ts @@ -0,0 +1,30 @@ +import { + type PageServerAction, + redirect, + json, + fail, +} from '@analogjs/router/server/actions'; +import { readFormData } from 'h3'; + +export function load() { + return { + loaded: true, + }; +} + +export async function action({ event }: PageServerAction) { + const body = await readFormData(event); + const email = body.get('email') as string; + + if (!email) { + return fail(422, { email: 'Email is required' }); + } + + if (email.length < 10) { + return redirect('/'); + } + + console.log({ email: body.get('email') }); + + return json({ type: 'success' }); +} diff --git a/apps/analog-app/src/app/pages/search.page.ts b/apps/analog-app/src/app/pages/search.page.ts new file mode 100644 index 000000000..4ddd5c722 --- /dev/null +++ b/apps/analog-app/src/app/pages/search.page.ts @@ -0,0 +1,32 @@ +import { Component, computed } from '@angular/core'; +import { toSignal } from '@angular/core/rxjs-interop'; +import { injectLoad } from '@analogjs/router'; + +import { FormAction } from './form-action.directive'; +import type { load } from './search.server'; + +@Component({ + selector: 'app-search-page', + standalone: true, + imports: [FormAction], + template: ` +

Search

+ +
+
+ + +
+ + +
+ + @if(searchTerm()) { +

Search Term: {{ searchTerm() }}

+ } + `, +}) +export default class NewsletterComponent { + loader = toSignal(injectLoad(), { requireSync: true }); + searchTerm = computed(() => this.loader().searchTerm); +} diff --git a/apps/analog-app/src/app/pages/search.server.ts b/apps/analog-app/src/app/pages/search.server.ts new file mode 100644 index 000000000..221bb2218 --- /dev/null +++ b/apps/analog-app/src/app/pages/search.server.ts @@ -0,0 +1,12 @@ +import type { PageServerLoad } from '@analogjs/router'; +import { getQuery } from 'h3'; + +export async function load({ event }: PageServerLoad) { + const query = getQuery(event); + console.log('loaded search', query['search']); + + return { + loaded: true, + searchTerm: `${query['search']}`, + }; +} diff --git a/packages/router/server/actions/ng-package.json b/packages/router/server/actions/ng-package.json new file mode 100644 index 000000000..c781f0df4 --- /dev/null +++ b/packages/router/server/actions/ng-package.json @@ -0,0 +1,5 @@ +{ + "lib": { + "entryFile": "src/index.ts" + } +} diff --git a/packages/router/server/actions/src/actions.ts b/packages/router/server/actions/src/actions.ts new file mode 100644 index 000000000..a9604bca4 --- /dev/null +++ b/packages/router/server/actions/src/actions.ts @@ -0,0 +1,46 @@ +import type { H3Event, H3EventContext } from 'h3'; +import type { $Fetch } from 'nitropack'; + +export type PageServerAction = { + params: H3EventContext['params']; + req: H3Event['node']['req']; + res: H3Event['node']['res']; + fetch: $Fetch; + event: H3Event; +}; + +export function fail(status: number, errors: T) { + return new Response(JSON.stringify(errors), { + status, + headers: { + 'X-Analog-Errors': 'true', + }, + }); +} + +export function json(data: T, config?: ResponseInit) { + return new Response(JSON.stringify(data), { + headers: { + 'Content-Type': 'application/json; charset=utf-8', + }, + ...config, + }); +} + +export function redirect(url: string, config: number | ResponseInit = 302) { + if (typeof config === 'number') { + return new Response(null, { + status: config, + headers: { + Location: `${url}`, + }, + }); + } + + return new Response(null, { + headers: { + Location: `${url}`, + }, + ...config, + }); +} diff --git a/packages/router/server/actions/src/index.ts b/packages/router/server/actions/src/index.ts new file mode 100644 index 000000000..2a9fe2142 --- /dev/null +++ b/packages/router/server/actions/src/index.ts @@ -0,0 +1 @@ +export { PageServerAction, json, redirect, fail } from './actions'; diff --git a/packages/router/src/lib/route-config.ts b/packages/router/src/lib/route-config.ts index 386aa7b3e..339ba24be 100644 --- a/packages/router/src/lib/route-config.ts +++ b/packages/router/src/lib/route-config.ts @@ -28,6 +28,8 @@ export function toRouteConfig(routeMeta: RouteMeta | undefined): RouteConfig { routeConfig = {}; } + routeConfig.runGuardsAndResolvers = + routeConfig.runGuardsAndResolvers ?? 'paramsOrQueryParamsChange'; routeConfig.resolve = { ...routeConfig.resolve, load: async (route) => { diff --git a/packages/vite-plugin-nitro/src/lib/plugins/page-endpoints.ts b/packages/vite-plugin-nitro/src/lib/plugins/page-endpoints.ts index 021e76d38..cc261da5e 100644 --- a/packages/vite-plugin-nitro/src/lib/plugins/page-endpoints.ts +++ b/packages/vite-plugin-nitro/src/lib/plugins/page-endpoints.ts @@ -40,18 +40,43 @@ export function pageEndpointsPlugin() { }` } + ${ + fileExports.includes('action') + ? '' + : ` + export const action = () => { + return {}; + } + ` + } + export default defineEventHandler(async(event) => { - try { - return await load({ - params: event.context.params, - req: event.node.req, - res: event.node.res, - fetch: $fetch, - event - }); - } catch(e) { - console.error(\` An error occurred: \$\{e\}\`) - throw e; + if (event.method === 'GET') { + try { + return await load({ + params: event.context.params, + req: event.node.req, + res: event.node.res, + fetch: $fetch, + event + }); + } catch(e) { + console.error(\` An error occurred: \$\{e\}\`) + throw e; + } + } else { + try { + return await action({ + params: event.context.params, + req: event.node.req, + res: event.node.res, + fetch: $fetch, + event + }); + } catch(e) { + console.error(\` An error occurred: \$\{e\}\`) + throw e; + } } }); `; From 223130aee9b37252ca86eac363daeae8bb904555 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 3 Oct 2024 22:26:42 +0000 Subject: [PATCH 08/35] chore: release 1.9.0-beta.4 [skip ci] --- CHANGELOG.md | 6 ++++++ package.json | 2 +- packages/astro-angular/package.json | 4 ++-- packages/content/package.json | 2 +- packages/create-analog/package.json | 2 +- .../create-analog/template-angular-v16/package.json | 10 +++++----- .../create-analog/template-angular-v17/package.json | 10 +++++----- packages/create-analog/template-blog/package.json | 10 +++++----- packages/create-analog/template-latest/package.json | 10 +++++----- packages/platform/package.json | 6 +++--- packages/router/package.json | 4 ++-- packages/vite-plugin-angular/package.json | 2 +- packages/vite-plugin-nitro/package.json | 2 +- packages/vitest-angular/package.json | 2 +- 14 files changed, 39 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e8806761..f5de78614 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# [1.9.0-beta.4](https://github.com/analogjs/analog/compare/v1.9.0-beta.3...v1.9.0-beta.4) (2024-10-03) + +### Features + +- **router:** introduce server support for form actions ([#1346](https://github.com/analogjs/analog/issues/1346)) ([1d15109](https://github.com/analogjs/analog/commit/1d15109b40935319d7fdf32af751acb1f6effaf7)) + # [1.9.0-beta.3](https://github.com/analogjs/analog/compare/v1.9.0-beta.2...v1.9.0-beta.3) (2024-10-02) ### Bug Fixes diff --git a/package.json b/package.json index caf6bb90f..0792b23bd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "analogjs-platform", - "version": "1.9.0-beta.3", + "version": "1.9.0-beta.4", "license": "MIT", "type": "module", "scripts": { diff --git a/packages/astro-angular/package.json b/packages/astro-angular/package.json index 3fa833444..da0624491 100644 --- a/packages/astro-angular/package.json +++ b/packages/astro-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/astro-angular", - "version": "1.9.0-beta.3", + "version": "1.9.0-beta.4", "description": "Use Angular components within Astro", "type": "module", "author": "Brandon Roberts ", @@ -32,7 +32,7 @@ "url": "https://github.com/sponsors/brandonroberts" }, "dependencies": { - "@analogjs/vite-plugin-angular": "^1.9.0-beta.3" + "@analogjs/vite-plugin-angular": "^1.9.0-beta.4" }, "peerDependencies": { "@angular-devkit/build-angular": ">=16.0.0", diff --git a/packages/content/package.json b/packages/content/package.json index d3016333a..776c6111e 100644 --- a/packages/content/package.json +++ b/packages/content/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/content", - "version": "1.9.0-beta.3", + "version": "1.9.0-beta.4", "description": "Content Rendering for Analog", "type": "module", "author": "Brandon Roberts ", diff --git a/packages/create-analog/package.json b/packages/create-analog/package.json index db821aa80..3f022807d 100644 --- a/packages/create-analog/package.json +++ b/packages/create-analog/package.json @@ -1,6 +1,6 @@ { "name": "create-analog", - "version": "1.9.0-beta.3", + "version": "1.9.0-beta.4", "type": "module", "license": "MIT", "author": "Brandon Roberts", diff --git a/packages/create-analog/template-angular-v16/package.json b/packages/create-analog/template-angular-v16/package.json index 1a1b90b0c..420f885b0 100644 --- a/packages/create-analog/template-angular-v16/package.json +++ b/packages/create-analog/template-angular-v16/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.3", - "@analogjs/router": "^1.9.0-beta.3", + "@analogjs/content": "^1.9.0-beta.4", + "@analogjs/router": "^1.9.0-beta.4", "@angular/animations": "^16.2.0", "@angular/common": "^16.2.0", "@angular/compiler": "^16.2.0", @@ -38,9 +38,9 @@ "zone.js": "~0.13.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.3", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.3", - "@analogjs/vitest-angular": "^1.9.0-beta.3", + "@analogjs/platform": "^1.9.0-beta.4", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.4", + "@analogjs/vitest-angular": "^1.9.0-beta.4", "@angular-devkit/build-angular": "^16.2.0", "@angular/cli": "^16.2.0", "@angular/compiler-cli": "^16.2.0", diff --git a/packages/create-analog/template-angular-v17/package.json b/packages/create-analog/template-angular-v17/package.json index 7fad53c98..0ee239bb8 100644 --- a/packages/create-analog/template-angular-v17/package.json +++ b/packages/create-analog/template-angular-v17/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.3", - "@analogjs/router": "^1.9.0-beta.3", + "@analogjs/content": "^1.9.0-beta.4", + "@analogjs/router": "^1.9.0-beta.4", "@angular/animations": "^17.2.0", "@angular/common": "^17.2.0", "@angular/compiler": "^17.2.0", @@ -38,9 +38,9 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.3", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.3", - "@analogjs/vitest-angular": "^1.9.0-beta.3", + "@analogjs/platform": "^1.9.0-beta.4", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.4", + "@analogjs/vitest-angular": "^1.9.0-beta.4", "@angular-devkit/build-angular": "^17.2.0", "@angular/cli": "^17.2.0", "@angular/compiler-cli": "^17.2.0", diff --git a/packages/create-analog/template-blog/package.json b/packages/create-analog/template-blog/package.json index b2509ab68..b7d3bc0d6 100644 --- a/packages/create-analog/template-blog/package.json +++ b/packages/create-analog/template-blog/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.3", - "@analogjs/router": "^1.9.0-beta.3", + "@analogjs/content": "^1.9.0-beta.4", + "@analogjs/router": "^1.9.0-beta.4", "@angular/animations": "^18.0.0", "@angular/build": "^18.0.0", "@angular/common": "^18.0.0", @@ -36,9 +36,9 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.3", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.3", - "@analogjs/vitest-angular": "^1.9.0-beta.3", + "@analogjs/platform": "^1.9.0-beta.4", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.4", + "@analogjs/vitest-angular": "^1.9.0-beta.4", "@angular/cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0", "jsdom": "^22.1.0", diff --git a/packages/create-analog/template-latest/package.json b/packages/create-analog/template-latest/package.json index d16adcb43..7c8b15e6d 100644 --- a/packages/create-analog/template-latest/package.json +++ b/packages/create-analog/template-latest/package.json @@ -15,8 +15,8 @@ }, "private": true, "dependencies": { - "@analogjs/content": "^1.9.0-beta.3", - "@analogjs/router": "^1.9.0-beta.3", + "@analogjs/content": "^1.9.0-beta.4", + "@analogjs/router": "^1.9.0-beta.4", "@angular/animations": "^18.0.0", "@angular/build": "^18.0.0", "@angular/common": "^18.0.0", @@ -38,9 +38,9 @@ "zone.js": "~0.14.3" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.3", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.3", - "@analogjs/vitest-angular": "^1.9.0-beta.3", + "@analogjs/platform": "^1.9.0-beta.4", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.4", + "@analogjs/vitest-angular": "^1.9.0-beta.4", "@angular/cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0", "jsdom": "^22.0.0", diff --git a/packages/platform/package.json b/packages/platform/package.json index e62fd0e9f..bbfc25f04 100644 --- a/packages/platform/package.json +++ b/packages/platform/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/platform", - "version": "1.9.0-beta.3", + "version": "1.9.0-beta.4", "description": "The fullstack meta-framework for Angular", "type": "module", "author": "Brandon Roberts ", @@ -29,8 +29,8 @@ }, "dependencies": { "nitropack": "^2.9.0", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.3", - "@analogjs/vite-plugin-nitro": "^1.9.0-beta.3", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.4", + "@analogjs/vite-plugin-nitro": "^1.9.0-beta.4", "vitefu": "^0.2.5" }, "peerDependencies": { diff --git a/packages/router/package.json b/packages/router/package.json index 9b8ac2a21..8d4ef200f 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/router", - "version": "1.9.0-beta.3", + "version": "1.9.0-beta.4", "description": "Filesystem-based routing for Angular", "type": "module", "author": "Brandon Roberts ", @@ -24,7 +24,7 @@ "url": "https://github.com/sponsors/brandonroberts" }, "peerDependencies": { - "@analogjs/content": "^1.9.0-beta.3", + "@analogjs/content": "^1.9.0-beta.4", "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "@angular/router": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" }, diff --git a/packages/vite-plugin-angular/package.json b/packages/vite-plugin-angular/package.json index 9d58804a8..21e2641d5 100644 --- a/packages/vite-plugin-angular/package.json +++ b/packages/vite-plugin-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vite-plugin-angular", - "version": "1.9.0-beta.3", + "version": "1.9.0-beta.4", "description": "Vite Plugin for Angular", "type": "module", "keywords": [ diff --git a/packages/vite-plugin-nitro/package.json b/packages/vite-plugin-nitro/package.json index bb94b7f69..7624c8c6c 100644 --- a/packages/vite-plugin-nitro/package.json +++ b/packages/vite-plugin-nitro/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vite-plugin-nitro", - "version": "1.9.0-beta.3", + "version": "1.9.0-beta.4", "description": "A Vite plugin for adding a nitro API server", "type": "module", "author": "Brandon Roberts ", diff --git a/packages/vitest-angular/package.json b/packages/vitest-angular/package.json index 6814e0354..947b7f7d2 100644 --- a/packages/vitest-angular/package.json +++ b/packages/vitest-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vitest-angular", - "version": "1.9.0-beta.3", + "version": "1.9.0-beta.4", "description": "Vitest Builder for Angular", "type": "module", "author": "Brandon Roberts ", From c051f056974b2336e209ea6941c42822c808ab81 Mon Sep 17 00:00:00 2001 From: Brandon Roberts Date: Sat, 5 Oct 2024 21:48:10 -0500 Subject: [PATCH 09/35] fix(create-analog): add Analog SFCs to Tailwind config (#1388) --- packages/create-analog/files/analog-env.d.ts | 8 ++++++-- packages/create-analog/files/tailwind.config.cjs | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/create-analog/files/analog-env.d.ts b/packages/create-analog/files/analog-env.d.ts index dc96faf05..e87390248 100644 --- a/packages/create-analog/files/analog-env.d.ts +++ b/packages/create-analog/files/analog-env.d.ts @@ -1,9 +1,13 @@ declare module '*.analog' { - const cmp: any; + import { Type } from '@angular/core'; + + const cmp: Type; export default cmp; } declare module '*.ag' { - const cmp: any; + import { Type } from '@angular/core'; + + const cmp: Type; export default cmp; } diff --git a/packages/create-analog/files/tailwind.config.cjs b/packages/create-analog/files/tailwind.config.cjs index dbd1c5c33..8f61c051c 100644 --- a/packages/create-analog/files/tailwind.config.cjs +++ b/packages/create-analog/files/tailwind.config.cjs @@ -1,6 +1,6 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - content: ['./index.html', './src/**/*.{html,ts,md}'], + content: ['./index.html', './src/**/*.{html,ts,md,analog,ag}'], theme: { extend: {}, }, From 23d562d0f69c6cafceb6c48ec2dd732cb50ba050 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 6 Oct 2024 02:51:15 +0000 Subject: [PATCH 10/35] chore: release 1.9.0-beta.5 [skip ci] --- CHANGELOG.md | 6 ++++++ package.json | 2 +- packages/astro-angular/package.json | 4 ++-- packages/content/package.json | 2 +- packages/create-analog/package.json | 2 +- .../create-analog/template-angular-v16/package.json | 10 +++++----- .../create-analog/template-angular-v17/package.json | 10 +++++----- packages/create-analog/template-blog/package.json | 10 +++++----- packages/create-analog/template-latest/package.json | 10 +++++----- packages/platform/package.json | 6 +++--- packages/router/package.json | 4 ++-- packages/vite-plugin-angular/package.json | 2 +- packages/vite-plugin-nitro/package.json | 2 +- packages/vitest-angular/package.json | 2 +- 14 files changed, 39 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f5de78614..1db3a2a93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# [1.9.0-beta.5](https://github.com/analogjs/analog/compare/v1.9.0-beta.4...v1.9.0-beta.5) (2024-10-06) + +### Bug Fixes + +- **create-analog:** add Analog SFCs to Tailwind config ([#1388](https://github.com/analogjs/analog/issues/1388)) ([c051f05](https://github.com/analogjs/analog/commit/c051f056974b2336e209ea6941c42822c808ab81)) + # [1.9.0-beta.4](https://github.com/analogjs/analog/compare/v1.9.0-beta.3...v1.9.0-beta.4) (2024-10-03) ### Features diff --git a/package.json b/package.json index 0792b23bd..339e20620 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "analogjs-platform", - "version": "1.9.0-beta.4", + "version": "1.9.0-beta.5", "license": "MIT", "type": "module", "scripts": { diff --git a/packages/astro-angular/package.json b/packages/astro-angular/package.json index da0624491..e905563b2 100644 --- a/packages/astro-angular/package.json +++ b/packages/astro-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/astro-angular", - "version": "1.9.0-beta.4", + "version": "1.9.0-beta.5", "description": "Use Angular components within Astro", "type": "module", "author": "Brandon Roberts ", @@ -32,7 +32,7 @@ "url": "https://github.com/sponsors/brandonroberts" }, "dependencies": { - "@analogjs/vite-plugin-angular": "^1.9.0-beta.4" + "@analogjs/vite-plugin-angular": "^1.9.0-beta.5" }, "peerDependencies": { "@angular-devkit/build-angular": ">=16.0.0", diff --git a/packages/content/package.json b/packages/content/package.json index 776c6111e..be020c315 100644 --- a/packages/content/package.json +++ b/packages/content/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/content", - "version": "1.9.0-beta.4", + "version": "1.9.0-beta.5", "description": "Content Rendering for Analog", "type": "module", "author": "Brandon Roberts ", diff --git a/packages/create-analog/package.json b/packages/create-analog/package.json index 3f022807d..002584e78 100644 --- a/packages/create-analog/package.json +++ b/packages/create-analog/package.json @@ -1,6 +1,6 @@ { "name": "create-analog", - "version": "1.9.0-beta.4", + "version": "1.9.0-beta.5", "type": "module", "license": "MIT", "author": "Brandon Roberts", diff --git a/packages/create-analog/template-angular-v16/package.json b/packages/create-analog/template-angular-v16/package.json index 420f885b0..32d28a807 100644 --- a/packages/create-analog/template-angular-v16/package.json +++ b/packages/create-analog/template-angular-v16/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.4", - "@analogjs/router": "^1.9.0-beta.4", + "@analogjs/content": "^1.9.0-beta.5", + "@analogjs/router": "^1.9.0-beta.5", "@angular/animations": "^16.2.0", "@angular/common": "^16.2.0", "@angular/compiler": "^16.2.0", @@ -38,9 +38,9 @@ "zone.js": "~0.13.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.4", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.4", - "@analogjs/vitest-angular": "^1.9.0-beta.4", + "@analogjs/platform": "^1.9.0-beta.5", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.5", + "@analogjs/vitest-angular": "^1.9.0-beta.5", "@angular-devkit/build-angular": "^16.2.0", "@angular/cli": "^16.2.0", "@angular/compiler-cli": "^16.2.0", diff --git a/packages/create-analog/template-angular-v17/package.json b/packages/create-analog/template-angular-v17/package.json index 0ee239bb8..fe7043eb1 100644 --- a/packages/create-analog/template-angular-v17/package.json +++ b/packages/create-analog/template-angular-v17/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.4", - "@analogjs/router": "^1.9.0-beta.4", + "@analogjs/content": "^1.9.0-beta.5", + "@analogjs/router": "^1.9.0-beta.5", "@angular/animations": "^17.2.0", "@angular/common": "^17.2.0", "@angular/compiler": "^17.2.0", @@ -38,9 +38,9 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.4", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.4", - "@analogjs/vitest-angular": "^1.9.0-beta.4", + "@analogjs/platform": "^1.9.0-beta.5", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.5", + "@analogjs/vitest-angular": "^1.9.0-beta.5", "@angular-devkit/build-angular": "^17.2.0", "@angular/cli": "^17.2.0", "@angular/compiler-cli": "^17.2.0", diff --git a/packages/create-analog/template-blog/package.json b/packages/create-analog/template-blog/package.json index b7d3bc0d6..9ab1abcbc 100644 --- a/packages/create-analog/template-blog/package.json +++ b/packages/create-analog/template-blog/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.4", - "@analogjs/router": "^1.9.0-beta.4", + "@analogjs/content": "^1.9.0-beta.5", + "@analogjs/router": "^1.9.0-beta.5", "@angular/animations": "^18.0.0", "@angular/build": "^18.0.0", "@angular/common": "^18.0.0", @@ -36,9 +36,9 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.4", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.4", - "@analogjs/vitest-angular": "^1.9.0-beta.4", + "@analogjs/platform": "^1.9.0-beta.5", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.5", + "@analogjs/vitest-angular": "^1.9.0-beta.5", "@angular/cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0", "jsdom": "^22.1.0", diff --git a/packages/create-analog/template-latest/package.json b/packages/create-analog/template-latest/package.json index 7c8b15e6d..c18654a52 100644 --- a/packages/create-analog/template-latest/package.json +++ b/packages/create-analog/template-latest/package.json @@ -15,8 +15,8 @@ }, "private": true, "dependencies": { - "@analogjs/content": "^1.9.0-beta.4", - "@analogjs/router": "^1.9.0-beta.4", + "@analogjs/content": "^1.9.0-beta.5", + "@analogjs/router": "^1.9.0-beta.5", "@angular/animations": "^18.0.0", "@angular/build": "^18.0.0", "@angular/common": "^18.0.0", @@ -38,9 +38,9 @@ "zone.js": "~0.14.3" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.4", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.4", - "@analogjs/vitest-angular": "^1.9.0-beta.4", + "@analogjs/platform": "^1.9.0-beta.5", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.5", + "@analogjs/vitest-angular": "^1.9.0-beta.5", "@angular/cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0", "jsdom": "^22.0.0", diff --git a/packages/platform/package.json b/packages/platform/package.json index bbfc25f04..c1a0b0364 100644 --- a/packages/platform/package.json +++ b/packages/platform/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/platform", - "version": "1.9.0-beta.4", + "version": "1.9.0-beta.5", "description": "The fullstack meta-framework for Angular", "type": "module", "author": "Brandon Roberts ", @@ -29,8 +29,8 @@ }, "dependencies": { "nitropack": "^2.9.0", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.4", - "@analogjs/vite-plugin-nitro": "^1.9.0-beta.4", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.5", + "@analogjs/vite-plugin-nitro": "^1.9.0-beta.5", "vitefu": "^0.2.5" }, "peerDependencies": { diff --git a/packages/router/package.json b/packages/router/package.json index 8d4ef200f..cadd13ad0 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/router", - "version": "1.9.0-beta.4", + "version": "1.9.0-beta.5", "description": "Filesystem-based routing for Angular", "type": "module", "author": "Brandon Roberts ", @@ -24,7 +24,7 @@ "url": "https://github.com/sponsors/brandonroberts" }, "peerDependencies": { - "@analogjs/content": "^1.9.0-beta.4", + "@analogjs/content": "^1.9.0-beta.5", "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "@angular/router": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" }, diff --git a/packages/vite-plugin-angular/package.json b/packages/vite-plugin-angular/package.json index 21e2641d5..d9454d899 100644 --- a/packages/vite-plugin-angular/package.json +++ b/packages/vite-plugin-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vite-plugin-angular", - "version": "1.9.0-beta.4", + "version": "1.9.0-beta.5", "description": "Vite Plugin for Angular", "type": "module", "keywords": [ diff --git a/packages/vite-plugin-nitro/package.json b/packages/vite-plugin-nitro/package.json index 7624c8c6c..28c923160 100644 --- a/packages/vite-plugin-nitro/package.json +++ b/packages/vite-plugin-nitro/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vite-plugin-nitro", - "version": "1.9.0-beta.4", + "version": "1.9.0-beta.5", "description": "A Vite plugin for adding a nitro API server", "type": "module", "author": "Brandon Roberts ", diff --git a/packages/vitest-angular/package.json b/packages/vitest-angular/package.json index 947b7f7d2..6951ff302 100644 --- a/packages/vitest-angular/package.json +++ b/packages/vitest-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vitest-angular", - "version": "1.9.0-beta.4", + "version": "1.9.0-beta.5", "description": "Vitest Builder for Angular", "type": "module", "author": "Brandon Roberts ", From 5cf41c7b314278cec567bc278037ef618b889d2f Mon Sep 17 00:00:00 2001 From: Leblanc Meneses Date: Sun, 6 Oct 2024 21:06:13 -0500 Subject: [PATCH 11/35] docs: add requireSync note, ssr root route, app generation, and custom URL prefix (#1379) --- .../server-side-data-fetching.md | 2 + .../docs/features/deployment/overview.md | 41 +++++++++++-------- .../docs/features/deployment/providers.md | 36 ++++++++++++++++ .../features/generation/code-generation.md | 4 +- .../features/server/server-side-rendering.md | 28 ++++++++++++- .../features/generation/code-generation.md | 4 +- 6 files changed, 94 insertions(+), 21 deletions(-) diff --git a/apps/docs-app/docs/features/data-fetching/server-side-data-fetching.md b/apps/docs-app/docs/features/data-fetching/server-side-data-fetching.md index 2dc61fb0f..cd26e4b17 100644 --- a/apps/docs-app/docs/features/data-fetching/server-side-data-fetching.md +++ b/apps/docs-app/docs/features/data-fetching/server-side-data-fetching.md @@ -26,6 +26,8 @@ export const load = async ({ ## Injecting the Data Accessing the data fetched on the server can be done using the `injectLoad` function provided by `@analogjs/router`. +The `load` function is resolved using Angular route resolvers, so setting `requireSync: false` and `initialValue: {}` +offers no advantage, as load is fetched before the component is instantiated. ```ts // src/app/pages/index.page.ts diff --git a/apps/docs-app/docs/features/deployment/overview.md b/apps/docs-app/docs/features/deployment/overview.md index df10df115..c78298247 100644 --- a/apps/docs-app/docs/features/deployment/overview.md +++ b/apps/docs-app/docs/features/deployment/overview.md @@ -51,37 +51,34 @@ export default defineConfig({ ## Deploying with a Custom URL Prefix -If you are deploying with a custom URL prefix, such as https://domain.com/`basehref`/ you must do these steps for [server-side-data-fetching](https://analogjs.org/docs/features/data-fetching/server-side-data-fetching), [html markup and assets](https://angular.io/api/common/APP_BASE_HREF), and [dynamic api routes](https://analogjs.org/docs/features/api/overview) to work correctly on the specified `basehref`. +If you are deploying with a custom URL prefix, such as https://domain.com/ `basehref` you must do these steps for [server-side-data-fetching](https://analogjs.org/docs/features/data-fetching/server-side-data-fetching), [html markup and assets](https://angular.io/api/common/APP_BASE_HREF), and [dynamic api routes](https://analogjs.org/docs/features/api/overview) to work correctly on the specified `basehref`. -1. Instruct Angular on how recognize and generate URLs. Create a new file `app.config.env.ts`. +1. Update the `app.config.ts` file. + +This instructs Angular on how recognize and generate URLs. ```ts import { ApplicationConfig } from '@angular/core'; import { APP_BASE_HREF } from '@angular/common'; -export const envConfig: ApplicationConfig = { - providers: [{ provide: APP_BASE_HREF, useValue: '/basehref/' }], +export const appConfig: ApplicationConfig = { + providers: [ + [{ provide: APP_BASE_HREF, useValue: import.meta.env.BASE_URL || '/' }], + ... + ], }; ``` -2. Update the `app.config.ts` file to use the new file. - -```ts -import { mergeApplicationConfig } from '@angular/core'; -import { envConfig } from './app.config.env'; - -export const appConfig = mergeApplicationConfig(envConfig, { -.... -}); -``` - 3. In CI production build ```bash # sets the base url for server-side data fetching export VITE_ANALOG_PUBLIC_BASE_URL="https://domain.com/basehref" - # prefixes all assets and html with /basehref/ + # Prefixes all assets and html with /basehref/ + # if using nx: npx nx run appname:build:production --baseHref='/basehref/' + # if using angular build directly: + npx ng build --baseHref="/basehref/" ``` 4. In production containers specify the env flag `NITRO_APP_BASE_URL`. @@ -96,6 +93,18 @@ Given a `vite.config.ts` file similar to this: plugins: [ analog({ apiPrefix: 'api', + nitro: { + routeRules: { + '/': { + prerender: false, + }, + }, + }, + prerender: { + routes: async () => { + return ['/']; + } + } ``` Nitro prefixes all API routes with `/basehref/api`. diff --git a/apps/docs-app/docs/features/deployment/providers.md b/apps/docs-app/docs/features/deployment/providers.md index d60ed2226..f199c0b97 100644 --- a/apps/docs-app/docs/features/deployment/providers.md +++ b/apps/docs-app/docs/features/deployment/providers.md @@ -264,6 +264,42 @@ nitro: { }, ``` +### Alternatively, multiple AnalogJS projects (/app1, /app2) in a single Firebase Hosting site + +This leverages cloud run services to host AnalogJS projects and uses rewrite rules for forwarding traffic from firebase to cloud run. + +[Deploying with a custom URL prefix](/docs/features/deployment/overview#deploying-with-a-custom-url-prefix). + +```json [firebase.json] +{ + "hosting": [ + { + "site": "", + "public": "public", + "cleanUrls": true, + "rewrites": [ + { + "source": "/app1", + "run": { + "serviceId": "app1", + "region": "us-central1", + "pinTag": false + } + }, + { + "source": "/app1/**", + "run": { + "serviceId": "app1", + "region": "us-central1", + "pinTag": false + } + } + ] + } + ] +} +``` + ### Local preview You can preview a local version of your site to test things out without deploying. diff --git a/apps/docs-app/docs/features/generation/code-generation.md b/apps/docs-app/docs/features/generation/code-generation.md index b250c393b..eb5b50780 100644 --- a/apps/docs-app/docs/features/generation/code-generation.md +++ b/apps/docs-app/docs/features/generation/code-generation.md @@ -17,7 +17,7 @@ The Analog plugin for Nx provides a series of generators that help automate some To generate a new Analog application within an Nx workspace, use the application generator: ```shell -npx nx generate @analogjs/platform:application my-app +npx nx generate @analogjs/platform:app my-app ``` ### Generating pages @@ -51,7 +51,7 @@ Analog provides a series of schematics that help automate some of the frequent t To generate a new Analog application within an Angular CLI workspace, use the application schematic: ```shell -npx ng generate @analogjs/platform:application my-app +npx ng generate @analogjs/platform:app my-app ``` ### Generating pages diff --git a/apps/docs-app/docs/features/server/server-side-rendering.md b/apps/docs-app/docs/features/server/server-side-rendering.md index da1a719a8..d969f49e1 100644 --- a/apps/docs-app/docs/features/server/server-side-rendering.md +++ b/apps/docs-app/docs/features/server/server-side-rendering.md @@ -64,4 +64,30 @@ export default defineConfig(({ mode }) => ({ })); ``` -You can opt out of prerendering by passing an empty array of routes. +You can opt out of prerendering by passing an empty array of routes and disabling prerender on the root route. + +```js +import { defineConfig } from 'vite'; +import analog from '@analogjs/platform'; +// https://vitejs.dev/config/ +export default defineConfig(({ mode }) => ({ + // ...other config + plugins: [ + analog({ + ssr: true, + nitro: { + routeRules: { + '/': { + prerender: false, + }, + }, + }, + prerender: { + routes: async () => { + return []; + }, + }, + }), + ], +})); +``` diff --git a/apps/docs-app/i18n/zh-hans/docusaurus-plugin-content-docs/current/features/generation/code-generation.md b/apps/docs-app/i18n/zh-hans/docusaurus-plugin-content-docs/current/features/generation/code-generation.md index 124ab57fe..b094830c0 100644 --- a/apps/docs-app/i18n/zh-hans/docusaurus-plugin-content-docs/current/features/generation/code-generation.md +++ b/apps/docs-app/i18n/zh-hans/docusaurus-plugin-content-docs/current/features/generation/code-generation.md @@ -17,7 +17,7 @@ NX 的 Analog 插件提供了一系列生成器帮助在 NX 的工作区里自 使用应用生成器在 NX 工作区里创建一个新的 Analog 应用: ```shell -npx nx generate @analogjs/platform:application my-app +npx nx generate @analogjs/platform:app my-app ``` ### 生成页面 @@ -51,7 +51,7 @@ Analog 提供了一系列原理图帮助在 Angular CLI 工作区自动化一些 要在 Angular CLI 工作区生成一个新的 Analog 应用程序,使用 application 原理图: ```shell -npx ng generate @analogjs/platform:application my-app +npx ng generate @analogjs/platform:app my-app ``` ### 生成页面 From 586adae9b4ef0770dcb5d14344cd5943645b38a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Jes=C3=BAs?= Date: Mon, 7 Oct 2024 06:31:27 -0600 Subject: [PATCH 12/35] feat(create-analog): update app generators and templates to use TypeScript for Tailwind config (#1387) --- libs/card/vite.config.ts | 4 +- libs/top-bar/vite.config.ts | 4 +- package.json | 2 +- packages/create-analog/__tests__/cli.spec.ts | 2 +- ...tailwind.config.cjs => tailwind.config.ts} | 7 +- packages/create-analog/index.js | 4 +- .../latest/postcss.config.cjs__template__ | 10 + .../latest/tailwind.config.ts__template__ | 13 + .../{ => v2}/postcss.config.cjs__template__ | 0 .../{ => v2}/tailwind.config.cjs__template__ | 0 .../src/generators/app/generator.spec.ts | 2 +- .../app/lib/add-tailwind-helpers.ts | 36 +- packages/nx-plugin/vite.config.ts | 4 +- pnpm-lock.yaml | 387 ++++++++---------- 14 files changed, 236 insertions(+), 239 deletions(-) rename packages/create-analog/files/{tailwind.config.cjs => tailwind.config.ts} (58%) create mode 100644 packages/nx-plugin/src/generators/app/files/tailwind/latest/postcss.config.cjs__template__ create mode 100644 packages/nx-plugin/src/generators/app/files/tailwind/latest/tailwind.config.ts__template__ rename packages/nx-plugin/src/generators/app/files/tailwind/{ => v2}/postcss.config.cjs__template__ (100%) rename packages/nx-plugin/src/generators/app/files/tailwind/{ => v2}/tailwind.config.cjs__template__ (100%) diff --git a/libs/card/vite.config.ts b/libs/card/vite.config.ts index a19e0aeeb..d68a9fa3a 100644 --- a/libs/card/vite.config.ts +++ b/libs/card/vite.config.ts @@ -14,9 +14,7 @@ export default defineConfig(({ mode }) => { environment: 'jsdom', setupFiles: ['src/test-setup.ts'], include: ['**/*.spec.ts'], - cache: { - dir: `../../node_modules/.vitest`, - }, + cacheDir: '../../node_modules/.vitest', }, define: { 'import.meta.vitest': mode !== 'production', diff --git a/libs/top-bar/vite.config.ts b/libs/top-bar/vite.config.ts index a19e0aeeb..d68a9fa3a 100644 --- a/libs/top-bar/vite.config.ts +++ b/libs/top-bar/vite.config.ts @@ -14,9 +14,7 @@ export default defineConfig(({ mode }) => { environment: 'jsdom', setupFiles: ['src/test-setup.ts'], include: ['**/*.spec.ts'], - cache: { - dir: `../../node_modules/.vitest`, - }, + cacheDir: '../../node_modules/.vitest', }, define: { 'import.meta.vitest': mode !== 'production', diff --git a/package.json b/package.json index 339e20620..3bfdd2be9 100644 --- a/package.json +++ b/package.json @@ -167,7 +167,7 @@ "sharp": "^0.33.5", "shiki": "^1.6.1", "start-server-and-test": "^1.15.4", - "tailwindcss": "^3.0.2", + "tailwindcss": "^3.1.0", "ts-jest": "29.1.0", "ts-morph": "^21.0.1", "ts-node": "10.9.1", diff --git a/packages/create-analog/__tests__/cli.spec.ts b/packages/create-analog/__tests__/cli.spec.ts index 38bc5dbde..dbecb8822 100644 --- a/packages/create-analog/__tests__/cli.spec.ts +++ b/packages/create-analog/__tests__/cli.spec.ts @@ -36,7 +36,7 @@ templateFiles = templateFiles // starter with tailwind const templateFilesTailwind = [ ...templateFiles, - 'tailwind.config.js', + 'tailwind.config.ts', 'postcss.config.js', ].sort(); beforeAll(() => remove(genPath)); diff --git a/packages/create-analog/files/tailwind.config.cjs b/packages/create-analog/files/tailwind.config.ts similarity index 58% rename from packages/create-analog/files/tailwind.config.cjs rename to packages/create-analog/files/tailwind.config.ts index 8f61c051c..860df9d91 100644 --- a/packages/create-analog/files/tailwind.config.cjs +++ b/packages/create-analog/files/tailwind.config.ts @@ -1,8 +1,9 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { +import type { Config } from 'tailwindcss'; + +export default { content: ['./index.html', './src/**/*.{html,ts,md,analog,ag}'], theme: { extend: {}, }, plugins: [], -}; +} satisfies Config; diff --git a/packages/create-analog/index.js b/packages/create-analog/index.js index 25aebbd5a..d6977df41 100755 --- a/packages/create-analog/index.js +++ b/packages/create-analog/index.js @@ -379,8 +379,8 @@ function addPostCssConfig(write, filesDir) { function addTailwindConfig(write, filesDir) { write( - 'tailwind.config.cjs', - fs.readFileSync(path.join(filesDir, `tailwind.config.cjs`), 'utf-8') + 'tailwind.config.ts', + fs.readFileSync(path.join(filesDir, `tailwind.config.ts`), 'utf-8') ); } diff --git a/packages/nx-plugin/src/generators/app/files/tailwind/latest/postcss.config.cjs__template__ b/packages/nx-plugin/src/generators/app/files/tailwind/latest/postcss.config.cjs__template__ new file mode 100644 index 000000000..432f32d56 --- /dev/null +++ b/packages/nx-plugin/src/generators/app/files/tailwind/latest/postcss.config.cjs__template__ @@ -0,0 +1,10 @@ +const { join } = require('node:path'); + +module.exports = { + plugins: { + tailwindcss: { + config: join(__dirname, 'tailwind.config.ts') + }, + autoprefixer: {} + } +}; diff --git a/packages/nx-plugin/src/generators/app/files/tailwind/latest/tailwind.config.ts__template__ b/packages/nx-plugin/src/generators/app/files/tailwind/latest/tailwind.config.ts__template__ new file mode 100644 index 000000000..4ba0ba120 --- /dev/null +++ b/packages/nx-plugin/src/generators/app/files/tailwind/latest/tailwind.config.ts__template__ @@ -0,0 +1,13 @@ +import type { Config } from 'tailwindcss'; +import { createGlobPatternsForDependencies } from '@nx/angular/tailwind'; + +export default { + content: [ + join(__dirname, '<%= relativeSourceRoot %>/**/!(*.stories|*.spec).{ts,html,md,analog,ag}'), + ...createGlobPatternsForDependencies(__dirname), + ], + theme: { + extend: {}, + }, + plugins: [], +} satisfies Config; diff --git a/packages/nx-plugin/src/generators/app/files/tailwind/postcss.config.cjs__template__ b/packages/nx-plugin/src/generators/app/files/tailwind/v2/postcss.config.cjs__template__ similarity index 100% rename from packages/nx-plugin/src/generators/app/files/tailwind/postcss.config.cjs__template__ rename to packages/nx-plugin/src/generators/app/files/tailwind/v2/postcss.config.cjs__template__ diff --git a/packages/nx-plugin/src/generators/app/files/tailwind/tailwind.config.cjs__template__ b/packages/nx-plugin/src/generators/app/files/tailwind/v2/tailwind.config.cjs__template__ similarity index 100% rename from packages/nx-plugin/src/generators/app/files/tailwind/tailwind.config.cjs__template__ rename to packages/nx-plugin/src/generators/app/files/tailwind/v2/tailwind.config.cjs__template__ diff --git a/packages/nx-plugin/src/generators/app/generator.spec.ts b/packages/nx-plugin/src/generators/app/generator.spec.ts index c1e6b4ea5..c3f86d6cb 100644 --- a/packages/nx-plugin/src/generators/app/generator.spec.ts +++ b/packages/nx-plugin/src/generators/app/generator.spec.ts @@ -208,7 +208,7 @@ describe('nx-plugin generator', () => { ) => { expect(devDependencies['tailwindcss']).toBeDefined(); const hasTailwindConfigFile = tree.exists( - 'apps/tailwind-app/tailwind.config.cjs' + 'apps/tailwind-app/tailwind.config.ts' ); const hasPostCSSConfigFile = tree.exists( 'apps/tailwind-app/postcss.config.cjs' diff --git a/packages/nx-plugin/src/generators/app/lib/add-tailwind-helpers.ts b/packages/nx-plugin/src/generators/app/lib/add-tailwind-helpers.ts index 13dacc42a..948317163 100644 --- a/packages/nx-plugin/src/generators/app/lib/add-tailwind-helpers.ts +++ b/packages/nx-plugin/src/generators/app/lib/add-tailwind-helpers.ts @@ -165,10 +165,19 @@ export function addTailwindConfigPathToProject( ); } - buildTarget.options = { - ...buildTarget.options, - tailwindConfig: joinPathFragments(project.root, 'tailwind.config.js'), - }; + const tailwindInstalledVersion = detectTailwindInstalledVersion(tree); + + if (tailwindInstalledVersion === '2') { + buildTarget.options = { + ...buildTarget.options, + tailwindConfig: joinPathFragments(project.root, 'tailwind.config.js'), + }; + } else { + buildTarget.options = { + ...buildTarget.options, + tailwindConfig: joinPathFragments(project.root, 'tailwind.config.ts'), + }; + } updateProjectConfiguration(tree, options.project, project); } @@ -180,14 +189,29 @@ export function addTailwindConfigFile( ): void { if (tree.exists(joinPathFragments(project.root, 'tailwind.config.js'))) { throw new Error( - stripIndents`The "tailwind.config.js" file already exists in the project "${options.project}". Are you sure this is the right project to set up Tailwind? + stripIndents`The "tailwind.config" file already exists in the project "${options.project}". Are you sure this is the right project to set up Tailwind? If you are sure, you can remove the existing file and re-run the generator.` ); } + const tailwindInstalledVersion = detectTailwindInstalledVersion(tree); + + if (tailwindInstalledVersion === '2') { + generateFiles( + tree, + joinPathFragments(__dirname, '..', 'files', 'tailwind/v2'), + project.root, + { + relativeSourceRoot: relative(project.root, project.sourceRoot), + template: '', + } + ); + return; + } + generateFiles( tree, - joinPathFragments(__dirname, '..', 'files', 'tailwind'), + joinPathFragments(__dirname, '..', 'files', 'tailwind/latest'), project.root, { relativeSourceRoot: relative(project.root, project.sourceRoot), diff --git a/packages/nx-plugin/vite.config.ts b/packages/nx-plugin/vite.config.ts index f89116bfd..922d16f3b 100644 --- a/packages/nx-plugin/vite.config.ts +++ b/packages/nx-plugin/vite.config.ts @@ -11,9 +11,7 @@ export default defineConfig(({ mode }) => { globals: true, include: ['**/*.spec.ts'], exclude: ['**/files/**/*.spec.ts'], - cache: { - dir: `../../node_modules/.vitest`, - }, + cacheDir: '../../node_modules/.vitest', }, define: { 'import.meta.vitest': mode !== 'production', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f5d01a25f..d716f9d75 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,7 +55,7 @@ importers: version: 3.0.1(@types/react@18.0.21)(react@18.3.1) '@nx/angular': specifier: 19.5.3 - version: 19.5.3(@angular-devkit/build-angular@18.2.4(s27u7kowkidag6brgzpi3zgowq))(@angular-devkit/core@18.2.4(chokidar@3.6.0))(@angular-devkit/schematics@18.2.4(chokidar@3.6.0))(@babel/traverse@7.25.6)(@schematics/angular@18.2.4(chokidar@3.6.0))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.5)(eslint@8.57.0)(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.3) + version: 19.5.3(@angular-devkit/build-angular@18.2.4(msxzxskjzouwjmooscvhcfgs3u))(@angular-devkit/core@18.2.4(chokidar@3.6.0))(@angular-devkit/schematics@18.2.4(chokidar@3.6.0))(@babel/traverse@7.25.6)(@schematics/angular@18.2.4(chokidar@3.6.0))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.5)(eslint@8.57.0)(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.3) '@nx/devkit': specifier: 19.5.3 version: 19.5.3(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))) @@ -125,7 +125,7 @@ importers: version: 0.1802.4(chokidar@3.6.0) '@angular-devkit/build-angular': specifier: ^18.2.4 - version: 18.2.4(s27u7kowkidag6brgzpi3zgowq) + version: 18.2.4(msxzxskjzouwjmooscvhcfgs3u) '@angular-devkit/core': specifier: ^18.2.4 version: 18.2.4(chokidar@3.6.0) @@ -143,7 +143,7 @@ importers: version: 18.3.1(eslint@8.57.0)(typescript@5.4.3) '@angular/build': specifier: ^18.2.4 - version: 18.2.4(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(@angular/platform-server@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))))(@types/node@18.19.15)(chokidar@3.6.0)(less@4.1.3)(postcss@8.4.38)(stylus@0.59.0)(tailwindcss@3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(terser@5.31.6)(typescript@5.4.3) + version: 18.2.4(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(@angular/platform-server@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))))(@types/node@18.19.15)(chokidar@3.6.0)(less@4.1.3)(postcss@8.4.38)(stylus@0.59.0)(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(terser@5.31.6)(typescript@5.4.3) '@angular/cli': specifier: ~18.2.4 version: 18.2.4(chokidar@3.6.0) @@ -323,7 +323,7 @@ importers: version: 1.2.7 ng-packagr: specifier: ^18.2.1 - version: 18.2.1(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(tailwindcss@3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(tslib@2.7.0)(typescript@5.4.3) + version: 18.2.1(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(tslib@2.7.0)(typescript@5.4.3) nitropack: specifier: ^2.9.7 version: 2.9.7(encoding@0.1.13)(webpack-sources@3.2.3) @@ -382,8 +382,8 @@ importers: specifier: ^1.15.4 version: 1.15.5 tailwindcss: - specifier: ^3.0.2 - version: 3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) + specifier: ^3.1.0 + version: 3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) ts-jest: specifier: 29.1.0 version: 29.1.0(@babel/core@7.21.8)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.21.8))(esbuild@0.19.5)(jest@29.7.0(@types/node@18.19.15)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(typescript@5.4.3) @@ -458,15 +458,6 @@ importers: specifier: ~5.5.4 version: 5.5.4 - packages/vite-plugin-angular: - dependencies: - ts-morph: - specifier: ^21.0.0 - version: 21.0.1 - vfile: - specifier: ^6.0.3 - version: 6.0.3 - packages: '@aashutoshrathi/word-wrap@1.2.6': @@ -544,6 +535,10 @@ packages: '@algolia/transporter@4.23.3': resolution: {integrity: sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==} + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@ampproject/remapping@2.2.1': resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -4986,13 +4981,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-node@1.8.2: - resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} - - acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} @@ -5001,11 +4989,6 @@ packages: resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} - acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} @@ -5685,10 +5668,6 @@ packages: resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} engines: {node: '>= 6'} - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -5884,6 +5863,10 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} @@ -6742,9 +6725,6 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - defined@1.0.1: - resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} - defu@6.1.2: resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==} @@ -6823,11 +6803,6 @@ packages: resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} hasBin: true - detective@5.2.1: - resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} - engines: {node: '>=0.8.0'} - hasBin: true - deterministic-object-hash@2.0.2: resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} engines: {node: '>=18'} @@ -9841,6 +9816,9 @@ packages: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -10171,8 +10149,8 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-hash@2.2.0: - resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} object-inspect@1.12.2: @@ -10847,9 +10825,11 @@ packages: peerDependencies: postcss: ^8.0.0 - postcss-js@3.0.3: - resolution: {integrity: sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==} - engines: {node: '>=10.0'} + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 postcss-lab-function@5.0.0: resolution: {integrity: sha512-XTV77sdIJGPxDYzZxXE0giTn3mQDC/sl/a9i2VVOPdVEEK7wFbd3kM9Dom20F4WtioTFllpDl3oMBoQvCrl79w==} @@ -10857,9 +10837,9 @@ packages: peerDependencies: postcss: ^8.4 - postcss-load-config@3.1.4: - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} peerDependencies: postcss: '>=8.0.9' ts-node: '>=9.0.0' @@ -11013,8 +10993,8 @@ packages: peerDependencies: postcss: ^8.1.0 - postcss-nested@5.0.6: - resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 @@ -11417,6 +11397,7 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} deprecated: |- You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) qs@6.10.4: @@ -12572,6 +12553,11 @@ packages: resolution: {integrity: sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==} hasBin: true + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + superjson@2.2.1: resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} engines: {node: '>=16'} @@ -12624,13 +12610,10 @@ packages: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} - tailwindcss@3.0.2: - resolution: {integrity: sha512-i1KpjYnGYftjzdAth6jA5iMPjhxpUkk5L6DafhfnQs+KiiWaThYxmk47Weh4oFH1mZqP6MuiQNHxtoRVPOraLg==} - engines: {node: '>=12.13.0'} + tailwindcss@3.4.13: + resolution: {integrity: sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==} + engines: {node: '>=14.0.0'} hasBin: true - peerDependencies: - autoprefixer: ^10.0.2 - postcss: ^8.0.9 tapable@1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} @@ -12703,6 +12686,13 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thingies@1.21.0: resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} engines: {node: '>=10.18'} @@ -12748,10 +12738,6 @@ packages: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} - tmp@0.2.1: - resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} - engines: {node: '>=8.17.0'} - tmp@0.2.3: resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} engines: {node: '>=14.14'} @@ -12844,6 +12830,9 @@ packages: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + ts-jest@29.1.0: resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13826,6 +13815,11 @@ packages: resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} engines: {node: '>= 14'} + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -14006,6 +14000,8 @@ snapshots: '@algolia/logger-common': 4.23.3 '@algolia/requester-common': 4.23.3 + '@alloc/quick-lru@5.2.0': {} + '@ampproject/remapping@2.2.1': dependencies: '@jridgewell/gen-mapping': 0.3.3 @@ -14023,13 +14019,13 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@18.2.4(s27u7kowkidag6brgzpi3zgowq)': + '@angular-devkit/build-angular@18.2.4(msxzxskjzouwjmooscvhcfgs3u)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1802.4(chokidar@3.6.0) - '@angular-devkit/build-webpack': 0.1802.4(chokidar@3.6.0)(webpack-dev-server@5.0.4(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)))(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + '@angular-devkit/build-webpack': 0.1802.4(chokidar@3.6.0)(webpack-dev-server@5.0.4(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) '@angular-devkit/core': 18.2.4(chokidar@3.6.0) - '@angular/build': 18.2.4(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(@angular/platform-server@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))))(@types/node@18.19.15)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.41)(stylus@0.59.0)(tailwindcss@3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(terser@5.31.6)(typescript@5.4.3) + '@angular/build': 18.2.4(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(@angular/platform-server@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))))(@types/node@18.19.15)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.41)(stylus@0.59.0)(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(terser@5.31.6)(typescript@5.4.3) '@angular/compiler-cli': 18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3) '@babel/core': 7.25.2 '@babel/generator': 7.25.0 @@ -14041,15 +14037,15 @@ snapshots: '@babel/preset-env': 7.25.3(@babel/core@7.25.2) '@babel/runtime': 7.25.0 '@discoveryjs/json-ext': 0.6.1 - '@ngtools/webpack': 18.2.4(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(typescript@5.4.3)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + '@ngtools/webpack': 18.2.4(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(typescript@5.4.3)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) '@vitejs/plugin-basic-ssl': 1.1.0(vite@5.4.0(@types/node@18.19.15)(less@4.2.0)(sass@1.77.6)(stylus@0.59.0)(terser@5.31.6)) ansi-colors: 4.1.3 autoprefixer: 10.4.20(postcss@8.4.41) - babel-loader: 9.1.3(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + babel-loader: 9.1.3(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) browserslist: 4.23.3 - copy-webpack-plugin: 12.0.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + copy-webpack-plugin: 12.0.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) critters: 0.0.24 - css-loader: 7.1.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + css-loader: 7.1.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) esbuild-wasm: 0.23.0 fast-glob: 3.3.2 http-proxy-middleware: 3.0.0 @@ -14058,11 +14054,11 @@ snapshots: jsonc-parser: 3.3.1 karma-source-map-support: 1.4.0 less: 4.2.0 - less-loader: 12.2.0(less@4.2.0)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) - license-webpack-plugin: 4.0.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + less-loader: 12.2.0(less@4.2.0)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) + license-webpack-plugin: 4.0.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) loader-utils: 3.3.1 magic-string: 0.30.11 - mini-css-extract-plugin: 2.9.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + mini-css-extract-plugin: 2.9.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) mrmime: 2.0.0 open: 10.1.0 ora: 5.4.1 @@ -14070,13 +14066,13 @@ snapshots: picomatch: 4.0.2 piscina: 4.6.1 postcss: 8.4.41 - postcss-loader: 8.1.1(postcss@8.4.41)(typescript@5.4.3)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + postcss-loader: 8.1.1(postcss@8.4.41)(typescript@5.4.3)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) resolve-url-loader: 5.0.0 rxjs: 7.8.1 sass: 1.77.6 - sass-loader: 16.0.0(sass@1.77.6)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + sass-loader: 16.0.0(sass@1.77.6)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) semver: 7.6.3 - source-map-loader: 5.0.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + source-map-loader: 5.0.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) source-map-support: 0.5.21 terser: 5.31.6 tree-kill: 1.2.2 @@ -14085,17 +14081,17 @@ snapshots: vite: 5.4.0(@types/node@18.19.15)(less@4.2.0)(sass@1.77.6)(stylus@0.59.0)(terser@5.31.6) watchpack: 2.4.1 webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) - webpack-dev-middleware: 7.4.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + webpack-dev-middleware: 7.4.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) webpack-dev-server: 5.0.4(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) optionalDependencies: '@angular/platform-server': 18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))) esbuild: 0.23.0 jest: 29.7.0(@types/node@18.19.15)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) jest-environment-jsdom: 29.7.0 - ng-packagr: 18.2.1(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(tailwindcss@3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(tslib@2.7.0)(typescript@5.4.3) - tailwindcss: 3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) + ng-packagr: 18.2.1(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(tslib@2.7.0)(typescript@5.4.3) + tailwindcss: 3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -14114,11 +14110,11 @@ snapshots: - utf-8-validate - webpack-cli - '@angular-devkit/build-webpack@0.1802.4(chokidar@3.6.0)(webpack-dev-server@5.0.4(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)))(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0))': + '@angular-devkit/build-webpack@0.1802.4(chokidar@3.6.0)(webpack-dev-server@5.0.4(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5))': dependencies: '@angular-devkit/architect': 0.1802.4(chokidar@3.6.0) rxjs: 7.8.1 - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) + webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) webpack-dev-server: 5.0.4(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) transitivePeerDependencies: - chokidar @@ -14183,7 +14179,7 @@ snapshots: '@angular/core': 18.2.4(rxjs@7.8.1)(zone.js@0.14.10) tslib: 2.7.0 - '@angular/build@18.2.4(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(@angular/platform-server@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))))(@types/node@18.19.15)(chokidar@3.6.0)(less@4.1.3)(postcss@8.4.38)(stylus@0.59.0)(tailwindcss@3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(terser@5.31.6)(typescript@5.4.3)': + '@angular/build@18.2.4(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(@angular/platform-server@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))))(@types/node@18.19.15)(chokidar@3.6.0)(less@4.1.3)(postcss@8.4.38)(stylus@0.59.0)(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(terser@5.31.6)(typescript@5.4.3)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1802.4(chokidar@3.6.0) @@ -14216,7 +14212,7 @@ snapshots: '@angular/platform-server': 18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))) less: 4.1.3 postcss: 8.4.38 - tailwindcss: 3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) + tailwindcss: 3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) transitivePeerDependencies: - '@types/node' - chokidar @@ -14227,7 +14223,7 @@ snapshots: - supports-color - terser - '@angular/build@18.2.4(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(@angular/platform-server@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))))(@types/node@18.19.15)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.41)(stylus@0.59.0)(tailwindcss@3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(terser@5.31.6)(typescript@5.4.3)': + '@angular/build@18.2.4(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(@angular/platform-server@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))))(@types/node@18.19.15)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.41)(stylus@0.59.0)(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(terser@5.31.6)(typescript@5.4.3)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1802.4(chokidar@3.6.0) @@ -14260,7 +14256,7 @@ snapshots: '@angular/platform-server': 18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(@angular/platform-browser@18.2.4(@angular/animations@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(@angular/common@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))(rxjs@7.8.1))(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10))) less: 4.2.0 postcss: 8.4.41 - tailwindcss: 3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) + tailwindcss: 3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) transitivePeerDependencies: - '@types/node' - chokidar @@ -15904,7 +15900,7 @@ snapshots: '@types/node': 18.19.15 chalk: 4.1.2 cosmiconfig: 8.1.3 - cosmiconfig-typescript-loader: 4.3.0(@types/node@18.19.15)(cosmiconfig@8.1.3)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@4.8.4))(typescript@4.8.4) + cosmiconfig-typescript-loader: 4.3.0(@types/node@18.19.15)(cosmiconfig@8.1.3)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3))(typescript@4.8.4) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -17881,11 +17877,11 @@ snapshots: '@netlify/node-cookies': 0.1.0 urlpattern-polyfill: 8.0.2 - '@ngtools/webpack@18.2.4(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(typescript@5.4.3)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0))': + '@ngtools/webpack@18.2.4(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(typescript@5.4.3)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5))': dependencies: '@angular/compiler-cli': 18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3) typescript: 5.4.3 - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) + webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) '@nodelib/fs.scandir@2.1.5': dependencies: @@ -17963,9 +17959,9 @@ snapshots: - bluebird - supports-color - '@nrwl/angular@19.5.3(@angular-devkit/build-angular@18.2.4(s27u7kowkidag6brgzpi3zgowq))(@angular-devkit/core@18.2.4(chokidar@3.6.0))(@angular-devkit/schematics@18.2.4(chokidar@3.6.0))(@babel/traverse@7.25.6)(@schematics/angular@18.2.4(chokidar@3.6.0))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.5)(eslint@8.57.0)(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.3)': + '@nrwl/angular@19.5.3(@angular-devkit/build-angular@18.2.4(msxzxskjzouwjmooscvhcfgs3u))(@angular-devkit/core@18.2.4(chokidar@3.6.0))(@angular-devkit/schematics@18.2.4(chokidar@3.6.0))(@babel/traverse@7.25.6)(@schematics/angular@18.2.4(chokidar@3.6.0))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.5)(eslint@8.57.0)(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.3)': dependencies: - '@nx/angular': 19.5.3(@angular-devkit/build-angular@18.2.4(s27u7kowkidag6brgzpi3zgowq))(@angular-devkit/core@18.2.4(chokidar@3.6.0))(@angular-devkit/schematics@18.2.4(chokidar@3.6.0))(@babel/traverse@7.25.6)(@schematics/angular@18.2.4(chokidar@3.6.0))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.5)(eslint@8.57.0)(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.3) + '@nx/angular': 19.5.3(@angular-devkit/build-angular@18.2.4(msxzxskjzouwjmooscvhcfgs3u))(@angular-devkit/core@18.2.4(chokidar@3.6.0))(@angular-devkit/schematics@18.2.4(chokidar@3.6.0))(@babel/traverse@7.25.6)(@schematics/angular@18.2.4(chokidar@3.6.0))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.5)(eslint@8.57.0)(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.3) tslib: 2.7.0 transitivePeerDependencies: - '@angular-devkit/build-angular' @@ -18179,13 +18175,13 @@ snapshots: - '@swc/core' - debug - '@nx/angular@19.5.3(@angular-devkit/build-angular@18.2.4(s27u7kowkidag6brgzpi3zgowq))(@angular-devkit/core@18.2.4(chokidar@3.6.0))(@angular-devkit/schematics@18.2.4(chokidar@3.6.0))(@babel/traverse@7.25.6)(@schematics/angular@18.2.4(chokidar@3.6.0))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.5)(eslint@8.57.0)(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.3)': + '@nx/angular@19.5.3(@angular-devkit/build-angular@18.2.4(msxzxskjzouwjmooscvhcfgs3u))(@angular-devkit/core@18.2.4(chokidar@3.6.0))(@angular-devkit/schematics@18.2.4(chokidar@3.6.0))(@babel/traverse@7.25.6)(@schematics/angular@18.2.4(chokidar@3.6.0))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.5)(eslint@8.57.0)(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.3)': dependencies: - '@angular-devkit/build-angular': 18.2.4(s27u7kowkidag6brgzpi3zgowq) + '@angular-devkit/build-angular': 18.2.4(msxzxskjzouwjmooscvhcfgs3u) '@angular-devkit/core': 18.2.4(chokidar@3.6.0) '@angular-devkit/schematics': 18.2.4(chokidar@3.6.0) '@module-federation/enhanced': 0.2.8(typescript@5.4.3)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) - '@nrwl/angular': 19.5.3(@angular-devkit/build-angular@18.2.4(s27u7kowkidag6brgzpi3zgowq))(@angular-devkit/core@18.2.4(chokidar@3.6.0))(@angular-devkit/schematics@18.2.4(chokidar@3.6.0))(@babel/traverse@7.25.6)(@schematics/angular@18.2.4(chokidar@3.6.0))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.5)(eslint@8.57.0)(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.3) + '@nrwl/angular': 19.5.3(@angular-devkit/build-angular@18.2.4(msxzxskjzouwjmooscvhcfgs3u))(@angular-devkit/core@18.2.4(chokidar@3.6.0))(@angular-devkit/schematics@18.2.4(chokidar@3.6.0))(@babel/traverse@7.25.6)(@schematics/angular@18.2.4(chokidar@3.6.0))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.5)(eslint@8.57.0)(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.3) '@nx/devkit': 19.5.3(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))) '@nx/eslint': 19.5.3(@babel/traverse@7.25.6)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))) '@nx/js': 19.5.3(@babel/traverse@7.25.6)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(nx@19.5.3(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.3))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.3) @@ -20036,20 +20032,10 @@ snapshots: dependencies: acorn: 8.11.3 - acorn-node@1.8.2: - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - xtend: 4.0.2 - - acorn-walk@7.2.0: {} - acorn-walk@8.2.0: {} acorn-walk@8.3.2: {} - acorn@7.4.1: {} - acorn@8.10.0: {} acorn@8.11.3: {} @@ -20457,13 +20443,6 @@ snapshots: schema-utils: 4.2.0 webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) - babel-loader@9.1.3(@babel/core@7.25.2)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)): - dependencies: - '@babel/core': 7.25.2 - find-cache-dir: 4.0.0 - schema-utils: 4.2.0 - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) - babel-plugin-const-enum@1.2.0(@babel/core@7.25.2): dependencies: '@babel/core': 7.25.2 @@ -20960,18 +20939,6 @@ snapshots: parse5: 7.1.2 parse5-htmlparser2-tree-adapter: 7.0.0 - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -21152,6 +21119,8 @@ snapshots: commander@2.20.3: {} + commander@4.1.1: {} + commander@5.1.0: {} commander@6.2.1: {} @@ -21420,7 +21389,7 @@ snapshots: serialize-javascript: 6.0.2 webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) - copy-webpack-plugin@12.0.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)): + copy-webpack-plugin@12.0.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)): dependencies: fast-glob: 3.3.2 glob-parent: 6.0.2 @@ -21428,7 +21397,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) + webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) core-js-compat@3.38.1: dependencies: @@ -21452,11 +21421,11 @@ snapshots: dependencies: layout-base: 2.0.1 - cosmiconfig-typescript-loader@4.3.0(@types/node@18.19.15)(cosmiconfig@8.1.3)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@4.8.4))(typescript@4.8.4): + cosmiconfig-typescript-loader@4.3.0(@types/node@18.19.15)(cosmiconfig@8.1.3)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3))(typescript@4.8.4): dependencies: '@types/node': 18.19.15 cosmiconfig: 8.1.3 - ts-node: 10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@4.8.4) + ts-node: 10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3) typescript: 4.8.4 cosmiconfig@6.0.0: @@ -21629,7 +21598,7 @@ snapshots: optionalDependencies: webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) - css-loader@7.1.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)): + css-loader@7.1.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)): dependencies: icss-utils: 5.1.0(postcss@8.4.41) postcss: 8.4.41 @@ -21640,7 +21609,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) + webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(esbuild@0.19.5)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)): dependencies: @@ -22148,8 +22117,6 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - defined@1.0.1: {} - defu@6.1.2: {} defu@6.1.4: {} @@ -22213,12 +22180,6 @@ snapshots: transitivePeerDependencies: - supports-color - detective@5.2.1: - dependencies: - acorn-node: 1.8.2 - defined: 1.0.1 - minimist: 1.2.8 - deterministic-object-hash@2.0.2: dependencies: base-64: 1.0.0 @@ -25025,11 +24986,11 @@ snapshots: less: 4.1.3 webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) - less-loader@12.2.0(less@4.2.0)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)): + less-loader@12.2.0(less@4.2.0)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)): dependencies: less: 4.2.0 optionalDependencies: - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) + webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) less@4.1.3: dependencies: @@ -25081,12 +25042,6 @@ snapshots: optionalDependencies: webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) - license-webpack-plugin@4.0.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)): - dependencies: - webpack-sources: 3.2.3 - optionalDependencies: - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) - lilconfig@2.0.6: {} lilconfig@2.1.0: {} @@ -26212,12 +26167,6 @@ snapshots: tapable: 2.2.1 webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) - mini-css-extract-plugin@2.9.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)): - dependencies: - schema-utils: 4.2.0 - tapable: 2.2.1 - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) - minimalistic-assert@1.0.1: {} minimatch@10.0.1: @@ -26368,6 +26317,12 @@ snapshots: mute-stream@1.0.0: {} + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + nanoid@3.3.7: {} natural-compare@1.4.0: {} @@ -26389,7 +26344,7 @@ snapshots: nested-error-stacks@2.1.1: {} - ng-packagr@18.2.1(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(tailwindcss@3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(tslib@2.7.0)(typescript@5.4.3): + ng-packagr@18.2.1(@angular/compiler-cli@18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3))(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(tslib@2.7.0)(typescript@5.4.3): dependencies: '@angular/compiler-cli': 18.2.4(@angular/compiler@18.2.4(@angular/core@18.2.4(rxjs@7.8.1)(zone.js@0.14.10)))(typescript@5.4.3) '@rollup/plugin-json': 6.1.0(rollup@4.20.0) @@ -26418,7 +26373,7 @@ snapshots: typescript: 5.4.3 optionalDependencies: rollup: 4.20.0 - tailwindcss: 3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) + tailwindcss: 3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) transitivePeerDependencies: - supports-color @@ -26780,7 +26735,7 @@ snapshots: object-assign@4.1.1: {} - object-hash@2.2.0: {} + object-hash@3.0.0: {} object-inspect@1.12.2: {} @@ -27457,11 +27412,18 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.2 + postcss-import@15.1.0(postcss@8.4.41): + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.2 + postcss-initial@4.0.1(postcss@8.4.38): dependencies: postcss: 8.4.38 - postcss-js@3.0.3: + postcss-js@4.0.1(postcss@8.4.41): dependencies: camelcase-css: 2.0.1 postcss: 8.4.41 @@ -27472,12 +27434,12 @@ snapshots: postcss: 8.4.38 postcss-value-parser: 4.2.0 - postcss-load-config@3.1.4(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)): + postcss-load-config@4.0.2(postcss@8.4.41)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)): dependencies: - lilconfig: 2.1.0 - yaml: 1.10.2 + lilconfig: 3.1.2 + yaml: 2.5.1 optionalDependencies: - postcss: 8.4.38 + postcss: 8.4.41 ts-node: 10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3) postcss-loader@6.2.1(postcss@8.4.41)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)): @@ -27498,14 +27460,14 @@ snapshots: transitivePeerDependencies: - typescript - postcss-loader@8.1.1(postcss@8.4.41)(typescript@5.4.3)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)): + postcss-loader@8.1.1(postcss@8.4.41)(typescript@5.4.3)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)): dependencies: cosmiconfig: 9.0.0(typescript@5.4.3) jiti: 1.21.0 postcss: 8.4.41 semver: 7.6.3 optionalDependencies: - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) + webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) transitivePeerDependencies: - typescript @@ -27544,7 +27506,7 @@ snapshots: caniuse-api: 3.0.0 cssnano-utils: 4.0.0(postcss@8.4.41) postcss: 8.4.41 - postcss-selector-parser: 6.0.12 + postcss-selector-parser: 6.1.1 postcss-merge-rules@6.1.1(postcss@8.4.41): dependencies: @@ -27595,7 +27557,7 @@ snapshots: postcss-minify-selectors@6.0.0(postcss@8.4.41): dependencies: postcss: 8.4.41 - postcss-selector-parser: 6.0.12 + postcss-selector-parser: 6.1.1 postcss-minify-selectors@6.0.4(postcss@8.4.41): dependencies: @@ -27623,10 +27585,10 @@ snapshots: icss-utils: 5.1.0(postcss@8.4.41) postcss: 8.4.41 - postcss-nested@5.0.6(postcss@8.4.38): + postcss-nested@6.2.0(postcss@8.4.41): dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.12 + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 postcss-nesting@11.0.0(postcss@8.4.38): dependencies: @@ -27882,7 +27844,7 @@ snapshots: postcss-unique-selectors@6.0.0(postcss@8.4.41): dependencies: postcss: 8.4.41 - postcss-selector-parser: 6.0.12 + postcss-selector-parser: 6.1.1 postcss-unique-selectors@6.0.4(postcss@8.4.41): dependencies: @@ -28756,12 +28718,12 @@ snapshots: optionalDependencies: sass: 1.77.6 - sass-loader@16.0.0(sass@1.77.6)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)): + sass-loader@16.0.0(sass@1.77.6)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)): dependencies: neo-async: 2.6.2 optionalDependencies: sass: 1.77.6 - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) + webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) sass@1.77.6: dependencies: @@ -29195,12 +29157,6 @@ snapshots: source-map-js: 1.2.0 webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) - source-map-loader@5.0.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)): - dependencies: - iconv-lite: 0.6.3 - source-map-js: 1.2.0 - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) - source-map-support@0.5.13: dependencies: buffer-from: 1.1.2 @@ -29490,6 +29446,16 @@ snapshots: transitivePeerDependencies: - supports-color + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.3.15 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + superjson@2.2.1: dependencies: copy-anything: 3.0.3 @@ -29542,31 +29508,30 @@ snapshots: system-architecture@0.1.0: {} - tailwindcss@3.0.2(autoprefixer@10.4.19(postcss@8.4.38))(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)): + tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)): dependencies: + '@alloc/quick-lru': 5.2.0 arg: 5.0.2 - autoprefixer: 10.4.19(postcss@8.4.38) - chalk: 4.1.2 - chokidar: 3.5.3 - color-name: 1.1.4 - cosmiconfig: 7.0.1 - detective: 5.2.1 + chokidar: 3.6.0 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.2.12 + fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 + jiti: 1.21.6 + lilconfig: 2.1.0 + micromatch: 4.0.5 normalize-path: 3.0.0 - object-hash: 2.2.0 - postcss: 8.4.38 - postcss-js: 3.0.3 - postcss-load-config: 3.1.4(postcss@8.4.38)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) - postcss-nested: 5.0.6(postcss@8.4.38) - postcss-selector-parser: 6.0.12 - postcss-value-parser: 4.2.0 - quick-lru: 5.1.1 - resolve: 1.22.2 - tmp: 0.2.1 + object-hash: 3.0.0 + picocolors: 1.0.1 + postcss: 8.4.41 + postcss-import: 15.1.0(postcss@8.4.41) + postcss-js: 4.0.1(postcss@8.4.41) + postcss-load-config: 4.0.2(postcss@8.4.41)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)) + postcss-nested: 6.2.0(postcss@8.4.41) + postcss-selector-parser: 6.1.1 + resolve: 1.22.8 + sucrase: 3.35.0 transitivePeerDependencies: - ts-node @@ -29625,14 +29590,14 @@ snapshots: '@swc/core': 1.5.7(@swc/helpers@0.5.11) esbuild: 0.19.5 - terser-webpack-plugin@5.3.10(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)): + terser-webpack-plugin@5.3.10(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 terser: 5.31.6 - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) + webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) optionalDependencies: '@swc/core': 1.5.7(@swc/helpers@0.5.11) esbuild: 0.23.0 @@ -29656,6 +29621,14 @@ snapshots: text-table@0.2.0: {} + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + thingies@1.21.0(tslib@2.7.0): dependencies: tslib: 2.7.0 @@ -29691,10 +29664,6 @@ snapshots: dependencies: os-tmpdir: 1.0.2 - tmp@0.2.1: - dependencies: - rimraf: 3.0.2 - tmp@0.2.3: {} tmpl@1.0.5: {} @@ -29766,6 +29735,8 @@ snapshots: ts-dedent@2.2.0: {} + ts-interface-checker@0.1.13: {} + ts-jest@29.1.0(@babel/core@7.21.8)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.21.8))(esbuild@0.19.5)(jest@29.7.0(@types/node@18.19.15)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.19.15)(typescript@5.4.3)))(typescript@5.4.3): dependencies: bs-logger: 0.2.6 @@ -30181,7 +30152,7 @@ snapshots: dependencies: browserslist: 4.23.0 escalade: 3.1.1 - picocolors: 1.0.0 + picocolors: 1.0.1 update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: @@ -30318,7 +30289,7 @@ snapshots: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) pathe: 1.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 vite: 5.4.0(@types/node@18.19.15)(less@4.1.3)(sass@1.77.6)(stylus@0.59.0)(terser@5.31.6) transitivePeerDependencies: - '@types/node' @@ -30527,17 +30498,6 @@ snapshots: optionalDependencies: webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5) - webpack-dev-middleware@7.4.2(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)): - dependencies: - colorette: 2.0.20 - memfs: 4.9.2 - mime-types: 2.1.35 - on-finished: 2.4.1 - range-parser: 1.2.1 - schema-utils: 4.2.0 - optionalDependencies: - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) - webpack-dev-server@4.15.1(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)): dependencies: '@types/bonjour': 3.5.13 @@ -30641,13 +30601,6 @@ snapshots: optionalDependencies: html-webpack-plugin: 5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)))(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)): - dependencies: - typed-assert: 1.0.9 - webpack: 5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0) - optionalDependencies: - html-webpack-plugin: 5.6.0(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) - webpack-virtual-modules@0.6.1: {} webpack-virtual-modules@0.6.2: {} @@ -30704,7 +30657,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)) + terser-webpack-plugin: 5.3.10(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.23.0)(webpack@5.94.0(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.19.5)) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -30884,6 +30837,8 @@ snapshots: yaml@2.2.2: {} + yaml@2.5.1: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 From dd48c99545eebd6bb52b996fa0c81e0965cc57f0 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 7 Oct 2024 12:32:20 +0000 Subject: [PATCH 13/35] chore: release 1.9.0-beta.6 [skip ci] --- CHANGELOG.md | 6 ++++++ package.json | 2 +- packages/astro-angular/package.json | 4 ++-- packages/content/package.json | 2 +- packages/create-analog/package.json | 2 +- .../create-analog/template-angular-v16/package.json | 10 +++++----- .../create-analog/template-angular-v17/package.json | 10 +++++----- packages/create-analog/template-blog/package.json | 10 +++++----- packages/create-analog/template-latest/package.json | 10 +++++----- packages/platform/package.json | 6 +++--- packages/router/package.json | 4 ++-- packages/vite-plugin-angular/package.json | 2 +- packages/vite-plugin-nitro/package.json | 2 +- packages/vitest-angular/package.json | 2 +- 14 files changed, 39 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1db3a2a93..2e8a5d722 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# [1.9.0-beta.6](https://github.com/analogjs/analog/compare/v1.9.0-beta.5...v1.9.0-beta.6) (2024-10-07) + +### Features + +- **create-analog:** update app generators and templates to use TypeScript for Tailwind config ([#1387](https://github.com/analogjs/analog/issues/1387)) ([586adae](https://github.com/analogjs/analog/commit/586adae9b4ef0770dcb5d14344cd5943645b38a9)) + # [1.9.0-beta.5](https://github.com/analogjs/analog/compare/v1.9.0-beta.4...v1.9.0-beta.5) (2024-10-06) ### Bug Fixes diff --git a/package.json b/package.json index 3bfdd2be9..46e206299 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "analogjs-platform", - "version": "1.9.0-beta.5", + "version": "1.9.0-beta.6", "license": "MIT", "type": "module", "scripts": { diff --git a/packages/astro-angular/package.json b/packages/astro-angular/package.json index e905563b2..4c9ff534d 100644 --- a/packages/astro-angular/package.json +++ b/packages/astro-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/astro-angular", - "version": "1.9.0-beta.5", + "version": "1.9.0-beta.6", "description": "Use Angular components within Astro", "type": "module", "author": "Brandon Roberts ", @@ -32,7 +32,7 @@ "url": "https://github.com/sponsors/brandonroberts" }, "dependencies": { - "@analogjs/vite-plugin-angular": "^1.9.0-beta.5" + "@analogjs/vite-plugin-angular": "^1.9.0-beta.6" }, "peerDependencies": { "@angular-devkit/build-angular": ">=16.0.0", diff --git a/packages/content/package.json b/packages/content/package.json index be020c315..edc2c311a 100644 --- a/packages/content/package.json +++ b/packages/content/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/content", - "version": "1.9.0-beta.5", + "version": "1.9.0-beta.6", "description": "Content Rendering for Analog", "type": "module", "author": "Brandon Roberts ", diff --git a/packages/create-analog/package.json b/packages/create-analog/package.json index 002584e78..a49dcf7ee 100644 --- a/packages/create-analog/package.json +++ b/packages/create-analog/package.json @@ -1,6 +1,6 @@ { "name": "create-analog", - "version": "1.9.0-beta.5", + "version": "1.9.0-beta.6", "type": "module", "license": "MIT", "author": "Brandon Roberts", diff --git a/packages/create-analog/template-angular-v16/package.json b/packages/create-analog/template-angular-v16/package.json index 32d28a807..5644dfd4f 100644 --- a/packages/create-analog/template-angular-v16/package.json +++ b/packages/create-analog/template-angular-v16/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.5", - "@analogjs/router": "^1.9.0-beta.5", + "@analogjs/content": "^1.9.0-beta.6", + "@analogjs/router": "^1.9.0-beta.6", "@angular/animations": "^16.2.0", "@angular/common": "^16.2.0", "@angular/compiler": "^16.2.0", @@ -38,9 +38,9 @@ "zone.js": "~0.13.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.5", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.5", - "@analogjs/vitest-angular": "^1.9.0-beta.5", + "@analogjs/platform": "^1.9.0-beta.6", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.6", + "@analogjs/vitest-angular": "^1.9.0-beta.6", "@angular-devkit/build-angular": "^16.2.0", "@angular/cli": "^16.2.0", "@angular/compiler-cli": "^16.2.0", diff --git a/packages/create-analog/template-angular-v17/package.json b/packages/create-analog/template-angular-v17/package.json index fe7043eb1..ba047ad35 100644 --- a/packages/create-analog/template-angular-v17/package.json +++ b/packages/create-analog/template-angular-v17/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.5", - "@analogjs/router": "^1.9.0-beta.5", + "@analogjs/content": "^1.9.0-beta.6", + "@analogjs/router": "^1.9.0-beta.6", "@angular/animations": "^17.2.0", "@angular/common": "^17.2.0", "@angular/compiler": "^17.2.0", @@ -38,9 +38,9 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.5", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.5", - "@analogjs/vitest-angular": "^1.9.0-beta.5", + "@analogjs/platform": "^1.9.0-beta.6", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.6", + "@analogjs/vitest-angular": "^1.9.0-beta.6", "@angular-devkit/build-angular": "^17.2.0", "@angular/cli": "^17.2.0", "@angular/compiler-cli": "^17.2.0", diff --git a/packages/create-analog/template-blog/package.json b/packages/create-analog/template-blog/package.json index 9ab1abcbc..f2f43b746 100644 --- a/packages/create-analog/template-blog/package.json +++ b/packages/create-analog/template-blog/package.json @@ -15,8 +15,8 @@ "test": "ng test" }, "dependencies": { - "@analogjs/content": "^1.9.0-beta.5", - "@analogjs/router": "^1.9.0-beta.5", + "@analogjs/content": "^1.9.0-beta.6", + "@analogjs/router": "^1.9.0-beta.6", "@angular/animations": "^18.0.0", "@angular/build": "^18.0.0", "@angular/common": "^18.0.0", @@ -36,9 +36,9 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.5", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.5", - "@analogjs/vitest-angular": "^1.9.0-beta.5", + "@analogjs/platform": "^1.9.0-beta.6", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.6", + "@analogjs/vitest-angular": "^1.9.0-beta.6", "@angular/cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0", "jsdom": "^22.1.0", diff --git a/packages/create-analog/template-latest/package.json b/packages/create-analog/template-latest/package.json index c18654a52..b9a5cd1e7 100644 --- a/packages/create-analog/template-latest/package.json +++ b/packages/create-analog/template-latest/package.json @@ -15,8 +15,8 @@ }, "private": true, "dependencies": { - "@analogjs/content": "^1.9.0-beta.5", - "@analogjs/router": "^1.9.0-beta.5", + "@analogjs/content": "^1.9.0-beta.6", + "@analogjs/router": "^1.9.0-beta.6", "@angular/animations": "^18.0.0", "@angular/build": "^18.0.0", "@angular/common": "^18.0.0", @@ -38,9 +38,9 @@ "zone.js": "~0.14.3" }, "devDependencies": { - "@analogjs/platform": "^1.9.0-beta.5", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.5", - "@analogjs/vitest-angular": "^1.9.0-beta.5", + "@analogjs/platform": "^1.9.0-beta.6", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.6", + "@analogjs/vitest-angular": "^1.9.0-beta.6", "@angular/cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0", "jsdom": "^22.0.0", diff --git a/packages/platform/package.json b/packages/platform/package.json index c1a0b0364..18c956c8c 100644 --- a/packages/platform/package.json +++ b/packages/platform/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/platform", - "version": "1.9.0-beta.5", + "version": "1.9.0-beta.6", "description": "The fullstack meta-framework for Angular", "type": "module", "author": "Brandon Roberts ", @@ -29,8 +29,8 @@ }, "dependencies": { "nitropack": "^2.9.0", - "@analogjs/vite-plugin-angular": "^1.9.0-beta.5", - "@analogjs/vite-plugin-nitro": "^1.9.0-beta.5", + "@analogjs/vite-plugin-angular": "^1.9.0-beta.6", + "@analogjs/vite-plugin-nitro": "^1.9.0-beta.6", "vitefu": "^0.2.5" }, "peerDependencies": { diff --git a/packages/router/package.json b/packages/router/package.json index cadd13ad0..027b22a59 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/router", - "version": "1.9.0-beta.5", + "version": "1.9.0-beta.6", "description": "Filesystem-based routing for Angular", "type": "module", "author": "Brandon Roberts ", @@ -24,7 +24,7 @@ "url": "https://github.com/sponsors/brandonroberts" }, "peerDependencies": { - "@analogjs/content": "^1.9.0-beta.5", + "@analogjs/content": "^1.9.0-beta.6", "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "@angular/router": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" }, diff --git a/packages/vite-plugin-angular/package.json b/packages/vite-plugin-angular/package.json index d9454d899..e804c8cb3 100644 --- a/packages/vite-plugin-angular/package.json +++ b/packages/vite-plugin-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vite-plugin-angular", - "version": "1.9.0-beta.5", + "version": "1.9.0-beta.6", "description": "Vite Plugin for Angular", "type": "module", "keywords": [ diff --git a/packages/vite-plugin-nitro/package.json b/packages/vite-plugin-nitro/package.json index 28c923160..c633ec234 100644 --- a/packages/vite-plugin-nitro/package.json +++ b/packages/vite-plugin-nitro/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vite-plugin-nitro", - "version": "1.9.0-beta.5", + "version": "1.9.0-beta.6", "description": "A Vite plugin for adding a nitro API server", "type": "module", "author": "Brandon Roberts ", diff --git a/packages/vitest-angular/package.json b/packages/vitest-angular/package.json index 6951ff302..bbf48ff4d 100644 --- a/packages/vitest-angular/package.json +++ b/packages/vitest-angular/package.json @@ -1,6 +1,6 @@ { "name": "@analogjs/vitest-angular", - "version": "1.9.0-beta.5", + "version": "1.9.0-beta.6", "description": "Vitest Builder for Angular", "type": "module", "author": "Brandon Roberts ", From 6adaa76ce55e6d66781dbbc9685b18f919ecd534 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 07:57:44 -0500 Subject: [PATCH 14/35] docs: add redfox-mx as a contributor for code, and infra (#1391) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 10 ++++++++++ README.md | 3 ++- apps/docs-app/docs/contributors.mdx | 1 + .../current/contributors.mdx | 1 + .../current/contributors.mdx | 1 + 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 244080011..567d7bb1a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1159,6 +1159,16 @@ "contributions": [ "code" ] + }, + { + "login": "redfox-mx", + "name": "Diego Jesús", + "avatar_url": "https://avatars.githubusercontent.com/u/20145660?v=4", + "profile": "https://github.com/redfox-mx", + "contributions": [ + "code", + "infra" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 0fce4d5d8..1b9efc749 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ -[![All Contributors](https://img.shields.io/badge/all_contributors-122-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-123-orange.svg?style=flat-square)](#contributors-) @@ -263,6 +263,7 @@ Thanks goes to these wonderful people for contributing to Analog ([emoji key](ht Ilyass
Ilyass

💻 Brad Bodine
Brad Bodine

📖 Kilesh Maharjan
Kilesh Maharjan

💻 + Diego Jesús
Diego Jesús

💻 🚇 diff --git a/apps/docs-app/docs/contributors.mdx b/apps/docs-app/docs/contributors.mdx index 4f66dfb46..2cd4e186b 100644 --- a/apps/docs-app/docs/contributors.mdx +++ b/apps/docs-app/docs/contributors.mdx @@ -216,6 +216,7 @@ Andres is a software engineer for HeroDevs, Angular and Firebase GDE. Ilyass
Ilyass

💻 Brad Bodine
Brad Bodine

📖 Kilesh Maharjan
Kilesh Maharjan

💻 + Diego Jesús
Diego Jesús

💻 🚇 diff --git a/apps/docs-app/i18n/de/docusaurus-plugin-content-docs/current/contributors.mdx b/apps/docs-app/i18n/de/docusaurus-plugin-content-docs/current/contributors.mdx index 3e5a724ee..89254b8a8 100644 --- a/apps/docs-app/i18n/de/docusaurus-plugin-content-docs/current/contributors.mdx +++ b/apps/docs-app/i18n/de/docusaurus-plugin-content-docs/current/contributors.mdx @@ -216,6 +216,7 @@ Andres ist Softwareentwickler für HeroDevs, Angular und Firebase GDE. Ilyass
Ilyass

💻 Brad Bodine
Brad Bodine

📖 Kilesh Maharjan
Kilesh Maharjan

💻 + Diego Jesús
Diego Jesús

💻 🚇 diff --git a/apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/contributors.mdx b/apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/contributors.mdx index 760c5ba89..98429aee9 100644 --- a/apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/contributors.mdx +++ b/apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/contributors.mdx @@ -216,6 +216,7 @@ Andres es un ingeniero en software para HeroDevs, GDE en Angular y Firebase. Ilyass
Ilyass

💻 Brad Bodine
Brad Bodine

📖 Kilesh Maharjan
Kilesh Maharjan

💻 + Diego Jesús
Diego Jesús

💻 🚇 From 8c255ece5594e1f7a16b8a15cfa4619bf55770e8 Mon Sep 17 00:00:00 2001 From: Chau Tran Date: Tue, 8 Oct 2024 07:18:33 -0500 Subject: [PATCH 15/35] fix(vite-plugin-angular): support outputFromObservable (#1392) --- apps/ng-app/src/app/app.component.analog | 6 +- apps/ng-app/src/app/hello.analog | 5 + .../__snapshots__/analog.spec.ts.snap | 139 ++--- .../src/lib/authoring/analog.spec.ts | 7 +- .../src/lib/authoring/analog.ts | 535 +++++++++--------- .../src/lib/authoring/constants.ts | 20 +- 6 files changed, 341 insertions(+), 371 deletions(-) diff --git a/apps/ng-app/src/app/app.component.analog b/apps/ng-app/src/app/app.component.analog index 2410d68b3..f94b716d6 100644 --- a/apps/ng-app/src/app/app.component.analog +++ b/apps/ng-app/src/app/app.component.analog @@ -42,6 +42,10 @@ console.log('the click from Hello', event); } + function onTimer(event: number) { + console.log('the timer from Hello', event); + } + effect(() => { console.log('counter changed', counter()); }); @@ -63,7 +67,7 @@ @if (counter() > 5) { - + } diff --git a/apps/ng-app/src/app/hello.analog b/apps/ng-app/src/app/hello.analog index ae06ee9fe..48ebccf91 100644 --- a/apps/ng-app/src/app/hello.analog +++ b/apps/ng-app/src/app/hello.analog @@ -9,6 +9,8 @@ afterNextRender, output, } from '@angular/core'; + import { outputFromObservable } from '@angular/core/rxjs-interop'; + import { interval } from 'rxjs'; import { myFunc } from './export-stuff.analog' with { analog: 'exposes'}; @@ -33,6 +35,9 @@ console.log('text changed', text()); }); + const stream$ = interval(1000); + const timer = outputFromObservable(stream$); + const clicked = output(); inject(DestroyRef).onDestroy(() => { diff --git a/packages/vite-plugin-angular/src/lib/authoring/__snapshots__/analog.spec.ts.snap b/packages/vite-plugin-angular/src/lib/authoring/__snapshots__/analog.spec.ts.snap index 327588e2c..aeb2abd1d 100644 --- a/packages/vite-plugin-angular/src/lib/authoring/__snapshots__/analog.spec.ts.snap +++ b/packages/vite-plugin-angular/src/lib/authoring/__snapshots__/analog.spec.ts.snap @@ -2,13 +2,12 @@ exports[`authoring ng file > should process component as an analog file 1`] = ` "import { Component, ChangeDetectionStrategy } from '@angular/core'; -import { signal, input, ViewChild, afterNextRender, ElementRef, viewChild, viewChildren, contentChild, contentChildren, output, model } from "@angular/core"; +import { signal, input, ViewChild, afterNextRender, ElementRef, viewChild, viewChildren, contentChild, contentChildren, output, model, outputFromObservable } from "@angular/core"; import External from "./external.analog"; import { ExternalService } from "./external"; import { ExternalEnum } from "./external.model"; import nonameanalog from "./noname.analog"; import nonameag from "./noname.ag"; - @Component({ standalone: true, selector: 'virtual,Virtual', @@ -25,106 +24,81 @@ import nonameag from "./noname.ag"; divElement: new ViewChild('divElement') }, imports: [External, nonameanalog, nonameag], - providers: [ExternalService], - outputs: ['output', 'outputWithType'] + providers: [ExternalService] }) export default class VirtualAnalogComponent { constructor() { + const [a, b, , c = 4] = [1, 2, 3]; + this.a = a; + this.b = b; + this.c = c; let divElement; let test; - - + const counter = this.counter; + const inputWithDefault = this.inputWithDefault; + const inputWithoutDefault = this.inputWithoutDefault; + const inputWithAlias = this.inputWithAlias; + const inputWithoutDefaultWithAlias = this.inputWithoutDefaultWithAlias; + const inputWithTransform = this.inputWithTransform; + const requiredInput = this.requiredInput; + const requiredInputWithTransform = this.requiredInputWithTransform; + const newOutput = this.newOutput; + const stream$ = this.stream$; + const outputWithObservable = this.outputWithObservable; + const myModel = this.myModel; + const viewChildEl = this.viewChildEl; + const viewChildRequiredEl = this.viewChildRequiredEl; + const viewChildrenEl = this.viewChildrenEl; + const contentChildEl = this.contentChildEl; + const contentChildRequiredEl = this.contentChildRequiredEl; + const contentChildrenEl = this.contentChildrenEl; setTimeout(() => { test = 'test'; }, 1000) - const counter = (this.counter = signal(0)); - - const [a, b, , c = 4] = [1, 2, 3]; - this.a = a; - this.b = b; - this.c = c; - const inputWithDefault = this.inputWithDefault - const inputWithoutDefault = this.inputWithoutDefault - const inputWithAlias = this.inputWithAlias - const inputWithoutDefaultWithAlias = this.inputWithoutDefaultWithAlias - const inputWithTransform = this.inputWithTransform - const requiredInput = this.requiredInput - const requiredInputWithTransform = this.requiredInputWithTransform - const output = this.output - const newOutput = this.newOutput - const outputWithType = this.outputWithType - const myModel = this.myModel - const viewChildEl = this.viewChildEl - const viewChildRequiredEl = this.viewChildRequiredEl - const viewChildrenEl = this.viewChildrenEl - const contentChildEl = this.contentChildEl - const contentChildRequiredEl = this.contentChildRequiredEl - const contentChildrenEl = this.contentChildrenEl - - afterNextRender(() => { console.log('the div', divElement); }) - Object.defineProperties(this, { - divElement: { get() { return divElement; }, set(v) { divElement = v; } }, - test: { get() { return test; }, set(v) { test = v; } }, - }); + divElement: { set(v) { divElement = v; }get() { return divElement } }, + test: { set(v) { test = v; }get() { return test } }, + }) } - - protected Math = Math; - protected a; - protected b; - protected c; - protected inputWithDefault = input(""); - protected inputWithoutDefault = input(); - protected inputWithAlias = input("", { alias: "theAlias" }); - protected inputWithoutDefaultWithAlias = input(undefined, { + protected readonly Math = Math; + a; + b; + c; + protected readonly routeMeta = routeMeta; + counter = signal(0); + inputWithDefault = input(""); + inputWithoutDefault = input(); + inputWithAlias = input("", { alias: "theAlias" }); + inputWithoutDefaultWithAlias = input(undefined, { alias: "theAlias", }); - protected inputWithTransform = input("", { + inputWithTransform = input("", { transform: booleanAttribute, }); - protected requiredInput = input.required(); - protected requiredInputWithTransform = input.required({ + requiredInput = input.required(); + requiredInputWithTransform = input.required({ transform: (value) => numberAttribute(value, 10), }); - protected output = new EventEmitter(); - protected newOutput = output(); - protected outputWithType = new EventEmitter(); - protected myModel = model(); - protected viewChildEl = viewChild('divElement'); - protected viewChildRequiredEl = viewChild.required('divElement'); - protected viewChildrenEl = viewChildren('divElement'); - protected contentChildEl = contentChild('divElement'); - protected contentChildRequiredEl = contentChild.required('divElement'); - protected contentChildrenEl = contentChildren('divElement'); - protected ExternalEnum = ExternalEnum; + newOutput = output(); + stream$ = new BehaviorSubject('hello'); + outputWithObservable = outputFromObservable(this.stream$); + myModel = model(); + viewChildEl = viewChild('divElement'); + viewChildRequiredEl = viewChild.required('divElement'); + viewChildrenEl = viewChildren('divElement'); + contentChildEl = contentChild('divElement'); + contentChildRequiredEl = contentChild.required('divElement'); + contentChildrenEl = contentChildren('divElement'); + protected readonly myFunc = myFunc; + protected readonly ExternalEnum = ExternalEnum; } - - export const routeMeta = { title: 'My page', canActivate: [() => true], } - - -export interface MyInterface { - title: string -} - - -export type MyType = string; - - -export enum Direction { - Up, - Down, - Left, - Right, -} - - export function myFunc() { console.log('hello'); } @@ -150,29 +124,24 @@ export default class VirtualAnalogComponent { exports[`authoring ng file > should process directive as an analog file 1`] = ` "import { Directive } from '@angular/core'; import { inject, ElementRef, afterNextRender } from "@angular/core"; - @Directive({ standalone: true, selector: 'input[directive]' }) export default class VirtualAnalogDirective { constructor() { - const elRef = (this.elRef = inject(ElementRef)); - - + const elRef = this.elRef; afterNextRender(() => { elRef.nativeElement.focus(); }); this.onInit = () => { console.log('init code'); } - - effect(() => { console.log('just some effect'); }); } - + elRef = inject(ElementRef); ngOnInit() { this.onInit(); } diff --git a/packages/vite-plugin-angular/src/lib/authoring/analog.spec.ts b/packages/vite-plugin-angular/src/lib/authoring/analog.spec.ts index 4d1448f75..f50245ff7 100644 --- a/packages/vite-plugin-angular/src/lib/authoring/analog.spec.ts +++ b/packages/vite-plugin-angular/src/lib/authoring/analog.spec.ts @@ -2,7 +2,7 @@ import { compileAnalogFile } from './analog'; const COMPONENT_CONTENT = `