spell-runtime 1.0.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/LICENSE +21 -0
- package/README.md +136 -0
- package/README.txt +126 -0
- package/dist/bundle/install.d.ts +7 -0
- package/dist/bundle/install.js +99 -0
- package/dist/bundle/install.js.map +1 -0
- package/dist/bundle/manifest.d.ts +5 -0
- package/dist/bundle/manifest.js +267 -0
- package/dist/bundle/manifest.js.map +1 -0
- package/dist/bundle/store.d.ts +16 -0
- package/dist/bundle/store.js +129 -0
- package/dist/bundle/store.js.map +1 -0
- package/dist/checks/evaluate.d.ts +2 -0
- package/dist/checks/evaluate.js +107 -0
- package/dist/checks/evaluate.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +144 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/logging/executionLog.d.ts +3 -0
- package/dist/logging/executionLog.js +31 -0
- package/dist/logging/executionLog.js.map +1 -0
- package/dist/runner/cast.d.ts +7 -0
- package/dist/runner/cast.js +117 -0
- package/dist/runner/cast.js.map +1 -0
- package/dist/runner/hostRunner.d.ts +5 -0
- package/dist/runner/hostRunner.js +41 -0
- package/dist/runner/hostRunner.js.map +1 -0
- package/dist/runner/input.d.ts +2 -0
- package/dist/runner/input.js +42 -0
- package/dist/runner/input.js.map +1 -0
- package/dist/runner/summary.d.ts +2 -0
- package/dist/runner/summary.js +31 -0
- package/dist/runner/summary.js.map +1 -0
- package/dist/steps/httpStep.d.ts +7 -0
- package/dist/steps/httpStep.js +100 -0
- package/dist/steps/httpStep.js.map +1 -0
- package/dist/steps/shellStep.d.ts +7 -0
- package/dist/steps/shellStep.js +48 -0
- package/dist/steps/shellStep.js.map +1 -0
- package/dist/types.d.ts +105 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/util/errors.d.ts +3 -0
- package/dist/util/errors.js +11 -0
- package/dist/util/errors.js.map +1 -0
- package/dist/util/http.d.ts +6 -0
- package/dist/util/http.js +11 -0
- package/dist/util/http.js.map +1 -0
- package/dist/util/idKey.d.ts +2 -0
- package/dist/util/idKey.js +11 -0
- package/dist/util/idKey.js.map +1 -0
- package/dist/util/object.d.ts +7 -0
- package/dist/util/object.js +62 -0
- package/dist/util/object.js.map +1 -0
- package/dist/util/outputs.d.ts +1 -0
- package/dist/util/outputs.js +28 -0
- package/dist/util/outputs.js.map +1 -0
- package/dist/util/paths.d.ts +4 -0
- package/dist/util/paths.js +26 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/platform.d.ts +1 -0
- package/dist/util/platform.js +7 -0
- package/dist/util/platform.js.map +1 -0
- package/dist/util/template.d.ts +1 -0
- package/dist/util/template.js +61 -0
- package/dist/util/template.js.map +1 -0
- package/dist/util/version.d.ts +2 -0
- package/dist/util/version.js +35 -0
- package/dist/util/version.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.spellHome = spellHome;
|
|
7
|
+
exports.spellsRoot = spellsRoot;
|
|
8
|
+
exports.logsRoot = logsRoot;
|
|
9
|
+
exports.ensureSpellDirs = ensureSpellDirs;
|
|
10
|
+
const promises_1 = require("node:fs/promises");
|
|
11
|
+
const node_os_1 = require("node:os");
|
|
12
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
13
|
+
function spellHome() {
|
|
14
|
+
return node_path_1.default.join((0, node_os_1.homedir)(), ".spell");
|
|
15
|
+
}
|
|
16
|
+
function spellsRoot() {
|
|
17
|
+
return node_path_1.default.join(spellHome(), "spells");
|
|
18
|
+
}
|
|
19
|
+
function logsRoot() {
|
|
20
|
+
return node_path_1.default.join(spellHome(), "logs");
|
|
21
|
+
}
|
|
22
|
+
async function ensureSpellDirs() {
|
|
23
|
+
await (0, promises_1.mkdir)(spellsRoot(), { recursive: true });
|
|
24
|
+
await (0, promises_1.mkdir)(logsRoot(), { recursive: true });
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/util/paths.ts"],"names":[],"mappings":";;;;;AAIA,8BAEC;AAED,gCAEC;AAED,4BAEC;AAED,0CAGC;AAnBD,+CAAyC;AACzC,qCAAkC;AAClC,0DAA6B;AAE7B,SAAgB,SAAS;IACvB,OAAO,mBAAI,CAAC,IAAI,CAAC,IAAA,iBAAO,GAAE,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,UAAU;IACxB,OAAO,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,QAAQ;IACtB,OAAO,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAEM,KAAK,UAAU,eAAe;IACnC,MAAM,IAAA,gBAAK,EAAC,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAA,gBAAK,EAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function detectHostPlatform(): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/util/platform.ts"],"names":[],"mappings":";;AAAA,gDAEC;AAFD,SAAgB,kBAAkB;IAChC,OAAO,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function applyTemplate(value: unknown, input: Record<string, unknown>, env: NodeJS.ProcessEnv): unknown;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyTemplate = applyTemplate;
|
|
4
|
+
const errors_1 = require("./errors");
|
|
5
|
+
const object_1 = require("./object");
|
|
6
|
+
const TEMPLATE_PATTERN = /{{\s*(INPUT|ENV)\.([A-Za-z0-9_.-]+)\s*}}/g;
|
|
7
|
+
const UNRESOLVED_PATTERN = /{{\s*[^}]+\s*}}/;
|
|
8
|
+
function applyTemplate(value, input, env) {
|
|
9
|
+
if (typeof value === "string") {
|
|
10
|
+
return resolveStringTemplate(value, input, env);
|
|
11
|
+
}
|
|
12
|
+
if (Array.isArray(value)) {
|
|
13
|
+
return value.map((entry) => applyTemplate(entry, input, env));
|
|
14
|
+
}
|
|
15
|
+
if (value && typeof value === "object") {
|
|
16
|
+
const out = {};
|
|
17
|
+
for (const [k, v] of Object.entries(value)) {
|
|
18
|
+
out[k] = applyTemplate(v, input, env);
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
function resolveStringTemplate(template, input, env) {
|
|
25
|
+
const matches = [...template.matchAll(TEMPLATE_PATTERN)];
|
|
26
|
+
if (matches.length === 0) {
|
|
27
|
+
if (UNRESOLVED_PATTERN.test(template)) {
|
|
28
|
+
throw new errors_1.SpellError(`unresolved template: ${template}`);
|
|
29
|
+
}
|
|
30
|
+
return template;
|
|
31
|
+
}
|
|
32
|
+
if (matches.length === 1 && matches[0][0] === template) {
|
|
33
|
+
const resolved = resolveToken(matches[0][1], matches[0][2], input, env);
|
|
34
|
+
return resolved;
|
|
35
|
+
}
|
|
36
|
+
let replaced = template;
|
|
37
|
+
for (const match of matches) {
|
|
38
|
+
const resolved = resolveToken(match[1], match[2], input, env);
|
|
39
|
+
const replacement = typeof resolved === "string" ? resolved : JSON.stringify(resolved);
|
|
40
|
+
replaced = replaced.replace(match[0], replacement);
|
|
41
|
+
}
|
|
42
|
+
if (UNRESOLVED_PATTERN.test(replaced)) {
|
|
43
|
+
throw new errors_1.SpellError(`unresolved template: ${replaced}`);
|
|
44
|
+
}
|
|
45
|
+
return replaced;
|
|
46
|
+
}
|
|
47
|
+
function resolveToken(source, path, input, env) {
|
|
48
|
+
if (source === "INPUT") {
|
|
49
|
+
const value = (0, object_1.getByDotPath)(input, path);
|
|
50
|
+
if (value === undefined) {
|
|
51
|
+
throw new errors_1.SpellError(`unresolved template: {{INPUT.${path}}}`);
|
|
52
|
+
}
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
const value = env[path];
|
|
56
|
+
if (value === undefined) {
|
|
57
|
+
throw new errors_1.SpellError(`unresolved template: {{ENV.${path}}}`);
|
|
58
|
+
}
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/util/template.ts"],"names":[],"mappings":";;AAMA,sCAkBC;AAxBD,qCAAsC;AACtC,qCAAwC;AAExC,MAAM,gBAAgB,GAAG,2CAA2C,CAAC;AACrE,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAE7C,SAAgB,aAAa,CAAC,KAAc,EAAE,KAA8B,EAAE,GAAsB;IAClG,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB,EAAE,KAA8B,EAAE,GAAsB;IACrG,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,mBAAU,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACxE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvF,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,mBAAU,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,IAAY,EAAE,KAA8B,EAAE,GAAsB;IACxG,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAA,qBAAY,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,mBAAU,CAAC,gCAAgC,IAAI,IAAI,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,mBAAU,CAAC,8BAA8B,IAAI,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.selectLatestVersion = selectLatestVersion;
|
|
4
|
+
exports.compareVersionDesc = compareVersionDesc;
|
|
5
|
+
function selectLatestVersion(versions) {
|
|
6
|
+
const sorted = [...versions].sort(compareVersionDesc);
|
|
7
|
+
return sorted[0];
|
|
8
|
+
}
|
|
9
|
+
function compareVersionDesc(a, b) {
|
|
10
|
+
const aParts = parseSemverParts(a);
|
|
11
|
+
const bParts = parseSemverParts(b);
|
|
12
|
+
if (aParts && bParts) {
|
|
13
|
+
for (let i = 0; i < 3; i += 1) {
|
|
14
|
+
if (aParts[i] !== bParts[i]) {
|
|
15
|
+
return bParts[i] - aParts[i];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return b.localeCompare(a);
|
|
19
|
+
}
|
|
20
|
+
if (aParts && !bParts) {
|
|
21
|
+
return -1;
|
|
22
|
+
}
|
|
23
|
+
if (!aParts && bParts) {
|
|
24
|
+
return 1;
|
|
25
|
+
}
|
|
26
|
+
return b.localeCompare(a);
|
|
27
|
+
}
|
|
28
|
+
function parseSemverParts(version) {
|
|
29
|
+
const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version);
|
|
30
|
+
if (!match) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return [Number(match[1]), Number(match[2]), Number(match[3])];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/util/version.ts"],"names":[],"mappings":";;AAAA,kDAGC;AAED,gDAsBC;AA3BD,SAAgB,mBAAmB,CAAC,QAAkB;IACpD,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,SAAgB,kBAAkB,CAAC,CAAS,EAAE,CAAS;IACrD,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5B,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "spell-runtime",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Minimal CLI runtime for SpellBundle v1",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "commonjs",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"README.txt",
|
|
10
|
+
"LICENSE"
|
|
11
|
+
],
|
|
12
|
+
"bin": {
|
|
13
|
+
"spell": "dist/cli/index.js"
|
|
14
|
+
},
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=20"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"dev": "tsx src/cli/index.ts",
|
|
20
|
+
"build": "tsc -p tsconfig.json",
|
|
21
|
+
"prepare": "npm run build",
|
|
22
|
+
"test": "vitest run",
|
|
23
|
+
"test:watch": "vitest",
|
|
24
|
+
"smoke:link": "npm run build && npm link && spell --help",
|
|
25
|
+
"smoke:npx": "npm run build && npx --yes --package file:. spell --help"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"ajv": "^8.17.1",
|
|
29
|
+
"commander": "^14.0.1",
|
|
30
|
+
"js-yaml": "^4.1.0",
|
|
31
|
+
"pino": "^9.7.0",
|
|
32
|
+
"undici": "^7.16.0"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/js-yaml": "^4.0.9",
|
|
36
|
+
"@types/node": "^24.3.0",
|
|
37
|
+
"nock": "^14.0.10",
|
|
38
|
+
"tsx": "^4.20.5",
|
|
39
|
+
"typescript": "^5.9.2",
|
|
40
|
+
"vitest": "^3.2.4"
|
|
41
|
+
}
|
|
42
|
+
}
|