create-analog 2.0.0-alpha.7 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/files/styles.css +4 -85
  2. package/index.js +19 -87
  3. package/package.json +7 -3
  4. package/template-angular-v17/package.json +5 -5
  5. package/template-angular-v18/package.json +5 -5
  6. package/template-angular-v18/vite.config.ts +1 -1
  7. package/{template-angular-v16 → template-angular-v19}/README.md +1 -1
  8. package/{template-angular-v16 → template-angular-v19}/_gitignore +2 -0
  9. package/{template-angular-v16 → template-angular-v19}/angular.json +1 -1
  10. package/{template-angular-v16 → template-angular-v19}/index.html +1 -1
  11. package/template-angular-v19/package.json +53 -0
  12. package/{template-latest → template-angular-v19}/src/app/app.component.ts +0 -1
  13. package/{template-angular-v16 → template-angular-v19}/src/app/app.config.server.ts +3 -8
  14. package/template-angular-v19/src/app/app.config.ts +20 -0
  15. package/template-angular-v19/src/app/pages/index.page.ts +54 -0
  16. package/template-angular-v19/src/main.server.ts +8 -0
  17. package/{template-angular-v16 → template-angular-v19}/src/main.ts +2 -2
  18. package/{template-angular-v16 → template-angular-v19}/src/styles.css +5 -0
  19. package/{template-angular-v16 → template-angular-v19}/tsconfig.app.json +2 -3
  20. package/{template-angular-v16 → template-angular-v19}/tsconfig.json +3 -6
  21. package/{template-angular-v16 → template-angular-v19}/tsconfig.spec.json +3 -3
  22. package/{template-angular-v16 → template-angular-v19}/vite.config.ts +5 -4
  23. package/template-blog/.vscode/extensions.json +1 -1
  24. package/template-blog/package.json +25 -25
  25. package/template-blog/src/app/app.config.ts +8 -3
  26. package/{template-latest/src/app/app.component.spec.ts → template-blog/src/app/app.spec.ts} +1 -1
  27. package/template-blog/src/app/{app.component.ts → app.ts} +0 -1
  28. package/template-blog/src/app/pages/blog/[slug].page.ts +0 -1
  29. package/template-blog/src/app/pages/blog/index.page.ts +0 -1
  30. package/template-blog/src/test-setup.ts +6 -5
  31. package/template-blog/tsconfig.json +4 -2
  32. package/template-blog/tsconfig.spec.json +1 -1
  33. package/template-blog/vite.config.ts +3 -3
  34. package/template-latest/.vscode/extensions.json +1 -1
  35. package/template-latest/package.json +25 -25
  36. package/template-latest/src/app/app.config.ts +8 -3
  37. package/template-latest/src/app/{app-root.spec.ts → app.spec.ts} +4 -4
  38. package/template-latest/src/app/app.ts +17 -0
  39. package/template-latest/src/app/pages/analog-welcome.ts +263 -0
  40. package/template-latest/src/app/pages/index.page.ts +5 -47
  41. package/template-latest/src/styles.css +3 -79
  42. package/template-latest/src/test-setup.ts +6 -5
  43. package/template-latest/tsconfig.json +4 -2
  44. package/template-latest/tsconfig.spec.json +1 -1
  45. package/template-latest/vite.config.ts +4 -2
  46. package/template-minimal/.vscode/extensions.json +1 -1
  47. package/template-minimal/package.json +25 -25
  48. package/template-minimal/src/app/app.config.ts +8 -3
  49. package/template-minimal/src/app/{app.component.ts → app.ts} +0 -1
  50. package/template-minimal/src/app/pages/index.page.ts +0 -1
  51. package/template-minimal/vite.config.ts +3 -3
  52. package/files/analog-env.d.ts +0 -13
  53. package/files/postcss.config.cjs +0 -6
  54. package/files/tailwind.config.ts +0 -9
  55. package/template-angular-v16/package.json +0 -54
  56. package/template-angular-v16/src/app/app.component.spec.ts +0 -17
  57. package/template-angular-v16/src/app/app.component.ts +0 -20
  58. package/template-angular-v16/src/app/app.config.ts +0 -12
  59. package/template-angular-v16/src/app/pages/index.page.ts +0 -49
  60. package/template-angular-v16/src/main.server.ts +0 -26
  61. package/template-angular-v18/src/app/app-root.ag +0 -16
  62. package/template-angular-v18/src/app/app-root.spec.ts +0 -20
  63. package/template-angular-v18/src/app/pages/index.page.ag +0 -53
  64. package/template-blog/src/app/app-root.ag +0 -25
  65. package/template-blog/src/app/app-root.spec.ts +0 -20
  66. package/template-blog/src/app/pages/blog/[slug].page.ag +0 -24
  67. package/template-blog/src/app/pages/blog/index.page.ag +0 -32
  68. package/template-latest/src/app/app-root.ag +0 -16
  69. package/template-latest/src/app/pages/index.page.ag +0 -53
  70. package/template-minimal/src/app/app-root.ag +0 -7
  71. package/template-minimal/src/app/pages/index.page.ag +0 -32
  72. /package/{template-angular-v16 → template-angular-v19}/.editorconfig +0 -0
  73. /package/{template-angular-v16 → template-angular-v19}/.vscode/extensions.json +0 -0
  74. /package/{template-angular-v16 → template-angular-v19}/.vscode/launch.json +0 -0
  75. /package/{template-angular-v16 → template-angular-v19}/.vscode/tasks.json +0 -0
  76. /package/{template-angular-v16/src/assets → template-angular-v19/public}/.gitkeep +0 -0
  77. /package/{template-angular-v16/src/assets → template-angular-v19/public}/analog.svg +0 -0
  78. /package/{template-angular-v16 → template-angular-v19/public}/favicon.ico +0 -0
  79. /package/{template-angular-v16/src/assets → template-angular-v19/public}/vite.svg +0 -0
  80. /package/{template-blog → template-angular-v19}/src/app/app.component.spec.ts +0 -0
  81. /package/{template-angular-v16/src/server/routes → template-angular-v19/src/server/routes/api}/v1/hello.ts +0 -0
  82. /package/{template-angular-v16/src/test.ts → template-angular-v19/src/test-setup.ts} +0 -0
  83. /package/{template-angular-v16 → template-angular-v19}/src/vite-env.d.ts +0 -0
package/files/styles.css CHANGED
@@ -1,89 +1,8 @@
1
- /* Tailwind directives */
2
- @tailwind base;
3
- @tailwind components;
4
- @tailwind utilities;
1
+ @import 'tailwindcss';
5
2
 
6
3
  /* You can add global styles to this file, and also import other style files */
7
- :root {
8
- font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
9
- font-size: 16px;
10
- line-height: 24px;
11
- font-weight: 400;
12
-
13
- color-scheme: light dark;
14
- color: rgba(255, 255, 255, 0.87);
15
- background-color: #242424;
16
-
17
- font-synthesis: none;
18
- text-rendering: optimizeLegibility;
19
- -webkit-font-smoothing: antialiased;
20
- -moz-osx-font-smoothing: grayscale;
21
- -webkit-text-size-adjust: 100%;
22
- }
23
-
24
- a {
25
- font-weight: 500;
26
- color: #646cff;
27
- text-decoration: inherit;
28
- }
29
-
30
- a:hover {
31
- color: #535bf2;
32
- }
33
-
4
+ html,
34
5
  body {
35
- margin: 0;
36
- display: flex;
37
- place-items: center;
38
- min-width: 320px;
39
- min-height: 100vh;
40
- }
41
-
42
- h1 {
43
- font-size: 3.2em;
44
- line-height: 1.1;
45
- }
46
-
47
- button {
48
- border-radius: 8px;
49
- border: 1px solid transparent;
50
- padding: 0.6em 1.2em;
51
- font-size: 1em;
52
- font-weight: 500;
53
- font-family: inherit;
54
- background-color: #1a1a1a;
55
- cursor: pointer;
56
- transition: border-color 0.25s;
57
- }
58
-
59
- button:hover {
60
- border-color: #646cff;
61
- }
62
-
63
- button:focus,
64
- button:focus-visible {
65
- outline: 4px auto -webkit-focus-ring-color;
66
- }
67
-
68
- .card {
69
- padding: 2em;
70
- }
71
-
72
- .logo {
73
- @apply box-content;
74
- }
75
-
76
- @media (prefers-color-scheme: light) {
77
- :root {
78
- color: #213547;
79
- background-color: #ffffff;
80
- }
81
-
82
- a:hover {
83
- color: #747bff;
84
- }
85
-
86
- button {
87
- background-color: #f9f9f9;
88
- }
6
+ display: block;
7
+ height: 100%;
89
8
  }
package/index.js CHANGED
@@ -42,7 +42,7 @@ const HIGHLIGHTERS = {
42
42
  highlighter: 'withPrismHighlighter',
43
43
  entryPoint: 'prism-highlighter',
44
44
  dependencies: {
45
- 'marked-highlight': '^2.0.1',
45
+ 'marked-highlight': '^2.2.1',
46
46
  prismjs: '^1.29.0',
47
47
  },
48
48
  },
@@ -50,7 +50,7 @@ const HIGHLIGHTERS = {
50
50
  highlighter: 'withShikiHighlighter',
51
51
  entryPoint: 'shiki-highlighter',
52
52
  dependencies: {
53
- marked: '^7.0.0',
53
+ marked: '^15.0.7',
54
54
  'marked-shiki': '^1.1.0',
55
55
  shiki: '^1.6.1',
56
56
  },
@@ -65,7 +65,6 @@ async function init() {
65
65
  let targetDir = formatTargetDir(argv._[0]);
66
66
  let template = argv.template || argv.t;
67
67
  let skipTailwind = fromBoolArg(argv.skipTailwind);
68
- let useAnalogSFC = fromBoolArg(argv.analogSFC);
69
68
 
70
69
  const defaultTargetDir = 'analog-project';
71
70
  const getProjectName = () =>
@@ -135,11 +134,6 @@ async function init() {
135
134
  })),
136
135
  initial: 1,
137
136
  },
138
- {
139
- type: useAnalogSFC === undefined ? 'confirm' : null,
140
- name: 'analogSFC',
141
- message: 'Would you like to use Analog SFCs?',
142
- },
143
137
  {
144
138
  type: skipTailwind === undefined ? 'confirm' : null,
145
139
  name: 'tailwind',
@@ -163,7 +157,6 @@ async function init() {
163
157
  overwrite,
164
158
  packageName,
165
159
  variant,
166
- analogSFC,
167
160
  tailwind,
168
161
  syntaxHighlighter,
169
162
  } = result;
@@ -181,7 +174,6 @@ async function init() {
181
174
  // determine syntax highlighter
182
175
  let highlighter = syntaxHighlighter ?? (template === 'blog' ? 'prism' : null);
183
176
  skipTailwind = skipTailwind ?? !tailwind;
184
- useAnalogSFC = useAnalogSFC ?? analogSFC;
185
177
 
186
178
  console.log(`\nScaffolding project in ${root}...`);
187
179
 
@@ -211,11 +203,16 @@ async function init() {
211
203
  }
212
204
 
213
205
  if (!skipTailwind) {
214
- addTailwindConfig(write, filesDir);
215
- addPostCssConfig(write, filesDir);
216
206
  addTailwindDirectives(write, filesDir);
217
207
  }
218
208
 
209
+ replacePlaceholders(root, 'vite.config.ts', {
210
+ __TAILWIND_IMPORT__: !skipTailwind
211
+ ? `\nimport tailwindcss from '@tailwindcss/vite';`
212
+ : '',
213
+ __TAILWIND_PLUGIN__: !skipTailwind ? '\n tailwindcss()' : '',
214
+ });
215
+
219
216
  const pkgInfo = pkgFromUserAgent(process.env.npm_config_user_agent);
220
217
  const pkgManager = pkgInfo ? pkgInfo.name : 'npm';
221
218
  const pkg = JSON.parse(
@@ -230,7 +227,7 @@ async function init() {
230
227
  }
231
228
 
232
229
  if (!skipTailwind) {
233
- addTailwindDevDependencies(pkg);
230
+ addTailwindDependencies(pkg);
234
231
  }
235
232
 
236
233
  if (pkgManager === 'yarn') {
@@ -243,7 +240,6 @@ async function init() {
243
240
  write('package.json', JSON.stringify(pkg, null, 2));
244
241
 
245
242
  setProjectTitle(root, getProjectName());
246
- setComponentFormat(root, filesDir, write, template, useAnalogSFC);
247
243
 
248
244
  console.log(`\nInitializing git repository:`);
249
245
  execSync(`git init ${targetDir} && cd ${targetDir} && git add .`);
@@ -370,36 +366,19 @@ function addTailwindDirectives(write, filesDir) {
370
366
  );
371
367
  }
372
368
 
373
- function addPostCssConfig(write, filesDir) {
374
- write(
375
- 'postcss.config.cjs',
376
- fs.readFileSync(path.join(filesDir, `postcss.config.cjs`), 'utf-8'),
377
- );
378
- }
379
-
380
- function addTailwindConfig(write, filesDir) {
381
- write(
382
- 'tailwind.config.ts',
383
- fs.readFileSync(path.join(filesDir, `tailwind.config.ts`), 'utf-8'),
384
- );
385
- }
386
-
387
- function addTailwindDevDependencies(pkg) {
388
- ['tailwindcss@^3.3.1', 'postcss@^8.4.21', 'autoprefixer@^10.4.14'].forEach(
389
- (packageName) => {
390
- const [name, version] = packageName.split('@');
391
- pkg.devDependencies[name] = version;
392
- },
393
- );
369
+ function addTailwindDependencies(pkg) {
370
+ pkg.dependencies['tailwindcss'] = '^4.1.4';
371
+ pkg.dependencies['postcss'] = '^8.5.3';
372
+ pkg.dependencies['@tailwindcss/vite'] = '^4.1.4';
394
373
  }
395
374
 
396
375
  function addYarnDevDependencies(pkg, template) {
397
376
  // v18
398
- if (template === 'latest' || template === 'blog') {
399
- pkg.devDependencies['@nx/angular'] = '^19.1.0';
400
- pkg.devDependencies['@nx/devkit'] = '^19.1.0';
401
- pkg.devDependencies['@nx/vite'] = '^19.1.0';
402
- pkg.devDependencies['nx'] = '^19.1.0';
377
+ if (template === 'latest' || template === 'blog' || template === 'minimal') {
378
+ pkg.devDependencies['@nx/angular'] = '^21.0.0';
379
+ pkg.devDependencies['@nx/devkit'] = '^21.0.0';
380
+ pkg.devDependencies['@nx/vite'] = '^21.0.0';
381
+ pkg.devDependencies['nx'] = '^21.0.0';
403
382
  } else if (template === 'angular-v17') {
404
383
  pkg.devDependencies['@angular-devkit/build-angular'] = '^17.2.0';
405
384
  }
@@ -436,47 +415,6 @@ function setProjectTitle(root, title) {
436
415
  });
437
416
  }
438
417
 
439
- function setComponentFormat(root, filesDir, write, template, useAnalogSFC) {
440
- const getSFCConfig = () => {
441
- const sfcConfigOption =
442
- 'vite: { experimental: { supportAnalogFormat: true } }';
443
-
444
- return template === 'latest'
445
- ? `{ ${sfcConfigOption} }`
446
- : `\n ${sfcConfigOption},`;
447
- };
448
-
449
- replacePlaceholders(root, 'vite.config.ts', {
450
- __ANALOG_SFC_CONFIG__: useAnalogSFC ? getSFCConfig() : '',
451
- });
452
- replacePlaceholders(root, ['src/main.ts', 'src/main.server.ts'], {
453
- __APP_COMPONENT__: useAnalogSFC ? 'App' : 'AppComponent',
454
- __APP_COMPONENT_IMPORT__: useAnalogSFC
455
- ? "import App from './app/app-root.ag';"
456
- : "import { AppComponent } from './app/app.component';",
457
- });
458
-
459
- const cmpForDelete = useAnalogSFC ? 'app.component' : 'app-root';
460
- const deleteExt = useAnalogSFC ? 'ts' : 'ag';
461
- deleteFiles(root, [
462
- useAnalogSFC ? `src/app/${cmpForDelete}.ts` : `src/app/${cmpForDelete}.ag`,
463
- template === 'blog'
464
- ? [
465
- `src/app/pages/blog/index.page.${deleteExt}`,
466
- `src/app/pages/blog/[slug].page.${deleteExt}`,
467
- ]
468
- : `src/app/pages/index.page.${deleteExt}`,
469
- template !== 'minimal' && `src/app/${cmpForDelete}.spec.ts`,
470
- ]);
471
-
472
- if (useAnalogSFC) {
473
- write(
474
- 'src/analog-env.d.ts',
475
- fs.readFileSync(path.join(filesDir, 'analog-env.d.ts'), 'utf-8'),
476
- );
477
- }
478
- }
479
-
480
418
  function replacePlaceholders(root, files, config) {
481
419
  for (const file of toFlatArray(files)) {
482
420
  const filePath = path.join(root, file);
@@ -490,12 +428,6 @@ function replacePlaceholders(root, files, config) {
490
428
  }
491
429
  }
492
430
 
493
- function deleteFiles(root, files) {
494
- for (const file of toFlatArray(files)) {
495
- fs.unlinkSync(path.join(root, file));
496
- }
497
- }
498
-
499
431
  function toFlatArray(value) {
500
432
  return (Array.isArray(value) ? value : [value]).filter(Boolean).flat();
501
433
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-analog",
3
- "version": "2.0.0-alpha.7",
3
+ "version": "2.0.0-beta.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "author": "Brandon Roberts",
@@ -10,9 +10,9 @@
10
10
  },
11
11
  "files": [
12
12
  "index.js",
13
- "template-angular-v16",
14
13
  "template-angular-v17",
15
14
  "template-angular-v18",
15
+ "template-angular-v19",
16
16
  "template-blog",
17
17
  "template-latest",
18
18
  "template-minimal",
@@ -20,7 +20,7 @@
20
20
  ],
21
21
  "main": "index.js",
22
22
  "engines": {
23
- "node": "^18.13.0 || ^20.0.0"
23
+ "node": ">=20.0.0"
24
24
  },
25
25
  "repository": {
26
26
  "type": "git",
@@ -38,5 +38,9 @@
38
38
  "kolorist": "^1.6.0",
39
39
  "minimist": "^1.2.7",
40
40
  "prompts": "^2.4.2"
41
+ },
42
+ "publishConfig": {
43
+ "access": "public",
44
+ "provenance": true
41
45
  }
42
46
  }
@@ -15,8 +15,8 @@
15
15
  "test": "ng test"
16
16
  },
17
17
  "dependencies": {
18
- "@analogjs/content": "^2.0.0-alpha.7",
19
- "@analogjs/router": "^2.0.0-alpha.7",
18
+ "@analogjs/content": "^2.0.0-beta.1",
19
+ "@analogjs/router": "^2.0.0-beta.1",
20
20
  "@angular/animations": "^17.2.0",
21
21
  "@angular/common": "^17.2.0",
22
22
  "@angular/compiler": "^17.2.0",
@@ -38,9 +38,9 @@
38
38
  "zone.js": "~0.14.0"
39
39
  },
40
40
  "devDependencies": {
41
- "@analogjs/platform": "^2.0.0-alpha.7",
42
- "@analogjs/vite-plugin-angular": "^2.0.0-alpha.7",
43
- "@analogjs/vitest-angular": "^2.0.0-alpha.7",
41
+ "@analogjs/platform": "^2.0.0-beta.1",
42
+ "@analogjs/vite-plugin-angular": "^2.0.0-beta.1",
43
+ "@analogjs/vitest-angular": "^2.0.0-beta.1",
44
44
  "@angular-devkit/build-angular": "^17.2.0",
45
45
  "@angular/cli": "^17.2.0",
46
46
  "@angular/compiler-cli": "^17.2.0",
@@ -15,8 +15,8 @@
15
15
  },
16
16
  "private": true,
17
17
  "dependencies": {
18
- "@analogjs/content": "^2.0.0-alpha.7",
19
- "@analogjs/router": "^2.0.0-alpha.7",
18
+ "@analogjs/content": "^2.0.0-beta.1",
19
+ "@analogjs/router": "^2.0.0-beta.1",
20
20
  "@angular/animations": "^18.0.0",
21
21
  "@angular/build": "^18.0.0",
22
22
  "@angular/common": "^18.0.0",
@@ -38,9 +38,9 @@
38
38
  "zone.js": "~0.14.3"
39
39
  },
40
40
  "devDependencies": {
41
- "@analogjs/platform": "^2.0.0-alpha.7",
42
- "@analogjs/vite-plugin-angular": "^2.0.0-alpha.7",
43
- "@analogjs/vitest-angular": "^2.0.0-alpha.7",
41
+ "@analogjs/platform": "^2.0.0-beta.1",
42
+ "@analogjs/vite-plugin-angular": "^2.0.0-beta.1",
43
+ "@analogjs/vitest-angular": "^2.0.0-beta.1",
44
44
  "@angular/cli": "^18.0.0",
45
45
  "@angular/compiler-cli": "^18.0.0",
46
46
  "jsdom": "^22.0.0",
@@ -11,7 +11,7 @@ export default defineConfig(({ mode }) => ({
11
11
  resolve: {
12
12
  mainFields: ['module'],
13
13
  },
14
- plugins: [analog(__ANALOG_SFC_CONFIG__)],
14
+ plugins: [analog()],
15
15
  test: {
16
16
  globals: true,
17
17
  environment: 'jsdom',
@@ -1,4 +1,4 @@
1
- # Analog App
1
+ # __PROJECT_TITLE__
2
2
 
3
3
  This project was generated with [Analog](https://analogjs.org), the fullstack meta-framework for Angular.
4
4
 
@@ -30,6 +30,8 @@ yarn-error.log
30
30
 
31
31
  # Miscellaneous
32
32
  /.angular/cache
33
+ /.nx/cache
34
+ /.nx/workspace-data
33
35
  .sass-cache/
34
36
  /connect.lock
35
37
  /coverage
@@ -5,7 +5,7 @@
5
5
  "projects": {
6
6
  "my-app": {
7
7
  "projectType": "application",
8
- "root": "",
8
+ "root": ".",
9
9
  "sourceRoot": "src",
10
10
  "prefix": "app",
11
11
  "architect": {
@@ -2,7 +2,7 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
- <title>MyApp</title>
5
+ <title>__PROJECT_TITLE__</title>
6
6
  <base href="/" />
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1" />
8
8
  <link rel="icon" type="image/x-icon" href="/favicon.ico" />
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "my-app",
3
+ "version": "0.0.0",
4
+ "type": "module",
5
+ "engines": {
6
+ "node": ">=18.19.1"
7
+ },
8
+ "scripts": {
9
+ "ng": "ng",
10
+ "dev": "ng serve",
11
+ "start": "ng serve",
12
+ "build": "ng build",
13
+ "watch": "ng build --watch --configuration development",
14
+ "test": "ng test"
15
+ },
16
+ "private": true,
17
+ "dependencies": {
18
+ "@analogjs/content": "^2.0.0-beta.1",
19
+ "@analogjs/router": "^2.0.0-beta.1",
20
+ "@angular/animations": "^19.0.0",
21
+ "@angular/common": "^19.0.0",
22
+ "@angular/compiler": "^19.0.0",
23
+ "@angular/core": "^19.0.0",
24
+ "@angular/forms": "^19.0.0",
25
+ "@angular/platform-browser": "^19.0.0",
26
+ "@angular/platform-browser-dynamic": "^19.0.0",
27
+ "@angular/platform-server": "^19.0.0",
28
+ "@angular/router": "^19.0.0",
29
+ "front-matter": "^4.0.2",
30
+ "marked": "^15.0.7",
31
+ "marked-gfm-heading-id": "^4.1.1",
32
+ "marked-highlight": "^2.2.1",
33
+ "marked-mangle": "^1.1.10",
34
+ "prismjs": "^1.29.0",
35
+ "rxjs": "~7.8.0",
36
+ "tslib": "^2.3.0",
37
+ "zone.js": "~0.15.0"
38
+ },
39
+ "devDependencies": {
40
+ "@analogjs/platform": "^2.0.0-beta.1",
41
+ "@analogjs/vite-plugin-angular": "^2.0.0-beta.1",
42
+ "@analogjs/vitest-angular": "^2.0.0-beta.1",
43
+ "@angular-devkit/build-angular": "^19.0.0",
44
+ "@angular/build": "^19.0.0",
45
+ "@angular/cli": "^19.0.0",
46
+ "@angular/compiler-cli": "^19.0.0",
47
+ "jsdom": "^22.0.0",
48
+ "typescript": "~5.8.0",
49
+ "vite": "^6.0.0",
50
+ "vite-tsconfig-paths": "^4.2.0",
51
+ "vitest": "^3.0.0"
52
+ }
53
+ }
@@ -3,7 +3,6 @@ import { RouterOutlet } from '@angular/router';
3
3
 
4
4
  @Component({
5
5
  selector: 'app-root',
6
- standalone: true,
7
6
  imports: [RouterOutlet],
8
7
  template: `<router-outlet />`,
9
8
  styles: `
@@ -1,15 +1,10 @@
1
1
  import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';
2
- import {
3
- provideServerRendering,
4
- ɵSERVER_CONTEXT as SERVER_CONTEXT,
5
- } from '@angular/platform-server';
2
+ import { provideServerRendering } from '@angular/platform-server';
3
+
6
4
  import { appConfig } from './app.config';
7
5
 
8
6
  const serverConfig: ApplicationConfig = {
9
- providers: [
10
- provideServerRendering(),
11
- { provide: SERVER_CONTEXT, useValue: 'ssr-analog' },
12
- ],
7
+ providers: [provideServerRendering()],
13
8
  };
14
9
 
15
10
  export const config = mergeApplicationConfig(appConfig, serverConfig);
@@ -0,0 +1,20 @@
1
+ import {
2
+ provideHttpClient,
3
+ withFetch,
4
+ withInterceptors,
5
+ } from '@angular/common/http';
6
+ import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
7
+ import { provideClientHydration } from '@angular/platform-browser';
8
+ import { provideFileRouter, requestContextInterceptor } from '@analogjs/router';
9
+
10
+ export const appConfig: ApplicationConfig = {
11
+ providers: [
12
+ provideZoneChangeDetection({ eventCoalescing: true }),
13
+ provideFileRouter(),
14
+ provideHttpClient(
15
+ withFetch(),
16
+ withInterceptors([requestContextInterceptor])
17
+ ),
18
+ provideClientHydration(),
19
+ ],
20
+ };
@@ -0,0 +1,54 @@
1
+ import { Component, signal } from '@angular/core';
2
+
3
+ @Component({
4
+ selector: 'app-home',
5
+ template: `
6
+ <div>
7
+ <a href="https://analogjs.org/" target="_blank">
8
+ <img alt="Analog Logo" class="logo analog" src="/analog.svg" />
9
+ </a>
10
+ </div>
11
+
12
+ <h2>Analog</h2>
13
+
14
+ <h3>The fullstack meta-framework for Angular!</h3>
15
+
16
+ <div class="card">
17
+ <button type="button" (click)="increment()">Count {{ count() }}</button>
18
+ </div>
19
+
20
+ <p class="read-the-docs">
21
+ <a href="https://analogjs.org" target="_blank">Docs</a> |
22
+ <a href="https://github.com/analogjs/analog" target="_blank">GitHub</a> |
23
+ <a href="https://github.com/sponsors/brandonroberts" target="_blank">
24
+ Sponsor
25
+ </a>
26
+ </p>
27
+ `,
28
+ styles: `
29
+ .logo {
30
+ will-change: filter;
31
+ }
32
+
33
+ .logo:hover {
34
+ filter: drop-shadow(0 0 2em #646cffaa);
35
+ }
36
+
37
+ .read-the-docs > * {
38
+ color: #fff;
39
+ }
40
+
41
+ @media (prefers-color-scheme: light) {
42
+ .read-the-docs > * {
43
+ color: #213547;
44
+ }
45
+ }
46
+ `,
47
+ })
48
+ export default class HomeComponent {
49
+ count = signal(0);
50
+
51
+ increment() {
52
+ this.count.update((count) => count + 1);
53
+ }
54
+ }
@@ -0,0 +1,8 @@
1
+ import 'zone.js/node';
2
+ import '@angular/platform-server/init';
3
+ import { render } from '@analogjs/router/server';
4
+
5
+ __APP_COMPONENT_IMPORT__
6
+ import { config } from './app/app.config.server';
7
+
8
+ export default render(__APP_COMPONENT__, config);
@@ -1,7 +1,7 @@
1
1
  import 'zone.js';
2
2
  import { bootstrapApplication } from '@angular/platform-browser';
3
3
 
4
- import { AppComponent } from './app/app.component';
4
+ __APP_COMPONENT_IMPORT__
5
5
  import { appConfig } from './app/app.config';
6
6
 
7
- bootstrapApplication(AppComponent, appConfig);
7
+ bootstrapApplication(__APP_COMPONENT__, appConfig);
@@ -21,6 +21,7 @@ a {
21
21
  color: #646cff;
22
22
  text-decoration: inherit;
23
23
  }
24
+
24
25
  a:hover {
25
26
  color: #535bf2;
26
27
  }
@@ -49,9 +50,11 @@ button {
49
50
  cursor: pointer;
50
51
  transition: border-color 0.25s;
51
52
  }
53
+
52
54
  button:hover {
53
55
  border-color: #646cff;
54
56
  }
57
+
55
58
  button:focus,
56
59
  button:focus-visible {
57
60
  outline: 4px auto -webkit-focus-ring-color;
@@ -66,9 +69,11 @@ button:focus-visible {
66
69
  color: #213547;
67
70
  background-color: #ffffff;
68
71
  }
72
+
69
73
  a:hover {
70
74
  color: #747bff;
71
75
  }
76
+
72
77
  button {
73
78
  background-color: #f9f9f9;
74
79
  }
@@ -2,14 +2,13 @@
2
2
  {
3
3
  "extends": "./tsconfig.json",
4
4
  "compilerOptions": {
5
- "composite": false,
6
5
  "outDir": "./out-tsc/app",
7
6
  "types": []
8
7
  },
9
8
  "files": ["src/main.ts", "src/main.server.ts"],
10
9
  "include": [
11
10
  "src/**/*.d.ts",
12
- "src/app/routes/**/*.ts",
13
- "src/app/pages/**/*.page.ts"
11
+ "src/app/pages/**/*.page.ts",
12
+ "src/server/middleware/**/*.ts"
14
13
  ]
15
14
  }
@@ -14,7 +14,8 @@
14
14
  "declaration": false,
15
15
  "downlevelIteration": true,
16
16
  "experimentalDecorators": true,
17
- "moduleResolution": "node",
17
+ "moduleResolution": "bundler",
18
+ "isolatedModules": true,
18
19
  "importHelpers": true,
19
20
  "target": "ES2022",
20
21
  "module": "ES2022",
@@ -27,9 +28,5 @@
27
28
  "strictInjectionParameters": true,
28
29
  "strictInputAccessModifiers": true,
29
30
  "strictTemplates": true
30
- },
31
- "references": [
32
- { "path": "tsconfig.app.json" },
33
- { "path": "tsconfig.spec.json" }
34
- ]
31
+ }
35
32
  }