@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.
Files changed (245) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +128 -0
  3. package/dist/api.d.ts +144 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +380 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/compiler/analyzer.d.ts +247 -0
  8. package/dist/compiler/analyzer.d.ts.map +1 -0
  9. package/dist/compiler/analyzer.js +3201 -0
  10. package/dist/compiler/analyzer.js.map +1 -0
  11. package/dist/compiler/cli.d.ts +12 -0
  12. package/dist/compiler/cli.d.ts.map +1 -0
  13. package/dist/compiler/cli.js +209 -0
  14. package/dist/compiler/cli.js.map +1 -0
  15. package/dist/compiler/compile.d.ts +26 -0
  16. package/dist/compiler/compile.d.ts.map +1 -0
  17. package/dist/compiler/compile.js +121 -0
  18. package/dist/compiler/compile.js.map +1 -0
  19. package/dist/compiler/errors.d.ts +336 -0
  20. package/dist/compiler/errors.d.ts.map +1 -0
  21. package/dist/compiler/errors.js +466 -0
  22. package/dist/compiler/errors.js.map +1 -0
  23. package/dist/compiler/exports-prepass.d.ts +31 -0
  24. package/dist/compiler/exports-prepass.d.ts.map +1 -0
  25. package/dist/compiler/exports-prepass.js +249 -0
  26. package/dist/compiler/exports-prepass.js.map +1 -0
  27. package/dist/compiler/hmr-change-detector.d.ts +47 -0
  28. package/dist/compiler/hmr-change-detector.d.ts.map +1 -0
  29. package/dist/compiler/hmr-change-detector.js +395 -0
  30. package/dist/compiler/hmr-change-detector.js.map +1 -0
  31. package/dist/compiler/hmr-transformer.d.ts +54 -0
  32. package/dist/compiler/hmr-transformer.d.ts.map +1 -0
  33. package/dist/compiler/hmr-transformer.js +535 -0
  34. package/dist/compiler/hmr-transformer.js.map +1 -0
  35. package/dist/compiler/index.d.ts +19 -0
  36. package/dist/compiler/index.d.ts.map +1 -0
  37. package/dist/compiler/index.js +16 -0
  38. package/dist/compiler/index.js.map +1 -0
  39. package/dist/compiler/primitive-detector.d.ts +70 -0
  40. package/dist/compiler/primitive-detector.d.ts.map +1 -0
  41. package/dist/compiler/primitive-detector.js +338 -0
  42. package/dist/compiler/primitive-detector.js.map +1 -0
  43. package/dist/compiler/ptsc.d.ts +40 -0
  44. package/dist/compiler/ptsc.d.ts.map +1 -0
  45. package/dist/compiler/ptsc.js +462 -0
  46. package/dist/compiler/ptsc.js.map +1 -0
  47. package/dist/compiler/rewriter.d.ts +96 -0
  48. package/dist/compiler/rewriter.d.ts.map +1 -0
  49. package/dist/compiler/rewriter.js +418 -0
  50. package/dist/compiler/rewriter.js.map +1 -0
  51. package/dist/compiler/step-hash.d.ts +43 -0
  52. package/dist/compiler/step-hash.d.ts.map +1 -0
  53. package/dist/compiler/step-hash.js +83 -0
  54. package/dist/compiler/step-hash.js.map +1 -0
  55. package/dist/compiler/switch-codegen.d.ts +84 -0
  56. package/dist/compiler/switch-codegen.d.ts.map +1 -0
  57. package/dist/compiler/switch-codegen.js +1540 -0
  58. package/dist/compiler/switch-codegen.js.map +1 -0
  59. package/dist/compiler/transformer.d.ts +29 -0
  60. package/dist/compiler/transformer.d.ts.map +1 -0
  61. package/dist/compiler/transformer.js +216 -0
  62. package/dist/compiler/transformer.js.map +1 -0
  63. package/dist/config/index.d.ts +122 -0
  64. package/dist/config/index.d.ts.map +1 -0
  65. package/dist/config/index.js +215 -0
  66. package/dist/config/index.js.map +1 -0
  67. package/dist/di-errors/formatter.d.ts +126 -0
  68. package/dist/di-errors/formatter.d.ts.map +1 -0
  69. package/dist/di-errors/formatter.js +384 -0
  70. package/dist/di-errors/formatter.js.map +1 -0
  71. package/dist/di-errors/index.d.ts +5 -0
  72. package/dist/di-errors/index.d.ts.map +1 -0
  73. package/dist/di-errors/index.js +13 -0
  74. package/dist/di-errors/index.js.map +1 -0
  75. package/dist/editor.d.ts +11 -0
  76. package/dist/editor.d.ts.map +1 -0
  77. package/dist/editor.js +2 -0
  78. package/dist/editor.js.map +1 -0
  79. package/dist/index.d.ts +35 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +40 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/language-service/index.d.ts +52 -0
  84. package/dist/language-service/index.d.ts.map +1 -0
  85. package/dist/language-service/index.js +366 -0
  86. package/dist/language-service/index.js.map +1 -0
  87. package/dist/language-service/process-quick-fixes.d.ts +20 -0
  88. package/dist/language-service/process-quick-fixes.d.ts.map +1 -0
  89. package/dist/language-service/process-quick-fixes.js +114 -0
  90. package/dist/language-service/process-quick-fixes.js.map +1 -0
  91. package/dist/language-service/quick-fix-discovery.d.ts +39 -0
  92. package/dist/language-service/quick-fix-discovery.d.ts.map +1 -0
  93. package/dist/language-service/quick-fix-discovery.js +124 -0
  94. package/dist/language-service/quick-fix-discovery.js.map +1 -0
  95. package/dist/loader/incremental.d.ts +50 -0
  96. package/dist/loader/incremental.d.ts.map +1 -0
  97. package/dist/loader/incremental.js +151 -0
  98. package/dist/loader/incremental.js.map +1 -0
  99. package/dist/loader/index.d.ts +25 -0
  100. package/dist/loader/index.d.ts.map +1 -0
  101. package/dist/loader/index.js +24 -0
  102. package/dist/loader/index.js.map +1 -0
  103. package/dist/loader/loader.d.ts +52 -0
  104. package/dist/loader/loader.d.ts.map +1 -0
  105. package/dist/loader/loader.js +248 -0
  106. package/dist/loader/loader.js.map +1 -0
  107. package/dist/loader/register.d.ts +14 -0
  108. package/dist/loader/register.d.ts.map +1 -0
  109. package/dist/loader/register.js +20 -0
  110. package/dist/loader/register.js.map +1 -0
  111. package/dist/plugins/index.d.ts +13 -0
  112. package/dist/plugins/index.d.ts.map +1 -0
  113. package/dist/plugins/index.js +13 -0
  114. package/dist/plugins/index.js.map +1 -0
  115. package/dist/plugins/index.public.d.ts +13 -0
  116. package/dist/plugins/index.public.d.ts.map +1 -0
  117. package/dist/plugins/index.public.js +13 -0
  118. package/dist/plugins/index.public.js.map +1 -0
  119. package/dist/plugins/types.d.ts +83 -0
  120. package/dist/plugins/types.d.ts.map +1 -0
  121. package/dist/plugins/types.js +24 -0
  122. package/dist/plugins/types.js.map +1 -0
  123. package/dist/server/index.d.ts +33 -0
  124. package/dist/server/index.d.ts.map +1 -0
  125. package/dist/server/index.js +42 -0
  126. package/dist/server/index.js.map +1 -0
  127. package/dist/server/tsserver.d.ts +28 -0
  128. package/dist/server/tsserver.d.ts.map +1 -0
  129. package/dist/server/tsserver.js +126 -0
  130. package/dist/server/tsserver.js.map +1 -0
  131. package/lib/lib.d.ts +20 -0
  132. package/lib/lib.decorators.d.ts +382 -0
  133. package/lib/lib.decorators.legacy.d.ts +20 -0
  134. package/lib/lib.dom.asynciterable.d.ts +18 -0
  135. package/lib/lib.dom.d.ts +45125 -0
  136. package/lib/lib.dom.iterable.d.ts +18 -0
  137. package/lib/lib.es2015.collection.d.ts +150 -0
  138. package/lib/lib.es2015.core.d.ts +595 -0
  139. package/lib/lib.es2015.d.ts +26 -0
  140. package/lib/lib.es2015.generator.d.ts +75 -0
  141. package/lib/lib.es2015.iterable.d.ts +603 -0
  142. package/lib/lib.es2015.promise.d.ts +79 -0
  143. package/lib/lib.es2015.proxy.d.ts +126 -0
  144. package/lib/lib.es2015.reflect.d.ts +142 -0
  145. package/lib/lib.es2015.symbol.d.ts +44 -0
  146. package/lib/lib.es2015.symbol.wellknown.d.ts +324 -0
  147. package/lib/lib.es2016.array.include.d.ts +114 -0
  148. package/lib/lib.es2016.d.ts +19 -0
  149. package/lib/lib.es2016.full.d.ts +21 -0
  150. package/lib/lib.es2016.intl.d.ts +29 -0
  151. package/lib/lib.es2017.arraybuffer.d.ts +19 -0
  152. package/lib/lib.es2017.d.ts +24 -0
  153. package/lib/lib.es2017.date.d.ts +29 -0
  154. package/lib/lib.es2017.full.d.ts +21 -0
  155. package/lib/lib.es2017.intl.d.ts +42 -0
  156. package/lib/lib.es2017.object.d.ts +47 -0
  157. package/lib/lib.es2017.sharedmemory.d.ts +133 -0
  158. package/lib/lib.es2017.string.d.ts +43 -0
  159. package/lib/lib.es2017.typedarrays.d.ts +51 -0
  160. package/lib/lib.es2018.asyncgenerator.d.ts +75 -0
  161. package/lib/lib.es2018.asynciterable.d.ts +51 -0
  162. package/lib/lib.es2018.d.ts +22 -0
  163. package/lib/lib.es2018.full.d.ts +22 -0
  164. package/lib/lib.es2018.intl.d.ts +81 -0
  165. package/lib/lib.es2018.promise.d.ts +28 -0
  166. package/lib/lib.es2018.regexp.d.ts +35 -0
  167. package/lib/lib.es2019.array.d.ts +77 -0
  168. package/lib/lib.es2019.d.ts +22 -0
  169. package/lib/lib.es2019.full.d.ts +22 -0
  170. package/lib/lib.es2019.intl.d.ts +21 -0
  171. package/lib/lib.es2019.object.d.ts +31 -0
  172. package/lib/lib.es2019.string.d.ts +35 -0
  173. package/lib/lib.es2019.symbol.d.ts +22 -0
  174. package/lib/lib.es2020.bigint.d.ts +763 -0
  175. package/lib/lib.es2020.d.ts +25 -0
  176. package/lib/lib.es2020.date.d.ts +40 -0
  177. package/lib/lib.es2020.full.d.ts +22 -0
  178. package/lib/lib.es2020.intl.d.ts +472 -0
  179. package/lib/lib.es2020.number.d.ts +26 -0
  180. package/lib/lib.es2020.promise.d.ts +45 -0
  181. package/lib/lib.es2020.sharedmemory.d.ts +97 -0
  182. package/lib/lib.es2020.string.d.ts +42 -0
  183. package/lib/lib.es2020.symbol.wellknown.d.ts +39 -0
  184. package/lib/lib.es2021.d.ts +21 -0
  185. package/lib/lib.es2021.full.d.ts +22 -0
  186. package/lib/lib.es2021.intl.d.ts +164 -0
  187. package/lib/lib.es2021.promise.d.ts +46 -0
  188. package/lib/lib.es2021.string.d.ts +31 -0
  189. package/lib/lib.es2021.weakref.d.ts +76 -0
  190. package/lib/lib.es2022.array.d.ts +119 -0
  191. package/lib/lib.es2022.d.ts +23 -0
  192. package/lib/lib.es2022.error.d.ts +73 -0
  193. package/lib/lib.es2022.full.d.ts +22 -0
  194. package/lib/lib.es2022.intl.d.ts +143 -0
  195. package/lib/lib.es2022.object.d.ts +24 -0
  196. package/lib/lib.es2022.regexp.d.ts +37 -0
  197. package/lib/lib.es2022.string.d.ts +23 -0
  198. package/lib/lib.es2023.array.d.ts +922 -0
  199. package/lib/lib.es2023.collection.d.ts +19 -0
  200. package/lib/lib.es2023.d.ts +20 -0
  201. package/lib/lib.es2023.full.d.ts +22 -0
  202. package/lib/lib.es2023.intl.d.ts +62 -0
  203. package/lib/lib.es2024.arraybuffer.d.ts +63 -0
  204. package/lib/lib.es2024.collection.d.ts +27 -0
  205. package/lib/lib.es2024.d.ts +24 -0
  206. package/lib/lib.es2024.full.d.ts +22 -0
  207. package/lib/lib.es2024.object.d.ts +27 -0
  208. package/lib/lib.es2024.promise.d.ts +33 -0
  209. package/lib/lib.es2024.regexp.d.ts +23 -0
  210. package/lib/lib.es2024.sharedmemory.d.ts +66 -0
  211. package/lib/lib.es2024.string.d.ts +27 -0
  212. package/lib/lib.es2025.collection.d.ts +94 -0
  213. package/lib/lib.es2025.d.ts +23 -0
  214. package/lib/lib.es2025.float16.d.ts +443 -0
  215. package/lib/lib.es2025.full.d.ts +22 -0
  216. package/lib/lib.es2025.intl.d.ts +200 -0
  217. package/lib/lib.es2025.iterator.d.ts +146 -0
  218. package/lib/lib.es2025.promise.d.ts +32 -0
  219. package/lib/lib.es2025.regexp.d.ts +30 -0
  220. package/lib/lib.es5.d.ts +4599 -0
  221. package/lib/lib.es6.d.ts +21 -0
  222. package/lib/lib.esnext.array.d.ts +33 -0
  223. package/lib/lib.esnext.collection.d.ts +47 -0
  224. package/lib/lib.esnext.d.ts +27 -0
  225. package/lib/lib.esnext.date.d.ts +21 -0
  226. package/lib/lib.esnext.decorators.d.ts +26 -0
  227. package/lib/lib.esnext.disposable.d.ts +191 -0
  228. package/lib/lib.esnext.error.d.ts +22 -0
  229. package/lib/lib.esnext.full.d.ts +22 -0
  230. package/lib/lib.esnext.intl.d.ts +107 -0
  231. package/lib/lib.esnext.sharedmemory.d.ts +23 -0
  232. package/lib/lib.esnext.temporal.d.ts +485 -0
  233. package/lib/lib.esnext.typedarrays.d.ts +90 -0
  234. package/lib/lib.scripthost.d.ts +320 -0
  235. package/lib/lib.webworker.asynciterable.d.ts +18 -0
  236. package/lib/lib.webworker.d.ts +15606 -0
  237. package/lib/lib.webworker.importscripts.d.ts +21 -0
  238. package/lib/lib.webworker.iterable.d.ts +18 -0
  239. package/lib/logger.js +144 -0
  240. package/lib/package.json +7 -0
  241. package/lib/tsserver.js +57 -0
  242. package/lib/tsserverlibrary.js +171 -0
  243. package/lib/typesMap.json +497 -0
  244. package/lib/typescript.js +373 -0
  245. 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":"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"}
@@ -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"}