@mailwoman/core 3.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/classification/Classification.d.ts +2 -2
- package/out/decoder/build-tree.d.ts +13 -4
- package/out/decoder/build-tree.d.ts.map +1 -1
- package/out/decoder/build-tree.js +36 -8
- package/out/decoder/build-tree.js.map +1 -1
- package/out/decoder/containment.d.ts +31 -2
- package/out/decoder/containment.d.ts.map +1 -1
- package/out/decoder/containment.js +36 -3
- package/out/decoder/containment.js.map +1 -1
- package/out/decoder/index.d.ts +1 -0
- package/out/decoder/index.d.ts.map +1 -1
- package/out/decoder/index.js +1 -0
- package/out/decoder/index.js.map +1 -1
- package/out/decoder/types.d.ts +21 -0
- package/out/decoder/types.d.ts.map +1 -1
- package/out/decoder/validate-tree.d.ts +39 -0
- package/out/decoder/validate-tree.d.ts.map +1 -0
- package/out/decoder/validate-tree.js +79 -0
- package/out/decoder/validate-tree.js.map +1 -0
- package/out/pipeline/runtime-pipeline.d.ts.map +1 -1
- package/out/pipeline/runtime-pipeline.js +13 -4
- package/out/pipeline/runtime-pipeline.js.map +1 -1
- package/out/pipeline/span-logit-aggregation.d.ts +3 -2
- package/out/pipeline/span-logit-aggregation.d.ts.map +1 -1
- package/out/pipeline/span-logit-aggregation.js +3 -2
- package/out/pipeline/span-logit-aggregation.js.map +1 -1
- package/out/pipeline/types.d.ts +2 -0
- package/out/pipeline/types.d.ts.map +1 -1
- package/out/resolver/resolve.js +50 -8
- package/out/resolver/resolve.js.map +1 -1
- package/out/resolver/types.d.ts +30 -0
- package/out/resolver/types.d.ts.map +1 -1
- package/out/resolver/types.js.map +1 -1
- package/out/resources/whosonfirst/PlacetypeDataSource.d.ts.map +1 -1
- package/out/resources/whosonfirst/PlacetypeDataSource.js +3 -1
- package/out/resources/whosonfirst/PlacetypeDataSource.js.map +1 -1
- package/out/resources/whosonfirst/placetypes/graph.d.ts +47 -0
- package/out/resources/whosonfirst/placetypes/graph.d.ts.map +1 -0
- package/out/resources/whosonfirst/placetypes/graph.js +0 -0
- package/out/resources/whosonfirst/placetypes/graph.js.map +1 -0
- package/out/resources/whosonfirst/placetypes/index.d.ts +2 -0
- package/out/resources/whosonfirst/placetypes/index.d.ts.map +1 -1
- package/out/resources/whosonfirst/placetypes/index.js +2 -0
- package/out/resources/whosonfirst/placetypes/index.js.map +1 -1
- package/out/resources/whosonfirst/placetypes/mermaid.d.ts +35 -3
- package/out/resources/whosonfirst/placetypes/mermaid.d.ts.map +1 -1
- package/out/resources/whosonfirst/placetypes/mermaid.js +87 -15
- package/out/resources/whosonfirst/placetypes/mermaid.js.map +1 -1
- package/out/resources/whosonfirst/placetypes/tree.d.ts +30 -0
- package/out/resources/whosonfirst/placetypes/tree.d.ts.map +1 -0
- package/out/resources/whosonfirst/placetypes/tree.js +28 -0
- package/out/resources/whosonfirst/placetypes/tree.js.map +1 -0
- package/out/solver/SolutionMatch.d.ts +1 -1
- package/out/solver/mask.d.ts +1 -1
- package/package.json +7 -1
|
@@ -32,8 +32,9 @@
|
|
|
32
32
|
* @param logits Per-token logits from ONNX inference, shape `[seqLen][numLabels]`.
|
|
33
33
|
* @param pieces Token pieces with character-level offsets (from the tokenizer's `encode`).
|
|
34
34
|
* @param spans Phrase-grouper span proposals in character offsets.
|
|
35
|
-
* @param opts Options
|
|
36
|
-
*
|
|
35
|
+
* @param opts Options bag.
|
|
36
|
+
* @param opts.topK Number of top-scoring tags to return per span (default 3).
|
|
37
|
+
* @param opts.labels The BIO label vocabulary the model emits, e.g. `["O", "B-locality", ...]`.
|
|
37
38
|
*/
|
|
38
39
|
export function aggregateSpanLogits(logits, pieces, spans, opts) {
|
|
39
40
|
const topK = opts.topK ?? 3;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span-logit-aggregation.js","sourceRoot":"","sources":["../../pipeline/span-logit-aggregation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAqBH
|
|
1
|
+
{"version":3,"file":"span-logit-aggregation.js","sourceRoot":"","sources":["../../pipeline/span-logit-aggregation.ts"],"names":[],"mappings":"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"}
|
package/out/pipeline/types.d.ts
CHANGED
|
@@ -156,6 +156,8 @@ export interface ClassifierOpts {
|
|
|
156
156
|
queryShape?: QueryShapeLite;
|
|
157
157
|
fst?: FstMatcherLike;
|
|
158
158
|
fstBiasScale?: number;
|
|
159
|
+
/** Run the deterministic postcode regex repair pass (v0.7 #35) on the decoded labels. */
|
|
160
|
+
postcodeRepair?: boolean;
|
|
159
161
|
}
|
|
160
162
|
export interface AddressClassifier {
|
|
161
163
|
parse(text: string, opts?: ClassifierOpts): Promise<AddressTree>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../pipeline/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../pipeline/types.ts"],"names":[],"mappings":"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"}
|
package/out/resolver/resolve.js
CHANGED
|
@@ -20,6 +20,18 @@ import { DEFAULT_PLACETYPE_MAP, } from "./types.js";
|
|
|
20
20
|
export function createWofResolver(backend) {
|
|
21
21
|
return new WofResolver(backend);
|
|
22
22
|
}
|
|
23
|
+
/** Find the first postcode value anywhere in the tree (a one-shot pre-scan; postcode and locality are
|
|
24
|
+
* siblings, so the top-down walk wouldn't otherwise let the locality lookup see it). */
|
|
25
|
+
function firstPostcodeValue(roots) {
|
|
26
|
+
const stack = [...roots];
|
|
27
|
+
while (stack.length > 0) {
|
|
28
|
+
const n = stack.pop();
|
|
29
|
+
if (n.tag === "postcode" && n.value.trim().length > 0)
|
|
30
|
+
return n.value.trim();
|
|
31
|
+
stack.push(...n.children);
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
23
35
|
class WofResolver {
|
|
24
36
|
#backend;
|
|
25
37
|
constructor(backend) {
|
|
@@ -33,6 +45,9 @@ class WofResolver {
|
|
|
33
45
|
placetypeMap: opts.placetypeMap ?? DEFAULT_PLACETYPE_MAP,
|
|
34
46
|
minWinningScore: opts.minWinningScore ?? 0,
|
|
35
47
|
candidatesPerLookup: opts.candidatesPerLookup ?? 5,
|
|
48
|
+
defaultCountry: opts.defaultCountry,
|
|
49
|
+
parentFallback: opts.parentFallback ?? true,
|
|
50
|
+
postcode: firstPostcodeValue(tree.roots),
|
|
36
51
|
};
|
|
37
52
|
const newRoots = [];
|
|
38
53
|
for (const root of tree.roots) {
|
|
@@ -65,17 +80,34 @@ class WofResolver {
|
|
|
65
80
|
placetype,
|
|
66
81
|
limit: state.candidatesPerLookup,
|
|
67
82
|
};
|
|
68
|
-
// Pass the inherited parent constraint to the backend when available —
|
|
69
|
-
//
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
83
|
+
// Pass the inherited parent constraint to the backend when available — `parentId` scopes to
|
|
84
|
+
// the resolved parent's descendants. For `country`: a resolved parent's country wins, else
|
|
85
|
+
// fall back to the caller's `defaultCountry`. Without this top-level hint a bare "IL" over a
|
|
86
|
+
// multi-country gazetteer fuzzy-matches a foreign place (e.g. a French region) — see the
|
|
87
|
+
// Direction-C resolver eval.
|
|
88
|
+
if (parentResolved && typeof parentResolved.id === "number")
|
|
89
|
+
query.parentId = parentResolved.id;
|
|
90
|
+
const country = parentResolved?.country ?? state.defaultCountry;
|
|
91
|
+
if (country)
|
|
92
|
+
query.country = country;
|
|
93
|
+
// Coordinate-first: hand the sibling postcode to locality lookups so the backend can inject
|
|
94
|
+
// postcode-proximal candidates the name-match would miss. Only for locality (the placetype both
|
|
95
|
+
// `locality` and `dependent_locality` map to); other placetypes ignore it.
|
|
96
|
+
if (placetype === "locality" && state.postcode)
|
|
97
|
+
query.postcode = state.postcode;
|
|
76
98
|
let candidates;
|
|
77
99
|
try {
|
|
78
100
|
candidates = await this.#backend.findPlace(query);
|
|
101
|
+
// Parent soft-gating: `parentId` is a HARD descendant filter in the backend, which wrongly
|
|
102
|
+
// zeroes the result when the parent resolved wrong OR the gazetteer hierarchy is incomplete
|
|
103
|
+
// (a real locality whose `ancestors` chain is missing its region). Rather than turn a
|
|
104
|
+
// resolvable node into an unresolved one, retry once WITHOUT the parent constraint — we
|
|
105
|
+
// prefer a parent-scoped hit but never sacrifice recall. The country constraint is kept, so
|
|
106
|
+
// this still can't wander to a foreign place. Same logical resolution → no extra budget.
|
|
107
|
+
if (candidates.length === 0 && state.parentFallback && query.parentId !== undefined) {
|
|
108
|
+
delete query.parentId;
|
|
109
|
+
candidates = await this.#backend.findPlace(query);
|
|
110
|
+
}
|
|
79
111
|
}
|
|
80
112
|
catch {
|
|
81
113
|
// Defensive: a backend failure should not abort the whole tree walk. Leave the node with
|
|
@@ -111,6 +143,16 @@ function decorateNode(node, resolved, alternatives) {
|
|
|
111
143
|
node.lat = resolved.lat;
|
|
112
144
|
node.lon = resolved.lon;
|
|
113
145
|
node.placeId = `wof:${resolved.id}`; // v1: only WOF resolvers; the URI scheme stays this simple
|
|
146
|
+
// Record the resolver's ranking score AND the resolved place's CANONICAL name. The name is the
|
|
147
|
+
// gazetteer's truth for the place we picked — distinct from `node.value` (the raw input span). It
|
|
148
|
+
// lets consumers display the canonical name and lets the end-to-end eval check the resolver chose
|
|
149
|
+
// the right PLACE (gazetteer-name vs ground-truth) rather than merely echoing the parser's text.
|
|
150
|
+
node.metadata = { ...(node.metadata ?? {}), resolver_score: resolved.score, resolver_name: resolved.name };
|
|
151
|
+
// The postcode/locality conflict flag (the falsehood differentiator): the postcode pointed to a
|
|
152
|
+
// geographically different place than the parsed city name. Surface it so callers can warn rather
|
|
153
|
+
// than silently trust the resolved point.
|
|
154
|
+
if (resolved.mismatch)
|
|
155
|
+
node.metadata["postcode_city_mismatch"] = true;
|
|
114
156
|
if (alternatives.length > 0) {
|
|
115
157
|
node.alternatives = alternatives;
|
|
116
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../resolver/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EACN,qBAAqB,GAMrB,MAAM,YAAY,CAAA;AAEnB;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACzD,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../resolver/resolve.ts"],"names":[],"mappings":"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"}
|
package/out/resolver/types.d.ts
CHANGED
|
@@ -38,6 +38,13 @@ export interface ResolvedPlace {
|
|
|
38
38
|
* defined; callers should treat as ordinal.
|
|
39
39
|
*/
|
|
40
40
|
score: number;
|
|
41
|
+
/**
|
|
42
|
+
* Set when the resolver detected that the address's postcode and its parsed locality name point to
|
|
43
|
+
* geographically different places (a transposed / wrong-for-the-city postcode). Surfaced onto the
|
|
44
|
+
* resolved node's metadata as `postcode_city_mismatch` so callers can lower confidence or flag the
|
|
45
|
+
* conflict instead of silently mislocating.
|
|
46
|
+
*/
|
|
47
|
+
mismatch?: boolean;
|
|
41
48
|
}
|
|
42
49
|
/**
|
|
43
50
|
* Pull-based contract for a single resolver query. The resolver knows nothing about `AddressTree` —
|
|
@@ -52,6 +59,13 @@ export interface ResolverBackend {
|
|
|
52
59
|
placetype?: string | string[];
|
|
53
60
|
country?: string;
|
|
54
61
|
parentId?: number | string;
|
|
62
|
+
/**
|
|
63
|
+
* Sibling postcode string, when the address carries one. A coordinate-first backend uses it to
|
|
64
|
+
* inject postcode-proximal locality candidates (the postcode→locality table) and soft-score
|
|
65
|
+
* them against the parsed name — recovering localities the name-match alone misses. Backends
|
|
66
|
+
* without postcode support ignore it.
|
|
67
|
+
*/
|
|
68
|
+
postcode?: string;
|
|
55
69
|
limit?: number;
|
|
56
70
|
}): Promise<ResolvedPlace[]>;
|
|
57
71
|
}
|
|
@@ -75,6 +89,22 @@ export interface ResolveOpts {
|
|
|
75
89
|
* candidate after post-scoring, but the backend may benefit from over-fetching for ranking.
|
|
76
90
|
*/
|
|
77
91
|
candidatesPerLookup?: number;
|
|
92
|
+
/**
|
|
93
|
+
* Default ISO-3166 alpha-2 country to constrain top-level lookups to, when no resolved parent has
|
|
94
|
+
* supplied a country yet. Without it, a bare component over a multi-country gazetteer (e.g. "IL")
|
|
95
|
+
* can fuzzy-match a foreign place. Callers should set this from the detected locale (the
|
|
96
|
+
* pipeline's locale-gate). A resolved parent's country still overrides it deeper in the tree.
|
|
97
|
+
*/
|
|
98
|
+
defaultCountry?: string;
|
|
99
|
+
/**
|
|
100
|
+
* When a resolved parent constrains a child lookup (`parentId` is passed to the backend as a hard
|
|
101
|
+
* descendant filter) and that filtered lookup returns NOTHING, retry the lookup once without the
|
|
102
|
+
* parent constraint. Guards against an incomplete gazetteer hierarchy (a real locality whose
|
|
103
|
+
* ancestor chain is missing its region) or a mis-resolved parent silently turning a resolvable
|
|
104
|
+
* node unresolved. The country constraint is retained on the retry, so resolution still can't
|
|
105
|
+
* wander cross-border. Default true. Set false to measure the strict-parent baseline.
|
|
106
|
+
*/
|
|
107
|
+
parentFallback?: boolean;
|
|
78
108
|
/**
|
|
79
109
|
* Override the default ComponentTag → resolver-placetype mapping. When set, this map FULLY
|
|
80
110
|
* REPLACES `DEFAULT_PLACETYPE_MAP` — start from the default by spreading it (`{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../resolver/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEpE;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC7B,wDAAwD;IACxD,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAA;IACZ,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAA;IACX,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../resolver/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEpE;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC7B,wDAAwD;IACxD,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAA;IACZ,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAA;IACX,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,SAAS,CAAC,KAAK,EAAE;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;QAC1B;;;;;WAKG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,KAAK,CAAC,EAAE,MAAM,CAAA;KACd,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAA;AAEhE,eAAO,MAAM,qBAAqB,EAAE,YAUnC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACxB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;CACxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../resolver/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../resolver/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAiIH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IAClD,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,kBAAkB,EAAE,UAAU;IAC9B,SAAS,EAAE,QAAQ;IACnB,0FAA0F;IAC1F,6FAA6F;IAC7F,2FAA2F;IAC3F,QAAQ,EAAE,YAAY;CACtB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlacetypeDataSource.d.ts","sourceRoot":"","sources":["../../../resources/whosonfirst/PlacetypeDataSource.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACN,kBAAkB,EAClB,KAAK,mBAAmB,EAGxB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAgB,KAAK,mBAAmB,EAAsB,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAA;AAE3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAEtE,MAAM,WAAW,0BAA0B,CAC1C,CAAC,SAAS,oBAAoB,GAAG,oBAAoB,EACrD,CAAC,SAAS,mBAAmB,GAAG,kBAAkB,GAAG,mBAAmB;IAExE,SAAS,EAAE,CAAC,CAAA;IACZ,YAAY,EAAE,CAAC,CAAA;IACf,aAAa,EAAE,eAAe,CAAA;CAC9B;AAED,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IACV;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,UAAU;;WAGvC,UAAU,CAAC,CAAC,SAAS,oBAAoB,EAAE,CAAC,SAAS,mBAAmB,GAAG,kBAAkB,EAAE,EAC5G,SAAS,EACT,YAAY,EACZ,aAAa,GACb,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,eAAe,CAAC,GASxE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAGtC,aAAa,IAAI,IAAI;IAkBrB,cAAc,IAAI,IAAI;gBAejB,YAAY,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"PlacetypeDataSource.d.ts","sourceRoot":"","sources":["../../../resources/whosonfirst/PlacetypeDataSource.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACN,kBAAkB,EAClB,KAAK,mBAAmB,EAGxB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAgB,KAAK,mBAAmB,EAAsB,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAA;AAE3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAEtE,MAAM,WAAW,0BAA0B,CAC1C,CAAC,SAAS,oBAAoB,GAAG,oBAAoB,EACrD,CAAC,SAAS,mBAAmB,GAAG,kBAAkB,GAAG,mBAAmB;IAExE,SAAS,EAAE,CAAC,CAAA;IACZ,YAAY,EAAE,CAAC,CAAA;IACf,aAAa,EAAE,eAAe,CAAA;CAC9B;AAED,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IACV;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,UAAU;;WAGvC,UAAU,CAAC,CAAC,SAAS,oBAAoB,EAAE,CAAC,SAAS,mBAAmB,GAAG,kBAAkB,EAAE,EAC5G,SAAS,EACT,YAAY,EACZ,aAAa,GACb,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,eAAe,CAAC,GASxE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAGtC,aAAa,IAAI,IAAI;IAkBrB,cAAc,IAAI,IAAI;gBAejB,YAAY,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,mBAAmB;IAcnE,CAAC,MAAM,CAAC,OAAO,CAAC;IAIvB;;OAEG;IAEI,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,cAAc,CAAC,eAAe,CAAC;IAgBhF;;;;OAIG;IACU,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CA+B3D"}
|
|
@@ -50,7 +50,9 @@ export class PlacetypeDataSource {
|
|
|
50
50
|
`);
|
|
51
51
|
}
|
|
52
52
|
constructor(databasePath, dbOptions) {
|
|
53
|
-
this.#db =
|
|
53
|
+
this.#db = dbOptions
|
|
54
|
+
? new DatabaseSync(databasePath.toString(), dbOptions)
|
|
55
|
+
: new DatabaseSync(databasePath.toString());
|
|
54
56
|
// node:sqlite has no .pragma() helper; pragmas are executed as plain SQL.
|
|
55
57
|
this.#db.exec("PRAGMA busy_timeout = 10000");
|
|
56
58
|
this.#db.exec("PRAGMA journal_mode = WAL");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlacetypeDataSource.js","sourceRoot":"","sources":["../../../resources/whosonfirst/PlacetypeDataSource.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACN,kBAAkB,EAElB,eAAe,EACf,qBAAqB,GACrB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAgD,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,WAAW,EAAwB,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAmDrD;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAC/B,GAAG,CAAc;IAEV,MAAM,CAAC,UAAU,CAAqF,EAC5G,SAAS,EACT,YAAY,EACZ,aAAa,GAC2E;QACxF,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,YAAY,CAAC;YACjE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;YACnC,CAAC,CAAC,YAAY,CAAA;QAEf,OAAO,WAAW,CAAC,IAAI,CACtB,aAAa,EACb,SAAS,EACT,GAAG,sBAAsB,KAAK,CACa,CAAA;IAC7C,CAAC;IAEM,aAAa;QACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;;;;;;;;;;;;;;GAcvB,CAAC,CAAA;IACH,CAAC;IAEM,cAAc;QACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;;;;;;;;;;;GAWvB,CAAC,CAAA;IACH,CAAC;IAED,YAAY,YAA6B,EAAE,SAA+B;QACzE,IAAI,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"PlacetypeDataSource.js","sourceRoot":"","sources":["../../../resources/whosonfirst/PlacetypeDataSource.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACN,kBAAkB,EAElB,eAAe,EACf,qBAAqB,GACrB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAgD,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,WAAW,EAAwB,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAmDrD;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAC/B,GAAG,CAAc;IAEV,MAAM,CAAC,UAAU,CAAqF,EAC5G,SAAS,EACT,YAAY,EACZ,aAAa,GAC2E;QACxF,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,YAAY,CAAC;YACjE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;YACnC,CAAC,CAAC,YAAY,CAAA;QAEf,OAAO,WAAW,CAAC,IAAI,CACtB,aAAa,EACb,SAAS,EACT,GAAG,sBAAsB,KAAK,CACa,CAAA;IAC7C,CAAC;IAEM,aAAa;QACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;;;;;;;;;;;;;;GAcvB,CAAC,CAAA;IACH,CAAC;IAEM,cAAc;QACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;;;;;;;;;;;GAWvB,CAAC,CAAA;IACH,CAAC;IAED,YAAY,YAA6B,EAAE,SAA+B;QACzE,IAAI,CAAC,GAAG,GAAG,SAAS;YACnB,CAAC,CAAC,IAAI,YAAY,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC;YACtD,CAAC,CAAC,IAAI,YAAY,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAA;QAE5C,0EAA0E;QAC1E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;QAC5C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QAEzC,IAAI,CAAC,aAAa,EAAE,CAAA;QACpB,uBAAuB;IACxB,CAAC;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC;IAED;;OAEG;IAEI,IAAI,CAAC,QAAkC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;;;WAGpC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC3B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,GAAG,EAAE,CAAC;aAChC,IAAI,CAAC,MAAM,CAAC;GACd,CAAC,CAAA;QAEF,4FAA4F;QAC5F,2DAA2D;QAC3D,OAAO,QAAQ,CAAC,IAAI,CACnB,SAAS,CAAC,OAAO,CAAC,QAAoD,CAAC,CACzB,CAAA;IAChD,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,MAAM,CAAC,MAAuB;QAC1C,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;IAsB5C,CAAC,CAAA;YAEF,SAAS,CAAC,GAAG,CAAC,MAAkD,CAAC,CAAA;QAClE,CAAC,CAAA;QAED,MAAM,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IACjC,CAAC;CACD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
import type { PlacetypeRole } from "./definition.js";
|
|
7
|
+
import { Placetype } from "./Placetype.js";
|
|
8
|
+
/**
|
|
9
|
+
* A single node in a placetype graph. One entry per unique placetype name.
|
|
10
|
+
*/
|
|
11
|
+
export interface PlacetypeGraphNode {
|
|
12
|
+
name: string;
|
|
13
|
+
/** Brooklyn Integers ID. */
|
|
14
|
+
id: number;
|
|
15
|
+
role: PlacetypeRole;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A directed parent → child edge. Field names match d3-force / react-flow / cytoscape conventions
|
|
19
|
+
* so the graph drops straight into common viewers.
|
|
20
|
+
*/
|
|
21
|
+
export interface PlacetypeGraphLink {
|
|
22
|
+
source: string;
|
|
23
|
+
target: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Node-link projection of the placetype DAG rooted at a given placetype. Each node and each
|
|
27
|
+
* (parent, child) edge appears exactly once — see {@linkcode generatePlacetypeGraph} for why this is
|
|
28
|
+
* the preferred shape when the root has many shared descendants (e.g. `planet`).
|
|
29
|
+
*/
|
|
30
|
+
export interface PlacetypeGraph {
|
|
31
|
+
root: string;
|
|
32
|
+
nodes: PlacetypeGraphNode[];
|
|
33
|
+
links: PlacetypeGraphLink[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build a node-link graph of a placetype and its descendants, optionally filtered by role.
|
|
37
|
+
*
|
|
38
|
+
* Unlike {@linkcode generatePlacetypeTree}, this emits each node and each (parent, child) edge
|
|
39
|
+
* exactly once. WOF placetypes form a DAG with heavy descendant sharing (e.g. `installation` is a
|
|
40
|
+
* leaf reachable from many parents); projecting that DAG to a nested tree duplicates every shared
|
|
41
|
+
* subtree under every parent path and blows up exponentially for roots like `planet` (~165 MB for
|
|
42
|
+
* the full hierarchy). The graph shape stays O(nodes + edges) regardless.
|
|
43
|
+
*
|
|
44
|
+
* Output is well-suited for d3-force, react-flow, cytoscape, and any other HTML graph viewer.
|
|
45
|
+
*/
|
|
46
|
+
export declare function generatePlacetypeGraph(placetype: Placetype, roles?: Iterable<PlacetypeRole> | null): PlacetypeGraph;
|
|
47
|
+
//# sourceMappingURL=graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../../resources/whosonfirst/placetypes/graph.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,aAAa,CAAA;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,kBAAkB,EAAE,CAAA;IAC3B,KAAK,EAAE,kBAAkB,EAAE,CAAA;CAC3B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,GAAG,cAAc,CAsCnH"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../../resources/whosonfirst/placetypes/graph.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAgC1C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAoB,EAAE,KAAsC;IAClG,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAE7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAA;IACnD,MAAM,KAAK,GAAyB,EAAE,CAAA;IACtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAA;IAEhC,MAAM,OAAO,GAAG,CAAC,CAAY,EAAQ,EAAE;QACtC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAM;QAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5D,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,CAAC,IAAe,EAAQ,EAAE;QACtC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAErB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,CAAA;YAEd,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAA;YAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACtB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;YACtD,CAAC;YAED,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAQ;YACpC,IAAI,CAAC,KAAK,CAAC,CAAA;QACZ,CAAC;IACF,CAAC,CAAA;IAED,OAAO,CAAC,SAAS,CAAC,CAAA;IAClB,IAAI,CAAC,SAAS,CAAC,CAAA;IAEf,OAAO;QACN,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,KAAK;KACL,CAAA;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../resources/whosonfirst/placetypes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../resources/whosonfirst/placetypes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../resources/whosonfirst/placetypes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../resources/whosonfirst/placetypes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA"}
|
|
@@ -3,18 +3,50 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
|
-
import type
|
|
6
|
+
import { type PlacetypeRole } from "./definition.js";
|
|
7
7
|
import { Placetype } from "./Placetype.js";
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Hand-tuned default colors for placetype roles. Used when no `interpolator` is passed to
|
|
10
|
+
* {@linkcode generateMermaidMarkup}. Each entry pairs a fill with a darker stroke and a text color
|
|
11
|
+
* chosen for contrast against the fill.
|
|
10
12
|
*/
|
|
11
13
|
export declare const PlacetypeRoleColor: {
|
|
12
14
|
readonly common: "#0066cc";
|
|
13
15
|
readonly common_optional: "#00cc66";
|
|
14
16
|
readonly optional: "#ffcc00";
|
|
15
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* A color interpolator — compatible with d3-scale-chromatic's `interpolate*` functions (e.g.
|
|
20
|
+
* `interpolateViridis`, `interpolateTurbo`). Receives `t ∈ [0, 1]` and returns a CSS color string.
|
|
21
|
+
*/
|
|
22
|
+
export type InterpolateColorCallback = (t: number) => string;
|
|
23
|
+
export interface GenerateMermaidMarkupOptions {
|
|
24
|
+
/** Restrict descendants to the given roles. Default: all roles. */
|
|
25
|
+
roles?: Iterable<PlacetypeRole>;
|
|
26
|
+
/**
|
|
27
|
+
* Edge color interpolator. Each edge is colored by its child node's depth from the root: `t =
|
|
28
|
+
* (childDepth - 1) / (maxDepth - 1)`. This traces a smooth gradient along any lineage path (e.g.
|
|
29
|
+
* `planet → continent → country → …`) and gives a visual cue for how deep an edge sits in the
|
|
30
|
+
* tree.
|
|
31
|
+
*
|
|
32
|
+
* Defaults to d3-scale-chromatic's `interpolateViridis` — perceptually uniform and
|
|
33
|
+
* colorblind-friendly. Node fills/strokes are _not_ affected; they always use the hand-tuned
|
|
34
|
+
* {@linkcode PlacetypeRoleColor} palette, which carries more semantic weight than a sampled
|
|
35
|
+
* gradient for only three categorical role values.
|
|
36
|
+
*/
|
|
37
|
+
edgeInterpolator?: InterpolateColorCallback;
|
|
38
|
+
}
|
|
16
39
|
/**
|
|
17
40
|
* Generate a Mermaid flowchart markup for a placetype and its descendants.
|
|
41
|
+
*
|
|
42
|
+
* The walk is a recursive `findChildren` traversal — every emitted edge is a real direct-parent →
|
|
43
|
+
* direct-child relationship. WOF placetypes form a DAG (e.g. `borough` has both `country` and
|
|
44
|
+
* `macroregion` as parents), so a child can legitimately appear on multiple edges; the `visited`
|
|
45
|
+
* set prevents the subtree below it from being re-emitted.
|
|
46
|
+
*
|
|
47
|
+
* Edges are colored by depth from the root via
|
|
48
|
+
* {@linkcode GenerateMermaidMarkupOptions.edgeInterpolator} (default: viridis), so any lineage path
|
|
49
|
+
* traces a smooth gradient down the chart. Node fills always use the hand-tuned role palette.
|
|
18
50
|
*/
|
|
19
|
-
export declare function generateMermaidMarkup(placetype: Placetype,
|
|
51
|
+
export declare function generateMermaidMarkup(placetype: Placetype, options?: GenerateMermaidMarkupOptions): string;
|
|
20
52
|
//# sourceMappingURL=mermaid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../../../../resources/whosonfirst/placetypes/mermaid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../../../../resources/whosonfirst/placetypes/mermaid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,iBAAiB,CAAA;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAa1C;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;CAImB,CAAA;AAclD;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;AAE5D,MAAM,WAAW,4BAA4B;IAC5C,mEAAmE;IACnE,KAAK,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAA;IAC/B;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,wBAAwB,CAAA;CAC3C;AAuCD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE,4BAAiC,GAAG,MAAM,CA+C9G"}
|
|
@@ -3,19 +3,81 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
|
+
import { rgb } from "d3-color";
|
|
7
|
+
import { interpolateViridis } from "d3-scale-chromatic";
|
|
8
|
+
import { PlacetypeRoles } from "./definition.js";
|
|
6
9
|
import { Placetype } from "./Placetype.js";
|
|
7
10
|
/**
|
|
8
|
-
*
|
|
11
|
+
* Mermaid's `classDef` parser uses commas to separate style properties, so an `rgb(r, g, b)` value
|
|
12
|
+
* (which d3-scale-chromatic emits for several interpolators, e.g. `interpolateRainbow`,
|
|
13
|
+
* `interpolateTurbo`, `interpolateSinebow`) breaks the parse. Convert any d3-color-recognised input
|
|
14
|
+
* to hex before embedding. `d3-color` already handles hex/rgb/rgba/hsl/named inputs.
|
|
15
|
+
*/
|
|
16
|
+
function toMermaidColor(input) {
|
|
17
|
+
const parsed = rgb(input);
|
|
18
|
+
return Number.isNaN(parsed.r) ? input : parsed.formatHex();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Hand-tuned default colors for placetype roles. Used when no `interpolator` is passed to
|
|
22
|
+
* {@linkcode generateMermaidMarkup}. Each entry pairs a fill with a darker stroke and a text color
|
|
23
|
+
* chosen for contrast against the fill.
|
|
9
24
|
*/
|
|
10
25
|
export const PlacetypeRoleColor = {
|
|
11
26
|
common: "#0066cc",
|
|
12
27
|
common_optional: "#00cc66",
|
|
13
28
|
optional: "#ffcc00",
|
|
14
29
|
};
|
|
30
|
+
const PlacetypeRoleStroke = {
|
|
31
|
+
common: "#004d99",
|
|
32
|
+
common_optional: "#009933",
|
|
33
|
+
optional: "#cca300",
|
|
34
|
+
};
|
|
35
|
+
const PlacetypeRoleText = {
|
|
36
|
+
common: "white",
|
|
37
|
+
common_optional: "white",
|
|
38
|
+
optional: "black",
|
|
39
|
+
};
|
|
40
|
+
const HAND_TUNED_PALETTE = Object.fromEntries(PlacetypeRoles.map((role) => [
|
|
41
|
+
role,
|
|
42
|
+
{ fill: PlacetypeRoleColor[role], stroke: PlacetypeRoleStroke[role], text: PlacetypeRoleText[role] },
|
|
43
|
+
]));
|
|
44
|
+
/**
|
|
45
|
+
* Walk the (filtered) subtree once to determine the deepest reachable descendant. Mirrors the
|
|
46
|
+
* structure of the emit-walk in {@linkcode generateMermaidMarkup} so the depths it computes line up
|
|
47
|
+
* with the edges that will be emitted. Cycles in the DAG are guarded by the `visited` set.
|
|
48
|
+
*/
|
|
49
|
+
function measureMaxDepth(root, roles) {
|
|
50
|
+
let maxDepth = 0;
|
|
51
|
+
const visited = new Set();
|
|
52
|
+
const walk = (node, depth) => {
|
|
53
|
+
for (const child of node.findChildren(roles)) {
|
|
54
|
+
const childDepth = depth + 1;
|
|
55
|
+
if (childDepth > maxDepth)
|
|
56
|
+
maxDepth = childDepth;
|
|
57
|
+
if (visited.has(child.name))
|
|
58
|
+
continue;
|
|
59
|
+
visited.add(child.name);
|
|
60
|
+
walk(child, childDepth);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
walk(root, 0);
|
|
64
|
+
return maxDepth;
|
|
65
|
+
}
|
|
15
66
|
/**
|
|
16
67
|
* Generate a Mermaid flowchart markup for a placetype and its descendants.
|
|
68
|
+
*
|
|
69
|
+
* The walk is a recursive `findChildren` traversal — every emitted edge is a real direct-parent →
|
|
70
|
+
* direct-child relationship. WOF placetypes form a DAG (e.g. `borough` has both `country` and
|
|
71
|
+
* `macroregion` as parents), so a child can legitimately appear on multiple edges; the `visited`
|
|
72
|
+
* set prevents the subtree below it from being re-emitted.
|
|
73
|
+
*
|
|
74
|
+
* Edges are colored by depth from the root via
|
|
75
|
+
* {@linkcode GenerateMermaidMarkupOptions.edgeInterpolator} (default: viridis), so any lineage path
|
|
76
|
+
* traces a smooth gradient down the chart. Node fills always use the hand-tuned role palette.
|
|
17
77
|
*/
|
|
18
|
-
export function generateMermaidMarkup(placetype,
|
|
78
|
+
export function generateMermaidMarkup(placetype, options = {}) {
|
|
79
|
+
const { roles, edgeInterpolator = interpolateViridis } = options;
|
|
80
|
+
const palette = HAND_TUNED_PALETTE;
|
|
19
81
|
const lines = [
|
|
20
82
|
"---",
|
|
21
83
|
"config:",
|
|
@@ -24,21 +86,31 @@ export function generateMermaidMarkup(placetype, roles) {
|
|
|
24
86
|
"---",
|
|
25
87
|
"graph TD",
|
|
26
88
|
" linkStyle default stroke-width: 5",
|
|
27
|
-
` classDef
|
|
28
|
-
|
|
29
|
-
|
|
89
|
+
...PlacetypeRoles.map((role) => ` classDef ${role} fill:${palette[role].fill},stroke:${palette[role].stroke},color:${palette[role].text},font-weight:bold`),
|
|
90
|
+
// The root is never the target of an emitted edge, so declare it standalone so it picks
|
|
91
|
+
// up the role classDef and renders alongside the others.
|
|
92
|
+
` ${placetype.name}:::${placetype.role}`,
|
|
30
93
|
];
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
94
|
+
// Pre-compute max depth once so every edge's `t` is consistent across the second pass.
|
|
95
|
+
const maxDepth = measureMaxDepth(placetype, roles);
|
|
96
|
+
const visited = new Set();
|
|
97
|
+
let edgeIdx = 0;
|
|
98
|
+
const walk = (node, depth) => {
|
|
99
|
+
for (const child of node.findChildren(roles)) {
|
|
100
|
+
const childDepth = depth + 1;
|
|
101
|
+
// Single-level case: nothing to interpolate across, sample mid-gradient.
|
|
102
|
+
const t = maxDepth > 1 ? (childDepth - 1) / (maxDepth - 1) : 0.5;
|
|
103
|
+
const edgeColor = toMermaidColor(edgeInterpolator(t));
|
|
104
|
+
lines.push(` ${node.name} --> ${child.name}:::${child.role}`);
|
|
105
|
+
lines.push(` linkStyle ${edgeIdx} stroke:${edgeColor}`);
|
|
106
|
+
edgeIdx++;
|
|
107
|
+
if (visited.has(child.name))
|
|
108
|
+
continue;
|
|
109
|
+
visited.add(child.name);
|
|
110
|
+
walk(child, childDepth);
|
|
40
111
|
}
|
|
41
|
-
}
|
|
112
|
+
};
|
|
113
|
+
walk(placetype, 0);
|
|
42
114
|
return lines.join("\n");
|
|
43
115
|
}
|
|
44
116
|
//# sourceMappingURL=mermaid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../../../../resources/whosonfirst/placetypes/mermaid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../../../../resources/whosonfirst/placetypes/mermaid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
import type { PlacetypeRole } from "./definition.js";
|
|
7
|
+
import { Placetype } from "./Placetype.js";
|
|
8
|
+
/**
|
|
9
|
+
* A node in the nested placetype tree produced by {@linkcode generatePlacetypeTree}.
|
|
10
|
+
*
|
|
11
|
+
* WOF placetypes form a DAG (a placetype can have multiple parents — `borough`, for example, is a
|
|
12
|
+
* direct child of both `country` and `macroregion`), so a tree projection rooted at a single
|
|
13
|
+
* placetype can list the same descendant under multiple branches. That repetition is expected.
|
|
14
|
+
*/
|
|
15
|
+
export interface PlacetypeTreeNode {
|
|
16
|
+
name: string;
|
|
17
|
+
id: number;
|
|
18
|
+
role: PlacetypeRole;
|
|
19
|
+
children: PlacetypeTreeNode[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build a nested tree of a placetype and its descendants, optionally filtered by role.
|
|
23
|
+
*
|
|
24
|
+
* The traversal mirrors {@linkcode Placetype.findChildren} — direct children only at each level,
|
|
25
|
+
* recursively. The DAG-to-tree projection may repeat descendants under multiple parents; if you
|
|
26
|
+
* need each placetype to appear exactly once, use {@linkcode Placetype.findDescendants} for a flat
|
|
27
|
+
* de-duplicated set instead.
|
|
28
|
+
*/
|
|
29
|
+
export declare function generatePlacetypeTree(placetype: Placetype, roles?: Iterable<PlacetypeRole> | null): PlacetypeTreeNode;
|
|
30
|
+
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../../resources/whosonfirst/placetypes/tree.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,aAAa,CAAA;IACnB,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,GAAG,iBAAiB,CAIrH"}
|