@bitmagic/cli 0.1.52-dev.5 → 0.1.52-dev.7
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 +18 -4
- package/dist/assets/add.js +14 -12
- package/dist/assets/add.js.map +1 -1
- package/dist/assets/file-kind.d.ts +8 -0
- package/dist/assets/file-kind.js +17 -2
- package/dist/assets/file-kind.js.map +1 -1
- package/dist/assets/vxl-summary.d.ts +9 -0
- package/dist/assets/vxl-summary.js +15 -0
- package/dist/assets/vxl-summary.js.map +1 -1
- package/dist/commands/assets.d.ts +3 -10
- package/dist/commands/assets.js +11 -18
- package/dist/commands/assets.js.map +1 -1
- package/dist/commands/cover.js +2 -3
- package/dist/commands/cover.js.map +1 -1
- package/dist/commands/forge.d.ts +2 -9
- package/dist/commands/forge.js +2 -13
- package/dist/commands/forge.js.map +1 -1
- package/dist/commands/generate.d.ts +3 -10
- package/dist/commands/generate.js +3 -36
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/judge.d.ts +2 -7
- package/dist/commands/judge.js +2 -3
- package/dist/commands/judge.js.map +1 -1
- package/dist/commands/run-deps.d.ts +27 -0
- package/dist/commands/run-deps.js +43 -0
- package/dist/commands/run-deps.js.map +1 -0
- package/dist/editor/journal.d.ts +31 -0
- package/dist/editor/journal.js +42 -0
- package/dist/editor/journal.js.map +1 -1
- package/dist/editor/server.js +196 -4
- package/dist/editor/server.js.map +1 -1
- package/dist/editor/shell-page.js +127 -27
- package/dist/editor/shell-page.js.map +1 -1
- package/dist/editor/voxel-save.d.ts +47 -0
- package/dist/editor/voxel-save.js +53 -0
- package/dist/editor/voxel-save.js.map +1 -0
- package/dist/errors.d.ts +10 -0
- package/dist/errors.js +16 -0
- package/dist/errors.js.map +1 -1
- package/dist/forge/apply-modifications.d.ts +9 -0
- package/dist/forge/apply-modifications.js +12 -18
- package/dist/forge/apply-modifications.js.map +1 -1
- package/dist/forge/voxelize-session.d.ts +37 -0
- package/dist/forge/voxelize-session.js +2 -2
- package/dist/forge/voxelize-session.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { isJsonObject } from '../project/world-json.js';
|
|
2
|
+
function assetsOf(world) {
|
|
3
|
+
return Array.isArray(world.assets) ? world.assets : [];
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Returns null when there is nothing safe to write.
|
|
7
|
+
*
|
|
8
|
+
* An asset with no id is the one shape that must never be guessed at: the engine has already
|
|
9
|
+
* uploaded the bytes and reported success, so a host that shrugs here produces a save that "worked"
|
|
10
|
+
* and reaches no file. The caller turns this into a loud refusal instead.
|
|
11
|
+
*/
|
|
12
|
+
export function buildVoxelSaveModifications(payload, world) {
|
|
13
|
+
const asset = payload.asset;
|
|
14
|
+
if (!isJsonObject(asset) || typeof asset.id !== 'string' || asset.id === '')
|
|
15
|
+
return null;
|
|
16
|
+
const assetId = asset.id;
|
|
17
|
+
const existing = assetsOf(world).some((item) => isJsonObject(item) && item.id === assetId);
|
|
18
|
+
const modifications = [existing
|
|
19
|
+
? {
|
|
20
|
+
type: 'updateRoot',
|
|
21
|
+
path: ['assets'],
|
|
22
|
+
predicate: (item) => isJsonObject(item) && item.id === assetId,
|
|
23
|
+
// Field by field, so anything the agent added since LOAD_GAME survives. See the header.
|
|
24
|
+
value: (item) => ({ ...(isJsonObject(item) ? item : {}), ...asset }),
|
|
25
|
+
}
|
|
26
|
+
: {
|
|
27
|
+
type: 'upsertRoot',
|
|
28
|
+
path: ['assets'],
|
|
29
|
+
predicate: (item) => isJsonObject(item) && item.id === assetId,
|
|
30
|
+
value: asset,
|
|
31
|
+
}];
|
|
32
|
+
// Instances the save minted. Upserted by id rather than pushed, so a retry of the same save does
|
|
33
|
+
// not leave two copies of one object standing in the same place.
|
|
34
|
+
const instances = Array.isArray(payload.environmentObjects) ? payload.environmentObjects : [];
|
|
35
|
+
for (const instance of instances) {
|
|
36
|
+
if (!isJsonObject(instance) || typeof instance.id !== 'string' || instance.id === '')
|
|
37
|
+
continue;
|
|
38
|
+
const instanceId = instance.id;
|
|
39
|
+
modifications.push({
|
|
40
|
+
type: 'upsertRoot',
|
|
41
|
+
path: ['environmentObjects'],
|
|
42
|
+
predicate: (item) => isJsonObject(item) && item.id === instanceId,
|
|
43
|
+
value: instance,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
modifications,
|
|
48
|
+
assetId,
|
|
49
|
+
assetName: typeof asset.name === 'string' && asset.name !== '' ? asset.name : assetId,
|
|
50
|
+
merged: existing,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=voxel-save.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voxel-save.js","sourceRoot":"","sources":["../../src/editor/voxel-save.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,YAAY,EAAmB,MAAM,0BAA0B,CAAC;AAkBzE,SAAS,QAAQ,CAAC,KAAiB;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACzD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAAyB,EACzB,KAAiB;IAEjB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACzF,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;IAEzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IAC3F,MAAM,aAAa,GAA4B,CAAC,QAAQ;YACtD,CAAC,CAAC;gBACA,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,CAAC,QAAQ,CAAC;gBAChB,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO;gBACvE,wFAAwF;gBACxF,KAAK,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;aAC9E;YACD,CAAC,CAAC;gBACA,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,CAAC,QAAQ,CAAC;gBAChB,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO;gBACvE,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;IAEL,iGAAiG;IACjG,iEAAiE;IACjE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,EAAE,KAAK,QAAQ,IAAI,QAAQ,CAAC,EAAE,KAAK,EAAE;YAAE,SAAS;QAC/F,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC/B,aAAa,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,CAAC,oBAAoB,CAAC;YAC5B,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,UAAU;YAC1E,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,aAAa;QACb,OAAO;QACP,SAAS,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;QACrF,MAAM,EAAE,QAAQ;KACjB,CAAC;AACJ,CAAC"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -15,3 +15,13 @@ export declare class CliError extends Error {
|
|
|
15
15
|
readonly code: string | undefined;
|
|
16
16
|
constructor(message: string, exitCode?: number, code?: string);
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* The `code` off a Node fs/child-process error, without pulling in the NodeJS global namespace.
|
|
20
|
+
*
|
|
21
|
+
* Shared because both copies existed to answer the same question — "is this the ENOENT I have a
|
|
22
|
+
* sentence for, or something I must not swallow?" — and a lane that maps only the codes it thought
|
|
23
|
+
* of lets the rest escape as a raw stack trace, past whatever guarantee its command documents.
|
|
24
|
+
*/
|
|
25
|
+
export declare function errnoCode(error: unknown): string | undefined;
|
|
26
|
+
/** The errno, or the message when there is none — so no failure mode is left unmapped. */
|
|
27
|
+
export declare function describeErrno(error: unknown): string;
|
package/dist/errors.js
CHANGED
|
@@ -20,4 +20,20 @@ export class CliError extends Error {
|
|
|
20
20
|
this.code = code;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* The `code` off a Node fs/child-process error, without pulling in the NodeJS global namespace.
|
|
25
|
+
*
|
|
26
|
+
* Shared because both copies existed to answer the same question — "is this the ENOENT I have a
|
|
27
|
+
* sentence for, or something I must not swallow?" — and a lane that maps only the codes it thought
|
|
28
|
+
* of lets the rest escape as a raw stack trace, past whatever guarantee its command documents.
|
|
29
|
+
*/
|
|
30
|
+
export function errnoCode(error) {
|
|
31
|
+
return typeof error === 'object' && error !== null && 'code' in error
|
|
32
|
+
? String(error.code)
|
|
33
|
+
: undefined;
|
|
34
|
+
}
|
|
35
|
+
/** The errno, or the message when there is none — so no failure mode is left unmapped. */
|
|
36
|
+
export function describeErrno(error) {
|
|
37
|
+
return errnoCode(error) ?? (error instanceof Error ? error.message : String(error));
|
|
38
|
+
}
|
|
23
39
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,QAAQ,CAAS;IACjB,IAAI,CAAqB;IAElC,YAAY,OAAe,EAAE,QAAQ,GAAG,CAAC,EAAE,IAAa;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,QAAQ,CAAS;IACjB,IAAI,CAAqB;IAElC,YAAY,OAAe,EAAE,QAAQ,GAAG,CAAC,EAAE,IAAa;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK;QACnE,CAAC,CAAC,MAAM,CAAE,KAA2B,CAAC,IAAI,CAAC;QAC3C,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -3,6 +3,15 @@ export interface ApplyModificationsOutcome {
|
|
|
3
3
|
applied: number;
|
|
4
4
|
/** One human-readable line per modification, for the command to print. */
|
|
5
5
|
summary: string[];
|
|
6
|
+
/**
|
|
7
|
+
* How many entries each modification actually changed, in the same order.
|
|
8
|
+
*
|
|
9
|
+
* Reported from the write itself rather than counted off an earlier read. A caller that counts
|
|
10
|
+
* beforehand — "removing this asset will take 3 placed instances with it" — is describing a
|
|
11
|
+
* document that may not be the one written: `bitmagic dev`'s whole premise is that the creator's
|
|
12
|
+
* agent edits world.json concurrently, and the applier re-reads it under its own atomic write.
|
|
13
|
+
*/
|
|
14
|
+
changed: number[];
|
|
6
15
|
}
|
|
7
16
|
/**
|
|
8
17
|
* Read world.json, apply every modification in order, write once.
|
|
@@ -47,13 +47,6 @@ function ensureArray(parent, key) {
|
|
|
47
47
|
}
|
|
48
48
|
return parent[key];
|
|
49
49
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Apply one modification in place, returning the path it touched for the summary line.
|
|
52
|
-
*
|
|
53
|
-
* `*Root` types address the document root; the rest address paths inside `worldProfileData`.
|
|
54
|
-
* Writing a `set` at the root instead would put it where the engine never looks, which reads as
|
|
55
|
-
* success — the same trap `generate/apply-patches.ts` documents for `WorldPatch`.
|
|
56
|
-
*/
|
|
57
50
|
function applyOne(world, modification) {
|
|
58
51
|
const isRoot = modification.type.endsWith('Root');
|
|
59
52
|
let target;
|
|
@@ -85,35 +78,35 @@ function applyOne(world, modification) {
|
|
|
85
78
|
case 'set':
|
|
86
79
|
case 'setRoot':
|
|
87
80
|
parent[lastKey] = modification.value;
|
|
88
|
-
return `set ${where}
|
|
81
|
+
return { summary: `set ${where}`, changed: 1 };
|
|
89
82
|
case 'push':
|
|
90
83
|
case 'pushRoot':
|
|
91
84
|
ensureArray(parent, lastKey).push(modification.value);
|
|
92
|
-
return `added to ${where}
|
|
85
|
+
return { summary: `added to ${where}`, changed: 1 };
|
|
93
86
|
case 'update':
|
|
94
87
|
case 'updateRoot': {
|
|
95
88
|
const { predicate, value } = modification;
|
|
96
89
|
const array = parent[lastKey];
|
|
97
90
|
if (!Array.isArray(array))
|
|
98
|
-
return `skipped ${where} (not an array)
|
|
91
|
+
return { summary: `skipped ${where} (not an array)`, changed: 0 };
|
|
99
92
|
const index = array.findIndex(predicate);
|
|
100
93
|
if (index === -1)
|
|
101
|
-
return `no match to update in ${where}
|
|
94
|
+
return { summary: `no match to update in ${where}`, changed: 0 };
|
|
102
95
|
array[index] = typeof value === 'function'
|
|
103
96
|
? value(array[index])
|
|
104
97
|
: value;
|
|
105
|
-
return `updated ${where}[${index}]
|
|
98
|
+
return { summary: `updated ${where}[${index}]`, changed: 1 };
|
|
106
99
|
}
|
|
107
100
|
case 'remove':
|
|
108
101
|
case 'removeRoot': {
|
|
109
102
|
const { predicate } = modification;
|
|
110
103
|
const array = parent[lastKey];
|
|
111
104
|
if (!Array.isArray(array))
|
|
112
|
-
return `skipped ${where} (not an array)
|
|
105
|
+
return { summary: `skipped ${where} (not an array)`, changed: 0 };
|
|
113
106
|
const kept = array.filter((item) => !predicate(item));
|
|
114
107
|
const removed = array.length - kept.length;
|
|
115
108
|
parent[lastKey] = kept;
|
|
116
|
-
return `removed ${removed} from ${where}
|
|
109
|
+
return { summary: `removed ${removed} from ${where}`, changed: removed };
|
|
117
110
|
}
|
|
118
111
|
case 'upsert':
|
|
119
112
|
case 'upsertRoot': {
|
|
@@ -122,10 +115,10 @@ function applyOne(world, modification) {
|
|
|
122
115
|
const index = array.findIndex(predicate);
|
|
123
116
|
if (index === -1) {
|
|
124
117
|
array.push(value);
|
|
125
|
-
return `added to ${where}
|
|
118
|
+
return { summary: `added to ${where}`, changed: 1 };
|
|
126
119
|
}
|
|
127
120
|
array[index] = value;
|
|
128
|
-
return `updated ${where}[${index}]
|
|
121
|
+
return { summary: `updated ${where}[${index}]`, changed: 1 };
|
|
129
122
|
}
|
|
130
123
|
default: {
|
|
131
124
|
// Not a degradation to swallow: an unknown type means this applier and the shared package's
|
|
@@ -144,7 +137,8 @@ export function applyModificationsToWorld(worldPath, modifications, options = {}
|
|
|
144
137
|
// Baseline BEFORE applying: a violation already present in a legacy or imported world must not
|
|
145
138
|
// block an unrelated write. Only violations this batch INTRODUCES are refused.
|
|
146
139
|
const preExisting = new Set(validateWorldData(world));
|
|
147
|
-
const
|
|
140
|
+
const results = modifications.map((modification) => applyOne(world, modification));
|
|
141
|
+
const summary = results.map((result) => result.summary);
|
|
148
142
|
// The engine statically casts world.json to Partial<GameData> (game/src/bundle/WorldDataLoader.ts),
|
|
149
143
|
// so a non-conforming document breaks `tsc` in a file the creator cannot edit. The gate matters
|
|
150
144
|
// more in this lane than in the web one: by the time it runs the design and geometry are already
|
|
@@ -159,6 +153,6 @@ export function applyModificationsToWorld(worldPath, modifications, options = {}
|
|
|
159
153
|
+ `schema, so nothing was written. Violations: ${introduced.join('; ')}`);
|
|
160
154
|
}
|
|
161
155
|
writeWorldJsonAtomic(worldPath, world);
|
|
162
|
-
return { applied: modifications.length, summary };
|
|
156
|
+
return { applied: modifications.length, summary, changed: results.map((result) => result.changed) };
|
|
163
157
|
}
|
|
164
158
|
//# sourceMappingURL=apply-modifications.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-modifications.js","sourceRoot":"","sources":["../../src/forge/apply-modifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAmB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"apply-modifications.js","sourceRoot":"","sources":["../../src/forge/apply-modifications.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One headless engine, ready to voxelize — the arrangement `bitmagic generate prop`, `generate
|
|
3
|
+
* vehicle` and `assets add <file.glb>` all need and none should own.
|
|
4
|
+
*
|
|
5
|
+
* Only the engine can voxelize, so each of those runs the project's own game in a headless Chrome
|
|
6
|
+
* and talks to it over the forge transport. Getting there is five steps in a fixed order, and the
|
|
7
|
+
* teardown has to run in the reverse order whatever happened:
|
|
8
|
+
*
|
|
9
|
+
* 1. reserve a port in 3000–3199 — the only origins the asset CDN allows, so the page can fetch
|
|
10
|
+
* the project's assets and the GLB it is about to bake;
|
|
11
|
+
* 2. spawn the project's vendored `vite` on it, and wait for it;
|
|
12
|
+
* 3. start the upload proxy — the engine uploads the baked `.vxl` itself, to a presigned URL it
|
|
13
|
+
* asks for at a hardcoded path with no credentials, and the proxy turns that into the
|
|
14
|
+
* authenticated api-server route while keeping the token out of the page
|
|
15
|
+
* (see `upload-proxy.ts`);
|
|
16
|
+
* 4. launch Chrome on the page and wait for the game to load;
|
|
17
|
+
* 5. run the caller's body against `host.transport`, then close the page (it may be mid-upload),
|
|
18
|
+
* then the proxy it was uploading through, then the server underneath both.
|
|
19
|
+
*
|
|
20
|
+
* Three commands carrying three copies of this is how a fix to one of them fails to reach the
|
|
21
|
+
* other two, so it lives here once. The two setup failures a creator can actually hit — no free
|
|
22
|
+
* port, vite not coming up — are reported with the caller's own `retryHint`, because what is kept
|
|
23
|
+
* and how to retry differs per command (a paid mesh, a paid vehicle design, an already-uploaded
|
|
24
|
+
* file) and that sentence is the useful part of the message.
|
|
25
|
+
*/
|
|
26
|
+
import { type ChildProcess } from 'child_process';
|
|
1
27
|
import type { Environment } from '../config/environments.js';
|
|
2
28
|
import { ForgeBrowserHost } from './browser-host.js';
|
|
3
29
|
import { type ProjectContext } from '../project/context.js';
|
|
@@ -22,3 +48,14 @@ export interface VoxelizeSession {
|
|
|
22
48
|
port: number;
|
|
23
49
|
}
|
|
24
50
|
export declare function withVoxelizeSession<T>(options: VoxelizeSessionOptions, body: (session: VoxelizeSession) => Promise<T>): Promise<T>;
|
|
51
|
+
/**
|
|
52
|
+
* Run one teardown step, reporting a failure rather than propagating it. Cleanup must never mask
|
|
53
|
+
* the error that caused it, and must never stop the steps that follow.
|
|
54
|
+
*/
|
|
55
|
+
export declare function closeQuietly(what: string, close: () => Promise<void> | undefined, log: (message: string) => void): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Stop vite, then stop waiting for it. `unref` matters as much as the signal: the child was
|
|
58
|
+
* spawned with a piped stderr, so its handle keeps the parent's event loop alive and a vite that
|
|
59
|
+
* ignores SIGTERM left the CLI hanging after it had already printed its result.
|
|
60
|
+
*/
|
|
61
|
+
export declare function killQuietly(server: ChildProcess, log: (message: string) => void): void;
|
|
@@ -111,7 +111,7 @@ export async function withVoxelizeSession(options, body) {
|
|
|
111
111
|
* Run one teardown step, reporting a failure rather than propagating it. Cleanup must never mask
|
|
112
112
|
* the error that caused it, and must never stop the steps that follow.
|
|
113
113
|
*/
|
|
114
|
-
async function closeQuietly(what, close, log) {
|
|
114
|
+
export async function closeQuietly(what, close, log) {
|
|
115
115
|
try {
|
|
116
116
|
await close();
|
|
117
117
|
}
|
|
@@ -124,7 +124,7 @@ async function closeQuietly(what, close, log) {
|
|
|
124
124
|
* spawned with a piped stderr, so its handle keeps the parent's event loop alive and a vite that
|
|
125
125
|
* ignores SIGTERM left the CLI hanging after it had already printed its result.
|
|
126
126
|
*/
|
|
127
|
-
function killQuietly(server, log) {
|
|
127
|
+
export function killQuietly(server, log) {
|
|
128
128
|
try {
|
|
129
129
|
server.kill('SIGTERM');
|
|
130
130
|
server.stderr?.removeAllListeners('data');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voxelize-session.js","sourceRoot":"","sources":["../../src/forge/voxelize-session.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"voxelize-session.js","sourceRoot":"","sources":["../../src/forge/voxelize-session.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitmagic/cli",
|
|
3
|
-
"version": "0.1.52-dev.
|
|
3
|
+
"version": "0.1.52-dev.7",
|
|
4
4
|
"description": "Build Bitmagic games from your own agent tool",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"author": "Bitmagic Oy",
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
"fflate": "^0.8.2",
|
|
24
24
|
"playwright-core": "^1.59.1",
|
|
25
25
|
"tar": "^7.4.3",
|
|
26
|
-
"@bitmagic/asset-core": "0.2.7-dev.
|
|
27
|
-
"@bitmagic/animation-forger": "0.1.7-dev.
|
|
28
|
-
"@bitmagic/world-forger": "0.1.12-dev.
|
|
26
|
+
"@bitmagic/asset-core": "0.2.7-dev.7",
|
|
27
|
+
"@bitmagic/animation-forger": "0.1.7-dev.7",
|
|
28
|
+
"@bitmagic/world-forger": "0.1.12-dev.7"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@eslint/js": "^9.38.0",
|