@helix3/helix-cli 0.1.18-helix3.280 → 0.1.18-helix3.281

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.
@@ -9,6 +9,20 @@ export type PublishAddOnPackageVersionOptions = {
9
9
  notes?: string;
10
10
  expectedCurrentVersionId?: string;
11
11
  updateId?: string;
12
+ /**
13
+ * Update the add-on's fitment/hide-ops BEFORE sealing the new mesh into a
14
+ * Version, so the seal freezes the NEW contract rather than the old one —
15
+ * `AddOnPackagePublisher.publishNextVersion` reads `item.fits` and
16
+ * `item.properties.ops` off the item row at seal time (it does not take
17
+ * either from the seal request), so updating the row first is what makes
18
+ * either one land in the new Version at all.
19
+ *
20
+ * Validated with the exact same `validateAddOnContract` a brand-new
21
+ * `publish` runs, so a hide op this command would accept is never one
22
+ * `publish` would refuse on a fresh item, or the reverse.
23
+ */
24
+ fits?: Record<string, unknown>;
25
+ ops?: Record<string, unknown>[];
12
26
  /** Bounded wait for the uploaded mesh to clear verify/optimize and reach `ready`. */
13
27
  assetReadyTimeoutMs?: number;
14
28
  onProgress?: (message: string) => void;
@@ -47,6 +47,9 @@ async function publishAddOnPackageVersion(itemId, file, options, credentials) {
47
47
  const api = api_1.HelixApi.forCredentials(credentials);
48
48
  const filename = (0, node_path_1.basename)(file);
49
49
  const mimeType = 'model/gltf-binary';
50
+ if (options.fits !== undefined || options.ops !== undefined) {
51
+ await updateFitsAndOps(api, itemId, options.fits, options.ops, progress);
52
+ }
50
53
  progress('Requesting a presigned upload for the corrected mesh…');
51
54
  const presign = await api.requestItem('POST', `/api/v1/universal-items/${itemId}/assets`, {
52
55
  rendition: 'web',
@@ -75,6 +78,43 @@ async function publishAddOnPackageVersion(itemId, file, options, credentials) {
75
78
  body.updateId = options.updateId;
76
79
  return api.request('POST', `/api/v1/universal-items/${itemId}/add-on-package/versions`, body);
77
80
  }
81
+ /**
82
+ * Update this add-on's `fits` and/or `properties.ops` through the ordinary
83
+ * `PATCH :itemId` route, BEFORE the mesh upload + seal below — so the new
84
+ * Package Version freezes the contract this call just wrote.
85
+ *
86
+ * `PATCH`'s `properties` is a full replacement, not a merge (the backend's
87
+ * `preservePinnedVehiclePackageProperties` only special-cases a pinned
88
+ * vehicle artifact) — sending `{ properties: { ops } }` on its own would
89
+ * silently drop every other key the item's `properties` already carried.
90
+ * This always reads the item first and republishes its FULL current
91
+ * `properties` with only `ops` replaced, when `ops` is the field changing.
92
+ *
93
+ * Validated with the exact same `validateAddOnContract` a fresh `publish`
94
+ * enforces, checked against whichever of `fits`/`ops` the caller did NOT
95
+ * pass (the item's current value) — so a request that only changes ops is
96
+ * still checked against its real, current fitment, and vice versa.
97
+ */
98
+ async function updateFitsAndOps(api, itemId, fits, ops, progress) {
99
+ progress('Reading the item to merge its fitment/ops update…');
100
+ const item = await api.requestItem('GET', `/api/v1/universal-items/${itemId}`);
101
+ if (item.kind !== 'add_on') {
102
+ throw new Error(`--fits/--ops apply to add-ons only; ${itemId} is kind "${item.kind}".`);
103
+ }
104
+ const nextFits = fits ?? item.fits ?? {};
105
+ const nextOps = ops ?? (Array.isArray(item.properties?.ops) ? item.properties.ops : []);
106
+ // The SAME validator a brand-new `publish` runs — a hide op this command
107
+ // accepts is never one `publish` would refuse on a fresh item.
108
+ (0, item_1.validateAddOnContract)(nextFits, nextOps);
109
+ const body = {};
110
+ if (fits !== undefined)
111
+ body.fits = nextFits;
112
+ if (ops !== undefined) {
113
+ body.properties = { ...(item.properties ?? {}), ops: nextOps };
114
+ }
115
+ progress('Updating fitment/ops before sealing the new mesh…');
116
+ await api.request('PATCH', `/api/v1/universal-items/${itemId}`, body);
117
+ }
78
118
  async function waitForAssetReady(api, itemId, assetId, timeoutMs) {
79
119
  const deadline = Date.now() + timeoutMs;
80
120
  for (;;) {
@@ -1 +1 @@
1
- {"version":3,"file":"addOnPackageVersion.js","sourceRoot":"","sources":["../src/addOnPackageVersion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"addOnPackageVersion.js","sourceRoot":"","sources":["../src/addOnPackageVersion.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1252,6 +1252,8 @@ item
1252
1252
  .option('--notes <text>', 'optional creator-facing changelog note')
1253
1253
  .option('--expected-current-version-id <uuid>', 'refuse if the item has moved off this Package Version since you last read it')
1254
1254
  .option('--update-id <uuid>', 'idempotency key — retrying with the same id never double-publishes')
1255
+ .option('--fits <json|file>', 'update the { slotType, requires, only? } fitment BEFORE sealing this Version, so the new Version freezes it — same shape and validation as `publish`')
1256
+ .option('--ops <json|file>', 'update the hide/tune/mount/patch op array BEFORE sealing this Version — same shape and validation as `publish`; e.g. a new region-hide op')
1255
1257
  .option('--json', 'machine-readable output')
1256
1258
  .action(async (itemId, file, opts) => {
1257
1259
  const creds = requireAuth();
@@ -1261,6 +1263,8 @@ item
1261
1263
  notes: opts.notes,
1262
1264
  expectedCurrentVersionId: opts.expectedCurrentVersionId,
1263
1265
  updateId: opts.updateId,
1266
+ fits: opts.fits !== undefined ? (0, lib_1.parseJsonObjectOrFile)(opts.fits, '--fits') : undefined,
1267
+ ops: opts.ops !== undefined ? (0, lib_1.parseJsonArrayOrFile)(opts.ops, '--ops') : undefined,
1264
1268
  onProgress: (message) => !opts.json && console.log(message),
1265
1269
  }, creds);
1266
1270
  if (opts.json) {