bobe 0.0.47 → 0.0.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bobe.cjs.js +191 -78
- package/dist/bobe.cjs.js.map +1 -1
- package/dist/bobe.compiler.cjs.js +199 -100
- package/dist/bobe.compiler.cjs.js.map +1 -1
- package/dist/bobe.compiler.esm.js +197 -97
- package/dist/bobe.compiler.esm.js.map +1 -1
- package/dist/bobe.esm.js +189 -75
- package/dist/bobe.esm.js.map +1 -1
- package/dist/index.d.ts +51 -22
- package/dist/index.umd.js +191 -78
- package/dist/index.umd.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Queue } from 'bobe-shared';
|
|
2
|
-
import
|
|
3
|
-
|
|
2
|
+
import * as aoye from 'aoye';
|
|
3
|
+
import { Store, Keys, Effect, effect as effect$1, Scope, Signal, Computed, SignalNode, ValueDiff, CustomEffectOpt } from 'aoye';
|
|
4
|
+
export { Store } from 'aoye';
|
|
4
5
|
|
|
5
6
|
declare class Interpreter {
|
|
6
7
|
private tokenizer;
|
|
@@ -26,7 +27,7 @@ declare class Interpreter {
|
|
|
26
27
|
/**
|
|
27
28
|
* 声明部分:
|
|
28
29
|
* 包含首行定义和(可选的)多行属性扩展
|
|
29
|
-
* <declaration> ::= <tagName=token> <
|
|
30
|
+
* <declaration> ::= <tagName=token> <headerLineAndExtensions>
|
|
30
31
|
* */
|
|
31
32
|
declaration(ctx: ProgramCtx): any;
|
|
32
33
|
createContextNode(): ContextNode;
|
|
@@ -48,22 +49,25 @@ declare class Interpreter {
|
|
|
48
49
|
* */
|
|
49
50
|
onePropParsed(data: Store, node: any, key: string, value: any, valueIsMapKey: boolean, isFn: boolean, hookI?: number): void;
|
|
50
51
|
oneRealPropParsed: Interpreter['onePropParsed'];
|
|
51
|
-
componentOrFragmentDeclaration(ComponentOrRender:
|
|
52
|
+
componentOrFragmentDeclaration(ComponentOrRender: UI | typeof Store | InlineFragment, ctx: ProgramCtx): ComponentNode$1;
|
|
52
53
|
getFn(data: any, expression: string | number): any;
|
|
53
54
|
getAssignFn(data: any, expression: string | number): any;
|
|
54
55
|
condDeclaration(ctx: ProgramCtx): IfNode;
|
|
55
56
|
removeLogicNode(node: LogicNode): void;
|
|
56
57
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
58
|
+
* 首行属性 + 可选的 pipe 扩展行
|
|
59
|
+
* <headerLineAndExtensions> ::= <attributeList> NEWLINE (PIPE <attributeList> NEWLINE)*
|
|
59
60
|
*/
|
|
60
|
-
|
|
61
|
+
headerLineAndExtensions(_node: any): void;
|
|
61
62
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
63
|
+
* 1. 快照
|
|
64
|
+
* 2. 跳过 行内模板片段
|
|
65
|
+
* 3. 准备
|
|
66
|
+
* 1. tokenizer
|
|
67
|
+
* 2. 快照
|
|
68
|
+
* 3. 使用 CtxProvider 中 数据作为 data
|
|
65
69
|
*/
|
|
66
|
-
|
|
70
|
+
inlineFragment(_node: any, snapshot: Partial<Tokenizer>, data: any, key?: string): void;
|
|
67
71
|
/**
|
|
68
72
|
* 属性列表:
|
|
69
73
|
* 可以是空的,或者包含多个属性
|
|
@@ -74,7 +78,7 @@ declare class Interpreter {
|
|
|
74
78
|
* 1. 普通节点 执行 setProps 🪝
|
|
75
79
|
* 2. 组件节点 收集映射关系,或 产生 computed
|
|
76
80
|
*/
|
|
77
|
-
attributeList(_node: any):
|
|
81
|
+
attributeList(_node: any, data: any): string;
|
|
78
82
|
config(opt: TerpConf): void;
|
|
79
83
|
createNode(name: string): {
|
|
80
84
|
name: string;
|
|
@@ -92,6 +96,16 @@ declare class Interpreter {
|
|
|
92
96
|
remove(node: any, parent?: any, prev?: any): void;
|
|
93
97
|
defaultRemove(node: any, parent: any, prevSibling: any): void;
|
|
94
98
|
setProp(node: any, key: string, value: any, hookI?: number): void | undefined | (() => void);
|
|
99
|
+
Effect: typeof Effect;
|
|
100
|
+
effect: typeof effect$1;
|
|
101
|
+
}
|
|
102
|
+
declare class InlineFragment {
|
|
103
|
+
snapshot: Partial<Tokenizer>;
|
|
104
|
+
data: any;
|
|
105
|
+
key: string;
|
|
106
|
+
tokenizer: Tokenizer;
|
|
107
|
+
[Keys.ProxyFreeObject]: boolean;
|
|
108
|
+
constructor(snapshot: Partial<Tokenizer>, data: any, key: string, tokenizer: Tokenizer);
|
|
95
109
|
}
|
|
96
110
|
|
|
97
111
|
interface StackNode<T> {
|
|
@@ -179,7 +193,9 @@ type HookProps = {
|
|
|
179
193
|
/** 父节点 */
|
|
180
194
|
parentNode?: any;
|
|
181
195
|
};
|
|
182
|
-
type TerpConf = Partial<Pick<Interpreter, 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'
|
|
196
|
+
type TerpConf = Partial<Pick<Interpreter, 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'>> & {
|
|
197
|
+
noopEffect?: boolean;
|
|
198
|
+
};
|
|
183
199
|
type CustomRenderConf = Pick<TerpConf, 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'>;
|
|
184
200
|
type Hook = (props: HookProps) => any;
|
|
185
201
|
type HookType = 'dynamic' | 'static';
|
|
@@ -221,9 +237,9 @@ type ProgramCtx = {
|
|
|
221
237
|
before: any;
|
|
222
238
|
};
|
|
223
239
|
/** 返回值是用户自定义的节点 */
|
|
224
|
-
type
|
|
240
|
+
type UI<T = any> = {
|
|
225
241
|
/** 在哪个 Store 声明的 */
|
|
226
|
-
boundStore:
|
|
242
|
+
boundStore: T;
|
|
227
243
|
(isSub: boolean): Tokenizer;
|
|
228
244
|
};
|
|
229
245
|
type LogicNode = {
|
|
@@ -272,7 +288,12 @@ type FragmentNode$1 = LogicNode & {
|
|
|
272
288
|
};
|
|
273
289
|
type ComponentNode$1 = LogicNode & {
|
|
274
290
|
tokenizer: Tokenizer;
|
|
291
|
+
/** 模版片段快照 */
|
|
292
|
+
fragmentSnapshot?: ReturnType<Tokenizer['snapshot']>;
|
|
293
|
+
/** 渲染模版片段前的 快照,渲染完成后用于恢复 */
|
|
294
|
+
resumeSnapshot?: ReturnType<Tokenizer['snapshot']>;
|
|
275
295
|
};
|
|
296
|
+
type Dep = Signal | Computed | (() => any) | string;
|
|
276
297
|
|
|
277
298
|
declare class Tokenizer {
|
|
278
299
|
private hook;
|
|
@@ -314,19 +335,22 @@ declare class Tokenizer {
|
|
|
314
335
|
/** 当前文件路径 */
|
|
315
336
|
source: string;
|
|
316
337
|
constructor(hook: Hook, useDedentAsEof: boolean);
|
|
338
|
+
initIndentWhenUseDedentAsEof(): void;
|
|
317
339
|
private next;
|
|
318
340
|
getCurrentPos(): Position;
|
|
319
341
|
/** 构造从当前扫描起始位置到模板结尾的 SourceLocation,用于未闭合错误 */
|
|
320
342
|
private unclosedLoc;
|
|
321
343
|
private throwUnclosed;
|
|
322
|
-
resume(_snapshot: ReturnType<Tokenizer['snapshot']>): void;
|
|
323
|
-
snapshot(keys?: (keyof Tokenizer)[]): Partial<Tokenizer>;
|
|
324
|
-
skip(): string;
|
|
344
|
+
resume({ dentStack, waitingTokens, ..._snapshot }: ReturnType<Tokenizer['snapshot']>): void;
|
|
345
|
+
snapshot(keys?: (keyof Tokenizer)[], dtI?: number): Partial<Tokenizer>;
|
|
346
|
+
skip(targetDentLen?: number): string;
|
|
325
347
|
setCode(code: string): void;
|
|
326
348
|
tokenize(): void;
|
|
327
349
|
isEof(): boolean;
|
|
328
350
|
private setToken;
|
|
329
351
|
nextToken(): Token;
|
|
352
|
+
locStart(): void;
|
|
353
|
+
locEnd(): void;
|
|
330
354
|
getComment(): string;
|
|
331
355
|
/**
|
|
332
356
|
* 处理处于行末尾的 comment 例如:
|
|
@@ -356,7 +380,7 @@ declare class Tokenizer {
|
|
|
356
380
|
private dent;
|
|
357
381
|
private shorterThanBaseDentEof;
|
|
358
382
|
private identifier;
|
|
359
|
-
|
|
383
|
+
getStr(head: string, parseEscape?: boolean): string;
|
|
360
384
|
private str;
|
|
361
385
|
private number;
|
|
362
386
|
private eof;
|
|
@@ -422,7 +446,7 @@ interface Property extends BaseNode {
|
|
|
422
446
|
type PropertyValue = StaticValue | DynamicValue;
|
|
423
447
|
interface StaticValue extends BaseNode {
|
|
424
448
|
type: NodeType.StaticValue;
|
|
425
|
-
value: string | number | boolean;
|
|
449
|
+
value: string | number | boolean | TemplateNode[];
|
|
426
450
|
}
|
|
427
451
|
interface PropertyKeyNode extends BaseNode {
|
|
428
452
|
type: NodeType.PropertyKey;
|
|
@@ -497,6 +521,8 @@ declare class Compiler {
|
|
|
497
521
|
*/
|
|
498
522
|
private attributeList;
|
|
499
523
|
parseProperty(node?: Property): Property;
|
|
524
|
+
handleOnlyKeyLoc(node: Property): void;
|
|
525
|
+
handleKeyValueLoc(node: Property): void;
|
|
500
526
|
/**
|
|
501
527
|
* 根据值类型创建属性 key 节点
|
|
502
528
|
*/
|
|
@@ -509,6 +535,7 @@ declare class Compiler {
|
|
|
509
535
|
* 根据值类型创建属性值节点
|
|
510
536
|
*/
|
|
511
537
|
parsePropertyValue(node?: PropertyValue): PropertyValue;
|
|
538
|
+
parsePropertyInlineFragment(node?: PropertyValue): PropertyValue;
|
|
512
539
|
/**
|
|
513
540
|
* 根据值类型创建名称
|
|
514
541
|
*/
|
|
@@ -526,7 +553,7 @@ type ParseHooks = Partial<{
|
|
|
526
553
|
};
|
|
527
554
|
}>;
|
|
528
555
|
|
|
529
|
-
declare function bobe(fragments: TemplateStringsArray, ...values: any[]):
|
|
556
|
+
declare function bobe<T extends Record<any, any> = any>(fragments: TemplateStringsArray, ...values: any[]): UI<T>;
|
|
530
557
|
declare function customRender(option: CustomRenderConf): <T>(Ctor: typeof Store, root: any) => (ComponentNode$1 | Store)[];
|
|
531
558
|
|
|
532
559
|
type IContext = {
|
|
@@ -535,5 +562,7 @@ type IContext = {
|
|
|
535
562
|
};
|
|
536
563
|
declare const context: IContext;
|
|
537
564
|
|
|
538
|
-
|
|
565
|
+
declare const effect: (callback: (...args: ValueDiff[]) => void, depOrOpt?: Dep[] | Dep | CustomEffectOpt, opt?: CustomEffectOpt) => aoye.Effect;
|
|
566
|
+
|
|
567
|
+
export { Compiler, NodeType, ParseErrorCode, ParseSyntaxError, Tokenizer, bobe, context, customRender, effect };
|
|
539
568
|
export type { ASTNodeType, BaseNode, CommentNode, ComponentNode, ConditionalNode, DynamicValue, ElementNode, FragmentNode, IContext, InterpolationNode, LoopNode, ParseError, Program, Property, PropertyKeyNode, PropertyValue, SourceLocation, StaticValue, TemplateNode, TextNode };
|