hackmud-script-manager 0.20.4-23a791c → 0.20.4-34a1e78
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/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)
|