@rhost/testkit 0.1.1 → 1.3.1
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 +393 -5
- package/ROADMAP.md +241 -0
- package/dist/benchmark.d.ts +44 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +118 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/cli/deploy.d.ts +2 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +120 -0
- package/dist/cli/deploy.js.map +1 -0
- package/dist/cli/fmt.d.ts +2 -0
- package/dist/cli/fmt.d.ts.map +1 -0
- package/dist/cli/fmt.js +119 -0
- package/dist/cli/fmt.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +81 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +210 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/validate.d.ts +2 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +126 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/cli/watch.d.ts +2 -0
- package/dist/cli/watch.d.ts.map +1 -0
- package/dist/cli/watch.js +136 -0
- package/dist/cli/watch.js.map +1 -0
- package/dist/client.d.ts +48 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +113 -30
- package/dist/client.js.map +1 -1
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +1 -1
- package/dist/container.js.map +1 -1
- package/dist/deployer.d.ts +86 -0
- package/dist/deployer.d.ts.map +1 -0
- package/dist/deployer.js +154 -0
- package/dist/deployer.js.map +1 -0
- package/dist/expect.d.ts +27 -1
- package/dist/expect.d.ts.map +1 -1
- package/dist/expect.js +47 -2
- package/dist/expect.js.map +1 -1
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -1
- package/dist/index.js.map +1 -1
- package/dist/preflight.d.ts +70 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +121 -0
- package/dist/preflight.js.map +1 -0
- package/dist/reporter.d.ts +2 -0
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +24 -1
- package/dist/reporter.js.map +1 -1
- package/dist/runner.d.ts +83 -2
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +137 -8
- package/dist/runner.js.map +1 -1
- package/dist/snapshots.d.ts +84 -0
- package/dist/snapshots.d.ts.map +1 -0
- package/dist/snapshots.js +230 -0
- package/dist/snapshots.js.map +1 -0
- package/dist/validator/builtins.d.ts +18 -0
- package/dist/validator/builtins.d.ts.map +1 -0
- package/dist/validator/builtins.js +265 -0
- package/dist/validator/builtins.js.map +1 -0
- package/dist/validator/checker.d.ts +13 -0
- package/dist/validator/checker.d.ts.map +1 -0
- package/dist/validator/checker.js +111 -0
- package/dist/validator/checker.js.map +1 -0
- package/dist/validator/clobber.d.ts +7 -0
- package/dist/validator/clobber.d.ts.map +1 -0
- package/dist/validator/clobber.js +102 -0
- package/dist/validator/clobber.js.map +1 -0
- package/dist/validator/compat.d.ts +19 -0
- package/dist/validator/compat.d.ts.map +1 -0
- package/dist/validator/compat.js +58 -0
- package/dist/validator/compat.js.map +1 -0
- package/dist/validator/formatter.d.ts +21 -0
- package/dist/validator/formatter.d.ts.map +1 -0
- package/dist/validator/formatter.js +120 -0
- package/dist/validator/formatter.js.map +1 -0
- package/dist/validator/index.d.ts +57 -0
- package/dist/validator/index.d.ts.map +1 -0
- package/dist/validator/index.js +133 -0
- package/dist/validator/index.js.map +1 -0
- package/dist/validator/parser.d.ts +16 -0
- package/dist/validator/parser.d.ts.map +1 -0
- package/dist/validator/parser.js +260 -0
- package/dist/validator/parser.js.map +1 -0
- package/dist/validator/tokenizer.d.ts +28 -0
- package/dist/validator/tokenizer.d.ts.map +1 -0
- package/dist/validator/tokenizer.js +174 -0
- package/dist/validator/tokenizer.js.map +1 -0
- package/dist/validator/types.d.ts +55 -0
- package/dist/validator/types.d.ts.map +1 -0
- package/dist/validator/types.js +6 -0
- package/dist/validator/types.js.map +1 -0
- package/dist/watcher.d.ts +44 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +297 -0
- package/dist/watcher.js.map +1 -0
- package/dist/world.d.ts +79 -0
- package/dist/world.d.ts.map +1 -1
- package/dist/world.js +167 -1
- package/dist/world.js.map +1 -1
- package/package.json +19 -3
package/dist/world.d.ts
CHANGED
|
@@ -1,4 +1,33 @@
|
|
|
1
1
|
import { RhostClient } from './client';
|
|
2
|
+
export interface WorldObjectDiff {
|
|
3
|
+
dbref: string;
|
|
4
|
+
added: string[];
|
|
5
|
+
removed: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface WorldDiff {
|
|
8
|
+
clean: boolean;
|
|
9
|
+
created: string[];
|
|
10
|
+
destroyed: string[];
|
|
11
|
+
modified: WorldObjectDiff[];
|
|
12
|
+
}
|
|
13
|
+
export declare class WorldSideEffectError extends Error {
|
|
14
|
+
readonly diff: WorldDiff;
|
|
15
|
+
constructor(diff: WorldDiff, message: string);
|
|
16
|
+
}
|
|
17
|
+
interface ObjectSnapshot {
|
|
18
|
+
attrs: string[];
|
|
19
|
+
}
|
|
20
|
+
export declare class WorldSnapshot {
|
|
21
|
+
private readonly world;
|
|
22
|
+
/** Internal state map, exposed for test inspection as _state. */
|
|
23
|
+
readonly _state: Record<string, ObjectSnapshot>;
|
|
24
|
+
private readonly trackedDbrefsCopy;
|
|
25
|
+
constructor(world: RhostWorld, state: Record<string, ObjectSnapshot>, trackedDbrefsCopy: string[]);
|
|
26
|
+
/** Compare current world state against this snapshot and return a diff. */
|
|
27
|
+
diff(): Promise<WorldDiff>;
|
|
28
|
+
/** Throw a WorldSideEffectError if anything has changed since the snapshot. */
|
|
29
|
+
assertNoChanges(): Promise<void>;
|
|
30
|
+
}
|
|
2
31
|
/**
|
|
3
32
|
* RhostWorld — fixture manager for creating and cleaning up in-game objects
|
|
4
33
|
* during test runs.
|
|
@@ -48,10 +77,59 @@ export declare class RhostWorld {
|
|
|
48
77
|
* Sets a flag: `@set dbref=FLAG` or `@set dbref=!FLAG` to clear.
|
|
49
78
|
*/
|
|
50
79
|
flag(dbref: string, flag: string, clear?: boolean): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Emits a message to a target object: `@pemit target=msg`.
|
|
82
|
+
*/
|
|
83
|
+
pemit(target: string, msg: string): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Emits a message to all objects in a room: `@remit room=msg`.
|
|
86
|
+
*/
|
|
87
|
+
remit(room: string, msg: string): Promise<void>;
|
|
88
|
+
/**
|
|
89
|
+
* Forces an object to execute a command: `@force actor=cmd`.
|
|
90
|
+
*/
|
|
91
|
+
force(actor: string, cmd: string): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Sets a parent on an object: `@parent child=parent`.
|
|
94
|
+
*/
|
|
95
|
+
parent(child: string, parentDbref: string): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Creates a zone room via `@dig name` and sets the INHERIT_ZONE flag.
|
|
98
|
+
* Registers the dbref for automatic cleanup.
|
|
99
|
+
* Returns the dbref string like '#42'.
|
|
100
|
+
*/
|
|
101
|
+
zone(name: string): Promise<string>;
|
|
102
|
+
/**
|
|
103
|
+
* Adds an object to a channel: `@channel/add chan=dbref`.
|
|
104
|
+
*/
|
|
105
|
+
addToChannel(dbref: string, chan: string): Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* Sets a quota on an object: `@quota/set dbref=n`.
|
|
108
|
+
*/
|
|
109
|
+
grantQuota(dbref: string, n: number): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Pauses execution for `ms` milliseconds.
|
|
112
|
+
* This is a plain JavaScript delay — not a MUSH @wait command.
|
|
113
|
+
*/
|
|
114
|
+
wait(ms: number): Promise<void>;
|
|
115
|
+
/**
|
|
116
|
+
* Sends mail: `@mail to=subj/body`.
|
|
117
|
+
*/
|
|
118
|
+
mail(to: string, subj: string, body: string): Promise<void>;
|
|
51
119
|
/**
|
|
52
120
|
* Triggers `@trigger dbref/ATTR=args`. Returns captured output lines.
|
|
53
121
|
*/
|
|
54
122
|
trigger(dbref: string, attr: string, args?: string): Promise<string[]>;
|
|
123
|
+
/**
|
|
124
|
+
* Capture the current state of all tracked objects.
|
|
125
|
+
* Use the returned `WorldSnapshot` to assert no side effects occurred.
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* const snap = await world.snapshot();
|
|
129
|
+
* await client.eval('some_expression_with_possible_side_effects()');
|
|
130
|
+
* await snap.assertNoChanges();
|
|
131
|
+
*/
|
|
132
|
+
snapshot(): Promise<WorldSnapshot>;
|
|
55
133
|
/**
|
|
56
134
|
* Destroys all objects created by this world instance (in reverse order).
|
|
57
135
|
*/
|
|
@@ -59,4 +137,5 @@ export declare class RhostWorld {
|
|
|
59
137
|
/** How many objects are tracked for cleanup. */
|
|
60
138
|
get size(): number;
|
|
61
139
|
}
|
|
140
|
+
export {};
|
|
62
141
|
//# sourceMappingURL=world.d.ts.map
|
package/dist/world.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"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"}
|
package/dist/world.js
CHANGED
|
@@ -1,6 +1,67 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RhostWorld = void 0;
|
|
3
|
+
exports.RhostWorld = exports.WorldSnapshot = exports.WorldSideEffectError = void 0;
|
|
4
|
+
class WorldSideEffectError extends Error {
|
|
5
|
+
constructor(diff, message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.diff = diff;
|
|
8
|
+
this.name = 'WorldSideEffectError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.WorldSideEffectError = WorldSideEffectError;
|
|
12
|
+
class WorldSnapshot {
|
|
13
|
+
constructor(world, state, trackedDbrefsCopy) {
|
|
14
|
+
this.world = world;
|
|
15
|
+
this._state = state;
|
|
16
|
+
this.trackedDbrefsCopy = trackedDbrefsCopy;
|
|
17
|
+
}
|
|
18
|
+
/** Compare current world state against this snapshot and return a diff. */
|
|
19
|
+
async diff() {
|
|
20
|
+
const currentDbrefs = [...this.world.dbrefs];
|
|
21
|
+
const beforeSet = new Set(this.trackedDbrefsCopy);
|
|
22
|
+
const afterSet = new Set(currentDbrefs);
|
|
23
|
+
const created = currentDbrefs.filter((d) => !beforeSet.has(d));
|
|
24
|
+
const destroyed = this.trackedDbrefsCopy.filter((d) => !afterSet.has(d));
|
|
25
|
+
const modified = [];
|
|
26
|
+
// Check objects present in both before and after
|
|
27
|
+
for (const dbref of this.trackedDbrefsCopy) {
|
|
28
|
+
if (!afterSet.has(dbref))
|
|
29
|
+
continue;
|
|
30
|
+
const beforeAttrs = new Set(this._state[dbref]?.attrs ?? []);
|
|
31
|
+
const currentAttrsStr = await this.world.client.eval(`lattr(${dbref})`);
|
|
32
|
+
const currentAttrs = currentAttrsStr
|
|
33
|
+
? currentAttrsStr.split(' ').filter(Boolean)
|
|
34
|
+
: [];
|
|
35
|
+
const afterAttrs = new Set(currentAttrs);
|
|
36
|
+
const added = currentAttrs.filter((a) => !beforeAttrs.has(a));
|
|
37
|
+
const removed = [...beforeAttrs].filter((a) => !afterAttrs.has(a));
|
|
38
|
+
if (added.length > 0 || removed.length > 0) {
|
|
39
|
+
modified.push({ dbref, added, removed });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const clean = created.length === 0 && destroyed.length === 0 && modified.length === 0;
|
|
43
|
+
return { clean, created, destroyed, modified };
|
|
44
|
+
}
|
|
45
|
+
/** Throw a WorldSideEffectError if anything has changed since the snapshot. */
|
|
46
|
+
async assertNoChanges() {
|
|
47
|
+
const d = await this.diff();
|
|
48
|
+
if (d.clean)
|
|
49
|
+
return;
|
|
50
|
+
const lines = ['World state changed after snapshot (unexpected side effects):'];
|
|
51
|
+
if (d.created.length > 0)
|
|
52
|
+
lines.push(` Created: ${d.created.join(', ')}`);
|
|
53
|
+
if (d.destroyed.length > 0)
|
|
54
|
+
lines.push(` Destroyed: ${d.destroyed.join(', ')}`);
|
|
55
|
+
for (const mod of d.modified) {
|
|
56
|
+
if (mod.added.length > 0)
|
|
57
|
+
lines.push(` ${mod.dbref} — added attrs: ${mod.added.join(', ')}`);
|
|
58
|
+
if (mod.removed.length > 0)
|
|
59
|
+
lines.push(` ${mod.dbref} — removed attrs: ${mod.removed.join(', ')}`);
|
|
60
|
+
}
|
|
61
|
+
throw new WorldSideEffectError(d, lines.join('\n'));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.WorldSnapshot = WorldSnapshot;
|
|
4
65
|
/**
|
|
5
66
|
* RhostWorld — fixture manager for creating and cleaning up in-game objects
|
|
6
67
|
* during test runs.
|
|
@@ -77,6 +138,7 @@ class RhostWorld {
|
|
|
77
138
|
* Gets an attribute by evaluating `get(dbref/ATTR)`.
|
|
78
139
|
*/
|
|
79
140
|
async get(dbref, attr) {
|
|
141
|
+
this.guardInput('attr', attr);
|
|
80
142
|
// Strip the '#' for the get() call — Rhost expects get(#42/ATTR)
|
|
81
143
|
return (await this.client.eval(`get(${dbref}/${attr})`)).trim();
|
|
82
144
|
}
|
|
@@ -95,6 +157,92 @@ class RhostWorld {
|
|
|
95
157
|
const flagStr = clear ? `!${flag}` : flag;
|
|
96
158
|
await this.client.command(`@set ${dbref}=${flagStr}`);
|
|
97
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Emits a message to a target object: `@pemit target=msg`.
|
|
162
|
+
*/
|
|
163
|
+
async pemit(target, msg) {
|
|
164
|
+
this.guardInput('target', target);
|
|
165
|
+
this.guardInput('msg', msg);
|
|
166
|
+
await this.client.command(`@pemit ${target}=${msg}`);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Emits a message to all objects in a room: `@remit room=msg`.
|
|
170
|
+
*/
|
|
171
|
+
async remit(room, msg) {
|
|
172
|
+
this.guardInput('room', room);
|
|
173
|
+
this.guardInput('msg', msg);
|
|
174
|
+
await this.client.command(`@remit ${room}=${msg}`);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Forces an object to execute a command: `@force actor=cmd`.
|
|
178
|
+
*/
|
|
179
|
+
async force(actor, cmd) {
|
|
180
|
+
this.guardInput('actor', actor);
|
|
181
|
+
this.guardInput('cmd', cmd);
|
|
182
|
+
await this.client.command(`@force ${actor}=${cmd}`);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Sets a parent on an object: `@parent child=parent`.
|
|
186
|
+
*/
|
|
187
|
+
async parent(child, parentDbref) {
|
|
188
|
+
this.guardInput('child', child);
|
|
189
|
+
this.guardInput('parent', parentDbref);
|
|
190
|
+
await this.client.command(`@parent ${child}=${parentDbref}`);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Creates a zone room via `@dig name` and sets the INHERIT_ZONE flag.
|
|
194
|
+
* Registers the dbref for automatic cleanup.
|
|
195
|
+
* Returns the dbref string like '#42'.
|
|
196
|
+
*/
|
|
197
|
+
async zone(name) {
|
|
198
|
+
this.guardInput('name', name);
|
|
199
|
+
const lines = await this.client.command(`@dig ${name}`);
|
|
200
|
+
let dbref = null;
|
|
201
|
+
for (const line of lines) {
|
|
202
|
+
const m = line.match(/(?:room number\s+#?|#)(\d+)/i);
|
|
203
|
+
if (m) {
|
|
204
|
+
dbref = `#${m[1]}`;
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (!dbref) {
|
|
209
|
+
throw new Error(`world.zone(${JSON.stringify(name)}) could not parse dbref from output: ${JSON.stringify(lines)}`);
|
|
210
|
+
}
|
|
211
|
+
await this.client.command(`@set ${dbref}=INHERIT_ZONE`);
|
|
212
|
+
this.dbrefs.push(dbref);
|
|
213
|
+
return dbref;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Adds an object to a channel: `@channel/add chan=dbref`.
|
|
217
|
+
*/
|
|
218
|
+
async addToChannel(dbref, chan) {
|
|
219
|
+
this.guardInput('dbref', dbref);
|
|
220
|
+
this.guardInput('chan', chan);
|
|
221
|
+
await this.client.command(`@channel/add ${chan}=${dbref}`);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Sets a quota on an object: `@quota/set dbref=n`.
|
|
225
|
+
*/
|
|
226
|
+
async grantQuota(dbref, n) {
|
|
227
|
+
this.guardInput('dbref', dbref);
|
|
228
|
+
await this.client.command(`@quota/set ${dbref}=${n}`);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Pauses execution for `ms` milliseconds.
|
|
232
|
+
* This is a plain JavaScript delay — not a MUSH @wait command.
|
|
233
|
+
*/
|
|
234
|
+
wait(ms) {
|
|
235
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Sends mail: `@mail to=subj/body`.
|
|
239
|
+
*/
|
|
240
|
+
async mail(to, subj, body) {
|
|
241
|
+
this.guardInput('to', to);
|
|
242
|
+
this.guardInput('subj', subj);
|
|
243
|
+
this.guardInput('body', body);
|
|
244
|
+
await this.client.command(`@mail ${to}=${subj}/${body}`);
|
|
245
|
+
}
|
|
98
246
|
/**
|
|
99
247
|
* Triggers `@trigger dbref/ATTR=args`. Returns captured output lines.
|
|
100
248
|
*/
|
|
@@ -107,6 +255,24 @@ class RhostWorld {
|
|
|
107
255
|
: `@trigger ${dbref}/${attr}`;
|
|
108
256
|
return this.client.command(cmd);
|
|
109
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
* Capture the current state of all tracked objects.
|
|
260
|
+
* Use the returned `WorldSnapshot` to assert no side effects occurred.
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* const snap = await world.snapshot();
|
|
264
|
+
* await client.eval('some_expression_with_possible_side_effects()');
|
|
265
|
+
* await snap.assertNoChanges();
|
|
266
|
+
*/
|
|
267
|
+
async snapshot() {
|
|
268
|
+
const state = {};
|
|
269
|
+
for (const dbref of this.dbrefs) {
|
|
270
|
+
const attrsStr = await this.client.eval(`lattr(${dbref})`);
|
|
271
|
+
const attrs = attrsStr ? attrsStr.split(' ').filter(Boolean) : [];
|
|
272
|
+
state[dbref] = { attrs };
|
|
273
|
+
}
|
|
274
|
+
return new WorldSnapshot(this, state, [...this.dbrefs]);
|
|
275
|
+
}
|
|
110
276
|
/**
|
|
111
277
|
* Destroys all objects created by this world instance (in reverse order).
|
|
112
278
|
*/
|
package/dist/world.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world.js","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"world.js","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":";;;AAmBA,MAAa,oBAAqB,SAAQ,KAAK;IAC3C,YAA4B,IAAe,EAAE,OAAe;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QADS,SAAI,GAAJ,IAAI,CAAW;QAEvC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACvC,CAAC;CACJ;AALD,oDAKC;AAMD,MAAa,aAAa;IAKtB,YACqB,KAAiB,EAClC,KAAqC,EACrC,iBAA2B;QAFV,UAAK,GAAL,KAAK,CAAY;QAIlC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC/C,CAAC;IAED,2EAA2E;IAC3E,KAAK,CAAC,IAAI;QACN,MAAM,aAAa,GAAa,CAAC,GAAI,IAAI,CAAC,KAAa,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAsB,EAAE,CAAC;QAEvC,iDAAiD;QACjD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS;YACnC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YAC7D,MAAM,eAAe,GAAG,MAAO,IAAI,CAAC,KAAa,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC;YACjF,MAAM,YAAY,GAAG,eAAe;gBAChC,CAAC,CAAE,eAA0B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBACxD,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;YAEzC,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEnE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;QACtF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACnD,CAAC;IAED,+EAA+E;IAC/E,KAAK,CAAC,eAAe;QACjB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,KAAK;YAAE,OAAO;QAEpB,MAAM,KAAK,GAAa,CAAC,+DAA+D,CAAC,CAAC;QAC1F,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,mBAAmB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9F,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,qBAAqB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,IAAI,oBAAoB,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;CACJ;AA5DD,sCA4DC;AAED;;;;;;;;;;GAUG;AACH,MAAa,UAAU;IAGnB,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;QAFxC,WAAM,GAAa,EAAE,CAAC;IAEqB,CAAC;IAE5C,UAAU,CAAC,KAAa,EAAE,KAAa;QAC3C,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,UAAU,CAChB,kBAAkB,KAAK,iEAAiE,CAC3F,CAAC;QACN,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,IAAa;QACpC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC;QAChF,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC;YACJ,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,IAAY;QAClB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QACxD,uDAAuD;QACvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC;gBACJ,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxB,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,wCAAwC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa;QACvB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,KAAa;QAChD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,KAAa,EAAE,IAAY;QACjC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,iEAAiE;QACjE,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,UAAkB;QACxC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI,UAAU,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,IAAY,EAAE,KAAK,GAAG,KAAK;QACjD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,GAAW;QACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,GAAW;QACjC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,GAAW;QAClC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,WAAmB;QAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,WAAW,EAAE,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,IAAY;QACnB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,KAAK,GAAkB,IAAI,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC;gBAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,MAAM;YAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,wCAAwC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvH,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,IAAY;QAC1C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,CAAS;QACrC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,EAAU;QACX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,EAAU,EAAE,IAAY,EAAE,IAAY;QAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAY,EAAE,IAAa;QACpD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI;YACZ,CAAC,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;YACrC,CAAC,CAAC,YAAY,KAAK,IAAI,IAAI,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,QAAQ;QACV,MAAM,KAAK,GAAmC,EAAE,CAAC;QACjD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACL,qDAAqD;YACzD,CAAC;QACL,CAAC;IACL,CAAC;IAED,gDAAgD;IAChD,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;CACJ;AA3OD,gCA2OC"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rhost/testkit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"description": "SDK for programmatically testing MUSHcode against a RhostMUSH server",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"rhost-testkit": "./dist/cli/index.js"
|
|
9
|
+
},
|
|
7
10
|
"exports": {
|
|
8
11
|
".": {
|
|
9
12
|
"require": "./dist/index.js",
|
|
10
13
|
"types": "./dist/index.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./validator": {
|
|
16
|
+
"require": "./dist/validator/index.js",
|
|
17
|
+
"types": "./dist/validator/index.d.ts"
|
|
11
18
|
}
|
|
12
19
|
},
|
|
13
20
|
"files": [
|
|
14
21
|
"dist",
|
|
15
22
|
"README.md",
|
|
16
|
-
"SECURITY.md"
|
|
23
|
+
"SECURITY.md",
|
|
24
|
+
"ROADMAP.md"
|
|
17
25
|
],
|
|
18
26
|
"repository": {
|
|
19
27
|
"type": "git",
|
|
@@ -27,7 +35,7 @@
|
|
|
27
35
|
"build": "tsc -p tsconfig.build.json",
|
|
28
36
|
"prepublishOnly": "npm run build && npm test",
|
|
29
37
|
"dev": "tsc --watch",
|
|
30
|
-
"test": "jest --testPathPattern='src/__tests__/
|
|
38
|
+
"test": "jest --testPathPattern='src/__tests__/(?!.*integration).*\\.test\\.ts$'",
|
|
31
39
|
"test:integration": "jest --testPathPattern='integration' --testTimeout=180000",
|
|
32
40
|
"test:all": "jest",
|
|
33
41
|
"example:basic": "npx ts-node examples/basic.ts",
|
|
@@ -41,7 +49,15 @@
|
|
|
41
49
|
"example:08": "npx ts-node examples/08-execscript.ts",
|
|
42
50
|
"example:09": "npx ts-node examples/09-api.ts",
|
|
43
51
|
"example:10": "npx ts-node examples/10-lua.ts",
|
|
52
|
+
"example:11": "npx ts-node examples/11-preflight.ts",
|
|
53
|
+
"example:12": "npx ts-node examples/12-personas.ts",
|
|
54
|
+
"example:13": "npx ts-node examples/13-side-effects.ts",
|
|
55
|
+
"example:14": "npx ts-node examples/14-validator-advanced.ts",
|
|
56
|
+
"example:15": "npx ts-node examples/15-deploy.ts",
|
|
57
|
+
"example:16": "npx ts-node examples/16-formatter.ts",
|
|
58
|
+
"example:17": "npx ts-node examples/17-benchmark.ts",
|
|
44
59
|
"examples": "npx ts-node examples/01-functions.ts && npx ts-node examples/02-rhost-specific.ts && npx ts-node examples/03-attributes.ts && npx ts-node examples/04-triggers.ts && npx ts-node examples/05-runner-features.ts && npx ts-node examples/06-game-system.ts",
|
|
60
|
+
"examples:offline": "npx ts-node examples/14-validator-advanced.ts && npx ts-node examples/16-formatter.ts",
|
|
45
61
|
"examples:power": "npx ts-node examples/08-execscript.ts && npx ts-node examples/09-api.ts && npx ts-node examples/10-lua.ts"
|
|
46
62
|
},
|
|
47
63
|
"keywords": [
|