nawabari 0.9.2 → 0.10.2
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 +142 -803
- package/dist/cli-command-registry.js +46 -6
- package/dist/cli-command-registry.js.map +1 -1
- package/dist/cli.d.ts +5 -3
- package/dist/cli.js +157 -34
- package/dist/cli.js.map +1 -1
- package/dist/contract.js +11 -3
- package/dist/contract.js.map +1 -1
- package/dist/domain/compatibility-runtime-projection.d.ts +24 -0
- package/dist/domain/compatibility-runtime-projection.js +197 -0
- package/dist/domain/compatibility-runtime-projection.js.map +1 -0
- package/dist/domain/doctor.d.ts +2 -2
- package/dist/domain/doctor.js +72 -51
- package/dist/domain/doctor.js.map +1 -1
- package/dist/domain/errors.d.ts +1 -1
- package/dist/domain/errors.js +5 -1
- package/dist/domain/errors.js.map +1 -1
- package/dist/domain/fhs-development-runtime.d.ts +90 -0
- package/dist/domain/fhs-development-runtime.js +385 -0
- package/dist/domain/fhs-development-runtime.js.map +1 -0
- package/dist/domain/fhs-runtime.d.ts +36 -0
- package/dist/domain/fhs-runtime.js +776 -0
- package/dist/domain/fhs-runtime.js.map +1 -0
- package/dist/domain/landlock.d.ts +11 -4
- package/dist/domain/landlock.js +44 -21
- package/dist/domain/landlock.js.map +1 -1
- package/dist/domain/nix-runtime-closure.d.ts +70 -0
- package/dist/domain/nix-runtime-closure.js +449 -0
- package/dist/domain/nix-runtime-closure.js.map +1 -0
- package/dist/domain/pnpm-middleware-backend-materialization.d.ts +117 -0
- package/dist/domain/pnpm-middleware-backend-materialization.js +311 -0
- package/dist/domain/pnpm-middleware-backend-materialization.js.map +1 -0
- package/dist/domain/runtime-executable-projection.d.ts +33 -0
- package/dist/domain/runtime-executable-projection.js +204 -0
- package/dist/domain/runtime-executable-projection.js.map +1 -0
- package/dist/domain/runtime-file-identity.d.ts +37 -0
- package/dist/domain/runtime-file-identity.js +114 -0
- package/dist/domain/runtime-file-identity.js.map +1 -0
- package/dist/domain/runtime-profile.d.ts +66 -0
- package/dist/domain/runtime-profile.js +356 -0
- package/dist/domain/runtime-profile.js.map +1 -0
- package/dist/domain/runtime-projection.d.ts +101 -0
- package/dist/domain/runtime-projection.js +316 -0
- package/dist/domain/runtime-projection.js.map +1 -0
- package/dist/domain/runtime-provider-pnpm-middleware.d.ts +41 -0
- package/dist/domain/runtime-provider-pnpm-middleware.js +316 -0
- package/dist/domain/runtime-provider-pnpm-middleware.js.map +1 -0
- package/dist/domain/runtime-provider-tgrep.d.ts +60 -0
- package/dist/domain/runtime-provider-tgrep.js +537 -0
- package/dist/domain/runtime-provider-tgrep.js.map +1 -0
- package/dist/domain/runtime-resolution.d.ts +57 -0
- package/dist/domain/runtime-resolution.js +242 -0
- package/dist/domain/runtime-resolution.js.map +1 -0
- package/dist/domain/sandbox-launcher.d.ts +7 -0
- package/dist/domain/sandbox-launcher.js +380 -56
- package/dist/domain/sandbox-launcher.js.map +1 -1
- package/dist/domain/sandbox.d.ts +59 -4
- package/dist/domain/sandbox.js +100 -5
- package/dist/domain/sandbox.js.map +1 -1
- package/dist/domain/session-backend.js +20 -1
- package/dist/domain/session-backend.js.map +1 -1
- package/dist/domain/session.d.ts +3 -2
- package/dist/domain/session.js.map +1 -1
- package/dist/domain/tgrep-runtime-materialization.d.ts +61 -0
- package/dist/domain/tgrep-runtime-materialization.js +172 -0
- package/dist/domain/tgrep-runtime-materialization.js.map +1 -0
- package/dist/operation-authorization.d.ts +10 -0
- package/dist/operation-authorization.js +12 -1
- package/dist/operation-authorization.js.map +1 -1
- package/dist/presentation.js +6 -3
- package/dist/presentation.js.map +1 -1
- package/dist/session-registry.d.ts +11 -3
- package/dist/session-registry.js +61 -45
- package/dist/session-registry.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
let testHooks;
|
|
3
|
+
function identityOf(stat) {
|
|
4
|
+
return Object.freeze({ dev: stat.dev, ino: stat.ino });
|
|
5
|
+
}
|
|
6
|
+
function sameIdentity(left, right) {
|
|
7
|
+
return left.dev === right.dev && left.ino === right.ino;
|
|
8
|
+
}
|
|
9
|
+
function verifyCanonicalIdentity(candidate, source, identity, requireCanonicalPath) {
|
|
10
|
+
if (requireCanonicalPath && source !== candidate) {
|
|
11
|
+
throw new Error("the file resolves through a symlink");
|
|
12
|
+
}
|
|
13
|
+
testHooks?.beforeFinalIdentityCheck?.(source, identity);
|
|
14
|
+
const pathStat = requireCanonicalPath
|
|
15
|
+
? fs.lstatSync(candidate, { bigint: true })
|
|
16
|
+
: fs.statSync(source, { bigint: true });
|
|
17
|
+
if (!pathStat.isFile() || !sameIdentity(identity, identityOf(pathStat))) {
|
|
18
|
+
throw new Error("the file identity changed during materialization");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Open and inspect one regular file through one descriptor, then prove that
|
|
23
|
+
* its canonical pathname still names the descriptor's Linux file identity.
|
|
24
|
+
*/
|
|
25
|
+
export function inspectRuntimeFile(candidate, inspect, options = {}) {
|
|
26
|
+
let descriptor = null;
|
|
27
|
+
try {
|
|
28
|
+
descriptor = fs.openSync(candidate, fs.constants.O_RDONLY);
|
|
29
|
+
const descriptorStat = fs.fstatSync(descriptor, { bigint: true });
|
|
30
|
+
if (!descriptorStat.isFile())
|
|
31
|
+
throw new Error("the file is not regular");
|
|
32
|
+
const source = fs.realpathSync.native(candidate);
|
|
33
|
+
if (options.requireCanonicalPath === true && source !== candidate) {
|
|
34
|
+
throw new Error("the file resolves through a symlink");
|
|
35
|
+
}
|
|
36
|
+
const value = inspect(descriptor, descriptorStat);
|
|
37
|
+
verifyCanonicalIdentity(candidate, source, identityOf(descriptorStat), options.requireCanonicalPath === true);
|
|
38
|
+
return Object.freeze({ source, identity: identityOf(descriptorStat), value });
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
if (descriptor !== null) {
|
|
42
|
+
try {
|
|
43
|
+
fs.closeSync(descriptor);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Preserve the inspection result or original failure.
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Read a bounded file through an already inspected descriptor. */
|
|
52
|
+
export function readRuntimeFile(descriptor, size, maximum) {
|
|
53
|
+
const maximumSize = BigInt(maximum);
|
|
54
|
+
if (size < 0n || size > maximumSize)
|
|
55
|
+
throw new Error("the file exceeds the bounded inspection size");
|
|
56
|
+
const length = Number(size);
|
|
57
|
+
const buffer = Buffer.alloc(length);
|
|
58
|
+
let offset = 0;
|
|
59
|
+
while (offset < length) {
|
|
60
|
+
const bytes = fs.readSync(descriptor, buffer, offset, length - offset, null);
|
|
61
|
+
if (bytes === 0)
|
|
62
|
+
throw new Error("the file ended during descriptor inspection");
|
|
63
|
+
offset += bytes;
|
|
64
|
+
}
|
|
65
|
+
return buffer;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Exclusively create, write, chmod, and identity-check one file. On failure,
|
|
69
|
+
* the invocation-owned partial artifact is left in place rather than removed
|
|
70
|
+
* by pathname: a pathname-based unlink after the identity check would race
|
|
71
|
+
* against a replacement at that path and could delete a competing file. The
|
|
72
|
+
* next materialization attempt fails closed on the existing destination.
|
|
73
|
+
*/
|
|
74
|
+
export function createRuntimeFile(destination, write) {
|
|
75
|
+
let descriptor = null;
|
|
76
|
+
try {
|
|
77
|
+
testHooks?.beforeExclusiveCreate?.(destination);
|
|
78
|
+
descriptor = fs.openSync(destination, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL, 0o755);
|
|
79
|
+
const descriptorStat = fs.fstatSync(descriptor, { bigint: true });
|
|
80
|
+
if (!descriptorStat.isFile())
|
|
81
|
+
throw new Error("the created file is not regular");
|
|
82
|
+
const createdIdentity = identityOf(descriptorStat);
|
|
83
|
+
const value = write(descriptor, descriptorStat);
|
|
84
|
+
const source = fs.realpathSync.native(destination);
|
|
85
|
+
verifyCanonicalIdentity(destination, source, createdIdentity, true);
|
|
86
|
+
return value;
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
if (descriptor !== null) {
|
|
90
|
+
try {
|
|
91
|
+
fs.closeSync(descriptor);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Preserve the original creation result.
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Test-only seam for deterministic replacement and exclusive-create races.
|
|
101
|
+
* It is intentionally private to the runtime/domain implementation and is
|
|
102
|
+
* never re-exported by Nawabari's public API.
|
|
103
|
+
*/
|
|
104
|
+
export function withRuntimeFileIdentityTestHooks(hooks, action) {
|
|
105
|
+
const previous = testHooks;
|
|
106
|
+
testHooks = hooks;
|
|
107
|
+
try {
|
|
108
|
+
return action();
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
testHooks = previous;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=runtime-file-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-file-identity.js","sourceRoot":"","sources":["../../src/domain/runtime-file-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAkBzB,IAAI,SAAmD,CAAC;AAExD,SAAS,UAAU,CAAC,IAAoB;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,YAAY,CAAC,IAAyB,EAAE,KAA0B;IACzE,OAAO,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;AAC1D,CAAC;AAED,SAAS,uBAAuB,CAC9B,SAAiB,EACjB,MAAc,EACd,QAA6B,EAC7B,oBAA6B;IAE7B,IAAI,oBAAoB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,SAAS,EAAE,wBAAwB,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,oBAAoB;QACnC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC3C,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,OAAwD,EACxD,UAAiE,EAAE;IAEnE,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,CAAC;QACH,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,cAAc,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,OAAO,CAAC,oBAAoB,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAClD,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,oBAAoB,KAAK,IAAI,CAAC,CAAC;QAC9G,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAChF,CAAC;YAAS,CAAC;QACT,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;YACxD,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,IAAY,EAAE,OAAe;IAC/E,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACrG,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,MAAM,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7E,IAAI,KAAK,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAI,WAAmB,EAAE,KAAsD;IAC9G,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,CAAC;QACH,SAAS,EAAE,qBAAqB,EAAE,CAAC,WAAW,CAAC,CAAC;QAChD,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACjH,MAAM,cAAc,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjF,MAAM,eAAe,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACnD,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;YAAS,CAAC;QACT,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,yCAAyC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAAI,KAAmC,EAAE,MAAe;IACtG,MAAM,QAAQ,GAAG,SAAS,CAAC;IAC3B,SAAS,GAAG,KAAK,CAAC;IAClB,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,SAAS,GAAG,QAAQ,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { DomainError, type DomainResult, type ErrorCode, type JsonObject } from "./errors.js";
|
|
2
|
+
import type { RuntimeProfileIdentity, RuntimeRequirement } from "./runtime-projection.js";
|
|
3
|
+
/** Versioned identity for the logical runtime-profile/material contract. */
|
|
4
|
+
export declare const RUNTIME_PROFILE_CONTRACT_ID: "nawabari.runtime-profile.v1";
|
|
5
|
+
export declare const RUNTIME_PROFILE_SCHEMA_VERSION: 1;
|
|
6
|
+
export declare const RUNTIME_PROFILE_REQUIREMENT_KINDS: readonly ["runtime", "package"];
|
|
7
|
+
export type RuntimeProfileRequirement = RuntimeRequirement;
|
|
8
|
+
export type RuntimeProfileRequirementKind = (typeof RUNTIME_PROFILE_REQUIREMENT_KINDS)[number];
|
|
9
|
+
/** A profile is material identity plus logical requirements, never mounts or commands. */
|
|
10
|
+
export type RuntimeProfileDefinition = Readonly<{
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly version: string;
|
|
13
|
+
readonly extends: readonly string[];
|
|
14
|
+
readonly requirements: readonly RuntimeProfileRequirement[];
|
|
15
|
+
}>;
|
|
16
|
+
export type RuntimeProfileRequirementOperation = Readonly<{
|
|
17
|
+
readonly operation: "add";
|
|
18
|
+
readonly requirement: RuntimeProfileRequirement;
|
|
19
|
+
}> | Readonly<{
|
|
20
|
+
readonly operation: "remove";
|
|
21
|
+
readonly requirement_id: string;
|
|
22
|
+
}> | Readonly<{
|
|
23
|
+
readonly operation: "override";
|
|
24
|
+
readonly requirement: RuntimeProfileRequirement;
|
|
25
|
+
}>;
|
|
26
|
+
/** Profile IDs are an explicit composition set; operation order is explicit and significant. */
|
|
27
|
+
export type RuntimeProfileSelection = Readonly<{
|
|
28
|
+
readonly profiles: readonly string[];
|
|
29
|
+
readonly operations?: readonly RuntimeProfileRequirementOperation[];
|
|
30
|
+
}>;
|
|
31
|
+
export type ResolvedRuntimeProfile = Readonly<{
|
|
32
|
+
readonly contract_id: typeof RUNTIME_PROFILE_CONTRACT_ID;
|
|
33
|
+
readonly schema_version: typeof RUNTIME_PROFILE_SCHEMA_VERSION;
|
|
34
|
+
readonly profile: RuntimeProfileIdentity;
|
|
35
|
+
readonly selected_profiles: readonly RuntimeProfileIdentity[];
|
|
36
|
+
readonly requirements: readonly RuntimeProfileRequirement[];
|
|
37
|
+
}>;
|
|
38
|
+
export type RuntimeProfileErrorCode = Extract<ErrorCode, "RUNTIME_PROFILE_INVALID" | "RUNTIME_PROFILE_AMBIGUOUS" | "RUNTIME_PROFILE_MISSING" | "RUNTIME_PROFILE_REQUIREMENT_MISSING" | "RUNTIME_PROFILE_REQUIREMENT_CONFLICT">;
|
|
39
|
+
/**
|
|
40
|
+
* Resolve an explicit, backend-neutral profile selection without consulting
|
|
41
|
+
* PATH, home directories, shell configuration, package managers, or the host.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveRuntimeProfile(selection: unknown, catalog?: unknown): DomainResult<ResolvedRuntimeProfile>;
|
|
44
|
+
/** Convenience form for callers that already have explicit profile IDs. */
|
|
45
|
+
export declare function composeRuntimeProfiles(profiles: readonly string[], operations?: readonly RuntimeProfileRequirementOperation[], catalog?: readonly RuntimeProfileDefinition[]): DomainResult<ResolvedRuntimeProfile>;
|
|
46
|
+
export declare const selectRuntimeProfile: typeof resolveRuntimeProfile;
|
|
47
|
+
export declare const BASE_RUNTIME_PROFILE: RuntimeProfileDefinition;
|
|
48
|
+
export declare const MINIMAL_RUNTIME_PROFILE: Readonly<{
|
|
49
|
+
readonly id: string;
|
|
50
|
+
readonly version: string;
|
|
51
|
+
readonly extends: readonly string[];
|
|
52
|
+
readonly requirements: readonly RuntimeProfileRequirement[];
|
|
53
|
+
}>;
|
|
54
|
+
export declare const DEVELOPMENT_RUNTIME_PROFILE: RuntimeProfileDefinition;
|
|
55
|
+
export declare const DEFAULT_DEVELOPMENT_RUNTIME_PROFILE: Readonly<{
|
|
56
|
+
readonly id: string;
|
|
57
|
+
readonly version: string;
|
|
58
|
+
readonly extends: readonly string[];
|
|
59
|
+
readonly requirements: readonly RuntimeProfileRequirement[];
|
|
60
|
+
}>;
|
|
61
|
+
export declare const CANONICAL_RUNTIME_PROFILES: readonly RuntimeProfileDefinition[];
|
|
62
|
+
export declare function isRuntimeProfileError(error: DomainError): error is DomainError & {
|
|
63
|
+
readonly code: RuntimeProfileErrorCode;
|
|
64
|
+
};
|
|
65
|
+
/** JSON-safe descriptor for consumers that need to identify this contract. */
|
|
66
|
+
export declare const RUNTIME_PROFILE_DESCRIPTOR: JsonObject;
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { DomainError, failure, success } from "./errors.js";
|
|
2
|
+
/** Versioned identity for the logical runtime-profile/material contract. */
|
|
3
|
+
export const RUNTIME_PROFILE_CONTRACT_ID = "nawabari.runtime-profile.v1";
|
|
4
|
+
export const RUNTIME_PROFILE_SCHEMA_VERSION = 1;
|
|
5
|
+
export const RUNTIME_PROFILE_REQUIREMENT_KINDS = Object.freeze(["runtime", "package"]);
|
|
6
|
+
function isRecord(value) {
|
|
7
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
8
|
+
}
|
|
9
|
+
function isNonEmptyText(value) {
|
|
10
|
+
return typeof value === "string" && value.length > 0 && !value.includes("\u0000");
|
|
11
|
+
}
|
|
12
|
+
function isStableIdentifier(value) {
|
|
13
|
+
return typeof value === "string" && /^[a-z0-9][a-z0-9._-]*$/u.test(value);
|
|
14
|
+
}
|
|
15
|
+
function compareText(left, right) {
|
|
16
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
17
|
+
}
|
|
18
|
+
function requirementKey(requirement) {
|
|
19
|
+
return requirement.id;
|
|
20
|
+
}
|
|
21
|
+
function requirementSortKey(requirement) {
|
|
22
|
+
return `${requirement.kind}:${requirement.id}`;
|
|
23
|
+
}
|
|
24
|
+
function sameRequirement(left, right) {
|
|
25
|
+
return left.id === right.id && left.kind === right.kind && left.name === right.name && left.version === right.version;
|
|
26
|
+
}
|
|
27
|
+
function profileFailure(code, field, reason, details = {}) {
|
|
28
|
+
return failure(new DomainError(code, `Runtime profile field '${field}' is invalid: ${reason}.`, {
|
|
29
|
+
field,
|
|
30
|
+
...details,
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
function profileAmbiguity(field, reason, value) {
|
|
34
|
+
return failure(new DomainError("RUNTIME_PROFILE_AMBIGUOUS", `Runtime profile field '${field}' is ambiguous: ${reason}.`, {
|
|
35
|
+
field,
|
|
36
|
+
value,
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
function missingProfile(profileId, referencedBy) {
|
|
40
|
+
return failure(new DomainError("RUNTIME_PROFILE_MISSING", `Runtime profile '${profileId}' is not declared.`, {
|
|
41
|
+
profile_id: profileId,
|
|
42
|
+
...(referencedBy === undefined ? {} : { referenced_by: referencedBy }),
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
function missingRequirement(requirementId, operation) {
|
|
46
|
+
return failure(new DomainError("RUNTIME_PROFILE_REQUIREMENT_MISSING", `Runtime profile requirement '${requirementId}' cannot be ${operation}d because it is not selected.`, { requirement_id: requirementId, operation }));
|
|
47
|
+
}
|
|
48
|
+
function validateRequirement(value, field) {
|
|
49
|
+
if (!isRecord(value))
|
|
50
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", field, "expected a requirement object");
|
|
51
|
+
if (!isStableIdentifier(value.id) ||
|
|
52
|
+
!RUNTIME_PROFILE_REQUIREMENT_KINDS.includes(value.kind) ||
|
|
53
|
+
!isNonEmptyText(value.name) ||
|
|
54
|
+
!isNonEmptyText(value.version)) {
|
|
55
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", field, "expected stable id, kind, name, and version");
|
|
56
|
+
}
|
|
57
|
+
if (value.name.startsWith("/") ||
|
|
58
|
+
value.name.startsWith("~") ||
|
|
59
|
+
value.name.startsWith("$") ||
|
|
60
|
+
value.version.startsWith("/") ||
|
|
61
|
+
value.version.startsWith("~") ||
|
|
62
|
+
value.version.startsWith("$")) {
|
|
63
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", field, "host paths are not logical package names or versions");
|
|
64
|
+
}
|
|
65
|
+
if ("source" in value || "target" in value || "provider" in value || "executable" in value) {
|
|
66
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", field, "runtime profiles declare material only and cannot contain projection or executable fields");
|
|
67
|
+
}
|
|
68
|
+
return success(Object.freeze({
|
|
69
|
+
id: value.id,
|
|
70
|
+
kind: value.kind,
|
|
71
|
+
name: value.name,
|
|
72
|
+
version: value.version,
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
function validateDefinition(value, index) {
|
|
76
|
+
const field = `catalog[${index}]`;
|
|
77
|
+
if (!isRecord(value))
|
|
78
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", field, "expected a profile object");
|
|
79
|
+
if (!isStableIdentifier(value.id) || !isNonEmptyText(value.version)) {
|
|
80
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", field, "expected a stable id and non-empty version");
|
|
81
|
+
}
|
|
82
|
+
if (!Array.isArray(value.extends)) {
|
|
83
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", `${field}.extends`, "expected an array");
|
|
84
|
+
}
|
|
85
|
+
if (!Array.isArray(value.requirements)) {
|
|
86
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", `${field}.requirements`, "expected an array");
|
|
87
|
+
}
|
|
88
|
+
if ("filesystem" in value || "executables" in value) {
|
|
89
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", field, "runtime profiles cannot contain filesystem or executable projections");
|
|
90
|
+
}
|
|
91
|
+
const parents = [];
|
|
92
|
+
for (const [parentIndex, parent] of value.extends.entries()) {
|
|
93
|
+
if (!isStableIdentifier(parent)) {
|
|
94
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", `${field}.extends[${parentIndex}]`, "expected a stable profile id");
|
|
95
|
+
}
|
|
96
|
+
if (parents.includes(parent))
|
|
97
|
+
return profileAmbiguity(`${field}.extends`, "duplicate parent profile", parent);
|
|
98
|
+
parents.push(parent);
|
|
99
|
+
}
|
|
100
|
+
const requirements = [];
|
|
101
|
+
const ids = new Set();
|
|
102
|
+
for (const [requirementIndex, requirement] of value.requirements.entries()) {
|
|
103
|
+
const result = validateRequirement(requirement, `${field}.requirements[${requirementIndex}]`);
|
|
104
|
+
if (!result.ok)
|
|
105
|
+
return failure(result.error);
|
|
106
|
+
if (ids.has(result.value.id)) {
|
|
107
|
+
return profileAmbiguity(`${field}.requirements`, "duplicate requirement id", result.value.id);
|
|
108
|
+
}
|
|
109
|
+
ids.add(result.value.id);
|
|
110
|
+
requirements.push(result.value);
|
|
111
|
+
}
|
|
112
|
+
return success(Object.freeze({
|
|
113
|
+
id: value.id,
|
|
114
|
+
version: value.version,
|
|
115
|
+
extends: Object.freeze(parents.sort(compareText)),
|
|
116
|
+
requirements: Object.freeze(requirements.sort((left, right) => compareText(requirementSortKey(left), requirementSortKey(right)))),
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
function validateCatalog(value) {
|
|
120
|
+
if (!Array.isArray(value))
|
|
121
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", "catalog", "expected an array");
|
|
122
|
+
const catalog = new Map();
|
|
123
|
+
for (const [index, definition] of value.entries()) {
|
|
124
|
+
const result = validateDefinition(definition, index);
|
|
125
|
+
if (!result.ok)
|
|
126
|
+
return failure(result.error);
|
|
127
|
+
if (catalog.has(result.value.id))
|
|
128
|
+
return profileAmbiguity("catalog", "duplicate profile id", result.value.id);
|
|
129
|
+
catalog.set(result.value.id, result.value);
|
|
130
|
+
}
|
|
131
|
+
return success(catalog);
|
|
132
|
+
}
|
|
133
|
+
function validateSelection(value) {
|
|
134
|
+
if (!isRecord(value) || !Array.isArray(value.profiles) || value.profiles.length === 0) {
|
|
135
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", "selection.profiles", "expected a non-empty array");
|
|
136
|
+
}
|
|
137
|
+
const profiles = [];
|
|
138
|
+
for (const [index, profile] of value.profiles.entries()) {
|
|
139
|
+
if (!isStableIdentifier(profile)) {
|
|
140
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", `selection.profiles[${index}]`, "expected a stable profile id");
|
|
141
|
+
}
|
|
142
|
+
if (profiles.includes(profile))
|
|
143
|
+
return profileAmbiguity("selection.profiles", "duplicate selected profile", profile);
|
|
144
|
+
profiles.push(profile);
|
|
145
|
+
}
|
|
146
|
+
if (value.operations !== undefined && !Array.isArray(value.operations)) {
|
|
147
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", "selection.operations", "expected an array");
|
|
148
|
+
}
|
|
149
|
+
const operations = [];
|
|
150
|
+
for (const [index, operation] of (value.operations ?? []).entries()) {
|
|
151
|
+
const field = `selection.operations[${index}]`;
|
|
152
|
+
if (!isRecord(operation) ||
|
|
153
|
+
(operation.operation !== "add" && operation.operation !== "remove" && operation.operation !== "override")) {
|
|
154
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", field, "expected add, remove, or override");
|
|
155
|
+
}
|
|
156
|
+
if (operation.operation === "remove") {
|
|
157
|
+
if (!isStableIdentifier(operation.requirement_id)) {
|
|
158
|
+
return profileFailure("RUNTIME_PROFILE_INVALID", `${field}.requirement_id`, "expected a stable requirement id");
|
|
159
|
+
}
|
|
160
|
+
operations.push(Object.freeze({ operation: "remove", requirement_id: operation.requirement_id }));
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
const requirement = validateRequirement(operation.requirement, `${field}.requirement`);
|
|
164
|
+
if (!requirement.ok)
|
|
165
|
+
return failure(requirement.error);
|
|
166
|
+
operations.push(Object.freeze({ operation: operation.operation, requirement: requirement.value }));
|
|
167
|
+
}
|
|
168
|
+
return success({
|
|
169
|
+
profiles: Object.freeze(profiles.sort(compareText)),
|
|
170
|
+
operations: Object.freeze(operations),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
function mergeRequirements(target, requirements, source) {
|
|
174
|
+
for (const requirement of requirements) {
|
|
175
|
+
const key = requirementKey(requirement);
|
|
176
|
+
const existing = target.get(key);
|
|
177
|
+
if (existing === undefined) {
|
|
178
|
+
target.set(key, requirement);
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (!sameRequirement(existing, requirement)) {
|
|
182
|
+
return failure(new DomainError("RUNTIME_PROFILE_REQUIREMENT_CONFLICT", `Runtime profile requirement '${requirement.id}' has conflicting definitions.`, {
|
|
183
|
+
requirement_id: requirement.id,
|
|
184
|
+
existing_name: existing.name,
|
|
185
|
+
existing_version: existing.version,
|
|
186
|
+
conflicting_name: requirement.name,
|
|
187
|
+
conflicting_version: requirement.version,
|
|
188
|
+
source,
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return success(null);
|
|
193
|
+
}
|
|
194
|
+
function resolveDefinition(profileId, catalog, states, resolved) {
|
|
195
|
+
const cached = resolved.get(profileId);
|
|
196
|
+
if (cached !== undefined)
|
|
197
|
+
return success(cached);
|
|
198
|
+
if (states.get(profileId) === "visiting") {
|
|
199
|
+
return profileAmbiguity("catalog.extends", "profile inheritance cycle", profileId);
|
|
200
|
+
}
|
|
201
|
+
const definition = catalog.get(profileId);
|
|
202
|
+
if (definition === undefined)
|
|
203
|
+
return missingProfile(profileId);
|
|
204
|
+
states.set(profileId, "visiting");
|
|
205
|
+
const requirements = new Map();
|
|
206
|
+
for (const parent of definition.extends) {
|
|
207
|
+
const result = resolveDefinition(parent, catalog, states, resolved);
|
|
208
|
+
if (!result.ok) {
|
|
209
|
+
if (result.error.code === "RUNTIME_PROFILE_MISSING") {
|
|
210
|
+
return missingProfile(parent, profileId);
|
|
211
|
+
}
|
|
212
|
+
return failure(result.error);
|
|
213
|
+
}
|
|
214
|
+
const merged = mergeRequirements(requirements, result.value, parent);
|
|
215
|
+
if (!merged.ok)
|
|
216
|
+
return failure(merged.error);
|
|
217
|
+
}
|
|
218
|
+
const merged = mergeRequirements(requirements, definition.requirements, profileId);
|
|
219
|
+
if (!merged.ok)
|
|
220
|
+
return failure(merged.error);
|
|
221
|
+
const canonical = Object.freeze([...requirements.values()].sort((left, right) => compareText(requirementSortKey(left), requirementSortKey(right))));
|
|
222
|
+
states.set(profileId, "resolved");
|
|
223
|
+
resolved.set(profileId, canonical);
|
|
224
|
+
return success(canonical);
|
|
225
|
+
}
|
|
226
|
+
function applyOperations(requirements, operations) {
|
|
227
|
+
for (const operation of operations) {
|
|
228
|
+
if (operation.operation === "remove") {
|
|
229
|
+
if (!requirements.has(operation.requirement_id))
|
|
230
|
+
return missingRequirement(operation.requirement_id, "remove");
|
|
231
|
+
requirements.delete(operation.requirement_id);
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
const key = requirementKey(operation.requirement);
|
|
235
|
+
if (operation.operation === "add") {
|
|
236
|
+
if (requirements.has(key)) {
|
|
237
|
+
return failure(new DomainError("RUNTIME_PROFILE_REQUIREMENT_CONFLICT", `Runtime profile requirement '${operation.requirement.id}' is added twice.`, {
|
|
238
|
+
requirement_id: operation.requirement.id,
|
|
239
|
+
operation: "add",
|
|
240
|
+
}));
|
|
241
|
+
}
|
|
242
|
+
requirements.set(key, operation.requirement);
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
const existing = requirements.get(key);
|
|
246
|
+
if (existing === undefined)
|
|
247
|
+
return missingRequirement(operation.requirement.id, "override");
|
|
248
|
+
if (existing.kind !== operation.requirement.kind) {
|
|
249
|
+
return failure(new DomainError("RUNTIME_PROFILE_REQUIREMENT_CONFLICT", `Runtime profile requirement '${operation.requirement.id}' cannot change kind during override.`, {
|
|
250
|
+
requirement_id: operation.requirement.id,
|
|
251
|
+
existing_kind: existing.kind,
|
|
252
|
+
conflicting_kind: operation.requirement.kind,
|
|
253
|
+
operation: "override",
|
|
254
|
+
}));
|
|
255
|
+
}
|
|
256
|
+
requirements.set(key, operation.requirement);
|
|
257
|
+
}
|
|
258
|
+
return success(null);
|
|
259
|
+
}
|
|
260
|
+
function composedIdentity(definitions, operationCount, requirements) {
|
|
261
|
+
if (definitions.length === 1 && operationCount === 0) {
|
|
262
|
+
return Object.freeze({ id: definitions[0].id, version: definitions[0].version });
|
|
263
|
+
}
|
|
264
|
+
const id = `composition-${definitions.map((definition) => definition.id).join("--")}${operationCount === 0 ? "" : "-custom"}`;
|
|
265
|
+
const material = requirements
|
|
266
|
+
.map((requirement) => `${requirement.id}=${requirement.kind}:${requirement.name}@${requirement.version}`)
|
|
267
|
+
.join(",");
|
|
268
|
+
const version = `${definitions.map((definition) => definition.version).join("+")}:${material}`;
|
|
269
|
+
return Object.freeze({ id, version });
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Resolve an explicit, backend-neutral profile selection without consulting
|
|
273
|
+
* PATH, home directories, shell configuration, package managers, or the host.
|
|
274
|
+
*/
|
|
275
|
+
export function resolveRuntimeProfile(selection, catalog = CANONICAL_RUNTIME_PROFILES) {
|
|
276
|
+
const catalogResult = validateCatalog(catalog);
|
|
277
|
+
if (!catalogResult.ok)
|
|
278
|
+
return failure(catalogResult.error);
|
|
279
|
+
const selectionResult = validateSelection(selection);
|
|
280
|
+
if (!selectionResult.ok)
|
|
281
|
+
return failure(selectionResult.error);
|
|
282
|
+
const states = new Map();
|
|
283
|
+
const resolved = new Map();
|
|
284
|
+
const requirements = new Map();
|
|
285
|
+
const definitions = [];
|
|
286
|
+
for (const profileId of selectionResult.value.profiles) {
|
|
287
|
+
const definition = catalogResult.value.get(profileId);
|
|
288
|
+
if (definition === undefined)
|
|
289
|
+
return missingProfile(profileId);
|
|
290
|
+
definitions.push(definition);
|
|
291
|
+
const result = resolveDefinition(profileId, catalogResult.value, states, resolved);
|
|
292
|
+
if (!result.ok)
|
|
293
|
+
return failure(result.error);
|
|
294
|
+
const merged = mergeRequirements(requirements, result.value, profileId);
|
|
295
|
+
if (!merged.ok)
|
|
296
|
+
return failure(merged.error);
|
|
297
|
+
}
|
|
298
|
+
const operations = selectionResult.value.operations;
|
|
299
|
+
const applied = applyOperations(requirements, operations);
|
|
300
|
+
if (!applied.ok)
|
|
301
|
+
return failure(applied.error);
|
|
302
|
+
const selectedProfiles = Object.freeze([...definitions]
|
|
303
|
+
.sort((left, right) => compareText(left.id, right.id))
|
|
304
|
+
.map((definition) => Object.freeze({ id: definition.id, version: definition.version })));
|
|
305
|
+
return success(Object.freeze({
|
|
306
|
+
contract_id: RUNTIME_PROFILE_CONTRACT_ID,
|
|
307
|
+
schema_version: RUNTIME_PROFILE_SCHEMA_VERSION,
|
|
308
|
+
profile: composedIdentity(definitions, operations.length, [...requirements.values()].sort((left, right) => compareText(requirementSortKey(left), requirementSortKey(right)))),
|
|
309
|
+
selected_profiles: selectedProfiles,
|
|
310
|
+
requirements: Object.freeze([...requirements.values()].sort((left, right) => compareText(requirementSortKey(left), requirementSortKey(right)))),
|
|
311
|
+
}));
|
|
312
|
+
}
|
|
313
|
+
/** Convenience form for callers that already have explicit profile IDs. */
|
|
314
|
+
export function composeRuntimeProfiles(profiles, operations = [], catalog = CANONICAL_RUNTIME_PROFILES) {
|
|
315
|
+
return resolveRuntimeProfile({ profiles, operations }, catalog);
|
|
316
|
+
}
|
|
317
|
+
export const selectRuntimeProfile = resolveRuntimeProfile;
|
|
318
|
+
export const BASE_RUNTIME_PROFILE = Object.freeze({
|
|
319
|
+
id: "base",
|
|
320
|
+
version: "1",
|
|
321
|
+
extends: Object.freeze([]),
|
|
322
|
+
requirements: Object.freeze([Object.freeze({ id: "node-runtime", kind: "runtime", name: "node", version: ">=24" })]),
|
|
323
|
+
});
|
|
324
|
+
export const MINIMAL_RUNTIME_PROFILE = BASE_RUNTIME_PROFILE;
|
|
325
|
+
export const DEVELOPMENT_RUNTIME_PROFILE = Object.freeze({
|
|
326
|
+
id: "development",
|
|
327
|
+
version: "1",
|
|
328
|
+
extends: Object.freeze(["base"]),
|
|
329
|
+
requirements: Object.freeze([
|
|
330
|
+
Object.freeze({ id: "git-package", kind: "package", name: "git", version: ">=2" }),
|
|
331
|
+
Object.freeze({ id: "pnpm-package", kind: "package", name: "pnpm", version: ">=11" }),
|
|
332
|
+
]),
|
|
333
|
+
});
|
|
334
|
+
export const DEFAULT_DEVELOPMENT_RUNTIME_PROFILE = DEVELOPMENT_RUNTIME_PROFILE;
|
|
335
|
+
export const CANONICAL_RUNTIME_PROFILES = Object.freeze([
|
|
336
|
+
BASE_RUNTIME_PROFILE,
|
|
337
|
+
DEVELOPMENT_RUNTIME_PROFILE,
|
|
338
|
+
]);
|
|
339
|
+
export function isRuntimeProfileError(error) {
|
|
340
|
+
return (error.code === "RUNTIME_PROFILE_INVALID" ||
|
|
341
|
+
error.code === "RUNTIME_PROFILE_AMBIGUOUS" ||
|
|
342
|
+
error.code === "RUNTIME_PROFILE_MISSING" ||
|
|
343
|
+
error.code === "RUNTIME_PROFILE_REQUIREMENT_MISSING" ||
|
|
344
|
+
error.code === "RUNTIME_PROFILE_REQUIREMENT_CONFLICT");
|
|
345
|
+
}
|
|
346
|
+
/** JSON-safe descriptor for consumers that need to identify this contract. */
|
|
347
|
+
export const RUNTIME_PROFILE_DESCRIPTOR = Object.freeze({
|
|
348
|
+
contract_id: RUNTIME_PROFILE_CONTRACT_ID,
|
|
349
|
+
schema_version: RUNTIME_PROFILE_SCHEMA_VERSION,
|
|
350
|
+
fields: ["profile", "selected_profiles", "requirements"],
|
|
351
|
+
ownership: {
|
|
352
|
+
describes: "logical runtime/package material",
|
|
353
|
+
excludes: ["filesystem", "executables", "providers", "host-discovery"],
|
|
354
|
+
},
|
|
355
|
+
});
|
|
356
|
+
//# sourceMappingURL=runtime-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-profile.js","sourceRoot":"","sources":["../../src/domain/runtime-profile.ts"],"names":[],"mappings":"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"}
|