ai-evaluate 2.1.7 → 2.1.8
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 +61 -4
- package/dist/evaluate.d.ts.map +1 -1
- package/dist/evaluate.js +18 -16
- package/dist/evaluate.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/miniflare-pool.d.ts +109 -0
- package/dist/miniflare-pool.d.ts.map +1 -0
- package/dist/miniflare-pool.js +308 -0
- package/dist/miniflare-pool.js.map +1 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +42 -10
- package/dist/node.js.map +1 -1
- package/dist/shared.d.ts +66 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +169 -0
- package/dist/shared.js.map +1 -0
- package/dist/type-guards.d.ts +21 -0
- package/dist/type-guards.d.ts.map +1 -0
- package/dist/type-guards.js +216 -0
- package/dist/type-guards.js.map +1 -0
- package/dist/types.d.ts +17 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts +26 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +104 -0
- package/dist/validation.js.map +1 -0
- package/dist/worker-template/code-transforms.d.ts +9 -0
- package/dist/worker-template/code-transforms.d.ts.map +1 -0
- package/dist/worker-template/code-transforms.js +28 -0
- package/dist/worker-template/code-transforms.js.map +1 -0
- package/{src/worker-template.d.ts → dist/worker-template/core.d.ts} +7 -15
- package/dist/worker-template/core.d.ts.map +1 -0
- package/dist/worker-template/core.js +502 -0
- package/dist/worker-template/core.js.map +1 -0
- package/dist/worker-template/helpers.d.ts +14 -0
- package/dist/worker-template/helpers.d.ts.map +1 -0
- package/dist/worker-template/helpers.js +79 -0
- package/dist/worker-template/helpers.js.map +1 -0
- package/dist/worker-template/index.d.ts +14 -0
- package/dist/worker-template/index.d.ts.map +1 -0
- package/dist/worker-template/index.js +19 -0
- package/dist/worker-template/index.js.map +1 -0
- package/dist/worker-template/sdk-generator.d.ts +17 -0
- package/dist/worker-template/sdk-generator.d.ts.map +1 -0
- package/{src/worker-template.js → dist/worker-template/sdk-generator.js} +377 -1506
- package/dist/worker-template/sdk-generator.js.map +1 -0
- package/dist/worker-template/test-generator.d.ts +16 -0
- package/dist/worker-template/test-generator.d.ts.map +1 -0
- package/dist/worker-template/test-generator.js +357 -0
- package/dist/worker-template/test-generator.js.map +1 -0
- package/dist/worker-template.d.ts +2 -2
- package/dist/worker-template.d.ts.map +1 -1
- package/dist/worker-template.js +22 -10
- package/dist/worker-template.js.map +1 -1
- package/example/src/index.ts +12 -5
- package/package.json +1 -3
- package/src/evaluate.ts +21 -17
- package/src/index.ts +3 -1
- package/src/miniflare-pool.ts +395 -0
- package/src/node.ts +56 -11
- package/src/shared.ts +186 -0
- package/src/type-guards.ts +323 -0
- package/src/types.ts +18 -2
- package/src/validation.ts +120 -0
- package/src/worker-template/code-transforms.ts +32 -0
- package/src/worker-template/core.ts +557 -0
- package/src/worker-template/helpers.ts +90 -0
- package/src/worker-template/index.ts +23 -0
- package/src/{worker-template.ts → worker-template/sdk-generator.ts} +322 -1613
- package/src/worker-template/test-generator.ts +358 -0
- package/test/miniflare-pool.test.ts +246 -0
- package/test/node.test.ts +467 -0
- package/test/security.test.ts +1009 -0
- package/test/shared.test.ts +105 -0
- package/test/type-guards.test.ts +303 -0
- package/test/validation.test.ts +240 -0
- package/test/worker-template.test.ts +21 -19
- package/src/evaluate.js +0 -187
- package/src/index.js +0 -10
- package/src/node.d.ts +0 -17
- package/src/node.d.ts.map +0 -1
- package/src/node.js +0 -168
- package/src/node.js.map +0 -1
- package/src/types.d.ts +0 -172
- package/src/types.d.ts.map +0 -1
- package/src/types.js +0 -4
- package/src/types.js.map +0 -1
- package/src/worker-template.d.ts.map +0 -1
- package/src/worker-template.js.map +0 -1
package/dist/types.d.ts
CHANGED
|
@@ -22,6 +22,16 @@ export interface SDKConfig {
|
|
|
22
22
|
/** Cloudflare AI Gateway authentication token */
|
|
23
23
|
aiGatewayToken?: string;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Network access configuration
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* fetch: true // allow all (default)
|
|
30
|
+
* fetch: false // block all
|
|
31
|
+
* fetch: null // block all (backwards compat)
|
|
32
|
+
* fetch: ['api.example.com', '*.trusted.com'] // allowlist with wildcards
|
|
33
|
+
*/
|
|
34
|
+
export type FetchConfig = boolean | null | string[];
|
|
25
35
|
/**
|
|
26
36
|
* Options for evaluate()
|
|
27
37
|
*/
|
|
@@ -36,8 +46,13 @@ export interface EvaluateOptions {
|
|
|
36
46
|
timeout?: number | undefined;
|
|
37
47
|
/** Environment variables to pass to the sandbox */
|
|
38
48
|
env?: Record<string, string> | undefined;
|
|
39
|
-
/**
|
|
40
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Network access control
|
|
51
|
+
* - true: allow all (default)
|
|
52
|
+
* - false/null: block all
|
|
53
|
+
* - string[]: allowlist of domains (wildcards: '*.example.com')
|
|
54
|
+
*/
|
|
55
|
+
fetch?: FetchConfig;
|
|
41
56
|
/** RPC services to expose via capnweb (URL -> handler) */
|
|
42
57
|
rpc?: Record<string, unknown> | undefined;
|
|
43
58
|
/** Outbound RPC interceptor - intercepts fetch calls to RPC URLs */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;IAC5B,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,iGAAiG;IACjG,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACxC
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input validation for EvaluateOptions
|
|
3
|
+
*
|
|
4
|
+
* Validates options to prevent resource exhaustion and provide clear error messages.
|
|
5
|
+
*/
|
|
6
|
+
import type { EvaluateOptions } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Validation limits for EvaluateOptions
|
|
9
|
+
*/
|
|
10
|
+
export declare const MAX_SCRIPT_SIZE: number;
|
|
11
|
+
export declare const MAX_IMPORTS = 100;
|
|
12
|
+
export declare const MAX_TIMEOUT = 60000;
|
|
13
|
+
export declare const DEFAULT_TIMEOUT = 5000;
|
|
14
|
+
/**
|
|
15
|
+
* Validation error thrown when options fail validation
|
|
16
|
+
*/
|
|
17
|
+
export declare class ValidationError extends Error {
|
|
18
|
+
constructor(message: string);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Validate EvaluateOptions
|
|
22
|
+
*
|
|
23
|
+
* @throws ValidationError if any validation fails
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateOptions(options: EvaluateOptions): void;
|
|
26
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;GAEG;AACH,eAAO,MAAM,eAAe,QAAc,CAAA;AAC1C,eAAO,MAAM,WAAW,MAAM,CAAA;AAC9B,eAAO,MAAM,WAAW,QAAQ,CAAA;AAChC,eAAO,MAAM,eAAe,OAAO,CAAA;AAEnC;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAcD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CA4E9D"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input validation for EvaluateOptions
|
|
3
|
+
*
|
|
4
|
+
* Validates options to prevent resource exhaustion and provide clear error messages.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Validation limits for EvaluateOptions
|
|
8
|
+
*/
|
|
9
|
+
export const MAX_SCRIPT_SIZE = 1024 * 1024; // 1MB
|
|
10
|
+
export const MAX_IMPORTS = 100;
|
|
11
|
+
export const MAX_TIMEOUT = 60000; // 60 seconds
|
|
12
|
+
export const DEFAULT_TIMEOUT = 5000; // 5 seconds
|
|
13
|
+
/**
|
|
14
|
+
* Validation error thrown when options fail validation
|
|
15
|
+
*/
|
|
16
|
+
export class ValidationError extends Error {
|
|
17
|
+
constructor(message) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.name = 'ValidationError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Validate a URL string
|
|
24
|
+
*/
|
|
25
|
+
function isValidUrl(urlString) {
|
|
26
|
+
try {
|
|
27
|
+
const url = new URL(urlString);
|
|
28
|
+
return url.protocol === 'http:' || url.protocol === 'https:';
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Validate EvaluateOptions
|
|
36
|
+
*
|
|
37
|
+
* @throws ValidationError if any validation fails
|
|
38
|
+
*/
|
|
39
|
+
export function validateOptions(options) {
|
|
40
|
+
// Validate timeout
|
|
41
|
+
if (options.timeout !== undefined) {
|
|
42
|
+
if (typeof options.timeout !== 'number') {
|
|
43
|
+
throw new ValidationError('timeout must be a number');
|
|
44
|
+
}
|
|
45
|
+
if (!Number.isFinite(options.timeout)) {
|
|
46
|
+
throw new ValidationError('timeout must be a finite number');
|
|
47
|
+
}
|
|
48
|
+
if (options.timeout <= 0) {
|
|
49
|
+
throw new ValidationError('timeout must be a positive number');
|
|
50
|
+
}
|
|
51
|
+
if (options.timeout > MAX_TIMEOUT) {
|
|
52
|
+
throw new ValidationError(`timeout exceeds maximum allowed value of ${MAX_TIMEOUT}ms`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Validate script length
|
|
56
|
+
if (options.script !== undefined && options.script !== null) {
|
|
57
|
+
if (typeof options.script !== 'string') {
|
|
58
|
+
throw new ValidationError('script must be a string');
|
|
59
|
+
}
|
|
60
|
+
const scriptBytes = new TextEncoder().encode(options.script).length;
|
|
61
|
+
if (scriptBytes > MAX_SCRIPT_SIZE) {
|
|
62
|
+
throw new ValidationError(`script size (${scriptBytes} bytes) exceeds maximum allowed size of ${MAX_SCRIPT_SIZE} bytes (1MB)`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Validate module length
|
|
66
|
+
if (options.module !== undefined && options.module !== null) {
|
|
67
|
+
if (typeof options.module !== 'string') {
|
|
68
|
+
throw new ValidationError('module must be a string');
|
|
69
|
+
}
|
|
70
|
+
const moduleBytes = new TextEncoder().encode(options.module).length;
|
|
71
|
+
if (moduleBytes > MAX_SCRIPT_SIZE) {
|
|
72
|
+
throw new ValidationError(`module size (${moduleBytes} bytes) exceeds maximum allowed size of ${MAX_SCRIPT_SIZE} bytes (1MB)`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Validate tests length
|
|
76
|
+
if (options.tests !== undefined && options.tests !== null) {
|
|
77
|
+
if (typeof options.tests !== 'string') {
|
|
78
|
+
throw new ValidationError('tests must be a string');
|
|
79
|
+
}
|
|
80
|
+
const testsBytes = new TextEncoder().encode(options.tests).length;
|
|
81
|
+
if (testsBytes > MAX_SCRIPT_SIZE) {
|
|
82
|
+
throw new ValidationError(`tests size (${testsBytes} bytes) exceeds maximum allowed size of ${MAX_SCRIPT_SIZE} bytes (1MB)`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Validate imports
|
|
86
|
+
if (options.imports !== undefined && options.imports !== null) {
|
|
87
|
+
if (!Array.isArray(options.imports)) {
|
|
88
|
+
throw new ValidationError('imports must be an array');
|
|
89
|
+
}
|
|
90
|
+
if (options.imports.length > MAX_IMPORTS) {
|
|
91
|
+
throw new ValidationError(`imports count (${options.imports.length}) exceeds maximum allowed count of ${MAX_IMPORTS}`);
|
|
92
|
+
}
|
|
93
|
+
for (let i = 0; i < options.imports.length; i++) {
|
|
94
|
+
const importUrl = options.imports[i];
|
|
95
|
+
if (typeof importUrl !== 'string') {
|
|
96
|
+
throw new ValidationError(`imports[${i}] must be a string`);
|
|
97
|
+
}
|
|
98
|
+
if (!isValidUrl(importUrl)) {
|
|
99
|
+
throw new ValidationError(`imports[${i}] is not a valid URL: ${importUrl}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module transformation and export detection utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Transform module code to work in sandbox
|
|
6
|
+
* Converts ES module exports to CommonJS-style for the sandbox
|
|
7
|
+
*/
|
|
8
|
+
export declare function transformModuleCode(moduleCode: string): string;
|
|
9
|
+
//# sourceMappingURL=code-transforms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-transforms.d.ts","sourceRoot":"","sources":["../../src/worker-template/code-transforms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAuB9D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module transformation and export detection utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Transform module code to work in sandbox
|
|
6
|
+
* Converts ES module exports to CommonJS-style for the sandbox
|
|
7
|
+
*/
|
|
8
|
+
export function transformModuleCode(moduleCode) {
|
|
9
|
+
let code = moduleCode;
|
|
10
|
+
// Transform: export const foo = ... -> const foo = ...; exports.foo = foo;
|
|
11
|
+
code = code.replace(/export\s+(const|let|var)\s+(\w+)\s*=/g, '$1 $2 = exports.$2 =');
|
|
12
|
+
// Transform: export function foo(...) -> function foo(...) exports.foo = foo;
|
|
13
|
+
// Also handles async generators: export async function* foo
|
|
14
|
+
code = code.replace(/export\s+(async\s+)?function(\*?)\s+(\w+)/g, '$1function$2 $3');
|
|
15
|
+
// Add exports for functions after their definition
|
|
16
|
+
const funcNames = [...moduleCode.matchAll(/export\s+(?:async\s+)?function\*?\s+(\w+)/g)];
|
|
17
|
+
for (const [, name] of funcNames) {
|
|
18
|
+
code += `\nexports.${name} = ${name};`;
|
|
19
|
+
}
|
|
20
|
+
// Transform: export class Foo -> class Foo; exports.Foo = Foo;
|
|
21
|
+
code = code.replace(/export\s+class\s+(\w+)/g, 'class $1');
|
|
22
|
+
const classNames = [...moduleCode.matchAll(/export\s+class\s+(\w+)/g)];
|
|
23
|
+
for (const [, name] of classNames) {
|
|
24
|
+
code += `\nexports.${name} = ${name};`;
|
|
25
|
+
}
|
|
26
|
+
return code;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=code-transforms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-transforms.js","sourceRoot":"","sources":["../../src/worker-template/code-transforms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,IAAI,IAAI,GAAG,UAAU,CAAA;IAErB,2EAA2E;IAC3E,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,uCAAuC,EAAE,sBAAsB,CAAC,CAAA;IAEpF,8EAA8E;IAC9E,4DAA4D;IAC5D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,4CAA4C,EAAE,iBAAiB,CAAC,CAAA;IACpF,mDAAmD;IACnD,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,4CAA4C,CAAC,CAAC,CAAA;IACxF,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,IAAI,aAAa,IAAI,MAAM,IAAI,GAAG,CAAA;IACxC,CAAC;IAED,+DAA+D;IAC/D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAA;IAC1D,MAAM,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAA;IACtE,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;QAClC,IAAI,IAAI,aAAa,IAAI,MAAM,IAAI,GAAG,CAAA;IACxC,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -1,19 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Worker
|
|
2
|
+
* Worker scaffold and main template generation
|
|
3
3
|
*
|
|
4
|
-
* This
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* The user's code (module, tests, script) is embedded directly into
|
|
8
|
-
* the worker source - no eval() or new Function() needed. The security
|
|
9
|
-
* comes from running in an isolated V8 context via worker_loaders.
|
|
10
|
-
*
|
|
11
|
-
* Routes:
|
|
12
|
-
* - POST /execute - Run tests and scripts, return results
|
|
13
|
-
* - POST /rpc or WebSocket upgrade - capnweb RPC to module exports
|
|
14
|
-
* - GET / - Return info about available exports
|
|
4
|
+
* This module contains the main generateWorkerCode and generateDevWorkerCode functions
|
|
5
|
+
* that produce the complete worker code for sandbox execution.
|
|
15
6
|
*/
|
|
16
|
-
import type { SDKConfig } from '
|
|
7
|
+
import type { SDKConfig, FetchConfig } from '../types.js';
|
|
17
8
|
/**
|
|
18
9
|
* Generate worker code for production (uses RPC to ai-tests)
|
|
19
10
|
*/
|
|
@@ -23,6 +14,7 @@ export declare function generateWorkerCode(options: {
|
|
|
23
14
|
script?: string | undefined;
|
|
24
15
|
sdk?: SDKConfig | boolean | undefined;
|
|
25
16
|
imports?: string[] | undefined;
|
|
17
|
+
fetch?: FetchConfig;
|
|
26
18
|
}): string;
|
|
27
19
|
/**
|
|
28
20
|
* Generate worker code for development (embedded test framework)
|
|
@@ -36,6 +28,6 @@ export declare function generateDevWorkerCode(options: {
|
|
|
36
28
|
script?: string | undefined;
|
|
37
29
|
sdk?: SDKConfig | boolean | undefined;
|
|
38
30
|
imports?: string[] | undefined;
|
|
39
|
-
fetch?: null | undefined;
|
|
31
|
+
fetch?: null | FetchConfig | undefined;
|
|
40
32
|
}): string;
|
|
41
|
-
//# sourceMappingURL=
|
|
33
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/worker-template/core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAOzD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;IACrC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC9B,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB,GAAG,MAAM,CA0QT;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;IACrC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC9B,KAAK,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,SAAS,CAAA;CACvC,GAAG,MAAM,CAoPT"}
|