@component-compass/reference-graph 0.1.22 → 0.1.24
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/engine/argument-map.d.ts +7 -0
- package/dist/engine/argument-map.js +7 -0
- package/dist/engine/argument-map.js.map +1 -1
- package/dist/engine/component-shape.js +2 -2
- package/dist/engine/component-shape.js.map +1 -1
- package/dist/engine/denotation.d.ts +83 -0
- package/dist/engine/denotation.js +40 -0
- package/dist/engine/denotation.js.map +1 -0
- package/dist/engine/host-element.d.ts +7 -3
- package/dist/engine/host-element.js +7 -3
- package/dist/engine/host-element.js.map +1 -1
- package/dist/engine/index.d.ts +5 -23
- package/dist/engine/index.js +287 -427
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/library-stubs.d.ts +36 -0
- package/dist/engine/library-stubs.js +26 -29
- package/dist/engine/library-stubs.js.map +1 -1
- package/dist/engine/registry.d.ts +13 -2
- package/dist/engine/registry.js +68 -32
- package/dist/engine/registry.js.map +1 -1
- package/dist/engine/resolve-type.d.ts +1 -1
- package/dist/engine/resolve-type.js +3 -2
- package/dist/engine/resolve-type.js.map +1 -1
- package/dist/engine/wrapper-folding.d.ts +3 -13
- package/dist/engine/wrapper-folding.js +283 -54
- package/dist/engine/wrapper-folding.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -11,6 +11,13 @@ export interface ArgumentMap {
|
|
|
11
11
|
unbind(fn: Reference): void;
|
|
12
12
|
lookup(fn: Reference, index: number): InferredType | undefined;
|
|
13
13
|
}
|
|
14
|
+
/** THE question "did the call the walk is inside bind this parameter", and the
|
|
15
|
+
* argument it bound, asked once. Every reader of a `ParameterOf` — the
|
|
16
|
+
* algebra's substitution, the component-shape predicate, the walker's
|
|
17
|
+
* late-bound naming — calls this rather than keying the map itself. */
|
|
18
|
+
export declare function boundArgument(argMap: ArgumentMap, param: Extract<InferredType, {
|
|
19
|
+
kind: "ParameterOf";
|
|
20
|
+
}>): InferredType | undefined;
|
|
14
21
|
/** Key an ArgumentMap frame by. Exported so wrapper-folding's structural
|
|
15
22
|
* pass-through check compares `ParameterOf.fn` against a callee's
|
|
16
23
|
* `bindingRef` exactly the way `lookup` would. */
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/** THE question "did the call the walk is inside bind this parameter", and the
|
|
2
|
+
* argument it bound, asked once. Every reader of a `ParameterOf` — the
|
|
3
|
+
* algebra's substitution, the component-shape predicate, the walker's
|
|
4
|
+
* late-bound naming — calls this rather than keying the map itself. */
|
|
5
|
+
export function boundArgument(argMap, param) {
|
|
6
|
+
return argMap.lookup(param.fn, param.index);
|
|
7
|
+
}
|
|
1
8
|
/** Key an ArgumentMap frame by. Exported so wrapper-folding's structural
|
|
2
9
|
* pass-through check compares `ParameterOf.fn` against a callee's
|
|
3
10
|
* `bindingRef` exactly the way `lookup` would. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"argument-map.js","sourceRoot":"","sources":["../../src/engine/argument-map.ts"],"names":[],"mappings":"AAeA;;mDAEmD;AACnD,MAAM,UAAU,cAAc,CAAC,GAAc;IAC3C,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,KAAK,GAAiD,EAAE,CAAC;IAC/D,OAAO;QACL,IAAI,CAAC,EAAE,EAAE,IAAI;YACX,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,CAAC,EAAE;YACP,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;oBAC1B,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACnB,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,CAAC,EAAE,EAAE,KAAK;YACd,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,KAAK,EAAE,GAAG,KAAK,GAAG;oBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"argument-map.js","sourceRoot":"","sources":["../../src/engine/argument-map.ts"],"names":[],"mappings":"AAeA;;;wEAGwE;AACxE,MAAM,UAAU,aAAa,CAC3B,MAAmB,EACnB,KAAqD;IAErD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED;;mDAEmD;AACnD,MAAM,UAAU,cAAc,CAAC,GAAc;IAC3C,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,KAAK,GAAiD,EAAE,CAAC;IAC/D,OAAO;QACL,IAAI,CAAC,EAAE,EAAE,IAAI;YACX,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,CAAC,EAAE;YACP,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;oBAC1B,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACnB,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,CAAC,EAAE,EAAE,KAAK;YACd,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,KAAK,EAAE,GAAG,KAAK,GAAG;oBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createArgumentMap } from "./argument-map.js";
|
|
1
|
+
import { boundArgument, createArgumentMap } from "./argument-map.js";
|
|
2
2
|
import { createCycleGuard } from "./cycle-detection.js";
|
|
3
3
|
import { fileGraphForRef, resolveReference } from "./resolve-reference.js";
|
|
4
4
|
import { resolveToFunctions, resolveType, DYNAMIC_MEMBER_KEY } from "./resolve-type.js";
|
|
@@ -31,7 +31,7 @@ function evalInner(t, ctx) {
|
|
|
31
31
|
case "Union":
|
|
32
32
|
return merge(t.types.map((u) => evalInner(u, ctx)));
|
|
33
33
|
case "ParameterOf": {
|
|
34
|
-
const bound = ctx.argMap
|
|
34
|
+
const bound = boundArgument(ctx.argMap, t);
|
|
35
35
|
return bound ? evalInner(bound, ctx) : "other";
|
|
36
36
|
}
|
|
37
37
|
case "TypeOf": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-shape.js","sourceRoot":"","sources":["../../src/engine/component-shape.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"component-shape.js","sourceRoot":"","sources":["../../src/engine/component-shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { OccurrenceVia } from "@component-compass/plugin-core";
|
|
2
|
+
import type { TerminalIdentity } from "./wrapper-folding.js";
|
|
3
|
+
/**
|
|
4
|
+
* THE closed set of things a value can denote when something asks "what is
|
|
5
|
+
* this tag". One variant per outcome a caller can act on differently. Adding a
|
|
6
|
+
* variant is a compile error at every `matchDenotation` call and in
|
|
7
|
+
* `RENDER_VERDICT`.
|
|
8
|
+
*/
|
|
9
|
+
export type Denotation =
|
|
10
|
+
/** An element value: a render body, or an already-rendered `const br = <br/>`. */
|
|
11
|
+
{
|
|
12
|
+
kind: "element";
|
|
13
|
+
}
|
|
14
|
+
/** A string the walk reached through value hops only — a reference, a union
|
|
15
|
+
* branch, a member of an object or array literal — so the TAG itself is the
|
|
16
|
+
* string: an intrinsic host element. */
|
|
17
|
+
| {
|
|
18
|
+
kind: "host-string";
|
|
19
|
+
value: string | null;
|
|
20
|
+
}
|
|
21
|
+
/** A framework value that is provably not a component (a context object). */
|
|
22
|
+
| {
|
|
23
|
+
kind: "opaque";
|
|
24
|
+
semantics: OpaqueSemantics;
|
|
25
|
+
}
|
|
26
|
+
/** A value supplied somewhere else: an unsubstituted parameter, a prop read
|
|
27
|
+
* off one, a hook result. */
|
|
28
|
+
| {
|
|
29
|
+
kind: "late-bound";
|
|
30
|
+
source: LateBoundSource;
|
|
31
|
+
}
|
|
32
|
+
/** An import the graph cannot see. Identity known, shape unknowable. */
|
|
33
|
+
| {
|
|
34
|
+
kind: "foreign";
|
|
35
|
+
}
|
|
36
|
+
/** Data: a value that reached tag position without being one — an object or
|
|
37
|
+
* array literal, or a string a function body or a call returned. */
|
|
38
|
+
| {
|
|
39
|
+
kind: "data";
|
|
40
|
+
shape: "object" | "array" | "string";
|
|
41
|
+
}
|
|
42
|
+
/** Nothing known. */
|
|
43
|
+
| {
|
|
44
|
+
kind: "indeterminate";
|
|
45
|
+
};
|
|
46
|
+
export type OpaqueSemantics = "context";
|
|
47
|
+
export type LateBoundSource = "parameter" | "parameter-member" | "hook-result";
|
|
48
|
+
/**
|
|
49
|
+
* One branch of an evaluation. `identity` is the binding this branch credits
|
|
50
|
+
* (null = "the caller's own fallback names this render"); `viaTrail` is the
|
|
51
|
+
* fold's hops, outermost-first, excluding the caller's outer via.
|
|
52
|
+
*/
|
|
53
|
+
export type Terminal = {
|
|
54
|
+
denotation: Denotation;
|
|
55
|
+
identity: TerminalIdentity;
|
|
56
|
+
viaTrail: OccurrenceVia[];
|
|
57
|
+
};
|
|
58
|
+
/** The result of evaluating one value. Never empty. */
|
|
59
|
+
export type Evaluation = readonly [Terminal, ...Terminal[]];
|
|
60
|
+
/** One handler per denotation kind. A missing key is a type error; there is
|
|
61
|
+
* deliberately no default case and no `Partial`. */
|
|
62
|
+
export type DenotationCases<R> = {
|
|
63
|
+
[K in Denotation["kind"]]: (d: Extract<Denotation, {
|
|
64
|
+
kind: K;
|
|
65
|
+
}>, t: Terminal) => R;
|
|
66
|
+
};
|
|
67
|
+
/** The only sanctioned reader of `Denotation["kind"]` outside this module. */
|
|
68
|
+
export declare function matchDenotation<R>(t: Terminal, cases: DenotationCases<R>): R;
|
|
69
|
+
export type RenderOutcome = {
|
|
70
|
+
kind: "credit";
|
|
71
|
+
terminals: readonly [Terminal, ...Terminal[]];
|
|
72
|
+
} | {
|
|
73
|
+
kind: "silent";
|
|
74
|
+
because: "host-string" | "opaque";
|
|
75
|
+
} | {
|
|
76
|
+
kind: "diagnose";
|
|
77
|
+
code: "late-bound-render" | "unresolved-reference";
|
|
78
|
+
};
|
|
79
|
+
/** The terminals a render of this value credits — rule 1 of the table, shared
|
|
80
|
+
* with the holder fold and argument-site seeding so there is not one
|
|
81
|
+
* classification per arm. Empty when nothing is credited. */
|
|
82
|
+
export declare function creditedTerminals(e: readonly Terminal[]): Terminal[];
|
|
83
|
+
export declare function renderOutcome(e: Evaluation): RenderOutcome;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** The only sanctioned reader of `Denotation["kind"]` outside this module. */
|
|
2
|
+
export function matchDenotation(t, cases) {
|
|
3
|
+
const handler = cases[t.denotation.kind];
|
|
4
|
+
return handler(t.denotation, t);
|
|
5
|
+
}
|
|
6
|
+
/** THE table: what one denotation means for a tag position. Stated once. */
|
|
7
|
+
const RENDER_VERDICT = {
|
|
8
|
+
element: () => "credit",
|
|
9
|
+
foreign: () => "credit",
|
|
10
|
+
"host-string": () => "silent",
|
|
11
|
+
opaque: () => "silent",
|
|
12
|
+
"late-bound": () => "late-bound",
|
|
13
|
+
data: () => "unresolved",
|
|
14
|
+
indeterminate: () => "unresolved",
|
|
15
|
+
};
|
|
16
|
+
/** THE fan-out precedence: a Union / dynamic-map evaluation has several
|
|
17
|
+
* terminals with different verdicts. Highest wins, once, here. */
|
|
18
|
+
const VERDICT_ORDER = ["credit", "silent", "late-bound", "unresolved"];
|
|
19
|
+
/** The terminals a render of this value credits — rule 1 of the table, shared
|
|
20
|
+
* with the holder fold and argument-site seeding so there is not one
|
|
21
|
+
* classification per arm. Empty when nothing is credited. */
|
|
22
|
+
export function creditedTerminals(e) {
|
|
23
|
+
return e.filter((t) => matchDenotation(t, RENDER_VERDICT) === "credit");
|
|
24
|
+
}
|
|
25
|
+
export function renderOutcome(e) {
|
|
26
|
+
const verdicts = e.map((t) => matchDenotation(t, RENDER_VERDICT));
|
|
27
|
+
const winner = VERDICT_ORDER.find((v) => verdicts.includes(v)) ?? "unresolved";
|
|
28
|
+
const first = e[verdicts.indexOf(winner)] ?? e[0];
|
|
29
|
+
switch (winner) {
|
|
30
|
+
case "credit":
|
|
31
|
+
return { kind: "credit", terminals: creditedTerminals(e) };
|
|
32
|
+
case "silent":
|
|
33
|
+
return { kind: "silent", because: first.denotation.kind === "opaque" ? "opaque" : "host-string" };
|
|
34
|
+
case "late-bound":
|
|
35
|
+
return { kind: "diagnose", code: "late-bound-render" };
|
|
36
|
+
case "unresolved":
|
|
37
|
+
return { kind: "diagnose", code: "unresolved-reference" };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=denotation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"denotation.js","sourceRoot":"","sources":["../../src/engine/denotation.ts"],"names":[],"mappings":"AAoDA,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAI,CAAW,EAAE,KAAyB;IACvE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAsC,CAAC;IAC9E,OAAO,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAClC,CAAC;AAID,4EAA4E;AAC5E,MAAM,cAAc,GAAmC;IACrD,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ;IACvB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ;IACvB,aAAa,EAAE,GAAG,EAAE,CAAC,QAAQ;IAC7B,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ;IACtB,YAAY,EAAE,GAAG,EAAE,CAAC,YAAY;IAChC,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY;IACxB,aAAa,EAAE,GAAG,EAAE,CAAC,YAAY;CAClC,CAAC;AAEF;mEACmE;AACnE,MAAM,aAAa,GAA6B,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AAOjG;;8DAE8D;AAC9D,MAAM,UAAU,iBAAiB,CAAC,CAAsB;IACtD,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,QAAQ,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAa;IACzC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC;IAC/E,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAA8B,EAAE,CAAC;QAC1F,KAAK,QAAQ;YACX,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACpG,KAAK,YAAY;YACf,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;QACzD,KAAK,YAAY;YACf,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { FileGraph } from "../index.js";
|
|
2
|
+
/**
|
|
3
|
+
* React's own hook predicate (`isHookName` in rules-of-hooks and the
|
|
4
|
+
* compiler).
|
|
5
|
+
*/
|
|
6
|
+
export declare const HOOK_NAME: RegExp;
|
|
2
7
|
/**
|
|
3
8
|
* THE JSX host-element naming rule. JSX compiles a bare,
|
|
4
9
|
* lowercase-initial element name to a string — `div`, `svg`, `web-button` —
|
|
@@ -9,9 +14,8 @@ import type { FileGraph } from "../index.js";
|
|
|
9
14
|
* intrinsic, so a caller holding a reference checks `memberChain.length === 0`
|
|
10
15
|
* first (`isHostElementRoot`, `engine/index.ts`).
|
|
11
16
|
*
|
|
12
|
-
* `isPascalCase` in `ast-utils/src/find-owner.ts`
|
|
13
|
-
*
|
|
14
|
-
* which rejects `_Foo`). Do not fold them into this one.
|
|
17
|
+
* `isPascalCase` in `ast-utils/src/find-owner.ts` is a DIFFERENT predicate
|
|
18
|
+
* (`/^[A-Z]/`, which rejects `_Foo`). Do not fold it into this one.
|
|
15
19
|
*/
|
|
16
20
|
export declare function isHostElementName(name: string): boolean;
|
|
17
21
|
/**
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React's own hook predicate (`isHookName` in rules-of-hooks and the
|
|
3
|
+
* compiler).
|
|
4
|
+
*/
|
|
5
|
+
export const HOOK_NAME = /^use[A-Z0-9]/;
|
|
1
6
|
/**
|
|
2
7
|
* THE JSX host-element naming rule. JSX compiles a bare,
|
|
3
8
|
* lowercase-initial element name to a string — `div`, `svg`, `web-button` —
|
|
@@ -8,9 +13,8 @@
|
|
|
8
13
|
* intrinsic, so a caller holding a reference checks `memberChain.length === 0`
|
|
9
14
|
* first (`isHostElementRoot`, `engine/index.ts`).
|
|
10
15
|
*
|
|
11
|
-
* `isPascalCase` in `ast-utils/src/find-owner.ts`
|
|
12
|
-
*
|
|
13
|
-
* which rejects `_Foo`). Do not fold them into this one.
|
|
16
|
+
* `isPascalCase` in `ast-utils/src/find-owner.ts` is a DIFFERENT predicate
|
|
17
|
+
* (`/^[A-Z]/`, which rejects `_Foo`). Do not fold it into this one.
|
|
14
18
|
*/
|
|
15
19
|
export function isHostElementName(name) {
|
|
16
20
|
return /^[a-z]/.test(name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-element.js","sourceRoot":"","sources":["../../src/engine/host-element.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"host-element.js","sourceRoot":"","sources":["../../src/engine/host-element.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,cAAc,CAAC;AAExC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAc,EAAE,SAAgC;IACtF,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM;YAAE,SAAS;QACxD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/engine/index.d.ts
CHANGED
|
@@ -50,17 +50,6 @@ export type EngineOccurrence = {
|
|
|
50
50
|
rawOwnerComponentId?: ComponentId;
|
|
51
51
|
/** Stable id of enclosing component definition. Absent when deferred. */
|
|
52
52
|
ownerComponentId?: string;
|
|
53
|
-
/**
|
|
54
|
-
* Cross-link to the underlying custom element this react-component wraps.
|
|
55
|
-
* Present only when `wrapCallback` was supplied to `resolve` and returned a
|
|
56
|
-
* hit for this occurrence's (packageName, exportName) pair.
|
|
57
|
-
* Does NOT participate in componentId hashing.
|
|
58
|
-
*/
|
|
59
|
-
wraps?: {
|
|
60
|
-
kind: "custom-element";
|
|
61
|
-
tagName: string;
|
|
62
|
-
packageName: string;
|
|
63
|
-
};
|
|
64
53
|
};
|
|
65
54
|
export type ResolvedGraph = {
|
|
66
55
|
occurrences: EngineOccurrence[];
|
|
@@ -91,16 +80,6 @@ export type TagResolverIndex = {
|
|
|
91
80
|
* Options for the `resolve` engine pass.
|
|
92
81
|
*/
|
|
93
82
|
export type ResolveOpts = {
|
|
94
|
-
/**
|
|
95
|
-
* Optional cross-link callback. Called at each external react-component
|
|
96
|
-
* emission with (packageName, exportName). When a hit is returned the engine
|
|
97
|
-
* attaches `wraps` to the emitted `EngineOccurrence`. No-op when omitted or
|
|
98
|
-
* returns null. Engine never imports CEM types — only consumes the return shape.
|
|
99
|
-
*/
|
|
100
|
-
wrapCallback?: (packageName: string, exportName: string) => {
|
|
101
|
-
tagName: string;
|
|
102
|
-
packageName: string;
|
|
103
|
-
} | null;
|
|
104
83
|
/**
|
|
105
84
|
* Optional external leaf resolver. Called when an external
|
|
106
85
|
* react-component identity is constructed, with the importing graph file,
|
|
@@ -111,7 +90,7 @@ export type ResolveOpts = {
|
|
|
111
90
|
* so package-of-definition identity is the leaf (external analogue of the
|
|
112
91
|
* local barrel re-wrap follow). Same-package hits are ignored
|
|
113
92
|
* (identity already correct); the call is still made so the host can
|
|
114
|
-
* terminal-load the leaf manifest as a side effect for
|
|
93
|
+
* terminal-load the leaf manifest as a side effect for the host's wrapper lookup.
|
|
115
94
|
* Engine never imports resolver types — only this return shape.
|
|
116
95
|
*/
|
|
117
96
|
resolveExternalLeaf?: (fromFile: string, specifier: string, exportName: string) => {
|
|
@@ -126,7 +105,10 @@ export type ResolveOpts = {
|
|
|
126
105
|
*/
|
|
127
106
|
tagIndex?: TagResolverIndex;
|
|
128
107
|
/**
|
|
129
|
-
* Sink for engine-emitted diagnostics
|
|
108
|
+
* Sink for engine-emitted diagnostics: `unresolved-reference`,
|
|
109
|
+
* `unresolved-import` and `lazy-import-unsupported` for a JSX render that
|
|
110
|
+
* produced no occurrence, and `low-confidence-tag` for a tag usage the
|
|
111
|
+
* `tagIndex` does not resolve.
|
|
130
112
|
* Optional — when omitted, diagnostics are silently dropped.
|
|
131
113
|
*/
|
|
132
114
|
collector?: DiagnosticCollector;
|