@analogjs/platform 0.1.0-beta.0 → 0.1.0-beta.10

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.0",
3
+ "version": "0.1.0-beta.10",
4
4
  "type": "commonjs",
5
5
  "description": "The fullstack meta-framework for Angular",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
@@ -24,11 +24,9 @@
24
24
  "url": "https://github.com/analogjs/analog.git"
25
25
  },
26
26
  "dependencies": {
27
- "nitropack": "^0.6.1"
28
- },
29
- "peerDependencies": {
27
+ "nitropack": "^0.6.1",
30
28
  "@analogjs/vite-plugin-angular": "latest"
31
29
  },
32
30
  "main": "./src/index.js",
33
- "typings": "./src/index.d.ts"
31
+ "types": "./src/index.d.ts"
34
32
  }
@@ -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=
@@ -0,0 +1,12 @@
1
+ import { Plugin } from 'vite';
2
+ /**
3
+ * This excludes the build from including the
4
+ * @analogjs/content package because it is
5
+ * dynamically imported at runtime.
6
+ *
7
+ * This prevents a dependency on @analogjs/router
8
+ * to @analogjs/content
9
+ *
10
+ * @returns
11
+ */
12
+ export declare function contentPlugin(): Plugin[];
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.contentPlugin = void 0;
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+ /**
7
+ * This excludes the build from including the
8
+ * @analogjs/content package because it is
9
+ * dynamically imported at runtime.
10
+ *
11
+ * This prevents a dependency on @analogjs/router
12
+ * to @analogjs/content
13
+ *
14
+ * @returns
15
+ */
16
+ function contentPlugin() {
17
+ let excludeContent = true;
18
+ const pkgJsonPath = path.resolve(process.cwd(), './package.json');
19
+ const packageJsonExists = fs.existsSync(pkgJsonPath);
20
+ if (packageJsonExists) {
21
+ const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
22
+ if (pkg.dependencies['@analogjs/content']) {
23
+ excludeContent = false;
24
+ }
25
+ }
26
+ return [
27
+ {
28
+ name: 'analogjs-content-build-plugin',
29
+ apply: 'build',
30
+ config() {
31
+ return {
32
+ build: {
33
+ rollupOptions: {
34
+ external: [excludeContent ? '@analogjs/content' : ''],
35
+ },
36
+ },
37
+ };
38
+ },
39
+ },
40
+ ];
41
+ }
42
+ exports.contentPlugin = contentPlugin;
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL2NvbnRlbnQtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFFN0I7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsYUFBYTtJQUMzQixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFFMUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUNsRSxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFckQsSUFBSSxpQkFBaUIsRUFBRTtRQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFOUQsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDekMsY0FBYyxHQUFHLEtBQUssQ0FBQztTQUN4QjtLQUNGO0lBRUQsT0FBTztRQUNMO1lBQ0UsSUFBSSxFQUFFLCtCQUErQjtZQUNyQyxLQUFLLEVBQUUsT0FBTztZQUNkLE1BQU07Z0JBQ0osT0FBTztvQkFDTCxLQUFLLEVBQUU7d0JBQ0wsYUFBYSxFQUFFOzRCQUNiLFFBQVEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt5QkFDdEQ7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBN0JELHNDQTZCQyJ9
@@ -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,20 @@ 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
+ const content_plugin_1 = require("./content-plugin");
10
+ function platformPlugin(opts = {}) {
8
11
  return [
9
- (0, vite_nitro_plugin_1.viteNitroPlugin)(opts?.nitro),
10
- ...(0, vite_plugin_angular_1.default)(opts?.vite),
12
+ (0, vite_nitro_plugin_1.viteNitroPlugin)(opts, opts?.nitro),
13
+ (opts.ssr ? (0, ssr_build_plugin_1.ssrBuildPlugin)() : false),
11
14
  ...(0, router_plugin_1.routerPlugin)(),
15
+ ...(0, content_plugin_1.contentPlugin)(),
16
+ (opts.ssr
17
+ ? (0, dev_server_plugin_1.devServerPlugin)({ entryServer: opts.entryServer })
18
+ : false),
19
+ ...(0, vite_plugin_angular_1.default)(opts?.vite),
12
20
  ];
13
21
  }
14
22
  exports.platformPlugin = platformPlugin;
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0vc3JjL2xpYi9wbGF0Zm9ybS1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdUVBQW9EO0FBRXBELDJEQUFzRDtBQUN0RCxtREFBK0M7QUFFL0MsU0FBZ0IsY0FBYyxDQUFDLElBQWM7SUFDM0MsT0FBTztRQUNMLElBQUEsbUNBQWUsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQzVCLEdBQUcsSUFBQSw2QkFBTyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUM7UUFDdEIsR0FBRyxJQUFBLDRCQUFZLEdBQUU7S0FDbEIsQ0FBQztBQUNKLENBQUM7QUFORCx3Q0FNQyJ9
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0vc3JjL2xpYi9wbGF0Zm9ybS1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdUVBQW9EO0FBRXBELDJEQUFzRDtBQUN0RCxtREFBK0M7QUFDL0MsK0RBQTBEO0FBQzFELDZEQUF3RDtBQUN4RCxxREFBaUQ7QUFFakQsU0FBZ0IsY0FBYyxDQUFDLE9BQWdCLEVBQUU7SUFDL0MsT0FBTztRQUNMLElBQUEsbUNBQWUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUNsQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUEsaUNBQWMsR0FBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQVc7UUFDL0MsR0FBRyxJQUFBLDRCQUFZLEdBQUU7UUFDakIsR0FBRyxJQUFBLDhCQUFhLEdBQUU7UUFDbEIsQ0FBQyxJQUFJLENBQUMsR0FBRztZQUNQLENBQUMsQ0FBQyxJQUFBLG1DQUFlLEVBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BELENBQUMsQ0FBQyxLQUFLLENBQVc7UUFDcEIsR0FBRyxJQUFBLDZCQUFPLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztLQUN2QixDQUFDO0FBQ0osQ0FBQztBQVhELHdDQVdDIn0=
@@ -1,4 +1,4 @@
1
- import type { Plugin } from 'vite';
1
+ import { Plugin } from 'vite';
2
2
  /**
3
3
  * This plugin invalidates the files for routes when new files
4
4
  * are added/deleted.
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.routerPlugin = void 0;
4
+ const vite_1 = require("vite");
4
5
  /**
5
6
  * This plugin invalidates the files for routes when new files
6
7
  * are added/deleted.
@@ -11,11 +12,25 @@ exports.routerPlugin = void 0;
11
12
  */
12
13
  function routerPlugin() {
13
14
  return [
15
+ {
16
+ name: 'analogjs-router-plugin',
17
+ config() {
18
+ return {
19
+ ssr: {
20
+ noExternal: ['@analogjs/**', '@angular/**'],
21
+ },
22
+ optimizeDeps: {
23
+ include: ['rxjs'],
24
+ exclude: ['@angular/platform-server', '@analogjs/router'],
25
+ },
26
+ };
27
+ },
28
+ },
14
29
  {
15
30
  name: 'analogjs-router-invalidate-routes',
16
31
  configureServer(server) {
17
32
  function invalidateRoutes(path) {
18
- if (path.includes(`${server.config.root}/app/routes`)) {
33
+ if (path.includes((0, vite_1.normalizePath)(`/app/routes/`))) {
19
34
  server.moduleGraph.fileToModulesMap.forEach((mods) => {
20
35
  mods.forEach((mod) => {
21
36
  if (mod.id?.includes('@analogjs_router.js')) {
@@ -38,4 +53,4 @@ function routerPlugin() {
38
53
  ];
39
54
  }
40
55
  exports.routerPlugin = routerPlugin;
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvcm91dGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsWUFBWTtJQUMxQixPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUUsbUNBQW1DO1lBQ3pDLGVBQWUsQ0FBQyxNQUFNO2dCQUNwQixTQUFTLGdCQUFnQixDQUFDLElBQVk7b0JBQ3BDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxhQUFhLENBQUMsRUFBRTt3QkFDckQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dDQUNuQixJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7b0NBQzNDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7b0NBRXpDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0NBQzVCLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7b0NBQzNDLENBQUMsQ0FBQyxDQUFDO2lDQUNKOzRCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUMsQ0FBQyxDQUFDO3dCQUVILE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzRCQUNiLElBQUksRUFBRSxhQUFhO3lCQUNwQixDQUFDLENBQUM7cUJBQ0o7Z0JBQ0gsQ0FBQztnQkFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDaEQsQ0FBQztTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUE5QkQsb0NBOEJDIn0=
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvcm91dGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBNkM7QUFFN0M7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLFlBQVk7SUFDMUIsT0FBTztRQUNMO1lBQ0UsSUFBSSxFQUFFLHdCQUF3QjtZQUM5QixNQUFNO2dCQUNKLE9BQU87b0JBQ0wsR0FBRyxFQUFFO3dCQUNILFVBQVUsRUFBRSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUM7cUJBQzVDO29CQUNELFlBQVksRUFBRTt3QkFDWixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7d0JBQ2pCLE9BQU8sRUFBRSxDQUFDLDBCQUEwQixFQUFFLGtCQUFrQixDQUFDO3FCQUMxRDtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsbUNBQW1DO1lBQ3pDLGVBQWUsQ0FBQyxNQUFNO2dCQUNwQixTQUFTLGdCQUFnQixDQUFDLElBQVk7b0JBQ3BDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFBLG9CQUFhLEVBQUMsY0FBYyxDQUFDLENBQUMsRUFBRTt3QkFDaEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dDQUNuQixJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7b0NBQzNDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7b0NBRXpDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0NBQzVCLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7b0NBQzNDLENBQUMsQ0FBQyxDQUFDO2lDQUNKOzRCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUMsQ0FBQyxDQUFDO3dCQUVILE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzRCQUNiLElBQUksRUFBRSxhQUFhO3lCQUNwQixDQUFDLENBQUM7cUJBQ0o7Z0JBQ0gsQ0FBQztnQkFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDaEQsQ0FBQztTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUE1Q0Qsb0NBNENDIn0=
@@ -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,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ssrBuildPlugin = void 0;
4
+ const vite_1 = require("vite");
5
+ function ssrBuildPlugin() {
6
+ return {
7
+ name: 'analogjs-ssr-build-plugin',
8
+ config(_config) {
9
+ return {
10
+ resolve: {
11
+ alias: {
12
+ 'zone.js/node': 'zone.js/bundles/zone-node.umd.js',
13
+ },
14
+ },
15
+ };
16
+ },
17
+ transform(code, id) {
18
+ // Remove usage of `with()` in sloppy.js file
19
+ if (id.includes((0, vite_1.normalizePath)('domino/lib/sloppy.js'))) {
20
+ return {
21
+ code: code.replace(/with\(/gi, 'if('),
22
+ };
23
+ }
24
+ // Convert usage of xhr2 default import
25
+ if (code.includes('new xhr2.')) {
26
+ return {
27
+ code: code.replace('new xhr2.', 'new xhr2.default.'),
28
+ };
29
+ }
30
+ return;
31
+ },
32
+ };
33
+ }
34
+ exports.ssrBuildPlugin = ssrBuildPlugin;
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLWJ1aWxkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvc3NyL3Nzci1idWlsZC1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQTZDO0FBRTdDLFNBQWdCLGNBQWM7SUFDNUIsT0FBTztRQUNMLElBQUksRUFBRSwyQkFBMkI7UUFDakMsTUFBTSxDQUFDLE9BQU87WUFDWixPQUFPO2dCQUNMLE9BQU8sRUFBRTtvQkFDUCxLQUFLLEVBQUU7d0JBQ0wsY0FBYyxFQUFFLGtDQUFrQztxQkFDbkQ7aUJBQ0Y7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUNELFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQiw2Q0FBNkM7WUFDN0MsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUEsb0JBQWEsRUFBQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RELE9BQU87b0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztpQkFDdEMsQ0FBQzthQUNIO1lBRUQsdUNBQXVDO1lBQ3ZDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDOUIsT0FBTztvQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLENBQUM7aUJBQ3JELENBQUM7YUFDSDtZQUVELE9BQU87UUFDVCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUE5QkQsd0NBOEJDIn0=
@@ -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,42 +3,90 @@ 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
+ function viteNitroPlugin(options, nitroOptions) {
9
+ const rootDir = nitroOptions?.rootDir || '.';
10
+ const isTest = process.env['NODE_ENV'] === 'test' || !!process.env['VITEST'];
11
+ let nitroConfig = {
12
+ rootDir,
13
+ logLevel: nitroOptions?.logLevel || 0,
14
+ srcDir: `${rootDir}/src`,
15
+ scanDirs: [`${rootDir}/src/server`],
11
16
  output: {
12
- dir: '../../dist/server',
13
- ...opts?.output,
17
+ dir: '../dist/server',
18
+ publicDir: '../dist/server/public',
19
+ ...nitroOptions?.output,
20
+ },
21
+ buildDir: './dist/.nitro',
22
+ typescript: {
23
+ generateTsConfig: false,
14
24
  },
15
- buildDir: '../dist/.nitro',
16
- ...opts,
17
25
  };
26
+ let isBuild = false;
27
+ let isServe = false;
28
+ let ssrBuild = false;
29
+ let config;
18
30
  return {
19
- name: 'vite-nitro-plugin',
31
+ name: 'analogjs-vite-nitro-plugin',
32
+ config(_config, { command }) {
33
+ isServe = command === 'serve';
34
+ isBuild = command === 'build';
35
+ ssrBuild = _config.build?.ssr === true;
36
+ config = _config;
37
+ if (isBuild && ssrBuild) {
38
+ nitroConfig = {
39
+ ...nitroConfig,
40
+ publicAssets: [{ dir: `../dist/client` }],
41
+ serverAssets: [{ baseName: 'public', dir: `./dist/client` }],
42
+ externals: {
43
+ inline: ['zone.js/node'],
44
+ external: ['rxjs', 'node-fetch-native/dist/polyfill', 'destr'],
45
+ },
46
+ moduleSideEffects: ['zone.js/bundles/zone-node.umd.js'],
47
+ renderer: `${__dirname}/runtime/renderer`,
48
+ handlers: [
49
+ {
50
+ handler: `${__dirname}/runtime/api-middleware`,
51
+ middleware: true,
52
+ },
53
+ ],
54
+ };
55
+ }
56
+ nitroConfig = {
57
+ ...nitroConfig,
58
+ ...nitroOptions,
59
+ };
60
+ },
20
61
  async configureServer(viteServer) {
21
- const { createNitro, createDevServer, build, prepare } = await (0, load_esm_1.loadEsmModule)('nitropack');
22
- const nitro = await createNitro({ ...nitroConfig, dev: true });
23
- const server = createDevServer(nitro);
24
- await prepare(nitro);
25
- await build(nitro);
26
- viteServer.middlewares.use('/api', (0, h3_1.toNodeListener)(server.app));
27
- console.log(`\n\nThe '@analogjs/platform' successfully started.\nThe server endpoints are accessible under the "/api"`);
62
+ if (isServe && !isTest) {
63
+ const { createNitro, createDevServer, build, prepare } = await (0, load_esm_1.loadEsmModule)('nitropack');
64
+ const nitro = await createNitro({
65
+ dev: true,
66
+ ...nitroConfig,
67
+ });
68
+ const server = createDevServer(nitro);
69
+ await prepare(nitro);
70
+ await build(nitro);
71
+ viteServer.middlewares.use('/api', (0, h3_1.toNodeListener)(server.app));
72
+ console.log(`\n\nThe '@analogjs/platform' successfully started.\nThe server endpoints are accessible under the "/api"`);
73
+ }
28
74
  },
29
75
  async closeBundle() {
30
- const { createNitro, build, prepare } = await (0, load_esm_1.loadEsmModule)('nitropack');
31
- const nitro = await createNitro({
32
- ...nitroConfig,
33
- baseURL: '/api',
34
- dev: false,
35
- });
36
- await prepare(nitro);
37
- await build(nitro);
38
- await nitro.close();
39
- console.log(`\n\nThe '@analogjs/platform' server has been successfully built.`);
76
+ if (ssrBuild) {
77
+ return;
78
+ }
79
+ if (isBuild) {
80
+ if (options?.ssr) {
81
+ console.log('Building SSR application...');
82
+ await (0, build_1.buildSSRApp)(config, options);
83
+ }
84
+ console.log('Building Server...');
85
+ await (0, build_server_1.buildServer)(options, nitroConfig);
86
+ console.log(`\n\nThe '@analogjs/platform' server has been successfully built.`);
87
+ }
40
88
  },
41
89
  };
42
90
  }
43
91
  exports.viteNitroPlugin = viteNitroPlugin;
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1uaXRyby1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3ZpdGUtbml0cm8tcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtFQUFpRjtBQUVqRiwyQkFBb0M7QUFHcEMsU0FBZ0IsZUFBZSxDQUFDLElBQWtCO0lBQ2hELE1BQU0sV0FBVyxHQUFnQjtRQUMvQixPQUFPLEVBQUUsS0FBSztRQUNkLE1BQU0sRUFBRSxZQUFZO1FBQ3BCLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQztRQUN4QixNQUFNLEVBQUU7WUFDTixHQUFHLEVBQUUsbUJBQW1CO1lBQ3hCLEdBQUcsSUFBSSxFQUFFLE1BQU07U0FDaEI7UUFDRCxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLEdBQUcsSUFBSTtLQUNSLENBQUM7SUFDRixPQUFPO1FBQ0wsSUFBSSxFQUFFLG1CQUFtQjtRQUV6QixLQUFLLENBQUMsZUFBZSxDQUFDLFVBQXlCO1lBQzdDLE1BQU0sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FDcEQsTUFBTSxJQUFBLHdCQUFhLEVBQTZCLFdBQVcsQ0FBQyxDQUFDO1lBRS9ELE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDL0QsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFBLG1CQUFjLEVBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FDVCwwR0FBMEcsQ0FDM0csQ0FBQztRQUNKLENBQUM7UUFFRCxLQUFLLENBQUMsV0FBVztZQUNmLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sSUFBQSx3QkFBYSxFQUV6RCxXQUFXLENBQUMsQ0FBQztZQUVmLE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDO2dCQUM5QixHQUFHLFdBQVc7Z0JBQ2QsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsR0FBRyxFQUFFLEtBQUs7YUFDWCxDQUFDLENBQUM7WUFDSCxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsR0FBRyxDQUNULGtFQUFrRSxDQUNuRSxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBL0NELDBDQStDQyJ9
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1uaXRyby1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL3ZpdGUtbml0cm8tcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtFQUFpRjtBQUVqRiwyQkFBb0M7QUFHcEMsaURBQTZDO0FBQzdDLHVDQUEwQztBQUUxQyxTQUFnQixlQUFlLENBQzdCLE9BQWlCLEVBQ2pCLFlBQTBCO0lBRTFCLE1BQU0sT0FBTyxHQUFHLFlBQVksRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDO0lBQzdDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTdFLElBQUksV0FBVyxHQUFnQjtRQUM3QixPQUFPO1FBQ1AsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLElBQUksQ0FBQztRQUNyQyxNQUFNLEVBQUUsR0FBRyxPQUFPLE1BQU07UUFDeEIsUUFBUSxFQUFFLENBQUMsR0FBRyxPQUFPLGFBQWEsQ0FBQztRQUNuQyxNQUFNLEVBQUU7WUFDTixHQUFHLEVBQUUsZ0JBQWdCO1lBQ3JCLFNBQVMsRUFBRSx1QkFBdUI7WUFDbEMsR0FBRyxZQUFZLEVBQUUsTUFBTTtTQUN4QjtRQUNELFFBQVEsRUFBRSxlQUFlO1FBQ3pCLFVBQVUsRUFBRTtZQUNWLGdCQUFnQixFQUFFLEtBQUs7U0FDeEI7S0FDRixDQUFDO0lBRUYsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDckIsSUFBSSxNQUFrQixDQUFDO0lBRXZCLE9BQU87UUFDTCxJQUFJLEVBQUUsNEJBQTRCO1FBQ2xDLE1BQU0sQ0FBQyxPQUFPLEVBQUUs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