@next-core/storyboard 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/cjs/index.js +45 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/interfaces.js +6 -0
- package/dist/cjs/interfaces.js.map +1 -0
- package/dist/cjs/parseStoryboard.js +315 -0
- package/dist/cjs/parseStoryboard.js.map +1 -0
- package/dist/cjs/traverseStoryboard.js +127 -0
- package/dist/cjs/traverseStoryboard.js.map +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interfaces.js +2 -0
- package/dist/esm/interfaces.js.map +1 -0
- package/dist/esm/parseStoryboard.js +315 -0
- package/dist/esm/parseStoryboard.js.map +1 -0
- package/dist/esm/traverseStoryboard.js +118 -0
- package/dist/esm/traverseStoryboard.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/interfaces.d.ts +144 -0
- package/dist/types/parseStoryboard.d.ts +16 -0
- package/dist/types/traverseStoryboard.d.ts +6 -0
- package/package.json +38 -0
package/README.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
var _interfaces = require("./interfaces");
|
|
8
|
+
|
|
9
|
+
Object.keys(_interfaces).forEach(function (key) {
|
|
10
|
+
if (key === "default" || key === "__esModule") return;
|
|
11
|
+
if (key in exports && exports[key] === _interfaces[key]) return;
|
|
12
|
+
Object.defineProperty(exports, key, {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _interfaces[key];
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
var _parseStoryboard = require("./parseStoryboard");
|
|
21
|
+
|
|
22
|
+
Object.keys(_parseStoryboard).forEach(function (key) {
|
|
23
|
+
if (key === "default" || key === "__esModule") return;
|
|
24
|
+
if (key in exports && exports[key] === _parseStoryboard[key]) return;
|
|
25
|
+
Object.defineProperty(exports, key, {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function () {
|
|
28
|
+
return _parseStoryboard[key];
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
var _traverseStoryboard = require("./traverseStoryboard");
|
|
34
|
+
|
|
35
|
+
Object.keys(_traverseStoryboard).forEach(function (key) {
|
|
36
|
+
if (key === "default" || key === "__esModule") return;
|
|
37
|
+
if (key in exports && exports[key] === _traverseStoryboard[key]) return;
|
|
38
|
+
Object.defineProperty(exports, key, {
|
|
39
|
+
enumerable: true,
|
|
40
|
+
get: function () {
|
|
41
|
+
return _traverseStoryboard[key];
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./interfaces\";\nexport * from \"./parseStoryboard\";\nexport * from \"./traverseStoryboard\";\n"],"mappings":";;;;;;AAAA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","names":[],"sources":["../../src/interfaces.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickEventHandler,\n BrickEventHandlerCallback,\n BrickEventsMap,\n BrickLifeCycle,\n BrickMenuConf,\n ContextConf,\n CustomTemplate,\n CustomTemplateConstructor,\n CustomTemplateState,\n MessageConf,\n ResolveConf,\n RouteConf,\n ScrollIntoViewConf,\n SlotConf,\n Storyboard,\n UseSingleBrickConf,\n} from \"@next-core/brick-types\";\n\nexport type StoryboardNode =\n | StoryboardNodeRoot\n | StoryboardNodeRoute\n | StoryboardNodeTemplate\n | StoryboardNodeBrick\n | StoryboardNodeSlot\n | StoryboardNodeContext\n | StoryboardNodeResolvable\n | StoryboardNodeMenu\n | StoryboardNodeLifeCycle\n | StoryboardNodeEvent\n | StoryboardNodeEventHandler\n | StoryboardNodeConditionalEvent\n | StoryboardNodeEventCallback\n | StoryboardNodeCondition\n | StoryboardNodeUseBrickEntry\n | StoryboardNodeUseBackendEntry;\n\nexport interface StoryboardNodeRoot {\n type: \"Root\";\n raw: Storyboard;\n routes: StoryboardNodeRoute[];\n templates: StoryboardNodeTemplate[];\n}\n\nexport interface StoryboardNodeTemplate {\n type: \"Template\";\n raw: CustomTemplate | CustomTemplateConstructor;\n bricks?: StoryboardNodeBrick[];\n context?: StoryboardNodeContext[];\n}\n\nexport interface StoryboardNodeRoute {\n type: \"Route\";\n raw: RouteConf;\n context?: StoryboardNodeContext[];\n redirect?: StoryboardNodeResolvable;\n menu?: StoryboardNodeMenu;\n providers?: StoryboardNodeBrick[];\n defineResolves?: StoryboardNodeResolvable[];\n children: StoryboardNodeRoute[] | StoryboardNodeBrick[];\n}\n\nexport type StoryboardNodeBrick =\n | StoryboardNodeNormalBrick\n | StoryboardNodeUseBrick;\n\nexport interface StoryboardNodeBrickBase {\n type: \"Brick\";\n raw: BrickConf | UseSingleBrickConf;\n isUseBrick?: boolean;\n if?: StoryboardNodeCondition;\n events?: StoryboardNodeEvent[];\n lifeCycle?: StoryboardNodeLifeCycle[];\n useBrick?: StoryboardNodeUseBrickEntry[];\n useBackend?: StoryboardNodeUseBackendEntry[];\n context?: StoryboardNodeContext[];\n children: StoryboardNodeSlot[];\n}\n\nexport interface StoryboardNodeNormalBrick extends StoryboardNodeBrickBase {\n raw: BrickConf;\n isUseBrick?: false;\n}\n\nexport interface StoryboardNodeUseBrick extends StoryboardNodeBrickBase {\n raw: UseSingleBrickConf;\n isUseBrick: true;\n}\n\nexport interface StoryboardNodeUseBrickEntry\n extends StoryboardNodeUseEntryBase {\n type: \"UseBrickEntry\";\n rawKey: \"useBrick\";\n}\n\nexport interface StoryboardNodeUseBackendEntry\n extends StoryboardNodeUseEntryBase {\n type: \"UseBackendEntry\";\n rawKey: \"useBackend\";\n}\n\nexport interface StoryboardNodeUseEntryBase {\n rawContainer: Record<string, unknown>;\n children: StoryboardNodeBrick[];\n}\n\nexport type StoryboardNodeCondition =\n | StoryboardNodeLiteralCondition\n | StoryboardNodeResolvableCondition;\n\nexport interface StoryboardNodeLiteralCondition {\n type: \"LiteralCondition\";\n}\n\nexport interface StoryboardNodeResolvableCondition {\n type: \"ResolvableCondition\";\n resolve: StoryboardNodeResolvable | undefined;\n}\n\nexport interface StoryboardNodeSlot {\n type: \"Slot\";\n raw: SlotConf;\n slot: string;\n childrenType: \"Route\" | \"Brick\";\n children: StoryboardNodeRoute[] | StoryboardNodeBrick[];\n}\n\nexport interface StoryboardNodeContext {\n type: \"Context\";\n raw: ContextConf | CustomTemplateState;\n resolve?: StoryboardNodeResolvable;\n onChange?: StoryboardNodeEventHandler[];\n}\n\nexport interface StoryboardNodeResolvable {\n type: \"Resolvable\";\n raw: ResolveConf;\n isConditional?: boolean;\n}\n\nexport type StoryboardNodeMenu =\n | StoryboardNodeFalseMenu\n | StoryboardNodeStaticMenu\n | StoryboardNodeBrickMenu\n | StoryboardNodeResolvableMenu;\n\nexport interface StoryboardNodeFalseMenu {\n type: \"FalseMenu\";\n}\n\nexport interface StoryboardNodeStaticMenu {\n type: \"StaticMenu\";\n}\n\nexport interface StoryboardNodeBrickMenu {\n type: \"BrickMenu\";\n raw: BrickMenuConf;\n brick: StoryboardNodeBrick;\n}\n\nexport interface StoryboardNodeResolvableMenu {\n type: \"ResolvableMenu\";\n resolve: StoryboardNodeResolvable;\n}\n\nexport type StoryboardNodeLifeCycle =\n | StoryboardNodeResolveLifeCycle\n | StoryboardNodeSimpleLifeCycle\n | StoryboardNodeConditionalLifeCycle\n | StoryboardNodeUnknownLifeCycle;\n\nexport interface StoryboardNodeResolveLifeCycle {\n type: \"ResolveLifeCycle\";\n rawContainer: BrickLifeCycle;\n rawKey: \"useResolves\";\n resolves: StoryboardNodeResolvable[] | undefined;\n}\n\nexport interface StoryboardNodeSimpleLifeCycle {\n type: \"SimpleLifeCycle\";\n name:\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMessageClose\"\n | \"onBeforePageLoad\"\n | \"onBeforePageLeave\"\n | \"onMediaChange\";\n rawContainer: BrickLifeCycle;\n rawKey: string;\n handlers: StoryboardNodeEventHandler[];\n}\n\nexport interface StoryboardNodeConditionalLifeCycle {\n type: \"ConditionalLifeCycle\";\n name: \"onMessage\" | \"onScrollIntoView\";\n events: StoryboardNodeConditionalEvent[] | undefined;\n}\n\nexport interface StoryboardNodeUnknownLifeCycle {\n type: \"UnknownLifeCycle\";\n}\n\nexport interface StoryboardNodeEvent {\n type: \"Event\";\n rawContainer: BrickEventsMap;\n rawKey: string;\n handlers: StoryboardNodeEventHandler[] | undefined;\n}\n\nexport interface StoryboardNodeEventHandler {\n type: \"EventHandler\";\n raw: BrickEventHandler;\n callback: StoryboardNodeEventCallback[] | undefined;\n}\n\nexport interface StoryboardNodeConditionalEvent {\n type: \"ConditionalEvent\";\n rawContainer: MessageConf | ScrollIntoViewConf;\n rawKey: \"handlers\";\n handlers: StoryboardNodeEventHandler[] | undefined;\n}\n\nexport interface StoryboardNodeEventCallback {\n type: \"EventCallback\";\n rawContainer: BrickEventHandlerCallback;\n rawKey: string;\n handlers: StoryboardNodeEventHandler[] | undefined;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.parseBrick = parseBrick;
|
|
7
|
+
exports.parseRoutes = parseRoutes;
|
|
8
|
+
exports.parseStoryboard = parseStoryboard;
|
|
9
|
+
exports.parseTemplate = parseTemplate;
|
|
10
|
+
exports.parseTemplates = parseTemplates;
|
|
11
|
+
|
|
12
|
+
/** Parse storyboard as AST. */
|
|
13
|
+
function parseStoryboard(storyboard) {
|
|
14
|
+
var _storyboard$meta;
|
|
15
|
+
|
|
16
|
+
return {
|
|
17
|
+
type: "Root",
|
|
18
|
+
raw: storyboard,
|
|
19
|
+
routes: parseRoutes(storyboard.routes),
|
|
20
|
+
templates: parseTemplates((_storyboard$meta = storyboard.meta) === null || _storyboard$meta === void 0 ? void 0 : _storyboard$meta.customTemplates)
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Parse storyboard routes as AST. */
|
|
25
|
+
function parseRoutes(routes, options) {
|
|
26
|
+
if (Array.isArray(routes)) {
|
|
27
|
+
return routes.map(route => ({
|
|
28
|
+
type: "Route",
|
|
29
|
+
raw: route,
|
|
30
|
+
...(options !== null && options !== void 0 && options.routesOnly ? null : {
|
|
31
|
+
context: parseContext(route.context),
|
|
32
|
+
redirect: parseResolvable(route.redirect),
|
|
33
|
+
menu: parseMenu(route.menu),
|
|
34
|
+
providers: parseRouteProviders(route.providers),
|
|
35
|
+
defineResolves: Array.isArray(route.defineResolves) ? route.defineResolves.map(item => parseResolvable(item)).filter(Boolean) : undefined
|
|
36
|
+
}),
|
|
37
|
+
children: route.type === "routes" ? parseRoutes(route.routes, options) : parseBricks(route.bricks, options)
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
/** Parse storyboard templates as AST. */
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
function parseTemplates(templates) {
|
|
47
|
+
if (Array.isArray(templates)) {
|
|
48
|
+
return templates.map(parseTemplate);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
/** Parse a storyboard template as AST. */
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
function parseTemplate(tpl) {
|
|
57
|
+
return {
|
|
58
|
+
type: "Template",
|
|
59
|
+
raw: tpl,
|
|
60
|
+
bricks: parseBricks(tpl.bricks),
|
|
61
|
+
context: parseContext(tpl.state)
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function parseBricks(bricks, options) {
|
|
66
|
+
if (Array.isArray(bricks)) {
|
|
67
|
+
return bricks.map(brick => parseBrick(brick, options));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
/** Parse a storyboard brick as AST. */
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
function parseBrick(brick, options) {
|
|
76
|
+
return {
|
|
77
|
+
type: "Brick",
|
|
78
|
+
raw: brick,
|
|
79
|
+
isUseBrick: options === null || options === void 0 ? void 0 : options.isUseBrick,
|
|
80
|
+
...(options !== null && options !== void 0 && options.routesOnly ? null : {
|
|
81
|
+
if: parseCondition(brick.if),
|
|
82
|
+
events: parseEvents(brick.events),
|
|
83
|
+
lifeCycle: parseLifeCycles(brick.lifeCycle),
|
|
84
|
+
...parseBrickProperties(brick.properties),
|
|
85
|
+
context: parseContext(brick.context)
|
|
86
|
+
}),
|
|
87
|
+
children: parseSlots(brick.slots, options)
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function parseCondition(condition) {
|
|
92
|
+
if (isObject(condition)) {
|
|
93
|
+
return {
|
|
94
|
+
type: "ResolvableCondition",
|
|
95
|
+
resolve: parseResolvable(condition)
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return {
|
|
100
|
+
type: "LiteralCondition"
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function parseBrickProperties(props) {
|
|
105
|
+
const useBrick = [];
|
|
106
|
+
const useBackend = [];
|
|
107
|
+
|
|
108
|
+
function walkBrickProperties(value) {
|
|
109
|
+
if (Array.isArray(value)) {
|
|
110
|
+
for (const item of value) {
|
|
111
|
+
walkBrickProperties(item);
|
|
112
|
+
}
|
|
113
|
+
} else if (isObject(value)) {
|
|
114
|
+
if (value.useBrick || value.useBackend) {
|
|
115
|
+
var _value$useBackend;
|
|
116
|
+
|
|
117
|
+
if (value.useBrick) {
|
|
118
|
+
useBrick.push({
|
|
119
|
+
type: "UseBrickEntry",
|
|
120
|
+
rawContainer: value,
|
|
121
|
+
rawKey: "useBrick",
|
|
122
|
+
children: parseBricks([].concat(value.useBrick), {
|
|
123
|
+
isUseBrick: true
|
|
124
|
+
})
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const provider = (_value$useBackend = value.useBackend) === null || _value$useBackend === void 0 ? void 0 : _value$useBackend.provider;
|
|
129
|
+
|
|
130
|
+
if (typeof provider === "string") {
|
|
131
|
+
useBackend.push({
|
|
132
|
+
type: "UseBackendEntry",
|
|
133
|
+
rawContainer: value,
|
|
134
|
+
rawKey: "useBackend",
|
|
135
|
+
children: [parseBrick({
|
|
136
|
+
brick: provider
|
|
137
|
+
})]
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
} else {
|
|
141
|
+
for (const item of Object.values(value)) {
|
|
142
|
+
walkBrickProperties(item);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
walkBrickProperties(props);
|
|
149
|
+
return {
|
|
150
|
+
useBrick,
|
|
151
|
+
useBackend
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function parseLifeCycles(lifeCycle) {
|
|
156
|
+
if (isObject(lifeCycle)) {
|
|
157
|
+
return Object.entries(lifeCycle).map(([name, conf]) => {
|
|
158
|
+
switch (name) {
|
|
159
|
+
case "useResolves":
|
|
160
|
+
return {
|
|
161
|
+
type: "ResolveLifeCycle",
|
|
162
|
+
rawContainer: lifeCycle,
|
|
163
|
+
rawKey: name,
|
|
164
|
+
resolves: Array.isArray(conf) ? conf.map(item => parseResolvable(item, true)).filter(Boolean) : undefined
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
case "onPageLoad":
|
|
168
|
+
case "onPageLeave":
|
|
169
|
+
case "onAnchorLoad":
|
|
170
|
+
case "onAnchorUnload":
|
|
171
|
+
case "onMessageClose":
|
|
172
|
+
case "onBeforePageLoad":
|
|
173
|
+
case "onBeforePageLeave":
|
|
174
|
+
case "onMediaChange":
|
|
175
|
+
return {
|
|
176
|
+
type: "SimpleLifeCycle",
|
|
177
|
+
name,
|
|
178
|
+
rawContainer: lifeCycle,
|
|
179
|
+
rawKey: name,
|
|
180
|
+
handlers: parseEventHandlers(conf)
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
case "onMessage":
|
|
184
|
+
case "onScrollIntoView":
|
|
185
|
+
return {
|
|
186
|
+
type: "ConditionalLifeCycle",
|
|
187
|
+
name,
|
|
188
|
+
events: [].concat(conf).filter(Boolean).map(item => ({
|
|
189
|
+
type: "ConditionalEvent",
|
|
190
|
+
rawContainer: item,
|
|
191
|
+
rawKey: "handlers",
|
|
192
|
+
handlers: parseEventHandlers(item.handlers)
|
|
193
|
+
}))
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
default:
|
|
197
|
+
return {
|
|
198
|
+
type: "UnknownLifeCycle"
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function parseSlots(slots, options) {
|
|
206
|
+
if (isObject(slots)) {
|
|
207
|
+
return Object.entries(slots).map(([slot, conf]) => ({
|
|
208
|
+
type: "Slot",
|
|
209
|
+
raw: conf,
|
|
210
|
+
slot,
|
|
211
|
+
childrenType: conf.type === "routes" ? "Route" : "Brick",
|
|
212
|
+
children: conf.type === "routes" ? parseRoutes(conf.routes, options) : parseBricks(conf.bricks, options)
|
|
213
|
+
}));
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return [];
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
function parseEvents(events) {
|
|
220
|
+
if (isObject(events)) {
|
|
221
|
+
return Object.entries(events).map(([eventType, handlers]) => ({
|
|
222
|
+
type: "Event",
|
|
223
|
+
rawContainer: events,
|
|
224
|
+
rawKey: eventType,
|
|
225
|
+
handlers: parseEventHandlers(handlers)
|
|
226
|
+
}));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function parseContext(contexts) {
|
|
231
|
+
if (Array.isArray(contexts)) {
|
|
232
|
+
return contexts.map(context => ({
|
|
233
|
+
type: "Context",
|
|
234
|
+
raw: context,
|
|
235
|
+
resolve: parseResolvable(context.resolve),
|
|
236
|
+
onChange: parseEventHandlers(context.onChange)
|
|
237
|
+
}));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function parseMenu(menu) {
|
|
242
|
+
if (menu === false) {
|
|
243
|
+
return {
|
|
244
|
+
type: "FalseMenu"
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (!menu) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
switch (menu.type) {
|
|
253
|
+
case "brick":
|
|
254
|
+
return {
|
|
255
|
+
type: "BrickMenu",
|
|
256
|
+
raw: menu,
|
|
257
|
+
brick: parseBrick(menu)
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
case "resolve":
|
|
261
|
+
return {
|
|
262
|
+
type: "ResolvableMenu",
|
|
263
|
+
resolve: parseResolvable(menu.resolve)
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
default:
|
|
267
|
+
return {
|
|
268
|
+
type: "StaticMenu"
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
function parseResolvable(resolve, isConditional) {
|
|
274
|
+
if (isObject(resolve)) {
|
|
275
|
+
return {
|
|
276
|
+
type: "Resolvable",
|
|
277
|
+
raw: resolve,
|
|
278
|
+
isConditional
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
function parseEventHandlers(handlers) {
|
|
284
|
+
return [].concat(handlers).filter(Boolean).map(handler => ({
|
|
285
|
+
type: "EventHandler",
|
|
286
|
+
callback: parseEventCallback(handler.callback),
|
|
287
|
+
raw: handler
|
|
288
|
+
}));
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
function parseEventCallback(callback) {
|
|
292
|
+
if (isObject(callback)) {
|
|
293
|
+
return Object.entries(callback).map(([callbackType, handlers]) => ({
|
|
294
|
+
type: "EventCallback",
|
|
295
|
+
rawContainer: callback,
|
|
296
|
+
rawKey: callbackType,
|
|
297
|
+
handlers: parseEventHandlers(handlers)
|
|
298
|
+
}));
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function parseRouteProviders(providers) {
|
|
303
|
+
if (Array.isArray(providers)) {
|
|
304
|
+
return providers.map(provider => parseBrick(typeof provider === "string" ? {
|
|
305
|
+
brick: provider
|
|
306
|
+
} : provider));
|
|
307
|
+
}
|
|
308
|
+
} // Ref https://github.com/lodash/lodash/blob/4.17.11/lodash.js#L11744
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
function isObject(value) {
|
|
312
|
+
const type = typeof value;
|
|
313
|
+
return value != null && (type == "object" || type == "function");
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=parseStoryboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseStoryboard.js","names":["parseStoryboard","storyboard","type","raw","routes","parseRoutes","templates","parseTemplates","meta","customTemplates","options","Array","isArray","map","route","routesOnly","context","parseContext","redirect","parseResolvable","menu","parseMenu","providers","parseRouteProviders","defineResolves","item","filter","Boolean","undefined","children","parseBricks","bricks","parseTemplate","tpl","state","brick","parseBrick","isUseBrick","if","parseCondition","events","parseEvents","lifeCycle","parseLifeCycles","parseBrickProperties","properties","parseSlots","slots","condition","isObject","resolve","props","useBrick","useBackend","walkBrickProperties","value","push","rawContainer","rawKey","concat","provider","Object","values","entries","name","conf","resolves","handlers","parseEventHandlers","slot","childrenType","eventType","contexts","onChange","isConditional","handler","callback","parseEventCallback","callbackType"],"sources":["../../src/parseStoryboard.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickEventHandler,\n BrickEventHandlerCallback,\n BrickEventsMap,\n BrickLifeCycle,\n ContextConf,\n CustomTemplate,\n CustomTemplateConstructor,\n CustomTemplateState,\n MenuConf,\n MessageConf,\n ProviderConf,\n ResolveConf,\n RouteConf,\n RouteConfOfBricks,\n ScrollIntoViewConf,\n SlotsConf,\n Storyboard,\n UseProviderEventHandler,\n UseSingleBrickConf,\n} from \"@next-core/brick-types\";\nimport type {\n StoryboardNodeBrick,\n StoryboardNodeCondition,\n StoryboardNodeConditionalEvent,\n StoryboardNodeContext,\n StoryboardNodeEvent,\n StoryboardNodeEventCallback,\n StoryboardNodeEventHandler,\n StoryboardNodeLifeCycle,\n StoryboardNodeMenu,\n StoryboardNodeResolvable,\n StoryboardNodeRoot,\n StoryboardNodeRoute,\n StoryboardNodeSlot,\n StoryboardNodeTemplate,\n StoryboardNodeUseBackendEntry,\n StoryboardNodeUseBrickEntry,\n} from \"./interfaces\";\n\n/** Parse storyboard as AST. */\nexport function parseStoryboard(storyboard: Storyboard): StoryboardNodeRoot {\n return {\n type: \"Root\",\n raw: storyboard,\n routes: parseRoutes(storyboard.routes),\n templates: parseTemplates(storyboard.meta?.customTemplates),\n };\n}\n\nexport interface ParseOptions {\n routesOnly?: boolean;\n isUseBrick?: boolean;\n}\n\n/** Parse storyboard routes as AST. */\nexport function parseRoutes(\n routes: RouteConf[],\n options?: ParseOptions\n): StoryboardNodeRoute[] {\n if (Array.isArray(routes)) {\n return routes.map<StoryboardNodeRoute>((route) => ({\n type: \"Route\",\n raw: route,\n ...(options?.routesOnly\n ? null\n : {\n context: parseContext(route.context),\n redirect: parseResolvable(route.redirect as ResolveConf),\n menu: parseMenu(route.menu),\n providers: parseRouteProviders(route.providers),\n defineResolves: Array.isArray(route.defineResolves)\n ? route.defineResolves\n .map((item) => parseResolvable(item))\n .filter(Boolean)\n : undefined,\n }),\n children:\n route.type === \"routes\"\n ? parseRoutes(route.routes, options)\n : parseBricks((route as RouteConfOfBricks).bricks, options),\n }));\n }\n return [];\n}\n\n/** Parse storyboard templates as AST. */\nexport function parseTemplates(\n templates: (CustomTemplate | CustomTemplateConstructor)[]\n): StoryboardNodeTemplate[] {\n if (Array.isArray(templates)) {\n return templates.map<StoryboardNodeTemplate>(parseTemplate);\n }\n return [];\n}\n\n/** Parse a storyboard template as AST. */\nexport function parseTemplate(\n tpl: CustomTemplate | CustomTemplateConstructor\n): StoryboardNodeTemplate {\n return {\n type: \"Template\",\n raw: tpl,\n bricks: parseBricks(tpl.bricks),\n context: parseContext(tpl.state),\n };\n}\n\nfunction parseBricks(\n bricks: BrickConf[] | UseSingleBrickConf[],\n options?: ParseOptions\n): StoryboardNodeBrick[] {\n if (Array.isArray(bricks)) {\n return bricks.map((brick) => parseBrick(brick, options));\n }\n return [];\n}\n\n/** Parse a storyboard brick as AST. */\nexport function parseBrick(\n brick: BrickConf | UseSingleBrickConf,\n options?: ParseOptions\n): StoryboardNodeBrick {\n return {\n type: \"Brick\",\n raw: brick,\n isUseBrick: options?.isUseBrick,\n ...(options?.routesOnly\n ? null\n : {\n if: parseCondition(brick.if),\n events: parseEvents(brick.events),\n lifeCycle: parseLifeCycles(brick.lifeCycle),\n ...parseBrickProperties(brick.properties),\n context: parseContext((brick as BrickConf).context),\n }),\n children: parseSlots(brick.slots as SlotsConf, options),\n } as StoryboardNodeBrick;\n}\n\nfunction parseCondition(condition: BrickConf[\"if\"]): StoryboardNodeCondition {\n if (isObject(condition)) {\n return {\n type: \"ResolvableCondition\",\n resolve: parseResolvable(condition),\n };\n }\n return {\n type: \"LiteralCondition\",\n };\n}\n\nfunction parseBrickProperties(props: unknown): {\n useBrick?: StoryboardNodeUseBrickEntry[];\n useBackend?: StoryboardNodeUseBackendEntry[];\n} {\n const useBrick: StoryboardNodeUseBrickEntry[] = [];\n const useBackend: StoryboardNodeUseBackendEntry[] = [];\n\n function walkBrickProperties(value: unknown): void {\n if (Array.isArray(value)) {\n for (const item of value) {\n walkBrickProperties(item);\n }\n } else if (isObject(value)) {\n if (value.useBrick || value.useBackend) {\n if (value.useBrick) {\n useBrick.push({\n type: \"UseBrickEntry\",\n rawContainer: value,\n rawKey: \"useBrick\",\n children: parseBricks(\n ([] as UseSingleBrickConf[]).concat(value.useBrick),\n {\n isUseBrick: true,\n }\n ),\n });\n }\n const provider = value.useBackend?.provider;\n if (typeof provider === \"string\") {\n useBackend.push({\n type: \"UseBackendEntry\",\n rawContainer: value,\n rawKey: \"useBackend\",\n children: [parseBrick({ brick: provider })],\n });\n }\n } else {\n for (const item of Object.values(value)) {\n walkBrickProperties(item);\n }\n }\n }\n }\n\n walkBrickProperties(props);\n\n return { useBrick, useBackend };\n}\n\nfunction parseLifeCycles(lifeCycle: BrickLifeCycle): StoryboardNodeLifeCycle[] {\n if (isObject(lifeCycle)) {\n return Object.entries(lifeCycle).map<StoryboardNodeLifeCycle>(\n ([name, conf]) => {\n switch (name) {\n case \"useResolves\":\n return {\n type: \"ResolveLifeCycle\",\n rawContainer: lifeCycle,\n rawKey: name,\n resolves: Array.isArray(conf)\n ? conf\n .map((item) => parseResolvable(item, true))\n .filter(Boolean)\n : undefined,\n };\n case \"onPageLoad\":\n case \"onPageLeave\":\n case \"onAnchorLoad\":\n case \"onAnchorUnload\":\n case \"onMessageClose\":\n case \"onBeforePageLoad\":\n case \"onBeforePageLeave\":\n case \"onMediaChange\":\n return {\n type: \"SimpleLifeCycle\",\n name,\n rawContainer: lifeCycle,\n rawKey: name,\n handlers: parseEventHandlers(conf),\n };\n case \"onMessage\":\n case \"onScrollIntoView\":\n return {\n type: \"ConditionalLifeCycle\",\n name,\n events: ([] as (MessageConf | ScrollIntoViewConf)[])\n .concat(conf)\n .filter(Boolean)\n .map<StoryboardNodeConditionalEvent>((item) => ({\n type: \"ConditionalEvent\",\n rawContainer: item,\n rawKey: \"handlers\",\n handlers: parseEventHandlers(item.handlers),\n })),\n };\n default:\n return { type: \"UnknownLifeCycle\" };\n }\n }\n );\n }\n}\n\nfunction parseSlots(\n slots: SlotsConf,\n options?: ParseOptions\n): StoryboardNodeSlot[] {\n if (isObject(slots)) {\n return Object.entries(slots).map<StoryboardNodeSlot>(([slot, conf]) => ({\n type: \"Slot\",\n raw: conf,\n slot,\n childrenType: conf.type === \"routes\" ? \"Route\" : \"Brick\",\n children:\n conf.type === \"routes\"\n ? parseRoutes(conf.routes, options)\n : parseBricks(conf.bricks, options),\n }));\n }\n return [];\n}\n\nfunction parseEvents(events: BrickEventsMap): StoryboardNodeEvent[] {\n if (isObject(events)) {\n return Object.entries(events).map<StoryboardNodeEvent>(\n ([eventType, handlers]) => ({\n type: \"Event\",\n rawContainer: events,\n rawKey: eventType,\n handlers: parseEventHandlers(handlers),\n })\n );\n }\n}\n\nfunction parseContext(\n contexts: (ContextConf | CustomTemplateState)[]\n): StoryboardNodeContext[] {\n if (Array.isArray(contexts)) {\n return contexts.map<StoryboardNodeContext>((context) => ({\n type: \"Context\",\n raw: context,\n resolve: parseResolvable(context.resolve),\n onChange: parseEventHandlers(context.onChange),\n }));\n }\n}\n\nfunction parseMenu(menu: MenuConf): StoryboardNodeMenu {\n if (menu === false) {\n return { type: \"FalseMenu\" };\n }\n if (!menu) {\n return;\n }\n switch (menu.type) {\n case \"brick\":\n return {\n type: \"BrickMenu\",\n raw: menu,\n brick: parseBrick(menu),\n };\n case \"resolve\":\n return {\n type: \"ResolvableMenu\",\n resolve: parseResolvable(menu.resolve),\n };\n default:\n return {\n type: \"StaticMenu\",\n };\n }\n}\n\nfunction parseResolvable(\n resolve: ResolveConf,\n isConditional?: boolean\n): StoryboardNodeResolvable {\n if (isObject(resolve)) {\n return {\n type: \"Resolvable\",\n raw: resolve,\n isConditional,\n };\n }\n}\n\nfunction parseEventHandlers(\n handlers: BrickEventHandler | BrickEventHandler[]\n): StoryboardNodeEventHandler[] {\n return ([] as BrickEventHandler[])\n .concat(handlers)\n .filter(Boolean)\n .map<StoryboardNodeEventHandler>((handler) => ({\n type: \"EventHandler\",\n callback: parseEventCallback(\n (handler as UseProviderEventHandler).callback\n ),\n raw: handler,\n }));\n}\n\nfunction parseEventCallback(\n callback: BrickEventHandlerCallback\n): StoryboardNodeEventCallback[] {\n if (isObject(callback)) {\n return Object.entries(callback).map<StoryboardNodeEventCallback>(\n ([callbackType, handlers]) => ({\n type: \"EventCallback\",\n rawContainer: callback as BrickEventsMap,\n rawKey: callbackType,\n handlers: parseEventHandlers(handlers),\n })\n );\n }\n}\n\nfunction parseRouteProviders(\n providers?: ProviderConf[]\n): StoryboardNodeBrick[] {\n if (Array.isArray(providers)) {\n return providers.map<StoryboardNodeBrick>((provider) =>\n parseBrick(typeof provider === \"string\" ? { brick: provider } : provider)\n );\n }\n}\n\n// Ref https://github.com/lodash/lodash/blob/4.17.11/lodash.js#L11744\nfunction isObject(value: unknown): value is Record<string, any> {\n const type = typeof value;\n return value != null && (type == \"object\" || type == \"function\");\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.traverse = traverse;
|
|
7
|
+
exports.traverseStoryboard = traverseStoryboard;
|
|
8
|
+
|
|
9
|
+
/** Traverse a storyboard AST. */
|
|
10
|
+
function traverseStoryboard(ast, callback) {
|
|
11
|
+
traverseNode(ast, callback);
|
|
12
|
+
}
|
|
13
|
+
/** Traverse any node(s) in storyboard AST. */
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
function traverse(nodeOrNodes, callback) {
|
|
17
|
+
if (Array.isArray(nodeOrNodes)) {
|
|
18
|
+
traverseNodes(nodeOrNodes, callback);
|
|
19
|
+
} else {
|
|
20
|
+
traverseNode(nodeOrNodes, callback);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function traverseNodes(nodes, callback) {
|
|
25
|
+
if (!nodes) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
for (const node of nodes) {
|
|
30
|
+
traverseNode(node, callback);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function traverseNode(node, callback) {
|
|
35
|
+
if (!node) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
callback(node);
|
|
40
|
+
|
|
41
|
+
switch (node.type) {
|
|
42
|
+
case "Root":
|
|
43
|
+
traverseNodes(node.routes, callback);
|
|
44
|
+
traverseNodes(node.templates, callback);
|
|
45
|
+
break;
|
|
46
|
+
|
|
47
|
+
case "Route":
|
|
48
|
+
traverseNodes(node.context, callback);
|
|
49
|
+
traverseNode(node.redirect, callback);
|
|
50
|
+
traverseNode(node.menu, callback);
|
|
51
|
+
traverseNodes(node.providers, callback);
|
|
52
|
+
traverseNodes(node.defineResolves, callback);
|
|
53
|
+
traverseNodes(node.children, callback);
|
|
54
|
+
break;
|
|
55
|
+
|
|
56
|
+
case "Template":
|
|
57
|
+
traverseNodes(node.bricks, callback);
|
|
58
|
+
traverseNodes(node.context, callback);
|
|
59
|
+
break;
|
|
60
|
+
|
|
61
|
+
case "Brick":
|
|
62
|
+
traverseNode(node.if, callback);
|
|
63
|
+
traverseNodes(node.events, callback);
|
|
64
|
+
traverseNodes(node.lifeCycle, callback);
|
|
65
|
+
traverseNodes(node.useBrick, callback);
|
|
66
|
+
traverseNodes(node.useBackend, callback);
|
|
67
|
+
traverseNodes(node.context, callback);
|
|
68
|
+
traverseNodes(node.children, callback);
|
|
69
|
+
break;
|
|
70
|
+
|
|
71
|
+
case "Slot":
|
|
72
|
+
case "UseBrickEntry":
|
|
73
|
+
case "UseBackendEntry":
|
|
74
|
+
traverseNodes(node.children, callback);
|
|
75
|
+
break;
|
|
76
|
+
|
|
77
|
+
case "Context":
|
|
78
|
+
traverseNode(node.resolve, callback);
|
|
79
|
+
traverseNodes(node.onChange, callback);
|
|
80
|
+
break;
|
|
81
|
+
|
|
82
|
+
case "ResolvableCondition":
|
|
83
|
+
case "ResolvableMenu":
|
|
84
|
+
traverseNode(node.resolve, callback);
|
|
85
|
+
break;
|
|
86
|
+
|
|
87
|
+
case "ResolveLifeCycle":
|
|
88
|
+
traverseNodes(node.resolves, callback);
|
|
89
|
+
break;
|
|
90
|
+
|
|
91
|
+
case "Event":
|
|
92
|
+
case "EventCallback":
|
|
93
|
+
case "SimpleLifeCycle":
|
|
94
|
+
case "ConditionalEvent":
|
|
95
|
+
traverseNodes(node.handlers, callback);
|
|
96
|
+
break;
|
|
97
|
+
|
|
98
|
+
case "EventHandler":
|
|
99
|
+
traverseNodes(node.callback, callback);
|
|
100
|
+
break;
|
|
101
|
+
|
|
102
|
+
case "ConditionalLifeCycle":
|
|
103
|
+
traverseNodes(node.events, callback);
|
|
104
|
+
break;
|
|
105
|
+
|
|
106
|
+
case "BrickMenu":
|
|
107
|
+
traverseNode(node.brick, callback);
|
|
108
|
+
break;
|
|
109
|
+
|
|
110
|
+
case "Resolvable":
|
|
111
|
+
case "FalseMenu":
|
|
112
|
+
case "StaticMenu":
|
|
113
|
+
case "UnknownLifeCycle":
|
|
114
|
+
case "LiteralCondition":
|
|
115
|
+
break;
|
|
116
|
+
|
|
117
|
+
default:
|
|
118
|
+
// istanbul ignore if
|
|
119
|
+
if (process.env.NODE_ENV === "development") {
|
|
120
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
121
|
+
// @ts-expect-error
|
|
122
|
+
throw new Error(`Unhandled storyboard node type: ${node.type}`);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=traverseStoryboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traverseStoryboard.js","names":["traverseStoryboard","ast","callback","traverseNode","traverse","nodeOrNodes","Array","isArray","traverseNodes","nodes","node","type","routes","templates","context","redirect","menu","providers","defineResolves","children","bricks","if","events","lifeCycle","useBrick","useBackend","resolve","onChange","resolves","handlers","brick","process","env","NODE_ENV","Error"],"sources":["../../src/traverseStoryboard.ts"],"sourcesContent":["import type { StoryboardNode, StoryboardNodeRoot } from \"./interfaces\";\n\nexport type TraverseCallback = (node: StoryboardNode) => void;\n\n/** Traverse a storyboard AST. */\nexport function traverseStoryboard(\n ast: StoryboardNodeRoot,\n callback: TraverseCallback\n): void {\n traverseNode(ast, callback);\n}\n\n/** Traverse any node(s) in storyboard AST. */\nexport function traverse(\n nodeOrNodes: StoryboardNode | StoryboardNode[],\n callback: TraverseCallback\n): void {\n if (Array.isArray(nodeOrNodes)) {\n traverseNodes(nodeOrNodes, callback);\n } else {\n traverseNode(nodeOrNodes, callback);\n }\n}\n\nfunction traverseNodes(\n nodes: StoryboardNode[],\n callback: TraverseCallback\n): void {\n if (!nodes) {\n return;\n }\n for (const node of nodes) {\n traverseNode(node, callback);\n }\n}\n\nfunction traverseNode(node: StoryboardNode, callback: TraverseCallback): void {\n if (!node) {\n return;\n }\n callback(node);\n switch (node.type) {\n case \"Root\":\n traverseNodes(node.routes, callback);\n traverseNodes(node.templates, callback);\n break;\n case \"Route\":\n traverseNodes(node.context, callback);\n traverseNode(node.redirect, callback);\n traverseNode(node.menu, callback);\n traverseNodes(node.providers, callback);\n traverseNodes(node.defineResolves, callback);\n traverseNodes(node.children, callback);\n break;\n case \"Template\":\n traverseNodes(node.bricks, callback);\n traverseNodes(node.context, callback);\n break;\n case \"Brick\":\n traverseNode(node.if, callback);\n traverseNodes(node.events, callback);\n traverseNodes(node.lifeCycle, callback);\n traverseNodes(node.useBrick, callback);\n traverseNodes(node.useBackend, callback);\n traverseNodes(node.context, callback);\n traverseNodes(node.children, callback);\n break;\n case \"Slot\":\n case \"UseBrickEntry\":\n case \"UseBackendEntry\":\n traverseNodes(node.children, callback);\n break;\n case \"Context\":\n traverseNode(node.resolve, callback);\n traverseNodes(node.onChange, callback);\n break;\n case \"ResolvableCondition\":\n case \"ResolvableMenu\":\n traverseNode(node.resolve, callback);\n break;\n case \"ResolveLifeCycle\":\n traverseNodes(node.resolves, callback);\n break;\n case \"Event\":\n case \"EventCallback\":\n case \"SimpleLifeCycle\":\n case \"ConditionalEvent\":\n traverseNodes(node.handlers, callback);\n break;\n case \"EventHandler\":\n traverseNodes(node.callback, callback);\n break;\n case \"ConditionalLifeCycle\":\n traverseNodes(node.events, callback);\n break;\n case \"BrickMenu\":\n traverseNode(node.brick, callback);\n break;\n case \"Resolvable\":\n case \"FalseMenu\":\n case \"StaticMenu\":\n case \"UnknownLifeCycle\":\n case \"LiteralCondition\":\n break;\n default:\n // istanbul ignore if\n if (process.env.NODE_ENV === \"development\") {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n throw new Error(`Unhandled storyboard node type: ${node.type}`);\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./interfaces\";\nexport * from \"./parseStoryboard\";\nexport * from \"./traverseStoryboard\";\n"],"mappings":"AAAA,cAAc,cAAd;AACA,cAAc,mBAAd;AACA,cAAc,sBAAd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","names":[],"sources":["../../src/interfaces.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickEventHandler,\n BrickEventHandlerCallback,\n BrickEventsMap,\n BrickLifeCycle,\n BrickMenuConf,\n ContextConf,\n CustomTemplate,\n CustomTemplateConstructor,\n CustomTemplateState,\n MessageConf,\n ResolveConf,\n RouteConf,\n ScrollIntoViewConf,\n SlotConf,\n Storyboard,\n UseSingleBrickConf,\n} from \"@next-core/brick-types\";\n\nexport type StoryboardNode =\n | StoryboardNodeRoot\n | StoryboardNodeRoute\n | StoryboardNodeTemplate\n | StoryboardNodeBrick\n | StoryboardNodeSlot\n | StoryboardNodeContext\n | StoryboardNodeResolvable\n | StoryboardNodeMenu\n | StoryboardNodeLifeCycle\n | StoryboardNodeEvent\n | StoryboardNodeEventHandler\n | StoryboardNodeConditionalEvent\n | StoryboardNodeEventCallback\n | StoryboardNodeCondition\n | StoryboardNodeUseBrickEntry\n | StoryboardNodeUseBackendEntry;\n\nexport interface StoryboardNodeRoot {\n type: \"Root\";\n raw: Storyboard;\n routes: StoryboardNodeRoute[];\n templates: StoryboardNodeTemplate[];\n}\n\nexport interface StoryboardNodeTemplate {\n type: \"Template\";\n raw: CustomTemplate | CustomTemplateConstructor;\n bricks?: StoryboardNodeBrick[];\n context?: StoryboardNodeContext[];\n}\n\nexport interface StoryboardNodeRoute {\n type: \"Route\";\n raw: RouteConf;\n context?: StoryboardNodeContext[];\n redirect?: StoryboardNodeResolvable;\n menu?: StoryboardNodeMenu;\n providers?: StoryboardNodeBrick[];\n defineResolves?: StoryboardNodeResolvable[];\n children: StoryboardNodeRoute[] | StoryboardNodeBrick[];\n}\n\nexport type StoryboardNodeBrick =\n | StoryboardNodeNormalBrick\n | StoryboardNodeUseBrick;\n\nexport interface StoryboardNodeBrickBase {\n type: \"Brick\";\n raw: BrickConf | UseSingleBrickConf;\n isUseBrick?: boolean;\n if?: StoryboardNodeCondition;\n events?: StoryboardNodeEvent[];\n lifeCycle?: StoryboardNodeLifeCycle[];\n useBrick?: StoryboardNodeUseBrickEntry[];\n useBackend?: StoryboardNodeUseBackendEntry[];\n context?: StoryboardNodeContext[];\n children: StoryboardNodeSlot[];\n}\n\nexport interface StoryboardNodeNormalBrick extends StoryboardNodeBrickBase {\n raw: BrickConf;\n isUseBrick?: false;\n}\n\nexport interface StoryboardNodeUseBrick extends StoryboardNodeBrickBase {\n raw: UseSingleBrickConf;\n isUseBrick: true;\n}\n\nexport interface StoryboardNodeUseBrickEntry\n extends StoryboardNodeUseEntryBase {\n type: \"UseBrickEntry\";\n rawKey: \"useBrick\";\n}\n\nexport interface StoryboardNodeUseBackendEntry\n extends StoryboardNodeUseEntryBase {\n type: \"UseBackendEntry\";\n rawKey: \"useBackend\";\n}\n\nexport interface StoryboardNodeUseEntryBase {\n rawContainer: Record<string, unknown>;\n children: StoryboardNodeBrick[];\n}\n\nexport type StoryboardNodeCondition =\n | StoryboardNodeLiteralCondition\n | StoryboardNodeResolvableCondition;\n\nexport interface StoryboardNodeLiteralCondition {\n type: \"LiteralCondition\";\n}\n\nexport interface StoryboardNodeResolvableCondition {\n type: \"ResolvableCondition\";\n resolve: StoryboardNodeResolvable | undefined;\n}\n\nexport interface StoryboardNodeSlot {\n type: \"Slot\";\n raw: SlotConf;\n slot: string;\n childrenType: \"Route\" | \"Brick\";\n children: StoryboardNodeRoute[] | StoryboardNodeBrick[];\n}\n\nexport interface StoryboardNodeContext {\n type: \"Context\";\n raw: ContextConf | CustomTemplateState;\n resolve?: StoryboardNodeResolvable;\n onChange?: StoryboardNodeEventHandler[];\n}\n\nexport interface StoryboardNodeResolvable {\n type: \"Resolvable\";\n raw: ResolveConf;\n isConditional?: boolean;\n}\n\nexport type StoryboardNodeMenu =\n | StoryboardNodeFalseMenu\n | StoryboardNodeStaticMenu\n | StoryboardNodeBrickMenu\n | StoryboardNodeResolvableMenu;\n\nexport interface StoryboardNodeFalseMenu {\n type: \"FalseMenu\";\n}\n\nexport interface StoryboardNodeStaticMenu {\n type: \"StaticMenu\";\n}\n\nexport interface StoryboardNodeBrickMenu {\n type: \"BrickMenu\";\n raw: BrickMenuConf;\n brick: StoryboardNodeBrick;\n}\n\nexport interface StoryboardNodeResolvableMenu {\n type: \"ResolvableMenu\";\n resolve: StoryboardNodeResolvable;\n}\n\nexport type StoryboardNodeLifeCycle =\n | StoryboardNodeResolveLifeCycle\n | StoryboardNodeSimpleLifeCycle\n | StoryboardNodeConditionalLifeCycle\n | StoryboardNodeUnknownLifeCycle;\n\nexport interface StoryboardNodeResolveLifeCycle {\n type: \"ResolveLifeCycle\";\n rawContainer: BrickLifeCycle;\n rawKey: \"useResolves\";\n resolves: StoryboardNodeResolvable[] | undefined;\n}\n\nexport interface StoryboardNodeSimpleLifeCycle {\n type: \"SimpleLifeCycle\";\n name:\n | \"onPageLoad\"\n | \"onPageLeave\"\n | \"onAnchorLoad\"\n | \"onAnchorUnload\"\n | \"onMessageClose\"\n | \"onBeforePageLoad\"\n | \"onBeforePageLeave\"\n | \"onMediaChange\";\n rawContainer: BrickLifeCycle;\n rawKey: string;\n handlers: StoryboardNodeEventHandler[];\n}\n\nexport interface StoryboardNodeConditionalLifeCycle {\n type: \"ConditionalLifeCycle\";\n name: \"onMessage\" | \"onScrollIntoView\";\n events: StoryboardNodeConditionalEvent[] | undefined;\n}\n\nexport interface StoryboardNodeUnknownLifeCycle {\n type: \"UnknownLifeCycle\";\n}\n\nexport interface StoryboardNodeEvent {\n type: \"Event\";\n rawContainer: BrickEventsMap;\n rawKey: string;\n handlers: StoryboardNodeEventHandler[] | undefined;\n}\n\nexport interface StoryboardNodeEventHandler {\n type: \"EventHandler\";\n raw: BrickEventHandler;\n callback: StoryboardNodeEventCallback[] | undefined;\n}\n\nexport interface StoryboardNodeConditionalEvent {\n type: \"ConditionalEvent\";\n rawContainer: MessageConf | ScrollIntoViewConf;\n rawKey: \"handlers\";\n handlers: StoryboardNodeEventHandler[] | undefined;\n}\n\nexport interface StoryboardNodeEventCallback {\n type: \"EventCallback\";\n rawContainer: BrickEventHandlerCallback;\n rawKey: string;\n handlers: StoryboardNodeEventHandler[] | undefined;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
|
+
|
|
3
|
+
/** Parse storyboard as AST. */
|
|
4
|
+
export function parseStoryboard(storyboard) {
|
|
5
|
+
var _storyboard$meta;
|
|
6
|
+
|
|
7
|
+
return {
|
|
8
|
+
type: "Root",
|
|
9
|
+
raw: storyboard,
|
|
10
|
+
routes: parseRoutes(storyboard.routes),
|
|
11
|
+
templates: parseTemplates((_storyboard$meta = storyboard.meta) === null || _storyboard$meta === void 0 ? void 0 : _storyboard$meta.customTemplates)
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Parse storyboard routes as AST. */
|
|
16
|
+
export function parseRoutes(routes, options) {
|
|
17
|
+
if (Array.isArray(routes)) {
|
|
18
|
+
return routes.map(route => _objectSpread(_objectSpread({
|
|
19
|
+
type: "Route",
|
|
20
|
+
raw: route
|
|
21
|
+
}, options !== null && options !== void 0 && options.routesOnly ? null : {
|
|
22
|
+
context: parseContext(route.context),
|
|
23
|
+
redirect: parseResolvable(route.redirect),
|
|
24
|
+
menu: parseMenu(route.menu),
|
|
25
|
+
providers: parseRouteProviders(route.providers),
|
|
26
|
+
defineResolves: Array.isArray(route.defineResolves) ? route.defineResolves.map(item => parseResolvable(item)).filter(Boolean) : undefined
|
|
27
|
+
}), {}, {
|
|
28
|
+
children: route.type === "routes" ? parseRoutes(route.routes, options) : parseBricks(route.bricks, options)
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
/** Parse storyboard templates as AST. */
|
|
35
|
+
|
|
36
|
+
export function parseTemplates(templates) {
|
|
37
|
+
if (Array.isArray(templates)) {
|
|
38
|
+
return templates.map(parseTemplate);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
/** Parse a storyboard template as AST. */
|
|
44
|
+
|
|
45
|
+
export function parseTemplate(tpl) {
|
|
46
|
+
return {
|
|
47
|
+
type: "Template",
|
|
48
|
+
raw: tpl,
|
|
49
|
+
bricks: parseBricks(tpl.bricks),
|
|
50
|
+
context: parseContext(tpl.state)
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function parseBricks(bricks, options) {
|
|
55
|
+
if (Array.isArray(bricks)) {
|
|
56
|
+
return bricks.map(brick => parseBrick(brick, options));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return [];
|
|
60
|
+
}
|
|
61
|
+
/** Parse a storyboard brick as AST. */
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
export function parseBrick(brick, options) {
|
|
65
|
+
return _objectSpread(_objectSpread({
|
|
66
|
+
type: "Brick",
|
|
67
|
+
raw: brick,
|
|
68
|
+
isUseBrick: options === null || options === void 0 ? void 0 : options.isUseBrick
|
|
69
|
+
}, options !== null && options !== void 0 && options.routesOnly ? null : _objectSpread(_objectSpread({
|
|
70
|
+
if: parseCondition(brick.if),
|
|
71
|
+
events: parseEvents(brick.events),
|
|
72
|
+
lifeCycle: parseLifeCycles(brick.lifeCycle)
|
|
73
|
+
}, parseBrickProperties(brick.properties)), {}, {
|
|
74
|
+
context: parseContext(brick.context)
|
|
75
|
+
})), {}, {
|
|
76
|
+
children: parseSlots(brick.slots, options)
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function parseCondition(condition) {
|
|
81
|
+
if (isObject(condition)) {
|
|
82
|
+
return {
|
|
83
|
+
type: "ResolvableCondition",
|
|
84
|
+
resolve: parseResolvable(condition)
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
type: "LiteralCondition"
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function parseBrickProperties(props) {
|
|
94
|
+
var useBrick = [];
|
|
95
|
+
var useBackend = [];
|
|
96
|
+
|
|
97
|
+
function walkBrickProperties(value) {
|
|
98
|
+
if (Array.isArray(value)) {
|
|
99
|
+
for (var item of value) {
|
|
100
|
+
walkBrickProperties(item);
|
|
101
|
+
}
|
|
102
|
+
} else if (isObject(value)) {
|
|
103
|
+
if (value.useBrick || value.useBackend) {
|
|
104
|
+
var _value$useBackend;
|
|
105
|
+
|
|
106
|
+
if (value.useBrick) {
|
|
107
|
+
useBrick.push({
|
|
108
|
+
type: "UseBrickEntry",
|
|
109
|
+
rawContainer: value,
|
|
110
|
+
rawKey: "useBrick",
|
|
111
|
+
children: parseBricks([].concat(value.useBrick), {
|
|
112
|
+
isUseBrick: true
|
|
113
|
+
})
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
var provider = (_value$useBackend = value.useBackend) === null || _value$useBackend === void 0 ? void 0 : _value$useBackend.provider;
|
|
118
|
+
|
|
119
|
+
if (typeof provider === "string") {
|
|
120
|
+
useBackend.push({
|
|
121
|
+
type: "UseBackendEntry",
|
|
122
|
+
rawContainer: value,
|
|
123
|
+
rawKey: "useBackend",
|
|
124
|
+
children: [parseBrick({
|
|
125
|
+
brick: provider
|
|
126
|
+
})]
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
} else {
|
|
130
|
+
for (var _item of Object.values(value)) {
|
|
131
|
+
walkBrickProperties(_item);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
walkBrickProperties(props);
|
|
138
|
+
return {
|
|
139
|
+
useBrick,
|
|
140
|
+
useBackend
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function parseLifeCycles(lifeCycle) {
|
|
145
|
+
if (isObject(lifeCycle)) {
|
|
146
|
+
return Object.entries(lifeCycle).map(_ref => {
|
|
147
|
+
var [name, conf] = _ref;
|
|
148
|
+
|
|
149
|
+
switch (name) {
|
|
150
|
+
case "useResolves":
|
|
151
|
+
return {
|
|
152
|
+
type: "ResolveLifeCycle",
|
|
153
|
+
rawContainer: lifeCycle,
|
|
154
|
+
rawKey: name,
|
|
155
|
+
resolves: Array.isArray(conf) ? conf.map(item => parseResolvable(item, true)).filter(Boolean) : undefined
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
case "onPageLoad":
|
|
159
|
+
case "onPageLeave":
|
|
160
|
+
case "onAnchorLoad":
|
|
161
|
+
case "onAnchorUnload":
|
|
162
|
+
case "onMessageClose":
|
|
163
|
+
case "onBeforePageLoad":
|
|
164
|
+
case "onBeforePageLeave":
|
|
165
|
+
case "onMediaChange":
|
|
166
|
+
return {
|
|
167
|
+
type: "SimpleLifeCycle",
|
|
168
|
+
name,
|
|
169
|
+
rawContainer: lifeCycle,
|
|
170
|
+
rawKey: name,
|
|
171
|
+
handlers: parseEventHandlers(conf)
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
case "onMessage":
|
|
175
|
+
case "onScrollIntoView":
|
|
176
|
+
return {
|
|
177
|
+
type: "ConditionalLifeCycle",
|
|
178
|
+
name,
|
|
179
|
+
events: [].concat(conf).filter(Boolean).map(item => ({
|
|
180
|
+
type: "ConditionalEvent",
|
|
181
|
+
rawContainer: item,
|
|
182
|
+
rawKey: "handlers",
|
|
183
|
+
handlers: parseEventHandlers(item.handlers)
|
|
184
|
+
}))
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
default:
|
|
188
|
+
return {
|
|
189
|
+
type: "UnknownLifeCycle"
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function parseSlots(slots, options) {
|
|
197
|
+
if (isObject(slots)) {
|
|
198
|
+
return Object.entries(slots).map(_ref2 => {
|
|
199
|
+
var [slot, conf] = _ref2;
|
|
200
|
+
return {
|
|
201
|
+
type: "Slot",
|
|
202
|
+
raw: conf,
|
|
203
|
+
slot,
|
|
204
|
+
childrenType: conf.type === "routes" ? "Route" : "Brick",
|
|
205
|
+
children: conf.type === "routes" ? parseRoutes(conf.routes, options) : parseBricks(conf.bricks, options)
|
|
206
|
+
};
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return [];
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
function parseEvents(events) {
|
|
214
|
+
if (isObject(events)) {
|
|
215
|
+
return Object.entries(events).map(_ref3 => {
|
|
216
|
+
var [eventType, handlers] = _ref3;
|
|
217
|
+
return {
|
|
218
|
+
type: "Event",
|
|
219
|
+
rawContainer: events,
|
|
220
|
+
rawKey: eventType,
|
|
221
|
+
handlers: parseEventHandlers(handlers)
|
|
222
|
+
};
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function parseContext(contexts) {
|
|
228
|
+
if (Array.isArray(contexts)) {
|
|
229
|
+
return contexts.map(context => ({
|
|
230
|
+
type: "Context",
|
|
231
|
+
raw: context,
|
|
232
|
+
resolve: parseResolvable(context.resolve),
|
|
233
|
+
onChange: parseEventHandlers(context.onChange)
|
|
234
|
+
}));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
function parseMenu(menu) {
|
|
239
|
+
if (menu === false) {
|
|
240
|
+
return {
|
|
241
|
+
type: "FalseMenu"
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (!menu) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
switch (menu.type) {
|
|
250
|
+
case "brick":
|
|
251
|
+
return {
|
|
252
|
+
type: "BrickMenu",
|
|
253
|
+
raw: menu,
|
|
254
|
+
brick: parseBrick(menu)
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
case "resolve":
|
|
258
|
+
return {
|
|
259
|
+
type: "ResolvableMenu",
|
|
260
|
+
resolve: parseResolvable(menu.resolve)
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
default:
|
|
264
|
+
return {
|
|
265
|
+
type: "StaticMenu"
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function parseResolvable(resolve, isConditional) {
|
|
271
|
+
if (isObject(resolve)) {
|
|
272
|
+
return {
|
|
273
|
+
type: "Resolvable",
|
|
274
|
+
raw: resolve,
|
|
275
|
+
isConditional
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
function parseEventHandlers(handlers) {
|
|
281
|
+
return [].concat(handlers).filter(Boolean).map(handler => ({
|
|
282
|
+
type: "EventHandler",
|
|
283
|
+
callback: parseEventCallback(handler.callback),
|
|
284
|
+
raw: handler
|
|
285
|
+
}));
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
function parseEventCallback(callback) {
|
|
289
|
+
if (isObject(callback)) {
|
|
290
|
+
return Object.entries(callback).map(_ref4 => {
|
|
291
|
+
var [callbackType, handlers] = _ref4;
|
|
292
|
+
return {
|
|
293
|
+
type: "EventCallback",
|
|
294
|
+
rawContainer: callback,
|
|
295
|
+
rawKey: callbackType,
|
|
296
|
+
handlers: parseEventHandlers(handlers)
|
|
297
|
+
};
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function parseRouteProviders(providers) {
|
|
303
|
+
if (Array.isArray(providers)) {
|
|
304
|
+
return providers.map(provider => parseBrick(typeof provider === "string" ? {
|
|
305
|
+
brick: provider
|
|
306
|
+
} : provider));
|
|
307
|
+
}
|
|
308
|
+
} // Ref https://github.com/lodash/lodash/blob/4.17.11/lodash.js#L11744
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
function isObject(value) {
|
|
312
|
+
var type = typeof value;
|
|
313
|
+
return value != null && (type == "object" || type == "function");
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=parseStoryboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseStoryboard.js","names":["parseStoryboard","storyboard","type","raw","routes","parseRoutes","templates","parseTemplates","meta","customTemplates","options","Array","isArray","map","route","routesOnly","context","parseContext","redirect","parseResolvable","menu","parseMenu","providers","parseRouteProviders","defineResolves","item","filter","Boolean","undefined","children","parseBricks","bricks","parseTemplate","tpl","state","brick","parseBrick","isUseBrick","if","parseCondition","events","parseEvents","lifeCycle","parseLifeCycles","parseBrickProperties","properties","parseSlots","slots","condition","isObject","resolve","props","useBrick","useBackend","walkBrickProperties","value","push","rawContainer","rawKey","concat","provider","Object","values","entries","name","conf","resolves","handlers","parseEventHandlers","slot","childrenType","eventType","contexts","onChange","isConditional","handler","callback","parseEventCallback","callbackType"],"sources":["../../src/parseStoryboard.ts"],"sourcesContent":["import type {\n BrickConf,\n BrickEventHandler,\n BrickEventHandlerCallback,\n BrickEventsMap,\n BrickLifeCycle,\n ContextConf,\n CustomTemplate,\n CustomTemplateConstructor,\n CustomTemplateState,\n MenuConf,\n MessageConf,\n ProviderConf,\n ResolveConf,\n RouteConf,\n RouteConfOfBricks,\n ScrollIntoViewConf,\n SlotsConf,\n Storyboard,\n UseProviderEventHandler,\n UseSingleBrickConf,\n} from \"@next-core/brick-types\";\nimport type {\n StoryboardNodeBrick,\n StoryboardNodeCondition,\n StoryboardNodeConditionalEvent,\n StoryboardNodeContext,\n StoryboardNodeEvent,\n StoryboardNodeEventCallback,\n StoryboardNodeEventHandler,\n StoryboardNodeLifeCycle,\n StoryboardNodeMenu,\n StoryboardNodeResolvable,\n StoryboardNodeRoot,\n StoryboardNodeRoute,\n StoryboardNodeSlot,\n StoryboardNodeTemplate,\n StoryboardNodeUseBackendEntry,\n StoryboardNodeUseBrickEntry,\n} from \"./interfaces\";\n\n/** Parse storyboard as AST. */\nexport function parseStoryboard(storyboard: Storyboard): StoryboardNodeRoot {\n return {\n type: \"Root\",\n raw: storyboard,\n routes: parseRoutes(storyboard.routes),\n templates: parseTemplates(storyboard.meta?.customTemplates),\n };\n}\n\nexport interface ParseOptions {\n routesOnly?: boolean;\n isUseBrick?: boolean;\n}\n\n/** Parse storyboard routes as AST. */\nexport function parseRoutes(\n routes: RouteConf[],\n options?: ParseOptions\n): StoryboardNodeRoute[] {\n if (Array.isArray(routes)) {\n return routes.map<StoryboardNodeRoute>((route) => ({\n type: \"Route\",\n raw: route,\n ...(options?.routesOnly\n ? null\n : {\n context: parseContext(route.context),\n redirect: parseResolvable(route.redirect as ResolveConf),\n menu: parseMenu(route.menu),\n providers: parseRouteProviders(route.providers),\n defineResolves: Array.isArray(route.defineResolves)\n ? route.defineResolves\n .map((item) => parseResolvable(item))\n .filter(Boolean)\n : undefined,\n }),\n children:\n route.type === \"routes\"\n ? parseRoutes(route.routes, options)\n : parseBricks((route as RouteConfOfBricks).bricks, options),\n }));\n }\n return [];\n}\n\n/** Parse storyboard templates as AST. */\nexport function parseTemplates(\n templates: (CustomTemplate | CustomTemplateConstructor)[]\n): StoryboardNodeTemplate[] {\n if (Array.isArray(templates)) {\n return templates.map<StoryboardNodeTemplate>(parseTemplate);\n }\n return [];\n}\n\n/** Parse a storyboard template as AST. */\nexport function parseTemplate(\n tpl: CustomTemplate | CustomTemplateConstructor\n): StoryboardNodeTemplate {\n return {\n type: \"Template\",\n raw: tpl,\n bricks: parseBricks(tpl.bricks),\n context: parseContext(tpl.state),\n };\n}\n\nfunction parseBricks(\n bricks: BrickConf[] | UseSingleBrickConf[],\n options?: ParseOptions\n): StoryboardNodeBrick[] {\n if (Array.isArray(bricks)) {\n return bricks.map((brick) => parseBrick(brick, options));\n }\n return [];\n}\n\n/** Parse a storyboard brick as AST. */\nexport function parseBrick(\n brick: BrickConf | UseSingleBrickConf,\n options?: ParseOptions\n): StoryboardNodeBrick {\n return {\n type: \"Brick\",\n raw: brick,\n isUseBrick: options?.isUseBrick,\n ...(options?.routesOnly\n ? null\n : {\n if: parseCondition(brick.if),\n events: parseEvents(brick.events),\n lifeCycle: parseLifeCycles(brick.lifeCycle),\n ...parseBrickProperties(brick.properties),\n context: parseContext((brick as BrickConf).context),\n }),\n children: parseSlots(brick.slots as SlotsConf, options),\n } as StoryboardNodeBrick;\n}\n\nfunction parseCondition(condition: BrickConf[\"if\"]): StoryboardNodeCondition {\n if (isObject(condition)) {\n return {\n type: \"ResolvableCondition\",\n resolve: parseResolvable(condition),\n };\n }\n return {\n type: \"LiteralCondition\",\n };\n}\n\nfunction parseBrickProperties(props: unknown): {\n useBrick?: StoryboardNodeUseBrickEntry[];\n useBackend?: StoryboardNodeUseBackendEntry[];\n} {\n const useBrick: StoryboardNodeUseBrickEntry[] = [];\n const useBackend: StoryboardNodeUseBackendEntry[] = [];\n\n function walkBrickProperties(value: unknown): void {\n if (Array.isArray(value)) {\n for (const item of value) {\n walkBrickProperties(item);\n }\n } else if (isObject(value)) {\n if (value.useBrick || value.useBackend) {\n if (value.useBrick) {\n useBrick.push({\n type: \"UseBrickEntry\",\n rawContainer: value,\n rawKey: \"useBrick\",\n children: parseBricks(\n ([] as UseSingleBrickConf[]).concat(value.useBrick),\n {\n isUseBrick: true,\n }\n ),\n });\n }\n const provider = value.useBackend?.provider;\n if (typeof provider === \"string\") {\n useBackend.push({\n type: \"UseBackendEntry\",\n rawContainer: value,\n rawKey: \"useBackend\",\n children: [parseBrick({ brick: provider })],\n });\n }\n } else {\n for (const item of Object.values(value)) {\n walkBrickProperties(item);\n }\n }\n }\n }\n\n walkBrickProperties(props);\n\n return { useBrick, useBackend };\n}\n\nfunction parseLifeCycles(lifeCycle: BrickLifeCycle): StoryboardNodeLifeCycle[] {\n if (isObject(lifeCycle)) {\n return Object.entries(lifeCycle).map<StoryboardNodeLifeCycle>(\n ([name, conf]) => {\n switch (name) {\n case \"useResolves\":\n return {\n type: \"ResolveLifeCycle\",\n rawContainer: lifeCycle,\n rawKey: name,\n resolves: Array.isArray(conf)\n ? conf\n .map((item) => parseResolvable(item, true))\n .filter(Boolean)\n : undefined,\n };\n case \"onPageLoad\":\n case \"onPageLeave\":\n case \"onAnchorLoad\":\n case \"onAnchorUnload\":\n case \"onMessageClose\":\n case \"onBeforePageLoad\":\n case \"onBeforePageLeave\":\n case \"onMediaChange\":\n return {\n type: \"SimpleLifeCycle\",\n name,\n rawContainer: lifeCycle,\n rawKey: name,\n handlers: parseEventHandlers(conf),\n };\n case \"onMessage\":\n case \"onScrollIntoView\":\n return {\n type: \"ConditionalLifeCycle\",\n name,\n events: ([] as (MessageConf | ScrollIntoViewConf)[])\n .concat(conf)\n .filter(Boolean)\n .map<StoryboardNodeConditionalEvent>((item) => ({\n type: \"ConditionalEvent\",\n rawContainer: item,\n rawKey: \"handlers\",\n handlers: parseEventHandlers(item.handlers),\n })),\n };\n default:\n return { type: \"UnknownLifeCycle\" };\n }\n }\n );\n }\n}\n\nfunction parseSlots(\n slots: SlotsConf,\n options?: ParseOptions\n): StoryboardNodeSlot[] {\n if (isObject(slots)) {\n return Object.entries(slots).map<StoryboardNodeSlot>(([slot, conf]) => ({\n type: \"Slot\",\n raw: conf,\n slot,\n childrenType: conf.type === \"routes\" ? \"Route\" : \"Brick\",\n children:\n conf.type === \"routes\"\n ? parseRoutes(conf.routes, options)\n : parseBricks(conf.bricks, options),\n }));\n }\n return [];\n}\n\nfunction parseEvents(events: BrickEventsMap): StoryboardNodeEvent[] {\n if (isObject(events)) {\n return Object.entries(events).map<StoryboardNodeEvent>(\n ([eventType, handlers]) => ({\n type: \"Event\",\n rawContainer: events,\n rawKey: eventType,\n handlers: parseEventHandlers(handlers),\n })\n );\n }\n}\n\nfunction parseContext(\n contexts: (ContextConf | CustomTemplateState)[]\n): StoryboardNodeContext[] {\n if (Array.isArray(contexts)) {\n return contexts.map<StoryboardNodeContext>((context) => ({\n type: \"Context\",\n raw: context,\n resolve: parseResolvable(context.resolve),\n onChange: parseEventHandlers(context.onChange),\n }));\n }\n}\n\nfunction parseMenu(menu: MenuConf): StoryboardNodeMenu {\n if (menu === false) {\n return { type: \"FalseMenu\" };\n }\n if (!menu) {\n return;\n }\n switch (menu.type) {\n case \"brick\":\n return {\n type: \"BrickMenu\",\n raw: menu,\n brick: parseBrick(menu),\n };\n case \"resolve\":\n return {\n type: \"ResolvableMenu\",\n resolve: parseResolvable(menu.resolve),\n };\n default:\n return {\n type: \"StaticMenu\",\n };\n }\n}\n\nfunction parseResolvable(\n resolve: ResolveConf,\n isConditional?: boolean\n): StoryboardNodeResolvable {\n if (isObject(resolve)) {\n return {\n type: \"Resolvable\",\n raw: resolve,\n isConditional,\n };\n }\n}\n\nfunction parseEventHandlers(\n handlers: BrickEventHandler | BrickEventHandler[]\n): StoryboardNodeEventHandler[] {\n return ([] as BrickEventHandler[])\n .concat(handlers)\n .filter(Boolean)\n .map<StoryboardNodeEventHandler>((handler) => ({\n type: \"EventHandler\",\n callback: parseEventCallback(\n (handler as UseProviderEventHandler).callback\n ),\n raw: handler,\n }));\n}\n\nfunction parseEventCallback(\n callback: BrickEventHandlerCallback\n): StoryboardNodeEventCallback[] {\n if (isObject(callback)) {\n return Object.entries(callback).map<StoryboardNodeEventCallback>(\n ([callbackType, handlers]) => ({\n type: \"EventCallback\",\n rawContainer: callback as BrickEventsMap,\n rawKey: callbackType,\n handlers: parseEventHandlers(handlers),\n })\n );\n }\n}\n\nfunction parseRouteProviders(\n providers?: ProviderConf[]\n): StoryboardNodeBrick[] {\n if (Array.isArray(providers)) {\n return providers.map<StoryboardNodeBrick>((provider) =>\n parseBrick(typeof provider === \"string\" ? { brick: provider } : provider)\n );\n }\n}\n\n// Ref https://github.com/lodash/lodash/blob/4.17.11/lodash.js#L11744\nfunction isObject(value: unknown): value is Record<string, any> {\n const type = typeof value;\n return value != null && (type == \"object\" || type == \"function\");\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/** Traverse a storyboard AST. */
|
|
2
|
+
export function traverseStoryboard(ast, callback) {
|
|
3
|
+
traverseNode(ast, callback);
|
|
4
|
+
}
|
|
5
|
+
/** Traverse any node(s) in storyboard AST. */
|
|
6
|
+
|
|
7
|
+
export function traverse(nodeOrNodes, callback) {
|
|
8
|
+
if (Array.isArray(nodeOrNodes)) {
|
|
9
|
+
traverseNodes(nodeOrNodes, callback);
|
|
10
|
+
} else {
|
|
11
|
+
traverseNode(nodeOrNodes, callback);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function traverseNodes(nodes, callback) {
|
|
16
|
+
if (!nodes) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
for (var _node of nodes) {
|
|
21
|
+
traverseNode(_node, callback);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function traverseNode(node, callback) {
|
|
26
|
+
if (!node) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
callback(node);
|
|
31
|
+
|
|
32
|
+
switch (node.type) {
|
|
33
|
+
case "Root":
|
|
34
|
+
traverseNodes(node.routes, callback);
|
|
35
|
+
traverseNodes(node.templates, callback);
|
|
36
|
+
break;
|
|
37
|
+
|
|
38
|
+
case "Route":
|
|
39
|
+
traverseNodes(node.context, callback);
|
|
40
|
+
traverseNode(node.redirect, callback);
|
|
41
|
+
traverseNode(node.menu, callback);
|
|
42
|
+
traverseNodes(node.providers, callback);
|
|
43
|
+
traverseNodes(node.defineResolves, callback);
|
|
44
|
+
traverseNodes(node.children, callback);
|
|
45
|
+
break;
|
|
46
|
+
|
|
47
|
+
case "Template":
|
|
48
|
+
traverseNodes(node.bricks, callback);
|
|
49
|
+
traverseNodes(node.context, callback);
|
|
50
|
+
break;
|
|
51
|
+
|
|
52
|
+
case "Brick":
|
|
53
|
+
traverseNode(node.if, callback);
|
|
54
|
+
traverseNodes(node.events, callback);
|
|
55
|
+
traverseNodes(node.lifeCycle, callback);
|
|
56
|
+
traverseNodes(node.useBrick, callback);
|
|
57
|
+
traverseNodes(node.useBackend, callback);
|
|
58
|
+
traverseNodes(node.context, callback);
|
|
59
|
+
traverseNodes(node.children, callback);
|
|
60
|
+
break;
|
|
61
|
+
|
|
62
|
+
case "Slot":
|
|
63
|
+
case "UseBrickEntry":
|
|
64
|
+
case "UseBackendEntry":
|
|
65
|
+
traverseNodes(node.children, callback);
|
|
66
|
+
break;
|
|
67
|
+
|
|
68
|
+
case "Context":
|
|
69
|
+
traverseNode(node.resolve, callback);
|
|
70
|
+
traverseNodes(node.onChange, callback);
|
|
71
|
+
break;
|
|
72
|
+
|
|
73
|
+
case "ResolvableCondition":
|
|
74
|
+
case "ResolvableMenu":
|
|
75
|
+
traverseNode(node.resolve, callback);
|
|
76
|
+
break;
|
|
77
|
+
|
|
78
|
+
case "ResolveLifeCycle":
|
|
79
|
+
traverseNodes(node.resolves, callback);
|
|
80
|
+
break;
|
|
81
|
+
|
|
82
|
+
case "Event":
|
|
83
|
+
case "EventCallback":
|
|
84
|
+
case "SimpleLifeCycle":
|
|
85
|
+
case "ConditionalEvent":
|
|
86
|
+
traverseNodes(node.handlers, callback);
|
|
87
|
+
break;
|
|
88
|
+
|
|
89
|
+
case "EventHandler":
|
|
90
|
+
traverseNodes(node.callback, callback);
|
|
91
|
+
break;
|
|
92
|
+
|
|
93
|
+
case "ConditionalLifeCycle":
|
|
94
|
+
traverseNodes(node.events, callback);
|
|
95
|
+
break;
|
|
96
|
+
|
|
97
|
+
case "BrickMenu":
|
|
98
|
+
traverseNode(node.brick, callback);
|
|
99
|
+
break;
|
|
100
|
+
|
|
101
|
+
case "Resolvable":
|
|
102
|
+
case "FalseMenu":
|
|
103
|
+
case "StaticMenu":
|
|
104
|
+
case "UnknownLifeCycle":
|
|
105
|
+
case "LiteralCondition":
|
|
106
|
+
break;
|
|
107
|
+
|
|
108
|
+
default:
|
|
109
|
+
// istanbul ignore if
|
|
110
|
+
if (process.env.NODE_ENV === "development") {
|
|
111
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
112
|
+
// @ts-expect-error
|
|
113
|
+
throw new Error("Unhandled storyboard node type: ".concat(node.type));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=traverseStoryboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traverseStoryboard.js","names":["traverseStoryboard","ast","callback","traverseNode","traverse","nodeOrNodes","Array","isArray","traverseNodes","nodes","node","type","routes","templates","context","redirect","menu","providers","defineResolves","children","bricks","if","events","lifeCycle","useBrick","useBackend","resolve","onChange","resolves","handlers","brick","process","env","NODE_ENV","Error"],"sources":["../../src/traverseStoryboard.ts"],"sourcesContent":["import type { StoryboardNode, StoryboardNodeRoot } from \"./interfaces\";\n\nexport type TraverseCallback = (node: StoryboardNode) => void;\n\n/** Traverse a storyboard AST. */\nexport function traverseStoryboard(\n ast: StoryboardNodeRoot,\n callback: TraverseCallback\n): void {\n traverseNode(ast, callback);\n}\n\n/** Traverse any node(s) in storyboard AST. */\nexport function traverse(\n nodeOrNodes: StoryboardNode | StoryboardNode[],\n callback: TraverseCallback\n): void {\n if (Array.isArray(nodeOrNodes)) {\n traverseNodes(nodeOrNodes, callback);\n } else {\n traverseNode(nodeOrNodes, callback);\n }\n}\n\nfunction traverseNodes(\n nodes: StoryboardNode[],\n callback: TraverseCallback\n): void {\n if (!nodes) {\n return;\n }\n for (const node of nodes) {\n traverseNode(node, callback);\n }\n}\n\nfunction traverseNode(node: StoryboardNode, callback: TraverseCallback): void {\n if (!node) {\n return;\n }\n callback(node);\n switch (node.type) {\n case \"Root\":\n traverseNodes(node.routes, callback);\n traverseNodes(node.templates, callback);\n break;\n case \"Route\":\n traverseNodes(node.context, callback);\n traverseNode(node.redirect, callback);\n traverseNode(node.menu, callback);\n traverseNodes(node.providers, callback);\n traverseNodes(node.defineResolves, callback);\n traverseNodes(node.children, callback);\n break;\n case \"Template\":\n traverseNodes(node.bricks, callback);\n traverseNodes(node.context, callback);\n break;\n case \"Brick\":\n traverseNode(node.if, callback);\n traverseNodes(node.events, callback);\n traverseNodes(node.lifeCycle, callback);\n traverseNodes(node.useBrick, callback);\n traverseNodes(node.useBackend, callback);\n traverseNodes(node.context, callback);\n traverseNodes(node.children, callback);\n break;\n case \"Slot\":\n case \"UseBrickEntry\":\n case \"UseBackendEntry\":\n traverseNodes(node.children, callback);\n break;\n case \"Context\":\n traverseNode(node.resolve, callback);\n traverseNodes(node.onChange, callback);\n break;\n case \"ResolvableCondition\":\n case \"ResolvableMenu\":\n traverseNode(node.resolve, callback);\n break;\n case \"ResolveLifeCycle\":\n traverseNodes(node.resolves, callback);\n break;\n case \"Event\":\n case \"EventCallback\":\n case \"SimpleLifeCycle\":\n case \"ConditionalEvent\":\n traverseNodes(node.handlers, callback);\n break;\n case \"EventHandler\":\n traverseNodes(node.callback, callback);\n break;\n case \"ConditionalLifeCycle\":\n traverseNodes(node.events, callback);\n break;\n case \"BrickMenu\":\n traverseNode(node.brick, callback);\n break;\n case \"Resolvable\":\n case \"FalseMenu\":\n case \"StaticMenu\":\n case \"UnknownLifeCycle\":\n case \"LiteralCondition\":\n break;\n default:\n // istanbul ignore if\n if (process.env.NODE_ENV === \"development\") {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n throw new Error(`Unhandled storyboard node type: ${node.type}`);\n }\n }\n}\n"],"mappings":"AAIA;AACA,OAAO,SAASA,kBAAT,CACLC,GADK,EAELC,QAFK,EAGC;EACNC,YAAY,CAACF,GAAD,EAAMC,QAAN,CAAZ;AACD;AAED;;AACA,OAAO,SAASE,QAAT,CACLC,WADK,EAELH,QAFK,EAGC;EACN,IAAII,KAAK,CAACC,OAAN,CAAcF,WAAd,CAAJ,EAAgC;IAC9BG,aAAa,CAACH,WAAD,EAAcH,QAAd,CAAb;EACD,CAFD,MAEO;IACLC,YAAY,CAACE,WAAD,EAAcH,QAAd,CAAZ;EACD;AACF;;AAED,SAASM,aAAT,CACEC,KADF,EAEEP,QAFF,EAGQ;EACN,IAAI,CAACO,KAAL,EAAY;IACV;EACD;;EACD,KAAK,IAAMC,KAAX,IAAmBD,KAAnB,EAA0B;IACxBN,YAAY,CAACO,KAAD,EAAOR,QAAP,CAAZ;EACD;AACF;;AAED,SAASC,YAAT,CAAsBO,IAAtB,EAA4CR,QAA5C,EAA8E;EAC5E,IAAI,CAACQ,IAAL,EAAW;IACT;EACD;;EACDR,QAAQ,CAACQ,IAAD,CAAR;;EACA,QAAQA,IAAI,CAACC,IAAb;IACE,KAAK,MAAL;MACEH,aAAa,CAACE,IAAI,CAACE,MAAN,EAAcV,QAAd,CAAb;MACAM,aAAa,CAACE,IAAI,CAACG,SAAN,EAAiBX,QAAjB,CAAb;MACA;;IACF,KAAK,OAAL;MACEM,aAAa,CAACE,IAAI,CAACI,OAAN,EAAeZ,QAAf,CAAb;MACAC,YAAY,CAACO,IAAI,CAACK,QAAN,EAAgBb,QAAhB,CAAZ;MACAC,YAAY,CAACO,IAAI,CAACM,IAAN,EAAYd,QAAZ,CAAZ;MACAM,aAAa,CAACE,IAAI,CAACO,SAAN,EAAiBf,QAAjB,CAAb;MACAM,aAAa,CAACE,IAAI,CAACQ,cAAN,EAAsBhB,QAAtB,CAAb;MACAM,aAAa,CAACE,IAAI,CAACS,QAAN,EAAgBjB,QAAhB,CAAb;MACA;;IACF,KAAK,UAAL;MACEM,aAAa,CAACE,IAAI,CAACU,MAAN,EAAclB,QAAd,CAAb;MACAM,aAAa,CAACE,IAAI,CAACI,OAAN,EAAeZ,QAAf,CAAb;MACA;;IACF,KAAK,OAAL;MACEC,YAAY,CAACO,IAAI,CAACW,EAAN,EAAUnB,QAAV,CAAZ;MACAM,aAAa,CAACE,IAAI,CAACY,MAAN,EAAcpB,QAAd,CAAb;MACAM,aAAa,CAACE,IAAI,CAACa,SAAN,EAAiBrB,QAAjB,CAAb;MACAM,aAAa,CAACE,IAAI,CAACc,QAAN,EAAgBtB,QAAhB,CAAb;MACAM,aAAa,CAACE,IAAI,CAACe,UAAN,EAAkBvB,QAAlB,CAAb;MACAM,aAAa,CAACE,IAAI,CAACI,OAAN,EAAeZ,QAAf,CAAb;MACAM,aAAa,CAACE,IAAI,CAACS,QAAN,EAAgBjB,QAAhB,CAAb;MACA;;IACF,KAAK,MAAL;IACA,KAAK,eAAL;IACA,KAAK,iBAAL;MACEM,aAAa,CAACE,IAAI,CAACS,QAAN,EAAgBjB,QAAhB,CAAb;MACA;;IACF,KAAK,SAAL;MACEC,YAAY,CAACO,IAAI,CAACgB,OAAN,EAAexB,QAAf,CAAZ;MACAM,aAAa,CAACE,IAAI,CAACiB,QAAN,EAAgBzB,QAAhB,CAAb;MACA;;IACF,KAAK,qBAAL;IACA,KAAK,gBAAL;MACEC,YAAY,CAACO,IAAI,CAACgB,OAAN,EAAexB,QAAf,CAAZ;MACA;;IACF,KAAK,kBAAL;MACEM,aAAa,CAACE,IAAI,CAACkB,QAAN,EAAgB1B,QAAhB,CAAb;MACA;;IACF,KAAK,OAAL;IACA,KAAK,eAAL;IACA,KAAK,iBAAL;IACA,KAAK,kBAAL;MACEM,aAAa,CAACE,IAAI,CAACmB,QAAN,EAAgB3B,QAAhB,CAAb;MACA;;IACF,KAAK,cAAL;MACEM,aAAa,CAACE,IAAI,CAACR,QAAN,EAAgBA,QAAhB,CAAb;MACA;;IACF,KAAK,sBAAL;MACEM,aAAa,CAACE,IAAI,CAACY,MAAN,EAAcpB,QAAd,CAAb;MACA;;IACF,KAAK,WAAL;MACEC,YAAY,CAACO,IAAI,CAACoB,KAAN,EAAa5B,QAAb,CAAZ;MACA;;IACF,KAAK,YAAL;IACA,KAAK,WAAL;IACA,KAAK,YAAL;IACA,KAAK,kBAAL;IACA,KAAK,kBAAL;MACE;;IACF;MACE;MACA,IAAI6B,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,aAA7B,EAA4C;QAC1C;QACA;QACA,MAAM,IAAIC,KAAJ,2CAA6CxB,IAAI,CAACC,IAAlD,EAAN;MACD;;EArEL;AAuED"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import type { BrickConf, BrickEventHandler, BrickEventHandlerCallback, BrickEventsMap, BrickLifeCycle, BrickMenuConf, ContextConf, CustomTemplate, CustomTemplateConstructor, CustomTemplateState, MessageConf, ResolveConf, RouteConf, ScrollIntoViewConf, SlotConf, Storyboard, UseSingleBrickConf } from "@next-core/brick-types";
|
|
2
|
+
export declare type StoryboardNode = StoryboardNodeRoot | StoryboardNodeRoute | StoryboardNodeTemplate | StoryboardNodeBrick | StoryboardNodeSlot | StoryboardNodeContext | StoryboardNodeResolvable | StoryboardNodeMenu | StoryboardNodeLifeCycle | StoryboardNodeEvent | StoryboardNodeEventHandler | StoryboardNodeConditionalEvent | StoryboardNodeEventCallback | StoryboardNodeCondition | StoryboardNodeUseBrickEntry | StoryboardNodeUseBackendEntry;
|
|
3
|
+
export interface StoryboardNodeRoot {
|
|
4
|
+
type: "Root";
|
|
5
|
+
raw: Storyboard;
|
|
6
|
+
routes: StoryboardNodeRoute[];
|
|
7
|
+
templates: StoryboardNodeTemplate[];
|
|
8
|
+
}
|
|
9
|
+
export interface StoryboardNodeTemplate {
|
|
10
|
+
type: "Template";
|
|
11
|
+
raw: CustomTemplate | CustomTemplateConstructor;
|
|
12
|
+
bricks?: StoryboardNodeBrick[];
|
|
13
|
+
context?: StoryboardNodeContext[];
|
|
14
|
+
}
|
|
15
|
+
export interface StoryboardNodeRoute {
|
|
16
|
+
type: "Route";
|
|
17
|
+
raw: RouteConf;
|
|
18
|
+
context?: StoryboardNodeContext[];
|
|
19
|
+
redirect?: StoryboardNodeResolvable;
|
|
20
|
+
menu?: StoryboardNodeMenu;
|
|
21
|
+
providers?: StoryboardNodeBrick[];
|
|
22
|
+
defineResolves?: StoryboardNodeResolvable[];
|
|
23
|
+
children: StoryboardNodeRoute[] | StoryboardNodeBrick[];
|
|
24
|
+
}
|
|
25
|
+
export declare type StoryboardNodeBrick = StoryboardNodeNormalBrick | StoryboardNodeUseBrick;
|
|
26
|
+
export interface StoryboardNodeBrickBase {
|
|
27
|
+
type: "Brick";
|
|
28
|
+
raw: BrickConf | UseSingleBrickConf;
|
|
29
|
+
isUseBrick?: boolean;
|
|
30
|
+
if?: StoryboardNodeCondition;
|
|
31
|
+
events?: StoryboardNodeEvent[];
|
|
32
|
+
lifeCycle?: StoryboardNodeLifeCycle[];
|
|
33
|
+
useBrick?: StoryboardNodeUseBrickEntry[];
|
|
34
|
+
useBackend?: StoryboardNodeUseBackendEntry[];
|
|
35
|
+
context?: StoryboardNodeContext[];
|
|
36
|
+
children: StoryboardNodeSlot[];
|
|
37
|
+
}
|
|
38
|
+
export interface StoryboardNodeNormalBrick extends StoryboardNodeBrickBase {
|
|
39
|
+
raw: BrickConf;
|
|
40
|
+
isUseBrick?: false;
|
|
41
|
+
}
|
|
42
|
+
export interface StoryboardNodeUseBrick extends StoryboardNodeBrickBase {
|
|
43
|
+
raw: UseSingleBrickConf;
|
|
44
|
+
isUseBrick: true;
|
|
45
|
+
}
|
|
46
|
+
export interface StoryboardNodeUseBrickEntry extends StoryboardNodeUseEntryBase {
|
|
47
|
+
type: "UseBrickEntry";
|
|
48
|
+
rawKey: "useBrick";
|
|
49
|
+
}
|
|
50
|
+
export interface StoryboardNodeUseBackendEntry extends StoryboardNodeUseEntryBase {
|
|
51
|
+
type: "UseBackendEntry";
|
|
52
|
+
rawKey: "useBackend";
|
|
53
|
+
}
|
|
54
|
+
export interface StoryboardNodeUseEntryBase {
|
|
55
|
+
rawContainer: Record<string, unknown>;
|
|
56
|
+
children: StoryboardNodeBrick[];
|
|
57
|
+
}
|
|
58
|
+
export declare type StoryboardNodeCondition = StoryboardNodeLiteralCondition | StoryboardNodeResolvableCondition;
|
|
59
|
+
export interface StoryboardNodeLiteralCondition {
|
|
60
|
+
type: "LiteralCondition";
|
|
61
|
+
}
|
|
62
|
+
export interface StoryboardNodeResolvableCondition {
|
|
63
|
+
type: "ResolvableCondition";
|
|
64
|
+
resolve: StoryboardNodeResolvable | undefined;
|
|
65
|
+
}
|
|
66
|
+
export interface StoryboardNodeSlot {
|
|
67
|
+
type: "Slot";
|
|
68
|
+
raw: SlotConf;
|
|
69
|
+
slot: string;
|
|
70
|
+
childrenType: "Route" | "Brick";
|
|
71
|
+
children: StoryboardNodeRoute[] | StoryboardNodeBrick[];
|
|
72
|
+
}
|
|
73
|
+
export interface StoryboardNodeContext {
|
|
74
|
+
type: "Context";
|
|
75
|
+
raw: ContextConf | CustomTemplateState;
|
|
76
|
+
resolve?: StoryboardNodeResolvable;
|
|
77
|
+
onChange?: StoryboardNodeEventHandler[];
|
|
78
|
+
}
|
|
79
|
+
export interface StoryboardNodeResolvable {
|
|
80
|
+
type: "Resolvable";
|
|
81
|
+
raw: ResolveConf;
|
|
82
|
+
isConditional?: boolean;
|
|
83
|
+
}
|
|
84
|
+
export declare type StoryboardNodeMenu = StoryboardNodeFalseMenu | StoryboardNodeStaticMenu | StoryboardNodeBrickMenu | StoryboardNodeResolvableMenu;
|
|
85
|
+
export interface StoryboardNodeFalseMenu {
|
|
86
|
+
type: "FalseMenu";
|
|
87
|
+
}
|
|
88
|
+
export interface StoryboardNodeStaticMenu {
|
|
89
|
+
type: "StaticMenu";
|
|
90
|
+
}
|
|
91
|
+
export interface StoryboardNodeBrickMenu {
|
|
92
|
+
type: "BrickMenu";
|
|
93
|
+
raw: BrickMenuConf;
|
|
94
|
+
brick: StoryboardNodeBrick;
|
|
95
|
+
}
|
|
96
|
+
export interface StoryboardNodeResolvableMenu {
|
|
97
|
+
type: "ResolvableMenu";
|
|
98
|
+
resolve: StoryboardNodeResolvable;
|
|
99
|
+
}
|
|
100
|
+
export declare type StoryboardNodeLifeCycle = StoryboardNodeResolveLifeCycle | StoryboardNodeSimpleLifeCycle | StoryboardNodeConditionalLifeCycle | StoryboardNodeUnknownLifeCycle;
|
|
101
|
+
export interface StoryboardNodeResolveLifeCycle {
|
|
102
|
+
type: "ResolveLifeCycle";
|
|
103
|
+
rawContainer: BrickLifeCycle;
|
|
104
|
+
rawKey: "useResolves";
|
|
105
|
+
resolves: StoryboardNodeResolvable[] | undefined;
|
|
106
|
+
}
|
|
107
|
+
export interface StoryboardNodeSimpleLifeCycle {
|
|
108
|
+
type: "SimpleLifeCycle";
|
|
109
|
+
name: "onPageLoad" | "onPageLeave" | "onAnchorLoad" | "onAnchorUnload" | "onMessageClose" | "onBeforePageLoad" | "onBeforePageLeave" | "onMediaChange";
|
|
110
|
+
rawContainer: BrickLifeCycle;
|
|
111
|
+
rawKey: string;
|
|
112
|
+
handlers: StoryboardNodeEventHandler[];
|
|
113
|
+
}
|
|
114
|
+
export interface StoryboardNodeConditionalLifeCycle {
|
|
115
|
+
type: "ConditionalLifeCycle";
|
|
116
|
+
name: "onMessage" | "onScrollIntoView";
|
|
117
|
+
events: StoryboardNodeConditionalEvent[] | undefined;
|
|
118
|
+
}
|
|
119
|
+
export interface StoryboardNodeUnknownLifeCycle {
|
|
120
|
+
type: "UnknownLifeCycle";
|
|
121
|
+
}
|
|
122
|
+
export interface StoryboardNodeEvent {
|
|
123
|
+
type: "Event";
|
|
124
|
+
rawContainer: BrickEventsMap;
|
|
125
|
+
rawKey: string;
|
|
126
|
+
handlers: StoryboardNodeEventHandler[] | undefined;
|
|
127
|
+
}
|
|
128
|
+
export interface StoryboardNodeEventHandler {
|
|
129
|
+
type: "EventHandler";
|
|
130
|
+
raw: BrickEventHandler;
|
|
131
|
+
callback: StoryboardNodeEventCallback[] | undefined;
|
|
132
|
+
}
|
|
133
|
+
export interface StoryboardNodeConditionalEvent {
|
|
134
|
+
type: "ConditionalEvent";
|
|
135
|
+
rawContainer: MessageConf | ScrollIntoViewConf;
|
|
136
|
+
rawKey: "handlers";
|
|
137
|
+
handlers: StoryboardNodeEventHandler[] | undefined;
|
|
138
|
+
}
|
|
139
|
+
export interface StoryboardNodeEventCallback {
|
|
140
|
+
type: "EventCallback";
|
|
141
|
+
rawContainer: BrickEventHandlerCallback;
|
|
142
|
+
rawKey: string;
|
|
143
|
+
handlers: StoryboardNodeEventHandler[] | undefined;
|
|
144
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { BrickConf, CustomTemplate, CustomTemplateConstructor, RouteConf, Storyboard, UseSingleBrickConf } from "@next-core/brick-types";
|
|
2
|
+
import type { StoryboardNodeBrick, StoryboardNodeRoot, StoryboardNodeRoute, StoryboardNodeTemplate } from "./interfaces";
|
|
3
|
+
/** Parse storyboard as AST. */
|
|
4
|
+
export declare function parseStoryboard(storyboard: Storyboard): StoryboardNodeRoot;
|
|
5
|
+
export interface ParseOptions {
|
|
6
|
+
routesOnly?: boolean;
|
|
7
|
+
isUseBrick?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** Parse storyboard routes as AST. */
|
|
10
|
+
export declare function parseRoutes(routes: RouteConf[], options?: ParseOptions): StoryboardNodeRoute[];
|
|
11
|
+
/** Parse storyboard templates as AST. */
|
|
12
|
+
export declare function parseTemplates(templates: (CustomTemplate | CustomTemplateConstructor)[]): StoryboardNodeTemplate[];
|
|
13
|
+
/** Parse a storyboard template as AST. */
|
|
14
|
+
export declare function parseTemplate(tpl: CustomTemplate | CustomTemplateConstructor): StoryboardNodeTemplate;
|
|
15
|
+
/** Parse a storyboard brick as AST. */
|
|
16
|
+
export declare function parseBrick(brick: BrickConf | UseSingleBrickConf, options?: ParseOptions): StoryboardNodeBrick;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { StoryboardNode, StoryboardNodeRoot } from "./interfaces";
|
|
2
|
+
export declare type TraverseCallback = (node: StoryboardNode) => void;
|
|
3
|
+
/** Traverse a storyboard AST. */
|
|
4
|
+
export declare function traverseStoryboard(ast: StoryboardNodeRoot, callback: TraverseCallback): void;
|
|
5
|
+
/** Traverse any node(s) in storyboard AST. */
|
|
6
|
+
export declare function traverse(nodeOrNodes: StoryboardNode | StoryboardNode[], callback: TraverseCallback): void;
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@next-core/storyboard",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Parse storyboard as AST",
|
|
5
|
+
"homepage": "https://github.com/easyops-cn/next-core/tree/master/packages/storyboard",
|
|
6
|
+
"license": "GPL-3.0",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git@github.com:easyops-cn/next-core.git"
|
|
10
|
+
},
|
|
11
|
+
"main": "dist/cjs/index.js",
|
|
12
|
+
"module": "dist/esm/index.js",
|
|
13
|
+
"typings": "dist/types/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"clean": "rimraf dist",
|
|
19
|
+
"prestart": "npm run clean",
|
|
20
|
+
"start": "concurrently -k -n types,main \"npm run start:types\" \"npm run start:main\"",
|
|
21
|
+
"start:main": "cross-env NODE_ENV=development build-next-libs --watch",
|
|
22
|
+
"start:types": "tsc --watch --emitDeclarationOnly --declaration --declarationDir dist/types",
|
|
23
|
+
"prebuild": "npm run clean",
|
|
24
|
+
"build": "npm run build:types && npm run build:main",
|
|
25
|
+
"build:main": "cross-env NODE_ENV=production build-next-libs",
|
|
26
|
+
"build:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types",
|
|
27
|
+
"test": "cross-env NODE_ENV='test' jest",
|
|
28
|
+
"test:ci": "cross-env NODE_ENV='test' CI=true jest"
|
|
29
|
+
},
|
|
30
|
+
"sideEffects": false,
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@next-core/brick-types": "^2.81.6"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@next-core/build-next-libs": "^0.2.14"
|
|
36
|
+
},
|
|
37
|
+
"gitHead": "88ef2ab6c4dbeb53e96ac1edbc93030f847ccf49"
|
|
38
|
+
}
|