create-analog 2.0.0-alpha.9 → 2.0.0-beta.2

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 (87) hide show
  1. package/files/styles.css +3 -81
  2. package/index.js +14 -63
  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-blog/src/app/{app-root.spec.ts → app.spec.ts} +1 -1
  27. package/template-blog/src/app/{app.component.ts → app.ts} +1 -2
  28. package/template-blog/src/app/pages/blog/[slug].page.ts +1 -2
  29. package/template-blog/src/app/pages/blog/index.page.ts +1 -2
  30. package/template-blog/src/main.server.ts +2 -2
  31. package/template-blog/src/main.ts +2 -2
  32. package/template-blog/src/test-setup.ts +6 -5
  33. package/template-blog/tsconfig.json +4 -2
  34. package/template-blog/tsconfig.spec.json +1 -1
  35. package/template-blog/vite.config.ts +3 -3
  36. package/template-latest/.vscode/extensions.json +1 -1
  37. package/template-latest/package.json +25 -25
  38. package/template-latest/src/app/app.config.ts +8 -3
  39. package/template-latest/src/app/{app-root.spec.ts → app.spec.ts} +1 -1
  40. package/template-latest/src/app/app.ts +17 -0
  41. package/template-latest/src/app/pages/analog-welcome.ts +264 -0
  42. package/template-latest/src/app/pages/index.page.ts +6 -49
  43. package/template-latest/src/main.server.ts +2 -2
  44. package/template-latest/src/main.ts +2 -2
  45. package/template-latest/src/styles.css +3 -79
  46. package/template-latest/src/test-setup.ts +6 -5
  47. package/template-latest/tsconfig.json +4 -2
  48. package/template-latest/tsconfig.spec.json +1 -1
  49. package/template-latest/vite.config.ts +4 -2
  50. package/template-minimal/.vscode/extensions.json +1 -1
  51. package/template-minimal/package.json +25 -25
  52. package/template-minimal/src/app/app.config.ts +8 -3
  53. package/template-minimal/src/app/{app.component.ts → app.ts} +1 -2
  54. package/template-minimal/src/app/pages/index.page.ts +1 -2
  55. package/template-minimal/src/main.server.ts +2 -2
  56. package/template-minimal/src/main.ts +2 -2
  57. package/template-minimal/vite.config.ts +3 -3
  58. package/files/analog-env.d.ts +0 -13
  59. package/template-angular-v16/package.json +0 -54
  60. package/template-angular-v16/src/app/app.component.spec.ts +0 -17
  61. package/template-angular-v16/src/app/app.component.ts +0 -20
  62. package/template-angular-v16/src/app/app.config.ts +0 -12
  63. package/template-angular-v16/src/app/pages/index.page.ts +0 -49
  64. package/template-angular-v16/src/main.server.ts +0 -26
  65. package/template-angular-v18/src/app/app-root.ag +0 -16
  66. package/template-angular-v18/src/app/app-root.spec.ts +0 -20
  67. package/template-angular-v18/src/app/pages/index.page.ag +0 -53
  68. package/template-blog/src/app/app-root.ag +0 -25
  69. package/template-blog/src/app/pages/blog/[slug].page.ag +0 -24
  70. package/template-blog/src/app/pages/blog/index.page.ag +0 -32
  71. package/template-latest/src/app/app-root.ag +0 -16
  72. package/template-latest/src/app/app.component.spec.ts +0 -20
  73. package/template-latest/src/app/pages/index.page.ag +0 -53
  74. package/template-minimal/src/app/app-root.ag +0 -7
  75. package/template-minimal/src/app/pages/index.page.ag +0 -32
  76. /package/{template-angular-v16 → template-angular-v19}/.editorconfig +0 -0
  77. /package/{template-angular-v16 → template-angular-v19}/.vscode/extensions.json +0 -0
  78. /package/{template-angular-v16 → template-angular-v19}/.vscode/launch.json +0 -0
  79. /package/{template-angular-v16 → template-angular-v19}/.vscode/tasks.json +0 -0
  80. /package/{template-angular-v16/src/assets → template-angular-v19/public}/.gitkeep +0 -0
  81. /package/{template-angular-v16/src/assets → template-angular-v19/public}/analog.svg +0 -0
  82. /package/{template-angular-v16 → template-angular-v19/public}/favicon.ico +0 -0
  83. /package/{template-angular-v16/src/assets → template-angular-v19/public}/vite.svg +0 -0
  84. /package/{template-blog → template-angular-v19}/src/app/app.component.spec.ts +0 -0
  85. /package/{template-angular-v16/src/server/routes → template-angular-v19/src/server/routes/api}/v1/hello.ts +0 -0
  86. /package/{template-angular-v16/src/test.ts → template-angular-v19/src/test-setup.ts} +0 -0
  87. /package/{template-angular-v16 → template-angular-v19}/src/vite-env.d.ts +0 -0
package/files/styles.css CHANGED
@@ -1,86 +1,8 @@
1
1
  @import 'tailwindcss';
2
2
 
3
3
  /* You can add global styles to this file, and also import other style files */
4
- :root {
5
- font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
6
- font-size: 16px;
7
- line-height: 24px;
8
- font-weight: 400;
9
-
10
- color-scheme: light dark;
11
- color: rgba(255, 255, 255, 0.87);
12
- background-color: #242424;
13
-
14
- font-synthesis: none;
15
- text-rendering: optimizeLegibility;
16
- -webkit-font-smoothing: antialiased;
17
- -moz-osx-font-smoothing: grayscale;
18
- -webkit-text-size-adjust: 100%;
19
- }
20
-
21
- a {
22
- font-weight: 500;
23
- color: #646cff;
24
- text-decoration: inherit;
25
- }
26
-
27
- a:hover {
28
- color: #535bf2;
29
- }
30
-
4
+ html,
31
5
  body {
32
- margin: 0;
33
- display: flex;
34
- place-items: center;
35
- min-width: 320px;
36
- min-height: 100vh;
37
- }
38
-
39
- h1 {
40
- font-size: 3.2em;
41
- line-height: 1.1;
42
- }
43
-
44
- button {
45
- border-radius: 8px;
46
- border: 1px solid transparent;
47
- padding: 0.6em 1.2em;
48
- font-size: 1em;
49
- font-weight: 500;
50
- font-family: inherit;
51
- background-color: #1a1a1a;
52
- cursor: pointer;
53
- transition: border-color 0.25s;
54
- }
55
-
56
- button:hover {
57
- border-color: #646cff;
58
- }
59
-
60
- button:focus,
61
- button:focus-visible {
62
- outline: 4px auto -webkit-focus-ring-color;
63
- }
64
-
65
- .card {
66
- padding: 2em;
67
- }
68
-
69
- .logo {
70
- @apply box-content;
71
- }
72
-
73
- @media (prefers-color-scheme: light) {
74
- :root {
75
- color: #213547;
76
- background-color: #ffffff;
77
- }
78
-
79
- a:hover {
80
- color: #747bff;
81
- }
82
-
83
- button {
84
- background-color: #f9f9f9;
85
- }
6
+ display: block;
7
+ height: 100%;
86
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
 
@@ -214,6 +206,13 @@ async function init() {
214
206
  addTailwindDirectives(write, filesDir);
215
207
  }
216
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
+
217
216
  const pkgInfo = pkgFromUserAgent(process.env.npm_config_user_agent);
218
217
  const pkgManager = pkgInfo ? pkgInfo.name : 'npm';
219
218
  const pkg = JSON.parse(
@@ -241,7 +240,6 @@ async function init() {
241
240
  write('package.json', JSON.stringify(pkg, null, 2));
242
241
 
243
242
  setProjectTitle(root, getProjectName());
244
- setComponentFormat(root, filesDir, write, template, useAnalogSFC);
245
243
 
246
244
  console.log(`\nInitializing git repository:`);
247
245
  execSync(`git init ${targetDir} && cd ${targetDir} && git add .`);
@@ -376,11 +374,11 @@ function addTailwindDependencies(pkg) {
376
374
 
377
375
  function addYarnDevDependencies(pkg, template) {
378
376
  // v18
379
- if (template === 'latest' || template === 'blog') {
380
- pkg.devDependencies['@nx/angular'] = '^19.1.0';
381
- pkg.devDependencies['@nx/devkit'] = '^19.1.0';
382
- pkg.devDependencies['@nx/vite'] = '^19.1.0';
383
- 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';
384
382
  } else if (template === 'angular-v17') {
385
383
  pkg.devDependencies['@angular-devkit/build-angular'] = '^17.2.0';
386
384
  }
@@ -417,47 +415,6 @@ function setProjectTitle(root, title) {
417
415
  });
418
416
  }
419
417
 
420
- function setComponentFormat(root, filesDir, write, template, useAnalogSFC) {
421
- const getSFCConfig = () => {
422
- const sfcConfigOption =
423
- 'vite: { experimental: { supportAnalogFormat: true } }';
424
-
425
- return template === 'latest'
426
- ? `{ ${sfcConfigOption} }`
427
- : `\n ${sfcConfigOption},`;
428
- };
429
-
430
- replacePlaceholders(root, 'vite.config.ts', {
431
- __ANALOG_SFC_CONFIG__: useAnalogSFC ? getSFCConfig() : '',
432
- });
433
- replacePlaceholders(root, ['src/main.ts', 'src/main.server.ts'], {
434
- __APP_COMPONENT__: useAnalogSFC ? 'App' : 'AppComponent',
435
- __APP_COMPONENT_IMPORT__: useAnalogSFC
436
- ? "import App from './app/app-root.ag';"
437
- : "import { AppComponent } from './app/app.component';",
438
- });
439
-
440
- const cmpForDelete = useAnalogSFC ? 'app.component' : 'app-root';
441
- const deleteExt = useAnalogSFC ? 'ts' : 'ag';
442
- deleteFiles(root, [
443
- useAnalogSFC ? `src/app/${cmpForDelete}.ts` : `src/app/${cmpForDelete}.ag`,
444
- template === 'blog'
445
- ? [
446
- `src/app/pages/blog/index.page.${deleteExt}`,
447
- `src/app/pages/blog/[slug].page.${deleteExt}`,
448
- ]
449
- : `src/app/pages/index.page.${deleteExt}`,
450
- template !== 'minimal' && `src/app/${cmpForDelete}.spec.ts`,
451
- ]);
452
-
453
- if (useAnalogSFC) {
454
- write(
455
- 'src/analog-env.d.ts',
456
- fs.readFileSync(path.join(filesDir, 'analog-env.d.ts'), 'utf-8'),
457
- );
458
- }
459
- }
460
-
461
418
  function replacePlaceholders(root, files, config) {
462
419
  for (const file of toFlatArray(files)) {
463
420
  const filePath = path.join(root, file);
@@ -471,12 +428,6 @@ function replacePlaceholders(root, files, config) {
471
428
  }
472
429
  }
473
430
 
474
- function deleteFiles(root, files) {
475
- for (const file of toFlatArray(files)) {
476
- fs.unlinkSync(path.join(root, file));
477
- }
478
- }
479
-
480
431
  function toFlatArray(value) {
481
432
  return (Array.isArray(value) ? value : [value]).filter(Boolean).flat();
482
433
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-analog",
3
- "version": "2.0.0-alpha.9",
3
+ "version": "2.0.0-beta.2",
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.9",
19
- "@analogjs/router": "^2.0.0-alpha.9",
18
+ "@analogjs/content": "^2.0.0-beta.2",
19
+ "@analogjs/router": "^2.0.0-beta.2",
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.9",
42
- "@analogjs/vite-plugin-angular": "^2.0.0-alpha.9",
43
- "@analogjs/vitest-angular": "^2.0.0-alpha.9",
41
+ "@analogjs/platform": "^2.0.0-beta.2",
42
+ "@analogjs/vite-plugin-angular": "^2.0.0-beta.2",
43
+ "@analogjs/vitest-angular": "^2.0.0-beta.2",
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.9",
19
- "@analogjs/router": "^2.0.0-alpha.9",
18
+ "@analogjs/content": "^2.0.0-beta.2",
19
+ "@analogjs/router": "^2.0.0-beta.2",
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.9",
42
- "@analogjs/vite-plugin-angular": "^2.0.0-alpha.9",
43
- "@analogjs/vitest-angular": "^2.0.0-alpha.9",
41
+ "@analogjs/platform": "^2.0.0-beta.2",
42
+ "@analogjs/vite-plugin-angular": "^2.0.0-beta.2",
43
+ "@analogjs/vitest-angular": "^2.0.0-beta.2",
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.2",
19
+ "@analogjs/router": "^2.0.0-beta.2",
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.2",
41
+ "@analogjs/vite-plugin-angular": "^2.0.0-beta.2",
42
+ "@analogjs/vitest-angular": "^2.0.0-beta.2",
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
  }
@@ -2,10 +2,10 @@
2
2
  {
3
3
  "extends": "./tsconfig.json",
4
4
  "compilerOptions": {
5
- "composite": false,
6
5
  "outDir": "./out-tsc/spec",
6
+ "target": "es2016",
7
7
  "types": ["node", "vitest/globals"]
8
8
  },
9
- "files": ["src/test.ts"],
10
- "include": ["src/**/*.spec.ts", "src/**/*.ts"]
9
+ "files": ["src/test-setup.ts"],
10
+ "include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
11
11
  }
@@ -1,22 +1,23 @@
1
1
  /// <reference types="vitest" />
2
2
 
3
3
  import { defineConfig } from 'vite';
4
- import analog from '@analogjs/platform';
4
+ import analog from '@analogjs/platform';__TAILWIND_IMPORT__
5
5
 
6
6
  // https://vitejs.dev/config/
7
7
  export default defineConfig(({ mode }) => ({
8
- publicDir: 'src/assets',
9
8
  build: {
10
9
  target: ['es2020'],
11
10
  },
12
11
  resolve: {
13
12
  mainFields: ['module'],
14
13
  },
15
- plugins: [analog()],
14
+ plugins: [
15
+ analog(),__TAILWIND_PLUGIN__
16
+ ],
16
17
  test: {
17
18
  globals: true,
18
19
  environment: 'jsdom',
19
- setupFiles: ['src/test.ts'],
20
+ setupFiles: ['src/test-setup.ts'],
20
21
  include: ['**/*.spec.ts'],
21
22
  reporters: ['default'],
22
23
  },
@@ -1,4 +1,4 @@
1
1
  {
2
2
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846
3
- "recommendations": ["angular.ng-template", "analogjs.vscode-analog"]
3
+ "recommendations": ["angular.ng-template", "analogjs.vscode-analog", "vitest.explorer"]
4
4
  }