hackmud-script-manager 0.20.4-23a791c → 0.20.4-34a1e78
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +4 -0
- package/bin/hsm.js +296 -262
- package/env.d.ts +363 -289
- package/generateTypeDeclaration.js +2 -1
- package/index.d.ts +3 -0
- package/index.js +2 -1
- package/package.json +38 -38
- package/processScript/index.d.ts +0 -1
- package/processScript/index.js +5 -5
- package/processScript/minify.js +11 -17
- package/processScript/postprocess.d.ts +1 -1
- package/processScript/postprocess.js +3 -3
- package/processScript/preprocess.js +5 -3
- package/processScript/transform.d.ts +3 -0
- package/processScript/transform.js +110 -97
- package/push.d.ts +9 -1
- package/push.js +38 -16
- package/watch.js +25 -26
package/watch.js
CHANGED
@@ -1,14 +1,15 @@
|
|
1
|
-
import {
|
1
|
+
import { AutoMap } from "@samual/lib/AutoMap"
|
2
2
|
import { assert } from "@samual/lib/assert"
|
3
3
|
import { countHackmudCharacters } from "@samual/lib/countHackmudCharacters"
|
4
4
|
import { readDirectoryWithStats } from "@samual/lib/readDirectoryWithStats"
|
5
5
|
import { writeFilePersistent } from "@samual/lib/writeFilePersistent"
|
6
6
|
import { watch as watch$1 } from "chokidar"
|
7
|
-
import { readFile, writeFile } from "fs/promises"
|
7
|
+
import { stat, readFile, writeFile } from "fs/promises"
|
8
8
|
import { extname, basename, resolve } from "path"
|
9
9
|
import { supportedExtensions } from "./constants.js"
|
10
10
|
import { generateTypeDeclaration } from "./generateTypeDeclaration.js"
|
11
11
|
import { processScript } from "./processScript/index.js"
|
12
|
+
import "path/posix"
|
12
13
|
import "@babel/generator"
|
13
14
|
import "@babel/parser"
|
14
15
|
import "@babel/plugin-proposal-decorators"
|
@@ -58,7 +59,8 @@ async function watch(
|
|
58
59
|
} = {}
|
59
60
|
) {
|
60
61
|
if (!scripts.length) throw Error("scripts option was an empty array")
|
61
|
-
|
62
|
+
if (!(await stat(sourceDirectory)).isDirectory()) throw Error("Target folder must be a folder")
|
63
|
+
const scriptNamesToUsers = new AutoMap(_scriptName => new Set()),
|
62
64
|
wildScriptUsers = new Set(),
|
63
65
|
wildUserScripts = new Set()
|
64
66
|
let pushEverything = !1
|
@@ -71,10 +73,11 @@ async function watch(
|
|
71
73
|
: scriptName && "*" != scriptName ? wildUserScripts.add(scriptName)
|
72
74
|
: (pushEverything = !0)
|
73
75
|
}
|
74
|
-
const watcher = watch$1(
|
76
|
+
const watcher = watch$1(".", {
|
75
77
|
cwd: sourceDirectory,
|
76
78
|
awaitWriteFinish: { stabilityThreshold: 100 },
|
77
|
-
ignored:
|
79
|
+
ignored: (path, stats) =>
|
80
|
+
!!stats?.isFile() && !(path.endsWith(".js") || (path.endsWith(".ts") && !path.endsWith(".d.ts")))
|
78
81
|
}).on("change", async path => {
|
79
82
|
if (path.endsWith(".d.ts")) return
|
80
83
|
const extension = extname(path)
|
@@ -90,7 +93,7 @@ async function watch(
|
|
90
93
|
)
|
91
94
|
)
|
92
95
|
return
|
93
|
-
const scriptNamesToUsersToSkip = new
|
96
|
+
const scriptNamesToUsersToSkip = new AutoMap(_scriptName => [])
|
94
97
|
await Promise.all(
|
95
98
|
(await readDirectoryWithStats(sourceDirectory)).map(async ({ stats, name, path }) => {
|
96
99
|
if (stats.isDirectory())
|
@@ -116,27 +119,22 @@ async function watch(
|
|
116
119
|
for (const user of scriptNamesToUsers.get(scriptName)) usersToPushToSet.add(user)
|
117
120
|
const usersToPushTo = [...usersToPushToSet].filter(user => !scriptNamesToUsersToSkip.has(user))
|
118
121
|
if (!usersToPushTo.length) {
|
119
|
-
onPush?.({ path, users: [], characterCount: 0, error: Error("no users to push to") })
|
122
|
+
onPush?.({ path, users: [], characterCount: 0, error: Error("no users to push to"), warnings: [] })
|
120
123
|
return
|
121
124
|
}
|
122
125
|
const uniqueId = Math.floor(Math.random() * 2 ** 52)
|
123
126
|
.toString(36)
|
124
127
|
.padStart(11, "0"),
|
125
128
|
filePath = resolve(sourceDirectory, path)
|
126
|
-
let minifiedCode
|
129
|
+
let minifiedCode, warnings
|
127
130
|
try {
|
128
|
-
;({ script: minifiedCode } = await processScript(
|
129
|
-
|
130
|
-
scriptUser: !0,
|
131
|
-
|
132
|
-
uniqueId,
|
133
|
-
filePath,
|
134
|
-
mangleNames,
|
135
|
-
forceQuineCheats
|
136
|
-
}))
|
131
|
+
;({ script: minifiedCode, warnings } = await processScript(
|
132
|
+
await readFile(filePath, { encoding: "utf8" }),
|
133
|
+
{ minify, scriptUser: !0, scriptName, uniqueId, filePath, mangleNames, forceQuineCheats }
|
134
|
+
))
|
137
135
|
} catch (error) {
|
138
|
-
assert(error instanceof Error, "src/watch.ts:
|
139
|
-
onPush?.({ path, users: [], characterCount: 0, error })
|
136
|
+
assert(error instanceof Error, "src/watch.ts:149:36")
|
137
|
+
onPush?.({ path, users: [], characterCount: 0, error, warnings: [] })
|
140
138
|
return
|
141
139
|
}
|
142
140
|
await Promise.all(
|
@@ -153,7 +151,8 @@ async function watch(
|
|
153
151
|
path,
|
154
152
|
users: usersToPushTo,
|
155
153
|
characterCount: countHackmudCharacters(minifiedCode),
|
156
|
-
error: void 0
|
154
|
+
error: void 0,
|
155
|
+
warnings
|
157
156
|
})
|
158
157
|
return
|
159
158
|
}
|
@@ -169,9 +168,9 @@ async function watch(
|
|
169
168
|
return
|
170
169
|
const filePath = resolve(sourceDirectory, path),
|
171
170
|
sourceCode = await readFile(filePath, { encoding: "utf8" })
|
172
|
-
let script
|
171
|
+
let script, warnings
|
173
172
|
try {
|
174
|
-
;({ script } = await processScript(sourceCode, {
|
173
|
+
;({ script, warnings } = await processScript(sourceCode, {
|
175
174
|
minify,
|
176
175
|
scriptUser: user,
|
177
176
|
scriptName,
|
@@ -180,12 +179,12 @@ async function watch(
|
|
180
179
|
forceQuineCheats
|
181
180
|
}))
|
182
181
|
} catch (error) {
|
183
|
-
assert(error instanceof Error, "src/watch.ts:
|
184
|
-
onPush?.({ path, users: [], characterCount: 0, error })
|
182
|
+
assert(error instanceof Error, "src/watch.ts:190:35")
|
183
|
+
onPush?.({ path, users: [], characterCount: 0, error, warnings: [] })
|
185
184
|
return
|
186
185
|
}
|
187
186
|
await writeFilePersistent(resolve(hackmudDirectory, user, "scripts", scriptName + ".js"), script)
|
188
|
-
onPush?.({ path, users: [user], characterCount: countHackmudCharacters(script), error: void 0 })
|
187
|
+
onPush?.({ path, users: [user], characterCount: countHackmudCharacters(script), error: void 0, warnings })
|
189
188
|
})
|
190
189
|
onReady && watcher.on("ready", onReady)
|
191
190
|
if (!typeDeclarationPath_) return
|
@@ -195,7 +194,7 @@ async function watch(
|
|
195
194
|
try {
|
196
195
|
await writeFile(typeDeclarationPath, typeDeclaration)
|
197
196
|
} catch (error) {
|
198
|
-
assert(error instanceof Error, "src/watch.ts:
|
197
|
+
assert(error instanceof Error, "src/watch.ts:223:35")
|
199
198
|
if ("EISDIR" != error.code) throw error
|
200
199
|
typeDeclarationPath = resolve(typeDeclarationPath, "player.d.ts")
|
201
200
|
await writeFile(typeDeclarationPath, typeDeclaration)
|