@scrolled/nav-graph 0.1.1-dev.0fe9d51 → 0.1.1-dev.2a1f128
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/compile/compileGraph.d.ts.map +1 -1
- package/dist/compile/compileGraph.js +23 -0
- package/dist/compile/compileGraph.js.map +1 -1
- package/dist/dsl/builder.d.ts +18 -3
- package/dist/dsl/builder.d.ts.map +1 -1
- package/dist/dsl/builder.js +22 -2
- package/dist/dsl/builder.js.map +1 -1
- package/dist/dsl/index.d.ts +1 -1
- package/dist/dsl/index.d.ts.map +1 -1
- package/dist/dsl/index.js.map +1 -1
- package/dist/dsl/requirements.d.ts +2 -1
- package/dist/dsl/requirements.d.ts.map +1 -1
- package/dist/dsl/requirements.js +10 -2
- package/dist/dsl/requirements.js.map +1 -1
- package/dist/graphs/starter/index.d.ts.map +1 -1
- package/dist/graphs/starter/index.js +7 -4
- package/dist/graphs/starter/index.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/ir/schema.d.ts +45 -25
- package/dist/ir/schema.d.ts.map +1 -1
- package/dist/ir/schema.js +9 -4
- package/dist/ir/schema.js.map +1 -1
- package/dist/ir/types.d.ts +19 -1
- package/dist/ir/types.d.ts.map +1 -1
- package/dist/ir/types.js +1 -0
- package/dist/ir/types.js.map +1 -1
- package/dist/path/findPath.d.ts +6 -0
- package/dist/path/findPath.d.ts.map +1 -1
- package/dist/path/findPath.js +10 -3
- package/dist/path/findPath.js.map +1 -1
- package/dist/path/index.d.ts +3 -1
- package/dist/path/index.d.ts.map +1 -1
- package/dist/path/index.js +2 -1
- package/dist/path/index.js.map +1 -1
- package/dist/path/unlockables.d.ts +36 -0
- package/dist/path/unlockables.d.ts.map +1 -0
- package/dist/path/unlockables.js +62 -0
- package/dist/path/unlockables.js.map +1 -0
- package/package.json +26 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compileGraph.d.ts","sourceRoot":"","sources":["../../src/compile/compileGraph.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,cAAc,EACd,MAAM,EACN,UAAU,EACX,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;CAChE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"compileGraph.d.ts","sourceRoot":"","sources":["../../src/compile/compileGraph.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,cAAc,EACd,MAAM,EACN,UAAU,EACX,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;CAChE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAe7D"}
|
|
@@ -14,6 +14,7 @@ export function compileGraph(source) {
|
|
|
14
14
|
validateNodes(parsed.nodes);
|
|
15
15
|
validateGroups(parsed);
|
|
16
16
|
validateEdgeEndpoints(parsed);
|
|
17
|
+
validateNearestTowns(parsed);
|
|
17
18
|
const nodes = new Map(parsed.nodes.map((n) => [n.id, n]));
|
|
18
19
|
const groups = new Map((parsed.groups ?? []).map((g) => [g.id, g]));
|
|
19
20
|
const adjacency = buildAdjacency(parsed.nodes, parsed.edges);
|
|
@@ -71,6 +72,14 @@ function validateEdgeEndpoints(source) {
|
|
|
71
72
|
throw new Error(`Edge endpoint(s) reference undeclared nodes: ${[...missing].join(', ')}.`);
|
|
72
73
|
}
|
|
73
74
|
}
|
|
75
|
+
function validateNearestTowns(source) {
|
|
76
|
+
const known = new Set(source.nodes.map((n) => n.id));
|
|
77
|
+
for (const node of source.nodes) {
|
|
78
|
+
if (node.nearestTown && !known.has(node.nearestTown)) {
|
|
79
|
+
throw new Error(`Node "${node.id}" has nearestTown "${node.nearestTown}", which is not a declared node.`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
74
83
|
function buildAdjacency(nodes, edges) {
|
|
75
84
|
const adj = new Map();
|
|
76
85
|
for (const node of nodes)
|
|
@@ -85,6 +94,20 @@ function buildAdjacency(nodes, edges) {
|
|
|
85
94
|
adj.get(edge.to).push({ ...edge, from: edge.to, to: edge.from });
|
|
86
95
|
}
|
|
87
96
|
}
|
|
97
|
+
// Synthesize a one-way "return scroll" edge from each node to its nearest
|
|
98
|
+
// town. These live only in the adjacency (not source.edges), so they don't
|
|
99
|
+
// clutter the rendered graph; pathfinding gates them behind the traveller's
|
|
100
|
+
// nearestTownScroll option. Self-targets (the default) yield no edge.
|
|
101
|
+
for (const node of nodes) {
|
|
102
|
+
if (!node.nearestTown || node.nearestTown === node.id)
|
|
103
|
+
continue;
|
|
104
|
+
adj.get(node.id).push({
|
|
105
|
+
from: node.id,
|
|
106
|
+
to: node.nearestTown,
|
|
107
|
+
method: 'scroll',
|
|
108
|
+
via: 'Return to nearest town',
|
|
109
|
+
});
|
|
110
|
+
}
|
|
88
111
|
for (const [id, list] of adj)
|
|
89
112
|
adj.set(id, Object.freeze(list));
|
|
90
113
|
return adj;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compileGraph.js","sourceRoot":"","sources":["../../src/compile/compileGraph.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,oBAAoB;AACpB,8EAA8E;AAC9E,kFAAkF;AAClF,0EAA0E;AAC1E,+EAA+E;AAC/E,kBAAkB;AAClB,kEAAkE;AAClE,0DAA0D;AAU1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAepD,MAAM,UAAU,YAAY,CAAC,MAAsB;IACjD,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAElD,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,qBAAqB,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"compileGraph.js","sourceRoot":"","sources":["../../src/compile/compileGraph.ts"],"names":[],"mappings":"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"}
|
package/dist/dsl/builder.d.ts
CHANGED
|
@@ -15,6 +15,11 @@ export interface EdgeOpts {
|
|
|
15
15
|
*/
|
|
16
16
|
both?: boolean;
|
|
17
17
|
notes?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Hide this edge from the default map (pathfinding is unaffected; it still
|
|
20
|
+
* draws when it's on the computed route). For noisy or rarely-taken links.
|
|
21
|
+
*/
|
|
22
|
+
minor?: boolean;
|
|
18
23
|
}
|
|
19
24
|
/**
|
|
20
25
|
* Options for a timed edge. Only `walk` and `transport` (boats/trains/carpets)
|
|
@@ -46,10 +51,20 @@ export interface NodeHandle {
|
|
|
46
51
|
/** Escape hatch when none of the named verbs fit. `seconds` applies only if method is 'walk' or 'transport'. */
|
|
47
52
|
edgeTo(other: NodeHandle, method: TravelMethod, opts?: TimedEdgeOpts): void;
|
|
48
53
|
}
|
|
54
|
+
export interface NodeOpts {
|
|
55
|
+
group?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Where a "return to nearest town" scroll sends you from this node. Defaults
|
|
58
|
+
* to the node itself (scroll is a no-op); set it when the scroll routes
|
|
59
|
+
* elsewhere, e.g. a dungeon whose scroll drops you at its hub town. Pass the
|
|
60
|
+
* town's `NodeHandle` (its id is inferred) or its id string as a fallback —
|
|
61
|
+
* handy for forward references. Resolved at build(); the target need not be
|
|
62
|
+
* declared yet.
|
|
63
|
+
*/
|
|
64
|
+
nearestTown?: NodeHandle | string;
|
|
65
|
+
}
|
|
49
66
|
export interface RegionScope {
|
|
50
|
-
node(id: string, name: string, opts?:
|
|
51
|
-
group?: string;
|
|
52
|
-
}): NodeHandle;
|
|
67
|
+
node(id: string, name: string, opts?: NodeOpts): NodeHandle;
|
|
53
68
|
region(id: string, name: string, fn: (r: RegionScope) => void): void;
|
|
54
69
|
}
|
|
55
70
|
export interface GraphBuilder extends RegionScope {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/dsl/builder.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,UAAU,EAGV,cAAc,EACd,MAAM,EACN,WAAW,EAEX,YAAY,EACb,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,QAAQ;IACvB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,sEAAsE;IACtE,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,oEAAoE;IACpE,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/dsl/builder.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,UAAU,EAGV,cAAc,EACd,MAAM,EACN,WAAW,EAEX,YAAY,EACb,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,QAAQ;IACvB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,sEAAsE;IACtE,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,oEAAoE;IACpE,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACpD;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnD,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAChD,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACjD,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAClD,gHAAgH;IAChH,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CAC7E;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5D,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAAC;CACtE;AAED,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,gFAAgF;IAChF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AA8ND,wBAAgB,WAAW,CACzB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC3B,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,GAC5B,cAAc,CAIhB"}
|
package/dist/dsl/builder.js
CHANGED
|
@@ -37,8 +37,18 @@ class Builder {
|
|
|
37
37
|
const group = opts?.group
|
|
38
38
|
? asGroupId(opts.group)
|
|
39
39
|
: (this.groupStack[this.groupStack.length - 1] ?? undefined);
|
|
40
|
+
const nearestTown = opts?.nearestTown === undefined
|
|
41
|
+
? undefined
|
|
42
|
+
: typeof opts.nearestTown === 'string'
|
|
43
|
+
? asNodeId(opts.nearestTown)
|
|
44
|
+
: opts.nearestTown.id;
|
|
40
45
|
const decl = {
|
|
41
|
-
node: {
|
|
46
|
+
node: {
|
|
47
|
+
id: nodeId,
|
|
48
|
+
name,
|
|
49
|
+
...(group ? { group } : {}),
|
|
50
|
+
...(nearestTown ? { nearestTown } : {}),
|
|
51
|
+
},
|
|
42
52
|
declarationIndex: this.nodeDecls.length,
|
|
43
53
|
};
|
|
44
54
|
this.nodeDecls.push(decl);
|
|
@@ -73,6 +83,7 @@ class Builder {
|
|
|
73
83
|
this.validateNodes();
|
|
74
84
|
this.validateGroupRefs();
|
|
75
85
|
this.validateEdgeEndpoints();
|
|
86
|
+
this.validateNearestTowns();
|
|
76
87
|
const groups = [...this.groups.values()];
|
|
77
88
|
return {
|
|
78
89
|
profileId: this.profileId,
|
|
@@ -101,7 +112,7 @@ class Builder {
|
|
|
101
112
|
return handle;
|
|
102
113
|
}
|
|
103
114
|
pushEdge(from, to, opts) {
|
|
104
|
-
const { method, defaultBidirectional, both, cost, require, ref, via, seconds, notes } = opts;
|
|
115
|
+
const { method, defaultBidirectional, both, cost, require, ref, via, seconds, notes, minor } = opts;
|
|
105
116
|
const requirements = mergeRequirements(cost, require);
|
|
106
117
|
const bidirectional = both ?? defaultBidirectional;
|
|
107
118
|
const edge = {
|
|
@@ -114,6 +125,7 @@ class Builder {
|
|
|
114
125
|
...(requirements ? { requirements } : {}),
|
|
115
126
|
...(seconds !== undefined ? { seconds } : {}),
|
|
116
127
|
...(notes !== undefined ? { notes } : {}),
|
|
128
|
+
...(minor ? { minor: true } : {}),
|
|
117
129
|
};
|
|
118
130
|
this.edges.push(edge);
|
|
119
131
|
}
|
|
@@ -160,6 +172,14 @@ class Builder {
|
|
|
160
172
|
`Either declare the node with g.node(...) or remove the edge.`);
|
|
161
173
|
}
|
|
162
174
|
}
|
|
175
|
+
validateNearestTowns() {
|
|
176
|
+
const declared = new Set(this.nodeDecls.map((d) => d.node.id));
|
|
177
|
+
for (const { node } of this.nodeDecls) {
|
|
178
|
+
if (node.nearestTown && !declared.has(node.nearestTown)) {
|
|
179
|
+
throw new Error(`Node "${node.id}" has nearestTown "${node.nearestTown}", which is not a declared node.`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
163
183
|
}
|
|
164
184
|
function mergeRequirements(cost, require) {
|
|
165
185
|
if (!cost && !require)
|
package/dist/dsl/builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/dsl/builder.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,gFAAgF;AAChF,0EAA0E;AAC1E,EAAE;AACF,+EAA+E;AAC/E,yEAAyE;AACzE,4EAA4E;AAC5E,oEAAoE;AAapE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/dsl/builder.ts"],"names":[],"mappings":"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"}
|
package/dist/dsl/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { defineGraph } from './builder';
|
|
2
|
-
export type { EdgeOpts, GraphBuilder, NodeHandle, RegionScope, TimedEdgeOpts, } from './builder';
|
|
2
|
+
export type { EdgeOpts, GraphBuilder, NodeHandle, NodeOpts, RegionScope, TimedEdgeOpts, } from './builder';
|
|
3
3
|
export { item, level, meso, quest } from './requirements';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/dsl/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dsl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dsl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,WAAW,EACX,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/dsl/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dsl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dsl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AASxC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -3,7 +3,8 @@ export declare const meso: (amount: number) => Requirement;
|
|
|
3
3
|
export declare const item: (itemId: number, opts?: {
|
|
4
4
|
consumed?: boolean;
|
|
5
5
|
quantity?: number;
|
|
6
|
+
name?: string;
|
|
6
7
|
}) => Requirement;
|
|
7
|
-
export declare const quest: (questId: number) => Requirement;
|
|
8
|
+
export declare const quest: (questId: number, name?: string) => Requirement;
|
|
8
9
|
export declare const level: (min: number) => Requirement;
|
|
9
10
|
//# sourceMappingURL=requirements.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../src/dsl/requirements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../src/dsl/requirements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ/C,eAAO,MAAM,IAAI,GAAI,QAAQ,MAAM,KAAG,WAAyC,CAAC;AAEhF,eAAO,MAAM,IAAI,GACf,QAAQ,MAAM,EACd,OAAO;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAC9D,WAMD,CAAC;AAEH,eAAO,MAAM,KAAK,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,KAAG,WAIrD,CAAC;AAEH,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,KAAG,WAAuC,CAAC"}
|
package/dist/dsl/requirements.js
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
// Authoring sugar so a requirement list reads like prose:
|
|
2
|
-
// require: [item(4031746, { consumed: true }), level(30)]
|
|
2
|
+
// require: [item(4031746, { consumed: true, name: 'Warp Rock' }), level(30)]
|
|
3
|
+
//
|
|
4
|
+
// `name` on item/quest is the label the UI shows in place of the raw id; omit
|
|
5
|
+
// it and the UI falls back to "item #<id>" / "quest #<id>".
|
|
3
6
|
export const meso = (amount) => ({ kind: 'meso', amount });
|
|
4
7
|
export const item = (itemId, opts) => ({
|
|
5
8
|
kind: 'item',
|
|
6
9
|
itemId,
|
|
7
10
|
consumed: opts?.consumed ?? false,
|
|
8
11
|
...(opts?.quantity != null ? { quantity: opts.quantity } : {}),
|
|
12
|
+
...(opts?.name != null ? { name: opts.name } : {}),
|
|
13
|
+
});
|
|
14
|
+
export const quest = (questId, name) => ({
|
|
15
|
+
kind: 'quest',
|
|
16
|
+
questId,
|
|
17
|
+
...(name != null ? { name } : {}),
|
|
9
18
|
});
|
|
10
|
-
export const quest = (questId) => ({ kind: 'quest', questId });
|
|
11
19
|
export const level = (min) => ({ kind: 'level', min });
|
|
12
20
|
//# sourceMappingURL=requirements.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/dsl/requirements.ts"],"names":[],"mappings":"AAEA,0DAA0D;AAC1D,4DAA4D;AAE5D,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAc,EAAe,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAEhF,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,MAAc,EACd,
|
|
1
|
+
{"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/dsl/requirements.ts"],"names":[],"mappings":"AAEA,0DAA0D;AAC1D,+EAA+E;AAC/E,EAAE;AACF,8EAA8E;AAC9E,4DAA4D;AAE5D,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAc,EAAe,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAEhF,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,MAAc,EACd,IAA+D,EAClD,EAAE,CAAC,CAAC;IACjB,IAAI,EAAE,MAAM;IACZ,MAAM;IACN,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,KAAK;IACjC,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CACnD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,OAAe,EAAE,IAAa,EAAe,EAAE,CAAC,CAAC;IACrE,IAAI,EAAE,OAAO;IACb,OAAO;IACP,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAe,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graphs/starter/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,eAAO,MAAM,YAAY,EAAE,cA+
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graphs/starter/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,eAAO,MAAM,YAAY,EAAE,cA+DzB,CAAC"}
|
|
@@ -18,7 +18,9 @@ export const starterGraph = defineGraph({ profileId: 'starter-demo' }, (g) => {
|
|
|
18
18
|
});
|
|
19
19
|
g.region('coast', 'Eastern Coast', (r) => {
|
|
20
20
|
const harbour = r.node('harbour', 'Harbour Town');
|
|
21
|
-
const lighthouse = r.node('lighthouse', 'Lighthouse Point'
|
|
21
|
+
const lighthouse = r.node('lighthouse', 'Lighthouse Point', {
|
|
22
|
+
nearestTown: harbour,
|
|
23
|
+
});
|
|
22
24
|
harbour.walk(lighthouse, { seconds: 150 });
|
|
23
25
|
harbour.skillTo(lighthouse, {
|
|
24
26
|
via: 'Use the bridge-keeper teleport',
|
|
@@ -27,7 +29,7 @@ export const starterGraph = defineGraph({ profileId: 'starter-demo' }, (g) => {
|
|
|
27
29
|
});
|
|
28
30
|
g.region('mountain', 'Mountain Pass', (r) => {
|
|
29
31
|
const trailhead = r.node('trailhead', 'Trailhead');
|
|
30
|
-
const summit = r.node('summit', 'Summit Shrine');
|
|
32
|
+
const summit = r.node('summit', 'Summit Shrine', { nearestTown: 'riverside' });
|
|
31
33
|
trailhead.walk(summit, {
|
|
32
34
|
seconds: 300,
|
|
33
35
|
require: [level(20)],
|
|
@@ -39,7 +41,7 @@ export const starterGraph = defineGraph({ profileId: 'starter-demo' }, (g) => {
|
|
|
39
41
|
});
|
|
40
42
|
g.ref('harbour').itemTo(g.ref('lighthouse'), {
|
|
41
43
|
via: 'Use a Lighthouse Pass at the dock',
|
|
42
|
-
require: [item(2_000_001, { consumed: true })],
|
|
44
|
+
require: [item(2_000_001, { consumed: true, name: 'Lighthouse Pass' })],
|
|
43
45
|
});
|
|
44
46
|
g.ref('harbour').npcTo(g.ref('trailhead'), {
|
|
45
47
|
via: 'Take the mountain coach',
|
|
@@ -48,13 +50,14 @@ export const starterGraph = defineGraph({ profileId: 'starter-demo' }, (g) => {
|
|
|
48
50
|
});
|
|
49
51
|
g.ref('old-fort').npcTo(g.ref('summit'), {
|
|
50
52
|
via: 'Speak to the surveyor (after completing the survey)',
|
|
51
|
-
require: [quest(7_001)],
|
|
53
|
+
require: [quest(7_001, 'Summit Survey')],
|
|
52
54
|
ref: { questId: 7_001 },
|
|
53
55
|
});
|
|
54
56
|
g.ref('harbour').transportTo(g.ref('summit'), {
|
|
55
57
|
via: 'Board the summit ferry',
|
|
56
58
|
seconds: 480,
|
|
57
59
|
notes: 'A long ride — instant with a fast-travel ticket.',
|
|
60
|
+
minor: true,
|
|
58
61
|
});
|
|
59
62
|
});
|
|
60
63
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graphs/starter/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,yEAAyE;AAEzE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAGlE,MAAM,CAAC,MAAM,YAAY,GAAmB,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graphs/starter/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,14 +2,15 @@ export type { AreaNode, EntityRefs, GroupDef, GroupId, NavGraphSource, NodeId, R
|
|
|
2
2
|
export { TRAVEL_METHODS, asGroupId, asNodeId } from './ir/types';
|
|
3
3
|
export { navGraphSourceSchema } from './ir/schema';
|
|
4
4
|
export { defineGraph } from './dsl/builder';
|
|
5
|
-
export type { EdgeOpts, GraphBuilder, NodeHandle, RegionScope, TimedEdgeOpts, } from './dsl/builder';
|
|
5
|
+
export type { EdgeOpts, GraphBuilder, NodeHandle, NodeOpts, RegionScope, TimedEdgeOpts, } from './dsl/builder';
|
|
6
6
|
export { item, level, meso, quest } from './dsl/requirements';
|
|
7
7
|
export { compileGraph } from './compile/compileGraph';
|
|
8
8
|
export type { NavGraph } from './compile/compileGraph';
|
|
9
9
|
export { DEFAULT_TRANSPORT_SECONDS, DEFAULT_WALK_SECONDS, edgeSeconds, findPath, } from './path/findPath';
|
|
10
10
|
export { eligibilityFilter } from './path/eligibility';
|
|
11
|
-
export
|
|
11
|
+
export { collectUnlockables, isUnlockable, lockedRequirementsFilter, requirementEntityId, requirementKey, } from './path/unlockables';
|
|
12
|
+
export type { EdgeCostOptions, FindPathOptions, PathResult, UnlockableEntry, UnlockableKind, UnlockableRequirement, UserCapability, } from './path/index';
|
|
12
13
|
export { toJSON } from './json/toJSON';
|
|
13
14
|
export type { NavGraphJSON } from './json/toJSON';
|
|
14
|
-
export { DEFAULT_GRAPH_ID, GRAPHS, getGraph, listGraphIds
|
|
15
|
+
export { DEFAULT_GRAPH_ID, GRAPHS, getGraph, listGraphIds } from './graphs/index';
|
|
15
16
|
//# 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":"AAQA,YAAY,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,OAAO,EACP,cAAc,EACd,MAAM,EACN,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,WAAW,EACX,QAAQ,GACT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EACV,eAAe,EACf,eAAe,EACf,UAAU,EACV,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,YAAY,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,OAAO,EACP,cAAc,EACd,MAAM,EACN,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,WAAW,EACX,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,WAAW,EACX,QAAQ,GACT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,eAAe,EACf,eAAe,EACf,UAAU,EACV,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,8 +14,9 @@ export { compileGraph } from './compile/compileGraph';
|
|
|
14
14
|
// Pathfinding
|
|
15
15
|
export { DEFAULT_TRANSPORT_SECONDS, DEFAULT_WALK_SECONDS, edgeSeconds, findPath, } from './path/findPath';
|
|
16
16
|
export { eligibilityFilter } from './path/eligibility';
|
|
17
|
+
export { collectUnlockables, isUnlockable, lockedRequirementsFilter, requirementEntityId, requirementKey, } from './path/unlockables';
|
|
17
18
|
// Portability
|
|
18
19
|
export { toJSON } from './json/toJSON';
|
|
19
20
|
// Authored graphs registry (per-profile NavGraphSources). See src/graphs/README.md.
|
|
20
|
-
export { DEFAULT_GRAPH_ID, GRAPHS, getGraph, listGraphIds
|
|
21
|
+
export { DEFAULT_GRAPH_ID, GRAPHS, getGraph, listGraphIds } from './graphs/index';
|
|
21
22
|
//# 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,0CAA0C;AAC1C,EAAE;AACF,0EAA0E;AAC1E,6EAA6E;AAC7E,2EAA2E;AAC3E,8DAA8D;AAc9D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,gBAAgB;AAChB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,0EAA0E;AAC1E,6EAA6E;AAC7E,2EAA2E;AAC3E,8DAA8D;AAc9D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,gBAAgB;AAChB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAS5C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE9D,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,cAAc;AACd,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,WAAW,EACX,QAAQ,GACT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAW5B,cAAc;AACd,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC,oFAAoF;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/ir/schema.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import type { GroupId, NodeId, Requirement } from './types';
|
|
3
3
|
declare const nodeIdSchema: z.ZodEffects<z.ZodString, NodeId, string>;
|
|
4
4
|
declare const groupIdSchema: z.ZodEffects<z.ZodString, GroupId, string>;
|
|
5
|
-
declare const travelMethodSchema: z.ZodEnum<["walk", "transport", "portal", "npc", "item", "skill", "other"]>;
|
|
5
|
+
declare const travelMethodSchema: z.ZodEnum<["walk", "transport", "portal", "npc", "item", "skill", "scroll", "other"]>;
|
|
6
6
|
declare const requirementSchema: z.ZodType<Requirement>;
|
|
7
7
|
declare const entityRefsSchema: z.ZodObject<{
|
|
8
8
|
itemId: z.ZodOptional<z.ZodNumber>;
|
|
@@ -21,22 +21,25 @@ declare const areaNodeSchema: z.ZodObject<{
|
|
|
21
21
|
id: z.ZodEffects<z.ZodString, NodeId, string>;
|
|
22
22
|
name: z.ZodString;
|
|
23
23
|
group: z.ZodOptional<z.ZodEffects<z.ZodString, GroupId, string>>;
|
|
24
|
+
nearestTown: z.ZodOptional<z.ZodEffects<z.ZodString, NodeId, string>>;
|
|
24
25
|
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
name: string;
|
|
25
27
|
id: string & {
|
|
26
28
|
readonly __brand: "NodeId";
|
|
27
29
|
};
|
|
28
|
-
name: string;
|
|
29
30
|
group?: GroupId | undefined;
|
|
31
|
+
nearestTown?: NodeId | undefined;
|
|
30
32
|
}, {
|
|
31
|
-
id: string;
|
|
32
33
|
name: string;
|
|
34
|
+
id: string;
|
|
33
35
|
group?: string | undefined;
|
|
36
|
+
nearestTown?: string | undefined;
|
|
34
37
|
}>;
|
|
35
38
|
declare const travelEdgeSchema: z.ZodEffects<z.ZodObject<{
|
|
36
39
|
from: z.ZodEffects<z.ZodString, NodeId, string>;
|
|
37
40
|
to: z.ZodEffects<z.ZodString, NodeId, string>;
|
|
38
41
|
bidirectional: z.ZodOptional<z.ZodBoolean>;
|
|
39
|
-
method: z.ZodEnum<["walk", "transport", "portal", "npc", "item", "skill", "other"]>;
|
|
42
|
+
method: z.ZodEnum<["walk", "transport", "portal", "npc", "item", "skill", "scroll", "other"]>;
|
|
40
43
|
via: z.ZodOptional<z.ZodString>;
|
|
41
44
|
refs: z.ZodOptional<z.ZodObject<{
|
|
42
45
|
itemId: z.ZodOptional<z.ZodNumber>;
|
|
@@ -54,6 +57,7 @@ declare const travelEdgeSchema: z.ZodEffects<z.ZodObject<{
|
|
|
54
57
|
requirements: z.ZodOptional<z.ZodArray<z.ZodType<Requirement, z.ZodTypeDef, Requirement>, "many">>;
|
|
55
58
|
seconds: z.ZodOptional<z.ZodNumber>;
|
|
56
59
|
notes: z.ZodOptional<z.ZodString>;
|
|
60
|
+
minor: z.ZodOptional<z.ZodBoolean>;
|
|
57
61
|
}, "strip", z.ZodTypeAny, {
|
|
58
62
|
from: string & {
|
|
59
63
|
readonly __brand: "NodeId";
|
|
@@ -61,7 +65,7 @@ declare const travelEdgeSchema: z.ZodEffects<z.ZodObject<{
|
|
|
61
65
|
to: string & {
|
|
62
66
|
readonly __brand: "NodeId";
|
|
63
67
|
};
|
|
64
|
-
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "other";
|
|
68
|
+
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "scroll" | "other";
|
|
65
69
|
bidirectional?: boolean | undefined;
|
|
66
70
|
via?: string | undefined;
|
|
67
71
|
refs?: {
|
|
@@ -72,10 +76,11 @@ declare const travelEdgeSchema: z.ZodEffects<z.ZodObject<{
|
|
|
72
76
|
requirements?: Requirement[] | undefined;
|
|
73
77
|
seconds?: number | undefined;
|
|
74
78
|
notes?: string | undefined;
|
|
79
|
+
minor?: boolean | undefined;
|
|
75
80
|
}, {
|
|
76
81
|
from: string;
|
|
77
82
|
to: string;
|
|
78
|
-
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "other";
|
|
83
|
+
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "scroll" | "other";
|
|
79
84
|
bidirectional?: boolean | undefined;
|
|
80
85
|
via?: string | undefined;
|
|
81
86
|
refs?: {
|
|
@@ -86,6 +91,7 @@ declare const travelEdgeSchema: z.ZodEffects<z.ZodObject<{
|
|
|
86
91
|
requirements?: Requirement[] | undefined;
|
|
87
92
|
seconds?: number | undefined;
|
|
88
93
|
notes?: string | undefined;
|
|
94
|
+
minor?: boolean | undefined;
|
|
89
95
|
}>, {
|
|
90
96
|
from: string & {
|
|
91
97
|
readonly __brand: "NodeId";
|
|
@@ -93,7 +99,7 @@ declare const travelEdgeSchema: z.ZodEffects<z.ZodObject<{
|
|
|
93
99
|
to: string & {
|
|
94
100
|
readonly __brand: "NodeId";
|
|
95
101
|
};
|
|
96
|
-
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "other";
|
|
102
|
+
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "scroll" | "other";
|
|
97
103
|
bidirectional?: boolean | undefined;
|
|
98
104
|
via?: string | undefined;
|
|
99
105
|
refs?: {
|
|
@@ -104,10 +110,11 @@ declare const travelEdgeSchema: z.ZodEffects<z.ZodObject<{
|
|
|
104
110
|
requirements?: Requirement[] | undefined;
|
|
105
111
|
seconds?: number | undefined;
|
|
106
112
|
notes?: string | undefined;
|
|
113
|
+
minor?: boolean | undefined;
|
|
107
114
|
}, {
|
|
108
115
|
from: string;
|
|
109
116
|
to: string;
|
|
110
|
-
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "other";
|
|
117
|
+
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "scroll" | "other";
|
|
111
118
|
bidirectional?: boolean | undefined;
|
|
112
119
|
via?: string | undefined;
|
|
113
120
|
refs?: {
|
|
@@ -118,18 +125,19 @@ declare const travelEdgeSchema: z.ZodEffects<z.ZodObject<{
|
|
|
118
125
|
requirements?: Requirement[] | undefined;
|
|
119
126
|
seconds?: number | undefined;
|
|
120
127
|
notes?: string | undefined;
|
|
128
|
+
minor?: boolean | undefined;
|
|
121
129
|
}>;
|
|
122
130
|
declare const groupDefSchema: z.ZodObject<{
|
|
123
131
|
id: z.ZodEffects<z.ZodString, GroupId, string>;
|
|
124
132
|
name: z.ZodString;
|
|
125
133
|
}, "strip", z.ZodTypeAny, {
|
|
134
|
+
name: string;
|
|
126
135
|
id: string & {
|
|
127
136
|
readonly __brand: "GroupId";
|
|
128
137
|
};
|
|
129
|
-
name: string;
|
|
130
138
|
}, {
|
|
131
|
-
id: string;
|
|
132
139
|
name: string;
|
|
140
|
+
id: string;
|
|
133
141
|
}>;
|
|
134
142
|
export declare const navGraphSourceSchema: z.ZodObject<{
|
|
135
143
|
profileId: z.ZodString;
|
|
@@ -137,22 +145,25 @@ export declare const navGraphSourceSchema: z.ZodObject<{
|
|
|
137
145
|
id: z.ZodEffects<z.ZodString, NodeId, string>;
|
|
138
146
|
name: z.ZodString;
|
|
139
147
|
group: z.ZodOptional<z.ZodEffects<z.ZodString, GroupId, string>>;
|
|
148
|
+
nearestTown: z.ZodOptional<z.ZodEffects<z.ZodString, NodeId, string>>;
|
|
140
149
|
}, "strip", z.ZodTypeAny, {
|
|
150
|
+
name: string;
|
|
141
151
|
id: string & {
|
|
142
152
|
readonly __brand: "NodeId";
|
|
143
153
|
};
|
|
144
|
-
name: string;
|
|
145
154
|
group?: GroupId | undefined;
|
|
155
|
+
nearestTown?: NodeId | undefined;
|
|
146
156
|
}, {
|
|
147
|
-
id: string;
|
|
148
157
|
name: string;
|
|
158
|
+
id: string;
|
|
149
159
|
group?: string | undefined;
|
|
160
|
+
nearestTown?: string | undefined;
|
|
150
161
|
}>, "many">;
|
|
151
162
|
edges: z.ZodArray<z.ZodEffects<z.ZodObject<{
|
|
152
163
|
from: z.ZodEffects<z.ZodString, NodeId, string>;
|
|
153
164
|
to: z.ZodEffects<z.ZodString, NodeId, string>;
|
|
154
165
|
bidirectional: z.ZodOptional<z.ZodBoolean>;
|
|
155
|
-
method: z.ZodEnum<["walk", "transport", "portal", "npc", "item", "skill", "other"]>;
|
|
166
|
+
method: z.ZodEnum<["walk", "transport", "portal", "npc", "item", "skill", "scroll", "other"]>;
|
|
156
167
|
via: z.ZodOptional<z.ZodString>;
|
|
157
168
|
refs: z.ZodOptional<z.ZodObject<{
|
|
158
169
|
itemId: z.ZodOptional<z.ZodNumber>;
|
|
@@ -170,6 +181,7 @@ export declare const navGraphSourceSchema: z.ZodObject<{
|
|
|
170
181
|
requirements: z.ZodOptional<z.ZodArray<z.ZodType<Requirement, z.ZodTypeDef, Requirement>, "many">>;
|
|
171
182
|
seconds: z.ZodOptional<z.ZodNumber>;
|
|
172
183
|
notes: z.ZodOptional<z.ZodString>;
|
|
184
|
+
minor: z.ZodOptional<z.ZodBoolean>;
|
|
173
185
|
}, "strip", z.ZodTypeAny, {
|
|
174
186
|
from: string & {
|
|
175
187
|
readonly __brand: "NodeId";
|
|
@@ -177,7 +189,7 @@ export declare const navGraphSourceSchema: z.ZodObject<{
|
|
|
177
189
|
to: string & {
|
|
178
190
|
readonly __brand: "NodeId";
|
|
179
191
|
};
|
|
180
|
-
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "other";
|
|
192
|
+
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "scroll" | "other";
|
|
181
193
|
bidirectional?: boolean | undefined;
|
|
182
194
|
via?: string | undefined;
|
|
183
195
|
refs?: {
|
|
@@ -188,10 +200,11 @@ export declare const navGraphSourceSchema: z.ZodObject<{
|
|
|
188
200
|
requirements?: Requirement[] | undefined;
|
|
189
201
|
seconds?: number | undefined;
|
|
190
202
|
notes?: string | undefined;
|
|
203
|
+
minor?: boolean | undefined;
|
|
191
204
|
}, {
|
|
192
205
|
from: string;
|
|
193
206
|
to: string;
|
|
194
|
-
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "other";
|
|
207
|
+
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "scroll" | "other";
|
|
195
208
|
bidirectional?: boolean | undefined;
|
|
196
209
|
via?: string | undefined;
|
|
197
210
|
refs?: {
|
|
@@ -202,6 +215,7 @@ export declare const navGraphSourceSchema: z.ZodObject<{
|
|
|
202
215
|
requirements?: Requirement[] | undefined;
|
|
203
216
|
seconds?: number | undefined;
|
|
204
217
|
notes?: string | undefined;
|
|
218
|
+
minor?: boolean | undefined;
|
|
205
219
|
}>, {
|
|
206
220
|
from: string & {
|
|
207
221
|
readonly __brand: "NodeId";
|
|
@@ -209,7 +223,7 @@ export declare const navGraphSourceSchema: z.ZodObject<{
|
|
|
209
223
|
to: string & {
|
|
210
224
|
readonly __brand: "NodeId";
|
|
211
225
|
};
|
|
212
|
-
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "other";
|
|
226
|
+
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "scroll" | "other";
|
|
213
227
|
bidirectional?: boolean | undefined;
|
|
214
228
|
via?: string | undefined;
|
|
215
229
|
refs?: {
|
|
@@ -220,10 +234,11 @@ export declare const navGraphSourceSchema: z.ZodObject<{
|
|
|
220
234
|
requirements?: Requirement[] | undefined;
|
|
221
235
|
seconds?: number | undefined;
|
|
222
236
|
notes?: string | undefined;
|
|
237
|
+
minor?: boolean | undefined;
|
|
223
238
|
}, {
|
|
224
239
|
from: string;
|
|
225
240
|
to: string;
|
|
226
|
-
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "other";
|
|
241
|
+
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "scroll" | "other";
|
|
227
242
|
bidirectional?: boolean | undefined;
|
|
228
243
|
via?: string | undefined;
|
|
229
244
|
refs?: {
|
|
@@ -234,27 +249,29 @@ export declare const navGraphSourceSchema: z.ZodObject<{
|
|
|
234
249
|
requirements?: Requirement[] | undefined;
|
|
235
250
|
seconds?: number | undefined;
|
|
236
251
|
notes?: string | undefined;
|
|
252
|
+
minor?: boolean | undefined;
|
|
237
253
|
}>, "many">;
|
|
238
254
|
groups: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
239
255
|
id: z.ZodEffects<z.ZodString, GroupId, string>;
|
|
240
256
|
name: z.ZodString;
|
|
241
257
|
}, "strip", z.ZodTypeAny, {
|
|
258
|
+
name: string;
|
|
242
259
|
id: string & {
|
|
243
260
|
readonly __brand: "GroupId";
|
|
244
261
|
};
|
|
245
|
-
name: string;
|
|
246
262
|
}, {
|
|
247
|
-
id: string;
|
|
248
263
|
name: string;
|
|
264
|
+
id: string;
|
|
249
265
|
}>, "many">>;
|
|
250
266
|
}, "strip", z.ZodTypeAny, {
|
|
251
267
|
profileId: string;
|
|
252
268
|
nodes: {
|
|
269
|
+
name: string;
|
|
253
270
|
id: string & {
|
|
254
271
|
readonly __brand: "NodeId";
|
|
255
272
|
};
|
|
256
|
-
name: string;
|
|
257
273
|
group?: GroupId | undefined;
|
|
274
|
+
nearestTown?: NodeId | undefined;
|
|
258
275
|
}[];
|
|
259
276
|
edges: {
|
|
260
277
|
from: string & {
|
|
@@ -263,7 +280,7 @@ export declare const navGraphSourceSchema: z.ZodObject<{
|
|
|
263
280
|
to: string & {
|
|
264
281
|
readonly __brand: "NodeId";
|
|
265
282
|
};
|
|
266
|
-
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "other";
|
|
283
|
+
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "scroll" | "other";
|
|
267
284
|
bidirectional?: boolean | undefined;
|
|
268
285
|
via?: string | undefined;
|
|
269
286
|
refs?: {
|
|
@@ -274,24 +291,26 @@ export declare const navGraphSourceSchema: z.ZodObject<{
|
|
|
274
291
|
requirements?: Requirement[] | undefined;
|
|
275
292
|
seconds?: number | undefined;
|
|
276
293
|
notes?: string | undefined;
|
|
294
|
+
minor?: boolean | undefined;
|
|
277
295
|
}[];
|
|
278
296
|
groups?: {
|
|
297
|
+
name: string;
|
|
279
298
|
id: string & {
|
|
280
299
|
readonly __brand: "GroupId";
|
|
281
300
|
};
|
|
282
|
-
name: string;
|
|
283
301
|
}[] | undefined;
|
|
284
302
|
}, {
|
|
285
303
|
profileId: string;
|
|
286
304
|
nodes: {
|
|
287
|
-
id: string;
|
|
288
305
|
name: string;
|
|
306
|
+
id: string;
|
|
289
307
|
group?: string | undefined;
|
|
308
|
+
nearestTown?: string | undefined;
|
|
290
309
|
}[];
|
|
291
310
|
edges: {
|
|
292
311
|
from: string;
|
|
293
312
|
to: string;
|
|
294
|
-
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "other";
|
|
313
|
+
method: "walk" | "transport" | "portal" | "npc" | "item" | "skill" | "scroll" | "other";
|
|
295
314
|
bidirectional?: boolean | undefined;
|
|
296
315
|
via?: string | undefined;
|
|
297
316
|
refs?: {
|
|
@@ -302,10 +321,11 @@ export declare const navGraphSourceSchema: z.ZodObject<{
|
|
|
302
321
|
requirements?: Requirement[] | undefined;
|
|
303
322
|
seconds?: number | undefined;
|
|
304
323
|
notes?: string | undefined;
|
|
324
|
+
minor?: boolean | undefined;
|
|
305
325
|
}[];
|
|
306
326
|
groups?: {
|
|
307
|
-
id: string;
|
|
308
327
|
name: string;
|
|
328
|
+
id: string;
|
|
309
329
|
}[] | undefined;
|
|
310
330
|
}>;
|
|
311
331
|
export { areaNodeSchema, entityRefsSchema, groupDefSchema, groupIdSchema, nodeIdSchema, requirementSchema, travelEdgeSchema, travelMethodSchema, };
|
package/dist/ir/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/ir/schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG5D,QAAA,MAAM,YAAY,2CAIc,CAAC;AAEjC,QAAA,MAAM,aAAa,4CAIc,CAAC;AAElC,QAAA,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/ir/schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG5D,QAAA,MAAM,YAAY,2CAIc,CAAC;AAEjC,QAAA,MAAM,aAAa,4CAIc,CAAC;AAElC,QAAA,MAAM,kBAAkB,uFAAyB,CAAC;AAElD,QAAA,MAAM,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAe5C,CAAC;AAEH,QAAA,MAAM,gBAAgB;;;;;;;;;;;;EAIpB,CAAC;AAEH,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;EAKlB,CAAC;AAEH,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBlB,CAAC;AAEL,QAAA,MAAM,cAAc;;;;;;;;;;;EAGlB,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK/B,CAAC;AAEH,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,CAAC"}
|
package/dist/ir/schema.js
CHANGED
|
@@ -21,8 +21,13 @@ const requirementSchema = z.discriminatedUnion('kind', [
|
|
|
21
21
|
itemId: z.number().int().positive(),
|
|
22
22
|
consumed: z.boolean(),
|
|
23
23
|
quantity: z.number().int().positive().optional(),
|
|
24
|
+
name: z.string().min(1).optional(),
|
|
25
|
+
}),
|
|
26
|
+
z.object({
|
|
27
|
+
kind: z.literal('quest'),
|
|
28
|
+
questId: z.number().int().positive(),
|
|
29
|
+
name: z.string().min(1).optional(),
|
|
24
30
|
}),
|
|
25
|
-
z.object({ kind: z.literal('quest'), questId: z.number().int().positive() }),
|
|
26
31
|
z.object({ kind: z.literal('level'), min: z.number().int().min(1).max(300) }),
|
|
27
32
|
]);
|
|
28
33
|
const entityRefsSchema = z.object({
|
|
@@ -34,6 +39,7 @@ const areaNodeSchema = z.object({
|
|
|
34
39
|
id: nodeIdSchema,
|
|
35
40
|
name: z.string().min(1),
|
|
36
41
|
group: groupIdSchema.optional(),
|
|
42
|
+
nearestTown: nodeIdSchema.optional(),
|
|
37
43
|
});
|
|
38
44
|
const travelEdgeSchema = z
|
|
39
45
|
.object({
|
|
@@ -46,11 +52,10 @@ const travelEdgeSchema = z
|
|
|
46
52
|
requirements: z.array(requirementSchema).optional(),
|
|
47
53
|
seconds: z.number().positive().optional(),
|
|
48
54
|
notes: z.string().optional(),
|
|
55
|
+
minor: z.boolean().optional(),
|
|
49
56
|
})
|
|
50
57
|
.superRefine((edge, ctx) => {
|
|
51
|
-
if (edge.seconds !== undefined &&
|
|
52
|
-
edge.method !== 'walk' &&
|
|
53
|
-
edge.method !== 'transport') {
|
|
58
|
+
if (edge.seconds !== undefined && edge.method !== 'walk' && edge.method !== 'transport') {
|
|
54
59
|
ctx.addIssue({
|
|
55
60
|
code: z.ZodIssueCode.custom,
|
|
56
61
|
path: ['seconds'],
|
package/dist/ir/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/ir/schema.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAE7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,KAAK,CAAC,sBAAsB,EAAE,8CAA8C,CAAC;KAC7E,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAW,CAAC,CAAC;AAEjC,MAAM,aAAa,GAAG,CAAC;KACpB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,KAAK,CAAC,sBAAsB,EAAE,+CAA+C,CAAC;KAC9E,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAY,CAAC,CAAC;AAElC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAElD,MAAM,iBAAiB,GAA2B,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC7E,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IAC7E,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QACnC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;QACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/ir/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/ir/types.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export type NodeId = string & {
|
|
|
6
6
|
export type GroupId = string & {
|
|
7
7
|
readonly __brand: 'GroupId';
|
|
8
8
|
};
|
|
9
|
-
export declare const TRAVEL_METHODS: readonly ["walk", "transport", "portal", "npc", "item", "skill", "other"];
|
|
9
|
+
export declare const TRAVEL_METHODS: readonly ["walk", "transport", "portal", "npc", "item", "skill", "scroll", "other"];
|
|
10
10
|
export type TravelMethod = (typeof TRAVEL_METHODS)[number];
|
|
11
11
|
export type Requirement = {
|
|
12
12
|
kind: 'meso';
|
|
@@ -16,9 +16,11 @@ export type Requirement = {
|
|
|
16
16
|
itemId: number;
|
|
17
17
|
consumed: boolean;
|
|
18
18
|
quantity?: number;
|
|
19
|
+
name?: string;
|
|
19
20
|
} | {
|
|
20
21
|
kind: 'quest';
|
|
21
22
|
questId: number;
|
|
23
|
+
name?: string;
|
|
22
24
|
} | {
|
|
23
25
|
kind: 'level';
|
|
24
26
|
min: number;
|
|
@@ -27,6 +29,15 @@ export interface AreaNode {
|
|
|
27
29
|
id: NodeId;
|
|
28
30
|
name: string;
|
|
29
31
|
group?: GroupId;
|
|
32
|
+
/**
|
|
33
|
+
* The town a "return to nearest town" scroll sends you to from this node.
|
|
34
|
+
* Every node is a town, so this defaults to the node itself (a scroll there
|
|
35
|
+
* is a no-op). Set it when the game routes the scroll elsewhere — e.g. a
|
|
36
|
+
* dungeon whose scroll drops you at its continent's hub town. Must reference
|
|
37
|
+
* a declared node. Enables an optional `scroll` edge used only when the
|
|
38
|
+
* traveller has declared they carry return scrolls (see findPath).
|
|
39
|
+
*/
|
|
40
|
+
nearestTown?: NodeId;
|
|
30
41
|
}
|
|
31
42
|
export interface EntityRefs {
|
|
32
43
|
itemId?: number;
|
|
@@ -54,6 +65,13 @@ export interface TravelEdge {
|
|
|
54
65
|
*/
|
|
55
66
|
seconds?: number;
|
|
56
67
|
notes?: string;
|
|
68
|
+
/**
|
|
69
|
+
* Hide this edge from the default map to reduce clutter. Purely a rendering
|
|
70
|
+
* hint — pathfinding ignores it, so a `minor` edge is still routable and is
|
|
71
|
+
* drawn (highlighted) whenever it lies on the computed route. Use it for
|
|
72
|
+
* noisy or rarely-taken connections that would otherwise crowd the graph.
|
|
73
|
+
*/
|
|
74
|
+
minor?: boolean;
|
|
57
75
|
}
|
|
58
76
|
export interface GroupDef {
|
|
59
77
|
id: GroupId;
|
package/dist/ir/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ir/types.ts"],"names":[],"mappings":"AAKA,qFAAqF;AACrF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE7D,kFAAkF;AAClF,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;CAAE,CAAC;AAE/D,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ir/types.ts"],"names":[],"mappings":"AAKA,qFAAqF;AACrF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE7D,kFAAkF;AAClF,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;CAAE,CAAC;AAE/D,eAAO,MAAM,cAAc,qFASjB,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAO3D,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACrF;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED,oEAAoE;AACpE,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,KAAG,MAAqB,CAAC;AAC3D,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,OAAuB,CAAC"}
|
package/dist/ir/types.js
CHANGED
package/dist/ir/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ir/types.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,gFAAgF;AAChF,0EAA0E;AAC1E,uDAAuD;AAQvD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,MAAM;IACN,WAAW;IACX,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;CACC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ir/types.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,gFAAgF;AAChF,0EAA0E;AAC1E,uDAAuD;AAQvD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,MAAM;IACN,WAAW;IACX,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;CACC,CAAC;AA6EX,oEAAoE;AACpE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAW,CAAC;AAC3D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,CAAY,CAAC"}
|
package/dist/path/findPath.d.ts
CHANGED
|
@@ -38,6 +38,12 @@ export interface FindPathOptions {
|
|
|
38
38
|
* *reachability*: transports are always traversable either way.
|
|
39
39
|
*/
|
|
40
40
|
fastTravel?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* When true, `scroll` edges (return to nearest town) are traversable — the
|
|
43
|
+
* traveller carries return scrolls. When false (default) they are skipped
|
|
44
|
+
* entirely, so a route never assumes a scroll the player doesn't have.
|
|
45
|
+
*/
|
|
46
|
+
nearestTownScroll?: boolean;
|
|
41
47
|
}
|
|
42
48
|
export declare function findPath(graph: NavGraph, from: NodeId, to: NodeId, opts?: FindPathOptions): PathResult;
|
|
43
49
|
//# sourceMappingURL=findPath.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findPath.d.ts","sourceRoot":"","sources":["../../src/path/findPath.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"findPath.d.ts","sourceRoot":"","sources":["../../src/path/findPath.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtD,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,qFAAqF;IACrF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,GAAE,eAAoB,GAAG,MAAM,CAShF;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,GAAG,aAAa,GAAG,2BAA2B,CAAC;IAC9D,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,UAAU,EAAE,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,wEAAwE;QACxE,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IACzC;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,eAAoB,GACzB,UAAU,CAgCZ"}
|
package/dist/path/findPath.js
CHANGED
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
// over long walks; without it, transports cost their ride time and the router
|
|
11
11
|
// may route around them.
|
|
12
12
|
//
|
|
13
|
+
// `scroll` edges (return-to-nearest-town) are *availability*-conditional: they
|
|
14
|
+
// are traversable only when `nearestTownScroll` is set (the player carries
|
|
15
|
+
// return scrolls). They are instant like other teleports when enabled.
|
|
16
|
+
//
|
|
13
17
|
// When an eligibility predicate is supplied:
|
|
14
18
|
// 1. Run Dijkstra with the predicate pruning candidate edges.
|
|
15
19
|
// 2. If the destination is reachable that way, return `status: 'found'`.
|
|
@@ -47,13 +51,14 @@ export function findPath(graph, from, to, opts = {}) {
|
|
|
47
51
|
if (from === to)
|
|
48
52
|
return { status: 'found', steps: [], totalSeconds: 0 };
|
|
49
53
|
const cost = { fastTravel: opts.fastTravel };
|
|
54
|
+
const allowScroll = opts.nearestTownScroll ?? false;
|
|
50
55
|
const filtered = opts.eligible
|
|
51
|
-
? dijkstra(graph, from, to, cost, opts.eligible)
|
|
56
|
+
? dijkstra(graph, from, to, cost, allowScroll, opts.eligible)
|
|
52
57
|
: null;
|
|
53
58
|
if (filtered) {
|
|
54
59
|
return { status: 'found', steps: filtered.steps, totalSeconds: filtered.totalSeconds };
|
|
55
60
|
}
|
|
56
|
-
const unfiltered = dijkstra(graph, from, to, cost);
|
|
61
|
+
const unfiltered = dijkstra(graph, from, to, cost, allowScroll);
|
|
57
62
|
if (!unfiltered)
|
|
58
63
|
return { status: 'unreachable', steps: [], totalSeconds: 0 };
|
|
59
64
|
if (!opts.eligible) {
|
|
@@ -76,7 +81,7 @@ function assertNodeKnown(graph, id, label) {
|
|
|
76
81
|
throw new Error(`findPath ${label} references undeclared node "${id}".`);
|
|
77
82
|
}
|
|
78
83
|
}
|
|
79
|
-
function dijkstra(graph, from, to, cost, eligible) {
|
|
84
|
+
function dijkstra(graph, from, to, cost, allowScroll, eligible) {
|
|
80
85
|
const dist = new Map([[from, 0]]);
|
|
81
86
|
const cameFrom = new Map();
|
|
82
87
|
const settled = new Set();
|
|
@@ -91,6 +96,8 @@ function dijkstra(graph, from, to, cost, eligible) {
|
|
|
91
96
|
settled.add(node);
|
|
92
97
|
const base = dist.get(node);
|
|
93
98
|
for (const edge of graph.adjacency.get(node) ?? []) {
|
|
99
|
+
if (edge.method === 'scroll' && !allowScroll)
|
|
100
|
+
continue;
|
|
94
101
|
if (eligible && !eligible(edge))
|
|
95
102
|
continue;
|
|
96
103
|
if (settled.has(edge.to))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findPath.js","sourceRoot":"","sources":["../../src/path/findPath.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,4EAA4E;AAC5E,kEAAkE;AAClE,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,yBAAyB;AACzB,EAAE;AACF,6CAA6C;AAC7C,gEAAgE;AAChE,2EAA2E;AAC3E,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,8EAA8E;AAC9E,qBAAqB;AACrB,4EAA4E;AAK5E,mFAAmF;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEvC;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAQ7C;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAgB,EAAE,OAAwB,EAAE;IACtE,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,OAAO,IAAI,oBAAoB,CAAC;QAC9C,KAAK,WAAW;YACd,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,yBAAyB,CAAC,CAAC;QAC3E;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"findPath.js","sourceRoot":"","sources":["../../src/path/findPath.ts"],"names":[],"mappings":"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"}
|
package/dist/path/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { eligibilityFilter } from './eligibility';
|
|
2
2
|
export type { UserCapability } from './eligibility';
|
|
3
|
-
export {
|
|
3
|
+
export { collectUnlockables, isUnlockable, lockedRequirementsFilter, requirementEntityId, requirementKey, } from './unlockables';
|
|
4
|
+
export type { UnlockableEntry, UnlockableKind, UnlockableRequirement } from './unlockables';
|
|
5
|
+
export { DEFAULT_TRANSPORT_SECONDS, DEFAULT_WALK_SECONDS, edgeSeconds, findPath } from './findPath';
|
|
4
6
|
export type { EdgeCostOptions, FindPathOptions, PathResult } from './findPath';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/path/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/path/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,yBAAyB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/path/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACpG,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/path/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { eligibilityFilter } from './eligibility';
|
|
2
|
-
export {
|
|
2
|
+
export { collectUnlockables, isUnlockable, lockedRequirementsFilter, requirementEntityId, requirementKey, } from './unlockables';
|
|
3
|
+
export { DEFAULT_TRANSPORT_SECONDS, DEFAULT_WALK_SECONDS, edgeSeconds, findPath } from './findPath';
|
|
3
4
|
//# sourceMappingURL=index.js.map
|
package/dist/path/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/path/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EACL,yBAAyB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/path/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { NavGraphSource, Requirement, TravelEdge } from '../ir/types';
|
|
2
|
+
export type UnlockableKind = 'item' | 'quest';
|
|
3
|
+
export type UnlockableRequirement = Extract<Requirement, {
|
|
4
|
+
kind: UnlockableKind;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function isUnlockable(req: Requirement): req is UnlockableRequirement;
|
|
7
|
+
/** The opaque entity id a requirement gates on. */
|
|
8
|
+
export declare function requirementEntityId(req: UnlockableRequirement): number;
|
|
9
|
+
/**
|
|
10
|
+
* Stable `${kind}:${id}` key identifying a requirement's unlockable subject.
|
|
11
|
+
* Two edges that require the same item (or quest) share a key, so one toggle
|
|
12
|
+
* governs both.
|
|
13
|
+
*/
|
|
14
|
+
export declare function requirementKey(req: UnlockableRequirement): string;
|
|
15
|
+
/** One distinct unlockable subject referenced somewhere in the graph. */
|
|
16
|
+
export interface UnlockableEntry {
|
|
17
|
+
key: string;
|
|
18
|
+
kind: UnlockableKind;
|
|
19
|
+
id: number;
|
|
20
|
+
/** Author-supplied display name, when any edge naming this subject provides one. */
|
|
21
|
+
name?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Every distinct item/quest requirement referenced by the graph's edges, one
|
|
25
|
+
* entry per `${kind}:${id}` in first-seen order. A named occurrence wins over
|
|
26
|
+
* an anonymous one, so a subject named on any edge surfaces its name.
|
|
27
|
+
*/
|
|
28
|
+
export declare function collectUnlockables(source: NavGraphSource): UnlockableEntry[];
|
|
29
|
+
/**
|
|
30
|
+
* An eligibility predicate for `findPath` that blocks any edge requiring a
|
|
31
|
+
* *locked* item or quest — a subject whose `${kind}:${id}` key is in `locked`.
|
|
32
|
+
* Non-unlockable requirements (meso, level) never block. An empty set passes
|
|
33
|
+
* every edge, matching "all requirements unlocked by default".
|
|
34
|
+
*/
|
|
35
|
+
export declare function lockedRequirementsFilter(locked: ReadonlySet<string>): (edge: TravelEdge) => boolean;
|
|
36
|
+
//# sourceMappingURL=unlockables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unlockables.d.ts","sourceRoot":"","sources":["../../src/path/unlockables.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9C,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CAAC;AAEnF,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,IAAI,qBAAqB,CAE3E;AAED,mDAAmD;AACnD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAEjE;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,EAAE,CAoB5E;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAC1B,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAM/B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// The "requirements you've unlocked" model.
|
|
2
|
+
//
|
|
3
|
+
// Two requirement kinds gate on an opaque game entity id — `item` and `quest`.
|
|
4
|
+
// Those are things a traveller either has unlocked or hasn't, so the navigator
|
|
5
|
+
// lets them declare which ones they hold and routes around the rest. `meso` and
|
|
6
|
+
// `level` are scalar thresholds rather than opaque ids, so they're never gated
|
|
7
|
+
// here and always pass.
|
|
8
|
+
export function isUnlockable(req) {
|
|
9
|
+
return req.kind === 'item' || req.kind === 'quest';
|
|
10
|
+
}
|
|
11
|
+
/** The opaque entity id a requirement gates on. */
|
|
12
|
+
export function requirementEntityId(req) {
|
|
13
|
+
return req.kind === 'item' ? req.itemId : req.questId;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Stable `${kind}:${id}` key identifying a requirement's unlockable subject.
|
|
17
|
+
* Two edges that require the same item (or quest) share a key, so one toggle
|
|
18
|
+
* governs both.
|
|
19
|
+
*/
|
|
20
|
+
export function requirementKey(req) {
|
|
21
|
+
return `${req.kind}:${requirementEntityId(req)}`;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Every distinct item/quest requirement referenced by the graph's edges, one
|
|
25
|
+
* entry per `${kind}:${id}` in first-seen order. A named occurrence wins over
|
|
26
|
+
* an anonymous one, so a subject named on any edge surfaces its name.
|
|
27
|
+
*/
|
|
28
|
+
export function collectUnlockables(source) {
|
|
29
|
+
const byKey = new Map();
|
|
30
|
+
for (const edge of source.edges) {
|
|
31
|
+
for (const req of edge.requirements ?? []) {
|
|
32
|
+
if (!isUnlockable(req))
|
|
33
|
+
continue;
|
|
34
|
+
const key = requirementKey(req);
|
|
35
|
+
const existing = byKey.get(key);
|
|
36
|
+
if (!existing) {
|
|
37
|
+
byKey.set(key, {
|
|
38
|
+
key,
|
|
39
|
+
kind: req.kind,
|
|
40
|
+
id: requirementEntityId(req),
|
|
41
|
+
...(req.name ? { name: req.name } : {}),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else if (!existing.name && req.name) {
|
|
45
|
+
existing.name = req.name;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return [...byKey.values()];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* An eligibility predicate for `findPath` that blocks any edge requiring a
|
|
53
|
+
* *locked* item or quest — a subject whose `${kind}:${id}` key is in `locked`.
|
|
54
|
+
* Non-unlockable requirements (meso, level) never block. An empty set passes
|
|
55
|
+
* every edge, matching "all requirements unlocked by default".
|
|
56
|
+
*/
|
|
57
|
+
export function lockedRequirementsFilter(locked) {
|
|
58
|
+
if (locked.size === 0)
|
|
59
|
+
return () => true;
|
|
60
|
+
return (edge) => (edge.requirements ?? []).every((req) => !isUnlockable(req) || !locked.has(requirementKey(req)));
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=unlockables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unlockables.js","sourceRoot":"","sources":["../../src/path/unlockables.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,wBAAwB;AAQxB,MAAM,UAAU,YAAY,CAAC,GAAgB;IAC3C,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC;AACrD,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,mBAAmB,CAAC,GAA0B;IAC5D,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAA0B;IACvD,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AACnD,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IACvD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;gBAAE,SAAS;YACjC,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;oBACb,GAAG;oBACH,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,EAAE,EAAE,mBAAmB,CAAC,GAAG,CAAC;oBAC5B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA2B;IAE3B,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;IACzC,OAAO,CAAC,IAAI,EAAE,EAAE,CACd,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,KAAK,CAC7B,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAChE,CAAC;AACN,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrolled/nav-graph",
|
|
3
|
-
"version": "0.1.1-dev.
|
|
3
|
+
"version": "0.1.1-dev.2a1f128",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Framework-agnostic graph core: IR types + Zod schema, an authoring DSL, a compiler (IR → runtime adjacency), and pathfinding (BFS + eligibility). The engine behind Scrolled Navigator; usable standalone in Node and the browser.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -29,42 +29,25 @@
|
|
|
29
29
|
"README.md",
|
|
30
30
|
"LICENSE"
|
|
31
31
|
],
|
|
32
|
-
"main": "./
|
|
33
|
-
"module": "./
|
|
34
|
-
"types": "./
|
|
32
|
+
"main": "./dist/index.js",
|
|
33
|
+
"module": "./dist/index.js",
|
|
34
|
+
"types": "./dist/index.d.ts",
|
|
35
35
|
"exports": {
|
|
36
|
-
".":
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
"types": "./dist/index.d.ts",
|
|
48
|
-
"import": "./dist/index.js"
|
|
49
|
-
},
|
|
50
|
-
"./ir": {
|
|
51
|
-
"types": "./dist/ir/index.d.ts",
|
|
52
|
-
"import": "./dist/ir/index.js"
|
|
53
|
-
},
|
|
54
|
-
"./dsl": {
|
|
55
|
-
"types": "./dist/dsl/index.d.ts",
|
|
56
|
-
"import": "./dist/dsl/index.js"
|
|
57
|
-
}
|
|
36
|
+
".": {
|
|
37
|
+
"types": "./dist/index.d.ts",
|
|
38
|
+
"import": "./dist/index.js"
|
|
39
|
+
},
|
|
40
|
+
"./ir": {
|
|
41
|
+
"types": "./dist/ir/index.d.ts",
|
|
42
|
+
"import": "./dist/ir/index.js"
|
|
43
|
+
},
|
|
44
|
+
"./dsl": {
|
|
45
|
+
"types": "./dist/dsl/index.d.ts",
|
|
46
|
+
"import": "./dist/dsl/index.js"
|
|
58
47
|
}
|
|
59
48
|
},
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"clean": "rm -rf dist LICENSE",
|
|
63
|
-
"export": "vite-node src/cli/export.ts",
|
|
64
|
-
"test": "vitest run --passWithNoTests",
|
|
65
|
-
"typecheck": "tsc --noEmit",
|
|
66
|
-
"lint": "eslint .",
|
|
67
|
-
"prepublishOnly": "pnpm run typecheck && pnpm run test && pnpm run clean && pnpm run build && cp ../../LICENSE LICENSE"
|
|
49
|
+
"publishConfig": {
|
|
50
|
+
"access": "public"
|
|
68
51
|
},
|
|
69
52
|
"dependencies": {
|
|
70
53
|
"zod": "^3.23.8"
|
|
@@ -74,5 +57,13 @@
|
|
|
74
57
|
"vite": "^5.4.8",
|
|
75
58
|
"vite-node": "^2.1.2",
|
|
76
59
|
"vitest": "^2.1.2"
|
|
60
|
+
},
|
|
61
|
+
"scripts": {
|
|
62
|
+
"build": "tsc -p tsconfig.build.json",
|
|
63
|
+
"clean": "rm -rf dist LICENSE",
|
|
64
|
+
"export": "vite-node src/cli/export.ts",
|
|
65
|
+
"test": "vitest run --passWithNoTests",
|
|
66
|
+
"typecheck": "tsc --noEmit",
|
|
67
|
+
"lint": "eslint ."
|
|
77
68
|
}
|
|
78
|
-
}
|
|
69
|
+
}
|