@avijs/compiler 0.5.2 → 0.6.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.
@@ -0,0 +1,15 @@
1
+ export interface BuildProjectOptions {
2
+ /** Path to tsconfig.json. */
3
+ readonly project: string;
4
+ /** Regenerate this `avi client` file before compiling. */
5
+ readonly client?: {
6
+ readonly out: string;
7
+ readonly root?: string | undefined;
8
+ };
9
+ }
10
+ /**
11
+ * Compiles a project like `tsc`, into an emptied `outDir` so files deleted from the source do not
12
+ * linger in the output, and regenerates the client first. Returns the number of errors.
13
+ */
14
+ export declare function buildProject(options: BuildProjectOptions): number;
15
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;CAChF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAoCjE"}
package/dist/build.js ADDED
@@ -0,0 +1,53 @@
1
+ import { rmSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import ts from 'typescript';
4
+ import { readConfig } from './check.js';
5
+ import { clientWriter } from './watch.js';
6
+ /**
7
+ * Compiles a project like `tsc`, into an emptied `outDir` so files deleted from the source do not
8
+ * linger in the output, and regenerates the client first. Returns the number of errors.
9
+ */
10
+ export function buildProject(options) {
11
+ let config = readConfig(options.project);
12
+ if (config.options.outDir) {
13
+ clean(config.options.outDir, path.dirname(path.resolve(options.project)), config.fileNames);
14
+ }
15
+ let program = ts.createProgram({ rootNames: config.fileNames, options: config.options });
16
+ if (options.client && clientWriter(options.client.out, options.client.root)(program)) {
17
+ // Read the config again: the client file may be new.
18
+ config = readConfig(options.project);
19
+ program = ts.createProgram({
20
+ rootNames: config.fileNames,
21
+ options: config.options,
22
+ oldProgram: program,
23
+ });
24
+ }
25
+ const emitted = program.emit();
26
+ const diagnostics = ts.sortAndDeduplicateDiagnostics([
27
+ ...config.errors,
28
+ ...ts.getPreEmitDiagnostics(program),
29
+ ...emitted.diagnostics,
30
+ ]);
31
+ if (diagnostics.length > 0) {
32
+ const host = {
33
+ getCanonicalFileName: (file) => file,
34
+ getCurrentDirectory: () => process.cwd(),
35
+ getNewLine: () => ts.sys.newLine,
36
+ };
37
+ process.stdout.write(process.stdout.isTTY
38
+ ? ts.formatDiagnosticsWithColorAndContext(diagnostics, host)
39
+ : ts.formatDiagnostics(diagnostics, host));
40
+ }
41
+ return diagnostics.filter((d) => d.category === ts.DiagnosticCategory.Error).length;
42
+ }
43
+ /** Empties the output folder, but only one inside the project that holds none of its sources. */
44
+ function clean(outDir, projectDir, sources) {
45
+ const out = path.resolve(outDir);
46
+ const inside = path.relative(projectDir, out);
47
+ if (!inside || inside.startsWith('..') || path.isAbsolute(inside))
48
+ return;
49
+ const holdsSource = sources.some((file) => !path.relative(out, file).startsWith('..'));
50
+ if (!holdsSource)
51
+ rmSync(out, { recursive: true, force: true });
52
+ }
53
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
package/dist/check.d.ts CHANGED
@@ -8,11 +8,13 @@ export interface Diagnostic {
8
8
  readonly code: string;
9
9
  readonly message: string;
10
10
  }
11
+ export declare function formatDiagnostic(d: Diagnostic): string;
11
12
  /**
12
13
  * Type-checks every `static inject` list in a TypeScript project against its class constructor.
13
14
  * Decorated classes get this from the compiler already; this covers undecorated ones too.
14
15
  */
15
16
  export declare function checkInjectLists(project: string): Diagnostic[];
17
+ export declare function readConfig(project: string): ts.ParsedCommandLine;
16
18
  /** The project's program, and its own files (absolute paths). */
17
19
  export declare function readProgram(project: string): {
18
20
  program: ts.Program;
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAiB9D;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAWxF;AAuFD,wBAAgB,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,GAAG,EAAE,CAAC,UAAU,GAAG,SAAS,CAYvF"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAiB9D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAShE;AAED,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAIxF;AAuFD,wBAAgB,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,GAAG,EAAE,CAAC,UAAU,GAAG,SAAS,CAYvF"}
package/dist/check.js CHANGED
@@ -1,5 +1,8 @@
1
1
  import path from 'node:path';
2
2
  import ts from 'typescript';
3
+ export function formatDiagnostic(d) {
4
+ return `${d.file}:${String(d.line)}:${String(d.column)} ${d.severity} ${d.code}: ${d.message}`;
5
+ }
3
6
  /**
4
7
  * Type-checks every `static inject` list in a TypeScript project against its class constructor.
5
8
  * Decorated classes get this from the compiler already; this covers undecorated ones too.
@@ -20,8 +23,7 @@ export function checkInjectLists(project) {
20
23
  }
21
24
  return diagnostics.sort((a, b) => a.file === b.file ? a.line - b.line || a.column - b.column : a.file.localeCompare(b.file));
22
25
  }
23
- /** The project's program, and its own files (absolute paths). */
24
- export function readProgram(project) {
26
+ export function readConfig(project) {
25
27
  const config = ts.getParsedCommandLineOfConfigFile(path.resolve(project), undefined, {
26
28
  ...ts.sys,
27
29
  onUnRecoverableConfigFileDiagnostic: (diagnostic) => {
@@ -30,6 +32,11 @@ export function readProgram(project) {
30
32
  });
31
33
  if (!config)
32
34
  throw new Error(`Cannot read ${project}`);
35
+ return config;
36
+ }
37
+ /** The project's program, and its own files (absolute paths). */
38
+ export function readProgram(project) {
39
+ const config = readConfig(project);
33
40
  const program = ts.createProgram({ rootNames: config.fileNames, options: config.options });
34
41
  return { program, roots: new Set(config.fileNames.map((file) => path.resolve(file))) };
35
42
  }
package/dist/check.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAeA,wBAAsB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8CnE"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAiBA,wBAAsB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAkDnE"}
package/dist/cli.js CHANGED
@@ -1,16 +1,18 @@
1
1
  import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { parseArgs } from 'node:util';
4
- import { checkInjectLists } from './check.js';
5
- import { generateClient } from './client.js';
4
+ import { checkInjectLists, formatDiagnostic as format } from './check.js';
5
+ import { generateClient, sameContent } from './client.js';
6
6
  import { writeManifest } from './manifest.js';
7
+ import { watchProject } from './watch.js';
7
8
  const USAGE = `Usage:
8
9
  avi-compile check [--project tsconfig.json]
9
10
  Type-check every static inject list against its constructor.
10
11
  avi-compile manifest <entry.js> [--export AppModule] [--out avi.manifest.json]
11
12
  Describe the app's modules, providers and routes without starting it.
12
- avi-compile client [--project tsconfig.json] [--out src/api.gen.ts] [--root file.ts#AppModule] [--check]
13
- Generate the Api type for @avijs/client. --check fails if the file is out of date.`;
13
+ avi-compile client [--project tsconfig.json] [--out src/api.gen.ts] [--root file.ts#AppModule] [--check | --watch]
14
+ Generate the Api type for @avijs/client. --check fails if the file is out of date;
15
+ --watch updates it whenever routes change.`;
14
16
  export async function main(argv) {
15
17
  const [command, ...rest] = argv;
16
18
  const { values, positionals } = parseArgs({
@@ -22,6 +24,7 @@ export async function main(argv) {
22
24
  out: { type: 'string' },
23
25
  root: { type: 'string' },
24
26
  check: { type: 'boolean', default: false },
27
+ watch: { type: 'boolean', default: false },
25
28
  },
26
29
  });
27
30
  if (command === 'check') {
@@ -32,6 +35,9 @@ export async function main(argv) {
32
35
  console.log(`${String(errors)} error(s), ${String(diagnostics.length - errors)} warning(s) in static inject lists`);
33
36
  return errors > 0 ? 1 : 0;
34
37
  }
38
+ if (command === 'client' && values.watch) {
39
+ return watchClient(values.project, values.out ?? 'src/api.gen.ts', values.root);
40
+ }
35
41
  if (command === 'client') {
36
42
  return client(values.project, values.out ?? 'src/api.gen.ts', values.root, values.check);
37
43
  }
@@ -60,8 +66,7 @@ async function client(project, out, root, check) {
60
66
  const routes = `${String(result.routes.length)} routes`;
61
67
  if (check) {
62
68
  const current = await readFile(out, 'utf8').catch(() => undefined);
63
- // Formatters may rewrap the file; only the content counts.
64
- const same = current !== undefined && squash(current) === squash(result.source);
69
+ const same = current !== undefined && sameContent(current, result.source);
65
70
  console.log(same ? `${out} is up to date (${routes})` : `${out} is out of date: run avi client`);
66
71
  return same ? 0 : 1;
67
72
  }
@@ -70,8 +75,16 @@ async function client(project, out, root, check) {
70
75
  console.log(`Wrote ${out}: ${routes}`);
71
76
  return 0;
72
77
  }
73
- const squash = (text) => text.replace(/[\s,;]+/g, '');
74
- function format(d) {
75
- return `${d.file}:${String(d.line)}:${String(d.column)} ${d.severity} ${d.code}: ${d.message}`;
78
+ function watchClient(project, out, root) {
79
+ const watcher = watchProject({ project, emit: false, client: { out, root } });
80
+ console.log(`Watching for route changes; ${out} updates on save`);
81
+ return new Promise((resolve) => {
82
+ const stop = () => {
83
+ watcher.close();
84
+ resolve(0);
85
+ };
86
+ process.once('SIGINT', stop);
87
+ process.once('SIGTERM', stop);
88
+ });
76
89
  }
77
90
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import ts from 'typescript';
1
2
  import { type Diagnostic } from './check.js';
2
3
  export interface ClientRoute {
3
4
  readonly method: string;
@@ -25,4 +26,8 @@ export interface GenerateClientOptions {
25
26
  * and only changes when routes do.
26
27
  */
27
28
  export declare function generateClient(options: GenerateClientOptions): GeneratedClient;
29
+ /** `generateClient` on a program that is already built, such as the watcher's. */
30
+ export declare function generateFrom(program: ts.Program, roots: ReadonlySet<string>, options: Pick<GenerateClientOptions, 'out' | 'root'>): GeneratedClient;
31
+ /** Formatters may rewrap the file; only the content counts. */
32
+ export declare const sameContent: (a: string, b: string) => boolean;
28
33
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kGAAkG;IAClG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAID;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,eAAe,CAY9E"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kGAAkG;IAClG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAID;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,eAAe,CAG9E;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAC1B,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAC1B,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,KAAK,GAAG,MAAM,CAAC,GACnD,eAAe,CAUjB;AAED,+DAA+D;AAC/D,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,OAAkC,CAAC"}
package/dist/client.js CHANGED
@@ -10,9 +10,12 @@ const ROUTE_DECORATORS = new Set(['Get', 'Post', 'Put', 'Patch', 'Delete', 'Head
10
10
  */
11
11
  export function generateClient(options) {
12
12
  const { program, roots } = readProgram(options.project);
13
- const checker = program.getTypeChecker();
13
+ return generateFrom(program, roots, options);
14
+ }
15
+ /** `generateClient` on a program that is already built, such as the watcher's. */
16
+ export function generateFrom(program, roots, options) {
14
17
  const out = path.resolve(options.out);
15
- const generator = new Generator(checker, roots, out);
18
+ const generator = new Generator(program.getTypeChecker(), roots, out);
16
19
  const appRoots = options.root
17
20
  ? generator.namedRoot(program, options.root)
18
21
  : generator.findRoots(program);
@@ -20,6 +23,9 @@ export function generateClient(options) {
20
23
  generator.module(root);
21
24
  return generator.finish();
22
25
  }
26
+ /** Formatters may rewrap the file; only the content counts. */
27
+ export const sameContent = (a, b) => squash(a) === squash(b);
28
+ const squash = (text) => text.replace(/[\s,;]+/g, '');
23
29
  class Generator {
24
30
  checker;
25
31
  roots;
@@ -105,7 +111,7 @@ class Generator {
105
111
  return `import type { ${named} } from ${quote(this.#specifier(file))};`;
106
112
  });
107
113
  const lines = [
108
- '// Generated by `avi client`. Do not edit: run it again after changing routes.',
114
+ '// Generated by `avi client`; `avi dev` keeps it up to date. Do not edit.',
109
115
  ...(helpers.length > 0 ? [`import type { ${helpers.join(', ')} } from '@avijs/core';`] : []),
110
116
  ...imports,
111
117
  '',
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,EAAmB,MAAM,YAAY,CAAC;AAyBlE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAE/F;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI;QAC3B,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;QAC5C,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,QAAQ;QAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEpD,OAAO,SAAS,CAAC,MAAM,EAAE,CAAC;AAC5B,CAAC;AAQD,MAAM,SAAS;IAOM;IACA;IACA;IARV,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IACnC,YAAY,GAAiB,EAAE,CAAC;IAChC,QAAQ,GAAG,IAAI,GAAG,EAAyD,CAAC;IAC5E,QAAQ,GAAG,IAAI,GAAG,EAAW,CAAC;IAEvC,YACmB,OAAuB,EACvB,KAA0B,EAC1B,GAAW;QAFX,YAAO,GAAP,OAAO,CAAgB;QACvB,UAAK,GAAL,KAAK,CAAqB;QAC1B,QAAG,GAAH,GAAG,CAAQ;IAC3B,CAAC;IAEJ,wFAAwF;IACxF,SAAS,CAAC,OAAmB;QAC3B,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,IAAI,KAAgC,CAAC;QACrC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAC5F,KAAK,KAAK,MAAM,CAAC;YACjB,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;gBACpC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBAChF,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;oBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;oBAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,GAAG,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,YAAY,EAAE,CAAC;wBAC1E,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClB,CAAC;yBAAM,IAAI,GAAG,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;wBAC7E,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;gBACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC/B,CAAC,CAAC;YACF,KAAK,CAAC,MAAM,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CACV,KAAK,EACL,SAAS,EACT,OAAO,EACP,QAAQ,EACR,wFAAwF,CACzF,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,CAAC,OAAmB,EAAE,IAAY;QACzC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAChG,MAAM,WAAW,GAAG,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,sBAAsB,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC;YAC5F,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,UAAU,GAAG,EAAE,CAAC,qBAAqB,CAAC,WAAW,CAAC;YACtD,CAAC,CAAC,WAAW,CAAC,WAAW;YACzB,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI;gBACtD,CAAC,CAAC,WAAW,CAAC,IAAI;gBAClB,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,CAAC;IAED,wFAAwF;IACxF,MAAM,CAAC,UAAyB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO;QACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC;QAC9D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC;YAAE,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM;QACJ,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACtD,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CACpF,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5F,MAAM,OAAO,GAAG;YACd,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,gBAAgB;YACtC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,eAAe;SACrC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aACxC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aAC9E,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,KAAK,EAAE,CAAC;YAC5D,OAAO,iBAAiB,KAAK,WAAW,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEL,MAAM,KAAK,GAAG;YACZ,gFAAgF;YAChF,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,GAAG,OAAO;YACV,EAAE;YACF,wBAAwB;YACxB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;YACvE,GAAG;YACH,EAAE;SACH,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClD,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAC1F,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC3D,CAAC;IAED,cAAc,CAAC,UAAyB;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACpD,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,cAAc,EAAE,CAAC;YACtF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO,GAAG,IAAI,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,CAAC;QACD,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;YACjE,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC9C,+EAA+E;YAC/E,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;gBAAE,OAAO,SAAS,CAAC;YACpF,IAAI,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC/B,IAAI,MAAM,IAAI,EAAE,CAAC,yBAAyB,CAAC,MAAM,CAAC;oBAAE,OAAO,MAAM,CAAC;gBAClE,IAAI,CAAC,OAAO;oBAAE,OAAO,SAAS,CAAC;YACjC,CAAC;iBAAM,IAAI,EAAE,CAAC,qBAAqB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC5E,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CACV,IAAI,CAAC,aAAa,EAAE,EACpB,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,sBAAsB,IAAI,CAAC,OAAO,EAAE,sCAAsC,CAC3E,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,UAAyB,EAAE,YAAoB;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,WAAW,GACf,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC;YAC1D,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAC3B,CAAC,CAAC,SAAS,CAAC;QAEhB,IAAI,WAAW,IAAI,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YAC1E,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GACR,WAAW,IAAI,EAAE,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChG,IACE,IAAI;YACJ,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,kBAAkB,EACxD,CAAC;YACD,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC3D,IAAI,CAAC,OAAO,CACV,IAAI,CAAC,aAAa,EAAE,EACpB,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,4EAA4E,CAC7E,CAAC;gBACF,OAAO;YACT,CAAC;YACD,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,CACV,IAAI,CAAC,aAAa,EAAE,EACpB,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,0BAA0B,IAAI,CAAC,OAAO,EAAE,sCAAsC,CAC/E,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,IAAyB,EAAE,IAAY,EAAE,YAAoB;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACtD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAE5C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC/E,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvD,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC;gBAClC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACzC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjD,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,SAAS;gBACvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5E,IAAI,SAAS,KAAK,SAAS;oBAAE,SAAS;gBACtC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACvC,IAAI,CAAC,IAAI,CACP,MAAM,CAAC,WAAW,EAAE,EACpB,IAAI,EACJ,kBAAkB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,EACjE,IAAI,CACL,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB,CAChB,WAAmC,EACnC,IAAuB,EACvB,YAAoB;QAEpB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,uCAAuC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE,OAAO;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAE5C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YACzC,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7B,IACE,MAAM;gBACN,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,OAAO,EAC/C,CAAC;gBACD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,qDAAqD,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7D,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO;YACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,CACP,MAAM,EACN,IAAI,EACJ,iBAAiB,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,EAClE,OAAO,CACR,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,UAAU,CAAC,OAAmC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QACxD,IAAI,IAAI,GAA8B,KAAK,CAAC;QAC5C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3E,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;gBACnE,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACpB,CAAC;YACD,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1F,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,OAAO,EAAE,oCAAoC,CAAC,CAAC;YACtE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+FAA+F;IAC/F,mBAAmB,CAAC,IAAuB,EAAE,MAA4B;QACvE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,MAAM,GACV,OAAO,IAAI,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACxF,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,gFAAgF;QAChF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO;QAClF,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC;YAAE,OAAO;QACzC,IAAI,CAAC,OAAO,CACV,MAAM,CAAC,aAAa,EAAE,EACtB,MAAM,CAAC,IAAI,EACX,SAAS,EACT,QAAQ,EACR,4EAA4E,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CACpG,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,IAAY,EAAE,IAAY,EAAE,EAAW;QAC1D,IAAI,CAAE,YAAkC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,wBAAwB,CAAC,CAAC;YAC7F,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,GAAG,EAAE,CAAC,CAAC;YACpF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,sFAAsF;IACtF,OAAO,CAAC,IAAkD,EAAE,IAAY;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,QAAQ,GACZ,MAAM;YACN,IAAI,CAAC,OAAO;iBACT,kBAAkB,CAAC,MAAM,CAAC;iBAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,CACV,MAAM,EACN,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,UAAU,IAAI,0DAA0D,CACzE,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACvE,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YAAE,KAAK,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrF,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,QAAQ,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC1D,OAAO,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,IAAwB,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;IAChG,CAAC;IAED,cAAc,CACZ,IAAyB,EACzB,KAAgC;QAEhC,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC;YAClC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC/C,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAC,SAAS,CAAC;YACjD,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,SAAS,CAAC,MAAkC,EAAE,IAAY;QACxD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACzC,IAAI,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC1E,OAAO,QAAQ,CAAC,WAAW,CAAC;YAC9B,CAAC;YACD,IAAI,EAAE,CAAC,6BAA6B,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC9E,OAAO,QAAQ,CAAC,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,eAAe,CAAC,MAAkC,EAAE,IAAY;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,CAAC;IAED,cAAc,CAAC,MAAkC,EAAE,IAAY;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,yBAAyB,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YACtC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,IAAI,qBAAqB,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qDAAqD;IACrD,QAAQ,CAAC,UAAyB;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,KAAK,IAAI,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;QAC7E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,qDAAqD;IACrD,aAAa,CAAC,UAAyB;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC9C,IACE,WAAW;gBACX,EAAE,CAAC,qBAAqB,CAAC,WAAW,CAAC;gBACrC,WAAW,CAAC,WAAW;gBACvB,CAAC,EAAE,CAAC,oBAAoB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EACjE,CAAC;gBACD,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,EAAW,EAAE,GAAW;QAC/B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB,GAAG,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,cAAc,CAAC,IAAmB;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,YAAY,CAAC,MAAiB;QAC5B,MAAM,MAAM,GACV,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACvF,OAAO,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,WAAW,CAAC,IAAmB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,MAAM,MAAM,GACV,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACvF,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,SAAS,CAAC,IAAmB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC;IACtD,CAAC;IAED,UAAU,CAAC,MAAqB;QAC9B,OAAO,CAAC,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,CACL,MAAiC,EACjC,EAAuB,EACvB,QAAgC,EAChC,IAAY,EACZ,OAAe;QAEf,MAAM,QAAQ,GACZ,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,6BAA6B,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE;YAC5B,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;YAC/B,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC;YACtC,QAAQ;YACR,IAAI;YACJ,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED,8FAA8F;AAC9F,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;AAC/E,CAAC;AAED,MAAM,OAAO,GAA2B;IACtC,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,SAAS;CACpB,CAAC;AAEF,qCAAqC;AACrC,SAAS,QAAQ,CAAC,MAAc,EAAE,SAAiB;IACjD,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAClF,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,4 +4,8 @@ export { main } from './cli.js';
4
4
  export { serializeManifest, writeManifest } from './manifest.js';
5
5
  export { generateClient } from './client.js';
6
6
  export type { ClientRoute, GenerateClientOptions, GeneratedClient } from './client.js';
7
+ export { watchProject } from './watch.js';
8
+ export type { ProjectWatcher, WatchProjectOptions } from './watch.js';
9
+ export { buildProject } from './build.js';
10
+ export type { BuildProjectOptions } from './build.js';
7
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -2,4 +2,6 @@ export { checkInjectLists } from './check.js';
2
2
  export { main } from './cli.js';
3
3
  export { serializeManifest, writeManifest } from './manifest.js';
4
4
  export { generateClient } from './client.js';
5
+ export { watchProject } from './watch.js';
6
+ export { buildProject } from './build.js';
5
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,24 @@
1
+ import ts from 'typescript';
2
+ export interface WatchProjectOptions {
3
+ /** Path to tsconfig.json. */
4
+ readonly project: string;
5
+ /** Emit JavaScript and report type errors, like `tsc --watch`. Default true. */
6
+ readonly emit?: boolean;
7
+ /** Regenerate this `avi client` file after every build, writing it only when routes changed. */
8
+ readonly client?: {
9
+ readonly out: string;
10
+ readonly root?: string | undefined;
11
+ };
12
+ /** Called after every build with its type error count. */
13
+ readonly onBuild?: (errors: number) => void;
14
+ }
15
+ export interface ProjectWatcher {
16
+ close(): void;
17
+ }
18
+ /**
19
+ * Watches a TypeScript project, like `tsc --watch`, and keeps the generated client in step with the
20
+ * routes. The client is generated from the same incremental program, so nothing is parsed twice.
21
+ */
22
+ export declare function watchProject(options: WatchProjectOptions): ProjectWatcher;
23
+ export declare function clientWriter(out: string, root: string | undefined): (program: ts.Program) => boolean;
24
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,YAAY,CAAC;AAI5B,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,gGAAgG;IAChG,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAC/E,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc,CAiCzE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,IAIxD,SAAS,EAAE,CAAC,OAAO,KAAG,OAAO,CAsBtC"}
package/dist/watch.js ADDED
@@ -0,0 +1,67 @@
1
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import ts from 'typescript';
4
+ import { formatDiagnostic } from './check.js';
5
+ import { generateFrom, sameContent } from './client.js';
6
+ /**
7
+ * Watches a TypeScript project, like `tsc --watch`, and keeps the generated client in step with the
8
+ * routes. The client is generated from the same incremental program, so nothing is parsed twice.
9
+ */
10
+ export function watchProject(options) {
11
+ const emit = options.emit ?? true;
12
+ const host = ts.createWatchCompilerHost(path.resolve(options.project), emit ? { preserveWatchOutput: true } : { noEmit: true }, ts.sys, ts.createEmitAndSemanticDiagnosticsBuilderProgram, undefined,
13
+ // Without emit the only output is the client's; tsc's status lines would be noise.
14
+ emit ? undefined : () => undefined);
15
+ const status = host.onWatchStatusChange?.bind(host);
16
+ host.onWatchStatusChange = (diagnostic, newLine, compilerOptions, errorCount) => {
17
+ status?.(diagnostic, newLine, compilerOptions, errorCount);
18
+ if (errorCount !== undefined)
19
+ options.onBuild?.(errorCount);
20
+ };
21
+ const client = options.client && clientWriter(options.client.out, options.client.root);
22
+ const build = host.afterProgramCreate?.bind(host);
23
+ host.afterProgramCreate = (builder) => {
24
+ const changed = client?.(builder.getProgram()) ?? false;
25
+ if (!emit)
26
+ options.onBuild?.(0);
27
+ // Writing the client starts another build at once; this one would only report its stale errors.
28
+ else if (!changed)
29
+ build?.(builder);
30
+ };
31
+ const watcher = ts.createWatchProgram(host);
32
+ return {
33
+ close: () => {
34
+ watcher.close();
35
+ },
36
+ };
37
+ }
38
+ export function clientWriter(out, root) {
39
+ const file = path.resolve(out);
40
+ let reported = '';
41
+ /** Returns whether the file was written. */
42
+ return (program) => {
43
+ const roots = new Set(program.getRootFileNames().map((name) => path.resolve(name)));
44
+ const result = generateFrom(program, roots, { out: file, root });
45
+ // Repeat diagnostics only when they change, not on every save.
46
+ const report = result.diagnostics.map(formatDiagnostic).join('\n');
47
+ if (report !== reported && report)
48
+ console.log(report);
49
+ reported = report;
50
+ if (result.diagnostics.some((d) => d.severity === 'error'))
51
+ return false;
52
+ let current;
53
+ try {
54
+ current = readFileSync(file, 'utf8');
55
+ }
56
+ catch {
57
+ current = undefined;
58
+ }
59
+ if (current !== undefined && sameContent(current, result.source))
60
+ return false;
61
+ mkdirSync(path.dirname(file), { recursive: true });
62
+ writeFileSync(file, result.source);
63
+ console.log(`${out} updated: ${String(result.routes.length)} routes`);
64
+ return true;
65
+ };
66
+ }
67
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@avijs/compiler",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "description": "Optional build-time checks and manifests for Avi.js apps.",
5
5
  "keywords": [
6
6
  "avi",
@@ -45,13 +45,13 @@
45
45
  "access": "public"
46
46
  },
47
47
  "dependencies": {
48
- "@avijs/core": "0.5.2"
48
+ "@avijs/core": "0.6.0"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "typescript": ">=5.8"
52
52
  },
53
53
  "devDependencies": {
54
- "@avijs/client": "0.5.2",
54
+ "@avijs/client": "0.6.0",
55
55
  "valibot": "1.5.0"
56
56
  },
57
57
  "scripts": {
package/src/build.ts ADDED
@@ -0,0 +1,63 @@
1
+ import { rmSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import ts from 'typescript';
4
+ import { readConfig } from './check.js';
5
+ import { clientWriter } from './watch.js';
6
+
7
+ export interface BuildProjectOptions {
8
+ /** Path to tsconfig.json. */
9
+ readonly project: string;
10
+ /** Regenerate this `avi client` file before compiling. */
11
+ readonly client?: { readonly out: string; readonly root?: string | undefined };
12
+ }
13
+
14
+ /**
15
+ * Compiles a project like `tsc`, into an emptied `outDir` so files deleted from the source do not
16
+ * linger in the output, and regenerates the client first. Returns the number of errors.
17
+ */
18
+ export function buildProject(options: BuildProjectOptions): number {
19
+ let config = readConfig(options.project);
20
+ if (config.options.outDir) {
21
+ clean(config.options.outDir, path.dirname(path.resolve(options.project)), config.fileNames);
22
+ }
23
+
24
+ let program = ts.createProgram({ rootNames: config.fileNames, options: config.options });
25
+ if (options.client && clientWriter(options.client.out, options.client.root)(program)) {
26
+ // Read the config again: the client file may be new.
27
+ config = readConfig(options.project);
28
+ program = ts.createProgram({
29
+ rootNames: config.fileNames,
30
+ options: config.options,
31
+ oldProgram: program,
32
+ });
33
+ }
34
+
35
+ const emitted = program.emit();
36
+ const diagnostics = ts.sortAndDeduplicateDiagnostics([
37
+ ...config.errors,
38
+ ...ts.getPreEmitDiagnostics(program),
39
+ ...emitted.diagnostics,
40
+ ]);
41
+ if (diagnostics.length > 0) {
42
+ const host: ts.FormatDiagnosticsHost = {
43
+ getCanonicalFileName: (file) => file,
44
+ getCurrentDirectory: () => process.cwd(),
45
+ getNewLine: () => ts.sys.newLine,
46
+ };
47
+ process.stdout.write(
48
+ process.stdout.isTTY
49
+ ? ts.formatDiagnosticsWithColorAndContext(diagnostics, host)
50
+ : ts.formatDiagnostics(diagnostics, host),
51
+ );
52
+ }
53
+ return diagnostics.filter((d) => d.category === ts.DiagnosticCategory.Error).length;
54
+ }
55
+
56
+ /** Empties the output folder, but only one inside the project that holds none of its sources. */
57
+ function clean(outDir: string, projectDir: string, sources: readonly string[]): void {
58
+ const out = path.resolve(outDir);
59
+ const inside = path.relative(projectDir, out);
60
+ if (!inside || inside.startsWith('..') || path.isAbsolute(inside)) return;
61
+ const holdsSource = sources.some((file) => !path.relative(out, file).startsWith('..'));
62
+ if (!holdsSource) rmSync(out, { recursive: true, force: true });
63
+ }
package/src/check.ts CHANGED
@@ -11,6 +11,10 @@ export interface Diagnostic {
11
11
  readonly message: string;
12
12
  }
13
13
 
14
+ export function formatDiagnostic(d: Diagnostic): string {
15
+ return `${d.file}:${String(d.line)}:${String(d.column)} ${d.severity} ${d.code}: ${d.message}`;
16
+ }
17
+
14
18
  /**
15
19
  * Type-checks every `static inject` list in a TypeScript project against its class constructor.
16
20
  * Decorated classes get this from the compiler already; this covers undecorated ones too.
@@ -34,8 +38,7 @@ export function checkInjectLists(project: string): Diagnostic[] {
34
38
  );
35
39
  }
36
40
 
37
- /** The project's program, and its own files (absolute paths). */
38
- export function readProgram(project: string): { program: ts.Program; roots: Set<string> } {
41
+ export function readConfig(project: string): ts.ParsedCommandLine {
39
42
  const config = ts.getParsedCommandLineOfConfigFile(path.resolve(project), undefined, {
40
43
  ...ts.sys,
41
44
  onUnRecoverableConfigFileDiagnostic: (diagnostic) => {
@@ -43,7 +46,12 @@ export function readProgram(project: string): { program: ts.Program; roots: Set<
43
46
  },
44
47
  });
45
48
  if (!config) throw new Error(`Cannot read ${project}`);
49
+ return config;
50
+ }
46
51
 
52
+ /** The project's program, and its own files (absolute paths). */
53
+ export function readProgram(project: string): { program: ts.Program; roots: Set<string> } {
54
+ const config = readConfig(project);
47
55
  const program = ts.createProgram({ rootNames: config.fileNames, options: config.options });
48
56
  return { program, roots: new Set(config.fileNames.map((file) => path.resolve(file))) };
49
57
  }
package/src/cli.ts CHANGED
@@ -1,17 +1,19 @@
1
1
  import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { parseArgs } from 'node:util';
4
- import { checkInjectLists, type Diagnostic } from './check.js';
5
- import { generateClient } from './client.js';
4
+ import { checkInjectLists, formatDiagnostic as format } from './check.js';
5
+ import { generateClient, sameContent } from './client.js';
6
6
  import { writeManifest } from './manifest.js';
7
+ import { watchProject } from './watch.js';
7
8
 
8
9
  const USAGE = `Usage:
9
10
  avi-compile check [--project tsconfig.json]
10
11
  Type-check every static inject list against its constructor.
11
12
  avi-compile manifest <entry.js> [--export AppModule] [--out avi.manifest.json]
12
13
  Describe the app's modules, providers and routes without starting it.
13
- avi-compile client [--project tsconfig.json] [--out src/api.gen.ts] [--root file.ts#AppModule] [--check]
14
- Generate the Api type for @avijs/client. --check fails if the file is out of date.`;
14
+ avi-compile client [--project tsconfig.json] [--out src/api.gen.ts] [--root file.ts#AppModule] [--check | --watch]
15
+ Generate the Api type for @avijs/client. --check fails if the file is out of date;
16
+ --watch updates it whenever routes change.`;
15
17
 
16
18
  export async function main(argv: readonly string[]): Promise<number> {
17
19
  const [command, ...rest] = argv;
@@ -24,6 +26,7 @@ export async function main(argv: readonly string[]): Promise<number> {
24
26
  out: { type: 'string' },
25
27
  root: { type: 'string' },
26
28
  check: { type: 'boolean', default: false },
29
+ watch: { type: 'boolean', default: false },
27
30
  },
28
31
  });
29
32
 
@@ -37,6 +40,9 @@ export async function main(argv: readonly string[]): Promise<number> {
37
40
  return errors > 0 ? 1 : 0;
38
41
  }
39
42
 
43
+ if (command === 'client' && values.watch) {
44
+ return watchClient(values.project, values.out ?? 'src/api.gen.ts', values.root);
45
+ }
40
46
  if (command === 'client') {
41
47
  return client(values.project, values.out ?? 'src/api.gen.ts', values.root, values.check);
42
48
  }
@@ -74,8 +80,7 @@ async function client(
74
80
  const routes = `${String(result.routes.length)} routes`;
75
81
  if (check) {
76
82
  const current = await readFile(out, 'utf8').catch(() => undefined);
77
- // Formatters may rewrap the file; only the content counts.
78
- const same = current !== undefined && squash(current) === squash(result.source);
83
+ const same = current !== undefined && sameContent(current, result.source);
79
84
  console.log(
80
85
  same ? `${out} is up to date (${routes})` : `${out} is out of date: run avi client`,
81
86
  );
@@ -87,8 +92,15 @@ async function client(
87
92
  return 0;
88
93
  }
89
94
 
90
- const squash = (text: string) => text.replace(/[\s,;]+/g, '');
91
-
92
- function format(d: Diagnostic): string {
93
- return `${d.file}:${String(d.line)}:${String(d.column)} ${d.severity} ${d.code}: ${d.message}`;
95
+ function watchClient(project: string, out: string, root: string | undefined): Promise<number> {
96
+ const watcher = watchProject({ project, emit: false, client: { out, root } });
97
+ console.log(`Watching for route changes; ${out} updates on save`);
98
+ return new Promise((resolve) => {
99
+ const stop = () => {
100
+ watcher.close();
101
+ resolve(0);
102
+ };
103
+ process.once('SIGINT', stop);
104
+ process.once('SIGTERM', stop);
105
+ });
94
106
  }
package/src/client.ts CHANGED
@@ -35,9 +35,17 @@ const ROUTE_DECORATORS = new Set(['Get', 'Post', 'Put', 'Patch', 'Delete', 'Head
35
35
  */
36
36
  export function generateClient(options: GenerateClientOptions): GeneratedClient {
37
37
  const { program, roots } = readProgram(options.project);
38
- const checker = program.getTypeChecker();
38
+ return generateFrom(program, roots, options);
39
+ }
40
+
41
+ /** `generateClient` on a program that is already built, such as the watcher's. */
42
+ export function generateFrom(
43
+ program: ts.Program,
44
+ roots: ReadonlySet<string>,
45
+ options: Pick<GenerateClientOptions, 'out' | 'root'>,
46
+ ): GeneratedClient {
39
47
  const out = path.resolve(options.out);
40
- const generator = new Generator(checker, roots, out);
48
+ const generator = new Generator(program.getTypeChecker(), roots, out);
41
49
 
42
50
  const appRoots = options.root
43
51
  ? generator.namedRoot(program, options.root)
@@ -47,6 +55,10 @@ export function generateClient(options: GenerateClientOptions): GeneratedClient
47
55
  return generator.finish();
48
56
  }
49
57
 
58
+ /** Formatters may rewrap the file; only the content counts. */
59
+ export const sameContent = (a: string, b: string): boolean => squash(a) === squash(b);
60
+ const squash = (text: string) => text.replace(/[\s,;]+/g, '');
61
+
50
62
  interface Found {
51
63
  readonly method: string;
52
64
  readonly path: string;
@@ -145,7 +157,7 @@ class Generator {
145
157
  });
146
158
 
147
159
  const lines = [
148
- '// Generated by `avi client`. Do not edit: run it again after changing routes.',
160
+ '// Generated by `avi client`; `avi dev` keeps it up to date. Do not edit.',
149
161
  ...(helpers.length > 0 ? [`import type { ${helpers.join(', ')} } from '@avijs/core';`] : []),
150
162
  ...imports,
151
163
  '',
package/src/index.ts CHANGED
@@ -4,3 +4,7 @@ export { main } from './cli.js';
4
4
  export { serializeManifest, writeManifest } from './manifest.js';
5
5
  export { generateClient } from './client.js';
6
6
  export type { ClientRoute, GenerateClientOptions, GeneratedClient } from './client.js';
7
+ export { watchProject } from './watch.js';
8
+ export type { ProjectWatcher, WatchProjectOptions } from './watch.js';
9
+ export { buildProject } from './build.js';
10
+ export type { BuildProjectOptions } from './build.js';
package/src/watch.ts ADDED
@@ -0,0 +1,87 @@
1
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import ts from 'typescript';
4
+ import { formatDiagnostic } from './check.js';
5
+ import { generateFrom, sameContent } from './client.js';
6
+
7
+ export interface WatchProjectOptions {
8
+ /** Path to tsconfig.json. */
9
+ readonly project: string;
10
+ /** Emit JavaScript and report type errors, like `tsc --watch`. Default true. */
11
+ readonly emit?: boolean;
12
+ /** Regenerate this `avi client` file after every build, writing it only when routes changed. */
13
+ readonly client?: { readonly out: string; readonly root?: string | undefined };
14
+ /** Called after every build with its type error count. */
15
+ readonly onBuild?: (errors: number) => void;
16
+ }
17
+
18
+ export interface ProjectWatcher {
19
+ close(): void;
20
+ }
21
+
22
+ /**
23
+ * Watches a TypeScript project, like `tsc --watch`, and keeps the generated client in step with the
24
+ * routes. The client is generated from the same incremental program, so nothing is parsed twice.
25
+ */
26
+ export function watchProject(options: WatchProjectOptions): ProjectWatcher {
27
+ const emit = options.emit ?? true;
28
+ const host = ts.createWatchCompilerHost(
29
+ path.resolve(options.project),
30
+ emit ? { preserveWatchOutput: true } : { noEmit: true },
31
+ ts.sys,
32
+ ts.createEmitAndSemanticDiagnosticsBuilderProgram,
33
+ undefined,
34
+ // Without emit the only output is the client's; tsc's status lines would be noise.
35
+ emit ? undefined : () => undefined,
36
+ );
37
+
38
+ const status = host.onWatchStatusChange?.bind(host);
39
+ host.onWatchStatusChange = (diagnostic, newLine, compilerOptions, errorCount) => {
40
+ status?.(diagnostic, newLine, compilerOptions, errorCount);
41
+ if (errorCount !== undefined) options.onBuild?.(errorCount);
42
+ };
43
+
44
+ const client = options.client && clientWriter(options.client.out, options.client.root);
45
+ const build = host.afterProgramCreate?.bind(host);
46
+ host.afterProgramCreate = (builder) => {
47
+ const changed = client?.(builder.getProgram()) ?? false;
48
+ if (!emit) options.onBuild?.(0);
49
+ // Writing the client starts another build at once; this one would only report its stale errors.
50
+ else if (!changed) build?.(builder);
51
+ };
52
+
53
+ const watcher = ts.createWatchProgram(host);
54
+ return {
55
+ close: () => {
56
+ watcher.close();
57
+ },
58
+ };
59
+ }
60
+
61
+ export function clientWriter(out: string, root: string | undefined) {
62
+ const file = path.resolve(out);
63
+ let reported = '';
64
+ /** Returns whether the file was written. */
65
+ return (program: ts.Program): boolean => {
66
+ const roots = new Set(program.getRootFileNames().map((name) => path.resolve(name)));
67
+ const result = generateFrom(program, roots, { out: file, root });
68
+
69
+ // Repeat diagnostics only when they change, not on every save.
70
+ const report = result.diagnostics.map(formatDiagnostic).join('\n');
71
+ if (report !== reported && report) console.log(report);
72
+ reported = report;
73
+ if (result.diagnostics.some((d) => d.severity === 'error')) return false;
74
+
75
+ let current: string | undefined;
76
+ try {
77
+ current = readFileSync(file, 'utf8');
78
+ } catch {
79
+ current = undefined;
80
+ }
81
+ if (current !== undefined && sameContent(current, result.source)) return false;
82
+ mkdirSync(path.dirname(file), { recursive: true });
83
+ writeFileSync(file, result.source);
84
+ console.log(`${out} updated: ${String(result.routes.length)} routes`);
85
+ return true;
86
+ };
87
+ }