@bitmagic/cli 0.1.52-dev.8 → 0.1.52
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 +45 -9
- package/dist/assets/add.js +2 -1
- package/dist/assets/add.js.map +1 -1
- package/dist/assets/voxelize-glb.d.ts +17 -1
- package/dist/assets/voxelize-glb.js +43 -19
- package/dist/assets/voxelize-glb.js.map +1 -1
- package/dist/bin.js +25 -0
- package/dist/bin.js.map +1 -1
- package/dist/cli.d.ts +10 -0
- package/dist/cli.js +17 -7
- package/dist/cli.js.map +1 -1
- package/dist/commands/generate.d.ts +27 -0
- package/dist/commands/generate.js +132 -46
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/judge.d.ts +5 -0
- package/dist/commands/judge.js +28 -7
- package/dist/commands/judge.js.map +1 -1
- package/dist/commands/levels.d.ts +10 -17
- package/dist/commands/levels.js +48 -48
- package/dist/commands/levels.js.map +1 -1
- package/dist/commands/publish.d.ts +6 -1
- package/dist/commands/publish.js +29 -15
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/verify.d.ts +4 -0
- package/dist/commands/verify.js +94 -51
- package/dist/commands/verify.js.map +1 -1
- package/dist/editor/journal.d.ts +4 -1
- package/dist/editor/journal.js +13 -7
- package/dist/editor/journal.js.map +1 -1
- package/dist/editor/server.js +3 -1
- package/dist/editor/server.js.map +1 -1
- package/dist/generate/model.d.ts +13 -2
- package/dist/generate/model.js +70 -21
- package/dist/generate/model.js.map +1 -1
- package/dist/generate/prop.d.ts +60 -4
- package/dist/generate/prop.js +169 -46
- package/dist/generate/prop.js.map +1 -1
- package/dist/generate/stream.d.ts +7 -0
- package/dist/generate/stream.js +2 -1
- package/dist/generate/stream.js.map +1 -1
- package/dist/judge/record.d.ts +3 -0
- package/dist/judge/record.js +3 -0
- package/dist/judge/record.js.map +1 -1
- package/dist/levels/registry.d.ts +5 -2
- package/dist/levels/registry.js +32 -27
- package/dist/levels/registry.js.map +1 -1
- package/dist/messages/check.d.ts +30 -0
- package/dist/messages/check.js +119 -0
- package/dist/messages/check.js.map +1 -0
- package/dist/messages/notice.d.ts +58 -0
- package/dist/messages/notice.js +54 -0
- package/dist/messages/notice.js.map +1 -0
- package/dist/messages/refresh.d.ts +19 -0
- package/dist/messages/refresh.js +42 -0
- package/dist/messages/refresh.js.map +1 -0
- package/dist/project/jobs.d.ts +1 -1
- package/dist/project/jobs.js +16 -20
- package/dist/project/jobs.js.map +1 -1
- package/dist/project/platform-declaration.d.ts +51 -0
- package/dist/project/platform-declaration.js +81 -0
- package/dist/project/platform-declaration.js.map +1 -0
- package/dist/publish/platform.d.ts +4 -8
- package/dist/publish/platform.js +19 -53
- package/dist/publish/platform.js.map +1 -1
- package/dist/scaffold/project-files.js +54 -21
- package/dist/scaffold/project-files.js.map +1 -1
- package/dist/verify/artifacts.d.ts +19 -0
- package/dist/verify/artifacts.js +34 -0
- package/dist/verify/artifacts.js.map +1 -0
- package/dist/verify/browser.d.ts +10 -0
- package/dist/verify/browser.js +79 -9
- package/dist/verify/browser.js.map +1 -1
- package/dist/verify/classify.d.ts +37 -1
- package/dist/verify/classify.js +66 -2
- package/dist/verify/classify.js.map +1 -1
- package/dist/verify/device.d.ts +43 -0
- package/dist/verify/device.js +59 -0
- package/dist/verify/device.js.map +1 -0
- package/dist/verify/iterate.d.ts +21 -2
- package/dist/verify/iterate.js +43 -36
- package/dist/verify/iterate.js.map +1 -1
- package/dist/verify/mobile-parity.d.ts +42 -0
- package/dist/verify/mobile-parity.js +84 -0
- package/dist/verify/mobile-parity.js.map +1 -0
- package/dist/verify/platform.d.ts +47 -0
- package/dist/verify/platform.js +89 -0
- package/dist/verify/platform.js.map +1 -0
- package/dist/verify/result.d.ts +90 -6
- package/dist/verify/result.js +89 -10
- package/dist/verify/result.js.map +1 -1
- package/dist/verify/url.d.ts +9 -1
- package/dist/verify/url.js +10 -2
- package/dist/verify/url.js.map +1 -1
- package/package.json +4 -4
package/dist/judge/record.js
CHANGED
|
@@ -50,6 +50,9 @@ export function readJudgeRecord(root) {
|
|
|
50
50
|
model: record.model,
|
|
51
51
|
screenshotPath: record.screenshotPath,
|
|
52
52
|
...(typeof record.genre === 'string' ? { genre: record.genre } : {}),
|
|
53
|
+
...(record.platform === 'desktop' || record.platform === 'mobile'
|
|
54
|
+
? { platform: record.platform }
|
|
55
|
+
: {}),
|
|
53
56
|
};
|
|
54
57
|
}
|
|
55
58
|
//# sourceMappingURL=record.js.map
|
package/dist/judge/record.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/judge/record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAuB,MAAM,sBAAsB,CAAC;AAEjF,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAE/D,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAC5C,CAAC;
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/judge/record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAuB,MAAM,sBAAsB,CAAC;AAEjF,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAE/D,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAC5C,CAAC;AAkBD,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAmB;IAChE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,MAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnE,IAAI,CAAC,SAAS,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACpC,IACE,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;WACnC,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;WAC7B,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;WAChC,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,EAC5C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,IAAI;QACzB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,GAAG,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAC/D,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;YAC/B,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -38,6 +38,11 @@ export interface LevelRow {
|
|
|
38
38
|
}
|
|
39
39
|
export declare function listLevels(world: JsonObject): LevelRow[];
|
|
40
40
|
export interface LevelPlan {
|
|
41
|
+
/**
|
|
42
|
+
* The level the plan is about, as the registry holds it BEFORE the write — so a rename's plan
|
|
43
|
+
* still carries the old name. For `add` it is the entry the plan will create.
|
|
44
|
+
*/
|
|
45
|
+
level: LevelEntry;
|
|
41
46
|
modifications: WorldJsonModification[];
|
|
42
47
|
/** Said after the write. Never a reason to refuse. */
|
|
43
48
|
notes: string[];
|
|
@@ -52,7 +57,6 @@ export interface LevelPlan {
|
|
|
52
57
|
export declare function planSetStart(world: JsonObject, levelId: string): LevelPlan;
|
|
53
58
|
export declare function planRename(world: JsonObject, levelId: string, name: string): LevelPlan;
|
|
54
59
|
export interface AddPlan extends LevelPlan {
|
|
55
|
-
level: LevelEntry;
|
|
56
60
|
/** True when this made the game multi-level for the first time. */
|
|
57
61
|
converted: boolean;
|
|
58
62
|
}
|
|
@@ -68,7 +72,6 @@ export declare function planAdd(world: JsonObject, vwldAssetId: string, options:
|
|
|
68
72
|
makeStart: boolean;
|
|
69
73
|
}): AddPlan;
|
|
70
74
|
export interface RemovePlan extends LevelPlan {
|
|
71
|
-
level: LevelEntry;
|
|
72
75
|
/** Placed instances tagged to this level, which go with it. */
|
|
73
76
|
placedRemoved: number;
|
|
74
77
|
/** Doors and key items scoped to it, which also go. */
|
package/dist/levels/registry.js
CHANGED
|
@@ -30,15 +30,20 @@ import { isJsonObject } from '../project/world-json.js';
|
|
|
30
30
|
function asWorldJson(world) {
|
|
31
31
|
return world;
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
/** The object members of a root array, or an empty list when it is absent or malformed. */
|
|
34
|
+
function arrayOf(world, key) {
|
|
35
|
+
const value = world[key];
|
|
36
|
+
return (Array.isArray(value) ? value : []).filter(isJsonObject);
|
|
35
37
|
}
|
|
38
|
+
const assetsOf = (world) => arrayOf(world, 'assets');
|
|
39
|
+
const objectsOf = (world) => arrayOf(world, 'environmentObjects');
|
|
40
|
+
const levelsOf = (world) => getLevels(asWorldJson(world));
|
|
41
|
+
const startLevelOf = (world) => getStartLevel(asWorldJson(world));
|
|
36
42
|
export function listLevels(world) {
|
|
37
|
-
const start =
|
|
43
|
+
const start = startLevelOf(world);
|
|
38
44
|
const assets = assetsOf(world);
|
|
39
|
-
const objects = (
|
|
40
|
-
|
|
41
|
-
return getLevels(asWorldJson(world)).map((level) => ({
|
|
45
|
+
const objects = objectsOf(world);
|
|
46
|
+
return levelsOf(world).map((level) => ({
|
|
42
47
|
id: level.id,
|
|
43
48
|
name: level.name,
|
|
44
49
|
vwldAssetId: level.vwldAssetId,
|
|
@@ -49,7 +54,7 @@ export function listLevels(world) {
|
|
|
49
54
|
}));
|
|
50
55
|
}
|
|
51
56
|
function requireLevel(world, levelId) {
|
|
52
|
-
const levels =
|
|
57
|
+
const levels = levelsOf(world);
|
|
53
58
|
const level = levels.find((entry) => entry.id === levelId);
|
|
54
59
|
if (level === undefined) {
|
|
55
60
|
throw new CliError(`No level with id "${levelId}" in this project. `
|
|
@@ -76,7 +81,7 @@ function vwldUrlFor(world, level) {
|
|
|
76
81
|
*/
|
|
77
82
|
export function planSetStart(world, levelId) {
|
|
78
83
|
const level = requireLevel(world, levelId);
|
|
79
|
-
const current =
|
|
84
|
+
const current = startLevelOf(world);
|
|
80
85
|
if (current !== null && current.id === levelId) {
|
|
81
86
|
throw new CliError(`"${level.name}" is already the start level. world.json is unchanged.`);
|
|
82
87
|
}
|
|
@@ -87,6 +92,7 @@ export function planSetStart(world, levelId) {
|
|
|
87
92
|
+ 'list` shows what is there). world.json is unchanged.');
|
|
88
93
|
}
|
|
89
94
|
return {
|
|
95
|
+
level,
|
|
90
96
|
modifications: [
|
|
91
97
|
{ type: 'set', path: ['startLevelId'], value: levelId },
|
|
92
98
|
// Without these the game boots the OLD level's terrain. See the file header.
|
|
@@ -105,8 +111,9 @@ export function planRename(world, levelId, name) {
|
|
|
105
111
|
if (trimmed === level.name) {
|
|
106
112
|
throw new CliError(`"${level.name}" already has that name. world.json is unchanged.`);
|
|
107
113
|
}
|
|
108
|
-
const clash =
|
|
114
|
+
const clash = levelsOf(world).some((e) => e.id !== levelId && e.name === trimmed);
|
|
109
115
|
return {
|
|
116
|
+
level,
|
|
110
117
|
modifications: [{
|
|
111
118
|
type: 'update',
|
|
112
119
|
path: ['levels'],
|
|
@@ -129,9 +136,10 @@ export function planRename(world, levelId, name) {
|
|
|
129
136
|
* a second level would be the surprising outcome.
|
|
130
137
|
*/
|
|
131
138
|
export function planAdd(world, vwldAssetId, options) {
|
|
132
|
-
const
|
|
139
|
+
const assets = assetsOf(world);
|
|
140
|
+
const asset = assets.find((item) => item.id === vwldAssetId);
|
|
133
141
|
if (asset === undefined) {
|
|
134
|
-
const available =
|
|
142
|
+
const available = assets.filter((item) => item.type === 'vwld');
|
|
135
143
|
throw new CliError(`No asset with id "${vwldAssetId}" in this project. `
|
|
136
144
|
+ (available.length > 0
|
|
137
145
|
? `Baked levels here: ${available.map((a) => `${String(a.id)} ("${String(a.name)}")`).join(', ')}. `
|
|
@@ -150,7 +158,8 @@ export function planAdd(world, vwldAssetId, options) {
|
|
|
150
158
|
}
|
|
151
159
|
// Two levels on one bake is the same place twice, and the forge's re-bake path resolves a level
|
|
152
160
|
// by `vwldAssetId` — with duplicates it picks the first arbitrarily.
|
|
153
|
-
const
|
|
161
|
+
const existing = levelsOf(world);
|
|
162
|
+
const sharing = existing.find((entry) => entry.vwldAssetId === vwldAssetId);
|
|
154
163
|
if (sharing !== undefined) {
|
|
155
164
|
throw new CliError(`Level "${sharing.name}" (${sharing.id}) already uses that bake. world.json is unchanged.`);
|
|
156
165
|
}
|
|
@@ -160,22 +169,20 @@ export function planAdd(world, vwldAssetId, options) {
|
|
|
160
169
|
name: (options.name ?? assetName).trim() || assetName,
|
|
161
170
|
vwldAssetId,
|
|
162
171
|
};
|
|
163
|
-
const existing = getLevels(asWorldJson(world));
|
|
164
172
|
if (existing.length > 0) {
|
|
165
|
-
const makeStart = options.makeStart;
|
|
166
173
|
return {
|
|
167
174
|
level,
|
|
168
175
|
converted: false,
|
|
169
176
|
modifications: [
|
|
170
177
|
{ type: 'push', path: ['levels'], value: level },
|
|
171
|
-
...(makeStart
|
|
178
|
+
...(options.makeStart
|
|
172
179
|
? [
|
|
173
180
|
{ type: 'set', path: ['startLevelId'], value: level.id },
|
|
174
181
|
...buildStartLevelMirrors(level, url),
|
|
175
182
|
]
|
|
176
183
|
: []),
|
|
177
184
|
],
|
|
178
|
-
notes: makeStart
|
|
185
|
+
notes: options.makeStart
|
|
179
186
|
? [`"${level.name}" is now the start level.`]
|
|
180
187
|
: ['The start level is unchanged — pass --make-start, or use `bitmagic levels set-start`.'],
|
|
181
188
|
};
|
|
@@ -240,11 +247,11 @@ function safeConversion(world) {
|
|
|
240
247
|
*/
|
|
241
248
|
export function planRemove(world, levelId) {
|
|
242
249
|
const level = requireLevel(world, levelId);
|
|
243
|
-
const levels =
|
|
250
|
+
const levels = levelsOf(world);
|
|
244
251
|
if (levels.length <= 1) {
|
|
245
252
|
throw new CliError('This is the game\'s only level, and a levels-mode game needs one. world.json is unchanged.');
|
|
246
253
|
}
|
|
247
|
-
const start =
|
|
254
|
+
const start = startLevelOf(world);
|
|
248
255
|
if (start !== null && start.id === levelId) {
|
|
249
256
|
const other = levels.find((entry) => entry.id !== levelId);
|
|
250
257
|
throw new CliError(`"${level.name}" is the start level. Removing it would leave the game booting one level's `
|
|
@@ -253,9 +260,7 @@ export function planRemove(world, levelId) {
|
|
|
253
260
|
+ 'world.json is unchanged.');
|
|
254
261
|
}
|
|
255
262
|
const profile = isJsonObject(world.worldProfileData) ? world.worldProfileData : {};
|
|
256
|
-
const
|
|
257
|
-
.filter(isJsonObject);
|
|
258
|
-
const placedRemoved = objects.filter((object) => object.levelId === levelId).length;
|
|
263
|
+
const placedRemoved = objectsOf(world).filter((object) => object.levelId === levelId).length;
|
|
259
264
|
const modifications = [
|
|
260
265
|
{
|
|
261
266
|
type: 'remove',
|
|
@@ -275,8 +280,7 @@ export function planRemove(world, levelId) {
|
|
|
275
280
|
// assetIds as referenced, so the placeholder assets can never be purged either.
|
|
276
281
|
const scopedRemoved = [];
|
|
277
282
|
for (const key of ['doors', 'keyItems']) {
|
|
278
|
-
const
|
|
279
|
-
const doomed = entries.filter((entry) => entry.levelId === levelId).length;
|
|
283
|
+
const doomed = arrayOf(profile, key).filter((entry) => entry.levelId === levelId).length;
|
|
280
284
|
if (doomed === 0)
|
|
281
285
|
continue;
|
|
282
286
|
scopedRemoved.push(`${doomed} ${key}`);
|
|
@@ -294,16 +298,17 @@ export function planRemove(world, levelId) {
|
|
|
294
298
|
notes.push(`Also removed: ${scopedRemoved.join(', ')}.`);
|
|
295
299
|
// The start-screen chooser filters by id and is hand-authored; it warns and skips unknown ids on
|
|
296
300
|
// its own, so this is reported rather than rewritten.
|
|
297
|
-
if (
|
|
301
|
+
if (isNamedByChooser(profile, levelId)) {
|
|
298
302
|
notes.push('The main screen\'s level chooser still lists this level; it will skip it, but tidy '
|
|
299
303
|
+ '`hud.startScreen.selections[].levelIds` when you get a chance.');
|
|
300
304
|
}
|
|
301
305
|
return { level, modifications, notes, placedRemoved, scopedRemoved };
|
|
302
306
|
}
|
|
303
|
-
|
|
307
|
+
/** Does a main-screen level chooser still offer this level? */
|
|
308
|
+
function isNamedByChooser(profile, levelId) {
|
|
304
309
|
const hud = isJsonObject(profile.hud) ? profile.hud : {};
|
|
305
310
|
const startScreen = isJsonObject(hud.startScreen) ? hud.startScreen : {};
|
|
306
|
-
|
|
307
|
-
|
|
311
|
+
return arrayOf(startScreen, 'selections')
|
|
312
|
+
.some((step) => Array.isArray(step.levelIds) && step.levelIds.includes(levelId));
|
|
308
313
|
}
|
|
309
314
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/levels/registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/levels/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { EnvironmentName } from '../config/environments.js';
|
|
2
|
+
import { type UnreadMessagesCache } from './notice.js';
|
|
3
|
+
export declare function messagesCachePath(baseDir?: string): string;
|
|
4
|
+
/**
|
|
5
|
+
* The last recorded answer, or null if there is none to trust.
|
|
6
|
+
*
|
|
7
|
+
* Missing, unreadable and malformed all collapse to null on purpose: the caller's next move is
|
|
8
|
+
* identical in every case — say nothing now, refresh in the background.
|
|
9
|
+
*/
|
|
10
|
+
export declare function readUnreadMessagesCache(baseDir?: string): UnreadMessagesCache | null;
|
|
11
|
+
export declare function writeUnreadMessagesCache(cache: UnreadMessagesCache, baseDir?: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* The line bin.ts prints before a command runs — read from the cache, never the network.
|
|
14
|
+
*
|
|
15
|
+
* A cache belonging to a DIFFERENT environment answers a different question and is ignored:
|
|
16
|
+
* a dev broadcast must not nudge a prod session, or the other way round. The same rule
|
|
17
|
+
* `pendingUpdateNotice` applies to dist-tags.
|
|
18
|
+
*/
|
|
19
|
+
export declare function pendingMessagesNotice(environment: EnvironmentName | undefined, baseDir?: string, now?: number): string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Refresh the cache if it is stale. Fire-and-forget: callers must not await this for its value.
|
|
22
|
+
*
|
|
23
|
+
* A cache about a different environment is refreshed immediately however recent it is —
|
|
24
|
+
* switching environments must not leave the nudge mute for the rest of its interval.
|
|
25
|
+
*
|
|
26
|
+
* On failure the result is still written, with `unread: null`, so an offline machine backs off
|
|
27
|
+
* for the interval instead of asking on every command. That is why the failure marker is null
|
|
28
|
+
* rather than 0: zero would be a claim ("you have nothing unread"), null is an admission.
|
|
29
|
+
*/
|
|
30
|
+
export declare function refreshUnreadMessagesInBackground(environment: EnvironmentName, apiUrl: string, accessToken: string, now?: number, baseDir?: string, fetchImpl?: typeof globalThis.fetch): Promise<void>;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { defaultBaseDir } from '../config/credentials.js';
|
|
4
|
+
import { apiServerHeaders } from '../telemetry/request-headers.js';
|
|
5
|
+
import { isMessagesCacheStale, unreadMessagesNotice, } from './notice.js';
|
|
6
|
+
/**
|
|
7
|
+
* Reading and refreshing the unread-messages count.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately the same shape as update/check.ts, which already solved every hard part: the
|
|
10
|
+
* notice is decided from the CACHE ONLY (never the network, so printing costs nothing), the
|
|
11
|
+
* refresh is fire-and-forget and bounded, and every filesystem error is swallowed because this
|
|
12
|
+
* is a hint, not a thing worth failing a command over.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Cap on the background refresh.
|
|
16
|
+
*
|
|
17
|
+
* A pending fetch keeps Node alive, so an unbounded request would hold a finished command open
|
|
18
|
+
* for as long as the network sulks. Matches the update check's allowance.
|
|
19
|
+
*/
|
|
20
|
+
const REFRESH_TIMEOUT_MS = 2000;
|
|
21
|
+
export function messagesCachePath(baseDir = defaultBaseDir()) {
|
|
22
|
+
return path.join(baseDir, 'messages-check.json');
|
|
23
|
+
}
|
|
24
|
+
function isCache(value) {
|
|
25
|
+
if (typeof value !== 'object' || value === null)
|
|
26
|
+
return false;
|
|
27
|
+
const c = value;
|
|
28
|
+
return ((c.environment === 'dev' || c.environment === 'prod' || c.environment === 'local') &&
|
|
29
|
+
(c.unread === null || typeof c.unread === 'number') &&
|
|
30
|
+
(c.inboxUrl === null || typeof c.inboxUrl === 'string') &&
|
|
31
|
+
typeof c.checkedAt === 'number');
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The last recorded answer, or null if there is none to trust.
|
|
35
|
+
*
|
|
36
|
+
* Missing, unreadable and malformed all collapse to null on purpose: the caller's next move is
|
|
37
|
+
* identical in every case — say nothing now, refresh in the background.
|
|
38
|
+
*/
|
|
39
|
+
export function readUnreadMessagesCache(baseDir = defaultBaseDir()) {
|
|
40
|
+
try {
|
|
41
|
+
const parsed = JSON.parse(fs.readFileSync(messagesCachePath(baseDir), 'utf-8'));
|
|
42
|
+
return isCache(parsed) ? parsed : null;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export function writeUnreadMessagesCache(cache, baseDir = defaultBaseDir()) {
|
|
49
|
+
try {
|
|
50
|
+
fs.mkdirSync(baseDir, { recursive: true });
|
|
51
|
+
fs.writeFileSync(messagesCachePath(baseDir), `${JSON.stringify(cache)}\n`);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// A cache we cannot write is a nudge one run late, not an error anyone should see.
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The line bin.ts prints before a command runs — read from the cache, never the network.
|
|
59
|
+
*
|
|
60
|
+
* A cache belonging to a DIFFERENT environment answers a different question and is ignored:
|
|
61
|
+
* a dev broadcast must not nudge a prod session, or the other way round. The same rule
|
|
62
|
+
* `pendingUpdateNotice` applies to dist-tags.
|
|
63
|
+
*/
|
|
64
|
+
export function pendingMessagesNotice(environment, baseDir, now = Date.now()) {
|
|
65
|
+
if (environment === undefined)
|
|
66
|
+
return null;
|
|
67
|
+
const cache = readUnreadMessagesCache(baseDir);
|
|
68
|
+
if (cache === null || cache.environment !== environment)
|
|
69
|
+
return null;
|
|
70
|
+
return unreadMessagesNotice(cache, now);
|
|
71
|
+
}
|
|
72
|
+
/** Ask api-server for the caller's count. Null on any failure — this never throws. */
|
|
73
|
+
async function fetchUnread(apiUrl, accessToken, fetchImpl) {
|
|
74
|
+
try {
|
|
75
|
+
const response = await fetchImpl(`${apiUrl}/api/cli/v1/messages/unread`, {
|
|
76
|
+
headers: {
|
|
77
|
+
...apiServerHeaders(),
|
|
78
|
+
Authorization: `Bearer ${accessToken}`,
|
|
79
|
+
Accept: 'application/json',
|
|
80
|
+
},
|
|
81
|
+
signal: AbortSignal.timeout(REFRESH_TIMEOUT_MS),
|
|
82
|
+
});
|
|
83
|
+
if (!response.ok)
|
|
84
|
+
return null;
|
|
85
|
+
const data = await response.json();
|
|
86
|
+
if (typeof data !== 'object' || data === null)
|
|
87
|
+
return null;
|
|
88
|
+
const d = data;
|
|
89
|
+
if (typeof d.unreadCount !== 'number' || typeof d.inboxUrl !== 'string')
|
|
90
|
+
return null;
|
|
91
|
+
return { unreadCount: d.unreadCount, inboxUrl: d.inboxUrl };
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Refresh the cache if it is stale. Fire-and-forget: callers must not await this for its value.
|
|
99
|
+
*
|
|
100
|
+
* A cache about a different environment is refreshed immediately however recent it is —
|
|
101
|
+
* switching environments must not leave the nudge mute for the rest of its interval.
|
|
102
|
+
*
|
|
103
|
+
* On failure the result is still written, with `unread: null`, so an offline machine backs off
|
|
104
|
+
* for the interval instead of asking on every command. That is why the failure marker is null
|
|
105
|
+
* rather than 0: zero would be a claim ("you have nothing unread"), null is an admission.
|
|
106
|
+
*/
|
|
107
|
+
export async function refreshUnreadMessagesInBackground(environment, apiUrl, accessToken, now = Date.now(), baseDir, fetchImpl = globalThis.fetch) {
|
|
108
|
+
const cache = readUnreadMessagesCache(baseDir);
|
|
109
|
+
if (cache !== null && cache.environment === environment && !isMessagesCacheStale(cache, now))
|
|
110
|
+
return;
|
|
111
|
+
const result = await fetchUnread(apiUrl, accessToken, fetchImpl);
|
|
112
|
+
writeUnreadMessagesCache({
|
|
113
|
+
environment,
|
|
114
|
+
unread: result === null ? null : result.unreadCount,
|
|
115
|
+
inboxUrl: result === null ? null : result.inboxUrl,
|
|
116
|
+
checkedAt: now,
|
|
117
|
+
}, baseDir);
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/messages/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { EnvironmentName } from '../config/environments.js';
|
|
2
|
+
/**
|
|
3
|
+
* The unread-messages nudge.
|
|
4
|
+
*
|
|
5
|
+
* Bitmagic broadcasts reach web creators through the portal's notification bell. A CLI-lane
|
|
6
|
+
* creator may never open the portal at all, so a command prints a one-line pointer instead —
|
|
7
|
+
* the same shape as the update nudge next door, and for the same reason: a hint worth giving,
|
|
8
|
+
* never worth failing or slowing a command over.
|
|
9
|
+
*
|
|
10
|
+
* The CLI never CONSUMES a message. Reading is an act, and the read receipt is what tells an
|
|
11
|
+
* admin whether a broadcast actually landed — a terminal glancing at a count is not that.
|
|
12
|
+
*/
|
|
13
|
+
/** What is remembered between runs, so no command pays for the network. */
|
|
14
|
+
export interface UnreadMessagesCache {
|
|
15
|
+
/**
|
|
16
|
+
* Which environment the count is about.
|
|
17
|
+
*
|
|
18
|
+
* Credentials are per environment and a creator can hold a prod and a dev login at once, so
|
|
19
|
+
* an answer about one says nothing about the other. Mirrors `UpdateCheckCache.tag`, including
|
|
20
|
+
* the consequence: a cache for the other environment reads as absent and is refreshed.
|
|
21
|
+
*/
|
|
22
|
+
environment: EnvironmentName;
|
|
23
|
+
/** The count, or null when the last check could not reach the server (a back-off marker). */
|
|
24
|
+
unread: number | null;
|
|
25
|
+
/** Where to read them — the server hands this over; see check.ts. */
|
|
26
|
+
inboxUrl: string | null;
|
|
27
|
+
/** Epoch ms of that check. */
|
|
28
|
+
checkedAt: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* How stale a count may be before it is refreshed.
|
|
32
|
+
*
|
|
33
|
+
* An hour, matching the release line's update check. Broadcasts are rare and never urgent to
|
|
34
|
+
* the minute, and the cost of being wrong is one extra line of stderr.
|
|
35
|
+
*/
|
|
36
|
+
export declare const MESSAGES_CHECK_INTERVAL_MS: number;
|
|
37
|
+
/**
|
|
38
|
+
* How old a cached count may be and still be PRINTED.
|
|
39
|
+
*
|
|
40
|
+
* Separate from the refresh interval, and the thing that stops a laptop that has been offline
|
|
41
|
+
* for a fortnight nagging every single command about a message read in a browser on day one.
|
|
42
|
+
* Past this, the nudge goes quiet until a check succeeds again.
|
|
43
|
+
*/
|
|
44
|
+
export declare const MESSAGES_NOTICE_MAX_AGE_MS: number;
|
|
45
|
+
/** Whether the cached answer should be refreshed in the background. */
|
|
46
|
+
export declare function isMessagesCacheStale(cache: UnreadMessagesCache | null, now: number): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* The line to print, or null to stay quiet.
|
|
49
|
+
*
|
|
50
|
+
* Quiet for: no cache at all (a first-ever run pays one silent command, exactly as the update
|
|
51
|
+
* notice does), a failed check (`unread: null` — an unreachable server is not evidence of
|
|
52
|
+
* anything), nothing unread, no inbox URL to point at, and an answer past its max age.
|
|
53
|
+
*
|
|
54
|
+
* The wording is deliberately soft. The count can be up to an interval stale and the CLI cannot
|
|
55
|
+
* know whether the message was read in a browser five minutes ago, so it reports rather than
|
|
56
|
+
* instructs.
|
|
57
|
+
*/
|
|
58
|
+
export declare function unreadMessagesNotice(cache: UnreadMessagesCache | null, now: number): string | null;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How stale a count may be before it is refreshed.
|
|
3
|
+
*
|
|
4
|
+
* An hour, matching the release line's update check. Broadcasts are rare and never urgent to
|
|
5
|
+
* the minute, and the cost of being wrong is one extra line of stderr.
|
|
6
|
+
*/
|
|
7
|
+
export const MESSAGES_CHECK_INTERVAL_MS = 60 * 60 * 1000;
|
|
8
|
+
/**
|
|
9
|
+
* How old a cached count may be and still be PRINTED.
|
|
10
|
+
*
|
|
11
|
+
* Separate from the refresh interval, and the thing that stops a laptop that has been offline
|
|
12
|
+
* for a fortnight nagging every single command about a message read in a browser on day one.
|
|
13
|
+
* Past this, the nudge goes quiet until a check succeeds again.
|
|
14
|
+
*/
|
|
15
|
+
export const MESSAGES_NOTICE_MAX_AGE_MS = 24 * 60 * 60 * 1000;
|
|
16
|
+
/** Whether the cached answer should be refreshed in the background. */
|
|
17
|
+
export function isMessagesCacheStale(cache, now) {
|
|
18
|
+
if (cache === null)
|
|
19
|
+
return true;
|
|
20
|
+
// A clock that moved backwards (a resumed VM, a corrected clock) would otherwise pin the
|
|
21
|
+
// cache as fresh forever — the same guard the update cache carries.
|
|
22
|
+
if (cache.checkedAt > now)
|
|
23
|
+
return true;
|
|
24
|
+
return now - cache.checkedAt >= MESSAGES_CHECK_INTERVAL_MS;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The line to print, or null to stay quiet.
|
|
28
|
+
*
|
|
29
|
+
* Quiet for: no cache at all (a first-ever run pays one silent command, exactly as the update
|
|
30
|
+
* notice does), a failed check (`unread: null` — an unreachable server is not evidence of
|
|
31
|
+
* anything), nothing unread, no inbox URL to point at, and an answer past its max age.
|
|
32
|
+
*
|
|
33
|
+
* The wording is deliberately soft. The count can be up to an interval stale and the CLI cannot
|
|
34
|
+
* know whether the message was read in a browser five minutes ago, so it reports rather than
|
|
35
|
+
* instructs.
|
|
36
|
+
*/
|
|
37
|
+
export function unreadMessagesNotice(cache, now) {
|
|
38
|
+
if (cache === null || cache.unread === null || cache.inboxUrl === null)
|
|
39
|
+
return null;
|
|
40
|
+
if (!Number.isFinite(cache.unread) || cache.unread <= 0)
|
|
41
|
+
return null;
|
|
42
|
+
if (cache.checkedAt > now)
|
|
43
|
+
return null;
|
|
44
|
+
if (now - cache.checkedAt >= MESSAGES_NOTICE_MAX_AGE_MS)
|
|
45
|
+
return null;
|
|
46
|
+
const n = Math.floor(cache.unread);
|
|
47
|
+
// Capped for the same reason the bell's badge is: a number that high means something else is
|
|
48
|
+
// wrong, and the exact figure helps nobody.
|
|
49
|
+
const shown = n > 99 ? '99+' : String(n);
|
|
50
|
+
return n === 1
|
|
51
|
+
? `You have 1 unread message from Bitmagic. Read it at ${cache.inboxUrl}`
|
|
52
|
+
: `You have ${shown} unread messages from Bitmagic. Read them at ${cache.inboxUrl}`;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=notice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notice.js","sourceRoot":"","sources":["../../src/messages/notice.ts"],"names":[],"mappings":"AAkCA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9D,uEAAuE;AACvE,MAAM,UAAU,oBAAoB,CAAC,KAAiC,EAAE,GAAW;IACjF,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,yFAAyF;IACzF,oEAAoE;IACpE,IAAI,KAAK,CAAC,SAAS,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,0BAA0B,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAiC,EAAE,GAAW;IACjF,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACpF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrE,IAAI,KAAK,CAAC,SAAS,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,0BAA0B;QAAE,OAAO,IAAI,CAAC;IAErE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,6FAA6F;IAC7F,4CAA4C;IAC5C,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,KAAK,CAAC;QACZ,CAAC,CAAC,uDAAuD,KAAK,CAAC,QAAQ,EAAE;QACzE,CAAC,CAAC,YAAY,KAAK,gDAAgD,KAAK,CAAC,QAAQ,EAAE,CAAC;AACxF,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Refresh the cached unread count after a command has done its work.
|
|
3
|
+
*
|
|
4
|
+
* Deliberately here and NOT in bin.ts, where the printing lives. bin.ts runs before citty has
|
|
5
|
+
* parsed argv, so it has no resolved environment and no token; by the time a command finishes,
|
|
6
|
+
* CommandContext has both — the same reasoning that puts the telemetry beacon here.
|
|
7
|
+
*
|
|
8
|
+
* Three properties this placement buys, all of them required:
|
|
9
|
+
* - never fires for a logged-out creator: getAccessToken throws before any network happens,
|
|
10
|
+
* and nothing is written, because no check took place to back off from.
|
|
11
|
+
* - never slows a command down: the count is for the NEXT run, the fetch is bounded at two
|
|
12
|
+
* seconds, and the print side is a pure file read.
|
|
13
|
+
* - never speaks for the wrong environment: the count is cached against the one that was
|
|
14
|
+
* actually resolved for this command, flags included.
|
|
15
|
+
*
|
|
16
|
+
* This is NOT telemetry — it is the creator's own inbox — so it is deliberately not gated on
|
|
17
|
+
* DO_NOT_TRACK. It reports nothing about the user; it asks a question on their behalf.
|
|
18
|
+
*/
|
|
19
|
+
export declare function refreshUnreadMessages(): Promise<void>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { resolveAuth0ClientId } from '../config/environments.js';
|
|
2
|
+
import { getAccessToken } from '../auth/session.js';
|
|
3
|
+
import { currentCommand } from '../telemetry/command-context.js';
|
|
4
|
+
import { refreshUnreadMessagesInBackground } from './check.js';
|
|
5
|
+
/**
|
|
6
|
+
* Refresh the cached unread count after a command has done its work.
|
|
7
|
+
*
|
|
8
|
+
* Deliberately here and NOT in bin.ts, where the printing lives. bin.ts runs before citty has
|
|
9
|
+
* parsed argv, so it has no resolved environment and no token; by the time a command finishes,
|
|
10
|
+
* CommandContext has both — the same reasoning that puts the telemetry beacon here.
|
|
11
|
+
*
|
|
12
|
+
* Three properties this placement buys, all of them required:
|
|
13
|
+
* - never fires for a logged-out creator: getAccessToken throws before any network happens,
|
|
14
|
+
* and nothing is written, because no check took place to back off from.
|
|
15
|
+
* - never slows a command down: the count is for the NEXT run, the fetch is bounded at two
|
|
16
|
+
* seconds, and the print side is a pure file read.
|
|
17
|
+
* - never speaks for the wrong environment: the count is cached against the one that was
|
|
18
|
+
* actually resolved for this command, flags included.
|
|
19
|
+
*
|
|
20
|
+
* This is NOT telemetry — it is the creator's own inbox — so it is deliberately not gated on
|
|
21
|
+
* DO_NOT_TRACK. It reports nothing about the user; it asks a question on their behalf.
|
|
22
|
+
*/
|
|
23
|
+
export async function refreshUnreadMessages() {
|
|
24
|
+
try {
|
|
25
|
+
const command = currentCommand();
|
|
26
|
+
if (command === null)
|
|
27
|
+
return;
|
|
28
|
+
const environment = command.environment;
|
|
29
|
+
if (environment === null)
|
|
30
|
+
return;
|
|
31
|
+
const clientId = resolveAuth0ClientId(environment, process.env);
|
|
32
|
+
const token = await getAccessToken(environment, clientId, {
|
|
33
|
+
fetch: globalThis.fetch,
|
|
34
|
+
sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
35
|
+
});
|
|
36
|
+
await refreshUnreadMessagesInBackground(environment.name, environment.apiUrl, token);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Logged out, offline, or anything else: the nudge simply stays as it was.
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../src/messages/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACxC,IAAI,WAAW,KAAK,IAAI;YAAE,OAAO;QAEjC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,QAAQ,EAAE;YACxD,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;SACvE,CAAC,CAAC;QAEH,MAAM,iCAAiC,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;IAC7E,CAAC;AACH,CAAC"}
|
package/dist/project/jobs.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ForgeProgressSnapshot } from '../forge/progress.js';
|
|
2
2
|
import type { ForgeLayoutMap } from '@bitmagic/world-forger/pipeline/index.js';
|
|
3
3
|
/** Which command is running. Shown as-is in the dev view, so these are creator-facing words. */
|
|
4
|
-
export type JobKind = 'skybox' | 'sound' | 'image' | 'character' | 'animation' | 'prop' | 'vehicle' | 'forge' | 'cover' | 'hq' | 'judge' | 'upload' | 'model';
|
|
4
|
+
export type JobKind = 'skybox' | 'background' | 'block-type' | 'sound' | 'image' | 'character' | 'animation' | 'prop' | 'vehicle' | 'forge' | 'cover' | 'hq' | 'judge' | 'upload' | 'model';
|
|
5
5
|
export interface JobRecord {
|
|
6
6
|
jobId: string;
|
|
7
7
|
kind: JobKind;
|