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/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Queue } from 'bobe-shared';
2
- import { Store, Scope, Signal, Computed, Effect, SignalNode } from 'aoye';
3
- export * from 'aoye';
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> <headerLine> <extensionLines>
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: BobeUI | typeof Store, ctx: ProgramCtx): ComponentNode$1;
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
- * <extensionLines> ::= PIPE <attributeList> NEWLINE <extensionLines>
58
- * | ε
58
+ * 首行属性 + 可选的 pipe 扩展行
59
+ * <headerLineAndExtensions> ::= <attributeList> NEWLINE (PIPE <attributeList> NEWLINE)*
59
60
  */
60
- extensionLines(_node: any): void;
61
+ headerLineAndExtensions(_node: any): void;
61
62
  /**
62
- * 首行:
63
- * 节点名称 + 属性列表 + 换行
64
- * <headerLine> ::= <attributeList> NEWLINE
63
+ * 1. 快照
64
+ * 2. 跳过 行内模板片段
65
+ * 3. 准备
66
+ * 1. tokenizer
67
+ * 2. 快照
68
+ * 3. 使用 CtxProvider 中 数据作为 data
65
69
  */
66
- headerLine(_node: any): void;
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): void;
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 BobeUI = {
240
+ type UI<T = any> = {
225
241
  /** 在哪个 Store 声明的 */
226
- boundStore: Store;
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
- private getStr;
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[]): BobeUI;
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
- export { Compiler, NodeType, ParseErrorCode, ParseSyntaxError, Tokenizer, bobe, context, customRender };
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 };