@justscale/typescript 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +128 -0
- package/dist/api.d.ts +144 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +380 -0
- package/dist/api.js.map +1 -0
- package/dist/compiler/analyzer.d.ts +247 -0
- package/dist/compiler/analyzer.d.ts.map +1 -0
- package/dist/compiler/analyzer.js +3201 -0
- package/dist/compiler/analyzer.js.map +1 -0
- package/dist/compiler/cli.d.ts +12 -0
- package/dist/compiler/cli.d.ts.map +1 -0
- package/dist/compiler/cli.js +209 -0
- package/dist/compiler/cli.js.map +1 -0
- package/dist/compiler/compile.d.ts +26 -0
- package/dist/compiler/compile.d.ts.map +1 -0
- package/dist/compiler/compile.js +121 -0
- package/dist/compiler/compile.js.map +1 -0
- package/dist/compiler/errors.d.ts +336 -0
- package/dist/compiler/errors.d.ts.map +1 -0
- package/dist/compiler/errors.js +466 -0
- package/dist/compiler/errors.js.map +1 -0
- package/dist/compiler/exports-prepass.d.ts +31 -0
- package/dist/compiler/exports-prepass.d.ts.map +1 -0
- package/dist/compiler/exports-prepass.js +249 -0
- package/dist/compiler/exports-prepass.js.map +1 -0
- package/dist/compiler/hmr-change-detector.d.ts +47 -0
- package/dist/compiler/hmr-change-detector.d.ts.map +1 -0
- package/dist/compiler/hmr-change-detector.js +395 -0
- package/dist/compiler/hmr-change-detector.js.map +1 -0
- package/dist/compiler/hmr-transformer.d.ts +54 -0
- package/dist/compiler/hmr-transformer.d.ts.map +1 -0
- package/dist/compiler/hmr-transformer.js +535 -0
- package/dist/compiler/hmr-transformer.js.map +1 -0
- package/dist/compiler/index.d.ts +19 -0
- package/dist/compiler/index.d.ts.map +1 -0
- package/dist/compiler/index.js +16 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/compiler/primitive-detector.d.ts +70 -0
- package/dist/compiler/primitive-detector.d.ts.map +1 -0
- package/dist/compiler/primitive-detector.js +338 -0
- package/dist/compiler/primitive-detector.js.map +1 -0
- package/dist/compiler/ptsc.d.ts +40 -0
- package/dist/compiler/ptsc.d.ts.map +1 -0
- package/dist/compiler/ptsc.js +462 -0
- package/dist/compiler/ptsc.js.map +1 -0
- package/dist/compiler/rewriter.d.ts +96 -0
- package/dist/compiler/rewriter.d.ts.map +1 -0
- package/dist/compiler/rewriter.js +418 -0
- package/dist/compiler/rewriter.js.map +1 -0
- package/dist/compiler/step-hash.d.ts +43 -0
- package/dist/compiler/step-hash.d.ts.map +1 -0
- package/dist/compiler/step-hash.js +83 -0
- package/dist/compiler/step-hash.js.map +1 -0
- package/dist/compiler/switch-codegen.d.ts +84 -0
- package/dist/compiler/switch-codegen.d.ts.map +1 -0
- package/dist/compiler/switch-codegen.js +1540 -0
- package/dist/compiler/switch-codegen.js.map +1 -0
- package/dist/compiler/transformer.d.ts +29 -0
- package/dist/compiler/transformer.d.ts.map +1 -0
- package/dist/compiler/transformer.js +216 -0
- package/dist/compiler/transformer.js.map +1 -0
- package/dist/config/index.d.ts +122 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +215 -0
- package/dist/config/index.js.map +1 -0
- package/dist/di-errors/formatter.d.ts +126 -0
- package/dist/di-errors/formatter.d.ts.map +1 -0
- package/dist/di-errors/formatter.js +384 -0
- package/dist/di-errors/formatter.js.map +1 -0
- package/dist/di-errors/index.d.ts +5 -0
- package/dist/di-errors/index.d.ts.map +1 -0
- package/dist/di-errors/index.js +13 -0
- package/dist/di-errors/index.js.map +1 -0
- package/dist/editor.d.ts +11 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +2 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/language-service/index.d.ts +52 -0
- package/dist/language-service/index.d.ts.map +1 -0
- package/dist/language-service/index.js +366 -0
- package/dist/language-service/index.js.map +1 -0
- package/dist/language-service/process-quick-fixes.d.ts +20 -0
- package/dist/language-service/process-quick-fixes.d.ts.map +1 -0
- package/dist/language-service/process-quick-fixes.js +114 -0
- package/dist/language-service/process-quick-fixes.js.map +1 -0
- package/dist/language-service/quick-fix-discovery.d.ts +39 -0
- package/dist/language-service/quick-fix-discovery.d.ts.map +1 -0
- package/dist/language-service/quick-fix-discovery.js +124 -0
- package/dist/language-service/quick-fix-discovery.js.map +1 -0
- package/dist/loader/incremental.d.ts +50 -0
- package/dist/loader/incremental.d.ts.map +1 -0
- package/dist/loader/incremental.js +151 -0
- package/dist/loader/incremental.js.map +1 -0
- package/dist/loader/index.d.ts +25 -0
- package/dist/loader/index.d.ts.map +1 -0
- package/dist/loader/index.js +24 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/loader.d.ts +52 -0
- package/dist/loader/loader.d.ts.map +1 -0
- package/dist/loader/loader.js +248 -0
- package/dist/loader/loader.js.map +1 -0
- package/dist/loader/register.d.ts +14 -0
- package/dist/loader/register.d.ts.map +1 -0
- package/dist/loader/register.js +20 -0
- package/dist/loader/register.js.map +1 -0
- package/dist/plugins/index.d.ts +13 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +13 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/index.public.d.ts +13 -0
- package/dist/plugins/index.public.d.ts.map +1 -0
- package/dist/plugins/index.public.js +13 -0
- package/dist/plugins/index.public.js.map +1 -0
- package/dist/plugins/types.d.ts +83 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +24 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/server/index.d.ts +33 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +42 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/tsserver.d.ts +28 -0
- package/dist/server/tsserver.d.ts.map +1 -0
- package/dist/server/tsserver.js +126 -0
- package/dist/server/tsserver.js.map +1 -0
- package/lib/lib.d.ts +20 -0
- package/lib/lib.decorators.d.ts +382 -0
- package/lib/lib.decorators.legacy.d.ts +20 -0
- package/lib/lib.dom.asynciterable.d.ts +18 -0
- package/lib/lib.dom.d.ts +45125 -0
- package/lib/lib.dom.iterable.d.ts +18 -0
- package/lib/lib.es2015.collection.d.ts +150 -0
- package/lib/lib.es2015.core.d.ts +595 -0
- package/lib/lib.es2015.d.ts +26 -0
- package/lib/lib.es2015.generator.d.ts +75 -0
- package/lib/lib.es2015.iterable.d.ts +603 -0
- package/lib/lib.es2015.promise.d.ts +79 -0
- package/lib/lib.es2015.proxy.d.ts +126 -0
- package/lib/lib.es2015.reflect.d.ts +142 -0
- package/lib/lib.es2015.symbol.d.ts +44 -0
- package/lib/lib.es2015.symbol.wellknown.d.ts +324 -0
- package/lib/lib.es2016.array.include.d.ts +114 -0
- package/lib/lib.es2016.d.ts +19 -0
- package/lib/lib.es2016.full.d.ts +21 -0
- package/lib/lib.es2016.intl.d.ts +29 -0
- package/lib/lib.es2017.arraybuffer.d.ts +19 -0
- package/lib/lib.es2017.d.ts +24 -0
- package/lib/lib.es2017.date.d.ts +29 -0
- package/lib/lib.es2017.full.d.ts +21 -0
- package/lib/lib.es2017.intl.d.ts +42 -0
- package/lib/lib.es2017.object.d.ts +47 -0
- package/lib/lib.es2017.sharedmemory.d.ts +133 -0
- package/lib/lib.es2017.string.d.ts +43 -0
- package/lib/lib.es2017.typedarrays.d.ts +51 -0
- package/lib/lib.es2018.asyncgenerator.d.ts +75 -0
- package/lib/lib.es2018.asynciterable.d.ts +51 -0
- package/lib/lib.es2018.d.ts +22 -0
- package/lib/lib.es2018.full.d.ts +22 -0
- package/lib/lib.es2018.intl.d.ts +81 -0
- package/lib/lib.es2018.promise.d.ts +28 -0
- package/lib/lib.es2018.regexp.d.ts +35 -0
- package/lib/lib.es2019.array.d.ts +77 -0
- package/lib/lib.es2019.d.ts +22 -0
- package/lib/lib.es2019.full.d.ts +22 -0
- package/lib/lib.es2019.intl.d.ts +21 -0
- package/lib/lib.es2019.object.d.ts +31 -0
- package/lib/lib.es2019.string.d.ts +35 -0
- package/lib/lib.es2019.symbol.d.ts +22 -0
- package/lib/lib.es2020.bigint.d.ts +763 -0
- package/lib/lib.es2020.d.ts +25 -0
- package/lib/lib.es2020.date.d.ts +40 -0
- package/lib/lib.es2020.full.d.ts +22 -0
- package/lib/lib.es2020.intl.d.ts +472 -0
- package/lib/lib.es2020.number.d.ts +26 -0
- package/lib/lib.es2020.promise.d.ts +45 -0
- package/lib/lib.es2020.sharedmemory.d.ts +97 -0
- package/lib/lib.es2020.string.d.ts +42 -0
- package/lib/lib.es2020.symbol.wellknown.d.ts +39 -0
- package/lib/lib.es2021.d.ts +21 -0
- package/lib/lib.es2021.full.d.ts +22 -0
- package/lib/lib.es2021.intl.d.ts +164 -0
- package/lib/lib.es2021.promise.d.ts +46 -0
- package/lib/lib.es2021.string.d.ts +31 -0
- package/lib/lib.es2021.weakref.d.ts +76 -0
- package/lib/lib.es2022.array.d.ts +119 -0
- package/lib/lib.es2022.d.ts +23 -0
- package/lib/lib.es2022.error.d.ts +73 -0
- package/lib/lib.es2022.full.d.ts +22 -0
- package/lib/lib.es2022.intl.d.ts +143 -0
- package/lib/lib.es2022.object.d.ts +24 -0
- package/lib/lib.es2022.regexp.d.ts +37 -0
- package/lib/lib.es2022.string.d.ts +23 -0
- package/lib/lib.es2023.array.d.ts +922 -0
- package/lib/lib.es2023.collection.d.ts +19 -0
- package/lib/lib.es2023.d.ts +20 -0
- package/lib/lib.es2023.full.d.ts +22 -0
- package/lib/lib.es2023.intl.d.ts +62 -0
- package/lib/lib.es2024.arraybuffer.d.ts +63 -0
- package/lib/lib.es2024.collection.d.ts +27 -0
- package/lib/lib.es2024.d.ts +24 -0
- package/lib/lib.es2024.full.d.ts +22 -0
- package/lib/lib.es2024.object.d.ts +27 -0
- package/lib/lib.es2024.promise.d.ts +33 -0
- package/lib/lib.es2024.regexp.d.ts +23 -0
- package/lib/lib.es2024.sharedmemory.d.ts +66 -0
- package/lib/lib.es2024.string.d.ts +27 -0
- package/lib/lib.es2025.collection.d.ts +94 -0
- package/lib/lib.es2025.d.ts +23 -0
- package/lib/lib.es2025.float16.d.ts +443 -0
- package/lib/lib.es2025.full.d.ts +22 -0
- package/lib/lib.es2025.intl.d.ts +200 -0
- package/lib/lib.es2025.iterator.d.ts +146 -0
- package/lib/lib.es2025.promise.d.ts +32 -0
- package/lib/lib.es2025.regexp.d.ts +30 -0
- package/lib/lib.es5.d.ts +4599 -0
- package/lib/lib.es6.d.ts +21 -0
- package/lib/lib.esnext.array.d.ts +33 -0
- package/lib/lib.esnext.collection.d.ts +47 -0
- package/lib/lib.esnext.d.ts +27 -0
- package/lib/lib.esnext.date.d.ts +21 -0
- package/lib/lib.esnext.decorators.d.ts +26 -0
- package/lib/lib.esnext.disposable.d.ts +191 -0
- package/lib/lib.esnext.error.d.ts +22 -0
- package/lib/lib.esnext.full.d.ts +22 -0
- package/lib/lib.esnext.intl.d.ts +107 -0
- package/lib/lib.esnext.sharedmemory.d.ts +23 -0
- package/lib/lib.esnext.temporal.d.ts +485 -0
- package/lib/lib.esnext.typedarrays.d.ts +90 -0
- package/lib/lib.scripthost.d.ts +320 -0
- package/lib/lib.webworker.asynciterable.d.ts +18 -0
- package/lib/lib.webworker.d.ts +15606 -0
- package/lib/lib.webworker.importscripts.d.ts +21 -0
- package/lib/lib.webworker.iterable.d.ts +18 -0
- package/lib/logger.js +144 -0
- package/lib/package.json +7 -0
- package/lib/tsserver.js +57 -0
- package/lib/tsserverlibrary.js +171 -0
- package/lib/typesMap.json +497 -0
- package/lib/typescript.js +373 -0
- package/package.json +115 -0
|
@@ -0,0 +1,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"}
|