arcadible 0.1.45 → 0.1.47
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/bin/arc-build.js +9 -17
- package/bin/arc-deploy.js +20 -36
- package/bin/arc-init.js +6 -16
- package/bin/arc-inspect.js +3 -7
- package/bin/arc-login.js +5 -5
- package/bin/arc-logout.js +4 -8
- package/bin/arc-open.js +7 -20
- package/bin/arc-pack.js +4 -14
- package/bin/arc-play.js +6 -20
- package/bin/arc-validate.js +8 -17
- package/bin/arc-whoami.js +5 -9
- package/bin/arc.js +7 -2
- package/package.json +1 -1
- package/src/account.js +5 -5
- package/src/action/build/tool.js +8 -15
- package/src/action/deploy/tool-git.js +1 -6
- package/src/action/deploy/wait.js +5 -11
- package/src/action/init/manifest.js +9 -37
- package/src/action/login/flow.js +3 -10
- package/src/action/open/tool.js +2 -1
- package/src/action/pack/limits.js +4 -6
- package/src/action/pack/tool.js +27 -5
- package/src/action/play/tool.js +3 -3
- package/src/action/predeploy/ac.js +28 -43
- package/src/action/predeploy/git.js +4 -4
- package/src/action/predeploy/pm.js +1 -1
- package/src/action/predeploy/published.js +4 -4
- package/src/action/predeploy/tool-git.js +10 -10
- package/src/action/validate/unknown.js +11 -10
- package/src/config/code.js +1 -0
- package/src/config/file.js +23 -0
- package/src/config/limit.js +21 -0
- package/src/parser/env.js +0 -2
- package/src/parser/manifest.js +15 -13
- package/src/parser/media.js +9 -11
- package/src/parser/project.js +31 -9
- package/src/phrase.js +178 -39
- package/src/schema/check/workflow.js +15 -0
- package/src/schema/game.js +65 -42
- package/src/schema/workflow.js +21 -8
- package/src/util/argv.js +27 -1
- package/src/util/command.js +18 -0
- package/src/util/delay.js +5 -21
- package/src/util/doc.js +4 -13
- package/src/util/links.js +17 -2
- package/src/util/media.js +2 -2
- package/src/util/objs.js +8 -1
- package/src/util/output.js +24 -2
- package/src/util/rc.js +2 -2
- package/src/util/request.js +1 -1
- package/src/util/s3.js +1 -1
- package/src/util/schema.js +9 -3
- package/src/util/uris.js +1 -1
- package/src/util/zip.js +2 -2
- package/src/config/doc.js +0 -7
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// [declare]
|
|
4
|
+
|
|
5
|
+
const MB = 1024 * 1024;
|
|
6
|
+
|
|
7
|
+
// [export]
|
|
8
|
+
|
|
9
|
+
// the limits on a packed game, as Arcadible enforces them when it publishes
|
|
10
|
+
// a release (docs: limits.md). arc pack checks them so a build that would
|
|
11
|
+
// fail there fails before it's uploaded.
|
|
12
|
+
module.exports = {
|
|
13
|
+
// the most files in the zip.
|
|
14
|
+
FILES: 10000,
|
|
15
|
+
// the largest file, uncompressed.
|
|
16
|
+
FILE_SIZE: 64 * MB,
|
|
17
|
+
// everything packed, uncompressed.
|
|
18
|
+
TOTAL_SIZE: 256 * MB,
|
|
19
|
+
// the zip of deploy_dir alone, compressed.
|
|
20
|
+
ZIP_SIZE: 64 * MB,
|
|
21
|
+
};
|
package/src/parser/env.js
CHANGED
|
@@ -58,10 +58,8 @@ const parseJson = function (buf) {
|
|
|
58
58
|
// (node_modules/.bin), and its prebuild and postbuild run, as they do
|
|
59
59
|
// locally. npm runs the scripts of a pnpm or Yarn project too.
|
|
60
60
|
const extract = function (conf) {
|
|
61
|
-
/* eslint-disable camelcase */
|
|
62
61
|
const game = { version: conf.version };
|
|
63
62
|
const workflow = conf.scripts?.build ? { build: NPM_RUN_BUILD } : {};
|
|
64
|
-
/* eslint-enable camelcase */
|
|
65
63
|
return deepCompact({ game, workflow }) ?? {};
|
|
66
64
|
};
|
|
67
65
|
|
package/src/parser/manifest.js
CHANGED
|
@@ -11,22 +11,23 @@ const fs = require("fs-extra");
|
|
|
11
11
|
// [import]
|
|
12
12
|
|
|
13
13
|
const cfgcode = require("../config/code");
|
|
14
|
-
const
|
|
14
|
+
const cfgfile = require("../config/file");
|
|
15
15
|
const error = require("../util/error");
|
|
16
|
+
const objs = require("../util/objs");
|
|
16
17
|
const phrase = require("../phrase");
|
|
17
18
|
const TOML = require("../util/toml");
|
|
18
19
|
|
|
19
20
|
// [use]
|
|
20
21
|
|
|
21
22
|
const ArcError = error.ArcError;
|
|
23
|
+
const isTable = objs.isTable;
|
|
22
24
|
const join = path.join;
|
|
23
25
|
const pathExists = fs.pathExists;
|
|
24
26
|
const readFile = fs.readFile;
|
|
25
27
|
|
|
26
28
|
// [declare]
|
|
27
29
|
|
|
28
|
-
const
|
|
29
|
-
const MANIFEST = `${HANDLE}.toml`;
|
|
30
|
+
const MANIFEST = cfgfile.MANIFEST;
|
|
30
31
|
|
|
31
32
|
// [function]
|
|
32
33
|
|
|
@@ -45,12 +46,7 @@ const parseToml = function (buf) {
|
|
|
45
46
|
// [function]
|
|
46
47
|
|
|
47
48
|
const isEmptyTable = function (value) {
|
|
48
|
-
return (
|
|
49
|
-
value !== null &&
|
|
50
|
-
typeof value === "object" &&
|
|
51
|
-
!Array.isArray(value) &&
|
|
52
|
-
!Object.keys(value).length
|
|
53
|
-
);
|
|
49
|
+
return isTable(value) && !Object.keys(value).length;
|
|
54
50
|
};
|
|
55
51
|
|
|
56
52
|
// [function]
|
|
@@ -65,14 +61,20 @@ const extract = function (conf) {
|
|
|
65
61
|
|
|
66
62
|
// [function]
|
|
67
63
|
|
|
68
|
-
|
|
64
|
+
// arcadible.toml as written, or {} without it.
|
|
65
|
+
const read = function (root) {
|
|
69
66
|
const file = join(root, MANIFEST);
|
|
70
67
|
return pathExists(file)
|
|
71
68
|
.then((exists) => (exists ? readFile(file, "utf8") : null))
|
|
72
|
-
.then((buf) => (buf === null ? {} : parseToml(buf)))
|
|
73
|
-
|
|
69
|
+
.then((buf) => (buf === null ? {} : parseToml(buf)));
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// [function]
|
|
73
|
+
|
|
74
|
+
const main = function (root) {
|
|
75
|
+
return read(root).then(extract);
|
|
74
76
|
};
|
|
75
77
|
|
|
76
78
|
// [export]
|
|
77
79
|
|
|
78
|
-
module.exports = main;
|
|
80
|
+
module.exports = Object.assign(main, { read });
|
package/src/parser/media.js
CHANGED
|
@@ -11,8 +11,8 @@ const fs = require("fs-extra");
|
|
|
11
11
|
// [import]
|
|
12
12
|
|
|
13
13
|
const cfgart = require("../config/art");
|
|
14
|
+
const cfgfile = require("../config/file");
|
|
14
15
|
const cfgimage = require("../config/image");
|
|
15
|
-
const cfgproduct = require("../config/product");
|
|
16
16
|
const cfgvideo = require("../config/video");
|
|
17
17
|
const objs = require("../util/objs");
|
|
18
18
|
|
|
@@ -22,17 +22,15 @@ const deepCompact = objs.deepCompact;
|
|
|
22
22
|
const extname = path.extname;
|
|
23
23
|
const join = path.join;
|
|
24
24
|
const parse = path.parse;
|
|
25
|
+
// the manifest's paths use `/` on every platform, as Arcadible's do.
|
|
26
|
+
const posixJoin = path.posix.join;
|
|
25
27
|
const pathExists = fs.pathExists;
|
|
26
28
|
const readdir = fs.promises.readdir;
|
|
27
29
|
|
|
28
30
|
// [declare]
|
|
29
31
|
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
// [declare]
|
|
33
|
-
|
|
34
|
-
const HANDLE = cfgproduct.handle;
|
|
35
|
-
const MEDIA = `.${HANDLE}`;
|
|
32
|
+
const GALLERY = cfgfile.GALLERY;
|
|
33
|
+
const MEDIA = cfgfile.MEDIA;
|
|
36
34
|
|
|
37
35
|
// [function]
|
|
38
36
|
|
|
@@ -50,9 +48,9 @@ const art = function (root) {
|
|
|
50
48
|
list(join(root, MEDIA)).then((names) => ({
|
|
51
49
|
...game,
|
|
52
50
|
...Object.fromEntries(
|
|
53
|
-
|
|
51
|
+
cfgart.map((f) => [
|
|
54
52
|
parse(f).name,
|
|
55
|
-
names.includes(f) ?
|
|
53
|
+
names.includes(f) ? posixJoin(MEDIA, f) : null,
|
|
56
54
|
]),
|
|
57
55
|
),
|
|
58
56
|
}));
|
|
@@ -64,7 +62,7 @@ const handleGallery = function (entries) {
|
|
|
64
62
|
const exts = [...Object.keys(cfgimage), ...Object.keys(cfgvideo)];
|
|
65
63
|
return entries
|
|
66
64
|
.filter((f) => exts.includes(extname(f)))
|
|
67
|
-
.map((f) =>
|
|
65
|
+
.map((f) => posixJoin(GALLERY, f))
|
|
68
66
|
.sort();
|
|
69
67
|
};
|
|
70
68
|
|
|
@@ -72,7 +70,7 @@ const handleGallery = function (entries) {
|
|
|
72
70
|
|
|
73
71
|
const gallery = function (root) {
|
|
74
72
|
return (game) =>
|
|
75
|
-
list(join(root,
|
|
73
|
+
list(join(root, GALLERY))
|
|
76
74
|
.then(handleGallery)
|
|
77
75
|
.then((data) => ({ ...game, gallery: data }));
|
|
78
76
|
};
|
package/src/parser/project.js
CHANGED
|
@@ -11,15 +11,17 @@ const fs = require("fs-extra");
|
|
|
11
11
|
// [import]
|
|
12
12
|
|
|
13
13
|
const cfgcode = require("../config/code");
|
|
14
|
-
const
|
|
14
|
+
const cfgfile = require("../config/file");
|
|
15
15
|
const cfgworkflow = require("../config/workflow");
|
|
16
16
|
const env = require("./env");
|
|
17
17
|
const error = require("../util/error");
|
|
18
|
+
const gameSchema = require("../schema/game");
|
|
18
19
|
const manifest = require("./manifest");
|
|
19
20
|
const media = require("./media");
|
|
20
21
|
const phrase = require("../phrase");
|
|
21
22
|
const promise = require("../util/promise");
|
|
22
23
|
const readme = require("./readme");
|
|
24
|
+
const workflowSchema = require("../schema/workflow");
|
|
23
25
|
|
|
24
26
|
// [use]
|
|
25
27
|
|
|
@@ -33,7 +35,7 @@ const sep = path.sep;
|
|
|
33
35
|
|
|
34
36
|
// [declare]
|
|
35
37
|
|
|
36
|
-
const MANIFEST =
|
|
38
|
+
const MANIFEST = cfgfile.MANIFEST;
|
|
37
39
|
|
|
38
40
|
// [function]
|
|
39
41
|
|
|
@@ -48,6 +50,18 @@ const configGame = function (readmeGame, mediaGame, envGame, manifestGame) {
|
|
|
48
50
|
|
|
49
51
|
// [function]
|
|
50
52
|
|
|
53
|
+
// the fields of `values` that `schema` knows. Arcadible ignores the rest, so
|
|
54
|
+
// they're left out of what's packed and inspected; arc validate warns about
|
|
55
|
+
// each (action/validate/unknown.js).
|
|
56
|
+
const known = function (values, schema, root) {
|
|
57
|
+
const fields = Object.keys(schema({}, { root }).shape);
|
|
58
|
+
return Object.fromEntries(
|
|
59
|
+
Object.entries(values).filter(([field]) => fields.includes(field)),
|
|
60
|
+
);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// [function]
|
|
64
|
+
|
|
51
65
|
const configWorkflow = function (envWorkflow, manifestWorkflow) {
|
|
52
66
|
return {
|
|
53
67
|
...cfgworkflow,
|
|
@@ -95,7 +109,7 @@ const ensureManifest = function (root) {
|
|
|
95
109
|
if (found !== false) {
|
|
96
110
|
throw new ArcError(
|
|
97
111
|
cfgcode.MANIFEST_MISSING,
|
|
98
|
-
phrase.
|
|
112
|
+
phrase.manifestMissing(MANIFEST, shown(root), found && shown(found)),
|
|
99
113
|
);
|
|
100
114
|
}
|
|
101
115
|
});
|
|
@@ -113,13 +127,21 @@ const parseSources = function (root, manifestData) {
|
|
|
113
127
|
() => env(root),
|
|
114
128
|
];
|
|
115
129
|
return promise.serial(parsers).then(([readmeData, mediaData, envData]) => ({
|
|
116
|
-
game:
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
130
|
+
game: known(
|
|
131
|
+
configGame(
|
|
132
|
+
readmeData.game,
|
|
133
|
+
mediaData.game,
|
|
134
|
+
envData.game,
|
|
135
|
+
manifestData.game,
|
|
136
|
+
),
|
|
137
|
+
gameSchema,
|
|
138
|
+
root,
|
|
139
|
+
),
|
|
140
|
+
workflow: known(
|
|
141
|
+
configWorkflow(envData.workflow, manifestData.workflow),
|
|
142
|
+
workflowSchema,
|
|
143
|
+
root,
|
|
121
144
|
),
|
|
122
|
-
workflow: configWorkflow(envData.workflow, manifestData.workflow),
|
|
123
145
|
}));
|
|
124
146
|
};
|
|
125
147
|
|
package/src/phrase.js
CHANGED
|
@@ -32,6 +32,13 @@ const waited = function (seconds) {
|
|
|
32
32
|
|
|
33
33
|
// [function]
|
|
34
34
|
|
|
35
|
+
// a command's heading when it fails: `Deploy aborted.`
|
|
36
|
+
const aborted = function (command) {
|
|
37
|
+
return `${command[0].toUpperCase()}${command.slice(1)} aborted.`;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
// [function]
|
|
41
|
+
|
|
35
42
|
// a build that exited with `code`, or was stopped by `signal`, with what it
|
|
36
43
|
// wrote to stderr.
|
|
37
44
|
const buildFailed = function ({ code, signal, stderr }) {
|
|
@@ -71,12 +78,30 @@ const buildSubmitted = function (version, channel, built) {
|
|
|
71
78
|
|
|
72
79
|
// [function]
|
|
73
80
|
|
|
81
|
+
const buildSucceeded = function () {
|
|
82
|
+
return "Built.";
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
// [function]
|
|
86
|
+
|
|
87
|
+
const cmdBuild = function () {
|
|
88
|
+
return `\`${TOOL} build\``;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
// [function]
|
|
92
|
+
|
|
74
93
|
const cmdDeploy = function () {
|
|
75
94
|
return `\`${TOOL} deploy\``;
|
|
76
95
|
};
|
|
77
96
|
|
|
78
97
|
// [function]
|
|
79
98
|
|
|
99
|
+
const cmdDeployGit = function () {
|
|
100
|
+
return `\`${TOOL} deploy git\``;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
// [function]
|
|
104
|
+
|
|
80
105
|
const cmdInit = function () {
|
|
81
106
|
return `\`${TOOL} init\``;
|
|
82
107
|
};
|
|
@@ -104,12 +129,18 @@ const cmdValidate = function () {
|
|
|
104
129
|
const deployDirMissing = function (dir) {
|
|
105
130
|
return blocks(
|
|
106
131
|
`Unable to find deploy_dir: ${dir}`,
|
|
107
|
-
|
|
132
|
+
`Run ${cmdBuild()}, or set deploy_dir to the folder your build writes.`,
|
|
108
133
|
);
|
|
109
134
|
};
|
|
110
135
|
|
|
111
136
|
// [function]
|
|
112
137
|
|
|
138
|
+
const didYouMean = function (near) {
|
|
139
|
+
return `Did you mean: ${near}?`;
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
// [function]
|
|
143
|
+
|
|
113
144
|
const docAttrInvalid = function (tag, attr, value) {
|
|
114
145
|
return `Value '${value}' is not valid for the '${attr}' attribute on the '${tag}' tag.`;
|
|
115
146
|
};
|
|
@@ -140,20 +171,22 @@ const docMediaMissing = function (src) {
|
|
|
140
171
|
|
|
141
172
|
// [function]
|
|
142
173
|
|
|
143
|
-
|
|
144
|
-
|
|
174
|
+
// a description media src that isn't written as the gallery's path to it,
|
|
175
|
+
// such as `./.arcadible/gallery/x.png`: Arcadible matches it as written.
|
|
176
|
+
const docMediaPath = function (src, gallery) {
|
|
177
|
+
return `Must be written as ${gallery}/<file>: ${src}`;
|
|
145
178
|
};
|
|
146
179
|
|
|
147
180
|
// [function]
|
|
148
181
|
|
|
149
|
-
const
|
|
150
|
-
return `
|
|
182
|
+
const docMediaType = function (src) {
|
|
183
|
+
return `Must be a PNG or MP4 file: ${src}`;
|
|
151
184
|
};
|
|
152
185
|
|
|
153
186
|
// [function]
|
|
154
187
|
|
|
155
|
-
const
|
|
156
|
-
return
|
|
188
|
+
const docTagUnallowed = function (tag) {
|
|
189
|
+
return `Tag '${tag}' is not permitted.`;
|
|
157
190
|
};
|
|
158
191
|
|
|
159
192
|
// [function]
|
|
@@ -183,8 +216,76 @@ const gameNotDeployed = function (game) {
|
|
|
183
216
|
|
|
184
217
|
// [function]
|
|
185
218
|
|
|
219
|
+
const initialized = function () {
|
|
220
|
+
return "Initialized.";
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
// [function]
|
|
224
|
+
|
|
225
|
+
// the heading of arc validate's list of issues, warnings, or references:
|
|
226
|
+
// `2 issues:`
|
|
227
|
+
const listed = function (count, noun) {
|
|
228
|
+
return `${count} ${noun}${count === 1 ? "" : "s"}:`;
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
// [function]
|
|
232
|
+
|
|
233
|
+
const loggedIn = function () {
|
|
234
|
+
return "Logged in.";
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
// [function]
|
|
238
|
+
|
|
239
|
+
const loggedOut = function () {
|
|
240
|
+
return "Logged out.";
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
// [function]
|
|
244
|
+
|
|
245
|
+
const loggingIn = function () {
|
|
246
|
+
return "Logging in...";
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
// [function]
|
|
250
|
+
|
|
251
|
+
const noAccount = function () {
|
|
252
|
+
return "Not logged in.";
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
// [function]
|
|
256
|
+
|
|
257
|
+
const noIssuesFound = function () {
|
|
258
|
+
return "No issues found.";
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
// [function]
|
|
262
|
+
|
|
263
|
+
const nothingToDo = function () {
|
|
264
|
+
return "Nothing to do.";
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
// [function]
|
|
268
|
+
|
|
269
|
+
const packed = function () {
|
|
270
|
+
return "Packed.";
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
// [function]
|
|
274
|
+
|
|
275
|
+
const pressEnterToOpen = function () {
|
|
276
|
+
return "Press Enter to open the URL.";
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
// [function]
|
|
280
|
+
|
|
281
|
+
const releaseFailedHeading = function () {
|
|
282
|
+
return "Release failed.";
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
// [function]
|
|
286
|
+
|
|
186
287
|
// origin isn't the game's connected repository: none is, or another is.
|
|
187
|
-
const
|
|
288
|
+
const repoNotConnected = function (game, repo, url) {
|
|
188
289
|
return blocks(`${repo} isn't ${game}'s repository on ${TITLE}.`, [
|
|
189
290
|
`The game's owner connects it in ${TITLE} Studio, on the game's Repository tab, and connects it again if it was renamed on GitHub:`,
|
|
190
291
|
url,
|
|
@@ -208,7 +309,7 @@ const gameUnavailable = function (id) {
|
|
|
208
309
|
|
|
209
310
|
// [function]
|
|
210
311
|
|
|
211
|
-
const
|
|
312
|
+
const gitUncommitted = function () {
|
|
212
313
|
return blocks(
|
|
213
314
|
"Uncommitted changes found.",
|
|
214
315
|
"Commit, stash, or discard them first.",
|
|
@@ -235,12 +336,12 @@ const gitRemoteUnreachable = function () {
|
|
|
235
336
|
|
|
236
337
|
// [function]
|
|
237
338
|
|
|
238
|
-
const
|
|
339
|
+
const manifestMissing = function (file, dir, found) {
|
|
239
340
|
return blocks(
|
|
240
341
|
dir === "." ? `No ${file} in this directory.` : `No ${file} in ${dir}.`,
|
|
241
342
|
found
|
|
242
|
-
? `The project is in \`${found}\`: run
|
|
243
|
-
:
|
|
343
|
+
? `The project is in \`${found}\`: run ${TOOL} there, or pass \`-C ${found}\`.`
|
|
344
|
+
: `Run ${TOOL} in the project's directory, or pass \`-C\`, or start a project with ${cmdInit()}.`,
|
|
244
345
|
);
|
|
245
346
|
};
|
|
246
347
|
|
|
@@ -248,8 +349,8 @@ const noManifest = function (file, dir, found) {
|
|
|
248
349
|
|
|
249
350
|
const projectNotRepoRoot = function (prefix) {
|
|
250
351
|
return blocks(
|
|
251
|
-
|
|
252
|
-
|
|
352
|
+
`${cmdDeployGit()} releases the project at the repository's root, and this one is in ${prefix}.`,
|
|
353
|
+
`Deploy it with ${cmdDeploy()}, or give it a repository of its own.`,
|
|
253
354
|
);
|
|
254
355
|
};
|
|
255
356
|
|
|
@@ -282,7 +383,7 @@ const gitTagPushFailed = function (version) {
|
|
|
282
383
|
|
|
283
384
|
// [function]
|
|
284
385
|
|
|
285
|
-
const
|
|
386
|
+
const gitTagExists = function (version) {
|
|
286
387
|
return blocks(
|
|
287
388
|
`Git tag for v${version} already exists, here or on origin.`,
|
|
288
389
|
"Bump the version.",
|
|
@@ -390,7 +491,7 @@ const loginFailed = function () {
|
|
|
390
491
|
|
|
391
492
|
// [function]
|
|
392
493
|
|
|
393
|
-
const
|
|
494
|
+
const gameIdMissing = function () {
|
|
394
495
|
return blocks(
|
|
395
496
|
"No game handle or ID.",
|
|
396
497
|
`Pass one, or run it in a project after ${cmdInit()} has added an ID.`,
|
|
@@ -399,7 +500,7 @@ const noGameId = function () {
|
|
|
399
500
|
|
|
400
501
|
// [function]
|
|
401
502
|
|
|
402
|
-
const
|
|
503
|
+
const lockfileMissing = function () {
|
|
403
504
|
return blocks("No lockfile found.", [
|
|
404
505
|
"Install your dependencies to create one.",
|
|
405
506
|
"Then commit it.",
|
|
@@ -414,7 +515,7 @@ const noProductionRelease = function () {
|
|
|
414
515
|
|
|
415
516
|
// [function]
|
|
416
517
|
|
|
417
|
-
const
|
|
518
|
+
const templateMissing = function () {
|
|
418
519
|
return blocks("No template chosen.", [
|
|
419
520
|
"Pass `--template <user/repo>`.",
|
|
420
521
|
"Or pass `--yes` for the blank starter.",
|
|
@@ -424,7 +525,7 @@ const noTemplate = function () {
|
|
|
424
525
|
// [function]
|
|
425
526
|
|
|
426
527
|
const notLoggedIn = function () {
|
|
427
|
-
return blocks(
|
|
528
|
+
return blocks(noAccount(), `Run ${cmdLogin()} to log in.`);
|
|
428
529
|
};
|
|
429
530
|
|
|
430
531
|
// [function]
|
|
@@ -453,7 +554,7 @@ const openToContinue = function () {
|
|
|
453
554
|
|
|
454
555
|
// [function]
|
|
455
556
|
|
|
456
|
-
const
|
|
557
|
+
const packageIndexMissing = function (file) {
|
|
457
558
|
return `Package is missing '${file}'.`;
|
|
458
559
|
};
|
|
459
560
|
|
|
@@ -465,6 +566,15 @@ const packageFileTooLarge = function (file, size) {
|
|
|
465
566
|
|
|
466
567
|
// [function]
|
|
467
568
|
|
|
569
|
+
const packagePathReserved = function (folder) {
|
|
570
|
+
return blocks(
|
|
571
|
+
`'${folder}/' is reserved for ${TITLE}.`,
|
|
572
|
+
"Rename the folder, and the paths that load from it.",
|
|
573
|
+
);
|
|
574
|
+
};
|
|
575
|
+
|
|
576
|
+
// [function]
|
|
577
|
+
|
|
468
578
|
const packageTooLarge = function (size) {
|
|
469
579
|
return blocks(
|
|
470
580
|
`Package is larger than ${size} MB.`,
|
|
@@ -622,12 +732,6 @@ const templateUnavailable = function (template) {
|
|
|
622
732
|
|
|
623
733
|
// [function]
|
|
624
734
|
|
|
625
|
-
const timedOut = function () {
|
|
626
|
-
return "Timed out.";
|
|
627
|
-
};
|
|
628
|
-
|
|
629
|
-
// [function]
|
|
630
|
-
|
|
631
735
|
const unableToFind = function (file) {
|
|
632
736
|
return `Unable to find: ${file}`;
|
|
633
737
|
};
|
|
@@ -641,7 +745,7 @@ const unableToOpen = function () {
|
|
|
641
745
|
// [function]
|
|
642
746
|
|
|
643
747
|
const unableToParse = function (file, message) {
|
|
644
|
-
return blocks(`Unable to parse ${file}.`, message);
|
|
748
|
+
return blocks(`Unable to parse ${file}.`, message.trim());
|
|
645
749
|
};
|
|
646
750
|
|
|
647
751
|
// [function]
|
|
@@ -655,6 +759,18 @@ const unableToReach = function () {
|
|
|
655
759
|
|
|
656
760
|
// [function]
|
|
657
761
|
|
|
762
|
+
const unknownField = function () {
|
|
763
|
+
return "Unknown field.";
|
|
764
|
+
};
|
|
765
|
+
|
|
766
|
+
// [function]
|
|
767
|
+
|
|
768
|
+
const unknownTable = function () {
|
|
769
|
+
return "Unknown table.";
|
|
770
|
+
};
|
|
771
|
+
|
|
772
|
+
// [function]
|
|
773
|
+
|
|
658
774
|
const uploadFailed = function (status) {
|
|
659
775
|
return `Upload failed with status ${status}.`;
|
|
660
776
|
};
|
|
@@ -670,6 +786,12 @@ const uploadRateLimited = function (version) {
|
|
|
670
786
|
|
|
671
787
|
// [function]
|
|
672
788
|
|
|
789
|
+
const waitTimedOut = function () {
|
|
790
|
+
return "Wait timed out.";
|
|
791
|
+
};
|
|
792
|
+
|
|
793
|
+
// [function]
|
|
794
|
+
|
|
673
795
|
const workflowMissing = function (file) {
|
|
674
796
|
return blocks(
|
|
675
797
|
`No release workflow found: ${file}`,
|
|
@@ -687,7 +809,7 @@ const versionPrerelease = function (version) {
|
|
|
687
809
|
|
|
688
810
|
// a version that's already published, with what is, so the developer knows
|
|
689
811
|
// what to bump to.
|
|
690
|
-
const
|
|
812
|
+
const versionExists = function (version, { next, production, staging }) {
|
|
691
813
|
const latest = [
|
|
692
814
|
production ? `Production: ${production}` : null,
|
|
693
815
|
staging ? `Staging: ${staging}` : null,
|
|
@@ -780,35 +902,38 @@ const videoWidthMin = function (width) {
|
|
|
780
902
|
// [export]
|
|
781
903
|
|
|
782
904
|
module.exports = {
|
|
905
|
+
aborted,
|
|
783
906
|
buildFailed,
|
|
784
907
|
buildOutputMissing,
|
|
785
908
|
buildPublishing,
|
|
786
909
|
buildPublishingGit,
|
|
787
910
|
buildSubmitted,
|
|
911
|
+
buildSucceeded,
|
|
788
912
|
cmdInit,
|
|
789
913
|
cmdInspect,
|
|
790
914
|
deployDirMissing,
|
|
915
|
+
didYouMean,
|
|
791
916
|
docAttrInvalid,
|
|
792
917
|
docAttrUnallowed,
|
|
793
918
|
docCommentUnallowed,
|
|
794
919
|
docMediaElement,
|
|
795
920
|
docMediaMissing,
|
|
921
|
+
docMediaPath,
|
|
796
922
|
docMediaType,
|
|
797
923
|
docTagUnallowed,
|
|
798
|
-
docUnsupported,
|
|
799
924
|
errorCode,
|
|
800
925
|
gameHandleTaken,
|
|
926
|
+
gameIdMissing,
|
|
801
927
|
gameNotDeployed,
|
|
802
928
|
gameNotFound,
|
|
803
|
-
gameRepoMissing,
|
|
804
929
|
gameUnavailable,
|
|
805
|
-
gitChangesPresent,
|
|
806
930
|
gitRemoteMissing,
|
|
807
931
|
gitRemoteUnreachable,
|
|
808
932
|
gitRepoMissing,
|
|
809
933
|
gitTagCreateFailed,
|
|
934
|
+
gitTagExists,
|
|
810
935
|
gitTagPushFailed,
|
|
811
|
-
|
|
936
|
+
gitUncommitted,
|
|
812
937
|
httpError,
|
|
813
938
|
imageAspect,
|
|
814
939
|
imageFound,
|
|
@@ -819,30 +944,41 @@ module.exports = {
|
|
|
819
944
|
imageUnsupported,
|
|
820
945
|
imageWidthMax,
|
|
821
946
|
imageWidthMin,
|
|
947
|
+
initialized,
|
|
822
948
|
issuesAfterBuild,
|
|
823
949
|
issuesFound,
|
|
950
|
+
listed,
|
|
951
|
+
lockfileMissing,
|
|
952
|
+
loggedIn,
|
|
953
|
+
loggedOut,
|
|
954
|
+
loggingIn,
|
|
824
955
|
loginCodeExpired,
|
|
825
956
|
loginFailed,
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
957
|
+
manifestMissing,
|
|
958
|
+
noAccount,
|
|
959
|
+
noIssuesFound,
|
|
829
960
|
noProductionRelease,
|
|
830
|
-
noTemplate,
|
|
831
961
|
noVideoMetadata,
|
|
832
962
|
noVideoTrack,
|
|
833
963
|
notLoggedIn,
|
|
964
|
+
nothingToDo,
|
|
834
965
|
openToContinue,
|
|
835
966
|
opened,
|
|
836
|
-
packageFileMissing,
|
|
837
967
|
packageFileTooLarge,
|
|
968
|
+
packageIndexMissing,
|
|
969
|
+
packagePathReserved,
|
|
838
970
|
packageTooLarge,
|
|
839
971
|
packageTooManyFiles,
|
|
840
972
|
packageUncompressedTooLarge,
|
|
973
|
+
packed,
|
|
974
|
+
pressEnterToOpen,
|
|
841
975
|
projectNotRepoRoot,
|
|
842
976
|
releaseFailed,
|
|
977
|
+
releaseFailedHeading,
|
|
843
978
|
releasePublished,
|
|
844
979
|
releaseTimedOut,
|
|
845
980
|
releaseWaiting,
|
|
981
|
+
repoNotConnected,
|
|
846
982
|
sessionExpired,
|
|
847
983
|
sizeB,
|
|
848
984
|
sizeGb,
|
|
@@ -854,17 +990,19 @@ module.exports = {
|
|
|
854
990
|
starterPixiJs,
|
|
855
991
|
starterThreeJs,
|
|
856
992
|
tagPushed,
|
|
993
|
+
templateMissing,
|
|
857
994
|
templateUnavailable,
|
|
858
|
-
timedOut,
|
|
859
995
|
timeoutInvalid,
|
|
860
996
|
unableToFind,
|
|
861
997
|
unableToOpen,
|
|
862
998
|
unableToParse,
|
|
863
999
|
unableToReach,
|
|
1000
|
+
unknownField,
|
|
1001
|
+
unknownTable,
|
|
864
1002
|
uploadFailed,
|
|
865
1003
|
uploadRateLimited,
|
|
1004
|
+
versionExists,
|
|
866
1005
|
versionPrerelease,
|
|
867
|
-
versionPublished,
|
|
868
1006
|
versionRelease,
|
|
869
1007
|
versionUnchecked,
|
|
870
1008
|
videoAspect,
|
|
@@ -878,5 +1016,6 @@ module.exports = {
|
|
|
878
1016
|
videoUnsupported,
|
|
879
1017
|
videoWidthMax,
|
|
880
1018
|
videoWidthMin,
|
|
1019
|
+
waitTimedOut,
|
|
881
1020
|
workflowMissing,
|
|
882
1021
|
};
|