@spine-event-engine/proto-tools 2.0.0-snapshot.2

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.
Files changed (73) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +102 -0
  3. package/REFERENCE.md +80 -0
  4. package/bin/spine-proto.mjs +2 -0
  5. package/dist/src/cli/spine-proto-bootstrap.d.ts +4 -0
  6. package/dist/src/cli/spine-proto-bootstrap.d.ts.map +1 -0
  7. package/dist/src/cli/spine-proto-bootstrap.js +52 -0
  8. package/dist/src/cli/spine-proto-bootstrap.js.map +1 -0
  9. package/dist/src/cli/spine-proto.d.ts +3 -0
  10. package/dist/src/cli/spine-proto.d.ts.map +1 -0
  11. package/dist/src/cli/spine-proto.js +32 -0
  12. package/dist/src/cli/spine-proto.js.map +1 -0
  13. package/dist/src/generation/authored-interface-provider.d.ts +28 -0
  14. package/dist/src/generation/authored-interface-provider.d.ts.map +1 -0
  15. package/dist/src/generation/authored-interface-provider.js +244 -0
  16. package/dist/src/generation/authored-interface-provider.js.map +1 -0
  17. package/dist/src/generation/generated-source-policy.d.ts +21 -0
  18. package/dist/src/generation/generated-source-policy.d.ts.map +1 -0
  19. package/dist/src/generation/generated-source-policy.js +126 -0
  20. package/dist/src/generation/generated-source-policy.js.map +1 -0
  21. package/dist/src/generation/generation-reuse.mjs +84 -0
  22. package/dist/src/generation/generator.d.ts +195 -0
  23. package/dist/src/generation/generator.d.ts.map +1 -0
  24. package/dist/src/generation/generator.js +566 -0
  25. package/dist/src/generation/generator.js.map +1 -0
  26. package/dist/src/generation/handler-generator.d.ts +7 -0
  27. package/dist/src/generation/handler-generator.d.ts.map +1 -0
  28. package/dist/src/generation/handler-generator.js +55 -0
  29. package/dist/src/generation/handler-generator.js.map +1 -0
  30. package/dist/src/generation/interface-generator.d.ts +21 -0
  31. package/dist/src/generation/interface-generator.d.ts.map +1 -0
  32. package/dist/src/generation/interface-generator.js +277 -0
  33. package/dist/src/generation/interface-generator.js.map +1 -0
  34. package/dist/src/generation/interface-provider.d.ts +30 -0
  35. package/dist/src/generation/interface-provider.d.ts.map +1 -0
  36. package/dist/src/generation/interface-provider.js +15 -0
  37. package/dist/src/generation/interface-provider.js.map +1 -0
  38. package/dist/src/generation/rejection-generator.d.ts +9 -0
  39. package/dist/src/generation/rejection-generator.d.ts.map +1 -0
  40. package/dist/src/generation/rejection-generator.js +62 -0
  41. package/dist/src/generation/rejection-generator.js.map +1 -0
  42. package/dist/src/generation/source-view.d.ts +103 -0
  43. package/dist/src/generation/source-view.d.ts.map +1 -0
  44. package/dist/src/generation/source-view.js +298 -0
  45. package/dist/src/generation/source-view.js.map +1 -0
  46. package/dist/src/index.d.ts +139 -0
  47. package/dist/src/index.d.ts.map +1 -0
  48. package/dist/src/index.js +546 -0
  49. package/dist/src/index.js.map +1 -0
  50. package/dist/src/io/atomic-manifest.d.ts +32 -0
  51. package/dist/src/io/atomic-manifest.d.ts.map +1 -0
  52. package/dist/src/io/atomic-manifest.js +56 -0
  53. package/dist/src/io/atomic-manifest.js.map +1 -0
  54. package/dist/src/io/manifest-reader.d.ts +8 -0
  55. package/dist/src/io/manifest-reader.d.ts.map +1 -0
  56. package/dist/src/io/manifest-reader.js +19 -0
  57. package/dist/src/io/manifest-reader.js.map +1 -0
  58. package/dist/src/model/model-graph.d.ts +68 -0
  59. package/dist/src/model/model-graph.d.ts.map +1 -0
  60. package/dist/src/model/model-graph.js +220 -0
  61. package/dist/src/model/model-graph.js.map +1 -0
  62. package/dist/src/model/npm-package-name.d.ts +7 -0
  63. package/dist/src/model/npm-package-name.d.ts.map +1 -0
  64. package/dist/src/model/npm-package-name.js +33 -0
  65. package/dist/src/model/npm-package-name.js.map +1 -0
  66. package/dist/src/model/registry-dependency.d.ts +10 -0
  67. package/dist/src/model/registry-dependency.d.ts.map +1 -0
  68. package/dist/src/model/registry-dependency.js +66 -0
  69. package/dist/src/model/registry-dependency.js.map +1 -0
  70. package/dist/tsconfig.tsbuildinfo +1 -0
  71. package/package.json +51 -0
  72. package/scripts/clean-dist.mjs +7 -0
  73. package/scripts/copy-runtime-modules.mjs +23 -0
@@ -0,0 +1,566 @@
1
+ /*
2
+ * Copyright 2026, CodeMatters. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5
+ * in compliance with the License. You may obtain a copy of the License at
6
+ *
7
+ * https://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
10
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11
+ * or implied. See the License for the specific language governing permissions and limitations under
12
+ * the License.
13
+ */
14
+ import { closeSync, copyFileSync, existsSync, fstatSync, lstatSync, mkdirSync, mkdtempSync, openSync, readFileSync, readdirSync, renameSync, rmSync, unlinkSync, writeFileSync, } from "node:fs";
15
+ import { constants } from "node:fs";
16
+ import { createRequire } from "node:module";
17
+ import { basename, dirname, join, relative, resolve } from "node:path";
18
+ import { fileURLToPath } from "node:url";
19
+ import { spawnSync } from "node:child_process";
20
+ import { ProtoConfig, ProtoManifest } from "../index.js";
21
+ import { generationMarkerFile, reusableGenerationId } from "./generation-reuse.mjs";
22
+ import { readManifestAt } from "../io/manifest-reader.js";
23
+ import { ModelGraph } from "../model/model-graph.js";
24
+ import { ManifestFile } from "../io/atomic-manifest.js";
25
+ import { generatedSource, normalizeGeneratedTree } from "./generated-source-policy.js";
26
+ import { assertSourceViewCurrent, modelSourceView, writeViewRecord } from "./source-view.js";
27
+ const bufTimeoutMs = 300_000;
28
+ const bufMaxBuffer = 1_048_576;
29
+ function snapshotRegularClaim(path) {
30
+ let descriptor;
31
+ try {
32
+ descriptor = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
33
+ }
34
+ catch {
35
+ throw new Error("generation claim is not a regular file");
36
+ }
37
+ try {
38
+ const stats = fstatSync(descriptor);
39
+ if (!stats.isFile())
40
+ throw new Error("generation claim is not a regular file");
41
+ return {
42
+ content: readFileSync(descriptor, "utf8"),
43
+ identity: `${String(stats.dev)}:${String(stats.ino)}`,
44
+ };
45
+ }
46
+ finally {
47
+ closeSync(descriptor);
48
+ }
49
+ }
50
+ function readRegularClaim(path) {
51
+ return snapshotRegularClaim(path).content;
52
+ }
53
+ function claimQuarantine(path) {
54
+ return join(dirname(path), `${basename(path)}.quarantine-${crypto.randomUUID()}`);
55
+ }
56
+ const defaultLockOperations = {
57
+ create: (path, content) => {
58
+ writeFileSync(path, content, { flag: "wx" });
59
+ },
60
+ list: (directory) => readdirSync(directory),
61
+ read: readRegularClaim,
62
+ snapshot: snapshotRegularClaim,
63
+ inspect: (path) => {
64
+ const entry = lstatSync(path);
65
+ if (entry.isSymbolicLink())
66
+ return "symlink";
67
+ return entry.isFile() ? "regular" : "other";
68
+ },
69
+ remove: (path) => {
70
+ unlinkSync(path);
71
+ },
72
+ move: renameSync,
73
+ liveness: (pid) => protoGeneration.claimLiveness(pid),
74
+ };
75
+ function completeLockOperations(operations) {
76
+ return { ...defaultLockOperations, ...operations };
77
+ }
78
+ function removeSnapshotClaim(operations, path, snapshot) {
79
+ const retired = claimQuarantine(path);
80
+ operations.move(path, retired);
81
+ const retiredSnapshot = operations.snapshot(retired);
82
+ if (retiredSnapshot.identity !== snapshot.identity)
83
+ throw new Error("generation claim ownership changed");
84
+ operations.remove(retired);
85
+ }
86
+ /**
87
+ * Reports Proto artifact generation failures.
88
+ */
89
+ const ProtoGenerationErrors = Object.freeze({
90
+ fail(owner, message) {
91
+ throw new Error(`spine-proto: ${owner}: ${message}`);
92
+ },
93
+ });
94
+ /**
95
+ * Generates and composes deterministic Protobuf package artifacts.
96
+ */
97
+ const protoGeneration = Object.freeze({
98
+ // prettier-ignore
99
+ /**
100
+ * Builds a model package's owned Protobuf-ES sources and module descriptor.
101
+ *
102
+ * @param packageRoot The root of the model package to generate.
103
+ * @param operations Optional bounded filesystem and process seams for tests.
104
+ */
105
+ generate(packageRoot, operations = {}) {
106
+ const config = ProtoConfig.read(packageRoot);
107
+ if (config.mode !== "model")
108
+ ProtoGenerationErrors.fail(packageRoot, "generate requires model mode");
109
+ const lock = protoGeneration.acquireLock(packageRoot, config.packageName, operations.lockOperations);
110
+ let primaryError;
111
+ try {
112
+ let generationId = crypto.randomUUID();
113
+ let manifest = ProtoManifest.create(packageRoot, undefined, generationId);
114
+ const graph = ModelGraph.resolve(packageRoot, config.dependencies);
115
+ const target = join(packageRoot, config.generatedRoot);
116
+ mkdirSync(dirname(target), { recursive: true });
117
+ const stage = mkdtempSync(join(dirname(target), `.${basename(target)}.stage-`));
118
+ const moduleRoot = join(stage, "module");
119
+ const output = join(moduleRoot, "output");
120
+ try {
121
+ const sourceView = modelSourceView(operations.livePackageRoot ?? packageRoot, config.generatedRoot, output);
122
+ protoGeneration.copyOwnedSources(packageRoot, config.protoRoot, moduleRoot, manifest.protoFiles);
123
+ for (const model of graph.models)
124
+ protoGeneration.copyDependencySources(model, moduleRoot);
125
+ (operations.runBuf ?? protoGeneration.runBuf)(moduleRoot, output, manifest.protoFiles, config.packageName, operations.runProcess);
126
+ const runInterfacePhase = operations.runInterfacePhase ??
127
+ (operations.runBuf === undefined ? protoGeneration.runInterfacePhase : () => undefined);
128
+ runInterfacePhase(moduleRoot, output, manifest.protoFiles, config.packageName, sourceView, operations.runProcess);
129
+ protoGeneration.assertRejectionRuntimeDependency(packageRoot, config.packageName, output);
130
+ (operations.rewriteImports ?? protoGeneration.rewriteDependencyImports)(output, graph.protoOwners, config.packageName, new Set(config.dependencies));
131
+ (operations.writeModule ?? protoGeneration.writeModule)(output, config.moduleExport, config.packageName, graph.models.filter((model) => config.dependencies.includes(model.name)));
132
+ normalizeGeneratedTree(output, manifest.protoFiles);
133
+ writeFileSync(join(output, generationMarkerFile), `${JSON.stringify({ generationId })}\n`, "utf8");
134
+ const reusedGenerationId = protoGeneration.reusableGenerationId(packageRoot, target, output, manifest);
135
+ if (reusedGenerationId !== undefined) {
136
+ generationId = reusedGenerationId;
137
+ manifest = ProtoManifest.create(packageRoot, undefined, generationId);
138
+ writeFileSync(join(output, generationMarkerFile), `${JSON.stringify({ generationId })}\n`, "utf8");
139
+ }
140
+ assertSourceViewCurrent(sourceView);
141
+ if (operations.livePackageRoot !== undefined)
142
+ writeViewRecord(packageRoot, sourceView);
143
+ protoGeneration.publish(packageRoot, config.generatedRoot, output, manifest, operations.rename, operations.manifestOperations);
144
+ }
145
+ finally {
146
+ rmSync(stage, { recursive: true, force: true });
147
+ }
148
+ }
149
+ catch (error) {
150
+ primaryError = error;
151
+ }
152
+ try {
153
+ protoGeneration.releaseLock(lock, config.packageName, operations.lockOperations);
154
+ }
155
+ catch (error) {
156
+ if (primaryError === undefined)
157
+ throw error;
158
+ }
159
+ if (primaryError !== undefined) {
160
+ if (primaryError instanceof Error)
161
+ throw primaryError;
162
+ throw new Error(`spine-proto: ${config.packageName}: generation failed`, {
163
+ cause: primaryError,
164
+ });
165
+ }
166
+ },
167
+ acquireLock(packageRoot, packageName, operations = {}) {
168
+ const token = crypto.randomUUID();
169
+ const lock = join(packageRoot, `.spine-proto-generate.lock.${token}`);
170
+ const lockOperations = completeLockOperations(operations);
171
+ try {
172
+ lockOperations.create(lock, JSON.stringify({ pid: process.pid, token }));
173
+ }
174
+ catch {
175
+ ProtoGenerationErrors.fail(packageName, "cannot acquire generation claim");
176
+ }
177
+ try {
178
+ for (let scan = 0; scan < 2; scan += 1) {
179
+ const claims = lockOperations
180
+ .list(packageRoot)
181
+ .filter((name) => name.startsWith(".spine-proto-generate.lock."))
182
+ .sort();
183
+ if (claims.length > 1000)
184
+ ProtoGenerationErrors.fail(packageName, "generation claim count exceeds 1000");
185
+ for (const name of claims) {
186
+ const path = join(packageRoot, name);
187
+ if (path === lock)
188
+ continue;
189
+ const quarantine = claimQuarantine(path);
190
+ try {
191
+ lockOperations.move(path, quarantine);
192
+ const snapshot = lockOperations.snapshot(quarantine);
193
+ const owner = JSON.parse(snapshot.content);
194
+ if (typeof owner.pid !== "number" || owner.pid <= 0)
195
+ throw new Error();
196
+ if (lockOperations.liveness(owner.pid) !== "dead")
197
+ ProtoGenerationErrors.fail(packageName, "generation already in progress for this package");
198
+ removeSnapshotClaim(lockOperations, quarantine, snapshot);
199
+ }
200
+ catch (error) {
201
+ if (error instanceof Error && error.message.startsWith("spine-proto:"))
202
+ throw error;
203
+ if (error instanceof Error &&
204
+ error.message === "generation claim is not a regular file")
205
+ ProtoGenerationErrors.fail(packageName, error.message);
206
+ ProtoGenerationErrors.fail(packageName, "generation claim has invalid owner metadata");
207
+ }
208
+ }
209
+ }
210
+ }
211
+ catch (error) {
212
+ try {
213
+ protoGeneration.releaseLock({ path: lock, token }, packageName, lockOperations);
214
+ }
215
+ catch {
216
+ // Preserve the primary claim-admission failure.
217
+ }
218
+ throw error;
219
+ }
220
+ return { path: lock, token };
221
+ },
222
+ releaseLock(lock, packageName, operations = {}) {
223
+ const lockOperations = completeLockOperations(operations);
224
+ const quarantine = claimQuarantine(lock.path);
225
+ try {
226
+ lockOperations.move(lock.path, quarantine);
227
+ const snapshot = lockOperations.snapshot(quarantine);
228
+ const owner = JSON.parse(snapshot.content);
229
+ if (owner.token !== lock.token)
230
+ ProtoGenerationErrors.fail(packageName, "generation lock ownership changed");
231
+ removeSnapshotClaim(lockOperations, quarantine, snapshot);
232
+ }
233
+ catch {
234
+ ProtoGenerationErrors.fail(packageName, "cannot clean up generation lock");
235
+ }
236
+ },
237
+ /**
238
+ * Returns a signal-zero probe result without treating unknown process errors as death.
239
+ *
240
+ * @param pid The process identifier to probe.
241
+ * @param probe The signal-zero probe to run.
242
+ * @returns Whether the claim owner is alive, dead, or indeterminate.
243
+ */
244
+ claimLiveness(pid, probe = (candidate) => process.kill(candidate, 0)) {
245
+ try {
246
+ probe(pid);
247
+ return "alive";
248
+ }
249
+ catch (error) {
250
+ if (error.code === "ESRCH")
251
+ return "dead";
252
+ return "indeterminate";
253
+ }
254
+ },
255
+ /**
256
+ * Writes the explicit, deterministic application model registry.
257
+ *
258
+ * @param packageRoot The root of the application package to compose.
259
+ * @param operations Optional bounded manifest publication seams for tests.
260
+ */
261
+ compose(packageRoot, operations = {}) {
262
+ const config = ProtoConfig.read(packageRoot);
263
+ if (config.mode !== "application")
264
+ ProtoGenerationErrors.fail(packageRoot, "compose requires application mode");
265
+ const imports = ModelGraph.resolve(packageRoot, config.modelPackages)
266
+ .models.filter((model) => config.modelPackages.includes(model.name))
267
+ .slice()
268
+ .sort((left, right) => left.name.localeCompare(right.name));
269
+ const aliases = imports.map((_, index) => `model${String(index)}`);
270
+ const sources = imports.flatMap((model) => ProtoManifest.read(model.root).protoFiles);
271
+ const source = generatedSource([
272
+ 'import { TypeRegistry } from "@spine-event-engine/core";',
273
+ ...imports.map((model, index) => `import { ${model.moduleExport} as ${aliases[index] ?? "model"} } from ${JSON.stringify(model.name)};`),
274
+ "",
275
+ "/**",
276
+ " * The application type registry composed from every declared model package.",
277
+ " */",
278
+ `export const typeRegistry: TypeRegistry = TypeRegistry.from(${aliases.join(", ")});`,
279
+ "",
280
+ ].join("\n"), sources);
281
+ const target = join(packageRoot, config.registryOutput);
282
+ mkdirSync(dirname(target), { recursive: true });
283
+ ManifestFile.writeAtomically(target, source, operations.registryOperations);
284
+ },
285
+ copyOwnedSources(packageRoot, protoRoot, destination, protoFiles) {
286
+ for (const protoFile of protoFiles) {
287
+ const source = join(packageRoot, protoRoot, protoFile);
288
+ protoGeneration.assertRegularFile(source, packageRoot);
289
+ const target = join(destination, protoFile);
290
+ mkdirSync(dirname(target), { recursive: true });
291
+ copyFileSync(source, target);
292
+ }
293
+ },
294
+ assertRejectionRuntimeDependency(packageRoot, packageName, output) {
295
+ if (!protoGeneration.files(output).some((file) => file.endsWith("rejections.ts")))
296
+ return;
297
+ let dependencies;
298
+ try {
299
+ const packageJson = JSON.parse(readFileSync(join(packageRoot, "package.json"), "utf8"));
300
+ dependencies =
301
+ packageJson !== null && typeof packageJson === "object"
302
+ ? packageJson.dependencies
303
+ : undefined;
304
+ }
305
+ catch {
306
+ ProtoGenerationErrors.fail(packageName, "cannot read package runtime dependencies");
307
+ }
308
+ if (dependencies === null ||
309
+ typeof dependencies !== "object" ||
310
+ typeof dependencies["@spine-event-engine/core"] !== "string")
311
+ ProtoGenerationErrors.fail(packageName, "rejection generation requires direct runtime dependency @spine-event-engine/core");
312
+ },
313
+ copyDependencySources(model, destination) {
314
+ const manifestPath = protoGeneration.resolveExportedManifest(model.root, model.name);
315
+ for (const protoPath of readManifestAt(model.root, manifestPath).protoFiles) {
316
+ const source = protoGeneration.resolveExportedProto(model.root, model.name, protoPath);
317
+ const target = join(destination, protoPath);
318
+ mkdirSync(dirname(target), { recursive: true });
319
+ protoGeneration.assertRegularFile(source, model.name);
320
+ copyFileSync(source, target);
321
+ }
322
+ },
323
+ resolveExportedManifest(packageRoot, packageName) {
324
+ try {
325
+ return createRequire(join(packageRoot, "package.json")).resolve(`${packageName}/spine-proto-manifest.json`);
326
+ }
327
+ catch {
328
+ return ProtoGenerationErrors.fail(packageName, "cannot resolve exported manifest");
329
+ }
330
+ },
331
+ resolveExportedProto(requesterRoot, packageName, protoPath) {
332
+ try {
333
+ return createRequire(join(requesterRoot, "package.json")).resolve(`${packageName}/proto/${protoPath}`);
334
+ }
335
+ catch {
336
+ return ProtoGenerationErrors.fail(packageName, `cannot resolve exported Proto source ${protoPath}`);
337
+ }
338
+ },
339
+ assertRegularFile(path, owner) {
340
+ try {
341
+ const entry = lstatSync(path);
342
+ if (entry.isSymbolicLink() || !entry.isFile())
343
+ throw new Error();
344
+ }
345
+ catch {
346
+ ProtoGenerationErrors.fail(owner, "exported Proto source is missing or unsafe");
347
+ }
348
+ },
349
+ runBuf(moduleRoot, output, owned, packageName, runner = (command, arguments_, options) => spawnSync(command, arguments_, options)) {
350
+ const protocGenEs = protoGeneration.resolveTool("@bufbuild/protoc-gen-es/bin/protoc-gen-es");
351
+ const rejectionGenerator = fileURLToPath(new URL(import.meta.url.endsWith(".ts") ? "./rejection-generator.ts" : "./rejection-generator.js", import.meta.url));
352
+ writeFileSync(join(moduleRoot, "buf.yaml"), "version: v2\nmodules:\n - path: .\n", "utf8");
353
+ writeFileSync(join(moduleRoot, "buf.gen.yaml"), [
354
+ "version: v2",
355
+ "plugins:",
356
+ ` - local: ${protocGenEs}`,
357
+ " out: output",
358
+ " opt:",
359
+ " - target=ts",
360
+ " - import_extension=js",
361
+ " - local:",
362
+ ` - ${process.execPath}`,
363
+ ` - ${rejectionGenerator}`,
364
+ " out: output",
365
+ " opt:",
366
+ " - target=ts",
367
+ " - import_extension=js",
368
+ "",
369
+ ].join("\n"), "utf8");
370
+ const buf = protoGeneration.resolveTool("@bufbuild/buf/bin/buf");
371
+ const generated = runner(buf, ["generate", "--template", "buf.gen.yaml", ...owned.flatMap((file) => ["--path", file])], {
372
+ cwd: moduleRoot,
373
+ encoding: "utf8",
374
+ timeout: bufTimeoutMs,
375
+ maxBuffer: bufMaxBuffer,
376
+ });
377
+ protoGeneration.assertBufResult(packageName, "generation", generated);
378
+ const built = runner(buf, ["build", "--as-file-descriptor-set", "-o", "descriptor.bin"], {
379
+ cwd: moduleRoot,
380
+ encoding: "utf8",
381
+ timeout: bufTimeoutMs,
382
+ maxBuffer: bufMaxBuffer,
383
+ });
384
+ protoGeneration.assertBufResult(packageName, "validation", built);
385
+ if (!existsSync(output))
386
+ ProtoGenerationErrors.fail(packageName, "Buf generated no owned output");
387
+ },
388
+ runInterfacePhase(moduleRoot, output, owned, packageName, sourceView, runner = (command, arguments_, options) => spawnSync(command, arguments_, options)) {
389
+ writeFileSync(join(moduleRoot, ".spine-source-view.json"), `${JSON.stringify(sourceView)}\n`, "utf8");
390
+ const interfaceGenerator = fileURLToPath(new URL(import.meta.url.endsWith(".ts") ? "./interface-generator.ts" : "./interface-generator.js", import.meta.url));
391
+ writeFileSync(join(moduleRoot, "buf.interfaces.gen.yaml"), [
392
+ "version: v2",
393
+ "plugins:",
394
+ " - local:",
395
+ ` - ${process.execPath}`,
396
+ ` - ${interfaceGenerator}`,
397
+ " out: output",
398
+ " opt:",
399
+ " - target=ts",
400
+ " - import_extension=js",
401
+ "",
402
+ ].join("\n"), "utf8");
403
+ const buf = protoGeneration.resolveTool("@bufbuild/buf/bin/buf");
404
+ const generated = runner(buf, [
405
+ "generate",
406
+ "--template",
407
+ "buf.interfaces.gen.yaml",
408
+ ...owned.flatMap((file) => ["--path", file]),
409
+ ], { cwd: moduleRoot, encoding: "utf8", timeout: bufTimeoutMs, maxBuffer: bufMaxBuffer });
410
+ protoGeneration.assertBufResult(packageName, "interface generation", generated);
411
+ },
412
+ assertBufResult(packageName, phase, result) {
413
+ if (result.error !== undefined) {
414
+ if (result.error.code === "ETIMEDOUT")
415
+ ProtoGenerationErrors.fail(packageName, `Buf ${phase} timed out`);
416
+ ProtoGenerationErrors.fail(packageName, `Buf ${phase} could not start: ${result.error.message}`);
417
+ }
418
+ if (result.signal !== null)
419
+ ProtoGenerationErrors.fail(packageName, `Buf ${phase} ended by signal ${result.signal}`);
420
+ if (result.status === null)
421
+ ProtoGenerationErrors.fail(packageName, `Buf ${phase} ended without an exit status`);
422
+ if (result.status !== 0)
423
+ ProtoGenerationErrors.fail(packageName, `Buf ${phase} failed: ${(result.stderr || result.stdout).trim()}`);
424
+ },
425
+ resolveTool(specifier) {
426
+ try {
427
+ return createRequire(import.meta.url).resolve(specifier);
428
+ }
429
+ catch {
430
+ return ProtoGenerationErrors.fail("@spine-event-engine/proto-tools", `cannot resolve packaged executable ${specifier}`);
431
+ }
432
+ },
433
+ rewriteDependencyImports(output, owners, currentPackage, directDependencies) {
434
+ for (const file of protoGeneration.files(output)) {
435
+ if (!file.endsWith(".ts"))
436
+ continue;
437
+ const rewritten = readFileSync(file, "utf8").replaceAll(/from "(\.\.?\/[^" ]+_pb\.js)"/g, (whole, specifier) => {
438
+ const proto = relative(output, resolve(dirname(file), specifier))
439
+ .replace(/_pb\.js$/, ".proto")
440
+ .replaceAll("\\", "/");
441
+ const owner = owners[proto];
442
+ if (owner === undefined)
443
+ return whole;
444
+ if (owner.packageName === currentPackage)
445
+ return whole;
446
+ if (!directDependencies.has(owner.packageName))
447
+ ProtoGenerationErrors.fail(currentPackage, `generated import ${proto} is owned by transitive dependency ${owner.packageName}`);
448
+ if (owner.generatedExport.length === 0)
449
+ ProtoGenerationErrors.fail(currentPackage, `unmapped generated import ${proto}`);
450
+ return `from ${JSON.stringify(`${owner.packageName}/${owner.generatedExport}`)}`;
451
+ });
452
+ writeFileSync(file, rewritten, "utf8");
453
+ }
454
+ },
455
+ writeModule(output, exportName, packageName, dependencies) {
456
+ const generated = protoGeneration
457
+ .files(output)
458
+ .filter((file) => file.endsWith("_pb.ts"))
459
+ .sort()
460
+ .map((file, index) => ({
461
+ alias: `schemas${String(index)}`,
462
+ path: `./${relative(output, file).replaceAll("\\", "/").replace(/\.ts$/, ".js")}`,
463
+ }));
464
+ const dependencyImports = dependencies
465
+ .slice()
466
+ .sort((left, right) => left.name.localeCompare(right.name))
467
+ .map((dependency, index) => ({ ...dependency, alias: `dependency${String(index)}` }));
468
+ const sources = generated.map(({ path }) => path.replace(/^\.\//u, "").replace(/_pb\.js$/u, ".proto"));
469
+ const source = generatedSource([
470
+ 'import type { ProtoModule } from "@spine-event-engine/proto";',
471
+ 'import type { Message } from "@bufbuild/protobuf";',
472
+ 'import type { GenMessage } from "@bufbuild/protobuf/codegenv2";',
473
+ ...generated.map(({ alias, path }) => `import * as ${alias} from ${JSON.stringify(path)};`),
474
+ ...dependencyImports.map(({ name, moduleExport, alias }) => `import { ${moduleExport} as ${alias} } from ${JSON.stringify(name)};`),
475
+ "",
476
+ "const schemas = Object.freeze([",
477
+ ...generated.map(({ alias }) => [
478
+ ` ...Object.values(${alias})`,
479
+ ' .filter((value) => typeof value === "object" && value !== null &&',
480
+ ' (value as { kind?: unknown }).kind === "message")',
481
+ " .map((value) => value as unknown as GenMessage<Message>),",
482
+ ].join("\n")),
483
+ "].sort((left, right) =>",
484
+ " (left as { typeName: string }).typeName.localeCompare(",
485
+ " (right as { typeName: string }).typeName,",
486
+ " ),",
487
+ "));",
488
+ "",
489
+ `/** All Protobuf message schemas owned by \`${packageName}\`. */`,
490
+ `export const ${exportName}: ProtoModule = Object.freeze({`,
491
+ ` name: ${JSON.stringify(packageName)},`,
492
+ " schemas,",
493
+ ` dependencies: Object.freeze([${dependencyImports.map(({ alias }) => alias).join(", ")}]),`,
494
+ "});",
495
+ "",
496
+ ].join("\n"), sources);
497
+ writeFileSync(join(output, "proto-module.ts"), source, "utf8");
498
+ },
499
+ publish(packageRoot, generatedRoot, output, manifest, onRename = renameSync, manifestOperations = {}) {
500
+ const target = join(packageRoot, generatedRoot);
501
+ const backup = join(dirname(target), `.${basename(target)}.${crypto.randomUUID()}.backup`);
502
+ const manifestTarget = join(packageRoot, "spine-proto-manifest.json");
503
+ const oldManifest = existsSync(manifestTarget)
504
+ ? readFileSync(manifestTarget, "utf8")
505
+ : undefined;
506
+ let outputPublished = false;
507
+ try {
508
+ if (existsSync(target))
509
+ onRename(target, backup);
510
+ mkdirSync(dirname(target), { recursive: true });
511
+ onRename(output, target);
512
+ outputPublished = true;
513
+ ManifestFile.writeAtomically(manifestTarget, `${JSON.stringify(manifest, null, 2)}\n`, manifestOperations);
514
+ rmSync(backup, { recursive: true, force: true });
515
+ }
516
+ catch (error) {
517
+ if (outputPublished)
518
+ rmSync(target, { recursive: true, force: true });
519
+ if (existsSync(backup)) {
520
+ renameSync(backup, target);
521
+ }
522
+ if (oldManifest === undefined)
523
+ rmSync(manifestTarget, { force: true });
524
+ else
525
+ ManifestFile.writeAtomically(manifestTarget, oldManifest, manifestOperations);
526
+ throw error;
527
+ }
528
+ },
529
+ reusableGenerationId(packageRoot, target, output, manifest) {
530
+ return reusableGenerationId(join(packageRoot, "spine-proto-manifest.json"), target, manifest, output);
531
+ },
532
+ files(root) {
533
+ const output = [];
534
+ const pending = [[root, 0]];
535
+ let entries = 0;
536
+ while (pending.length > 0) {
537
+ const entry = pending.pop();
538
+ if (entry === undefined)
539
+ continue;
540
+ const [directory, depth] = entry;
541
+ if (depth > 64)
542
+ throw new Error("generated source traversal exceeds bounded inventory");
543
+ for (const name of readdirSync(directory)) {
544
+ const path = join(directory, name);
545
+ entries += 1;
546
+ if (entries > 1_000)
547
+ throw new Error("generated source traversal exceeds bounded inventory");
548
+ const status = lstatSync(path);
549
+ if (status.isSymbolicLink())
550
+ throw new Error("generated source traversal must not contain symlinks");
551
+ if (status.isDirectory())
552
+ pending.push([path, depth + 1]);
553
+ else if (status.isFile())
554
+ output.push(path);
555
+ else
556
+ throw new Error("generated source traversal must contain only regular files and directories");
557
+ }
558
+ }
559
+ return output;
560
+ },
561
+ });
562
+ /**
563
+ * Generates and composes deterministic Protobuf package artifacts.
564
+ */
565
+ export const ProtoGeneration = Object.freeze(protoGeneration);
566
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/generation/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,SAAS,EACT,YAAY,EACZ,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,UAAU,EACV,MAAM,EACN,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,YAAY,EAA+B,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAsM7F,MAAM,YAAY,GAAG,OAAO,CAAC;AAC7B,MAAM,YAAY,GAAG,SAAS,CAAC;AAwB/B,SAAS,oBAAoB,CAAC,IAAY;IACxC,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAChG,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC/E,OAAO;YACL,OAAO,EAAE,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;YACzC,QAAQ,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;SACtD,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,qBAAqB,GAAuC;IAChE,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACxB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC;IAC3C,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,oBAAoB;IAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,cAAc,EAAE;YAAE,OAAO,SAAS,CAAC;QAC7C,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9C,CAAC;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACf,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,CAAC;CACtD,CAAC;AAEF,SAAS,sBAAsB,CAC7B,UAA6C;IAE7C,OAAO,EAAE,GAAG,qBAAqB,EAAE,GAAG,UAAU,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,mBAAmB,CAC1B,UAA8C,EAC9C,IAAY,EACZ,QAAuB;IAEvB,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,eAAe,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;QAChD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,qBAAqB,GACzB,MAAM,CAAC,MAAM,CAAC;IACZ,IAAI,CAAC,KAAa,EAAE,OAAe;QACjC,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;CACF,CAAC,CAAC;AAEL;;GAEG;AACH,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,kBAAkB;IAElB;;;;;OAKG;IACH,QAAQ,CAAC,WAAmB,EAAE,aAAmC,EAAE;QACjE,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;YACzB,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,8BAA8B,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CACtC,WAAW,EACX,MAAM,CAAC,WAAW,EAClB,UAAU,CAAC,cAAc,CAC1B,CAAC;QACF,IAAI,YAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,IAAI,YAAY,GAAW,MAAM,CAAC,UAAU,EAAE,CAAC;YAC/C,IAAI,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YAC1E,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YACvD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAChF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,eAAe,CAChC,UAAU,CAAC,eAAe,IAAI,WAAW,EACzC,MAAM,CAAC,aAAa,EACpB,MAAM,CACP,CAAC;gBACF,eAAe,CAAC,gBAAgB,CAC9B,WAAW,EACX,MAAM,CAAC,SAAS,EAChB,UAAU,EACV,QAAQ,CAAC,UAAU,CACpB,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM;oBAAE,eAAe,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBAC3F,CAAC,UAAU,CAAC,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,CAC3C,UAAU,EACV,MAAM,EACN,QAAQ,CAAC,UAAU,EACnB,MAAM,CAAC,WAAW,EAClB,UAAU,CAAC,UAAU,CACtB,CAAC;gBACF,MAAM,iBAAiB,GACrB,UAAU,CAAC,iBAAiB;oBAC5B,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC1F,iBAAiB,CACf,UAAU,EACV,MAAM,EACN,QAAQ,CAAC,UAAU,EACnB,MAAM,CAAC,WAAW,EAClB,UAAU,EACV,UAAU,CAAC,UAAU,CACtB,CAAC;gBACF,eAAe,CAAC,gCAAgC,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBAC1F,CAAC,UAAU,CAAC,cAAc,IAAI,eAAe,CAAC,wBAAwB,CAAC,CACrE,MAAM,EACN,KAAK,CAAC,WAAW,EACjB,MAAM,CAAC,WAAW,EAClB,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAC7B,CAAC;gBACF,CAAC,UAAU,CAAC,WAAW,IAAI,eAAe,CAAC,WAAW,CAAC,CACrD,MAAM,EACN,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,WAAW,EAClB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CACzE,CAAC;gBACF,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACpD,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACnG,MAAM,kBAAkB,GAAG,eAAe,CAAC,oBAAoB,CAC7D,WAAW,EACX,MAAM,EACN,MAAM,EACN,QAAQ,CACT,CAAC;gBACF,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;oBACrC,YAAY,GAAG,kBAAkB,CAAC;oBAClC,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;oBACtE,aAAa,CACX,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAClC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,EACvC,MAAM,CACP,CAAC;gBACJ,CAAC;gBACD,uBAAuB,CAAC,UAAU,CAAC,CAAC;gBACpC,IAAI,UAAU,CAAC,eAAe,KAAK,SAAS;oBAC1C,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;gBAC3C,eAAe,CAAC,OAAO,CACrB,WAAW,EACX,MAAM,CAAC,aAAa,EACpB,MAAM,EACN,QAAQ,EACR,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,kBAAkB,CAC9B,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC;QACD,IAAI,CAAC;YACH,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,YAAY,KAAK,SAAS;gBAAE,MAAM,KAAK,CAAC;QAC9C,CAAC;QACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,YAAY,YAAY,KAAK;gBAAE,MAAM,YAAY,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,gBAAgB,MAAM,CAAC,WAAW,qBAAqB,EAAE;gBACvE,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,WAAW,CACT,WAAmB,EACnB,WAAmB,EACnB,aAAgD,EAAE;QAElD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,8BAA8B,KAAK,EAAE,CAAC,CAAC;QACtE,MAAM,cAAc,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC;YACH,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,cAAc;qBAC1B,IAAI,CAAC,WAAW,CAAC;qBACjB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;qBAChE,IAAI,EAAE,CAAC;gBACV,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI;oBACtB,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;gBACjF,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;oBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBACrC,IAAI,IAAI,KAAK,IAAI;wBAAE,SAAS;oBAC5B,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;oBACzC,IAAI,CAAC;wBACH,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;wBACtC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;wBACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAsB,CAAC;wBAChE,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC;4BAAE,MAAM,IAAI,KAAK,EAAE,CAAC;wBACvE,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM;4BAC/C,qBAAqB,CAAC,IAAI,CACxB,WAAW,EACX,iDAAiD,CAClD,CAAC;wBACJ,mBAAmB,CAAC,cAAc,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;oBAC5D,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;4BAAE,MAAM,KAAK,CAAC;wBACpF,IACE,KAAK,YAAY,KAAK;4BACtB,KAAK,CAAC,OAAO,KAAK,wCAAwC;4BAE1D,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;wBACzD,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,6CAA6C,CAAC,CAAC;oBACzF,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,eAAe,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;YAClF,CAAC;YAAC,MAAM,CAAC;gBACP,gDAAgD;YAClD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,WAAW,CACT,IAAoB,EACpB,WAAmB,EACnB,aAAgD,EAAE;QAElD,MAAM,cAAc,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAwB,CAAC;YAClE,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;gBAC5B,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;YAC/E,mBAAmB,CAAC,cAAc,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,aAAa,CACX,GAAW,EACX,QAAwC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAEjF,IAAI,CAAC;YACH,KAAK,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,MAAM,CAAC;YACrE,OAAO,eAAe,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,WAAmB,EAAE,aAAoC,EAAE;QACjE,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;YAC/B,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;aAClE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aACnE,KAAK,EAAE;aACP,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,eAAe,CAC5B;YACE,0DAA0D;YAC1D,GAAG,OAAO,CAAC,GAAG,CACZ,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,YAAY,KAAK,CAAC,YAAY,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CACzG;YACD,EAAE;YACF,KAAK;YACL,8EAA8E;YAC9E,KAAK;YACL,+DAA+D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACrF,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,OAAO,CACR,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;QACxD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC9E,CAAC;IAED,gBAAgB,CACd,WAAmB,EACnB,SAAiB,EACjB,WAAmB,EACnB,UAA6B;QAE7B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YACvD,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC5C,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,gCAAgC,CAAC,WAAmB,EAAE,WAAmB,EAAE,MAAc;QACvF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAAE,OAAO;QAC1F,IAAI,YAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,WAAW,GAAY,IAAI,CAAC,KAAK,CACrC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACxD,CAAC;YACF,YAAY;gBACV,WAAW,KAAK,IAAI,IAAI,OAAO,WAAW,KAAK,QAAQ;oBACrD,CAAC,CAAE,WAAuC,CAAC,YAAY;oBACvD,CAAC,CAAC,SAAS,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,0CAA0C,CAAC,CAAC;QACtF,CAAC;QACD,IACE,YAAY,KAAK,IAAI;YACrB,OAAO,YAAY,KAAK,QAAQ;YAChC,OAAQ,YAAwC,CAAC,0BAA0B,CAAC,KAAK,QAAQ;YAEzF,qBAAqB,CAAC,IAAI,CACxB,WAAW,EACX,kFAAkF,CACnF,CAAC;IACN,CAAC;IAED,qBAAqB,CACnB,KAAuD,EACvD,WAAmB;QAEnB,MAAM,YAAY,GAAG,eAAe,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACrF,KAAK,MAAM,SAAS,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,UAAU,EAAE,CAAC;YAC5E,MAAM,MAAM,GAAG,eAAe,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACvF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC5C,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACtD,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,uBAAuB,CAAC,WAAmB,EAAE,WAAmB;QAC9D,IAAI,CAAC;YACH,OAAO,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAC7D,GAAG,WAAW,4BAA4B,CAC3C,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,kCAAkC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,aAAqB,EAAE,WAAmB,EAAE,SAAiB;QAChF,IAAI,CAAC;YACH,OAAO,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAC/D,GAAG,WAAW,UAAU,SAAS,EAAE,CACpC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,qBAAqB,CAAC,IAAI,CAC/B,WAAW,EACX,wCAAwC,SAAS,EAAE,CACpD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,iBAAiB,CAAC,IAAY,EAAE,KAAa;QAC3C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBAAE,MAAM,IAAI,KAAK,EAAE,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,4CAA4C,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,MAAM,CACJ,UAAkB,EAClB,MAAc,EACd,KAAwB,EACxB,WAAmB,EACnB,SAA2B,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAC1D,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC;QAEzC,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,2CAA2C,CAAC,CAAC;QAC7F,MAAM,kBAAkB,GAAG,aAAa,CACtC,IAAI,GAAG,CACL,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,0BAA0B,EACzF,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,CACF,CAAC;QACF,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,sCAAsC,EAAE,MAAM,CAAC,CAAC;QAC5F,aAAa,CACX,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAChC;YACE,aAAa;YACb,UAAU;YACV,cAAc,WAAW,EAAE;YAC3B,iBAAiB;YACjB,UAAU;YACV,mBAAmB;YACnB,6BAA6B;YAC7B,YAAY;YACZ,WAAW,OAAO,CAAC,QAAQ,EAAE;YAC7B,WAAW,kBAAkB,EAAE;YAC/B,iBAAiB;YACjB,UAAU;YACV,mBAAmB;YACnB,6BAA6B;YAC7B,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,MAAM,CACP,CAAC;QACF,MAAM,GAAG,GAAG,eAAe,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,MAAM,CACtB,GAAG,EACH,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EACxF;YACE,GAAG,EAAE,UAAU;YACf,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,YAAY;YACrB,SAAS,EAAE,YAAY;SACxB,CACF,CAAC;QACF,eAAe,CAAC,eAAe,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,0BAA0B,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE;YACvF,GAAG,EAAE,UAAU;YACf,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,YAAY;YACrB,SAAS,EAAE,YAAY;SACxB,CAAC,CAAC;QACH,eAAe,CAAC,eAAe,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YACrB,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;IAC7E,CAAC;IAED,iBAAiB,CACf,UAAkB,EAClB,MAAc,EACd,KAAwB,EACxB,WAAmB,EACnB,UAA2B,EAC3B,SAA2B,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,CAC1D,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC;QAEzC,aAAa,CACX,IAAI,CAAC,UAAU,EAAE,yBAAyB,CAAC,EAC3C,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EACjC,MAAM,CACP,CAAC;QACF,MAAM,kBAAkB,GAAG,aAAa,CACtC,IAAI,GAAG,CACL,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,0BAA0B,EACzF,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,CACF,CAAC;QACF,aAAa,CACX,IAAI,CAAC,UAAU,EAAE,yBAAyB,CAAC,EAC3C;YACE,aAAa;YACb,UAAU;YACV,YAAY;YACZ,WAAW,OAAO,CAAC,QAAQ,EAAE;YAC7B,WAAW,kBAAkB,EAAE;YAC/B,iBAAiB;YACjB,UAAU;YACV,mBAAmB;YACnB,6BAA6B;YAC7B,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,MAAM,CACP,CAAC;QACF,MAAM,GAAG,GAAG,eAAe,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,MAAM,CACtB,GAAG,EACH;YACE,UAAU;YACV,YAAY;YACZ,yBAAyB;YACzB,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAC7C,EACD,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,CACtF,CAAC;QACF,eAAe,CAAC,eAAe,CAAC,WAAW,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC;IAClF,CAAC;IAED,eAAe,CACb,WAAmB,EACnB,KAA2D,EAC3D,MAAgC;QAEhC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAK,MAAM,CAAC,KAA+B,CAAC,IAAI,KAAK,WAAW;gBAC9D,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,KAAK,YAAY,CAAC,CAAC;YACpE,qBAAqB,CAAC,IAAI,CACxB,WAAW,EACX,OAAO,KAAK,qBAAqB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CACxD,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;YACxB,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,KAAK,oBAAoB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3F,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;YACxB,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,KAAK,+BAA+B,CAAC,CAAC;QACvF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,qBAAqB,CAAC,IAAI,CACxB,WAAW,EACX,OAAO,KAAK,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAClE,CAAC;IACN,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,IAAI,CAAC;YACH,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,qBAAqB,CAAC,IAAI,CAC/B,iCAAiC,EACjC,sCAAsC,SAAS,EAAE,CAClD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wBAAwB,CACtB,MAAc,EACd,MAEC,EACD,cAAsB,EACtB,kBAAuC;QAEvC,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YACpC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,UAAU,CACrD,gCAAgC,EAChC,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;gBAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;qBAC9D,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;qBAC7B,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACzB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5B,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAC;gBACtC,IAAI,KAAK,CAAC,WAAW,KAAK,cAAc;oBAAE,OAAO,KAAK,CAAC;gBACvD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;oBAC5C,qBAAqB,CAAC,IAAI,CACxB,cAAc,EACd,oBAAoB,KAAK,sCAAsC,KAAK,CAAC,WAAW,EAAE,CACnF,CAAC;gBACJ,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;oBACpC,qBAAqB,CAAC,IAAI,CAAC,cAAc,EAAE,6BAA6B,KAAK,EAAE,CAAC,CAAC;gBACnF,OAAO,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC;YACnF,CAAC,CACF,CAAC;YACF,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,WAAW,CACT,MAAc,EACd,UAAkB,EAClB,WAAmB,EACnB,YAAiF;QAEjF,MAAM,SAAS,GAAG,eAAe;aAC9B,KAAK,CAAC,MAAM,CAAC;aACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACzC,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACrB,KAAK,EAAE,UAAU,MAAM,CAAC,KAAK,CAAC,EAAE;YAChC,IAAI,EAAE,KAAK,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;SAClF,CAAC,CAAC,CAAC;QACN,MAAM,iBAAiB,GAAG,YAAY;aACnC,KAAK,EAAE;aACP,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC1D,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,KAAK,EAAE,aAAa,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACxF,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACzC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAC1D,CAAC;QACF,MAAM,MAAM,GAAG,eAAe,CAC5B;YACE,+DAA+D;YAC/D,oDAAoD;YACpD,iEAAiE;YACjE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,eAAe,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;YAC3F,GAAG,iBAAiB,CAAC,GAAG,CACtB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAChC,YAAY,YAAY,OAAO,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CACzE;YACD,EAAE;YACF,iCAAiC;YACjC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAC7B;gBACE,sBAAsB,KAAK,GAAG;gBAC9B,uEAAuE;gBACvE,yDAAyD;gBACzD,+DAA+D;aAChE,CAAC,IAAI,CAAC,IAAI,CAAC,CACb;YACD,yBAAyB;YACzB,0DAA0D;YAC1D,+CAA+C;YAC/C,MAAM;YACN,KAAK;YACL,EAAE;YACF,+CAA+C,WAAW,QAAQ;YAClE,gBAAgB,UAAU,iCAAiC;YAC3D,WAAW,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG;YACzC,YAAY;YACZ,kCAAkC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YAC7F,KAAK;YACL,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,OAAO,CACR,CAAC;QACF,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,CACL,WAAmB,EACnB,aAAqB,EACrB,MAAc,EACd,QAAiB,EACjB,WAA+C,UAAU,EACzD,qBAAsD,EAAE;QAExD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC3F,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC;YAC5C,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;YACtC,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,MAAM,CAAC;gBAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACjD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACzB,eAAe,GAAG,IAAI,CAAC;YACvB,YAAY,CAAC,eAAe,CAC1B,cAAc,EACd,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACxC,kBAAkB,CACnB,CAAC;YACF,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,eAAe;gBAAE,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,WAAW,KAAK,SAAS;gBAAE,MAAM,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;;gBAClE,YAAY,CAAC,eAAe,CAAC,cAAc,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;YACnF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,oBAAoB,CAClB,WAAmB,EACnB,MAAc,EACd,MAAc,EACd,QAA2C;QAE3C,OAAO,oBAAoB,CACzB,IAAI,CAAC,WAAW,EAAE,2BAA2B,CAAC,EAC9C,MAAM,EACN,QAAQ,EACR,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAkC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC5B,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;YACjC,IAAI,KAAK,GAAG,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACxF,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACnC,OAAO,IAAI,CAAC,CAAC;gBACb,IAAI,OAAO,GAAG,KAAK;oBACjB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;gBAC1E,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,MAAM,CAAC,cAAc,EAAE;oBACzB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;gBAC1E,IAAI,MAAM,CAAC,WAAW,EAAE;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;qBACrD,IAAI,MAAM,CAAC,MAAM,EAAE;oBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;oBAE1C,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;YACN,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GA2BvB,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Generates application handler registries.
3
+ */
4
+ export declare const HandlerGeneration: Readonly<{
5
+ generate(applicationRoot: string): void;
6
+ }>;
7
+ //# sourceMappingURL=handler-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-generator.d.ts","sourceRoot":"","sources":["../../../src/generation/handler-generator.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC;IAAE,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAsChF,CAAC"}