@podlite/schema 0.0.50 → 0.0.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.podlite +22 -0
- package/LICENSE +1 -1
- package/esm/ast-helpers.js.map +1 -1
- package/esm/ast-inerator.js.map +1 -1
- package/esm/blocks-helpers.js.map +1 -1
- package/esm/exportAny.d.ts +2 -2
- package/esm/exportAny.js.map +1 -1
- package/esm/exportHtml.d.ts +1 -1
- package/esm/exportHtml.js +17 -7
- package/esm/exportHtml.js.map +1 -1
- package/esm/exportMarkdown.d.ts +1 -1
- package/esm/exportMarkdown.js +3 -9
- package/esm/exportMarkdown.js.map +1 -1
- package/esm/grammar.js +1133 -562
- package/esm/grammar.js.map +1 -1
- package/esm/grammarfc.js +1300 -1065
- package/esm/grammarfc.js.map +1 -1
- package/esm/helpers/config.d.ts +1 -1
- package/esm/helpers/config.js.map +1 -1
- package/esm/helpers/configPropagation.d.ts +2 -2
- package/esm/helpers/configPropagation.js.map +1 -1
- package/esm/helpers/corePlugins.js.map +1 -1
- package/esm/helpers/handlers.js.map +1 -1
- package/esm/helpers/headingNumbering.d.ts +2 -2
- package/esm/helpers/headingNumbering.js.map +1 -1
- package/esm/helpers/ids.js.map +1 -1
- package/esm/helpers/itemNumbering.d.ts +2 -2
- package/esm/helpers/itemNumbering.js.map +1 -1
- package/esm/helpers/makeInterator.js.map +1 -1
- package/esm/helpers/makeQuery.d.ts +2 -2
- package/esm/helpers/makeQuery.js.map +1 -1
- package/esm/helpers/makeTransformer.js.map +1 -1
- package/esm/helpers/parseAttributes.js.map +1 -1
- package/esm/helpers/plugins.js.map +1 -1
- package/esm/image-base.js.map +1 -1
- package/esm/index.d.ts +7 -10
- package/esm/index.js +3 -2
- package/esm/index.js.map +1 -1
- package/esm/pluggableParser.js.map +1 -1
- package/esm/plugin-clean-location.js.map +1 -1
- package/esm/plugin-data-table.js.map +1 -1
- package/esm/plugin-defn-fill-term.js.map +1 -1
- package/esm/plugin-group-defn.js +1 -1
- package/esm/plugin-group-defn.js.map +1 -1
- package/esm/plugin-group-items.js.map +1 -1
- package/esm/plugin-heading.js.map +1 -1
- package/esm/plugin-items.js.map +1 -1
- package/esm/plugin-set.d.ts +2 -0
- package/esm/plugin-set.js +54 -0
- package/esm/plugin-set.js.map +1 -0
- package/esm/plugin-tables.js +5 -2
- package/esm/plugin-tables.js.map +1 -1
- package/esm/plugin-vmargin.js.map +1 -1
- package/esm/query-helpers.d.ts +2 -2
- package/esm/query-helpers.js.map +1 -1
- package/esm/selectors.d.ts +6 -6
- package/esm/selectors.js.map +1 -1
- package/esm/types.d.ts +9 -8
- package/esm/version.d.ts +1 -1
- package/esm/version.js +1 -1
- package/esm/writer.d.ts +0 -1
- package/esm/writer.js.map +1 -1
- package/lib/ast-inerator.js +2 -2
- package/lib/exportAny.d.ts +2 -2
- package/lib/exportHtml.d.ts +1 -1
- package/lib/exportHtml.js +17 -7
- package/lib/exportMarkdown.d.ts +1 -1
- package/lib/exportMarkdown.js +3 -9
- package/lib/grammar.js +1133 -562
- package/lib/grammarfc.js +1300 -1065
- package/lib/helpers/config.d.ts +1 -1
- package/lib/helpers/configPropagation.d.ts +2 -2
- package/lib/helpers/headingNumbering.d.ts +2 -2
- package/lib/helpers/itemNumbering.d.ts +2 -2
- package/lib/helpers/makeQuery.d.ts +2 -2
- package/lib/helpers/makeQuery.js +2 -2
- package/lib/helpers/makeTransformer.js +3 -3
- package/lib/helpers/parseAttributes.js +23 -10
- package/lib/index.d.ts +7 -10
- package/lib/index.js +35 -26
- package/lib/plugin-formatting-codes.js +22 -8
- package/lib/plugin-group-defn.js +1 -1
- package/lib/plugin-set.d.ts +2 -0
- package/lib/plugin-set.js +56 -0
- package/lib/plugin-tables.js +12 -10
- package/lib/query-helpers.d.ts +2 -2
- package/lib/selectors.d.ts +6 -6
- package/lib/types.d.ts +9 -8
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/writer.d.ts +0 -1
- package/lib/writer.js +22 -8
- package/package.json +7 -3
- package/schema/AstTree.json +200 -382
- package/schema/PodliteDocument.json +200 -382
- package/esm/fallback-resolver.d.ts +0 -24
- package/esm/fallback-resolver.js +0 -86
- package/esm/fallback-resolver.js.map +0 -1
- package/esm/materialize-fallback.d.ts +0 -6
- package/esm/materialize-fallback.js +0 -61
- package/esm/materialize-fallback.js.map +0 -1
- package/lib/fallback-resolver.d.ts +0 -24
- package/lib/fallback-resolver.js +0 -94
- package/lib/materialize-fallback.d.ts +0 -6
- package/lib/materialize-fallback.js +0 -66
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { PodNode } from './types';
|
|
2
|
-
export declare type FallbackResolveResult = {
|
|
3
|
-
resolved: string;
|
|
4
|
-
chain: string[];
|
|
5
|
-
};
|
|
6
|
-
export declare type ResolveOptions = {
|
|
7
|
-
maxDepth?: number;
|
|
8
|
-
isTerminal?: (type: string) => boolean;
|
|
9
|
-
};
|
|
10
|
-
export declare class FallbackCycleError extends Error {
|
|
11
|
-
chain: string[];
|
|
12
|
-
constructor(chain: string[]);
|
|
13
|
-
}
|
|
14
|
-
export declare class FallbackDepthError extends Error {
|
|
15
|
-
chain: string[];
|
|
16
|
-
constructor(chain: string[], maxDepth: number);
|
|
17
|
-
}
|
|
18
|
-
export declare class FallbackMissingTargetError extends Error {
|
|
19
|
-
chain: string[];
|
|
20
|
-
target: string;
|
|
21
|
-
constructor(chain: string[], target: string);
|
|
22
|
-
}
|
|
23
|
-
export declare const collectFallbackMap: (ast: PodNode) => Map<string, string>;
|
|
24
|
-
export declare const resolveFallback: (startType: string, map: Map<string, string>, opts?: ResolveOptions) => FallbackResolveResult;
|
package/esm/fallback-resolver.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
export class FallbackCycleError extends Error {
|
|
2
|
-
chain;
|
|
3
|
-
constructor(chain) {
|
|
4
|
-
super(`fallback cycle detected: ${chain.join(' -> ')}`);
|
|
5
|
-
Object.setPrototypeOf(this, FallbackCycleError.prototype);
|
|
6
|
-
this.name = 'FallbackCycleError';
|
|
7
|
-
this.chain = chain;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
export class FallbackDepthError extends Error {
|
|
11
|
-
chain;
|
|
12
|
-
constructor(chain, maxDepth) {
|
|
13
|
-
super(`fallback chain exceeds max depth ${maxDepth}: ${chain.join(' -> ')}`);
|
|
14
|
-
Object.setPrototypeOf(this, FallbackDepthError.prototype);
|
|
15
|
-
this.name = 'FallbackDepthError';
|
|
16
|
-
this.chain = chain;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export class FallbackMissingTargetError extends Error {
|
|
20
|
-
chain;
|
|
21
|
-
target;
|
|
22
|
-
constructor(chain, target) {
|
|
23
|
-
super(`fallback target not defined: ${target} (chain: ${chain.join(' -> ')})`);
|
|
24
|
-
Object.setPrototypeOf(this, FallbackMissingTargetError.prototype);
|
|
25
|
-
this.name = 'FallbackMissingTargetError';
|
|
26
|
-
this.chain = chain;
|
|
27
|
-
this.target = target;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
const DEFAULT_MAX_DEPTH = 8;
|
|
31
|
-
const fallbackTarget = (config) => {
|
|
32
|
-
if (!Array.isArray(config))
|
|
33
|
-
return undefined;
|
|
34
|
-
const item = config.find(c => c && c.name === 'fallback');
|
|
35
|
-
return item && typeof item.value === 'string' ? item.value : undefined;
|
|
36
|
-
};
|
|
37
|
-
export const collectFallbackMap = (ast) => {
|
|
38
|
-
const map = new Map();
|
|
39
|
-
const walk = (node) => {
|
|
40
|
-
if (Array.isArray(node)) {
|
|
41
|
-
node.forEach(walk);
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
if (!node || typeof node !== 'object')
|
|
45
|
-
return;
|
|
46
|
-
const anyNode = node;
|
|
47
|
-
if (anyNode.type === 'config' && typeof anyNode.name === 'string') {
|
|
48
|
-
const target = fallbackTarget(anyNode.config);
|
|
49
|
-
if (target !== undefined)
|
|
50
|
-
map.set(anyNode.name, target);
|
|
51
|
-
}
|
|
52
|
-
if (anyNode.content !== undefined)
|
|
53
|
-
walk(anyNode.content);
|
|
54
|
-
};
|
|
55
|
-
walk(ast);
|
|
56
|
-
return map;
|
|
57
|
-
};
|
|
58
|
-
export const resolveFallback = (startType, map, opts = {}) => {
|
|
59
|
-
const maxDepth = opts.maxDepth ?? DEFAULT_MAX_DEPTH;
|
|
60
|
-
const isTerminal = opts.isTerminal;
|
|
61
|
-
const visited = new Set();
|
|
62
|
-
const chain = [];
|
|
63
|
-
let current = startType;
|
|
64
|
-
let depth = 0;
|
|
65
|
-
for (;;) {
|
|
66
|
-
chain.push(current);
|
|
67
|
-
if (isTerminal && isTerminal(current))
|
|
68
|
-
break;
|
|
69
|
-
if (!map.has(current))
|
|
70
|
-
break;
|
|
71
|
-
if (visited.has(current)) {
|
|
72
|
-
throw new FallbackCycleError(chain);
|
|
73
|
-
}
|
|
74
|
-
visited.add(current);
|
|
75
|
-
depth += 1;
|
|
76
|
-
if (depth > maxDepth) {
|
|
77
|
-
throw new FallbackDepthError(chain, maxDepth);
|
|
78
|
-
}
|
|
79
|
-
current = map.get(current);
|
|
80
|
-
}
|
|
81
|
-
if (isTerminal && !isTerminal(current)) {
|
|
82
|
-
throw new FallbackMissingTargetError(chain, current);
|
|
83
|
-
}
|
|
84
|
-
return { resolved: current, chain };
|
|
85
|
-
};
|
|
86
|
-
//# sourceMappingURL=fallback-resolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fallback-resolver.js","sourceRoot":"","sources":["../src/fallback-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export declare type MaterializeOptions = {
|
|
2
|
-
maxDepth?: number;
|
|
3
|
-
};
|
|
4
|
-
export declare const deriveFallbackNode: (node: any, map: Map<string, string>, opts?: MaterializeOptions) => any | null;
|
|
5
|
-
export declare const materializeFallback: <T>(ast: T, opts?: MaterializeOptions) => T;
|
|
6
|
-
export default materializeFallback;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { makeAttrs } from './helpers/config';
|
|
2
|
-
import { collectFallbackMap, resolveFallback } from './fallback-resolver';
|
|
3
|
-
const isCustomBlock = (node) => {
|
|
4
|
-
const name = node && node.name;
|
|
5
|
-
return node && node.type === 'block' && typeof name === 'string' && name !== name.toLowerCase();
|
|
6
|
-
};
|
|
7
|
-
const provenance = (originalName, chain) => [
|
|
8
|
-
{ name: 'original-name', value: originalName, type: 'string' },
|
|
9
|
-
{ name: 'resolved-via', value: chain, type: 'array' },
|
|
10
|
-
];
|
|
11
|
-
export const deriveFallbackNode = (node, map, opts = {}) => {
|
|
12
|
-
if (!node || !isCustomBlock(node))
|
|
13
|
-
return null;
|
|
14
|
-
// resolve from the node's own name so depth counts every hop; a per-instance
|
|
15
|
-
// :fallback overrides the type-level entry for the first hop
|
|
16
|
-
const own = makeAttrs(node).getFirstValue('fallback');
|
|
17
|
-
const hasOwn = typeof own === 'string';
|
|
18
|
-
if (!hasOwn && !map.has(node.name))
|
|
19
|
-
return null;
|
|
20
|
-
const effectiveMap = hasOwn && map.get(node.name) !== own ? new Map(map).set(node.name, own) : map;
|
|
21
|
-
let result;
|
|
22
|
-
try {
|
|
23
|
-
result = resolveFallback(node.name, effectiveMap, { maxDepth: opts.maxDepth });
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
if (result.resolved === node.name)
|
|
29
|
-
return null;
|
|
30
|
-
const config = [...(Array.isArray(node.config) ? node.config : []), ...provenance(node.name, result.chain)];
|
|
31
|
-
return { ...node, name: result.resolved, config };
|
|
32
|
-
};
|
|
33
|
-
export const materializeFallback = (ast, opts = {}) => {
|
|
34
|
-
const map = collectFallbackMap(ast);
|
|
35
|
-
const walk = (node) => {
|
|
36
|
-
if (Array.isArray(node)) {
|
|
37
|
-
let changed = false;
|
|
38
|
-
const mapped = node.map(child => {
|
|
39
|
-
const next = walk(child);
|
|
40
|
-
if (next !== child)
|
|
41
|
-
changed = true;
|
|
42
|
-
return next;
|
|
43
|
-
});
|
|
44
|
-
return changed ? mapped : node;
|
|
45
|
-
}
|
|
46
|
-
if (!node || typeof node !== 'object')
|
|
47
|
-
return node;
|
|
48
|
-
const derived = deriveFallbackNode(node, map, opts);
|
|
49
|
-
const base = derived || node;
|
|
50
|
-
if (base.content !== undefined) {
|
|
51
|
-
const content = walk(base.content);
|
|
52
|
-
if (derived || content !== base.content)
|
|
53
|
-
return { ...base, content };
|
|
54
|
-
return node;
|
|
55
|
-
}
|
|
56
|
-
return derived || node;
|
|
57
|
-
};
|
|
58
|
-
return walk(ast);
|
|
59
|
-
};
|
|
60
|
-
export default materializeFallback;
|
|
61
|
-
//# sourceMappingURL=materialize-fallback.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"materialize-fallback.js","sourceRoot":"","sources":["../src/materialize-fallback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAMzE,MAAM,aAAa,GAAG,CAAC,IAAS,EAAW,EAAE;IAC3C,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAA;IAC9B,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAA;AACjG,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,YAAoB,EAAE,KAAe,EAAgB,EAAE,CAAC;IAC1E,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC9D,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;CACtD,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAS,EAAE,GAAwB,EAAE,OAA2B,EAAE,EAAc,EAAE;IACnH,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAC9C,6EAA6E;IAC7E,6DAA6D;IAC7D,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAA;IACtC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAC/C,MAAM,YAAY,GAAG,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAClG,IAAI,MAAM,CAAA;IACV,IAAI;QACF,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;KAC/E;IAAC,MAAM;QACN,OAAO,IAAI,CAAA;KACZ;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IAC9C,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC3G,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;AACnD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAI,GAAM,EAAE,OAA2B,EAAE,EAAK,EAAE;IACjF,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAyB,CAAC,CAAA;IACzD,MAAM,IAAI,GAAG,CAAC,IAAS,EAAO,EAAE;QAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,OAAO,GAAG,KAAK,CAAA;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;gBACxB,IAAI,IAAI,KAAK,KAAK;oBAAE,OAAO,GAAG,IAAI,CAAA;gBAClC,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;YACF,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;SAC/B;QACD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAA;QAClD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QACnD,MAAM,IAAI,GAAG,OAAO,IAAI,IAAI,CAAA;QAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAClC,IAAI,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAA;YACpE,OAAO,IAAI,CAAA;SACZ;QACD,OAAO,OAAO,IAAI,IAAI,CAAA;IACxB,CAAC,CAAA;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC,CAAA;AAED,eAAe,mBAAmB,CAAA"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { PodNode } from './types';
|
|
2
|
-
export declare type FallbackResolveResult = {
|
|
3
|
-
resolved: string;
|
|
4
|
-
chain: string[];
|
|
5
|
-
};
|
|
6
|
-
export declare type ResolveOptions = {
|
|
7
|
-
maxDepth?: number;
|
|
8
|
-
isTerminal?: (type: string) => boolean;
|
|
9
|
-
};
|
|
10
|
-
export declare class FallbackCycleError extends Error {
|
|
11
|
-
chain: string[];
|
|
12
|
-
constructor(chain: string[]);
|
|
13
|
-
}
|
|
14
|
-
export declare class FallbackDepthError extends Error {
|
|
15
|
-
chain: string[];
|
|
16
|
-
constructor(chain: string[], maxDepth: number);
|
|
17
|
-
}
|
|
18
|
-
export declare class FallbackMissingTargetError extends Error {
|
|
19
|
-
chain: string[];
|
|
20
|
-
target: string;
|
|
21
|
-
constructor(chain: string[], target: string);
|
|
22
|
-
}
|
|
23
|
-
export declare const collectFallbackMap: (ast: PodNode) => Map<string, string>;
|
|
24
|
-
export declare const resolveFallback: (startType: string, map: Map<string, string>, opts?: ResolveOptions) => FallbackResolveResult;
|
package/lib/fallback-resolver.js
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resolveFallback = exports.collectFallbackMap = exports.FallbackMissingTargetError = exports.FallbackDepthError = exports.FallbackCycleError = void 0;
|
|
4
|
-
class FallbackCycleError extends Error {
|
|
5
|
-
chain;
|
|
6
|
-
constructor(chain) {
|
|
7
|
-
super(`fallback cycle detected: ${chain.join(' -> ')}`);
|
|
8
|
-
Object.setPrototypeOf(this, FallbackCycleError.prototype);
|
|
9
|
-
this.name = 'FallbackCycleError';
|
|
10
|
-
this.chain = chain;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.FallbackCycleError = FallbackCycleError;
|
|
14
|
-
class FallbackDepthError extends Error {
|
|
15
|
-
chain;
|
|
16
|
-
constructor(chain, maxDepth) {
|
|
17
|
-
super(`fallback chain exceeds max depth ${maxDepth}: ${chain.join(' -> ')}`);
|
|
18
|
-
Object.setPrototypeOf(this, FallbackDepthError.prototype);
|
|
19
|
-
this.name = 'FallbackDepthError';
|
|
20
|
-
this.chain = chain;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
exports.FallbackDepthError = FallbackDepthError;
|
|
24
|
-
class FallbackMissingTargetError extends Error {
|
|
25
|
-
chain;
|
|
26
|
-
target;
|
|
27
|
-
constructor(chain, target) {
|
|
28
|
-
super(`fallback target not defined: ${target} (chain: ${chain.join(' -> ')})`);
|
|
29
|
-
Object.setPrototypeOf(this, FallbackMissingTargetError.prototype);
|
|
30
|
-
this.name = 'FallbackMissingTargetError';
|
|
31
|
-
this.chain = chain;
|
|
32
|
-
this.target = target;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
exports.FallbackMissingTargetError = FallbackMissingTargetError;
|
|
36
|
-
const DEFAULT_MAX_DEPTH = 8;
|
|
37
|
-
const fallbackTarget = (config) => {
|
|
38
|
-
if (!Array.isArray(config))
|
|
39
|
-
return undefined;
|
|
40
|
-
const item = config.find(c => c && c.name === 'fallback');
|
|
41
|
-
return item && typeof item.value === 'string' ? item.value : undefined;
|
|
42
|
-
};
|
|
43
|
-
const collectFallbackMap = (ast) => {
|
|
44
|
-
const map = new Map();
|
|
45
|
-
const walk = (node) => {
|
|
46
|
-
if (Array.isArray(node)) {
|
|
47
|
-
node.forEach(walk);
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
if (!node || typeof node !== 'object')
|
|
51
|
-
return;
|
|
52
|
-
const anyNode = node;
|
|
53
|
-
if (anyNode.type === 'config' && typeof anyNode.name === 'string') {
|
|
54
|
-
const target = fallbackTarget(anyNode.config);
|
|
55
|
-
if (target !== undefined)
|
|
56
|
-
map.set(anyNode.name, target);
|
|
57
|
-
}
|
|
58
|
-
if (anyNode.content !== undefined)
|
|
59
|
-
walk(anyNode.content);
|
|
60
|
-
};
|
|
61
|
-
walk(ast);
|
|
62
|
-
return map;
|
|
63
|
-
};
|
|
64
|
-
exports.collectFallbackMap = collectFallbackMap;
|
|
65
|
-
const resolveFallback = (startType, map, opts = {}) => {
|
|
66
|
-
const maxDepth = opts.maxDepth ?? DEFAULT_MAX_DEPTH;
|
|
67
|
-
const isTerminal = opts.isTerminal;
|
|
68
|
-
const visited = new Set();
|
|
69
|
-
const chain = [];
|
|
70
|
-
let current = startType;
|
|
71
|
-
let depth = 0;
|
|
72
|
-
for (;;) {
|
|
73
|
-
chain.push(current);
|
|
74
|
-
if (isTerminal && isTerminal(current))
|
|
75
|
-
break;
|
|
76
|
-
if (!map.has(current))
|
|
77
|
-
break;
|
|
78
|
-
if (visited.has(current)) {
|
|
79
|
-
throw new FallbackCycleError(chain);
|
|
80
|
-
}
|
|
81
|
-
visited.add(current);
|
|
82
|
-
depth += 1;
|
|
83
|
-
if (depth > maxDepth) {
|
|
84
|
-
throw new FallbackDepthError(chain, maxDepth);
|
|
85
|
-
}
|
|
86
|
-
current = map.get(current);
|
|
87
|
-
}
|
|
88
|
-
if (isTerminal && !isTerminal(current)) {
|
|
89
|
-
throw new FallbackMissingTargetError(chain, current);
|
|
90
|
-
}
|
|
91
|
-
return { resolved: current, chain };
|
|
92
|
-
};
|
|
93
|
-
exports.resolveFallback = resolveFallback;
|
|
94
|
-
//# sourceMappingURL=fallback-resolver.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export declare type MaterializeOptions = {
|
|
2
|
-
maxDepth?: number;
|
|
3
|
-
};
|
|
4
|
-
export declare const deriveFallbackNode: (node: any, map: Map<string, string>, opts?: MaterializeOptions) => any | null;
|
|
5
|
-
export declare const materializeFallback: <T>(ast: T, opts?: MaterializeOptions) => T;
|
|
6
|
-
export default materializeFallback;
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.materializeFallback = exports.deriveFallbackNode = void 0;
|
|
4
|
-
const config_1 = require("./helpers/config");
|
|
5
|
-
const fallback_resolver_1 = require("./fallback-resolver");
|
|
6
|
-
const isCustomBlock = (node) => {
|
|
7
|
-
const name = node && node.name;
|
|
8
|
-
return node && node.type === 'block' && typeof name === 'string' && name !== name.toLowerCase();
|
|
9
|
-
};
|
|
10
|
-
const provenance = (originalName, chain) => [
|
|
11
|
-
{ name: 'original-name', value: originalName, type: 'string' },
|
|
12
|
-
{ name: 'resolved-via', value: chain, type: 'array' },
|
|
13
|
-
];
|
|
14
|
-
const deriveFallbackNode = (node, map, opts = {}) => {
|
|
15
|
-
if (!node || !isCustomBlock(node))
|
|
16
|
-
return null;
|
|
17
|
-
// resolve from the node's own name so depth counts every hop; a per-instance
|
|
18
|
-
// :fallback overrides the type-level entry for the first hop
|
|
19
|
-
const own = (0, config_1.makeAttrs)(node).getFirstValue('fallback');
|
|
20
|
-
const hasOwn = typeof own === 'string';
|
|
21
|
-
if (!hasOwn && !map.has(node.name))
|
|
22
|
-
return null;
|
|
23
|
-
const effectiveMap = hasOwn && map.get(node.name) !== own ? new Map(map).set(node.name, own) : map;
|
|
24
|
-
let result;
|
|
25
|
-
try {
|
|
26
|
-
result = (0, fallback_resolver_1.resolveFallback)(node.name, effectiveMap, { maxDepth: opts.maxDepth });
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
if (result.resolved === node.name)
|
|
32
|
-
return null;
|
|
33
|
-
const config = [...(Array.isArray(node.config) ? node.config : []), ...provenance(node.name, result.chain)];
|
|
34
|
-
return { ...node, name: result.resolved, config };
|
|
35
|
-
};
|
|
36
|
-
exports.deriveFallbackNode = deriveFallbackNode;
|
|
37
|
-
const materializeFallback = (ast, opts = {}) => {
|
|
38
|
-
const map = (0, fallback_resolver_1.collectFallbackMap)(ast);
|
|
39
|
-
const walk = (node) => {
|
|
40
|
-
if (Array.isArray(node)) {
|
|
41
|
-
let changed = false;
|
|
42
|
-
const mapped = node.map(child => {
|
|
43
|
-
const next = walk(child);
|
|
44
|
-
if (next !== child)
|
|
45
|
-
changed = true;
|
|
46
|
-
return next;
|
|
47
|
-
});
|
|
48
|
-
return changed ? mapped : node;
|
|
49
|
-
}
|
|
50
|
-
if (!node || typeof node !== 'object')
|
|
51
|
-
return node;
|
|
52
|
-
const derived = (0, exports.deriveFallbackNode)(node, map, opts);
|
|
53
|
-
const base = derived || node;
|
|
54
|
-
if (base.content !== undefined) {
|
|
55
|
-
const content = walk(base.content);
|
|
56
|
-
if (derived || content !== base.content)
|
|
57
|
-
return { ...base, content };
|
|
58
|
-
return node;
|
|
59
|
-
}
|
|
60
|
-
return derived || node;
|
|
61
|
-
};
|
|
62
|
-
return walk(ast);
|
|
63
|
-
};
|
|
64
|
-
exports.materializeFallback = materializeFallback;
|
|
65
|
-
exports.default = exports.materializeFallback;
|
|
66
|
-
//# sourceMappingURL=materialize-fallback.js.map
|