@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.
Files changed (58) hide show
  1. package/README.md +97 -0
  2. package/dist/codegen.d.ts +6 -0
  3. package/dist/codegen.d.ts.map +1 -0
  4. package/dist/codegen.js +209 -0
  5. package/dist/codegen.js.map +1 -0
  6. package/dist/config.d.ts +24 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +50 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/define-function.d.ts +22 -0
  11. package/dist/define-function.d.ts.map +1 -0
  12. package/dist/define-function.js +30 -0
  13. package/dist/define-function.js.map +1 -0
  14. package/dist/define-pipeline.d.ts +8 -0
  15. package/dist/define-pipeline.d.ts.map +1 -0
  16. package/dist/define-pipeline.js +56 -0
  17. package/dist/define-pipeline.js.map +1 -0
  18. package/dist/discovery-harness.d.ts +2 -0
  19. package/dist/discovery-harness.d.ts.map +1 -0
  20. package/dist/discovery-harness.js +67 -0
  21. package/dist/discovery-harness.js.map +1 -0
  22. package/dist/discovery.d.ts +4 -0
  23. package/dist/discovery.d.ts.map +1 -0
  24. package/dist/discovery.js +136 -0
  25. package/dist/discovery.js.map +1 -0
  26. package/dist/hashing.d.ts +2 -0
  27. package/dist/hashing.d.ts.map +1 -0
  28. package/dist/hashing.js +51 -0
  29. package/dist/hashing.js.map +1 -0
  30. package/dist/index.d.ts +11 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +11 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/json-schema.d.ts +4 -0
  35. package/dist/json-schema.d.ts.map +1 -0
  36. package/dist/json-schema.js +162 -0
  37. package/dist/json-schema.js.map +1 -0
  38. package/dist/local-runner-harness.d.ts +2 -0
  39. package/dist/local-runner-harness.d.ts.map +1 -0
  40. package/dist/local-runner-harness.js +87 -0
  41. package/dist/local-runner-harness.js.map +1 -0
  42. package/dist/local-runner.d.ts +4 -0
  43. package/dist/local-runner.d.ts.map +1 -0
  44. package/dist/local-runner.js +92 -0
  45. package/dist/local-runner.js.map +1 -0
  46. package/dist/transport.d.ts +257 -0
  47. package/dist/transport.d.ts.map +1 -0
  48. package/dist/transport.js +257 -0
  49. package/dist/transport.js.map +1 -0
  50. package/dist/types.d.ts +198 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +2 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/zip.d.ts +6 -0
  55. package/dist/zip.d.ts.map +1 -0
  56. package/dist/zip.js +145 -0
  57. package/dist/zip.js.map +1 -0
  58. 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,2 @@
1
+ export declare function computeSourceHash(assetPath: string): string;
2
+ //# sourceMappingURL=hashing.d.ts.map
@@ -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"}
@@ -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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"}
@@ -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,4 @@
1
+ import { type ZodTypeAny } from 'zod';
2
+ import type { JsonSchema } from './types.js';
3
+ export declare function serializeZodToJsonSchema(schema: ZodTypeAny): JsonSchema;
4
+ //# sourceMappingURL=json-schema.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,CAAC,EAAmB,MAAM,KAAK,CAAC;AAQzC,SAAS,WAAW,CAAC,MAAkB;IACrC,OAAQ,MAAwD,CAAC,IAAI,EAAE,QAAQ,CAAC;AAClF,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB,EAAE,SAAkB;IACzD,OAAO;QACL,MAAM,EAAE;YACN,GAAG,MAAM;YACT,oBAAoB,EAAE,SAAS;SAChC;QACD,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAkB;IAC3C,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,WAAW;WAClD,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC;AACvD,CAAC;AAED,SAAS,MAAM,CAAC,MAAkB;IAChC,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,WAAW,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;YACzG,OAAO,GAAI,OAA4D,CAAC,IAAI,CAAC,SAAS,CAAC;YACvF,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC;YACpD,OAAO,GAAI,OAA4D,CAAC,IAAI,CAAC,SAAS,CAAC;YACvF,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC;YACpD,OAAO,GAAI,OAAuD,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7E,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;YACrD,OAAO,GAAI,OAA4D,CAAC,IAAI,CAAC,SAAS,CAAC;YACvF,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC;YAClD,OAAO,GAAI,OAA4D,CAAC,IAAI,CAAC,SAAS,CAAC;YACvF,SAAS,GAAG,KAAK,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC;YACpD,OAAO,GAAI,OAAyD,CAAC,IAAI,CAAC,MAAM,CAAC;YACjF,SAAS,GAAG,KAAK,CAAC;YAClB,SAAS;QACX,CAAC;QACD,MAAM;IACR,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAkB;IAC5C,MAAM,OAAO,GAAG,MAAgF,CAAC;IACjG,OAAO,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;AAC1D,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAiB;IAC5C,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;QACvD,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAkB,EAAE,EAAE,IAAI,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;QACvD,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAkB,EAAE,EAAE,IAAI,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;QACxD,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAmB,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAkB;IAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;WAC1B,MAAM,CAAC,IAAI,KAAK,QAAQ;WACxB,MAAM,CAAC,IAAI,KAAK,SAAS;WACzB,MAAM,CAAC,IAAI,KAAK,SAAS;WACzB,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC;AAC9B,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAiB;IAChD,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,SAAS,EAAE,CAAC;QACnD,MAAM,YAAY,GAAG,MAAwB,CAAC;QAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;QACjC,MAAM,UAAU,GAA+B,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,SAAS,GAAG,eAAe,CAAC;QAEhC,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAgC,EAAE,CAAC;YACtF,MAAM,KAAK,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;YACnD,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YAC/B,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YACD,SAAS,GAAG,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAI,MAAsF,CAAC,IAAI,EAAE,QAAQ,CAAC;QACxH,MAAM,WAAW,GAAI,MAA+D,CAAC,IAAI,EAAE,WAAW,CAAC;QACvG,MAAM,0BAA0B,GAAG,WAAW,KAAK,aAAa;eAC3D,CAAC,QAAQ,IAAI,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAEtF,IAAI,0BAA0B,EAAE,CAAC;YAC/B,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;QAED,OAAO,WAAW,CAAC;YACjB,IAAI,EAAE,QAAQ;YACd,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,UAAU;YACV,QAAQ;YACR,oBAAoB,EAAE,0BAA0B;SACjD,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,SAAS,EAAE,CAAC;QACnD,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IACnG,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,SAAS,EAAE,CAAC;QACnD,MAAM,MAAM,GAAI,MAAwE,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAC3G,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;QAC/D,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IAC3H,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC;QACpD,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IACpG,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;QACjD,MAAM,MAAM,GAAI,MAA2C,CAAC,IAAI,CAAC,MAAM,CAAC;QACxE,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,WAAW,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IACzH,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAE,MAEhC,CAAC,IAAI,CAAC,MAAM,CAAC;aACZ,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAChE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACnE,CAAC;QACF,MAAM,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;QACnD,OAAO,WAAW,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IACzH,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,KAAK,GAAI,MAAgC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3D,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,OAAO,WAAW,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IACzH,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAI,MAAiC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9D,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,eAAe,IAAI,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvF,OAAO,WAAW,CAAC;YACjB,IAAI,EAAE,OAAO;YACb,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,KAAK,EAAE,IAAI,CAAC,MAAM;SACnB,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;QACjD,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IACjG,CAAC;IAED,OAAO,WAAW,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAkB;IACzD,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AAChD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=local-runner-harness.d.ts.map
@@ -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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"}