@geektech/tsone-cli 0.0.1 → 0.1.0

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/README.md CHANGED
@@ -41,7 +41,8 @@ app.mount();
41
41
  ```
42
42
 
43
43
  The export must be written as `export const app`; a default export or another
44
- name is not used by the CLI.
44
+ name is not used by the CLI. `entry` is the root page (served at `/` and built
45
+ to `index.html`).
45
46
 
46
47
  ## Configuration
47
48
 
@@ -82,6 +83,7 @@ export default defineConfig({
82
83
  Defaults:
83
84
 
84
85
  - `entry`: `src/main.ts`
86
+ - `pages`: `{}` (no additional pages)
85
87
  - `server.host`: `127.0.0.1`
86
88
  - `server.port`: `52211`
87
89
  - `server.proxy`: `{}`
@@ -91,34 +93,72 @@ Defaults:
91
93
  project root itself, an outside path, and a path that escapes through a symlink
92
94
  are rejected before the output directory is removed.
93
95
 
96
+ ## Multi-Page Applications
97
+
98
+ Configure additional pages with the `pages` option, mapping each route to a
99
+ page entry. Every page entry must satisfy the same `app` contract as `entry`:
100
+
101
+ ```typescript
102
+ import { defineConfig } from '@geektech/tsone-cli';
103
+
104
+ export default defineConfig({
105
+ entry: 'src/main.ts',
106
+ pages: {
107
+ '/about': 'src/about.ts',
108
+ '/docs/guide': 'src/guide.ts',
109
+ },
110
+ });
111
+ ```
112
+
113
+ Route keys must start with `/` and may nest; trailing slashes are normalized
114
+ (`'/about/'` is served the same as `'/about'`). The root route `/` cannot be
115
+ redefined in `pages` — use `entry` for it. Each route maps to its own entry,
116
+ so every page bundles and renders independently.
117
+
118
+ During development each configured page is served at its route: `/about/`
119
+ and `/about/index.html` also resolve to `/about`, and every page receives its
120
+ own live-reload injection. `tsone build` emits one HTML document per page,
121
+ using the page route for the filename (`index.html` for `/`, `about.html` for
122
+ `/about`, `docs/guide.html` for `/docs/guide`) with asset URLs relative to that
123
+ document.
124
+
94
125
  ## Command Line
95
126
 
96
127
  Development and build options are deliberately separate:
97
128
 
98
129
  ```text
99
- tsone dev [--host <host>] [--port <port>]
130
+ tsone dev [--host <host>] [--port <port>] [--no-watch]
100
131
  tsone build [--out-dir <path>]
101
132
  ```
102
133
 
103
- `dev` accepts only `--host` and `--port`; `build` accepts only `--out-dir`.
104
- Options override `tsone.config.ts`. Both separated and equals forms work, for
105
- example `--port 3000`, `--port=3000`, `--out-dir output`, and
134
+ `dev` accepts `--host`, `--port`, and `--no-watch`; `build` accepts only
135
+ `--out-dir`. Options override `tsone.config.ts`. Both separated and equals
136
+ forms work, for example `--port 3000`, `--port=3000`, `--out-dir output`, and
106
137
  `--out-dir=output`.
107
138
 
108
- `tsone dev` serves the generated HTML at `/` and `/index.html`. Each document
109
- build writes an immutable browser ESM generation beneath the internal
110
- `.tsone/dev/` directory and references exact `/dev/<session>/<generation>/...`
111
- JavaScript and stylesheet URLs. Bun uses that exact generation URL as its
112
- public path, so emitted file-asset strings are absolute URLs under the same
113
- generation and resolve correctly from the document URL across concurrent pages.
114
- `/bundle.js` remains a compatibility alias that rebuilds and redirects to the
115
- latest exact entry URL. Other unmatched paths return 404. The `.tsone/`
116
- directory is generated tooling output and can be removed while the development
117
- server is stopped. A `.tsone` path that resolves outside the project through a
118
- symlink is rejected before the development server starts.
119
-
120
- `tsone build` writes a Bun browser bundle and `index.html` to the safe output
121
- directory.
139
+ `tsone dev` watches the project by default: when a source, style, or config
140
+ file changes it rebuilds the current page and notifies connected browsers to
141
+ reload over a server-sent events stream at `/__tsone/reload`, so the page
142
+ updates without a manual refresh. A failed rebuild keeps the last working page
143
+ served, and changes to `tsone.config.ts` restart the development server with
144
+ the fresh configuration. Pass `--no-watch` to disable file watching and keep
145
+ the server as a plain on-demand builder.
146
+
147
+ `tsone dev` serves the generated HTML at `/` and `/index.html`, plus one route
148
+ per configured page. Each document build writes an immutable browser ESM
149
+ generation beneath the internal `.tsone/dev/` directory and references exact
150
+ `/dev/<session>/<generation>/...` JavaScript and stylesheet URLs. Bun uses that
151
+ exact generation URL as its public path, so emitted file-asset strings are
152
+ absolute URLs under the same generation and resolve correctly from the document
153
+ URL across concurrent pages. `/bundle.js` remains a compatibility alias that
154
+ rebuilds and redirects to the latest root entry URL. Other unmatched paths
155
+ return 404. The `.tsone/` directory is generated tooling output and can be
156
+ removed while the development server is stopped. A `.tsone` path that resolves
157
+ outside the project through a symlink is rejected before the development server
158
+ starts.
159
+
160
+ `tsone build` writes a Bun browser bundle and one HTML document per page to the
161
+ safe output directory.
122
162
 
123
163
  ## Development Proxy
124
164
 
@@ -160,7 +200,8 @@ console.log(result.root, result.outDir, result.assetsBuilt);
160
200
  - `defineConfig(config)` returns the same typed config object.
161
201
  - `resolveConfig(options?)` validates and merges defaults, a config file,
162
202
  direct config, and host/port/outDir overrides. It returns absolute `root`,
163
- `entry`, and `build.outDir` values plus the resolved server configuration.
203
+ `entry`, and `build.outDir` values, the resolved `pages` route map, plus the
204
+ resolved server configuration.
164
205
  - `startDevServer(options?)` resolves the configuration and returns the Bun
165
206
  server. The caller owns its lifecycle and must call `server.stop()`.
166
207
  - `build(options?)` validates the entry and output path, then returns
@@ -169,7 +210,8 @@ console.log(result.root, result.outDir, result.assetsBuilt);
169
210
  ## Version 1 Scope
170
211
 
171
212
  The development server serves HTTP only. Proxy targets may use HTTP or HTTPS.
172
- CLI v1 has no config plugins, WebSocket, HMR, SSR, functional config, `public/`
173
- directory copying, or public `minify` and `sourcemap` configuration.
174
- Development bundles use an internal inline source map, while production build
175
- minification and source-map controls are intentionally not configurable.
213
+ CLI v1 has no config plugins, WebSocket, HMR, SSR, functional config,
214
+ `public/` directory copying, or public `minify` and `sourcemap`
215
+ configuration. Development bundles use an internal inline source map, while
216
+ production build minification and source-map controls are intentionally not
217
+ configurable.
package/dist/cli.d.ts CHANGED
@@ -2,6 +2,7 @@ export interface DevCliArgs {
2
2
  command: 'dev';
3
3
  host?: string;
4
4
  port?: number;
5
+ noWatch?: boolean;
5
6
  }
6
7
  export interface BuildCliArgs {
7
8
  command: 'build';
package/dist/cli.js CHANGED
@@ -2,15 +2,16 @@
2
2
  import {
3
3
  build,
4
4
  startDevServer
5
- } from "./index-jmtdrrbw.js";
5
+ } from "./index-p7jrckn1.js";
6
6
 
7
7
  // src/cli.ts
8
8
  var USAGE = [
9
9
  "Usage:",
10
- " tsone dev [--host <host>] [--port <port>]",
10
+ " tsone dev [--host <host>] [--port <port>] [--no-watch]",
11
11
  " tsone build [--out-dir <path>]"
12
12
  ].join(`
13
13
  `);
14
+ var FLAG_OPTIONS = new Set(["--no-watch"]);
14
15
  function parseCliArgs(argv) {
15
16
  const command = argv[0];
16
17
  if (command !== "dev" && command !== "build") {
@@ -28,6 +29,10 @@ function parseCliArgs(argv) {
28
29
  if (options.has(name)) {
29
30
  throw parseError(`Duplicate option: ${name}`);
30
31
  }
32
+ if (FLAG_OPTIONS.has(name)) {
33
+ options.set(name, "true");
34
+ continue;
35
+ }
31
36
  const value = inlineValue ?? argv[index + 1];
32
37
  if (value === undefined || value === "" || value.startsWith("--")) {
33
38
  throw parseError(`Missing value for option: ${name}`);
@@ -42,7 +47,8 @@ function parseCliArgs(argv) {
42
47
  return {
43
48
  command,
44
49
  ...options.has("--host") ? { host: options.get("--host") } : {},
45
- ...port === undefined ? {} : { port: parsePort(port) }
50
+ ...port === undefined ? {} : { port: parsePort(port) },
51
+ ...options.has("--no-watch") ? { noWatch: true } : {}
46
52
  };
47
53
  }
48
54
  return {
@@ -55,7 +61,8 @@ async function runCli(argv = process.argv.slice(2)) {
55
61
  if (args.command === "dev") {
56
62
  const server = await startDevServer({
57
63
  ...args.host === undefined ? {} : { host: args.host },
58
- ...args.port === undefined ? {} : { port: args.port }
64
+ ...args.port === undefined ? {} : { port: args.port },
65
+ watch: !args.noWatch
59
66
  });
60
67
  console.log(`TSone dev server listening at http://${server.hostname}:${server.port}`);
61
68
  return;
@@ -74,13 +81,13 @@ function splitOption(token) {
74
81
  };
75
82
  }
76
83
  function assertKnownOption(name) {
77
- if (name === "--host" || name === "--port" || name === "--out-dir") {
84
+ if (name === "--host" || name === "--port" || name === "--out-dir" || name === "--no-watch") {
78
85
  return;
79
86
  }
80
87
  throw parseError(`Unknown option: ${name}`);
81
88
  }
82
89
  function assertSupportedOption(command, name) {
83
- const supported = command === "dev" && (name === "--host" || name === "--port") || command === "build" && name === "--out-dir";
90
+ const supported = command === "dev" && (name === "--host" || name === "--port" || name === "--no-watch") || command === "build" && name === "--out-dir";
84
91
  if (!supported) {
85
92
  throw parseError(`Option ${name} is not supported for ${command}`);
86
93
  }
@@ -101,9 +108,9 @@ function parseError(message) {
101
108
  ${USAGE}`);
102
109
  }
103
110
  export {
104
- runCli,
105
- parseCliArgs
111
+ parseCliArgs,
112
+ runCli
106
113
  };
107
114
 
108
- //# debugId=AB0F04E26576496764756E2164756E21
115
+ //# debugId=64176CE47C4D4DED64756E2164756E21
109
116
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/cli.ts"],
4
4
  "sourcesContent": [
5
- "import { build } from './build';\nimport { startDevServer } from './server';\n\nconst USAGE = [\n 'Usage:',\n ' tsone dev [--host <host>] [--port <port>]',\n ' tsone build [--out-dir <path>]',\n].join('\\n');\n\nexport interface DevCliArgs {\n command: 'dev';\n host?: string;\n port?: number;\n}\n\nexport interface BuildCliArgs {\n command: 'build';\n outDir?: string;\n}\n\nexport type CliArgs = DevCliArgs | BuildCliArgs;\n\nexport function parseCliArgs(argv: string[]): CliArgs {\n const command = argv[0];\n if (command !== 'dev' && command !== 'build') {\n throw parseError(\n command === undefined ? 'Missing command' : `Unknown command: ${command}`\n );\n }\n\n const options = new Map<string, string>();\n for (let index = 1; index < argv.length; index += 1) {\n const token = argv[index];\n if (!token.startsWith('--')) {\n throw parseError(`Unexpected positional argument: ${token}`);\n }\n\n const { name, inlineValue } = splitOption(token);\n assertKnownOption(name);\n assertSupportedOption(command, name);\n if (options.has(name)) {\n throw parseError(`Duplicate option: ${name}`);\n }\n\n const value = inlineValue ?? argv[index + 1];\n if (value === undefined || value === '' || value.startsWith('--')) {\n throw parseError(`Missing value for option: ${name}`);\n }\n if (inlineValue === undefined) {\n index += 1;\n }\n options.set(name, value);\n }\n\n if (command === 'dev') {\n const port = options.get('--port');\n return {\n command,\n ...(options.has('--host') ? { host: options.get('--host') } : {}),\n ...(port === undefined ? {} : { port: parsePort(port) }),\n };\n }\n\n return {\n command,\n ...(options.has('--out-dir') ? { outDir: options.get('--out-dir') } : {}),\n };\n}\n\nexport async function runCli(\n argv: string[] = process.argv.slice(2)\n): Promise<void> {\n const args = parseCliArgs(argv);\n\n if (args.command === 'dev') {\n const server = await startDevServer({\n ...(args.host === undefined ? {} : { host: args.host }),\n ...(args.port === undefined ? {} : { port: args.port }),\n });\n console.log(\n `TSone dev server listening at http://${server.hostname}:${server.port}`\n );\n return;\n }\n\n const result = await build(\n args.outDir === undefined ? {} : { outDir: args.outDir }\n );\n console.log(\n `TSone build completed: ${result.outDir} (${result.assetsBuilt.length} assets)`\n );\n}\n\nfunction splitOption(token: string): { name: string; inlineValue?: string } {\n const equalsIndex = token.indexOf('=');\n if (equalsIndex === -1) {\n return { name: token };\n }\n\n return {\n name: token.slice(0, equalsIndex),\n inlineValue: token.slice(equalsIndex + 1),\n };\n}\n\nfunction assertKnownOption(name: string): void {\n if (name === '--host' || name === '--port' || name === '--out-dir') {\n return;\n }\n\n throw parseError(`Unknown option: ${name}`);\n}\n\nfunction assertSupportedOption(\n command: CliArgs['command'],\n name: string\n): void {\n const supported =\n (command === 'dev' && (name === '--host' || name === '--port')) ||\n (command === 'build' && name === '--out-dir');\n\n if (!supported) {\n throw parseError(`Option ${name} is not supported for ${command}`);\n }\n}\n\nfunction parsePort(value: string): number {\n if (!/^\\d+$/.test(value)) {\n throw parseError('Port must be an integer between 0 and 65535');\n }\n\n const port = Number(value);\n if (!Number.isInteger(port) || port < 0 || port > 65535) {\n throw parseError('Port must be an integer between 0 and 65535');\n }\n\n return port;\n}\n\nfunction parseError(message: string): Error {\n return new Error(`${message}\\n\\n${USAGE}`);\n}\n"
5
+ "import { build } from './build';\nimport { startDevServer } from './server';\n\nconst USAGE = [\n 'Usage:',\n ' tsone dev [--host <host>] [--port <port>] [--no-watch]',\n ' tsone build [--out-dir <path>]',\n].join('\\n');\n\nconst FLAG_OPTIONS = new Set(['--no-watch']);\n\nexport interface DevCliArgs {\n command: 'dev';\n host?: string;\n port?: number;\n noWatch?: boolean;\n}\n\nexport interface BuildCliArgs {\n command: 'build';\n outDir?: string;\n}\n\nexport type CliArgs = DevCliArgs | BuildCliArgs;\n\nexport function parseCliArgs(argv: string[]): CliArgs {\n const command = argv[0];\n if (command !== 'dev' && command !== 'build') {\n throw parseError(\n command === undefined ? 'Missing command' : `Unknown command: ${command}`\n );\n }\n\n const options = new Map<string, string>();\n for (let index = 1; index < argv.length; index += 1) {\n const token = argv[index];\n if (!token.startsWith('--')) {\n throw parseError(`Unexpected positional argument: ${token}`);\n }\n\n const { name, inlineValue } = splitOption(token);\n assertKnownOption(name);\n assertSupportedOption(command, name);\n if (options.has(name)) {\n throw parseError(`Duplicate option: ${name}`);\n }\n if (FLAG_OPTIONS.has(name)) {\n options.set(name, 'true');\n continue;\n }\n\n const value = inlineValue ?? argv[index + 1];\n if (value === undefined || value === '' || value.startsWith('--')) {\n throw parseError(`Missing value for option: ${name}`);\n }\n if (inlineValue === undefined) {\n index += 1;\n }\n options.set(name, value);\n }\n\n if (command === 'dev') {\n const port = options.get('--port');\n return {\n command,\n ...(options.has('--host') ? { host: options.get('--host') } : {}),\n ...(port === undefined ? {} : { port: parsePort(port) }),\n ...(options.has('--no-watch') ? { noWatch: true } : {}),\n };\n }\n\n return {\n command,\n ...(options.has('--out-dir') ? { outDir: options.get('--out-dir') } : {}),\n };\n}\n\nexport async function runCli(\n argv: string[] = process.argv.slice(2)\n): Promise<void> {\n const args = parseCliArgs(argv);\n\n if (args.command === 'dev') {\n const server = await startDevServer({\n ...(args.host === undefined ? {} : { host: args.host }),\n ...(args.port === undefined ? {} : { port: args.port }),\n watch: !args.noWatch,\n });\n console.log(\n `TSone dev server listening at http://${server.hostname}:${server.port}`\n );\n return;\n }\n\n const result = await build(\n args.outDir === undefined ? {} : { outDir: args.outDir }\n );\n console.log(\n `TSone build completed: ${result.outDir} (${result.assetsBuilt.length} assets)`\n );\n}\n\nfunction splitOption(token: string): { name: string; inlineValue?: string } {\n const equalsIndex = token.indexOf('=');\n if (equalsIndex === -1) {\n return { name: token };\n }\n\n return {\n name: token.slice(0, equalsIndex),\n inlineValue: token.slice(equalsIndex + 1),\n };\n}\n\nfunction assertKnownOption(name: string): void {\n if (\n name === '--host' ||\n name === '--port' ||\n name === '--out-dir' ||\n name === '--no-watch'\n ) {\n return;\n }\n\n throw parseError(`Unknown option: ${name}`);\n}\n\nfunction assertSupportedOption(\n command: CliArgs['command'],\n name: string\n): void {\n const supported =\n (command === 'dev' &&\n (name === '--host' || name === '--port' || name === '--no-watch')) ||\n (command === 'build' && name === '--out-dir');\n\n if (!supported) {\n throw parseError(`Option ${name} is not supported for ${command}`);\n }\n}\n\nfunction parsePort(value: string): number {\n if (!/^\\d+$/.test(value)) {\n throw parseError('Port must be an integer between 0 and 65535');\n }\n\n const port = Number(value);\n if (!Number.isInteger(port) || port < 0 || port > 65535) {\n throw parseError('Port must be an integer between 0 and 65535');\n }\n\n return port;\n}\n\nfunction parseError(message: string): Error {\n return new Error(`${message}\\n\\n${USAGE}`);\n}\n"
6
6
  ],
7
- "mappings": ";;;;;;;AAGA,IAAM,QAAQ;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK;AAAA,CAAI;AAeJ,SAAS,YAAY,CAAC,MAAyB;AAAA,EACpD,MAAM,UAAU,KAAK;AAAA,EACrB,IAAI,YAAY,SAAS,YAAY,SAAS;AAAA,IAC5C,MAAM,WACJ,YAAY,YAAY,oBAAoB,oBAAoB,SAClE;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,IAAI;AAAA,EACpB,SAAS,QAAQ,EAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AAAA,IACnD,MAAM,QAAQ,KAAK;AAAA,IACnB,IAAI,CAAC,MAAM,WAAW,IAAI,GAAG;AAAA,MAC3B,MAAM,WAAW,mCAAmC,OAAO;AAAA,IAC7D;AAAA,IAEA,QAAQ,MAAM,gBAAgB,YAAY,KAAK;AAAA,IAC/C,kBAAkB,IAAI;AAAA,IACtB,sBAAsB,SAAS,IAAI;AAAA,IACnC,IAAI,QAAQ,IAAI,IAAI,GAAG;AAAA,MACrB,MAAM,WAAW,qBAAqB,MAAM;AAAA,IAC9C;AAAA,IAEA,MAAM,QAAQ,eAAe,KAAK,QAAQ;AAAA,IAC1C,IAAI,UAAU,aAAa,UAAU,MAAM,MAAM,WAAW,IAAI,GAAG;AAAA,MACjE,MAAM,WAAW,6BAA6B,MAAM;AAAA,IACtD;AAAA,IACA,IAAI,gBAAgB,WAAW;AAAA,MAC7B,SAAS;AAAA,IACX;AAAA,IACA,QAAQ,IAAI,MAAM,KAAK;AAAA,EACzB;AAAA,EAEA,IAAI,YAAY,OAAO;AAAA,IACrB,MAAM,OAAO,QAAQ,IAAI,QAAQ;AAAA,IACjC,OAAO;AAAA,MACL;AAAA,SACI,QAAQ,IAAI,QAAQ,IAAI,EAAE,MAAM,QAAQ,IAAI,QAAQ,EAAE,IAAI,CAAC;AAAA,SAC3D,SAAS,YAAY,CAAC,IAAI,EAAE,MAAM,UAAU,IAAI,EAAE;AAAA,IACxD;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,OACI,QAAQ,IAAI,WAAW,IAAI,EAAE,QAAQ,QAAQ,IAAI,WAAW,EAAE,IAAI,CAAC;AAAA,EACzE;AAAA;AAGF,eAAsB,MAAM,CAC1B,OAAiB,QAAQ,KAAK,MAAM,CAAC,GACtB;AAAA,EACf,MAAM,OAAO,aAAa,IAAI;AAAA,EAE9B,IAAI,KAAK,YAAY,OAAO;AAAA,IAC1B,MAAM,SAAS,MAAM,eAAe;AAAA,SAC9B,KAAK,SAAS,YAAY,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK;AAAA,SACjD,KAAK,SAAS,YAAY,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK;AAAA,IACvD,CAAC;AAAA,IACD,QAAQ,IACN,wCAAwC,OAAO,YAAY,OAAO,MACpE;AAAA,IACA;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAAM,MACnB,KAAK,WAAW,YAAY,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CACzD;AAAA,EACA,QAAQ,IACN,0BAA0B,OAAO,WAAW,OAAO,YAAY,gBACjE;AAAA;AAGF,SAAS,WAAW,CAAC,OAAuD;AAAA,EAC1E,MAAM,cAAc,MAAM,QAAQ,GAAG;AAAA,EACrC,IAAI,gBAAgB,IAAI;AAAA,IACtB,OAAO,EAAE,MAAM,MAAM;AAAA,EACvB;AAAA,EAEA,OAAO;AAAA,IACL,MAAM,MAAM,MAAM,GAAG,WAAW;AAAA,IAChC,aAAa,MAAM,MAAM,cAAc,CAAC;AAAA,EAC1C;AAAA;AAGF,SAAS,iBAAiB,CAAC,MAAoB;AAAA,EAC7C,IAAI,SAAS,YAAY,SAAS,YAAY,SAAS,aAAa;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,mBAAmB,MAAM;AAAA;AAG5C,SAAS,qBAAqB,CAC5B,SACA,MACM;AAAA,EACN,MAAM,YACH,YAAY,UAAU,SAAS,YAAY,SAAS,aACpD,YAAY,WAAW,SAAS;AAAA,EAEnC,IAAI,CAAC,WAAW;AAAA,IACd,MAAM,WAAW,UAAU,6BAA6B,SAAS;AAAA,EACnE;AAAA;AAGF,SAAS,SAAS,CAAC,OAAuB;AAAA,EACxC,IAAI,CAAC,QAAQ,KAAK,KAAK,GAAG;AAAA,IACxB,MAAM,WAAW,6CAA6C;AAAA,EAChE;AAAA,EAEA,MAAM,OAAO,OAAO,KAAK;AAAA,EACzB,IAAI,CAAC,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK,OAAO,OAAO;AAAA,IACvD,MAAM,WAAW,6CAA6C;AAAA,EAChE;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,UAAU,CAAC,SAAwB;AAAA,EAC1C,OAAO,IAAI,MAAM,GAAG;AAAA;AAAA,EAAc,OAAO;AAAA;",
8
- "debugId": "AB0F04E26576496764756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "64176CE47C4D4DED64756E2164756E21",
9
9
  "names": []
10
10
  }