@quenty/nevermore-cli 4.12.4 → 4.13.0-canary.637.d86930c.0
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/CHANGELOG.md +11 -0
- package/dist/args/global-args.js +1 -2
- package/dist/commands/download-roblox-types.d.ts +1 -1
- package/dist/commands/download-roblox-types.d.ts.map +1 -1
- package/dist/commands/download-roblox-types.js +43 -88
- package/dist/commands/download-roblox-types.js.map +1 -1
- package/dist/commands/init-game-command.d.ts +1 -1
- package/dist/commands/init-game-command.d.ts.map +1 -1
- package/dist/commands/init-game-command.js +69 -113
- package/dist/commands/init-game-command.js.map +1 -1
- package/dist/commands/init-package-command.d.ts +1 -1
- package/dist/commands/init-package-command.d.ts.map +1 -1
- package/dist/commands/init-package-command.js +31 -75
- package/dist/commands/init-package-command.js.map +1 -1
- package/dist/commands/init-plugin-command.d.ts +1 -1
- package/dist/commands/init-plugin-command.d.ts.map +1 -1
- package/dist/commands/init-plugin-command.js +28 -70
- package/dist/commands/init-plugin-command.js.map +1 -1
- package/dist/commands/install-package-command.d.ts +2 -2
- package/dist/commands/install-package-command.d.ts.map +1 -1
- package/dist/commands/install-package-command.js +42 -62
- package/dist/commands/install-package-command.js.map +1 -1
- package/dist/commands/pack-command.d.ts +1 -1
- package/dist/commands/pack-command.d.ts.map +1 -1
- package/dist/commands/pack-command.js +19 -59
- package/dist/commands/pack-command.js.map +1 -1
- package/dist/commands/test-project-command.d.ts +1 -1
- package/dist/commands/test-project-command.d.ts.map +1 -1
- package/dist/commands/test-project-command.js +89 -124
- package/dist/commands/test-project-command.js.map +1 -1
- package/dist/nevermore.js +29 -25
- package/dist/nevermore.js.map +1 -1
- package/dist/utils/nevermore-cli-utils.d.ts +3 -3
- package/dist/utils/nevermore-cli-utils.d.ts.map +1 -1
- package/dist/utils/nevermore-cli-utils.js +19 -61
- package/dist/utils/nevermore-cli-utils.js.map +1 -1
- package/package.json +13 -12
- package/src/commands/download-roblox-types.ts +1 -1
- package/src/commands/init-game-command.ts +2 -3
- package/src/commands/init-package-command.ts +2 -2
- package/src/commands/init-plugin-command.ts +3 -3
- package/src/commands/install-package-command.ts +31 -27
- package/src/commands/pack-command.ts +2 -2
- package/src/commands/test-project-command.ts +2 -2
- package/src/nevermore.ts +20 -7
- package/src/utils/nevermore-cli-utils.ts +3 -3
- package/tsconfig.json +5 -2
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [4.13.0-canary.637.d86930c.0](https://github.com/Quenty/Nevermore/compare/@quenty/nevermore-cli@4.12.4...@quenty/nevermore-cli@4.13.0-canary.637.d86930c.0) (2026-01-14)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* Nevermore CLI now checks to make sure it is up to date ([d86930c](https://github.com/Quenty/Nevermore/commit/d86930c85f24d879dee9ce5ce413488d1250246d))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [4.12.4](https://github.com/Quenty/Nevermore/compare/@quenty/nevermore-cli@4.12.3...@quenty/nevermore-cli@4.12.4) (2026-01-12)
|
|
7
18
|
|
|
8
19
|
|
package/dist/args/global-args.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Download roblox types command
|
|
3
3
|
*/
|
|
4
4
|
import { Argv, CommandModule } from 'yargs';
|
|
5
|
-
import { NevermoreGlobalArgs } from '../args/global-args';
|
|
5
|
+
import { NevermoreGlobalArgs } from '../args/global-args.js';
|
|
6
6
|
export interface DownloadRobloxTypesArgs extends NevermoreGlobalArgs {
|
|
7
7
|
fileName?: string;
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-roblox-types.d.ts","sourceRoot":"","sources":["../../src/commands/download-roblox-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"download-roblox-types.d.ts","sourceRoot":"","sources":["../../src/commands/download-roblox-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAK7D,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,mBAAmB,CAAC,CAAC,CAChC,YAAW,aAAa,CAAC,CAAC,EAAE,uBAAuB,CAAC;IAE7C,OAAO,SAAuC;IAC9C,QAAQ,SAAiD;IAEzD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAOX,IAAI,CAAC,uBAAuB,CAAC;IAGjC,OAAO,CAAC,IAAI,EAAE,uBAAuB;mBAO7B,SAAS;mBA2BT,cAAc;CAoBpC"}
|
|
@@ -1,52 +1,15 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Download roblox types command
|
|
4
3
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
-
}
|
|
11
|
-
Object.defineProperty(o, k2, desc);
|
|
12
|
-
}) : (function(o, m, k, k2) {
|
|
13
|
-
if (k2 === undefined) k2 = k;
|
|
14
|
-
o[k2] = m[k];
|
|
15
|
-
}));
|
|
16
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
-
}) : function(o, v) {
|
|
19
|
-
o["default"] = v;
|
|
20
|
-
});
|
|
21
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
-
if (mod && mod.__esModule) return mod;
|
|
23
|
-
var result = {};
|
|
24
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
-
__setModuleDefault(result, mod);
|
|
26
|
-
return result;
|
|
27
|
-
};
|
|
28
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
29
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
30
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
31
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
32
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
33
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
34
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
35
|
-
});
|
|
36
|
-
};
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.DownloadRobloxTypes = void 0;
|
|
39
|
-
const fs = __importStar(require("fs/promises"));
|
|
40
|
-
const fsSync = __importStar(require("fs"));
|
|
41
|
-
const https = __importStar(require("https"));
|
|
4
|
+
import * as fs from 'fs/promises';
|
|
5
|
+
import * as fsSync from 'fs';
|
|
6
|
+
import * as https from 'https';
|
|
42
7
|
/**
|
|
43
8
|
* Creates a new game with Nevermore dependencies
|
|
44
9
|
*/
|
|
45
|
-
class DownloadRobloxTypes {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.describe = 'Downloads the Roblox Luau type definitions.';
|
|
49
|
-
}
|
|
10
|
+
export class DownloadRobloxTypes {
|
|
11
|
+
command = 'download-roblox-types [file-name]';
|
|
12
|
+
describe = 'Downloads the Roblox Luau type definitions.';
|
|
50
13
|
builder(args) {
|
|
51
14
|
args.positional('file-name', {
|
|
52
15
|
describe: 'Path to save the downloaded Roblox Luau type definitions.',
|
|
@@ -56,58 +19,50 @@ class DownloadRobloxTypes {
|
|
|
56
19
|
});
|
|
57
20
|
return args;
|
|
58
21
|
}
|
|
59
|
-
handler(args) {
|
|
60
|
-
|
|
61
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
-
yield DownloadRobloxTypes._download((_a = args.fileName) !== null && _a !== void 0 ? _a : 'globalTypes.d.lua', 'https://raw.githubusercontent.com/JohnnyMorganz/luau-lsp/main/scripts/globalTypes.d.lua');
|
|
63
|
-
});
|
|
22
|
+
async handler(args) {
|
|
23
|
+
await DownloadRobloxTypes._download(args.fileName ?? 'globalTypes.d.lua', 'https://raw.githubusercontent.com/JohnnyMorganz/luau-lsp/main/scripts/globalTypes.d.lua');
|
|
64
24
|
}
|
|
65
|
-
static _download(filename, url) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
file.
|
|
75
|
-
|
|
76
|
-
resolve();
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
request.on('error', (err) => {
|
|
80
|
-
fsSync.unlink(filename, () => { });
|
|
81
|
-
reject(err);
|
|
82
|
-
});
|
|
83
|
-
file.on('error', (err) => {
|
|
84
|
-
fsSync.unlink(filename, () => { });
|
|
85
|
-
reject(err);
|
|
25
|
+
static async _download(filename, url) {
|
|
26
|
+
if (!(await DownloadRobloxTypes._needsDownload(filename))) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
const file = fsSync.createWriteStream(filename);
|
|
31
|
+
const request = https.get(url, (response) => {
|
|
32
|
+
response.pipe(file);
|
|
33
|
+
file.on('finish', () => {
|
|
34
|
+
file.close();
|
|
35
|
+
resolve();
|
|
86
36
|
});
|
|
87
37
|
});
|
|
38
|
+
request.on('error', (err) => {
|
|
39
|
+
fsSync.unlink(filename, () => { });
|
|
40
|
+
reject(err);
|
|
41
|
+
});
|
|
42
|
+
file.on('error', (err) => {
|
|
43
|
+
fsSync.unlink(filename, () => { });
|
|
44
|
+
reject(err);
|
|
45
|
+
});
|
|
88
46
|
});
|
|
89
47
|
}
|
|
90
|
-
static _needsDownload(filename) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
return false;
|
|
48
|
+
static async _needsDownload(filename) {
|
|
49
|
+
try {
|
|
50
|
+
// Check age of file
|
|
51
|
+
const stats = await fs.stat(filename);
|
|
52
|
+
const oneDayInMs = 24 * 60 * 60 * 1000;
|
|
53
|
+
const fileAge = Date.now() - stats.mtimeMs;
|
|
54
|
+
if (fileAge > oneDayInMs) {
|
|
55
|
+
return true;
|
|
101
56
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
// File doesn't exist
|
|
61
|
+
if (error.code === 'ENOENT') {
|
|
62
|
+
return true;
|
|
108
63
|
}
|
|
109
|
-
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
110
66
|
}
|
|
111
67
|
}
|
|
112
|
-
exports.DownloadRobloxTypes = DownloadRobloxTypes;
|
|
113
68
|
//# sourceMappingURL=download-roblox-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-roblox-types.js","sourceRoot":"","sources":["../../src/commands/download-roblox-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"download-roblox-types.js","sourceRoot":"","sources":["../../src/commands/download-roblox-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,IAAI,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAGvB,OAAO,GAAG,mCAAmC,CAAC;IAC9C,QAAQ,GAAG,6CAA6C,CAAC;IAEzD,OAAO,CAAC,IAAa;QAC1B,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;YAC3B,QAAQ,EAAE,2DAA2D;YACrE,YAAY,EAAE,KAAK;YACnB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,mBAAmB;SAC7B,CAAC,CAAC;QACH,OAAO,IAAqC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAA6B;QAChD,MAAM,mBAAmB,CAAC,SAAS,CACjC,IAAI,CAAC,QAAQ,IAAI,mBAAmB,EACpC,yFAAyF,CAC1F,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,GAAW;QAC1D,IAAI,CAAC,CAAC,MAAM,mBAAmB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAa,EAAE,EAAE;gBAC/C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;oBACrB,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBACjC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBAC9B,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAgB;QAClD,IAAI,CAAC;YACH,oBAAoB;YACpB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;YAE3C,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,qBAAqB;YACrB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Initialize a new game command
|
|
3
3
|
*/
|
|
4
4
|
import { Argv, CommandModule } from 'yargs';
|
|
5
|
-
import { NevermoreGlobalArgs } from '../args/global-args';
|
|
5
|
+
import { NevermoreGlobalArgs } from '../args/global-args.js';
|
|
6
6
|
export interface InitGameArgs extends NevermoreGlobalArgs {
|
|
7
7
|
gameName: string;
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-game-command.d.ts","sourceRoot":"","sources":["../../src/commands/init-game-command.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"init-game-command.d.ts","sourceRoot":"","sources":["../../src/commands/init-game-command.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAK7D,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,eAAe,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,YAAY,CAAC;IAChE,OAAO,SAAsB;IAC7B,QAAQ,SAAsC;IAE9C,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAMX,IAAI,CAAC,YAAY,CAAC;WAGf,kBAAkB,CACpC,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC;IA+CH,OAAO,CAAC,IAAI,EAAE,YAAY;mBAkClB,eAAe;IAYpC,OAAO,CAAC,MAAM,CAAC,iBAAiB;CASjC"}
|
|
@@ -1,53 +1,16 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Initialize a new game command
|
|
4
3
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
-
}
|
|
11
|
-
Object.defineProperty(o, k2, desc);
|
|
12
|
-
}) : (function(o, m, k, k2) {
|
|
13
|
-
if (k2 === undefined) k2 = k;
|
|
14
|
-
o[k2] = m[k];
|
|
15
|
-
}));
|
|
16
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
-
}) : function(o, v) {
|
|
19
|
-
o["default"] = v;
|
|
20
|
-
});
|
|
21
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
-
if (mod && mod.__esModule) return mod;
|
|
23
|
-
var result = {};
|
|
24
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
-
__setModuleDefault(result, mod);
|
|
26
|
-
return result;
|
|
27
|
-
};
|
|
28
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
29
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
30
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
31
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
32
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
33
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
34
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
35
|
-
});
|
|
36
|
-
};
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.InitGameCommand = void 0;
|
|
39
|
-
const path = __importStar(require("path"));
|
|
40
|
-
const cli_output_helpers_1 = require("@quenty/cli-output-helpers");
|
|
41
|
-
const nevermore_template_helpers_1 = require("@quenty/nevermore-template-helpers");
|
|
42
|
-
const nevermore_cli_utils_1 = require("../utils/nevermore-cli-utils");
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { OutputHelper } from '@quenty/cli-output-helpers';
|
|
6
|
+
import { TemplateHelper } from '@quenty/nevermore-template-helpers';
|
|
7
|
+
import { getTemplatePathByName, runCommandAsync, } from '../utils/nevermore-cli-utils.js';
|
|
43
8
|
/**
|
|
44
9
|
* Creates a new game with Nevermore dependencies
|
|
45
10
|
*/
|
|
46
|
-
class InitGameCommand {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.describe = 'Initializes a new game template.';
|
|
50
|
-
}
|
|
11
|
+
export class InitGameCommand {
|
|
12
|
+
command = 'init [game-name]';
|
|
13
|
+
describe = 'Initializes a new game template.';
|
|
51
14
|
builder(args) {
|
|
52
15
|
args.positional('game-name', {
|
|
53
16
|
describe: 'Name of the new package folder.',
|
|
@@ -56,78 +19,72 @@ class InitGameCommand {
|
|
|
56
19
|
});
|
|
57
20
|
return args;
|
|
58
21
|
}
|
|
59
|
-
static initToolChainAsync(args, srcRoot, packages) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
22
|
+
static async initToolChainAsync(args, srcRoot, packages) {
|
|
23
|
+
// TODO: Something better than this so we don't spam install pnpm every time
|
|
24
|
+
await runCommandAsync(args, 'npm', ['install', 'pnpm', '-g']);
|
|
25
|
+
await runCommandAsync(args, 'pnpm', ['install', ...packages], {
|
|
26
|
+
cwd: srcRoot,
|
|
27
|
+
});
|
|
28
|
+
try {
|
|
29
|
+
await runCommandAsync(args, 'git', ['init'], {
|
|
64
30
|
cwd: srcRoot,
|
|
65
31
|
});
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
catch (_d) {
|
|
96
|
-
cli_output_helpers_1.OutputHelper.error('Failed to run `selene generate-roblox-std`, is selene installed?');
|
|
97
|
-
}
|
|
98
|
-
});
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
OutputHelper.error('Failed to initialize git repository, is git installed?');
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
await runCommandAsync(args, 'aftman', ['install'], {
|
|
38
|
+
cwd: srcRoot,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
OutputHelper.error('Failed to install aftman, is aftman installed?');
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
await runCommandAsync(args, 'npm', ['run', 'format'], {
|
|
46
|
+
cwd: srcRoot,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
OutputHelper.error('Failed to run `npm run format`, is stylua installed?');
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
await runCommandAsync(args, 'selene', ['generate-roblox-std'], {
|
|
54
|
+
cwd: srcRoot,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
OutputHelper.error('Failed to run `selene generate-roblox-std`, is selene installed?');
|
|
59
|
+
}
|
|
99
60
|
}
|
|
100
|
-
handler(args) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
yield InitGameCommand.initToolChainAsync(args, srcRoot, packages);
|
|
120
|
-
});
|
|
61
|
+
async handler(args) {
|
|
62
|
+
const rawGameName = await InitGameCommand._ensureGameName(args);
|
|
63
|
+
const gameName = TemplateHelper.camelize(rawGameName).toLowerCase();
|
|
64
|
+
const gameNameProper = TemplateHelper.camelize(rawGameName);
|
|
65
|
+
const srcRoot = process.cwd();
|
|
66
|
+
const templatePath = getTemplatePathByName('game-template');
|
|
67
|
+
OutputHelper.info(`Creating a new game at '${srcRoot}' with template '${templatePath}'`);
|
|
68
|
+
await TemplateHelper.createDirectoryContentsAsync(templatePath, srcRoot, {
|
|
69
|
+
gameName: gameName,
|
|
70
|
+
gameNameProper: gameNameProper,
|
|
71
|
+
}, args.dryrun);
|
|
72
|
+
const packages = [
|
|
73
|
+
'@quenty/loader',
|
|
74
|
+
'@quenty/servicebag',
|
|
75
|
+
'@quenty/binder',
|
|
76
|
+
'@quenty/clienttranslator',
|
|
77
|
+
'@quenty/cmdrservice',
|
|
78
|
+
];
|
|
79
|
+
await InitGameCommand.initToolChainAsync(args, srcRoot, packages);
|
|
121
80
|
}
|
|
122
|
-
static _ensureGameName(args) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
return gameName;
|
|
130
|
-
});
|
|
81
|
+
static async _ensureGameName(args) {
|
|
82
|
+
let { gameName } = args;
|
|
83
|
+
if (!gameName) {
|
|
84
|
+
gameName = path.basename(process.cwd());
|
|
85
|
+
}
|
|
86
|
+
InitGameCommand._validateGameName(gameName);
|
|
87
|
+
return gameName;
|
|
131
88
|
}
|
|
132
89
|
static _validateGameName(name) {
|
|
133
90
|
if (!name) {
|
|
@@ -138,5 +95,4 @@ class InitGameCommand {
|
|
|
138
95
|
}
|
|
139
96
|
}
|
|
140
97
|
}
|
|
141
|
-
exports.InitGameCommand = InitGameCommand;
|
|
142
98
|
//# sourceMappingURL=init-game-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-game-command.js","sourceRoot":"","sources":["../../src/commands/init-game-command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init-game-command.js","sourceRoot":"","sources":["../../src/commands/init-game-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Initialize a new game command
|
|
3
3
|
*/
|
|
4
4
|
import { Argv, CommandModule } from 'yargs';
|
|
5
|
-
import { NevermoreGlobalArgs } from '../args/global-args';
|
|
5
|
+
import { NevermoreGlobalArgs } from '../args/global-args.js';
|
|
6
6
|
export interface InitPackageArgs extends NevermoreGlobalArgs {
|
|
7
7
|
packageName: string;
|
|
8
8
|
description: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-package-command.d.ts","sourceRoot":"","sources":["../../src/commands/init-package-command.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"init-package-command.d.ts","sourceRoot":"","sources":["../../src/commands/init-package-command.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,MAAM,WAAW,eAAgB,SAAQ,mBAAmB;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,SAAS,GAAG,SAAS,CAAC;CACxC;AAED;;GAEG;AACH,qBAAa,kBAAkB,CAAC,CAAC,CAC/B,YAAW,aAAa,CAAC,CAAC,EAAE,eAAe,CAAC;IAErC,OAAO,SACmD;IAC1D,QAAQ,SAAiD;IAEzD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAkBT,GAAG;IAGT,OAAO,CAAC,IAAI,EAAE,eAAe;mBA4BrB,kBAAkB;IAcvC,OAAO,CAAC,MAAM,CAAC,mBAAmB;mBAUb,kBAAkB;IAUvC,OAAO,CAAC,MAAM,CAAC,mBAAmB;CASnC"}
|
|
@@ -1,53 +1,16 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Initialize a new game command
|
|
4
3
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
-
}
|
|
11
|
-
Object.defineProperty(o, k2, desc);
|
|
12
|
-
}) : (function(o, m, k, k2) {
|
|
13
|
-
if (k2 === undefined) k2 = k;
|
|
14
|
-
o[k2] = m[k];
|
|
15
|
-
}));
|
|
16
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
-
}) : function(o, v) {
|
|
19
|
-
o["default"] = v;
|
|
20
|
-
});
|
|
21
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
-
if (mod && mod.__esModule) return mod;
|
|
23
|
-
var result = {};
|
|
24
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
-
__setModuleDefault(result, mod);
|
|
26
|
-
return result;
|
|
27
|
-
};
|
|
28
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
29
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
30
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
31
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
32
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
33
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
34
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
35
|
-
});
|
|
36
|
-
};
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.InitPackageCommand = void 0;
|
|
39
|
-
const path = __importStar(require("path"));
|
|
40
|
-
const cli_output_helpers_1 = require("@quenty/cli-output-helpers");
|
|
41
|
-
const nevermore_template_helpers_1 = require("@quenty/nevermore-template-helpers");
|
|
42
|
-
const nevermore_cli_utils_1 = require("../utils/nevermore-cli-utils");
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { OutputHelper } from '@quenty/cli-output-helpers';
|
|
6
|
+
import { TemplateHelper } from '@quenty/nevermore-template-helpers';
|
|
7
|
+
import { getTemplatePathByName } from '../utils/nevermore-cli-utils.js';
|
|
43
8
|
/**
|
|
44
9
|
* Creates a new package within Nevermore
|
|
45
10
|
*/
|
|
46
|
-
class InitPackageCommand {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.describe = 'Initializes a new package within Nevermore.';
|
|
50
|
-
}
|
|
11
|
+
export class InitPackageCommand {
|
|
12
|
+
command = 'init-package [package-name] [description] [package-template]';
|
|
13
|
+
describe = 'Initializes a new package within Nevermore.';
|
|
51
14
|
builder(args) {
|
|
52
15
|
let result = args
|
|
53
16
|
.positional('package-name', {
|
|
@@ -67,31 +30,27 @@ class InitPackageCommand {
|
|
|
67
30
|
});
|
|
68
31
|
return result;
|
|
69
32
|
}
|
|
70
|
-
handler(args) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}, args.dryrun);
|
|
84
|
-
});
|
|
33
|
+
async handler(args) {
|
|
34
|
+
let rawPackageName = await InitPackageCommand._ensurePackageName(args);
|
|
35
|
+
const packageName = TemplateHelper.camelize(rawPackageName).toLowerCase();
|
|
36
|
+
const packageNameProper = TemplateHelper.camelize(rawPackageName);
|
|
37
|
+
const description = await InitPackageCommand._ensureDescription(args);
|
|
38
|
+
const srcRoot = process.cwd();
|
|
39
|
+
const templatePath = getTemplatePathByName(`nevermore-${args.packageTemplate}-package-template`);
|
|
40
|
+
OutputHelper.info(`Initializing a new package at '${srcRoot}' with template '${templatePath}'`);
|
|
41
|
+
await TemplateHelper.createDirectoryContentsAsync(templatePath, srcRoot, {
|
|
42
|
+
packageName: packageName,
|
|
43
|
+
packageNameProper: packageNameProper,
|
|
44
|
+
description: description,
|
|
45
|
+
}, args.dryrun);
|
|
85
46
|
}
|
|
86
|
-
static _ensurePackageName(args) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
return packageName;
|
|
94
|
-
});
|
|
47
|
+
static async _ensurePackageName(args) {
|
|
48
|
+
let { packageName } = args;
|
|
49
|
+
if (!packageName) {
|
|
50
|
+
packageName = path.basename(process.cwd());
|
|
51
|
+
}
|
|
52
|
+
InitPackageCommand.validatePackageName(packageName);
|
|
53
|
+
return packageName;
|
|
95
54
|
}
|
|
96
55
|
static validatePackageName(name) {
|
|
97
56
|
if (!name) {
|
|
@@ -101,12 +60,10 @@ class InitPackageCommand {
|
|
|
101
60
|
throw new Error('The project name cannot be empty string.');
|
|
102
61
|
}
|
|
103
62
|
}
|
|
104
|
-
static _ensureDescription(args) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return description;
|
|
109
|
-
});
|
|
63
|
+
static async _ensureDescription(args) {
|
|
64
|
+
let { description } = args;
|
|
65
|
+
InitPackageCommand.validateDescription(description);
|
|
66
|
+
return description;
|
|
110
67
|
}
|
|
111
68
|
static validateDescription(description) {
|
|
112
69
|
if (!description) {
|
|
@@ -117,5 +74,4 @@ class InitPackageCommand {
|
|
|
117
74
|
}
|
|
118
75
|
}
|
|
119
76
|
}
|
|
120
|
-
exports.InitPackageCommand = InitPackageCommand;
|
|
121
77
|
//# sourceMappingURL=init-package-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-package-command.js","sourceRoot":"","sources":["../../src/commands/init-package-command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init-package-command.js","sourceRoot":"","sources":["../../src/commands/init-package-command.ts"],"names":[],"mappings":"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"}
|