@helix3/helix-cli 0.1.13-helix3.131 → 0.1.13-helix3.133
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/currency.d.ts +21 -0
- package/dist/currency.js +61 -0
- package/dist/currency.js.map +1 -1
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -1
- package/dist/lib.d.ts +1 -1
- package/dist/lib.js +5 -4
- package/dist/lib.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
package/dist/currency.d.ts
CHANGED
|
@@ -18,4 +18,25 @@ export declare const ADVISORY_SYSTEMS: {
|
|
|
18
18
|
slug: string;
|
|
19
19
|
reason: string;
|
|
20
20
|
}[];
|
|
21
|
+
export type WeaponPinFinding = 'current' | 'newer-version' | 'unresolved' | 'unknown';
|
|
22
|
+
export type WeaponPinRow = {
|
|
23
|
+
/** The pin as authored, `assetId@version`. */
|
|
24
|
+
pin: string;
|
|
25
|
+
assetId: string;
|
|
26
|
+
pinnedVersion: number | null;
|
|
27
|
+
currentVersion: number | null;
|
|
28
|
+
title: string | null;
|
|
29
|
+
finding: WeaponPinFinding;
|
|
30
|
+
note: string;
|
|
31
|
+
};
|
|
32
|
+
export type WeaponPinsCurrency = {
|
|
33
|
+
rows: WeaponPinRow[];
|
|
34
|
+
/** helix.json's multiplayer block and public/multiplayer.json declare DIFFERENT weaponItems. */
|
|
35
|
+
copiesDiverge: boolean;
|
|
36
|
+
};
|
|
37
|
+
/** The transport slice the vault resolve needs — item-def inspect's shape, injectable for tests. */
|
|
38
|
+
export type VaultResolveApi = {
|
|
39
|
+
request<T>(method: string, path: string): Promise<T>;
|
|
40
|
+
};
|
|
41
|
+
export declare function assessWeaponPins(dir: string, client?: VaultResolveApi): Promise<WeaponPinsCurrency | null>;
|
|
21
42
|
export declare function assessWorldCurrency(dir: string, client?: CatalogClient): Promise<WorldCurrency | null>;
|
package/dist/currency.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ADVISORY_SYSTEMS = void 0;
|
|
4
|
+
exports.assessWeaponPins = assessWeaponPins;
|
|
4
5
|
exports.assessWorldCurrency = assessWorldCurrency;
|
|
5
6
|
const node_fs_1 = require("node:fs");
|
|
6
7
|
const node_path_1 = require("node:path");
|
|
8
|
+
const api_1 = require("./api");
|
|
7
9
|
const config_1 = require("./config");
|
|
8
10
|
const install_1 = require("./install");
|
|
11
|
+
const inspect_1 = require("./itemDef/inspect");
|
|
12
|
+
const publish_1 = require("./itemDef/publish");
|
|
9
13
|
const resolve_1 = require("./resolve");
|
|
10
14
|
// Systems not required by helixVersion but that unlock platform-level features — flagged as
|
|
11
15
|
// `missing-recommended` when a world hasn't pinned them.
|
|
@@ -67,6 +71,63 @@ async function classifyAdvisory(client, slug, reason) {
|
|
|
67
71
|
return { slug, pin: null, locked: null, newestInRange: null, catalogLatest: null, finding: 'unknown', note: `catalog query failed (${errorMessage(err)})` };
|
|
68
72
|
}
|
|
69
73
|
}
|
|
74
|
+
function readWeaponItems(path) {
|
|
75
|
+
if (!(0, node_fs_1.existsSync)(path))
|
|
76
|
+
return null;
|
|
77
|
+
try {
|
|
78
|
+
const parsed = JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
|
|
79
|
+
const list = Array.isArray(parsed.weaponItems) ? parsed.weaponItems : parsed.multiplayer?.weaponItems;
|
|
80
|
+
return Array.isArray(list) ? list.filter((p) => typeof p === 'string') : null;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async function classifyWeaponPin(api, pin) {
|
|
87
|
+
let assetId;
|
|
88
|
+
let pinnedVersion;
|
|
89
|
+
try {
|
|
90
|
+
({ assetId, version: pinnedVersion } = (0, inspect_1.parseAssetRef)(pin));
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
return { pin, assetId: pin, pinnedVersion: null, currentVersion: null, title: null, finding: 'unknown', note: errorMessage(err) };
|
|
94
|
+
}
|
|
95
|
+
if (pinnedVersion === null) {
|
|
96
|
+
return { pin, assetId, pinnedVersion: null, currentVersion: null, title: null, finding: 'unknown', note: 'pin carries no @version — publish validation requires one' };
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
const detail = await api.request('GET', `${publish_1.VAULT_ASSETS_PATH}/${encodeURIComponent(assetId)}`);
|
|
100
|
+
const currentVersion = detail.artifact?.version ?? null;
|
|
101
|
+
const title = detail.title ?? null;
|
|
102
|
+
if (currentVersion === null) {
|
|
103
|
+
return { pin, assetId, pinnedVersion, currentVersion: null, title, finding: 'unresolved', note: 'the vault resolve answered no artifact version (held or not public here)' };
|
|
104
|
+
}
|
|
105
|
+
return currentVersion > pinnedVersion
|
|
106
|
+
? { pin, assetId, pinnedVersion, currentVersion, title, finding: 'newer-version', note: '' }
|
|
107
|
+
: { pin, assetId, pinnedVersion, currentVersion, title, finding: 'current', note: '' };
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
// A 404 in THIS environment usually means the pin was minted against another backend
|
|
111
|
+
// (dev-stack ids in a live world) — the room will answer every damage op with its default.
|
|
112
|
+
return { pin, assetId, pinnedVersion, currentVersion: null, title: null, finding: 'unresolved', note: errorMessage(err) };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// null when neither config copy declares weaponItems — not a gun world, callers omit the section.
|
|
116
|
+
async function assessWeaponPins(dir, client) {
|
|
117
|
+
const manifestPath = install_1.WORLD_MANIFEST_LOCATIONS.map((rel) => (0, node_path_1.join)(dir, rel)).find((p) => (0, node_fs_1.existsSync)(p));
|
|
118
|
+
const manifestPins = manifestPath ? readWeaponItems(manifestPath) : null;
|
|
119
|
+
const roomPins = readWeaponItems((0, node_path_1.join)(dir, 'public', 'multiplayer.json'));
|
|
120
|
+
if (manifestPins === null && roomPins === null)
|
|
121
|
+
return null;
|
|
122
|
+
const copiesDiverge = manifestPins !== null &&
|
|
123
|
+
roomPins !== null &&
|
|
124
|
+
(manifestPins.length !== roomPins.length || manifestPins.some((p) => !roomPins.includes(p)));
|
|
125
|
+
const creds = (0, config_1.loadCredentials)();
|
|
126
|
+
const api = client ?? (creds ? api_1.HelixApi.forCredentials(creds) : new api_1.HelixApi(config_1.DEFAULT_API_URL));
|
|
127
|
+
const unique = [...new Set([...(manifestPins ?? []), ...(roomPins ?? [])])];
|
|
128
|
+
const rows = await Promise.all(unique.map((pin) => classifyWeaponPin(api, pin)));
|
|
129
|
+
return { rows, copiesDiverge };
|
|
130
|
+
}
|
|
70
131
|
// null when `dir` isn't a world (no helix.json in either manifest location) — callers omit the
|
|
71
132
|
// section silently. `manifest.systems` absent is treated as `{}`; advisory checks still run.
|
|
72
133
|
async function assessWorldCurrency(dir, client) {
|
package/dist/currency.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"currency.js","sourceRoot":"","sources":["../src/currency.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"currency.js","sourceRoot":"","sources":["../src/currency.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3362,6 +3362,19 @@ thumbnail
|
|
|
3362
3362
|
fail(err instanceof lib_1.ApiError ? err.render() : `✖ ${err instanceof Error ? err.message : String(err)}`);
|
|
3363
3363
|
}
|
|
3364
3364
|
});
|
|
3365
|
+
function formatWeaponPinRow(row) {
|
|
3366
|
+
const label = row.title ? `${row.title} (${row.assetId.slice(0, 8)}…)` : row.pin;
|
|
3367
|
+
switch (row.finding) {
|
|
3368
|
+
case 'current':
|
|
3369
|
+
return ` ✔ ${label}: pinned @${row.pinnedVersion} (current)`;
|
|
3370
|
+
case 'newer-version':
|
|
3371
|
+
return ` ⬆ ${label}: pinned @${row.pinnedVersion} → @${row.currentVersion} published — re-pin BOTH config copies (and any itemDamage literal naming the pin), rebuild, republish`;
|
|
3372
|
+
case 'unresolved':
|
|
3373
|
+
return ` ⚠ ${row.pin}: does not resolve against this backend (${row.note}) — the room answers every damage op for it with the rule's default`;
|
|
3374
|
+
case 'unknown':
|
|
3375
|
+
return ` ? ${row.pin}: ${row.note}`;
|
|
3376
|
+
}
|
|
3377
|
+
}
|
|
3365
3378
|
function formatWorldSystemRow(row) {
|
|
3366
3379
|
const withNote = (line) => (row.note ? `${line} — ${row.note}` : line);
|
|
3367
3380
|
switch (row.finding) {
|
|
@@ -3558,6 +3571,16 @@ program
|
|
|
3558
3571
|
console.log(formatWorldSystemRow(row));
|
|
3559
3572
|
}
|
|
3560
3573
|
}
|
|
3574
|
+
const weaponPins = await (0, lib_1.assessWeaponPins)((0, node_path_1.resolve)(opts.project));
|
|
3575
|
+
if (weaponPins) {
|
|
3576
|
+
console.log('\nWeapon definition pins (multiplayer.weaponItems):');
|
|
3577
|
+
if (weaponPins.copiesDiverge) {
|
|
3578
|
+
console.log(' ⚠ helix.json and public/multiplayer.json declare DIFFERENT weaponItems — the room fetches public/multiplayer.json, publish validates helix.json; sync them first');
|
|
3579
|
+
}
|
|
3580
|
+
for (const row of weaponPins.rows) {
|
|
3581
|
+
console.log(formatWeaponPinRow(row));
|
|
3582
|
+
}
|
|
3583
|
+
}
|
|
3561
3584
|
});
|
|
3562
3585
|
// ---- Unknown subcommands must ERROR, not print the full command list -------
|
|
3563
3586
|
//
|