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

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.4",
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,2 @@
1
+ declare const _default: import("h3").EventHandler<unknown>;
2
+ export default _default;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const h3_1 = require("h3");
4
+ exports.default = (0, h3_1.eventHandler)(async (event) => {
5
+ if (event.req.url?.startsWith('/api')) {
6
+ return $fetch(`${event.req.url?.replace('/api', '')}`);
7
+ }
8
+ });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3J1bnRpbWUvYXBpLW1pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBa0M7QUFFbEMsa0JBQWUsSUFBQSxpQkFBWSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUMxQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNyQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3hEO0FBQ0gsQ0FBQyxDQUFDLENBQUMifQ==
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<any>;
2
+ export default _default;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const h3_1 = require("h3");
4
+ // @ts-ignore
5
+ const _imports_1 = require("#imports");
6
+ exports.default = (0, h3_1.eventHandler)(async (event) => {
7
+ // @ts-ignore
8
+ const render = (await Promise.resolve().then(() => require('#build/../ssr/main.server.mjs')))['default'];
9
+ // @ts-ignore
10
+ const template = await (0, _imports_1.useStorage)().getItem(`/assets/public:index.html`);
11
+ const html = await render(event.req.url, template);
12
+ return html;
13
+ });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3J1bnRpbWUvcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBa0M7QUFDbEMsYUFBYTtBQUNiLHVDQUFzQztBQUV0QyxrQkFBZSxJQUFBLGlCQUFZLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQzFDLGFBQWE7SUFDYixNQUFNLE1BQU0sR0FBRyxDQUFDLDJDQUFhLCtCQUErQixFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUxRSxhQUFhO0lBQ2IsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLHFCQUFVLEdBQUUsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUV6RSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVuRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQyxDQUFDIn0=
@@ -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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