@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,366 @@
1
+ /**
2
+ * TypeScript Language Service Plugin for @justscale/typescript
3
+ *
4
+ * Provides enhanced IDE support:
5
+ * - TSPxxxx diagnostics for JustScale processes
6
+ * - Proto and Cap'n Proto schema integration (.proto, .capnp files)
7
+ * - Human-readable DI error messages
8
+ *
9
+ * Based on TypeScriptToLua's plugin pattern.
10
+ *
11
+ * Usage in tsconfig.json:
12
+ * {
13
+ * "compilerOptions": {
14
+ * "plugins": [{ "name": "@justscale/typescript/language-service" }]
15
+ * }
16
+ * }
17
+ */
18
+ import '../plugins/index.js';
19
+ import { getPlugins } from '../plugins/types.js';
20
+ import { processDIDiagnostics } from '../di-errors/index.js';
21
+ import { filterUsingExportsDiagnostics } from '../compiler/errors.js';
22
+ import { extractAndInjectExportsTypes } from '../compiler/exports-prepass.js';
23
+ import { findConfig, defaultConfig } from '../config/index.js';
24
+ import { discoverQuickFixes, watchLockfile } from './quick-fix-discovery.js';
25
+ import { getProcessCodeFixes } from './process-quick-fixes.js';
26
+ const pluginMarker = Symbol('processPluginMarker');
27
+ class ProcessPlugin {
28
+ ts;
29
+ languageService;
30
+ host;
31
+ project;
32
+ serverHost;
33
+ pluginResolvers;
34
+ config;
35
+ processModules;
36
+ /** Modified source texts with __exportsType injected */
37
+ modifiedSnapshots = new Map();
38
+ /** Version at which each file was injected - used for cache invalidation */
39
+ injectedAtVersion = new Map();
40
+ /** Whether the initial exports extraction has been done */
41
+ exportsExtracted = false;
42
+ /** Quick fixes discovered from installed packages */
43
+ quickFixes = [];
44
+ quickFixesLoaded = false;
45
+ stopWatchingLockfile;
46
+ origGetSnapshot;
47
+ origGetVersion;
48
+ constructor(ts, languageService, host, project, serverHost) {
49
+ this.ts = ts;
50
+ this.languageService = languageService;
51
+ this.host = host;
52
+ this.project = project;
53
+ this.serverHost = serverHost;
54
+ // Initialize schema resolvers via plugin registry
55
+ const baseDir = project.getCurrentDirectory?.() || process.cwd();
56
+ this.pluginResolvers = getPlugins().map(plugin => plugin.createResolver({ baseDir, sourceMapMode: 'external' }));
57
+ // Load JustScale config from tsconfig.json
58
+ const parsed = findConfig(baseDir);
59
+ this.config = parsed?.justscale ?? { ...defaultConfig };
60
+ this.processModules = this.config.processModules ?? defaultConfig.processModules;
61
+ // Discover quick fixes from installed packages (async, non-blocking)
62
+ this.loadQuickFixes(baseDir);
63
+ // Override host to serve modified snapshots with __exportsType injected
64
+ this.origGetSnapshot = host.getScriptSnapshot.bind(host);
65
+ this.origGetVersion = host.getScriptVersion.bind(host);
66
+ host.getScriptSnapshot = (fileName) => {
67
+ const version = this.origGetVersion(fileName);
68
+ const injectedAt = this.injectedAtVersion.get(fileName);
69
+ // Cache invalidation: if file changed since injection, clear stale cache
70
+ if (injectedAt && injectedAt !== version) {
71
+ this.modifiedSnapshots.delete(fileName);
72
+ this.injectedAtVersion.delete(fileName);
73
+ this.exportsExtracted = false; // re-extract on next diagnostics call
74
+ }
75
+ const modified = this.modifiedSnapshots.get(fileName);
76
+ if (modified) {
77
+ return this.ts.ScriptSnapshot.fromString(modified);
78
+ }
79
+ return this.origGetSnapshot(fileName);
80
+ };
81
+ host.getScriptVersion = (fileName) => {
82
+ const version = this.origGetVersion(fileName);
83
+ if (this.modifiedSnapshots.has(fileName)) {
84
+ return version + '-exports';
85
+ }
86
+ return version;
87
+ };
88
+ }
89
+ log(message) {
90
+ this.project.log(`[justscale-plugin] ${this.project.getProjectName()}: ${message}`);
91
+ }
92
+ _analyzer;
93
+ _analyzerLoadAttempted = false;
94
+ get analyzer() {
95
+ if (!this._analyzer && !this._analyzerLoadAttempted) {
96
+ this._analyzerLoadAttempted = true;
97
+ // This require may fail during initial package build (before dist exists).
98
+ // That's expected - analyzer becomes available after first build.
99
+ try {
100
+ this._analyzer = require('../compiler/analyzer.js');
101
+ }
102
+ catch {
103
+ // Not built yet - process diagnostics won't be available until rebuild
104
+ }
105
+ }
106
+ return this._analyzer;
107
+ }
108
+ wrap() {
109
+ this.log('Wrapping language service');
110
+ const intercept = Object.create(null);
111
+ intercept[pluginMarker] = this;
112
+ intercept.getSemanticDiagnostics = this.getSemanticDiagnostics.bind(this);
113
+ intercept.getCodeFixesAtPosition = this.getCodeFixesAtPosition.bind(this);
114
+ return new Proxy(this.languageService, {
115
+ get: (target, property) => intercept[property] ??
116
+ target[property],
117
+ });
118
+ }
119
+ loadQuickFixes(baseDir) {
120
+ discoverQuickFixes(baseDir, (msg) => this.log(msg))
121
+ .then((fixes) => {
122
+ this.quickFixes = fixes;
123
+ this.quickFixesLoaded = true;
124
+ if (fixes.length > 0) {
125
+ this.log(`Discovered ${fixes.length} quick fix(es) from packages`);
126
+ }
127
+ })
128
+ .catch((err) => {
129
+ this.log(`Failed to discover quick fixes: ${err}`);
130
+ this.quickFixesLoaded = true;
131
+ });
132
+ // Watch lockfile for dependency changes
133
+ this.stopWatchingLockfile = watchLockfile(baseDir, () => {
134
+ this.quickFixesLoaded = false;
135
+ discoverQuickFixes(baseDir, (msg) => this.log(msg))
136
+ .then((fixes) => {
137
+ this.quickFixes = fixes;
138
+ this.quickFixesLoaded = true;
139
+ this.log(`Re-discovered ${fixes.length} quick fix(es) after lockfile change`);
140
+ })
141
+ .catch(() => { this.quickFixesLoaded = true; });
142
+ }, (msg) => this.log(msg));
143
+ }
144
+ getCodeFixesAtPosition(fileName, start, end, errorCodes, formatOptions, preferences) {
145
+ // Get standard TS code fixes first
146
+ const standardFixes = this.languageService.getCodeFixesAtPosition(fileName, start, end, errorCodes, formatOptions, preferences);
147
+ const program = this.languageService.getProgram();
148
+ if (!program)
149
+ return standardFixes;
150
+ const sourceFile = program.getSourceFile(fileName);
151
+ if (!sourceFile)
152
+ return standardFixes;
153
+ // Process-specific quick fixes (built-in, for TSPxxxx diagnostics)
154
+ const diagnostics = this.languageService.getSemanticDiagnostics(fileName);
155
+ const processFixes = getProcessCodeFixes(sourceFile, diagnostics, errorCodes, this.ts);
156
+ // Package-contributed quick fixes
157
+ const packageFixes = [];
158
+ if (this.quickFixes.length > 0) {
159
+ const checker = program.getTypeChecker();
160
+ const node = findNodeAtPosition(sourceFile, start, this.ts);
161
+ if (node) {
162
+ for (const qf of this.quickFixes) {
163
+ try {
164
+ if (qf.when(node, checker, this.ts)) {
165
+ const changes = qf.fix(node, checker, this.ts);
166
+ packageFixes.push({
167
+ fixName: qf.id,
168
+ description: qf.label,
169
+ changes,
170
+ });
171
+ }
172
+ }
173
+ catch (err) {
174
+ this.log(`Quick fix '${qf.id}' error: ${err}`);
175
+ }
176
+ }
177
+ }
178
+ }
179
+ return [...standardFixes, ...processFixes, ...packageFixes];
180
+ }
181
+ getSemanticDiagnostics(fileName) {
182
+ // Two-pass exports type injection:
183
+ // On first call, extract `using exports` types from the type checker and
184
+ // inject __exportsType into source snapshots. TypeScript re-checks with
185
+ // correct TExports on the next call.
186
+ if (!this.exportsExtracted) {
187
+ this.exportsExtracted = true;
188
+ try {
189
+ const program = this.languageService.getProgram();
190
+ if (program) {
191
+ const modified = extractAndInjectExportsTypes(program);
192
+ if (modified.size > 0) {
193
+ for (const [file, text] of modified) {
194
+ this.modifiedSnapshots.set(file, text);
195
+ this.injectedAtVersion.set(file, this.origGetVersion(file));
196
+ }
197
+ this.log(`Injected export types for ${modified.size} file(s)`);
198
+ }
199
+ }
200
+ }
201
+ catch (e) {
202
+ this.log(`Error extracting exports types: ${e}`);
203
+ }
204
+ }
205
+ const diagnostics = this.languageService.getSemanticDiagnostics(fileName);
206
+ const program = this.languageService.getProgram();
207
+ if (!program)
208
+ return diagnostics;
209
+ const sourceFile = program.getSourceFile(fileName);
210
+ if (!sourceFile || sourceFile.isDeclarationFile)
211
+ return diagnostics;
212
+ // Process DI errors for better readability (applies to all files)
213
+ const processed = processDIDiagnostics(diagnostics);
214
+ const additionalDiagnostics = [];
215
+ // Check for process file diagnostics
216
+ if (this.isProcessFile(sourceFile)) {
217
+ try {
218
+ const processDiagnostics = this.getProcessDiagnostics(program, sourceFile);
219
+ additionalDiagnostics.push(...processDiagnostics);
220
+ }
221
+ catch (e) {
222
+ this.log(`Error getting process diagnostics: ${e}`);
223
+ }
224
+ }
225
+ // Check for schema (proto/capnp) import diagnostics
226
+ try {
227
+ const schemaDiagnostics = this.getSchemaDiagnostics(sourceFile);
228
+ additionalDiagnostics.push(...schemaDiagnostics);
229
+ }
230
+ catch (e) {
231
+ this.log(`Error getting schema diagnostics: ${e}`);
232
+ }
233
+ // Filter TS2850 for `using exports` declarations
234
+ const filtered = filterUsingExportsDiagnostics(processed);
235
+ return [...filtered, ...additionalDiagnostics];
236
+ }
237
+ getSchemaDiagnostics(sourceFile) {
238
+ const diagnostics = [];
239
+ const plugins = getPlugins();
240
+ // Visit all imports to find format-specific imports (proto, capnp, graphql, ...)
241
+ this.ts.forEachChild(sourceFile, (node) => {
242
+ if (this.ts.isImportDeclaration(node)) {
243
+ const moduleSpecifier = node.moduleSpecifier;
244
+ if (this.ts.isStringLiteral(moduleSpecifier)) {
245
+ const importPath = moduleSpecifier.text;
246
+ for (let i = 0; i < plugins.length; i++) {
247
+ const plugin = plugins[i];
248
+ const resolver = this.pluginResolvers[i];
249
+ if (resolver.isImport(importPath)) {
250
+ const info = resolver.resolveModule(importPath, sourceFile.fileName);
251
+ if (info) {
252
+ const pluginDiags = plugin.getDiagnosticsForImport(info, importPath, sourceFile, this.ts);
253
+ // Override start/length to point at the import specifier
254
+ for (const diag of pluginDiags) {
255
+ diagnostics.push({
256
+ ...diag,
257
+ start: moduleSpecifier.getStart() + 1,
258
+ length: importPath.length,
259
+ });
260
+ }
261
+ }
262
+ }
263
+ }
264
+ }
265
+ }
266
+ });
267
+ return diagnostics;
268
+ }
269
+ isProcessFile(sourceFile) {
270
+ // Check filename pattern from config
271
+ const pattern = this.config.processFilePattern ?? defaultConfig.processFilePattern;
272
+ if (pattern) {
273
+ const stripped = pattern.replace(/\*/g, '');
274
+ if (sourceFile.fileName.includes(stripped))
275
+ return true;
276
+ }
277
+ // Check imports against configured process modules
278
+ for (const stmt of sourceFile.statements) {
279
+ if (this.ts.isImportDeclaration(stmt)) {
280
+ const moduleSpecifier = stmt.moduleSpecifier;
281
+ if (this.ts.isStringLiteral(moduleSpecifier)) {
282
+ if (this.processModules.includes(moduleSpecifier.text)) {
283
+ return true;
284
+ }
285
+ }
286
+ }
287
+ }
288
+ return false;
289
+ }
290
+ getProcessDiagnostics(program, sourceFile) {
291
+ if (!this.analyzer)
292
+ return [];
293
+ const diagnostics = [];
294
+ const typeChecker = program.getTypeChecker();
295
+ const visit = (node) => {
296
+ if (this.ts.isCallExpression(node)) {
297
+ const expr = node.expression;
298
+ if (this.ts.isIdentifier(expr) && expr.text === 'createProcess') {
299
+ const configArg = node.arguments[0];
300
+ if (configArg && this.ts.isObjectLiteralExpression(configArg)) {
301
+ const handler = this.findHandler(configArg);
302
+ if (handler) {
303
+ const analysis = this.analyzer.analyzeHandler(handler, typeChecker);
304
+ diagnostics.push(...analysis.diagnostics);
305
+ }
306
+ }
307
+ }
308
+ }
309
+ this.ts.forEachChild(node, visit);
310
+ };
311
+ visit(sourceFile);
312
+ return diagnostics;
313
+ }
314
+ findHandler(configObj) {
315
+ for (const prop of configObj.properties) {
316
+ if (this.ts.isMethodDeclaration(prop)) {
317
+ if (this.ts.isIdentifier(prop.name) && prop.name.text === 'handler') {
318
+ return prop;
319
+ }
320
+ }
321
+ else if (this.ts.isPropertyAssignment(prop)) {
322
+ if (this.ts.isIdentifier(prop.name) && prop.name.text === 'handler') {
323
+ if (this.ts.isFunctionExpression(prop.initializer) ||
324
+ this.ts.isArrowFunction(prop.initializer)) {
325
+ return prop.initializer;
326
+ }
327
+ }
328
+ }
329
+ }
330
+ return undefined;
331
+ }
332
+ }
333
+ /**
334
+ * Find the most specific AST node at a given position.
335
+ */
336
+ function findNodeAtPosition(sourceFile, position, tsInstance) {
337
+ function find(node) {
338
+ if (position >= node.getStart(sourceFile) && position < node.getEnd()) {
339
+ return tsInstance.forEachChild(node, find) || node;
340
+ }
341
+ return undefined;
342
+ }
343
+ return find(sourceFile);
344
+ }
345
+ /**
346
+ * Plugin factory - entry point for TypeScript Language Service.
347
+ */
348
+ const init = ({ typescript }) => {
349
+ return {
350
+ create({ languageService, languageServiceHost, project, serverHost }) {
351
+ // Check if we're already wrapped
352
+ const existing = languageService[pluginMarker];
353
+ if (existing) {
354
+ return languageService;
355
+ }
356
+ const plugin = new ProcessPlugin(typescript, languageService, languageServiceHost, project, serverHost);
357
+ return plugin.wrap();
358
+ },
359
+ };
360
+ };
361
+ // ESM default export
362
+ export default init;
363
+ init.default = init;
364
+ if (typeof module !== 'undefined')
365
+ module.exports = init;
366
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/language-service/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Built-in process quick fixes.
3
+ *
4
+ * Provides code actions for common process compiler diagnostics (TSPxxxx).
5
+ * These are registered alongside package-contributed quick fixes.
6
+ */
7
+ import type ts from 'typescript';
8
+ interface ProcessCodeFix {
9
+ errorCode: number;
10
+ fixName: string;
11
+ description: string;
12
+ apply: (sourceFile: ts.SourceFile, diagnostic: ts.Diagnostic, tsLib: typeof ts) => ts.FileTextChanges[] | null;
13
+ }
14
+ export declare const processCodeFixes: ProcessCodeFix[];
15
+ /**
16
+ * Get process-specific code fixes for the given error codes.
17
+ */
18
+ export declare function getProcessCodeFixes(sourceFile: ts.SourceFile, diagnostics: readonly ts.Diagnostic[], errorCodes: readonly number[], tsLib: typeof ts): ts.CodeFixAction[];
19
+ export {};
20
+ //# sourceMappingURL=process-quick-fixes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-quick-fixes.d.ts","sourceRoot":"","sources":["../../src/language-service/process-quick-fixes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAMjC,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,eAAe,EAAE,GAAG,IAAI,CAAA;CAC/G;AAyED,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAG5C,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,WAAW,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,EACrC,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,KAAK,EAAE,OAAO,EAAE,GACf,EAAE,CAAC,aAAa,EAAE,CAsBpB"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Built-in process quick fixes.
3
+ *
4
+ * Provides code actions for common process compiler diagnostics (TSPxxxx).
5
+ * These are registered alongside package-contributed quick fixes.
6
+ */
7
+ // Process diagnostic codes (100000 + TSPxxxx)
8
+ const TSP1004 = 101004; // Handler must be async
9
+ const TSP1007 = 101007; // Try-catch around suspension
10
+ /**
11
+ * TSP1004: Handler must be async function
12
+ * Fix: add `async` keyword to the handler
13
+ */
14
+ const fixAsyncHandler = {
15
+ errorCode: TSP1004,
16
+ fixName: 'justscale.process.add-async',
17
+ description: 'Add async to process handler',
18
+ apply(sourceFile, diagnostic, tsLib) {
19
+ const start = diagnostic.start;
20
+ if (start === undefined)
21
+ return null;
22
+ const node = findNodeAtPosition(sourceFile, start, tsLib);
23
+ if (!node)
24
+ return null;
25
+ // Find the function expression/arrow function
26
+ let fn = node;
27
+ while (fn && !tsLib.isFunctionExpression(fn) && !tsLib.isArrowFunction(fn) && !tsLib.isMethodDeclaration(fn)) {
28
+ fn = fn.parent;
29
+ }
30
+ if (!fn)
31
+ return null;
32
+ // Insert `async ` before the function keyword or parameters
33
+ const insertPos = fn.getStart(sourceFile);
34
+ return [{
35
+ fileName: sourceFile.fileName,
36
+ textChanges: [{
37
+ span: { start: insertPos, length: 0 },
38
+ newText: 'async ',
39
+ }],
40
+ }];
41
+ },
42
+ };
43
+ /**
44
+ * TSP1007: Try-catch around suspension points
45
+ * Fix: remove the try-catch wrapper
46
+ */
47
+ const fixRemoveTryCatch = {
48
+ errorCode: TSP1007,
49
+ fixName: 'justscale.process.remove-try-catch',
50
+ description: 'Remove try-catch (not allowed around suspension points)',
51
+ apply(sourceFile, diagnostic, tsLib) {
52
+ const start = diagnostic.start;
53
+ if (start === undefined)
54
+ return null;
55
+ const node = findNodeAtPosition(sourceFile, start, tsLib);
56
+ if (!node)
57
+ return null;
58
+ // Find the try statement
59
+ let tryStmt = node;
60
+ while (tryStmt && !tsLib.isTryStatement(tryStmt)) {
61
+ tryStmt = tryStmt.parent;
62
+ }
63
+ if (!tryStmt || !tsLib.isTryStatement(tryStmt))
64
+ return null;
65
+ // Replace try { ...body... } catch { ... } with just the body
66
+ const tryBlock = tryStmt.tryBlock;
67
+ const bodyText = tryBlock.statements.map(s => s.getFullText(sourceFile)).join('');
68
+ return [{
69
+ fileName: sourceFile.fileName,
70
+ textChanges: [{
71
+ span: { start: tryStmt.getStart(sourceFile), length: tryStmt.getEnd() - tryStmt.getStart(sourceFile) },
72
+ newText: bodyText.trim(),
73
+ }],
74
+ }];
75
+ },
76
+ };
77
+ export const processCodeFixes = [
78
+ fixAsyncHandler,
79
+ fixRemoveTryCatch,
80
+ ];
81
+ /**
82
+ * Get process-specific code fixes for the given error codes.
83
+ */
84
+ export function getProcessCodeFixes(sourceFile, diagnostics, errorCodes, tsLib) {
85
+ const fixes = [];
86
+ for (const fix of processCodeFixes) {
87
+ if (!errorCodes.includes(fix.errorCode))
88
+ continue;
89
+ // Find all matching diagnostics (not just the first)
90
+ for (const diagnostic of diagnostics) {
91
+ if (diagnostic.code !== fix.errorCode || diagnostic.file !== sourceFile)
92
+ continue;
93
+ const changes = fix.apply(sourceFile, diagnostic, tsLib);
94
+ if (changes) {
95
+ fixes.push({
96
+ fixName: fix.fixName,
97
+ description: fix.description,
98
+ changes,
99
+ });
100
+ }
101
+ }
102
+ }
103
+ return fixes;
104
+ }
105
+ function findNodeAtPosition(sourceFile, position, tsLib) {
106
+ function find(node) {
107
+ if (position >= node.getStart(sourceFile) && position < node.getEnd()) {
108
+ return tsLib.forEachChild(node, find) || node;
109
+ }
110
+ return undefined;
111
+ }
112
+ return find(sourceFile);
113
+ }
114
+ //# sourceMappingURL=process-quick-fixes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-quick-fixes.js","sourceRoot":"","sources":["../../src/language-service/process-quick-fixes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Quick Fix Discovery
3
+ *
4
+ * Scans installed packages for "justscale" field with "quickFixes" entry,
5
+ * imports the quick fix modules, and registers them with the language service.
6
+ *
7
+ * Watches the lockfile for changes to detect new packages.
8
+ */
9
+ /**
10
+ * Quick fix definition contributed by packages.
11
+ *
12
+ * Uses `any` for TS types to avoid cross-version type conflicts
13
+ * between the compiler package (TS 5.x) and user packages (TS 6.x).
14
+ * At runtime, the actual TS instance is passed in - types are loose but safe.
15
+ */
16
+ export interface QuickFixDefinition {
17
+ id: string;
18
+ when: (node: any, checker: any, tsLib: any) => boolean;
19
+ label: string;
20
+ fix: (node: any, checker: any, tsLib: any) => {
21
+ fileName: string;
22
+ textChanges: {
23
+ span: {
24
+ start: number;
25
+ length: number;
26
+ };
27
+ newText: string;
28
+ }[];
29
+ }[];
30
+ }
31
+ /**
32
+ * Discover quick fix modules from installed packages.
33
+ */
34
+ export declare function discoverQuickFixes(projectRoot: string, log: (msg: string) => void): Promise<QuickFixDefinition[]>;
35
+ /**
36
+ * Watch lockfile for changes and re-discover quick fixes.
37
+ */
38
+ export declare function watchLockfile(projectRoot: string, onChange: () => void, log: (msg: string) => void): () => void;
39
+ //# sourceMappingURL=quick-fix-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick-fix-discovery.d.ts","sourceRoot":"","sources":["../../src/language-service/quick-fix-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAA;IACtD,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE;YAAE,IAAI,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,EAAE,CAAA;CAClJ;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAiDvH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,IAAI,EACpB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACzB,MAAM,IAAI,CAyBZ"}