@elliots/typical 0.1.10 → 0.2.0-beta.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 (55) hide show
  1. package/README.md +187 -208
  2. package/dist/src/cli.js +12 -85
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/cli.typical.ts +136 -0
  5. package/dist/src/config.js +38 -38
  6. package/dist/src/config.js.map +1 -1
  7. package/dist/src/config.typical.ts +287 -0
  8. package/dist/src/esm-loader-register.js.map +1 -1
  9. package/dist/src/esm-loader.d.ts +1 -1
  10. package/dist/src/esm-loader.js +30 -17
  11. package/dist/src/esm-loader.js.map +1 -1
  12. package/dist/src/file-filter.d.ts +1 -1
  13. package/dist/src/file-filter.js.map +1 -1
  14. package/dist/src/index.d.ts +5 -4
  15. package/dist/src/index.js +1 -1
  16. package/dist/src/index.js.map +1 -1
  17. package/dist/src/program-manager.d.ts +27 -0
  18. package/dist/src/program-manager.js +121 -0
  19. package/dist/src/program-manager.js.map +1 -0
  20. package/dist/src/regex-hoister.d.ts +1 -1
  21. package/dist/src/regex-hoister.js +13 -19
  22. package/dist/src/regex-hoister.js.map +1 -1
  23. package/dist/src/setup.d.ts +1 -1
  24. package/dist/src/setup.js +3 -3
  25. package/dist/src/setup.js.map +1 -1
  26. package/dist/src/source-map.d.ts +1 -1
  27. package/dist/src/source-map.js +1 -1
  28. package/dist/src/source-map.js.map +1 -1
  29. package/dist/src/source-map.typical.ts +216 -0
  30. package/dist/src/timing.d.ts +19 -0
  31. package/dist/src/timing.js +65 -0
  32. package/dist/src/timing.js.map +1 -0
  33. package/dist/src/transformer.d.ts +28 -193
  34. package/dist/src/transformer.js +41 -1917
  35. package/dist/src/transformer.js.map +1 -1
  36. package/dist/src/transformer.typical.ts +2552 -0
  37. package/dist/src/tsc-plugin.d.ts +8 -1
  38. package/dist/src/tsc-plugin.js +11 -7
  39. package/dist/src/tsc-plugin.js.map +1 -1
  40. package/package.json +51 -47
  41. package/src/cli.ts +41 -128
  42. package/src/config.ts +92 -91
  43. package/src/esm-loader-register.ts +2 -2
  44. package/src/esm-loader.ts +44 -29
  45. package/src/index.ts +5 -10
  46. package/src/patch-fs.cjs +14 -14
  47. package/src/timing.ts +74 -0
  48. package/src/transformer.ts +47 -2592
  49. package/bin/ttsc +0 -12
  50. package/src/file-filter.ts +0 -49
  51. package/src/patch-tsconfig.cjs +0 -52
  52. package/src/regex-hoister.ts +0 -203
  53. package/src/setup.ts +0 -39
  54. package/src/source-map.ts +0 -202
  55. package/src/tsc-plugin.ts +0 -12
@@ -1,4 +1,5 @@
1
- export { TypicalTransformer, TransformResult } from './transformer.js';
2
- export { loadConfig, validateConfig, defaultConfig, TypicalConfig, TypicalSourceMapConfig } from './config.js';
3
- export { composeSourceMaps, inlineSourceMapComment, externalSourceMapComment, createIdentityMap, stripSourceMapComment, } from './source-map.js';
4
- export type { SourceMapOptions } from './source-map.js';
1
+ export { TypicalTransformer } from './transformer.js';
2
+ export type { TransformResult } from './transformer.js';
3
+ export { loadConfig, validateConfig, defaultConfig } from './config.js';
4
+ export type { TypicalConfig, TypicalSourceMapConfig } from './config.js';
5
+ export { BuildTimer, buildTimer } from './timing.js';
package/dist/src/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export { TypicalTransformer } from './transformer.js';
2
2
  export { loadConfig, validateConfig, defaultConfig } from './config.js';
3
- export { composeSourceMaps, inlineSourceMapComment, externalSourceMapComment, createIdentityMap, stripSourceMapComment, } from './source-map.js';
3
+ export { BuildTimer, buildTimer } from './timing.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAmB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAyC,MAAM,aAAa,CAAC;AAC/G,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEvE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,27 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * Manages a shared TypeScript program across file transformations.
4
+ * This avoids the expensive cost of creating a new program for each file.
5
+ */
6
+ export declare class ProgramManager {
7
+ private program;
8
+ private compilerOptions;
9
+ private sourceContents;
10
+ private sourceFileCache;
11
+ private host;
12
+ /**
13
+ * Get or create a program with the given source content for a file.
14
+ * Uses incremental compilation to reuse data from previous program.
15
+ */
16
+ getProgram(id: string, source: string): ts.Program;
17
+ /**
18
+ * Get the source file for a given ID from the current program.
19
+ */
20
+ getSourceFile(id: string): ts.SourceFile | undefined;
21
+ /**
22
+ * Reset the program manager state (e.g., at build start).
23
+ */
24
+ reset(): void;
25
+ private loadCompilerOptions;
26
+ private createHost;
27
+ }
@@ -0,0 +1,121 @@
1
+ import ts from 'typescript';
2
+ import { resolve, dirname } from 'path';
3
+ import { buildTimer } from './timing.js';
4
+ /**
5
+ * Manages a shared TypeScript program across file transformations.
6
+ * This avoids the expensive cost of creating a new program for each file.
7
+ */
8
+ export class ProgramManager {
9
+ program;
10
+ compilerOptions;
11
+ sourceContents = new Map(); // Virtual file contents (transformed by bundler)
12
+ sourceFileCache = new Map(); // Cached source files from disk
13
+ host;
14
+ /**
15
+ * Get or create a program with the given source content for a file.
16
+ * Uses incremental compilation to reuse data from previous program.
17
+ */
18
+ getProgram(id, source) {
19
+ const resolvedId = resolve(id);
20
+ // Update virtual source content
21
+ this.sourceContents.set(resolvedId, source);
22
+ // Invalidate cached source file for this file (since content changed)
23
+ this.sourceFileCache.delete(resolvedId);
24
+ // Ensure we have compiler options and host
25
+ if (!this.compilerOptions) {
26
+ buildTimer.start('load-compiler-options');
27
+ this.compilerOptions = this.loadCompilerOptions();
28
+ buildTimer.end('load-compiler-options');
29
+ }
30
+ if (!this.host) {
31
+ this.host = this.createHost();
32
+ }
33
+ // Get current root files, adding the new file if not present
34
+ const rootFiles = this.program?.getRootFileNames() ?? [];
35
+ const rootFileSet = new Set(rootFiles);
36
+ if (!rootFileSet.has(resolvedId)) {
37
+ rootFileSet.add(resolvedId);
38
+ }
39
+ // Create program, reusing old program for incremental compilation
40
+ buildTimer.start('create-program-incremental');
41
+ this.program = ts.createProgram(Array.from(rootFileSet), this.compilerOptions, this.host, this.program);
42
+ buildTimer.end('create-program-incremental');
43
+ return this.program;
44
+ }
45
+ /**
46
+ * Get the source file for a given ID from the current program.
47
+ */
48
+ getSourceFile(id) {
49
+ const resolvedId = resolve(id);
50
+ return this.program?.getSourceFile(resolvedId);
51
+ }
52
+ /**
53
+ * Reset the program manager state (e.g., at build start).
54
+ */
55
+ reset() {
56
+ this.program = undefined;
57
+ this.sourceContents.clear();
58
+ // Keep sourceFileCache and compilerOptions since they don't change
59
+ }
60
+ loadCompilerOptions() {
61
+ const configPath = ts.findConfigFile(process.cwd(), f => ts.sys.fileExists(f), 'tsconfig.json');
62
+ if (!configPath) {
63
+ return {
64
+ target: ts.ScriptTarget.ES2020,
65
+ module: ts.ModuleKind.ESNext,
66
+ moduleResolution: ts.ModuleResolutionKind.Bundler,
67
+ esModuleInterop: true,
68
+ strict: true,
69
+ };
70
+ }
71
+ const configFile = ts.readConfigFile(configPath, f => ts.sys.readFile(f));
72
+ if (configFile.error) {
73
+ throw new Error(ts.flattenDiagnosticMessageText(configFile.error.messageText, '\n'));
74
+ }
75
+ const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, dirname(configPath));
76
+ return parsed.options;
77
+ }
78
+ createHost() {
79
+ const baseHost = ts.createCompilerHost(this.compilerOptions);
80
+ const originalGetSourceFile = baseHost.getSourceFile.bind(baseHost);
81
+ return {
82
+ ...baseHost,
83
+ getSourceFile: (fileName, languageVersion, onError, shouldCreateNewSourceFile) => {
84
+ const resolvedFileName = resolve(fileName);
85
+ // Return virtual content if we have transformed source
86
+ const virtualContent = this.sourceContents.get(resolvedFileName);
87
+ if (virtualContent !== undefined) {
88
+ // Check if we have a cached source file with the same content
89
+ const cached = this.sourceFileCache.get(resolvedFileName);
90
+ if (cached && cached.text === virtualContent) {
91
+ return cached;
92
+ }
93
+ // Create new source file from virtual content
94
+ const sourceFile = ts.createSourceFile(resolvedFileName, virtualContent, languageVersion, true);
95
+ this.sourceFileCache.set(resolvedFileName, sourceFile);
96
+ return sourceFile;
97
+ }
98
+ // Check cache for files loaded from disk
99
+ const cachedDisk = this.sourceFileCache.get(resolvedFileName);
100
+ if (cachedDisk) {
101
+ return cachedDisk;
102
+ }
103
+ // Load from disk and cache
104
+ const result = originalGetSourceFile(fileName, languageVersion, onError, shouldCreateNewSourceFile);
105
+ if (result) {
106
+ this.sourceFileCache.set(resolvedFileName, result);
107
+ }
108
+ return result;
109
+ },
110
+ fileExists: fileName => {
111
+ const resolvedFileName = resolve(fileName);
112
+ return this.sourceContents.has(resolvedFileName) || baseHost.fileExists(fileName);
113
+ },
114
+ readFile: fileName => {
115
+ const resolvedFileName = resolve(fileName);
116
+ return this.sourceContents.get(resolvedFileName) ?? baseHost.readFile(fileName);
117
+ },
118
+ };
119
+ }
120
+ }
121
+ //# sourceMappingURL=program-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program-manager.js","sourceRoot":"","sources":["../../src/program-manager.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import ts from "typescript";
1
+ import ts from 'typescript';
2
2
  /**
3
3
  * Hoists RegExp constructor calls to top-level constants.
4
4
  * Transforms: RegExp(/pattern/).test(x) -> __regex_N.test(x)
@@ -15,7 +15,7 @@ export function hoistRegexConstructors(sourceFile, tsInstance, factory) {
15
15
  function extractRegexFromIdText(idText) {
16
16
  // Match RegExp(/.../) where the regex can contain any characters except unescaped /
17
17
  // We look for RegExp( followed by / then find the matching closing / and )
18
- if (!idText.startsWith("RegExp(/"))
18
+ if (!idText.startsWith('RegExp(/'))
19
19
  return null;
20
20
  let inCharClass = false;
21
21
  let escaped = false;
@@ -27,27 +27,27 @@ export function hoistRegexConstructors(sourceFile, tsInstance, factory) {
27
27
  escaped = false;
28
28
  continue;
29
29
  }
30
- if (char === "\\") {
30
+ if (char === '\\') {
31
31
  escaped = true;
32
32
  continue;
33
33
  }
34
- if (char === "[" && !inCharClass) {
34
+ if (char === '[' && !inCharClass) {
35
35
  inCharClass = true;
36
36
  continue;
37
37
  }
38
- if (char === "]" && inCharClass) {
38
+ if (char === ']' && inCharClass) {
39
39
  inCharClass = false;
40
40
  continue;
41
41
  }
42
42
  // End of regex pattern (unescaped /)
43
- if (char === "/" && !inCharClass) {
43
+ if (char === '/' && !inCharClass) {
44
44
  // Check for flags after the /
45
45
  let j = i + 1;
46
46
  while (j < idText.length && /[gimsuy]/.test(idText[j])) {
47
47
  j++;
48
48
  }
49
49
  // Should be followed by )
50
- if (idText[j] === ")") {
50
+ if (idText[j] === ')') {
51
51
  return idText.substring(start, j); // Include /pattern/flags
52
52
  }
53
53
  return null;
@@ -64,10 +64,10 @@ export function hoistRegexConstructors(sourceFile, tsInstance, factory) {
64
64
  const name = node.name;
65
65
  if (tsInstance.isIdentifier(name)) {
66
66
  const varName = name.escapedText;
67
- if (process.env.DEBUG && sourceFile.fileName.includes("object-types")) {
67
+ if (process.env.DEBUG && sourceFile.fileName.includes('object-types')) {
68
68
  console.log(`REGEX HOISTER: found var decl: ${varName.substring(0, 50)}`);
69
69
  }
70
- if (varName.startsWith("__typical_") || varName.startsWith("___typical_")) {
70
+ if (varName.startsWith('__typical_') || varName.startsWith('___typical_')) {
71
71
  nowInsideTypical = true;
72
72
  if (process.env.DEBUG) {
73
73
  console.log(`REGEX HOISTER: entering __typical_ declaration: ${varName}`);
@@ -77,7 +77,7 @@ export function hoistRegexConstructors(sourceFile, tsInstance, factory) {
77
77
  }
78
78
  if (nowInsideTypical && tsInstance.isIdentifier(node)) {
79
79
  const idText = node.escapedText;
80
- if (idText.startsWith("RegExp(")) {
80
+ if (idText.startsWith('RegExp(')) {
81
81
  if (process.env.DEBUG) {
82
82
  console.log(`REGEX HOISTER: found RegExp identifier: ${idText.substring(0, 50)}...`);
83
83
  }
@@ -90,7 +90,7 @@ export function hoistRegexConstructors(sourceFile, tsInstance, factory) {
90
90
  }
91
91
  }
92
92
  }
93
- node.forEachChild((child) => collectRegexPatterns(child, nowInsideTypical));
93
+ node.forEachChild(child => collectRegexPatterns(child, nowInsideTypical));
94
94
  }
95
95
  collectRegexPatterns(sourceFile, false);
96
96
  if (process.env.DEBUG) {
@@ -104,7 +104,7 @@ export function hoistRegexConstructors(sourceFile, tsInstance, factory) {
104
104
  function replaceRegexIdentifiers(node) {
105
105
  if (tsInstance.isIdentifier(node)) {
106
106
  const idText = node.escapedText;
107
- if (idText.startsWith("RegExp(")) {
107
+ if (idText.startsWith('RegExp(')) {
108
108
  const pattern = extractRegexFromIdText(idText);
109
109
  if (pattern) {
110
110
  const fullMatch = `RegExp(${pattern})`;
@@ -124,9 +124,7 @@ export function hoistRegexConstructors(sourceFile, tsInstance, factory) {
124
124
  for (const [fullMatch, varName] of regexPatterns) {
125
125
  // Extract regex literal from "RegExp(/pattern/)"
126
126
  const regexLiteral = fullMatch.slice(7, -1); // Remove "RegExp(" and ")"
127
- const constDecl = factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
128
- factory.createVariableDeclaration(factory.createIdentifier(varName), undefined, undefined, factory.createRegularExpressionLiteral(regexLiteral)),
129
- ], tsInstance.NodeFlags.Const));
127
+ const constDecl = factory.createVariableStatement(undefined, factory.createVariableDeclarationList([factory.createVariableDeclaration(factory.createIdentifier(varName), undefined, undefined, factory.createRegularExpressionLiteral(regexLiteral))], tsInstance.NodeFlags.Const));
130
128
  hoistedDeclarations.push(constDecl);
131
129
  }
132
130
  // Transform all statements (replacing RegExp identifiers)
@@ -146,11 +144,7 @@ export function hoistRegexConstructors(sourceFile, tsInstance, factory) {
146
144
  }
147
145
  }
148
146
  // Insert hoisted declarations after imports
149
- const finalStatements = [
150
- ...transformedStatements.slice(0, insertIndex),
151
- ...hoistedDeclarations,
152
- ...transformedStatements.slice(insertIndex),
153
- ];
147
+ const finalStatements = [...transformedStatements.slice(0, insertIndex), ...hoistedDeclarations, ...transformedStatements.slice(insertIndex)];
154
148
  return factory.updateSourceFile(sourceFile, finalStatements, sourceFile.isDeclarationFile, sourceFile.referencedFiles, sourceFile.typeReferenceDirectives, sourceFile.hasNoDefaultLib, sourceFile.libReferenceDirectives);
155
149
  }
156
150
  //# sourceMappingURL=regex-hoister.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"regex-hoister.js","sourceRoot":"","sources":["../../src/regex-hoister.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"regex-hoister.js","sourceRoot":"","sources":["../../src/regex-hoister.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAyB,EAAE,UAAqB,EAAE,OAAuB;IAC9G,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAA,CAAC,oCAAoC;IACpF,IAAI,YAAY,GAAG,CAAC,CAAA;IAEpB,2EAA2E;IAC3E,6DAA6D;IAC7D,SAAS,sBAAsB,CAAC,MAAc;QAC5C,oFAAoF;QACpF,2EAA2E;QAC3E,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAA;QAE/C,IAAI,WAAW,GAAG,KAAK,CAAA;QACvB,IAAI,OAAO,GAAG,KAAK,CAAA;QAEnB,yBAAyB;QACzB,MAAM,KAAK,GAAG,CAAC,CAAA,CAAC,qDAAqD;QAErE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAEtB,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,GAAG,KAAK,CAAA;gBACf,SAAQ;YACV,CAAC;YAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,GAAG,IAAI,CAAA;gBACd,SAAQ;YACV,CAAC;YAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjC,WAAW,GAAG,IAAI,CAAA;gBAClB,SAAQ;YACV,CAAC;YAED,IAAI,IAAI,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;gBAChC,WAAW,GAAG,KAAK,CAAA;gBACnB,SAAQ;YACV,CAAC;YAED,qCAAqC;YACrC,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjC,8BAA8B;gBAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACb,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvD,CAAC,EAAE,CAAA;gBACL,CAAC;gBACD,0BAA0B;gBAC1B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACtB,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA,CAAC,yBAAyB;gBAC7D,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,uEAAuE;IACvE,yEAAyE;IACzE,SAAS,oBAAoB,CAAC,IAAa,EAAE,aAAsB;QACjE,6DAA6D;QAC7D,IAAI,gBAAgB,GAAG,aAAa,CAAA;QACpC,IAAI,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;YACtB,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAqB,CAAA;gBAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBACtE,OAAO,CAAC,GAAG,CAAC,kCAAkC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;gBAC3E,CAAC;gBACD,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC1E,gBAAgB,GAAG,IAAI,CAAA;oBACvB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;wBACtB,OAAO,CAAC,GAAG,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAA;oBAC3E,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAqB,CAAA;YACzC,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,2CAA2C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;gBACtF,CAAC;gBACD,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;gBAC9C,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,SAAS,GAAG,UAAU,OAAO,GAAG,CAAA;oBACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;wBAClC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,YAAY,EAAE,EAAE,CAAC,CAAA;oBAC3D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAC3E,CAAC;IAED,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAEvC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,CAAC,QAAQ,YAAY,aAAa,CAAC,IAAI,yBAAyB,CAAC,CAAA;IAC3G,CAAC;IAED,qCAAqC;IACrC,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,+DAA+D;IAC/D,SAAS,uBAAuB,CAAC,IAAa;QAC5C,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAqB,CAAA;YACzC,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;gBAC9C,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,SAAS,GAAG,UAAU,OAAO,GAAG,CAAA;oBACtC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;oBAC5C,IAAI,OAAO,EAAE,CAAC;wBACZ,yDAAyD;wBACzD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;wBACpD,OAAO,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;oBAC5C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,uBAAuB,EAAE,SAAgD,CAAC,CAAA;IACnH,CAAC;IAED,0DAA0D;IAC1D,MAAM,mBAAmB,GAAmB,EAAE,CAAA;IAC9C,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,aAAa,EAAE,CAAC;QACjD,iDAAiD;QACjD,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,2BAA2B;QACvE,MAAM,SAAS,GAAG,OAAO,CAAC,uBAAuB,CAC/C,SAAS,EACT,OAAO,CAAC,6BAA6B,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CACtN,CAAA;QACD,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrC,CAAC;IAED,0DAA0D;IAC1D,MAAM,qBAAqB,GAAmB,EAAE,CAAA;IAChD,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,uBAAuB,CAAC,IAAI,CAAiB,CAAA;QACjE,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACzC,CAAC;IAED,4DAA4D;IAC5D,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,IAAI,UAAU,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,WAAW,GAAG,CAAC,GAAG,CAAC,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,MAAK;QACP,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,MAAM,eAAe,GAAG,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,GAAG,mBAAmB,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;IAE7I,OAAO,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,eAAe,EAAE,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,uBAAuB,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,sBAAsB,CAAC,CAAA;AAC3N,CAAC"}
@@ -1,2 +1,2 @@
1
- import type ts from "typescript";
1
+ import type ts from 'typescript';
2
2
  export declare function setupTsProgram(tsInstance: typeof ts): ts.Program;
package/dist/src/setup.js CHANGED
@@ -1,14 +1,14 @@
1
1
  export function setupTsProgram(tsInstance) {
2
2
  // Find tsconfig.json
3
- const tsConfigPath = tsInstance.findConfigFile(process.cwd(), tsInstance.sys.fileExists, "tsconfig.json");
3
+ const tsConfigPath = tsInstance.findConfigFile(process.cwd(), f => tsInstance.sys.fileExists(f), 'tsconfig.json');
4
4
  if (!tsConfigPath) {
5
- throw new Error("Could not find tsconfig.json");
5
+ throw new Error('Could not find tsconfig.json');
6
6
  }
7
7
  if (process.env.DEBUG) {
8
8
  console.log(`SETUP: Using tsconfig at ${tsConfigPath}`);
9
9
  }
10
10
  // Load and parse tsconfig.json
11
- const configFile = tsInstance.readConfigFile(tsConfigPath, tsInstance.sys.readFile);
11
+ const configFile = tsInstance.readConfigFile(tsConfigPath, f => tsInstance.sys.readFile(f));
12
12
  const parsedConfig = tsInstance.parseJsonConfigFileContent(configFile.config, tsInstance.sys, process.cwd());
13
13
  if (process.env.DEBUG) {
14
14
  console.log(`SETUP: Parsed tsconfig with ${parsedConfig.fileNames.length} files`);
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/setup.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,UAAqB;IAClD,qBAAqB;IACrB,MAAM,YAAY,GAAG,UAAU,CAAC,cAAc,CAC5C,OAAO,CAAC,GAAG,EAAE,EACb,UAAU,CAAC,GAAG,CAAC,UAAU,EACzB,eAAe,CAChB,CAAC;IACF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,+BAA+B;IAC/B,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpF,MAAM,YAAY,GAAG,UAAU,CAAC,0BAA0B,CACxD,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,GAAG,EACd,OAAO,CAAC,GAAG,EAAE,CACd,CAAC;IAEF,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CACT,+BAA+B,YAAY,CAAC,SAAS,CAAC,MAAM,QAAQ,CACrE,CAAC;IACJ,CAAC;IAED,uDAAuD;IACvD,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CACxC,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,OAAO,CACrB,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/setup.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,UAAqB;IAClD,qBAAqB;IACrB,MAAM,YAAY,GAAG,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAA;IACjH,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACjD,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,+BAA+B;IAC/B,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3F,MAAM,YAAY,GAAG,UAAU,CAAC,0BAA0B,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAE5G,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,+BAA+B,YAAY,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,CAAA;IACnF,CAAC;IAED,uDAAuD;IACvD,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;IAExF,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -27,7 +27,7 @@ export declare const defaultSourceMapOptions: Required<SourceMapOptions>;
27
27
  * Given maps [A->B, B->C], produces A->C.
28
28
  * Maps are applied in order: first map is closest to original source.
29
29
  */
30
- export declare function composeSourceMaps(maps: (EncodedSourceMap | DecodedSourceMap | string | null | undefined)[], originalFileName: string): EncodedSourceMap | null;
30
+ export declare function composeSourceMaps(maps: (EncodedSourceMap | DecodedSourceMap | string | null | undefined)[], _originalFileName: string): EncodedSourceMap | null;
31
31
  /**
32
32
  * Generate an inline source map comment (data URL).
33
33
  */
@@ -13,7 +13,7 @@ export const defaultSourceMapOptions = {
13
13
  * Given maps [A->B, B->C], produces A->C.
14
14
  * Maps are applied in order: first map is closest to original source.
15
15
  */
16
- export function composeSourceMaps(maps, originalFileName) {
16
+ export function composeSourceMaps(maps, _originalFileName) {
17
17
  // Filter out null/undefined maps
18
18
  const validMaps = maps.filter((m) => m !== null && m !== undefined);
19
19
  if (validMaps.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"source-map.js","sourceRoot":"","sources":["../../src/source-map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"source-map.js","sourceRoot":"","sources":["../../src/source-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,216 @@
1
+ import typia from "typia";
2
+ //@L:1
3
+ import MagicString from 'magic-string';
4
+ //@L:2
5
+ import remapping from '@ampproject/remapping';
6
+ //@L:3
7
+ import type { DecodedSourceMap, EncodedSourceMap } from '@ampproject/remapping';
8
+ /**
9
+ * Result of a transformation that includes source map information.
10
+ */
11
+ //@L:8
12
+ export interface TransformResult {
13
+ //@L:9
14
+ code: string;
15
+ //@L:10
16
+ map: EncodedSourceMap | null;
17
+ }
18
+ /**
19
+ * Configuration options for source map generation.
20
+ */
21
+ //@L:16
22
+ export interface SourceMapOptions {
23
+ /** Generate source maps. Default: true */
24
+ //@L:18
25
+ enabled?: boolean;
26
+ /** Include source content in map. Default: true */
27
+ //@L:20
28
+ includeContent?: boolean;
29
+ /** Use inline source maps (data URL). Default: false */
30
+ //@L:22
31
+ inline?: boolean;
32
+ }
33
+ /**
34
+ * Default source map options.
35
+ */
36
+ //@L:28
37
+ export const defaultSourceMapOptions: Required<SourceMapOptions> = {
38
+ enabled: true,
39
+ includeContent: true,
40
+ inline: false,
41
+ };
42
+ /**
43
+ * Compose multiple source maps together.
44
+ * Given maps [A->B, B->C], produces A->C.
45
+ * Maps are applied in order: first map is closest to original source.
46
+ */
47
+ //@L:39
48
+ export function composeSourceMaps(maps: (EncodedSourceMap | DecodedSourceMap | string | null | undefined)[], originalFileName: string): EncodedSourceMap | null {
49
+ // Filter out null/undefined maps
50
+ //@L:44
51
+ const validMaps = maps.filter((m): m is EncodedSourceMap | DecodedSourceMap | string => m !== null && m !== undefined);
52
+ //@L:48
53
+ if (validMaps.length === 0)
54
+ return null;
55
+ //@L:49
56
+ if (validMaps.length === 1) {
57
+ //@L:50
58
+ const map = validMaps[0];
59
+ //@L:51
60
+ if (typeof map === 'string') {
61
+ //@L:52
62
+ return typia.json.assertParse<EncodedSourceMap>(map) as EncodedSourceMap;
63
+ }
64
+ //@L:54
65
+ return map as EncodedSourceMap;
66
+ }
67
+ // remapping expects maps in reverse order (final output first)
68
+ // and a loader function that returns the source map for a given file
69
+ //@L:59
70
+ const reversedMaps = [...validMaps].reverse();
71
+ //@L:61
72
+ try {
73
+ const result = remapping(reversedMaps, () => null);
74
+ return result as EncodedSourceMap;
75
+ }
76
+ catch (e) {
77
+ // If remapping fails, return the last valid map
78
+ console.warn('Source map composition failed:', e);
79
+ const lastMap = validMaps[validMaps.length - 1];
80
+ if (typeof lastMap === 'string') {
81
+ return typia.json.assertParse<EncodedSourceMap>(lastMap) as EncodedSourceMap;
82
+ }
83
+ return lastMap as EncodedSourceMap;
84
+ }
85
+ }
86
+ /**
87
+ * Generate an inline source map comment (data URL).
88
+ */
89
+ //@L:78
90
+ export function inlineSourceMapComment(map: EncodedSourceMap | string): string {
91
+ //@L:79
92
+ const mapString = typeof map === 'string' ? map : typia.json.stringify(map);
93
+ //@L:80
94
+ const base64 = Buffer.from(mapString).toString('base64');
95
+ //@L:81
96
+ return `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${base64}`;
97
+ }
98
+ /**
99
+ * Generate an external source map URL comment.
100
+ */
101
+ //@L:87
102
+ export function externalSourceMapComment(mapFileName: string): string {
103
+ //@L:88
104
+ return `//# sourceMappingURL=${mapFileName}`;
105
+ }
106
+ /**
107
+ * Create a MagicString instance for tracking source modifications.
108
+ */
109
+ //@L:94
110
+ export function createMagicString(source: string, filename?: string): MagicString {
111
+ //@L:95
112
+ return new MagicString(source, {
113
+ filename,
114
+ });
115
+ }
116
+ /**
117
+ * Generate a source map from a MagicString instance.
118
+ */
119
+ //@L:103
120
+ export function generateSourceMap(ms: MagicString, options: {
121
+ source: string;
122
+ file?: string;
123
+ includeContent?: boolean;
124
+ hires?: boolean | 'boundary';
125
+ }): EncodedSourceMap {
126
+ //@L:112
127
+ return ms.generateMap({
128
+ source: options.source,
129
+ file: options.file ?? options.source,
130
+ includeContent: options.includeContent ?? true,
131
+ hires: options.hires ?? true,
132
+ }) as EncodedSourceMap;
133
+ }
134
+ /**
135
+ * Create an identity source map (maps each position to itself).
136
+ * Useful as a placeholder when no transformation occurred.
137
+ */
138
+ //@L:124
139
+ export function createIdentityMap(source: string, fileName: string, includeContent: boolean = true): EncodedSourceMap {
140
+ //@L:129
141
+ const ms = new MagicString(source);
142
+ //@L:130
143
+ return ms.generateMap({
144
+ source: fileName,
145
+ file: fileName,
146
+ includeContent,
147
+ hires: true,
148
+ }) as EncodedSourceMap;
149
+ }
150
+ /**
151
+ * Represents a tracked modification to source code.
152
+ */
153
+ //@L:141
154
+ export interface SourceModification {
155
+ /** Start position in original source */
156
+ //@L:143
157
+ start: number;
158
+ /** End position in original source */
159
+ //@L:145
160
+ end: number;
161
+ /** The replacement text */
162
+ //@L:147
163
+ replacement: string;
164
+ /** Type of modification */
165
+ //@L:149
166
+ type: 'insert-before' | 'insert-after' | 'replace' | 'prepend' | 'append';
167
+ }
168
+ /**
169
+ * Apply a list of modifications to source code using MagicString.
170
+ * Returns the modified code and source map.
171
+ */
172
+ //@L:156
173
+ export function applyModifications(source: string, fileName: string, modifications: SourceModification[], includeContent: boolean = true): TransformResult {
174
+ //@L:162
175
+ const ms = createMagicString(source, fileName);
176
+ // Sort modifications by position (descending) to apply from end to start
177
+ // This prevents position shifts from affecting subsequent modifications
178
+ //@L:166
179
+ const sorted = [...modifications].sort((a, b) => b.start - a.start);
180
+ //@L:168
181
+ for (const mod of sorted) {
182
+ switch (mod.type) {
183
+ case 'insert-before':
184
+ ms.prependLeft(mod.start, mod.replacement);
185
+ break;
186
+ case 'insert-after':
187
+ ms.appendRight(mod.end, mod.replacement);
188
+ break;
189
+ case 'replace':
190
+ ms.overwrite(mod.start, mod.end, mod.replacement);
191
+ break;
192
+ case 'prepend':
193
+ ms.prepend(mod.replacement);
194
+ break;
195
+ case 'append':
196
+ ms.append(mod.replacement);
197
+ break;
198
+ }
199
+ }
200
+ //@L:188
201
+ return {
202
+ code: ms.toString(),
203
+ map: generateSourceMap(ms, {
204
+ source: fileName,
205
+ includeContent,
206
+ }),
207
+ };
208
+ }
209
+ /**
210
+ * Strip any existing source map comments from code.
211
+ */
212
+ //@L:200
213
+ export function stripSourceMapComment(code: string): string {
214
+ //@L:201
215
+ return code.replace(/\/\/[#@]\s*sourceMappingURL=.*/g, '');
216
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Performance instrumentation for tracking build times
3
+ */
4
+ export declare class BuildTimer {
5
+ private timings;
6
+ private starts;
7
+ start(stage: string): void;
8
+ end(stage: string): void;
9
+ reset(): void;
10
+ report(prefix?: string): void;
11
+ getTimings(): Map<string, {
12
+ count: number;
13
+ total: number;
14
+ avg: number;
15
+ min: number;
16
+ max: number;
17
+ }>;
18
+ }
19
+ export declare const buildTimer: BuildTimer;