kea-typegen 3.6.5 → 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 +12 -0
- package/dist/package.json +4 -4
- package/dist/src/__tests__/typegen.d.ts +1 -0
- package/dist/src/__tests__/typegen.js +18 -0
- package/dist/src/__tests__/typegen.js.map +1 -0
- package/dist/src/__tests__/watch.d.ts +1 -0
- package/dist/src/__tests__/watch.js +32 -0
- package/dist/src/__tests__/watch.js.map +1 -0
- package/dist/src/__tests__/write.d.ts +1 -0
- package/dist/src/__tests__/write.js +120 -0
- package/dist/src/__tests__/write.js.map +1 -0
- package/dist/src/typegen.d.ts +2 -0
- package/dist/src/typegen.js +47 -10
- package/dist/src/typegen.js.map +1 -1
- package/dist/src/write/writeTypeImports.js +68 -34
- package/dist/src/write/writeTypeImports.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/__tests__/typegen.ts +22 -0
- package/src/__tests__/watch.ts +44 -0
- package/src/__tests__/write.ts +155 -0
- package/src/test-support/watch-mode-smoke.js +140 -0
- package/src/test-support/write-mode-smoke.js +147 -0
- package/src/typegen.ts +66 -16
- package/src/write/writeTypeImports.ts +82 -49
package/CHANGELOG.md
CHANGED
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kea-typegen",
|
|
3
|
-
"version": "3.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
|
},
|
|
@@ -53,10 +53,10 @@
|
|
|
53
53
|
"rimraf": "^3.0.2",
|
|
54
54
|
"ts-jest": "^28.0.8",
|
|
55
55
|
"ts-node": "^10.7.0",
|
|
56
|
-
"typescript": "5.
|
|
56
|
+
"typescript": "5.9.3"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"typescript": ">=5.
|
|
59
|
+
"typescript": ">=5.9.0"
|
|
60
60
|
},
|
|
61
61
|
"jest": {
|
|
62
62
|
"testPathIgnorePatterns": [
|
|
@@ -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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"}
|
package/dist/src/typegen.d.ts
CHANGED
|
@@ -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;
|
package/dist/src/typegen.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
package/dist/src/typegen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../src/typegen.ts"],"names":[],"mappings":";;AAkBA,
|
|
1
|
+
{"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../src/typegen.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,55 +1,89 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.writeTypeImports = writeTypeImports;
|
|
4
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
13
|
-
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
osPath.resolve(osPath.dirname(filename),
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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":";;
|
|
1
|
+
{"version":3,"file":"writeTypeImports.js","sourceRoot":"","sources":["../../../src/write/writeTypeImports.ts"],"names":[],"mappings":"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"}
|