@rhost/testkit 1.4.1 → 1.5.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/dist/cli/index.js +15 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +107 -19
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/lint.d.ts +2 -0
- package/dist/cli/lint.d.ts.map +1 -0
- package/dist/cli/lint.js +163 -0
- package/dist/cli/lint.js.map +1 -0
- package/dist/cli/mush-format.d.ts +2 -0
- package/dist/cli/mush-format.d.ts.map +1 -0
- package/dist/cli/mush-format.js +232 -0
- package/dist/cli/mush-format.js.map +1 -0
- package/dist/client.d.ts +43 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +78 -5
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/offline/document.d.ts +8 -0
- package/dist/offline/document.d.ts.map +1 -0
- package/dist/offline/document.js +124 -0
- package/dist/offline/document.js.map +1 -0
- package/dist/offline/expect.d.ts +27 -0
- package/dist/offline/expect.d.ts.map +1 -0
- package/dist/offline/expect.js +90 -0
- package/dist/offline/expect.js.map +1 -0
- package/dist/offline/index.d.ts +5 -0
- package/dist/offline/index.d.ts.map +1 -0
- package/dist/offline/index.js +14 -0
- package/dist/offline/index.js.map +1 -0
- package/dist/offline/mock-client.d.ts +19 -0
- package/dist/offline/mock-client.d.ts.map +1 -0
- package/dist/offline/mock-client.js +36 -0
- package/dist/offline/mock-client.js.map +1 -0
- package/dist/offline/mock-world.d.ts +30 -0
- package/dist/offline/mock-world.d.ts.map +1 -0
- package/dist/offline/mock-world.js +64 -0
- package/dist/offline/mock-world.js.map +1 -0
- package/dist/offline/reduced-expect.d.ts +38 -0
- package/dist/offline/reduced-expect.d.ts.map +1 -0
- package/dist/offline/reduced-expect.js +61 -0
- package/dist/offline/reduced-expect.js.map +1 -0
- package/dist/offline/runner.d.ts +13 -0
- package/dist/offline/runner.d.ts.map +1 -0
- package/dist/offline/runner.js +174 -0
- package/dist/offline/runner.js.map +1 -0
- package/dist/offline/types.d.ts +78 -0
- package/dist/offline/types.d.ts.map +1 -0
- package/dist/offline/types.js +3 -0
- package/dist/offline/types.js.map +1 -0
- package/dist/reporter.d.ts +3 -1
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +20 -0
- package/dist/reporter.js.map +1 -1
- package/dist/runner.d.ts +39 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +82 -15
- package/dist/runner.js.map +1 -1
- package/dist/validator/mush-format.d.ts +43 -0
- package/dist/validator/mush-format.d.ts.map +1 -0
- package/dist/validator/mush-format.js +484 -0
- package/dist/validator/mush-format.js.map +1 -0
- package/dist/validator/mush-lint.d.ts +22 -0
- package/dist/validator/mush-lint.d.ts.map +1 -0
- package/dist/validator/mush-lint.js +590 -0
- package/dist/validator/mush-lint.js.map +1 -0
- package/package.json +10 -2
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// rhost-testkit mush-format — two-way .mush ↔ .installer.txt converter
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
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 () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.runMushFormatCli = runMushFormatCli;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const mush_format_1 = require("../validator/mush-format");
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Entry point
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
function runMushFormatCli(args, cwd = process.cwd()) {
|
|
47
|
+
if (args.includes('--help') || args.includes('-h') || args.length === 0) {
|
|
48
|
+
printHelp();
|
|
49
|
+
process.exit(0);
|
|
50
|
+
}
|
|
51
|
+
const mode = args[0];
|
|
52
|
+
if (mode === 'expand') {
|
|
53
|
+
runExpand(args.slice(1), cwd);
|
|
54
|
+
}
|
|
55
|
+
else if (mode === 'compress') {
|
|
56
|
+
runCompress(args.slice(1), cwd);
|
|
57
|
+
}
|
|
58
|
+
else if (mode === 'preview') {
|
|
59
|
+
runPreview(args.slice(1));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.error(`rhost-testkit mush-format: unknown mode '${mode}'\n`);
|
|
63
|
+
printHelp();
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
// expand: dist/*.installer.txt → src/*.mush
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
function runExpand(args, cwd) {
|
|
71
|
+
const indent = parseInt(getFlag(args, '--indent') ?? '2', 10);
|
|
72
|
+
const files = args.filter(a => !a.startsWith('-'));
|
|
73
|
+
if (files.length === 0) {
|
|
74
|
+
const input = fs.readFileSync('/dev/stdin', 'utf8');
|
|
75
|
+
const { output } = (0, mush_format_1.expandFile)(input, { indent });
|
|
76
|
+
process.stdout.write(output);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
for (const file of files) {
|
|
80
|
+
const resolved = path.resolve(cwd, file);
|
|
81
|
+
if (!fs.existsSync(resolved)) {
|
|
82
|
+
console.error(`mush-format expand: file not found: ${resolved}`);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
const content = fs.readFileSync(resolved, 'utf8');
|
|
86
|
+
const { output, changed } = (0, mush_format_1.expandFile)(content, { indent });
|
|
87
|
+
// Determine output path: dist/foo.installer.txt → src/foo.mush
|
|
88
|
+
const outPath = installerToSrc(resolved);
|
|
89
|
+
fs.mkdirSync(path.dirname(outPath), { recursive: true });
|
|
90
|
+
fs.writeFileSync(outPath, output, 'utf8');
|
|
91
|
+
if (changed) {
|
|
92
|
+
console.log(`expand: ${path.relative(cwd, resolved)} → ${path.relative(cwd, outPath)}`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log(`expand: ${path.relative(cwd, resolved)} → unchanged`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
// compress: src/*.mush → dist/*.installer.txt
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
function runCompress(args, cwd) {
|
|
103
|
+
const lowercase = args.includes('--lowercase');
|
|
104
|
+
const name = getFlag(args, '--name');
|
|
105
|
+
const version = getFlag(args, '--version');
|
|
106
|
+
const author = getFlag(args, '--author');
|
|
107
|
+
const requires = getFlag(args, '--requires');
|
|
108
|
+
const files = args.filter(a => !a.startsWith('-'));
|
|
109
|
+
if (files.length === 0) {
|
|
110
|
+
const input = fs.readFileSync('/dev/stdin', 'utf8');
|
|
111
|
+
const { output } = (0, mush_format_1.compressFile)(input, { name, version, author, requires }, { lowercase });
|
|
112
|
+
process.stdout.write(output);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
for (const file of files) {
|
|
116
|
+
const resolved = path.resolve(cwd, file);
|
|
117
|
+
if (!fs.existsSync(resolved)) {
|
|
118
|
+
console.error(`mush-format compress: file not found: ${resolved}`);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
const content = fs.readFileSync(resolved, 'utf8');
|
|
122
|
+
// Try to read meta from a nearby package.json or manifest.json
|
|
123
|
+
const meta = readMeta(path.dirname(resolved), { name, version, author, requires });
|
|
124
|
+
const { output } = (0, mush_format_1.compressFile)(content, meta, { lowercase });
|
|
125
|
+
// Determine output path: src/foo.mush → dist/foo.installer.txt
|
|
126
|
+
const outPath = srcToInstaller(resolved);
|
|
127
|
+
fs.mkdirSync(path.dirname(outPath), { recursive: true });
|
|
128
|
+
fs.writeFileSync(outPath, output, 'utf8');
|
|
129
|
+
console.log(`compress: ${path.relative(cwd, resolved)} → ${path.relative(cwd, outPath)}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
// preview: print the expanded form of a single attribute value to stdout
|
|
134
|
+
// Used for quick interactive inspection without touching files.
|
|
135
|
+
//
|
|
136
|
+
// Usage: rhost-testkit mush-format preview '$+finger *:@pemit %#=[u(me/FN,0)]'
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
function runPreview(args) {
|
|
139
|
+
const indent = parseInt(getFlag(args, '--indent') ?? '2', 10);
|
|
140
|
+
const values = args.filter(a => !a.startsWith('-'));
|
|
141
|
+
if (values.length === 0) {
|
|
142
|
+
const input = fs.readFileSync('/dev/stdin', 'utf8');
|
|
143
|
+
console.log((0, mush_format_1.expandAttrValue)(input.trim(), { indent }));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
for (const v of values) {
|
|
147
|
+
console.log((0, mush_format_1.expandAttrValue)(v, { indent }));
|
|
148
|
+
if (values.length > 1)
|
|
149
|
+
console.log();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// ---------------------------------------------------------------------------
|
|
153
|
+
// Helpers
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
function installerToSrc(filePath) {
|
|
156
|
+
// dist/foo.installer.txt → softcode/foo.mush
|
|
157
|
+
const dir = path.dirname(filePath);
|
|
158
|
+
const base = path.basename(filePath, '.installer.txt');
|
|
159
|
+
const softDir = dir.replace(/[/\\]dist([/\\]|$)/, '/softcode$1');
|
|
160
|
+
return path.join(softDir === dir ? path.join(dir, '..', 'softcode') : softDir, `${base}.mush`);
|
|
161
|
+
}
|
|
162
|
+
function srcToInstaller(filePath) {
|
|
163
|
+
// softcode/foo.mush → dist/foo.installer.txt
|
|
164
|
+
const dir = path.dirname(filePath);
|
|
165
|
+
const base = path.basename(filePath, '.mush');
|
|
166
|
+
const distDir = dir.replace(/[/\\]softcode([/\\]|$)/, '/dist$1');
|
|
167
|
+
return path.join(distDir === dir ? path.join(dir, '..', 'dist') : distDir, `${base}.installer.txt`);
|
|
168
|
+
}
|
|
169
|
+
function getFlag(args, flag) {
|
|
170
|
+
const idx = args.findIndex(a => a === flag || a.startsWith(flag + '='));
|
|
171
|
+
if (idx === -1)
|
|
172
|
+
return undefined;
|
|
173
|
+
const arg = args[idx];
|
|
174
|
+
if (arg.includes('='))
|
|
175
|
+
return arg.split('=').slice(1).join('=');
|
|
176
|
+
return args[idx + 1];
|
|
177
|
+
}
|
|
178
|
+
function readMeta(dir, overrides) {
|
|
179
|
+
// Try manifest.json first, then package.json
|
|
180
|
+
for (const fname of ['manifest.json', 'package.json']) {
|
|
181
|
+
const p = path.join(dir, fname);
|
|
182
|
+
const up = path.join(dir, '..', fname);
|
|
183
|
+
for (const candidate of [p, up]) {
|
|
184
|
+
if (fs.existsSync(candidate)) {
|
|
185
|
+
try {
|
|
186
|
+
const data = JSON.parse(fs.readFileSync(candidate, 'utf8'));
|
|
187
|
+
return {
|
|
188
|
+
name: overrides.name ?? data.displayName ?? data.name,
|
|
189
|
+
version: overrides.version ?? data.version,
|
|
190
|
+
author: overrides.author ?? data.author,
|
|
191
|
+
requires: overrides.requires ?? data.requires,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// ignore
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return overrides;
|
|
201
|
+
}
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
// Help
|
|
204
|
+
// ---------------------------------------------------------------------------
|
|
205
|
+
function printHelp() {
|
|
206
|
+
console.log(`
|
|
207
|
+
USAGE
|
|
208
|
+
rhost-testkit mush-format <mode> [options] [file...]
|
|
209
|
+
|
|
210
|
+
MODES
|
|
211
|
+
expand dist/*.installer.txt → softcode/*.mush (compressed → readable)
|
|
212
|
+
compress softcode/*.mush → dist/*.installer.txt (readable → compressed)
|
|
213
|
+
preview Print expanded form of a single attribute value
|
|
214
|
+
|
|
215
|
+
EXPAND OPTIONS
|
|
216
|
+
--indent=N Indent size in spaces (default: 2)
|
|
217
|
+
|
|
218
|
+
COMPRESS OPTIONS
|
|
219
|
+
--name=NAME System name for the installer header
|
|
220
|
+
--version=VER Version string (default: reads from manifest.json)
|
|
221
|
+
--author=AUTHOR Author name
|
|
222
|
+
--requires=DEPS Prerequisite note (default: None)
|
|
223
|
+
--lowercase Normalise function names to lowercase
|
|
224
|
+
|
|
225
|
+
EXAMPLES
|
|
226
|
+
rhost-testkit mush-format expand dist/my-system.installer.txt
|
|
227
|
+
rhost-testkit mush-format compress src/my-system.mush
|
|
228
|
+
rhost-testkit mush-format preview '$+finger *:@pemit %#=[u(me/FN_FINGER,%0)]'
|
|
229
|
+
echo "add( 2 , 3 )" | rhost-testkit mush-format preview
|
|
230
|
+
`.trim());
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=mush-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mush-format.js","sourceRoot":"","sources":["../../src/cli/mush-format.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
/** Strip ANSI/VT100 escape sequences from a string. */
|
|
2
2
|
export declare function stripAnsi(s: string): string;
|
|
3
|
+
export interface CommandOptions {
|
|
4
|
+
/** Override the global commandSettleMs for this single call. */
|
|
5
|
+
settleMs?: number;
|
|
6
|
+
/** Timeout in ms. Defaults to the client's default timeout. */
|
|
7
|
+
timeout?: number;
|
|
8
|
+
}
|
|
3
9
|
export interface RhostClientOptions {
|
|
4
10
|
/** Server hostname. Default: 'localhost' */
|
|
5
11
|
host?: string;
|
|
@@ -102,11 +108,47 @@ export declare class RhostClient {
|
|
|
102
108
|
* Run a MUSHcode command and collect all output lines until the
|
|
103
109
|
* internal sentinel is received.
|
|
104
110
|
*
|
|
111
|
+
* The second argument can be a timeout number (legacy) or an options object.
|
|
112
|
+
* Use `settleMs` to override the global commandSettleMs for a single call —
|
|
113
|
+
* this lets you pay the settle cost only on commands that produce deferred
|
|
114
|
+
* output (e.g. `@force`) while non-deferred commands run at full speed.
|
|
115
|
+
*
|
|
105
116
|
* @example
|
|
106
117
|
* const lines = await client.command('look here');
|
|
107
118
|
* const lines = await client.command('@pemit me=hello');
|
|
119
|
+
* // Only pay settle cost on @force:
|
|
120
|
+
* await client.command(`@force ${player}=+cg/submit`, { settleMs: 300 });
|
|
121
|
+
*/
|
|
122
|
+
command(cmd: string, timeoutOrOpts?: number | CommandOptions): Promise<string[]>;
|
|
123
|
+
/**
|
|
124
|
+
* Evaluate N expressions in a single pipelined batch.
|
|
125
|
+
*
|
|
126
|
+
* All sends are issued before waiting for any response, eliminating the
|
|
127
|
+
* per-expression START-sentinel round trip. Results are returned in the
|
|
128
|
+
* same order as `expressions`.
|
|
129
|
+
*
|
|
130
|
+
* Use this instead of sequential `await client.eval()` calls whenever
|
|
131
|
+
* the expressions are independent of each other.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* const [cg, cgData] = await client.evalAll([
|
|
135
|
+
* 'search(name=Chargen <cg>)',
|
|
136
|
+
* 'search(name=Chargen Data <cg>)',
|
|
137
|
+
* ]);
|
|
138
|
+
*/
|
|
139
|
+
evalAll(expressions: string[], timeout?: number): Promise<string[]>;
|
|
140
|
+
/**
|
|
141
|
+
* Send a command without waiting for any response.
|
|
142
|
+
*
|
|
143
|
+
* Useful for batching fire-and-forget setup commands in `beforeAll` where
|
|
144
|
+
* you only need to confirm the last one landed.
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* client.sendNoWait(`&_CG_STATUS ${player}=CHARGEN`);
|
|
148
|
+
* client.sendNoWait(`&_CG_METHOD ${player}=streetrat`);
|
|
149
|
+
* await client.command(`&_CG_ROLE ${player}=Solo`); // wait on last one
|
|
108
150
|
*/
|
|
109
|
-
|
|
151
|
+
sendNoWait(cmd: string): void;
|
|
110
152
|
/**
|
|
111
153
|
* Evaluate an expression or run a command and print the raw server output
|
|
112
154
|
* to stdout exactly as a MUSH client would receive it — ANSI colours,
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAQA,uDAAuD;AACvD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,MAAM,WAAW,kBAAkB;IAC/B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD,MAAM,WAAW,cAAc;IAC3B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,GAAE,kBAAuB;IAU5C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;OAGG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB9D;;;;;;;;;;OAUG;IACG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjE
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAQA,uDAAuD;AACvD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,MAAM,WAAW,cAAc;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAC/B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD,MAAM,WAAW,cAAc;IAC3B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,GAAE,kBAAuB;IAU5C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;OAGG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB9D;;;;;;;;;;OAUG;IACG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjE;;;;;;;;;;;;;;OAcG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQtF;;;;;;;;;;;;;;;OAeG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmCzE;;;;;;;;;;OAUG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB3E,4DAA4D;IAC5D,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI7C,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI9C,8CAA8C;IACxC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAanB,YAAY;YA8BZ,eAAe;YAgCf,eAAe;IAQ7B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,MAAM;CAGjB"}
|
package/dist/client.js
CHANGED
|
@@ -79,12 +79,84 @@ class RhostClient {
|
|
|
79
79
|
* Run a MUSHcode command and collect all output lines until the
|
|
80
80
|
* internal sentinel is received.
|
|
81
81
|
*
|
|
82
|
+
* The second argument can be a timeout number (legacy) or an options object.
|
|
83
|
+
* Use `settleMs` to override the global commandSettleMs for a single call —
|
|
84
|
+
* this lets you pay the settle cost only on commands that produce deferred
|
|
85
|
+
* output (e.g. `@force`) while non-deferred commands run at full speed.
|
|
86
|
+
*
|
|
82
87
|
* @example
|
|
83
88
|
* const lines = await client.command('look here');
|
|
84
89
|
* const lines = await client.command('@pemit me=hello');
|
|
90
|
+
* // Only pay settle cost on @force:
|
|
91
|
+
* await client.command(`@force ${player}=+cg/submit`, { settleMs: 300 });
|
|
92
|
+
*/
|
|
93
|
+
async command(cmd, timeoutOrOpts) {
|
|
94
|
+
const opts = typeof timeoutOrOpts === 'number'
|
|
95
|
+
? { timeout: timeoutOrOpts }
|
|
96
|
+
: (timeoutOrOpts ?? {});
|
|
97
|
+
const settleMs = opts.settleMs ?? this.commandSettleMs;
|
|
98
|
+
return this._collectCommand(cmd, this.doStripAnsi, opts.timeout, settleMs);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Evaluate N expressions in a single pipelined batch.
|
|
102
|
+
*
|
|
103
|
+
* All sends are issued before waiting for any response, eliminating the
|
|
104
|
+
* per-expression START-sentinel round trip. Results are returned in the
|
|
105
|
+
* same order as `expressions`.
|
|
106
|
+
*
|
|
107
|
+
* Use this instead of sequential `await client.eval()` calls whenever
|
|
108
|
+
* the expressions are independent of each other.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* const [cg, cgData] = await client.evalAll([
|
|
112
|
+
* 'search(name=Chargen <cg>)',
|
|
113
|
+
* 'search(name=Chargen Data <cg>)',
|
|
114
|
+
* ]);
|
|
115
|
+
*/
|
|
116
|
+
async evalAll(expressions, timeout) {
|
|
117
|
+
if (expressions.length === 0)
|
|
118
|
+
return [];
|
|
119
|
+
if (expressions.length === 1)
|
|
120
|
+
return [await this.eval(expressions[0], timeout)];
|
|
121
|
+
const ms = timeout ?? this.defaultTimeout;
|
|
122
|
+
const ids = expressions.map(() => this.makeId());
|
|
123
|
+
// Pipeline ALL sends before waiting for any response
|
|
124
|
+
for (let i = 0; i < expressions.length; i++) {
|
|
125
|
+
this.conn.send(`@pemit me=RHOST_EVAL_START_${ids[i]}`);
|
|
126
|
+
this.conn.send(`think ${expressions[i]}`);
|
|
127
|
+
this.conn.send(`@pemit me=RHOST_EVAL_END_${ids[i]}`);
|
|
128
|
+
}
|
|
129
|
+
// Read responses in order — they arrive in the same sequence MUSH processed them
|
|
130
|
+
const results = [];
|
|
131
|
+
for (let i = 0; i < expressions.length; i++) {
|
|
132
|
+
const startMarker = `RHOST_EVAL_START_${ids[i]}`;
|
|
133
|
+
const endMarker = `RHOST_EVAL_END_${ids[i]}`;
|
|
134
|
+
await this.readUntilMarker(startMarker, ms);
|
|
135
|
+
const resultLines = [];
|
|
136
|
+
while (true) {
|
|
137
|
+
const line = await this.conn.lines.next(ms);
|
|
138
|
+
const clean = this.doStripAnsi ? stripAnsi(line) : line;
|
|
139
|
+
if ((this.doStripAnsi ? clean : stripAnsi(line)).includes(endMarker))
|
|
140
|
+
break;
|
|
141
|
+
resultLines.push(clean);
|
|
142
|
+
}
|
|
143
|
+
results.push(resultLines.join('\n'));
|
|
144
|
+
}
|
|
145
|
+
return results;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Send a command without waiting for any response.
|
|
149
|
+
*
|
|
150
|
+
* Useful for batching fire-and-forget setup commands in `beforeAll` where
|
|
151
|
+
* you only need to confirm the last one landed.
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* client.sendNoWait(`&_CG_STATUS ${player}=CHARGEN`);
|
|
155
|
+
* client.sendNoWait(`&_CG_METHOD ${player}=streetrat`);
|
|
156
|
+
* await client.command(`&_CG_ROLE ${player}=Solo`); // wait on last one
|
|
85
157
|
*/
|
|
86
|
-
|
|
87
|
-
|
|
158
|
+
sendNoWait(cmd) {
|
|
159
|
+
this.conn.send(cmd);
|
|
88
160
|
}
|
|
89
161
|
/**
|
|
90
162
|
* Evaluate an expression or run a command and print the raw server output
|
|
@@ -167,13 +239,14 @@ class RhostClient {
|
|
|
167
239
|
}
|
|
168
240
|
return resultLines.join('\n');
|
|
169
241
|
}
|
|
170
|
-
async _collectCommand(cmd, strip, timeout) {
|
|
242
|
+
async _collectCommand(cmd, strip, timeout, settleMs) {
|
|
171
243
|
const id = this.makeId();
|
|
172
244
|
const endMarker = `RHOST_CMD_END_${id}`;
|
|
173
245
|
const ms = timeout ?? this.defaultTimeout;
|
|
246
|
+
const effectiveSettle = settleMs ?? this.commandSettleMs;
|
|
174
247
|
this.conn.send(cmd);
|
|
175
|
-
if (
|
|
176
|
-
await new Promise(r => setTimeout(r,
|
|
248
|
+
if (effectiveSettle > 0) {
|
|
249
|
+
await new Promise(r => setTimeout(r, effectiveSettle));
|
|
177
250
|
}
|
|
178
251
|
this.conn.send(`@pemit me=${endMarker}`);
|
|
179
252
|
const lines = [];
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AASA,8BAEC;AAXD,mCAAoC;AACpC,6CAA8C;AAE9C,oDAAoD;AACpD,yDAAyD;AACzD,gCAAgC;AAChC,MAAM,OAAO,GAAG,0DAA0D,CAAC;AAE3E,uDAAuD;AACvD,SAAgB,SAAS,CAAC,CAAS;IAC/B,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { RhostClient, RhostClientOptions, PreviewOptions, stripAnsi } from './client';
|
|
1
|
+
export { RhostClient, RhostClientOptions, CommandOptions, PreviewOptions, stripAnsi } from './client';
|
|
2
2
|
export { MushConnection } from './connection';
|
|
3
3
|
export { RhostContainer, ContainerConnectionInfo } from './container';
|
|
4
4
|
export { loadConfig, RhostConfig, CONFIG_FILENAME } from './config';
|
|
@@ -14,4 +14,6 @@ export { RhostBenchmark, runBench, formatBenchResults, BenchOptions, BenchmarkRe
|
|
|
14
14
|
export { deploy, parseDeployFile, snapshotObjects, restoreSnapshot, DeployCommand, DeploySnapshot, DeployOptions, DeployResult, } from './deployer';
|
|
15
15
|
export { SnapshotManager, SnapshotStats, SnapshotStatus, SnapshotCheckResult, formatSnapshotDiff } from './snapshots';
|
|
16
16
|
export { RhostWatcher, WatchOptions, discoverTestFiles } from './watcher';
|
|
17
|
+
export { parseDocument, parseDocumentFile, loadFiles, loadGlob, OfflineRunner, OfflineExpect, OfflineExpectError, } from './offline';
|
|
18
|
+
export type { OfflineDocument, OfflineAttr, OfflineExpectChain, OfflineTestContext, OfflineSuiteContext, OfflineRunOptions, OfflineRunResult, } from './offline';
|
|
17
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGtG,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGtE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGpE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG/F,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAGtG,OAAO,EACH,SAAS,EACT,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EACH,WAAW,EACX,aAAa,EACb,SAAS,EACT,WAAW,EACX,MAAM,EACN,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,UAAU,GACb,MAAM,UAAU,CAAC;AAGlB,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG5E,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG1G,OAAO,EACH,MAAM,EACN,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG1E,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,aAAa,EACb,aAAa,EACb,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.discoverTestFiles = exports.RhostWatcher = exports.formatSnapshotDiff = exports.SnapshotManager = exports.restoreSnapshot = exports.snapshotObjects = exports.parseDeployFile = exports.deploy = exports.formatBenchResults = exports.runBench = exports.RhostBenchmark = exports.format = exports.BUILTIN_FUNCTIONS = exports.compatibilityReport = exports.validateFile = exports.validate = exports.RhostRunner = exports.Reporter = exports.PreflightError = exports.assertConfigEquals = exports.assertFunctionMissing = exports.assertFunctionExists = exports.preflightCheck = exports.preflight = exports.WorldSideEffectError = exports.WorldSnapshot = exports.RhostWorld = exports.RhostExpectError = exports.RhostExpect = exports.isRhostError = exports.RhostAssertionError = exports.RhostAssert = exports.CONFIG_FILENAME = exports.loadConfig = exports.RhostContainer = exports.MushConnection = exports.stripAnsi = exports.RhostClient = void 0;
|
|
3
|
+
exports.OfflineExpectError = exports.OfflineExpect = exports.OfflineRunner = exports.loadGlob = exports.loadFiles = exports.parseDocumentFile = exports.parseDocument = exports.discoverTestFiles = exports.RhostWatcher = exports.formatSnapshotDiff = exports.SnapshotManager = exports.restoreSnapshot = exports.snapshotObjects = exports.parseDeployFile = exports.deploy = exports.formatBenchResults = exports.runBench = exports.RhostBenchmark = exports.format = exports.BUILTIN_FUNCTIONS = exports.compatibilityReport = exports.validateFile = exports.validate = exports.RhostRunner = exports.Reporter = exports.PreflightError = exports.assertConfigEquals = exports.assertFunctionMissing = exports.assertFunctionExists = exports.preflightCheck = exports.preflight = exports.WorldSideEffectError = exports.WorldSnapshot = exports.RhostWorld = exports.RhostExpectError = exports.RhostExpect = exports.isRhostError = exports.RhostAssertionError = exports.RhostAssert = exports.CONFIG_FILENAME = exports.loadConfig = exports.RhostContainer = exports.MushConnection = exports.stripAnsi = exports.RhostClient = void 0;
|
|
4
4
|
// Core client
|
|
5
5
|
var client_1 = require("./client");
|
|
6
6
|
Object.defineProperty(exports, "RhostClient", { enumerable: true, get: function () { return client_1.RhostClient; } });
|
|
@@ -71,4 +71,13 @@ Object.defineProperty(exports, "formatSnapshotDiff", { enumerable: true, get: fu
|
|
|
71
71
|
var watcher_1 = require("./watcher");
|
|
72
72
|
Object.defineProperty(exports, "RhostWatcher", { enumerable: true, get: function () { return watcher_1.RhostWatcher; } });
|
|
73
73
|
Object.defineProperty(exports, "discoverTestFiles", { enumerable: true, get: function () { return watcher_1.discoverTestFiles; } });
|
|
74
|
+
// Offline static analysis — no server required
|
|
75
|
+
var offline_1 = require("./offline");
|
|
76
|
+
Object.defineProperty(exports, "parseDocument", { enumerable: true, get: function () { return offline_1.parseDocument; } });
|
|
77
|
+
Object.defineProperty(exports, "parseDocumentFile", { enumerable: true, get: function () { return offline_1.parseDocumentFile; } });
|
|
78
|
+
Object.defineProperty(exports, "loadFiles", { enumerable: true, get: function () { return offline_1.loadFiles; } });
|
|
79
|
+
Object.defineProperty(exports, "loadGlob", { enumerable: true, get: function () { return offline_1.loadGlob; } });
|
|
80
|
+
Object.defineProperty(exports, "OfflineRunner", { enumerable: true, get: function () { return offline_1.OfflineRunner; } });
|
|
81
|
+
Object.defineProperty(exports, "OfflineExpect", { enumerable: true, get: function () { return offline_1.OfflineExpect; } });
|
|
82
|
+
Object.defineProperty(exports, "OfflineExpectError", { enumerable: true, get: function () { return offline_1.OfflineExpectError; } });
|
|
74
83
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACd,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACd,mCAAsG;AAA7F,qGAAA,WAAW,OAAA;AAAsD,mGAAA,SAAS,OAAA;AAEnF,aAAa;AACb,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAEvB,YAAY;AACZ,yCAAsE;AAA7D,2GAAA,cAAc,OAAA;AAEvB,SAAS;AACT,mCAAoE;AAA3D,oGAAA,UAAU,OAAA;AAAe,yGAAA,eAAe,OAAA;AAEjD,+BAA+B;AAC/B,2CAA+F;AAAtF,yGAAA,WAAW,OAAA;AAAE,iHAAA,mBAAmB,OAAA;AAAmB,0GAAA,YAAY,OAAA;AAExE,iBAAiB;AACjB,mCAAyD;AAAhD,qGAAA,WAAW,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAEtC,wBAAwB;AACxB,iCAAsG;AAA7F,mGAAA,UAAU,OAAA;AAAE,sGAAA,aAAa,OAAA;AAA8B,6GAAA,oBAAoB,OAAA;AAEpF,wBAAwB;AACxB,yCAUqB;AATjB,sGAAA,SAAS,OAAA;AACT,2GAAA,cAAc,OAAA;AACd,iHAAA,oBAAoB,OAAA;AACpB,kHAAA,qBAAqB,OAAA;AACrB,+GAAA,kBAAkB,OAAA;AAIlB,2GAAA,cAAc,OAAA;AAGlB,WAAW;AACX,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAEjB,iBAAiB;AACjB,mCAakB;AAZd,qGAAA,WAAW,OAAA;AAcf,6CAA6C;AAC7C,yCAYqB;AAXjB,qGAAA,QAAQ,OAAA;AACR,yGAAA,YAAY,OAAA;AACZ,gHAAA,mBAAmB,OAAA;AAKnB,8GAAA,iBAAiB,OAAA;AAMrB,qBAAqB;AACrB,mDAA4E;AAAnE,mGAAA,MAAM,OAAA;AAEf,iBAAiB;AACjB,yCAA0G;AAAjG,2GAAA,cAAc,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAErD,kBAAkB;AAClB,uCASoB;AARhB,kGAAA,MAAM,OAAA;AACN,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AAOnB,mBAAmB;AACnB,yCAAsH;AAA7G,4GAAA,eAAe,OAAA;AAAsD,+GAAA,kBAAkB,OAAA;AAEhG,aAAa;AACb,qCAA0E;AAAjE,uGAAA,YAAY,OAAA;AAAgB,4GAAA,iBAAiB,OAAA;AAEtD,+CAA+C;AAC/C,qCAQmB;AAPjB,wGAAA,aAAa,OAAA;AACb,4GAAA,iBAAiB,OAAA;AACjB,oGAAA,SAAS,OAAA;AACT,mGAAA,QAAQ,OAAA;AACR,wGAAA,aAAa,OAAA;AACb,wGAAA,aAAa,OAAA;AACb,6GAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { compatibilityReport } from '../validator';
|
|
2
|
+
import type { OfflineDocument } from './types';
|
|
3
|
+
export { compatibilityReport };
|
|
4
|
+
export declare function parseDocument(source: string, filename?: string): OfflineDocument;
|
|
5
|
+
export declare function parseDocumentFile(filePath: string): OfflineDocument;
|
|
6
|
+
export declare function loadFiles(filePaths: string[]): OfflineDocument[];
|
|
7
|
+
export declare function loadGlob(pattern: string, cwd?: string): OfflineDocument[];
|
|
8
|
+
//# sourceMappingURL=document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/offline/document.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,SAAS,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,CAAC;AA6B/B,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAa,GAAG,eAAe,CAOpF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAGnE;AAeD,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAEhE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,eAAe,EAAE,CAoBhF"}
|