@datamoc/mw_games 0.9.0-alpha → 0.9.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/CHANGELOG.md +71 -0
- package/README.md +4 -0
- package/dist/core/ActionJournal.d.ts +2 -0
- package/dist/core/ActionJournal.d.ts.map +1 -1
- package/dist/core/ActionJournal.js +6 -0
- package/dist/core/ActionJournal.js.map +1 -1
- package/dist/core/Multiplayer.d.ts +21 -4
- package/dist/core/Multiplayer.d.ts.map +1 -1
- package/dist/core/Multiplayer.js +31 -4
- package/dist/core/Multiplayer.js.map +1 -1
- package/dist/core/State.d.ts +38 -0
- package/dist/core/State.d.ts.map +1 -1
- package/dist/core/State.js +76 -0
- package/dist/core/State.js.map +1 -1
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/mw_games.global.js +113 -113
- package/dist/mwl/catalog.d.ts +7 -0
- package/dist/mwl/catalog.d.ts.map +1 -1
- package/dist/mwl/catalog.js +0 -0
- package/dist/mwl/catalog.js.map +1 -1
- package/dist/mwl/compiler.d.ts +3 -0
- package/dist/mwl/compiler.d.ts.map +1 -1
- package/dist/mwl/compiler.js +10 -3
- package/dist/mwl/compiler.js.map +1 -1
- package/dist/mwl/grammar.d.ts +8 -1
- package/dist/mwl/grammar.d.ts.map +1 -1
- package/dist/mwl/grammar.js +207 -39
- package/dist/mwl/grammar.js.map +1 -1
- package/dist/mwl/hooks.d.ts +35 -2
- package/dist/mwl/hooks.d.ts.map +1 -1
- package/dist/mwl/hooks.js +8 -6
- package/dist/mwl/hooks.js.map +1 -1
- package/dist/mwl/index.d.ts +6 -6
- package/dist/mwl/index.d.ts.map +1 -1
- package/dist/mwl/index.js +3 -3
- package/dist/mwl/index.js.map +1 -1
- package/dist/mwl/persistence.d.ts +18 -1
- package/dist/mwl/persistence.d.ts.map +1 -1
- package/dist/mwl/persistence.js +59 -3
- package/dist/mwl/persistence.js.map +1 -1
- package/dist/mwl/readers.d.ts +37 -0
- package/dist/mwl/readers.d.ts.map +1 -1
- package/dist/mwl/readers.js +69 -0
- package/dist/mwl/readers.js.map +1 -1
- package/dist/mwl/runtime.d.ts +45 -1
- package/dist/mwl/runtime.d.ts.map +1 -1
- package/dist/mwl/runtime.js +72 -8
- package/dist/mwl/runtime.js.map +1 -1
- package/dist/mwl/schema.d.ts +31 -0
- package/dist/mwl/schema.d.ts.map +1 -1
- package/dist/mwl/schema.js +57 -2
- package/dist/mwl/schema.js.map +1 -1
- package/dist/simulation/Runtime.d.ts +66 -1
- package/dist/simulation/Runtime.d.ts.map +1 -1
- package/dist/simulation/Runtime.js +131 -3
- package/dist/simulation/Runtime.js.map +1 -1
- package/dist/simulation/index.d.ts +2 -2
- package/dist/simulation/index.d.ts.map +1 -1
- package/dist/simulation/index.js +1 -1
- package/dist/simulation/index.js.map +1 -1
- package/dist/two-d/render/RpgmAutotile.d.ts +65 -0
- package/dist/two-d/render/RpgmAutotile.d.ts.map +1 -0
- package/dist/two-d/render/RpgmAutotile.js +110 -0
- package/dist/two-d/render/RpgmAutotile.js.map +1 -0
- package/dist/two-d/render/index.d.ts +2 -0
- package/dist/two-d/render/index.d.ts.map +1 -1
- package/dist/two-d/render/index.js +1 -0
- package/dist/two-d/render/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/tools/mwl.mjs +85 -4
package/dist/mwl/hooks.d.ts
CHANGED
|
@@ -8,7 +8,9 @@ import type { MwlValue } from './runtime.ts';
|
|
|
8
8
|
* `type:name`, resolved by the tooling, and bundled ahead of time; the runtime
|
|
9
9
|
* never evaluates JavaScript from content.
|
|
10
10
|
*/
|
|
11
|
-
export type
|
|
11
|
+
export type BuiltinHookType = 'predicate' | 'modifier' | 'generator' | 'command' | 'ai' | 'migration';
|
|
12
|
+
/** A built-in hook kind, or a domain kind declared by the game adapter. */
|
|
13
|
+
export type HookType = BuiltinHookType | (string & {});
|
|
12
14
|
/**
|
|
13
15
|
* The hook kinds MWL content may reference, in the order the documentation lists them.
|
|
14
16
|
*
|
|
@@ -44,6 +46,20 @@ export interface HookWorld {
|
|
|
44
46
|
readonly income: number;
|
|
45
47
|
}>>;
|
|
46
48
|
readonly turn: number;
|
|
49
|
+
/**
|
|
50
|
+
* A deterministic draw from the runtime's own seeded stream (`core.Generator`), so a
|
|
51
|
+
* `generator`/`ai`/domain hook that needs randomness never reaches for `Math.random()` and
|
|
52
|
+
* breaks save/replay determinism. Every draw advances the same stream the runtime persists.
|
|
53
|
+
*/
|
|
54
|
+
readonly random: HookRandom;
|
|
55
|
+
}
|
|
56
|
+
/** The minimal draw surface a hook needs; never the `Generator` instance itself, which also
|
|
57
|
+
* exposes state mutation a hook has no business performing. */
|
|
58
|
+
export interface HookRandom {
|
|
59
|
+
/** a float in [0, 1), with 32 bits of resolution */
|
|
60
|
+
float(): number;
|
|
61
|
+
/** an integer in [0, bound), without modulo bias */
|
|
62
|
+
int(bound: number): number;
|
|
47
63
|
}
|
|
48
64
|
/** What a hook may ask the engine to do. This is the whole command surface. */
|
|
49
65
|
export interface Emit {
|
|
@@ -67,6 +83,23 @@ export type GeneratorHook = (world: HookWorld, context: HookContext) => unknown;
|
|
|
67
83
|
export type CommandHook = (world: HookWorld, emit: Emit, context: HookContext) => void;
|
|
68
84
|
export type AiHook = (world: HookWorld, emit: Emit, context: HookContext) => void;
|
|
69
85
|
export type MigrationHook = (saved: unknown, context: HookContext) => unknown;
|
|
86
|
+
/**
|
|
87
|
+
* A game-owned hook. MWG transports and types the boundary, but does not know the domain
|
|
88
|
+
* context, input, output, or rules behind it.
|
|
89
|
+
*/
|
|
90
|
+
export type MwlDomainHook<Context = unknown, Input = unknown, Output = unknown> = (context: Context, input: Input) => Output;
|
|
91
|
+
/** A typed declaration for a domain hook namespace supplied by the game adapter. */
|
|
92
|
+
export interface MwlDomainHookDeclaration<Context = unknown, Input = unknown, Output = unknown> {
|
|
93
|
+
readonly id: `${string}:${string}`;
|
|
94
|
+
readonly run: MwlDomainHook<Context, Input, Output>;
|
|
95
|
+
}
|
|
96
|
+
/** The game-owned registry shape. The keys remain the MWL `type:name` references. */
|
|
97
|
+
export type MwlDomainHookRegistry<Context = unknown, Input = unknown, Output = unknown> = Readonly<Record<string, MwlDomainHook<Context, Input, Output>>>;
|
|
98
|
+
/** A game-owned hook state adapter. Its value must be JSON-serialisable. */
|
|
99
|
+
export interface MwlSaveableHookState {
|
|
100
|
+
readonly save: () => unknown;
|
|
101
|
+
readonly restore: (state: unknown) => void;
|
|
102
|
+
}
|
|
70
103
|
export interface HookTypeMap {
|
|
71
104
|
predicate: PredicateHook;
|
|
72
105
|
modifier: ModifierHook;
|
|
@@ -107,7 +140,7 @@ export declare function parseHookReference(value: string): {
|
|
|
107
140
|
* console.log(collectHookReferences(game).map((reference) => `${reference.type}:${reference.name}`));
|
|
108
141
|
* ```
|
|
109
142
|
*/
|
|
110
|
-
export declare function collectHookReferences(game: MwlCompiledGame): HookReference[];
|
|
143
|
+
export declare function collectHookReferences(game: MwlCompiledGame, hookAttributeNames?: readonly string[]): HookReference[];
|
|
111
144
|
/**
|
|
112
145
|
* What a hook says about the attributes its own `[hook]` calls carry. A hook's *name* is checked
|
|
113
146
|
* at compile time already; without this its attributes are not, so a typo in one of a
|
package/dist/mwl/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/mwl/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAiD,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACtH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/mwl/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/mwl/hooks.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { attributeTypeDescription, validAttributeValue } from './schema.js';
|
|
2
|
+
const hookNamePattern = /^[A-Za-z_][\w-]*$/;
|
|
2
3
|
/**
|
|
3
4
|
* The hook kinds MWL content may reference, in the order the documentation lists them.
|
|
4
5
|
*
|
|
@@ -27,12 +28,10 @@ export function parseHookReference(value) {
|
|
|
27
28
|
return null;
|
|
28
29
|
const type = value.slice(0, separator);
|
|
29
30
|
const name = value.slice(separator + 1).trim();
|
|
30
|
-
if (!
|
|
31
|
+
if (!hookNamePattern.test(type) || !hookNamePattern.test(name))
|
|
31
32
|
return null;
|
|
32
33
|
return { type, name };
|
|
33
34
|
}
|
|
34
|
-
/** Attributes whose value is a hook reference. */
|
|
35
|
-
const hookAttributes = new Set(['hook', 'migration']);
|
|
36
35
|
/**
|
|
37
36
|
* Every hook a compiled game references, deduplicated by `type:name` and
|
|
38
37
|
* ordered so the output is stable.
|
|
@@ -45,11 +44,12 @@ const hookAttributes = new Set(['hook', 'migration']);
|
|
|
45
44
|
* console.log(collectHookReferences(game).map((reference) => `${reference.type}:${reference.name}`));
|
|
46
45
|
* ```
|
|
47
46
|
*/
|
|
48
|
-
export function collectHookReferences(game) {
|
|
47
|
+
export function collectHookReferences(game, hookAttributeNames = ['hook', 'migration']) {
|
|
49
48
|
const found = new Map();
|
|
49
|
+
const attributes = new Set(hookAttributeNames);
|
|
50
50
|
const visit = (node) => {
|
|
51
51
|
for (const [key, value] of Object.entries(node.attributes)) {
|
|
52
|
-
if (
|
|
52
|
+
if (attributes.has(key))
|
|
53
53
|
add(value, node.location);
|
|
54
54
|
// A `[hook]` call carries its reference in `name`.
|
|
55
55
|
if (node.tag === 'hook' && key === 'name')
|
|
@@ -153,7 +153,9 @@ export function emitHooksDeclaration(references) {
|
|
|
153
153
|
lines.push('');
|
|
154
154
|
lines.push('export interface MwlHooks {');
|
|
155
155
|
for (const reference of references) {
|
|
156
|
-
const hookType =
|
|
156
|
+
const hookType = hookTypes.includes(reference.type)
|
|
157
|
+
? `${reference.type[0].toUpperCase()}${reference.type.slice(1)}Hook`
|
|
158
|
+
: 'MwlDomainHook';
|
|
157
159
|
lines.push(`\t'${reference.type}:${reference.name}': ${hookType};`);
|
|
158
160
|
}
|
|
159
161
|
lines.push('}');
|
package/dist/mwl/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/mwl/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAA4C,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/mwl/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/mwl/index.d.ts
CHANGED
|
@@ -2,14 +2,14 @@ export { MwlSyntaxError, isGettext, parse, parseValue, preprocess } from './gram
|
|
|
2
2
|
export type { MwlDiagnostic, MwlLocation, MwlNode, MwlPreprocessOptions } from './grammar.ts';
|
|
3
3
|
export { parseMapFile } from './MapFile.ts';
|
|
4
4
|
export type { MwlMapFile } from './MapFile.ts';
|
|
5
|
-
export { attributeTypeDescription, coerceTableValue, isMwlId, parseTableColumns, schema01, validAttributeValue, validate, } from './schema.ts';
|
|
5
|
+
export { attributeTypeDescription, coerceTableValue, isMwlId, MWL_SCHEMA_01, MWL_SCHEMA_10, parseTableColumns, schema01, schema10, validAttributeValue, validate, } from './schema.ts';
|
|
6
6
|
export type { MwlAttributeType, MwlTableColumn, MwlTagSchema, MwlValueType } from './schema.ts';
|
|
7
7
|
export { compile, compileAndEmitSources, compileNodes, compileSources, emitArtifacts, emitModule, extractCatalog, } from './compiler.ts';
|
|
8
8
|
export type { MwlArtifact, MwlCatalog, MwlCatalogOptions, MwlCompileOptions, MwlCompiledGame, MwlCompiledNode, MwlEmitOptions, MwlSourceFile, } from './compiler.ts';
|
|
9
9
|
export { collectHookReferences, emitHooksDeclaration, hookTypes, parseHookReference, validateHookAttributes, validateHookReferences, } from './hooks.ts';
|
|
10
|
-
export type { AiHook, CommandHook, Emit, GeneratorHook, HookContext, HookReference, HookType, HookTypeMap, HookWorld, MwlHookDeclaration, MigrationHook, ModifierHook, PredicateHook, } from './hooks.ts';
|
|
10
|
+
export type { AiHook, CommandHook, Emit, GeneratorHook, HookContext, HookRandom, HookReference, HookType, HookTypeMap, HookWorld, BuiltinHookType, MwlDomainHook, MwlDomainHookDeclaration, MwlDomainHookRegistry, MwlSaveableHookState, MwlHookDeclaration, MigrationHook, ModifierHook, PredicateHook, } from './hooks.ts';
|
|
11
11
|
export { createWorld, execute, MwlRuntime, parseTerrain, sideVisionGroups } from './runtime.ts';
|
|
12
|
-
export type { MwlCommand, MwlDialogueChoice, MwlHookRegistry, MwlMap, MwlMapStart, MwlMessage, MwlRuntimeOptions, MwlTraceEvent, MwlValue, MwlWorld, } from './runtime.ts';
|
|
12
|
+
export type { MwlCommand, MwlDialogueChoice, MwlHookRegistry, MwlMap, MwlMapStart, MwlMessage, MwlRuntimeOptions, MwlRuntimeAction, MwlTraceEvent, MwlValue, MwlWorld, } from './runtime.ts';
|
|
13
13
|
export { carryoverIntoScenario, endLevelCarryover, MWL_DEFAULT_CARRYOVER_PERCENTAGE } from './carryover.ts';
|
|
14
14
|
export type { MwlCarryover, MwlEndLevel, MwlSideRef } from './carryover.ts';
|
|
15
15
|
export { campaignChain } from './campaign.ts';
|
|
@@ -23,12 +23,12 @@ export { composeEffects, effectToModifier, inventoryItem, itemDefinition } from
|
|
|
23
23
|
export type { MwlActorItem, MwlEquipment } from './actors.ts';
|
|
24
24
|
export { validateCatalog, validateCatalogNodes } from './catalog.ts';
|
|
25
25
|
export type { MwlValidationOptions } from './catalog.ts';
|
|
26
|
-
export { decodeSave, encodeSave, validateWorld } from './persistence.ts';
|
|
26
|
+
export { decodeSave, decodeSaveEnvelope, encodeSave, validateWorld } from './persistence.ts';
|
|
27
27
|
export type { MwlMigration, MwlPersistenceOptions, MwlSaveEnvelope } from './persistence.ts';
|
|
28
28
|
export { contentReport, loadContent } from './report.ts';
|
|
29
29
|
export type { MwlContentDiagnostic, MwlContentLoadReport, MwlContentReport } from './report.ts';
|
|
30
|
-
export { readAttributes, readChildren } from './readers.ts';
|
|
31
|
-
export type { MwlFieldSpec, MwlReadResult, MwlReaderType } from './readers.ts';
|
|
30
|
+
export { readAttributes, readChildren, readTableIndex, readTableMap, tableKey } from './readers.ts';
|
|
31
|
+
export type { MwlFieldSpec, MwlReadResult, MwlReaderType, MwlTableKey, MwlTableKeyPart, MwlTableMapOptions, } from './readers.ts';
|
|
32
32
|
export { createExpressionScriptHost } from './scripts.ts';
|
|
33
33
|
export type { ScriptContext, ScriptEmit, ScriptHost, ScriptValue } from './scripts.ts';
|
|
34
34
|
export { evaluateCondition } from './conditions.ts';
|
package/dist/mwl/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mwl/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mwl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACN,wBAAwB,EACxB,gBAAgB,EAChB,OAAO,EACP,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,QAAQ,GACR,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EACN,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,UAAU,EACV,cAAc,GACd,MAAM,eAAe,CAAC;AACvB,YAAY,EACX,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,qBAAqB,EACrB,oBAAoB,EACpB,SAAS,EACT,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,GACtB,MAAM,YAAY,CAAC;AACpB,YAAY,EACX,MAAM,EACN,WAAW,EACX,IAAI,EACJ,aAAa,EACb,WAAW,EACX,UAAU,EACV,aAAa,EACb,QAAQ,EACR,WAAW,EACX,SAAS,EACT,eAAe,EACf,aAAa,EACb,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,aAAa,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChG,YAAY,EACX,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,MAAM,EACN,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,QAAQ,GACR,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAC5G,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3E,YAAY,EACX,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACtE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9F,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACrE,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7F,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACpG,YAAY,EACX,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAe,EACf,kBAAkB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/mwl/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { MwlSyntaxError, isGettext, parse, parseValue, preprocess } from './grammar.js';
|
|
2
2
|
export { parseMapFile } from './MapFile.js';
|
|
3
|
-
export { attributeTypeDescription, coerceTableValue, isMwlId, parseTableColumns, schema01, validAttributeValue, validate, } from './schema.js';
|
|
3
|
+
export { attributeTypeDescription, coerceTableValue, isMwlId, MWL_SCHEMA_01, MWL_SCHEMA_10, parseTableColumns, schema01, schema10, validAttributeValue, validate, } from './schema.js';
|
|
4
4
|
export { compile, compileAndEmitSources, compileNodes, compileSources, emitArtifacts, emitModule, extractCatalog, } from './compiler.js';
|
|
5
5
|
export { collectHookReferences, emitHooksDeclaration, hookTypes, parseHookReference, validateHookAttributes, validateHookReferences, } from './hooks.js';
|
|
6
6
|
export { createWorld, execute, MwlRuntime, parseTerrain, sideVisionGroups } from './runtime.js';
|
|
@@ -10,9 +10,9 @@ export { contentCatalog } from './content.js';
|
|
|
10
10
|
export { evaluateExpression, parseExpression } from './expression.js';
|
|
11
11
|
export { composeEffects, effectToModifier, inventoryItem, itemDefinition } from './actors.js';
|
|
12
12
|
export { validateCatalog, validateCatalogNodes } from './catalog.js';
|
|
13
|
-
export { decodeSave, encodeSave, validateWorld } from './persistence.js';
|
|
13
|
+
export { decodeSave, decodeSaveEnvelope, encodeSave, validateWorld } from './persistence.js';
|
|
14
14
|
export { contentReport, loadContent } from './report.js';
|
|
15
|
-
export { readAttributes, readChildren } from './readers.js';
|
|
15
|
+
export { readAttributes, readChildren, readTableIndex, readTableMap, tableKey } from './readers.js';
|
|
16
16
|
export { createExpressionScriptHost } from './scripts.js';
|
|
17
17
|
export { evaluateCondition } from './conditions.js';
|
|
18
18
|
//# sourceMappingURL=index.js.map
|
package/dist/mwl/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mwl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EACN,wBAAwB,EACxB,gBAAgB,EAChB,OAAO,EACP,iBAAiB,EACjB,QAAQ,EACR,mBAAmB,EACnB,QAAQ,GACR,MAAM,aAAa,CAAC;AAErB,OAAO,EACN,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,UAAU,EACV,cAAc,GACd,MAAM,eAAe,CAAC;AAWvB,OAAO,EACN,qBAAqB,EACrB,oBAAoB,EACpB,SAAS,EACT,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,GACtB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mwl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EACN,wBAAwB,EACxB,gBAAgB,EAChB,OAAO,EACP,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,QAAQ,GACR,MAAM,aAAa,CAAC;AAErB,OAAO,EACN,OAAO,EACP,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,UAAU,EACV,cAAc,GACd,MAAM,eAAe,CAAC;AAWvB,OAAO,EACN,qBAAqB,EACrB,oBAAoB,EACpB,SAAS,EACT,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,GACtB,MAAM,YAAY,CAAC;AAsBpB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAchG,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAE5G,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAc9C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7F,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AASpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import type { ActionJournalEntry } from '../core/ActionJournal.ts';
|
|
1
2
|
import type { MwlWorld } from './runtime.ts';
|
|
2
3
|
export interface MwlSaveEnvelope {
|
|
3
4
|
readonly format: 'mwl-save';
|
|
4
5
|
readonly version: number;
|
|
5
6
|
readonly world: MwlWorld;
|
|
7
|
+
/** Explicitly declared game-owned hook state, keyed by hook id. */
|
|
8
|
+
readonly hookState?: Readonly<Record<string, unknown>>;
|
|
9
|
+
/** Public runtime operations and trace batches, when saved by `MwlRuntime`. */
|
|
10
|
+
readonly journal?: readonly ActionJournalEntry<unknown, unknown>[];
|
|
6
11
|
}
|
|
7
12
|
export type MwlMigration = (world: MwlWorld) => MwlWorld;
|
|
8
13
|
export interface MwlPersistenceOptions {
|
|
@@ -20,7 +25,7 @@ export interface MwlPersistenceOptions {
|
|
|
20
25
|
* console.log(typeof snapshot); // 'string'
|
|
21
26
|
* ```
|
|
22
27
|
*/
|
|
23
|
-
export declare function encodeSave(world: MwlWorld, options: MwlPersistenceOptions): string;
|
|
28
|
+
export declare function encodeSave(world: MwlWorld, options: MwlPersistenceOptions, hookState?: Readonly<Record<string, unknown>>, journal?: readonly ActionJournalEntry<unknown, unknown>[]): string;
|
|
24
29
|
/**
|
|
25
30
|
* Restores a world from a snapshot, applying migrations up to `options.version`.
|
|
26
31
|
*
|
|
@@ -33,6 +38,18 @@ export declare function encodeSave(world: MwlWorld, options: MwlPersistenceOptio
|
|
|
33
38
|
* ```
|
|
34
39
|
*/
|
|
35
40
|
export declare function decodeSave(snapshot: string, options: MwlPersistenceOptions): MwlWorld;
|
|
41
|
+
/**
|
|
42
|
+
* Restores the complete save envelope, including declared game-owned hook state.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* import { createWorld, decodeSaveEnvelope, encodeSave } from '@datamoc/mw_games/mwl';
|
|
47
|
+
*
|
|
48
|
+
* const save = encodeSave(createWorld(), { version: 1 }, { 'item-effect:demo': { charges: 1 } });
|
|
49
|
+
* console.log(decodeSaveEnvelope(save, { version: 1 }).hookState?.['item-effect:demo']);
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function decodeSaveEnvelope(snapshot: string, options: MwlPersistenceOptions): MwlSaveEnvelope;
|
|
36
53
|
/**
|
|
37
54
|
* Checks a decoded value really is a world, and throws by name when it is not. Also rejects a
|
|
38
55
|
* `__proto__`/`constructor`/`prototype` key anywhere in the value (`assertNoForbiddenKeys`):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/mwl/persistence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/mwl/persistence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,mEAAmE;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;CACnE;AACD,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC;AACzD,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;CAC7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACzB,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,qBAAqB,EAC9B,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC7C,OAAO,CAAC,EAAE,SAAS,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GACvD,MAAM,CAWR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,QAAQ,CAErF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,eAAe,CAkBpG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAetD"}
|
package/dist/mwl/persistence.js
CHANGED
|
@@ -10,10 +10,17 @@ import { assertNoForbiddenKeys } from '../core/Sanitize.js';
|
|
|
10
10
|
* console.log(typeof snapshot); // 'string'
|
|
11
11
|
* ```
|
|
12
12
|
*/
|
|
13
|
-
export function encodeSave(world, options) {
|
|
13
|
+
export function encodeSave(world, options, hookState, journal) {
|
|
14
14
|
if (!Number.isInteger(options.version) || options.version < 1)
|
|
15
15
|
throw new Error('MWL save version must be a positive integer');
|
|
16
|
-
|
|
16
|
+
const envelope = {
|
|
17
|
+
format: 'mwl-save',
|
|
18
|
+
version: options.version,
|
|
19
|
+
world,
|
|
20
|
+
...(hookState === undefined ? {} : { hookState: cloneJsonObject(hookState) }),
|
|
21
|
+
...(journal === undefined ? {} : { journal: cloneJsonArray(journal) }),
|
|
22
|
+
};
|
|
23
|
+
return JSON.stringify(envelope);
|
|
17
24
|
}
|
|
18
25
|
/**
|
|
19
26
|
* Restores a world from a snapshot, applying migrations up to `options.version`.
|
|
@@ -27,6 +34,20 @@ export function encodeSave(world, options) {
|
|
|
27
34
|
* ```
|
|
28
35
|
*/
|
|
29
36
|
export function decodeSave(snapshot, options) {
|
|
37
|
+
return decodeSaveEnvelope(snapshot, options).world;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Restores the complete save envelope, including declared game-owned hook state.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* import { createWorld, decodeSaveEnvelope, encodeSave } from '@datamoc/mw_games/mwl';
|
|
45
|
+
*
|
|
46
|
+
* const save = encodeSave(createWorld(), { version: 1 }, { 'item-effect:demo': { charges: 1 } });
|
|
47
|
+
* console.log(decodeSaveEnvelope(save, { version: 1 }).hookState?.['item-effect:demo']);
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export function decodeSaveEnvelope(snapshot, options) {
|
|
30
51
|
const value = JSON.parse(snapshot);
|
|
31
52
|
const envelope = isEnvelope(value) ? value : { format: 'mwl-save', version: 1, world: value };
|
|
32
53
|
if (envelope.version > options.version)
|
|
@@ -38,7 +59,13 @@ export function decodeSave(snapshot, options) {
|
|
|
38
59
|
throw new Error(`missing MWL save migration to version ${version + 1}`);
|
|
39
60
|
world = validateWorld(migration(world));
|
|
40
61
|
}
|
|
41
|
-
return
|
|
62
|
+
return {
|
|
63
|
+
format: 'mwl-save',
|
|
64
|
+
version: options.version,
|
|
65
|
+
world,
|
|
66
|
+
...(envelope.hookState === undefined ? {} : { hookState: cloneJsonObject(envelope.hookState) }),
|
|
67
|
+
...(envelope.journal === undefined ? {} : { journal: cloneJsonArray(envelope.journal) }),
|
|
68
|
+
};
|
|
42
69
|
}
|
|
43
70
|
/**
|
|
44
71
|
* Checks a decoded value really is a world, and throws by name when it is not. Also rejects a
|
|
@@ -75,4 +102,33 @@ function isEnvelope(value) {
|
|
|
75
102
|
typeof value.version === 'number' &&
|
|
76
103
|
'world' in value);
|
|
77
104
|
}
|
|
105
|
+
function cloneJsonObject(value) {
|
|
106
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
107
|
+
throw new Error('invalid MWL hook state');
|
|
108
|
+
assertNoForbiddenKeys(value);
|
|
109
|
+
let encoded;
|
|
110
|
+
try {
|
|
111
|
+
encoded = JSON.stringify(value);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
throw new Error('MWL hook state must be JSON-serialisable');
|
|
115
|
+
}
|
|
116
|
+
const decoded = JSON.parse(encoded);
|
|
117
|
+
if (!decoded || typeof decoded !== 'object' || Array.isArray(decoded))
|
|
118
|
+
throw new Error('invalid MWL hook state');
|
|
119
|
+
return decoded;
|
|
120
|
+
}
|
|
121
|
+
function cloneJsonArray(value) {
|
|
122
|
+
try {
|
|
123
|
+
const encoded = JSON.stringify(value);
|
|
124
|
+
const decoded = JSON.parse(encoded);
|
|
125
|
+
if (!Array.isArray(decoded))
|
|
126
|
+
throw new Error();
|
|
127
|
+
assertNoForbiddenKeys(decoded);
|
|
128
|
+
return decoded;
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
throw new Error('MWL journal must be JSON-serialisable');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
78
134
|
//# sourceMappingURL=persistence.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/mwl/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/mwl/persistence.ts"],"names":[],"mappings":"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"}
|
package/dist/mwl/readers.d.ts
CHANGED
|
@@ -11,6 +11,16 @@ export interface MwlReadResult<T> {
|
|
|
11
11
|
readonly value: T;
|
|
12
12
|
readonly diagnostics: readonly MwlDiagnostic[];
|
|
13
13
|
}
|
|
14
|
+
export type MwlTableKeyPart = string | number | boolean | null;
|
|
15
|
+
export type MwlTableKey<Row extends Record<string, unknown>> = keyof Row | readonly (keyof Row)[] | ((row: Row) => MwlTableKeyPart | readonly MwlTableKeyPart[]);
|
|
16
|
+
export interface MwlTableMapOptions<Row extends Record<string, unknown>, Value = Row> {
|
|
17
|
+
/** one column, several columns for a composite key, or a complete key projection */
|
|
18
|
+
readonly key: MwlTableKey<Row>;
|
|
19
|
+
/** defaults to the complete row */
|
|
20
|
+
readonly value?: (row: Row) => Value;
|
|
21
|
+
/** duplicate keys fail by default; `last` is useful for deliberate override tables */
|
|
22
|
+
readonly duplicate?: 'error' | 'last';
|
|
23
|
+
}
|
|
14
24
|
/**
|
|
15
25
|
* Read a compiled node with one shared coercion and diagnostic policy.
|
|
16
26
|
*
|
|
@@ -37,4 +47,31 @@ export declare function readAttributes<T extends Record<string, unknown>>(node:
|
|
|
37
47
|
* ```
|
|
38
48
|
*/
|
|
39
49
|
export declare function readChildren<T>(node: MwlCompiledNode, tag: string, read: (child: MwlCompiledNode) => MwlReadResult<T>): MwlReadResult<readonly T[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Projects rows into a typed map. An array of column names is a native composite key and is
|
|
52
|
+
* encoded without collisions between strings, numbers, booleans, and null.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```ts
|
|
56
|
+
* import { readTableMap, tableKey } from '@datamoc/mw_games/mwl';
|
|
57
|
+
* const effects = [{ item: 'potion', effect: 'heal', amount: 5 }];
|
|
58
|
+
* const byEffect = readTableMap(effects, { key: ['item', 'effect'], value: (row) => row.amount });
|
|
59
|
+
* console.log(byEffect.get(tableKey('potion', 'heal'))); // 5
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function readTableMap<Row extends Record<string, unknown>, Value = Row>(rows: readonly Row[], options: MwlTableMapOptions<Row, Value>): Map<string, Value>;
|
|
63
|
+
/**
|
|
64
|
+
* Builds an inverse index, retaining every row that shares a projected key.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```ts
|
|
68
|
+
* import { readTableIndex, tableKey } from '@datamoc/mw_games/mwl';
|
|
69
|
+
* const rows = [{ item: 'potion', effect: 'heal' }, { item: 'herb', effect: 'heal' }];
|
|
70
|
+
* const byEffect = readTableIndex(rows, { key: 'effect' });
|
|
71
|
+
* console.log(byEffect.get(tableKey('heal'))?.length); // 2
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function readTableIndex<Row extends Record<string, unknown>>(rows: readonly Row[], options: Pick<MwlTableMapOptions<Row>, 'key'>): Map<string, Row[]>;
|
|
75
|
+
/** Returns the stable, collision-free representation used by table maps and indexes. */
|
|
76
|
+
export declare function tableKey(...parts: MwlTableKeyPart[]): string;
|
|
40
77
|
//# sourceMappingURL=readers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readers.d.ts","sourceRoot":"","sources":["../../src/mwl/readers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAE3G,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,WAAW,EAAE,SAAS,aAAa,EAAE,CAAC;CAC/C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,CAAC,GACtD,aAAa,CAAC,CAAC,CAAC,CAoBlB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC7B,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,aAAa,CAAC,CAAC,CAAC,GAChD,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAU7B"}
|
|
1
|
+
{"version":3,"file":"readers.d.ts","sourceRoot":"","sources":["../../src/mwl/readers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAE3G,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,WAAW,EAAE,SAAS,aAAa,EAAE,CAAC;CAC/C;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE/D,MAAM,MAAM,WAAW,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC1D,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,eAAe,GAAG,SAAS,eAAe,EAAE,CAAC,CAAC;AAEnG,MAAM,WAAW,kBAAkB,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,GAAG,GAAG;IACnF,oFAAoF;IACpF,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,KAAK,CAAC;IACrC,sFAAsF;IACtF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,CAAC,GACtD,aAAa,CAAC,CAAC,CAAC,CAoBlB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC7B,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,aAAa,CAAC,CAAC,CAAC,GAChD,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAU7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,GAAG,GAAG,EAC5E,IAAI,EAAE,SAAS,GAAG,EAAE,EACpB,OAAO,EAAE,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,GACrC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAQpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,IAAI,EAAE,SAAS,GAAG,EAAE,EACpB,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAC3C,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CASpB;AAED,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,CAE5D"}
|
package/dist/mwl/readers.js
CHANGED
|
@@ -56,6 +56,75 @@ export function readChildren(node, tag, read) {
|
|
|
56
56
|
}
|
|
57
57
|
return { value: values, diagnostics };
|
|
58
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Projects rows into a typed map. An array of column names is a native composite key and is
|
|
61
|
+
* encoded without collisions between strings, numbers, booleans, and null.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```ts
|
|
65
|
+
* import { readTableMap, tableKey } from '@datamoc/mw_games/mwl';
|
|
66
|
+
* const effects = [{ item: 'potion', effect: 'heal', amount: 5 }];
|
|
67
|
+
* const byEffect = readTableMap(effects, { key: ['item', 'effect'], value: (row) => row.amount });
|
|
68
|
+
* console.log(byEffect.get(tableKey('potion', 'heal'))); // 5
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export function readTableMap(rows, options) {
|
|
72
|
+
const result = new Map();
|
|
73
|
+
for (const row of rows) {
|
|
74
|
+
const key = tableKey(...resolveKey(row, options.key));
|
|
75
|
+
if (result.has(key) && options.duplicate !== 'last')
|
|
76
|
+
throw new Error(`duplicate table key: ${key}`);
|
|
77
|
+
result.set(key, options.value ? options.value(row) : row);
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Builds an inverse index, retaining every row that shares a projected key.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* import { readTableIndex, tableKey } from '@datamoc/mw_games/mwl';
|
|
87
|
+
* const rows = [{ item: 'potion', effect: 'heal' }, { item: 'herb', effect: 'heal' }];
|
|
88
|
+
* const byEffect = readTableIndex(rows, { key: 'effect' });
|
|
89
|
+
* console.log(byEffect.get(tableKey('heal'))?.length); // 2
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export function readTableIndex(rows, options) {
|
|
93
|
+
const result = new Map();
|
|
94
|
+
for (const row of rows) {
|
|
95
|
+
const key = tableKey(...resolveKey(row, options.key));
|
|
96
|
+
const bucket = result.get(key);
|
|
97
|
+
if (bucket)
|
|
98
|
+
bucket.push(row);
|
|
99
|
+
else
|
|
100
|
+
result.set(key, [row]);
|
|
101
|
+
}
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
/** Returns the stable, collision-free representation used by table maps and indexes. */
|
|
105
|
+
export function tableKey(...parts) {
|
|
106
|
+
return JSON.stringify(parts);
|
|
107
|
+
}
|
|
108
|
+
function resolveKey(row, key) {
|
|
109
|
+
if (typeof key === 'function') {
|
|
110
|
+
const value = key(row);
|
|
111
|
+
return isTableKeyParts(value) ? [...value] : [value];
|
|
112
|
+
}
|
|
113
|
+
if (isKeyColumns(key))
|
|
114
|
+
return key.map((column) => tablePart(row[column], String(column)));
|
|
115
|
+
return [tablePart(row[key], String(key))];
|
|
116
|
+
}
|
|
117
|
+
function isTableKeyParts(value) {
|
|
118
|
+
return Array.isArray(value);
|
|
119
|
+
}
|
|
120
|
+
function isKeyColumns(key) {
|
|
121
|
+
return Array.isArray(key);
|
|
122
|
+
}
|
|
123
|
+
function tablePart(value, column) {
|
|
124
|
+
if (value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean')
|
|
125
|
+
return value;
|
|
126
|
+
throw new TypeError(`table key column "${column}" must be a string, number, boolean, or null`);
|
|
127
|
+
}
|
|
59
128
|
function coerce(raw, type) {
|
|
60
129
|
if (type === 'string')
|
|
61
130
|
return raw;
|
package/dist/mwl/readers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readers.js","sourceRoot":"","sources":["../../src/mwl/readers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"readers.js","sourceRoot":"","sources":["../../src/mwl/readers.ts"],"names":[],"mappings":"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"}
|