hackmud-script-manager 0.12.0-c276bb2 → 0.13.0-02e8706
Sign up to get free protection for your applications and to get access to all the features.
- package/assert-1b7dada8.js +1 -0
- package/bin/hsm.d.ts +2 -0
- package/bin/hsm.js +1 -401
- package/generateTypings.d.ts +2 -0
- package/generateTypings.js +1 -0
- package/index.cjs +3 -0
- package/index.d.ts +10 -60
- package/index.js +1 -10
- package/package.json +88 -32
- package/processScript/index.d.ts +33 -0
- package/processScript/index.js +1 -0
- package/processScript/minify.d.ts +14 -0
- package/processScript/minify.js +1 -0
- package/processScript/postprocess.d.ts +2 -0
- package/processScript/postprocess.js +1 -0
- package/processScript/preprocess.d.ts +13 -0
- package/processScript/preprocess.js +1 -0
- package/processScript/shared.d.ts +3 -0
- package/processScript/shared.js +1 -0
- package/processScript/transform.d.ts +22 -0
- package/processScript/transform.js +1 -0
- package/pull.d.ts +9 -0
- package/pull.js +1 -0
- package/push.d.ts +28 -0
- package/push.js +1 -0
- package/spliceString-2c6f214f.js +1 -0
- package/syncMacros.d.ts +5 -0
- package/syncMacros.js +1 -0
- package/test.d.ts +6 -0
- package/test.js +1 -0
- package/watch.d.ts +14 -0
- package/watch.js +1 -0
- package/shared.js +0 -902
@@ -0,0 +1 @@
|
|
1
|
+
class CustomError extends Error{constructor(...r){super(...r),function _defineProperty(r,e,s){return e in r?Object.defineProperty(r,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):r[e]=s,r}(this,"name",this.constructor.name)}}class AssertError extends CustomError{}function assert(r,e="assertion failed"){if(!r)throw new AssertError(e)}function ensure(r,e="ensure failed"){return assert(r,e),r}export{assert as a,ensure as e};
|
package/bin/hsm.d.ts
ADDED
package/bin/hsm.js
CHANGED
@@ -1,402 +1,2 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
|
-
import { resolve,
|
3
|
-
import { homedir } from 'os';
|
4
|
-
import chalk from 'chalk';
|
5
|
-
import fs from 'fs';
|
6
|
-
import { D as DynamicMap, s as supportedExtensions, p as processScript, h as hackmudLength, w as writeFilePersist, g as generateTypings, t as test, a as syncMacros, b as pull, c as watch, d as push } from '../shared.js';
|
7
|
-
import 'acorn';
|
8
|
-
import 'chokidar';
|
9
|
-
import 'escodegen';
|
10
|
-
import 'esprima';
|
11
|
-
import 'esquery';
|
12
|
-
import 'terser';
|
13
|
-
import 'typescript';
|
14
|
-
|
15
|
-
const { readFile: readFile, rmdir: removeDirectory, writeFile: writeFile, mkdir: makeDirectory } = fs.promises;
|
16
|
-
const configDirPath = resolve(homedir(), ".config");
|
17
|
-
const configFilePath = resolve(configDirPath, "hsm.json");
|
18
|
-
const options = new Map();
|
19
|
-
const commands = [];
|
20
|
-
let config;
|
21
|
-
const colourJ = chalk.rgb(0xFF, 0xF4, 0x04);
|
22
|
-
const colourK = chalk.rgb(0xF3, 0xF9, 0x98);
|
23
|
-
const colourM = chalk.rgb(0xB3, 0xFF, 0x9B);
|
24
|
-
const colourW = chalk.rgb(0xFF, 0x96, 0xE0);
|
25
|
-
const colourL = chalk.rgb(0x1E, 0xFF, 0x00);
|
26
|
-
const colourB = chalk.rgb(0xCA, 0xCA, 0xCA);
|
27
|
-
const userColours = new DynamicMap(user => {
|
28
|
-
let hash = 0;
|
29
|
-
for (const char of user)
|
30
|
-
hash += (hash >> 1) + hash + "xi1_8ratvsw9hlbgm02y5zpdcn7uekof463qj".indexOf(char) + 1;
|
31
|
-
return [colourJ, colourK, colourM, colourW, colourL, colourB][hash % 6](user);
|
32
|
-
});
|
33
|
-
for (const arg of process.argv.slice(2)) {
|
34
|
-
if (arg[0] == "-") {
|
35
|
-
const [key, valueRaw] = arg.split("=");
|
36
|
-
let value = valueRaw;
|
37
|
-
if (value) {
|
38
|
-
if (value == "true")
|
39
|
-
value = true;
|
40
|
-
else if (value == "false")
|
41
|
-
value = false;
|
42
|
-
else {
|
43
|
-
const number = Number(value);
|
44
|
-
if (isFinite(number))
|
45
|
-
value = number;
|
46
|
-
}
|
47
|
-
}
|
48
|
-
else
|
49
|
-
value = true;
|
50
|
-
if (arg[1] == "-")
|
51
|
-
options.set(key.slice(2), value);
|
52
|
-
else {
|
53
|
-
for (const option of key.slice(1))
|
54
|
-
options.set(option, value);
|
55
|
-
}
|
56
|
-
}
|
57
|
-
else
|
58
|
-
commands.push(arg);
|
59
|
-
}
|
60
|
-
(async () => {
|
61
|
-
var _a, _b, _c, _d, _e, _f;
|
62
|
-
if (options.get("version") || options.get("v")) {
|
63
|
-
version();
|
64
|
-
return;
|
65
|
-
}
|
66
|
-
if (options.get("help") || options.get("h")) {
|
67
|
-
help();
|
68
|
-
return;
|
69
|
-
}
|
70
|
-
switch (commands[0]) {
|
71
|
-
case "push":
|
72
|
-
{
|
73
|
-
const config = await getConfig();
|
74
|
-
if (!config.hackmudPath) {
|
75
|
-
console.log("you need to set hackmudPath in config before you can use this command");
|
76
|
-
break;
|
77
|
-
}
|
78
|
-
const srcPath = commands[1] || ".";
|
79
|
-
const hackmudPath = config.hackmudPath;
|
80
|
-
let users;
|
81
|
-
let scripts;
|
82
|
-
if (commands[2]) {
|
83
|
-
const match = commands[2].match(/^([a-z_][a-z_0-9]{0,24})\.([a-z_][a-z_0-9]{0,24})$/);
|
84
|
-
if (!match) {
|
85
|
-
console.log(`"${chalk.bold(commands[2])}" is not a valid script name`);
|
86
|
-
break;
|
87
|
-
}
|
88
|
-
users = [match[1]];
|
89
|
-
scripts = [match[2]];
|
90
|
-
}
|
91
|
-
else {
|
92
|
-
users = ((_a = options.get("users")) === null || _a === void 0 ? void 0 : _a.toString().split(",")) || [];
|
93
|
-
scripts = ((_b = options.get("scripts")) === null || _b === void 0 ? void 0 : _b.toString().split(",")) || [];
|
94
|
-
}
|
95
|
-
await push(srcPath, hackmudPath, users, scripts, onPushLogger);
|
96
|
-
updateConfig();
|
97
|
-
}
|
98
|
-
break;
|
99
|
-
case "dev":
|
100
|
-
case "watch":
|
101
|
-
{
|
102
|
-
const config = await getConfig();
|
103
|
-
if (!config.hackmudPath) {
|
104
|
-
console.log("you need to set hackmudPath in config before you can use this command");
|
105
|
-
break;
|
106
|
-
}
|
107
|
-
const srcPath = commands[1] || ".";
|
108
|
-
const hackmudPath = config.hackmudPath;
|
109
|
-
const users = ((_c = options.get("users")) === null || _c === void 0 ? void 0 : _c.toString().split(",")) || [];
|
110
|
-
const scripts = ((_d = options.get("scripts")) === null || _d === void 0 ? void 0 : _d.toString().split(",")) || [];
|
111
|
-
const genTypes = (_e = options.get("gen-types")) === null || _e === void 0 ? void 0 : _e.toString();
|
112
|
-
watch(srcPath, hackmudPath, users, scripts, onPushLogger, { genTypes });
|
113
|
-
}
|
114
|
-
break;
|
115
|
-
case "pull":
|
116
|
-
{
|
117
|
-
const config = await getConfig();
|
118
|
-
if (!config.hackmudPath) {
|
119
|
-
console.log("you need to set hackmudPath in config before you can use this command");
|
120
|
-
break;
|
121
|
-
}
|
122
|
-
const script = commands[1];
|
123
|
-
if (!script) {
|
124
|
-
help();
|
125
|
-
break;
|
126
|
-
}
|
127
|
-
const srcPath = commands[2] || ".";
|
128
|
-
const hackmudPath = config.hackmudPath;
|
129
|
-
try {
|
130
|
-
await pull(srcPath, hackmudPath, script);
|
131
|
-
}
|
132
|
-
catch (error) {
|
133
|
-
console.log("something went wrong, did you forget to #down the script?");
|
134
|
-
}
|
135
|
-
}
|
136
|
-
break;
|
137
|
-
case "sync-macros":
|
138
|
-
{
|
139
|
-
const { hackmudPath } = await getConfig();
|
140
|
-
if (!hackmudPath) {
|
141
|
-
console.log("you need to set hackmudPath in config before you can use this command");
|
142
|
-
break;
|
143
|
-
}
|
144
|
-
const { macrosSynced, usersSynced } = await syncMacros(hackmudPath);
|
145
|
-
console.log(`synced ${macrosSynced} macros to ${usersSynced} users`);
|
146
|
-
}
|
147
|
-
break;
|
148
|
-
case "test":
|
149
|
-
{
|
150
|
-
const srcPath = resolve(commands[1] || ".");
|
151
|
-
let errors = 0;
|
152
|
-
console.log(`testing scripts in ${chalk.bold(srcPath)}\n`);
|
153
|
-
for (const { file, line, message } of await test(srcPath)) {
|
154
|
-
console.log(`error "${chalk.bold(message)}" in ${chalk.bold(file)} on line ${chalk.bold(String(line))}`);
|
155
|
-
errors++;
|
156
|
-
}
|
157
|
-
if (!errors) {
|
158
|
-
console.log("no errors found");
|
159
|
-
break;
|
160
|
-
}
|
161
|
-
if (errors) {
|
162
|
-
process.exitCode = 1;
|
163
|
-
console.log(`\nencountered ${chalk.bold(String(errors))} errors`);
|
164
|
-
break;
|
165
|
-
}
|
166
|
-
console.log("no errors found");
|
167
|
-
}
|
168
|
-
break;
|
169
|
-
case "gen-types":
|
170
|
-
{
|
171
|
-
const srcPath = resolve(commands[1] || ".");
|
172
|
-
let targetPath;
|
173
|
-
if (commands[2])
|
174
|
-
targetPath = resolve(commands[2]);
|
175
|
-
else
|
176
|
-
targetPath = resolve(srcPath, "../player.d.ts");
|
177
|
-
generateTypings(srcPath, targetPath, (await getConfig()).hackmudPath);
|
178
|
-
}
|
179
|
-
break;
|
180
|
-
case "config":
|
181
|
-
switch (commands[1]) {
|
182
|
-
case "get":
|
183
|
-
{
|
184
|
-
console.log(exploreObject(await getConfig(), commands.slice(2)));
|
185
|
-
}
|
186
|
-
break;
|
187
|
-
case "delete":
|
188
|
-
{
|
189
|
-
const keys = commands.slice(2);
|
190
|
-
if (!keys.length) {
|
191
|
-
help();
|
192
|
-
break;
|
193
|
-
}
|
194
|
-
const config = await getConfig();
|
195
|
-
(_f = exploreObject(config, keys.slice(0, -1))) === null || _f === void 0 ? true : delete _f[keys.slice(-1)[0]];
|
196
|
-
console.log(config);
|
197
|
-
}
|
198
|
-
break;
|
199
|
-
case "set":
|
200
|
-
{
|
201
|
-
const keys = commands.slice(2);
|
202
|
-
const value = keys.pop();
|
203
|
-
if (!keys.length) {
|
204
|
-
help();
|
205
|
-
break;
|
206
|
-
}
|
207
|
-
const config = await getConfig();
|
208
|
-
let object = config;
|
209
|
-
for (let key of keys.slice(0, -1))
|
210
|
-
object = typeof object[key] == "object" ? object[key] : object[key] = {};
|
211
|
-
object[keys.slice(-1)[0]] = value;
|
212
|
-
if (config.hackmudPath)
|
213
|
-
config.hackmudPath = resolve(config.hackmudPath);
|
214
|
-
console.log(config);
|
215
|
-
}
|
216
|
-
break;
|
217
|
-
default: {
|
218
|
-
if (commands[1])
|
219
|
-
console.log("unknown command");
|
220
|
-
help();
|
221
|
-
}
|
222
|
-
}
|
223
|
-
break;
|
224
|
-
case "help":
|
225
|
-
case "h":
|
226
|
-
{
|
227
|
-
help();
|
228
|
-
}
|
229
|
-
break;
|
230
|
-
case "version":
|
231
|
-
case "v":
|
232
|
-
{
|
233
|
-
version();
|
234
|
-
}
|
235
|
-
break;
|
236
|
-
case "golf":
|
237
|
-
case "minify":
|
238
|
-
{
|
239
|
-
if (!commands[1]) {
|
240
|
-
console.log(`Target required\nUsage: ${basename(process.argv[1])} ${commands[0]} <target> [output]`);
|
241
|
-
break;
|
242
|
-
}
|
243
|
-
const fileExtension = extname(commands[1]);
|
244
|
-
if (!supportedExtensions.includes(fileExtension)) {
|
245
|
-
console.log(`Unsupported file extension "${chalk.bold(fileExtension)}"\nSupported extensions are "${supportedExtensions.map(extension => chalk.bold(extension)).join('", "')}"`);
|
246
|
-
break;
|
247
|
-
}
|
248
|
-
await readFile(commands[1], { encoding: "utf-8" }).then(async (source) => {
|
249
|
-
const { script, srcLength, warnings } = await processScript(source);
|
250
|
-
for (const { message, line } of warnings)
|
251
|
-
console.log(`warning "${chalk.bold(message)}" on line ${chalk.bold(String(line))}`);
|
252
|
-
let outputPath;
|
253
|
-
if (commands[2])
|
254
|
-
outputPath = commands[2];
|
255
|
-
else {
|
256
|
-
const fileBaseName = basename(commands[1], fileExtension);
|
257
|
-
outputPath = resolve(dirname(commands[1]), fileBaseName.endsWith(".src")
|
258
|
-
? `${fileBaseName.slice(0, -4)}.js` :
|
259
|
-
fileExtension == ".js"
|
260
|
-
? `${fileBaseName}.min.js`
|
261
|
-
: `${fileBaseName}.js`);
|
262
|
-
}
|
263
|
-
const scriptLength = hackmudLength(script);
|
264
|
-
await writeFilePersist(outputPath, script)
|
265
|
-
.catch(async (error) => {
|
266
|
-
if (!commands[2] || error.code != "EISDIR")
|
267
|
-
throw error;
|
268
|
-
outputPath = resolve(outputPath, `${basename(commands[1], fileExtension)}.js`);
|
269
|
-
await writeFilePersist(outputPath, script);
|
270
|
-
})
|
271
|
-
.then(() => console.log(`wrote ${chalk.bold(scriptLength)} chars to ${chalk.bold(relative(".", outputPath))} | saved ${chalk.bold(srcLength - scriptLength)} chars`), (error) => console.log(error.message));
|
272
|
-
}, (error) => console.log(error.message));
|
273
|
-
}
|
274
|
-
break;
|
275
|
-
default: {
|
276
|
-
if (commands[0])
|
277
|
-
console.log("unknown command");
|
278
|
-
help();
|
279
|
-
}
|
280
|
-
}
|
281
|
-
updateConfig();
|
282
|
-
})();
|
283
|
-
function help() {
|
284
|
-
switch (commands[0]) {
|
285
|
-
case "config":
|
286
|
-
{
|
287
|
-
switch (commands[1]) {
|
288
|
-
case "get":
|
289
|
-
{
|
290
|
-
console.log("hsm config get <key>");
|
291
|
-
}
|
292
|
-
break;
|
293
|
-
case "set":
|
294
|
-
{
|
295
|
-
console.log("hsm config set <key> <value>");
|
296
|
-
}
|
297
|
-
break;
|
298
|
-
case "delete":
|
299
|
-
{
|
300
|
-
console.log("hsm config delete <key>");
|
301
|
-
}
|
302
|
-
break;
|
303
|
-
default: {
|
304
|
-
console.log("hsm config <get, delete, set>");
|
305
|
-
}
|
306
|
-
}
|
307
|
-
}
|
308
|
-
break;
|
309
|
-
case "push":
|
310
|
-
{
|
311
|
-
console.log("hsm push [dir]");
|
312
|
-
}
|
313
|
-
break;
|
314
|
-
case "watch":
|
315
|
-
{
|
316
|
-
console.log("hsm watch [dir]");
|
317
|
-
}
|
318
|
-
break;
|
319
|
-
case "pull":
|
320
|
-
{
|
321
|
-
console.log("hsm pull <user.script>");
|
322
|
-
}
|
323
|
-
break;
|
324
|
-
case "minify":
|
325
|
-
case "golf":
|
326
|
-
{
|
327
|
-
console.log(`${basename(process.argv[1])} ${commands[0]} <target> [output]`);
|
328
|
-
}
|
329
|
-
break;
|
330
|
-
default: {
|
331
|
-
console.log("hsm <push, watch, pull, config, golf>");
|
332
|
-
}
|
333
|
-
}
|
334
|
-
}
|
335
|
-
async function version() {
|
336
|
-
console.log(JSON.parse(await readFile(resolve(__dirname, "../package.json"), { encoding: "utf-8" })).version || "unknown");
|
337
|
-
}
|
338
|
-
async function getConfig() {
|
339
|
-
if (config)
|
340
|
-
return config;
|
341
|
-
return config = await readFile(configFilePath, { encoding: "utf-8" })
|
342
|
-
.then(configFile => {
|
343
|
-
let tempConfig;
|
344
|
-
try {
|
345
|
-
tempConfig = JSON.parse(configFile);
|
346
|
-
}
|
347
|
-
catch {
|
348
|
-
// TODO log to error log file
|
349
|
-
console.log("config file was corrupted, resetting");
|
350
|
-
return {};
|
351
|
-
}
|
352
|
-
if (!tempConfig || typeof tempConfig != "object") {
|
353
|
-
console.log("config file was corrupted, resetting");
|
354
|
-
return {};
|
355
|
-
}
|
356
|
-
return tempConfig;
|
357
|
-
}, () => {
|
358
|
-
console.log(`creating config file at ${configFilePath}`);
|
359
|
-
return {};
|
360
|
-
});
|
361
|
-
}
|
362
|
-
function exploreObject(object, keys, createPath = false) {
|
363
|
-
for (const key of keys) {
|
364
|
-
if (createPath)
|
365
|
-
object = typeof object[key] == "object" ? object[key] : object[key] = {};
|
366
|
-
else
|
367
|
-
object = object === null || object === void 0 ? void 0 : object[key];
|
368
|
-
}
|
369
|
-
return object;
|
370
|
-
}
|
371
|
-
function updateConfig() {
|
372
|
-
if (config) {
|
373
|
-
const json = JSON.stringify(config);
|
374
|
-
writeFile(configFilePath, json).catch(async (error) => {
|
375
|
-
switch (error.code) {
|
376
|
-
case "EISDIR":
|
377
|
-
{
|
378
|
-
await removeDirectory(configFilePath);
|
379
|
-
}
|
380
|
-
break;
|
381
|
-
case "ENOENT":
|
382
|
-
{
|
383
|
-
await makeDirectory(configDirPath);
|
384
|
-
}
|
385
|
-
break;
|
386
|
-
default: {
|
387
|
-
throw error;
|
388
|
-
}
|
389
|
-
}
|
390
|
-
writeFile(configFilePath, json);
|
391
|
-
});
|
392
|
-
}
|
393
|
-
}
|
394
|
-
function onPushLogger({ file, users, srcLength, minLength, error }) {
|
395
|
-
if (!users.length)
|
396
|
-
return;
|
397
|
-
if (error) {
|
398
|
-
console.log(`error "${chalk.bold(error.message)}" in ${chalk.bold(file)}`);
|
399
|
-
return;
|
400
|
-
}
|
401
|
-
console.log(`pushed ${chalk.bold(file)} to ${users.map(user => chalk.bold(userColours.get(user))).join(", ")} | ${chalk.bold(String(minLength))} chars from ${chalk.bold(String(srcLength))} | saved ${chalk.bold(String(srcLength - minLength))} (${chalk.bold(`${Math.round((1 - (minLength / srcLength)) * 100)}%`)}) | ${chalk.bold(`${resolve(config.hackmudPath, users[0], "scripts", basename(file, extname(file)))}.js`)}`);
|
402
|
-
}
|
2
|
+
import o from"fs";import{resolve as e,basename as s,extname as t,dirname as r,relative as n}from"path";import{c as i}from"../processScript/minify.js";import{D as a,w as l,push as c}from"../push.js";import p from"chalk";import{homedir as g}from"os";import{s as m,processScript as f}from"../processScript/index.js";import{generateTypings as u}from"../generateTypings.js";import{pull as b}from"../pull.js";import{syncMacros as d}from"../syncMacros.js";import{test as h}from"../test.js";import{watch as k}from"../watch.js";import"@babel/generator";import"@babel/traverse";import"@babel/types";import"../assert-1b7dada8.js";import"../spliceString-2c6f214f.js";import"acorn";import"terser";import"../processScript/shared.js";import"@babel/parser";import"@babel/plugin-proposal-class-properties";import"@babel/plugin-proposal-class-static-block";import"@babel/plugin-proposal-decorators";import"@babel/plugin-proposal-do-expressions";import"@babel/plugin-proposal-function-bind";import"@babel/plugin-proposal-function-sent";import"@babel/plugin-proposal-json-strings";import"@babel/plugin-proposal-logical-assignment-operators";import"@babel/plugin-proposal-nullish-coalescing-operator";import"@babel/plugin-proposal-numeric-separator";import"@babel/plugin-proposal-object-rest-spread";import"@babel/plugin-proposal-optional-catch-binding";import"@babel/plugin-proposal-optional-chaining";import"@babel/plugin-proposal-partial-application";import"@babel/plugin-proposal-pipeline-operator";import"@babel/plugin-proposal-private-property-in-object";import"@babel/plugin-proposal-record-and-tuple";import"@babel/plugin-proposal-throw-expressions";import"@babel/plugin-transform-exponentiation-operator";import"@babel/plugin-transform-typescript";import"@rollup/plugin-babel";import"@rollup/plugin-commonjs";import"@rollup/plugin-json";import"@rollup/plugin-node-resolve";import"perf_hooks";import"prettier";import"rollup";import"../processScript/postprocess.js";import"../processScript/preprocess.js";import"../processScript/transform.js";import"chokidar";const{readFile:w,rmdir:y,writeFile:j,mkdir:$}=o.promises,v=e(g(),".config"),S=e(v,"hsm.json"),P=new Map,C=[];let x;const N=p.rgb(255,244,4),O=p.rgb(243,249,152),L=p.rgb(179,255,155),U=p.rgb(255,150,224),T=p.rgb(30,255,0),E=p.rgb(202,202,202),I=new a((o=>{let e=0;for(const s of o)e+=(e>>1)+e+"xi1_8ratvsw9hlbgm02y5zpdcn7uekof463qj".indexOf(s)+1;return[N,O,L,U,T,E][e%6](o)}));for(const o of process.argv.slice(2))if("-"==o[0]){const[e,s]=o.split("=");let t=s;if(t)if("true"==t)t=!0;else if("false"==t)t=!1;else{const o=Number(t);isFinite(o)&&(t=o)}else t=!0;if("-"==o[1])P.set(e.slice(2),t);else for(const o of e.slice(1))P.set(o,t)}else C.push(o);function help(){switch(C[0]){case"config":switch(C[1]){case"get":console.log("hsm config get <key>");break;case"set":console.log("hsm config set <key> <value>");break;case"delete":console.log("hsm config delete <key>");break;default:console.log("hsm config <get, delete, set>")}break;case"push":console.log('hsm push [<dir> [..."<script user>.<script name>"]]');break;case"watch":console.log("hsm watch [dir]");break;case"pull":console.log("hsm pull <script user>.<script name>");break;case"minify":case"golf":console.log(`${s(process.argv[1])} ${C[0]} <target> [output]`);break;default:console.log("hsm <push, watch, pull, config, golf>")}}function version(){console.log("0.13.0-02e8706")}function getConfig(){return x||(x=w(S,{encoding:"utf-8"}).then((o=>{let e;try{e=JSON.parse(o)}catch{return console.log("config file was corrupted, resetting"),{}}return e&&"object"==typeof e?e:(console.log("config file was corrupted, resetting"),{})}),(()=>(console.log(`creating config file at ${S}`),{}))))}function exploreObject(o,e,s=!1){for(const r of e){var t;o=s?"object"==typeof o[r]?o[r]:o[r]={}:null===(t=o)||void 0===t?void 0:t[r]}return o}function updateConfig(){if(x){const o=JSON.stringify(x);j(S,o).catch((async e=>{switch(e.code){case"EISDIR":await y(S);break;case"ENOENT":await $(v);break;default:throw e}j(S,o)}))}}function onPushLogger({file:o,users:r,srcLength:n,minLength:i,error:a}){r.length&&(a?console.log(`error "${p.bold(a.message)}" in ${p.bold(o)}`):console.log(`pushed ${p.bold(o)} to ${r.map((o=>p.bold(I.get(o)))).join(", ")} | ${p.bold(String(i))} chars from ${p.bold(String(n))} | saved ${p.bold(String(n-i))} (${p.bold(`${Math.round(100*(1-i/n))}%`)}) | ${p.bold(`${e(x.hackmudPath,r[0],"scripts",s(o,t(o)))}.js`)}`))}(async()=>{if(P.get("version")||P.get("v"))version();else if(P.get("help")||P.get("h"))help();else{switch(C[0]){case"push":{const o=await getConfig();if(!o.hackmudPath){console.log("you need to set hackmudPath in config before you can use this command");break}const e=C[1]||".",s=o.hackmudPath,t=C.slice(2);t.length||t.push("*.*");(await c(e,s,{scripts:t,onPush:onPushLogger,minify:!P.get("skip-minify")})).length||console.warn("couldn't find any scripts to push"),updateConfig()}break;case"dev":case"watch":{var o,a,g;const e=await getConfig();if(!e.hackmudPath){console.log("you need to set hackmudPath in config before you can use this command");break}const s=C[1]||".",t=e.hackmudPath,r=(null===(o=P.get("users"))||void 0===o?void 0:o.toString().split(","))||[],n=(null===(a=P.get("scripts"))||void 0===a?void 0:a.toString().split(","))||[],i=null===(g=P.get("gen-types"))||void 0===g?void 0:g.toString();k(s,t,r,n,onPushLogger,{genTypes:i})}break;case"pull":{const o=await getConfig();if(!o.hackmudPath){console.log("you need to set hackmudPath in config before you can use this command");break}const e=C[1];if(!e){help();break}const s=C[2]||".",t=o.hackmudPath;try{await b(s,t,e)}catch{console.log("something went wrong, did you forget to #down the script?")}}break;case"sync-macros":{const{hackmudPath:o}=await getConfig();if(!o){console.log("you need to set hackmudPath in config before you can use this command");break}const{macrosSynced:e,usersSynced:s}=await d(o);console.log(`synced ${e} macros to ${s} users`)}break;case"test":{const o=e(C[1]||".");let s=0;console.log(`testing scripts in ${p.bold(o)}\n`);for(const{file:e,line:t,message:r}of await h(o))console.log(`error "${p.bold(r)}" in ${p.bold(e)} on line ${p.bold(String(t))}`),s++;if(!s){console.log("no errors found");break}if(s){process.exitCode=1,console.log(`\nencountered ${p.bold(String(s))} errors`);break}console.log("no errors found")}break;case"gen-types":{const o=e(C[1]||".");u(o,C[2]?e(C[2]):e(o,"../player.d.ts"),(await getConfig()).hackmudPath)}break;case"config":switch(C[1]){case"get":C[2]?console.log(exploreObject(await getConfig(),C[2].split("."))):console.log(await getConfig());break;case"delete":if(C[2]){var y;const o=C[2].split("."),e=o.pop();if(!o.length){help();break}const s=await getConfig();null===(y=exploreObject(s,o))||void 0===y||delete y[e],console.log(s)}else console.log("Usage:\nhsm config delete <key>");break;case"set":if(C[2]&&C[3]){const o=C[2].split("."),s=o.pop();if(!o.length){help();break}const t=await getConfig();if(o.length||"hackmudPath"!=s){let e=t;for(const s of o)"object"==typeof e[s]||(e[s]={}),e=e[s];e[s]=C[3]}else t.hackmudPath=e(C[3]);console.log(t)}else console.log("Usage:\nhsm config set <key> <value>");break;default:C[1]&&console.log("unknown command"),help()}break;case"help":case"h":help();break;case"version":case"v":version();break;case"golf":case"minify":{const o=C[1];if(!o){console.log(`Target required\nUsage: ${s(process.argv[1])} ${C[0]} <target> [output]`);break}const a=t(o);if(!m.includes(a)){console.log(`Unsupported file extension "${p.bold(a)}"\nSupported extensions are "${m.map((o=>p.bold(o))).join('", "')}"`);break}await w(o,{encoding:"utf-8"}).then((async t=>{const c=s(o,a),g=c.endsWith(".src"),m=g?c.slice(0,-4):c;let u="UNKNOWN";"scripts"==s(e(o,".."))&&"hackmud"==s(e(o,"../../.."))&&(u=s(e(o,"../..")));const b=!P.get("skip-minify"),d=Boolean(P.get("mangle-names"));!b&&d&&console.warn("warning: `--mangle-names` has no effect while `--skip-minify` is active");const{script:h,srcLength:k,warnings:w,timeTook:y}=await f(t,{minify:b,scriptUser:u,scriptName:m,filePath:o,mangleNames:d});for(const{message:o,line:e}of w)console.log(`warning "${p.bold(o)}" on line ${p.bold(String(e))}`);let j;j=C[2]?C[2]:e(r(o),g?`${m}.js`:".js"==a?`${c}.min.js`:`${c}.js`);const $=i(h);await l(j,h).catch((async t=>{if(!C[2]||"EISDIR"!=t.code)throw t;j=e(j,`${s(o,a)}.js`),await l(j,h)})).then((()=>console.log(`wrote ${p.bold($)} chars to ${p.bold(n(".",j))} | saved ${p.bold(k-$)} chars | took ${Math.round(100*y)/100}ms`)),(o=>console.log(o.message)))}),(o=>console.log(o.message)))}break;default:C[0]&&console.log("unknown command"),help()}updateConfig()}})();
|
@@ -0,0 +1 @@
|
|
1
|
+
import e from"fs";import{extname as t,basename as n,resolve as s}from"path";const{readdir:r,writeFile:a}=e.promises;async function generateTypings(e,i,o){const f=new Set;if(o)for(const e of await r(o,{withFileTypes:!0}))e.isFile()&&".key"==t(e.name)&&f.add(n(e.name,".key"));const c=[],l=[],p={},m={};await Promise.all((await r(e,{withFileTypes:!0})).map((async a=>{if(a.isFile())".ts"==t(a.name)?c.push(n(a.name,".ts")):".js"==t(a.name)&&l.push(n(a.name,".js"));else if(a.isDirectory()){const i=[],o=[];p[a.name]=i,m[a.name]=o,f.add(a.name);for(const f of await r(s(e,a.name),{withFileTypes:!0}))f.isFile()&&(".ts"==t(f.name)?i.push(n(f.name,".ts")):".js"==t(f.name)&&o.push(n(f.name,".js")))}})));let y="";for(const e of c)y+=`import { script as $${e}$ } from "./src/${e}"\n`;y+="\n";for(const e in p){const t=p[e];for(const n of t)y+=`import { script as $${e}$${n}$ } from "./src/${e}/${n}"\n`}y+="\ntype ArrayRemoveFirst<A> = A extends [ infer FirstItem, ...infer Rest ] ? Rest : never\n\ntype Subscript<T extends (...args: any) => any> =\n\t(...args: ArrayRemoveFirst<Parameters<T>>) => ReturnType<T> | ScriptFailure\n\ntype WildFullsec = Record<string, () => ScriptFailure> & {\n";for(const e of c)y+=`\t${e}: Subscript<typeof $${e}$>\n`;for(const e of l)y+=`\t${e}: (...args: any) => any\n`;y+="}\n\ndeclare global {\n\tinterface PlayerFullsec {";let $=!0;for(const e of f){const t=p[e],n=m[e];if(t&&t.length||n&&n.length){if($=!0,y+=`\n\t\t${e}: WildFullsec & {\n`,t)for(const n of t)y+=`\t\t\t${n}: Subscript<typeof $${e}$${n}$>\n`;if(n)for(const e of n)y+=`\t\t\t${e}: (...args: any) => any\n`;y+="\t\t}"}else $&&(y+="\n",$=!1),y+=`\t\t${e}: WildFullsec`;y+="\n"}y+="\t}\n}\n",await a(i,y)}export{generateTypings as default,generateTypings};
|
package/index.cjs
ADDED
package/index.d.ts
CHANGED
@@ -1,65 +1,15 @@
|
|
1
|
-
export
|
1
|
+
export { supportedExtensions } from "./constants.json";
|
2
|
+
export { generateTypings } from "./generateTypings";
|
3
|
+
export { processScript } from "./processScript";
|
4
|
+
export { pull } from "./pull";
|
5
|
+
export { push } from "./push";
|
6
|
+
export { syncMacros } from "./syncMacros";
|
7
|
+
export { test } from "./test";
|
8
|
+
export { watch } from "./watch";
|
9
|
+
export declare type Info = {
|
2
10
|
file: string;
|
3
11
|
users: string[];
|
4
12
|
srcLength: number;
|
5
13
|
minLength: number;
|
6
14
|
error: Error | null;
|
7
|
-
}
|
8
|
-
export declare const supportedExtensions: string[];
|
9
|
-
/**
|
10
|
-
* Push a specific or all scripts to a specific or all users.
|
11
|
-
* In source directory, scripts in folders will override scripts with same name for user with folder name.
|
12
|
-
*
|
13
|
-
* e.g. foo/bar.js overrides other bar.js script just for user foo.
|
14
|
-
*
|
15
|
-
* @param srcDir path to folder containing source files
|
16
|
-
* @param hackmudDir path to hackmud directory
|
17
|
-
* @param users users to push to (pushes to all if empty)
|
18
|
-
* @param scripts scripts to push from (pushes from all if empty)
|
19
|
-
* @param onPush function that's called when a script has been pushed
|
20
|
-
*/
|
21
|
-
export declare function push(srcDir: string, hackmudDir: string, users: string[], scripts: string[], onPush?: (info: Info) => void): Promise<Info[]>;
|
22
|
-
/**
|
23
|
-
* Watches target file or folder for updates and builds and pushes updated file.
|
24
|
-
*
|
25
|
-
* @param srcDir path to folder containing source files
|
26
|
-
* @param hackmudDir path to hackmud directory
|
27
|
-
* @param users users to push to (pushes to all if empty)
|
28
|
-
* @param scripts scripts to push from (pushes from all if empty)
|
29
|
-
* @param onPush function that's called after each script has been built and written
|
30
|
-
*/
|
31
|
-
export declare function watch(srcDir: string, hackmudDir: string, users: string[], scripts: string[], onPush?: (info: Info) => void, { genTypes }?: {
|
32
|
-
genTypes?: string | undefined;
|
33
|
-
}): void;
|
34
|
-
/**
|
35
|
-
* Copies script from hackmud to local source folder.
|
36
|
-
*
|
37
|
-
* @param sourceFolderPath path to folder containing source files
|
38
|
-
* @param hackmudPath path to hackmud directory
|
39
|
-
* @param script script to pull in `user.name` format
|
40
|
-
*/
|
41
|
-
export declare function pull(sourceFolderPath: string, hackmudPath: string, script: string): Promise<void>;
|
42
|
-
export declare function syncMacros(hackmudPath: string): Promise<{
|
43
|
-
macrosSynced: number;
|
44
|
-
usersSynced: number;
|
45
|
-
}>;
|
46
|
-
export declare function test(srcPath: string): Promise<{
|
47
|
-
file: string;
|
48
|
-
message: string;
|
49
|
-
line: number;
|
50
|
-
}[]>;
|
51
|
-
export declare function generateTypings(srcDir: string, target: string, hackmudPath?: string): Promise<void>;
|
52
|
-
/**
|
53
|
-
* Minifies a given script
|
54
|
-
*
|
55
|
-
* @param script JavaScript or TypeScript code
|
56
|
-
*/
|
57
|
-
export declare function processScript(script: string): Promise<{
|
58
|
-
srcLength: number;
|
59
|
-
script: string;
|
60
|
-
warnings: {
|
61
|
-
message: string;
|
62
|
-
line: number;
|
63
|
-
}[];
|
64
|
-
}>;
|
65
|
-
export declare function getFunctionBodyStart(code: string): number;
|
15
|
+
};
|
package/index.js
CHANGED
@@ -1,10 +1 @@
|
|
1
|
-
import
|
2
|
-
import 'chokidar';
|
3
|
-
import 'escodegen';
|
4
|
-
import 'esprima';
|
5
|
-
import 'esquery';
|
6
|
-
import 'fs';
|
7
|
-
import 'path';
|
8
|
-
import 'terser';
|
9
|
-
import 'typescript';
|
10
|
-
export { g as generateTypings, e as getFunctionBodyStart, p as processScript, b as pull, d as push, s as supportedExtensions, a as syncMacros, t as test, c as watch } from './shared.js';
|
1
|
+
export{processScript,s as supportedExtensions}from"./processScript/index.js";export{generateTypings}from"./generateTypings.js";export{pull}from"./pull.js";export{push}from"./push.js";export{syncMacros}from"./syncMacros.js";export{test}from"./test.js";export{watch}from"./watch.js";import"@babel/generator";import"@babel/parser";import"@babel/plugin-proposal-class-properties";import"@babel/plugin-proposal-class-static-block";import"@babel/plugin-proposal-decorators";import"@babel/plugin-proposal-do-expressions";import"@babel/plugin-proposal-function-bind";import"@babel/plugin-proposal-function-sent";import"@babel/plugin-proposal-json-strings";import"@babel/plugin-proposal-logical-assignment-operators";import"@babel/plugin-proposal-nullish-coalescing-operator";import"@babel/plugin-proposal-numeric-separator";import"@babel/plugin-proposal-object-rest-spread";import"@babel/plugin-proposal-optional-catch-binding";import"@babel/plugin-proposal-optional-chaining";import"@babel/plugin-proposal-partial-application";import"@babel/plugin-proposal-pipeline-operator";import"@babel/plugin-proposal-private-property-in-object";import"@babel/plugin-proposal-record-and-tuple";import"@babel/plugin-proposal-throw-expressions";import"@babel/plugin-transform-exponentiation-operator";import"@babel/plugin-transform-typescript";import"@babel/traverse";import"@babel/types";import"@rollup/plugin-babel";import"@rollup/plugin-commonjs";import"@rollup/plugin-json";import"@rollup/plugin-node-resolve";import"./assert-1b7dada8.js";import"path";import"./processScript/minify.js";import"./spliceString-2c6f214f.js";import"acorn";import"terser";import"./processScript/shared.js";import"perf_hooks";import"prettier";import"rollup";import"./processScript/postprocess.js";import"./processScript/preprocess.js";import"./processScript/transform.js";import"fs";import"chokidar";
|