@overkill-dev/resources 0.0.11 → 0.0.13
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/attachments/attachment-context.d.ts +5 -1
- package/attachments/attachment-context.d.ts.map +1 -1
- package/attachments/attachment-context.js +10 -0
- package/attachments/attachment-context.js.map +1 -1
- package/attachments/failure-artifact-stream.js +147 -0
- package/attachments/failure-artifact-stream.js.map +1 -0
- package/attachments/json-snapshot.js +110 -0
- package/attachments/json-snapshot.js.map +1 -0
- package/attachments/resource-failure-context.js +45 -0
- package/attachments/resource-failure-context.js.map +1 -0
- package/canonical-identity.js +54 -0
- package/canonical-identity.js.map +1 -0
- package/engine/identity.d.ts +5 -0
- package/engine/identity.d.ts.map +1 -1
- package/engine/identity.js +41 -0
- package/engine/identity.js.map +1 -0
- package/engine/run-artifact.d.ts +1 -1
- package/engine/run-artifact.d.ts.map +1 -1
- package/engine/runtime-attachment.d.ts +26 -6
- package/engine/runtime-attachment.d.ts.map +1 -1
- package/engine/runtime-attachment.js +7 -0
- package/engine/runtime-attachment.js.map +1 -0
- package/engine/workload-input.d.ts +8 -0
- package/engine/workload-input.d.ts.map +1 -0
- package/engine/workload-input.js +54 -0
- package/engine/workload-input.js.map +1 -0
- package/engine/workload-parameters.d.ts +3 -0
- package/engine/workload-parameters.d.ts.map +1 -0
- package/engine/workload-parameters.js +67 -0
- package/engine/workload-parameters.js.map +1 -0
- package/package-version.js +31 -0
- package/package-version.js.map +1 -0
- package/package.json +11 -3
- package/packages/resources/attachment-context.entry-point.d.ts +1 -1
- package/packages/resources/attachment-context.entry-point.d.ts.map +1 -1
- package/packages/resources/attachment-context.entry-point.js +1 -1
- package/packages/resources/attachment-context.entry-point.js.map +1 -1
- package/packages/resources/resources.entry-point.d.ts +7 -0
- package/packages/resources/resources.entry-point.d.ts.map +1 -1
- package/packages/resources/resources.entry-point.js +3 -0
- package/packages/resources/resources.entry-point.js.map +1 -1
- package/readme.md +46 -1
- package/resources/failure-artifacts.d.ts +49 -0
- package/resources/failure-artifacts.d.ts.map +1 -0
- package/resources/failure-artifacts.js +34 -0
- package/resources/failure-artifacts.js.map +1 -0
- package/resources/http-request-attribution.js +23 -0
- package/resources/http-request-attribution.js.map +1 -0
- package/resources/local-http-failure-capture.js +43 -0
- package/resources/local-http-failure-capture.js.map +1 -0
- package/resources/local-http-service-resource.d.ts.map +1 -1
- package/resources/local-http-service-resource.js +18 -7
- package/resources/local-http-service-resource.js.map +1 -1
- package/resources/local-http-transcript-observer.js +14 -21
- package/resources/local-http-transcript-observer.js.map +1 -1
- package/resources/local-process-service-resource.d.ts +1 -1
- package/resources/local-process-service-resource.d.ts.map +1 -1
- package/resources/local-process-service-resource.js +85 -12
- package/resources/local-process-service-resource.js.map +1 -1
- package/resources/local-service-resource.d.ts +26 -26
- package/resources/local-service-resource.d.ts.map +1 -1
- package/resources/local-service-resource.js +9 -5
- package/resources/local-service-resource.js.map +1 -1
- package/resources/resource-authoring-types.d.ts +22 -0
- package/resources/resource-authoring-types.d.ts.map +1 -0
- package/resources/resource-definition-shape.d.ts +2 -0
- package/resources/resource-definition-shape.d.ts.map +1 -1
- package/resources/resource-definition-types.d.ts +23 -15
- package/resources/resource-definition-types.d.ts.map +1 -1
- package/resources/resource-definition.d.ts +9 -0
- package/resources/resource-definition.d.ts.map +1 -0
- package/resources/resource-definition.js +17 -2
- package/resources/resource-definition.js.map +1 -1
- package/resources/resource-scenario-binding.js +9 -5
- package/resources/resource-scenario-binding.js.map +1 -1
- package/resources/resource-scenario.d.ts +3 -0
- package/resources/resource-scenario.d.ts.map +1 -1
- package/resources/resource-session.d.ts +5 -0
- package/resources/resource-session.d.ts.map +1 -1
- package/resources/resource-session.js +26 -5
- package/resources/resource-session.js.map +1 -1
- package/resources/resource-workload-binding.d.ts +9 -0
- package/resources/resource-workload-binding.d.ts.map +1 -0
- package/resources/resource-workload-binding.js +94 -0
- package/resources/resource-workload-binding.js.map +1 -0
- package/resources/resource-workload-types.d.ts +8 -0
- package/resources/resource-workload-types.d.ts.map +1 -0
- package/resources/resource-workload-types.js +4 -0
- package/resources/resource-workload-types.js.map +1 -0
- package/resources/resources.d.ts +12 -16
- package/resources/resources.d.ts.map +1 -1
- package/resources/resources.js.map +1 -1
- package/resources/runtime-lifecycle.d.ts +5 -0
- package/resources/runtime-lifecycle.d.ts.map +1 -1
- package/resources/runtime-lifecycle.js +5 -1
- package/resources/runtime-lifecycle.js.map +1 -1
- package/resources/runtime-workload-binding.d.ts +4 -0
- package/resources/runtime-workload-binding.d.ts.map +1 -0
- package/resources/runtime-workload-binding.js +32 -0
- package/resources/runtime-workload-binding.js.map +1 -0
- package/resources/simulated-http-server-resource.d.ts +1 -1
- package/resources/simulated-http-server-resource.d.ts.map +1 -1
- package/resources/simulated-http-server-resource.js +31 -3
- package/resources/simulated-http-server-resource.js.map +1 -1
- package/sbom.cdx.json +28 -11
- package/stored-value.js +12 -0
- package/stored-value.js.map +1 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { canonicalIdentityJson } from "../canonical-identity.js";
|
|
2
|
+
import { snapshotWorkloadParameters } from "./workload-parameters.js";
|
|
3
|
+
export function workloadParameterIdentity(parameters) {
|
|
4
|
+
return Object.freeze(Object.fromEntries(Object
|
|
5
|
+
.entries(parameters)
|
|
6
|
+
.map(function encodeParameter([key, value]) {
|
|
7
|
+
return [key.normalize('NFC'), canonicalIdentityJson(value)];
|
|
8
|
+
})
|
|
9
|
+
.toSorted(function compareNames([left], [right]) {
|
|
10
|
+
return left.localeCompare(right);
|
|
11
|
+
})));
|
|
12
|
+
}
|
|
13
|
+
export function isWorkloadRecord(value) {
|
|
14
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
function readWorkloadName(value) {
|
|
17
|
+
if (typeof value !== 'string' || value.trim().length === 0 || /\p{Cc}/v.test(value)) {
|
|
18
|
+
throw new TypeError('Workload identities require non-empty names without control characters.');
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
function readIdentityParameters(value) {
|
|
23
|
+
if (!isWorkloadRecord(value)) {
|
|
24
|
+
throw new TypeError('Workload identities require a string parameter record.');
|
|
25
|
+
}
|
|
26
|
+
const keys = new Set();
|
|
27
|
+
const entries = Object.entries(value).map(function readParameter([key, parameter]) {
|
|
28
|
+
const canonicalKey = key.normalize('NFC');
|
|
29
|
+
if (typeof parameter !== 'string' || keys.has(canonicalKey)) {
|
|
30
|
+
throw new TypeError('Workload identity parameters must be strings with distinct canonical keys.');
|
|
31
|
+
}
|
|
32
|
+
keys.add(canonicalKey);
|
|
33
|
+
return [canonicalKey, parameter];
|
|
34
|
+
});
|
|
35
|
+
return Object.freeze(Object.fromEntries(entries));
|
|
36
|
+
}
|
|
37
|
+
export function readWorkloadId(value) {
|
|
38
|
+
if (!isWorkloadRecord(value)) {
|
|
39
|
+
throw new TypeError('Workload identities require a name and string parameter record.');
|
|
40
|
+
}
|
|
41
|
+
return Object.freeze({ name: readWorkloadName(value.name), params: readIdentityParameters(value.params) });
|
|
42
|
+
}
|
|
43
|
+
export function snapshotWorkloadInput(input) {
|
|
44
|
+
const id = readWorkloadId(input.id);
|
|
45
|
+
const parameters = snapshotWorkloadParameters(input.parameters);
|
|
46
|
+
if (canonicalIdentityJson(workloadParameterIdentity(parameters)) !== canonicalIdentityJson(id.params)) {
|
|
47
|
+
throw new TypeError(`Workload "${input.id.name}" parameters do not match its identity.`);
|
|
48
|
+
}
|
|
49
|
+
return Object.freeze({
|
|
50
|
+
id,
|
|
51
|
+
parameters
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=workload-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workload-input.js","sourceRoot":"","sources":["../../../../source/engine/workload-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workload-parameters.d.ts","sourceRoot":"","sources":["../../../../source/engine/workload-parameters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAa,YAAY,EAAE,MAAM,WAAW,CAAC;AAGrE,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { snapshotValidatedJson } from "../attachments/json-snapshot.js";
|
|
2
|
+
function isParameterRecord(value) {
|
|
3
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
function isContainer(value) {
|
|
6
|
+
return typeof value === 'object' && value !== null;
|
|
7
|
+
}
|
|
8
|
+
function readDataKey(value, key) {
|
|
9
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
10
|
+
if (typeof key !== 'string' || descriptor?.enumerable !== true || !Object.hasOwn(descriptor, 'value')) {
|
|
11
|
+
throw new TypeError('Workload parameters require enumerable string data properties.');
|
|
12
|
+
}
|
|
13
|
+
return key;
|
|
14
|
+
}
|
|
15
|
+
function isArrayIndex(key, length) {
|
|
16
|
+
return /^(?:0|[1-9]\d*)$/v.test(key) && Number(key) < length;
|
|
17
|
+
}
|
|
18
|
+
function parameterKeys(value) {
|
|
19
|
+
return Reflect
|
|
20
|
+
.ownKeys(value)
|
|
21
|
+
.filter(function dataKey(key) {
|
|
22
|
+
return !Array.isArray(value) || key !== 'length';
|
|
23
|
+
})
|
|
24
|
+
.map(function validatedKey(key) {
|
|
25
|
+
const name = readDataKey(value, key);
|
|
26
|
+
if (Array.isArray(value) && !isArrayIndex(name, value.length)) {
|
|
27
|
+
throw new TypeError('Workload arrays cannot contain additional properties.');
|
|
28
|
+
}
|
|
29
|
+
return name.normalize('NFC');
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function validateParameterContainer(value) {
|
|
33
|
+
if (Array.isArray(value) && Object.getPrototypeOf(value) !== Array.prototype) {
|
|
34
|
+
throw new TypeError('Workload parameters require ordinary JSON arrays.');
|
|
35
|
+
}
|
|
36
|
+
const keys = parameterKeys(value);
|
|
37
|
+
const distinctKeys = new Set(keys);
|
|
38
|
+
if (distinctKeys.size !== keys.length) {
|
|
39
|
+
throw new TypeError('Workload parameter keys must be distinct after Unicode normalization.');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function validateParameterValue(value) {
|
|
43
|
+
if (Object.is(value, -0)) {
|
|
44
|
+
throw new TypeError('Workload parameters cannot contain negative zero.');
|
|
45
|
+
}
|
|
46
|
+
if (isContainer(value)) {
|
|
47
|
+
validateParameterContainer(value);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function snapshotParameters(value) {
|
|
51
|
+
try {
|
|
52
|
+
return snapshotValidatedJson(value, validateParameterValue).value;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
throw new TypeError('workload() requires lossless, acyclic JSON parameters with depth at most 64.', {
|
|
56
|
+
cause: error
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export function snapshotWorkloadParameters(value) {
|
|
61
|
+
const snapshot = snapshotParameters(value);
|
|
62
|
+
if (!isParameterRecord(snapshot)) {
|
|
63
|
+
throw new TypeError('workload() requires a JSON parameter record.');
|
|
64
|
+
}
|
|
65
|
+
return snapshot;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=workload-parameters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workload-parameters.js","sourceRoot":"","sources":["../../../../source/engine/workload-parameters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
const packageVersionSchema = z.object({ name: z.string(), version: z.string() });
|
|
6
|
+
async function parsePackageVersion(manifestPath) {
|
|
7
|
+
const contents = await readFile(manifestPath, 'utf8');
|
|
8
|
+
const parsed = packageVersionSchema.safeParse(JSON.parse(contents));
|
|
9
|
+
return parsed.success ? parsed.data : null;
|
|
10
|
+
}
|
|
11
|
+
async function readPackageVersion(directory) {
|
|
12
|
+
const manifestPath = path.join(directory, 'package.json');
|
|
13
|
+
try {
|
|
14
|
+
return await parsePackageVersion(manifestPath);
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (error instanceof Error && Reflect.get(error, 'code') === 'ENOENT' && path.dirname(directory) !== directory) {
|
|
18
|
+
return await readPackageVersion(path.dirname(directory));
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export async function packageVersion(moduleUrl) {
|
|
24
|
+
try {
|
|
25
|
+
return await readPackageVersion(path.dirname(fileURLToPath(moduleUrl)));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=package-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-version.js","sourceRoot":"","sources":["../../../source/package-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAGjF,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IACnD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC1D,IAAI,CAAC;QACD,OAAO,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,IACI,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,SAAS,EAC5G,CAAC;YACC,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB;IAClD,IAAI,CAAC;QACD,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
"url": "https://github.com/enormora/overkill/issues"
|
|
5
5
|
},
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"type-fest": "5.10.0"
|
|
7
|
+
"type-fest": "5.10.0",
|
|
8
|
+
"zod": "4.6.5"
|
|
8
9
|
},
|
|
9
10
|
"description": "Typed Overkill resource and runtime descriptors.",
|
|
10
11
|
"engines": {
|
|
@@ -29,7 +30,7 @@
|
|
|
29
30
|
"license": "MIT",
|
|
30
31
|
"name": "@overkill-dev/resources",
|
|
31
32
|
"peerDependencies": {
|
|
32
|
-
"@overkill-dev/simulation": "0.0.
|
|
33
|
+
"@overkill-dev/simulation": "0.0.5"
|
|
33
34
|
},
|
|
34
35
|
"repository": {
|
|
35
36
|
"type": "git",
|
|
@@ -37,17 +38,24 @@
|
|
|
37
38
|
},
|
|
38
39
|
"sideEffects": [
|
|
39
40
|
"./attachments/attachment-context.js",
|
|
41
|
+
"./attachments/failure-artifact-stream.js",
|
|
42
|
+
"./attachments/json-snapshot.js",
|
|
43
|
+
"./attachments/resource-failure-context.js",
|
|
44
|
+
"./engine/runtime-attachment.js",
|
|
45
|
+
"./package-version.js",
|
|
40
46
|
"./packages/resources/resources.entry-point.js",
|
|
47
|
+
"./resources/failure-artifacts.js",
|
|
41
48
|
"./resources/local-http-transcript-observer.js",
|
|
42
49
|
"./resources/local-service-resource.js",
|
|
43
50
|
"./resources/resource-definition-brand.js",
|
|
44
51
|
"./resources/resource-definition.js",
|
|
45
52
|
"./resources/resource-lifecycle-error.js",
|
|
46
53
|
"./resources/resource-scenario-binding.js",
|
|
54
|
+
"./resources/resource-workload-binding.js",
|
|
47
55
|
"./resources/resources.js",
|
|
48
56
|
"./resources/runtime-definition.js",
|
|
49
57
|
"./resources/runtime-matrix-definition.js"
|
|
50
58
|
],
|
|
51
59
|
"type": "module",
|
|
52
|
-
"version": "0.0.
|
|
60
|
+
"version": "0.0.13"
|
|
53
61
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { attachmentsForProducer, resourceAttachments, runWithAttachmentContext } from '../../attachments/attachment-context.ts';
|
|
1
|
+
export { attachmentsForProducer, currentAttachmentLimits, resourceAttachments, preparedResourceAttachments, runWithAttachmentContext } from '../../attachments/attachment-context.ts';
|
|
2
2
|
export type { AttachmentContext } from '../../attachments/attachment-context.ts';
|
|
3
3
|
//# sourceMappingURL=attachment-context.entry-point.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-context.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC"}
|
|
1
|
+
{"version":3,"file":"attachment-context.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { attachmentsForProducer, resourceAttachments, runWithAttachmentContext } from "../../attachments/attachment-context.js";
|
|
1
|
+
export { attachmentsForProducer, currentAttachmentLimits, resourceAttachments, preparedResourceAttachments, runWithAttachmentContext } from "../../attachments/attachment-context.js";
|
|
2
2
|
//# sourceMappingURL=attachment-context.entry-point.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-context.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC"}
|
|
1
|
+
{"version":3,"file":"attachment-context.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC"}
|
|
@@ -27,4 +27,11 @@ export type { RuntimeDefinition as Runtime, RuntimeResourceMap as ResourceMap }
|
|
|
27
27
|
export type { ResourceLifecycleFailure, ResourceLifecyclePhase } from '../../resources/resource-lifecycle-error.ts';
|
|
28
28
|
export type { ResourceSession, ResourceSessionDisposalContext, StartResourcesRequest } from '../../resources/resource-session.ts';
|
|
29
29
|
export type { RuntimeSession, RuntimeSessionDisposalContext, StartRuntimeRequest } from '../../resources/runtime-lifecycle.ts';
|
|
30
|
+
export { withFailureArtifacts } from '../../resources/failure-artifacts.ts';
|
|
31
|
+
export type { FailureArtifactAttachments, ResourceFailureCapture, SimulationWitnessArtifact, SimulationWitnessInput } from '../../resources/failure-artifacts.ts';
|
|
32
|
+
export type { ResourceWorkload, ResourceWorkloadParser } from '../../resources/resources.ts';
|
|
33
|
+
export type { WorkloadInput, WorkloadParameters } from '../../engine/workload-input.ts';
|
|
34
|
+
export { createWorkloadResourceBinding, resourceWorkloadIdentity } from '../../resources/resource-workload-binding.ts';
|
|
35
|
+
export type { WorkloadResourceBinding } from '../../resources/resource-workload-binding.ts';
|
|
36
|
+
export { bindRuntimeWorkload } from '../../resources/runtime-workload-binding.ts';
|
|
30
37
|
//# sourceMappingURL=resources.entry-point.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/resources.entry-point.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resources.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/resources.entry-point.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,4 +26,7 @@ export { assertPerCaseResourceGraph, assertResourceDependencyScopes } from "../.
|
|
|
26
26
|
export { startResources } from "../../resources/resource-session.js";
|
|
27
27
|
export { ResourceLifecycleError } from "../../resources/resource-lifecycle-error.js";
|
|
28
28
|
export { startRuntime } from "../../resources/runtime-lifecycle.js";
|
|
29
|
+
export { withFailureArtifacts } from "../../resources/failure-artifacts.js";
|
|
30
|
+
export { createWorkloadResourceBinding, resourceWorkloadIdentity } from "../../resources/resource-workload-binding.js";
|
|
31
|
+
export { bindRuntimeWorkload } from "../../resources/runtime-workload-binding.js";
|
|
29
32
|
//# sourceMappingURL=resources.entry-point.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/resources.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAwB,MAAM,8BAA8B,CAAC;AAU3F,OAAO,EACH,0BAA0B,EAC7B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACH,8BAA8B,EACjC,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACH,iCAAiC,EACpC,MAAM,mDAAmD,CAAC;AAE3D,MAAM,eAAe,GAAG,qBAAqB,CAAC;IAC1C,4BAA4B,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,+BAA+B,CAAC;IAC7E,KAAK,CAAC,wBAAwB,CAAC,UAAU;QACrC,OAAO,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,IAAI;QACtB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAA6C,eAAe,CAAC,qBAAqB,CAAC;AACrH,MAAM,CAAC,MAAM,eAAe,GAAuC,eAAe,CAAC,eAAe,CAAC;AACnG,MAAM,CAAC,MAAM,gCAAgC,GACzC,eAAe,CAAC,gCAAgC,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAsC,eAAe,CAAC,cAAc,CAAC;AAChG,MAAM,CAAC,MAAM,aAAa,GAAqC,eAAe,CAAC,aAAa,CAAC;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAA2C,eAAe,CAAC,mBAAmB,CAAC;AAE/G,OAAO,EACH,iCAAiC,EACpC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACH,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACH,0BAA0B,EAC1B,8BAA8B,EACjC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,cAAc,EACjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACH,sBAAsB,EACzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACH,YAAY,EACf,MAAM,sCAAsC,CAAC"}
|
|
1
|
+
{"version":3,"file":"resources.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/resources.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAwB,MAAM,8BAA8B,CAAC;AAU3F,OAAO,EACH,0BAA0B,EAC7B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACH,8BAA8B,EACjC,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACH,iCAAiC,EACpC,MAAM,mDAAmD,CAAC;AAE3D,MAAM,eAAe,GAAG,qBAAqB,CAAC;IAC1C,4BAA4B,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,+BAA+B,CAAC;IAC7E,KAAK,CAAC,wBAAwB,CAAC,UAAU;QACrC,OAAO,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,IAAI;QACtB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAA6C,eAAe,CAAC,qBAAqB,CAAC;AACrH,MAAM,CAAC,MAAM,eAAe,GAAuC,eAAe,CAAC,eAAe,CAAC;AACnG,MAAM,CAAC,MAAM,gCAAgC,GACzC,eAAe,CAAC,gCAAgC,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAsC,eAAe,CAAC,cAAc,CAAC;AAChG,MAAM,CAAC,MAAM,aAAa,GAAqC,eAAe,CAAC,aAAa,CAAC;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAA2C,eAAe,CAAC,mBAAmB,CAAC;AAE/G,OAAO,EACH,iCAAiC,EACpC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACH,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACH,0BAA0B,EAC1B,8BAA8B,EACjC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,cAAc,EACjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACH,sBAAsB,EACzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACH,YAAY,EACf,MAAM,sCAAsC,CAAC;AA4G9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAW5E,OAAO,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AAEvH,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC"}
|
package/readme.md
CHANGED
|
@@ -118,6 +118,24 @@ Dependency context uses the keys from the resource's `dependencies` object.
|
|
|
118
118
|
Omitting `dependencies` is accepted for compatibility and produces
|
|
119
119
|
`dependencies: {}` on the returned descriptor.
|
|
120
120
|
|
|
121
|
+
Resources can declare workload dependence with `workload: parseParameters`.
|
|
122
|
+
This pure synchronous parser validates original JSON parameters during collection
|
|
123
|
+
and executor recollection. Acquisition and disposal receive the same parsed
|
|
124
|
+
`{ id, parameters }` through `context.workload`; independent callbacks receive
|
|
125
|
+
`null`. Local service callbacks carry this input through `start`, `ready`, and
|
|
126
|
+
`dispose`. Explicit `startResources` and `startRuntime` sessions accept a
|
|
127
|
+
`workload` input containing its identity and parameters.
|
|
128
|
+
|
|
129
|
+
Workload-dependent resources and their consumers share by scope and full workload
|
|
130
|
+
identity. Independent dependencies retain their existing sharing across workloads
|
|
131
|
+
and runtime variants. Ordinary scenarios, projections, startup budgets, placement
|
|
132
|
+
requirements, and attachments still apply. Equal canonical workload identities
|
|
133
|
+
with different original inputs cannot share one resource boundary.
|
|
134
|
+
|
|
135
|
+
Advanced DSLs bind graphs through `createWorkloadResourceBinding` and
|
|
136
|
+
`bindRuntimeWorkload`; `resourceWorkloadIdentity` reads a bound descriptor's
|
|
137
|
+
workload identity. Engine input snapshots preserve original parameter spelling.
|
|
138
|
+
|
|
121
139
|
`createTemporaryDirectoryResource(name)` returns a per-case resource descriptor
|
|
122
140
|
whose handle exposes `path` and an empty `transcript`. Each acquisition creates
|
|
123
141
|
a unique directory with an Overkill prefix. Disposal removes that directory
|
|
@@ -191,7 +209,34 @@ Attachments require runner-managed integration execution. Standalone
|
|
|
191
209
|
|
|
192
210
|
`@overkill-dev/resources/attachment-context` exposes the shared context bridge
|
|
193
211
|
for runner and authoring integrations. Test authors should use `scope.attachments`.
|
|
194
|
-
|
|
212
|
+
Runner-managed integration failures automatically retain first-party HTTP
|
|
213
|
+
transcripts, process stdout/stderr, and simulated HTTP scenario witnesses.
|
|
214
|
+
Passing attempts discard this prepared evidence; explicit attachments retain
|
|
215
|
+
their existing behavior.
|
|
216
|
+
|
|
217
|
+
`withFailureArtifacts(resource, prepare)` adds custom evidence preparation.
|
|
218
|
+
The callback receives the owner handle, including for projected resources.
|
|
219
|
+
An `attempt` capture includes the exact work identity, retry attempt, and an
|
|
220
|
+
attachment sink with `witness(...)`. Shared-resource `lifetime` captures use a
|
|
221
|
+
run-scoped attachment sink. Preparation runs before scope cleanup and resource
|
|
222
|
+
disposal, including for passing bodies that may fail during cleanup.
|
|
223
|
+
Lifetime collectors read the complete resource transcript; attempt collectors
|
|
224
|
+
read the current attempt's entries.
|
|
225
|
+
|
|
226
|
+
```ts
|
|
227
|
+
const diagnosticService = withFailureArtifacts(service, async (capture) => {
|
|
228
|
+
await capture.attachments.file(
|
|
229
|
+
{ name: 'service-log', mediaType: 'text/plain' },
|
|
230
|
+
capture.handle.logPath
|
|
231
|
+
);
|
|
232
|
+
});
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
First-party output checkpoints received prefixes during execution. Custom
|
|
236
|
+
collectors run before teardown and cannot recover data after their owner
|
|
237
|
+
crashes. Shared logs keep run attribution; precisely scoped interactions keep
|
|
238
|
+
case and attempt attribution. Collector failures are artifact errors and do
|
|
239
|
+
not prevent resource disposal.
|
|
195
240
|
|
|
196
241
|
Resources may declare finite scenario slots with a default, timing, and allowed
|
|
197
242
|
values. `defineRuntime(...)` lifts slots from its complete dependency graph.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { JsonValue, ReadonlyDeep } from 'type-fest';
|
|
2
|
+
import type { AttemptId, WorkId } from '../engine/identity.ts';
|
|
3
|
+
import type { RuntimeAttachmentArtifact, RuntimeAttachments } from '../engine/runtime-attachment.ts';
|
|
4
|
+
import type { AnyResourceDefinition, Awaitable } from './resource-definition-shape.ts';
|
|
5
|
+
export type SimulationWitnessInput = {
|
|
6
|
+
readonly producedBy: {
|
|
7
|
+
readonly library: string;
|
|
8
|
+
readonly libraryVersion: string;
|
|
9
|
+
};
|
|
10
|
+
readonly simulation: {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly payload: ReadonlyDeep<JsonValue>;
|
|
13
|
+
};
|
|
14
|
+
readonly scenario: string;
|
|
15
|
+
readonly seed: bigint | null;
|
|
16
|
+
readonly runtimeSnapshot: ReadonlyDeep<JsonValue>;
|
|
17
|
+
readonly faultConfiguration: ReadonlyDeep<JsonValue>;
|
|
18
|
+
};
|
|
19
|
+
export type SimulationWitnessArtifact = RuntimeAttachmentArtifact & {
|
|
20
|
+
readonly id: RuntimeAttachmentArtifact['id'] & {
|
|
21
|
+
readonly subtype: 'witness';
|
|
22
|
+
};
|
|
23
|
+
readonly source: 'native';
|
|
24
|
+
};
|
|
25
|
+
export type FailureArtifactAttachments = RuntimeAttachments & {
|
|
26
|
+
readonly witness: (input: SimulationWitnessInput) => Promise<SimulationWitnessArtifact>;
|
|
27
|
+
};
|
|
28
|
+
type FailureSubject = Pick<AnyResourceDefinition, 'acquire' | 'dependencies' | 'dispose' | 'name' | 'requirements' | 'scenarios' | 'scope'>;
|
|
29
|
+
type CaptureHandle<Resource extends FailureSubject> = {
|
|
30
|
+
readonly handle: Awaited<ReturnType<Resource['acquire']>>;
|
|
31
|
+
readonly resource: string;
|
|
32
|
+
readonly scenarios: Readonly<Record<string, string>>;
|
|
33
|
+
readonly signal: AbortSignal;
|
|
34
|
+
};
|
|
35
|
+
type AttemptCapture = {
|
|
36
|
+
readonly kind: 'attempt';
|
|
37
|
+
readonly work: WorkId;
|
|
38
|
+
readonly attempt: AttemptId;
|
|
39
|
+
readonly attachments: FailureArtifactAttachments;
|
|
40
|
+
};
|
|
41
|
+
type LifetimeCapture = {
|
|
42
|
+
readonly kind: 'lifetime';
|
|
43
|
+
readonly attachments: RuntimeAttachments;
|
|
44
|
+
};
|
|
45
|
+
type Capture = AttemptCapture | LifetimeCapture;
|
|
46
|
+
export type ResourceFailureCapture<Resource extends FailureSubject> = Capture & CaptureHandle<Resource>;
|
|
47
|
+
export declare function withFailureArtifacts<Resource extends FailureSubject>(resource: Resource, prepare: (capture: ResourceFailureCapture<Resource>) => Awaitable<void>): Resource;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=failure-artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-artifacts.d.ts","sourceRoot":"","sources":["../../../../source/resources/failure-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrG,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAEvF,MAAM,MAAM,sBAAsB,GAAG;IACjC,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;KAAE,CAAC;IACpF,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;KAAE,CAAC;IAC3F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAClD,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;CACxD,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,yBAAyB,GAAG;IAChE,QAAQ,CAAC,EAAE,EAAE,yBAAyB,CAAC,IAAI,CAAC,GAAG;QAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;KAAE,CAAC;IAChF,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;CAC7B,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,GAAG;IAC1D,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC3F,CAAC;AACF,KAAK,cAAc,GAAG,IAAI,CACtB,qBAAqB,EACrB,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,OAAO,CAC3F,CAAC;AAEF,KAAK,aAAa,CAAC,QAAQ,SAAS,cAAc,IAAI;IAClD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAChC,CAAC;AACF,KAAK,cAAc,GAAG;IAClB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;CACpD,CAAC;AACF,KAAK,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;CAAE,CAAC;AAChG,KAAK,OAAO,GAAG,cAAc,GAAG,eAAe,CAAC;AAChD,MAAM,MAAM,sBAAsB,CAAC,QAAQ,SAAS,cAAc,IAAI,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;AAIxG,wBAAgB,oBAAoB,CAAC,QAAQ,SAAS,cAAc,EAChE,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,GACxE,QAAQ,CA8BV;AAED"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const preparationKey = Symbol.for('@overkill-dev/resource-failure-preparation/v1');
|
|
2
|
+
export function withFailureArtifacts(resource, prepare) {
|
|
3
|
+
const previous = Reflect.get(resource, preparationKey);
|
|
4
|
+
return Object.freeze({
|
|
5
|
+
...resource,
|
|
6
|
+
async [preparationKey](capture) {
|
|
7
|
+
const callbacks = [
|
|
8
|
+
async function preparePrevious() {
|
|
9
|
+
if (typeof previous === 'function') {
|
|
10
|
+
await Reflect.apply(previous, undefined, [capture]);
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
async function prepareCurrent() {
|
|
14
|
+
await prepare(capture);
|
|
15
|
+
}
|
|
16
|
+
];
|
|
17
|
+
const failures = [];
|
|
18
|
+
for (const callback of callbacks) {
|
|
19
|
+
const [result] = await Promise.allSettled([callback()]);
|
|
20
|
+
if (result.status === 'rejected') {
|
|
21
|
+
failures.push(result.reason);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (failures.length === 1 && failures[0] instanceof Error) {
|
|
25
|
+
throw failures[0];
|
|
26
|
+
}
|
|
27
|
+
if (failures.length > 0) {
|
|
28
|
+
throw new AggregateError(failures, 'Resource failure artifact preparation failed.');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=failure-artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-artifacts.js","sourceRoot":"","sources":["../../../../source/resources/failure-artifacts.ts"],"names":[],"mappings":"AAyCA,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;AAEnF,MAAM,UAAU,oBAAoB,CAChC,QAAkB,EAClB,OAAuE;IAEvE,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,GAAG,QAAQ;QACX,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,OAAyC;YAC5D,MAAM,SAAS,GAAG;gBACd,KAAK,UAAU,eAAe;oBAC1B,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;wBACjC,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAE,OAAO,CAAE,CAAC,CAAC;oBAC1D,CAAC;gBACL,CAAC;gBACD,KAAK,UAAU,cAAc;oBACzB,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC3B,CAAC;aACJ,CAAC;YACF,MAAM,QAAQ,GAAc,EAAE,CAAC;YAC/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC/B,MAAM,CAAE,MAAM,CAAE,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAE,QAAQ,EAAE,CAAE,CAAC,CAAC;gBAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC/B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjC,CAAC;YACL,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC;gBACxD,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,+CAA+C,CAAC,CAAC;YACxF,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function createHttpRequestAttribution() {
|
|
2
|
+
const requests = new Map();
|
|
3
|
+
return {
|
|
4
|
+
remember(identity, scope, request) {
|
|
5
|
+
requests.set(identity, [...requests.get(identity) ?? [], { scope, undiciRequest: request }]);
|
|
6
|
+
},
|
|
7
|
+
take(identity) {
|
|
8
|
+
const pending = requests.get(identity) ?? [];
|
|
9
|
+
const first = pending[0];
|
|
10
|
+
if (first === undefined) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
const ambiguous = pending.some(function differentScope(request) {
|
|
14
|
+
return request.scope !== first.scope;
|
|
15
|
+
});
|
|
16
|
+
requests.set(identity, pending.slice(1).map(function retainedScope(request) {
|
|
17
|
+
return ambiguous ? { scope: null, undiciRequest: null } : request;
|
|
18
|
+
}));
|
|
19
|
+
return ambiguous ? { scope: null, undiciRequest: null } : first;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=http-request-attribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-request-attribution.js","sourceRoot":"","sources":["../../../../source/resources/http-request-attribution.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,4BAA4B;IACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0C,CAAC;IACnE,OAAO;QACH,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO;YAC7B,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,CAAE,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,CAAC,QAAQ;YACT,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,cAAc,CAAC,OAAO;gBAC1D,OAAO,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;YACzC,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,GAAG,CACR,QAAQ,EACR,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,aAAa,CAAC,OAAO;gBAC/C,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACtE,CAAC,CAAC,CACL,CAAC;YACF,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACpE,CAAC;KACJ,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { createFailureArtifactStream } from "../attachments/failure-artifact-stream.js";
|
|
2
|
+
import { currentResourceFailureContext, attemptFailureContext, transcriptAttempt } from "../attachments/resource-failure-context.js";
|
|
3
|
+
import { observeTranscriptEntries, httpTranscriptArtifactEntry } from "@overkill-dev/simulation/transcript";
|
|
4
|
+
export function observeHttpFailureArtifacts(name, view) {
|
|
5
|
+
const currentContext = currentResourceFailureContext();
|
|
6
|
+
if (currentContext === null) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
const failureContext = currentContext;
|
|
10
|
+
const streams = new Map();
|
|
11
|
+
let failure = null;
|
|
12
|
+
function appendEntry(entry, scope) {
|
|
13
|
+
const identity = transcriptAttempt(scope);
|
|
14
|
+
const owner = identity === null ? failureContext : attemptFailureContext(name, identity.work, identity.attempt);
|
|
15
|
+
const stream = streams.get(scope) ??
|
|
16
|
+
createFailureArtifactStream(owner, 'instrumented', 'http-transcript', 'application/x-ndjson');
|
|
17
|
+
if (stream === null) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
streams.set(scope, stream);
|
|
21
|
+
stream.write(`${JSON.stringify(httpTranscriptArtifactEntry(entry))}\n`);
|
|
22
|
+
}
|
|
23
|
+
const stop = observeTranscriptEntries(view, function captureEntry(entry, scope) {
|
|
24
|
+
try {
|
|
25
|
+
appendEntry(entry, scope);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
failure = new Error('HTTP transcript capture failed.', { cause: error });
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return {
|
|
32
|
+
async close() {
|
|
33
|
+
stop();
|
|
34
|
+
await Promise.all(Array.from(streams.values(), async function closeHttpCapture(stream) {
|
|
35
|
+
return stream.close();
|
|
36
|
+
}));
|
|
37
|
+
if (failure !== null) {
|
|
38
|
+
throw failure;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=local-http-failure-capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-http-failure-capture.js","sourceRoot":"","sources":["../../../../source/resources/local-http-failure-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAA8B,MAAM,2CAA2C,CAAC;AACpH,OAAO,EACH,6BAA6B,EAC7B,qBAAqB,EACrB,iBAAiB,EACpB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACH,wBAAwB,EACxB,2BAA2B,EAG9B,MAAM,qCAAkD,CAAC;AAG1D,MAAM,UAAU,2BAA2B,CAAC,IAAY,EAAE,IAA6B;IACnF,MAAM,cAAc,GAAG,6BAA6B,EAAE,CAAC;IACvD,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,cAAc,GAAG,cAAc,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiD,CAAC;IACzE,IAAI,OAAO,GAAiB,IAAI,CAAC;IACjC,SAAS,WAAW,CAChB,KAAwD,EACxD,KAA6B;QAE7B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7B,2BAA2B,CAAC,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;QAClG,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,EAAE,SAAS,YAAY,CAAC,KAAK,EAAE,KAAK;QAC1E,IAAI,CAAC;YACD,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,OAAO,GAAG,IAAI,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO;QACH,KAAK,CAAC,KAAK;YACP,IAAI,EAAE,CAAC;YACP,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,UAAU,gBAAgB,CAAC,MAAM;gBACjF,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC,CAAC;YACJ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACnB,MAAM,OAAO,CAAC;YAClB,CAAC;QACL,CAAC;KACJ,CAAC;AACN,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-http-service-resource.d.ts","sourceRoot":"","sources":["../../../../source/resources/local-http-service-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,cAAc,EACtB,MAAM,qCAAkD,CAAC;
|
|
1
|
+
{"version":3,"file":"local-http-service-resource.d.ts","sourceRoot":"","sources":["../../../../source/resources/local-http-service-resource.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { captureErrorHttpTranscript, emptyTranscriptView } from "@overkill-dev/simulation/transcript";
|
|
2
|
+
import { observeHttpFailureArtifacts } from "./local-http-failure-capture.js";
|
|
2
3
|
import { defineLocalServiceResource, isProjectedLocalServiceScope } from "./local-service-resource.js";
|
|
3
4
|
import { observeLocalHttpServer } from "./local-http-transcript-observer.js";
|
|
4
5
|
function serverEndpoint(server, host) {
|
|
@@ -64,8 +65,16 @@ function customTranscript(policy, server) {
|
|
|
64
65
|
return captureErrorHttpTranscript(error);
|
|
65
66
|
}
|
|
66
67
|
}
|
|
68
|
+
function serviceTranscript(server, baseUrl, policy, scope) {
|
|
69
|
+
if (policy === null) {
|
|
70
|
+
const observer = observeLocalHttpServer(server, baseUrl, scope === 'per-case' ? 'attempt' : 'lifetime');
|
|
71
|
+
return { view: observer.transcript, observer };
|
|
72
|
+
}
|
|
73
|
+
return { view: customTranscript(policy, server), observer: null };
|
|
74
|
+
}
|
|
67
75
|
function localHttpDefinition(input, policy) {
|
|
68
76
|
const observers = new WeakMap();
|
|
77
|
+
const captures = new WeakMap();
|
|
69
78
|
return {
|
|
70
79
|
name: input.name,
|
|
71
80
|
scope: input.scope,
|
|
@@ -78,14 +87,14 @@ function localHttpDefinition(input, policy) {
|
|
|
78
87
|
async ready(server, context) {
|
|
79
88
|
await listen(server, context.address);
|
|
80
89
|
const endpoint = serverEndpoint(server, context.address.host);
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
90
|
+
const { view, observer } = serviceTranscript(server, `http://${endpoint.host}:${endpoint.port}`, policy, input.scope);
|
|
91
|
+
if (observer !== null) {
|
|
92
|
+
observers.set(server, observer);
|
|
93
|
+
}
|
|
94
|
+
const capture = policy?.kind === 'disabled' ? null : observeHttpFailureArtifacts(input.name, view);
|
|
95
|
+
if (capture !== null) {
|
|
96
|
+
captures.set(server, capture);
|
|
87
97
|
}
|
|
88
|
-
const view = transcript?.transcript ?? customTranscript(policy ?? { kind: 'disabled' }, server);
|
|
89
98
|
return withTranscript(input.handle(localHttpServiceHandle(endpoint, view), server, context), view);
|
|
90
99
|
},
|
|
91
100
|
async dispose(server, context) {
|
|
@@ -95,6 +104,8 @@ function localHttpDefinition(input, policy) {
|
|
|
95
104
|
finally {
|
|
96
105
|
observers.get(server)?.dispose();
|
|
97
106
|
observers.delete(server);
|
|
107
|
+
await captures.get(server)?.close();
|
|
108
|
+
captures.delete(server);
|
|
98
109
|
}
|
|
99
110
|
await input.dispose(server, context);
|
|
100
111
|
}
|