@justscale/typescript 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +128 -0
- package/dist/api.d.ts +144 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +380 -0
- package/dist/api.js.map +1 -0
- package/dist/compiler/analyzer.d.ts +247 -0
- package/dist/compiler/analyzer.d.ts.map +1 -0
- package/dist/compiler/analyzer.js +3201 -0
- package/dist/compiler/analyzer.js.map +1 -0
- package/dist/compiler/cli.d.ts +12 -0
- package/dist/compiler/cli.d.ts.map +1 -0
- package/dist/compiler/cli.js +209 -0
- package/dist/compiler/cli.js.map +1 -0
- package/dist/compiler/compile.d.ts +26 -0
- package/dist/compiler/compile.d.ts.map +1 -0
- package/dist/compiler/compile.js +121 -0
- package/dist/compiler/compile.js.map +1 -0
- package/dist/compiler/errors.d.ts +336 -0
- package/dist/compiler/errors.d.ts.map +1 -0
- package/dist/compiler/errors.js +466 -0
- package/dist/compiler/errors.js.map +1 -0
- package/dist/compiler/exports-prepass.d.ts +31 -0
- package/dist/compiler/exports-prepass.d.ts.map +1 -0
- package/dist/compiler/exports-prepass.js +249 -0
- package/dist/compiler/exports-prepass.js.map +1 -0
- package/dist/compiler/hmr-change-detector.d.ts +47 -0
- package/dist/compiler/hmr-change-detector.d.ts.map +1 -0
- package/dist/compiler/hmr-change-detector.js +395 -0
- package/dist/compiler/hmr-change-detector.js.map +1 -0
- package/dist/compiler/hmr-transformer.d.ts +54 -0
- package/dist/compiler/hmr-transformer.d.ts.map +1 -0
- package/dist/compiler/hmr-transformer.js +535 -0
- package/dist/compiler/hmr-transformer.js.map +1 -0
- package/dist/compiler/index.d.ts +19 -0
- package/dist/compiler/index.d.ts.map +1 -0
- package/dist/compiler/index.js +16 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/compiler/primitive-detector.d.ts +70 -0
- package/dist/compiler/primitive-detector.d.ts.map +1 -0
- package/dist/compiler/primitive-detector.js +338 -0
- package/dist/compiler/primitive-detector.js.map +1 -0
- package/dist/compiler/ptsc.d.ts +40 -0
- package/dist/compiler/ptsc.d.ts.map +1 -0
- package/dist/compiler/ptsc.js +462 -0
- package/dist/compiler/ptsc.js.map +1 -0
- package/dist/compiler/rewriter.d.ts +96 -0
- package/dist/compiler/rewriter.d.ts.map +1 -0
- package/dist/compiler/rewriter.js +418 -0
- package/dist/compiler/rewriter.js.map +1 -0
- package/dist/compiler/step-hash.d.ts +43 -0
- package/dist/compiler/step-hash.d.ts.map +1 -0
- package/dist/compiler/step-hash.js +83 -0
- package/dist/compiler/step-hash.js.map +1 -0
- package/dist/compiler/switch-codegen.d.ts +84 -0
- package/dist/compiler/switch-codegen.d.ts.map +1 -0
- package/dist/compiler/switch-codegen.js +1540 -0
- package/dist/compiler/switch-codegen.js.map +1 -0
- package/dist/compiler/transformer.d.ts +29 -0
- package/dist/compiler/transformer.d.ts.map +1 -0
- package/dist/compiler/transformer.js +216 -0
- package/dist/compiler/transformer.js.map +1 -0
- package/dist/config/index.d.ts +122 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +215 -0
- package/dist/config/index.js.map +1 -0
- package/dist/di-errors/formatter.d.ts +126 -0
- package/dist/di-errors/formatter.d.ts.map +1 -0
- package/dist/di-errors/formatter.js +384 -0
- package/dist/di-errors/formatter.js.map +1 -0
- package/dist/di-errors/index.d.ts +5 -0
- package/dist/di-errors/index.d.ts.map +1 -0
- package/dist/di-errors/index.js +13 -0
- package/dist/di-errors/index.js.map +1 -0
- package/dist/editor.d.ts +11 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +2 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/language-service/index.d.ts +52 -0
- package/dist/language-service/index.d.ts.map +1 -0
- package/dist/language-service/index.js +366 -0
- package/dist/language-service/index.js.map +1 -0
- package/dist/language-service/process-quick-fixes.d.ts +20 -0
- package/dist/language-service/process-quick-fixes.d.ts.map +1 -0
- package/dist/language-service/process-quick-fixes.js +114 -0
- package/dist/language-service/process-quick-fixes.js.map +1 -0
- package/dist/language-service/quick-fix-discovery.d.ts +39 -0
- package/dist/language-service/quick-fix-discovery.d.ts.map +1 -0
- package/dist/language-service/quick-fix-discovery.js +124 -0
- package/dist/language-service/quick-fix-discovery.js.map +1 -0
- package/dist/loader/incremental.d.ts +50 -0
- package/dist/loader/incremental.d.ts.map +1 -0
- package/dist/loader/incremental.js +151 -0
- package/dist/loader/incremental.js.map +1 -0
- package/dist/loader/index.d.ts +25 -0
- package/dist/loader/index.d.ts.map +1 -0
- package/dist/loader/index.js +24 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/loader.d.ts +52 -0
- package/dist/loader/loader.d.ts.map +1 -0
- package/dist/loader/loader.js +248 -0
- package/dist/loader/loader.js.map +1 -0
- package/dist/loader/register.d.ts +14 -0
- package/dist/loader/register.d.ts.map +1 -0
- package/dist/loader/register.js +20 -0
- package/dist/loader/register.js.map +1 -0
- package/dist/plugins/index.d.ts +13 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +13 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/index.public.d.ts +13 -0
- package/dist/plugins/index.public.d.ts.map +1 -0
- package/dist/plugins/index.public.js +13 -0
- package/dist/plugins/index.public.js.map +1 -0
- package/dist/plugins/types.d.ts +83 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +24 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/server/index.d.ts +33 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +42 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/tsserver.d.ts +28 -0
- package/dist/server/tsserver.d.ts.map +1 -0
- package/dist/server/tsserver.js +126 -0
- package/dist/server/tsserver.js.map +1 -0
- package/lib/lib.d.ts +20 -0
- package/lib/lib.decorators.d.ts +382 -0
- package/lib/lib.decorators.legacy.d.ts +20 -0
- package/lib/lib.dom.asynciterable.d.ts +18 -0
- package/lib/lib.dom.d.ts +45125 -0
- package/lib/lib.dom.iterable.d.ts +18 -0
- package/lib/lib.es2015.collection.d.ts +150 -0
- package/lib/lib.es2015.core.d.ts +595 -0
- package/lib/lib.es2015.d.ts +26 -0
- package/lib/lib.es2015.generator.d.ts +75 -0
- package/lib/lib.es2015.iterable.d.ts +603 -0
- package/lib/lib.es2015.promise.d.ts +79 -0
- package/lib/lib.es2015.proxy.d.ts +126 -0
- package/lib/lib.es2015.reflect.d.ts +142 -0
- package/lib/lib.es2015.symbol.d.ts +44 -0
- package/lib/lib.es2015.symbol.wellknown.d.ts +324 -0
- package/lib/lib.es2016.array.include.d.ts +114 -0
- package/lib/lib.es2016.d.ts +19 -0
- package/lib/lib.es2016.full.d.ts +21 -0
- package/lib/lib.es2016.intl.d.ts +29 -0
- package/lib/lib.es2017.arraybuffer.d.ts +19 -0
- package/lib/lib.es2017.d.ts +24 -0
- package/lib/lib.es2017.date.d.ts +29 -0
- package/lib/lib.es2017.full.d.ts +21 -0
- package/lib/lib.es2017.intl.d.ts +42 -0
- package/lib/lib.es2017.object.d.ts +47 -0
- package/lib/lib.es2017.sharedmemory.d.ts +133 -0
- package/lib/lib.es2017.string.d.ts +43 -0
- package/lib/lib.es2017.typedarrays.d.ts +51 -0
- package/lib/lib.es2018.asyncgenerator.d.ts +75 -0
- package/lib/lib.es2018.asynciterable.d.ts +51 -0
- package/lib/lib.es2018.d.ts +22 -0
- package/lib/lib.es2018.full.d.ts +22 -0
- package/lib/lib.es2018.intl.d.ts +81 -0
- package/lib/lib.es2018.promise.d.ts +28 -0
- package/lib/lib.es2018.regexp.d.ts +35 -0
- package/lib/lib.es2019.array.d.ts +77 -0
- package/lib/lib.es2019.d.ts +22 -0
- package/lib/lib.es2019.full.d.ts +22 -0
- package/lib/lib.es2019.intl.d.ts +21 -0
- package/lib/lib.es2019.object.d.ts +31 -0
- package/lib/lib.es2019.string.d.ts +35 -0
- package/lib/lib.es2019.symbol.d.ts +22 -0
- package/lib/lib.es2020.bigint.d.ts +763 -0
- package/lib/lib.es2020.d.ts +25 -0
- package/lib/lib.es2020.date.d.ts +40 -0
- package/lib/lib.es2020.full.d.ts +22 -0
- package/lib/lib.es2020.intl.d.ts +472 -0
- package/lib/lib.es2020.number.d.ts +26 -0
- package/lib/lib.es2020.promise.d.ts +45 -0
- package/lib/lib.es2020.sharedmemory.d.ts +97 -0
- package/lib/lib.es2020.string.d.ts +42 -0
- package/lib/lib.es2020.symbol.wellknown.d.ts +39 -0
- package/lib/lib.es2021.d.ts +21 -0
- package/lib/lib.es2021.full.d.ts +22 -0
- package/lib/lib.es2021.intl.d.ts +164 -0
- package/lib/lib.es2021.promise.d.ts +46 -0
- package/lib/lib.es2021.string.d.ts +31 -0
- package/lib/lib.es2021.weakref.d.ts +76 -0
- package/lib/lib.es2022.array.d.ts +119 -0
- package/lib/lib.es2022.d.ts +23 -0
- package/lib/lib.es2022.error.d.ts +73 -0
- package/lib/lib.es2022.full.d.ts +22 -0
- package/lib/lib.es2022.intl.d.ts +143 -0
- package/lib/lib.es2022.object.d.ts +24 -0
- package/lib/lib.es2022.regexp.d.ts +37 -0
- package/lib/lib.es2022.string.d.ts +23 -0
- package/lib/lib.es2023.array.d.ts +922 -0
- package/lib/lib.es2023.collection.d.ts +19 -0
- package/lib/lib.es2023.d.ts +20 -0
- package/lib/lib.es2023.full.d.ts +22 -0
- package/lib/lib.es2023.intl.d.ts +62 -0
- package/lib/lib.es2024.arraybuffer.d.ts +63 -0
- package/lib/lib.es2024.collection.d.ts +27 -0
- package/lib/lib.es2024.d.ts +24 -0
- package/lib/lib.es2024.full.d.ts +22 -0
- package/lib/lib.es2024.object.d.ts +27 -0
- package/lib/lib.es2024.promise.d.ts +33 -0
- package/lib/lib.es2024.regexp.d.ts +23 -0
- package/lib/lib.es2024.sharedmemory.d.ts +66 -0
- package/lib/lib.es2024.string.d.ts +27 -0
- package/lib/lib.es2025.collection.d.ts +94 -0
- package/lib/lib.es2025.d.ts +23 -0
- package/lib/lib.es2025.float16.d.ts +443 -0
- package/lib/lib.es2025.full.d.ts +22 -0
- package/lib/lib.es2025.intl.d.ts +200 -0
- package/lib/lib.es2025.iterator.d.ts +146 -0
- package/lib/lib.es2025.promise.d.ts +32 -0
- package/lib/lib.es2025.regexp.d.ts +30 -0
- package/lib/lib.es5.d.ts +4599 -0
- package/lib/lib.es6.d.ts +21 -0
- package/lib/lib.esnext.array.d.ts +33 -0
- package/lib/lib.esnext.collection.d.ts +47 -0
- package/lib/lib.esnext.d.ts +27 -0
- package/lib/lib.esnext.date.d.ts +21 -0
- package/lib/lib.esnext.decorators.d.ts +26 -0
- package/lib/lib.esnext.disposable.d.ts +191 -0
- package/lib/lib.esnext.error.d.ts +22 -0
- package/lib/lib.esnext.full.d.ts +22 -0
- package/lib/lib.esnext.intl.d.ts +107 -0
- package/lib/lib.esnext.sharedmemory.d.ts +23 -0
- package/lib/lib.esnext.temporal.d.ts +485 -0
- package/lib/lib.esnext.typedarrays.d.ts +90 -0
- package/lib/lib.scripthost.d.ts +320 -0
- package/lib/lib.webworker.asynciterable.d.ts +18 -0
- package/lib/lib.webworker.d.ts +15606 -0
- package/lib/lib.webworker.importscripts.d.ts +21 -0
- package/lib/lib.webworker.iterable.d.ts +18 -0
- package/lib/logger.js +144 -0
- package/lib/package.json +7 -0
- package/lib/tsserver.js +57 -0
- package/lib/tsserverlibrary.js +171 -0
- package/lib/typesMap.json +497 -0
- package/lib/typescript.js +373 -0
- package/package.json +115 -0
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HMR (Hot Module Replacement) Transformer
|
|
3
|
+
*
|
|
4
|
+
* TypeScript transformer that enables hot reload for JustScale services.
|
|
5
|
+
*
|
|
6
|
+
* Transforms:
|
|
7
|
+
* 1. Injects stable service IDs into defineService() calls
|
|
8
|
+
* 2. Wraps factory functions with HMR state injection
|
|
9
|
+
* 3. Rewrites variable initializers to use HMR state
|
|
10
|
+
*
|
|
11
|
+
* Example transformation:
|
|
12
|
+
*
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Input
|
|
15
|
+
* class CacheService extends defineService({
|
|
16
|
+
* inject: { lifecycle: Lifecycle },
|
|
17
|
+
* factory: ({ lifecycle }) => {
|
|
18
|
+
* const cache = new Map()
|
|
19
|
+
* lifecycle.register('hotReload', () => ({ cache }))
|
|
20
|
+
* return { get: (k) => cache.get(k) }
|
|
21
|
+
* }
|
|
22
|
+
* }) {}
|
|
23
|
+
*
|
|
24
|
+
* // Output
|
|
25
|
+
* class CacheService extends defineService({
|
|
26
|
+
* __serviceId: 'src/services/cache.ts#CacheService',
|
|
27
|
+
* inject: { lifecycle: Lifecycle },
|
|
28
|
+
* factory: ((__hmr) =>
|
|
29
|
+
* ({ lifecycle }) => {
|
|
30
|
+
* const cache = __hmr?.cache ?? new Map()
|
|
31
|
+
* lifecycle.register('hotReload', () => ({ cache }))
|
|
32
|
+
* return { get: (k) => cache.get(k) }
|
|
33
|
+
* }
|
|
34
|
+
* )(__getHmrState('src/services/cache.ts#CacheService'))
|
|
35
|
+
* }) {}
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
import ts from 'typescript';
|
|
39
|
+
import path from 'node:path';
|
|
40
|
+
/**
|
|
41
|
+
* Simple string hash (djb2) to produce a short hex digest.
|
|
42
|
+
*/
|
|
43
|
+
function simpleHash(str) {
|
|
44
|
+
let hash = 5381;
|
|
45
|
+
for (let i = 0; i < str.length; i++) {
|
|
46
|
+
hash = ((hash << 5) + hash + str.charCodeAt(i)) >>> 0;
|
|
47
|
+
}
|
|
48
|
+
return hash.toString(16);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Generate a structural type signature string from a TypeScript type.
|
|
52
|
+
* Recursively walks the type's properties to build a deterministic string.
|
|
53
|
+
*/
|
|
54
|
+
function hashType(type, checker, depth = 0) {
|
|
55
|
+
if (depth > 5)
|
|
56
|
+
return '*';
|
|
57
|
+
if (type.isStringLiteral())
|
|
58
|
+
return `"${type.value}"`;
|
|
59
|
+
if (type.isNumberLiteral())
|
|
60
|
+
return `#${type.value}`;
|
|
61
|
+
if (type.flags & ts.TypeFlags.String)
|
|
62
|
+
return 'string';
|
|
63
|
+
if (type.flags & ts.TypeFlags.Number)
|
|
64
|
+
return 'number';
|
|
65
|
+
if (type.flags & ts.TypeFlags.Boolean)
|
|
66
|
+
return 'boolean';
|
|
67
|
+
if (type.flags & ts.TypeFlags.Undefined)
|
|
68
|
+
return 'undefined';
|
|
69
|
+
if (type.flags & ts.TypeFlags.Null)
|
|
70
|
+
return 'null';
|
|
71
|
+
if (type.flags & ts.TypeFlags.BigInt)
|
|
72
|
+
return 'bigint';
|
|
73
|
+
if (type.flags & ts.TypeFlags.Void)
|
|
74
|
+
return 'void';
|
|
75
|
+
if (type.flags & ts.TypeFlags.Never)
|
|
76
|
+
return 'never';
|
|
77
|
+
if (type.flags & ts.TypeFlags.Any)
|
|
78
|
+
return 'any';
|
|
79
|
+
if (type.flags & ts.TypeFlags.Unknown)
|
|
80
|
+
return 'unknown';
|
|
81
|
+
// Union types
|
|
82
|
+
if (type.isUnion()) {
|
|
83
|
+
const parts = type.types.map(t => hashType(t, checker, depth + 1)).sort();
|
|
84
|
+
return parts.join('|');
|
|
85
|
+
}
|
|
86
|
+
// Intersection types
|
|
87
|
+
if (type.isIntersection()) {
|
|
88
|
+
const parts = type.types.map(t => hashType(t, checker, depth + 1)).sort();
|
|
89
|
+
return parts.join('&');
|
|
90
|
+
}
|
|
91
|
+
// For Map<K,V>, Set<T>, Array<T>: include type args
|
|
92
|
+
const typeArgs = type.typeArguments;
|
|
93
|
+
if (typeArgs && typeArgs.length > 0) {
|
|
94
|
+
const symbol = type.getSymbol();
|
|
95
|
+
const name = symbol?.name ?? 'unknown';
|
|
96
|
+
return `${name}<${typeArgs.map((t) => hashType(t, checker, depth + 1)).join(',')}>`;
|
|
97
|
+
}
|
|
98
|
+
// For objects: sort properties, hash each
|
|
99
|
+
const props = checker.getPropertiesOfType(type);
|
|
100
|
+
if (props.length > 0) {
|
|
101
|
+
const sorted = [...props].sort((a, b) => a.name.localeCompare(b.name));
|
|
102
|
+
const entries = sorted.map(p => {
|
|
103
|
+
const propType = checker.getTypeOfSymbol(p);
|
|
104
|
+
return `${p.name}:${hashType(propType, checker, depth + 1)}`;
|
|
105
|
+
});
|
|
106
|
+
return `{${entries.join(',')}}`;
|
|
107
|
+
}
|
|
108
|
+
return checker.typeToString(type);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Creates a TypeScript transformer for HMR support.
|
|
112
|
+
*
|
|
113
|
+
* This should be used in dev mode only. In production builds,
|
|
114
|
+
* set enabled: false to skip all HMR transforms.
|
|
115
|
+
*/
|
|
116
|
+
export function createHmrTransformer(program, options = {}) {
|
|
117
|
+
const enabled = options.enabled ?? true;
|
|
118
|
+
const baseDir = options.baseDir ?? process.cwd();
|
|
119
|
+
return (context) => {
|
|
120
|
+
const factory = context.factory;
|
|
121
|
+
const typeChecker = program.getTypeChecker();
|
|
122
|
+
return (sourceFile) => {
|
|
123
|
+
if (!enabled) {
|
|
124
|
+
return sourceFile;
|
|
125
|
+
}
|
|
126
|
+
// Skip node_modules and declaration files
|
|
127
|
+
if (sourceFile.fileName.includes('node_modules') ||
|
|
128
|
+
sourceFile.isDeclarationFile) {
|
|
129
|
+
return sourceFile;
|
|
130
|
+
}
|
|
131
|
+
if (options.verbose) {
|
|
132
|
+
console.log(`[hmr-transformer] Processing: ${sourceFile.fileName}`);
|
|
133
|
+
}
|
|
134
|
+
// Track if we need to add __getHmrState import
|
|
135
|
+
let needsHmrImport = false;
|
|
136
|
+
// Track class names for service ID generation
|
|
137
|
+
let currentClassName;
|
|
138
|
+
const visitor = (node) => {
|
|
139
|
+
// Track class declarations for service ID naming
|
|
140
|
+
if (ts.isClassDeclaration(node) && node.name) {
|
|
141
|
+
currentClassName = node.name.text;
|
|
142
|
+
const result = ts.visitEachChild(node, visitor, context);
|
|
143
|
+
currentClassName = undefined;
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
// Look for defineService() calls
|
|
147
|
+
if (ts.isCallExpression(node)) {
|
|
148
|
+
const expr = node.expression;
|
|
149
|
+
if (ts.isIdentifier(expr) && expr.text === 'defineService') {
|
|
150
|
+
const transformed = transformDefineService(node, sourceFile, factory, baseDir, currentClassName, options, typeChecker);
|
|
151
|
+
if (transformed !== node) {
|
|
152
|
+
needsHmrImport = true;
|
|
153
|
+
}
|
|
154
|
+
return transformed;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return ts.visitEachChild(node, visitor, context);
|
|
158
|
+
};
|
|
159
|
+
// First pass: transform defineService calls
|
|
160
|
+
let transformedFile = ts.visitNode(sourceFile, visitor);
|
|
161
|
+
// Second pass: add __getHmrState import if needed
|
|
162
|
+
if (needsHmrImport) {
|
|
163
|
+
transformedFile = addHmrImport(factory, transformedFile);
|
|
164
|
+
}
|
|
165
|
+
return transformedFile;
|
|
166
|
+
};
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Transform a defineService() call to add HMR support.
|
|
171
|
+
*/
|
|
172
|
+
function transformDefineService(node, sourceFile, factory, baseDir, className, options, typeChecker) {
|
|
173
|
+
// Get the config argument
|
|
174
|
+
const configArg = node.arguments[0];
|
|
175
|
+
if (!configArg || !ts.isObjectLiteralExpression(configArg)) {
|
|
176
|
+
return node;
|
|
177
|
+
}
|
|
178
|
+
// Generate stable service ID
|
|
179
|
+
const relativePath = path.relative(baseDir, sourceFile.fileName);
|
|
180
|
+
const exportName = className ?? 'Anonymous';
|
|
181
|
+
const serviceId = `${relativePath}#${exportName}`;
|
|
182
|
+
if (options.verbose) {
|
|
183
|
+
console.log(`[hmr-transformer] Service ID: ${serviceId}`);
|
|
184
|
+
}
|
|
185
|
+
// Find the factory property
|
|
186
|
+
let factoryProp;
|
|
187
|
+
let factoryIndex = -1;
|
|
188
|
+
const properties = [];
|
|
189
|
+
for (let i = 0; i < configArg.properties.length; i++) {
|
|
190
|
+
const prop = configArg.properties[i];
|
|
191
|
+
if (ts.isPropertyAssignment(prop) &&
|
|
192
|
+
ts.isIdentifier(prop.name) &&
|
|
193
|
+
prop.name.text === 'factory') {
|
|
194
|
+
factoryProp = prop;
|
|
195
|
+
factoryIndex = i;
|
|
196
|
+
}
|
|
197
|
+
properties.push(prop);
|
|
198
|
+
}
|
|
199
|
+
if (!factoryProp) {
|
|
200
|
+
// No factory property found, just add service ID
|
|
201
|
+
return addServiceIdToConfig(node, configArg, factory, serviceId);
|
|
202
|
+
}
|
|
203
|
+
// Check if factory has a hotReload registration
|
|
204
|
+
const factoryBody = factoryProp.initializer;
|
|
205
|
+
const hotReloadVars = findHotReloadVariables(factoryBody);
|
|
206
|
+
if (hotReloadVars.length === 0) {
|
|
207
|
+
// No hotReload handler, just add service ID
|
|
208
|
+
return addServiceIdToConfig(node, configArg, factory, serviceId);
|
|
209
|
+
}
|
|
210
|
+
if (options.verbose) {
|
|
211
|
+
console.log(`[hmr-transformer] HotReload vars: ${hotReloadVars.join(', ')}`);
|
|
212
|
+
}
|
|
213
|
+
// Compute type hashes for each HMR variable
|
|
214
|
+
const typeHashes = computeTypeHashes(factoryBody, hotReloadVars, typeChecker);
|
|
215
|
+
// Transform the factory:
|
|
216
|
+
// 1. Wrap in IIFE that receives __hmr
|
|
217
|
+
// 2. Rewrite variable initializers to use __hmr?.x ?? original
|
|
218
|
+
const wrappedFactory = wrapFactoryWithHmr(factoryBody, factory, serviceId, hotReloadVars, typeHashes);
|
|
219
|
+
// Replace factory property
|
|
220
|
+
const newFactoryProp = factory.createPropertyAssignment(factory.createIdentifier('factory'), wrappedFactory);
|
|
221
|
+
// Build new properties array with __serviceId and wrapped factory
|
|
222
|
+
const newProperties = [
|
|
223
|
+
// Add __serviceId first
|
|
224
|
+
factory.createPropertyAssignment(factory.createIdentifier('__serviceId'), factory.createStringLiteral(serviceId)),
|
|
225
|
+
];
|
|
226
|
+
for (let i = 0; i < properties.length; i++) {
|
|
227
|
+
if (i === factoryIndex) {
|
|
228
|
+
newProperties.push(newFactoryProp);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
newProperties.push(properties[i]);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Create new config object
|
|
235
|
+
const newConfig = factory.createObjectLiteralExpression(newProperties, true);
|
|
236
|
+
// Return new defineService call
|
|
237
|
+
return factory.createCallExpression(node.expression, node.typeArguments, [newConfig]);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Add __serviceId to a defineService config without wrapping the factory.
|
|
241
|
+
*/
|
|
242
|
+
function addServiceIdToConfig(node, config, factory, serviceId) {
|
|
243
|
+
// Check if __serviceId already exists
|
|
244
|
+
for (const prop of config.properties) {
|
|
245
|
+
if (ts.isPropertyAssignment(prop) &&
|
|
246
|
+
ts.isIdentifier(prop.name) &&
|
|
247
|
+
prop.name.text === '__serviceId') {
|
|
248
|
+
return node; // Already has service ID
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
const newProperties = [
|
|
252
|
+
factory.createPropertyAssignment(factory.createIdentifier('__serviceId'), factory.createStringLiteral(serviceId)),
|
|
253
|
+
...config.properties,
|
|
254
|
+
];
|
|
255
|
+
const newConfig = factory.createObjectLiteralExpression(newProperties, true);
|
|
256
|
+
return factory.createCallExpression(node.expression, node.typeArguments, [newConfig]);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Compute type hashes for HMR variables by finding their declarations
|
|
260
|
+
* and using the TypeChecker to get structural type info.
|
|
261
|
+
*
|
|
262
|
+
* Returns a map of variable name -> type hash string.
|
|
263
|
+
* If no TypeChecker is available, returns empty map (fallback to key-only validation).
|
|
264
|
+
*/
|
|
265
|
+
function computeTypeHashes(factoryBody, hotReloadVars, typeChecker) {
|
|
266
|
+
const hashes = {};
|
|
267
|
+
if (!typeChecker) {
|
|
268
|
+
// No type checker available - use empty string as fallback hash
|
|
269
|
+
for (const v of hotReloadVars) {
|
|
270
|
+
hashes[v] = '';
|
|
271
|
+
}
|
|
272
|
+
return hashes;
|
|
273
|
+
}
|
|
274
|
+
const varSet = new Set(hotReloadVars);
|
|
275
|
+
const declarations = new Map();
|
|
276
|
+
// Walk the factory body to find variable declarations
|
|
277
|
+
const findDecls = (node) => {
|
|
278
|
+
if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)) {
|
|
279
|
+
if (varSet.has(node.name.text)) {
|
|
280
|
+
declarations.set(node.name.text, node);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
ts.forEachChild(node, findDecls);
|
|
284
|
+
};
|
|
285
|
+
ts.forEachChild(factoryBody, findDecls);
|
|
286
|
+
for (const v of hotReloadVars) {
|
|
287
|
+
const decl = declarations.get(v);
|
|
288
|
+
if (decl) {
|
|
289
|
+
try {
|
|
290
|
+
const type = typeChecker.getTypeAtLocation(decl);
|
|
291
|
+
const sig = hashType(type, typeChecker);
|
|
292
|
+
hashes[v] = simpleHash(sig);
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
// If type checking fails, use empty hash (always matches empty)
|
|
296
|
+
hashes[v] = '';
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
hashes[v] = '';
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return hashes;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Find variables that are returned from a hotReload registration.
|
|
307
|
+
*
|
|
308
|
+
* Looks for patterns like:
|
|
309
|
+
* lifecycle.register('hotReload', () => ({ cache, count }))
|
|
310
|
+
*/
|
|
311
|
+
function findHotReloadVariables(factoryBody) {
|
|
312
|
+
const vars = [];
|
|
313
|
+
const visitor = (node) => {
|
|
314
|
+
if (ts.isCallExpression(node)) {
|
|
315
|
+
// Check for lifecycle.register('hotReload', ...)
|
|
316
|
+
const expr = node.expression;
|
|
317
|
+
if (ts.isPropertyAccessExpression(expr) &&
|
|
318
|
+
expr.name.text === 'register' &&
|
|
319
|
+
node.arguments.length >= 2) {
|
|
320
|
+
const hookArg = node.arguments[0];
|
|
321
|
+
if (ts.isStringLiteral(hookArg) && hookArg.text === 'hotReload') {
|
|
322
|
+
// Found hotReload registration, extract variable names from return
|
|
323
|
+
const handler = node.arguments[1];
|
|
324
|
+
if (ts.isArrowFunction(handler) || ts.isFunctionExpression(handler)) {
|
|
325
|
+
extractReturnedVariables(handler.body, vars);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
ts.forEachChild(node, visitor);
|
|
331
|
+
};
|
|
332
|
+
ts.forEachChild(factoryBody, visitor);
|
|
333
|
+
return vars;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Extract variable names from a return expression like { cache, count }.
|
|
337
|
+
*/
|
|
338
|
+
function extractReturnedVariables(body, vars) {
|
|
339
|
+
// Handle arrow function with direct object return: () => ({ x, y })
|
|
340
|
+
if (ts.isParenthesizedExpression(body)) {
|
|
341
|
+
const inner = body.expression;
|
|
342
|
+
if (ts.isObjectLiteralExpression(inner)) {
|
|
343
|
+
extractFromObjectLiteral(inner, vars);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
// Handle object literal directly
|
|
348
|
+
if (ts.isObjectLiteralExpression(body)) {
|
|
349
|
+
extractFromObjectLiteral(body, vars);
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
// Handle block body with return statement
|
|
353
|
+
if (ts.isBlock(body)) {
|
|
354
|
+
for (const stmt of body.statements) {
|
|
355
|
+
if (ts.isReturnStatement(stmt) && stmt.expression) {
|
|
356
|
+
if (ts.isObjectLiteralExpression(stmt.expression)) {
|
|
357
|
+
extractFromObjectLiteral(stmt.expression, vars);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Extract variable names from object literal shorthand properties.
|
|
365
|
+
*/
|
|
366
|
+
function extractFromObjectLiteral(obj, vars) {
|
|
367
|
+
for (const prop of obj.properties) {
|
|
368
|
+
if (ts.isShorthandPropertyAssignment(prop)) {
|
|
369
|
+
// { cache } -> variable name is 'cache'
|
|
370
|
+
vars.push(prop.name.text);
|
|
371
|
+
}
|
|
372
|
+
else if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {
|
|
373
|
+
// { cache: cache } -> variable name is the value if it's an identifier
|
|
374
|
+
if (ts.isIdentifier(prop.initializer)) {
|
|
375
|
+
vars.push(prop.initializer.text);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Wrap a factory function with HMR state injection.
|
|
382
|
+
*
|
|
383
|
+
* Transforms:
|
|
384
|
+
* ({ lifecycle }) => { const cache = new Map(); ... }
|
|
385
|
+
* Into:
|
|
386
|
+
* ((__hmr) => ({ lifecycle }) => { const cache = __hmr?.cache ?? new Map(); ... })(__validateHmrState(__getHmrState('id'), {cache: 'a1b2c3'}))
|
|
387
|
+
*
|
|
388
|
+
* The __validateHmrState call ensures that stale or structurally incompatible
|
|
389
|
+
* state is discarded rather than silently injected. It compares per-variable
|
|
390
|
+
* type hashes to detect type changes between reloads.
|
|
391
|
+
*/
|
|
392
|
+
function wrapFactoryWithHmr(factoryBody, factory, serviceId, hotReloadVars, typeHashes) {
|
|
393
|
+
// Rewrite variable initializers in the factory body
|
|
394
|
+
const rewrittenFactory = rewriteVariableInitializers(factoryBody, factory, hotReloadVars);
|
|
395
|
+
// Create the wrapper: ((__hmr) => rewrittenFactory)
|
|
396
|
+
const hmrParam = factory.createParameterDeclaration(undefined, undefined, factory.createIdentifier('__hmr'), undefined, undefined, undefined);
|
|
397
|
+
const wrapperArrow = factory.createArrowFunction(undefined, undefined, [hmrParam], undefined, factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), rewrittenFactory);
|
|
398
|
+
// Create the IIFE call: (wrapper)(__validateHmrState(__getHmrState('serviceId'), {var1: 'hash1', var2: 'hash2'}, 'serviceId'))
|
|
399
|
+
const getHmrStateCall = factory.createCallExpression(factory.createIdentifier('__getHmrState'), undefined, [factory.createStringLiteral(serviceId)]);
|
|
400
|
+
// Build { varName: 'typeHash', ... } object literal
|
|
401
|
+
const schemaProperties = hotReloadVars.map(v => factory.createPropertyAssignment(factory.createIdentifier(v), factory.createStringLiteral(typeHashes[v] ?? '')));
|
|
402
|
+
const expectedSchema = factory.createObjectLiteralExpression(schemaProperties, false);
|
|
403
|
+
const validateCall = factory.createCallExpression(factory.createIdentifier('__validateHmrState'), undefined, [getHmrStateCall, expectedSchema, factory.createStringLiteral(serviceId)]);
|
|
404
|
+
return factory.createCallExpression(factory.createParenthesizedExpression(wrapperArrow), undefined, [validateCall]);
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Rewrite variable declarations to use HMR state.
|
|
408
|
+
*
|
|
409
|
+
* Transforms:
|
|
410
|
+
* const cache = new Map()
|
|
411
|
+
* Into:
|
|
412
|
+
* const cache = __hmr?.cache ?? new Map()
|
|
413
|
+
*/
|
|
414
|
+
function rewriteVariableInitializers(node, factory, hotReloadVars) {
|
|
415
|
+
const varSet = new Set(hotReloadVars);
|
|
416
|
+
// Recursive rewriter for variable declarations
|
|
417
|
+
function rewriteNode(n) {
|
|
418
|
+
// Look for variable declarations
|
|
419
|
+
if (ts.isVariableDeclaration(n) && ts.isIdentifier(n.name)) {
|
|
420
|
+
const varName = n.name.text;
|
|
421
|
+
if (varSet.has(varName) && n.initializer) {
|
|
422
|
+
// Rewrite: const x = init -> const x = __hmr?.x ?? init
|
|
423
|
+
const hmrAccess = factory.createPropertyAccessChain(factory.createIdentifier('__hmr'), factory.createToken(ts.SyntaxKind.QuestionDotToken), factory.createIdentifier(varName));
|
|
424
|
+
const nullishCoalesce = factory.createBinaryExpression(hmrAccess, factory.createToken(ts.SyntaxKind.QuestionQuestionToken), n.initializer);
|
|
425
|
+
return factory.updateVariableDeclaration(n, n.name, n.exclamationToken, n.type, nullishCoalesce);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
// For variable statements, we need to manually visit children
|
|
429
|
+
if (ts.isVariableStatement(n)) {
|
|
430
|
+
const newDeclarations = n.declarationList.declarations.map(decl => rewriteNode(decl));
|
|
431
|
+
const newList = factory.updateVariableDeclarationList(n.declarationList, newDeclarations);
|
|
432
|
+
return factory.updateVariableStatement(n, n.modifiers, newList);
|
|
433
|
+
}
|
|
434
|
+
// For blocks, manually visit statements
|
|
435
|
+
if (ts.isBlock(n)) {
|
|
436
|
+
const newStatements = n.statements.map(stmt => rewriteNode(stmt));
|
|
437
|
+
return factory.updateBlock(n, newStatements);
|
|
438
|
+
}
|
|
439
|
+
// For arrow functions in the body (nested)
|
|
440
|
+
if (ts.isArrowFunction(n)) {
|
|
441
|
+
if (ts.isBlock(n.body)) {
|
|
442
|
+
const newBody = rewriteNode(n.body);
|
|
443
|
+
return factory.updateArrowFunction(n, n.modifiers, n.typeParameters, n.parameters, n.type, n.equalsGreaterThanToken, newBody);
|
|
444
|
+
}
|
|
445
|
+
return n;
|
|
446
|
+
}
|
|
447
|
+
// For function expressions (nested)
|
|
448
|
+
if (ts.isFunctionExpression(n)) {
|
|
449
|
+
const newBody = rewriteNode(n.body);
|
|
450
|
+
return factory.updateFunctionExpression(n, n.modifiers, n.asteriskToken, n.name, n.typeParameters, n.parameters, n.type, newBody);
|
|
451
|
+
}
|
|
452
|
+
// For other nodes, try to visit children manually for known types
|
|
453
|
+
if (ts.isReturnStatement(n)) {
|
|
454
|
+
return factory.updateReturnStatement(n, n.expression ? rewriteNode(n.expression) : undefined);
|
|
455
|
+
}
|
|
456
|
+
if (ts.isExpressionStatement(n)) {
|
|
457
|
+
return factory.updateExpressionStatement(n, rewriteNode(n.expression));
|
|
458
|
+
}
|
|
459
|
+
if (ts.isCallExpression(n)) {
|
|
460
|
+
const newArgs = n.arguments.map(arg => rewriteNode(arg));
|
|
461
|
+
return factory.updateCallExpression(n, rewriteNode(n.expression), n.typeArguments, newArgs);
|
|
462
|
+
}
|
|
463
|
+
if (ts.isPropertyAccessExpression(n)) {
|
|
464
|
+
return factory.updatePropertyAccessExpression(n, rewriteNode(n.expression), n.name);
|
|
465
|
+
}
|
|
466
|
+
if (ts.isObjectLiteralExpression(n)) {
|
|
467
|
+
const newProperties = n.properties.map(prop => {
|
|
468
|
+
if (ts.isPropertyAssignment(prop)) {
|
|
469
|
+
return factory.updatePropertyAssignment(prop, prop.name, rewriteNode(prop.initializer));
|
|
470
|
+
}
|
|
471
|
+
return prop;
|
|
472
|
+
});
|
|
473
|
+
return factory.updateObjectLiteralExpression(n, newProperties);
|
|
474
|
+
}
|
|
475
|
+
// Return unchanged for nodes we don't handle
|
|
476
|
+
return n;
|
|
477
|
+
}
|
|
478
|
+
// Handle arrow function vs function expression at top level
|
|
479
|
+
if (ts.isArrowFunction(node)) {
|
|
480
|
+
if (ts.isBlock(node.body)) {
|
|
481
|
+
const newBody = rewriteNode(node.body);
|
|
482
|
+
return factory.updateArrowFunction(node, node.modifiers, node.typeParameters, node.parameters, node.type, node.equalsGreaterThanToken, newBody);
|
|
483
|
+
}
|
|
484
|
+
return node;
|
|
485
|
+
}
|
|
486
|
+
if (ts.isFunctionExpression(node)) {
|
|
487
|
+
const newBody = rewriteNode(node.body);
|
|
488
|
+
return factory.updateFunctionExpression(node, node.modifiers, node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, newBody);
|
|
489
|
+
}
|
|
490
|
+
return node;
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Add __getHmrState import from @justscale/core.
|
|
494
|
+
*/
|
|
495
|
+
function addHmrImport(factory, sourceFile) {
|
|
496
|
+
const statements = [];
|
|
497
|
+
let foundCoreImport = false;
|
|
498
|
+
for (const stmt of sourceFile.statements) {
|
|
499
|
+
if (ts.isImportDeclaration(stmt)) {
|
|
500
|
+
const moduleSpecifier = stmt.moduleSpecifier;
|
|
501
|
+
if (ts.isStringLiteral(moduleSpecifier) &&
|
|
502
|
+
moduleSpecifier.text === '@justscale/core') {
|
|
503
|
+
foundCoreImport = true;
|
|
504
|
+
const importClause = stmt.importClause;
|
|
505
|
+
if (importClause &&
|
|
506
|
+
importClause.namedBindings &&
|
|
507
|
+
ts.isNamedImports(importClause.namedBindings)) {
|
|
508
|
+
// Check which HMR imports are already present
|
|
509
|
+
const existingNames = new Set(importClause.namedBindings.elements.map(spec => spec.name.text));
|
|
510
|
+
const hmrImports = ['__getHmrState', '__validateHmrState'];
|
|
511
|
+
const missing = hmrImports.filter(name => !existingNames.has(name));
|
|
512
|
+
if (missing.length > 0) {
|
|
513
|
+
// Add missing HMR imports
|
|
514
|
+
const newSpecifiers = [
|
|
515
|
+
...importClause.namedBindings.elements,
|
|
516
|
+
...missing.map(name => factory.createImportSpecifier(false, undefined, factory.createIdentifier(name))),
|
|
517
|
+
];
|
|
518
|
+
statements.push(factory.createImportDeclaration(stmt.modifiers, factory.createImportClause(importClause.isTypeOnly, importClause.name, factory.createNamedImports(newSpecifiers)), moduleSpecifier, stmt.attributes));
|
|
519
|
+
continue;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
statements.push(stmt);
|
|
525
|
+
}
|
|
526
|
+
// If no @justscale/core import found, add one
|
|
527
|
+
if (!foundCoreImport) {
|
|
528
|
+
statements.unshift(factory.createImportDeclaration(undefined, factory.createImportClause(false, undefined, factory.createNamedImports([
|
|
529
|
+
factory.createImportSpecifier(false, undefined, factory.createIdentifier('__getHmrState')),
|
|
530
|
+
factory.createImportSpecifier(false, undefined, factory.createIdentifier('__validateHmrState')),
|
|
531
|
+
])), factory.createStringLiteral('@justscale/core'), undefined));
|
|
532
|
+
}
|
|
533
|
+
return factory.updateSourceFile(sourceFile, statements);
|
|
534
|
+
}
|
|
535
|
+
//# sourceMappingURL=hmr-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hmr-transformer.js","sourceRoot":"","sources":["../../src/compiler/hmr-transformer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;GAEG;AACH,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,SAAS,QAAQ,CAAC,IAAa,EAAE,OAAuB,EAAE,KAAK,GAAG,CAAC;IACjE,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAE1B,IAAI,IAAI,CAAC,eAAe,EAAE;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;IACrD,IAAI,IAAI,CAAC,eAAe,EAAE;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACpD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACtD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACtD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACxD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS;QAAE,OAAO,WAAW,CAAC;IAC5D,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IAClD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACtD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IAClD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IACpD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAExD,cAAc;IACd,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,oDAAoD;IACpD,MAAM,QAAQ,GAAI,IAAY,CAAC,aAAsC,CAAC;IACtE,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,SAAS,CAAC;QACvC,OAAO,GAAG,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/F,CAAC;IAED,0CAA0C;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAClC,CAAC;IAED,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAWD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAmB,EACnB,UAAiC,EAAE;IAEnC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEjD,OAAO,CAAC,OAAiC,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QAE7C,OAAO,CAAC,UAAyB,EAAE,EAAE;YACnC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,0CAA0C;YAC1C,IACE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC5C,UAAU,CAAC,iBAAiB,EAC5B,CAAC;gBACD,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,iCAAiC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,+CAA+C;YAC/C,IAAI,cAAc,GAAG,KAAK,CAAC;YAE3B,8CAA8C;YAC9C,IAAI,gBAAoC,CAAC;YAEzC,MAAM,OAAO,GAAG,CAAC,IAAa,EAAW,EAAE;gBACzC,iDAAiD;gBACjD,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC7C,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBAClC,MAAM,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBACzD,gBAAgB,GAAG,SAAS,CAAC;oBAC7B,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAED,iCAAiC;gBACjC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;oBAC7B,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;wBAC3D,MAAM,WAAW,GAAG,sBAAsB,CACxC,IAAI,EACJ,UAAU,EACV,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,OAAO,EACP,WAAW,CACZ,CAAC;wBACF,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;4BACzB,cAAc,GAAG,IAAI,CAAC;wBACxB,CAAC;wBACD,OAAO,WAAW,CAAC;oBACrB,CAAC;gBACH,CAAC;gBAED,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACnD,CAAC,CAAC;YAEF,4CAA4C;YAC5C,IAAI,eAAe,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAkB,CAAC;YAEzE,kDAAkD;YAClD,IAAI,cAAc,EAAE,CAAC;gBACnB,eAAe,GAAG,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YAC3D,CAAC;YAED,OAAO,eAAe,CAAC;QACzB,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,IAAuB,EACvB,UAAyB,EACzB,OAAuB,EACvB,OAAe,EACf,SAA6B,EAC7B,OAA8B,EAC9B,WAA4B;IAE5B,0BAA0B;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,yBAAyB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAA6B;IAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,SAAS,IAAI,WAAW,CAAC;IAC5C,MAAM,SAAS,GAAG,GAAG,YAAY,IAAI,UAAU,EAAE,CAAC;IAElD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,4BAA4B;IAC5B,IAAI,WAA8C,CAAC;IACnD,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,UAAU,GAAkC,EAAE,CAAC;IAErD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrC,IACE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAC7B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAC5B,CAAC;YACD,WAAW,GAAG,IAAI,CAAC;YACnB,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,iDAAiD;QACjD,OAAO,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACnE,CAAC;IAED,gDAAgD;IAChD,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;IAC5C,MAAM,aAAa,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAE1D,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,4CAA4C;QAC5C,OAAO,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,qCAAqC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,4CAA4C;IAC5C,MAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAE9E,yBAAyB;IACzB,sCAAsC;IACtC,+DAA+D;IAC/D,MAAM,cAAc,GAAG,kBAAkB,CACvC,WAAW,EACX,OAAO,EACP,SAAS,EACT,aAAa,EACb,UAAU,CACX,CAAC;IAEF,2BAA2B;IAC3B,MAAM,cAAc,GAAG,OAAO,CAAC,wBAAwB,CACrD,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,EACnC,cAAc,CACf,CAAC;IAEF,kEAAkE;IAClE,MAAM,aAAa,GAAkC;QACnD,wBAAwB;QACxB,OAAO,CAAC,wBAAwB,CAC9B,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,EACvC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CACvC;KACF,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,6BAA6B,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAE7E,gCAAgC;IAChC,OAAO,OAAO,CAAC,oBAAoB,CACjC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,EAClB,CAAC,SAAS,CAAC,CACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,IAAuB,EACvB,MAAkC,EAClC,OAAuB,EACvB,SAAiB;IAEjB,sCAAsC;IACtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACrC,IACE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAC7B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,EAChC,CAAC;YACD,OAAO,IAAI,CAAC,CAAC,yBAAyB;QACxC,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAkC;QACnD,OAAO,CAAC,wBAAwB,CAC9B,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,EACvC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CACvC;QACD,GAAG,MAAM,CAAC,UAAU;KACrB,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CAAC,6BAA6B,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAE7E,OAAO,OAAO,CAAC,oBAAoB,CACjC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,EAClB,CAAC,SAAS,CAAC,CACZ,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CACxB,WAA0B,EAC1B,aAAuB,EACvB,WAA4B;IAE5B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,gEAAgE;QAChE,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;YAC9B,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACjB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkC,CAAC;IAE/D,sDAAsD;IACtD,MAAM,SAAS,GAAG,CAAC,IAAa,EAAQ,EAAE;QACxC,IAAI,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjE,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnC,CAAC,CAAC;IACF,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAExC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACxC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,gEAAgE;gBAChE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,WAA0B;IACxD,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,MAAM,OAAO,GAAG,CAAC,IAAa,EAAQ,EAAE;QACtC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,iDAAiD;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;YAC7B,IACE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU;gBAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,EAC1B,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAChE,mEAAmE;oBACnE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAClC,IAAI,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;wBACpE,wBAAwB,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAC/C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,IAAoB,EAAE,IAAc;IACpE,oEAAoE;IACpE,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;QAC9B,IAAI,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,0CAA0C;IAC1C,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClD,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBAClD,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAC/B,GAA+B,EAC/B,IAAc;IAEd,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,wCAAwC;YACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,uEAAuE;YACvE,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,kBAAkB,CACzB,WAA0B,EAC1B,OAAuB,EACvB,SAAiB,EACjB,aAAuB,EACvB,UAAkC;IAElC,oDAAoD;IACpD,MAAM,gBAAgB,GAAG,2BAA2B,CAClD,WAAW,EACX,OAAO,EACP,aAAa,CACd,CAAC;IAEF,oDAAoD;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,0BAA0B,CACjD,SAAS,EACT,SAAS,EACT,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EACjC,SAAS,EACT,SAAS,EACT,SAAS,CACV,CAAC;IAEF,MAAM,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAC9C,SAAS,EACT,SAAS,EACT,CAAC,QAAQ,CAAC,EACV,SAAS,EACT,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC,EACzD,gBAAgB,CACjB,CAAC;IAEF,+HAA+H;IAC/H,MAAM,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAClD,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,EACzC,SAAS,EACT,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CACzC,CAAC;IAEF,oDAAoD;IACpD,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC7C,OAAO,CAAC,wBAAwB,CAC9B,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAC3B,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACjD,CACF,CAAC;IACF,MAAM,cAAc,GAAG,OAAO,CAAC,6BAA6B,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAEtF,MAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAC/C,OAAO,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAC9C,SAAS,EACT,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAC1E,CAAC;IAEF,OAAO,OAAO,CAAC,oBAAoB,CACjC,OAAO,CAAC,6BAA6B,CAAC,YAAY,CAAC,EACnD,SAAS,EACT,CAAC,YAAY,CAAC,CACf,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,2BAA2B,CAClC,IAAmB,EACnB,OAAuB,EACvB,aAAuB;IAEvB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAEtC,+CAA+C;IAC/C,SAAS,WAAW,CAAC,CAAU;QAC7B,iCAAiC;QACjC,IAAI,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBACzC,0DAA0D;gBAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,yBAAyB,CACjD,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EACjC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EACnD,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAClC,CAAC;gBACF,MAAM,eAAe,GAAG,OAAO,CAAC,sBAAsB,CACpD,SAAS,EACT,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,EACxD,CAAC,CAAC,WAAW,CACd,CAAC;gBACF,OAAO,OAAO,CAAC,yBAAyB,CACtC,CAAC,EACD,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,gBAAgB,EAClB,CAAC,CAAC,IAAI,EACN,eAAe,CAChB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,MAAM,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAChE,WAAW,CAAC,IAAI,CAA2B,CAC5C,CAAC;YACF,MAAM,OAAO,GAAG,OAAO,CAAC,6BAA6B,CACnD,CAAC,CAAC,eAAe,EACjB,eAAe,CAChB,CAAC;YACF,OAAO,OAAO,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAClE,CAAC;QAED,wCAAwC;QACxC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,MAAM,aAAa,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAiB,CAAC,CAAC;YAClF,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QAC/C,CAAC;QAED,2CAA2C;QAC3C,IAAI,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAa,CAAC;gBAChD,OAAO,OAAO,CAAC,mBAAmB,CAChC,CAAC,EACD,CAAC,CAAC,SAAS,EACX,CAAC,CAAC,cAAc,EAChB,CAAC,CAAC,UAAU,EACZ,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,sBAAsB,EACxB,OAAO,CACR,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,oCAAoC;QACpC,IAAI,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAa,CAAC;YAChD,OAAO,OAAO,CAAC,wBAAwB,CACrC,CAAC,EACD,CAAC,CAAC,SAAS,EACX,CAAC,CAAC,aAAa,EACf,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,cAAc,EAChB,CAAC,CAAC,UAAU,EACZ,CAAC,CAAC,IAAI,EACN,OAAO,CACR,CAAC;QACJ,CAAC;QAED,kEAAkE;QAClE,IAAI,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAC,qBAAqB,CAClC,CAAC,EACD,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAkB,CAAC,CAAC,CAAC,SAAS,CACtE,CAAC;QACJ,CAAC;QAED,IAAI,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC,yBAAyB,CACtC,CAAC,EACD,WAAW,CAAC,CAAC,CAAC,UAAU,CAAkB,CAC3C,CAAC;QACJ,CAAC;QAED,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAkB,CAAC,CAAC;YAC1E,OAAO,OAAO,CAAC,oBAAoB,CACjC,CAAC,EACD,WAAW,CAAC,CAAC,CAAC,UAAU,CAAkB,EAC1C,CAAC,CAAC,aAAa,EACf,OAAO,CACR,CAAC;QACJ,CAAC;QAED,IAAI,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,8BAA8B,CAC3C,CAAC,EACD,WAAW,CAAC,CAAC,CAAC,UAAU,CAAkB,EAC1C,CAAC,CAAC,IAAI,CACP,CAAC;QACJ,CAAC;QAED,IAAI,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC5C,IAAI,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClC,OAAO,OAAO,CAAC,wBAAwB,CACrC,IAAI,EACJ,IAAI,CAAC,IAAI,EACT,WAAW,CAAC,IAAI,CAAC,WAAW,CAAkB,CAC/C,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,6BAA6B,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QACjE,CAAC;QAED,6CAA6C;QAC7C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,4DAA4D;IAC5D,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAa,CAAC;YACnD,OAAO,OAAO,CAAC,mBAAmB,CAChC,IAAI,EACJ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,sBAAsB,EAC3B,OAAO,CACR,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAa,CAAC;QACnD,OAAO,OAAO,CAAC,wBAAwB,CACrC,IAAI,EACJ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,IAAI,EACT,OAAO,CACR,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CACnB,OAAuB,EACvB,UAAyB;IAEzB,MAAM,UAAU,GAAmB,EAAE,CAAC;IACtC,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QACzC,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;YAC7C,IACE,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC;gBACnC,eAAe,CAAC,IAAI,KAAK,iBAAiB,EAC1C,CAAC;gBACD,eAAe,GAAG,IAAI,CAAC;gBACvB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gBAEvC,IACE,YAAY;oBACZ,YAAY,CAAC,aAAa;oBAC1B,EAAE,CAAC,cAAc,CAAC,YAAY,CAAC,aAAa,CAAC,EAC7C,CAAC;oBACD,8CAA8C;oBAC9C,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAChE,CAAC;oBACF,MAAM,UAAU,GAAG,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;oBAC3D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;oBAEpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,0BAA0B;wBAC1B,MAAM,aAAa,GAAG;4BACpB,GAAG,YAAY,CAAC,aAAa,CAAC,QAAQ;4BACtC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACpB,OAAO,CAAC,qBAAqB,CAC3B,KAAK,EACL,SAAS,EACT,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAC/B,CACF;yBACF,CAAC;wBAEF,UAAU,CAAC,IAAI,CACb,OAAO,CAAC,uBAAuB,CAC7B,IAAI,CAAC,SAAS,EACd,OAAO,CAAC,kBAAkB,CACxB,YAAY,CAAC,UAAU,EACvB,YAAY,CAAC,IAAI,EACjB,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAC1C,EACD,eAAe,EACf,IAAI,CAAC,UAAU,CAChB,CACF,CAAC;wBACF,SAAS;oBACX,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,8CAA8C;IAC9C,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,UAAU,CAAC,OAAO,CAChB,OAAO,CAAC,uBAAuB,CAC7B,SAAS,EACT,OAAO,CAAC,kBAAkB,CACxB,KAAK,EACL,SAAS,EACT,OAAO,CAAC,kBAAkB,CAAC;YACzB,OAAO,CAAC,qBAAqB,CAC3B,KAAK,EACL,SAAS,EACT,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAC1C;YACD,OAAO,CAAC,qBAAqB,CAC3B,KAAK,EACL,SAAS,EACT,OAAO,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAC/C;SACF,CAAC,CACH,EACD,OAAO,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,EAC9C,SAAS,CACV,CACF,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @justscale/core/process - Compiler
|
|
3
|
+
*
|
|
4
|
+
* TypeScript transformer that compiles process handlers into switch-based
|
|
5
|
+
* VM-style execution for durable process execution.
|
|
6
|
+
*/
|
|
7
|
+
export { createProcessTransformer } from './transformer.js';
|
|
8
|
+
export type { ProcessCompilerOptions } from './transformer.js';
|
|
9
|
+
export { createHmrTransformer } from './hmr-transformer.js';
|
|
10
|
+
export type { HmrTransformerOptions } from './hmr-transformer.js';
|
|
11
|
+
export { detectChanges, mightContainServices } from './hmr-change-detector.js';
|
|
12
|
+
export type { ServiceChange, ChangeDetectionResult, } from './hmr-change-detector.js';
|
|
13
|
+
export { compileProcessSource, compileProcessFile, formatDiagnostics } from './compile.js';
|
|
14
|
+
export type { CompileResult } from './compile.js';
|
|
15
|
+
export { analyzeHandler, expressionToName } from './analyzer.js';
|
|
16
|
+
export type { AnalysisResult, BlockDefinition, SignalInfo, VariableInfo, ExportsInfo, ExportFieldInfo, ExportMethodInfo, SubProcessInfo } from './analyzer.js';
|
|
17
|
+
export { ProcessErrorCode, createProcessDiagnostic, formatErrorCode, isProcessDiagnostic, getProcessErrorCode, DiagnosticCollector, filterUsingExportsDiagnostics, } from './errors.js';
|
|
18
|
+
export { main as cli } from './cli.js';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compiler/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,YAAY,EACV,aAAa,EACb,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3F,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/J,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @justscale/core/process - Compiler
|
|
3
|
+
*
|
|
4
|
+
* TypeScript transformer that compiles process handlers into switch-based
|
|
5
|
+
* VM-style execution for durable process execution.
|
|
6
|
+
*/
|
|
7
|
+
export { createProcessTransformer } from './transformer.js';
|
|
8
|
+
// HMR (Hot Module Replacement) Transformer
|
|
9
|
+
export { createHmrTransformer } from './hmr-transformer.js';
|
|
10
|
+
// HMR Change Detection (for dev server)
|
|
11
|
+
export { detectChanges, mightContainServices } from './hmr-change-detector.js';
|
|
12
|
+
export { compileProcessSource, compileProcessFile, formatDiagnostics } from './compile.js';
|
|
13
|
+
export { analyzeHandler, expressionToName } from './analyzer.js';
|
|
14
|
+
export { ProcessErrorCode, createProcessDiagnostic, formatErrorCode, isProcessDiagnostic, getProcessErrorCode, DiagnosticCollector, filterUsingExportsDiagnostics, } from './errors.js';
|
|
15
|
+
export { main as cli } from './cli.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compiler/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,2CAA2C;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG5D,wCAAwC;AACxC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAM/E,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG3F,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,IAAI,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC"}
|