@1nder-labs/schemalint 1.0.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/LICENSE-APACHE +176 -0
- package/LICENSE-MIT +19 -0
- package/README.md +52 -0
- package/bin/schemalint-zod.js +6 -0
- package/dist/discover.d.ts +43 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +145 -0
- package/dist/discover.js.map +1 -0
- package/dist/discover_ast.d.ts +30 -0
- package/dist/discover_ast.d.ts.map +1 -0
- package/dist/discover_ast.js +202 -0
- package/dist/discover_ast.js.map +1 -0
- package/dist/evaluate.d.ts +18 -0
- package/dist/evaluate.d.ts.map +1 -0
- package/dist/evaluate.js +112 -0
- package/dist/evaluate.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +3 -0
- package/dist/main.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +82 -0
- package/dist/server.js.map +1 -0
- package/dist/target_emit.d.ts +12 -0
- package/dist/target_emit.d.ts.map +1 -0
- package/dist/target_emit.js +111 -0
- package/dist/target_emit.js.map +1 -0
- package/dist/target_imports.d.ts +19 -0
- package/dist/target_imports.d.ts.map +1 -0
- package/dist/target_imports.js +79 -0
- package/dist/target_imports.js.map +1 -0
- package/dist/target_resolution.d.ts +20 -0
- package/dist/target_resolution.d.ts.map +1 -0
- package/dist/target_resolution.js +174 -0
- package/dist/target_resolution.js.map +1 -0
- package/dist/targets.d.ts +5 -0
- package/dist/targets.d.ts.map +1 -0
- package/dist/targets.js +116 -0
- package/dist/targets.js.map +1 -0
- package/index.cjs +504 -0
- package/package.json +34 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export const OUTPUT_CALLS = new Set(['generateObject', 'streamObject']);
|
|
2
|
+
export const TOOL_CALLS = new Set(['tool', 'betaZodTool', 'zodFunction']);
|
|
3
|
+
export const FORMAT_CALLS = new Set(['zodTextFormat', 'zodResponseFormat']);
|
|
4
|
+
export function collectTargetImports(sourceFile, tsModule) {
|
|
5
|
+
const imports = {
|
|
6
|
+
outputCalls: new Set(),
|
|
7
|
+
toolCalls: new Set(),
|
|
8
|
+
formatCalls: new Set(),
|
|
9
|
+
outputObjects: new Set(),
|
|
10
|
+
aiNamespaces: new Set(),
|
|
11
|
+
helperNamespaces: new Set(),
|
|
12
|
+
};
|
|
13
|
+
for (const stmt of sourceFile.statements) {
|
|
14
|
+
if (!tsModule.isImportDeclaration(stmt))
|
|
15
|
+
continue;
|
|
16
|
+
const spec = stmt.moduleSpecifier;
|
|
17
|
+
if (!tsModule.isStringLiteral(spec))
|
|
18
|
+
continue;
|
|
19
|
+
const clause = stmt.importClause;
|
|
20
|
+
if (!clause)
|
|
21
|
+
continue;
|
|
22
|
+
const mod = spec.text;
|
|
23
|
+
const isAiModule = mod === 'ai';
|
|
24
|
+
const isOpenAiHelper = mod === 'openai/helpers/zod';
|
|
25
|
+
const isAnthropicHelper = mod === '@anthropic-ai/sdk/helpers/zod';
|
|
26
|
+
if (!isAiModule && !isOpenAiHelper && !isAnthropicHelper)
|
|
27
|
+
continue;
|
|
28
|
+
const bindings = clause.namedBindings;
|
|
29
|
+
if (bindings && tsModule.isNamespaceImport(bindings)) {
|
|
30
|
+
if (isAiModule)
|
|
31
|
+
imports.aiNamespaces.add(bindings.name.text);
|
|
32
|
+
if (isOpenAiHelper || isAnthropicHelper) {
|
|
33
|
+
imports.helperNamespaces.add(bindings.name.text);
|
|
34
|
+
}
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (!bindings || !tsModule.isNamedImports(bindings))
|
|
38
|
+
continue;
|
|
39
|
+
for (const element of bindings.elements) {
|
|
40
|
+
const importedName = element.propertyName?.text ?? element.name.text;
|
|
41
|
+
const localName = element.name.text;
|
|
42
|
+
if (isAiModule)
|
|
43
|
+
addAiImport(imports, importedName, localName);
|
|
44
|
+
if (isOpenAiHelper || isAnthropicHelper) {
|
|
45
|
+
addHelperImport(imports, importedName, localName);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return imports;
|
|
50
|
+
}
|
|
51
|
+
export function isProviderCall(ref, imports) {
|
|
52
|
+
if (ref.receiver) {
|
|
53
|
+
if (imports.aiNamespaces.has(ref.receiver)) {
|
|
54
|
+
return OUTPUT_CALLS.has(ref.name) || ref.name === 'tool';
|
|
55
|
+
}
|
|
56
|
+
if (imports.helperNamespaces.has(ref.receiver)) {
|
|
57
|
+
return FORMAT_CALLS.has(ref.name) || TOOL_CALLS.has(ref.name);
|
|
58
|
+
}
|
|
59
|
+
return ref.name === 'object' && imports.outputObjects.has(ref.receiver);
|
|
60
|
+
}
|
|
61
|
+
return (imports.outputCalls.has(ref.name) ||
|
|
62
|
+
imports.toolCalls.has(ref.name) ||
|
|
63
|
+
imports.formatCalls.has(ref.name));
|
|
64
|
+
}
|
|
65
|
+
function addAiImport(imports, importedName, localName) {
|
|
66
|
+
if (OUTPUT_CALLS.has(importedName))
|
|
67
|
+
imports.outputCalls.add(localName);
|
|
68
|
+
if (importedName === 'tool')
|
|
69
|
+
imports.toolCalls.add(localName);
|
|
70
|
+
if (importedName === 'Output')
|
|
71
|
+
imports.outputObjects.add(localName);
|
|
72
|
+
}
|
|
73
|
+
function addHelperImport(imports, importedName, localName) {
|
|
74
|
+
if (FORMAT_CALLS.has(importedName))
|
|
75
|
+
imports.formatCalls.add(localName);
|
|
76
|
+
if (TOOL_CALLS.has(importedName))
|
|
77
|
+
imports.toolCalls.add(localName);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=target_imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target_imports.js","sourceRoot":"","sources":["../src/target_imports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type * as ts from 'typescript';
|
|
2
|
+
export interface TargetExpression {
|
|
3
|
+
name: string;
|
|
4
|
+
sourceFile: ts.SourceFile;
|
|
5
|
+
expression: ts.Expression;
|
|
6
|
+
}
|
|
7
|
+
export interface CarrierExpression {
|
|
8
|
+
api: string;
|
|
9
|
+
fn: ts.FunctionLikeDeclaration;
|
|
10
|
+
paramName: string;
|
|
11
|
+
propertyName: string;
|
|
12
|
+
explicitName?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function pushExpressionOrCarrier(targets: TargetExpression[], carriers: CarrierExpression[], api: string, expression: ts.Expression, sourceFile: ts.SourceFile, tsModule: typeof ts, explicitName?: string): void;
|
|
15
|
+
export declare function collectCarrierTargets(program: ts.Program, fileSet: ReadonlySet<string>, checker: ts.TypeChecker, tsModule: typeof ts, carriers: CarrierExpression[]): TargetExpression[];
|
|
16
|
+
export declare function objectExpression(expr: ts.Expression | undefined, checker: ts.TypeChecker, tsModule: typeof ts): ts.ObjectLiteralExpression | undefined;
|
|
17
|
+
export declare function propertyFromExpression(expr: ts.Expression | undefined, name: string, checker: ts.TypeChecker, tsModule: typeof ts): ts.Expression | undefined;
|
|
18
|
+
export declare function stringPropertyFromExpression(expr: ts.Expression | undefined, name: string, checker: ts.TypeChecker, tsModule: typeof ts): string | undefined;
|
|
19
|
+
export declare function resolveVariableDeclaration(id: ts.Identifier, checker: ts.TypeChecker, tsModule: typeof ts): ts.VariableDeclaration | undefined;
|
|
20
|
+
//# sourceMappingURL=target_resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target_resolution.d.ts","sourceRoot":"","sources":["../src/target_resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAC1B,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,EAAE,CAAC,uBAAuB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CAaN;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,EAAE,iBAAiB,EAAE,GAC5B,gBAAgB,EAAE,CAiCpB;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,EAC/B,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,QAAQ,EAAE,OAAO,EAAE,GAClB,EAAE,CAAC,uBAAuB,GAAG,SAAS,CAoBxC;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,QAAQ,EAAE,OAAO,EAAE,GAClB,EAAE,CAAC,UAAU,GAAG,SAAS,CAqB3B;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,QAAQ,EAAE,OAAO,EAAE,GAClB,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,EAAE,CAAC,UAAU,EACjB,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,QAAQ,EAAE,OAAO,EAAE,GAClB,EAAE,CAAC,mBAAmB,GAAG,SAAS,CAQpC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
export function pushExpressionOrCarrier(targets, carriers, api, expression, sourceFile, tsModule, explicitName) {
|
|
2
|
+
const carrier = carrierExpression(api, expression, tsModule, explicitName);
|
|
3
|
+
if (carrier) {
|
|
4
|
+
carriers.push(carrier);
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
targets.push(namedTarget(api, expression, sourceFile, tsModule, explicitName));
|
|
8
|
+
}
|
|
9
|
+
export function collectCarrierTargets(program, fileSet, checker, tsModule, carriers) {
|
|
10
|
+
if (carriers.length === 0)
|
|
11
|
+
return [];
|
|
12
|
+
const targets = [];
|
|
13
|
+
for (const sourceFile of program.getSourceFiles()) {
|
|
14
|
+
if (sourceFile.isDeclarationFile ||
|
|
15
|
+
sourceFile.fileName.includes('node_modules') ||
|
|
16
|
+
!fileSet.has(sourceFile.fileName)) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
function walk(node) {
|
|
20
|
+
if (tsModule.isCallExpression(node)) {
|
|
21
|
+
for (const carrier of carriers) {
|
|
22
|
+
const target = carrierTargetFromCall(node, sourceFile, checker, tsModule, carrier);
|
|
23
|
+
if (target)
|
|
24
|
+
targets.push(target);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
tsModule.forEachChild(node, walk);
|
|
28
|
+
}
|
|
29
|
+
tsModule.forEachChild(sourceFile, walk);
|
|
30
|
+
}
|
|
31
|
+
return targets;
|
|
32
|
+
}
|
|
33
|
+
export function objectExpression(expr, checker, tsModule) {
|
|
34
|
+
if (!expr)
|
|
35
|
+
return undefined;
|
|
36
|
+
const unwrapped = skipParens(expr, tsModule);
|
|
37
|
+
if (tsModule.isObjectLiteralExpression(unwrapped))
|
|
38
|
+
return unwrapped;
|
|
39
|
+
if (tsModule.isIdentifier(unwrapped)) {
|
|
40
|
+
const decl = resolveVariableDeclaration(unwrapped, checker, tsModule);
|
|
41
|
+
if (decl?.initializer) {
|
|
42
|
+
return objectExpression(decl.initializer, checker, tsModule);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (tsModule.isConditionalExpression(unwrapped)) {
|
|
46
|
+
return (objectExpression(unwrapped.whenTrue, checker, tsModule) ??
|
|
47
|
+
objectExpression(unwrapped.whenFalse, checker, tsModule));
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
export function propertyFromExpression(expr, name, checker, tsModule) {
|
|
52
|
+
if (!expr)
|
|
53
|
+
return undefined;
|
|
54
|
+
const unwrapped = skipParens(expr, tsModule);
|
|
55
|
+
if (tsModule.isObjectLiteralExpression(unwrapped)) {
|
|
56
|
+
return propertyFromObject(unwrapped, name, checker, tsModule);
|
|
57
|
+
}
|
|
58
|
+
if (tsModule.isIdentifier(unwrapped)) {
|
|
59
|
+
const decl = resolveVariableDeclaration(unwrapped, checker, tsModule);
|
|
60
|
+
return propertyFromExpression(decl?.initializer, name, checker, tsModule);
|
|
61
|
+
}
|
|
62
|
+
if (tsModule.isConditionalExpression(unwrapped)) {
|
|
63
|
+
return (propertyFromExpression(unwrapped.whenTrue, name, checker, tsModule) ??
|
|
64
|
+
propertyFromExpression(unwrapped.whenFalse, name, checker, tsModule));
|
|
65
|
+
}
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
export function stringPropertyFromExpression(expr, name, checker, tsModule) {
|
|
69
|
+
const value = propertyFromExpression(expr, name, checker, tsModule);
|
|
70
|
+
return stringLiteralText(value, tsModule);
|
|
71
|
+
}
|
|
72
|
+
export function resolveVariableDeclaration(id, checker, tsModule) {
|
|
73
|
+
const symbol = checker.getSymbolAtLocation(id);
|
|
74
|
+
const aliased = symbol && (symbol.flags & tsModule.SymbolFlags.Alias)
|
|
75
|
+
? checker.getAliasedSymbol(symbol)
|
|
76
|
+
: symbol;
|
|
77
|
+
const decl = aliased?.valueDeclaration ?? aliased?.declarations?.[0];
|
|
78
|
+
return decl && tsModule.isVariableDeclaration(decl) ? decl : undefined;
|
|
79
|
+
}
|
|
80
|
+
function carrierExpression(api, expression, tsModule, explicitName) {
|
|
81
|
+
const expr = skipParens(expression, tsModule);
|
|
82
|
+
if (!tsModule.isPropertyAccessExpression(expr))
|
|
83
|
+
return undefined;
|
|
84
|
+
if (!tsModule.isIdentifier(expr.expression))
|
|
85
|
+
return undefined;
|
|
86
|
+
const paramName = expr.expression.text;
|
|
87
|
+
const fn = enclosingCarrierFunction(expr, paramName, tsModule);
|
|
88
|
+
if (!fn)
|
|
89
|
+
return undefined;
|
|
90
|
+
return {
|
|
91
|
+
api,
|
|
92
|
+
fn,
|
|
93
|
+
paramName,
|
|
94
|
+
propertyName: expr.name.text,
|
|
95
|
+
explicitName,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function enclosingCarrierFunction(node, paramName, tsModule) {
|
|
99
|
+
let current = node.parent;
|
|
100
|
+
while (current) {
|
|
101
|
+
if (tsModule.isFunctionDeclaration(current) ||
|
|
102
|
+
tsModule.isFunctionExpression(current) ||
|
|
103
|
+
tsModule.isArrowFunction(current) ||
|
|
104
|
+
tsModule.isMethodDeclaration(current)) {
|
|
105
|
+
const hasParam = current.parameters.some((param) => tsModule.isIdentifier(param.name) && param.name.text === paramName);
|
|
106
|
+
if (hasParam)
|
|
107
|
+
return current;
|
|
108
|
+
}
|
|
109
|
+
current = current.parent;
|
|
110
|
+
}
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
function carrierTargetFromCall(call, sourceFile, checker, tsModule, carrier) {
|
|
114
|
+
if (!sameSymbol(call.expression, carrier.fn, checker, tsModule)) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
const paramIndex = carrier.fn.parameters.findIndex((param) => tsModule.isIdentifier(param.name) && param.name.text === carrier.paramName);
|
|
118
|
+
if (paramIndex === -1)
|
|
119
|
+
return undefined;
|
|
120
|
+
const schema = propertyFromExpression(call.arguments[paramIndex], carrier.propertyName, checker, tsModule);
|
|
121
|
+
if (!schema)
|
|
122
|
+
return undefined;
|
|
123
|
+
const name = carrier.explicitName ??
|
|
124
|
+
stringPropertyFromExpression(call.arguments[paramIndex], 'name', checker, tsModule);
|
|
125
|
+
return namedTarget(carrier.api, schema, sourceFile, tsModule, name);
|
|
126
|
+
}
|
|
127
|
+
function sameSymbol(expression, fn, checker, tsModule) {
|
|
128
|
+
const symbol = checker.getSymbolAtLocation(expression);
|
|
129
|
+
const aliased = symbol && (symbol.flags & tsModule.SymbolFlags.Alias)
|
|
130
|
+
? checker.getAliasedSymbol(symbol)
|
|
131
|
+
: symbol;
|
|
132
|
+
return aliased?.declarations?.some((decl) => decl === fn) ?? false;
|
|
133
|
+
}
|
|
134
|
+
function propertyFromObject(obj, name, checker, tsModule) {
|
|
135
|
+
for (const prop of [...obj.properties].reverse()) {
|
|
136
|
+
if (tsModule.isPropertyAssignment(prop)) {
|
|
137
|
+
if (propertyName(prop.name, tsModule) === name)
|
|
138
|
+
return prop.initializer;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (tsModule.isSpreadAssignment(prop)) {
|
|
142
|
+
const fromSpread = propertyFromExpression(prop.expression, name, checker, tsModule);
|
|
143
|
+
if (fromSpread)
|
|
144
|
+
return fromSpread;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
149
|
+
function namedTarget(api, expression, sourceFile, tsModule, explicitName) {
|
|
150
|
+
const { line } = sourceFile.getLineAndCharacterOfPosition(expression.getStart(sourceFile));
|
|
151
|
+
const expr = skipParens(expression, tsModule);
|
|
152
|
+
const suffix = explicitName ??
|
|
153
|
+
(tsModule.isIdentifier(expr) ? expr.text : `inline:${line + 1}`);
|
|
154
|
+
return {
|
|
155
|
+
name: `${api}:${suffix}`,
|
|
156
|
+
sourceFile,
|
|
157
|
+
expression,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function stringLiteralText(expr, tsModule) {
|
|
161
|
+
return expr && tsModule.isStringLiteralLike(expr) ? expr.text : undefined;
|
|
162
|
+
}
|
|
163
|
+
function propertyName(name, tsModule) {
|
|
164
|
+
if (tsModule.isIdentifier(name) || tsModule.isStringLiteral(name)) {
|
|
165
|
+
return name.text;
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
function skipParens(node, tsModule) {
|
|
170
|
+
while (tsModule.isParenthesizedExpression(node))
|
|
171
|
+
node = node.expression;
|
|
172
|
+
return node;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=target_resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target_resolution.js","sourceRoot":"","sources":["../src/target_resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type * as ts from 'typescript';
|
|
2
|
+
import { type SchemaTarget } from './target_emit.js';
|
|
3
|
+
export type { SchemaTarget } from './target_emit.js';
|
|
4
|
+
export declare function findSchemaTargets(program: ts.Program, fileSet: ReadonlySet<string>, tsModule: typeof ts, compilerOptions: ts.CompilerOptions): SchemaTarget[];
|
|
5
|
+
//# sourceMappingURL=targets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../src/targets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAmBpE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,QAAQ,EAAE,OAAO,EAAE,EACnB,eAAe,EAAE,EAAE,CAAC,eAAe,GAClC,YAAY,EAAE,CA6ChB"}
|
package/dist/targets.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { resolveTarget } from './target_emit.js';
|
|
2
|
+
import { collectTargetImports, FORMAT_CALLS, isProviderCall, OUTPUT_CALLS, TOOL_CALLS, } from './target_imports.js';
|
|
3
|
+
import { collectCarrierTargets, objectExpression, propertyFromExpression, pushExpressionOrCarrier, } from './target_resolution.js';
|
|
4
|
+
export function findSchemaTargets(program, fileSet, tsModule, compilerOptions) {
|
|
5
|
+
const checker = program.getTypeChecker();
|
|
6
|
+
const carrierExpressions = [];
|
|
7
|
+
const targets = [];
|
|
8
|
+
const seen = new Set();
|
|
9
|
+
for (const sourceFile of program.getSourceFiles()) {
|
|
10
|
+
if (sourceFile.isDeclarationFile ||
|
|
11
|
+
sourceFile.fileName.includes('node_modules')) {
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
if (!fileSet.has(sourceFile.fileName))
|
|
15
|
+
continue;
|
|
16
|
+
const found = collectTargetExpressions(sourceFile, checker, tsModule, carrierExpressions);
|
|
17
|
+
for (const target of found) {
|
|
18
|
+
pushTarget(targets, seen, resolveTarget(target, checker, tsModule, compilerOptions));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
for (const target of collectCarrierTargets(program, fileSet, checker, tsModule, carrierExpressions)) {
|
|
22
|
+
pushTarget(targets, seen, resolveTarget(target, checker, tsModule, compilerOptions));
|
|
23
|
+
}
|
|
24
|
+
return targets;
|
|
25
|
+
}
|
|
26
|
+
function collectTargetExpressions(sourceFile, checker, tsModule, carrierExpressions) {
|
|
27
|
+
const targets = [];
|
|
28
|
+
const imports = collectTargetImports(sourceFile, tsModule);
|
|
29
|
+
function walk(node) {
|
|
30
|
+
if (tsModule.isCallExpression(node)) {
|
|
31
|
+
collectFromCall(node, sourceFile, checker, tsModule, imports, targets, carrierExpressions);
|
|
32
|
+
}
|
|
33
|
+
tsModule.forEachChild(node, walk);
|
|
34
|
+
}
|
|
35
|
+
tsModule.forEachChild(sourceFile, walk);
|
|
36
|
+
return targets;
|
|
37
|
+
}
|
|
38
|
+
function collectFromCall(call, sourceFile, checker, tsModule, imports, targets, carrierExpressions) {
|
|
39
|
+
const ref = callRef(call.expression, tsModule);
|
|
40
|
+
if (!ref || !isProviderCall(ref, imports))
|
|
41
|
+
return;
|
|
42
|
+
const name = ref.name;
|
|
43
|
+
if (OUTPUT_CALLS.has(name)) {
|
|
44
|
+
const schema = propertyFromExpression(call.arguments[0], 'schema', checker, tsModule);
|
|
45
|
+
if (schema) {
|
|
46
|
+
pushExpressionOrCarrier(targets, carrierExpressions, name, schema, sourceFile, tsModule);
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (name === 'object' && isOutputObjectCall(call, tsModule, imports)) {
|
|
51
|
+
const schema = propertyFromExpression(call.arguments[0], 'schema', checker, tsModule);
|
|
52
|
+
if (schema) {
|
|
53
|
+
pushExpressionOrCarrier(targets, carrierExpressions, 'Output.object', schema, sourceFile, tsModule);
|
|
54
|
+
}
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (TOOL_CALLS.has(name)) {
|
|
58
|
+
const arg = objectExpression(call.arguments[0], checker, tsModule);
|
|
59
|
+
const schema = arg &&
|
|
60
|
+
(propertyExpression(arg, 'inputSchema', tsModule) ??
|
|
61
|
+
propertyExpression(arg, 'parameters', tsModule));
|
|
62
|
+
if (schema) {
|
|
63
|
+
pushExpressionOrCarrier(targets, carrierExpressions, name, schema, sourceFile, tsModule, stringProperty(arg, 'name', tsModule));
|
|
64
|
+
}
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (FORMAT_CALLS.has(name) && call.arguments[0]) {
|
|
68
|
+
const schemaName = stringLiteralText(call.arguments[1], tsModule);
|
|
69
|
+
pushExpressionOrCarrier(targets, carrierExpressions, name, call.arguments[0], sourceFile, tsModule, schemaName);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function pushTarget(targets, seen, resolved) {
|
|
73
|
+
const key = `${resolved.filePath}:${resolved.exportName}:${resolved.name}`;
|
|
74
|
+
if (seen.has(key))
|
|
75
|
+
return;
|
|
76
|
+
seen.add(key);
|
|
77
|
+
targets.push(resolved);
|
|
78
|
+
}
|
|
79
|
+
function propertyExpression(obj, name, tsModule) {
|
|
80
|
+
for (const prop of obj.properties) {
|
|
81
|
+
if (!tsModule.isPropertyAssignment(prop))
|
|
82
|
+
continue;
|
|
83
|
+
if (propertyName(prop.name, tsModule) === name)
|
|
84
|
+
return prop.initializer;
|
|
85
|
+
}
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
function stringProperty(obj, name, tsModule) {
|
|
89
|
+
const expr = propertyExpression(obj, name, tsModule);
|
|
90
|
+
return stringLiteralText(expr, tsModule);
|
|
91
|
+
}
|
|
92
|
+
function stringLiteralText(expr, tsModule) {
|
|
93
|
+
return expr && tsModule.isStringLiteralLike(expr) ? expr.text : undefined;
|
|
94
|
+
}
|
|
95
|
+
function propertyName(name, tsModule) {
|
|
96
|
+
if (tsModule.isIdentifier(name) || tsModule.isStringLiteral(name))
|
|
97
|
+
return name.text;
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
function callRef(expr, tsModule) {
|
|
101
|
+
if (tsModule.isIdentifier(expr))
|
|
102
|
+
return { name: expr.text };
|
|
103
|
+
if (tsModule.isPropertyAccessExpression(expr) &&
|
|
104
|
+
tsModule.isIdentifier(expr.expression)) {
|
|
105
|
+
return { name: expr.name.text, receiver: expr.expression.text };
|
|
106
|
+
}
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
function isOutputObjectCall(call, tsModule, imports) {
|
|
110
|
+
const expr = call.expression;
|
|
111
|
+
return tsModule.isPropertyAccessExpression(expr) &&
|
|
112
|
+
tsModule.isIdentifier(expr.expression) &&
|
|
113
|
+
imports.outputObjects.has(expr.expression.text) &&
|
|
114
|
+
expr.name.text === 'object';
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=targets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../src/targets.ts"],"names":[],"mappings":"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"}
|