@contember/react-multipass-rendering 1.2.7 → 1.3.0-alpha.11

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.
Files changed (40) hide show
  1. package/dist/development/ChildrenAnalyzer.cjs +170 -0
  2. package/dist/development/ChildrenAnalyzer.cjs.map +1 -0
  3. package/dist/development/ChildrenAnalyzer.js +3 -3
  4. package/dist/development/ChildrenAnalyzer.js.map +1 -1
  5. package/dist/development/ChildrenAnalyzerError.cjs +17 -0
  6. package/dist/development/ChildrenAnalyzerError.cjs.map +1 -0
  7. package/dist/development/helpers/getErrorMessage.cjs +7 -0
  8. package/dist/development/helpers/getErrorMessage.cjs.map +1 -0
  9. package/dist/development/helpers/wrapError.cjs +51 -0
  10. package/dist/development/helpers/wrapError.cjs.map +1 -0
  11. package/dist/development/helpers/wrapError.js.map +1 -1
  12. package/dist/development/index.cjs +11 -0
  13. package/dist/development/index.cjs.map +1 -0
  14. package/dist/development/nodeSpecs/BranchNode.cjs +41 -0
  15. package/dist/development/nodeSpecs/BranchNode.cjs.map +1 -0
  16. package/dist/development/nodeSpecs/BranchNode.js +3 -3
  17. package/dist/development/nodeSpecs/BranchNode.js.map +1 -1
  18. package/dist/development/nodeSpecs/Leaf.cjs +27 -0
  19. package/dist/development/nodeSpecs/Leaf.cjs.map +1 -0
  20. package/dist/production/ChildrenAnalyzer.cjs +170 -0
  21. package/dist/production/ChildrenAnalyzer.cjs.map +1 -0
  22. package/dist/production/ChildrenAnalyzer.js +3 -3
  23. package/dist/production/ChildrenAnalyzer.js.map +1 -1
  24. package/dist/production/ChildrenAnalyzerError.cjs +17 -0
  25. package/dist/production/ChildrenAnalyzerError.cjs.map +1 -0
  26. package/dist/production/helpers/getErrorMessage.cjs +7 -0
  27. package/dist/production/helpers/getErrorMessage.cjs.map +1 -0
  28. package/dist/production/helpers/wrapError.cjs +51 -0
  29. package/dist/production/helpers/wrapError.cjs.map +1 -0
  30. package/dist/production/helpers/wrapError.js.map +1 -1
  31. package/dist/production/index.cjs +11 -0
  32. package/dist/production/index.cjs.map +1 -0
  33. package/dist/production/nodeSpecs/BranchNode.cjs +41 -0
  34. package/dist/production/nodeSpecs/BranchNode.cjs.map +1 -0
  35. package/dist/production/nodeSpecs/BranchNode.js +3 -3
  36. package/dist/production/nodeSpecs/BranchNode.js.map +1 -1
  37. package/dist/production/nodeSpecs/Leaf.cjs +27 -0
  38. package/dist/production/nodeSpecs/Leaf.cjs.map +1 -0
  39. package/dist/types/tsconfig.tsbuildinfo +1 -1
  40. package/package.json +10 -3
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => {
5
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ return value;
7
+ };
8
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
+ const utilities = require("@contember/utilities");
10
+ const ChildrenAnalyzerError = require("./ChildrenAnalyzerError.cjs");
11
+ const wrapError = require("./helpers/wrapError.cjs");
12
+ const getErrorMessage = require("./helpers/getErrorMessage.cjs");
13
+ const _ChildrenAnalyzer = class _ChildrenAnalyzer {
14
+ constructor(leaves, decider = [], options = {}) {
15
+ __publicField(this, "leaves");
16
+ __publicField(this, "branchNodes");
17
+ __publicField(this, "options");
18
+ this.leaves = leaves;
19
+ if (Array.isArray(decider)) {
20
+ this.branchNodes = decider;
21
+ } else {
22
+ this.branchNodes = [];
23
+ options = decider;
24
+ }
25
+ this.options = { ..._ChildrenAnalyzer.defaultOptions, ...options };
26
+ }
27
+ processChildren(children, initialStaticContext) {
28
+ const processed = this.processNode(children, initialStaticContext, []);
29
+ const rawResult = Array.isArray(
30
+ processed
31
+ ) ? processed : [processed];
32
+ return rawResult.filter(
33
+ (item) => item !== void 0
34
+ );
35
+ }
36
+ processNode(node, staticContext, componentPath) {
37
+ if (!node || typeof node === "string" || typeof node === "number" || typeof node === "boolean") {
38
+ for (const leaf of this.leaves) {
39
+ const specification = leaf.specification;
40
+ if (specification.type === "useSite") {
41
+ const { ComponentType, factory } = specification;
42
+ if (ComponentType === void 0) {
43
+ return factory(node, staticContext);
44
+ }
45
+ }
46
+ }
47
+ if (node === false || node === void 0 || node === null) {
48
+ return void 0;
49
+ }
50
+ if (!this.options.ignoreUnhandledNodes) {
51
+ throw new ChildrenAnalyzerError.ChildrenAnalyzerError(getErrorMessage.getErrorMessage(this.options.unhandledNodeErrorMessage, node, staticContext));
52
+ }
53
+ return void 0;
54
+ }
55
+ if (typeof node === "function") {
56
+ if (this.options.ignoreRenderProps) {
57
+ return void 0;
58
+ }
59
+ throw new ChildrenAnalyzerError.ChildrenAnalyzerError(getErrorMessage.getErrorMessage(this.options.renderPropsErrorMessage, node, staticContext));
60
+ }
61
+ if (Array.isArray(node)) {
62
+ let mapped = [];
63
+ for (const subNode of node) {
64
+ const processed = this.processNode(subNode, staticContext, componentPath);
65
+ if (processed !== void 0) {
66
+ if (Array.isArray(processed)) {
67
+ mapped = mapped.concat(processed);
68
+ } else {
69
+ mapped.push(processed);
70
+ }
71
+ }
72
+ }
73
+ return mapped;
74
+ }
75
+ let children = void 0;
76
+ if (!("type" in node)) {
77
+ return this.processNode(children, staticContext, componentPath);
78
+ }
79
+ children = node.props.children;
80
+ if (typeof node.type === "symbol") {
81
+ return this.processNode(children, staticContext, componentPath);
82
+ }
83
+ const treeNode = node.type;
84
+ componentPath = [...componentPath, node];
85
+ if (typeof treeNode !== "string") {
86
+ if (this.options.staticContextFactoryName in treeNode) {
87
+ const staticContextFactory = treeNode[this.options.staticContextFactoryName];
88
+ try {
89
+ staticContext = staticContextFactory(node.props, staticContext);
90
+ } catch (e) {
91
+ wrapError.wrapError(e, treeNode.displayName ?? "???", this.options.staticContextFactoryName, componentPath);
92
+ }
93
+ }
94
+ if (this.options.staticRenderFactoryName in treeNode) {
95
+ const factory = treeNode[this.options.staticRenderFactoryName];
96
+ try {
97
+ children = factory(node.props, staticContext);
98
+ } catch (e) {
99
+ wrapError.wrapError(e, treeNode.displayName ?? "???", this.options.staticRenderFactoryName, componentPath);
100
+ }
101
+ }
102
+ }
103
+ for (const leaf of this.leaves) {
104
+ const specification = leaf.specification;
105
+ switch (specification.type) {
106
+ case "declarationSite": {
107
+ const { factoryMethodName } = specification;
108
+ if (typeof treeNode !== "string" && factoryMethodName in treeNode) {
109
+ const factory = treeNode[factoryMethodName];
110
+ return factory(node.props, staticContext);
111
+ }
112
+ break;
113
+ }
114
+ case "useSite": {
115
+ const { ComponentType, factory } = specification;
116
+ if (ComponentType === void 0 || node.type === ComponentType) {
117
+ return factory(node, staticContext);
118
+ }
119
+ break;
120
+ }
121
+ default:
122
+ return utilities.assertNever(specification);
123
+ }
124
+ }
125
+ const processedChildren = this.processNode(children, staticContext, componentPath);
126
+ for (const branchNode of this.branchNodes) {
127
+ const specification = branchNode.specification;
128
+ switch (specification.type) {
129
+ case "declarationSite": {
130
+ const { factoryMethodName, childrenRepresentationReducer } = specification;
131
+ if (typeof treeNode !== "string" && factoryMethodName in treeNode) {
132
+ if (processedChildren === void 0 && !branchNode.options.childrenAreOptional) {
133
+ throw new ChildrenAnalyzerError.ChildrenAnalyzerError(branchNode.options.childrenAbsentErrorMessage);
134
+ }
135
+ const factory = treeNode[factoryMethodName];
136
+ return factory(node.props, childrenRepresentationReducer(processedChildren), staticContext);
137
+ }
138
+ break;
139
+ }
140
+ case "useSite": {
141
+ const { factory, ComponentType } = specification;
142
+ if (ComponentType === void 0 || node.type === ComponentType) {
143
+ if (processedChildren === void 0 && !branchNode.options.childrenAreOptional) {
144
+ throw new ChildrenAnalyzerError.ChildrenAnalyzerError(branchNode.options.childrenAbsentErrorMessage);
145
+ }
146
+ return factory(node, processedChildren, staticContext);
147
+ }
148
+ break;
149
+ }
150
+ default:
151
+ return utilities.assertNever(specification);
152
+ }
153
+ }
154
+ if (!this.options.ignoreUnhandledNodes && !(typeof treeNode !== "string" && this.options.staticRenderFactoryName in treeNode)) {
155
+ throw new ChildrenAnalyzerError.ChildrenAnalyzerError(getErrorMessage.getErrorMessage(this.options.unhandledNodeErrorMessage, node, staticContext));
156
+ }
157
+ return processedChildren;
158
+ }
159
+ };
160
+ __publicField(_ChildrenAnalyzer, "defaultOptions", {
161
+ ignoreRenderProps: true,
162
+ renderPropsErrorMessage: "Render props (functions as React component children) are not supported.",
163
+ ignoreUnhandledNodes: true,
164
+ unhandledNodeErrorMessage: "Encountered an unknown child.",
165
+ staticContextFactoryName: "getStaticContext",
166
+ staticRenderFactoryName: "staticRender"
167
+ });
168
+ let ChildrenAnalyzer = _ChildrenAnalyzer;
169
+ exports.ChildrenAnalyzer = ChildrenAnalyzer;
170
+ //# sourceMappingURL=ChildrenAnalyzer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChildrenAnalyzer.cjs","sources":["../../src/ChildrenAnalyzer.ts"],"sourcesContent":["import { assertNever } from '@contember/utilities'\nimport type { ElementType, ReactElement, ReactNode } from 'react'\nimport type { BranchNodeList } from './BranchNodeList'\nimport { ChildrenAnalyzerError } from './ChildrenAnalyzerError'\nimport type { ChildrenAnalyzerOptions } from './ChildrenAnalyzerOptions'\nimport type { LeafList } from './LeafList'\nimport { getErrorMessage } from './helpers'\nimport { wrapError } from './helpers/wrapError'\nimport type {\n\tDeclarationSiteNodeRepresentationFactory,\n\tRawNodeRepresentation,\n\tStaticContextFactory,\n\tSyntheticChildrenFactory,\n\tUnconstrainedLeafRepresentationFactory,\n\tValidFactoryName,\n} from './nodeSpecs'\n\nexport class ChildrenAnalyzer<\n\tAllLeavesRepresentation = any,\n\tAllBranchNodesRepresentation = never,\n\tStaticContext = undefined,\n> {\n\tprivate static defaultOptions: ChildrenAnalyzerOptions = {\n\t\tignoreRenderProps: true,\n\t\trenderPropsErrorMessage: 'Render props (functions as React component children) are not supported.',\n\n\t\tignoreUnhandledNodes: true,\n\t\tunhandledNodeErrorMessage: 'Encountered an unknown child.',\n\n\t\tstaticContextFactoryName: 'getStaticContext',\n\t\tstaticRenderFactoryName: 'staticRender',\n\t}\n\n\tprivate readonly leaves: LeafList<AllLeavesRepresentation, StaticContext>\n\tprivate readonly branchNodes: BranchNodeList<AllLeavesRepresentation, AllBranchNodesRepresentation, StaticContext>\n\tprivate readonly options: ChildrenAnalyzerOptions<StaticContext>\n\n\tpublic constructor(\n\t\tleaves: LeafList<AllLeavesRepresentation, StaticContext>,\n\t\toptions?: Partial<ChildrenAnalyzerOptions>,\n\t)\n\tpublic constructor(\n\t\tleaves: LeafList<AllLeavesRepresentation, StaticContext>,\n\t\tbranchNodes: BranchNodeList<AllLeavesRepresentation, AllBranchNodesRepresentation, StaticContext>,\n\t\toptions?: Partial<ChildrenAnalyzerOptions>,\n\t)\n\tpublic constructor(\n\t\tleaves: LeafList<AllLeavesRepresentation, StaticContext>,\n\t\tdecider:\n\t\t\t| Partial<ChildrenAnalyzerOptions>\n\t\t\t| BranchNodeList<AllLeavesRepresentation, AllBranchNodesRepresentation, StaticContext> = [],\n\t\toptions: Partial<ChildrenAnalyzerOptions> = {},\n\t) {\n\t\tthis.leaves = leaves\n\n\t\tif (Array.isArray(decider)) {\n\t\t\tthis.branchNodes = decider\n\t\t} else {\n\t\t\tthis.branchNodes = []\n\t\t\toptions = decider\n\t\t}\n\t\tthis.options = { ...ChildrenAnalyzer.defaultOptions, ...options }\n\t}\n\n\tpublic processChildren(\n\t\tchildren: ReactNode,\n\t\tinitialStaticContext: StaticContext,\n\t): Array<AllLeavesRepresentation | AllBranchNodesRepresentation> {\n\t\tconst processed = this.processNode(children, initialStaticContext, [])\n\n\t\tconst rawResult: Array<AllLeavesRepresentation | AllBranchNodesRepresentation | undefined> = Array.isArray(\n\t\t\tprocessed,\n\t\t)\n\t\t\t? processed\n\t\t\t: [processed]\n\n\t\treturn rawResult.filter(\n\t\t\t(item): item is AllLeavesRepresentation | AllBranchNodesRepresentation => item !== undefined,\n\t\t)\n\t}\n\n\tprivate processNode(\n\t\tnode: ReactNode,\n\t\tstaticContext: StaticContext,\n\t\tcomponentPath: ReactElement[],\n\t): RawNodeRepresentation<AllLeavesRepresentation, AllBranchNodesRepresentation> {\n\t\tif (!node || typeof node === 'string' || typeof node === 'number' || typeof node === 'boolean') {\n\t\t\tfor (const leaf of this.leaves) {\n\t\t\t\tconst specification = leaf.specification\n\t\t\t\tif (specification.type === 'useSite') {\n\t\t\t\t\tconst { ComponentType, factory } = specification\n\t\t\t\t\tif (ComponentType === undefined) {\n\t\t\t\t\t\treturn factory(node, staticContext)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node === false || node === undefined || node === null) {\n\t\t\t\t// This adds seamless support for conditionals and such.\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tif (!this.options.ignoreUnhandledNodes) {\n\t\t\t\tthrow new ChildrenAnalyzerError(getErrorMessage(this.options.unhandledNodeErrorMessage, node, staticContext))\n\t\t\t}\n\t\t\treturn undefined\n\t\t}\n\n\t\tif (typeof node === 'function') {\n\t\t\tif (this.options.ignoreRenderProps) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tthrow new ChildrenAnalyzerError(getErrorMessage(this.options.renderPropsErrorMessage, node, staticContext))\n\t\t}\n\n\t\tif (Array.isArray(node)) {\n\t\t\tlet mapped: Array<AllLeavesRepresentation | AllBranchNodesRepresentation> = []\n\n\t\t\tfor (const subNode of node) {\n\t\t\t\tconst processed = this.processNode(subNode, staticContext, componentPath)\n\n\t\t\t\tif (processed !== undefined) {\n\t\t\t\t\tif (Array.isArray(processed)) {\n\t\t\t\t\t\tmapped = mapped.concat(processed)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmapped.push(processed)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn mapped\n\t\t}\n\n\t\tlet children: ReactNode = undefined\n\n\t\tif (!('type' in node)) {\n\t\t\treturn this.processNode(children, staticContext, componentPath)\n\t\t}\n\t\tchildren = node.props.children\n\n\t\tif (typeof node.type === 'symbol') {\n\t\t\t// Fragment, Portal or other non-component\n\t\t\treturn this.processNode(children, staticContext, componentPath)\n\t\t}\n\t\t// if (typeof node.type === 'string') {\n\t\t// \t// Typically a host component\n\t\t// \tif (!this.options.ignoreUnhandledNodes) {\n\t\t// \t\tthrow new ChildrenAnalyzerError(getErrorMessage(this.options.unhandledNodeErrorMessage, node, staticContext))\n\t\t// \t}\n\t\t// \treturn this.processNode(children, staticContext)\n\t\t// }\n\n\t\t// Component, PureComponent, FunctionComponent\n\n\t\tconst treeNode = node.type as ElementType &\n\t\t\t{\n\t\t\t\t[staticMethod in ValidFactoryName]:\n\t\t\t\t| StaticContextFactory<any, StaticContext>\n\t\t\t\t| SyntheticChildrenFactory<any, StaticContext>\n\t\t\t\t| UnconstrainedLeafRepresentationFactory<any, AllLeavesRepresentation, StaticContext>\n\t\t\t\t| DeclarationSiteNodeRepresentationFactory<any, unknown, AllBranchNodesRepresentation, StaticContext>\n\t\t\t}\n\n\t\tcomponentPath = [...componentPath, node]\n\t\tif (typeof treeNode !== 'string') {\n\t\t\tif (this.options.staticContextFactoryName in treeNode) {\n\t\t\t\tconst staticContextFactory = treeNode[this.options.staticContextFactoryName] as StaticContextFactory<\n\t\t\t\t\tany,\n\t\t\t\t\tStaticContext\n\t\t\t\t>\n\t\t\t\ttry {\n\t\t\t\t\tstaticContext = staticContextFactory(node.props, staticContext)\n\t\t\t\t} catch (e) {\n\t\t\t\t\twrapError(e, treeNode.displayName ?? '???', this.options.staticContextFactoryName, componentPath)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.options.staticRenderFactoryName in treeNode) {\n\t\t\t\tconst factory = treeNode[this.options.staticRenderFactoryName] as SyntheticChildrenFactory<any, StaticContext>\n\t\t\t\ttry {\n\t\t\t\t\tchildren = factory(node.props, staticContext)\n\t\t\t\t} catch (e) {\n\t\t\t\t\twrapError(e, treeNode.displayName ?? '???', this.options.staticRenderFactoryName, componentPath)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const leaf of this.leaves) {\n\t\t\tconst specification = leaf.specification\n\t\t\tswitch (specification.type) {\n\t\t\t\tcase 'declarationSite': {\n\t\t\t\t\tconst { factoryMethodName } = specification\n\n\t\t\t\t\tif (typeof treeNode !== 'string' && factoryMethodName in treeNode) {\n\t\t\t\t\t\tconst factory = treeNode[factoryMethodName] as UnconstrainedLeafRepresentationFactory<\n\t\t\t\t\t\t\tany,\n\t\t\t\t\t\t\tAllBranchNodesRepresentation | AllLeavesRepresentation,\n\t\t\t\t\t\t\tStaticContext\n\t\t\t\t\t\t>\n\t\t\t\t\t\treturn factory(node.props, staticContext)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'useSite': {\n\t\t\t\t\tconst { ComponentType, factory } = specification\n\t\t\t\t\tif (ComponentType === undefined || node.type === ComponentType) {\n\t\t\t\t\t\treturn factory(node, staticContext)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\treturn assertNever(specification)\n\t\t\t}\n\t\t}\n\n\t\tconst processedChildren = this.processNode(children, staticContext, componentPath)\n\n\t\tfor (const branchNode of this.branchNodes) {\n\t\t\tconst specification = branchNode.specification\n\t\t\tswitch (specification.type) {\n\t\t\t\tcase 'declarationSite': {\n\t\t\t\t\tconst { factoryMethodName, childrenRepresentationReducer } = specification\n\n\t\t\t\t\tif (typeof treeNode !== 'string' && factoryMethodName in treeNode) {\n\t\t\t\t\t\tif (processedChildren === undefined && !branchNode.options.childrenAreOptional) {\n\t\t\t\t\t\t\tthrow new ChildrenAnalyzerError(branchNode.options.childrenAbsentErrorMessage)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst factory = treeNode[factoryMethodName] as DeclarationSiteNodeRepresentationFactory<\n\t\t\t\t\t\t\tany,\n\t\t\t\t\t\t\tunknown,\n\t\t\t\t\t\t\tAllBranchNodesRepresentation | AllLeavesRepresentation,\n\t\t\t\t\t\t\tStaticContext\n\t\t\t\t\t\t>\n\t\t\t\t\t\treturn factory(node.props, childrenRepresentationReducer(processedChildren), staticContext)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'useSite': {\n\t\t\t\t\tconst { factory, ComponentType } = specification\n\t\t\t\t\tif (ComponentType === undefined || node.type === ComponentType) {\n\t\t\t\t\t\tif (processedChildren === undefined && !branchNode.options.childrenAreOptional) {\n\t\t\t\t\t\t\tthrow new ChildrenAnalyzerError(branchNode.options.childrenAbsentErrorMessage)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn factory(node, processedChildren, staticContext)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\treturn assertNever(specification)\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t!this.options.ignoreUnhandledNodes &&\n\t\t\t!(typeof treeNode !== 'string' && this.options.staticRenderFactoryName in treeNode)\n\t\t) {\n\t\t\tthrow new ChildrenAnalyzerError(getErrorMessage(this.options.unhandledNodeErrorMessage, node, staticContext))\n\t\t}\n\n\t\treturn processedChildren\n\t}\n}\n"],"names":["ChildrenAnalyzerError","getErrorMessage","wrapError","assertNever"],"mappings":"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"}
@@ -8,7 +8,7 @@ import { assertNever } from "@contember/utilities";
8
8
  import { ChildrenAnalyzerError } from "./ChildrenAnalyzerError.js";
9
9
  import { wrapError } from "./helpers/wrapError.js";
10
10
  import { getErrorMessage } from "./helpers/getErrorMessage.js";
11
- const _ChildrenAnalyzer = class {
11
+ const _ChildrenAnalyzer = class _ChildrenAnalyzer {
12
12
  constructor(leaves, decider = [], options = {}) {
13
13
  __publicField(this, "leaves");
14
14
  __publicField(this, "branchNodes");
@@ -155,8 +155,7 @@ const _ChildrenAnalyzer = class {
155
155
  return processedChildren;
156
156
  }
157
157
  };
158
- let ChildrenAnalyzer = _ChildrenAnalyzer;
159
- __publicField(ChildrenAnalyzer, "defaultOptions", {
158
+ __publicField(_ChildrenAnalyzer, "defaultOptions", {
160
159
  ignoreRenderProps: true,
161
160
  renderPropsErrorMessage: "Render props (functions as React component children) are not supported.",
162
161
  ignoreUnhandledNodes: true,
@@ -164,6 +163,7 @@ __publicField(ChildrenAnalyzer, "defaultOptions", {
164
163
  staticContextFactoryName: "getStaticContext",
165
164
  staticRenderFactoryName: "staticRender"
166
165
  });
166
+ let ChildrenAnalyzer = _ChildrenAnalyzer;
167
167
  export {
168
168
  ChildrenAnalyzer
169
169
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ChildrenAnalyzer.js","sources":["../../src/ChildrenAnalyzer.ts"],"sourcesContent":["import { assertNever } from '@contember/utilities'\nimport type { ElementType, ReactElement, ReactNode } from 'react'\nimport type { BranchNodeList } from './BranchNodeList'\nimport { ChildrenAnalyzerError } from './ChildrenAnalyzerError'\nimport type { ChildrenAnalyzerOptions } from './ChildrenAnalyzerOptions'\nimport type { LeafList } from './LeafList'\nimport { getErrorMessage } from './helpers'\nimport { wrapError } from './helpers/wrapError'\nimport type {\n\tDeclarationSiteNodeRepresentationFactory,\n\tRawNodeRepresentation,\n\tStaticContextFactory,\n\tSyntheticChildrenFactory,\n\tUnconstrainedLeafRepresentationFactory,\n\tValidFactoryName,\n} from './nodeSpecs'\n\nexport class ChildrenAnalyzer<\n\tAllLeavesRepresentation = any,\n\tAllBranchNodesRepresentation = never,\n\tStaticContext = undefined,\n> {\n\tprivate static defaultOptions: ChildrenAnalyzerOptions = {\n\t\tignoreRenderProps: true,\n\t\trenderPropsErrorMessage: 'Render props (functions as React component children) are not supported.',\n\n\t\tignoreUnhandledNodes: true,\n\t\tunhandledNodeErrorMessage: 'Encountered an unknown child.',\n\n\t\tstaticContextFactoryName: 'getStaticContext',\n\t\tstaticRenderFactoryName: 'staticRender',\n\t}\n\n\tprivate readonly leaves: LeafList<AllLeavesRepresentation, StaticContext>\n\tprivate readonly branchNodes: BranchNodeList<AllLeavesRepresentation, AllBranchNodesRepresentation, StaticContext>\n\tprivate readonly options: ChildrenAnalyzerOptions<StaticContext>\n\n\tpublic constructor(\n\t\tleaves: LeafList<AllLeavesRepresentation, StaticContext>,\n\t\toptions?: Partial<ChildrenAnalyzerOptions>,\n\t)\n\tpublic constructor(\n\t\tleaves: LeafList<AllLeavesRepresentation, StaticContext>,\n\t\tbranchNodes: BranchNodeList<AllLeavesRepresentation, AllBranchNodesRepresentation, StaticContext>,\n\t\toptions?: Partial<ChildrenAnalyzerOptions>,\n\t)\n\tpublic constructor(\n\t\tleaves: LeafList<AllLeavesRepresentation, StaticContext>,\n\t\tdecider:\n\t\t\t| Partial<ChildrenAnalyzerOptions>\n\t\t\t| BranchNodeList<AllLeavesRepresentation, AllBranchNodesRepresentation, StaticContext> = [],\n\t\toptions: Partial<ChildrenAnalyzerOptions> = {},\n\t) {\n\t\tthis.leaves = leaves\n\n\t\tif (Array.isArray(decider)) {\n\t\t\tthis.branchNodes = decider\n\t\t} else {\n\t\t\tthis.branchNodes = []\n\t\t\toptions = decider\n\t\t}\n\t\tthis.options = { ...ChildrenAnalyzer.defaultOptions, ...options }\n\t}\n\n\tpublic processChildren(\n\t\tchildren: ReactNode,\n\t\tinitialStaticContext: StaticContext,\n\t): Array<AllLeavesRepresentation | AllBranchNodesRepresentation> {\n\t\tconst processed = this.processNode(children, initialStaticContext, [])\n\n\t\tconst rawResult: Array<AllLeavesRepresentation | AllBranchNodesRepresentation | undefined> = Array.isArray(\n\t\t\tprocessed,\n\t\t)\n\t\t\t? processed\n\t\t\t: [processed]\n\n\t\treturn rawResult.filter(\n\t\t\t(item): item is AllLeavesRepresentation | AllBranchNodesRepresentation => item !== undefined,\n\t\t)\n\t}\n\n\tprivate processNode(\n\t\tnode: ReactNode,\n\t\tstaticContext: StaticContext,\n\t\tcomponentPath: ReactElement[],\n\t): RawNodeRepresentation<AllLeavesRepresentation, AllBranchNodesRepresentation> {\n\t\tif (!node || typeof node === 'string' || typeof node === 'number' || typeof node === 'boolean') {\n\t\t\tfor (const leaf of this.leaves) {\n\t\t\t\tconst specification = leaf.specification\n\t\t\t\tif (specification.type === 'useSite') {\n\t\t\t\t\tconst { ComponentType, factory } = specification\n\t\t\t\t\tif (ComponentType === undefined) {\n\t\t\t\t\t\treturn factory(node, staticContext)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node === false || node === undefined || node === null) {\n\t\t\t\t// This adds seamless support for conditionals and such.\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tif (!this.options.ignoreUnhandledNodes) {\n\t\t\t\tthrow new ChildrenAnalyzerError(getErrorMessage(this.options.unhandledNodeErrorMessage, node, staticContext))\n\t\t\t}\n\t\t\treturn undefined\n\t\t}\n\n\t\tif (typeof node === 'function') {\n\t\t\tif (this.options.ignoreRenderProps) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tthrow new ChildrenAnalyzerError(getErrorMessage(this.options.renderPropsErrorMessage, node, staticContext))\n\t\t}\n\n\t\tif (Array.isArray(node)) {\n\t\t\tlet mapped: Array<AllLeavesRepresentation | AllBranchNodesRepresentation> = []\n\n\t\t\tfor (const subNode of node) {\n\t\t\t\tconst processed = this.processNode(subNode, staticContext, componentPath)\n\n\t\t\t\tif (processed !== undefined) {\n\t\t\t\t\tif (Array.isArray(processed)) {\n\t\t\t\t\t\tmapped = mapped.concat(processed)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmapped.push(processed)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn mapped\n\t\t}\n\n\t\tlet children: ReactNode = undefined\n\n\t\tif (!('type' in node)) {\n\t\t\treturn this.processNode(children, staticContext, componentPath)\n\t\t}\n\t\tchildren = node.props.children\n\n\t\tif (typeof node.type === 'symbol') {\n\t\t\t// Fragment, Portal or other non-component\n\t\t\treturn this.processNode(children, staticContext, componentPath)\n\t\t}\n\t\t// if (typeof node.type === 'string') {\n\t\t// \t// Typically a host component\n\t\t// \tif (!this.options.ignoreUnhandledNodes) {\n\t\t// \t\tthrow new ChildrenAnalyzerError(getErrorMessage(this.options.unhandledNodeErrorMessage, node, staticContext))\n\t\t// \t}\n\t\t// \treturn this.processNode(children, staticContext)\n\t\t// }\n\n\t\t// Component, PureComponent, FunctionComponent\n\n\t\tconst treeNode = node.type as ElementType &\n\t\t\t{\n\t\t\t\t[staticMethod in ValidFactoryName]:\n\t\t\t\t| StaticContextFactory<any, StaticContext>\n\t\t\t\t| SyntheticChildrenFactory<any, StaticContext>\n\t\t\t\t| UnconstrainedLeafRepresentationFactory<any, AllLeavesRepresentation, StaticContext>\n\t\t\t\t| DeclarationSiteNodeRepresentationFactory<any, unknown, AllBranchNodesRepresentation, StaticContext>\n\t\t\t}\n\n\t\tcomponentPath = [...componentPath, node]\n\t\tif (typeof treeNode !== 'string') {\n\t\t\tif (this.options.staticContextFactoryName in treeNode) {\n\t\t\t\tconst staticContextFactory = treeNode[this.options.staticContextFactoryName] as StaticContextFactory<\n\t\t\t\t\tany,\n\t\t\t\t\tStaticContext\n\t\t\t\t>\n\t\t\t\ttry {\n\t\t\t\t\tstaticContext = staticContextFactory(node.props, staticContext)\n\t\t\t\t} catch (e) {\n\t\t\t\t\twrapError(e, treeNode.displayName ?? '???', this.options.staticContextFactoryName, componentPath)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.options.staticRenderFactoryName in treeNode) {\n\t\t\t\tconst factory = treeNode[this.options.staticRenderFactoryName] as SyntheticChildrenFactory<any, StaticContext>\n\t\t\t\ttry {\n\t\t\t\t\tchildren = factory(node.props, staticContext)\n\t\t\t\t} catch (e) {\n\t\t\t\t\twrapError(e, treeNode.displayName ?? '???', this.options.staticRenderFactoryName, componentPath)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const leaf of this.leaves) {\n\t\t\tconst specification = leaf.specification\n\t\t\tswitch (specification.type) {\n\t\t\t\tcase 'declarationSite': {\n\t\t\t\t\tconst { factoryMethodName } = specification\n\n\t\t\t\t\tif (typeof treeNode !== 'string' && factoryMethodName in treeNode) {\n\t\t\t\t\t\tconst factory = treeNode[factoryMethodName] as UnconstrainedLeafRepresentationFactory<\n\t\t\t\t\t\t\tany,\n\t\t\t\t\t\t\tAllBranchNodesRepresentation | AllLeavesRepresentation,\n\t\t\t\t\t\t\tStaticContext\n\t\t\t\t\t\t>\n\t\t\t\t\t\treturn factory(node.props, staticContext)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'useSite': {\n\t\t\t\t\tconst { ComponentType, factory } = specification\n\t\t\t\t\tif (ComponentType === undefined || node.type === ComponentType) {\n\t\t\t\t\t\treturn factory(node, staticContext)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\treturn assertNever(specification)\n\t\t\t}\n\t\t}\n\n\t\tconst processedChildren = this.processNode(children, staticContext, componentPath)\n\n\t\tfor (const branchNode of this.branchNodes) {\n\t\t\tconst specification = branchNode.specification\n\t\t\tswitch (specification.type) {\n\t\t\t\tcase 'declarationSite': {\n\t\t\t\t\tconst { factoryMethodName, childrenRepresentationReducer } = specification\n\n\t\t\t\t\tif (typeof treeNode !== 'string' && factoryMethodName in treeNode) {\n\t\t\t\t\t\tif (processedChildren === undefined && !branchNode.options.childrenAreOptional) {\n\t\t\t\t\t\t\tthrow new ChildrenAnalyzerError(branchNode.options.childrenAbsentErrorMessage)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst factory = treeNode[factoryMethodName] as DeclarationSiteNodeRepresentationFactory<\n\t\t\t\t\t\t\tany,\n\t\t\t\t\t\t\tunknown,\n\t\t\t\t\t\t\tAllBranchNodesRepresentation | AllLeavesRepresentation,\n\t\t\t\t\t\t\tStaticContext\n\t\t\t\t\t\t>\n\t\t\t\t\t\treturn factory(node.props, childrenRepresentationReducer(processedChildren), staticContext)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'useSite': {\n\t\t\t\t\tconst { factory, ComponentType } = specification\n\t\t\t\t\tif (ComponentType === undefined || node.type === ComponentType) {\n\t\t\t\t\t\tif (processedChildren === undefined && !branchNode.options.childrenAreOptional) {\n\t\t\t\t\t\t\tthrow new ChildrenAnalyzerError(branchNode.options.childrenAbsentErrorMessage)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn factory(node, processedChildren, staticContext)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\treturn assertNever(specification)\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t!this.options.ignoreUnhandledNodes &&\n\t\t\t!(typeof treeNode !== 'string' && this.options.staticRenderFactoryName in treeNode)\n\t\t) {\n\t\t\tthrow new ChildrenAnalyzerError(getErrorMessage(this.options.unhandledNodeErrorMessage, node, staticContext))\n\t\t}\n\n\t\treturn processedChildren\n\t}\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChildrenAnalyzer.js","sources":["../../src/ChildrenAnalyzer.ts"],"sourcesContent":["import { assertNever } from '@contember/utilities'\nimport type { ElementType, ReactElement, ReactNode } from 'react'\nimport type { BranchNodeList } from './BranchNodeList'\nimport { ChildrenAnalyzerError } from './ChildrenAnalyzerError'\nimport type { ChildrenAnalyzerOptions } from './ChildrenAnalyzerOptions'\nimport type { LeafList } from './LeafList'\nimport { getErrorMessage } from './helpers'\nimport { wrapError } from './helpers/wrapError'\nimport type {\n\tDeclarationSiteNodeRepresentationFactory,\n\tRawNodeRepresentation,\n\tStaticContextFactory,\n\tSyntheticChildrenFactory,\n\tUnconstrainedLeafRepresentationFactory,\n\tValidFactoryName,\n} from './nodeSpecs'\n\nexport class ChildrenAnalyzer<\n\tAllLeavesRepresentation = any,\n\tAllBranchNodesRepresentation = never,\n\tStaticContext = undefined,\n> {\n\tprivate static defaultOptions: ChildrenAnalyzerOptions = {\n\t\tignoreRenderProps: true,\n\t\trenderPropsErrorMessage: 'Render props (functions as React component children) are not supported.',\n\n\t\tignoreUnhandledNodes: true,\n\t\tunhandledNodeErrorMessage: 'Encountered an unknown child.',\n\n\t\tstaticContextFactoryName: 'getStaticContext',\n\t\tstaticRenderFactoryName: 'staticRender',\n\t}\n\n\tprivate readonly leaves: LeafList<AllLeavesRepresentation, StaticContext>\n\tprivate readonly branchNodes: BranchNodeList<AllLeavesRepresentation, AllBranchNodesRepresentation, StaticContext>\n\tprivate readonly options: ChildrenAnalyzerOptions<StaticContext>\n\n\tpublic constructor(\n\t\tleaves: LeafList<AllLeavesRepresentation, StaticContext>,\n\t\toptions?: Partial<ChildrenAnalyzerOptions>,\n\t)\n\tpublic constructor(\n\t\tleaves: LeafList<AllLeavesRepresentation, StaticContext>,\n\t\tbranchNodes: BranchNodeList<AllLeavesRepresentation, AllBranchNodesRepresentation, StaticContext>,\n\t\toptions?: Partial<ChildrenAnalyzerOptions>,\n\t)\n\tpublic constructor(\n\t\tleaves: LeafList<AllLeavesRepresentation, StaticContext>,\n\t\tdecider:\n\t\t\t| Partial<ChildrenAnalyzerOptions>\n\t\t\t| BranchNodeList<AllLeavesRepresentation, AllBranchNodesRepresentation, StaticContext> = [],\n\t\toptions: Partial<ChildrenAnalyzerOptions> = {},\n\t) {\n\t\tthis.leaves = leaves\n\n\t\tif (Array.isArray(decider)) {\n\t\t\tthis.branchNodes = decider\n\t\t} else {\n\t\t\tthis.branchNodes = []\n\t\t\toptions = decider\n\t\t}\n\t\tthis.options = { ...ChildrenAnalyzer.defaultOptions, ...options }\n\t}\n\n\tpublic processChildren(\n\t\tchildren: ReactNode,\n\t\tinitialStaticContext: StaticContext,\n\t): Array<AllLeavesRepresentation | AllBranchNodesRepresentation> {\n\t\tconst processed = this.processNode(children, initialStaticContext, [])\n\n\t\tconst rawResult: Array<AllLeavesRepresentation | AllBranchNodesRepresentation | undefined> = Array.isArray(\n\t\t\tprocessed,\n\t\t)\n\t\t\t? processed\n\t\t\t: [processed]\n\n\t\treturn rawResult.filter(\n\t\t\t(item): item is AllLeavesRepresentation | AllBranchNodesRepresentation => item !== undefined,\n\t\t)\n\t}\n\n\tprivate processNode(\n\t\tnode: ReactNode,\n\t\tstaticContext: StaticContext,\n\t\tcomponentPath: ReactElement[],\n\t): RawNodeRepresentation<AllLeavesRepresentation, AllBranchNodesRepresentation> {\n\t\tif (!node || typeof node === 'string' || typeof node === 'number' || typeof node === 'boolean') {\n\t\t\tfor (const leaf of this.leaves) {\n\t\t\t\tconst specification = leaf.specification\n\t\t\t\tif (specification.type === 'useSite') {\n\t\t\t\t\tconst { ComponentType, factory } = specification\n\t\t\t\t\tif (ComponentType === undefined) {\n\t\t\t\t\t\treturn factory(node, staticContext)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node === false || node === undefined || node === null) {\n\t\t\t\t// This adds seamless support for conditionals and such.\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tif (!this.options.ignoreUnhandledNodes) {\n\t\t\t\tthrow new ChildrenAnalyzerError(getErrorMessage(this.options.unhandledNodeErrorMessage, node, staticContext))\n\t\t\t}\n\t\t\treturn undefined\n\t\t}\n\n\t\tif (typeof node === 'function') {\n\t\t\tif (this.options.ignoreRenderProps) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tthrow new ChildrenAnalyzerError(getErrorMessage(this.options.renderPropsErrorMessage, node, staticContext))\n\t\t}\n\n\t\tif (Array.isArray(node)) {\n\t\t\tlet mapped: Array<AllLeavesRepresentation | AllBranchNodesRepresentation> = []\n\n\t\t\tfor (const subNode of node) {\n\t\t\t\tconst processed = this.processNode(subNode, staticContext, componentPath)\n\n\t\t\t\tif (processed !== undefined) {\n\t\t\t\t\tif (Array.isArray(processed)) {\n\t\t\t\t\t\tmapped = mapped.concat(processed)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmapped.push(processed)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn mapped\n\t\t}\n\n\t\tlet children: ReactNode = undefined\n\n\t\tif (!('type' in node)) {\n\t\t\treturn this.processNode(children, staticContext, componentPath)\n\t\t}\n\t\tchildren = node.props.children\n\n\t\tif (typeof node.type === 'symbol') {\n\t\t\t// Fragment, Portal or other non-component\n\t\t\treturn this.processNode(children, staticContext, componentPath)\n\t\t}\n\t\t// if (typeof node.type === 'string') {\n\t\t// \t// Typically a host component\n\t\t// \tif (!this.options.ignoreUnhandledNodes) {\n\t\t// \t\tthrow new ChildrenAnalyzerError(getErrorMessage(this.options.unhandledNodeErrorMessage, node, staticContext))\n\t\t// \t}\n\t\t// \treturn this.processNode(children, staticContext)\n\t\t// }\n\n\t\t// Component, PureComponent, FunctionComponent\n\n\t\tconst treeNode = node.type as ElementType &\n\t\t\t{\n\t\t\t\t[staticMethod in ValidFactoryName]:\n\t\t\t\t| StaticContextFactory<any, StaticContext>\n\t\t\t\t| SyntheticChildrenFactory<any, StaticContext>\n\t\t\t\t| UnconstrainedLeafRepresentationFactory<any, AllLeavesRepresentation, StaticContext>\n\t\t\t\t| DeclarationSiteNodeRepresentationFactory<any, unknown, AllBranchNodesRepresentation, StaticContext>\n\t\t\t}\n\n\t\tcomponentPath = [...componentPath, node]\n\t\tif (typeof treeNode !== 'string') {\n\t\t\tif (this.options.staticContextFactoryName in treeNode) {\n\t\t\t\tconst staticContextFactory = treeNode[this.options.staticContextFactoryName] as StaticContextFactory<\n\t\t\t\t\tany,\n\t\t\t\t\tStaticContext\n\t\t\t\t>\n\t\t\t\ttry {\n\t\t\t\t\tstaticContext = staticContextFactory(node.props, staticContext)\n\t\t\t\t} catch (e) {\n\t\t\t\t\twrapError(e, treeNode.displayName ?? '???', this.options.staticContextFactoryName, componentPath)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.options.staticRenderFactoryName in treeNode) {\n\t\t\t\tconst factory = treeNode[this.options.staticRenderFactoryName] as SyntheticChildrenFactory<any, StaticContext>\n\t\t\t\ttry {\n\t\t\t\t\tchildren = factory(node.props, staticContext)\n\t\t\t\t} catch (e) {\n\t\t\t\t\twrapError(e, treeNode.displayName ?? '???', this.options.staticRenderFactoryName, componentPath)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const leaf of this.leaves) {\n\t\t\tconst specification = leaf.specification\n\t\t\tswitch (specification.type) {\n\t\t\t\tcase 'declarationSite': {\n\t\t\t\t\tconst { factoryMethodName } = specification\n\n\t\t\t\t\tif (typeof treeNode !== 'string' && factoryMethodName in treeNode) {\n\t\t\t\t\t\tconst factory = treeNode[factoryMethodName] as UnconstrainedLeafRepresentationFactory<\n\t\t\t\t\t\t\tany,\n\t\t\t\t\t\t\tAllBranchNodesRepresentation | AllLeavesRepresentation,\n\t\t\t\t\t\t\tStaticContext\n\t\t\t\t\t\t>\n\t\t\t\t\t\treturn factory(node.props, staticContext)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'useSite': {\n\t\t\t\t\tconst { ComponentType, factory } = specification\n\t\t\t\t\tif (ComponentType === undefined || node.type === ComponentType) {\n\t\t\t\t\t\treturn factory(node, staticContext)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\treturn assertNever(specification)\n\t\t\t}\n\t\t}\n\n\t\tconst processedChildren = this.processNode(children, staticContext, componentPath)\n\n\t\tfor (const branchNode of this.branchNodes) {\n\t\t\tconst specification = branchNode.specification\n\t\t\tswitch (specification.type) {\n\t\t\t\tcase 'declarationSite': {\n\t\t\t\t\tconst { factoryMethodName, childrenRepresentationReducer } = specification\n\n\t\t\t\t\tif (typeof treeNode !== 'string' && factoryMethodName in treeNode) {\n\t\t\t\t\t\tif (processedChildren === undefined && !branchNode.options.childrenAreOptional) {\n\t\t\t\t\t\t\tthrow new ChildrenAnalyzerError(branchNode.options.childrenAbsentErrorMessage)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst factory = treeNode[factoryMethodName] as DeclarationSiteNodeRepresentationFactory<\n\t\t\t\t\t\t\tany,\n\t\t\t\t\t\t\tunknown,\n\t\t\t\t\t\t\tAllBranchNodesRepresentation | AllLeavesRepresentation,\n\t\t\t\t\t\t\tStaticContext\n\t\t\t\t\t\t>\n\t\t\t\t\t\treturn factory(node.props, childrenRepresentationReducer(processedChildren), staticContext)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'useSite': {\n\t\t\t\t\tconst { factory, ComponentType } = specification\n\t\t\t\t\tif (ComponentType === undefined || node.type === ComponentType) {\n\t\t\t\t\t\tif (processedChildren === undefined && !branchNode.options.childrenAreOptional) {\n\t\t\t\t\t\t\tthrow new ChildrenAnalyzerError(branchNode.options.childrenAbsentErrorMessage)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn factory(node, processedChildren, staticContext)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\treturn assertNever(specification)\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t!this.options.ignoreUnhandledNodes &&\n\t\t\t!(typeof treeNode !== 'string' && this.options.staticRenderFactoryName in treeNode)\n\t\t) {\n\t\t\tthrow new ChildrenAnalyzerError(getErrorMessage(this.options.unhandledNodeErrorMessage, node, staticContext))\n\t\t}\n\n\t\treturn processedChildren\n\t}\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => {
5
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ return value;
7
+ };
8
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
+ class ChildrenAnalyzerError extends Error {
10
+ constructor(message, options) {
11
+ super(message, options);
12
+ __publicField(this, "details");
13
+ this.details = options?.details;
14
+ }
15
+ }
16
+ exports.ChildrenAnalyzerError = ChildrenAnalyzerError;
17
+ //# sourceMappingURL=ChildrenAnalyzerError.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChildrenAnalyzerError.cjs","sources":["../../src/ChildrenAnalyzerError.ts"],"sourcesContent":["export class ChildrenAnalyzerError extends Error {\n\tpublic details?: string\n\n\tconstructor(message: string, options?: { cause: Error, details?: string }) {\n\t\tsuper(message, options)\n\t\tthis.details = options?.details\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;AAAO,MAAM,8BAA8B,MAAM;AAAA,EAGhD,YAAY,SAAiB,SAA8C;AAC1E,UAAM,SAAS,OAAO;AAHhB;AAIN,SAAK,UAAU,SAAS;AAAA,EACzB;AACD;;"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const getErrorMessage = (factory, node, staticContext) => {
4
+ return typeof factory === "string" ? factory : factory(node, staticContext);
5
+ };
6
+ exports.getErrorMessage = getErrorMessage;
7
+ //# sourceMappingURL=getErrorMessage.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getErrorMessage.cjs","sources":["../../../src/helpers/getErrorMessage.ts"],"sourcesContent":["import type { ReactNode } from 'react'\nimport type { ErrorMessageFactory } from '../ErrorMessageFactory'\n\nexport const getErrorMessage = <StaticContext>(\n\tfactory: ErrorMessageFactory<StaticContext>,\n\tnode: ReactNode,\n\tstaticContext: StaticContext,\n): string => {\n\treturn typeof factory === 'string' ? factory : factory(node, staticContext)\n}\n"],"names":[],"mappings":";;AAGO,MAAM,kBAAkB,CAC9B,SACA,MACA,kBACY;AACZ,SAAO,OAAO,YAAY,WAAW,UAAU,QAAQ,MAAM,aAAa;AAC3E;;"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const React = require("react");
4
+ const ChildrenAnalyzerError = require("../ChildrenAnalyzerError.cjs");
5
+ const wrapError = (e, currentComponentName, methodName, path) => {
6
+ if (!(e instanceof Error)) {
7
+ throw e;
8
+ }
9
+ const componentPath = path.map((it, index) => {
10
+ const { children, ...props } = it.props;
11
+ const printProps = (props2) => {
12
+ let result = "";
13
+ for (const [key, value] of Object.entries(props2)) {
14
+ if (value === void 0) {
15
+ continue;
16
+ }
17
+ try {
18
+ const valuePrinted = JSON.stringify(
19
+ value,
20
+ (key2, value2) => {
21
+ if (typeof value2 === "function") {
22
+ return "(function)";
23
+ }
24
+ if (React.isValidElement(value2)) {
25
+ return "(react element)";
26
+ }
27
+ return value2;
28
+ }
29
+ );
30
+ result += ` ${key}=${valuePrinted}`;
31
+ } catch {
32
+ result += ` ${key}=(failed to print a value)`;
33
+ }
34
+ }
35
+ return result;
36
+ };
37
+ const componentName = typeof it.type === "object" && "displayName" in it.type ? it.type.displayName : null;
38
+ const propsPrinted = printProps(props);
39
+ const indent = " ".repeat(index);
40
+ return `${indent}<${componentName ?? "???"}${propsPrinted}>`;
41
+ });
42
+ const errorMessage = `Error during static render of ${currentComponentName} in ${methodName}:
43
+ ${e.message || "unknown error"}`;
44
+ throw new ChildrenAnalyzerError.ChildrenAnalyzerError(errorMessage, {
45
+ cause: e,
46
+ details: `Component path:
47
+ ${componentPath.join("\n")}`
48
+ });
49
+ };
50
+ exports.wrapError = wrapError;
51
+ //# sourceMappingURL=wrapError.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapError.cjs","sources":["../../../src/helpers/wrapError.ts"],"sourcesContent":["import React, { ReactElement } from 'react'\nimport { ChildrenAnalyzerError } from '../ChildrenAnalyzerError'\n\nexport const wrapError = (e: unknown, currentComponentName: string, methodName: string, path: ReactElement[]): never => {\n\tif (!(e instanceof Error)) {\n\t\tthrow e\n\t}\n\n\tconst componentPath = path.map((it, index) => {\n\t\tconst { children, ...props } = it.props\n\t\tconst printProps = (props: any) => {\n\t\t\tlet result = ''\n\t\t\tfor (const [key, value] of Object.entries(props)) {\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst valuePrinted = JSON.stringify(value, (key, value) => {\n\t\t\t\t\t\t\tif (typeof value === 'function') {\n\t\t\t\t\t\t\t\treturn '(function)'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (React.isValidElement(value)) {\n\t\t\t\t\t\t\t\treturn '(react element)'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t\tresult += ` ${key}=${valuePrinted}`\n\t\t\t\t} catch {\n\t\t\t\t\tresult += ` ${key}=(failed to print a value)`\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t\tconst componentName = typeof it.type === 'object' && 'displayName' in it.type ? (it.type as any).displayName : null\n\t\tconst propsPrinted = printProps(props)\n\t\tconst indent = ' '.repeat(index)\n\t\treturn `${indent}<${componentName ?? '???'}${propsPrinted}>`\n\t})\n\tconst errorMessage = `Error during static render of ${currentComponentName} in ${methodName}:\\n${e.message || 'unknown error'}`\n\n\tthrow new ChildrenAnalyzerError(errorMessage, {\n\t\tcause: e,\n\t\tdetails: `Component path:\\n${componentPath.join('\\n')}`,\n\t})\n}\n"],"names":["props","key","value","ChildrenAnalyzerError"],"mappings":";;;;AAGO,MAAM,YAAY,CAAC,GAAY,sBAA8B,YAAoB,SAAgC;AACnH,MAAA,EAAE,aAAa,QAAQ;AACpB,UAAA;AAAA,EACP;AAEA,QAAM,gBAAgB,KAAK,IAAI,CAAC,IAAI,UAAU;AAC7C,UAAM,EAAE,UAAU,GAAG,MAAA,IAAU,GAAG;AAC5B,UAAA,aAAa,CAACA,WAAe;AAClC,UAAI,SAAS;AACb,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQA,MAAK,GAAG;AACjD,YAAI,UAAU,QAAW;AACxB;AAAA,QACD;AACI,YAAA;AACH,gBAAM,eAAe,KAAK;AAAA,YAAU;AAAA,YAAO,CAACC,MAAKC,WAAU;AACrD,kBAAA,OAAOA,WAAU,YAAY;AACzB,uBAAA;AAAA,cACR;AACI,kBAAA,MAAM,eAAeA,MAAK,GAAG;AACzB,uBAAA;AAAA,cACR;AACOA,qBAAAA;AAAAA,YACR;AAAA,UAAA;AAES,oBAAA,IAAI,GAAG,IAAI,YAAY;AAAA,QAAA,QAC1B;AACP,oBAAU,IAAI,GAAG;AAAA,QAClB;AAAA,MACD;AACO,aAAA;AAAA,IAAA;AAEF,UAAA,gBAAgB,OAAO,GAAG,SAAS,YAAY,iBAAiB,GAAG,OAAQ,GAAG,KAAa,cAAc;AACzG,UAAA,eAAe,WAAW,KAAK;AAC/B,UAAA,SAAS,KAAK,OAAO,KAAK;AAChC,WAAO,GAAG,MAAM,IAAI,iBAAiB,KAAK,GAAG,YAAY;AAAA,EAAA,CACzD;AACD,QAAM,eAAe,iCAAiC,oBAAoB,OAAO,UAAU;AAAA,EAAM,EAAE,WAAW,eAAe;AAEvH,QAAA,IAAIC,4CAAsB,cAAc;AAAA,IAC7C,OAAO;AAAA,IACP,SAAS;AAAA,EAAoB,cAAc,KAAK,IAAI,CAAC;AAAA,EAAA,CACrD;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrapError.js","sources":["../../../src/helpers/wrapError.ts"],"sourcesContent":["import React, { ReactElement } from 'react'\nimport { ChildrenAnalyzerError } from '../ChildrenAnalyzerError'\n\nexport const wrapError = (e: unknown, currentComponentName: string, methodName: string, path: ReactElement[]): never => {\n\tif (!(e instanceof Error)) {\n\t\tthrow e\n\t}\n\n\tconst componentPath = path.map((it, index) => {\n\t\tconst { children, ...props } = it.props\n\t\tconst printProps = (props: any) => {\n\t\t\tlet result = ''\n\t\t\tfor (const [key, value] of Object.entries(props)) {\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst valuePrinted = JSON.stringify(value, (key, value) => {\n\t\t\t\t\t\t\tif (typeof value === 'function') {\n\t\t\t\t\t\t\t\treturn '(function)'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (React.isValidElement(value)) {\n\t\t\t\t\t\t\t\treturn '(react element)'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t\tresult += ` ${key}=${valuePrinted}`\n\t\t\t\t} catch {\n\t\t\t\t\tresult += ` ${key}=(failed to print a value)`\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t\tconst componentName = typeof it.type === 'object' && 'displayName' in it.type ? (it.type as any).displayName : null\n\t\tconst propsPrinted = printProps(props)\n\t\tconst indent = ' '.repeat(index)\n\t\treturn `${indent}<${componentName ?? '???'}${propsPrinted}>`\n\t})\n\tconst errorMessage = `Error during static render of ${currentComponentName} in ${methodName}:\\n${e.message || 'unknown error'}`\n\n\tthrow new ChildrenAnalyzerError(errorMessage, {\n\t\tcause: e,\n\t\tdetails: `Component path:\\n${componentPath.join('\\n')}`,\n\t})\n}\n"],"names":["props","key","value"],"mappings":";;AAGO,MAAM,YAAY,CAAC,GAAY,sBAA8B,YAAoB,SAAgC;AACnH,MAAA,EAAE,aAAa,QAAQ;AACpB,UAAA;AAAA,EACP;AAEA,QAAM,gBAAgB,KAAK,IAAI,CAAC,IAAI,UAAU;AAC7C,UAAM,EAAE,UAAU,GAAG,MAAA,IAAU,GAAG;AAC5B,UAAA,aAAa,CAACA,WAAe;AAClC,UAAI,SAAS;AACb,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQA,MAAK,GAAG;AACjD,YAAI,UAAU,QAAW;AACxB;AAAA,QACD;AACI,YAAA;AACH,gBAAM,eAAe,KAAK;AAAA,YAAU;AAAA,YAAO,CAACC,MAAKC,WAAU;AACrD,kBAAA,OAAOA,WAAU,YAAY;AACzB,uBAAA;AAAA,cACR;AACI,kBAAA,MAAM,eAAeA,MAAK,GAAG;AACzB,uBAAA;AAAA,cACR;AACOA,qBAAAA;AAAAA,YACR;AAAA,UAAA;AAED,oBAAU,IAAI,OAAO;AAAA,QAAA,QACpB;AACD,oBAAU,IAAI;AAAA,QACf;AAAA,MACD;AACO,aAAA;AAAA,IAAA;AAEF,UAAA,gBAAgB,OAAO,GAAG,SAAS,YAAY,iBAAiB,GAAG,OAAQ,GAAG,KAAa,cAAc;AACzG,UAAA,eAAe,WAAW,KAAK;AAC/B,UAAA,SAAS,KAAK,OAAO,KAAK;AACzB,WAAA,GAAG,UAAU,iBAAiB,QAAQ;AAAA,EAAA,CAC7C;AACK,QAAA,eAAe,iCAAiC,2BAA2B;AAAA,EAAgB,EAAE,WAAW;AAExG,QAAA,IAAI,sBAAsB,cAAc;AAAA,IAC7C,OAAO;AAAA,IACP,SAAS;AAAA,EAAoB,cAAc,KAAK,IAAI;AAAA,EAAA,CACpD;AACF;"}
1
+ {"version":3,"file":"wrapError.js","sources":["../../../src/helpers/wrapError.ts"],"sourcesContent":["import React, { ReactElement } from 'react'\nimport { ChildrenAnalyzerError } from '../ChildrenAnalyzerError'\n\nexport const wrapError = (e: unknown, currentComponentName: string, methodName: string, path: ReactElement[]): never => {\n\tif (!(e instanceof Error)) {\n\t\tthrow e\n\t}\n\n\tconst componentPath = path.map((it, index) => {\n\t\tconst { children, ...props } = it.props\n\t\tconst printProps = (props: any) => {\n\t\t\tlet result = ''\n\t\t\tfor (const [key, value] of Object.entries(props)) {\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst valuePrinted = JSON.stringify(value, (key, value) => {\n\t\t\t\t\t\t\tif (typeof value === 'function') {\n\t\t\t\t\t\t\t\treturn '(function)'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (React.isValidElement(value)) {\n\t\t\t\t\t\t\t\treturn '(react element)'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t\tresult += ` ${key}=${valuePrinted}`\n\t\t\t\t} catch {\n\t\t\t\t\tresult += ` ${key}=(failed to print a value)`\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t\tconst componentName = typeof it.type === 'object' && 'displayName' in it.type ? (it.type as any).displayName : null\n\t\tconst propsPrinted = printProps(props)\n\t\tconst indent = ' '.repeat(index)\n\t\treturn `${indent}<${componentName ?? '???'}${propsPrinted}>`\n\t})\n\tconst errorMessage = `Error during static render of ${currentComponentName} in ${methodName}:\\n${e.message || 'unknown error'}`\n\n\tthrow new ChildrenAnalyzerError(errorMessage, {\n\t\tcause: e,\n\t\tdetails: `Component path:\\n${componentPath.join('\\n')}`,\n\t})\n}\n"],"names":["props","key","value"],"mappings":";;AAGO,MAAM,YAAY,CAAC,GAAY,sBAA8B,YAAoB,SAAgC;AACnH,MAAA,EAAE,aAAa,QAAQ;AACpB,UAAA;AAAA,EACP;AAEA,QAAM,gBAAgB,KAAK,IAAI,CAAC,IAAI,UAAU;AAC7C,UAAM,EAAE,UAAU,GAAG,MAAA,IAAU,GAAG;AAC5B,UAAA,aAAa,CAACA,WAAe;AAClC,UAAI,SAAS;AACb,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQA,MAAK,GAAG;AACjD,YAAI,UAAU,QAAW;AACxB;AAAA,QACD;AACI,YAAA;AACH,gBAAM,eAAe,KAAK;AAAA,YAAU;AAAA,YAAO,CAACC,MAAKC,WAAU;AACrD,kBAAA,OAAOA,WAAU,YAAY;AACzB,uBAAA;AAAA,cACR;AACI,kBAAA,MAAM,eAAeA,MAAK,GAAG;AACzB,uBAAA;AAAA,cACR;AACOA,qBAAAA;AAAAA,YACR;AAAA,UAAA;AAES,oBAAA,IAAI,GAAG,IAAI,YAAY;AAAA,QAAA,QAC1B;AACP,oBAAU,IAAI,GAAG;AAAA,QAClB;AAAA,MACD;AACO,aAAA;AAAA,IAAA;AAEF,UAAA,gBAAgB,OAAO,GAAG,SAAS,YAAY,iBAAiB,GAAG,OAAQ,GAAG,KAAa,cAAc;AACzG,UAAA,eAAe,WAAW,KAAK;AAC/B,UAAA,SAAS,KAAK,OAAO,KAAK;AAChC,WAAO,GAAG,MAAM,IAAI,iBAAiB,KAAK,GAAG,YAAY;AAAA,EAAA,CACzD;AACD,QAAM,eAAe,iCAAiC,oBAAoB,OAAO,UAAU;AAAA,EAAM,EAAE,WAAW,eAAe;AAEvH,QAAA,IAAI,sBAAsB,cAAc;AAAA,IAC7C,OAAO;AAAA,IACP,SAAS;AAAA,EAAoB,cAAc,KAAK,IAAI,CAAC;AAAA,EAAA,CACrD;AACF;"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const ChildrenAnalyzer = require("./ChildrenAnalyzer.cjs");
4
+ const ChildrenAnalyzerError = require("./ChildrenAnalyzerError.cjs");
5
+ const BranchNode = require("./nodeSpecs/BranchNode.cjs");
6
+ const Leaf = require("./nodeSpecs/Leaf.cjs");
7
+ exports.ChildrenAnalyzer = ChildrenAnalyzer.ChildrenAnalyzer;
8
+ exports.ChildrenAnalyzerError = ChildrenAnalyzerError.ChildrenAnalyzerError;
9
+ exports.BranchNode = BranchNode.BranchNode;
10
+ exports.Leaf = Leaf.Leaf;
11
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => {
5
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ return value;
7
+ };
8
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
+ const ChildrenAnalyzerError = require("../ChildrenAnalyzerError.cjs");
10
+ const _BranchNode = class _BranchNode {
11
+ constructor(factory, componentOrReducer, options) {
12
+ __publicField(this, "specification");
13
+ __publicField(this, "options");
14
+ if (typeof factory !== "function") {
15
+ this.specification = {
16
+ type: "declarationSite",
17
+ factoryMethodName: factory,
18
+ childrenRepresentationReducer: componentOrReducer
19
+ };
20
+ } else if (typeof factory === "function") {
21
+ this.specification = {
22
+ type: "useSite",
23
+ factory,
24
+ ComponentType: componentOrReducer
25
+ };
26
+ } else {
27
+ throw new ChildrenAnalyzerError.ChildrenAnalyzerError("Invalid arguments");
28
+ }
29
+ this.options = {
30
+ ..._BranchNode.defaultOptions,
31
+ ...options
32
+ };
33
+ }
34
+ };
35
+ __publicField(_BranchNode, "defaultOptions", {
36
+ childrenAreOptional: false,
37
+ childrenAbsentErrorMessage: "Component must have children!"
38
+ });
39
+ let BranchNode = _BranchNode;
40
+ exports.BranchNode = BranchNode;
41
+ //# sourceMappingURL=BranchNode.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BranchNode.cjs","sources":["../../../src/nodeSpecs/BranchNode.ts"],"sourcesContent":["import type { ElementType } from 'react'\nimport { ChildrenAnalyzerError } from '../ChildrenAnalyzerError'\nimport type { BranchNodeOptions } from './BranchNodeOptions'\nimport type { ChildrenRepresentationReducer, UseSiteBranchNodeRepresentationFactory, ValidFactoryName } from './types'\n\nclass BranchNode<\n\tProps extends {} = {},\n\tStaticContext = undefined,\n\tFactoryMethodName extends ValidFactoryName = string,\n\tChildrenRepresentation = any,\n\tReducedChildrenRepresentation = any,\n\tRepresentation = any,\n> {\n\tprivate static defaultOptions: BranchNodeOptions = {\n\t\tchildrenAreOptional: false,\n\t\tchildrenAbsentErrorMessage: 'Component must have children!',\n\t}\n\n\tpublic readonly specification: BranchNode.Specification<\n\t\tProps,\n\t\tStaticContext,\n\t\tFactoryMethodName,\n\t\tChildrenRepresentation,\n\t\tReducedChildrenRepresentation,\n\t\tRepresentation\n\t>\n\n\tpublic readonly options: BranchNodeOptions\n\n\tpublic constructor(\n\t\tfactoryMethodName: FactoryMethodName,\n\t\tchildrenRepresentationReducer: ChildrenRepresentationReducer<ChildrenRepresentation, ReducedChildrenRepresentation>,\n\t\toptions?: Partial<BranchNodeOptions>,\n\t)\n\tpublic constructor(\n\t\tuseSiteFactory: UseSiteBranchNodeRepresentationFactory<\n\t\t\tProps,\n\t\t\tChildrenRepresentation,\n\t\t\tRepresentation,\n\t\t\tStaticContext\n\t\t>,\n\t\tComponentType?: ElementType<Props>,\n\t\toptions?: Partial<BranchNodeOptions>,\n\t)\n\tpublic constructor(\n\t\tfactory:\n\t\t\t| FactoryMethodName\n\t\t\t| UseSiteBranchNodeRepresentationFactory<Props, ChildrenRepresentation, Representation, StaticContext>,\n\t\tcomponentOrReducer?:\n\t\t\t| ChildrenRepresentationReducer<ChildrenRepresentation, ReducedChildrenRepresentation>\n\t\t\t| ElementType<Props>,\n\t\toptions?: Partial<BranchNodeOptions>,\n\t) {\n\t\tif (typeof factory !== 'function') {\n\t\t\tthis.specification = {\n\t\t\t\ttype: 'declarationSite',\n\t\t\t\tfactoryMethodName: factory,\n\t\t\t\tchildrenRepresentationReducer: componentOrReducer as ChildrenRepresentationReducer<\n\t\t\t\t\tChildrenRepresentation,\n\t\t\t\t\tReducedChildrenRepresentation\n\t\t\t\t>,\n\t\t\t}\n\t\t} else if (typeof factory === 'function') {\n\t\t\tthis.specification = {\n\t\t\t\ttype: 'useSite',\n\t\t\t\tfactory,\n\t\t\t\tComponentType: componentOrReducer as ElementType<Props>,\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new ChildrenAnalyzerError('Invalid arguments')\n\t\t}\n\t\tthis.options = {\n\t\t\t...BranchNode.defaultOptions,\n\t\t\t...options,\n\t\t}\n\t}\n}\n\nnamespace BranchNode {\n\texport type Specification<\n\t\tProps extends {} = {},\n\t\tStaticContext = any,\n\t\tFactoryMethodName extends ValidFactoryName = string,\n\t\tChildrenRepresentation = any,\n\t\tReducedChildrenRepresentation = any,\n\t\tRepresentation = any,\n\t> =\n\t\t| {\n\t\t\t\ttype: 'declarationSite'\n\t\t\t\tfactoryMethodName: FactoryMethodName\n\t\t\t\tchildrenRepresentationReducer: ChildrenRepresentationReducer<\n\t\t\t\t\tChildrenRepresentation,\n\t\t\t\t\tReducedChildrenRepresentation\n\t\t\t\t>\n\t\t }\n\t\t| {\n\t\t\t\ttype: 'useSite'\n\t\t\t\tfactory: UseSiteBranchNodeRepresentationFactory<Props, ChildrenRepresentation, Representation, StaticContext>\n\t\t\t\tComponentType?: ElementType<Props>\n\t\t }\n}\n\nexport { BranchNode }\n"],"names":["ChildrenAnalyzerError"],"mappings":";;;;;;;;;AAKA,MAAM,cAAN,MAAM,YAOJ;AAAA,EAgCM,YACN,SAGA,oBAGA,SACC;AAlCc;AASA;AA0BX,QAAA,OAAO,YAAY,YAAY;AAClC,WAAK,gBAAgB;AAAA,QACpB,MAAM;AAAA,QACN,mBAAmB;AAAA,QACnB,+BAA+B;AAAA,MAAA;AAAA,IAIhC,WACU,OAAO,YAAY,YAAY;AACzC,WAAK,gBAAgB;AAAA,QACpB,MAAM;AAAA,QACN;AAAA,QACA,eAAe;AAAA,MAAA;AAAA,IAChB,OACM;AACA,YAAA,IAAIA,sBAAAA,sBAAsB,mBAAmB;AAAA,IACpD;AACA,SAAK,UAAU;AAAA,MACd,GAAG,YAAW;AAAA,MACd,GAAG;AAAA,IAAA;AAAA,EAEL;AACD;AA/DC,cARK,aAQU,kBAAoC;AAAA,EAClD,qBAAqB;AAAA,EACrB,4BAA4B;AAAA;AAV9B,IAAM,aAAN;;"}
@@ -5,7 +5,7 @@ var __publicField = (obj, key, value) => {
5
5
  return value;
6
6
  };
7
7
  import { ChildrenAnalyzerError } from "../ChildrenAnalyzerError.js";
8
- const _BranchNode = class {
8
+ const _BranchNode = class _BranchNode {
9
9
  constructor(factory, componentOrReducer, options) {
10
10
  __publicField(this, "specification");
11
11
  __publicField(this, "options");
@@ -30,11 +30,11 @@ const _BranchNode = class {
30
30
  };
31
31
  }
32
32
  };
33
- let BranchNode = _BranchNode;
34
- __publicField(BranchNode, "defaultOptions", {
33
+ __publicField(_BranchNode, "defaultOptions", {
35
34
  childrenAreOptional: false,
36
35
  childrenAbsentErrorMessage: "Component must have children!"
37
36
  });
37
+ let BranchNode = _BranchNode;
38
38
  export {
39
39
  BranchNode
40
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"BranchNode.js","sources":["../../../src/nodeSpecs/BranchNode.ts"],"sourcesContent":["import type { ElementType } from 'react'\nimport { ChildrenAnalyzerError } from '../ChildrenAnalyzerError'\nimport type { BranchNodeOptions } from './BranchNodeOptions'\nimport type { ChildrenRepresentationReducer, UseSiteBranchNodeRepresentationFactory, ValidFactoryName } from './types'\n\nclass BranchNode<\n\tProps extends {} = {},\n\tStaticContext = undefined,\n\tFactoryMethodName extends ValidFactoryName = string,\n\tChildrenRepresentation = any,\n\tReducedChildrenRepresentation = any,\n\tRepresentation = any,\n> {\n\tprivate static defaultOptions: BranchNodeOptions = {\n\t\tchildrenAreOptional: false,\n\t\tchildrenAbsentErrorMessage: 'Component must have children!',\n\t}\n\n\tpublic readonly specification: BranchNode.Specification<\n\t\tProps,\n\t\tStaticContext,\n\t\tFactoryMethodName,\n\t\tChildrenRepresentation,\n\t\tReducedChildrenRepresentation,\n\t\tRepresentation\n\t>\n\n\tpublic readonly options: BranchNodeOptions\n\n\tpublic constructor(\n\t\tfactoryMethodName: FactoryMethodName,\n\t\tchildrenRepresentationReducer: ChildrenRepresentationReducer<ChildrenRepresentation, ReducedChildrenRepresentation>,\n\t\toptions?: Partial<BranchNodeOptions>,\n\t)\n\tpublic constructor(\n\t\tuseSiteFactory: UseSiteBranchNodeRepresentationFactory<\n\t\t\tProps,\n\t\t\tChildrenRepresentation,\n\t\t\tRepresentation,\n\t\t\tStaticContext\n\t\t>,\n\t\tComponentType?: ElementType<Props>,\n\t\toptions?: Partial<BranchNodeOptions>,\n\t)\n\tpublic constructor(\n\t\tfactory:\n\t\t\t| FactoryMethodName\n\t\t\t| UseSiteBranchNodeRepresentationFactory<Props, ChildrenRepresentation, Representation, StaticContext>,\n\t\tcomponentOrReducer?:\n\t\t\t| ChildrenRepresentationReducer<ChildrenRepresentation, ReducedChildrenRepresentation>\n\t\t\t| ElementType<Props>,\n\t\toptions?: Partial<BranchNodeOptions>,\n\t) {\n\t\tif (typeof factory !== 'function') {\n\t\t\tthis.specification = {\n\t\t\t\ttype: 'declarationSite',\n\t\t\t\tfactoryMethodName: factory,\n\t\t\t\tchildrenRepresentationReducer: componentOrReducer as ChildrenRepresentationReducer<\n\t\t\t\t\tChildrenRepresentation,\n\t\t\t\t\tReducedChildrenRepresentation\n\t\t\t\t>,\n\t\t\t}\n\t\t} else if (typeof factory === 'function') {\n\t\t\tthis.specification = {\n\t\t\t\ttype: 'useSite',\n\t\t\t\tfactory,\n\t\t\t\tComponentType: componentOrReducer as ElementType<Props>,\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new ChildrenAnalyzerError('Invalid arguments')\n\t\t}\n\t\tthis.options = {\n\t\t\t...BranchNode.defaultOptions,\n\t\t\t...options,\n\t\t}\n\t}\n}\n\nnamespace BranchNode {\n\texport type Specification<\n\t\tProps extends {} = {},\n\t\tStaticContext = any,\n\t\tFactoryMethodName extends ValidFactoryName = string,\n\t\tChildrenRepresentation = any,\n\t\tReducedChildrenRepresentation = any,\n\t\tRepresentation = any,\n\t> =\n\t\t| {\n\t\t\t\ttype: 'declarationSite'\n\t\t\t\tfactoryMethodName: FactoryMethodName\n\t\t\t\tchildrenRepresentationReducer: ChildrenRepresentationReducer<\n\t\t\t\t\tChildrenRepresentation,\n\t\t\t\t\tReducedChildrenRepresentation\n\t\t\t\t>\n\t\t }\n\t\t| {\n\t\t\t\ttype: 'useSite'\n\t\t\t\tfactory: UseSiteBranchNodeRepresentationFactory<Props, ChildrenRepresentation, Representation, StaticContext>\n\t\t\t\tComponentType?: ElementType<Props>\n\t\t }\n}\n\nexport { BranchNode }\n"],"names":[],"mappings":";;;;;;;AAKA,MAAM,cAAN,MAOE;AAAA,EAgCM,YACN,SAGA,oBAGA,SACC;AAlCc;AASA;AA0BX,QAAA,OAAO,YAAY,YAAY;AAClC,WAAK,gBAAgB;AAAA,QACpB,MAAM;AAAA,QACN,mBAAmB;AAAA,QACnB,+BAA+B;AAAA,MAAA;AAAA,IAIhC,WACU,OAAO,YAAY,YAAY;AACzC,WAAK,gBAAgB;AAAA,QACpB,MAAM;AAAA,QACN;AAAA,QACA,eAAe;AAAA,MAAA;AAAA,IAChB,OACM;AACA,YAAA,IAAI,sBAAsB,mBAAmB;AAAA,IACpD;AACA,SAAK,UAAU;AAAA,MACd,GAAG,YAAW;AAAA,MACd,GAAG;AAAA,IAAA;AAAA,EAEL;AACD;AAvEA,IAAM,aAAN;AAQC,cARK,YAQU,kBAAoC;AAAA,EAClD,qBAAqB;AAAA,EACrB,4BAA4B;AAAA;"}
1
+ {"version":3,"file":"BranchNode.js","sources":["../../../src/nodeSpecs/BranchNode.ts"],"sourcesContent":["import type { ElementType } from 'react'\nimport { ChildrenAnalyzerError } from '../ChildrenAnalyzerError'\nimport type { BranchNodeOptions } from './BranchNodeOptions'\nimport type { ChildrenRepresentationReducer, UseSiteBranchNodeRepresentationFactory, ValidFactoryName } from './types'\n\nclass BranchNode<\n\tProps extends {} = {},\n\tStaticContext = undefined,\n\tFactoryMethodName extends ValidFactoryName = string,\n\tChildrenRepresentation = any,\n\tReducedChildrenRepresentation = any,\n\tRepresentation = any,\n> {\n\tprivate static defaultOptions: BranchNodeOptions = {\n\t\tchildrenAreOptional: false,\n\t\tchildrenAbsentErrorMessage: 'Component must have children!',\n\t}\n\n\tpublic readonly specification: BranchNode.Specification<\n\t\tProps,\n\t\tStaticContext,\n\t\tFactoryMethodName,\n\t\tChildrenRepresentation,\n\t\tReducedChildrenRepresentation,\n\t\tRepresentation\n\t>\n\n\tpublic readonly options: BranchNodeOptions\n\n\tpublic constructor(\n\t\tfactoryMethodName: FactoryMethodName,\n\t\tchildrenRepresentationReducer: ChildrenRepresentationReducer<ChildrenRepresentation, ReducedChildrenRepresentation>,\n\t\toptions?: Partial<BranchNodeOptions>,\n\t)\n\tpublic constructor(\n\t\tuseSiteFactory: UseSiteBranchNodeRepresentationFactory<\n\t\t\tProps,\n\t\t\tChildrenRepresentation,\n\t\t\tRepresentation,\n\t\t\tStaticContext\n\t\t>,\n\t\tComponentType?: ElementType<Props>,\n\t\toptions?: Partial<BranchNodeOptions>,\n\t)\n\tpublic constructor(\n\t\tfactory:\n\t\t\t| FactoryMethodName\n\t\t\t| UseSiteBranchNodeRepresentationFactory<Props, ChildrenRepresentation, Representation, StaticContext>,\n\t\tcomponentOrReducer?:\n\t\t\t| ChildrenRepresentationReducer<ChildrenRepresentation, ReducedChildrenRepresentation>\n\t\t\t| ElementType<Props>,\n\t\toptions?: Partial<BranchNodeOptions>,\n\t) {\n\t\tif (typeof factory !== 'function') {\n\t\t\tthis.specification = {\n\t\t\t\ttype: 'declarationSite',\n\t\t\t\tfactoryMethodName: factory,\n\t\t\t\tchildrenRepresentationReducer: componentOrReducer as ChildrenRepresentationReducer<\n\t\t\t\t\tChildrenRepresentation,\n\t\t\t\t\tReducedChildrenRepresentation\n\t\t\t\t>,\n\t\t\t}\n\t\t} else if (typeof factory === 'function') {\n\t\t\tthis.specification = {\n\t\t\t\ttype: 'useSite',\n\t\t\t\tfactory,\n\t\t\t\tComponentType: componentOrReducer as ElementType<Props>,\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new ChildrenAnalyzerError('Invalid arguments')\n\t\t}\n\t\tthis.options = {\n\t\t\t...BranchNode.defaultOptions,\n\t\t\t...options,\n\t\t}\n\t}\n}\n\nnamespace BranchNode {\n\texport type Specification<\n\t\tProps extends {} = {},\n\t\tStaticContext = any,\n\t\tFactoryMethodName extends ValidFactoryName = string,\n\t\tChildrenRepresentation = any,\n\t\tReducedChildrenRepresentation = any,\n\t\tRepresentation = any,\n\t> =\n\t\t| {\n\t\t\t\ttype: 'declarationSite'\n\t\t\t\tfactoryMethodName: FactoryMethodName\n\t\t\t\tchildrenRepresentationReducer: ChildrenRepresentationReducer<\n\t\t\t\t\tChildrenRepresentation,\n\t\t\t\t\tReducedChildrenRepresentation\n\t\t\t\t>\n\t\t }\n\t\t| {\n\t\t\t\ttype: 'useSite'\n\t\t\t\tfactory: UseSiteBranchNodeRepresentationFactory<Props, ChildrenRepresentation, Representation, StaticContext>\n\t\t\t\tComponentType?: ElementType<Props>\n\t\t }\n}\n\nexport { BranchNode }\n"],"names":[],"mappings":";;;;;;;AAKA,MAAM,cAAN,MAAM,YAOJ;AAAA,EAgCM,YACN,SAGA,oBAGA,SACC;AAlCc;AASA;AA0BX,QAAA,OAAO,YAAY,YAAY;AAClC,WAAK,gBAAgB;AAAA,QACpB,MAAM;AAAA,QACN,mBAAmB;AAAA,QACnB,+BAA+B;AAAA,MAAA;AAAA,IAIhC,WACU,OAAO,YAAY,YAAY;AACzC,WAAK,gBAAgB;AAAA,QACpB,MAAM;AAAA,QACN;AAAA,QACA,eAAe;AAAA,MAAA;AAAA,IAChB,OACM;AACA,YAAA,IAAI,sBAAsB,mBAAmB;AAAA,IACpD;AACA,SAAK,UAAU;AAAA,MACd,GAAG,YAAW;AAAA,MACd,GAAG;AAAA,IAAA;AAAA,EAEL;AACD;AA/DC,cARK,aAQU,kBAAoC;AAAA,EAClD,qBAAqB;AAAA,EACrB,4BAA4B;AAAA;AAV9B,IAAM,aAAN;"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => {
5
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ return value;
7
+ };
8
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
+ class Leaf {
10
+ constructor(factory, ComponentType) {
11
+ __publicField(this, "specification");
12
+ if (typeof factory === "function") {
13
+ this.specification = {
14
+ type: "useSite",
15
+ ComponentType,
16
+ factory
17
+ };
18
+ } else {
19
+ this.specification = {
20
+ type: "declarationSite",
21
+ factoryMethodName: factory
22
+ };
23
+ }
24
+ }
25
+ }
26
+ exports.Leaf = Leaf;
27
+ //# sourceMappingURL=Leaf.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Leaf.cjs","sources":["../../../src/nodeSpecs/Leaf.ts"],"sourcesContent":["import type { ElementType } from 'react'\nimport type {\n\tConstrainedLeafRepresentationFactory,\n\tUnconstrainedLeafRepresentationFactory,\n\tValidFactoryName,\n} from './types'\n\nclass Leaf<\n\tProps extends {} = {},\n\tStaticContext = any,\n\tFactoryMethodName extends ValidFactoryName = string,\n\tRepresentation = any,\n> {\n\tpublic readonly specification: Leaf.Specification<FactoryMethodName, Representation, Props, StaticContext>\n\n\tpublic constructor(factoryMethodName: FactoryMethodName)\n\tpublic constructor(staticFactory: UnconstrainedLeafRepresentationFactory<Props, Representation, StaticContext>)\n\tpublic constructor(\n\t\tstaticFactory: ConstrainedLeafRepresentationFactory<Props, Representation, StaticContext>,\n\t\tComponentType: ElementType<Props>,\n\t)\n\tpublic constructor(\n\t\tfactory: FactoryMethodName | UnconstrainedLeafRepresentationFactory<Props, Representation, StaticContext>,\n\t\tComponentType?: ElementType<Props>,\n\t) {\n\t\tif (typeof factory === 'function') {\n\t\t\tthis.specification = {\n\t\t\t\ttype: 'useSite',\n\t\t\t\tComponentType,\n\t\t\t\tfactory,\n\t\t\t}\n\t\t} else {\n\t\t\tthis.specification = {\n\t\t\t\ttype: 'declarationSite',\n\t\t\t\tfactoryMethodName: factory,\n\t\t\t}\n\t\t}\n\t}\n}\n\nnamespace Leaf {\n\texport type Specification<\n\t\tFactoryMethodName extends ValidFactoryName,\n\t\tRepresentation,\n\t\tProps extends {},\n\t\tStaticContext,\n\t> =\n\t\t| {\n\t\t\t\ttype: 'declarationSite'\n\t\t\t\tfactoryMethodName: FactoryMethodName\n\t\t }\n\t\t| {\n\t\t\t\ttype: 'useSite'\n\t\t\t\tfactory: UnconstrainedLeafRepresentationFactory<Props, Representation, StaticContext>\n\t\t\t\tComponentType?: ElementType<Props>\n\t\t }\n}\n\nexport { Leaf }\n"],"names":[],"mappings":";;;;;;;;AAOA,MAAM,KAKJ;AAAA,EASM,YACN,SACA,eACC;AAXc;AAYX,QAAA,OAAO,YAAY,YAAY;AAClC,WAAK,gBAAgB;AAAA,QACpB,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAAA,IACD,OACM;AACN,WAAK,gBAAgB;AAAA,QACpB,MAAM;AAAA,QACN,mBAAmB;AAAA,MAAA;AAAA,IAErB;AAAA,EACD;AACD;;"}