@analogjs/platform 0.1.0-beta.2 → 0.1.0-beta.21

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 (84) hide show
  1. package/package.json +4 -2
  2. package/src/lib/build-server.d.ts +3 -0
  3. package/src/lib/build-server.js +23 -0
  4. package/src/lib/content-plugin.d.ts +12 -0
  5. package/src/lib/content-plugin.js +58 -0
  6. package/src/lib/nx-plugin/README.md +23 -0
  7. package/src/lib/nx-plugin/generators.json +19 -0
  8. package/src/lib/nx-plugin/package.json +13 -0
  9. package/src/lib/nx-plugin/src/generators/app/compat.d.ts +2 -0
  10. package/src/lib/nx-plugin/src/generators/app/compat.js +6 -0
  11. package/src/lib/nx-plugin/src/generators/app/compat.js.map +1 -0
  12. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/.eslintrc.json__template__ +36 -0
  13. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/index.html__template__ +15 -0
  14. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/app/app.component.spec.ts__template__ +17 -0
  15. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/app/app.component.ts__template__ +20 -0
  16. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/app/pages/index.page.ts__template__ +62 -0
  17. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/favicon.ico__template__ +0 -0
  18. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/main.providers.ts__template__ +5 -0
  19. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/main.server.ts__template__ +23 -0
  20. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/main.ts__template__ +10 -0
  21. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/public/assets/.gitkeep__template__ +0 -0
  22. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/public/assets/analog.svg__template__ +1 -0
  23. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/public/assets/vite.svg__template__ +1 -0
  24. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/server/routes/v1/hello.ts__template__ +3 -0
  25. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/styles.css__template__ +75 -0
  26. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/test-setup.ts__template__ +12 -0
  27. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/src/vite-env.d.ts__template__ +1 -0
  28. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/tsconfig.app.json__template__ +16 -0
  29. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/tsconfig.editor.json__template__ +7 -0
  30. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/tsconfig.json__template__ +32 -0
  31. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/tsconfig.spec.json__template__ +15 -0
  32. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v15/vite.config.ts__template__ +64 -0
  33. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/.eslintrc.json__template__ +36 -0
  34. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/index.html__template__ +15 -0
  35. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/app/app.component.spec.ts__template__ +17 -0
  36. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/app/app.component.ts__template__ +20 -0
  37. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/app/pages/index.page.ts__template__ +62 -0
  38. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/favicon.ico__template__ +0 -0
  39. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/main.providers.ts__template__ +5 -0
  40. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/main.server.ts__template__ +23 -0
  41. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/main.ts__template__ +10 -0
  42. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/public/assets/.gitkeep__template__ +0 -0
  43. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/public/assets/analog.svg__template__ +1 -0
  44. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/public/assets/vite.svg__template__ +1 -0
  45. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/server/routes/v1/hello.ts__template__ +3 -0
  46. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/styles.css__template__ +75 -0
  47. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/test-setup.ts__template__ +12 -0
  48. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/src/vite-env.d.ts__template__ +1 -0
  49. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/tsconfig.app.json__template__ +16 -0
  50. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/tsconfig.editor.json__template__ +7 -0
  51. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/tsconfig.json__template__ +32 -0
  52. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/tsconfig.spec.json__template__ +15 -0
  53. package/src/lib/nx-plugin/src/generators/app/files/template-angular-v16/vite.config.ts__template__ +64 -0
  54. package/src/lib/nx-plugin/src/generators/app/files/versions.d.ts +26 -0
  55. package/src/lib/nx-plugin/src/generators/app/files/versions.js +36 -0
  56. package/src/lib/nx-plugin/src/generators/app/files/versions.js.map +1 -0
  57. package/src/lib/nx-plugin/src/generators/app/generator.d.ts +10 -0
  58. package/src/lib/nx-plugin/src/generators/app/generator.js +83 -0
  59. package/src/lib/nx-plugin/src/generators/app/generator.js.map +1 -0
  60. package/src/lib/nx-plugin/src/generators/app/lib/add-analog-project-config.d.ts +2 -0
  61. package/src/lib/nx-plugin/src/generators/app/lib/add-analog-project-config.js +80 -0
  62. package/src/lib/nx-plugin/src/generators/app/lib/add-analog-project-config.js.map +1 -0
  63. package/src/lib/nx-plugin/src/generators/app/schema.d.ts +6 -0
  64. package/src/lib/nx-plugin/src/generators/app/schema.json +34 -0
  65. package/src/lib/nx-plugin/src/index.d.ts +0 -0
  66. package/src/lib/nx-plugin/src/index.js +1 -0
  67. package/src/lib/nx-plugin/src/index.js.map +1 -0
  68. package/src/lib/nx-plugin/src/utils/version-utils.d.ts +2 -0
  69. package/src/lib/nx-plugin/src/utils/version-utils.js +18 -0
  70. package/src/lib/nx-plugin/src/utils/version-utils.js.map +1 -0
  71. package/src/lib/options.d.ts +19 -0
  72. package/src/lib/platform-plugin.js +25 -4
  73. package/src/lib/router-plugin.d.ts +1 -1
  74. package/src/lib/router-plugin.js +17 -2
  75. package/src/lib/runtime/api-middleware.js +16 -0
  76. package/src/lib/runtime/renderer.js +19 -0
  77. package/src/lib/ssr/build.d.ts +3 -0
  78. package/src/lib/ssr/build.js +18 -0
  79. package/src/lib/ssr/dev-server-plugin.d.ts +7 -0
  80. package/src/lib/ssr/dev-server-plugin.js +90 -0
  81. package/src/lib/ssr/ssr-build-plugin.d.ts +2 -0
  82. package/src/lib/ssr/ssr-build-plugin.js +35 -0
  83. package/src/lib/vite-nitro-plugin.d.ts +2 -1
  84. package/src/lib/vite-nitro-plugin.js +76 -25
@@ -3,53 +3,104 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.viteNitroPlugin = void 0;
4
4
  const load_esm_1 = require("@angular-devkit/build-angular/src/utils/load-esm");
5
5
  const h3_1 = require("h3");
6
- function viteNitroPlugin(opts) {
7
- const nitroConfig = {
8
- rootDir: 'src',
9
- srcDir: 'src/server',
10
- scanDirs: ['src/server'],
6
+ const build_server_1 = require("./build-server");
7
+ const build_1 = require("./ssr/build");
8
+ const vite_1 = require("vite");
9
+ function viteNitroPlugin(options, nitroOptions) {
10
+ const rootDir = nitroOptions?.rootDir || '.';
11
+ const isTest = process.env['NODE_ENV'] === 'test' || !!process.env['VITEST'];
12
+ const apiPrefix = `/${nitroOptions?.runtimeConfig?.['apiPrefix'] ?? 'api'}`;
13
+ let nitroConfig = {
14
+ rootDir,
15
+ logLevel: nitroOptions?.logLevel || 0,
16
+ srcDir: (0, vite_1.normalizePath)(`${rootDir}/src`),
17
+ scanDirs: [(0, vite_1.normalizePath)(`${rootDir}/src/server`)],
11
18
  output: {
12
- dir: '../../dist/server',
13
- ...opts?.output,
19
+ dir: '../dist/analog',
20
+ publicDir: '../dist/analog/public',
21
+ ...nitroOptions?.output,
14
22
  },
15
- buildDir: '../dist/.nitro',
16
- ...opts,
23
+ buildDir: './dist/.nitro',
24
+ typescript: {
25
+ generateTsConfig: false,
26
+ },
27
+ runtimeConfig: { ...nitroOptions?.runtimeConfig },
17
28
  };
18
29
  let isBuild = false;
19
30
  let isServe = false;
20
- let isTest = process.env['NODE_ENV'] === 'test' || !!process.env['VITEST'];
31
+ let ssrBuild = false;
32
+ let config;
21
33
  return {
22
- name: 'vite-nitro-plugin',
23
- config(_config, { command }) {
34
+ name: 'analogjs-vite-nitro-plugin',
35
+ async config(_config, { command }) {
24
36
  isServe = command === 'serve';
25
37
  isBuild = command === 'build';
38
+ ssrBuild = _config.build?.ssr === true;
39
+ config = _config;
40
+ if (isBuild && options?.prerender) {
41
+ nitroConfig.prerender = {};
42
+ nitroConfig.prerender.crawlLinks = options?.prerender?.discover;
43
+ const prerenderRoutes = options?.prerender?.routes;
44
+ if (Array.isArray(prerenderRoutes)) {
45
+ nitroConfig.prerender.routes = prerenderRoutes;
46
+ }
47
+ else if (typeof prerenderRoutes === 'function') {
48
+ nitroConfig.prerender.routes = await prerenderRoutes();
49
+ }
50
+ }
51
+ if (isBuild && ssrBuild) {
52
+ nitroConfig = {
53
+ ...nitroConfig,
54
+ publicAssets: [{ dir: `../dist/client` }],
55
+ serverAssets: [{ baseName: 'public', dir: `./dist/client` }],
56
+ externals: {
57
+ inline: ['zone.js/node'],
58
+ external: ['rxjs', 'node-fetch-native/dist/polyfill', 'destr'],
59
+ },
60
+ moduleSideEffects: ['zone.js/bundles/zone-node.umd.js'],
61
+ renderer: (0, vite_1.normalizePath)(`${__dirname}/runtime/renderer`),
62
+ handlers: [
63
+ {
64
+ handler: (0, vite_1.normalizePath)(`${__dirname}/runtime/api-middleware`),
65
+ middleware: true,
66
+ },
67
+ ],
68
+ };
69
+ }
70
+ nitroConfig = {
71
+ ...nitroConfig,
72
+ ...nitroOptions,
73
+ };
26
74
  },
27
75
  async configureServer(viteServer) {
28
76
  if (isServe && !isTest) {
29
77
  const { createNitro, createDevServer, build, prepare } = await (0, load_esm_1.loadEsmModule)('nitropack');
30
- const nitro = await createNitro({ ...nitroConfig, dev: true });
78
+ const nitro = await createNitro({
79
+ dev: true,
80
+ ...nitroConfig,
81
+ });
31
82
  const server = createDevServer(nitro);
32
83
  await prepare(nitro);
33
84
  await build(nitro);
34
- viteServer.middlewares.use('/api', (0, h3_1.toNodeListener)(server.app));
35
- console.log(`\n\nThe '@analogjs/platform' successfully started.\nThe server endpoints are accessible under the "/api"`);
85
+ viteServer.middlewares.use(apiPrefix, (0, h3_1.toNodeListener)(server.app));
86
+ console.log(`\n\nThe '@analogjs/platform' successfully started.\nThe server endpoints are accessible under the "${apiPrefix}" path.`);
36
87
  }
37
88
  },
38
89
  async closeBundle() {
90
+ if (ssrBuild) {
91
+ return;
92
+ }
39
93
  if (isBuild) {
40
- const { createNitro, build, prepare } = await (0, load_esm_1.loadEsmModule)('nitropack');
41
- const nitro = await createNitro({
42
- ...nitroConfig,
43
- baseURL: '/api',
44
- dev: false,
45
- });
46
- await prepare(nitro);
47
- await build(nitro);
48
- await nitro.close();
94
+ if (options?.ssr) {
95
+ console.log('Building SSR application...');
96
+ await (0, build_1.buildSSRApp)(config, options);
97
+ }
98
+ console.log('Building Server...');
99
+ await (0, build_server_1.buildServer)(options, nitroConfig);
49
100
  console.log(`\n\nThe '@analogjs/platform' server has been successfully built.`);
50
101
  }
51
102
  },
52
103
  };
53
104
  }
54
105
  exports.viteNitroPlugin = viteNitroPlugin;
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1uaXRyby1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3ZpdGUtbml0cm8tcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtFQUFpRjtBQUVqRiwyQkFBb0M7QUFHcEMsU0FBZ0IsZUFBZSxDQUFDLElBQWtCO0lBQ2hELE1BQU0sV0FBVyxHQUFnQjtRQUMvQixPQUFPLEVBQUUsS0FBSztRQUNkLE1BQU0sRUFBRSxZQUFZO1FBQ3BCLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQztRQUN4QixNQUFNLEVBQUU7WUFDTixHQUFHLEVBQUUsbUJBQW1CO1lBQ3hCLEdBQUcsSUFBSSxFQUFFLE1BQU07U0FDaEI7UUFDRCxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLEdBQUcsSUFBSTtLQUNSLENBQUM7SUFDRixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDcEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNFLE9BQU87UUFDTCxJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUU7WUFDekIsT0FBTyxHQUFHLE9BQU8sS0FBSyxPQUFPLENBQUM7WUFDOUIsT0FBTyxHQUFHLE9BQU8sS0FBSyxPQUFPLENBQUM7UUFDaEMsQ0FBQztRQUNELEtBQUssQ0FBQyxlQUFlLENBQUMsVUFBeUI7WUFDN0MsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLE1BQU0sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FDcEQsTUFBTSxJQUFBLHdCQUFhLEVBQTZCLFdBQVcsQ0FBQyxDQUFDO2dCQUUvRCxNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUEsbUJBQWMsRUFBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FDVCwwR0FBMEcsQ0FDM0csQ0FBQzthQUNIO1FBQ0gsQ0FBQztRQUVELEtBQUssQ0FBQyxXQUFXO1lBQ2YsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFBLHdCQUFhLEVBRXpELFdBQVcsQ0FBQyxDQUFDO2dCQUVmLE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDO29CQUM5QixHQUFHLFdBQVc7b0JBQ2QsT0FBTyxFQUFFLE1BQU07b0JBQ2YsR0FBRyxFQUFFLEtBQUs7aUJBQ1gsQ0FBQyxDQUFDO2dCQUNILE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkIsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsa0VBQWtFLENBQ25FLENBQUM7YUFDSDtRQUNILENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQXpERCwwQ0F5REMifQ==
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1uaXRyby1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3ZpdGUtbml0cm8tcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtFQUFpRjtBQUVqRiwyQkFBb0M7QUFHcEMsaURBQTZDO0FBQzdDLHVDQUEwQztBQUMxQywrQkFBcUM7QUFFckMsU0FBZ0IsZUFBZSxDQUM3QixPQUFpQixFQUNqQixZQUEwQjtJQUUxQixNQUFNLE9BQU8sR0FBRyxZQUFZLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3RSxNQUFNLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUU1RSxJQUFJLFdBQVcsR0FBZ0I7UUFDN0IsT0FBTztRQUNQLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUSxJQUFJLENBQUM7UUFDckMsTUFBTSxFQUFFLElBQUEsb0JBQWEsRUFBQyxHQUFHLE9BQU8sTUFBTSxDQUFDO1FBQ3ZDLFFBQVEsRUFBRSxDQUFDLElBQUEsb0JBQWEsRUFBQyxHQUFHLE9BQU8sYUFBYSxDQUFDLENBQUM7UUFDbEQsTUFBTSxFQUFFO1lBQ04sR0FBRyxFQUFFLGdCQUFnQjtZQUNyQixTQUFTLEVBQUUsdUJBQXVCO1lBQ2xDLEdBQUcsWUFBWSxFQUFFLE1BQU07U0FDeEI7UUFDRCxRQUFRLEVBQUUsZUFBZTtRQUN6QixVQUFVLEVBQUU7WUFDVixnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCO1FBQ0QsYUFBYSxFQUFFLEVBQUUsR0FBRyxZQUFZLEVBQUUsYUFBYSxFQUFFO0tB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