@hypersoniclabs/helix-cli 0.1.27-helix3.561 → 0.1.27-helix3.563
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/city/convert/command.js +19 -1
- package/dist/city/convert/command.js.map +1 -1
- package/dist/city/convert/config.d.ts +10 -0
- package/dist/city/convert/config.js.map +1 -1
- package/dist/city/convert/exec.d.ts +5 -1
- package/dist/city/convert/exec.js +17 -0
- package/dist/city/convert/exec.js.map +1 -1
- package/dist/city/convert/optimizations.d.ts +2 -0
- package/dist/city/convert/optimizations.js +5 -1
- package/dist/city/convert/optimizations.js.map +1 -1
- package/dist/city/convert/publish.d.ts +60 -0
- package/dist/city/convert/publish.js +224 -0
- package/dist/city/convert/publish.js.map +1 -0
- package/dist/city/convert/run.d.ts +3 -1
- package/dist/city/convert/run.js +1 -1
- package/dist/city/convert/run.js.map +1 -1
- package/dist/city/convert/spawnPick.d.ts +1 -1
- package/dist/city/convert/spawnPick.js +4 -2
- package/dist/city/convert/spawnPick.js.map +1 -1
- package/dist/city/convert/stages.d.ts +14 -0
- package/dist/city/convert/stages.js +3 -0
- package/dist/city/convert/stages.js.map +1 -1
- package/dist/cs2/convert/trees.js +4 -2
- package/dist/cs2/convert/trees.js.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/placements/impostorCache.d.ts +67 -0
- package/dist/placements/impostorCache.js +73 -0
- package/dist/placements/impostorCache.js.map +1 -0
- package/dist/placements/impostors.js +33 -13
- package/dist/placements/impostors.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_abs.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_expression.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_jbeam.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_materials.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_stock_events.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fmod_studio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fsb5.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_ac.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_beamng.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_fixtures.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_sim_audio.cpython-312.pyc +0 -0
|
@@ -7,6 +7,7 @@ const lib_1 = require("../../lib");
|
|
|
7
7
|
const config_1 = require("./config");
|
|
8
8
|
const exec_1 = require("./exec");
|
|
9
9
|
const optimizations_1 = require("./optimizations");
|
|
10
|
+
const publish_1 = require("./publish");
|
|
10
11
|
const run_1 = require("./run");
|
|
11
12
|
function parseTiers(value) {
|
|
12
13
|
const tiers = [...new Set(value.split(',').map((t) => t.trim()).filter(Boolean))];
|
|
@@ -43,6 +44,14 @@ function registerCityConvert(city, fail) {
|
|
|
43
44
|
.option('--unlisted', 'the publish plan says unlisted (the default)')
|
|
44
45
|
.option('--public', 'the publish plan says public')
|
|
45
46
|
.option('--private', 'the publish plan says private')
|
|
47
|
+
.option('--publish', 'after the conversion, upload the data to the World\'s CDN prefix and publish the shell World (needs --world and --engine; rclone and helix logins are used as configured)')
|
|
48
|
+
.option('--world <id>', 'with --publish: the World id whose scene-data folder receives the data')
|
|
49
|
+
.option('--tag <tag>', 'with --publish: the data prefix under scene-data/ (default <name>-<hash of the roots>)')
|
|
50
|
+
.option('--remote <rclone path>', 'with --publish: rclone path up to the World folders (default R2:instant-worlds-dev/instant-worlds)')
|
|
51
|
+
.option('--cdn-base <url>', 'with --publish: the public https base of the same folder')
|
|
52
|
+
.option('--engine <path>', 'with --publish: a helix-web-engine-new checkout (its granit-city publish-preview.mjs builds the shell)')
|
|
53
|
+
.option('--thumbnail <file>', 'with --publish: the World card cover image')
|
|
54
|
+
.option('--content-rating <rating>', 'with --publish: the creator-attested rating (everyone, teen, mature or adult); required unless --private')
|
|
46
55
|
.option('--list-stages', 'print the stages and the optimizations each applies, then exit')
|
|
47
56
|
.option('--json', 'print the receipt as JSON')
|
|
48
57
|
.action(async (bundle, opts) => {
|
|
@@ -68,6 +77,15 @@ function registerCityConvert(city, fail) {
|
|
|
68
77
|
const visibility = opts.public ? 'public' : opts.private ? 'private' : opts.unlisted ? 'unlisted' : undefined;
|
|
69
78
|
if (visibility)
|
|
70
79
|
config.publish.visibility = visibility;
|
|
80
|
+
if (opts.world)
|
|
81
|
+
config.publish.world = opts.world;
|
|
82
|
+
if (opts.publish) {
|
|
83
|
+
config.publish.upload = {
|
|
84
|
+
...(opts.remote ? { remote: opts.remote } : {}), ...(opts.cdnBase ? { cdnBase: opts.cdnBase } : {}), ...(opts.tag ? { tag: opts.tag } : {}),
|
|
85
|
+
...(opts.engine ? { engine: (0, node_path_1.resolve)(opts.engine) } : {}), ...(opts.thumbnail ? { thumbnail: (0, node_path_1.resolve)(opts.thumbnail) } : {}), ...(opts.contentRating ? { contentRating: opts.contentRating } : {}),
|
|
86
|
+
};
|
|
87
|
+
(0, publish_1.uploadSettings)(config); // fails now, before hours of conversion, when the World id is missing or malformed
|
|
88
|
+
}
|
|
71
89
|
if (opts.listStages) {
|
|
72
90
|
for (const stage of (0, run_1.listStages)(config))
|
|
73
91
|
console.log(`${stage.id.padEnd(22)} ${stage.title}${stage.optimizations.length ? `\n${' '.repeat(23)}applies: ${stage.optimizations.join(', ')}` : ''}`);
|
|
@@ -78,7 +96,7 @@ function registerCityConvert(city, fail) {
|
|
|
78
96
|
throw new Error('give the bundle folder: helix city convert cs2 <bundle> --name <slug> --out <dir>');
|
|
79
97
|
const out = (0, node_path_1.resolve)(opts.out ?? `convert-${opts.name}`);
|
|
80
98
|
const receipt = await (0, run_1.runConvert)({
|
|
81
|
-
bundle: (0, node_path_1.resolve)(bundle), out, config, exec: (0, exec_1.childExec)({ out }), cliVersion: (0, lib_1.cliVersion)(), log: (line) => process.stderr.write(`${line}\n`),
|
|
99
|
+
bundle: (0, node_path_1.resolve)(bundle), out, config, exec: (0, exec_1.childExec)({ out }), ...(opts.publish ? { run: (0, exec_1.externalExec)({ out }) } : {}), cliVersion: (0, lib_1.cliVersion)(), log: (line) => process.stderr.write(`${line}\n`),
|
|
82
100
|
...(opts.jobs ? { jobs: Math.max(1, Number(opts.jobs)) } : {}), ...(opts.from ? { from: opts.from } : {}), ...(opts.stopAfter ? { stopAfter: opts.stopAfter } : {}), ...(opts.force ? { force: true } : {}),
|
|
83
101
|
});
|
|
84
102
|
if (opts.json) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/city/convert/command.ts"],"names":[],"mappings":";AAAA,qIAAqI;;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/city/convert/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export interface ConvertSpawn {
|
|
|
8
8
|
/** Metres around the spawn kept free of trees. */
|
|
9
9
|
clearM?: number;
|
|
10
10
|
}
|
|
11
|
+
export type ContentRating = 'everyone' | 'teen' | 'mature' | 'adult';
|
|
11
12
|
export interface ConvertConfig {
|
|
12
13
|
schema: typeof CONVERT_CONFIG_SCHEMA;
|
|
13
14
|
/** Scene root name and World slug base (`leonida` gives `leonida-c1` and `leonida-mobile-c1`). */
|
|
@@ -47,9 +48,18 @@ export interface ConvertConfig {
|
|
|
47
48
|
/** Building boxes inline in the root document (a document near its memory cap cannot afford the mount). */
|
|
48
49
|
inline: boolean;
|
|
49
50
|
};
|
|
51
|
+
/** `upload` is present only for a run asked to publish (`--publish`): see publish.ts. */
|
|
50
52
|
publish: {
|
|
51
53
|
visibility: 'private' | 'unlisted' | 'public';
|
|
52
54
|
world: string | null;
|
|
55
|
+
upload?: {
|
|
56
|
+
remote?: string;
|
|
57
|
+
cdnBase?: string;
|
|
58
|
+
tag?: string | null;
|
|
59
|
+
engine?: string | null;
|
|
60
|
+
thumbnail?: string | null;
|
|
61
|
+
contentRating?: ContentRating | null;
|
|
62
|
+
};
|
|
53
63
|
};
|
|
54
64
|
}
|
|
55
65
|
export declare function defaultConvertConfig(name: string): ConvertConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/city/convert/config.ts"],"names":[],"mappings":";AAAA,+HAA+H;AAC/H,+HAA+H;AAC/H,gHAAgH;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/city/convert/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import type { Exec } from './stages';
|
|
1
|
+
import type { Exec, ExternalRun } from './stages';
|
|
2
2
|
export declare function childExec(options: {
|
|
3
3
|
out: string;
|
|
4
4
|
entry?: string;
|
|
5
5
|
}): Exec;
|
|
6
|
+
/** Runs an external program (not this CLI) with its output in `logs/<id>.log`. The child inherits the environment: credentials stay where the program finds them and are never read or logged here. */
|
|
7
|
+
export declare function externalExec(options: {
|
|
8
|
+
out: string;
|
|
9
|
+
}): ExternalRun;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// per heavy step keeps each step's memory separate (the landscape of a 14 km map wants a 14 GiB heap, a validate does not).
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.childExec = childExec;
|
|
6
|
+
exports.externalExec = externalExec;
|
|
6
7
|
const node_child_process_1 = require("node:child_process");
|
|
7
8
|
const node_fs_1 = require("node:fs");
|
|
8
9
|
const node_path_1 = require("node:path");
|
|
@@ -33,4 +34,20 @@ function childExec(options) {
|
|
|
33
34
|
child.on('close', (code) => done(code ?? 1));
|
|
34
35
|
});
|
|
35
36
|
}
|
|
37
|
+
/** Runs an external program (not this CLI) with its output in `logs/<id>.log`. The child inherits the environment: credentials stay where the program finds them and are never read or logged here. */
|
|
38
|
+
function externalExec(options) {
|
|
39
|
+
const logs = (0, node_path_1.join)(options.out, 'logs');
|
|
40
|
+
(0, node_fs_1.mkdirSync)(logs, { recursive: true });
|
|
41
|
+
return (command, args, { id, cwd }) => new Promise((resolve) => {
|
|
42
|
+
const log = (0, node_path_1.join)(logs, `${id}.log`);
|
|
43
|
+
const fd = (0, node_fs_1.openSync)(log, 'w');
|
|
44
|
+
const child = (0, node_child_process_1.spawn)(command, args, { stdio: ['ignore', fd, fd], env: process.env, ...(cwd ? { cwd } : {}) });
|
|
45
|
+
const done = (code) => { try {
|
|
46
|
+
(0, node_fs_1.closeSync)(fd);
|
|
47
|
+
}
|
|
48
|
+
catch { /* already closed */ } resolve({ code, tail: tailOf(log) }); };
|
|
49
|
+
child.on('error', () => done(127));
|
|
50
|
+
child.on('close', (code) => done(code ?? 1));
|
|
51
|
+
});
|
|
52
|
+
}
|
|
36
53
|
//# sourceMappingURL=exec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/city/convert/exec.ts"],"names":[],"mappings":";AAAA,mIAAmI;AACnI,4HAA4H;;AAiB5H,8BAYC;
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/city/convert/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ export interface Optimization {
|
|
|
5
5
|
stage: string;
|
|
6
6
|
}
|
|
7
7
|
export declare const OPTIMIZATIONS: readonly Optimization[];
|
|
8
|
+
/** Stages that run only when asked to publish (`--publish`); a plain conversion does not apply their optimizations. */
|
|
9
|
+
export declare const PUBLISH_ONLY_STAGES: readonly string[];
|
|
8
10
|
/**
|
|
9
11
|
* What the pipeline does NOT do, and why, so an inventory row is never read as a gap nobody noticed. `needs` is the data or code a future
|
|
10
12
|
* change would have to bring; `evidence` is what was measured when the call was made. A non-goal is not claimed by a stage.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// run receipt lists the ones a run actually applied, so "does this map have the Granit fixes" is a lookup, not an investigation.
|
|
4
4
|
// `ref` is the PR or doc that introduced it. Runtime fixes (ENGINE) are not here: every World gets them from the runtime range.
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.optimizationById = exports.NON_GOALS = exports.OPTIMIZATIONS = void 0;
|
|
6
|
+
exports.optimizationById = exports.NON_GOALS = exports.PUBLISH_ONLY_STAGES = exports.OPTIMIZATIONS = void 0;
|
|
7
7
|
exports.OPTIMIZATIONS = [
|
|
8
8
|
{ id: 'import.repeated-points', title: 'Consecutive repeated centreline points dropped', ref: 'creator-cli #482', stage: 'import' },
|
|
9
9
|
{ id: 'import.scanner-chunk', title: 'Road scanner keeps a value that opens on a read-chunk boundary', ref: 'creator-cli #481', stage: 'import' },
|
|
@@ -40,7 +40,11 @@ exports.OPTIMIZATIONS = [
|
|
|
40
40
|
{ id: 'packs.startup-closure', title: 'Startup packs (helix.granit-pack/2, critical + deferred) cut from the documents with no browser trace: eager + spawn-resident groups, HLOD of the first-playable radius, placements, distant trees, city materials', ref: 'cs2-pipeline-2 / engine startupPacks', stage: 'startup-packs' },
|
|
41
41
|
{ id: 'publish.streamed-bytes', title: 'Cold-start transfer per tier (decoded, root documents + early + critical + deferred, each URL once) as streamedDataBytes for the World card', ref: 'helix-manifest #74, creator-cli #489', stage: 'streamed-bytes' },
|
|
42
42
|
{ id: 'publish.layout', title: 'Publish tree laid out (scene/<root>/ plus part folders) and a publish plan with the exact shell command', ref: 'cs2-pipeline-unify', stage: 'finish' },
|
|
43
|
+
{ id: 'publish.r2-upload', title: 'Scene data uploaded to the World\'s CDN prefix: immutable cache header, compressible data files gzip-encoded, startup packs beside the scene folder, object count verified', ref: 'cs2-pipeline-2', stage: 'upload' },
|
|
44
|
+
{ id: 'publish.shell-world', title: 'The shell World built from the publish plan and published (scene names, pack scenes and streamedDataBytes come from the plan)', ref: 'cs2-pipeline-2', stage: 'world' },
|
|
43
45
|
];
|
|
46
|
+
/** Stages that run only when asked to publish (`--publish`); a plain conversion does not apply their optimizations. */
|
|
47
|
+
exports.PUBLISH_ONLY_STAGES = ['upload', 'world'];
|
|
44
48
|
exports.NON_GOALS = [
|
|
45
49
|
{
|
|
46
50
|
id: 'terrain.ground-low-layer',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimizations.js","sourceRoot":"","sources":["../../../src/city/convert/optimizations.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"optimizations.js","sourceRoot":"","sources":["../../../src/city/convert/optimizations.ts"],"names":[],"mappings":";AAAA,6HAA6H;AAC7H,iIAAiI;AACjI,gIAAgI;;;AAInH,QAAA,aAAa,GAA4B;IACpD,EAAE,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,gDAAgD,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE;IACnI,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,gEAAgE,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE;IACjJ,EAAE,EAAE,EAAE,6BAA6B,EAAE,KAAK,EAAE,+EAA+E,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE;IACvK,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,qGAAqG,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE;IACrL,EAAE,EAAE,EAAE,+BAA+B,EAAE,KAAK,EAAE,8CAA8C,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE;IAC3I,EAAE,EAAE,EAAE,iCAAiC,EAAE,KAAK,EAAE,kEAAkE,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,EAAE;IACnK,EAAE,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,qEAAqE,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE;IAC3J,EAAE,EAAE,EAAE,yBAAyB,EAAE,KAAK,EAAE,kDAAkD,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE;IACzI,EAAE,EAAE,EAAE,6BAA6B,EAAE,KAAK,EAAE,wEAAwE,EAAE,GAAG,EAAE,sCAAsC,EAAE,KAAK,EAAE,WAAW,EAAE;IACvL,EAAE,EAAE,EAAE,8BAA8B,EAAE,KAAK,EAAE,6DAA6D,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE;IAC3J,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,yDAAyD,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE;IACzI,EAAE,EAAE,EAAE,6BAA6B,EAAE,KAAK,EAAE,8FAA8F,EAAE,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,WAAW,EAAE;IACnM,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,4DAA4D,EAAE,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,WAAW,EAAE;IACtJ,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,0GAA0G,EAAE,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,WAAW,EAAE;IACnM,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,gNAAgN,EAAE,GAAG,EAAE,wDAAwD,EAAE,KAAK,EAAE,WAAW,EAAE;IACtU,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,8IAA8I,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,WAAW,EAAE;IAClO,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,sGAAsG,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,WAAW,EAAE;IAC1L,EAAE,EAAE,EAAE,0BAA0B,EAAE,KAAK,EAAE,6EAA6E,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,WAAW,EAAE;IAC1K,EAAE,EAAE,EAAE,8BAA8B,EAAE,KAAK,EAAE,0FAA0F,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,YAAY,EAAE;IACvL,EAAE,EAAE,EAAE,0BAA0B,EAAE,KAAK,EAAE,sHAAsH,EAAE,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,YAAY,EAAE;IACzN,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,4MAA4M,EAAE,GAAG,EAAE,iDAAiD,EAAE,KAAK,EAAE,YAAY,EAAE;IAC/T,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,wGAAwG,EAAE,GAAG,EAAE,kCAAkC,EAAE,KAAK,EAAE,YAAY,EAAE;IAC3M,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,oGAAoG,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE;IACxL,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,kEAAkE,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE;IACpJ,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,mGAAmG,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE;IACnL,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,oDAAoD,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE;IACnI,EAAE,EAAE,EAAE,0BAA0B,EAAE,KAAK,EAAE,oDAAoD,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,WAAW,EAAE;IACjJ,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,oDAAoD,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE;IAClI,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,8GAA8G,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,YAAY,EAAE;IACnM,EAAE,EAAE,EAAE,0BAA0B,EAAE,KAAK,EAAE,6GAA6G,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,YAAY,EAAE;IACtM,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,gGAAgG,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE;IAC/K,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,qFAAqF,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE;IACxK,EAAE,EAAE,EAAE,uBAAuB,EAAE,KAAK,EAAE,oNAAoN,EAAE,GAAG,EAAE,sCAAsC,EAAE,KAAK,EAAE,eAAe,EAAE;IACjU,EAAE,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,6IAA6I,EAAE,GAAG,EAAE,sCAAsC,EAAE,KAAK,EAAE,gBAAgB,EAAE;IAC5P,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,yGAAyG,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE;IACtL,EAAE,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,4KAA4K,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE;IACxP,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,+HAA+H,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE;CAC7M,CAAC;AAEF,uHAAuH;AAC1G,QAAA,mBAAmB,GAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAQ7D,QAAA,SAAS,GAAuB;IAC3C;QACE,EAAE,EAAE,0BAA0B;QAC9B,KAAK,EAAE,wFAAwF;QAC/F,GAAG,EAAE,4eAA4e;QACjf,KAAK,EAAE,qHAAqH;QAC5H,QAAQ,EAAE,sNAAsN;KACjO;IACD;QACE,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,sHAAsH;QAC7H,GAAG,EAAE,6gBAA6gB;QAClhB,KAAK,EAAE,yUAAyU;QAChV,QAAQ,EAAE,yJAAyJ;KACpK;IACD;QACE,EAAE,EAAE,uCAAuC;QAC3C,KAAK,EAAE,+EAA+E;QACtF,GAAG,EAAE,waAAwa;QAC7a,KAAK,EAAE,8RAA8R;QACrS,QAAQ,EAAE,qKAAqK;KAChL;CACF,CAAC;AAEK,MAAM,gBAAgB,GAAG,CAAC,EAAU,EAAgB,EAAE;IAC3D,MAAM,KAAK,GAAG,qBAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAJW,QAAA,gBAAgB,oBAI3B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { ContentRating, ConvertConfig } from './config';
|
|
2
|
+
import type { ConvertPaths, StageDef } from './stages';
|
|
3
|
+
export declare const DEFAULT_REMOTE = "R2:instant-worlds-dev/instant-worlds";
|
|
4
|
+
export declare const DEFAULT_CDN_BASE = "https://eu.instant-worlds.dev.helix-cdn.com/instant-worlds";
|
|
5
|
+
export declare const IMMUTABLE_CACHE = "Cache-Control: public, max-age=31536000, immutable";
|
|
6
|
+
/** The octet-stream data files that compress ~5x: stored gzip-encoded (the CDN decodes for a client that cannot), as Granit's were. */
|
|
7
|
+
export declare const GZIP_DATA: RegExp;
|
|
8
|
+
export interface UploadSettings {
|
|
9
|
+
/** rclone path up to (not including) the World id folder. */
|
|
10
|
+
remote: string;
|
|
11
|
+
/** Public https base that serves the same folder. */
|
|
12
|
+
cdnBase: string;
|
|
13
|
+
/** Data prefix under `<world>/scene-data/`; default `<name>-<8 hex of the final root documents>`. */
|
|
14
|
+
tag: string | null;
|
|
15
|
+
/** A helix-web-engine-new checkout; needed by the `world` stage. */
|
|
16
|
+
engine: string | null;
|
|
17
|
+
/** Cover image for the World card. */
|
|
18
|
+
thumbnail: string | null;
|
|
19
|
+
/** The creator-attested rating; the platform wants it, truthfully declared, before any World is playable (unlisted or public). */
|
|
20
|
+
contentRating: ContentRating | null;
|
|
21
|
+
}
|
|
22
|
+
export declare function uploadSettings(config: ConvertConfig): (UploadSettings & {
|
|
23
|
+
world: string;
|
|
24
|
+
}) | null;
|
|
25
|
+
/** The data prefix: explicit, else a name that changes exactly when a final root document does (so an unchanged re-run is idempotent and a changed one never overwrites an immutable object). */
|
|
26
|
+
export declare function dataTag(config: ConvertConfig, paths: ConvertPaths): string;
|
|
27
|
+
/** Gzip copies of the compressible data files, in `<out>/upload-gz/<same relative path>` (deterministic: no mtime in the header). */
|
|
28
|
+
export declare function stageGzipData(sceneRoot: string, into: string): {
|
|
29
|
+
files: number;
|
|
30
|
+
raw: number;
|
|
31
|
+
stored: number;
|
|
32
|
+
};
|
|
33
|
+
export interface UploadReceipt {
|
|
34
|
+
schema: 'helix.city-upload/1';
|
|
35
|
+
world: string;
|
|
36
|
+
tag: string;
|
|
37
|
+
dataBase: string;
|
|
38
|
+
objects: number;
|
|
39
|
+
bytes: number;
|
|
40
|
+
gzip: {
|
|
41
|
+
files: number;
|
|
42
|
+
raw: number;
|
|
43
|
+
stored: number;
|
|
44
|
+
};
|
|
45
|
+
packs: number;
|
|
46
|
+
}
|
|
47
|
+
export declare function uploadStage(): StageDef;
|
|
48
|
+
export declare function worldStage(): StageDef;
|
|
49
|
+
/** The slug and title of the World the data was uploaded for, through the platform API with the CLI's own login. */
|
|
50
|
+
export declare function lookupWorld(world: string): Promise<{
|
|
51
|
+
slug: string;
|
|
52
|
+
title: string;
|
|
53
|
+
}>;
|
|
54
|
+
/** Sets the World's visibility through the platform API with the CLI's own login. Returns the status the platform reports. */
|
|
55
|
+
export declare function setWorldVisibility(world: string, visibility: ConvertConfig['publish']['visibility'], contentRating: string | null): Promise<string>;
|
|
56
|
+
/** Bytes and file count of a tree; used by the upload report and its tests. */
|
|
57
|
+
export declare function treeSize(root: string): {
|
|
58
|
+
files: number;
|
|
59
|
+
bytes: number;
|
|
60
|
+
};
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// `helix city convert cs2 --publish`: the two stages after the publish plan. `upload` puts the data on the World's CDN prefix (the
|
|
3
|
+
// World bundle cap is 50 MB / 200 files, so the Scene tree lives beside the World, never in it); `world` builds and publishes the
|
|
4
|
+
// shell World that boots from that prefix. Both read only the publish tree the earlier stages wrote, so a conversion that is not
|
|
5
|
+
// asked to publish never touches the network.
|
|
6
|
+
//
|
|
7
|
+
// Credentials are never read here: `rclone` finds its remote (`R2:` by default) in its own config or `RCLONE_CONFIG_*` environment,
|
|
8
|
+
// `helix` in its login. Nothing in this file prints an environment variable.
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.GZIP_DATA = exports.IMMUTABLE_CACHE = exports.DEFAULT_CDN_BASE = exports.DEFAULT_REMOTE = void 0;
|
|
14
|
+
exports.uploadSettings = uploadSettings;
|
|
15
|
+
exports.dataTag = dataTag;
|
|
16
|
+
exports.stageGzipData = stageGzipData;
|
|
17
|
+
exports.uploadStage = uploadStage;
|
|
18
|
+
exports.worldStage = worldStage;
|
|
19
|
+
exports.lookupWorld = lookupWorld;
|
|
20
|
+
exports.setWorldVisibility = setWorldVisibility;
|
|
21
|
+
exports.treeSize = treeSize;
|
|
22
|
+
const node_crypto_1 = require("node:crypto");
|
|
23
|
+
const node_fs_1 = require("node:fs");
|
|
24
|
+
const node_path_1 = require("node:path");
|
|
25
|
+
const node_zlib_1 = __importDefault(require("node:zlib"));
|
|
26
|
+
const api_1 = require("../../api");
|
|
27
|
+
const config_1 = require("../../config");
|
|
28
|
+
exports.DEFAULT_REMOTE = 'R2:instant-worlds-dev/instant-worlds';
|
|
29
|
+
exports.DEFAULT_CDN_BASE = 'https://eu.instant-worlds.dev.helix-cdn.com/instant-worlds';
|
|
30
|
+
exports.IMMUTABLE_CACHE = 'Cache-Control: public, max-age=31536000, immutable';
|
|
31
|
+
/** The octet-stream data files that compress ~5x: stored gzip-encoded (the CDN decodes for a client that cannot), as Granit's were. */
|
|
32
|
+
exports.GZIP_DATA = /\.(heightfield|placements|dtrees)$/;
|
|
33
|
+
function uploadSettings(config) {
|
|
34
|
+
const upload = config.publish.upload;
|
|
35
|
+
if (!upload)
|
|
36
|
+
return null;
|
|
37
|
+
const world = config.publish.world;
|
|
38
|
+
if (!world)
|
|
39
|
+
throw new Error('publish needs the World to publish into: --world <id> (or publish.world in the config)');
|
|
40
|
+
if (!/^[0-9a-f-]{36}$/.test(world))
|
|
41
|
+
throw new Error(`--world must be a World id (a UUID), got '${world}'`);
|
|
42
|
+
const contentRating = upload.contentRating ?? null;
|
|
43
|
+
if (contentRating !== null && !['everyone', 'teen', 'mature', 'adult'].includes(contentRating))
|
|
44
|
+
throw new Error(`--content-rating must be everyone, teen, mature or adult, got '${contentRating}'`);
|
|
45
|
+
if (contentRating === null && config.publish.visibility !== 'private')
|
|
46
|
+
throw new Error('publish needs --content-rating <everyone|teen|mature|adult>: the platform will not make a World playable (unlisted or public) without a rating its creator attests is truthful. Use --private to publish a draft without one');
|
|
47
|
+
return { remote: upload.remote ?? exports.DEFAULT_REMOTE, cdnBase: upload.cdnBase ?? exports.DEFAULT_CDN_BASE, tag: upload.tag ?? null, engine: upload.engine ?? null, thumbnail: upload.thumbnail ?? null, contentRating, world };
|
|
48
|
+
}
|
|
49
|
+
function listFiles(root) {
|
|
50
|
+
const out = [];
|
|
51
|
+
const walk = (dir) => {
|
|
52
|
+
for (const entry of (0, node_fs_1.readdirSync)(dir, { withFileTypes: true })) {
|
|
53
|
+
const full = (0, node_path_1.join)(dir, entry.name);
|
|
54
|
+
if (entry.isDirectory())
|
|
55
|
+
walk(full);
|
|
56
|
+
else if (entry.isFile())
|
|
57
|
+
out.push(full);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
if ((0, node_fs_1.existsSync)(root))
|
|
61
|
+
walk(root);
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
/** The data prefix: explicit, else a name that changes exactly when a final root document does (so an unchanged re-run is idempotent and a changed one never overwrites an immutable object). */
|
|
65
|
+
function dataTag(config, paths) {
|
|
66
|
+
const given = config.publish.upload?.tag;
|
|
67
|
+
if (given)
|
|
68
|
+
return given;
|
|
69
|
+
const hash = (0, node_crypto_1.createHash)('sha256');
|
|
70
|
+
for (const tier of config.tiers)
|
|
71
|
+
hash.update((0, node_fs_1.readFileSync)((0, node_path_1.join)(paths.publishScene, paths.finalRoot(tier), 'scene.helix-scene.json')));
|
|
72
|
+
return `${config.name}-${hash.digest('hex').slice(0, 8)}`;
|
|
73
|
+
}
|
|
74
|
+
/** Gzip copies of the compressible data files, in `<out>/upload-gz/<same relative path>` (deterministic: no mtime in the header). */
|
|
75
|
+
function stageGzipData(sceneRoot, into) {
|
|
76
|
+
(0, node_fs_1.rmSync)(into, { recursive: true, force: true });
|
|
77
|
+
let files = 0;
|
|
78
|
+
let raw = 0;
|
|
79
|
+
let stored = 0;
|
|
80
|
+
for (const file of listFiles(sceneRoot)) {
|
|
81
|
+
if (!exports.GZIP_DATA.test(file))
|
|
82
|
+
continue;
|
|
83
|
+
const bytes = (0, node_fs_1.readFileSync)(file);
|
|
84
|
+
const gz = node_zlib_1.default.gzipSync(bytes, { level: 9 });
|
|
85
|
+
const dest = (0, node_path_1.join)(into, (0, node_path_1.relative)(sceneRoot, file));
|
|
86
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(dest), { recursive: true });
|
|
87
|
+
(0, node_fs_1.writeFileSync)(dest, gz);
|
|
88
|
+
files += 1;
|
|
89
|
+
raw += bytes.byteLength;
|
|
90
|
+
stored += gz.byteLength;
|
|
91
|
+
}
|
|
92
|
+
return { files, raw, stored };
|
|
93
|
+
}
|
|
94
|
+
const rcloneFlags = ['--transfers', '64', '--checkers', '64', '--retries', '6', '--low-level-retries', '20', '--stats-one-line', '--stats-log-level', 'NOTICE'];
|
|
95
|
+
function uploadStage() {
|
|
96
|
+
return {
|
|
97
|
+
id: 'upload', title: 'Upload the Scene data to the World\'s CDN prefix (immutable, gzip-encoded data files, startup packs)', optimizations: ['publish.r2-upload'],
|
|
98
|
+
signature: (ctx) => { const s = uploadSettings(ctx.config); return { remote: s?.remote, world: s?.world, tag: s?.tag }; },
|
|
99
|
+
outputs: (ctx) => [(0, node_path_1.join)(ctx.paths.publish, 'uploaded.json')],
|
|
100
|
+
async run(ctx) {
|
|
101
|
+
const settings = uploadSettings(ctx.config);
|
|
102
|
+
const run = ctx.run;
|
|
103
|
+
if (!run)
|
|
104
|
+
throw new Error('upload: this run has no external command runner');
|
|
105
|
+
const tag = dataTag(ctx.config, ctx.paths);
|
|
106
|
+
const base = `${settings.remote.replace(/\/+$/, '')}/${settings.world}/scene-data/${tag}`;
|
|
107
|
+
const commands = [];
|
|
108
|
+
const must = async (id, cmd, args) => {
|
|
109
|
+
const result = await run(cmd, args, { id });
|
|
110
|
+
commands.push([cmd, ...args]);
|
|
111
|
+
if (result.code !== 0)
|
|
112
|
+
throw new Error(`${cmd} ${args.slice(0, 2).join(' ')} exited ${result.code}\n${result.tail}`);
|
|
113
|
+
return result.tail;
|
|
114
|
+
};
|
|
115
|
+
// 1. The remote answers (credentials are rclone's own; a refusal says so without echoing any).
|
|
116
|
+
await must('upload.reach', 'rclone', ['lsf', settings.remote.replace(/\/+$/, ''), '--max-depth', '1', '--dirs-only']).catch((error) => {
|
|
117
|
+
throw new Error(`the upload remote ${settings.remote.split(':')[0]}: is not reachable. Configure the rclone remote (or its RCLONE_CONFIG_* environment) with write access to the instant-worlds bucket, then rerun with --from upload.\n${error.message.split('\n').slice(0, 3).join('\n')}`);
|
|
118
|
+
});
|
|
119
|
+
// 2. Scene tree: everything except the compressible data files, with the immutable header; then those files gzip-encoded.
|
|
120
|
+
const exclude = ['--exclude', '.keys/**', '--exclude', '*.heightfield', '--exclude', '*.placements', '--exclude', '*.dtrees'];
|
|
121
|
+
await must('upload.scene', 'rclone', ['copy', '-L', ctx.paths.publishScene, `${base}/scene`, ...exclude, '--header-upload', exports.IMMUTABLE_CACHE, ...rcloneFlags]);
|
|
122
|
+
const gz = stageGzipData(ctx.paths.publishScene, (0, node_path_1.join)(ctx.paths.out, 'upload-gz'));
|
|
123
|
+
if (gz.files > 0)
|
|
124
|
+
await must('upload.gzip', 'rclone', ['copy', (0, node_path_1.join)(ctx.paths.out, 'upload-gz'), `${base}/scene`, '--header-upload', exports.IMMUTABLE_CACHE, '--header-upload', 'Content-Encoding: gzip', ...rcloneFlags]);
|
|
125
|
+
// 3. Startup packs beside the scene folder (`<prefix>/packs/<scene>/`): packs gzip-encoded, indexes plain.
|
|
126
|
+
const packsDir = (0, node_path_1.join)(ctx.paths.publish, 'packs');
|
|
127
|
+
const packFiles = listFiles(packsDir);
|
|
128
|
+
if (packFiles.length > 0) {
|
|
129
|
+
await must('upload.packs', 'rclone', ['copy', packsDir, `${base}/packs`, '--exclude', '*.pack', '--header-upload', exports.IMMUTABLE_CACHE, ...rcloneFlags]);
|
|
130
|
+
await must('upload.packs-gzip', 'rclone', ['copy', packsDir, `${base}/packs`, '--include', '*.pack', '--header-upload', exports.IMMUTABLE_CACHE, '--header-upload', 'Content-Encoding: gzip', ...rcloneFlags]);
|
|
131
|
+
}
|
|
132
|
+
// 3b. The per-map data the shell reads beside the scene folder: lighting (`scene-visuals/<scene>.json`: fog and exposure; without it the
|
|
133
|
+
// World boots with the engine defaults, which is how a city looks washed out) and `world.json` (the scene names a generic shell boots from).
|
|
134
|
+
const visualsDir = (0, node_path_1.join)(ctx.paths.publish, 'scene-visuals');
|
|
135
|
+
const visualFiles = listFiles(visualsDir);
|
|
136
|
+
if (visualFiles.length > 0)
|
|
137
|
+
await must('upload.visuals', 'rclone', ['copy', visualsDir, `${base}/scene-visuals`, '--header-upload', 'Cache-Control: public, max-age=300', ...rcloneFlags]);
|
|
138
|
+
const worldJson = (0, node_path_1.join)(ctx.paths.publish, 'world.json');
|
|
139
|
+
if ((0, node_fs_1.existsSync)(worldJson))
|
|
140
|
+
await must('upload.world-json', 'rclone', ['copyto', worldJson, `${base}/world.json`, '--header-upload', 'Cache-Control: public, max-age=300', ...rcloneFlags]);
|
|
141
|
+
// 4. Prove it landed: object counts (the gzip pass keeps the object count, whatever the stored bytes).
|
|
142
|
+
const sceneLocal = listFiles(ctx.paths.publishScene).filter((f) => !f.includes(`${(0, node_path_1.join)(ctx.paths.publishScene, '.keys')}/`)).length;
|
|
143
|
+
const wanted = sceneLocal + packFiles.length + visualFiles.length + ((0, node_fs_1.existsSync)(worldJson) ? 1 : 0);
|
|
144
|
+
const sizeOut = await must('upload.verify', 'rclone', ['size', '--json', base]);
|
|
145
|
+
const size = JSON.parse(sizeOut.slice(sizeOut.indexOf('{'), sizeOut.lastIndexOf('}') + 1));
|
|
146
|
+
if (size.count < wanted)
|
|
147
|
+
throw new Error(`the CDN prefix holds ${size.count} objects, expected ${wanted}: rerun with --from upload`);
|
|
148
|
+
const receipt = {
|
|
149
|
+
schema: 'helix.city-upload/1', world: settings.world, tag, dataBase: `${settings.cdnBase.replace(/\/+$/, '')}/${settings.world}/scene-data/${tag}`,
|
|
150
|
+
objects: size.count, bytes: size.bytes, gzip: gz, packs: packFiles.length,
|
|
151
|
+
};
|
|
152
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(ctx.paths.publish, 'uploaded.json'), `${JSON.stringify(receipt, null, 2)}\n`);
|
|
153
|
+
return { commands, outputs: { dataBase: receipt.dataBase, objects: String(size.count) }, facts: receipt };
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function worldStage() {
|
|
158
|
+
return {
|
|
159
|
+
id: 'world', title: 'Build and publish the shell World that boots from the uploaded prefix', optimizations: ['publish.shell-world'],
|
|
160
|
+
signature: (ctx) => { const s = uploadSettings(ctx.config); return { engine: s?.engine, thumbnail: s?.thumbnail, visibility: ctx.config.publish.visibility, contentRating: s?.contentRating }; },
|
|
161
|
+
outputs: (ctx) => [(0, node_path_1.join)(ctx.paths.publish, 'published.json')],
|
|
162
|
+
async run(ctx) {
|
|
163
|
+
const settings = uploadSettings(ctx.config);
|
|
164
|
+
const run = ctx.run;
|
|
165
|
+
if (!run)
|
|
166
|
+
throw new Error('world: this run has no external command runner');
|
|
167
|
+
if (!settings.engine)
|
|
168
|
+
throw new Error('publishing the World needs a helix-web-engine-new checkout: --engine <path> (the shell publish script lives in its examples/VisualDemos/granit-city)');
|
|
169
|
+
const script = (0, node_path_1.join)(settings.engine, 'examples', 'VisualDemos', 'granit-city', 'scripts', 'publish-preview.mjs');
|
|
170
|
+
if (!(0, node_fs_1.existsSync)(script))
|
|
171
|
+
throw new Error(`${script} does not exist`);
|
|
172
|
+
const uploaded = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(ctx.paths.publish, 'uploaded.json'), 'utf8'));
|
|
173
|
+
// `helix publish` finds the World by the manifest's slug, so the slug must be the TARGET World's, never the plan's name: a plan named
|
|
174
|
+
// `leonida` published into the live Leonida World while the id said a scratch World. The World's own slug and title are passed instead.
|
|
175
|
+
const target = await (ctx.lookupWorld ?? lookupWorld)(settings.world);
|
|
176
|
+
ctx.log(`world: publishing into ${settings.world} (slug ${target.slug})`);
|
|
177
|
+
const args = [script, '--plan', (0, node_path_1.join)(ctx.paths.publish, 'publish.json'), '--slug', target.slug, '--title', target.title, '--data-base', uploaded.dataBase, '--publish', '--skip-subpath-check',
|
|
178
|
+
...(settings.thumbnail ? ['--thumbnail', settings.thumbnail] : [])];
|
|
179
|
+
let result = await run('node', args, { id: 'world.publish', cwd: (0, node_path_1.dirname)(script) });
|
|
180
|
+
let streamed = 'declared';
|
|
181
|
+
// A platform that predates the `streamedDataBytes` manifest field (helix-backend-api#2137) refuses the bundle outright. The World is still
|
|
182
|
+
// worth publishing, so it is published without the field and says so; the card shows the bundle size until the platform learns it.
|
|
183
|
+
if (result.code !== 0 && /unknown field "streamedDataBytes"/.test(result.tail)) {
|
|
184
|
+
ctx.log('world: the platform does not know streamedDataBytes yet (helix-backend-api#2137 is not deployed); publishing without it, the World card will show the bundle size only');
|
|
185
|
+
const retry = [...args, '--streamed-data-bytes', ''];
|
|
186
|
+
result = await run('node', retry, { id: 'world.publish-without-streamed-bytes', cwd: (0, node_path_1.dirname)(script) });
|
|
187
|
+
args.splice(0, args.length, ...retry);
|
|
188
|
+
streamed = 'withheld: the platform refused the field';
|
|
189
|
+
}
|
|
190
|
+
if (result.code !== 0)
|
|
191
|
+
throw new Error(`publish-preview exited ${result.code}\n${result.tail}`);
|
|
192
|
+
// A new World starts as a draft and a published one keeps its visibility; make it what the plan says (`--public`/`--unlisted`/`--private`).
|
|
193
|
+
const visibility = await (ctx.setWorldVisibility ?? setWorldVisibility)(settings.world, ctx.config.publish.visibility, settings.contentRating);
|
|
194
|
+
const record = { schema: 'helix.city-published/1', world: settings.world, slug: target.slug, visibility, streamedDataBytes: streamed, dataBase: uploaded.dataBase, url: `https://helixgame.com/play/${target.slug}` };
|
|
195
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(ctx.paths.publish, 'published.json'), `${JSON.stringify(record, null, 2)}\n`);
|
|
196
|
+
return { commands: [['node', ...args]], outputs: { url: record.url }, facts: record };
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/** The slug and title of the World the data was uploaded for, through the platform API with the CLI's own login. */
|
|
201
|
+
async function lookupWorld(world) {
|
|
202
|
+
const creds = (0, config_1.loadCredentials)();
|
|
203
|
+
if (!creds)
|
|
204
|
+
throw new Error('not logged in: run `helix login` so the target World can be looked up');
|
|
205
|
+
const found = await api_1.HelixApi.forCredentials(creds).requestItem('GET', `/api/v1/instant-worlds/${encodeURIComponent(world)}`);
|
|
206
|
+
if (!found?.slug)
|
|
207
|
+
throw new Error(`World ${world} does not exist or is not yours`);
|
|
208
|
+
return { slug: found.slug, title: found.title ?? found.slug };
|
|
209
|
+
}
|
|
210
|
+
/** Sets the World's visibility through the platform API with the CLI's own login. Returns the status the platform reports. */
|
|
211
|
+
async function setWorldVisibility(world, visibility, contentRating) {
|
|
212
|
+
const creds = (0, config_1.loadCredentials)();
|
|
213
|
+
if (!creds)
|
|
214
|
+
throw new Error('not logged in: run `helix login` so the World can be made ' + visibility);
|
|
215
|
+
const status = visibility === 'private' ? 'draft' : visibility;
|
|
216
|
+
const updated = await api_1.HelixApi.forCredentials(creds).requestItem('PATCH', `/api/v1/instant-worlds/${encodeURIComponent(world)}`, { status, ...(status !== 'draft' && contentRating ? { contentRating, contentRatingAttestationAccepted: true } : {}) });
|
|
217
|
+
return updated?.status ?? status;
|
|
218
|
+
}
|
|
219
|
+
/** Bytes and file count of a tree; used by the upload report and its tests. */
|
|
220
|
+
function treeSize(root) {
|
|
221
|
+
const files = listFiles(root);
|
|
222
|
+
return { files: files.length, bytes: files.reduce((n, f) => n + (0, node_fs_1.statSync)(f).size, 0) };
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/city/convert/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { ConvertConfig } from './config';
|
|
2
2
|
import { type ConvertReceipt } from './receipt';
|
|
3
|
-
import { type Exec, type Facts, type StageDef } from './stages';
|
|
3
|
+
import { type Exec, type ExternalRun, type Facts, type StageDef } from './stages';
|
|
4
4
|
export interface RunOptions {
|
|
5
5
|
bundle: string;
|
|
6
6
|
out: string;
|
|
7
7
|
config: ConvertConfig;
|
|
8
8
|
exec: Exec;
|
|
9
|
+
/** External programs for the publish stages (`--publish`). */
|
|
10
|
+
run?: ExternalRun;
|
|
9
11
|
cliVersion: string;
|
|
10
12
|
log?: (line: string) => void;
|
|
11
13
|
jobs?: number;
|
package/dist/city/convert/run.js
CHANGED
|
@@ -16,7 +16,7 @@ async function runConvert(options) {
|
|
|
16
16
|
(0, node_fs_1.mkdirSync)(out, { recursive: true });
|
|
17
17
|
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(out, 'convert.json'), `${JSON.stringify(config, null, 2)}\n`);
|
|
18
18
|
const paths = (0, stages_1.convertPaths)(options.bundle, out, config.name);
|
|
19
|
-
const ctx = { config, paths, exec: options.exec, log, jobs: options.jobs ?? 4 };
|
|
19
|
+
const ctx = { config, paths, exec: options.exec, ...(options.run ? { run: options.run } : {}), log, jobs: options.jobs ?? 4 };
|
|
20
20
|
const prior = options.force ? null : (0, receipt_1.readReceipt)(out);
|
|
21
21
|
const receipt = (0, receipt_1.newReceipt)({ cliVersion: options.cliVersion, bundle: options.bundle, out, config });
|
|
22
22
|
if (prior && prior.bundle === options.bundle) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/city/convert/run.ts"],"names":[],"mappings":";AAAA,+HAA+H;;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/city/convert/run.ts"],"names":[],"mappings":"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"}
|