semantifold 0.1.0 → 0.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/README.md +13 -6
- package/build/index.d.ts +32 -3
- package/build/index.d.ts.map +1 -1
- package/build/index.js +99 -4
- package/build/src/acceptance.d.ts +22 -0
- package/build/src/acceptance.d.ts.map +1 -0
- package/build/src/acceptance.js +339 -0
- package/build/src/array.d.ts +7 -0
- package/build/src/array.d.ts.map +1 -0
- package/build/src/array.js +18 -0
- package/build/src/artifact-path.d.ts +13 -0
- package/build/src/artifact-path.d.ts.map +1 -0
- package/build/src/artifact-path.js +30 -0
- package/build/src/artifacts.d.ts +7 -0
- package/build/src/artifacts.d.ts.map +1 -0
- package/build/src/artifacts.js +389 -0
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +10 -2
- package/build/src/backends/index.d.ts.map +1 -1
- package/build/src/backends/index.js +19 -37
- package/build/src/backends/python.d.ts +8 -0
- package/build/src/backends/python.d.ts.map +1 -0
- package/build/src/backends/python.js +162 -0
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +2 -1
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +9 -6
- package/build/src/binary-mapping.d.ts +32 -0
- package/build/src/binary-mapping.d.ts.map +1 -0
- package/build/src/binary-mapping.js +285 -0
- package/build/src/diagnostic.d.ts +36 -4
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +42 -3
- package/build/src/frontends/index.d.ts.map +1 -1
- package/build/src/frontends/index.js +5 -23
- package/build/src/frontends/python.d.ts +14 -0
- package/build/src/frontends/python.d.ts.map +1 -0
- package/build/src/frontends/python.js +615 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +6 -1
- package/build/src/language-registry.d.ts +113 -0
- package/build/src/language-registry.d.ts.map +1 -0
- package/build/src/language-registry.js +372 -0
- package/build/src/mapping.js +3 -2
- package/build/src/semantic/location.d.ts +7 -0
- package/build/src/semantic/location.d.ts.map +1 -1
- package/build/src/semantic/location.js +10 -1
- package/build/src/semantic/provenance.js +3 -3
- package/build/src/semantic/types.d.ts +399 -2
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +110 -2
- package/build/src/subprocess.d.ts +29 -0
- package/build/src/subprocess.d.ts.map +1 -0
- package/build/src/subprocess.js +207 -0
- package/build/src/timeout.d.ts +8 -0
- package/build/src/timeout.d.ts.map +1 -0
- package/build/src/timeout.js +11 -0
- package/build/src/toolchains.d.ts +83 -0
- package/build/src/toolchains.d.ts.map +1 -0
- package/build/src/toolchains.js +413 -0
- package/docs/architecture.md +7 -3
- package/docs/language-support.md +25 -4
- package/docs/parser-qualification.md +70 -0
- package/docs/source-maps.md +31 -4
- package/docs/testing.md +21 -2
- package/index.js +109 -4
- package/package.json +4 -2
- package/src/acceptance.js +359 -0
- package/src/array.js +19 -0
- package/src/artifact-path.js +34 -0
- package/src/artifacts.js +420 -0
- package/src/backends/identifiers.js +9 -1
- package/src/backends/index.js +16 -32
- package/src/backends/python.js +175 -0
- package/src/backends/scalars.js +1 -0
- package/src/backends/shared.js +8 -5
- package/src/binary-mapping.js +305 -0
- package/src/diagnostic.js +34 -2
- package/src/frontends/index.js +5 -20
- package/src/frontends/python.js +689 -0
- package/src/frontends/scalars.js +5 -0
- package/src/language-registry.js +403 -0
- package/src/mapping.js +2 -1
- package/src/semantic/location.js +10 -0
- package/src/semantic/provenance.js +2 -2
- package/src/semantic/types.js +124 -1
- package/src/subprocess.js +203 -0
- package/src/timeout.js +12 -0
- package/src/toolchains.js +444 -0
- package/tsconfig.json +1 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Semantifold
|
|
2
2
|
|
|
3
|
-
Semantifold is an early language-neutral semantic code toolkit. This first release candidate proves a deliberately small end-to-end slice: parse equivalent PHP, Ruby, JavaScript with JSDoc, TypeScript, and
|
|
3
|
+
Semantifold is an early language-neutral semantic code toolkit. This first release candidate proves a deliberately small end-to-end slice: parse equivalent PHP, Ruby, JavaScript with JSDoc, TypeScript, Java, and strictly annotated Python programs into one typed semantic representation, then generate and genuinely execute equivalent programs in every target language.
|
|
4
4
|
|
|
5
5
|
## Current API
|
|
6
6
|
|
|
@@ -31,13 +31,19 @@ const artifact = generateArtifact({language: "java", module})
|
|
|
31
31
|
const original = originalPositionFor(artifact.mapping, {offset: artifact.code.indexOf("label")})
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Generated output always uses LF. Exact original content, including LF, CRLF, lone CR, and astral UTF-16 coordinates, remains in the source registry and `sourcesContent`. Optional inline/external `sourceMappingURL` directives apply only to JavaScript and TypeScript; PHP, Ruby, and
|
|
34
|
+
Generated output always uses LF. Exact original content, including LF, CRLF, lone CR, and astral UTF-16 coordinates, remains in the source registry and `sourcesContent`. Optional inline/external `sourceMappingURL` directives apply only to JavaScript and TypeScript; PHP, Ruby, Java, and Python use the same rich/v3 sidecars without foreign comments. See [source provenance and mappings](docs/source-maps.md) for schemas, lookups, composition, diagnostics, directives, and compatibility.
|
|
35
35
|
|
|
36
|
-
`supportedLanguages`
|
|
36
|
+
`supportedLanguages` is the immutable registry-derived list `php`, `ruby`, `javascript`, `typescript`, `java`, and `python`. `languageCapabilities` exposes each ID's independent frontend, text-backend, binary-backend, application-backend, and interoperability roles together with artifact multiplicity, round-trip, mapping, acceptance-stage, and toolchain declarations. Unknown IDs use `UNSUPPORTED_LANGUAGE`; a registered ID missing a requested role uses `UNSUPPORTED_ROLE`; an existing backend that cannot represent a semantic module uses `UNSUPPORTED_CAPABILITY`.
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
`generateArtifactSet` is the additive single-module artifact API. Original text targets return an entry artifact with the exact legacy bytes and rich/v3 mappings; an external JavaScript-family map directive also returns the referenced serialized mapping sidecar. `createGeneratedArtifactSet` validates future multi-file text, binary, mixed loader/binary, and application shapes transactionally: paths are ordered, unique, safe relative POSIX paths with no file/directory prefix collisions; content is explicitly text or bytes; media type, role, generated ownership, and provenance are required; and exactly one artifact has role `entry`. Binary content is held privately and returned as a fresh detached byte view on every read, so caller mutation cannot change validated bytes or their provenance. Generated helper files do not create semantic modules and are not Task 010 projects.
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
Binary/resource provenance uses `SemantifoldByteMapping` v1 through `createByteMapping`, `parseByteMapping`, and `stringifyByteMapping`. Generated ranges are ordered, non-overlapping, half-open byte offsets with semantic identities or explicit synthetic reasons. They are never interpreted as UTF-16 positions.
|
|
41
|
+
|
|
42
|
+
`discoverCanonicalToolchain` and `discoverToolchain` resolve an exact executable from a configured absolute override or one unambiguous canonical PATH command and capture its version. `runAcceptanceStages` materializes a validated artifact set in a unique temporary directory and runs applicable `parse`, `generate`, `compile`, `link`, `validate`, `instantiate`, and `execute` stages with exact argument arrays, a deterministic locale/timezone, bounded per-stage timeouts, captured output, no shell, and normalized stage diagnostics. The canonical overrides are `SEMANTIFOLD_PHP`, `SEMANTIFOLD_RUBY`, `SEMANTIFOLD_NODE`, `SEMANTIFOLD_TSC`, `SEMANTIFOLD_JAVAC`, `SEMANTIFOLD_JAVA`, and `SEMANTIFOLD_PYTHON`; none of these APIs installs or downloads a tool.
|
|
43
|
+
|
|
44
|
+
This is not general-purpose support for any of the six languages. The implemented subset is a two-parameter function using explicit integer, boolean, or string types; explicitly typed, initialized scalar locals; plain assignment to mutable locals; ordered lexical blocks; strictly boolean, nested `if` statements with optional `else`; explicit scalar returns; typed scalar operations; a two-argument function call; and sequenced printing. Operations cover integer add/subtract/multiply/negate and ordering, Boolean not/short-circuit and/or, same-type scalar value equality/inequality, and string concatenation. Non-void functions must return on every reachable path, and statements after an unconditional return are rejected. See [language support](docs/language-support.md) before using it on other code.
|
|
45
|
+
|
|
46
|
+
Semantic integers must be JavaScript-safe mathematical integers and have one unsigned zero. Generated JavaScript and TypeScript canonically render scalar output for modules containing negation or multiplication so IEEE-754 `-0` is observed as `0` without folding or rewriting the semantic operation tree. Java generation narrows literals and compile-time-known arithmetic trees further to signed 32-bit `int`; general runtime-overflow equivalence remains outside the portable contract. Strings are parser-decoded Unicode scalar values and are re-escaped for each target without preserving source quotes or escapes. Equality never coerces and never applies to objects or collections. Division, remainder, exponentiation, bitwise/shift/update/compound operations, ternary/nullish forms, casts/assertions, truthiness, implicit returns, loops, switches, exceptions, and constant folding are unsupported. JavaScript and TypeScript functions must be synchronous and non-generator; Ruby annotations must be immediately associated comment blocks; and PHP accepts only an optional exact `declare(strict_types=1)`. Python requires exact `int`/`bool`/`str` annotations on parameters, returns, and initialized locals, treats `bool` and `int` as distinct, and rejects dynamic forms; its exact adjacent `# @semantifold-immutable` carrier preserves immutable-local intent. Frontends reject syntax instead of dropping receivers, arguments, parameters, declarations, or statements. Before emission, each backend recursively validates blocks, flow, scalar types, typed operations, modeled bindings, mutability, target identifiers, and literal representability.
|
|
41
47
|
|
|
42
48
|
## Development
|
|
43
49
|
|
|
@@ -55,7 +61,7 @@ npm ls --omit=dev --all
|
|
|
55
61
|
npm pack --dry-run --json
|
|
56
62
|
```
|
|
57
63
|
|
|
58
|
-
The execution specs require PHP CLI, Ruby, TypeScript, and a Java JDK in addition to Node; missing tools are failures. The canonical container provides them: `docker compose up --build --detach`, followed by `docker compose exec dev npm ci` and the commands above.
|
|
64
|
+
The execution specs require PHP CLI, Ruby, Python 3, TypeScript, and a Java JDK in addition to Node; missing tools are failures. The canonical container provides them: `docker compose up --build --detach`, followed by `docker compose exec dev npm ci` and the commands above.
|
|
59
65
|
|
|
60
66
|
## Documentation
|
|
61
67
|
|
|
@@ -63,6 +69,7 @@ The execution specs require PHP CLI, Ruby, TypeScript, and a Java JDK in additio
|
|
|
63
69
|
- [Architecture](docs/architecture.md)
|
|
64
70
|
- [Coding standards](docs/coding-standards.md)
|
|
65
71
|
- [Language support](docs/language-support.md)
|
|
72
|
+
- [Parser qualification](docs/parser-qualification.md)
|
|
66
73
|
- [Testing](docs/testing.md)
|
|
67
74
|
- [Source provenance and mappings](docs/source-maps.md)
|
|
68
75
|
- [Language feature roadmap](https://github.com/kaspernj/semantifold/blob/master/todo/README.md)
|
package/build/index.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
import { SemantifoldDiagnostic } from "./src/diagnostic.js";
|
|
2
|
+
export { SemantifoldDiagnostic };
|
|
3
|
+
export { languageCapabilities, supportedLanguages } from "./src/language-registry.js";
|
|
4
|
+
export { createGeneratedArtifactSet } from "./src/artifacts.js";
|
|
5
|
+
export { createByteMapping, parseByteMapping, stringifyByteMapping } from "./src/binary-mapping.js";
|
|
6
|
+
export { canonicalToolchains, discoverCanonicalToolchain, discoverToolchain } from "./src/toolchains.js";
|
|
7
|
+
export { runAcceptanceStages } from "./src/acceptance.js";
|
|
2
8
|
export { getNodeProvenance, getSymbolProvenance } from "./src/semantic/provenance.js";
|
|
3
9
|
export { primaryLocation } from "./src/semantic/provenance.js";
|
|
4
10
|
export { composeMappings, composeSourceMaps, generatedPositionFor, mappingFromSourceMap, originalPositionFor, parseMapping, remapDiagnostic, remapLocation, spansForNode, spansForSymbol, stringifyMapping, toSourceMapV3 } from "./src/mapping.js";
|
|
5
|
-
/** @type {readonly import("./src/semantic/types.js").SemanticLanguage[]} */
|
|
6
|
-
export declare const supportedLanguages: readonly import("./src/semantic/types.js").SemanticLanguage[];
|
|
7
11
|
/**
|
|
8
12
|
* Parses source into Semantifold's shared semantic representation.
|
|
9
13
|
* @param {object} input - Parse request.
|
|
@@ -51,4 +55,29 @@ export declare function generateArtifact(input: {
|
|
|
51
55
|
language?: import("./src/semantic/types.js").SemanticLanguage;
|
|
52
56
|
}[];
|
|
53
57
|
}): import("./src/semantic/types.js").GeneratedArtifact;
|
|
58
|
+
/**
|
|
59
|
+
* Generates a deterministic artifact set for one semantic module.
|
|
60
|
+
* @param {object} input - Artifact-set generation request.
|
|
61
|
+
* @param {string} input.language - Registered target language or platform ID.
|
|
62
|
+
* @param {import("./src/semantic/types.js").SemanticModule} input.module - Semantic module.
|
|
63
|
+
* @param {"text" | "binary" | "application"} [input.role] - Requested backend artifact role.
|
|
64
|
+
* @param {string} [input.filename] - Safe output path for a text target.
|
|
65
|
+
* @param {"none" | "external" | "inline"} [input.mapDirective] - JavaScript-family map directive.
|
|
66
|
+
* @param {string} [input.sourceMapFilename] - External map filename.
|
|
67
|
+
* @param {{filename: string, content: string, language?: import("./src/semantic/types.js").SemanticLanguage}[]} [input.sources] - Original sources.
|
|
68
|
+
* @returns {import("./src/semantic/types.js").GeneratedArtifactSet} Complete generated set.
|
|
69
|
+
*/
|
|
70
|
+
export declare function generateArtifactSet(input: {
|
|
71
|
+
language: string;
|
|
72
|
+
module: import("./src/semantic/types.js").SemanticModule;
|
|
73
|
+
role?: "text" | "binary" | "application";
|
|
74
|
+
filename?: string;
|
|
75
|
+
mapDirective?: "none" | "external" | "inline";
|
|
76
|
+
sourceMapFilename?: string;
|
|
77
|
+
sources?: {
|
|
78
|
+
filename: string;
|
|
79
|
+
content: string;
|
|
80
|
+
language?: import("./src/semantic/types.js").SemanticLanguage;
|
|
81
|
+
}[];
|
|
82
|
+
}): import("./src/semantic/types.js").GeneratedArtifactSet;
|
|
54
83
|
//# sourceMappingURL=index.d.ts.map
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":"AAKA,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":"AAKA,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAA;AAKzD,OAAO,EAAC,qBAAqB,EAAC,CAAA;AAC9B,OAAO,EAAC,oBAAoB,EAAE,kBAAkB,EAAC,MAAM,4BAA4B,CAAA;AACnF,OAAO,EAAC,0BAA0B,EAAC,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAC,MAAM,yBAAyB,CAAA;AACjG,OAAO,EAAC,mBAAmB,EAAE,0BAA0B,EAAE,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AACtG,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,8BAA8B,CAAA;AACnF,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,aAAa,EACd,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,KAAK,EALxB;IAAsB,QAAQ,EAAtB,MAAM,CACd;IAAkE,QAAQ,EAAlE,OAAO,yBAAyB,EAAE,gBAAgB,CAC1D;IAAsB,MAAM,EAApB,MAAM,CACd;CAEwB,GAFd,OAAO,yBAAyB,EAAE,cAAc,CAI5D;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAJ3B;IAAkE,QAAQ,EAAlE,OAAO,yBAAyB,EAAE,gBAAgB,CAC1D;IAAgE,MAAM,EAA9D,OAAO,yBAAyB,EAAE,cAAc,CACxD;CAE2B,GAFjB,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EARnC;IAAkE,QAAQ,EAAlE,OAAO,yBAAyB,EAAE,gBAAgB,CAC1D;IAAgE,MAAM,EAA9D,OAAO,yBAAyB,EAAE,cAAc,CACxD;IAAuB,QAAQ,AAA/B,CACA,EADQ,MAAM,CACd;IAA+C,YAAY,AAA3D,CACA,EADQ,MAAM,GAAG,UAAU,GAAG,QAAQ,CACtC;IAAuB,iBAAiB,AAAxC,CACA,EADQ,MAAM,CACd;IAAqH,OAAO,AAA5H,CACA,EADQ;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,yBAAyB,EAAE,gBAAgB,CAAA;KAAC,EAAE,CAC5G;CAEmC,GAFzB,OAAO,yBAAyB,EAAE,iBAAiB,CAI/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EATtC;IAAsB,QAAQ,EAAtB,MAAM,CACd;IAAgE,MAAM,EAA9D,OAAO,yBAAyB,EAAE,cAAc,CACxD;IAAkD,IAAI,AAAtD,CACA,EADQ,MAAM,GAAG,QAAQ,GAAG,aAAa,CACzC;IAAuB,QAAQ,AAA/B,CACA,EADQ,MAAM,CACd;IAA+C,YAAY,AAA3D,CACA,EADQ,MAAM,GAAG,UAAU,GAAG,QAAQ,CACtC;IAAuB,iBAAiB,AAAxC,CACA,EADQ,MAAM,CACd;IAAqH,OAAO,AAA5H,CACA,EADQ;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,yBAAyB,EAAE,gBAAgB,CAAA;KAAC,EAAE,CAC5G;CAEsC,GAF5B,OAAO,yBAAyB,EAAE,oBAAoB,CAsFlE"}
|
package/build/index.js
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import { parseSource } from "./src/frontends/index.js";
|
|
3
3
|
import { generateArtifactSource, generateSource } from "./src/backends/index.js";
|
|
4
|
-
|
|
4
|
+
import { createGeneratedArtifactSet as constructArtifactSet } from "./src/artifacts.js";
|
|
5
|
+
import { SemantifoldDiagnostic } from "./src/diagnostic.js";
|
|
6
|
+
import { languageRegistry } from "./src/language-registry.js";
|
|
7
|
+
const artifactBackendRoles = new Set(["text", "binary", "application"]);
|
|
8
|
+
export { SemantifoldDiagnostic };
|
|
9
|
+
export { languageCapabilities, supportedLanguages } from "./src/language-registry.js";
|
|
10
|
+
export { createGeneratedArtifactSet } from "./src/artifacts.js";
|
|
11
|
+
export { createByteMapping, parseByteMapping, stringifyByteMapping } from "./src/binary-mapping.js";
|
|
12
|
+
export { canonicalToolchains, discoverCanonicalToolchain, discoverToolchain } from "./src/toolchains.js";
|
|
13
|
+
export { runAcceptanceStages } from "./src/acceptance.js";
|
|
5
14
|
export { getNodeProvenance, getSymbolProvenance } from "./src/semantic/provenance.js";
|
|
6
15
|
export { primaryLocation } from "./src/semantic/provenance.js";
|
|
7
16
|
export { composeMappings, composeSourceMaps, generatedPositionFor, mappingFromSourceMap, originalPositionFor, parseMapping, remapDiagnostic, remapLocation, spansForNode, spansForSymbol, stringifyMapping, toSourceMapV3 } from "./src/mapping.js";
|
|
8
|
-
/** @type {readonly import("./src/semantic/types.js").SemanticLanguage[]} */
|
|
9
|
-
export const supportedLanguages = Object.freeze(["php", "ruby", "javascript", "typescript", "java"]);
|
|
10
17
|
/**
|
|
11
18
|
* Parses source into Semantifold's shared semantic representation.
|
|
12
19
|
* @param {object} input - Parse request.
|
|
@@ -42,4 +49,92 @@ export function generate(input) {
|
|
|
42
49
|
export function generateArtifact(input) {
|
|
43
50
|
return generateArtifactSource(input);
|
|
44
51
|
}
|
|
45
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Generates a deterministic artifact set for one semantic module.
|
|
54
|
+
* @param {object} input - Artifact-set generation request.
|
|
55
|
+
* @param {string} input.language - Registered target language or platform ID.
|
|
56
|
+
* @param {import("./src/semantic/types.js").SemanticModule} input.module - Semantic module.
|
|
57
|
+
* @param {"text" | "binary" | "application"} [input.role] - Requested backend artifact role.
|
|
58
|
+
* @param {string} [input.filename] - Safe output path for a text target.
|
|
59
|
+
* @param {"none" | "external" | "inline"} [input.mapDirective] - JavaScript-family map directive.
|
|
60
|
+
* @param {string} [input.sourceMapFilename] - External map filename.
|
|
61
|
+
* @param {{filename: string, content: string, language?: import("./src/semantic/types.js").SemanticLanguage}[]} [input.sources] - Original sources.
|
|
62
|
+
* @returns {import("./src/semantic/types.js").GeneratedArtifactSet} Complete generated set.
|
|
63
|
+
*/
|
|
64
|
+
export function generateArtifactSet(input) {
|
|
65
|
+
if (!input || typeof input != "object" || Array.isArray(input) || Object.getPrototypeOf(input) != Object.prototype) {
|
|
66
|
+
throw new SemantifoldDiagnostic({
|
|
67
|
+
code: "INVALID_ARTIFACT_SET",
|
|
68
|
+
language: "artifact",
|
|
69
|
+
message: "Artifact-set generation requires a request object."
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const { filename, language, mapDirective, module, role = "text", sourceMapFilename, sources } = input;
|
|
73
|
+
if (typeof language != "string" || language.length == 0) {
|
|
74
|
+
throw new SemantifoldDiagnostic({
|
|
75
|
+
code: "INVALID_ARTIFACT_SET",
|
|
76
|
+
language: "artifact",
|
|
77
|
+
message: "Artifact-set generation requires a non-empty string language or target ID."
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (typeof role != "string" || !artifactBackendRoles.has(role)) {
|
|
81
|
+
throw new SemantifoldDiagnostic({
|
|
82
|
+
code: "INVALID_ARTIFACT_SET",
|
|
83
|
+
language,
|
|
84
|
+
message: "Artifact backend role must be 'text', 'binary', or 'application'."
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
if (role == "text") {
|
|
88
|
+
const record = languageRegistry.record(language);
|
|
89
|
+
if (record.artifactMultiplicity == "multiple") {
|
|
90
|
+
const backend = languageRegistry.resolve(language, "textBackend", module?.location);
|
|
91
|
+
return constructArtifactSet(backend({ filename, language, module, sources }));
|
|
92
|
+
}
|
|
93
|
+
const artifact = generateArtifactSource({
|
|
94
|
+
filename,
|
|
95
|
+
language: /** @type {import("./src/semantic/types.js").SemanticLanguage} */ (language),
|
|
96
|
+
mapDirective,
|
|
97
|
+
module,
|
|
98
|
+
sourceMapFilename,
|
|
99
|
+
sources
|
|
100
|
+
});
|
|
101
|
+
/** @type {import("./src/semantic/types.js").GeneratedSetArtifact[]} */
|
|
102
|
+
const artifacts = [{
|
|
103
|
+
content: artifact.code,
|
|
104
|
+
contentKind: "text",
|
|
105
|
+
mediaType: /** @type {string} */ (record.mediaType),
|
|
106
|
+
ownership: "generated",
|
|
107
|
+
path: artifact.filename,
|
|
108
|
+
provenance: {
|
|
109
|
+
kind: "text",
|
|
110
|
+
mapping: artifact.mapping,
|
|
111
|
+
sourceMap: artifact.sourceMap,
|
|
112
|
+
sourceMapFilename: artifact.sourceMapFilename
|
|
113
|
+
},
|
|
114
|
+
role: "entry"
|
|
115
|
+
}];
|
|
116
|
+
if (mapDirective == "external") {
|
|
117
|
+
artifacts.push({
|
|
118
|
+
content: `${JSON.stringify(artifact.sourceMap)}\n`,
|
|
119
|
+
contentKind: "text",
|
|
120
|
+
mediaType: "application/json",
|
|
121
|
+
ownership: "generated",
|
|
122
|
+
path: artifact.sourceMapFilename,
|
|
123
|
+
provenance: {
|
|
124
|
+
kind: "synthetic",
|
|
125
|
+
reason: "Serialized Source Map v3 projection for the generated entry artifact.",
|
|
126
|
+
relatedOrigins: []
|
|
127
|
+
},
|
|
128
|
+
role: "mapping"
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
return constructArtifactSet({
|
|
132
|
+
artifacts,
|
|
133
|
+
target: language
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
const registryRole = role == "binary" ? "binaryBackend" : "applicationBackend";
|
|
137
|
+
const backend = languageRegistry.resolve(language, registryRole, module?.location);
|
|
138
|
+
return constructArtifactSet(backend({ filename, language, module, sources }));
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RSxPQUFPLEVBQUMsMEJBQTBCLElBQUksb0JBQW9CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQTtBQUUzRCxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFBO0FBRXZFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxDQUFBO0FBQzlCLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ25GLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQzdELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQ2pHLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ3RHLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDhCQUE4QixDQUFBO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQTtBQUM1RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixvQkFBb0IsRUFD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QUFPLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQTtBQUM3RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7cGFyc2VTb3VyY2V9IGZyb20gXCIuL3NyYy9mcm9udGVuZHMvaW5kZXguanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUFydGlmYWN0U291cmNlLCBnZW5lcmF0ZVNvdXJjZX0gZnJvbSBcIi4vc3JjL2JhY2tlbmRzL2luZGV4LmpzXCJcbmltcG9ydCB7Y3JlYXRlR2VuZXJhdGVkQXJ0aWZhY3RTZXQgYXMgY29uc3RydWN0QXJ0aWZhY3RTZXR9IGZyb20gXCIuL3NyYy9hcnRpZmFjdHMuanNcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IGZyb20gXCIuL3NyYy9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7bGFuZ3VhZ2VSZWdpc3RyeX0gZnJvbSBcIi4vc3JjL2xhbmd1YWdlLXJlZ2lzdHJ5LmpzXCJcblxuY29uc3QgYXJ0aWZhY3RCYWNrZW5kUm9sZXMgPSBuZXcgU2V0KFtcInRleHRcIiwgXCJiaW5hcnlcIiwgXCJhcHBsaWNhdGlvblwiXSlcblxuZXhwb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9XG5leHBvcnQge2xhbmd1YWdlQ2FwYWJpbGl0aWVzLCBzdXBwb3J0ZWRMYW5ndWFnZXN9IGZyb20gXCIuL3NyYy9sYW5ndWFnZS1yZWdpc3RyeS5qc1wiXG5leHBvcnQge2NyZWF0ZUdlbmVyYXRlZEFydGlmYWN0U2V0fSBmcm9tIFwiLi9zcmMvYXJ0aWZhY3RzLmpzXCJcbmV4cG9ydCB7Y3JlYXRlQnl0ZU1hcHBpbmcsIHBhcnNlQnl0ZU1hcHBpbmcsIHN0cmluZ2lmeUJ5dGVNYXBwaW5nfSBmcm9tIFwiLi9zcmMvYmluYXJ5LW1hcHBpbmcuanNcIlxuZXhwb3J0IHtjYW5vbmljYWxUb29sY2hhaW5zLCBkaXNjb3ZlckNhbm9uaWNhbFRvb2xjaGFpbiwgZGlzY292ZXJUb29sY2hhaW59IGZyb20gXCIuL3NyYy90b29sY2hhaW5zLmpzXCJcbmV4cG9ydCB7cnVuQWNjZXB0YW5jZVN0YWdlc30gZnJvbSBcIi4vc3JjL2FjY2VwdGFuY2UuanNcIlxuZXhwb3J0IHtnZXROb2RlUHJvdmVuYW5jZSwgZ2V0U3ltYm9sUHJvdmVuYW5jZX0gZnJvbSBcIi4vc3JjL3NlbWFudGljL3Byb3ZlbmFuY2UuanNcIlxuZXhwb3J0IHtwcmltYXJ5TG9jYXRpb259IGZyb20gXCIuL3NyYy9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmV4cG9ydCB7XG4gIGNvbXBvc2VNYXBwaW5ncyxcbiAgY29tcG9zZVNvdXJjZU1hcHMsXG4gIGdlbmVyYXRlZFBvc2l0aW9uRm9yLFxuICBtYXBwaW5nRnJvbVNvdXJjZU1hcCxcbiAgb3JpZ2luYWxQb3NpdGlvbkZvcixcbiAgcGFyc2VNYXBwaW5nLFxuICByZW1hcERpYWdub3N0aWMsXG4gIHJlbWFwTG9jYXRpb24sXG4gIHNwYW5zRm9yTm9kZSxcbiAgc3BhbnNGb3JTeW1ib2wsXG4gIHN0cmluZ2lmeU1hcHBpbmcsXG4gIHRvU291cmNlTWFwVjNcbn0gZnJvbSBcIi4vc3JjL21hcHBpbmcuanNcIlxuXG4vKipcbiAqIFBhcnNlcyBzb3VyY2UgaW50byBTZW1hbnRpZm9sZCdzIHNoYXJlZCBzZW1hbnRpYyByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUgdXNlZCBpbiBkaWFnbm9zdGljcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gaW5wdXQubGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gIHJldHVybiBwYXJzZVNvdXJjZShpbnB1dClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGFyZ2V0LWxhbmd1YWdlIHNvdXJjZSBmcm9tIGEgc2hhcmVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIEdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gaW5wdXQubGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBpbnB1dC5tb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBHZW5lcmF0ZWQgc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGUoaW5wdXQpIHtcbiAgcmV0dXJuIGdlbmVyYXRlU291cmNlKGlucHV0KVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHJldXNhYmxlIG91dHB1dCBhcnRpZmFjdCB3aXRoIHJpY2ggYW5kIFNvdXJjZSBNYXAgdjMgbWFwcGluZ3MuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBHZW5lcmF0aW9uIHJlcXVlc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5maWxlbmFtZV0gLSBPdXRwdXQgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge1wibm9uZVwiIHwgXCJleHRlcm5hbFwiIHwgXCJpbmxpbmVcIn0gW2lucHV0Lm1hcERpcmVjdGl2ZV0gLSBKYXZhU2NyaXB0LWZhbWlseSBtYXAgZGlyZWN0aXZlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5zb3VyY2VNYXBGaWxlbmFtZV0gLSBFeHRlcm5hbCBtYXAgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhbmd1YWdlPzogaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX0gW2lucHV0LnNvdXJjZXNdIC0gU291cmNlcyBmb3IgY2FsbGVyLWF1dGhvcmVkIG1vZHVsZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3R9IEdlbmVyYXRlZCBhcnRpZmFjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQXJ0aWZhY3QoaW5wdXQpIHtcbiAgcmV0dXJuIGdlbmVyYXRlQXJ0aWZhY3RTb3VyY2UoaW5wdXQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZGV0ZXJtaW5pc3RpYyBhcnRpZmFjdCBzZXQgZm9yIG9uZSBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBBcnRpZmFjdC1zZXQgZ2VuZXJhdGlvbiByZXF1ZXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0Lmxhbmd1YWdlIC0gUmVnaXN0ZXJlZCB0YXJnZXQgbGFuZ3VhZ2Ugb3IgcGxhdGZvcm0gSUQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBpbnB1dC5tb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge1widGV4dFwiIHwgXCJiaW5hcnlcIiB8IFwiYXBwbGljYXRpb25cIn0gW2lucHV0LnJvbGVdIC0gUmVxdWVzdGVkIGJhY2tlbmQgYXJ0aWZhY3Qgcm9sZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuZmlsZW5hbWVdIC0gU2FmZSBvdXRwdXQgcGF0aCBmb3IgYSB0ZXh0IHRhcmdldC5cbiAqIEBwYXJhbSB7XCJub25lXCIgfCBcImV4dGVybmFsXCIgfCBcImlubGluZVwifSBbaW5wdXQubWFwRGlyZWN0aXZlXSAtIEphdmFTY3JpcHQtZmFtaWx5IG1hcCBkaXJlY3RpdmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lucHV0LnNvdXJjZU1hcEZpbGVuYW1lXSAtIEV4dGVybmFsIG1hcCBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFuZ3VhZ2U/OiBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfVtdfSBbaW5wdXQuc291cmNlc10gLSBPcmlnaW5hbCBzb3VyY2VzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0U2V0fSBDb21wbGV0ZSBnZW5lcmF0ZWQgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBcnRpZmFjdFNldChpbnB1dCkge1xuICBpZiAoIWlucHV0IHx8IHR5cGVvZiBpbnB1dCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoaW5wdXQpIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnB1dCkgIT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJJTlZBTElEX0FSVElGQUNUX1NFVFwiLFxuICAgICAgbGFuZ3VhZ2U6IFwiYXJ0aWZhY3RcIixcbiAgICAgIG1lc3NhZ2U6IFwiQXJ0aWZhY3Qtc2V0IGdlbmVyYXRpb24gcmVxdWlyZXMgYSByZXF1ZXN0IG9iamVjdC5cIlxuICAgIH0pXG4gIH1cbiAgY29uc3Qge2ZpbGVuYW1lLCBsYW5ndWFnZSwgbWFwRGlyZWN0aXZlLCBtb2R1bGUsIHJvbGUgPSBcInRleHRcIiwgc291cmNlTWFwRmlsZW5hbWUsIHNvdXJjZXN9ID0gaW5wdXRcblxuICBpZiAodHlwZW9mIGxhbmd1YWdlICE9IFwic3RyaW5nXCIgfHwgbGFuZ3VhZ2UubGVuZ3RoID09IDApIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiSU5WQUxJRF9BUlRJRkFDVF9TRVRcIixcbiAgICAgIGxhbmd1YWdlOiBcImFydGlmYWN0XCIsXG4gICAgICBtZXNzYWdlOiBcIkFydGlmYWN0LXNldCBnZW5lcmF0aW9uIHJlcXVpcmVzIGEgbm9uLWVtcHR5IHN0cmluZyBsYW5ndWFnZSBvciB0YXJnZXQgSUQuXCJcbiAgICB9KVxuICB9XG4gIGlmICh0eXBlb2Ygcm9sZSAhPSBcInN0cmluZ1wiIHx8ICFhcnRpZmFjdEJhY2tlbmRSb2xlcy5oYXMocm9sZSkpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiSU5WQUxJRF9BUlRJRkFDVF9TRVRcIixcbiAgICAgIGxhbmd1YWdlLFxuICAgICAgbWVzc2FnZTogXCJBcnRpZmFjdCBiYWNrZW5kIHJvbGUgbXVzdCBiZSAndGV4dCcsICdiaW5hcnknLCBvciAnYXBwbGljYXRpb24nLlwiXG4gICAgfSlcbiAgfVxuXG4gIGlmIChyb2xlID09IFwidGV4dFwiKSB7XG4gICAgY29uc3QgcmVjb3JkID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZWNvcmQobGFuZ3VhZ2UpXG5cbiAgICBpZiAocmVjb3JkLmFydGlmYWN0TXVsdGlwbGljaXR5ID09IFwibXVsdGlwbGVcIikge1xuICAgICAgY29uc3QgYmFja2VuZCA9IGxhbmd1YWdlUmVnaXN0cnkucmVzb2x2ZShsYW5ndWFnZSwgXCJ0ZXh0QmFja2VuZFwiLCBtb2R1bGU/LmxvY2F0aW9uKVxuXG4gICAgICByZXR1cm4gY29uc3RydWN0QXJ0aWZhY3RTZXQoYmFja2VuZCh7ZmlsZW5hbWUsIGxhbmd1YWdlLCBtb2R1bGUsIHNvdXJjZXN9KSlcbiAgICB9XG4gICAgY29uc3QgYXJ0aWZhY3QgPSBnZW5lcmF0ZUFydGlmYWN0U291cmNlKHtcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgbGFuZ3VhZ2U6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gKi8gKGxhbmd1YWdlKSxcbiAgICAgIG1hcERpcmVjdGl2ZSxcbiAgICAgIG1vZHVsZSxcbiAgICAgIHNvdXJjZU1hcEZpbGVuYW1lLFxuICAgICAgc291cmNlc1xuICAgIH0pXG5cbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0W119ICovXG4gICAgY29uc3QgYXJ0aWZhY3RzID0gW3tcbiAgICAgIGNvbnRlbnQ6IGFydGlmYWN0LmNvZGUsXG4gICAgICBjb250ZW50S2luZDogXCJ0ZXh0XCIsXG4gICAgICBtZWRpYVR5cGU6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVjb3JkLm1lZGlhVHlwZSksXG4gICAgICBvd25lcnNoaXA6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICBwYXRoOiBhcnRpZmFjdC5maWxlbmFtZSxcbiAgICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgICAga2luZDogXCJ0ZXh0XCIsXG4gICAgICAgIG1hcHBpbmc6IGFydGlmYWN0Lm1hcHBpbmcsXG4gICAgICAgIHNvdXJjZU1hcDogYXJ0aWZhY3Quc291cmNlTWFwLFxuICAgICAgICBzb3VyY2VNYXBGaWxlbmFtZTogYXJ0aWZhY3Quc291cmNlTWFwRmlsZW5hbWVcbiAgICAgIH0sXG4gICAgICByb2xlOiBcImVudHJ5XCJcbiAgICB9XVxuXG4gICAgaWYgKG1hcERpcmVjdGl2ZSA9PSBcImV4dGVybmFsXCIpIHtcbiAgICAgIGFydGlmYWN0cy5wdXNoKHtcbiAgICAgICAgY29udGVudDogYCR7SlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3Quc291cmNlTWFwKX1cXG5gLFxuICAgICAgICBjb250ZW50S2luZDogXCJ0ZXh0XCIsXG4gICAgICAgIG1lZGlhVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICAgICAgcGF0aDogYXJ0aWZhY3Quc291cmNlTWFwRmlsZW5hbWUsXG4gICAgICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgICAgICBraW5kOiBcInN5bnRoZXRpY1wiLFxuICAgICAgICAgIHJlYXNvbjogXCJTZXJpYWxpemVkIFNvdXJjZSBNYXAgdjMgcHJvamVjdGlvbiBmb3IgdGhlIGdlbmVyYXRlZCBlbnRyeSBhcnRpZmFjdC5cIixcbiAgICAgICAgICByZWxhdGVkT3JpZ2luczogW11cbiAgICAgICAgfSxcbiAgICAgICAgcm9sZTogXCJtYXBwaW5nXCJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cnVjdEFydGlmYWN0U2V0KHtcbiAgICAgIGFydGlmYWN0cyxcbiAgICAgIHRhcmdldDogbGFuZ3VhZ2VcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgcmVnaXN0cnlSb2xlID0gcm9sZSA9PSBcImJpbmFyeVwiID8gXCJiaW5hcnlCYWNrZW5kXCIgOiBcImFwcGxpY2F0aW9uQmFja2VuZFwiXG4gIGNvbnN0IGJhY2tlbmQgPSBsYW5ndWFnZVJlZ2lzdHJ5LnJlc29sdmUobGFuZ3VhZ2UsIHJlZ2lzdHJ5Um9sZSwgbW9kdWxlPy5sb2NhdGlvbilcblxuICByZXR1cm4gY29uc3RydWN0QXJ0aWZhY3RTZXQoYmFja2VuZCh7ZmlsZW5hbWUsIGxhbmd1YWdlLCBtb2R1bGUsIHNvdXJjZXN9KSlcbn1cbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Materializes one artifact set and runs ordered acceptance stages without a shell.
|
|
3
|
+
* @param {object} input - Acceptance request.
|
|
4
|
+
* @param {import("./semantic/types.js").GeneratedArtifactSet} input.artifacts - Complete input artifacts.
|
|
5
|
+
* @param {Readonly<Record<string, string | undefined>>} [input.environment] - Explicit process environment.
|
|
6
|
+
* @param {{arguments: string[], stage: import("./semantic/types.js").AcceptanceStage, tool: import("./semantic/types.js").DiscoveredToolchain}[]} input.stages - Ordered stages.
|
|
7
|
+
* @param {string} input.target - Target identity.
|
|
8
|
+
* @param {number} [input.timeoutMs] - Per-stage timeout.
|
|
9
|
+
* @returns {Promise<import("./semantic/types.js").AcceptanceResult>} Captured results after cleanup.
|
|
10
|
+
*/
|
|
11
|
+
export declare function runAcceptanceStages(input: {
|
|
12
|
+
artifacts: import("./semantic/types.js").GeneratedArtifactSet;
|
|
13
|
+
environment?: Readonly<Record<string, string | undefined>>;
|
|
14
|
+
stages: {
|
|
15
|
+
arguments: string[];
|
|
16
|
+
stage: import("./semantic/types.js").AcceptanceStage;
|
|
17
|
+
tool: import("./semantic/types.js").DiscoveredToolchain;
|
|
18
|
+
}[];
|
|
19
|
+
target: string;
|
|
20
|
+
timeoutMs?: number;
|
|
21
|
+
}): Promise<import("./semantic/types.js").AcceptanceResult>;
|
|
22
|
+
//# sourceMappingURL=acceptance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acceptance.d.ts","sourceRoot":"","sources":["../../src/acceptance.js"],"names":[],"mappings":"AAmBA;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAP5C;IAAkE,SAAS,EAAnE,OAAO,qBAAqB,EAAE,oBAAoB,CAC1D;IAA6D,WAAW,AAAxE,CACA,EADQ,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CACpD;IAAsJ,MAAM,EAApJ;QAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,eAAe,CAAC;QAAC,IAAI,EAAE,OAAO,qBAAqB,EAAE,mBAAmB,CAAA;KAAC,EAAE,CAC9I;IAAsB,MAAM,EAApB,MAAM,CACd;IAAuB,SAAS,AAAhC,CACA,EADQ,MAAM,CACd;CAE4C,GAFlC,OAAO,CAAC,OAAO,qBAAqB,EAAE,gBAAgB,CAAC,CAwEnE"}
|