@cbxss/tack-typecheck 2.0.0 → 2.2.0
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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/project.d.ts +3 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +73 -0
- package/dist/project.js.map +1 -0
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,5 +3,6 @@
|
|
|
3
3
|
// it runs. Implements the `TypeChecker` seam from `@cbxss/tack-codemode`; injected
|
|
4
4
|
// into `createExecutionEngine` by the CLI.
|
|
5
5
|
export { buildAmbientDts } from "./ambient.js";
|
|
6
|
+
export { includeProjectDeclaration } from "./project.js";
|
|
6
7
|
export { createTypeChecker } from "./checker.js";
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,+EAA+E;AAC/E,mFAAmF;AACnF,2CAA2C;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAiC,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,+EAA+E;AAC/E,mFAAmF;AACnF,2CAA2C;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAiC,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAIA,qGAAqG;AACrG,wBAAsB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD5G"}
|
package/dist/project.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { lstat, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, relative, resolve, sep } from "node:path";
|
|
3
|
+
import ts from "typescript-5";
|
|
4
|
+
/** Include a declaration without replacing compiler options, comments, or inherited source globs. */
|
|
5
|
+
export async function includeProjectDeclaration(tsconfigPath, declarationPath) {
|
|
6
|
+
const path = resolve(tsconfigPath);
|
|
7
|
+
const directory = dirname(path);
|
|
8
|
+
const declaration = relative(directory, resolve(declarationPath)).split(sep).join("/");
|
|
9
|
+
let text;
|
|
10
|
+
try {
|
|
11
|
+
const status = await lstat(path);
|
|
12
|
+
if (!status.isFile())
|
|
13
|
+
throw new Error(`Refusing to edit non-file or symlinked tsconfig: ${path}`);
|
|
14
|
+
text = await readFile(path, "utf8");
|
|
15
|
+
}
|
|
16
|
+
catch (cause) {
|
|
17
|
+
if (typeof cause !== "object" || cause === null || !("code" in cause) || cause.code !== "ENOENT")
|
|
18
|
+
throw cause;
|
|
19
|
+
await mkdir(directory, { recursive: true });
|
|
20
|
+
await writeFile(path, JSON.stringify({
|
|
21
|
+
compilerOptions: { target: "ES2022", module: "NodeNext", strict: true, lib: ["ES2022", "ESNext.Disposable"], types: ["node"] },
|
|
22
|
+
include: ["**/*"], exclude: ["node_modules", ".tack/generated"], files: [declaration]
|
|
23
|
+
}, null, 2) + "\n", { encoding: "utf8", flag: "wx" });
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const source = ts.parseJsonText(path, text);
|
|
27
|
+
if (ts.parseConfigFileTextToJson(path, text).error)
|
|
28
|
+
throw new Error(`Invalid tsconfig JSON: ${path}`);
|
|
29
|
+
const parsed = ts.getParsedCommandLineOfConfigFile(path, {}, {
|
|
30
|
+
...ts.sys,
|
|
31
|
+
onUnRecoverableConfigFileDiagnostic: diagnostic => { throw new Error(ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")); }
|
|
32
|
+
});
|
|
33
|
+
// Missing listed source files / empty globs do not prevent project setup.
|
|
34
|
+
const errors = parsed?.errors.filter(error => ![18002, 18003].includes(error.code)) ?? [];
|
|
35
|
+
if (!parsed || errors.length)
|
|
36
|
+
throw new Error(`Cannot update tsconfig ${path}: ${errors.map(error => ts.flattenDiagnosticMessageText(error.messageText, "\n")).join("; ")}`);
|
|
37
|
+
if (parsed.projectReferences?.length && parsed.raw.files?.length === 0 && !parsed.raw.include?.length) {
|
|
38
|
+
throw new Error(`Choose the tsconfig that owns your scripts, not a references-only project: ${path}`);
|
|
39
|
+
}
|
|
40
|
+
const expression = source.statements[0];
|
|
41
|
+
if (!expression || !ts.isExpressionStatement(expression) || !ts.isObjectLiteralExpression(expression.expression)) {
|
|
42
|
+
throw new Error(`tsconfig must contain an object: ${path}`);
|
|
43
|
+
}
|
|
44
|
+
const object = expression.expression;
|
|
45
|
+
const fileProperties = object.properties.filter(property => ts.isPropertyAssignment(property) && property.name && ts.isStringLiteral(property.name) && property.name.text === "files");
|
|
46
|
+
if (fileProperties.length > 1)
|
|
47
|
+
throw new Error(`Duplicate files entries in tsconfig: ${path}`);
|
|
48
|
+
const files = fileProperties[0];
|
|
49
|
+
const inheritedFiles = parsed.raw.files ?? [];
|
|
50
|
+
if (inheritedFiles.some(file => resolve(directory, file) === resolve(declarationPath)))
|
|
51
|
+
return;
|
|
52
|
+
if (files && ts.isPropertyAssignment(files) && ts.isArrayLiteralExpression(files.initializer)) {
|
|
53
|
+
const array = files.initializer;
|
|
54
|
+
const prefix = array.elements.length && !array.elements.hasTrailingComma ? "," : "";
|
|
55
|
+
const position = array.end - 1;
|
|
56
|
+
text = text.slice(0, position) + `\n${prefix}${JSON.stringify(declaration)}\n` + text.slice(position);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
const properties = [];
|
|
60
|
+
// Adding files would otherwise disable TypeScript's implicit **/* inclusion.
|
|
61
|
+
if (parsed.raw.files === undefined && parsed.raw.include === undefined)
|
|
62
|
+
properties.push('"include": ["**/*"]');
|
|
63
|
+
properties.push(`"files": ${JSON.stringify([...inheritedFiles, declaration])}`);
|
|
64
|
+
const prefix = object.properties.length && !object.properties.hasTrailingComma ? "," : "";
|
|
65
|
+
const position = object.end - 1;
|
|
66
|
+
text = text.slice(0, position) + `\n${prefix}${properties.join(",\n")}\n` + text.slice(position);
|
|
67
|
+
}
|
|
68
|
+
// No recovery rewrite: if another process changed the config, leave it alone.
|
|
69
|
+
if (await readFile(path, "utf8") !== source.text || !(await lstat(path)).isFile())
|
|
70
|
+
throw new Error(`tsconfig changed during SDK setup: ${path}`);
|
|
71
|
+
await writeFile(path, text, "utf8");
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cbxss/tack-typecheck",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
"test": "vitest run --passWithNoTests"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@cbxss/tack-codemode": "2.
|
|
21
|
-
"@cbxss/tack-core": "2.
|
|
22
|
-
"@cbxss/tack-sdk-types": "2.
|
|
20
|
+
"@cbxss/tack-codemode": "2.2.0",
|
|
21
|
+
"@cbxss/tack-core": "2.2.0",
|
|
22
|
+
"@cbxss/tack-sdk-types": "2.2.0",
|
|
23
23
|
"typescript-5": "npm:typescript@^5.9.3"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|