kea-typegen 3.7.0 → 3.7.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/CHANGELOG.md +4 -0
- package/dist/package.json +1 -1
- package/dist/src/__tests__/watch.js +178 -0
- package/dist/src/__tests__/watch.js.map +1 -1
- package/dist/src/typegen.js +38 -2
- package/dist/src/typegen.js.map +1 -1
- package/dist/src/watch.d.ts +22 -0
- package/dist/src/watch.js +183 -0
- package/dist/src/watch.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/__tests__/watch.ts +259 -32
- package/src/test-support/watch-mode-smoke.js +39 -4
- package/src/test-support/write-mode-smoke.js +6 -1
- package/src/typegen.ts +53 -2
- package/src/watch.ts +261 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
## 3.7.1 - 2026-06-26
|
|
2
|
+
|
|
3
|
+
Make watch mode incremental. When a watched rebuild can be proven local, regenerate only the changed or affected Kea logic files and keep the existing full-pass fallback for ambiguous changes.
|
|
4
|
+
|
|
1
5
|
## 3.7.0 - 2026-06-23
|
|
2
6
|
|
|
3
7
|
Improve performance of typegen. Make type lookups lazier, try to read less files, better --file mode.
|
package/dist/package.json
CHANGED
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const child_process_1 = require("child_process");
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const os = require("os");
|
|
4
6
|
const path = require("path");
|
|
7
|
+
const ts = require("typescript");
|
|
8
|
+
const watch_1 = require("../watch");
|
|
9
|
+
function writeFile(filePath, source) {
|
|
10
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
11
|
+
fs.writeFileSync(filePath, source);
|
|
12
|
+
}
|
|
13
|
+
function createProgram(fileNames) {
|
|
14
|
+
return ts.createProgram(fileNames, {
|
|
15
|
+
module: ts.ModuleKind.CommonJS,
|
|
16
|
+
moduleResolution: ts.ModuleResolutionKind.NodeJs,
|
|
17
|
+
target: ts.ScriptTarget.ES2020,
|
|
18
|
+
skipLibCheck: true,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
5
21
|
test('watch mode does not overlap successive typegen passes', async () => {
|
|
6
22
|
const repoRoot = path.resolve(__dirname, '..', '..');
|
|
7
23
|
const scriptPath = path.join(repoRoot, 'src/test-support/watch-mode-smoke.js');
|
|
@@ -27,6 +43,168 @@ test('watch mode does not overlap successive typegen passes', async () => {
|
|
|
27
43
|
expect(payload.started).toBeGreaterThan(1);
|
|
28
44
|
expect(payload.completed).toBeGreaterThan(0);
|
|
29
45
|
expect(payload.maxActive).toBe(1);
|
|
46
|
+
expect(payload.incrementalAfterEdit).toBe(true);
|
|
47
|
+
expect(payload.parsedLogicCountsAfterEdit).toContain(1);
|
|
48
|
+
expect(payload.sourceFilePathsAfterEdit.some(Boolean)).toBe(true);
|
|
30
49
|
expect(result.stderr).toBe('');
|
|
31
50
|
}, 30000);
|
|
51
|
+
test('watch planner limits a direct logic edit to the changed logic and dependent logics', () => {
|
|
52
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kea-typegen-watch-direct-logic-'));
|
|
53
|
+
try {
|
|
54
|
+
const logicDir = path.join(tempDir, 'src');
|
|
55
|
+
const firstLogicPath = path.join(logicDir, 'firstLogic.ts');
|
|
56
|
+
const secondLogicPath = path.join(logicDir, 'secondLogic.ts');
|
|
57
|
+
const unrelatedLogicPath = path.join(logicDir, 'unrelatedLogic.ts');
|
|
58
|
+
const keaDtsPath = path.join(tempDir, 'node_modules', 'kea', 'index.d.ts');
|
|
59
|
+
writeFile(keaDtsPath, 'export function kea<T = any>(input: any): T\n');
|
|
60
|
+
writeFile(firstLogicPath, [
|
|
61
|
+
"import { kea } from 'kea'",
|
|
62
|
+
'',
|
|
63
|
+
'export const firstLogic = kea({',
|
|
64
|
+
' actions: () => ({ first: true }),',
|
|
65
|
+
'})',
|
|
66
|
+
'',
|
|
67
|
+
].join('\n'));
|
|
68
|
+
writeFile(secondLogicPath, [
|
|
69
|
+
"import { kea } from 'kea'",
|
|
70
|
+
"import { firstLogic } from './firstLogic'",
|
|
71
|
+
'',
|
|
72
|
+
'export const secondLogic = kea({',
|
|
73
|
+
' connect: { values: [firstLogic, ["first"]] },',
|
|
74
|
+
'})',
|
|
75
|
+
'',
|
|
76
|
+
].join('\n'));
|
|
77
|
+
writeFile(unrelatedLogicPath, [
|
|
78
|
+
"import { kea } from 'kea'",
|
|
79
|
+
'',
|
|
80
|
+
'export const unrelatedLogic = kea({',
|
|
81
|
+
' actions: () => ({ unrelated: true }),',
|
|
82
|
+
'})',
|
|
83
|
+
'',
|
|
84
|
+
].join('\n'));
|
|
85
|
+
const program = createProgram([firstLogicPath, secondLogicPath, unrelatedLogicPath]);
|
|
86
|
+
const plan = (0, watch_1.planWatchTypegenPass)(program, [
|
|
87
|
+
{ fileName: firstLogicPath, eventKind: ts.FileWatcherEventKind.Changed },
|
|
88
|
+
]);
|
|
89
|
+
expect(plan).toEqual({
|
|
90
|
+
kind: 'files',
|
|
91
|
+
sourceFilePaths: [firstLogicPath, secondLogicPath].sort(),
|
|
92
|
+
reason: '2 affected Kea logic files',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
test('watch planner regenerates logics affected by a helper type edit', () => {
|
|
100
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kea-typegen-watch-helper-'));
|
|
101
|
+
try {
|
|
102
|
+
const logicDir = path.join(tempDir, 'src');
|
|
103
|
+
const helperPath = path.join(logicDir, 'helper.ts');
|
|
104
|
+
const logicPath = path.join(logicDir, 'logic.ts');
|
|
105
|
+
const unrelatedLogicPath = path.join(logicDir, 'unrelatedLogic.ts');
|
|
106
|
+
const keaDtsPath = path.join(tempDir, 'node_modules', 'kea', 'index.d.ts');
|
|
107
|
+
writeFile(keaDtsPath, 'export function kea<T = any>(input: any): T\n');
|
|
108
|
+
writeFile(helperPath, 'export interface HelperType { value: string }\n');
|
|
109
|
+
writeFile(logicPath, [
|
|
110
|
+
"import { kea } from 'kea'",
|
|
111
|
+
"import type { HelperType } from './helper'",
|
|
112
|
+
'',
|
|
113
|
+
'export const logic = kea({',
|
|
114
|
+
' actions: () => ({ setValue: (value: HelperType) => ({ value }) }),',
|
|
115
|
+
'})',
|
|
116
|
+
'',
|
|
117
|
+
].join('\n'));
|
|
118
|
+
writeFile(unrelatedLogicPath, [
|
|
119
|
+
"import { kea } from 'kea'",
|
|
120
|
+
'',
|
|
121
|
+
'export const unrelatedLogic = kea({',
|
|
122
|
+
' actions: () => ({ unrelated: true }),',
|
|
123
|
+
'})',
|
|
124
|
+
'',
|
|
125
|
+
].join('\n'));
|
|
126
|
+
const program = createProgram([helperPath, logicPath, unrelatedLogicPath]);
|
|
127
|
+
const plan = (0, watch_1.planWatchTypegenPass)(program, [
|
|
128
|
+
{ fileName: helperPath, eventKind: ts.FileWatcherEventKind.Changed },
|
|
129
|
+
]);
|
|
130
|
+
expect(plan).toEqual({
|
|
131
|
+
kind: 'files',
|
|
132
|
+
sourceFilePaths: [logicPath],
|
|
133
|
+
reason: '1 affected Kea logic file',
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
test('watch planner maps generated type changes back to source logics and dependents', () => {
|
|
141
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kea-typegen-watch-type-file-'));
|
|
142
|
+
try {
|
|
143
|
+
const logicDir = path.join(tempDir, 'src');
|
|
144
|
+
const firstLogicPath = path.join(logicDir, 'firstLogic.ts');
|
|
145
|
+
const firstLogicTypePath = path.join(logicDir, 'firstLogicType.ts');
|
|
146
|
+
const secondLogicPath = path.join(logicDir, 'secondLogic.ts');
|
|
147
|
+
const keaDtsPath = path.join(tempDir, 'node_modules', 'kea', 'index.d.ts');
|
|
148
|
+
writeFile(keaDtsPath, 'export function kea<T = any>(input: any): T\n');
|
|
149
|
+
writeFile(firstLogicTypePath, 'export interface firstLogicType {}\n');
|
|
150
|
+
writeFile(firstLogicPath, [
|
|
151
|
+
"import { kea } from 'kea'",
|
|
152
|
+
"import type { firstLogicType } from './firstLogicType'",
|
|
153
|
+
'',
|
|
154
|
+
'export const firstLogic = kea<firstLogicType>({',
|
|
155
|
+
' actions: () => ({ first: true }),',
|
|
156
|
+
'})',
|
|
157
|
+
'',
|
|
158
|
+
].join('\n'));
|
|
159
|
+
writeFile(secondLogicPath, [
|
|
160
|
+
"import { kea } from 'kea'",
|
|
161
|
+
"import { firstLogic } from './firstLogic'",
|
|
162
|
+
'',
|
|
163
|
+
'export const secondLogic = kea({',
|
|
164
|
+
' connect: { actions: [firstLogic, ["first"]] },',
|
|
165
|
+
'})',
|
|
166
|
+
'',
|
|
167
|
+
].join('\n'));
|
|
168
|
+
const program = createProgram([firstLogicPath, firstLogicTypePath, secondLogicPath]);
|
|
169
|
+
const plan = (0, watch_1.planWatchTypegenPass)(program, [
|
|
170
|
+
{ fileName: firstLogicTypePath, eventKind: ts.FileWatcherEventKind.Changed },
|
|
171
|
+
]);
|
|
172
|
+
expect(plan).toEqual({
|
|
173
|
+
kind: 'files',
|
|
174
|
+
sourceFilePaths: [firstLogicPath, secondLogicPath].sort(),
|
|
175
|
+
reason: '2 affected Kea logic files',
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
finally {
|
|
179
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
test('watch planner falls back to a full pass for deleted files and resetContext changes', () => {
|
|
183
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kea-typegen-watch-full-'));
|
|
184
|
+
try {
|
|
185
|
+
const logicDir = path.join(tempDir, 'src');
|
|
186
|
+
const logicPath = path.join(logicDir, 'logic.ts');
|
|
187
|
+
const contextPath = path.join(logicDir, 'context.ts');
|
|
188
|
+
const keaDtsPath = path.join(tempDir, 'node_modules', 'kea', 'index.d.ts');
|
|
189
|
+
writeFile(keaDtsPath, 'export function kea<T = any>(input: any): T\n');
|
|
190
|
+
writeFile(logicPath, [
|
|
191
|
+
"import { kea } from 'kea'",
|
|
192
|
+
'',
|
|
193
|
+
'export const logic = kea({',
|
|
194
|
+
' actions: () => ({ value: true }),',
|
|
195
|
+
'})',
|
|
196
|
+
'',
|
|
197
|
+
].join('\n'));
|
|
198
|
+
writeFile(contextPath, ["import { resetContext } from 'kea'", '', 'resetContext({ plugins: [] })', ''].join('\n'));
|
|
199
|
+
const program = createProgram([logicPath, contextPath]);
|
|
200
|
+
expect((0, watch_1.planWatchTypegenPass)(program, [{ fileName: logicPath, eventKind: ts.FileWatcherEventKind.Deleted }])).toEqual({ kind: 'full', reason: 'deleted file detected' });
|
|
201
|
+
expect((0, watch_1.planWatchTypegenPass)(program, [{ fileName: contextPath, eventKind: ts.FileWatcherEventKind.Changed }])).toEqual({
|
|
202
|
+
kind: 'full',
|
|
203
|
+
reason: `resetContext changed: ${path.relative(process.cwd(), contextPath)}`,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
208
|
+
}
|
|
209
|
+
});
|
|
32
210
|
//# sourceMappingURL=watch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/__tests__/watch.ts"],"names":[],"mappings":";;AAAA,iDAAqC;AACrC,6BAA4B;
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/__tests__/watch.ts"],"names":[],"mappings":"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"}
|
package/dist/src/typegen.js
CHANGED
|
@@ -8,6 +8,7 @@ const visit_1 = require("./visit/visit");
|
|
|
8
8
|
const print_1 = require("./print/print");
|
|
9
9
|
const package_json_1 = require("../package.json");
|
|
10
10
|
const cache_1 = require("./cache");
|
|
11
|
+
const watch_1 = require("./watch");
|
|
11
12
|
if (parseInt(ts.versionMajorMinor.split('.')[0]) < 5) {
|
|
12
13
|
;
|
|
13
14
|
ts.defaultMaximumTruncationLength = Infinity;
|
|
@@ -38,8 +39,9 @@ async function runTypeGen(appOptions) {
|
|
|
38
39
|
const compilerOptions = loadTsConfig(appOptions.tsConfigPath, log);
|
|
39
40
|
if (appOptions.watch) {
|
|
40
41
|
const createProgram = ts.createSemanticDiagnosticsBuilderProgram;
|
|
42
|
+
const watchChangeTracker = (0, watch_1.createWatchChangeTracker)(ts.sys);
|
|
41
43
|
const host = ts.createWatchCompilerHost(appOptions.tsConfigPath, compilerOptions.options, {
|
|
42
|
-
...
|
|
44
|
+
...watchChangeTracker.system,
|
|
43
45
|
writeFile(_path, _data, _writeByteOrderMark) {
|
|
44
46
|
return null;
|
|
45
47
|
},
|
|
@@ -64,6 +66,7 @@ async function runTypeGen(appOptions) {
|
|
|
64
66
|
}
|
|
65
67
|
const origPostProgramCreate = host.afterProgramCreate;
|
|
66
68
|
let scheduledProgram;
|
|
69
|
+
let scheduledChanges = [];
|
|
67
70
|
let runningTypegen = false;
|
|
68
71
|
const runScheduledTypegen = async () => {
|
|
69
72
|
if (runningTypegen) {
|
|
@@ -73,9 +76,11 @@ async function runTypeGen(appOptions) {
|
|
|
73
76
|
try {
|
|
74
77
|
while (scheduledProgram) {
|
|
75
78
|
const nextProgram = scheduledProgram;
|
|
79
|
+
const nextChanges = scheduledChanges;
|
|
76
80
|
scheduledProgram = undefined;
|
|
81
|
+
scheduledChanges = [];
|
|
77
82
|
try {
|
|
78
|
-
await
|
|
83
|
+
await goThroughWatchTypegenPlan(nextProgram, appOptions, (0, watch_1.planWatchTypegenPass)(nextProgram, nextChanges));
|
|
79
84
|
}
|
|
80
85
|
catch (error) {
|
|
81
86
|
console.error('⛔ Error running kea-typegen in watch mode');
|
|
@@ -92,8 +97,10 @@ async function runTypeGen(appOptions) {
|
|
|
92
97
|
};
|
|
93
98
|
host.afterProgramCreate = (prog) => {
|
|
94
99
|
program = prog.getProgram();
|
|
100
|
+
const changes = watchChangeTracker.consume();
|
|
95
101
|
origPostProgramCreate === null || origPostProgramCreate === void 0 ? void 0 : origPostProgramCreate(prog);
|
|
96
102
|
scheduledProgram = program;
|
|
103
|
+
scheduledChanges.push(...changes);
|
|
97
104
|
void runScheduledTypegen();
|
|
98
105
|
};
|
|
99
106
|
ts.createWatchProgram(host);
|
|
@@ -124,6 +131,35 @@ async function runTypeGen(appOptions) {
|
|
|
124
131
|
}
|
|
125
132
|
return response;
|
|
126
133
|
}
|
|
134
|
+
async function goThroughWatchTypegenPlan(program, appOptions, plan) {
|
|
135
|
+
if (plan.kind === 'skip') {
|
|
136
|
+
if (appOptions.verbose) {
|
|
137
|
+
appOptions.log(`⏭️ Skipping typegen watch pass: ${plan.reason}`);
|
|
138
|
+
}
|
|
139
|
+
return { filesToWrite: 0, writtenFiles: 0, filesToModify: 0 };
|
|
140
|
+
}
|
|
141
|
+
if (plan.kind === 'full') {
|
|
142
|
+
if (appOptions.verbose) {
|
|
143
|
+
appOptions.log(`🔎 Running full typegen watch pass: ${plan.reason}`);
|
|
144
|
+
}
|
|
145
|
+
return await goThroughAllTheFiles(program, appOptions);
|
|
146
|
+
}
|
|
147
|
+
if (appOptions.verbose) {
|
|
148
|
+
appOptions.log(`🎯 Running incremental typegen watch pass: ${plan.reason}`);
|
|
149
|
+
}
|
|
150
|
+
const response = { filesToWrite: 0, writtenFiles: 0, filesToModify: 0 };
|
|
151
|
+
for (const sourceFilePath of plan.sourceFilePaths) {
|
|
152
|
+
const fileResponse = await goThroughAllTheFiles(program, {
|
|
153
|
+
...appOptions,
|
|
154
|
+
delete: false,
|
|
155
|
+
sourceFilePath,
|
|
156
|
+
});
|
|
157
|
+
response.filesToWrite += fileResponse.filesToWrite;
|
|
158
|
+
response.writtenFiles += fileResponse.writtenFiles;
|
|
159
|
+
response.filesToModify += fileResponse.filesToModify;
|
|
160
|
+
}
|
|
161
|
+
return response;
|
|
162
|
+
}
|
|
127
163
|
if (program && !appOptions.watch && appOptions.sourceFilePath) {
|
|
128
164
|
await goThroughAllTheFiles(program, appOptions);
|
|
129
165
|
if (appOptions.write) {
|
package/dist/src/typegen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../src/typegen.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"typegen.js","sourceRoot":"","sources":["../../src/typegen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as ts from 'typescript';
|
|
2
|
+
export interface WatchFileChange {
|
|
3
|
+
fileName: string;
|
|
4
|
+
eventKind: ts.FileWatcherEventKind;
|
|
5
|
+
}
|
|
6
|
+
export type WatchTypegenPlan = {
|
|
7
|
+
kind: 'full';
|
|
8
|
+
reason: string;
|
|
9
|
+
} | {
|
|
10
|
+
kind: 'files';
|
|
11
|
+
sourceFilePaths: string[];
|
|
12
|
+
reason: string;
|
|
13
|
+
} | {
|
|
14
|
+
kind: 'skip';
|
|
15
|
+
reason: string;
|
|
16
|
+
};
|
|
17
|
+
export interface WatchChangeTracker {
|
|
18
|
+
system: ts.System;
|
|
19
|
+
consume(): WatchFileChange[];
|
|
20
|
+
}
|
|
21
|
+
export declare function createWatchChangeTracker(baseSystem: ts.System): WatchChangeTracker;
|
|
22
|
+
export declare function planWatchTypegenPass(program: ts.Program, changes: WatchFileChange[]): WatchTypegenPlan;
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createWatchChangeTracker = createWatchChangeTracker;
|
|
4
|
+
exports.planWatchTypegenPass = planWatchTypegenPass;
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const ts = require("typescript");
|
|
8
|
+
const utils_1 = require("./utils");
|
|
9
|
+
const KEA_CALL_REGEX = /\bkea\s*[<(]/;
|
|
10
|
+
const SOURCE_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.mjsx'];
|
|
11
|
+
const TYPEGEN_FILE_REGEX = /(^|\.|\/)typegen\.[tj]s$/;
|
|
12
|
+
const MAX_INCREMENTAL_CHANGED_FILES = 50;
|
|
13
|
+
function createWatchChangeTracker(baseSystem) {
|
|
14
|
+
const changes = new Map();
|
|
15
|
+
const track = (fileName, eventKind) => {
|
|
16
|
+
changes.set(path.resolve(fileName), { fileName: path.resolve(fileName), eventKind });
|
|
17
|
+
};
|
|
18
|
+
const system = {
|
|
19
|
+
...baseSystem,
|
|
20
|
+
watchFile(fileName, callback, pollingInterval, options) {
|
|
21
|
+
return baseSystem.watchFile(fileName, (changedFileName, eventKind, modifiedTime) => {
|
|
22
|
+
track(changedFileName, eventKind);
|
|
23
|
+
callback(changedFileName, eventKind, modifiedTime);
|
|
24
|
+
}, pollingInterval, options);
|
|
25
|
+
},
|
|
26
|
+
watchDirectory(fileName, callback, recursive, options) {
|
|
27
|
+
return baseSystem.watchDirectory(fileName, (changedFileName) => {
|
|
28
|
+
track(changedFileName, ts.FileWatcherEventKind.Created);
|
|
29
|
+
callback(changedFileName);
|
|
30
|
+
}, recursive, options);
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
system,
|
|
35
|
+
consume() {
|
|
36
|
+
const currentChanges = [...changes.values()];
|
|
37
|
+
changes.clear();
|
|
38
|
+
return currentChanges;
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function planWatchTypegenPass(program, changes) {
|
|
43
|
+
if (changes.length === 0) {
|
|
44
|
+
return { kind: 'full', reason: 'initial watch pass' };
|
|
45
|
+
}
|
|
46
|
+
const normalizedChanges = dedupeChanges(changes);
|
|
47
|
+
if (normalizedChanges.length > MAX_INCREMENTAL_CHANGED_FILES) {
|
|
48
|
+
return { kind: 'full', reason: `${normalizedChanges.length} files changed` };
|
|
49
|
+
}
|
|
50
|
+
if (normalizedChanges.some((change) => change.eventKind === ts.FileWatcherEventKind.Deleted)) {
|
|
51
|
+
return { kind: 'full', reason: 'deleted file detected' };
|
|
52
|
+
}
|
|
53
|
+
const sourceFilesByPath = getSourceFilesByPath(program);
|
|
54
|
+
const reverseDependencies = buildReverseDependencyMap(program);
|
|
55
|
+
const queue = [];
|
|
56
|
+
for (const change of normalizedChanges) {
|
|
57
|
+
const changedPath = path.resolve(change.fileName);
|
|
58
|
+
if (isTypegenModuleFile(changedPath)) {
|
|
59
|
+
return { kind: 'full', reason: `typegen module changed: ${path.relative(process.cwd(), changedPath)}` };
|
|
60
|
+
}
|
|
61
|
+
const sourceFile = sourceFilesByPath.get(changedPath);
|
|
62
|
+
if (sourceFile === null || sourceFile === void 0 ? void 0 : sourceFile.text.includes('resetContext')) {
|
|
63
|
+
return { kind: 'full', reason: `resetContext changed: ${path.relative(process.cwd(), changedPath)}` };
|
|
64
|
+
}
|
|
65
|
+
if (isGeneratedTypeFile(changedPath)) {
|
|
66
|
+
queue.push(...sourcePathsForTypeFile(changedPath, sourceFilesByPath));
|
|
67
|
+
queue.push(changedPath);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (sourceFile) {
|
|
71
|
+
if (sourceFile.isDeclarationFile) {
|
|
72
|
+
return {
|
|
73
|
+
kind: 'full',
|
|
74
|
+
reason: `declaration file changed: ${path.relative(process.cwd(), changedPath)}`,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
queue.push(changedPath);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (isSourceLikeFile(changedPath) && fs.existsSync(changedPath)) {
|
|
81
|
+
return {
|
|
82
|
+
kind: 'full',
|
|
83
|
+
reason: `new source file outside program: ${path.relative(process.cwd(), changedPath)}`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const affectedLogicFiles = collectAffectedLogicFiles(queue, sourceFilesByPath, reverseDependencies);
|
|
88
|
+
if (affectedLogicFiles.length === 0) {
|
|
89
|
+
return { kind: 'skip', reason: 'no affected Kea logic files' };
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
kind: 'files',
|
|
93
|
+
sourceFilePaths: affectedLogicFiles,
|
|
94
|
+
reason: `${affectedLogicFiles.length} affected Kea logic file${affectedLogicFiles.length === 1 ? '' : 's'}`,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function dedupeChanges(changes) {
|
|
98
|
+
const deduped = new Map();
|
|
99
|
+
for (const change of changes) {
|
|
100
|
+
deduped.set(path.resolve(change.fileName), { ...change, fileName: path.resolve(change.fileName) });
|
|
101
|
+
}
|
|
102
|
+
return [...deduped.values()];
|
|
103
|
+
}
|
|
104
|
+
function getSourceFilesByPath(program) {
|
|
105
|
+
const sourceFilesByPath = new Map();
|
|
106
|
+
for (const sourceFile of program.getSourceFiles()) {
|
|
107
|
+
sourceFilesByPath.set(path.resolve(sourceFile.fileName), sourceFile);
|
|
108
|
+
}
|
|
109
|
+
return sourceFilesByPath;
|
|
110
|
+
}
|
|
111
|
+
function buildReverseDependencyMap(program) {
|
|
112
|
+
const checker = program.getTypeChecker();
|
|
113
|
+
const reverseDependencies = new Map();
|
|
114
|
+
for (const sourceFile of program.getSourceFiles()) {
|
|
115
|
+
if (sourceFile.isDeclarationFile) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
const importerPath = path.resolve(sourceFile.fileName);
|
|
119
|
+
ts.forEachChild(sourceFile, function visit(node) {
|
|
120
|
+
if (ts.isImportDeclaration(node)) {
|
|
121
|
+
const importedFileName = (0, utils_1.getFilenameForImportDeclaration)(checker, node);
|
|
122
|
+
if (importedFileName) {
|
|
123
|
+
const importedPath = path.resolve(importedFileName);
|
|
124
|
+
let importers = reverseDependencies.get(importedPath);
|
|
125
|
+
if (!importers) {
|
|
126
|
+
importers = new Set();
|
|
127
|
+
reverseDependencies.set(importedPath, importers);
|
|
128
|
+
}
|
|
129
|
+
importers.add(importerPath);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
ts.forEachChild(node, visit);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return reverseDependencies;
|
|
136
|
+
}
|
|
137
|
+
function collectAffectedLogicFiles(startPaths, sourceFilesByPath, reverseDependencies) {
|
|
138
|
+
var _a;
|
|
139
|
+
const visited = new Set();
|
|
140
|
+
const queue = startPaths.map((filePath) => path.resolve(filePath));
|
|
141
|
+
const affectedLogicFiles = new Set();
|
|
142
|
+
while (queue.length > 0) {
|
|
143
|
+
const currentPath = queue.shift();
|
|
144
|
+
if (visited.has(currentPath)) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
visited.add(currentPath);
|
|
148
|
+
const sourceFile = sourceFilesByPath.get(currentPath);
|
|
149
|
+
if (sourceFile &&
|
|
150
|
+
!sourceFile.isDeclarationFile &&
|
|
151
|
+
!isGeneratedTypeFile(currentPath) &&
|
|
152
|
+
sourceFileMightContainKeaCall(sourceFile)) {
|
|
153
|
+
affectedLogicFiles.add(currentPath);
|
|
154
|
+
}
|
|
155
|
+
if (isGeneratedTypeFile(currentPath)) {
|
|
156
|
+
queue.push(...sourcePathsForTypeFile(currentPath, sourceFilesByPath));
|
|
157
|
+
}
|
|
158
|
+
for (const importerPath of (_a = reverseDependencies.get(currentPath)) !== null && _a !== void 0 ? _a : []) {
|
|
159
|
+
queue.push(importerPath);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return [...affectedLogicFiles].sort();
|
|
163
|
+
}
|
|
164
|
+
function sourcePathsForTypeFile(typeFilePath, sourceFilesByPath) {
|
|
165
|
+
if (!isGeneratedTypeFile(typeFilePath)) {
|
|
166
|
+
return [];
|
|
167
|
+
}
|
|
168
|
+
const sourceBasePath = typeFilePath.slice(0, -'Type.ts'.length);
|
|
169
|
+
return SOURCE_EXTENSIONS.map((extension) => `${sourceBasePath}${extension}`).filter((sourcePath) => sourceFilesByPath.has(path.resolve(sourcePath)));
|
|
170
|
+
}
|
|
171
|
+
function isGeneratedTypeFile(filePath) {
|
|
172
|
+
return filePath.endsWith('Type.ts');
|
|
173
|
+
}
|
|
174
|
+
function isSourceLikeFile(filePath) {
|
|
175
|
+
return SOURCE_EXTENSIONS.some((extension) => filePath.endsWith(extension));
|
|
176
|
+
}
|
|
177
|
+
function isTypegenModuleFile(filePath) {
|
|
178
|
+
return TYPEGEN_FILE_REGEX.test(filePath.split(path.sep).join('/'));
|
|
179
|
+
}
|
|
180
|
+
function sourceFileMightContainKeaCall(sourceFile) {
|
|
181
|
+
return KEA_CALL_REGEX.test(sourceFile.text);
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/watch.ts"],"names":[],"mappings":"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"}
|