kea-typegen 3.6.6 → 3.6.8

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/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 3.6.8 - 2026-03-24
2
+
3
+ Fix a memory leak.
4
+
5
+ ## 3.6.7 - 2026-03-24
6
+
7
+ Fix a memory leak.
8
+
1
9
  ## 3.6.6 - 2026-03-05
2
10
 
3
11
  Upgrade to TypeScript 5.9
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kea-typegen",
3
- "version": "3.6.6",
3
+ "version": "3.6.8",
4
4
  "description": "Generate type definitions for kea logic",
5
5
  "scripts": {
6
6
  "start": "ts-node ./src/cli/typegen.ts",
@@ -13,7 +13,7 @@
13
13
  "samples:write": "ts-node ./src/cli/typegen.ts write -r ./samples --write-paths --delete",
14
14
  "samples:convert": "ts-node ./src/cli/typegen.ts write -r ./samples --convert-to-builders",
15
15
  "samples:watch": "ts-node ./src/cli/typegen.ts watch -r ./samples --delete",
16
- "samples:write:posthog": "ts-node ./src/cli/typegen.ts write --show-ts-errors -c",
16
+ "samples:write:posthog": "NODE_OPTIONS=\"--max-old-space-size=16384\" ts-node ./src/cli/typegen.ts write --show-ts-errors -c",
17
17
  "form-plugin:build": "cd form-plugin && yarn && yarn build && cd ..",
18
18
  "form-plugin:rebuild": "yarn form-plugin:build && rm -rf node_modules && yarn"
19
19
  },
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const typegen_1 = require("../typegen");
4
+ test('replaceProgram clears the previous Program reference before allocating the next one', () => {
5
+ let currentProgram = {};
6
+ const nextProgram = {};
7
+ let sawClearedReference = false;
8
+ const returnedProgram = (0, typegen_1.replaceProgram)(() => {
9
+ sawClearedReference = typeof currentProgram === 'undefined';
10
+ return nextProgram;
11
+ }, (program) => {
12
+ currentProgram = program;
13
+ });
14
+ expect(sawClearedReference).toBe(true);
15
+ expect(returnedProgram).toBe(nextProgram);
16
+ expect(currentProgram).toBe(nextProgram);
17
+ });
18
+ //# sourceMappingURL=typegen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../../src/__tests__/typegen.ts"],"names":[],"mappings":";;AACA,wCAA2C;AAE3C,IAAI,CAAC,qFAAqF,EAAE,GAAG,EAAE;IAC7F,IAAI,cAAc,GAAwB,EAAa,CAAA;IACvD,MAAM,WAAW,GAAG,EAAa,CAAA;IACjC,IAAI,mBAAmB,GAAG,KAAK,CAAA;IAE/B,MAAM,eAAe,GAAG,IAAA,wBAAc,EAClC,GAAG,EAAE;QACD,mBAAmB,GAAG,OAAO,cAAc,KAAK,WAAW,CAAA;QAC3D,OAAO,WAAW,CAAA;IACtB,CAAC,EACD,CAAC,OAAO,EAAE,EAAE;QACR,cAAc,GAAG,OAAO,CAAA;IAC5B,CAAC,CACJ,CAAA;IAED,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACzC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AAC5C,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const child_process_1 = require("child_process");
4
+ const path = require("path");
5
+ test('watch mode does not overlap successive typegen passes', async () => {
6
+ const repoRoot = path.resolve(__dirname, '..', '..');
7
+ const scriptPath = path.join(repoRoot, 'src/test-support/watch-mode-smoke.js');
8
+ const result = await new Promise((resolve, reject) => {
9
+ const child = (0, child_process_1.spawn)(process.execPath, [scriptPath], {
10
+ cwd: repoRoot,
11
+ env: { ...process.env, FORCE_COLOR: '0' },
12
+ });
13
+ let stdout = '';
14
+ let stderr = '';
15
+ child.stdout.on('data', (chunk) => {
16
+ stdout += chunk.toString();
17
+ });
18
+ child.stderr.on('data', (chunk) => {
19
+ stderr += chunk.toString();
20
+ });
21
+ child.on('error', reject);
22
+ child.on('close', (code, signal) => resolve({ code, signal, stdout, stderr }));
23
+ });
24
+ expect(result.signal).toBeNull();
25
+ expect(result.code).toBe(0);
26
+ const payload = JSON.parse(result.stdout.trim());
27
+ expect(payload.started).toBeGreaterThan(1);
28
+ expect(payload.completed).toBeGreaterThan(0);
29
+ expect(payload.maxActive).toBe(1);
30
+ expect(result.stderr).toBe('');
31
+ }, 30000);
32
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/__tests__/watch.ts"],"names":[],"mappings":";;AAAA,iDAAqC;AACrC,6BAA4B;AAE5B,IAAI,CACA,uDAAuD,EACvD,KAAK,IAAI,EAAE;IACP,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,sCAAsC,CAAC,CAAA;IAE9E,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAC5B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAChB,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;YAChD,GAAG,EAAE,QAAQ;YACb,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE;SAC5C,CAAC,CAAA;QAEF,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,MAAM,GAAG,EAAE,CAAA;QAEf,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC9B,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC9B,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACzB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IAClF,CAAC,CACJ,CAAA;IAED,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;IAChC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IAEhD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IAC1C,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IAC5C,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAClC,CAAC,EACD,KAAK,CACR,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const child_process_1 = require("child_process");
4
+ const fs = require("fs");
5
+ const os = require("os");
6
+ const path = require("path");
7
+ const ts = require("typescript");
8
+ const visit_1 = require("../visit/visit");
9
+ const writeTypeImports_1 = require("../write/writeTypeImports");
10
+ test('write mode recreates the TypeScript program from scratch between passes', async () => {
11
+ const repoRoot = path.resolve(__dirname, '..', '..');
12
+ const scriptPath = path.join(repoRoot, 'src/test-support/write-mode-smoke.js');
13
+ const result = await new Promise((resolve, reject) => {
14
+ const child = (0, child_process_1.spawn)(process.execPath, [scriptPath], {
15
+ cwd: repoRoot,
16
+ env: { ...process.env, FORCE_COLOR: '0' },
17
+ });
18
+ let stdout = '';
19
+ let stderr = '';
20
+ child.stdout.on('data', (chunk) => {
21
+ stdout += chunk.toString();
22
+ });
23
+ child.stderr.on('data', (chunk) => {
24
+ stderr += chunk.toString();
25
+ });
26
+ child.on('error', reject);
27
+ child.on('close', (code, signal) => resolve({ code, signal, stdout, stderr }));
28
+ });
29
+ expect(result.signal).toBeNull();
30
+ expect(result.code).toBe(0);
31
+ const payload = JSON.parse(result.stdout.trim());
32
+ expect(payload.createProgramCalls).toBeGreaterThan(1);
33
+ expect(payload.reusedOldProgram).toBe(false);
34
+ expect(result.stderr).toBe('');
35
+ }, 30000);
36
+ test('writeTypeImports adds missing type import and kea generic', async () => {
37
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kea-typegen-write-imports-'));
38
+ try {
39
+ const logicDir = path.join(tempDir, 'src');
40
+ const logicPath = path.join(logicDir, 'logic.ts');
41
+ const keaDtsPath = path.join(tempDir, 'node_modules', 'kea', 'index.d.ts');
42
+ fs.mkdirSync(path.dirname(keaDtsPath), { recursive: true });
43
+ fs.mkdirSync(logicDir, { recursive: true });
44
+ fs.writeFileSync(keaDtsPath, 'export function kea<T = any>(input: any): T\n');
45
+ fs.writeFileSync(logicPath, [
46
+ "import { kea } from 'kea'",
47
+ '',
48
+ 'export const logic = kea({',
49
+ ' actions: () => ({',
50
+ ' setValue: (value: string) => ({ value }),',
51
+ ' }),',
52
+ '})',
53
+ '',
54
+ ].join('\n'));
55
+ const program = ts.createProgram([logicPath], {
56
+ module: ts.ModuleKind.CommonJS,
57
+ moduleResolution: ts.ModuleResolutionKind.NodeJs,
58
+ target: ts.ScriptTarget.ES2020,
59
+ skipLibCheck: true,
60
+ });
61
+ const appOptions = {
62
+ rootPath: logicDir,
63
+ typesPath: logicDir,
64
+ log: () => { },
65
+ };
66
+ const [parsedLogic] = (0, visit_1.visitProgram)(program, appOptions);
67
+ await (0, writeTypeImports_1.writeTypeImports)(appOptions, program, logicPath, [parsedLogic], [parsedLogic]);
68
+ const writtenLogic = fs.readFileSync(logicPath, 'utf8');
69
+ expect(writtenLogic).toMatch(/import type \{ logicType \} from ['"]\.\/logicType['"]/);
70
+ expect(writtenLogic).toContain('export const logic = kea<logicType>({');
71
+ }
72
+ finally {
73
+ fs.rmSync(tempDir, { recursive: true, force: true });
74
+ }
75
+ });
76
+ test('writeTypeImports replaces existing kea generic without leaving a trailing >', async () => {
77
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kea-typegen-write-existing-generic-'));
78
+ try {
79
+ const logicDir = path.join(tempDir, 'src');
80
+ const logicPath = path.join(logicDir, 'logic.ts');
81
+ const logicTypePath = path.join(logicDir, 'logicType.ts');
82
+ const keaDtsPath = path.join(tempDir, 'node_modules', 'kea', 'index.d.ts');
83
+ fs.mkdirSync(path.dirname(keaDtsPath), { recursive: true });
84
+ fs.mkdirSync(logicDir, { recursive: true });
85
+ fs.writeFileSync(keaDtsPath, 'export function kea<T = any>(input: any): T\n');
86
+ fs.writeFileSync(logicTypePath, 'export interface logicType {}\n');
87
+ fs.writeFileSync(logicPath, [
88
+ "import type { logicType } from './logicType'",
89
+ "import { kea, actions } from 'kea'",
90
+ '',
91
+ 'export const logic = kea<logicType<string>>([',
92
+ ' actions({',
93
+ ' setValue: (value: string) => ({ value }),',
94
+ ' }),',
95
+ '])',
96
+ '',
97
+ ].join('\n'));
98
+ const program = ts.createProgram([logicPath], {
99
+ module: ts.ModuleKind.CommonJS,
100
+ moduleResolution: ts.ModuleResolutionKind.NodeJs,
101
+ target: ts.ScriptTarget.ES2020,
102
+ skipLibCheck: true,
103
+ });
104
+ const appOptions = {
105
+ rootPath: logicDir,
106
+ typesPath: logicDir,
107
+ log: () => { },
108
+ };
109
+ const [parsedLogic] = (0, visit_1.visitProgram)(program, appOptions);
110
+ await (0, writeTypeImports_1.writeTypeImports)(appOptions, program, logicPath, [parsedLogic], [parsedLogic]);
111
+ const writtenLogic = fs.readFileSync(logicPath, 'utf8');
112
+ expect(writtenLogic).toMatch(/import type \{ logicType \} from ['"]\.\/logicType['"]/);
113
+ expect(writtenLogic).toContain('export const logic = kea<logicType>([');
114
+ expect(writtenLogic).not.toContain('kea<logicType>>([');
115
+ }
116
+ finally {
117
+ fs.rmSync(tempDir, { recursive: true, force: true });
118
+ }
119
+ });
120
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/__tests__/write.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
1
  import { AppOptions } from './types';
2
+ import { Program } from 'typescript';
2
3
  export declare function runTypeGen(appOptions: AppOptions): Promise<void>;
4
+ export declare function replaceProgram(createProgram: () => Program, setProgram: (program?: Program) => void): Program;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.runTypeGen = runTypeGen;
4
+ exports.replaceProgram = replaceProgram;
4
5
  const ts = require("typescript");
5
6
  const path = require("path");
6
7
  const visit_1 = require("./visit/visit");
@@ -19,11 +20,13 @@ async function runTypeGen(appOptions) {
19
20
  if (appOptions.sourceFilePath) {
20
21
  log(`❇️ Loading file: ${appOptions.sourceFilePath}`);
21
22
  resetProgram = () => {
22
- program = ts.createProgram([appOptions.sourceFilePath], {
23
+ program = replaceProgram(() => ts.createProgram([appOptions.sourceFilePath], {
23
24
  target: ts.ScriptTarget.ES5,
24
25
  module: ts.ModuleKind.CommonJS,
25
26
  noEmit: true,
26
27
  noErrorTruncation: true,
28
+ }), (nextProgram) => {
29
+ program = nextProgram;
27
30
  });
28
31
  };
29
32
  resetProgram();
@@ -59,22 +62,50 @@ async function runTypeGen(appOptions) {
59
62
  };
60
63
  console.info(codes[diagnostic.code] || `🥚 ${ts.formatDiagnostic(diagnostic, formatHost).trim()}`);
61
64
  }
62
- const origCreateProgram = host.createProgram;
63
- host.createProgram = (rootNames, options, host, oldProgram) => {
64
- return origCreateProgram(rootNames, options, host, oldProgram);
65
- };
66
65
  const origPostProgramCreate = host.afterProgramCreate;
67
- host.afterProgramCreate = async (prog) => {
66
+ let scheduledProgram;
67
+ let runningTypegen = false;
68
+ const runScheduledTypegen = async () => {
69
+ if (runningTypegen) {
70
+ return;
71
+ }
72
+ runningTypegen = true;
73
+ try {
74
+ while (scheduledProgram) {
75
+ const nextProgram = scheduledProgram;
76
+ scheduledProgram = undefined;
77
+ try {
78
+ await goThroughAllTheFiles(nextProgram, appOptions);
79
+ }
80
+ catch (error) {
81
+ console.error('⛔ Error running kea-typegen in watch mode');
82
+ console.error(error);
83
+ }
84
+ }
85
+ }
86
+ finally {
87
+ runningTypegen = false;
88
+ if (scheduledProgram) {
89
+ void runScheduledTypegen();
90
+ }
91
+ }
92
+ };
93
+ host.afterProgramCreate = (prog) => {
68
94
  program = prog.getProgram();
69
- origPostProgramCreate(prog);
70
- await goThroughAllTheFiles(program, appOptions);
95
+ origPostProgramCreate === null || origPostProgramCreate === void 0 ? void 0 : origPostProgramCreate(prog);
96
+ scheduledProgram = program;
97
+ void runScheduledTypegen();
71
98
  };
72
99
  ts.createWatchProgram(host);
73
100
  }
74
101
  else {
75
- const host = ts.createCompilerHost(compilerOptions.options);
76
102
  resetProgram = () => {
77
- program = ts.createProgram(compilerOptions.fileNames, compilerOptions.options, host, program);
103
+ program = replaceProgram(() => {
104
+ const host = ts.createCompilerHost(compilerOptions.options);
105
+ return ts.createProgram(compilerOptions.fileNames, compilerOptions.options, host);
106
+ }, (nextProgram) => {
107
+ program = nextProgram;
108
+ });
78
109
  };
79
110
  resetProgram();
80
111
  }
@@ -117,4 +148,10 @@ async function runTypeGen(appOptions) {
117
148
  }
118
149
  }
119
150
  }
151
+ function replaceProgram(createProgram, setProgram) {
152
+ setProgram(undefined);
153
+ const nextProgram = createProgram();
154
+ setProgram(nextProgram);
155
+ return nextProgram;
156
+ }
120
157
  //# sourceMappingURL=typegen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../src/typegen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../src/typegen.ts"],"names":[],"mappings":";;AAkBA,gCAwLC;AAED,wCAKC;AAjND,iCAAgC;AAChC,6BAA4B;AAC5B,yCAA4C;AAC5C,yCAA4C;AAG5C,kDAAyC;AACzC,mCAA4C;AAO5C,IAAI,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACnD,CAAC;IAAC,EAAU,CAAC,8BAA8B,GAAG,QAAQ,CAAA;AAC1D,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,UAAsB;IACnD,IAAI,OAAgB,CAAA;IACpB,IAAI,YAAwB,CAAA;IAE5B,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,CAAA;IAC1B,GAAG,CAAC,mBAAmB,sBAAO,EAAE,CAAC,CAAA;IAEjC,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;QAC5B,GAAG,CAAC,oBAAoB,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;QACpD,YAAY,GAAG,GAAG,EAAE;YAChB,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,CAC1B,EAAE,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;gBAC1C,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG;gBAC3B,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ;gBAC9B,MAAM,EAAE,IAAI;gBACZ,iBAAiB,EAAE,IAAI;aAC1B,CAAC,EACF,CAAC,WAAW,EAAE,EAAE;gBACZ,OAAO,GAAG,WAAW,CAAA;YACzB,CAAC,CACJ,CAAA;QACL,CAAC,CAAA;QACD,YAAY,EAAE,CAAA;IAClB,CAAC;SAAM,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;QACjC,GAAG,CAAC,yBAAyB,UAAU,CAAC,YAAY,EAAE,CAAC,CAAA;QAEvD,MAAM,UAAU,GAAG,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAClF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;QACxD,MAAM,eAAe,GAAG,EAAE,CAAC,oCAAoC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QAE/F,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YAGnB,MAAM,aAAa,GAAG,EAAE,CAAC,uCAAuC,CAAA;YAEhE,MAAM,IAAI,GAAG,EAAE,CAAC,uBAAuB,CACnC,UAAU,CAAC,YAAY,EACvB,eAAe,CAAC,OAAO,EACvB;gBACI,GAAG,EAAE,CAAC,GAAG;gBACT,SAAS,CAAC,KAAa,EAAE,KAAa,EAAE,mBAA6B;oBAIjE,OAAO,IAAI,CAAA;gBACf,CAAC;aACJ,EACD,aAAa,EACb,gBAAgB,EAChB,wBAAwB,CAC3B,CAAA;YAED,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;YAEzD,MAAM,UAAU,GAA6B;gBACzC,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;gBACpC,mBAAmB,EAAE,EAAE,CAAC,GAAG,CAAC,mBAAmB;gBAC/C,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO;aACnC,CAAA;YAED,SAAS,gBAAgB,CAAC,UAAyB;gBAC/C,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;oBAChD,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,oCAAoC,CAAC,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAA;gBAClF,CAAC;YACL,CAAC;YAED,SAAS,wBAAwB,CAAC,UAAyB;gBACvD,MAAM,KAAK,GAAG;oBACV,IAAI,EAAE,mCAAmC;oBACzC,IAAI,EAAE,iBAAiB;iBAC1B,CAAA;gBACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;YACtG,CAAC;YAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,CAAA;YACrD,IAAI,gBAAqC,CAAA;YACzC,IAAI,cAAc,GAAG,KAAK,CAAA;YAE1B,MAAM,mBAAmB,GAAG,KAAK,IAAI,EAAE;gBACnC,IAAI,cAAc,EAAE,CAAC;oBACjB,OAAM;gBACV,CAAC;gBAED,cAAc,GAAG,IAAI,CAAA;gBAErB,IAAI,CAAC;oBACD,OAAO,gBAAgB,EAAE,CAAC;wBACtB,MAAM,WAAW,GAAG,gBAAgB,CAAA;wBACpC,gBAAgB,GAAG,SAAS,CAAA;wBAE5B,IAAI,CAAC;4BACD,MAAM,oBAAoB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;wBACvD,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACb,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAA;4BAC1D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;wBACxB,CAAC;oBACL,CAAC;gBACL,CAAC;wBAAS,CAAC;oBACP,cAAc,GAAG,KAAK,CAAA;oBAEtB,IAAI,gBAAgB,EAAE,CAAC;wBACnB,KAAK,mBAAmB,EAAE,CAAA;oBAC9B,CAAC;gBACL,CAAC;YACL,CAAC,CAAA;YAED,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,EAAE,EAAE;gBAC/B,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;gBAC3B,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAG,IAAI,CAAC,CAAA;gBAC7B,gBAAgB,GAAG,OAAO,CAAA;gBAC1B,KAAK,mBAAmB,EAAE,CAAA;YAC9B,CAAC,CAAA;YAED,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAC/B,CAAC;aAAM,CAAC;YACJ,YAAY,GAAG,GAAG,EAAE;gBAMhB,OAAO,GAAG,cAAc,CACpB,GAAG,EAAE;oBACD,MAAM,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;oBAC3D,OAAO,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;gBACrF,CAAC,EACD,CAAC,WAAW,EAAE,EAAE;oBACZ,OAAO,GAAG,WAAW,CAAA;gBACzB,CAAC,CACJ,CAAA;YACL,CAAC,CAAA;YACD,YAAY,EAAE,CAAA;QAClB,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,GAAG,CAAC,qDAAqD,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,UAAU,oBAAoB,CAC/B,OAAO,EACP,UAAU;QAEV,MAAM,YAAY,GAAG,IAAA,oBAAY,EAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QACtD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACrB,GAAG,CAAC,OAAO,YAAY,CAAC,MAAM,SAAS,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;QACzF,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAY,EAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;QAItE,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,IAAI,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;YACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;QAED,OAAO,QAAQ,CAAA;IACnB,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;QAC7D,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,IAAA,0BAAkB,EAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC/C,YAAY,EAAE,CAAA;YAClB,CAAC;YAED,IAAI,KAAK,GAAG,CAAC,CAAA;YACb,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;gBAClB,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;gBAEvF,IAAI,YAAY,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;oBAC5C,GAAG,CAAC,qCAAqC,CAAC,CAAA;oBAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACnB,CAAC;gBAED,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;oBACb,GAAG,CAAC,iEAAiE,CAAC,CAAA;oBACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACnB,CAAC;gBAED,YAAY,EAAE,CAAA;YAClB,CAAC;QACL,CAAC;aAAM,CAAC;YAEJ,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAC7C,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAgB,cAAc,CAAC,aAA4B,EAAE,UAAuC;IAChG,UAAU,CAAC,SAAS,CAAC,CAAA;IACrB,MAAM,WAAW,GAAG,aAAa,EAAE,CAAA;IACnC,UAAU,CAAC,WAAW,CAAC,CAAA;IACvB,OAAO,WAAW,CAAA;AACtB,CAAC"}
@@ -1,55 +1,89 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.writeTypeImports = writeTypeImports;
4
- const recast_1 = require("recast");
4
+ const ts = require("typescript");
5
5
  const osPath = require("path");
6
6
  const print_1 = require("../print/print");
7
7
  const fs = require("fs");
8
- const utils_1 = require("./utils");
8
+ function applyTextEdits(source, edits) {
9
+ return edits
10
+ .sort((a, b) => b.start - a.start || b.end - a.end)
11
+ .reduce((output, { start, end, text }) => output.slice(0, start) + text + output.slice(end), source);
12
+ }
13
+ function getImportPath(importDeclaration) {
14
+ return ts.isStringLiteralLike(importDeclaration.moduleSpecifier) ? importDeclaration.moduleSpecifier.text : null;
15
+ }
16
+ function getImportInsertPosition(sourceFile, rawCode) {
17
+ const importDeclarations = sourceFile.statements.filter(ts.isImportDeclaration);
18
+ if (importDeclarations.length > 0) {
19
+ return importDeclarations[importDeclarations.length - 1].getEnd();
20
+ }
21
+ const shebangMatch = rawCode.match(/^#!.*(?:\r?\n|$)/);
22
+ return shebangMatch ? shebangMatch[0].length : 0;
23
+ }
24
+ function getTypeArgumentInsertEnd(callExpression, sourceFile) {
25
+ const openParenToken = callExpression
26
+ .getChildren(sourceFile)
27
+ .find((child) => child.kind === ts.SyntaxKind.OpenParenToken);
28
+ return openParenToken ? openParenToken.getStart(sourceFile) : callExpression.expression.getEnd();
29
+ }
9
30
  async function writeTypeImports(appOptions, program, filename, logicsNeedingImports, parsedLogics) {
10
31
  const { log } = appOptions;
11
32
  const sourceFile = program.getSourceFile(filename);
12
- const rawCode = sourceFile.getText();
13
- const ast = (0, utils_1.getAst)(filename, rawCode);
33
+ if (!sourceFile) {
34
+ throw new Error(`Could not find source file: ${filename}`);
35
+ }
36
+ const rawCode = fs.readFileSync(filename, 'utf8');
14
37
  let importLocation = osPath
15
38
  .relative(osPath.dirname(filename), logicsNeedingImports[0].typeFileName)
16
39
  .replace(/\.[tj]sx?$/, '');
17
40
  if (!importLocation.startsWith('.')) {
18
41
  importLocation = `./${importLocation}`;
19
42
  }
20
- let foundImport = false;
21
- (0, recast_1.visit)(ast, {
22
- visitImportDeclaration(path) {
23
- const importPath = path.value.source && utils_1.t.StringLiteral.check(path.value.source) ? path.value.source.value : null;
24
- if (utils_1.t.ImportDeclaration.check(path.value) &&
25
- importPath &&
26
- osPath.resolve(osPath.dirname(filename), importPath) ===
27
- osPath.resolve(osPath.dirname(filename), importLocation)) {
28
- foundImport = true;
29
- path.value.importKind = 'type';
30
- path.value.specifiers = parsedLogics.map((l) => utils_1.b.importSpecifier(utils_1.b.identifier(l.logicTypeName), utils_1.b.identifier(l.logicTypeName)));
31
- }
32
- return false;
33
- },
43
+ const desiredImport = `import type { ${parsedLogics.map((l) => l.logicTypeName).join(', ')} } from '${importLocation}'`;
44
+ const importDeclarations = sourceFile.statements.filter(ts.isImportDeclaration);
45
+ const matchingImport = importDeclarations.find((importDeclaration) => {
46
+ const importPath = getImportPath(importDeclaration);
47
+ return (importPath !== null &&
48
+ osPath.resolve(osPath.dirname(filename), importPath) ===
49
+ osPath.resolve(osPath.dirname(filename), importLocation));
34
50
  });
35
- if (!foundImport) {
36
- (0, recast_1.visit)(ast, {
37
- visitProgram(path) {
38
- path.value.body = [
39
- ...path.value.body.filter((n) => utils_1.t.ImportDeclaration.check(n)),
40
- utils_1.b.importDeclaration(parsedLogics.map((l) => utils_1.b.importSpecifier(utils_1.b.identifier(l.logicTypeName), utils_1.b.identifier(l.logicTypeName))), utils_1.b.stringLiteral(importLocation), 'type'),
41
- ...path.value.body.filter((n) => !utils_1.t.ImportDeclaration.check(n)),
42
- ];
43
- return false;
44
- },
51
+ const edits = [];
52
+ if (matchingImport) {
53
+ edits.push({
54
+ start: matchingImport.getStart(sourceFile),
55
+ end: matchingImport.getEnd(),
56
+ text: desiredImport,
45
57
  });
46
58
  }
47
- (0, utils_1.visitAllKeaCalls)(ast, logicsNeedingImports, filename, ({ path, parsedLogic }) => {
48
- path.node.typeParameters = utils_1.b.tsTypeParameterInstantiation([
49
- utils_1.b.tsTypeReference(utils_1.b.identifier(parsedLogic.logicTypeName)),
50
- ]);
51
- });
52
- const newText = await (0, print_1.runThroughPrettier)((0, recast_1.print)(ast).code, filename);
59
+ else {
60
+ const insertPos = getImportInsertPosition(sourceFile, rawCode);
61
+ const hasExistingImports = importDeclarations.length > 0;
62
+ const importText = hasExistingImports
63
+ ? `\n${desiredImport}${rawCode.slice(insertPos, insertPos + 1) === '\n' ? '' : '\n'}`
64
+ : `${desiredImport}\n`;
65
+ edits.push({
66
+ start: insertPos,
67
+ end: insertPos,
68
+ text: importText,
69
+ });
70
+ }
71
+ for (const parsedLogic of logicsNeedingImports) {
72
+ const callExpression = parsedLogic.node.parent;
73
+ if (!ts.isCallExpression(callExpression)) {
74
+ continue;
75
+ }
76
+ const typeArgumentStart = callExpression.expression.getEnd();
77
+ const typeArgumentEnd = callExpression.typeArguments
78
+ ? getTypeArgumentInsertEnd(callExpression, sourceFile)
79
+ : typeArgumentStart;
80
+ edits.push({
81
+ start: typeArgumentStart,
82
+ end: typeArgumentEnd,
83
+ text: `<${parsedLogic.logicTypeName}>`,
84
+ });
85
+ }
86
+ const newText = await (0, print_1.runThroughPrettier)(applyTextEdits(rawCode, edits), filename);
53
87
  fs.writeFileSync(filename, newText);
54
88
  log(`🔥 Import added: ${osPath.relative(process.cwd(), filename)}`);
55
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"writeTypeImports.js","sourceRoot":"","sources":["../../../src/write/writeTypeImports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"writeTypeImports.js","sourceRoot":"","sources":["../../../src/write/writeTypeImports.ts"],"names":[],"mappings":"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"}