@inquir/compute 0.1.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/README.md +97 -0
- package/dist/codegen.d.ts +6 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +209 -0
- package/dist/codegen.js.map +1 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +50 -0
- package/dist/config.js.map +1 -0
- package/dist/define-function.d.ts +22 -0
- package/dist/define-function.d.ts.map +1 -0
- package/dist/define-function.js +30 -0
- package/dist/define-function.js.map +1 -0
- package/dist/define-pipeline.d.ts +8 -0
- package/dist/define-pipeline.d.ts.map +1 -0
- package/dist/define-pipeline.js +56 -0
- package/dist/define-pipeline.js.map +1 -0
- package/dist/discovery-harness.d.ts +2 -0
- package/dist/discovery-harness.d.ts.map +1 -0
- package/dist/discovery-harness.js +67 -0
- package/dist/discovery-harness.js.map +1 -0
- package/dist/discovery.d.ts +4 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +136 -0
- package/dist/discovery.js.map +1 -0
- package/dist/hashing.d.ts +2 -0
- package/dist/hashing.d.ts.map +1 -0
- package/dist/hashing.js +51 -0
- package/dist/hashing.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/json-schema.d.ts +4 -0
- package/dist/json-schema.d.ts.map +1 -0
- package/dist/json-schema.js +162 -0
- package/dist/json-schema.js.map +1 -0
- package/dist/local-runner-harness.d.ts +2 -0
- package/dist/local-runner-harness.d.ts.map +1 -0
- package/dist/local-runner-harness.js +87 -0
- package/dist/local-runner-harness.js.map +1 -0
- package/dist/local-runner.d.ts +4 -0
- package/dist/local-runner.d.ts.map +1 -0
- package/dist/local-runner.js +92 -0
- package/dist/local-runner.js.map +1 -0
- package/dist/transport.d.ts +257 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +257 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +198 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/zip.d.ts +6 -0
- package/dist/zip.d.ts.map +1 -0
- package/dist/zip.js +145 -0
- package/dist/zip.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
6
|
+
import { computeSourceHash } from './hashing.js';
|
|
7
|
+
const CANDIDATE_FILE_PATTERN = /(?:^index\.[cm]?[jt]s$|^function\.[cm]?[jt]s$|^pipeline\.[cm]?[jt]s$|\.function\.[cm]?[jt]s$|\.pipeline\.[cm]?[jt]s$)/;
|
|
8
|
+
const modulePath = typeof __filename === 'string' ? __filename : fileURLToPath(import.meta.url);
|
|
9
|
+
const require = createRequire(modulePath);
|
|
10
|
+
function resolveTsxImportPath() {
|
|
11
|
+
// Node's --import flag parses a bare Windows path (e.g. C:\...) as a URL with
|
|
12
|
+
// an unsupported "c:" scheme. Pass a file:// URL so it works cross-platform.
|
|
13
|
+
return pathToFileURL(require.resolve('tsx')).href;
|
|
14
|
+
}
|
|
15
|
+
function collectCandidateFiles(rootDir, output) {
|
|
16
|
+
if (!fs.existsSync(rootDir)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const entries = fs.readdirSync(rootDir, { withFileTypes: true })
|
|
20
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
21
|
+
for (const entry of entries) {
|
|
22
|
+
if (entry.name === 'node_modules' || entry.name.startsWith('.')) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const fullPath = path.join(rootDir, entry.name);
|
|
26
|
+
if (entry.isDirectory()) {
|
|
27
|
+
collectCandidateFiles(fullPath, output);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (entry.isFile() && CANDIDATE_FILE_PATTERN.test(entry.name)) {
|
|
31
|
+
output.push(fullPath);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function runDiscoveryHarness(candidateFiles) {
|
|
36
|
+
if (candidateFiles.length === 0) {
|
|
37
|
+
return Promise.resolve({ assets: [], diagnostics: [] });
|
|
38
|
+
}
|
|
39
|
+
const harnessPath = path.join(path.dirname(modulePath), `discovery-harness${path.extname(modulePath)}`);
|
|
40
|
+
const tsxImportPath = resolveTsxImportPath();
|
|
41
|
+
return new Promise((resolve) => {
|
|
42
|
+
const child = spawn(process.execPath, ['--import', tsxImportPath, harnessPath, ...candidateFiles], {
|
|
43
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
44
|
+
});
|
|
45
|
+
let stdout = '';
|
|
46
|
+
let stderr = '';
|
|
47
|
+
child.stdout.on('data', (chunk) => {
|
|
48
|
+
stdout += chunk.toString();
|
|
49
|
+
});
|
|
50
|
+
child.stderr.on('data', (chunk) => {
|
|
51
|
+
stderr += chunk.toString();
|
|
52
|
+
});
|
|
53
|
+
child.on('close', () => {
|
|
54
|
+
if (!stdout.trim()) {
|
|
55
|
+
resolve({
|
|
56
|
+
assets: [],
|
|
57
|
+
diagnostics: stderr
|
|
58
|
+
? [{ code: 'IMPORT_FAILED', message: stderr.trim() }]
|
|
59
|
+
: [],
|
|
60
|
+
});
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
resolve(JSON.parse(stdout));
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
resolve({
|
|
68
|
+
assets: [],
|
|
69
|
+
diagnostics: [{
|
|
70
|
+
code: 'IMPORT_FAILED',
|
|
71
|
+
message: error instanceof Error ? error.message : String(error),
|
|
72
|
+
}],
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
export async function discoverAssets(config) {
|
|
79
|
+
const candidateFiles = [];
|
|
80
|
+
collectCandidateFiles(config.absoluteFunctionsDir, candidateFiles);
|
|
81
|
+
collectCandidateFiles(config.absolutePipelinesDir, candidateFiles);
|
|
82
|
+
const harnessResult = await runDiscoveryHarness(candidateFiles);
|
|
83
|
+
const diagnostics = [...harnessResult.diagnostics];
|
|
84
|
+
// Orphan asset detection
|
|
85
|
+
for (const filePath of (harnessResult.noAssetFiles ?? [])) {
|
|
86
|
+
const text = fs.readFileSync(filePath, 'utf8');
|
|
87
|
+
if (text.includes('defineFunction(') || text.includes('definePipeline(')) {
|
|
88
|
+
diagnostics.push({
|
|
89
|
+
code: 'ORPHAN_ASSET',
|
|
90
|
+
filePath,
|
|
91
|
+
message: 'File contains defineFunction/definePipeline but no exported assets were found. Did you forget to export?',
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const assets = harnessResult.assets.map((asset) => {
|
|
96
|
+
const assetDir = path.dirname(asset.filePath);
|
|
97
|
+
return {
|
|
98
|
+
kind: asset.kind,
|
|
99
|
+
name: asset.name,
|
|
100
|
+
runtime: asset.runtime,
|
|
101
|
+
exportName: asset.exportName,
|
|
102
|
+
filePath: asset.filePath,
|
|
103
|
+
assetDir,
|
|
104
|
+
localPath: path.relative(config.rootDir, asset.filePath).replace(/\\/g, '/'),
|
|
105
|
+
sourceHash: computeSourceHash(assetDir),
|
|
106
|
+
...(asset.kind === 'function' ? { inputSchema: asset.inputSchema } : {}),
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
// Duplicate name detection
|
|
110
|
+
const byName = new Map();
|
|
111
|
+
for (const asset of assets) {
|
|
112
|
+
const group = byName.get(asset.name);
|
|
113
|
+
if (group) {
|
|
114
|
+
group.push(asset);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
byName.set(asset.name, [asset]);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
for (const [name, entries] of byName) {
|
|
121
|
+
if (entries.length > 1) {
|
|
122
|
+
diagnostics.push({
|
|
123
|
+
code: 'DUPLICATE_NAME',
|
|
124
|
+
message: `Asset name "${name}" is used by multiple assets: ${entries.map((e) => e.localPath).join(', ')}`,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
assets.sort((left, right) => left.kind.localeCompare(right.kind)
|
|
129
|
+
|| left.name.localeCompare(right.name)
|
|
130
|
+
|| left.localPath.localeCompare(right.localPath));
|
|
131
|
+
return {
|
|
132
|
+
assets,
|
|
133
|
+
diagnostics,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../src/hashing.ts"],"names":[],"mappings":"AAyCA,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAiB3D"}
|
package/dist/hashing.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
const IGNORED_DIRECTORIES = new Set(['node_modules', '.git']);
|
|
5
|
+
const IGNORED_FILENAMES = new Set(['.DS_Store']);
|
|
6
|
+
const IGNORED_SUFFIXES = ['.swp', '.swo', '.tmp', '~'];
|
|
7
|
+
const TEST_FILE_PATTERN = /\.(test|spec)\.[cm]?[jt]sx?$/;
|
|
8
|
+
function shouldIgnoreFile(filePath) {
|
|
9
|
+
const basename = path.basename(filePath);
|
|
10
|
+
return IGNORED_FILENAMES.has(basename)
|
|
11
|
+
|| IGNORED_SUFFIXES.some((suffix) => basename.endsWith(suffix))
|
|
12
|
+
|| TEST_FILE_PATTERN.test(basename);
|
|
13
|
+
}
|
|
14
|
+
function collectFiles(entryPath, output) {
|
|
15
|
+
const stat = fs.statSync(entryPath);
|
|
16
|
+
if (stat.isFile()) {
|
|
17
|
+
if (!shouldIgnoreFile(entryPath)) {
|
|
18
|
+
output.push(entryPath);
|
|
19
|
+
}
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const entries = fs.readdirSync(entryPath, { withFileTypes: true })
|
|
23
|
+
.filter((entry) => !IGNORED_DIRECTORIES.has(entry.name))
|
|
24
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
25
|
+
for (const entry of entries) {
|
|
26
|
+
const childPath = path.join(entryPath, entry.name);
|
|
27
|
+
if (entry.isDirectory()) {
|
|
28
|
+
collectFiles(childPath, output);
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (!shouldIgnoreFile(childPath)) {
|
|
32
|
+
output.push(childPath);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function computeSourceHash(assetPath) {
|
|
37
|
+
const resolvedPath = path.resolve(assetPath);
|
|
38
|
+
const files = [];
|
|
39
|
+
collectFiles(resolvedPath, files);
|
|
40
|
+
const hash = crypto.createHash('sha256');
|
|
41
|
+
const rootDir = fs.statSync(resolvedPath).isDirectory() ? resolvedPath : path.dirname(resolvedPath);
|
|
42
|
+
for (const filePath of files.sort()) {
|
|
43
|
+
const relativePath = path.relative(rootDir, filePath) || path.basename(filePath);
|
|
44
|
+
hash.update(relativePath.replace(/\\/g, '/'));
|
|
45
|
+
hash.update('\0');
|
|
46
|
+
hash.update(fs.readFileSync(filePath));
|
|
47
|
+
hash.update('\0');
|
|
48
|
+
}
|
|
49
|
+
return hash.digest('hex');
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=hashing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashing.js","sourceRoot":"","sources":["../src/hashing.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './config.js';
|
|
2
|
+
export * from './codegen.js';
|
|
3
|
+
export * from './define-function.js';
|
|
4
|
+
export * from './define-pipeline.js';
|
|
5
|
+
export * from './discovery.js';
|
|
6
|
+
export * from './hashing.js';
|
|
7
|
+
export * from './local-runner.js';
|
|
8
|
+
export * from './transport.js';
|
|
9
|
+
export * from './types.js';
|
|
10
|
+
export { createZipBase64 } from './zip.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './config.js';
|
|
2
|
+
export * from './codegen.js';
|
|
3
|
+
export * from './define-function.js';
|
|
4
|
+
export * from './define-pipeline.js';
|
|
5
|
+
export * from './discovery.js';
|
|
6
|
+
export * from './hashing.js';
|
|
7
|
+
export * from './local-runner.js';
|
|
8
|
+
export * from './transport.js';
|
|
9
|
+
export * from './types.js';
|
|
10
|
+
export { createZipBase64 } from './zip.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../src/json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAgM7C,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAEvE"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
function getTypeName(schema) {
|
|
3
|
+
return schema._def?.typeName;
|
|
4
|
+
}
|
|
5
|
+
function withSupport(schema, supported) {
|
|
6
|
+
return {
|
|
7
|
+
schema: {
|
|
8
|
+
...schema,
|
|
9
|
+
'x-inquir-supported': supported,
|
|
10
|
+
},
|
|
11
|
+
supported,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function isOptionalWrapper(schema) {
|
|
15
|
+
const typeName = getTypeName(schema);
|
|
16
|
+
return typeName === z.ZodFirstPartyTypeKind.ZodOptional
|
|
17
|
+
|| typeName === z.ZodFirstPartyTypeKind.ZodDefault;
|
|
18
|
+
}
|
|
19
|
+
function unwrap(schema) {
|
|
20
|
+
let current = schema;
|
|
21
|
+
let supported = true;
|
|
22
|
+
while (true) {
|
|
23
|
+
const typeName = getTypeName(current);
|
|
24
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodOptional || typeName === z.ZodFirstPartyTypeKind.ZodNullable) {
|
|
25
|
+
current = current._def.innerType;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodDefault) {
|
|
29
|
+
current = current._def.innerType;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodBranded) {
|
|
33
|
+
current = current._def.type;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodReadonly) {
|
|
37
|
+
current = current._def.innerType;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodCatch) {
|
|
41
|
+
current = current._def.innerType;
|
|
42
|
+
supported = false;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodEffects) {
|
|
46
|
+
current = current._def.schema;
|
|
47
|
+
supported = false;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
return { schema: current, supported };
|
|
53
|
+
}
|
|
54
|
+
function extractDescription(schema) {
|
|
55
|
+
const current = schema;
|
|
56
|
+
return current.description ?? current._def?.description;
|
|
57
|
+
}
|
|
58
|
+
function serializeEnumValues(values) {
|
|
59
|
+
if (values.every((value) => typeof value === 'string')) {
|
|
60
|
+
return withSupport({ type: 'string', enum: values }, true);
|
|
61
|
+
}
|
|
62
|
+
if (values.every((value) => typeof value === 'number')) {
|
|
63
|
+
return withSupport({ type: 'number', enum: values }, true);
|
|
64
|
+
}
|
|
65
|
+
if (values.every((value) => typeof value === 'boolean')) {
|
|
66
|
+
return withSupport({ type: 'boolean', enum: values }, true);
|
|
67
|
+
}
|
|
68
|
+
if (values.every((value) => value === null)) {
|
|
69
|
+
return withSupport({ type: 'null', enum: [null] }, true);
|
|
70
|
+
}
|
|
71
|
+
return withSupport({}, false);
|
|
72
|
+
}
|
|
73
|
+
function serializeArrayItem(schema) {
|
|
74
|
+
if (!schema.type) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return schema.type === 'string'
|
|
78
|
+
|| schema.type === 'number'
|
|
79
|
+
|| schema.type === 'integer'
|
|
80
|
+
|| schema.type === 'boolean'
|
|
81
|
+
|| schema.type === 'null';
|
|
82
|
+
}
|
|
83
|
+
function serializeSchemaInternal(input) {
|
|
84
|
+
const { schema, supported: unwrapSupported } = unwrap(input);
|
|
85
|
+
const description = extractDescription(input) ?? extractDescription(schema);
|
|
86
|
+
const typeName = getTypeName(schema);
|
|
87
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodObject) {
|
|
88
|
+
const objectSchema = schema;
|
|
89
|
+
const shape = objectSchema.shape;
|
|
90
|
+
const properties = {};
|
|
91
|
+
const required = [];
|
|
92
|
+
let supported = unwrapSupported;
|
|
93
|
+
for (const [key, childSchema] of Object.entries(shape)) {
|
|
94
|
+
const child = serializeSchemaInternal(childSchema);
|
|
95
|
+
properties[key] = child.schema;
|
|
96
|
+
if (!isOptionalWrapper(childSchema)) {
|
|
97
|
+
required.push(key);
|
|
98
|
+
}
|
|
99
|
+
supported = supported && child.supported;
|
|
100
|
+
}
|
|
101
|
+
const catchall = schema._def?.catchall;
|
|
102
|
+
const unknownKeys = schema._def?.unknownKeys;
|
|
103
|
+
const allowsAdditionalProperties = unknownKeys === 'passthrough'
|
|
104
|
+
|| (catchall != null && getTypeName(catchall) !== z.ZodFirstPartyTypeKind.ZodNever);
|
|
105
|
+
if (allowsAdditionalProperties) {
|
|
106
|
+
supported = false;
|
|
107
|
+
}
|
|
108
|
+
return withSupport({
|
|
109
|
+
type: 'object',
|
|
110
|
+
...(description ? { description } : {}),
|
|
111
|
+
properties,
|
|
112
|
+
required,
|
|
113
|
+
additionalProperties: allowsAdditionalProperties,
|
|
114
|
+
}, supported);
|
|
115
|
+
}
|
|
116
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodString) {
|
|
117
|
+
return withSupport({ type: 'string', ...(description ? { description } : {}) }, unwrapSupported);
|
|
118
|
+
}
|
|
119
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodNumber) {
|
|
120
|
+
const checks = schema._def.checks ?? [];
|
|
121
|
+
const isInteger = checks.some((check) => check.kind === 'int');
|
|
122
|
+
return withSupport({ type: isInteger ? 'integer' : 'number', ...(description ? { description } : {}) }, unwrapSupported);
|
|
123
|
+
}
|
|
124
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodBoolean) {
|
|
125
|
+
return withSupport({ type: 'boolean', ...(description ? { description } : {}) }, unwrapSupported);
|
|
126
|
+
}
|
|
127
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodEnum) {
|
|
128
|
+
const values = schema._def.values;
|
|
129
|
+
const result = serializeEnumValues(values);
|
|
130
|
+
return withSupport({ ...result.schema, ...(description ? { description } : {}) }, unwrapSupported && result.supported);
|
|
131
|
+
}
|
|
132
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodNativeEnum) {
|
|
133
|
+
const enumValues = Object.values(schema._def.values)
|
|
134
|
+
.filter((value) => typeof value === 'string' || typeof value === 'number');
|
|
135
|
+
const filteredValues = enumValues.filter((value, index, values) => typeof value === 'number' ? !values.includes(String(value)) : true);
|
|
136
|
+
const result = serializeEnumValues(filteredValues);
|
|
137
|
+
return withSupport({ ...result.schema, ...(description ? { description } : {}) }, unwrapSupported && result.supported);
|
|
138
|
+
}
|
|
139
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodLiteral) {
|
|
140
|
+
const value = schema._def.value;
|
|
141
|
+
const result = serializeEnumValues([value]);
|
|
142
|
+
return withSupport({ ...result.schema, ...(description ? { description } : {}) }, unwrapSupported && result.supported);
|
|
143
|
+
}
|
|
144
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodArray) {
|
|
145
|
+
const itemType = schema._def.type;
|
|
146
|
+
const item = serializeSchemaInternal(itemType);
|
|
147
|
+
const supported = unwrapSupported && item.supported && serializeArrayItem(item.schema);
|
|
148
|
+
return withSupport({
|
|
149
|
+
type: 'array',
|
|
150
|
+
...(description ? { description } : {}),
|
|
151
|
+
items: item.schema,
|
|
152
|
+
}, supported);
|
|
153
|
+
}
|
|
154
|
+
if (typeName === z.ZodFirstPartyTypeKind.ZodNull) {
|
|
155
|
+
return withSupport({ type: 'null', ...(description ? { description } : {}) }, unwrapSupported);
|
|
156
|
+
}
|
|
157
|
+
return withSupport({ ...(description ? { description } : {}) }, false);
|
|
158
|
+
}
|
|
159
|
+
export function serializeZodToJsonSchema(schema) {
|
|
160
|
+
return serializeSchemaInternal(schema).schema;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=json-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../src/json-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-runner-harness.d.ts","sourceRoot":"","sources":["../src/local-runner-harness.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { pathToFileURL } from 'node:url';
|
|
2
|
+
import { INQUIR_ASSET_MARKER } from './types.js';
|
|
3
|
+
function serializeError(error) {
|
|
4
|
+
if (error instanceof Error) {
|
|
5
|
+
return { message: error.message, stack: error.stack };
|
|
6
|
+
}
|
|
7
|
+
return { message: String(error) };
|
|
8
|
+
}
|
|
9
|
+
function captureConsole() {
|
|
10
|
+
const logs = [];
|
|
11
|
+
const original = {
|
|
12
|
+
log: console.log,
|
|
13
|
+
info: console.info,
|
|
14
|
+
warn: console.warn,
|
|
15
|
+
error: console.error,
|
|
16
|
+
debug: console.debug,
|
|
17
|
+
};
|
|
18
|
+
const push = (level, args) => {
|
|
19
|
+
logs.push(`[${level}] ${args.map((value) => {
|
|
20
|
+
if (typeof value === 'string') {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
return JSON.stringify(value);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return String(value);
|
|
28
|
+
}
|
|
29
|
+
}).join(' ')}`);
|
|
30
|
+
};
|
|
31
|
+
console.log = (...args) => push('log', args);
|
|
32
|
+
console.info = (...args) => push('info', args);
|
|
33
|
+
console.warn = (...args) => push('warn', args);
|
|
34
|
+
console.error = (...args) => push('error', args);
|
|
35
|
+
console.debug = (...args) => push('debug', args);
|
|
36
|
+
return {
|
|
37
|
+
logs,
|
|
38
|
+
restore: () => {
|
|
39
|
+
console.log = original.log;
|
|
40
|
+
console.info = original.info;
|
|
41
|
+
console.warn = original.warn;
|
|
42
|
+
console.error = original.error;
|
|
43
|
+
console.debug = original.debug;
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
async function main() {
|
|
48
|
+
const [, , filePath, exportName, payloadJson] = process.argv;
|
|
49
|
+
if (!filePath || !exportName) {
|
|
50
|
+
throw new Error('Usage: local-runner-harness <filePath> <exportName> <payloadJson>');
|
|
51
|
+
}
|
|
52
|
+
const { logs, restore } = captureConsole();
|
|
53
|
+
try {
|
|
54
|
+
const moduleExports = await import(pathToFileURL(filePath).href);
|
|
55
|
+
const asset = moduleExports[exportName] ?? moduleExports.default;
|
|
56
|
+
if (!asset || typeof asset !== 'object' || Reflect.get(asset, INQUIR_ASSET_MARKER) == null) {
|
|
57
|
+
throw new Error(`Export "${exportName}" is not a managed asset`);
|
|
58
|
+
}
|
|
59
|
+
const payload = payloadJson ? JSON.parse(payloadJson) : undefined;
|
|
60
|
+
const inputSchema = Reflect.get(asset, 'definition')?.input;
|
|
61
|
+
const outputSchema = Reflect.get(asset, 'definition')?.output;
|
|
62
|
+
const handler = Reflect.get(asset, 'handler');
|
|
63
|
+
if (typeof handler !== 'function') {
|
|
64
|
+
throw new Error(`Export "${exportName}" does not expose a callable handler`);
|
|
65
|
+
}
|
|
66
|
+
const parsedInput = inputSchema?.parse ? inputSchema.parse(payload) : payload;
|
|
67
|
+
const result = await handler(parsedInput, { signal: undefined });
|
|
68
|
+
const parsedResult = outputSchema?.parse ? outputSchema.parse(result) : result;
|
|
69
|
+
const response = {
|
|
70
|
+
result: parsedResult,
|
|
71
|
+
logs,
|
|
72
|
+
};
|
|
73
|
+
process.stdout.write(JSON.stringify(response));
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
const response = {
|
|
77
|
+
logs,
|
|
78
|
+
error: serializeError(error),
|
|
79
|
+
};
|
|
80
|
+
process.stdout.write(JSON.stringify(response));
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
restore();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
void main();
|
|
87
|
+
//# sourceMappingURL=local-runner-harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-runner-harness.js","sourceRoot":"","sources":["../src/local-runner-harness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AssetEntry, LocalRunOptions, LocalRunResult } from './types.js';
|
|
2
|
+
export declare function buildLocalRunnerArgs(asset: Pick<AssetEntry, 'filePath' | 'exportName' | 'kind' | 'name'>, payload: unknown, options?: LocalRunOptions): string[];
|
|
3
|
+
export declare function runLocally<TPayload = unknown, TResult = unknown>(asset: Pick<AssetEntry, 'filePath' | 'exportName' | 'kind' | 'name'>, payload: TPayload, options?: LocalRunOptions): Promise<LocalRunResult<TResult>>;
|
|
4
|
+
//# sourceMappingURL=local-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-runner.d.ts","sourceRoot":"","sources":["../src/local-runner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA6B9E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC,EACpE,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,eAAoB,GAC5B,MAAM,EAAE,CAkBV;AAED,wBAAsB,UAAU,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACpE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC,EACpE,OAAO,EAAE,QAAQ,EACjB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAoElC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
5
|
+
const modulePath = typeof __filename === 'string' ? __filename : fileURLToPath(import.meta.url);
|
|
6
|
+
const require = createRequire(modulePath);
|
|
7
|
+
function resolveTsxImportPath() {
|
|
8
|
+
// Node's --import flag parses a bare Windows path (e.g. C:\...) as a URL with
|
|
9
|
+
// an unsupported "c:" scheme. Pass a file:// URL so it works cross-platform.
|
|
10
|
+
return pathToFileURL(require.resolve('tsx')).href;
|
|
11
|
+
}
|
|
12
|
+
function getHarnessPath() {
|
|
13
|
+
return path.join(path.dirname(modulePath), `local-runner-harness${path.extname(modulePath)}`);
|
|
14
|
+
}
|
|
15
|
+
function parseDebuggerUrl(stderr) {
|
|
16
|
+
const match = stderr.match(/ws:\/\/[^\s]+/);
|
|
17
|
+
return match?.[0];
|
|
18
|
+
}
|
|
19
|
+
export function buildLocalRunnerArgs(asset, payload, options = {}) {
|
|
20
|
+
if (asset.kind !== 'function') {
|
|
21
|
+
throw new Error(`Local runner currently supports function assets only (received: ${asset.kind})`);
|
|
22
|
+
}
|
|
23
|
+
const args = ['--import', resolveTsxImportPath()];
|
|
24
|
+
if (options.inspectBrk) {
|
|
25
|
+
args.push('--inspect-brk');
|
|
26
|
+
}
|
|
27
|
+
args.push(getHarnessPath(), path.resolve(asset.filePath), asset.exportName, JSON.stringify(payload ?? {}));
|
|
28
|
+
return args;
|
|
29
|
+
}
|
|
30
|
+
export async function runLocally(asset, payload, options = {}) {
|
|
31
|
+
const startedAt = Date.now();
|
|
32
|
+
const args = buildLocalRunnerArgs(asset, payload, options);
|
|
33
|
+
return await new Promise((resolve, reject) => {
|
|
34
|
+
const child = spawn(process.execPath, args, {
|
|
35
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
36
|
+
cwd: options.cwd,
|
|
37
|
+
});
|
|
38
|
+
let stdout = '';
|
|
39
|
+
let stderr = '';
|
|
40
|
+
child.stdout.on('data', (chunk) => {
|
|
41
|
+
stdout += chunk.toString();
|
|
42
|
+
});
|
|
43
|
+
child.stderr.on('data', (chunk) => {
|
|
44
|
+
stderr += chunk.toString();
|
|
45
|
+
});
|
|
46
|
+
child.on('error', reject);
|
|
47
|
+
child.on('close', (code) => {
|
|
48
|
+
const durationMs = Date.now() - startedAt;
|
|
49
|
+
const debuggerUrl = options.inspectBrk ? parseDebuggerUrl(stderr) : undefined;
|
|
50
|
+
let response;
|
|
51
|
+
try {
|
|
52
|
+
response = stdout ? JSON.parse(stdout) : { logs: [] };
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
resolve({
|
|
56
|
+
logs: stderr ? stderr.trim().split(/\r?\n/).filter(Boolean) : [],
|
|
57
|
+
durationMs,
|
|
58
|
+
debuggerUrl,
|
|
59
|
+
error: {
|
|
60
|
+
message: error instanceof Error ? error.message : 'Failed to parse harness output',
|
|
61
|
+
code: code ?? undefined,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const logs = [
|
|
67
|
+
...(response.logs ?? []),
|
|
68
|
+
...stderr.trim().split(/\r?\n/).filter(Boolean),
|
|
69
|
+
];
|
|
70
|
+
if (response.error || code !== 0) {
|
|
71
|
+
resolve({
|
|
72
|
+
logs,
|
|
73
|
+
durationMs,
|
|
74
|
+
debuggerUrl,
|
|
75
|
+
error: {
|
|
76
|
+
message: response.error?.message || `Local runner exited with code ${code ?? 'unknown'}`,
|
|
77
|
+
stack: response.error?.stack,
|
|
78
|
+
code: code ?? undefined,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
resolve({
|
|
84
|
+
result: response.result,
|
|
85
|
+
logs,
|
|
86
|
+
durationMs,
|
|
87
|
+
debuggerUrl,
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=local-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-runner.js","sourceRoot":"","sources":["../src/local-runner.ts"],"names":[],"mappings":"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"}
|