bobe 0.0.32 → 0.0.34
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 +1774 -1333
- package/dist/bobe.cjs.js.map +1 -1
- package/dist/bobe.compiler.cjs.js +2060 -0
- package/dist/bobe.compiler.cjs.js.map +1 -0
- package/dist/bobe.compiler.esm.js +2049 -0
- package/dist/bobe.compiler.esm.js.map +1 -0
- package/dist/bobe.esm.js +1772 -1334
- package/dist/bobe.esm.js.map +1 -1
- package/dist/index.d.ts +247 -83
- package/dist/index.umd.js +1777 -1336
- package/dist/index.umd.js.map +1 -1
- package/package.json +16 -3
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../src/type.ts","../src/typed.ts","../src/util.ts","../src/global.ts","../src/terp.ts","../src/tokenizer.ts","../src/index.ts"],"sourcesContent":["import { Computed, Dispose, Effect, Scope, Signal, SignalNode, Store } from 'aoye';\nimport type { Tokenizer } from './tokenizer';\nimport type { Interpreter } from './terp';\nimport { MultiTypeStack } from './typed';\n\nexport enum TokenType {\n NewLine = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n Indent = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n Dedent = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n Identifier = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n Assign = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n Pipe = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n Eof = 0b0000_0000_0000_0000_0000_0000_0100_0000,\n InsertionExp = 0b0000_0000_0000_0000_0000_0000_1000_0000,\n Semicolon = 0b0000_0000_0000_0000_0000_0001_0000_0000\n}\n\nexport enum FakeType {\n If = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n Fail = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n Else = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n For = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n Component = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n Fragment = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n ForItem = 0b0000_0000_0000_0000_0000_0000_0100_0000\n}\n\nexport const CondBit = FakeType.If | FakeType.Fail | FakeType.Else;\nexport const LogicalBit = FakeType.If | FakeType.Fail | FakeType.Else | FakeType.For | FakeType.ForItem;\nexport const CtxProviderBit =\n FakeType.If |\n FakeType.Fail |\n FakeType.Else |\n FakeType.For |\n FakeType.ForItem |\n FakeType.Component |\n FakeType.Fragment;\n\nexport const TokenizerSwitcherBit = FakeType.Component | FakeType.Fragment;\nexport type NodeSortBit = number;\n/**\n * 按不同维度分类,分类不互斥\n */\nexport enum NodeSort {\n /** 逻辑类型 1.if 2.else 3.fail 4.for 5. for item */\n Logic = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n /** 真实节点 */\n Real = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n /** 组件 */\n Component = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n /** FakeType 所有枚举都能提供 ctx,否则重新渲染时获取不到上下文 */\n CtxProvider = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n /** 节点可导致 token 切换 1. component 2. fragment */\n TokenizerSwitcher = 0b0000_0000_0000_0000_0000_0000_0001_0000\n}\n\nexport enum TerpEvt {\n AllAttrGot = 'all-attr-got',\n HandledComponentNode = 'handled-component-node'\n}\n\nexport type BaseType = string | number | boolean | undefined | null;\n\nexport const InsComputed = Symbol('insertion-computed-map-key');\nexport const IsAnchor = Symbol('is-anchor');\n\nexport type Token = {\n type: TokenType;\n typeName: string;\n value: BaseType;\n};\n\nexport type HookProps = {\n /** 通过哪个 HookId 进入的 */\n HookId: string;\n /** 第几个 hook */\n i: number;\n /** 父节点 */\n parentNode?: any;\n};\n\nexport type TerpConf = Partial<\n Pick<Interpreter, 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'>\n>;\nexport type CustomRenderConf = Pick<\n TerpConf,\n 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'\n>;\n\nexport type Hook = (props: HookProps) => any;\n\nexport type HookType = 'dynamic' | 'static';\n\nexport type ProgramCtx = {\n stack: MultiTypeStack<any>;\n prevSibling: any;\n realParent: any;\n current: any;\n before: any;\n};\n\n/** 返回值是用户自定义的节点 */\nexport type BobeUI = {\n /** 在哪个 Store 声明的 */\n boundStore: Store;\n (isSub: boolean): Tokenizer;\n};\n\nexport type StackItem = {\n /** 插入到 prev 后 */\n prev: any;\n /** 当前节点*/\n node: any;\n};\n\nexport type LogicNode = {\n data: any;\n __logicType: FakeType;\n realParent: any;\n realBefore?: any;\n realAfter?: any;\n};\n\nexport type ForNode = Omit<LogicNode, 'data'> & {\n children: ForItemNode[];\n snapshot: ReturnType<Tokenizer['snapshot']>;\n itemExp: string | ((value: any) => any);\n indexName?: string;\n getKey?: (data: any) => any;\n arr: any[];\n arrSignal: Signal<any[]>|Computed<any[]>;\n effect: Effect;\n i: number;\n owner: ComponentNode | FragmentNode;\n prevSibling: any;\n vars: string[];\n};\n\nexport type ForItemNode = LogicNode & {\n id: number;\n forNode: ForNode;\n effect: Scope;\n key?: any;\n};\n\nexport type IfNode = LogicNode & {\n condition: SignalNode;\n isFirstRender: boolean;\n snapshot: ReturnType<Tokenizer['snapshot']>;\n effect: Effect;\n preCond: IfNode | null;\n owner: ComponentNode | FragmentNode;\n};\n\nexport type FragmentNode = LogicNode & {\n tokenizer: Tokenizer;\n};\nexport type ComponentNode = LogicNode & {\n tokenizer: Tokenizer;\n};\nexport type RootNode = LogicNode & {\n};","import { NodeSort, NodeSortBit, StackItem } from './type';\n\n// 1. 定义类别枚举\ntype Type = 'A' | 'B' | 'C';\n\n// 2. 定义节点结构\ninterface StackNode<T> {\n value: T;\n types: NodeSortBit;\n // prevGlobal: StackNode<T> | null;\n // 核心:记录在该节点加入时,各个类别的上一个节点是谁\n prevByType: Partial<Record<number, StackNode<T>>>;\n}\n\nexport class MultiTypeStack<T> {\n // 记录全局栈顶\n // private top: StackNode<T> | null = null;\n\n // 记录每个类别的当前最新节点(各分类的“栈顶”)\n private typeTops: Partial<Record<number, StackNode<T>>> = {};\n\n length = 0;\n stack: StackNode<T>[] = [];\n /**\n * 入栈操作\n * @param value 数据\n * @param bits 该节点所属的类别数组\n */\n push(value: T, bits: NodeSortBit): void {\n const newNode: StackNode<T> = {\n value,\n types: bits,\n prevByType: {}\n };\n\n let bit: number;\n while (1) {\n // 从最低位取一个类别\n bit = bits & (~bits + 1);\n if (!bit) break;\n // 去掉最低位\n bits &= ~bit;\n // 按类型链接前置节点\n newNode.prevByType[bit] = this.typeTops[bit] || undefined;\n this.typeTops[bit] = newNode;\n }\n this.stack[this.length++] = newNode;\n }\n\n /**\n * 出栈操作\n */\n pop() {\n const poppedNode = this.stack[this.length - 1];\n this.stack[--this.length] = null;\n if (!poppedNode) return undefined;\n\n let { types: bits } = poppedNode;\n\n let bit: number;\n while (1) {\n // 从最低位取一个类别\n bit = bits & (~bits + 1);\n if (!bit) break;\n // 去掉最低位\n bits &= ~bit;\n // 弹出对应类别的“顶端”元素\n this.typeTops[bit] = poppedNode.prevByType[bit];\n }\n\n // 更新全局栈顶\n return [poppedNode.value, poppedNode.types] as const;\n }\n\n /**\n * 获取某个类别的当前“顶部”元素\n */\n peekByType(cat: number): T | undefined {\n return this.typeTops[cat]?.value;\n }\n\n peekType(): number | undefined {\n return this.stack.at(-1).types;\n }\n\n /**\n * 获取全局栈顶\n */\n peek(): T | undefined {\n return this.stack.at(-1).value;\n }\n\n // /**\n // * 1. 全局向前遍历 (不分类)\n // * 从栈顶开始,沿着全局链条向栈底遍历\n // */\n // forEach(callback: (value: T, types: number) => any): void {\n // let current = this.top;\n\n // while (current !== null) {\n // // 执行回调,如果返回 false 则立即停止\n // const shouldBreak = callback(current.value, current.types);\n // if (shouldBreak) break;\n\n // current = current.prevGlobal;\n // }\n // }\n\n // /**\n // * 2. 按类别向前遍历\n // * 仅遍历属于指定类别 cat 的节点\n // */\n // forEachByType(cat: number, callback: (value: T) => any): void {\n // // 从该类别的当前“顶端”节点开始\n // let current = this.typeTops[cat];\n\n // while (current) {\n // const shouldBreak = callback(current.value);\n // if (shouldBreak) break;\n\n // // 关键点:直接跳向该节点记录的“上一个同类节点”\n // // 这比遍历全局栈再筛选类别要快得多 (O(m) vs O(n))\n // current = current.prevByType[cat];\n // }\n // }\n}\n","export function macInc(arr: number[]) {\n const len = arr.length;\n /** 候选者数组的尾项在 arr 中的 index */\n let candyLast = [],\n i = 0;\n while (i < len) {\n const it = arr[i];\n if (it !== -1) {\n candyLast = [i];\n break;\n }\n i++;\n }\n // i 为第一项不为 -1 的项,如果其是最后一项,直接返回,因为此时数组只有一个元素\n if (i + 1 >= len) return candyLast;\n\n /** 反向链表 */\n const toPrev = new Int32Array(len);\n\n while (i < len) {\n const target = arr[i];\n // -1 为新增项直接跳过\n if (target === -1) continue;\n // 二分查找,找到在 candyLast 中 item 的插入位置\n // 维持 0,start 小于 target, end, len-1 大于等于 target\n let start = -1,\n end = candyLast.length;\n while (start + 1 < end) {\n const mid = (start + end) >> 1;\n if (arr[candyLast[mid]] < target) {\n start = mid;\n } else {\n end = mid;\n }\n }\n // 最终 end 替换为 target\n candyLast[end] = i;\n // 匹配 i 的前项索引\n toPrev[i] = candyLast[start];\n i++;\n }\n\n let length = candyLast.length;\n for (let j = length - 1; j > 0; j--) {\n const prev = toPrev[candyLast[j]];\n candyLast[j - 1] = prev;\n }\n return candyLast;\n}\n","export const KEY_INDEX = '__BOBE_KEY_INDEX';","import { Tokenizer } from './tokenizer';\nimport {\n Computed,\n deepSignal,\n Effect,\n effect,\n getPulling,\n Keys,\n runWithPulling,\n Scope,\n setPulling,\n shareSignal,\n Signal,\n SignalNode,\n Store,\n clean,\n toRaw\n} from 'aoye';\nimport {\n BobeUI,\n ComponentNode,\n CondBit,\n IfNode,\n LogicalBit,\n LogicNode,\n FakeType,\n NodeSort,\n ProgramCtx,\n StackItem,\n TerpConf,\n TokenType,\n TokenizerSwitcherBit,\n ForNode,\n ForItemNode,\n Token\n} from './type';\nimport { jsVarRegexp } from 'bobe-shared';\nimport { MultiTypeStack } from './typed';\nimport { macInc } from './util';\nimport { KEY_INDEX } from './global';\n\nexport class Interpreter {\n opt: TerpConf;\n constructor(private tokenizer: Tokenizer) {}\n isLogicNode(node: any) {\n return node && node.__logicType & LogicalBit;\n }\n\n ctx: ProgramCtx;\n rootComponent: ComponentNode | null = null;\n\n program(root: any, componentNode?: ComponentNode, before?: any, ctxProvider?: any) {\n // 首屏渲 app 组件需要创建对象\n this.rootComponent = componentNode;\n\n this.tokenizer.nextToken();\n const stack = new MultiTypeStack<StackItem>();\n stack.push({ node: root, prev: null }, NodeSort.Real);\n stack.push(\n { node: componentNode, prev: null },\n NodeSort.Component | NodeSort.CtxProvider | NodeSort.TokenizerSwitcher\n );\n if (ctxProvider) {\n stack.push(\n { node: ctxProvider, prev: null },\n (ctxProvider.__logicType & LogicalBit ? NodeSort.Logic : 0) | NodeSort.CtxProvider\n );\n }\n const rootLen = stack.length;\n\n const ctx = (this.ctx = {\n realParent: root,\n prevSibling: before,\n current: null,\n stack,\n before\n });\n\n const rootPulling = getPulling();\n while (1) {\n // 子 tokenizer 退出,代表子组件逻辑结束\n if (this.tokenizer.isEof()) {\n if (!ctx.prevSibling) ctx.prevSibling = before;\n this.handleInsert(root, ctx.current, ctx.prevSibling, componentNode);\n break;\n }\n\n const token = this.tokenizer.token;\n // 下沉,创建 child0\n if (token.type & TokenType.Indent) {\n this.tokenizer.nextToken(); // token = ID\n const isLogicNode = this.isLogicNode(ctx.current);\n stack.push(\n {\n node: ctx.current,\n prev: ctx.prevSibling\n },\n !ctx.current.__logicType\n ? NodeSort.Real\n : (ctx.current.__logicType & LogicalBit ? NodeSort.Logic : 0) |\n (ctx.current.__logicType & TokenizerSwitcherBit ? NodeSort.TokenizerSwitcher : 0) |\n (ctx.current.__logicType === FakeType.Component ? NodeSort.Component : 0) |\n NodeSort.CtxProvider\n );\n if (ctx.current.__logicType) {\n // 父节点是逻辑节点\n if (isLogicNode) {\n // 保证 if 子逻辑节点能被其 effect 管理\n setPulling(ctx.current.effect);\n if (ctx.current.__logicType & FakeType.ForItem) {\n ctx.prevSibling = ctx.current.realBefore;\n }\n }\n }\n // 父节点是原生节点时才修改 ctx.prevSibling\n else {\n if (ctx.current) {\n ctx.realParent = ctx.current;\n }\n ctx.prevSibling = null;\n }\n ctx.current = this.declaration(ctx);\n continue;\n }\n // Token 不论指示找 下一个同级节点,还是 Dedent, 都将当前节点插入\n if (ctx.current) {\n // root 下第一个子节点应该插入在 before 之后\n if (stack.length === rootLen && !ctx.prevSibling) {\n ctx.prevSibling = before;\n }\n this.handleInsert(ctx.realParent, ctx.current, ctx.prevSibling);\n }\n // 下一个 token 是 Dedent\n if (this.tokenizer.token.type & TokenType.Dedent) {\n this.tokenizer.nextToken(); // token = ID | DEDENT\n const [{ node: parent, prev }, sort] = stack.pop();\n // 弹出原生节点,找最近的 ctx.realParent\n if (!parent.__logicType) {\n const prevSameType = stack.peekByType(NodeSort.Real);\n ctx.realParent = prevSameType?.node || root;\n }\n // 弹出非原生节点\n else {\n // 考虑 if, for 等获取最后一个插入节点\n if (sort & NodeSort.Logic) {\n // 找最近的 if for\n const parentLogic = stack.peekByType(NodeSort.Logic)?.node;\n if (parentLogic) {\n setPulling(parentLogic.effect);\n } else {\n setPulling(rootPulling);\n }\n }\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tokenizer\n if (sort & NodeSort.TokenizerSwitcher) {\n const switcher = stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n this.tokenizer = switcher.tokenizer;\n }\n\n // 弹出 forItem\n if (parent.__logicType === FakeType.ForItem) {\n const { forNode } = parent as ForItemNode;\n const { i, arr, snapshot } = forNode;\n if (i + 1 < arr.length) {\n // 恢复后 token null, 下一个是 \\n, Indent\n this.tokenizer.resume(snapshot);\n this.tokenizer.nextToken(); // token = \\n\n this.tokenizer.nextToken(); // token = Indent\n ctx.current = forNode.children[++forNode.i];\n ctx.prevSibling = ctx.current.realBefore;\n continue;\n }\n // 正常弹出 current = for node\n ctx.prevSibling = forNode.prevSibling;\n ctx.current = forNode;\n continue;\n }\n }\n ctx.prevSibling = prev;\n ctx.current = parent;\n }\n // 下一个是 同级节点\n else {\n ctx.prevSibling = ctx.current || ctx.prevSibling;\n ctx.current = this.declaration(ctx);\n }\n }\n return componentNode;\n }\n\n insertAfterAnchor(name = 'anchor') {\n const { realParent, prevSibling, stack, before } = this.ctx;\n // 先将 after 插入\n const afterAnchor = this.createAnchor(name);\n this.ctx.prevSibling = stack.length === 2 && !prevSibling ? before : prevSibling;\n this.handleInsert(realParent, afterAnchor, prevSibling);\n return afterAnchor;\n }\n\n /** 处理\n * 是逻辑 是普通\n * 父节点 将子节点加入 directList 调用 insert 方法挨个插入子节点\n * 子节点 仅插入到父逻辑节点 将本节点插入父节点\n * 理论上父节点不能是一个 逻辑节点,遇到if 时 Terp 会重新执行 program 这种情况下,会指定 root 为真实 dom\n */\n handleInsert(parent: any, child: any, prev: any, parentComponent?: any) {\n // 父 是 逻辑节点\n if (parentComponent) {\n // parentComponent.directList.push(child);\n }\n // 子 普通节点\n if (!child.__logicType) {\n // 前置节点空 或 普通节点\n if (!prev || !prev.__logicType) {\n this.insertAfter(parent, child, prev);\n }\n // 前置节点是逻辑节点,必定有 after\n else {\n const before = prev.realAfter;\n this.insertAfter(parent, child, before);\n }\n }\n // 子 是 逻辑节点\n else {\n const childCmp: LogicNode = child;\n childCmp.realParent = parent;\n // 前置 -> 逻辑节点\n if (prev?.__logicType) {\n // forItem 应该使用 forNode 的 after\n childCmp.realBefore = prev.forNode ? prev.forNode.realAfter : prev.realAfter;\n }\n // 前置 -> 普通节点\n else {\n childCmp.realBefore = prev;\n }\n }\n }\n\n /** 考虑到同级 逻辑模块 */\n getPrevRealSibling(prevSibling: any) {\n // 正常节点则直接返回\n if (!prevSibling || !prevSibling.__logicType) {\n return prevSibling;\n }\n let point = prevSibling;\n while (point != null) {\n if (point.lastChild) {\n return point.lastChild.value;\n }\n point = point.anchor;\n }\n }\n\n /**\n * 声明部分:\n * 包含首行定义和(可选的)多行属性扩展\n * <declaration> ::= <tagName=token> <headerLine> <extensionLines>\n * */\n declaration(ctx: ProgramCtx) {\n const [hookType, value] = this.tokenizer._hook({});\n let _node: any;\n if (value === 'if' || value === 'else' || value === 'fail') {\n return this.condDeclaration(ctx);\n } else if (value === 'for') {\n return this.forDeclaration();\n } else if (hookType) {\n const data = this.getData();\n // 静态 1. Component,2. bobe 返回的 render 方法\n if (hookType === 'static') {\n // 传组件 class 或 片段\n if (typeof value === 'function') {\n _node = this.componentOrFragmentDeclaration(value, ctx);\n }\n // 其余类型不允许静态插值\n else {\n throw new SyntaxError(`declaration 不支持 ${value} 类型的静态插值`);\n }\n }\n // 动态插值\n // 一定是 js 表达式\n // 1. 返回基础值,创建文本节点 createNode('text', String(value))\n // 2. 返回 组件,创建组件节点\n // 3. 返回 片段\n // TODO: 后续考虑动态组件\n else {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n const val = data[Keys.Raw][value];\n if (typeof val === 'function') {\n _node = this.componentOrFragmentDeclaration(val, ctx);\n }\n // 字符\n else {\n const str = valueIsMapKey ? value : this.getFn(data, value);\n _node = this.createNode('text');\n this.onePropParsed(data, _node, 'text', str, valueIsMapKey, false);\n }\n }\n } else {\n _node = this.createNode(value);\n }\n this.tokenizer.nextToken(); // 跳过 node 本身,token -> id\n this.headerLine(_node);\n this.extensionLines(_node);\n // 组件用完,切换回 真实node 的方法\n if (_node.__logicType & TokenizerSwitcherBit) {\n this.onePropParsed = this.oneRealPropParsed;\n this.tokenizer = _node.tokenizer;\n }\n return _node;\n }\n\n forDeclaration() {\n const arrExp = this.tokenizer.nextToken().value as string;\n this.tokenizer.nextToken(); // 分号\n const itemToken = this.tokenizer.nextToken(); // item 表达式\n const isDestruct = itemToken.type === TokenType.InsertionExp;\n let itemExp: string | ((value: any) => any) = itemToken.value as string,\n vars: string[];\n if (isDestruct) {\n itemExp = '{' + itemExp + '}';\n vars = itemExp.match(jsVarRegexp);\n const varStr = vars.join(',');\n itemExp = new Function(itemExp, `return {${varStr}};`) as any;\n }\n let indexName: string,\n keyExp: string,\n char = this.tokenizer.peekChar();\n if (char === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') keyExp = this.tokenizer.jsExp().value as string;\n } else if (char === '\\n') {\n }\n // 下一个是 indexName\n else {\n indexName = this.tokenizer.nextToken().value as string;\n if (this.tokenizer.peekChar() === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') keyExp = this.tokenizer.jsExp().value as string;\n }\n }\n\n const owner = this.ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n const prevSibling = this.ctx.prevSibling;\n const forNode: ForNode = {\n __logicType: FakeType.For,\n snapshot: this.tokenizer.snapshot(['dentStack', 'isFirstToken']),\n realParent: this.ctx.realParent,\n prevSibling,\n realBefore: prevSibling?.realAfter || prevSibling,\n realAfter: null,\n arr: null,\n arrSignal: null,\n itemExp,\n indexName,\n getKey: null,\n children: [],\n effect: null,\n owner,\n vars,\n i: 0\n };\n if (keyExp) {\n forNode.getKey = new Function('data', `let v;with(data){v=${keyExp}};return v;`) as any;\n }\n window['for1'] = forNode;\n\n const data = this.getData();\n\n const cells = data[Keys.Meta].cells;\n const hasArrExpKey = Reflect.has(data[Keys.Raw], arrExp);\n const arrSignal = hasArrExpKey\n ? // 有 key 直接拿\n (data[arrExp], cells.get(arrExp))\n : // 无key\n new Computed(this.getFn(data, arrExp));\n forNode.arrSignal = arrSignal;\n // 由于此处 snapshot 多配置了2个属性,更新渲染时 应该忽略这个两个属性\n forNode.realAfter = this.insertAfterAnchor('for-after');\n\n // 去除 dentStack 和 isFirstToken\n const { dentStack, isFirstToken, ...snapshotForUpdate } = forNode.snapshot;\n\n let isFirstRender = true;\n forNode.effect = new Effect(() => {\n let arr: any[] = arrSignal.get();\n // 订阅 iter\n arr[Keys.Iterator];\n const prevCtx = getPulling();\n setPulling(null);\n // 使用原始数组避免 index 依赖\n forNode.arr = arr = toRaw(arr);\n const children = forNode.children;\n // 首屏渲染\n if (isFirstRender) {\n const len = arr.length;\n for (let i = len; i--; ) {\n const item = this.createForItem(forNode, i, data);\n item.realAfter = this.insertAfterAnchor('for-item-after');\n item.realBefore = this.insertAfterAnchor('for-item-before');\n item.realParent = forNode.realParent;\n children[i] = item;\n }\n const firstInsert = children[0];\n // 有子项进行计算\n if (firstInsert) {\n this.tokenizer.nextToken(); // 是 NewLine\n this.tokenizer.nextToken(); // 是 Indent\n }\n // 没有子项,跳过\n else {\n this.tokenizer.skip();\n }\n }\n // 更新渲染\n else {\n const oldLen = children.length;\n const newLen = arr.length;\n const minLen = Math.min(oldLen, newLen);\n const newChildren: ForItemNode[] = [];\n if (!forNode.getKey) {\n // 删除\n if (newLen < oldLen) {\n for (let i = oldLen - 1; i >= newLen; i--) {\n this.removeForItem(children, i);\n }\n }\n // 新增\n if (oldLen < newLen) {\n const lastAfter = children.at(-1)?.realAfter || forNode.realBefore;\n for (let i = newLen - 1; i >= oldLen; i--) {\n this.insertForItem(forNode, i, data, newChildren, lastAfter, snapshotForUpdate);\n }\n }\n for (let i = minLen; i--; ) {\n const child = children[i];\n newChildren[i] = child;\n this.reuseForItem(child, arr[i], itemExp, i, indexName);\n }\n }\n // 带 key 列表\n else {\n let s = 0,\n e1 = oldLen - 1,\n e2 = newLen - 1;\n // 掐头\n while (s <= e1 && s <= e2) {\n const child = children[s];\n const old = child.key;\n const itemData = this.getItemData(forNode, s, data);\n const key = forNode.getKey(itemData);\n if (old === key) {\n newChildren[s] = child;\n this.reuseForItem(child, arr[s], itemExp, s, indexName);\n s++;\n } else {\n break;\n }\n }\n // 去尾\n while (s <= e1 && s <= e2) {\n const child = children[e1];\n const old = child.key;\n const itemData = this.getItemData(forNode, e2, data);\n const key = forNode.getKey(itemData);\n if (old === key) {\n newChildren[e2] = child;\n this.reuseForItem(child, arr[e2], itemExp, e2, indexName);\n e1--;\n e2--;\n } else {\n break;\n }\n }\n // 纯新增\n if (s > e1) {\n if (s <= e2) {\n // s > 0 纯尾增\n // 否则 纯尾增\n const firstBefore = s > 0 ? children.at(-1)?.realAfter || forNode.realBefore : forNode.realBefore;\n for (let i = e2; i >= s; i--) {\n this.insertForItem(forNode, i, data, newChildren, firstBefore, snapshotForUpdate);\n }\n }\n }\n // 纯尾删\n else if (s > e2) {\n if (s <= e1) {\n for (let i = e1; i >= s; i--) {\n this.removeForItem(children, i);\n }\n }\n }\n // 混合\n else {\n let s1 = s,\n s2 = s;\n const mixLen = e2 - s2 + 1;\n /** key -> 旧 index */\n const key2new = new Map<any, number>();\n for (let i = s2; i <= e2; i++) {\n // TODO: 这里只求 key 可以不用响应式\n const itemData = this.getItemData(forNode, i, data);\n const key = forNode.getKey(itemData);\n key2new.set(key, i);\n }\n /*----------------- 构建 new2oldI -----------------*/\n let maxIncNewI = -1;\n let hasMove = false;\n const new2oldI = new Array<number>(mixLen).fill(-1);\n for (let i = s1; i <= e1; i++) {\n const key = children[i].key;\n const newI = key2new.get(key);\n // 不在新列表中,删除\n if (newI == null) {\n this.removeForItem(children, i);\n continue;\n }\n const child = children[i];\n // 复用\n newChildren[newI] = child;\n this.reuseForItem(child, arr[newI], itemExp, newI, indexName);\n new2oldI[newI - s2] = i;\n // 剩余的 key 是新增\n key2new.delete(key);\n // 如果 newI 比已处理的最大 newI 要小,说明索引较小的项反而靠后,即发生移动\n if (newI < maxIncNewI) {\n hasMove = true;\n } else {\n maxIncNewI = newI;\n }\n }\n /*----------------- 纯增删 -----------------*/\n if (!hasMove) {\n // 按顺序从前往后插入即可\n key2new.forEach((i, key) => {\n const before = i === 0 ? forNode.realBefore : newChildren[i - 1].realAfter;\n this.insertForItem(forNode, i, data, newChildren, before, snapshotForUpdate);\n });\n } else {\n /*----------------- 增删移 -----------------*/\n const incI = macInc(new2oldI),\n incLen = incI.length;\n /** p1 表示新数组中的索引 */\n let p1: number,\n /** p2 表示最长递增子序列的索引 */\n p2: number;\n // 从 s2 开始对比\n for (p1 = s2, p2 = 0; p1 <= e2; p1++) {\n const oldI = new2oldI[p1];\n /** 新增 */\n if (oldI === -1) {\n const before = p1 === 0 ? forNode.realBefore : newChildren[p1 - 1].realAfter;\n this.insertForItem(forNode, p1, data, newChildren, before, snapshotForUpdate);\n continue;\n }\n\n /** 锚点在 new2oldI 组中的索引 */\n const staticIdx = incI[p2] + s2;\n // 匹配到锚点,复用节点,已在构建 new2oldI 时完成\n if (p1 === staticIdx) {\n p2 <= incLen && p2++;\n continue;\n }\n\n // p1 点位需要移动, 数据复用在 new2oldI 构建时已完成,这里处理 dom 移动即可\n let before = p1 === 0 ? forNode.realBefore : newChildren[p1 - 1].realAfter;\n const child = newChildren[p1];\n\n const { realBefore, realAfter, realParent } = child;\n\n let point = realBefore,\n next: any;\n do {\n next = this.nextSib(point);\n this.insertAfter(realParent, point, before);\n // this.handleInsert(realParent, point, before);\n before = point;\n if (point === realAfter) break;\n point = next;\n } while (true);\n }\n }\n }\n }\n forNode.children = newChildren;\n }\n isFirstRender = false;\n setPulling(prevCtx);\n\n return isDestroy => {\n if (isDestroy) {\n for (let i = 0; i < forNode.children.length; i++) {\n const item = forNode.children[i];\n item.effect.dispose();\n }\n }\n };\n });\n return forNode.children[0] || forNode;\n }\n\n insertForItem(\n forNode: ForNode,\n i: number,\n parentData: any,\n newChildren: ForItemNode[],\n before: any,\n snapshotForUpdate: any\n ) {\n const item = this.createForItem(forNode, i, parentData);\n newChildren[i] = item;\n let realAfter = this.createAnchor('for-item-after');\n this.handleInsert(forNode.realParent, realAfter, before);\n\n let realBefore = this.createAnchor('for-item-before');\n this.handleInsert(forNode.realParent, realBefore, before);\n\n item.realBefore = realBefore;\n item.realAfter = realAfter;\n\n this.tokenizer = forNode.owner.tokenizer;\n /**\n * resume 后 token = null, 下个字符是 \\n\n */\n this.tokenizer.resume(snapshotForUpdate);\n // 解析到缩进小于 base 时自动 eof\n this.tokenizer.useDedentAsEof = false;\n runWithPulling(() => {\n this.program(forNode.realParent, forNode.owner, realBefore, item);\n }, item.effect);\n }\n\n removeForItem(children: ForItemNode[], i: number) {\n const child = children[i];\n this.removeLogicNode(child);\n this.remove(child.realBefore);\n this.remove(child.realAfter);\n // 释放删除项 effect\n child.effect.dispose();\n }\n\n reuseForItem(child: ForItemNode, data: any, itemExp: string | ((value: any) => any), i: number, indexName?: string) {\n if (typeof itemExp === 'string') {\n child.data[itemExp] = data;\n if (indexName) {\n child.data[indexName] = i;\n }\n } else {\n indexName = indexName || KEY_INDEX;\n child.data[indexName] = i;\n }\n }\n\n forItemId = 0;\n createForItem(forNode: ForNode, i: number, parentData: any) {\n let forItemNode: ForItemNode;\n let data: Record<any, any>;\n /**\n * 考虑到 effect 是嵌套的,这种情况每次 forNodeEffect 更新会导致上次产生的内部 setPropsEffect 被自动释放\n * 这是响应式 effect 嵌套的默认特性\n * forNodeEffect(() => {\n * 这里通过 setPulling 模拟嵌套 effect\n * setPropsEffect(() => {\n * })\n * })\n * 因此我们需要让情况变成这样,内部的 effect 交由 forItemNode.effect 接管\n * 这个 scope 是全局的,即指定了参数 parentScope = null\n * 这样外部的 effect 不再自动释放 setPropsEffect\n * 这么的目的是我们能在 diff 过程中手动控制释放 forItemNode.effect\n * globalScope(() => {\n * setPropsEffect(() => {\n * })\n * })\n *\n * 1. runWithPulling 避免 scope 被 effect 收集\n * 2. scope 保证 signal 被 scope 管理\n */\n // TODO: scope 目前认为 parentScope 就是 其下游节点,恢复 pulling 会出现问题\n const scope = new Scope(() => {});\n scope.scope = null;\n runWithPulling(() => {\n scope.get();\n }, null);\n // 考虑到生成每项数据需要依赖原始响应式数组,因此无法放在 scope 里\n // 使得 for effect 依赖原响应式数组,每一项\n data = this.getItemData(forNode, i, parentData);\n forItemNode = {\n id: this.forItemId++,\n __logicType: FakeType.ForItem,\n realParent: null,\n realBefore: null,\n realAfter: null,\n forNode,\n key: forNode.getKey?.(data),\n effect: null,\n data\n };\n forItemNode.effect = scope;\n return forItemNode;\n }\n\n getItemData(forNode: ForNode, i: number, parentData: any) {\n const { arr, itemExp, vars, arrSignal, getKey } = forNode;\n let indexName = forNode.indexName;\n let data: Record<any, any>;\n if (typeof itemExp === 'string') {\n data = deepSignal(\n indexName\n ? {\n [itemExp]: arr[i],\n [indexName]: i\n }\n : {\n [itemExp]: arr[i]\n },\n getPulling()\n );\n } else {\n indexName = indexName ?? KEY_INDEX;\n const rawData = { [indexName]: i };\n data = deepSignal(rawData, getPulling());\n const computedData = new Computed(() => itemExp(arrSignal.get()[getKey ? data[indexName] : i]));\n const cells = data[Keys.Meta].cells;\n for (let i = 0; i < vars.length; i++) {\n const name = vars[i];\n rawData[name] = undefined;\n cells.set(name, new Computed(() => computedData.get()[name]));\n }\n }\n\n Object.setPrototypeOf(data, parentData);\n return data;\n }\n\n getData() {\n const { node } = this.ctx.stack.peekByType(NodeSort.CtxProvider);\n return node.data;\n }\n\n /**\n * key 元素,组件的 key\n * value\n * 1. 静态类型值\n * 2. 插值计算 函数,可以考虑 使用 effect 或 computed 做处理\n *\n * mapKey 映射, 对应子组件的属性\n * */\n onePropParsed(\n data: Store,\n node: any,\n key: string,\n value: any,\n valueIsMapKey: boolean,\n isFn: boolean,\n hookI?: number\n ) {\n if (isFn) {\n this.setProp(node, key, value, hookI);\n } else if (typeof value === 'function') {\n new Effect(() => {\n const res = value();\n this.setProp(node, key, res, hookI);\n });\n } else if (valueIsMapKey) {\n new Effect(() => {\n const res = data[value];\n this.setProp(node, key, res, hookI);\n });\n }\n // 静态数据\n else {\n this.setProp(node, key, value, hookI);\n }\n }\n\n oneRealPropParsed: Interpreter['onePropParsed'] = this.onePropParsed.bind(this);\n\n componentOrFragmentDeclaration(ComponentOrRender: BobeUI | typeof Store, ctx: ProgramCtx) {\n // 先进行 attr 映射,或建立 signal 连接,才能开始 render\n // 必须等待 attr 解析完毕\n let Component: typeof Store, render: BobeUI, child: any;\n\n const isCC = (ComponentOrRender as any).prototype instanceof Store;\n if (isCC) {\n Component = ComponentOrRender as any;\n child = Component.new();\n } else {\n render = ComponentOrRender as BobeUI;\n const boundStore = render.boundStore;\n // 使用原型链来继承 store 的数据\n child = deepSignal({}, getPulling(), true);\n Object.setPrototypeOf(child, boundStore);\n }\n\n const node: ComponentNode = {\n __logicType: isCC ? FakeType.Component : FakeType.Fragment,\n realParent: ctx.realParent,\n realBefore: null,\n realAfter: null,\n data: child,\n tokenizer: render ? render(true) : (child['ui'] as BobeUI)(true)\n };\n this.onePropParsed = (data, _, key, value, valueIsMapKey, isFn, hookI) => {\n if (isFn) {\n child[Keys.Raw][key] = value;\n }\n // key 映射\n else if (valueIsMapKey) {\n shareSignal(data, value, child, key);\n }\n // 动态值内置 computed 处理\n else {\n const meta = child[Keys.Meta];\n const cells: Map<string, Signal> = meta.cells;\n if (typeof value === 'function') {\n const computed = new Computed(value);\n cells.set(key, computed as any);\n child[Keys.Raw][key] = undefined;\n }\n // 静态数据\n else {\n cells.set(key, { get: () => value } as Signal);\n child[Keys.Raw][key] = value;\n }\n }\n };\n node.realAfter = this.insertAfterAnchor('component-after');\n return node;\n }\n getFn(data: any, expression: string | number) {\n return new Function('data', `let v;with(data){v=${expression}};return v;`).bind(undefined, data);\n }\n // TODO: 优化代码逻辑,拆分 if elseif else\n condDeclaration(ctx: ProgramCtx) {\n const { prevSibling } = ctx;\n const keyWord = this.tokenizer.token;\n const expToken = this.tokenizer.condExp(); // keyWord => exp\n const value = expToken.value as string | number;\n const isElse = keyWord.value === 'else';\n const isIf = keyWord.value === 'if';\n const preIsCond = prevSibling?.__logicType & CondBit;\n const data = this.getData();\n // @ts-ignore\n const noCond = value === true;\n const valueIsMapKey = !noCond && Reflect.has(data[Keys.Raw], value);\n const owner = ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n const ifNode: IfNode = {\n __logicType: isElse ? FakeType.Else : isIf ? FakeType.If : FakeType.Fail,\n // 此时 token 是 exp, 下次解析 从 \\n 开始\n snapshot: this.tokenizer.snapshot(),\n realParent: null,\n realBefore: null,\n realAfter: null,\n condition: null,\n preCond: preIsCond ? prevSibling : null,\n isFirstRender: true,\n effect: null,\n owner,\n data,\n };\n let signal: SignalNode;\n\n switch (keyWord.value) {\n case 'if':\n if (valueIsMapKey) {\n // 确保 signal 已生成\n runWithPulling(() => data[value], null);\n // 拿到 signal\n const { cells } = data[Keys.Meta];\n signal = cells.get(value);\n } else {\n const fn = this.getFn(data, value);\n // 是 getter 使用 computed 计算出一个 signal\n signal = new Computed(fn);\n }\n break;\n case 'else':\n // 纯 else\n if (noCond) {\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n // else 的条件判断应该停止在第一个访问到的 if 节点\n if (point.__logicType === FakeType.If) {\n break;\n }\n point = point.preCond;\n }\n return true;\n });\n }\n // else if xxx\n else {\n const fn = valueIsMapKey ? null : this.getFn(data, value);\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n // else 的条件判断应该停止在第一个访问到的 if 节点\n if (point.__logicType === FakeType.If) {\n break;\n }\n point = point.preCond;\n }\n return valueIsMapKey ? data[value] : fn();\n });\n }\n break;\n case 'fail':\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n point = point.preCond;\n }\n return true;\n });\n break;\n default:\n break;\n }\n\n ifNode.condition = signal;\n // 不论是否执行 if 都应该插入 anchor 节点用于后续\n ifNode.realAfter = this.insertAfterAnchor(`${keyWord.value}-after`);\n\n const ef = effect(\n ({ val }) => {\n // 如果值是 true 则直接放行让下面的节点自然执行插入\n if (val) {\n if (ifNode.isFirstRender) {\n this.tokenizer.nextToken(); // token = NEWLINE\n this.tokenizer.nextToken(); // token = ID\n }\n // 更新渲染\n else {\n // 切换到对应 Switcher 的 tokenizer\n this.tokenizer = ifNode.owner.tokenizer;\n /**\n * resume 后 token = null, 下个字符是 \\n\n */\n this.tokenizer.resume(ifNode.snapshot);\n this.tokenizer.useDedentAsEof = false;\n\n // 由于首屏渲染直接放行,导致 if 子节点首屏产生的 effect 不能被管理\n // 在 effect 中创建的子组件 sub effect 能被管理\n // 当 if = false 时,不需要执行销毁子 effect 操作\n // 因为当外部 effect 重新执行时,上次尝试的 sub effect 自动销毁\n // 前提是 sub effect 是嵌套执行的\n this.program(ifNode.realParent, ifNode.owner, ifNode.realBefore, ifNode);\n }\n }\n // 删除逻辑块\n else {\n if (ifNode.isFirstRender) {\n // 此时 token 是 condition, i => \\n\n this.tokenizer.skip(); // skipStr\n }\n // 更新渲染,删除所有节点\n else {\n this.removeLogicNode(ifNode);\n }\n }\n ifNode.isFirstRender = false;\n },\n [signal]\n );\n ifNode.effect = ef;\n return ifNode;\n }\n\n removeLogicNode(node: LogicNode) {\n const { realBefore, realAfter, realParent } = node;\n let point = realBefore ? this.nextSib(realBefore) : this.firstChild(realParent);\n while (point !== realAfter) {\n const next = this.nextSib(point);\n this.remove(point, realParent, realBefore);\n point = next;\n }\n }\n /**\n * <extensionLines> ::= PIPE <attributeList> NEWLINE <extensionLines>\n * | ε\n */\n extensionLines(_node: any) {\n while (1) {\n // 终止条件,下一行不是 pipe\n if ((this.tokenizer.token.type & TokenType.Pipe) === 0) {\n return;\n }\n // 开始解析 attributeList\n this.tokenizer.nextToken(); // PIPE\n this.attributeList(_node);\n // 文件结束了,通常不会发生\n if ((this.tokenizer.token.type & TokenType.NewLine) === 0) {\n return;\n }\n // 换行\n this.tokenizer.nextToken(); // NEWLINE\n }\n }\n\n /**\n * 首行:\n * 节点名称 + 属性列表 + 换行\n * <headerLine> ::= <attributeList> NEWLINE\n */\n headerLine(_node: any) {\n this.attributeList(_node);\n this.tokenizer.nextToken(); // NEWLINE\n }\n\n /**\n * 属性列表:\n * 可以是空的,或者包含多个属性\n * <attributeList> ::= <attribute> <attributeList>\n * | ε\n *\n * <attribute> ::= <key> = <value>\n * 1. 普通节点 执行 setProps 🪝\n * 2. 组件节点 收集映射关系,或 产生 computed\n */\n attributeList(_node: any) {\n let key: string, eq: any;\n const data = this.getData();\n while ((this.tokenizer.token.type & TokenType.NewLine) === 0) {\n // 取 key\n if (key == null) {\n key = this.tokenizer.token.value as any;\n }\n // 取 =\n else if (eq == null) {\n eq = '=';\n }\n // 取 value\n else {\n const [hookType, value, hookI] = this.tokenizer._hook({});\n const rawVal = data[Keys.Raw][value];\n const isFn = typeof rawVal === 'function';\n // 动态的要做成函数\n if (hookType === 'dynamic') {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n const fn = isFn ? rawVal : valueIsMapKey ? value : this.getFn(data, value);\n this.onePropParsed(data, _node, key, fn, valueIsMapKey, isFn, hookI);\n }\n // 静态\n else if (hookType === 'static') {\n this.onePropParsed(data, _node, key, value, false, isFn, hookI);\n }\n // 基础数据字面量\n else {\n this.onePropParsed(data, _node, key, value, false, isFn, hookI);\n }\n key = null;\n eq = null;\n }\n this.tokenizer.nextToken();\n }\n }\n config(opt: TerpConf) {\n Object.assign(this, opt);\n this.opt = opt;\n }\n\n createNode(name: string) {\n return {\n name,\n props: {},\n nextSibling: null\n };\n }\n\n nextSib(node: any) {\n return node.nextSibling;\n }\n\n firstChild(node: any) {\n return node.firstChild;\n }\n\n createAnchor(name: string) {\n return {\n name,\n nextSibling: null\n };\n }\n\n insertAfter(parent: any, node: any, prev: any) {\n return this.defaultInsert(parent, node, prev);\n }\n defaultInsert(parent: any, node: any, prev: any) {\n if (prev) {\n const next = prev.nextSibling;\n prev.nextSibling = node;\n node.nextSibling = next;\n } else {\n const next = parent.firstChild;\n parent.firstChild = node;\n node.nextSibling = next;\n }\n }\n\n remove(node: any, parent?: any, prev?: any) {\n return this.defaultRemove(node, parent, prev);\n }\n\n defaultRemove(node: any, parent: any, prevSibling: any) {\n const next = node.nextSibling;\n if (prevSibling) {\n prevSibling.nextSibling = next;\n }\n if (parent.firstChild === node) {\n parent.firstChild = next;\n }\n }\n\n setProp(node: any, key: string, value: any, hookI?: number) {\n node.props[key] = value;\n }\n}\n","import { isNum, matchIdStart, matchIdStart2, Queue } from 'bobe-shared';\nimport { BaseType, Hook, HookProps, HookType, Token, TokenType } from './type';\n\nexport class Tokenizer {\n /** 缩进大小 默认 2 */\n TabSize = 2;\n /** 缩进字符 */\n Tab = Array.from({ length: this.TabSize }, () => ' ').join('');\n /** Eof 标识符的值 */\n static EofId = `__EOF__${Date.now()}`;\n static DedentId = `__DEDENT__${Date.now()}`;\n\n /** 当前 token */\n token!: Token;\n /** 回车后需要判断缩进 */\n needIndent = false;\n /** 用于跳过第一个节点前的空白字符串,以及生成基础缩进 */\n isFirstToken = true;\n /** 代码 */\n code: string;\n /** 记录历史缩进的长度,相对于行首 */\n dentStack: number[] = [0];\n /** 当前字符 index */\n i = 0;\n // TODO: 生产环境不需要这个,导致不必要的内存占用\n handledTokens: Token[] = [];\n /**\n * 有些标识符能产生多个 token\n * 例如 dedent\n * parent1\n * child\n * subChild\n * parent2 <- 产生两个 dedent\n */\n waitingTokens = new Queue<Token>();\n\n constructor(\n private hook: Hook,\n public useDedentAsEof: boolean\n ) {\n if (useDedentAsEof) {\n this.setToken(TokenType.Indent, '');\n this.isFirstToken = true;\n // this.waitingTokens.push({\n // type: TokenType.Indent,\n // typeName: TokenType[TokenType.Indent],\n // value: ''\n // })\n }\n }\n consume() {\n const token = this.token;\n this.nextToken();\n return token;\n }\n // /** 恢复至某一个现场,进行 token 重算 */\n resume(_snapshot: ReturnType<Tokenizer['snapshot']>) {\n this.token = undefined;\n this.needIndent = false;\n this.isFirstToken = true;\n this.dentStack = [0];\n Object.assign(this, _snapshot);\n }\n snapshot(keys?: (keyof Tokenizer)[]): Partial<Tokenizer> {\n const snap = {\n i: this.i,\n waitingTokens: this.waitingTokens.clone()\n };\n if (keys) {\n for (const k of keys) {\n snap[k] = this[k];\n if (k === 'dentStack') {\n snap[k] = this[k].slice();\n }\n }\n }\n return snap;\n }\n\n skip() {\n const logicDentLen = this.dentStack[this.dentStack.length - 1];\n let needIndent = false;\n /** \\n 是为了弥补 if 节点 consume condition 后,已将 token 设置成回车 */\n let skipFragment = ``;\n this.token = undefined;\n while (1) {\n const char = this.code[this.i];\n\n if (char === '\\n') {\n needIndent = true;\n skipFragment += char;\n this.i++;\n continue;\n }\n\n if (!needIndent) {\n skipFragment += char;\n this.i++;\n continue;\n }\n\n needIndent = false;\n // 此时已经指到一个非 tab 的字符\n const { value, isEmptyLine } = this.getDentValue();\n const currLen = value.length;\n if (isEmptyLine) continue;\n if (currLen > logicDentLen) {\n skipFragment += value;\n }\n // 找到与条件节点同级或更短的缩进了,结束。\n else {\n // skipFragment += `\\n${Tokenizer.EofId}`;\n // 一直找到最小\n for (let i = this.dentStack.length - 1; i >= 0; i--) {\n const expLen = this.dentStack[i];\n // 等于\n if (currLen === expLen) break;\n\n // 大于\n if (currLen > expLen) {\n throw SyntaxError(`缩进错误,缩进长度不匹配`);\n }\n\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n break;\n }\n\n this.dentStack.pop();\n\n if (!this.token) {\n this.setToken(TokenType.Dedent, String(expLen));\n } else {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: String(expLen)\n });\n }\n }\n break;\n }\n }\n if (!this.token) {\n this.nextToken();\n }\n return skipFragment;\n }\n\n setCode(code: string) {\n // 保证开头结尾能正确计算\n this.code = '\\n' + code.trimEnd() + `\\n${Tokenizer.EofId}`;\n }\n\n tokenize() {\n do {\n this.nextToken();\n console.log('token:', TokenType[this.token?.type], JSON.stringify(this.token?.value || ''));\n } while (!this.isEof());\n }\n\n isEof() {\n // 刚开始时 token 不存在\n if (!this.token) return false;\n return this.token.type & TokenType.Identifier && this.token.value === Tokenizer.EofId;\n // return this.code[this.i] === undefined;\n }\n\n private setToken(type: TokenType, value: BaseType) {\n this.token = {\n type,\n typeName: TokenType[type],\n value\n };\n this.isFirstToken = false;\n }\n\n public nextToken(): Token {\n try {\n // 已遍历到文件结尾\n if (this.isEof()) {\n return this.token;\n }\n this.token = undefined as any;\n if (this.waitingTokens.len) {\n const item = this.waitingTokens.shift()!;\n this.setToken(item.type, item.value);\n return this.token;\n }\n outer: while (1) {\n if (this.needIndent) {\n this.dent();\n // 遍历到当前标识符非 空白为止\n } else {\n const char = this.code[this.i];\n switch (char) {\n case '\\t':\n case ' ':\n // skip, 缩进通过 \\n 匹配来激活 needIndent\n break;\n // 找后续所有 newLine\n case '\\n':\n this.newLine();\n // 回车后需要判断缩进\n this.needIndent = true;\n break;\n case '=':\n this.assignment();\n break;\n case '|':\n this.pipe();\n break;\n case \"'\":\n case '\"':\n this.str(char);\n break;\n case '{':\n const braceToken = this.brace();\n this.setToken(TokenType.InsertionExp, braceToken);\n break;\n case '$':\n const handled = this.dynamic(char);\n if (handled) break;\n case ';':\n this.setToken(TokenType.Semicolon, ';');\n break;\n default:\n if (isNum(char)) {\n this.number(char);\n break;\n }\n if (typeof char === 'string' && matchIdStart2(char, 0)) {\n this.identifier(char);\n }\n break;\n }\n // 指向下一个字符\n this.i++;\n }\n\n // 找到 token 即可停止\n if (this.token) {\n break;\n }\n }\n return this.token;\n } catch (error) {\n console.error(error);\n return this.token;\n } finally {\n this.handledTokens.push(this.token);\n }\n }\n\n condExp() {\n let value = '';\n this.token = null;\n while (1) {\n const char = this.code[this.i];\n if (char === '\\n') {\n break;\n }\n value += char;\n this.i++;\n }\n value = value.trim();\n this.setToken(TokenType.Identifier, value || true);\n return this.token;\n }\n\n /**\n * 解析到 for 时使用这个方法获取 for 后方的子表达式\n * 表达式通过 “;” 分割\n * // 最多可有三个表达式\n * for arr ; item index; item.key\n * @returns {boolean} 是否含有 key\n */\n public jsExp() {\n this.token = null;\n let value = '';\n while (1) {\n const char = this.code[this.i];\n if (char === ';' || char === '\\n') {\n this.setToken(TokenType.Identifier, value.trim());\n return this.token;\n } else {\n value += char;\n }\n this.i++;\n }\n }\n\n public peekChar() {\n let i = this.i;\n while (this.code[i] === ' ' || this.code[i] === '\\t') {\n i++;\n }\n return this.code[i];\n }\n\n private assignment() {\n this.setToken(TokenType.Assign, '=');\n }\n private pipe() {\n this.setToken(TokenType.Pipe, '|');\n }\n private dynamic(char: string) {\n let nextC = this.code[this.i + 1];\n // 不是动态插值\n if (nextC !== '{') {\n return false;\n }\n this.i++;\n let value = '${';\n let innerBrace = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n value += nextC;\n // 下一个属于本标识符再前进\n this.i++;\n if (nextC === '{') {\n innerBrace++;\n }\n\n if (nextC === '}') {\n // 内部无左括号,说明完成匹配 TODO: 考虑js注释中的括号可能导致匹配错误\n if (!innerBrace) {\n break;\n }\n innerBrace--;\n }\n }\n this.setToken(TokenType.Identifier, value);\n return true;\n }\n\n private brace() {\n let inComment: string,\n inString: string,\n count = 0,\n value = '',\n backslashCount = 0; // 用于记录连续的反斜杠数量\n while (1) {\n const char = this.code[this.i];\n const nextChar = this.code[this.i + 1];\n\n // 1. 处理注释状态退出\n if (inComment === 'single' && char === '\\n') {\n inComment = null;\n } else if (inComment === 'multi' && char === '*' && nextChar === '/') {\n inComment = null;\n value += this.code[this.i];\n this.i++;\n }\n // 2. 如果不在注释中,处理字符串状态\n else if (inString) {\n // 退出字符串\n if (char === inString && backslashCount % 2 === 0) {\n inString = null;\n }\n backslashCount = char === '\\\\' ? backslashCount + 1 : 0;\n } else {\n // 3. 进入注释或字符串状态\n if (char === '/' && nextChar === '/') {\n inComment = 'single';\n value += this.code[this.i]; // 跳过 / 号\n this.i++;\n } else if (char === '/' && nextChar === '*') {\n inComment = 'multi';\n value += this.code[this.i]; // 跳过 / 号\n this.i++;\n } else if (char === \"'\" || char === '\"' || char === '`') {\n inString = char;\n }\n // 4. 只有在非字符串、非注释状态下才计数\n else if (char === '{') {\n count++;\n } else if (char === '}') {\n count--;\n }\n }\n\n if (count === 0 && inString == null && inComment == null) {\n return value.slice(1);\n }\n value += this.code[this.i];\n this.i++;\n }\n }\n\n private newLine() {\n let value = '\\n';\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (nextC !== '\\n') {\n break;\n }\n value += nextC;\n // 下一个属于本标识符再前进\n this.i++;\n }\n // Program 希望第一个 token 一定是 node 节点\n if (this.isFirstToken) {\n return;\n }\n this.setToken(TokenType.NewLine, value);\n }\n private getDentValue() {\n let value = '';\n let nextC;\n let isEmptyLine = false;\n // 构建缩进字符串\n while (1) {\n const nextChar = this.code[this.i];\n\n switch (nextChar) {\n case '\\t':\n nextC = this.Tab;\n break;\n case ' ':\n nextC = ' ';\n break;\n case '\\n':\n nextC = '\\n';\n break;\n default:\n nextC = '';\n break;\n }\n\n // \\n 空白 \\n 的情况,这行不算\n if (nextC === '\\n') {\n isEmptyLine = true;\n break;\n }\n if (!nextC) {\n break;\n }\n value += nextC;\n this.i++;\n }\n return {\n value,\n isEmptyLine\n };\n }\n private dent() {\n const { value, isEmptyLine } = this.getDentValue();\n if (isEmptyLine) {\n // 这种情况下需要 next ,即后续从 \\n 重新开始匹配\n this.needIndent = true;\n return;\n }\n // 比较长度,比上个 indent 长,缩进,比上个 indent 短,dedent\n this.needIndent = false;\n // 期望 firstToken 是 node,所以这里只要修改第一个节点的基础偏移值即可\n if (this.isFirstToken) {\n this.dentStack[0] = value.length;\n return;\n }\n let currLen = value.length;\n const indentHasLen = currLen > 0;\n const prevLen = this.dentStack[this.dentStack.length - 1];\n if (currLen > prevLen) {\n this.dentStack.push(currLen);\n this.setToken(TokenType.Indent, currLen);\n return indentHasLen;\n }\n if (currLen < prevLen) {\n // 一直找到最小\n for (let i = this.dentStack.length; i--; ) {\n const expLen = this.dentStack[i];\n // 等于\n if (currLen === expLen) break;\n // 夹在两者说明缩进大小有问题\n if (currLen > expLen) {\n throw SyntaxError('缩进大小不统一');\n }\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n return;\n }\n this.dentStack.pop();\n if (!this.token) {\n this.setToken(TokenType.Dedent, String(expLen));\n }\n // 多余的 dent 缓存在 waitingTokens\n else {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: String(expLen)\n });\n }\n }\n return indentHasLen;\n }\n // 同级则无视\n return indentHasLen;\n }\n\n private shorterThanBaseDentEof() {\n const yes = this.dentStack.length === 1;\n if (yes) {\n if (!this.token) {\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tkr\n if (this.useDedentAsEof) {\n this.setToken(TokenType.Dedent, '');\n } else {\n this.setToken(TokenType.Identifier, Tokenizer.EofId);\n }\n } else {\n if (this.useDedentAsEof) {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: ''\n });\n } else {\n this.waitingTokens.push({\n type: TokenType.Identifier,\n typeName: TokenType[TokenType.Identifier],\n value: Tokenizer.EofId\n });\n }\n }\n }\n return yes;\n }\n\n private identifier(char: string) {\n let value = char;\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (typeof nextC !== 'string' || !matchIdStart2(nextC, 0)) {\n break;\n }\n value += nextC;\n this.i++;\n }\n if (value === Tokenizer.EofId && this.useDedentAsEof) {\n this.setToken(TokenType.Dedent, '');\n return;\n }\n\n let realValue =\n value === 'null'\n ? null\n : value === 'undefined'\n ? undefined\n : value === 'false'\n ? false\n : value === 'true'\n ? true\n : value;\n this.setToken(TokenType.Identifier, realValue);\n }\n private str(char: string) {\n let value = '';\n let nextC;\n let continuousBackslashCount = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n const memoCount = continuousBackslashCount;\n if (nextC === '\\\\') {\n continuousBackslashCount++;\n } else {\n continuousBackslashCount = 0;\n }\n this.i++;\n /**\n * 引号前 \\ 为双数时,全都是字符 \\\n * */\n if (nextC === char && memoCount % 2 === 0) {\n break;\n }\n value += nextC;\n }\n this.setToken(TokenType.Identifier, value);\n }\n private number(char: string) {\n let value = char;\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (!isNum(nextC)) {\n break;\n }\n value += nextC;\n this.i++;\n }\n this.setToken(TokenType.Identifier, Number(value));\n }\n private eof() {\n this.setToken(TokenType.Eof, 'End Of File');\n }\n /** 模板字符串动态节点的占位符 */\n HookId = '_h_o_o_k_';\n /** 模板字符串动态节点索引 */\n hookI = 0;\n _hook = (props: Partial<HookProps>): [HookType | undefined, any, hookI?: any] => {\n const value = this.token.value;\n const isDynamicHook = this.token.type & TokenType.InsertionExp;\n const isStaticHook = typeof value === 'string' && value.indexOf(this.HookId) === 0;\n const hookType: HookType = isDynamicHook ? 'dynamic' : isStaticHook ? 'static' : undefined;\n // 静态插值 `${xxx}`\n if (this.hook && isStaticHook) {\n const hookI = Number(value.slice(this.HookId.length));\n const res = this.hook({\n ...props,\n HookId: this.HookId,\n i: hookI\n });\n // TODO: 去除 this.hookI, hookI 由本函数返回\n return [hookType, res, hookI];\n }\n // 动态插值 `{xxx}`\n else if (isDynamicHook) {\n return [hookType, value];\n }\n // 普通值\n return [hookType, value];\n };\n\n init(fragments: string | string[]) {\n if (typeof fragments === 'string') {\n this.setCode(fragments);\n } else {\n let code = '';\n for (let i = 0; i < fragments.length - 1; i++) {\n const fragment = fragments[i];\n code += fragment + `${this.HookId}${i}`;\n }\n this.setCode(code + fragments[fragments.length - 1]);\n }\n }\n}\n","import { Interpreter } from './terp';\nimport { Store } from 'aoye';\nimport { Tokenizer } from './tokenizer';\nimport { BobeUI, ComponentNode, CustomRenderConf, FakeType } from './type';\nexport * from 'aoye';\nexport function bobe(fragments: TemplateStringsArray, ...values: any[]) {\n const ui: BobeUI = function ui(isSub: boolean) {\n const tokenizer = new Tokenizer(({ i }) => {\n return values[i];\n }, isSub);\n tokenizer.init(Array.from(fragments));\n return tokenizer;\n };\n ui.boundStore = Store.Current;\n return ui;\n}\n\n// render -> options\nexport function customRender(option: CustomRenderConf) {\n // 保存 options\n return function render<T>(Ctor: typeof Store, root: any) {\n const store = Ctor.new();\n const tokenizer: Tokenizer = store['ui'](false);\n const terp = new Interpreter(tokenizer);\n terp.config(option);\n\n const componentNode: ComponentNode = {\n __logicType: FakeType.Component,\n realParent: root,\n data: store,\n tokenizer\n };\n\n terp.program(root, componentNode);\n // ui => bobe`` 返回的函数\n return [componentNode, store];\n };\n}\n"],"names":["TokenType","FakeType","CondBit","If","Fail","Else","LogicalBit","For","ForItem","Component","Fragment","TokenizerSwitcherBit","NodeSort","TerpEvt","MultiTypeStack","typeTops","length","stack","push","value","bits","newNode","types","prevByType","bit","undefined","pop","poppedNode","peekByType","cat","peekType","at","peek","macInc","arr","len","candyLast","i","it","toPrev","Int32Array","target","start","end","mid","j","prev","KEY_INDEX","Interpreter","constructor","tokenizer","isLogicNode","node","__logicType","rootComponent","program","root","componentNode","before","ctxProvider","nextToken","Real","CtxProvider","TokenizerSwitcher","Logic","rootLen","ctx","realParent","prevSibling","current","rootPulling","getPulling","isEof","handleInsert","token","type","Indent","setPulling","effect","realBefore","declaration","Dedent","_stack$pop","_stack$pop2","_slicedToArray","_stack$pop2$","parent","sort","prevSameType","parentLogic","switcher","_ref","forNode","snapshot","resume","children","insertAfterAnchor","name","_this$ctx","afterAnchor","createAnchor","child","parentComponent","insertAfter","realAfter","childCmp","getPrevRealSibling","point","lastChild","anchor","_this$tokenizer$_hook","_hook","_this$tokenizer$_hook2","hookType","_node","condDeclaration","forDeclaration","data","getData","componentOrFragmentDeclaration","SyntaxError","valueIsMapKey","Reflect","has","Keys","Raw","val","str","getFn","createNode","onePropParsed","headerLine","extensionLines","oneRealPropParsed","arrExp","itemToken","isDestruct","InsertionExp","itemExp","vars","match","jsVarRegexp","varStr","join","Function","indexName","keyExp","char","peekChar","jsExp","owner","arrSignal","getKey","window","cells","Meta","hasArrExpKey","get","Computed","_forNode$snapshot","dentStack","isFirstToken","snapshotForUpdate","_objectWithoutProperties","_excluded","isFirstRender","Effect","Iterator","prevCtx","toRaw","item","createForItem","firstInsert","skip","oldLen","newLen","minLen","Math","min","newChildren","removeForItem","lastAfter","insertForItem","reuseForItem","s","e1","e2","old","key","itemData","getItemData","firstBefore","s1","s2","mixLen","key2new","Map","set","maxIncNewI","hasMove","new2oldI","Array","fill","newI","delete","forEach","incI","incLen","p1","p2","oldI","staticIdx","next","nextSib","isDestroy","dispose","parentData","useDedentAsEof","runWithPulling","removeLogicNode","remove","forItemId","forItemNode","scope","Scope","id","deepSignal","rawData","computedData","Object","setPrototypeOf","_this$ctx$stack$peekB","isFn","hookI","setProp","res","bind","ComponentOrRender","render","isCC","prototype","Store","new","boundStore","_","shareSignal","meta","computed","expression","keyWord","expToken","condExp","isElse","isIf","preIsCond","noCond","ifNode","condition","preCond","signal","fn","ef","firstChild","Pipe","attributeList","NewLine","eq","_this$tokenizer$_hook3","_this$tokenizer$_hook4","rawVal","config","opt","assign","props","nextSibling","defaultInsert","defaultRemove","Tokenizer","TabSize","Tab","from","EofId","Date","now","DedentId","needIndent","handledTokens","waitingTokens","Queue","hook","setToken","consume","_snapshot","keys","snap","clone","k","slice","logicDentLen","skipFragment","code","_this$getDentValue","getDentValue","isEmptyLine","currLen","expLen","shorterThanBaseDentEof","String","typeName","setCode","trimEnd","tokenize","console","log","JSON","stringify","Identifier","shift","outer","dent","newLine","assignment","pipe","braceToken","brace","handled","dynamic","Semicolon","isNum","number","matchIdStart2","identifier","error","trim","Assign","nextC","innerBrace","inComment","inString","count","backslashCount","nextChar","_this$getDentValue2","indentHasLen","prevLen","yes","realValue","continuousBackslashCount","memoCount","Number","eof","Eof","HookId","isDynamicHook","isStaticHook","indexOf","init","fragments","fragment","bobe","values","ui","isSub","Current","customRender","option","Ctor","store","terp"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/type.ts","../src/tokenizer.ts","../src/type-ast.ts","../src/compiler.ts","../src/typed.ts","../src/util.ts","../src/global.ts","../src/terp.ts","../src/render.ts"],"sourcesContent":["import { Computed, Dispose, Effect, Scope, Signal, SignalNode, Store } from 'aoye';\nimport type { Tokenizer } from './tokenizer';\nimport type { Interpreter } from './terp';\nimport { MultiTypeStack } from './typed';\n\nexport enum TokenType {\n NewLine = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n Indent = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n Dedent = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n Identifier = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n Assign = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n Pipe = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n Eof = 0b0000_0000_0000_0000_0000_0000_0100_0000,\n InsertionExp = 0b0000_0000_0000_0000_0000_0000_1000_0000,\n Semicolon = 0b0000_0000_0000_0000_0000_0001_0000_0000,\n /** 仅编译时可解析 */\n StaticInsExp = 0b0000_0000_0000_0000_0000_0010_0000_0000\n}\n\nexport enum FakeType {\n If = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n Fail = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n Else = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n For = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n Component = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n Fragment = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n ForItem = 0b0000_0000_0000_0000_0000_0000_0100_0000\n}\n\nexport const CondBit = FakeType.If | FakeType.Fail | FakeType.Else;\nexport const LogicalBit = FakeType.If | FakeType.Fail | FakeType.Else | FakeType.For | FakeType.ForItem;\nexport const CtxProviderBit =\n FakeType.If |\n FakeType.Fail |\n FakeType.Else |\n FakeType.For |\n FakeType.ForItem |\n FakeType.Component |\n FakeType.Fragment;\n\nexport const TokenizerSwitcherBit = FakeType.Component | FakeType.Fragment;\nexport type NodeSortBit = number;\n/**\n * 按不同维度分类,分类不互斥\n */\nexport enum NodeSort {\n /** 逻辑类型 1.if 2.else 3.fail 4.for 5. for item */\n Logic = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n /** 真实节点 */\n Real = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n /** 组件 */\n Component = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n /** FakeType 所有枚举都能提供 ctx,否则重新渲染时获取不到上下文 */\n CtxProvider = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n /** 节点可导致 token 切换 1. component 2. fragment */\n TokenizerSwitcher = 0b0000_0000_0000_0000_0000_0000_0001_0000\n}\n\nexport enum TerpEvt {\n AllAttrGot = 'all-attr-got',\n HandledComponentNode = 'handled-component-node'\n}\n\nexport type BaseType = string | number | boolean | undefined | null;\n\nexport const InsComputed = Symbol('insertion-computed-map-key');\nexport const IsAnchor = Symbol('is-anchor');\n\nexport interface SourceLocation {\n start: Position;\n end: Position;\n source: string;\n}\n\nexport interface Position {\n line: number;\n column: number;\n offset: number;\n}\n\nexport type Token = {\n type: TokenType;\n typeName: string;\n value: BaseType;\n loc: SourceLocation;\n};\n\nexport type HookProps = {\n /** 通过哪个 HookId 进入的 */\n HookId: string;\n /** 第几个 hook */\n i: number;\n /** 父节点 */\n parentNode?: any;\n};\n\nexport type TerpConf = Partial<\n Pick<Interpreter, 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'>\n>;\nexport type CustomRenderConf = Pick<\n TerpConf,\n 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'\n>;\n\nexport type Hook = (props: HookProps) => any;\n\nexport type HookType = 'dynamic' | 'static';\n\nexport type ProgramCtx = {\n stack: MultiTypeStack<any>;\n prevSibling: any;\n realParent: any;\n current: any;\n before: any;\n};\n\n/** 返回值是用户自定义的节点 */\nexport type BobeUI = {\n /** 在哪个 Store 声明的 */\n boundStore: Store;\n (isSub: boolean): Tokenizer;\n};\n\nexport type StackItem = {\n /** 插入到 prev 后 */\n prev: any;\n /** 当前节点*/\n node: any;\n};\n\nexport type LogicNode = {\n data: any;\n __logicType: FakeType;\n realParent: any;\n realBefore?: any;\n realAfter?: any;\n};\n\nexport type ForNode = Omit<LogicNode, 'data'> & {\n children: ForItemNode[];\n snapshot: ReturnType<Tokenizer['snapshot']>;\n itemExp: string | ((value: any) => any);\n indexName?: string;\n getKey?: (data: any) => any;\n arr: any[];\n arrSignal: Signal<any[]>|Computed<any[]>;\n effect: Effect;\n i: number;\n owner: ComponentNode | FragmentNode;\n prevSibling: any;\n vars: string[];\n};\n\nexport type ForItemNode = LogicNode & {\n id: number;\n forNode: ForNode;\n effect: Scope;\n key?: any;\n};\n\nexport type IfNode = LogicNode & {\n condition: SignalNode;\n isFirstRender: boolean;\n snapshot: ReturnType<Tokenizer['snapshot']>;\n effect: Effect;\n preCond: IfNode | null;\n owner: ComponentNode | FragmentNode;\n};\n\nexport type FragmentNode = LogicNode & {\n tokenizer: Tokenizer;\n};\nexport type ComponentNode = LogicNode & {\n tokenizer: Tokenizer;\n};\nexport type RootNode = LogicNode & {\n};","import { isNum, matchIdStart, matchIdStart2, Queue } from 'bobe-shared';\nimport { BaseType, Hook, HookProps, HookType, Position, Token, TokenType } from './type';\n\nexport class Tokenizer {\n /** 缩进大小 默认 2 */\n TabSize = 2;\n /** 缩进字符 */\n Tab = Array.from({ length: this.TabSize }, () => ' ').join('');\n /** Eof 标识符的值 */\n static EofId = `__EOF__${Date.now()}`;\n static DedentId = `__DEDENT__${Date.now()}`;\n\n /** 当前 token */\n token!: Token;\n /** 回车后需要判断缩进 */\n needIndent = false;\n /** 用于跳过第一个节点前的空白字符串,以及生成基础缩进 */\n isFirstToken = true;\n /** 代码 */\n code: string;\n /** 记录历史缩进的长度,相对于行首 */\n dentStack: number[] = [0];\n /** 当前字符 index */\n i = 0;\n line = 0;\n column = 0;\n preCol = 0;\n preI = 0;\n needLoc = false;\n // TODO: 生产环境不需要这个,导致不必要的内存占用\n handledTokens: Token[] = [];\n /**\n * 有些标识符能产生多个 token\n * 例如 dedent\n * parent1\n * child\n * subChild\n * parent2 <- 产生两个 dedent\n */\n waitingTokens = new Queue<Token>();\n /** 当前文件路径 */\n source = '';\n\n constructor(\n private hook: Hook,\n public useDedentAsEof: boolean\n ) {\n if (useDedentAsEof) {\n this.setToken(TokenType.Indent, '');\n this.isFirstToken = true;\n // this.waitingTokens.push({\n // type: TokenType.Indent,\n // typeName: TokenType[TokenType.Indent],\n // value: ''\n // })\n }\n }\n private next() {\n if (__IS_COMPILER__) {\n const char = this.code[this.i];\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n } else {\n this.column++;\n }\n }\n this.i++;\n }\n\n getCurrentPos(): Position {\n return {\n offset: this.i,\n line: this.line,\n column: this.column\n };\n }\n\n // /** 恢复至某一个现场,进行 token 重算 */\n resume(_snapshot: ReturnType<Tokenizer['snapshot']>) {\n this.token = undefined;\n this.needIndent = false;\n this.isFirstToken = true;\n this.dentStack = [0];\n Object.assign(this, _snapshot);\n }\n snapshot(keys?: (keyof Tokenizer)[]): Partial<Tokenizer> {\n const snap = {\n i: this.i,\n waitingTokens: this.waitingTokens.clone()\n };\n if (keys) {\n for (const k of keys) {\n snap[k] = this[k];\n if (k === 'dentStack') {\n snap[k] = this[k].slice();\n }\n }\n }\n return snap;\n }\n\n skip() {\n const logicDentLen = this.dentStack[this.dentStack.length - 1];\n let needIndent = false;\n /** \\n 是为了弥补 if 节点 consume condition 后,已将 token 设置成回车 */\n let skipFragment = ``;\n this.token = undefined;\n while (1) {\n const char = this.code[this.i];\n\n if (char === '\\n') {\n needIndent = true;\n skipFragment += char;\n this.next();\n continue;\n }\n\n if (!needIndent) {\n skipFragment += char;\n this.next();\n continue;\n }\n\n needIndent = false;\n // 此时已经指到一个非 tab 的字符\n const { value, isEmptyLine } = this.getDentValue();\n const currLen = value.length;\n if (isEmptyLine) continue;\n if (currLen > logicDentLen) {\n skipFragment += value;\n }\n // 找到与条件节点同级或更短的缩进了,结束。\n else {\n // skipFragment += `\\n${Tokenizer.EofId}`;\n // 一直找到最小\n for (let i = this.dentStack.length - 1; i >= 0; i--) {\n const expLen = this.dentStack[i];\n // 等于\n if (currLen === expLen) break;\n\n // 大于\n if (currLen > expLen) {\n throw SyntaxError(`缩进错误,缩进长度不匹配`);\n }\n\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n break;\n }\n\n this.dentStack.pop();\n\n if (!this.token) {\n this.setToken(TokenType.Dedent, String(expLen));\n } else {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: String(expLen),\n // TODO: 暂时不做缩进位置\n loc: null\n });\n }\n }\n break;\n }\n }\n if (!this.token) {\n this.nextToken();\n }\n return skipFragment;\n }\n\n setCode(code: string) {\n // 保证开头结尾能正确计算\n this.code = '\\n' + code.trimEnd() + `\\n${Tokenizer.EofId}`;\n }\n\n tokenize() {\n do {\n this.nextToken();\n console.log('token:', TokenType[this.token?.type], JSON.stringify(this.token?.value || ''));\n } while (!this.isEof());\n }\n\n isEof() {\n // 刚开始时 token 不存在\n if (!this.token) return false;\n return this.token.type & TokenType.Identifier && this.token.value === Tokenizer.EofId;\n // return this.code[this.i] === undefined;\n }\n\n private setToken(type: TokenType, value: BaseType) {\n this.token = {\n type,\n typeName: TokenType[type],\n value,\n loc: __IS_COMPILER__ && this.needLoc\n ? {\n start: {\n offset: this.preI,\n line: this.line,\n column: this.preCol\n },\n end: {\n offset: this.i + 1,\n line: this.line,\n column: this.column + 1\n },\n // TODO: 文件名\n source: this.code.slice(this.preI, this.i + 1)\n }\n : null\n };\n this.isFirstToken = false;\n }\n\n public nextToken(): Token {\n try {\n // 已遍历到文件结尾\n if (this.isEof()) {\n return this.token;\n }\n this.token = undefined as any;\n if (this.waitingTokens.len) {\n const item = this.waitingTokens.shift()!;\n this.setToken(item.type, item.value);\n return this.token;\n }\n outer: while (1) {\n if (this.needIndent) {\n this.dent();\n // 遍历到当前标识符非 空白为止\n } else {\n const char = this.code[this.i];\n switch (char) {\n case '\\t':\n case ' ':\n // skip, 缩进通过 \\n 匹配来激活 needIndent\n break;\n // 找后续所有 newLine\n case '\\n':\n this.newLine();\n // 回车后需要判断缩进\n this.needIndent = true;\n break;\n case '=':\n this.assignment();\n break;\n case '|':\n this.pipe();\n break;\n case ';':\n this.setToken(TokenType.Semicolon, ';');\n break;\n /*----------------- 需要 loc 的 token -----------------*/\n default:\n if(__IS_COMPILER__) {\n this.preI = this.i;\n this.preCol = this.column;\n this.needLoc = true;\n }\n switch (char) {\n case \"'\":\n case '\"':\n this.str(char);\n break;\n case '{':\n const braceToken = this.brace();\n this.setToken(TokenType.InsertionExp, braceToken);\n break;\n case '$':\n const handled = this.staticIns();\n if (handled) break;\n default:\n if (isNum(char)) {\n this.number(char);\n break;\n }\n if (typeof char === 'string' && matchIdStart2(char, 0)) {\n this.identifier(char);\n }\n break;\n }\n if(__IS_COMPILER__) {\n this.needLoc = false;\n }\n break;\n }\n // 指向下一个字符\n this.next();\n }\n\n // 找到 token 即可停止\n if (this.token) {\n break;\n }\n }\n return this.token;\n } catch (error) {\n console.error(error);\n return this.token;\n } finally {\n this.handledTokens.push(this.token);\n }\n }\n\n condExp() {\n if(__IS_COMPILER__) {\n this.preCol = this.column;\n this.preI = this.i;\n this.needLoc = true;\n }\n\n let value = '';\n this.token = null;\n try {\n if (this.code[this.i] === '\\n') {\n this.setToken(TokenType.Identifier, true);\n return this.token;\n }\n while (this.code[this.i + 1] !== '\\n') {\n value += this.code[this.i];\n this.next();\n }\n value += this.code[this.i];\n const trimmed = value.trim();\n this.setToken(TokenType.Identifier, trimmed ? value : true);\n return this.token;\n } finally {\n this.next();\n this.handledTokens.push(this.token);\n if(__IS_COMPILER__) {\n this.needLoc = false;\n }\n }\n }\n\n /**\n * 解析到 for 时使用这个方法获取 for 后方的子表达式\n * 表达式通过 “;” 分割\n * // 最多可有三个表达式\n * for arr ; item index; item.key\n * @returns {boolean} 是否含有 key\n */\n public jsExp() {\n if(__IS_COMPILER__) {\n this.preCol = this.column;\n this.preI = this.i;\n this.needLoc = true;\n }\n\n this.token = null;\n let value = '';\n\n try {\n const char = this.code[this.i];\n if (char === ';' || char === '\\n') {\n this.setToken(TokenType.Identifier, value);\n return this.token;\n }\n let nextC = this.code[this.i + 1];\n while (nextC !== ';' && nextC !== '\\n') {\n value += this.code[this.i];\n this.next();\n nextC = this.code[this.i + 1];\n }\n value += this.code[this.i];\n this.setToken(TokenType.Identifier, value);\n return this.token;\n } finally {\n this.next();\n this.handledTokens.push(this.token);\n if(__IS_COMPILER__) {\n this.needLoc = false;\n }\n }\n }\n\n public peekChar() {\n let i = this.i;\n while (this.code[i] === ' ' || this.code[i] === '\\t') {\n i++;\n }\n return this.code[i];\n }\n\n private assignment() {\n this.setToken(TokenType.Assign, '=');\n }\n private pipe() {\n this.setToken(TokenType.Pipe, '|');\n }\n private staticIns() {\n let nextC = this.code[this.i + 1];\n // 不是动态插值\n if (nextC !== '{') {\n return false;\n }\n this.next();\n let value = '';\n let innerBrace = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n value += nextC;\n // 下一个属于本标识符再前进\n this.next();\n if (nextC === '{') {\n innerBrace++;\n }\n\n if (nextC === '}') {\n // 内部无左括号,说明完成匹配 TODO: 考虑js注释中的括号可能导致匹配错误\n if (!innerBrace) {\n break;\n }\n innerBrace--;\n }\n }\n this.setToken(TokenType.StaticInsExp, value.slice(0,-1));\n return true;\n }\n\n private brace() {\n let inComment: string,\n inString: string,\n count = 0,\n value = '',\n backslashCount = 0; // 用于记录连续的反斜杠数量\n while (1) {\n const char = this.code[this.i];\n const nextChar = this.code[this.i + 1];\n\n // 1. 处理注释状态退出\n if (inComment === 'single' && char === '\\n') {\n inComment = null;\n } else if (inComment === 'multi' && char === '*' && nextChar === '/') {\n inComment = null;\n value += this.code[this.i];\n this.next();\n }\n // 2. 如果不在注释中,处理字符串状态\n else if (inString) {\n // 退出字符串\n if (char === inString && backslashCount % 2 === 0) {\n inString = null;\n }\n backslashCount = char === '\\\\' ? backslashCount + 1 : 0;\n } else {\n // 3. 进入注释或字符串状态\n if (char === '/' && nextChar === '/') {\n inComment = 'single';\n value += this.code[this.i]; // 跳过 / 号\n this.next();\n } else if (char === '/' && nextChar === '*') {\n inComment = 'multi';\n value += this.code[this.i]; // 跳过 / 号\n this.next();\n } else if (char === \"'\" || char === '\"' || char === '`') {\n inString = char;\n }\n // 4. 只有在非字符串、非注释状态下才计数\n else if (char === '{') {\n count++;\n } else if (char === '}') {\n count--;\n }\n }\n\n if (count === 0 && inString == null && inComment == null) {\n return value.slice(1);\n }\n value += this.code[this.i];\n this.next();\n }\n }\n\n private newLine() {\n let value = '\\n';\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (nextC !== '\\n') {\n break;\n }\n value += nextC;\n // 下一个属于本标识符再前进\n this.next();\n }\n // Program 希望第一个 token 一定是 node 节点\n if (this.isFirstToken) {\n return;\n }\n this.setToken(TokenType.NewLine, value);\n }\n private getDentValue() {\n let value = '';\n let nextC;\n let isEmptyLine = false;\n // 构建缩进字符串\n while (1) {\n const nextChar = this.code[this.i];\n\n switch (nextChar) {\n case '\\t':\n nextC = this.Tab;\n break;\n case ' ':\n nextC = ' ';\n break;\n case '\\n':\n nextC = '\\n';\n break;\n default:\n nextC = '';\n break;\n }\n\n // \\n 空白 \\n 的情况,这行不算\n if (nextC === '\\n') {\n isEmptyLine = true;\n break;\n }\n if (!nextC) {\n break;\n }\n value += nextC;\n this.next();\n }\n return {\n value,\n isEmptyLine\n };\n }\n private dent() {\n const { value, isEmptyLine } = this.getDentValue();\n if (isEmptyLine) {\n // 这种情况下需要 next ,即后续从 \\n 重新开始匹配\n this.needIndent = true;\n return;\n }\n // 比较长度,比上个 indent 长,缩进,比上个 indent 短,dedent\n this.needIndent = false;\n // 期望 firstToken 是 node,所以这里只要修改第一个节点的基础偏移值即可\n if (this.isFirstToken) {\n this.dentStack[0] = value.length;\n return;\n }\n let currLen = value.length;\n const indentHasLen = currLen > 0;\n const prevLen = this.dentStack[this.dentStack.length - 1];\n if (currLen > prevLen) {\n this.dentStack.push(currLen);\n this.setToken(TokenType.Indent, currLen);\n return indentHasLen;\n }\n if (currLen < prevLen) {\n // 一直找到最小\n for (let i = this.dentStack.length; i--; ) {\n const expLen = this.dentStack[i];\n // 等于\n if (currLen === expLen) break;\n // 夹在两者说明缩进大小有问题\n if (currLen > expLen) {\n throw SyntaxError('缩进大小不统一');\n }\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n return;\n }\n this.dentStack.pop();\n if (!this.token) {\n this.setToken(TokenType.Dedent, String(expLen));\n }\n // 多余的 dent 缓存在 waitingTokens\n else {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: String(expLen),\n // TODO: 暂时不做缩进位置\n loc: null\n });\n }\n }\n return indentHasLen;\n }\n // 同级则无视\n return indentHasLen;\n }\n\n private shorterThanBaseDentEof() {\n const yes = this.dentStack.length === 1;\n if (yes) {\n if (!this.token) {\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tkr\n if (this.useDedentAsEof) {\n this.setToken(TokenType.Dedent, '');\n } else {\n this.setToken(TokenType.Identifier, Tokenizer.EofId);\n }\n } else {\n if (this.useDedentAsEof) {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: '',\n // TODO: 暂时不做缩进位置\n loc: null\n });\n } else {\n this.waitingTokens.push({\n type: TokenType.Identifier,\n typeName: TokenType[TokenType.Identifier],\n value: Tokenizer.EofId,\n // TODO: 暂时不做缩进位置\n loc: null\n });\n }\n }\n }\n return yes;\n }\n\n private identifier(char: string) {\n let value = char;\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (typeof nextC !== 'string' || !matchIdStart2(nextC, 0)) {\n break;\n }\n value += nextC;\n this.next();\n }\n if (value === Tokenizer.EofId && this.useDedentAsEof) {\n this.setToken(TokenType.Dedent, '');\n return;\n }\n\n let realValue =\n value === 'null'\n ? null\n : value === 'undefined'\n ? undefined\n : value === 'false'\n ? false\n : value === 'true'\n ? true\n : value;\n this.setToken(TokenType.Identifier, realValue);\n }\n private str(char: string) {\n let value = '';\n let nextC;\n let continuousBackslashCount = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n const memoCount = continuousBackslashCount;\n if (nextC === '\\\\') {\n continuousBackslashCount++;\n } else {\n continuousBackslashCount = 0;\n }\n this.next();\n /**\n * 引号前 \\ 为双数时,全都是字符 \\\n * */\n if (nextC === char && memoCount % 2 === 0) {\n break;\n }\n value += nextC;\n }\n this.setToken(TokenType.Identifier, value);\n }\n private number(char: string) {\n let value = char;\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (!isNum(nextC)) {\n break;\n }\n value += nextC;\n this.next();\n }\n this.setToken(TokenType.Identifier, Number(value));\n }\n private eof() {\n this.setToken(TokenType.Eof, 'End Of File');\n }\n /** 模板字符串动态节点的占位符 */\n HookId = '_h_o_o_k_';\n /** 模板字符串动态节点索引 */\n hookI = 0;\n _hook = (props: Partial<HookProps>): [HookType | undefined, any, hookI?: any] => {\n const value = this.token.value;\n const isDynamicHook = this.token.type & TokenType.InsertionExp;\n let isStaticHook: boolean;\n if (__IS_COMPILER__) {\n isStaticHook = Boolean(this.token.type & TokenType.StaticInsExp);\n } else {\n isStaticHook = typeof value === 'string' && value.indexOf(this.HookId) === 0;\n }\n const hookType: HookType = isDynamicHook ? 'dynamic' : isStaticHook ? 'static' : undefined;\n // 静态插值 `${xxx}`\n if (this.hook && isStaticHook) {\n const hookI = Number((value as any as string).slice(this.HookId.length));\n const res = this.hook({\n ...props,\n HookId: this.HookId,\n i: hookI\n });\n // TODO: 去除 this.hookI, hookI 由本函数返回\n return [hookType, res, hookI];\n }\n // 动态插值 `{xxx}`\n else if (isDynamicHook) {\n return [hookType, value];\n }\n // 普通值\n return [hookType, value];\n };\n\n init(fragments: string | string[]) {\n if (typeof fragments === 'string') {\n this.setCode(fragments);\n } else {\n let code = '';\n for (let i = 0; i < fragments.length - 1; i++) {\n const fragment = fragments[i];\n code += fragment + `${this.HookId}${i}`;\n }\n this.setCode(code + fragments[fragments.length - 1]);\n }\n }\n}\n","import { SourceLocation } from \"./type\";\n\n// NodeType包含所有节点类型,包括属性、值等\nenum NodeType {\n // 真实节点类型\n Element = 'Element', // 真实DOM节点\n Text = 'Text', // 文本节点\n Interpolation = 'Interpolation', // 插值节点\n\n // 属性相关类型\n Property = 'Property', // 属性节点\n PropertyKey = 'PropertyKey', // 属性节点\n StaticValue = 'StaticValue', // 静态值\n DynamicValue = 'DynamicValue', // 动态值(JS表达式)\n\n // 程序入口\n Program = 'Program', // 程序根节点\n\n // 逻辑节点类型\n If='If',\n Else='Else',\n Fail='Fail',\n For='For',\n Component='Component',\n Fragment='Fragment'\n}\n\n// 扩展类型联合,包括FakeType和NodeType\ntype ASTNodeType = NodeType;\n\n// 基础节点接口\ninterface BaseNode {\n type: ASTNodeType; // 直接使用FakeType或NodeType作为类型\n loc?: SourceLocation;\n}\n\n\n\n// 程序根节点\ninterface Program extends BaseNode {\n type: NodeType.Program;\n body: TemplateNode[];\n}\n\n// 模板节点类型\ntype TemplateNode =\n | ElementNode // 真实DOM元素节点\n | TextNode // 文本节点\n | InterpolationNode // 插值节点\n | ConditionalNode // 条件节点(复用NodeType.If)\n | LoopNode // 循环节点(复用NodeType.For)\n | ComponentNode // 组件节点(复用NodeType.Component)\n | FragmentNode; // 片段节点(复用NodeType.Fragment)\n\n// 真实DOM元素节点(使用NodeType.Element)\ninterface ElementNode extends BaseNode {\n type: NodeType.Element;\n tagName: string;\n props: Property[];\n children: TemplateNode[];\n}\n\n// 文本节点(使用NodeType.Text)\ninterface TextNode extends BaseNode {\n type: NodeType.Text;\n value: string;\n}\n\n// 插值节点(使用NodeType.Interpolation)\ninterface InterpolationNode extends BaseNode {\n type: NodeType.Interpolation;\n expression: string;\n}\n\n// 属性节点(使用NodeType.Property)\ninterface Property extends BaseNode {\n type: NodeType.Property;\n key: PropertyKeyNode;\n value?: PropertyValue;\n}\n\n// 属性值类型 - 区分静态和动态\ntype PropertyValue = StaticValue | DynamicValue;\n\n// 静态值(使用NodeType.StaticValue)\ninterface StaticValue extends BaseNode {\n type: NodeType.StaticValue;\n value: string | number | boolean;\n}\n\n// 动态值(JS表达式)(使用NodeType.DynamicValue)\ninterface PropertyKeyNode extends BaseNode {\n type: NodeType.PropertyKey;\n key: string;\n}\n// 动态值(JS表达式)(使用NodeType.DynamicValue)\ninterface DynamicValue extends BaseNode {\n type: NodeType.DynamicValue;\n value: string;\n}\n\n// 条件节点(复用NodeType.If)\ninterface ConditionalNode extends BaseNode {\n type: NodeType.If | NodeType.Else | NodeType.Fail;\n condition: PropertyValue;\n consequent: TemplateNode[];\n children?: TemplateNode[];\n}\n\n// 循环节点(复用NodeType.For)\ninterface LoopNode extends BaseNode {\n type: NodeType.For;\n collection: PropertyValue; // 被迭代的集合\n item: PropertyValue; // 项变量名\n index?: PropertyValue; // 索引变量名\n key?: PropertyValue; // 键名\n children: TemplateNode[]; // 循环体\n}\n\n// 组件节点(复用NodeType.Component)\ninterface ComponentNode extends BaseNode {\n type: NodeType.Component;\n componentName: string; // 组件名称\n props: Property[]; // 组件属性\n children?: TemplateNode[]; // 组件插槽内容\n}\n\n// 片段节点(复用NodeType.Fragment)\ninterface FragmentNode extends BaseNode {\n type: NodeType.Fragment;\n nodes: TemplateNode[];\n}\n\n// 导出所有类型\nexport {\n NodeType,\n ASTNodeType,\n BaseNode,\n Program,\n TemplateNode,\n ElementNode,\n TextNode,\n InterpolationNode,\n Property,\n PropertyValue,\n StaticValue,\n PropertyKeyNode,\n DynamicValue,\n ConditionalNode,\n LoopNode,\n ComponentNode,\n FragmentNode\n};\n","import { Tokenizer } from './tokenizer';\nimport {\n NodeType,\n Program,\n TemplateNode,\n ElementNode,\n Property,\n PropertyValue,\n ConditionalNode,\n LoopNode,\n PropertyKeyNode,\n BaseNode,\n ComponentNode\n} from './type-ast';\nimport { TokenType, FakeType, SourceLocation } from './type';\n\nexport class Compiler {\n constructor(\n public tokenizer: Tokenizer,\n public hooks: ParseHooks = {}\n ) {}\n\n /**\n * 编译程序入口,生成AST\n */\n @NodeHook\n parseProgram(): Program {\n this.tokenizer.nextToken();\n\n const body: TemplateNode[] = [];\n\n // 解析文档主体内容\n while (!this.tokenizer.isEof()) {\n const node = this.templateNode();\n if (node) {\n body.push(node);\n }\n }\n\n return {\n type: NodeType.Program,\n body,\n loc: {\n start: { offset: 0, line: 1, column: 0 },\n end: { offset: this.tokenizer.preI, line: this.tokenizer.line, column: this.tokenizer.column },\n source: this.tokenizer.code\n }\n };\n }\n\n handleChildren(): TemplateNode[] {\n const children: TemplateNode[] = [];\n if (this.tokenizer.token.type & TokenType.Indent) {\n this.tokenizer.nextToken(); // 跳过缩进\n while (!(this.tokenizer.token.type & TokenType.Dedent) && !this.tokenizer.isEof()) {\n const child = this.templateNode();\n if (child) {\n children.push(child);\n }\n }\n if (this.tokenizer.token.type & TokenType.Dedent) {\n this.tokenizer.nextToken(); // 跳过去缩进\n }\n }\n return children;\n }\n\n /**\n * 解析模板节点\n */\n private templateNode(): TemplateNode | null {\n const token = this.tokenizer.token;\n\n const [hookType, value] = this.tokenizer._hook({});\n\n // 检查是否为特殊关键字\n if (value === 'if' || value === 'else' || value === 'fail') {\n return this.parseConditionalNode();\n }\n if (value === 'for') {\n return this.parseLoopNode();\n }\n if (hookType) {\n return this.parseComponentNode();\n }\n // 解析普通元素节点\n return this.parseElementNode();\n // // 解析普通元素节点\n // return this.parseElementNode();\n }\n\n /**\n * 解析元素节点\n */\n @NodeHook\n @NodeLoc\n parseComponentNode(node?: ComponentNode) {\n const tagToken = this.tokenizer.token;\n // 获取标签名\n const tagName = tagToken.value as string;\n this.tokenizer.nextToken(); // 跳过标签名\n\n // 解析属性\n const props: Property[] = this.headerLineAndExtensions();\n node.type = NodeType.Component;\n node.componentName = tagName;\n node.props = props;\n this.hooks.parseComponentNode?.propsAdded?.call(this, node);\n\n // 解析子节点\n const children = this.handleChildren();\n\n node.children = children;\n return node;\n }\n /**\n * 解析元素节点\n */\n @NodeHook\n @NodeLoc\n parseElementNode(node?: ElementNode) {\n const tagToken = this.tokenizer.token;\n // 获取标签名\n const tagName = tagToken.value as string;\n this.tokenizer.nextToken(); // 跳过标签名\n\n // 解析属性\n const props: Property[] = this.headerLineAndExtensions();\n node.type = NodeType.Element;\n node.tagName = tagName;\n node.props = props;\n this.hooks.parseElementNode?.propsAdded?.call(this, node);\n\n // 解析子节点\n const children = this.handleChildren();\n\n node.children = children;\n return node;\n }\n\n /**\n * 解析条件节点(if/else/fail)\n */\n @NodeHook\n @NodeLoc\n parseConditionalNode(node?: ConditionalNode) {\n const keyword = this.tokenizer.token.value as string;\n\n // 获取条件表达式\n this.tokenizer.condExp();\n const condition = this.parsePropertyValue();\n this.tokenizer.nextToken(); // 跳过 cond\n this.tokenizer.nextToken(); // 跳过 \\n\n node.type = keyword === 'if' ? NodeType.If : keyword === 'else' ? NodeType.Else : NodeType.Fail;\n node.condition = condition;\n this.hooks.parseConditionalNode?.propsAdded?.call(this, node);\n // 解析条件成立时的内容\n const children = this.handleChildren();\n\n node.children = children;\n\n return node;\n }\n\n /**\n * 解析循环节点(for)\n */\n @NodeHook\n @NodeLoc\n parseLoopNode(node?: LoopNode) {\n // 跳过 'for' 关键字\n // 解析循环表达式\n this.tokenizer.nextToken();\n const collection = this.parsePropertyValue();\n\n this.tokenizer.nextToken(); // 跳过分号\n const itemToken = this.tokenizer.nextToken(); // item 表达式\n const isDestruct = itemToken.type === TokenType.InsertionExp;\n if (isDestruct) {\n itemToken.value = '{' + itemToken.value + '}';\n }\n const item = this.parsePropertyValue();\n\n let char = this.tokenizer.peekChar(),\n key: PropertyValue | undefined,\n index: PropertyValue | undefined;\n if (char === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') {\n this.tokenizer.jsExp();\n key = this.parsePropertyValue();\n }\n } else if (char === '\\n') {\n }\n // 下一个是 indexName\n else {\n this.tokenizer.nextToken();\n index = this.parsePropertyValue();\n if (this.tokenizer.peekChar() === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') {\n this.tokenizer.jsExp();\n key = this.parsePropertyValue();\n }\n }\n }\n // 跳过最后一个表达式\n this.tokenizer.nextToken();\n // 跳过回车\n this.tokenizer.nextToken();\n node.type = NodeType.For;\n node.collection = collection;\n node.item = item;\n node.index = index;\n node.key = key;\n this.hooks.parseLoopNode?.propsAdded?.call(this, node);\n\n // 解析循环体\n const children = this.handleChildren();\n\n node.children = children;\n\n return node;\n }\n\n /**\n * 解析首行和扩展行的属性\n */\n private headerLineAndExtensions(): Property[] {\n const props: Property[] = [];\n\n // 解析首行属性\n props.push(...this.attributeList());\n\n // 跳过换行符\n if (this.tokenizer.token.type & TokenType.NewLine) {\n this.tokenizer.nextToken();\n }\n\n // 解析扩展行属性\n while (this.tokenizer.token.type & TokenType.Pipe) {\n this.tokenizer.nextToken(); // 跳过管道符\n props.push(...this.attributeList());\n\n // 跳过换行符\n if (this.tokenizer.token.type & TokenType.NewLine) {\n this.tokenizer.nextToken();\n }\n }\n\n return props;\n }\n\n /**\n * 解析属性列表\n */\n private attributeList(): Property[] {\n const props: Property[] = [];\n\n while (\n !(this.tokenizer.token.type & TokenType.NewLine) &&\n !(this.tokenizer.token.type & TokenType.Pipe) &&\n !this.tokenizer.isEof()\n ) {\n props.push(this.parseProperty());\n }\n\n return props;\n }\n\n @NodeHook\n parseProperty(node?: Property) {\n node.type = NodeType.Property;\n node.key = this.parsePropertyKey();\n const token = this.tokenizer.nextToken(); // 跳过key\n // 需要赋值\n if (token.value === '=') {\n this.tokenizer.nextToken(); // 跳过等号\n\n node.value = this.parsePropertyValue();\n this.tokenizer.nextToken();\n } else {\n // TODO: 报错当前\n }\n node.loc.start = node.key.loc.start;\n node.loc.end = node.value ? node.value.loc.end : node.key.loc.end;\n node.loc.source = this.tokenizer.code.slice(node.loc.start.offset, node.loc.end.offset);\n return node;\n }\n\n /**\n * 根据值类型创建属性 key 节点\n */\n @NodeHook\n @TokenLoc\n parsePropertyKey(node?: PropertyKeyNode) {\n node.type = NodeType.PropertyKey;\n node.key = this.tokenizer.token.value as string;\n return node;\n }\n /**\n * 根据值类型创建属性值节点\n */\n @NodeHook\n @TokenLoc\n parsePropertyValue(node?: PropertyValue) {\n const [hookType, value] = this.tokenizer._hook({});\n node.type = hookType === 'dynamic' ? NodeType.DynamicValue : NodeType.StaticValue;\n node.value = value;\n return node;\n }\n}\n\nfunction NodeLoc(target: Function, context: ClassMethodDecoratorContext<Compiler>) {\n return function (this: Compiler, _node?: BaseNode) {\n _node.loc.start = this.tokenizer.token.loc.start;\n const result = target.call(this, _node);\n _node.loc.end = this.tokenizer.token.loc ? this.tokenizer.token.loc.start : this.tokenizer.getCurrentPos();\n _node.loc.source = this.tokenizer.code.slice(_node.loc.start.offset, _node.loc.end.offset);\n return result;\n };\n}\nfunction TokenLoc(target: Function, context: ClassMethodDecoratorContext<Compiler>) {\n return function (this: Compiler, _node?: BaseNode) {\n const result = target.call(this, _node);\n _node.loc = this.tokenizer.token.loc;\n return result;\n };\n}\n\nfunction NodeHook(target: Function, context: ClassMethodDecoratorContext<Compiler>) {\n return function (this: Compiler, _node?: BaseNode) {\n const hook = this.hooks[context.name as keyof typeof this.hooks];\n const node = { loc: {} } as BaseNode;\n hook?.enter?.call(this, node);\n const result = target.call(this, node);\n hook?.leave?.call(this, node);\n return result;\n };\n}\n\ntype PickParseProps<T> = {\n [K in keyof T as K extends `parse${string}` ? K : never]: T[K];\n};\n\ntype ParseProps = PickParseProps<Compiler>;\n\ntype ParseHooks = Partial<{\n [K in keyof ParseProps]: {\n enter?: (this: Compiler, ...args: Parameters<ParseProps[K]>) => void;\n leave?: (this: Compiler, ...args: Parameters<ParseProps[K]>) => void;\n propsAdded?: (this: Compiler, ...args: Parameters<ParseProps[K]>) => void;\n };\n}>;\n","import { NodeSort, NodeSortBit, StackItem } from './type';\n\n// 1. 定义类别枚举\ntype Type = 'A' | 'B' | 'C';\n\n// 2. 定义节点结构\ninterface StackNode<T> {\n value: T;\n types: NodeSortBit;\n // prevGlobal: StackNode<T> | null;\n // 核心:记录在该节点加入时,各个类别的上一个节点是谁\n prevByType: Partial<Record<number, StackNode<T>>>;\n}\n\nexport class MultiTypeStack<T> {\n // 记录全局栈顶\n // private top: StackNode<T> | null = null;\n\n // 记录每个类别的当前最新节点(各分类的“栈顶”)\n private typeTops: Partial<Record<number, StackNode<T>>> = {};\n\n length = 0;\n stack: StackNode<T>[] = [];\n /**\n * 入栈操作\n * @param value 数据\n * @param bits 该节点所属的类别数组\n */\n push(value: T, bits: NodeSortBit): void {\n const newNode: StackNode<T> = {\n value,\n types: bits,\n prevByType: {}\n };\n\n let bit: number;\n while (1) {\n // 从最低位取一个类别\n bit = bits & (~bits + 1);\n if (!bit) break;\n // 去掉最低位\n bits &= ~bit;\n // 按类型链接前置节点\n newNode.prevByType[bit] = this.typeTops[bit] || undefined;\n this.typeTops[bit] = newNode;\n }\n this.stack[this.length++] = newNode;\n }\n\n /**\n * 出栈操作\n */\n pop() {\n const poppedNode = this.stack[this.length - 1];\n this.stack[--this.length] = null;\n if (!poppedNode) return undefined;\n\n let { types: bits } = poppedNode;\n\n let bit: number;\n while (1) {\n // 从最低位取一个类别\n bit = bits & (~bits + 1);\n if (!bit) break;\n // 去掉最低位\n bits &= ~bit;\n // 弹出对应类别的“顶端”元素\n this.typeTops[bit] = poppedNode.prevByType[bit];\n }\n\n // 更新全局栈顶\n return [poppedNode.value, poppedNode.types] as const;\n }\n\n /**\n * 获取某个类别的当前“顶部”元素\n */\n peekByType(cat: number): T | undefined {\n return this.typeTops[cat]?.value;\n }\n\n peekType(): number | undefined {\n return this.stack.at(-1).types;\n }\n\n /**\n * 获取全局栈顶\n */\n peek(): T | undefined {\n return this.stack.at(-1).value;\n }\n\n // /**\n // * 1. 全局向前遍历 (不分类)\n // * 从栈顶开始,沿着全局链条向栈底遍历\n // */\n // forEach(callback: (value: T, types: number) => any): void {\n // let current = this.top;\n\n // while (current !== null) {\n // // 执行回调,如果返回 false 则立即停止\n // const shouldBreak = callback(current.value, current.types);\n // if (shouldBreak) break;\n\n // current = current.prevGlobal;\n // }\n // }\n\n // /**\n // * 2. 按类别向前遍历\n // * 仅遍历属于指定类别 cat 的节点\n // */\n // forEachByType(cat: number, callback: (value: T) => any): void {\n // // 从该类别的当前“顶端”节点开始\n // let current = this.typeTops[cat];\n\n // while (current) {\n // const shouldBreak = callback(current.value);\n // if (shouldBreak) break;\n\n // // 关键点:直接跳向该节点记录的“上一个同类节点”\n // // 这比遍历全局栈再筛选类别要快得多 (O(m) vs O(n))\n // current = current.prevByType[cat];\n // }\n // }\n}\n","export function macInc(arr: number[]) {\n const len = arr.length;\n /** 候选者数组的尾项在 arr 中的 index */\n let candyLast = [],\n i = 0;\n while (i < len) {\n const it = arr[i];\n if (it !== -1) {\n candyLast = [i];\n break;\n }\n i++;\n }\n // i 为第一项不为 -1 的项,如果其是最后一项,直接返回,因为此时数组只有一个元素\n if (i + 1 >= len) return candyLast;\n\n /** 反向链表 */\n const toPrev = new Int32Array(len);\n\n while (i < len) {\n const target = arr[i];\n // -1 为新增项直接跳过\n if (target === -1) continue;\n // 二分查找,找到在 candyLast 中 item 的插入位置\n // 维持 0,start 小于 target, end, len-1 大于等于 target\n let start = -1,\n end = candyLast.length;\n while (start + 1 < end) {\n const mid = (start + end) >> 1;\n if (arr[candyLast[mid]] < target) {\n start = mid;\n } else {\n end = mid;\n }\n }\n // 最终 end 替换为 target\n candyLast[end] = i;\n // 匹配 i 的前项索引\n toPrev[i] = candyLast[start];\n i++;\n }\n\n let length = candyLast.length;\n for (let j = length - 1; j > 0; j--) {\n const prev = toPrev[candyLast[j]];\n candyLast[j - 1] = prev;\n }\n return candyLast;\n}\n","export const KEY_INDEX = '__BOBE_KEY_INDEX';","import { Tokenizer } from './tokenizer';\nimport {\n Computed,\n deepSignal,\n Effect,\n effect,\n getPulling,\n Keys,\n runWithPulling,\n Scope,\n setPulling,\n shareSignal,\n Signal,\n SignalNode,\n Store,\n clean,\n toRaw\n} from 'aoye';\nimport {\n BobeUI,\n ComponentNode,\n CondBit,\n IfNode,\n LogicalBit,\n LogicNode,\n FakeType,\n NodeSort,\n ProgramCtx,\n StackItem,\n TerpConf,\n TokenType,\n TokenizerSwitcherBit,\n ForNode,\n ForItemNode,\n Token\n} from './type';\nimport { jsVarRegexp } from 'bobe-shared';\nimport { MultiTypeStack } from './typed';\nimport { macInc } from './util';\nimport { KEY_INDEX } from './global';\n\nexport class Interpreter {\n opt: TerpConf;\n constructor(private tokenizer: Tokenizer) {}\n isLogicNode(node: any) {\n return node && node.__logicType & LogicalBit;\n }\n\n ctx: ProgramCtx;\n rootComponent: ComponentNode | null = null;\n\n program(root: any, componentNode?: ComponentNode, before?: any, ctxProvider?: any) {\n // 首屏渲 app 组件需要创建对象\n this.rootComponent = componentNode;\n\n this.tokenizer.nextToken();\n const stack = new MultiTypeStack<StackItem>();\n stack.push({ node: root, prev: null }, NodeSort.Real);\n stack.push(\n { node: componentNode, prev: null },\n NodeSort.Component | NodeSort.CtxProvider | NodeSort.TokenizerSwitcher\n );\n if (ctxProvider) {\n stack.push(\n { node: ctxProvider, prev: null },\n (ctxProvider.__logicType & LogicalBit ? NodeSort.Logic : 0) | NodeSort.CtxProvider\n );\n }\n const rootLen = stack.length;\n\n const ctx = (this.ctx = {\n realParent: root,\n prevSibling: before,\n current: null,\n stack,\n before\n });\n\n const rootPulling = getPulling();\n while (1) {\n // 子 tokenizer 退出,代表子组件逻辑结束\n if (this.tokenizer.isEof()) {\n if (!ctx.prevSibling) ctx.prevSibling = before;\n this.handleInsert(root, ctx.current, ctx.prevSibling, componentNode);\n break;\n }\n\n const token = this.tokenizer.token;\n // 下沉,创建 child0\n if (token.type & TokenType.Indent) {\n this.tokenizer.nextToken(); // token = ID\n const isLogicNode = this.isLogicNode(ctx.current);\n stack.push(\n {\n node: ctx.current,\n prev: ctx.prevSibling\n },\n !ctx.current.__logicType\n ? NodeSort.Real\n : (ctx.current.__logicType & LogicalBit ? NodeSort.Logic : 0) |\n (ctx.current.__logicType & TokenizerSwitcherBit ? NodeSort.TokenizerSwitcher : 0) |\n (ctx.current.__logicType === FakeType.Component ? NodeSort.Component : 0) |\n NodeSort.CtxProvider\n );\n if (ctx.current.__logicType) {\n // 父节点是逻辑节点\n if (isLogicNode) {\n // 保证 if 子逻辑节点能被其 effect 管理\n setPulling(ctx.current.effect);\n if (ctx.current.__logicType & FakeType.ForItem) {\n ctx.prevSibling = ctx.current.realBefore;\n }\n }\n }\n // 父节点是原生节点时才修改 ctx.prevSibling\n else {\n if (ctx.current) {\n ctx.realParent = ctx.current;\n }\n ctx.prevSibling = null;\n }\n ctx.current = this.declaration(ctx);\n continue;\n }\n // Token 不论指示找 下一个同级节点,还是 Dedent, 都将当前节点插入\n if (ctx.current) {\n // root 下第一个子节点应该插入在 before 之后\n if (stack.length === rootLen && !ctx.prevSibling) {\n ctx.prevSibling = before;\n }\n this.handleInsert(ctx.realParent, ctx.current, ctx.prevSibling);\n }\n // 下一个 token 是 Dedent\n if (this.tokenizer.token.type & TokenType.Dedent) {\n this.tokenizer.nextToken(); // token = ID | DEDENT\n const [{ node: parent, prev }, sort] = stack.pop();\n // 弹出原生节点,找最近的 ctx.realParent\n if (!parent.__logicType) {\n const prevSameType = stack.peekByType(NodeSort.Real);\n ctx.realParent = prevSameType?.node || root;\n }\n // 弹出非原生节点\n else {\n // 考虑 if, for 等获取最后一个插入节点\n if (sort & NodeSort.Logic) {\n // 找最近的 if for\n const parentLogic = stack.peekByType(NodeSort.Logic)?.node;\n if (parentLogic) {\n setPulling(parentLogic.effect);\n } else {\n setPulling(rootPulling);\n }\n }\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tokenizer\n if (sort & NodeSort.TokenizerSwitcher) {\n const switcher = stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n this.tokenizer = switcher.tokenizer;\n }\n\n // 弹出 forItem\n if (parent.__logicType === FakeType.ForItem) {\n const { forNode } = parent as ForItemNode;\n const { i, arr, snapshot } = forNode;\n if (i + 1 < arr.length) {\n // 恢复后 token null, 下一个是 \\n, Indent\n this.tokenizer.resume(snapshot);\n this.tokenizer.nextToken(); // token = \\n\n this.tokenizer.nextToken(); // token = Indent\n ctx.current = forNode.children[++forNode.i];\n ctx.prevSibling = ctx.current.realBefore;\n continue;\n }\n // 正常弹出 current = for node\n ctx.prevSibling = forNode.prevSibling;\n ctx.current = forNode;\n continue;\n }\n }\n ctx.prevSibling = prev;\n ctx.current = parent;\n }\n // 下一个是 同级节点\n else {\n ctx.prevSibling = ctx.current || ctx.prevSibling;\n ctx.current = this.declaration(ctx);\n }\n }\n return componentNode;\n }\n\n insertAfterAnchor(name = 'anchor') {\n const { realParent, prevSibling, stack, before } = this.ctx;\n // 先将 after 插入\n const afterAnchor = this.createAnchor(name);\n this.ctx.prevSibling = stack.length === 2 && !prevSibling ? before : prevSibling;\n this.handleInsert(realParent, afterAnchor, prevSibling);\n return afterAnchor;\n }\n\n /** 处理\n * 是逻辑 是普通\n * 父节点 将子节点加入 directList 调用 insert 方法挨个插入子节点\n * 子节点 仅插入到父逻辑节点 将本节点插入父节点\n * 理论上父节点不能是一个 逻辑节点,遇到if 时 Terp 会重新执行 program 这种情况下,会指定 root 为真实 dom\n */\n handleInsert(parent: any, child: any, prev: any, parentComponent?: any) {\n // 父 是 逻辑节点\n if (parentComponent) {\n // parentComponent.directList.push(child);\n }\n // 子 普通节点\n if (!child.__logicType) {\n // 前置节点空 或 普通节点\n if (!prev || !prev.__logicType) {\n this.insertAfter(parent, child, prev);\n }\n // 前置节点是逻辑节点,必定有 after\n else {\n const before = prev.realAfter;\n this.insertAfter(parent, child, before);\n }\n }\n // 子 是 逻辑节点\n else {\n const childCmp: LogicNode = child;\n childCmp.realParent = parent;\n // 前置 -> 逻辑节点\n if (prev?.__logicType) {\n // forItem 应该使用 forNode 的 after\n childCmp.realBefore = prev.forNode ? prev.forNode.realAfter : prev.realAfter;\n }\n // 前置 -> 普通节点\n else {\n childCmp.realBefore = prev;\n }\n }\n }\n\n /** 考虑到同级 逻辑模块 */\n getPrevRealSibling(prevSibling: any) {\n // 正常节点则直接返回\n if (!prevSibling || !prevSibling.__logicType) {\n return prevSibling;\n }\n let point = prevSibling;\n while (point != null) {\n if (point.lastChild) {\n return point.lastChild.value;\n }\n point = point.anchor;\n }\n }\n\n /**\n * 声明部分:\n * 包含首行定义和(可选的)多行属性扩展\n * <declaration> ::= <tagName=token> <headerLine> <extensionLines>\n * */\n declaration(ctx: ProgramCtx) {\n const [hookType, value] = this.tokenizer._hook({});\n let _node: any;\n if (value === 'if' || value === 'else' || value === 'fail') {\n return this.condDeclaration(ctx);\n } else if (value === 'for') {\n return this.forDeclaration();\n } else if (hookType) {\n const data = this.getData();\n // 静态 1. Component,2. bobe 返回的 render 方法\n if (hookType === 'static') {\n // 传组件 class 或 片段\n if (typeof value === 'function') {\n _node = this.componentOrFragmentDeclaration(value, ctx);\n }\n // 其余类型不允许静态插值\n else {\n throw new SyntaxError(`declaration 不支持 ${value} 类型的静态插值`);\n }\n }\n // 动态插值\n // 一定是 js 表达式\n // 1. 返回基础值,创建文本节点 createNode('text', String(value))\n // 2. 返回 组件,创建组件节点\n // 3. 返回 片段\n // TODO: 后续考虑动态组件\n else {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n const val = data[Keys.Raw][value];\n if (typeof val === 'function') {\n _node = this.componentOrFragmentDeclaration(val, ctx);\n }\n // 字符\n else {\n const str = valueIsMapKey ? value : this.getFn(data, value);\n _node = this.createNode('text');\n this.onePropParsed(data, _node, 'text', str, valueIsMapKey, false);\n }\n }\n } else {\n _node = this.createNode(value);\n }\n this.tokenizer.nextToken(); // 跳过 node 本身,token -> id\n this.headerLine(_node);\n this.extensionLines(_node);\n // 组件用完,切换回 真实node 的方法\n if (_node.__logicType & TokenizerSwitcherBit) {\n this.onePropParsed = this.oneRealPropParsed;\n this.tokenizer = _node.tokenizer;\n }\n return _node;\n }\n\n forDeclaration() {\n const arrExp = this.tokenizer.nextToken().value as string;\n this.tokenizer.nextToken(); // 分号\n const itemToken = this.tokenizer.nextToken(); // item 表达式\n const isDestruct = itemToken.type === TokenType.InsertionExp;\n let itemExp: string | ((value: any) => any) = itemToken.value as string,\n vars: string[];\n if (isDestruct) {\n itemExp = '{' + itemExp + '}';\n vars = itemExp.match(jsVarRegexp);\n const varStr = vars.join(',');\n itemExp = new Function(itemExp, `return {${varStr}};`) as any;\n }\n let indexName: string,\n keyExp: string,\n char = this.tokenizer.peekChar();\n if (char === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') keyExp = this.tokenizer.jsExp().value as string;\n } else if (char === '\\n') {\n }\n // 下一个是 indexName\n else {\n indexName = this.tokenizer.nextToken().value as string;\n if (this.tokenizer.peekChar() === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') keyExp = this.tokenizer.jsExp().value as string;\n }\n }\n\n const owner = this.ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n const prevSibling = this.ctx.prevSibling;\n const forNode: ForNode = {\n __logicType: FakeType.For,\n snapshot: this.tokenizer.snapshot(['dentStack', 'isFirstToken']),\n realParent: this.ctx.realParent,\n prevSibling,\n realBefore: prevSibling?.realAfter || prevSibling,\n realAfter: null,\n arr: null,\n arrSignal: null,\n itemExp,\n indexName,\n getKey: null,\n children: [],\n effect: null,\n owner,\n vars,\n i: 0\n };\n if (keyExp) {\n forNode.getKey = new Function('data', `let v;with(data){v=${keyExp}};return v;`) as any;\n }\n window['for1'] = forNode;\n\n const data = this.getData();\n\n const cells = data[Keys.Meta].cells;\n const hasArrExpKey = Reflect.has(data[Keys.Raw], arrExp);\n const arrSignal = hasArrExpKey\n ? // 有 key 直接拿\n (data[arrExp], cells.get(arrExp))\n : // 无key\n new Computed(this.getFn(data, arrExp));\n forNode.arrSignal = arrSignal;\n // 由于此处 snapshot 多配置了2个属性,更新渲染时 应该忽略这个两个属性\n forNode.realAfter = this.insertAfterAnchor('for-after');\n\n // 去除 dentStack 和 isFirstToken\n const { dentStack, isFirstToken, ...snapshotForUpdate } = forNode.snapshot;\n\n let isFirstRender = true;\n forNode.effect = new Effect(() => {\n let arr: any[] = arrSignal.get();\n // 订阅 iter\n arr[Keys.Iterator];\n const prevCtx = getPulling();\n setPulling(null);\n // 使用原始数组避免 index 依赖\n forNode.arr = arr = toRaw(arr);\n const children = forNode.children;\n // 首屏渲染\n if (isFirstRender) {\n const len = arr.length;\n for (let i = len; i--; ) {\n const item = this.createForItem(forNode, i, data);\n item.realAfter = this.insertAfterAnchor('for-item-after');\n item.realBefore = this.insertAfterAnchor('for-item-before');\n item.realParent = forNode.realParent;\n children[i] = item;\n }\n const firstInsert = children[0];\n // 有子项进行计算\n if (firstInsert) {\n this.tokenizer.nextToken(); // 是 NewLine\n this.tokenizer.nextToken(); // 是 Indent\n }\n // 没有子项,跳过\n else {\n this.tokenizer.skip();\n }\n }\n // 更新渲染\n else {\n const oldLen = children.length;\n const newLen = arr.length;\n const minLen = Math.min(oldLen, newLen);\n const newChildren: ForItemNode[] = [];\n if (!forNode.getKey) {\n // 删除\n if (newLen < oldLen) {\n for (let i = oldLen - 1; i >= newLen; i--) {\n this.removeForItem(children, i);\n }\n }\n // 新增\n if (oldLen < newLen) {\n const lastAfter = children.at(-1)?.realAfter || forNode.realBefore;\n for (let i = newLen - 1; i >= oldLen; i--) {\n this.insertForItem(forNode, i, data, newChildren, lastAfter, snapshotForUpdate);\n }\n }\n for (let i = minLen; i--; ) {\n const child = children[i];\n newChildren[i] = child;\n this.reuseForItem(child, arr[i], itemExp, i, indexName);\n }\n }\n // 带 key 列表\n else {\n let s = 0,\n e1 = oldLen - 1,\n e2 = newLen - 1;\n // 掐头\n while (s <= e1 && s <= e2) {\n const child = children[s];\n const old = child.key;\n const itemData = this.getItemData(forNode, s, data);\n const key = forNode.getKey(itemData);\n if (old === key) {\n newChildren[s] = child;\n this.reuseForItem(child, arr[s], itemExp, s, indexName);\n s++;\n } else {\n break;\n }\n }\n // 去尾\n while (s <= e1 && s <= e2) {\n const child = children[e1];\n const old = child.key;\n const itemData = this.getItemData(forNode, e2, data);\n const key = forNode.getKey(itemData);\n if (old === key) {\n newChildren[e2] = child;\n this.reuseForItem(child, arr[e2], itemExp, e2, indexName);\n e1--;\n e2--;\n } else {\n break;\n }\n }\n // 纯新增\n if (s > e1) {\n if (s <= e2) {\n // s > 0 纯尾增\n // 否则 纯尾增\n const firstBefore = s > 0 ? children[s - 1]?.realAfter || forNode.realBefore : forNode.realBefore;\n for (let i = e2; i >= s; i--) {\n this.insertForItem(forNode, i, data, newChildren, firstBefore, snapshotForUpdate);\n }\n }\n }\n // 纯尾删\n else if (s > e2) {\n if (s <= e1) {\n for (let i = e1; i >= s; i--) {\n this.removeForItem(children, i);\n }\n }\n }\n // 混合\n else {\n let s1 = s,\n s2 = s;\n const mixLen = e2 - s2 + 1;\n /** key -> 旧 index */\n const key2new = new Map<any, number>();\n for (let i = s2; i <= e2; i++) {\n // TODO: 这里只求 key 可以不用响应式\n const itemData = this.getItemData(forNode, i, data);\n const key = forNode.getKey(itemData);\n key2new.set(key, i);\n }\n /*----------------- 构建 new2oldI -----------------*/\n let maxIncNewI = -1;\n let hasMove = false;\n const new2oldI = new Array<number>(mixLen).fill(-1);\n for (let i = s1; i <= e1; i++) {\n const key = children[i].key;\n const newI = key2new.get(key);\n // 不在新列表中,删除\n if (newI == null) {\n this.removeForItem(children, i);\n continue;\n }\n const child = children[i];\n // 复用\n newChildren[newI] = child;\n this.reuseForItem(child, arr[newI], itemExp, newI, indexName);\n new2oldI[newI - s2] = i;\n // 剩余的 key 是新增\n key2new.delete(key);\n // 如果 newI 比已处理的最大 newI 要小,说明索引较小的项反而靠后,即发生移动\n if (newI < maxIncNewI) {\n hasMove = true;\n } else {\n maxIncNewI = newI;\n }\n }\n /*----------------- 纯增删 -----------------*/\n if (!hasMove) {\n // 按顺序从前往后插入即可\n key2new.forEach((i, key) => {\n const before = i === 0 ? forNode.realBefore : newChildren[i - 1].realAfter;\n this.insertForItem(forNode, i, data, newChildren, before, snapshotForUpdate);\n });\n } else {\n /*----------------- 增删移 -----------------*/\n const incI = macInc(new2oldI),\n incLen = incI.length;\n /** p1 表示新数组中的索引 */\n let p1: number,\n /** p2 表示最长递增子序列的索引 */\n p2: number;\n // 从 s2 开始对比\n for (p1 = s2, p2 = 0; p1 <= e2; p1++) {\n const oldI = new2oldI[p1];\n /** 新增 */\n if (oldI === -1) {\n const before = p1 === 0 ? forNode.realBefore : newChildren[p1 - 1].realAfter;\n this.insertForItem(forNode, p1, data, newChildren, before, snapshotForUpdate);\n continue;\n }\n\n /** 锚点在 new2oldI 组中的索引 */\n const staticIdx = incI[p2] + s2;\n // 匹配到锚点,复用节点,已在构建 new2oldI 时完成\n if (p1 === staticIdx) {\n p2 <= incLen && p2++;\n continue;\n }\n\n // p1 点位需要移动, 数据复用在 new2oldI 构建时已完成,这里处理 dom 移动即可\n let before = p1 === 0 ? forNode.realBefore : newChildren[p1 - 1].realAfter;\n const child = newChildren[p1];\n\n const { realBefore, realAfter, realParent } = child;\n\n let point = realBefore,\n next: any;\n do {\n next = this.nextSib(point);\n this.insertAfter(realParent, point, before);\n // this.handleInsert(realParent, point, before);\n before = point;\n if (point === realAfter) break;\n point = next;\n } while (true);\n }\n }\n }\n }\n forNode.children = newChildren;\n }\n isFirstRender = false;\n setPulling(prevCtx);\n\n return isDestroy => {\n if (isDestroy) {\n for (let i = 0; i < forNode.children.length; i++) {\n const item = forNode.children[i];\n item.effect.dispose();\n }\n }\n };\n });\n return forNode.children[0] || forNode;\n }\n\n insertForItem(\n forNode: ForNode,\n i: number,\n parentData: any,\n newChildren: ForItemNode[],\n before: any,\n snapshotForUpdate: any\n ) {\n const item = this.createForItem(forNode, i, parentData);\n newChildren[i] = item;\n let realAfter = this.createAnchor('for-item-after');\n this.handleInsert(forNode.realParent, realAfter, before);\n\n let realBefore = this.createAnchor('for-item-before');\n this.handleInsert(forNode.realParent, realBefore, before);\n\n item.realBefore = realBefore;\n item.realAfter = realAfter;\n\n this.tokenizer = forNode.owner.tokenizer;\n /**\n * resume 后 token = null, 下个字符是 \\n\n */\n this.tokenizer.resume(snapshotForUpdate);\n // 解析到缩进小于 base 时自动 eof\n this.tokenizer.useDedentAsEof = false;\n runWithPulling(() => {\n this.program(forNode.realParent, forNode.owner, realBefore, item);\n }, item.effect);\n }\n\n removeForItem(children: ForItemNode[], i: number) {\n const child = children[i];\n this.removeLogicNode(child);\n this.remove(child.realBefore);\n this.remove(child.realAfter);\n // 释放删除项 effect\n child.effect.dispose();\n }\n\n reuseForItem(child: ForItemNode, data: any, itemExp: string | ((value: any) => any), i: number, indexName?: string) {\n if (typeof itemExp === 'string') {\n child.data[itemExp] = data;\n if (indexName) {\n child.data[indexName] = i;\n }\n } else {\n indexName = indexName || KEY_INDEX;\n child.data[indexName] = i;\n }\n }\n\n forItemId = 0;\n createForItem(forNode: ForNode, i: number, parentData: any) {\n let forItemNode: ForItemNode;\n let data: Record<any, any>;\n /**\n * 考虑到 effect 是嵌套的,这种情况每次 forNodeEffect 更新会导致上次产生的内部 setPropsEffect 被自动释放\n * 这是响应式 effect 嵌套的默认特性\n * forNodeEffect(() => {\n * 这里通过 setPulling 模拟嵌套 effect\n * setPropsEffect(() => {\n * })\n * })\n * 因此我们需要让情况变成这样,内部的 effect 交由 forItemNode.effect 接管\n * 这个 scope 是全局的,即指定了参数 parentScope = null\n * 这样外部的 effect 不再自动释放 setPropsEffect\n * 这么的目的是我们能在 diff 过程中手动控制释放 forItemNode.effect\n * globalScope(() => {\n * setPropsEffect(() => {\n * })\n * })\n *\n * 1. runWithPulling 避免 scope 被 effect 收集\n * 2. scope 保证 signal 被 scope 管理\n */\n // TODO: scope 目前认为 parentScope 就是 其下游节点,恢复 pulling 会出现问题\n const scope = new Scope(() => {});\n scope.scope = null;\n runWithPulling(() => {\n scope.get();\n }, null);\n // 考虑到生成每项数据需要依赖原始响应式数组,因此无法放在 scope 里\n // 使得 for effect 依赖原响应式数组,每一项\n data = this.getItemData(forNode, i, parentData);\n forItemNode = {\n id: this.forItemId++,\n __logicType: FakeType.ForItem,\n realParent: null,\n realBefore: null,\n realAfter: null,\n forNode,\n key: forNode.getKey?.(data),\n effect: null,\n data\n };\n forItemNode.effect = scope;\n return forItemNode;\n }\n\n getItemData(forNode: ForNode, i: number, parentData: any) {\n const { arr, itemExp, vars, arrSignal, getKey } = forNode;\n let indexName = forNode.indexName;\n let data: Record<any, any>;\n if (typeof itemExp === 'string') {\n data = deepSignal(\n indexName\n ? {\n [itemExp]: arr[i],\n [indexName]: i\n }\n : {\n [itemExp]: arr[i]\n },\n getPulling()\n );\n } else {\n indexName = indexName ?? KEY_INDEX;\n const rawData = { [indexName]: i };\n data = deepSignal(rawData, getPulling());\n const computedData = new Computed(() => itemExp(arrSignal.get()[getKey ? data[indexName] : i]));\n const cells = data[Keys.Meta].cells;\n for (let i = 0; i < vars.length; i++) {\n const name = vars[i];\n rawData[name] = undefined;\n cells.set(name, new Computed(() => computedData.get()[name]));\n }\n }\n\n Object.setPrototypeOf(data, parentData);\n return data;\n }\n\n getData() {\n const { node } = this.ctx.stack.peekByType(NodeSort.CtxProvider);\n return node.data;\n }\n\n /**\n * key 元素,组件的 key\n * value\n * 1. 静态类型值\n * 2. 插值计算 函数,可以考虑 使用 effect 或 computed 做处理\n *\n * mapKey 映射, 对应子组件的属性\n * */\n onePropParsed(\n data: Store,\n node: any,\n key: string,\n value: any,\n valueIsMapKey: boolean,\n isFn: boolean,\n hookI?: number\n ) {\n if (isFn) {\n this.setProp(node, key, value, hookI);\n } else if (typeof value === 'function') {\n new Effect(() => {\n const res = value();\n this.setProp(node, key, res, hookI);\n });\n } else if (valueIsMapKey) {\n new Effect(() => {\n const res = data[value];\n this.setProp(node, key, res, hookI);\n });\n }\n // 静态数据\n else {\n this.setProp(node, key, value, hookI);\n }\n }\n\n oneRealPropParsed: Interpreter['onePropParsed'] = this.onePropParsed.bind(this);\n\n componentOrFragmentDeclaration(ComponentOrRender: BobeUI | typeof Store, ctx: ProgramCtx) {\n // 先进行 attr 映射,或建立 signal 连接,才能开始 render\n // 必须等待 attr 解析完毕\n let Component: typeof Store, render: BobeUI, child: any;\n\n const isCC = (ComponentOrRender as any).prototype instanceof Store;\n if (isCC) {\n Component = ComponentOrRender as any;\n child = Component.new();\n } else {\n render = ComponentOrRender as BobeUI;\n const boundStore = render.boundStore;\n // 使用原型链来继承 store 的数据\n child = deepSignal({}, getPulling(), true);\n Object.setPrototypeOf(child, boundStore);\n }\n\n const node: ComponentNode = {\n __logicType: isCC ? FakeType.Component : FakeType.Fragment,\n realParent: ctx.realParent,\n realBefore: null,\n realAfter: null,\n data: child,\n tokenizer: render ? render(true) : (child['ui'] as BobeUI)(true)\n };\n this.onePropParsed = (data, _, key, value, valueIsMapKey, isFn, hookI) => {\n if (isFn) {\n child[Keys.Raw][key] = value;\n }\n // key 映射\n else if (valueIsMapKey) {\n shareSignal(data, value, child, key);\n }\n // 动态值内置 computed 处理\n else {\n const meta = child[Keys.Meta];\n const cells: Map<string, Signal> = meta.cells;\n if (typeof value === 'function') {\n const computed = new Computed(value);\n cells.set(key, computed as any);\n child[Keys.Raw][key] = undefined;\n }\n // 静态数据\n else {\n cells.set(key, { get: () => value } as Signal);\n child[Keys.Raw][key] = value;\n }\n }\n };\n node.realAfter = this.insertAfterAnchor('component-after');\n return node;\n }\n getFn(data: any, expression: string | number) {\n return new Function('data', `let v;with(data){v=${expression}};return v;`).bind(undefined, data);\n }\n // TODO: 优化代码逻辑,拆分 if elseif else\n condDeclaration(ctx: ProgramCtx) {\n const { prevSibling } = ctx;\n const keyWord = this.tokenizer.token;\n const expToken = this.tokenizer.condExp(); // keyWord => exp\n const value = expToken.value as string | number;\n const isElse = keyWord.value === 'else';\n const isIf = keyWord.value === 'if';\n const preIsCond = prevSibling?.__logicType & CondBit;\n const data = this.getData();\n // @ts-ignore\n const noCond = value === true;\n const valueIsMapKey = !noCond && Reflect.has(data[Keys.Raw], value);\n const owner = ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n const ifNode: IfNode = {\n __logicType: isElse ? FakeType.Else : isIf ? FakeType.If : FakeType.Fail,\n // 此时 token 是 exp, 下次解析 从 \\n 开始\n snapshot: this.tokenizer.snapshot(),\n realParent: null,\n realBefore: null,\n realAfter: null,\n condition: null,\n preCond: preIsCond ? prevSibling : null,\n isFirstRender: true,\n effect: null,\n owner,\n data,\n };\n let signal: SignalNode;\n\n switch (keyWord.value) {\n case 'if':\n if (valueIsMapKey) {\n // 确保 signal 已生成\n runWithPulling(() => data[value], null);\n // 拿到 signal\n const { cells } = data[Keys.Meta];\n signal = cells.get(value);\n } else {\n const fn = this.getFn(data, value);\n // 是 getter 使用 computed 计算出一个 signal\n signal = new Computed(fn);\n }\n break;\n case 'else':\n // 纯 else\n if (noCond) {\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n // else 的条件判断应该停止在第一个访问到的 if 节点\n if (point.__logicType === FakeType.If) {\n break;\n }\n point = point.preCond;\n }\n return true;\n });\n }\n // else if xxx\n else {\n const fn = valueIsMapKey ? null : this.getFn(data, value);\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n // else 的条件判断应该停止在第一个访问到的 if 节点\n if (point.__logicType === FakeType.If) {\n break;\n }\n point = point.preCond;\n }\n return valueIsMapKey ? data[value] : fn();\n });\n }\n break;\n case 'fail':\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n point = point.preCond;\n }\n return true;\n });\n break;\n default:\n break;\n }\n\n ifNode.condition = signal;\n // 不论是否执行 if 都应该插入 anchor 节点用于后续\n ifNode.realAfter = this.insertAfterAnchor(`${keyWord.value}-after`);\n\n const ef = effect(\n ({ val }) => {\n // 如果值是 true 则直接放行让下面的节点自然执行插入\n if (val) {\n if (ifNode.isFirstRender) {\n this.tokenizer.nextToken(); // token = NEWLINE\n this.tokenizer.nextToken(); // token = ID\n }\n // 更新渲染\n else {\n // 切换到对应 Switcher 的 tokenizer\n this.tokenizer = ifNode.owner.tokenizer;\n /**\n * resume 后 token = null, 下个字符是 \\n\n */\n this.tokenizer.resume(ifNode.snapshot);\n this.tokenizer.useDedentAsEof = false;\n\n // 由于首屏渲染直接放行,导致 if 子节点首屏产生的 effect 不能被管理\n // 在 effect 中创建的子组件 sub effect 能被管理\n // 当 if = false 时,不需要执行销毁子 effect 操作\n // 因为当外部 effect 重新执行时,上次尝试的 sub effect 自动销毁\n // 前提是 sub effect 是嵌套执行的\n this.program(ifNode.realParent, ifNode.owner, ifNode.realBefore, ifNode);\n }\n }\n // 删除逻辑块\n else {\n if (ifNode.isFirstRender) {\n // 此时 token 是 condition, i => \\n\n this.tokenizer.skip(); // skipStr\n }\n // 更新渲染,删除所有节点\n else {\n this.removeLogicNode(ifNode);\n }\n }\n ifNode.isFirstRender = false;\n },\n [signal]\n );\n ifNode.effect = ef;\n return ifNode;\n }\n\n removeLogicNode(node: LogicNode) {\n const { realBefore, realAfter, realParent } = node;\n let point = realBefore ? this.nextSib(realBefore) : this.firstChild(realParent);\n while (point !== realAfter) {\n const next = this.nextSib(point);\n this.remove(point, realParent, realBefore);\n point = next;\n }\n }\n /**\n * <extensionLines> ::= PIPE <attributeList> NEWLINE <extensionLines>\n * | ε\n */\n extensionLines(_node: any) {\n while (1) {\n // 终止条件,下一行不是 pipe\n if ((this.tokenizer.token.type & TokenType.Pipe) === 0) {\n return;\n }\n // 开始解析 attributeList\n this.tokenizer.nextToken(); // PIPE\n this.attributeList(_node);\n // 文件结束了,通常不会发生\n if ((this.tokenizer.token.type & TokenType.NewLine) === 0) {\n return;\n }\n // 换行\n this.tokenizer.nextToken(); // NEWLINE\n }\n }\n\n /**\n * 首行:\n * 节点名称 + 属性列表 + 换行\n * <headerLine> ::= <attributeList> NEWLINE\n */\n headerLine(_node: any) {\n this.attributeList(_node);\n this.tokenizer.nextToken(); // NEWLINE\n }\n\n /**\n * 属性列表:\n * 可以是空的,或者包含多个属性\n * <attributeList> ::= <attribute> <attributeList>\n * | ε\n *\n * <attribute> ::= <key> = <value>\n * 1. 普通节点 执行 setProps 🪝\n * 2. 组件节点 收集映射关系,或 产生 computed\n */\n attributeList(_node: any) {\n let key: string, eq: any;\n const data = this.getData();\n while ((this.tokenizer.token.type & TokenType.NewLine) === 0) {\n // 取 key\n if (key == null) {\n key = this.tokenizer.token.value as any;\n }\n // 取 =\n else if (eq == null) {\n eq = '=';\n }\n // 取 value\n else {\n const [hookType, value, hookI] = this.tokenizer._hook({});\n const rawVal = data[Keys.Raw][value];\n const isFn = typeof rawVal === 'function';\n // 动态的要做成函数\n if (hookType === 'dynamic') {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n const fn = isFn ? rawVal : valueIsMapKey ? value : this.getFn(data, value);\n this.onePropParsed(data, _node, key, fn, valueIsMapKey, isFn, hookI);\n }\n // 静态\n else if (hookType === 'static') {\n this.onePropParsed(data, _node, key, value, false, isFn, hookI);\n }\n // 基础数据字面量\n else {\n this.onePropParsed(data, _node, key, value, false, isFn, hookI);\n }\n key = null;\n eq = null;\n }\n this.tokenizer.nextToken();\n }\n }\n config(opt: TerpConf) {\n Object.assign(this, opt);\n this.opt = opt;\n }\n\n createNode(name: string) {\n return {\n name,\n props: {},\n nextSibling: null\n };\n }\n\n nextSib(node: any) {\n return node.nextSibling;\n }\n\n firstChild(node: any) {\n return node.firstChild;\n }\n\n createAnchor(name: string) {\n return {\n name,\n nextSibling: null\n };\n }\n\n insertAfter(parent: any, node: any, prev: any) {\n return this.defaultInsert(parent, node, prev);\n }\n defaultInsert(parent: any, node: any, prev: any) {\n if (prev) {\n const next = prev.nextSibling;\n prev.nextSibling = node;\n node.nextSibling = next;\n } else {\n const next = parent.firstChild;\n parent.firstChild = node;\n node.nextSibling = next;\n }\n }\n\n remove(node: any, parent?: any, prev?: any) {\n return this.defaultRemove(node, parent, prev);\n }\n\n defaultRemove(node: any, parent: any, prevSibling: any) {\n const next = node.nextSibling;\n if (prevSibling) {\n prevSibling.nextSibling = next;\n }\n if (parent.firstChild === node) {\n parent.firstChild = next;\n }\n }\n\n setProp(node: any, key: string, value: any, hookI?: number) {\n node.props[key] = value;\n }\n}\n","import { Store } from \"aoye\";\nimport { Interpreter } from \"./terp\";\nimport { Tokenizer } from \"./tokenizer\";\nimport { BobeUI, ComponentNode, CustomRenderConf, FakeType } from \"./type\";\n\nexport function bobe(fragments: TemplateStringsArray, ...values: any[]) {\n const ui: BobeUI = function ui(isSub: boolean) {\n const tokenizer = new Tokenizer(({ i }) => {\n return values[i];\n }, isSub);\n tokenizer.init(Array.from(fragments));\n return tokenizer;\n };\n ui.boundStore = Store.Current;\n return ui;\n}\n\n// render -> options\nexport function customRender(option: CustomRenderConf) {\n // 保存 options\n return function render<T>(Ctor: typeof Store, root: any) {\n const store = Ctor.new();\n const tokenizer: Tokenizer = store['ui'](false);\n const terp = new Interpreter(tokenizer);\n terp.config(option);\n\n const componentNode: ComponentNode = {\n __logicType: FakeType.Component,\n realParent: root,\n data: store,\n tokenizer\n };\n\n terp.program(root, componentNode);\n // ui => bobe`` 返回的函数\n return [componentNode, store];\n };\n}"],"names":["TokenType","FakeType","CondBit","If","Fail","Else","LogicalBit","For","ForItem","Component","Fragment","TokenizerSwitcherBit","NodeSort","TerpEvt","Tokenizer","TabSize","Tab","Array","from","length","join","EofId","Date","now","DedentId","needIndent","isFirstToken","dentStack","i","line","column","preCol","preI","needLoc","handledTokens","waitingTokens","Queue","source","constructor","hook","useDedentAsEof","setToken","Indent","next","getCurrentPos","offset","resume","_snapshot","token","undefined","Object","assign","snapshot","keys","snap","clone","k","slice","skip","logicDentLen","skipFragment","char","code","_this$getDentValue","getDentValue","value","isEmptyLine","currLen","expLen","SyntaxError","shorterThanBaseDentEof","pop","Dedent","String","push","type","typeName","loc","nextToken","setCode","trimEnd","tokenize","console","log","JSON","stringify","isEof","Identifier","len","item","shift","outer","dent","newLine","assignment","pipe","Semicolon","__IS_COMPILER__","str","braceToken","brace","InsertionExp","handled","staticIns","isNum","number","matchIdStart2","identifier","error","condExp","trimmed","trim","jsExp","nextC","peekChar","Assign","Pipe","innerBrace","StaticInsExp","inComment","inString","count","backslashCount","nextChar","NewLine","_this$getDentValue2","indentHasLen","prevLen","yes","realValue","continuousBackslashCount","memoCount","Number","eof","Eof","HookId","hookI","_hook","props","isDynamicHook","isStaticHook","indexOf","hookType","res","init","fragments","fragment","NodeType","Compiler","_applyDecs$e","_slicedToArray","_applyDecs","NodeHook","NodeLoc","TokenLoc","e","_initProto","tokenizer","hooks","parseProgram","body","node","templateNode","Program","start","end","handleChildren","children","child","_this$tokenizer$_hook","_this$tokenizer$_hook2","parseConditionalNode","parseLoopNode","parseComponentNode","parseElementNode","tagToken","tagName","headerLineAndExtensions","componentName","propsAdded","call","Element","keyword","condition","parsePropertyValue","collection","itemToken","isDestruct","key","index","attributeList","parseProperty","Property","parsePropertyKey","PropertyKey","_this$tokenizer$_hook3","_this$tokenizer$_hook4","DynamicValue","StaticValue","target","context","_node","result","name","enter","leave","MultiTypeStack","typeTops","stack","bits","newNode","types","prevByType","bit","poppedNode","peekByType","cat","peekType","at","peek","macInc","arr","candyLast","it","toPrev","Int32Array","mid","j","prev","KEY_INDEX","Interpreter","isLogicNode","__logicType","rootComponent","program","root","componentNode","before","ctxProvider","Real","CtxProvider","TokenizerSwitcher","Logic","rootLen","ctx","realParent","prevSibling","current","rootPulling","getPulling","handleInsert","setPulling","effect","realBefore","declaration","_stack$pop","_stack$pop2","_stack$pop2$","parent","sort","prevSameType","parentLogic","switcher","_ref","forNode","insertAfterAnchor","_this$ctx","afterAnchor","createAnchor","parentComponent","insertAfter","realAfter","childCmp","getPrevRealSibling","point","lastChild","anchor","condDeclaration","forDeclaration","data","getData","componentOrFragmentDeclaration","valueIsMapKey","Reflect","has","Keys","Raw","val","getFn","createNode","onePropParsed","headerLine","extensionLines","oneRealPropParsed","arrExp","itemExp","vars","match","jsVarRegexp","varStr","Function","indexName","keyExp","owner","arrSignal","getKey","window","cells","Meta","hasArrExpKey","get","Computed","_forNode$snapshot","snapshotForUpdate","_objectWithoutProperties","_excluded","isFirstRender","Effect","Iterator","prevCtx","toRaw","createForItem","firstInsert","oldLen","newLen","minLen","Math","min","newChildren","removeForItem","lastAfter","insertForItem","reuseForItem","s","e1","e2","old","itemData","getItemData","firstBefore","s1","s2","mixLen","key2new","Map","set","maxIncNewI","hasMove","new2oldI","fill","newI","delete","forEach","incI","incLen","p1","p2","oldI","staticIdx","nextSib","isDestroy","dispose","parentData","runWithPulling","removeLogicNode","remove","forItemId","forItemNode","scope","Scope","id","deepSignal","rawData","computedData","setPrototypeOf","_this$ctx$stack$peekB","isFn","setProp","bind","ComponentOrRender","render","isCC","prototype","Store","new","boundStore","_","shareSignal","meta","computed","expression","keyWord","expToken","isElse","isIf","preIsCond","noCond","ifNode","preCond","signal","fn","ef","firstChild","eq","rawVal","config","opt","nextSibling","defaultInsert","defaultRemove","bobe","values","ui","isSub","Current","customRender","option","Ctor","store","terp"],"mappings":"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"}
|