@analogjs/platform 0.1.0-beta.3 → 0.1.0-beta.5

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/platform",
3
- "version": "0.1.0-beta.3",
3
+ "version": "0.1.0-beta.5",
4
4
  "type": "commonjs",
5
5
  "description": "The fullstack meta-framework for Angular",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
@@ -0,0 +1,3 @@
1
+ import { NitroConfig } from 'nitropack';
2
+ import { Options } from './options';
3
+ export declare function buildServer(options?: Options, nitroConfig?: NitroConfig): Promise<void>;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildServer = void 0;
4
+ const load_esm_1 = require("@angular-devkit/build-angular/src/utils/load-esm");
5
+ async function buildServer(options, nitroConfig) {
6
+ const { createNitro, build, prepare, copyPublicAssets, prerender } = await (0, load_esm_1.loadEsmModule)('nitropack');
7
+ const nitro = await createNitro({
8
+ dev: false,
9
+ ...nitroConfig,
10
+ });
11
+ await prepare(nitro);
12
+ await copyPublicAssets(nitro);
13
+ await prerender(nitro);
14
+ if (!options?.prerender) {
15
+ await build(nitro);
16
+ }
17
+ await nitro.close();
18
+ }
19
+ exports.buildServer = buildServer;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0vc3JjL2xpYi9idWlsZC1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0VBQWlGO0FBSzFFLEtBQUssVUFBVSxXQUFXLENBQy9CLE9BQWlCLEVBQ2pCLFdBQXlCO0lBRXpCLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsR0FDaEUsTUFBTSxJQUFBLHdCQUFhLEVBQTZCLFdBQVcsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDO1FBQzlCLEdBQUcsRUFBRSxLQUFLO1FBQ1YsR0FBRyxXQUFXO0tBQ2YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV2QixJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtRQUN2QixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNwQjtJQUVELE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCLENBQUM7QUFwQkQsa0NBb0JDIn0=
@@ -1,6 +1,10 @@
1
1
  import type { PluginOptions } from '@analogjs/vite-plugin-angular';
2
2
  import { NitroConfig } from 'nitropack';
3
3
  export interface Options {
4
+ ssr?: boolean;
5
+ ssrBuildDir?: string;
6
+ prerender?: boolean;
7
+ entryServer?: string;
4
8
  vite?: PluginOptions;
5
9
  nitro?: NitroConfig;
6
10
  }
@@ -4,12 +4,18 @@ exports.platformPlugin = void 0;
4
4
  const vite_plugin_angular_1 = require("@analogjs/vite-plugin-angular");
5
5
  const vite_nitro_plugin_1 = require("./vite-nitro-plugin");
6
6
  const router_plugin_1 = require("./router-plugin");
7
- function platformPlugin(opts) {
7
+ const dev_server_plugin_1 = require("./ssr/dev-server-plugin");
8
+ const ssr_build_plugin_1 = require("./ssr/ssr-build-plugin");
9
+ function platformPlugin(opts = {}) {
8
10
  return [
9
- (0, vite_nitro_plugin_1.viteNitroPlugin)(opts?.nitro),
10
- ...(0, vite_plugin_angular_1.default)(opts?.vite),
11
+ (0, vite_nitro_plugin_1.viteNitroPlugin)(opts, opts?.nitro),
12
+ (opts.ssr ? (0, ssr_build_plugin_1.ssrBuildPlugin)() : false),
11
13
  ...(0, router_plugin_1.routerPlugin)(),
14
+ (opts.ssr
15
+ ? (0, dev_server_plugin_1.devServerPlugin)({ entryServer: opts.entryServer })
16
+ : false),
17
+ ...(0, vite_plugin_angular_1.default)(opts?.vite),
12
18
  ];
13
19
  }
14
20
  exports.platformPlugin = platformPlugin;
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0vc3JjL2xpYi9wbGF0Zm9ybS1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdUVBQW9EO0FBRXBELDJEQUFzRDtBQUN0RCxtREFBK0M7QUFFL0MsU0FBZ0IsY0FBYyxDQUFDLElBQWM7SUFDM0MsT0FBTztRQUNMLElBQUEsbUNBQWUsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQzVCLEdBQUcsSUFBQSw2QkFBTyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUM7UUFDdEIsR0FBRyxJQUFBLDRCQUFZLEdBQUU7S0FDbEIsQ0FBQztBQUNKLENBQUM7QUFORCx3Q0FNQyJ9
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0vc3JjL2xpYi9wbGF0Zm9ybS1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdUVBQW9EO0FBRXBELDJEQUFzRDtBQUN0RCxtREFBK0M7QUFDL0MsK0RBQTBEO0FBQzFELDZEQUF3RDtBQUV4RCxTQUFnQixjQUFjLENBQUMsT0FBZ0IsRUFBRTtJQUMvQyxPQUFPO1FBQ0wsSUFBQSxtQ0FBZSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQ2xDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBQSxpQ0FBYyxHQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBVztRQUMvQyxHQUFHLElBQUEsNEJBQVksR0FBRTtRQUNqQixDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ1AsQ0FBQyxDQUFDLElBQUEsbUNBQWUsRUFBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEQsQ0FBQyxDQUFDLEtBQUssQ0FBVztRQUNwQixHQUFHLElBQUEsNkJBQU8sRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0tBQ3ZCLENBQUM7QUFDSixDQUFDO0FBVkQsd0NBVUMifQ==
@@ -12,11 +12,15 @@ exports.routerPlugin = void 0;
12
12
  function routerPlugin() {
13
13
  return [
14
14
  {
15
- name: 'analogjs-router-config',
15
+ name: 'analogjs-router-plugin',
16
16
  config() {
17
17
  return {
18
+ ssr: {
19
+ noExternal: ['@analogjs/router', '@angular/**'],
20
+ },
18
21
  optimizeDeps: {
19
- exclude: ['@analogjs/router'],
22
+ include: ['rxjs'],
23
+ exclude: ['@analogjs/router', '@angular/platform-server'],
20
24
  },
21
25
  };
22
26
  },
@@ -48,4 +52,4 @@ function routerPlugin() {
48
52
  ];
49
53
  }
50
54
  exports.routerPlugin = routerPlugin;
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvcm91dGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsWUFBWTtJQUMxQixPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUUsd0JBQXdCO1lBQzlCLE1BQU07Z0JBQ0osT0FBTztvQkFDTCxZQUFZLEVBQUU7d0JBQ1osT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUM7cUJBQzlCO2lCQUNGLENBQUM7WUFDSixDQUFDO1NBQ0Y7UUFDRDtZQUNFLElBQUksRUFBRSxtQ0FBbUM7WUFDekMsZUFBZSxDQUFDLE1BQU07Z0JBQ3BCLFNBQVMsZ0JBQWdCLENBQUMsSUFBWTtvQkFDcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO3dCQUNqQyxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0NBQ25CLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRTtvQ0FDM0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQ0FFekMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTt3Q0FDNUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQ0FDM0MsQ0FBQyxDQUFDLENBQUM7aUNBQ0o7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQyxDQUFDLENBQUM7d0JBRUgsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7NEJBQ2IsSUFBSSxFQUFFLGFBQWE7eUJBQ3BCLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDO2dCQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNoRCxDQUFDO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQXhDRCxvQ0F3Q0MifQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvcm91dGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsWUFBWTtJQUMxQixPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUUsd0JBQXdCO1lBQzlCLE1BQU07Z0JBQ0osT0FBTztvQkFDTCxHQUFHLEVBQUU7d0JBQ0gsVUFBVSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDO3FCQUNoRDtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO3dCQUNqQixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSwwQkFBMEIsQ0FBQztxQkFDMUQ7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLG1DQUFtQztZQUN6QyxlQUFlLENBQUMsTUFBTTtnQkFDcEIsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFZO29CQUNwQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7d0JBQ2pDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQ0FDbkIsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO29DQUMzQyxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29DQUV6QyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dDQUM1QixNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29DQUMzQyxDQUFDLENBQUMsQ0FBQztpQ0FDSjs0QkFDSCxDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDLENBQUMsQ0FBQzt3QkFFSCxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzs0QkFDYixJQUFJLEVBQUUsYUFBYTt5QkFDcEIsQ0FBQyxDQUFDO3FCQUNKO2dCQUNILENBQUM7Z0JBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hELENBQUM7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBNUNELG9DQTRDQyJ9
@@ -0,0 +1,15 @@
1
+ /**
2
+ * This file is written in JavaScript
3
+ * because it is used by Nitro to build
4
+ * the renderer for SSR.
5
+ *
6
+ * The package is shipped as commonjs
7
+ * which won't be parsed by Nitro correctly.
8
+ */
9
+ import { eventHandler } from 'h3';
10
+
11
+ export default eventHandler(async (event) => {
12
+ if (event.req.url?.startsWith('/api')) {
13
+ return $fetch(`${event.req.url?.replace('/api', '')}`);
14
+ }
15
+ });
@@ -0,0 +1,19 @@
1
+ /**
2
+ * This file is written in JavaScript
3
+ * because it is used by Nitro to build
4
+ * the renderer for SSR.
5
+ *
6
+ * The package is shipped as commonjs
7
+ * which won't be parsed by Nitro correctly.
8
+ */
9
+ import { eventHandler } from 'h3';
10
+ import { useStorage } from '#imports';
11
+
12
+ export default eventHandler(async (event) => {
13
+ const render = (await import('#build/../ssr/main.server.mjs'))['default'];
14
+ const template = await useStorage().getItem(`/assets/public:index.html`);
15
+
16
+ const html = await render(event.req.url, template);
17
+
18
+ return html;
19
+ });
@@ -0,0 +1,3 @@
1
+ import { UserConfig } from 'vite';
2
+ import { Options } from '../options';
3
+ export declare function buildSSRApp(config: UserConfig, options?: Options): Promise<void>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSSRApp = void 0;
4
+ const vite_1 = require("vite");
5
+ async function buildSSRApp(config, options) {
6
+ const ssrBuildConfig = (0, vite_1.mergeConfig)(config, {
7
+ build: {
8
+ ssr: true,
9
+ rollupOptions: {
10
+ input: options?.entryServer || './src/main.server.ts',
11
+ },
12
+ outDir: options?.ssrBuildDir || './dist/ssr',
13
+ },
14
+ });
15
+ await (0, vite_1.build)(ssrBuildConfig);
16
+ }
17
+ exports.buildSSRApp = buildSSRApp;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3Nzci9idWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBc0Q7QUFHL0MsS0FBSyxVQUFVLFdBQVcsQ0FBQyxNQUFrQixFQUFFLE9BQWlCO0lBQ3JFLE1BQU0sY0FBYyxHQUFHLElBQUEsa0JBQVcsRUFBQyxNQUFNLEVBQUU7UUFDekMsS0FBSyxFQUFFO1lBQ0wsR0FBRyxFQUFFLElBQUk7WUFDVCxhQUFhLEVBQUU7Z0JBQ2IsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLElBQUksc0JBQXNCO2FBQ3REO1lBQ0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLElBQUksWUFBWTtTQUM3QztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sSUFBQSxZQUFLLEVBQUMsY0FBYyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQVpELGtDQVlDIn0=
@@ -0,0 +1,7 @@
1
+ import { Plugin } from 'vite';
2
+ interface ServerOptions {
3
+ index?: string;
4
+ entryServer?: string;
5
+ }
6
+ export declare function devServerPlugin(options: ServerOptions): Plugin;
7
+ export {};
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ // SSR dev server, middleware and error page source modified from
3
+ // https://github.com/solidjs/solid-start/blob/main/packages/start/dev/server.js
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.devServerPlugin = void 0;
6
+ const path = require("path");
7
+ const fs = require("fs");
8
+ function devServerPlugin(options) {
9
+ const entryServer = options.entryServer || 'src/main.server.ts';
10
+ const index = options.index || 'index.html';
11
+ return {
12
+ name: 'analogjs-dev-ssr-plugin',
13
+ config() {
14
+ return {
15
+ resolve: {
16
+ alias: {
17
+ '~analog/entry-server': entryServer,
18
+ },
19
+ },
20
+ };
21
+ },
22
+ configureServer(viteServer) {
23
+ return async () => {
24
+ remove_html_middlewares(viteServer.middlewares);
25
+ viteServer.middlewares.use(async (req, res) => {
26
+ let template = fs.readFileSync(path.resolve(viteServer.config.root, index), 'utf-8');
27
+ template = await viteServer.transformIndexHtml(req.originalUrl, template);
28
+ try {
29
+ const entryServer = (await viteServer.ssrLoadModule('~analog/entry-server'))['default'];
30
+ const result = await entryServer(req.originalUrl, template);
31
+ res.end(result);
32
+ }
33
+ catch (e) {
34
+ viteServer && viteServer.ssrFixStacktrace(e);
35
+ res.statusCode = 500;
36
+ res.end(`
37
+ <!DOCTYPE html>
38
+ <html lang="en">
39
+ <head>
40
+ <meta charset="UTF-8" />
41
+ <title>Error</title>
42
+ <script type="module">
43
+ import { ErrorOverlay } from '/@vite/client'
44
+ document.body.appendChild(new ErrorOverlay(${JSON.stringify(prepareError(req, e)).replace(/</g, '\\u003c')}))
45
+ </script>
46
+ </head>
47
+ <body>
48
+ </body>
49
+ </html>
50
+ `);
51
+ throw e;
52
+ }
53
+ });
54
+ };
55
+ },
56
+ };
57
+ }
58
+ exports.devServerPlugin = devServerPlugin;
59
+ /**
60
+ * Removes Vite internal middleware
61
+ *
62
+ * @param server
63
+ */
64
+ function remove_html_middlewares(server) {
65
+ const html_middlewares = [
66
+ 'viteIndexHtmlMiddleware',
67
+ 'vite404Middleware',
68
+ 'viteSpaFallbackMiddleware',
69
+ ];
70
+ for (let i = server.stack.length - 1; i > 0; i--) {
71
+ // @ts-ignore
72
+ if (html_middlewares.includes(server.stack[i].handle.name)) {
73
+ server.stack.splice(i, 1);
74
+ }
75
+ }
76
+ }
77
+ /**
78
+ * Formats error for SSR message in error overlay
79
+ * @param req
80
+ * @param error
81
+ * @returns
82
+ */
83
+ function prepareError(req, error) {
84
+ const e = error;
85
+ return {
86
+ message: `An error occured while server rendering ${req.url}:\n\n\t${typeof e === 'string' ? e : e.message} `,
87
+ stack: typeof e === 'string' ? '' : e.stack,
88
+ };
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LXNlcnZlci1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3Nzci9kZXYtc2VydmVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUVBQWlFO0FBQ2pFLGdGQUFnRjs7O0FBR2hGLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFPekIsU0FBZ0IsZUFBZSxDQUFDLE9BQXNCO0lBQ3BELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksb0JBQW9CLENBQUM7SUFDaEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUM7SUFFNUMsT0FBTztRQUNMLElBQUksRUFBRSx5QkFBeUI7UUFDL0IsTUFBTTtZQUNKLE9BQU87Z0JBQ0wsT0FBTyxFQUFFO29CQUNQLEtBQUssRUFBRTt3QkFDTCxzQkFBc0IsRUFBRSxXQUFXO3FCQUNwQztpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDO1FBQ0QsZUFBZSxDQUFDLFVBQVU7WUFDeEIsT0FBTyxLQUFLLElBQUksRUFBRTtnQkFDaEIsdUJBQXVCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNoRCxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUM1QyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUMzQyxPQUFPLENBQ1IsQ0FBQztvQkFFRixRQUFRLEdBQUcsTUFBTSxVQUFVLENBQUMsa0JBQWtCLENBQzVDLEdBQUcsQ0FBQyxXQUFxQixFQUN6QixRQUFRLENBQ1QsQ0FBQztvQkFFRixJQUFJO3dCQUNGLE1BQU0sV0FBVyxHQUFHLENBQ2xCLE1BQU0sVUFBVSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUN2RCxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNiLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQzVELEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ2pCO29CQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUNWLFVBQVUsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBVSxDQUFDLENBQUM7d0JBQ3RELEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO3dCQUNyQixHQUFHLENBQUMsR0FBRyxDQUFDOzs7Ozs7OztpRUFRNkMsSUFBSSxDQUFDLFNBQVMsQ0FDekQsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FDckIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQzs7Ozs7O2FBTWpDLENBQUMsQ0FBQzt3QkFFSCxNQUFNLENBQUMsQ0FBQztxQkFDVDtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQTlERCwwQ0E4REM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxNQUFvQztJQUNuRSxNQUFNLGdCQUFnQixHQUFHO1FBQ3ZCLHlCQUF5QjtRQUN6QixtQkFBbUI7UUFDbkIsMkJBQTJCO0tBQzVCLENBQUM7SUFDRixLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hELGFBQWE7UUFDYixJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxRCxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDM0I7S0FDRjtBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsWUFBWSxDQUFDLEdBQTRCLEVBQUUsS0FBYztJQUNoRSxNQUFNLENBQUMsR0FBRyxLQUFjLENBQUM7SUFDekIsT0FBTztRQUNMLE9BQU8sRUFBRSwyQ0FBMkMsR0FBRyxDQUFDLEdBQUcsVUFDekQsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUNoQyxHQUFHO1FBQ0gsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztLQUM1QyxDQUFDO0FBQ0osQ0FBQyJ9
@@ -0,0 +1,2 @@
1
+ import { Plugin } from 'vite';
2
+ export declare function ssrBuildPlugin(): Plugin;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ssrBuildPlugin = void 0;
4
+ function ssrBuildPlugin() {
5
+ return {
6
+ name: 'analogjs-ssr-build-plugin',
7
+ config(_config) {
8
+ return {
9
+ resolve: {
10
+ alias: {
11
+ 'zone.js/node': 'zone.js/bundles/zone-node.umd.js',
12
+ },
13
+ },
14
+ };
15
+ },
16
+ transform(code, id) {
17
+ // Remove usage of `with()` in sloppy.js file
18
+ if (id.includes('domino/lib/sloppy.js')) {
19
+ return {
20
+ code: code.replace(/with\(/gi, 'if('),
21
+ };
22
+ }
23
+ // Convert usage of xhr2 default import
24
+ if (code.includes('new xhr2.')) {
25
+ return {
26
+ code: code.replace('new xhr2.', 'new xhr2.default.'),
27
+ };
28
+ }
29
+ return;
30
+ },
31
+ };
32
+ }
33
+ exports.ssrBuildPlugin = ssrBuildPlugin;
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLWJ1aWxkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvc3NyL3Nzci1idWlsZC1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsU0FBZ0IsY0FBYztJQUM1QixPQUFPO1FBQ0wsSUFBSSxFQUFFLDJCQUEyQjtRQUNqQyxNQUFNLENBQUMsT0FBTztZQUNaLE9BQU87Z0JBQ0wsT0FBTyxFQUFFO29CQUNQLEtBQUssRUFBRTt3QkFDTCxjQUFjLEVBQUUsa0NBQWtDO3FCQUNuRDtpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDO1FBQ0QsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2hCLDZDQUE2QztZQUM3QyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBRTtnQkFDdkMsT0FBTztvQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO2lCQUN0QyxDQUFDO2FBQ0g7WUFFRCx1Q0FBdUM7WUFDdkMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUM5QixPQUFPO29CQUNMLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQztpQkFDckQsQ0FBQzthQUNIO1lBRUQsT0FBTztRQUNULENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQTlCRCx3Q0E4QkMifQ==
@@ -1,3 +1,4 @@
1
1
  import { NitroConfig } from 'nitropack';
2
2
  import { Plugin } from 'vite';
3
- export declare function viteNitroPlugin(opts?: NitroConfig): Plugin;
3
+ import { Options } from './options';
4
+ export declare function viteNitroPlugin(options?: Options, nitroOptions?: NitroConfig): Plugin;
@@ -3,35 +3,64 @@ 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 rootDir = opts?.rootDir || 'src';
6
+ const build_server_1 = require("./build-server");
7
+ const build_1 = require("./ssr/build");
8
+ function viteNitroPlugin(options, nitroOptions) {
9
+ const rootDir = nitroOptions?.rootDir || '.';
8
10
  const isTest = process.env['NODE_ENV'] === 'test' || !!process.env['VITEST'];
9
- const nitroConfig = {
11
+ let nitroConfig = {
10
12
  rootDir,
11
- srcDir: `${rootDir}/server`,
12
- scanDirs: [`${rootDir}/server`],
13
+ logLevel: 0,
14
+ srcDir: `${rootDir}/src`,
15
+ scanDirs: [`${rootDir}/src/server`],
13
16
  output: {
14
- dir: '../../dist/server',
15
- ...opts?.output,
17
+ dir: '../dist/server',
18
+ ...nitroOptions?.output,
16
19
  },
17
- buildDir: '../dist/.nitro',
20
+ buildDir: './dist/.nitro',
18
21
  typescript: {
19
22
  generateTsConfig: false,
20
23
  },
21
- ...opts,
24
+ };
25
+ if (options?.ssr) {
26
+ nitroConfig = {
27
+ ...nitroConfig,
28
+ publicAssets: [{ dir: `../dist/client` }],
29
+ serverAssets: [{ baseName: 'public', dir: `./dist/client` }],
30
+ externals: {
31
+ inline: ['zone.js/node'],
32
+ external: ['rxjs', 'node-fetch-native/dist/polyfill', 'destr'],
33
+ },
34
+ moduleSideEffects: ['zone.js/bundles/zone-node.umd.js'],
35
+ renderer: `${__dirname}/runtime/renderer`,
36
+ handlers: [
37
+ { handler: `${__dirname}/runtime/api-middleware`, middleware: true },
38
+ ],
39
+ };
40
+ }
41
+ nitroConfig = {
42
+ ...nitroConfig,
43
+ ...nitroOptions,
22
44
  };
23
45
  let isBuild = false;
24
46
  let isServe = false;
47
+ let ssrBuild = false;
48
+ let config;
25
49
  return {
26
- name: 'vite-nitro-plugin',
50
+ name: 'analogjs-vite-nitro-plugin',
27
51
  config(_config, { command }) {
28
52
  isServe = command === 'serve';
29
53
  isBuild = command === 'build';
54
+ ssrBuild = _config.build?.ssr === true;
55
+ config = _config;
30
56
  },
31
57
  async configureServer(viteServer) {
32
58
  if (isServe && !isTest) {
33
59
  const { createNitro, createDevServer, build, prepare } = await (0, load_esm_1.loadEsmModule)('nitropack');
34
- const nitro = await createNitro({ ...nitroConfig, dev: true });
60
+ const nitro = await createNitro({
61
+ dev: true,
62
+ ...nitroConfig,
63
+ });
35
64
  const server = createDevServer(nitro);
36
65
  await prepare(nitro);
37
66
  await build(nitro);
@@ -40,20 +69,20 @@ function viteNitroPlugin(opts) {
40
69
  }
41
70
  },
42
71
  async closeBundle() {
72
+ if (ssrBuild) {
73
+ return;
74
+ }
43
75
  if (isBuild) {
44
- const { createNitro, build, prepare } = await (0, load_esm_1.loadEsmModule)('nitropack');
45
- const nitro = await createNitro({
46
- ...nitroConfig,
47
- baseURL: '/api',
48
- dev: false,
49
- });
50
- await prepare(nitro);
51
- await build(nitro);
52
- await nitro.close();
76
+ if (options?.ssr) {
77
+ console.log('Building SSR application...');
78
+ await (0, build_1.buildSSRApp)(config, options);
79
+ }
80
+ console.log('Building Server...');
81
+ await (0, build_server_1.buildServer)(options, nitroConfig);
53
82
  console.log(`\n\nThe '@analogjs/platform' server has been successfully built.`);
54
83
  }
55
84
  },
56
85
  };
57
86
  }
58
87
  exports.viteNitroPlugin = viteNitroPlugin;
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1uaXRyby1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3ZpdGUtbml0cm8tcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtFQUFpRjtBQUVqRiwyQkFBb0M7QUFHcEMsU0FBZ0IsZUFBZSxDQUFDLElBQWtCO0lBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUksRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDO0lBQ3ZDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTdFLE1BQU0sV0FBVyxHQUFnQjtRQUMvQixPQUFPO1FBQ1AsTUFBTSxFQUFFLEdBQUcsT0FBTyxTQUFTO1FBQzNCLFFBQVEsRUFBRSxDQUFDLEdBQUcsT0FBTyxTQUFTLENBQUM7UUFDL0IsTUFBTSxFQUFFO1lBQ04sR0FBRyxFQUFFLG1CQUFtQjtZQUN4QixHQUFHLElBQUksRUFBRSxNQUFNO1NBQ2hCO1FBQ0QsUUFBUSxFQUFFLGdCQUFnQjtRQUMxQixVQUFVLEVBQUU7WUFDVixnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCO1FBQ0QsR0FBRyxJQUFJO0tBQ1IsQ0FBQztJQUVGLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFcEIsT0FBTztRQUNMLElBQUksRUFBRSxtQkFBbUI7UUFDekIsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRTtZQUN6QixPQUFPLEdBQUcsT0FBTyxLQUFLLE9BQU8sQ0FBQztZQUM5QixPQUFPLEdBQUcsT0FBTyxLQUFLLE9BQU8sQ0FBQztRQUNoQyxDQUFDO1FBQ0QsS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUF5QjtZQUM3QyxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsTUFBTSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUNwRCxNQUFNLElBQUEsd0JBQWEsRUFBNkIsV0FBVyxDQUFDLENBQUM7Z0JBRS9ELE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQy9ELE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQixVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBQSxtQkFBYyxFQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMvRCxPQUFPLENBQUMsR0FBRyxDQUNULDBHQUEwRyxDQUMzRyxDQUFDO2FBQ0g7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLFdBQVc7WUFDZixJQUFJLE9BQU8sRUFBRTtnQkFDWCxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUEsd0JBQWEsRUFFekQsV0FBVyxDQUFDLENBQUM7Z0JBRWYsTUFBTSxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUM7b0JBQzlCLEdBQUcsV0FBVztvQkFDZCxPQUFPLEVBQUUsTUFBTTtvQkFDZixHQUFHLEVBQUUsS0FBSztpQkFDWCxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQixNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FDVCxrRUFBa0UsQ0FDbkUsQ0FBQzthQUNIO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBaEVELDBDQWdFQyJ9
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1uaXRyby1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3ZpdGUtbml0cm8tcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtFQUFpRjtBQUVqRiwyQkFBb0M7QUFHcEMsaURBQTZDO0FBQzdDLHVDQUEwQztBQUUxQyxTQUFnQixlQUFlLENBQzdCLE9BQWlCLEVBQ2pCLFlBQTBCO0lBRTFCLE1BQU0sT0FBTyxHQUFHLFlBQVksRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDO0lBQzdDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTdFLElBQUksV0FBVyxHQUFnQjtRQUM3QixPQUFPO1FBQ1AsUUFBUSxFQUFFLENBQUM7UUFDWCxNQUFNLEVBQUUsR0FBRyxPQUFPLE1BQU07UUFDeEIsUUFBUSxFQUFFLENBQUMsR0FBRyxPQUFPLGFBQWEsQ0FBQztRQUNuQyxNQUFNLEVBQUU7WUFDTixHQUFHLEVBQUUsZ0JBQWdCO1lBQ3JCLEdBQUcsWUFBWSxFQUFFLE1BQU07U0FDeEI7UUFDRCxRQUFRLEVBQUUsZUFBZTtRQUN6QixVQUFVLEVBQUU7WUFDVixnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCO0tBQ0YsQ0FBQztJQUVGLElBQUksT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNoQixXQUFXLEdBQUc7WUFDWixHQUFHLFdBQVc7WUFDZCxZQUFZLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pDLFlBQVksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDNUQsU0FBUyxFQUFFO2dCQUNULE1BQU0sRUFBRSxD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