callman-core 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/script/executor.d.ts.map +1 -1
- package/dist/script/executor.js +118 -9
- package/dist/script/executor.js.map +1 -1
- package/dist/script/features/counter.d.ts +11 -0
- package/dist/script/features/counter.d.ts.map +1 -0
- package/dist/script/features/counter.js +43 -0
- package/dist/script/features/counter.js.map +1 -0
- package/dist/script/features/cryptojs.d.ts +13 -0
- package/dist/script/features/cryptojs.d.ts.map +1 -0
- package/dist/script/features/cryptojs.js +63 -0
- package/dist/script/features/cryptojs.js.map +1 -0
- package/dist/script/features/db.d.ts +36 -0
- package/dist/script/features/db.d.ts.map +1 -0
- package/dist/script/features/db.js +165 -0
- package/dist/script/features/db.js.map +1 -0
- package/dist/script/features/feature-policy.d.ts +8 -0
- package/dist/script/features/feature-policy.d.ts.map +1 -0
- package/dist/script/features/feature-policy.js +88 -0
- package/dist/script/features/feature-policy.js.map +1 -0
- package/dist/script/features/kafka.d.ts +11 -0
- package/dist/script/features/kafka.d.ts.map +1 -0
- package/dist/script/features/kafka.js +71 -0
- package/dist/script/features/kafka.js.map +1 -0
- package/dist/script/features/random.d.ts +13 -0
- package/dist/script/features/random.d.ts.map +1 -0
- package/dist/script/features/random.js +111 -0
- package/dist/script/features/random.js.map +1 -0
- package/dist/script/features/redis.d.ts +10 -0
- package/dist/script/features/redis.d.ts.map +1 -0
- package/dist/script/features/redis.js +22 -0
- package/dist/script/features/redis.js.map +1 -0
- package/dist/script/features/tests.d.ts +7 -1
- package/dist/script/features/tests.d.ts.map +1 -1
- package/dist/script/features/tests.js +97 -12
- package/dist/script/features/tests.js.map +1 -1
- package/dist/script/features/variables.d.ts +6 -0
- package/dist/script/features/variables.d.ts.map +1 -0
- package/dist/script/features/variables.js +25 -0
- package/dist/script/features/variables.js.map +1 -0
- package/dist/script/scope.d.ts +7 -0
- package/dist/script/scope.d.ts.map +1 -1
- package/dist/script/scope.js +21 -0
- package/dist/script/scope.js.map +1 -1
- package/dist/script/types.d.ts +73 -0
- package/dist/script/types.d.ts.map +1 -1
- package/dist-cjs/index.js +7 -1
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/script/executor.js +118 -9
- package/dist-cjs/script/executor.js.map +1 -1
- package/dist-cjs/script/features/counter.js +47 -0
- package/dist-cjs/script/features/counter.js.map +1 -0
- package/dist-cjs/script/features/cryptojs.js +67 -0
- package/dist-cjs/script/features/cryptojs.js.map +1 -0
- package/dist-cjs/script/features/db.js +169 -0
- package/dist-cjs/script/features/db.js.map +1 -0
- package/dist-cjs/script/features/feature-policy.js +94 -0
- package/dist-cjs/script/features/feature-policy.js.map +1 -0
- package/dist-cjs/script/features/kafka.js +77 -0
- package/dist-cjs/script/features/kafka.js.map +1 -0
- package/dist-cjs/script/features/random.js +115 -0
- package/dist-cjs/script/features/random.js.map +1 -0
- package/dist-cjs/script/features/redis.js +26 -0
- package/dist-cjs/script/features/redis.js.map +1 -0
- package/dist-cjs/script/features/tests.js +97 -12
- package/dist-cjs/script/features/tests.js.map +1 -1
- package/dist-cjs/script/features/variables.js +29 -0
- package/dist-cjs/script/features/variables.js.map +1 -0
- package/dist-cjs/script/scope.js +21 -0
- package/dist-cjs/script/scope.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -5,8 +5,10 @@ export { EnvStore } from "./variables/envStore.js";
|
|
|
5
5
|
export { resolveTemplate, resolveTemplateValue } from "./variables/resolver.js";
|
|
6
6
|
export { runScript } from "./script/legacy.js";
|
|
7
7
|
export { executeScript, validateScript } from "./script/executor.js";
|
|
8
|
-
export type { ExecuteScriptInput, ExecuteScriptResult, ScriptCapabilities, ScriptError, ScriptKeyValuePair, ScriptLogEntry, ScriptRequestBodyState, ScriptRequestState, ScriptResponseState, ScriptStage, ScriptTestResult, ScriptVariableMutation, } from "./script/types.js";
|
|
8
|
+
export type { CounterSnapshotEntry, ExecuteScriptInput, ExecuteScriptResult, ScriptCapabilities, ScriptCounterCapability, ScriptDbCapability, ScriptDbExecutionInput, ScriptDbExecutionResult, ScriptError, ScriptFeaturePolicy, ScriptKafkaCapability, ScriptKeyValuePair, ScriptLogEntry, ScriptRedisCapability, ScriptRequestBodyState, ScriptRequestState, ScriptResponseState, ScriptStage, ScriptTestResult, ScriptVariableMutation, } from "./script/types.js";
|
|
9
9
|
export { PmAssertion, createExpectApi } from "./script/features/assertions.js";
|
|
10
|
+
export { PendingKafkaDependencyError, isPendingKafkaValue, } from "./script/features/kafka.js";
|
|
11
|
+
export { DisabledFeatureDependencyError, isDisabledFeatureValue, } from "./script/features/feature-policy.js";
|
|
10
12
|
export { validateContracts } from "./contract/contractValidator.js";
|
|
11
13
|
export * from "./scenario-runner/index.js";
|
|
12
14
|
export * from "./types/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,8 @@ export { resolveTemplate, resolveTemplateValue } from "./variables/resolver.js";
|
|
|
6
6
|
export { runScript } from "./script/legacy.js";
|
|
7
7
|
export { executeScript, validateScript } from "./script/executor.js";
|
|
8
8
|
export { PmAssertion, createExpectApi } from "./script/features/assertions.js";
|
|
9
|
+
export { PendingKafkaDependencyError, isPendingKafkaValue, } from "./script/features/kafka.js";
|
|
10
|
+
export { DisabledFeatureDependencyError, isDisabledFeatureValue, } from "./script/features/feature-policy.js";
|
|
9
11
|
export { validateContracts } from "./contract/contractValidator.js";
|
|
10
12
|
export * from "./scenario-runner/index.js";
|
|
11
13
|
export * from "./types/index.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAuBrE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/script/executor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/script/executor.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAEV,kBAAkB,EAClB,mBAAmB,EAEnB,WAAW,EAEX,kBAAkB,EAInB,MAAM,YAAY,CAAC;AAsMpB,eAAO,MAAM,aAAa,GACxB,OAAO,kBAAkB,KACxB,OAAO,CAAC,mBAAmB,CA8J7B,CAAC;AAKF,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,iBAA2B,KAC1B,WAAW,GAAG,IAUhB,CAAC;AAKF,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
|
package/dist/script/executor.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
// Public canonical script executor — the single entry point that all
|
|
1
|
+
// Public canonical script executor — the single entry point that all
|
|
2
2
|
// consumers (CLI via legacy shim, backend, electron) ultimately call.
|
|
3
3
|
//
|
|
4
4
|
// Composes:
|
|
5
5
|
// - sandbox (vm.createContext + scope Proxy + reserved globals)
|
|
6
6
|
// - pm API (assertions + tests + env/globals + request/response + node + log)
|
|
7
|
+
// - sandbox-D extensions (db, kafka, redis, random, counter, cryptojs, variables)
|
|
7
8
|
// - timeout (vm-level + outer Promise race)
|
|
8
9
|
// - error serialization (line/column attribution)
|
|
9
10
|
//
|
|
@@ -17,16 +18,88 @@ import { buildRequestApi } from "./features/request.js";
|
|
|
17
18
|
import { buildResponseApi } from "./features/response.js";
|
|
18
19
|
import { buildTestCollector } from "./features/tests.js";
|
|
19
20
|
import { createLogCollector, createSilentLogCollector, } from "./features/log.js";
|
|
21
|
+
import { buildKafkaApi } from "./features/kafka.js";
|
|
22
|
+
import { buildRedisApi } from "./features/redis.js";
|
|
23
|
+
import { buildRandomApi } from "./features/random.js";
|
|
24
|
+
import { buildCounterFeature } from "./features/counter.js";
|
|
25
|
+
import { createCryptoJsApi } from "./features/cryptojs.js";
|
|
26
|
+
import { buildVariablesApi } from "./features/variables.js";
|
|
27
|
+
import { buildDbApi } from "./features/db.js";
|
|
20
28
|
import { compileAndPrepare } from "./sandbox.js";
|
|
21
29
|
import { toSerializableError } from "./errors.js";
|
|
22
30
|
import { toHostPromise, withAsyncTimeout } from "./timeout.js";
|
|
23
31
|
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
24
32
|
const DEFAULT_FILENAME = "callman-script.js";
|
|
25
33
|
const DEFAULT_STAGE = "script";
|
|
26
|
-
const
|
|
34
|
+
const buildSandboxDFeatures = (capabilities, isInsideTestCallback, envValues, globalValues, responseTemplateRoot) => {
|
|
35
|
+
const extensions = capabilities.extensions ?? {};
|
|
36
|
+
const featurePolicy = capabilities.featurePolicy;
|
|
37
|
+
const pm = {};
|
|
38
|
+
const scopeShortcuts = {};
|
|
39
|
+
let counterSnapshotFn = null;
|
|
40
|
+
if (extensions.kafka) {
|
|
41
|
+
const kafkaEnabled = featurePolicy ? featurePolicy.kafka : true;
|
|
42
|
+
if (kafkaEnabled) {
|
|
43
|
+
const api = buildKafkaApi(extensions.kafka, capabilities.allowDeferredKafkaTests ?? false);
|
|
44
|
+
pm.kafka = api;
|
|
45
|
+
scopeShortcuts.kafka = api;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// Disabled kafka — replace with feature-policy guarded value
|
|
49
|
+
// (handled at the test-collector level via DisabledFeatureDependencyError).
|
|
50
|
+
// We still expose the binding so user scripts don't crash at scope lookup.
|
|
51
|
+
void isInsideTestCallback;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (extensions.redis) {
|
|
55
|
+
const api = buildRedisApi(extensions.redis);
|
|
56
|
+
pm.redis = api;
|
|
57
|
+
scopeShortcuts.redis = api;
|
|
58
|
+
}
|
|
59
|
+
if (extensions.random) {
|
|
60
|
+
const rng = typeof extensions.random === "object" ? extensions.random.rng : undefined;
|
|
61
|
+
const api = buildRandomApi(rng);
|
|
62
|
+
pm.random = api;
|
|
63
|
+
scopeShortcuts.random = api;
|
|
64
|
+
}
|
|
65
|
+
if (extensions.counter) {
|
|
66
|
+
const feature = buildCounterFeature(extensions.counter.snapshot);
|
|
67
|
+
pm.counter = feature.api;
|
|
68
|
+
scopeShortcuts.counter = feature.api;
|
|
69
|
+
counterSnapshotFn = feature.snapshot;
|
|
70
|
+
}
|
|
71
|
+
if (extensions.cryptojs) {
|
|
72
|
+
const api = createCryptoJsApi();
|
|
73
|
+
// CryptoJS is exposed ONLY at top-level scope (matching electron's
|
|
74
|
+
// current surface). pm.cryptojs is intentionally NOT set so the parity
|
|
75
|
+
// tests that lock in current behavior continue to pass.
|
|
76
|
+
scopeShortcuts.CryptoJS = api;
|
|
77
|
+
}
|
|
78
|
+
if (extensions.variables) {
|
|
79
|
+
const api = buildVariablesApi(envValues, globalValues);
|
|
80
|
+
pm.variables = api;
|
|
81
|
+
scopeShortcuts.variables = api;
|
|
82
|
+
}
|
|
83
|
+
if (extensions.db) {
|
|
84
|
+
const dbEnabled = featurePolicy ? featurePolicy.database : true;
|
|
85
|
+
const api = buildDbApi({
|
|
86
|
+
capability: extensions.db,
|
|
87
|
+
enabled: dbEnabled,
|
|
88
|
+
isInsideTestCallback,
|
|
89
|
+
responseTemplateRoot,
|
|
90
|
+
environment: envValues,
|
|
91
|
+
globals: globalValues,
|
|
92
|
+
});
|
|
93
|
+
pm.db = api;
|
|
94
|
+
scopeShortcuts.db = api;
|
|
95
|
+
}
|
|
96
|
+
return { pm, scopeShortcuts, counterSnapshotFn };
|
|
97
|
+
};
|
|
98
|
+
const buildPm = (capabilities, logs, collectors, sandboxDPm) => {
|
|
27
99
|
const pm = {
|
|
28
100
|
test: collectors.test.test,
|
|
29
101
|
expect: collectors.expect,
|
|
102
|
+
...sandboxDPm,
|
|
30
103
|
};
|
|
31
104
|
if (collectors.environment) {
|
|
32
105
|
pm.environment = collectors.environment;
|
|
@@ -53,7 +126,7 @@ const buildPm = (capabilities, logs, collectors) => {
|
|
|
53
126
|
}
|
|
54
127
|
return pm;
|
|
55
128
|
};
|
|
56
|
-
const buildScopeBindings = ({ pm, capabilities, consoleApi, envValues, environmentApi, request, response, expect, test, }) => {
|
|
129
|
+
const buildScopeBindings = ({ pm, capabilities, consoleApi, envValues, environmentApi, request, response, expect, test, sandboxDShortcuts, }) => {
|
|
57
130
|
const exposeLabels = capabilities.workflowContext &&
|
|
58
131
|
capabilities.exposeLabelsAsGlobals !== false;
|
|
59
132
|
const labelGlobals = exposeLabels
|
|
@@ -71,6 +144,13 @@ const buildScopeBindings = ({ pm, capabilities, consoleApi, envValues, environme
|
|
|
71
144
|
test,
|
|
72
145
|
expect,
|
|
73
146
|
console: consoleApi,
|
|
147
|
+
db: sandboxDShortcuts.db,
|
|
148
|
+
kafka: sandboxDShortcuts.kafka,
|
|
149
|
+
redis: sandboxDShortcuts.redis,
|
|
150
|
+
random: sandboxDShortcuts.random,
|
|
151
|
+
counter: sandboxDShortcuts.counter,
|
|
152
|
+
variables: sandboxDShortcuts.variables,
|
|
153
|
+
CryptoJS: sandboxDShortcuts.CryptoJS,
|
|
74
154
|
labelGlobals,
|
|
75
155
|
};
|
|
76
156
|
};
|
|
@@ -79,9 +159,10 @@ export const executeScript = async (input) => {
|
|
|
79
159
|
const filename = input.filename ?? DEFAULT_FILENAME;
|
|
80
160
|
const stage = input.stage ?? DEFAULT_STAGE;
|
|
81
161
|
const capabilities = input.capabilities;
|
|
162
|
+
const extensions = capabilities.extensions ?? {};
|
|
82
163
|
// Empty / whitespace-only scripts short-circuit with an empty success.
|
|
83
164
|
if (!input.script.trim()) {
|
|
84
|
-
|
|
165
|
+
const passthrough = {
|
|
85
166
|
success: true,
|
|
86
167
|
error: null,
|
|
87
168
|
testResults: [],
|
|
@@ -89,6 +170,13 @@ export const executeScript = async (input) => {
|
|
|
89
170
|
logs: [],
|
|
90
171
|
hasReturnValue: false,
|
|
91
172
|
};
|
|
173
|
+
if (extensions.counter) {
|
|
174
|
+
passthrough.counterSnapshot = extensions.counter.snapshot;
|
|
175
|
+
}
|
|
176
|
+
if (capabilities.allowDeferredKafkaTests) {
|
|
177
|
+
passthrough.deferredTestNames = [];
|
|
178
|
+
}
|
|
179
|
+
return passthrough;
|
|
92
180
|
}
|
|
93
181
|
const variableMutations = [];
|
|
94
182
|
const environmentApi = capabilities.environment
|
|
@@ -102,10 +190,16 @@ export const executeScript = async (input) => {
|
|
|
102
190
|
: undefined;
|
|
103
191
|
const responseApi = buildResponseApi(capabilities.response ?? null) ?? undefined;
|
|
104
192
|
const expect = createExpectApi();
|
|
105
|
-
const tests = buildTestCollector(stage
|
|
106
|
-
|
|
193
|
+
const tests = buildTestCollector(stage, {
|
|
194
|
+
allowDeferredKafkaTests: capabilities.allowDeferredKafkaTests,
|
|
195
|
+
selectedTestNames: capabilities.deferredTestNames,
|
|
196
|
+
});
|
|
197
|
+
const logCollector = extensions.log
|
|
107
198
|
? createLogCollector()
|
|
108
199
|
: createSilentLogCollector();
|
|
200
|
+
// Sandbox D feature bundle — depends on env/globals being constructed first
|
|
201
|
+
// (cryptojs/random/counter don't, but variables/db do).
|
|
202
|
+
const sandboxD = buildSandboxDFeatures(capabilities, () => tests.isInsideCallback(), environmentApi?.values ?? capabilities.environment?.values ?? {}, globalsApi?.values ?? capabilities.globals?.values ?? {}, capabilities.response ?? null);
|
|
109
203
|
const pm = buildPm(capabilities, { pmLog: logCollector.pmLog }, {
|
|
110
204
|
test: tests,
|
|
111
205
|
expect,
|
|
@@ -113,7 +207,7 @@ export const executeScript = async (input) => {
|
|
|
113
207
|
globals: globalsApi,
|
|
114
208
|
request: requestBundle,
|
|
115
209
|
response: responseApi ?? undefined,
|
|
116
|
-
});
|
|
210
|
+
}, sandboxD.pm);
|
|
117
211
|
const bindings = buildScopeBindings({
|
|
118
212
|
pm,
|
|
119
213
|
capabilities,
|
|
@@ -124,6 +218,7 @@ export const executeScript = async (input) => {
|
|
|
124
218
|
response: responseApi,
|
|
125
219
|
expect,
|
|
126
220
|
test: tests.test,
|
|
221
|
+
sandboxDShortcuts: sandboxD.scopeShortcuts,
|
|
127
222
|
});
|
|
128
223
|
let compiled;
|
|
129
224
|
try {
|
|
@@ -133,7 +228,7 @@ export const executeScript = async (input) => {
|
|
|
133
228
|
// Parse errors (SyntaxError) — return early as a sandbox error so the
|
|
134
229
|
// caller never sees a raw throw. Mutations and tests are empty since
|
|
135
230
|
// execution never started.
|
|
136
|
-
|
|
231
|
+
const result = {
|
|
137
232
|
success: false,
|
|
138
233
|
error: toSerializableError(stage, error),
|
|
139
234
|
testResults: [],
|
|
@@ -142,6 +237,13 @@ export const executeScript = async (input) => {
|
|
|
142
237
|
hasReturnValue: false,
|
|
143
238
|
...(requestBundle ? { request: requestBundle.toRequestState() } : {}),
|
|
144
239
|
};
|
|
240
|
+
if (sandboxD.counterSnapshotFn) {
|
|
241
|
+
result.counterSnapshot = sandboxD.counterSnapshotFn();
|
|
242
|
+
}
|
|
243
|
+
if (capabilities.allowDeferredKafkaTests) {
|
|
244
|
+
result.deferredTestNames = [];
|
|
245
|
+
}
|
|
246
|
+
return result;
|
|
145
247
|
}
|
|
146
248
|
let returnValue;
|
|
147
249
|
let hasReturnValue = false;
|
|
@@ -163,7 +265,7 @@ export const executeScript = async (input) => {
|
|
|
163
265
|
await Promise.allSettled([tests.flush()]);
|
|
164
266
|
runtimeError = toSerializableError(stage, error);
|
|
165
267
|
}
|
|
166
|
-
|
|
268
|
+
const result = {
|
|
167
269
|
success: runtimeError === null,
|
|
168
270
|
error: runtimeError,
|
|
169
271
|
testResults: tests.testResults,
|
|
@@ -173,6 +275,13 @@ export const executeScript = async (input) => {
|
|
|
173
275
|
hasReturnValue,
|
|
174
276
|
...(requestBundle ? { request: requestBundle.toRequestState() } : {}),
|
|
175
277
|
};
|
|
278
|
+
if (sandboxD.counterSnapshotFn) {
|
|
279
|
+
result.counterSnapshot = sandboxD.counterSnapshotFn();
|
|
280
|
+
}
|
|
281
|
+
if (capabilities.allowDeferredKafkaTests) {
|
|
282
|
+
result.deferredTestNames = [...tests.deferredTestNames];
|
|
283
|
+
}
|
|
284
|
+
return result;
|
|
176
285
|
};
|
|
177
286
|
// Standalone parse-only check — exposed so the desktop's
|
|
178
287
|
// `desktop:validate-scenario-script` IPC handler can give immediate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/script/executor.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/script/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CounterSnapshotEntry } from "../types.js";
|
|
2
|
+
export interface CounterApi {
|
|
3
|
+
next: () => number;
|
|
4
|
+
start: (startAt?: number) => number;
|
|
5
|
+
}
|
|
6
|
+
export interface CounterFeature {
|
|
7
|
+
api: CounterApi;
|
|
8
|
+
snapshot: () => CounterSnapshotEntry[];
|
|
9
|
+
}
|
|
10
|
+
export declare const buildCounterFeature: (snapshot: CounterSnapshotEntry[]) => CounterFeature;
|
|
11
|
+
//# sourceMappingURL=counter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"counter.d.ts","sourceRoot":"","sources":["../../../src/script/features/counter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,MAAM,oBAAoB,EAAE,CAAC;CACxC;AAoCD,eAAO,MAAM,mBAAmB,GAAI,UAAU,oBAAoB,EAAE,KAAG,cAWtE,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// pm.counter — collection-runner stateful counter.
|
|
2
|
+
//
|
|
3
|
+
// Per-execution instance (no module-level state) so concurrent script runs
|
|
4
|
+
// can't interfere. The host threads `snapshot` through successive script
|
|
5
|
+
// executions: input.snapshot hydrates initial state; output.snapshot is
|
|
6
|
+
// emitted after the script completes and should be passed to the next run.
|
|
7
|
+
const hydrate = (store, snapshot) => {
|
|
8
|
+
store.clear();
|
|
9
|
+
for (const entry of snapshot) {
|
|
10
|
+
if (!Array.isArray(entry) || entry.length !== 2) {
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
const [key, value] = entry;
|
|
14
|
+
const normalizedKey = String(key ?? "").trim();
|
|
15
|
+
const normalizedValue = Number(value);
|
|
16
|
+
if (!normalizedKey || !Number.isFinite(normalizedValue)) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
store.set(normalizedKey, Math.trunc(normalizedValue));
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const advance = (store, key, startAt) => {
|
|
23
|
+
const normalizedStartAt = Number.isFinite(startAt) ? Math.trunc(startAt) : 1;
|
|
24
|
+
if (!store.has(key)) {
|
|
25
|
+
store.set(key, normalizedStartAt);
|
|
26
|
+
return normalizedStartAt;
|
|
27
|
+
}
|
|
28
|
+
const next = (store.get(key) ?? normalizedStartAt) + 1;
|
|
29
|
+
store.set(key, next);
|
|
30
|
+
return next;
|
|
31
|
+
};
|
|
32
|
+
export const buildCounterFeature = (snapshot) => {
|
|
33
|
+
const store = new Map();
|
|
34
|
+
hydrate(store, snapshot);
|
|
35
|
+
return {
|
|
36
|
+
api: {
|
|
37
|
+
next: () => advance(store, "counter", 1),
|
|
38
|
+
start: (startAt = 1) => advance(store, `counter.start:${startAt}`, startAt),
|
|
39
|
+
},
|
|
40
|
+
snapshot: () => Array.from(store.entries()),
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=counter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"counter.js","sourceRoot":"","sources":["../../../src/script/features/counter.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,wEAAwE;AACxE,2EAA2E;AAc3E,MAAM,OAAO,GAAG,CACd,KAA0B,EAC1B,QAAgC,EAC1B,EAAE;IACR,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;QAC3B,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACxD,SAAS;QACX,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CACd,KAA0B,EAC1B,GAAW,EACX,OAAe,EACP,EAAE;IACV,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAClC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAgC,EAAkB,EAAE;IACtF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAEzB,OAAO;QACL,GAAG,EAAE;YACH,IAAI,EAAE,GAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAChD,KAAK,EAAE,CAAC,OAAO,GAAG,CAAC,EAAU,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,OAAO,EAAE,EAAE,OAAO,CAAC;SACpF;QACD,QAAQ,EAAE,GAA2B,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface CryptoJsApi {
|
|
2
|
+
enc: {
|
|
3
|
+
Utf8: {
|
|
4
|
+
parse: (input: unknown) => Uint8Array;
|
|
5
|
+
stringify: (input: unknown) => string;
|
|
6
|
+
};
|
|
7
|
+
Base64: {
|
|
8
|
+
stringify: (input: unknown) => string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare const createCryptoJsApi: () => CryptoJsApi;
|
|
13
|
+
//# sourceMappingURL=cryptojs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cryptojs.d.ts","sourceRoot":"","sources":["../../../src/script/features/cryptojs.ts"],"names":[],"mappings":"AAqDA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE;QACH,IAAI,EAAE;YACJ,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,UAAU,CAAC;YACtC,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;SACvC,CAAC;QACF,MAAM,EAAE;YACN,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;SACvC,CAAC;KACH,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,QAAO,WAapC,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// CryptoJS — minimal collection-runner crypto helpers.
|
|
2
|
+
//
|
|
3
|
+
// Migrated from pmanfrontend/electron/script/runtime.ts. The original
|
|
4
|
+
// implementation used Node's `Buffer` for base64 encoding; the canonical
|
|
5
|
+
// sandbox blocks `Buffer` (security policy), so this rewrite uses an
|
|
6
|
+
// in-process btoa-equivalent that produces RFC 4648 standard output.
|
|
7
|
+
//
|
|
8
|
+
// Only the surface that user scripts actually consume is implemented:
|
|
9
|
+
// CryptoJS.enc.Utf8.parse(string) → Uint8Array
|
|
10
|
+
// CryptoJS.enc.Utf8.stringify(Uint8Array | ArrayBufferLike) → string
|
|
11
|
+
// CryptoJS.enc.Base64.stringify(Uint8Array | ArrayBufferLike) → string
|
|
12
|
+
//
|
|
13
|
+
// HMAC / SHA / AES are intentionally out of scope.
|
|
14
|
+
const BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
15
|
+
const toUint8Array = (input) => {
|
|
16
|
+
if (input instanceof Uint8Array) {
|
|
17
|
+
return input;
|
|
18
|
+
}
|
|
19
|
+
if (input instanceof ArrayBuffer) {
|
|
20
|
+
return new Uint8Array(input);
|
|
21
|
+
}
|
|
22
|
+
if (ArrayBuffer.isView(input)) {
|
|
23
|
+
const view = input;
|
|
24
|
+
return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
|
|
25
|
+
}
|
|
26
|
+
if (typeof input === "string") {
|
|
27
|
+
return new TextEncoder().encode(input);
|
|
28
|
+
}
|
|
29
|
+
return new Uint8Array(0);
|
|
30
|
+
};
|
|
31
|
+
// Portable base64 encoder: walks the Uint8Array in 3-byte chunks and emits
|
|
32
|
+
// four characters per chunk per RFC 4648. No reliance on Buffer or btoa,
|
|
33
|
+
// so it works in vm contexts where neither is exposed.
|
|
34
|
+
const encodeBase64 = (bytes) => {
|
|
35
|
+
let output = "";
|
|
36
|
+
const length = bytes.length;
|
|
37
|
+
for (let index = 0; index < length; index += 3) {
|
|
38
|
+
const b0 = bytes[index];
|
|
39
|
+
const b1 = index + 1 < length ? bytes[index + 1] : 0;
|
|
40
|
+
const b2 = index + 2 < length ? bytes[index + 2] : 0;
|
|
41
|
+
const triplet = (b0 << 16) | (b1 << 8) | b2;
|
|
42
|
+
output += BASE64_CHARS[(triplet >> 18) & 0x3f];
|
|
43
|
+
output += BASE64_CHARS[(triplet >> 12) & 0x3f];
|
|
44
|
+
output += index + 1 < length ? BASE64_CHARS[(triplet >> 6) & 0x3f] : "=";
|
|
45
|
+
output += index + 2 < length ? BASE64_CHARS[triplet & 0x3f] : "=";
|
|
46
|
+
}
|
|
47
|
+
return output;
|
|
48
|
+
};
|
|
49
|
+
export const createCryptoJsApi = () => {
|
|
50
|
+
const decoder = new TextDecoder();
|
|
51
|
+
return {
|
|
52
|
+
enc: {
|
|
53
|
+
Utf8: {
|
|
54
|
+
parse: (input) => toUint8Array(input),
|
|
55
|
+
stringify: (input) => decoder.decode(toUint8Array(input)),
|
|
56
|
+
},
|
|
57
|
+
Base64: {
|
|
58
|
+
stringify: (input) => encodeBase64(toUint8Array(input)),
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=cryptojs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cryptojs.js","sourceRoot":"","sources":["../../../src/script/features/cryptojs.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,sEAAsE;AACtE,yEAAyE;AACzE,qEAAqE;AACrE,qEAAqE;AACrE,EAAE;AACF,sEAAsE;AACtE,iDAAiD;AACjD,uEAAuE;AACvE,yEAAyE;AACzE,EAAE;AACF,mDAAmD;AAEnD,MAAM,YAAY,GAChB,kEAAkE,CAAC;AAErE,MAAM,YAAY,GAAG,CAAC,KAAc,EAAc,EAAE;IAClD,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,KAAwB,CAAC;QACtC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,2EAA2E;AAC3E,yEAAyE;AACzE,uDAAuD;AACvD,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAU,EAAE;IACjD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5C,MAAM,IAAI,YAAY,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,YAAY,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACzE,MAAM,IAAI,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAcF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAgB,EAAE;IACjD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,OAAO;QACL,GAAG,EAAE;YACH,IAAI,EAAE;gBACJ,KAAK,EAAE,CAAC,KAAc,EAAc,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC1D,SAAS,EAAE,CAAC,KAAc,EAAU,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;aAC3E;YACD,MAAM,EAAE;gBACN,SAAS,EAAE,CAAC,KAAc,EAAU,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;aACzE;SACF;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ScriptDbCapability } from "../types.js";
|
|
2
|
+
export interface DbSourceApi {
|
|
3
|
+
success: boolean;
|
|
4
|
+
error: string | null;
|
|
5
|
+
rowCount: number;
|
|
6
|
+
rows: unknown[];
|
|
7
|
+
firstRow: () => unknown;
|
|
8
|
+
}
|
|
9
|
+
export interface DbQueryResultApi extends DbSourceApi {
|
|
10
|
+
connectionId: string;
|
|
11
|
+
connectionName: string;
|
|
12
|
+
connectionType: string;
|
|
13
|
+
phase: "pre" | "post" | "manual";
|
|
14
|
+
query: string;
|
|
15
|
+
resolvedQuery: string;
|
|
16
|
+
durationMs: number;
|
|
17
|
+
executedAt: string;
|
|
18
|
+
}
|
|
19
|
+
export interface DbApi {
|
|
20
|
+
pre: DbSourceApi;
|
|
21
|
+
post: DbSourceApi;
|
|
22
|
+
query: (input: {
|
|
23
|
+
connectionId?: unknown;
|
|
24
|
+
query: unknown;
|
|
25
|
+
}) => Promise<DbQueryResultApi>;
|
|
26
|
+
}
|
|
27
|
+
export interface BuildDbApiInput {
|
|
28
|
+
capability: ScriptDbCapability | null | undefined;
|
|
29
|
+
enabled: boolean;
|
|
30
|
+
isInsideTestCallback: () => boolean;
|
|
31
|
+
responseTemplateRoot: unknown | null;
|
|
32
|
+
environment: Record<string, string>;
|
|
33
|
+
globals: Record<string, string>;
|
|
34
|
+
}
|
|
35
|
+
export declare const buildDbApi: (input: BuildDbApiInput) => DbApi;
|
|
36
|
+
//# sourceMappingURL=db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/script/features/db.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,kBAAkB,EAA2B,MAAM,aAAa,CAAC;AAE/E,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,CAAC,KAAK,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACzF;AAyHD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,MAAM,OAAO,CAAC;IAKpC,oBAAoB,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,eAAe,KAAG,KA2DnD,CAAC"}
|