@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,215 @@
1
+ /**
2
+ * Configuration support for JustScale TypeScript compiler
3
+ *
4
+ * JustScale extends tsconfig.json with a custom "justscale" section,
5
+ * similar to how TypeScriptToLua uses a "tstl" section.
6
+ *
7
+ * Example tsconfig.json:
8
+ * ```json
9
+ * {
10
+ * "compilerOptions": {
11
+ * "target": "ESNext",
12
+ * "module": "NodeNext"
13
+ * },
14
+ * "justscale": {
15
+ * "processFilePattern": "*.process.ts",
16
+ * "strict": true,
17
+ * "plugins": ["./my-plugin.js"]
18
+ * }
19
+ * }
20
+ * ```
21
+ */
22
+ import ts from 'typescript';
23
+ import { dirname } from 'node:path';
24
+ /**
25
+ * Default JustScale configuration
26
+ */
27
+ export const defaultConfig = {
28
+ processFilePattern: '*.process.ts',
29
+ strict: true,
30
+ plugins: [],
31
+ verbose: false,
32
+ sourceMap: true,
33
+ paths: {},
34
+ processModules: ['@justscale/core/process'],
35
+ };
36
+ /**
37
+ * Parse a tsconfig.json file and extract JustScale configuration
38
+ */
39
+ export function parseConfig(configPath, existingOptions) {
40
+ const errors = [];
41
+ // Read and parse the config file
42
+ const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
43
+ if (configFile.error) {
44
+ errors.push(configFile.error);
45
+ return {
46
+ compilerOptions: existingOptions ?? {},
47
+ fileNames: [],
48
+ justscale: { ...defaultConfig },
49
+ configFilePath: configPath,
50
+ errors,
51
+ };
52
+ }
53
+ const configDir = dirname(configPath);
54
+ // Parse TypeScript config
55
+ const parsedTsConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, configDir, existingOptions);
56
+ errors.push(...parsedTsConfig.errors);
57
+ // Extract JustScale config
58
+ const rawJustscaleConfig = configFile.config.justscale || {};
59
+ const justscaleConfig = parseJustScaleConfig(rawJustscaleConfig, configDir, errors);
60
+ return {
61
+ compilerOptions: parsedTsConfig.options,
62
+ fileNames: parsedTsConfig.fileNames,
63
+ justscale: justscaleConfig,
64
+ projectReferences: parsedTsConfig.projectReferences,
65
+ configFilePath: configPath,
66
+ errors,
67
+ };
68
+ }
69
+ /**
70
+ * Parse and validate JustScale configuration
71
+ */
72
+ function parseJustScaleConfig(raw, configDir, errors) {
73
+ const config = { ...defaultConfig };
74
+ // Process file pattern
75
+ if (typeof raw.processFilePattern === 'string') {
76
+ config.processFilePattern = raw.processFilePattern;
77
+ }
78
+ else if (raw.processFilePattern !== undefined) {
79
+ errors.push(createConfigError('processFilePattern must be a string'));
80
+ }
81
+ // Strict mode
82
+ if (typeof raw.strict === 'boolean') {
83
+ config.strict = raw.strict;
84
+ }
85
+ else if (raw.strict !== undefined) {
86
+ errors.push(createConfigError('strict must be a boolean'));
87
+ }
88
+ // Verbose
89
+ if (typeof raw.verbose === 'boolean') {
90
+ config.verbose = raw.verbose;
91
+ }
92
+ else if (raw.verbose !== undefined) {
93
+ errors.push(createConfigError('verbose must be a boolean'));
94
+ }
95
+ // Source map
96
+ if (typeof raw.sourceMap === 'boolean') {
97
+ config.sourceMap = raw.sourceMap;
98
+ }
99
+ else if (raw.sourceMap !== undefined) {
100
+ errors.push(createConfigError('sourceMap must be a boolean'));
101
+ }
102
+ // Plugins
103
+ if (Array.isArray(raw.plugins)) {
104
+ config.plugins = raw.plugins.map((plugin) => {
105
+ if (typeof plugin === 'string') {
106
+ return plugin;
107
+ }
108
+ if (typeof plugin === 'object' && plugin !== null) {
109
+ const pluginConfig = plugin;
110
+ if (typeof pluginConfig.name !== 'string') {
111
+ errors.push(createConfigError('plugin.name must be a string'));
112
+ return '';
113
+ }
114
+ return {
115
+ name: pluginConfig.name,
116
+ options: pluginConfig.options,
117
+ };
118
+ }
119
+ errors.push(createConfigError('plugin must be a string or object'));
120
+ return '';
121
+ }).filter(Boolean);
122
+ }
123
+ else if (raw.plugins !== undefined) {
124
+ errors.push(createConfigError('plugins must be an array'));
125
+ }
126
+ // Process modules
127
+ if (Array.isArray(raw.processModules)) {
128
+ const validModules = raw.processModules.filter((m) => typeof m === 'string');
129
+ if (validModules.length !== raw.processModules.length) {
130
+ errors.push(createConfigError('processModules must be an array of strings'));
131
+ }
132
+ config.processModules = [...defaultConfig.processModules, ...validModules];
133
+ }
134
+ else if (raw.processModules !== undefined) {
135
+ errors.push(createConfigError('processModules must be an array'));
136
+ }
137
+ // Paths
138
+ if (typeof raw.paths === 'object' && raw.paths !== null) {
139
+ config.paths = raw.paths;
140
+ }
141
+ else if (raw.paths !== undefined) {
142
+ errors.push(createConfigError('paths must be an object'));
143
+ }
144
+ return config;
145
+ }
146
+ /**
147
+ * Create a configuration error diagnostic
148
+ */
149
+ function createConfigError(message) {
150
+ return {
151
+ category: ts.DiagnosticCategory.Error,
152
+ code: 100001,
153
+ file: undefined,
154
+ start: undefined,
155
+ length: undefined,
156
+ messageText: `JustScale config error: ${message}`,
157
+ };
158
+ }
159
+ /**
160
+ * Find and parse tsconfig.json from a directory
161
+ */
162
+ export function findConfig(searchPath) {
163
+ const configPath = ts.findConfigFile(searchPath, ts.sys.fileExists, 'tsconfig.json');
164
+ if (!configPath) {
165
+ return undefined;
166
+ }
167
+ return parseConfig(configPath);
168
+ }
169
+ /**
170
+ * Check if a file matches the process file pattern
171
+ */
172
+ export function isProcessFile(fileName, config = defaultConfig) {
173
+ // Check file pattern
174
+ const pattern = config.processFilePattern ?? defaultConfig.processFilePattern;
175
+ if (pattern) {
176
+ const regex = globToRegex(pattern);
177
+ if (regex.test(fileName)) {
178
+ return true;
179
+ }
180
+ }
181
+ return false;
182
+ }
183
+ /**
184
+ * Convert a simple glob pattern to a regex
185
+ */
186
+ function globToRegex(glob) {
187
+ const escaped = glob
188
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
189
+ .replace(/\*\*/g, '{{GLOBSTAR}}')
190
+ .replace(/\*/g, '[^/]*')
191
+ .replace(/{{GLOBSTAR}}/g, '.*')
192
+ .replace(/\?/g, '.');
193
+ return new RegExp(escaped);
194
+ }
195
+ /**
196
+ * Merge two configurations, with the second taking precedence
197
+ */
198
+ export function mergeConfig(base, override) {
199
+ return {
200
+ ...base,
201
+ ...override,
202
+ plugins: [...(base.plugins ?? []), ...(override.plugins ?? [])],
203
+ processModules: [
204
+ ...new Set([
205
+ ...(base.processModules ?? defaultConfig.processModules),
206
+ ...(override.processModules ?? []),
207
+ ]),
208
+ ],
209
+ paths: {
210
+ ...(base.paths ?? {}),
211
+ ...(override.paths ?? {}),
212
+ },
213
+ };
214
+ }
215
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Parses and formats DI type errors into human-readable messages.
3
+ * Detects errors via branded markers (__brand, _missing, _hint) from MissingDepsError.
4
+ * Error codes: DI1001 missing deps, DI1002 circular, DI1003 unsatisfied constraint.
5
+ */
6
+ import ts from 'typescript';
7
+ /**
8
+ * Custom error codes for dependency injection.
9
+ * Range: DI1000-DI9999
10
+ *
11
+ * These are offset by 200000 to avoid collision with TypeScript codes
12
+ * (100000 range is used by TSP process errors).
13
+ */
14
+ export declare const DIErrorCode: {
15
+ /**
16
+ * DI1001: Missing dependencies.
17
+ *
18
+ * A component requires dependencies that haven't been added to the builder.
19
+ * Add the missing services/repositories before this component.
20
+ *
21
+ * Example:
22
+ * .add(UserService) // Error: requires ModelRepository<User>
23
+ *
24
+ * Fix:
25
+ * .add(ModelRepository.of(User).bind(PgUser))
26
+ * .add(UserService) // Now works
27
+ */
28
+ readonly MissingDependencies: 1001;
29
+ /**
30
+ * DI1002: Circular dependency detected.
31
+ *
32
+ * Two or more components depend on each other in a cycle.
33
+ * Refactor to break the cycle using interfaces or lazy injection.
34
+ */
35
+ readonly CircularDependency: 1002;
36
+ /**
37
+ * DI1003: Unsatisfied constraint.
38
+ *
39
+ * A type constraint (RequiresSatisfied) was not met.
40
+ */
41
+ readonly UnsatisfiedConstraint: 1003;
42
+ };
43
+ export type DIErrorCode = (typeof DIErrorCode)[keyof typeof DIErrorCode];
44
+ /**
45
+ * Format error code for display.
46
+ */
47
+ export declare function formatDIErrorCode(code: DIErrorCode): string;
48
+ /**
49
+ * Check if a diagnostic is a DI-specific error.
50
+ */
51
+ export declare function isDIDiagnostic(diagnostic: ts.Diagnostic): boolean;
52
+ /**
53
+ * Get the DI error code from a diagnostic.
54
+ */
55
+ export declare function getDIErrorCode(diagnostic: ts.Diagnostic): DIErrorCode | null;
56
+ /**
57
+ * Format a single token type string to a human-readable name.
58
+ */
59
+ export declare function formatTokenName(typeStr: string): string;
60
+ /**
61
+ * Parse a union type string into individual types.
62
+ * Handles nested generics correctly.
63
+ *
64
+ * Example: "A<B> | C | D<E, F>" -> ["A<B>", "C", "D<E, F>"]
65
+ */
66
+ export declare function parseUnionType(typeStr: string): string[];
67
+ /**
68
+ * Extract the inner types from a generic type.
69
+ * Example: "MissingDepsError<A, B>" -> ["A", "B"]
70
+ */
71
+ export declare function extractGenericArgs(typeStr: string): string[];
72
+ /**
73
+ * Parsed MissingDepsError information.
74
+ */
75
+ export interface ParsedDIError {
76
+ /** The component being added (if extractable) */
77
+ component: string | null;
78
+ /** Human-readable component name */
79
+ componentName: string;
80
+ /** The missing dependency tokens */
81
+ missingDeps: string[];
82
+ /** Human-readable missing dependency names */
83
+ missingDepNames: string[];
84
+ }
85
+ /**
86
+ * Check if a type string contains DI error markers.
87
+ * Looks for the branded fields from MissingDepsError:
88
+ * - __brand: 'MissingDependencies'
89
+ * - _missing: <type>
90
+ * - _hint: 'Add the missing dependencies...'
91
+ */
92
+ export declare function hasDIErrorMarkers(typeStr: string): boolean;
93
+ /**
94
+ * Parse a MissingDepsError type string.
95
+ * Handles both:
96
+ * 1. Generic form: MissingDepsError<Component, Missing>
97
+ * 2. Structural form: { __brand: 'MissingDependencies'; _missing: Type; _hint: ... }
98
+ *
99
+ * @param typeStr The full type string
100
+ * @returns Parsed error info, or null if not a MissingDepsError
101
+ */
102
+ export declare function parseMissingDepsError(typeStr: string): ParsedDIError | null;
103
+ /**
104
+ * Format a parsed DI error into a human-readable message.
105
+ * Includes the DI error code prefix.
106
+ */
107
+ export declare function formatDIError(parsed: ParsedDIError, code?: DIErrorCode): string;
108
+ /**
109
+ * Check if a diagnostic is a DI-related type error.
110
+ * Uses the branded markers (__brand, _missing, _hint) for reliable detection.
111
+ */
112
+ export declare function isDITypeDiagnostic(diagnostic: ts.Diagnostic): boolean;
113
+ /**
114
+ * Try to rewrite a diagnostic with better DI error formatting.
115
+ * Returns null if the diagnostic shouldn't be rewritten.
116
+ */
117
+ export declare function rewriteDIDiagnostic(diagnostic: ts.Diagnostic): ts.Diagnostic | null;
118
+ /**
119
+ * Create a DI diagnostic from scratch.
120
+ */
121
+ export declare function createDIDiagnostic(code: DIErrorCode, file: ts.SourceFile | undefined, start: number, length: number, message: string): ts.Diagnostic;
122
+ /**
123
+ * Process diagnostics and rewrite DI errors with better messages.
124
+ */
125
+ export declare function processDIDiagnostics(diagnostics: readonly ts.Diagnostic[]): ts.Diagnostic[];
126
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/di-errors/formatter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B;;;;;;GAMG;AACH,eAAO,MAAM,WAAW;IACtB;;;;;;;;;;;;OAYG;;IAGH;;;;;OAKG;;IAGH;;;;OAIG;;CAEK,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAOzE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,OAAO,CAEjE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,WAAW,GAAG,IAAI,CAG5E;AA6CD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBvD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA6BxD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAuC5D;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAA;IACrB,oCAAoC;IACpC,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,8CAA8C;IAC9C,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAY1D;AAeD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA+C3E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,GAAE,WAA6C,GAAG,MAAM,CAgBhH;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,OAAO,CASrE;AA0BD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,GAAG,IAAI,CAqBnF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,EAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,EAAE,CAAC,UAAU,CAUf;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAK3F"}