bobe 0.0.61 → 0.0.63
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 +40 -20
- package/dist/bobe.cjs.js.map +1 -1
- package/dist/bobe.compiler.cjs.js +40 -20
- package/dist/bobe.compiler.cjs.js.map +1 -1
- package/dist/bobe.compiler.esm.js +42 -22
- package/dist/bobe.compiler.esm.js.map +1 -1
- package/dist/bobe.esm.js +42 -22
- package/dist/bobe.esm.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.umd.js +40 -20
- package/dist/index.umd.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bobe.compiler.esm.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","../src/context.ts","../src/signal-warp.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 String = 0b0000_0000_0000_0000_0000_0100_0000_0000,\n Number = 0b0000_0000_0000_0000_0000_1000_0000_0000,\n Boolean = 0b0000_0000_0000_0000_0001_0000_0000_0000,\n Null = 0b0000_0000_0000_0000_0010_0000_0000_0000,\n Undefined = 0b0000_0000_0000_0000_0100_0000_0000_0000,\n Comment = 0b0000_0000_0000_0000_1000_0000_0000_0000\n}\n\nexport const BaseTokenType =\n TokenType.String | TokenType.Number | TokenType.Boolean | TokenType.Null | TokenType.Undefined;\nexport const ValueTokenType = BaseTokenType | TokenType.InsertionExp | TokenType.StaticInsExp;\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 Context = 0b0000_0000_0000_0000_0000_0000_1000_0000,\n DynamicText = 0b0000_0000_0000_0000_0000_0001_0000_0000,\n Tp = 0b0000_0000_0000_0000_0000_0010_0000_0000\n}\n\nexport const CondBit = FakeType.If | FakeType.Fail | FakeType.Else;\n// export const LogicalBit =\n// 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 FakeType.DynamicText;\n\n/** 条件节点、ForItem节点、Context节点 */\nexport const ContextBit =\n FakeType.If | FakeType.Fail | FakeType.Else | FakeType.ForItem | FakeType.Context | FakeType.Tp;\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 EffectNode = 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 /** context 关键字对应的节点 */\n Context = 0b0000_0000_0000_0000_0000_0000_0010_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');\nexport const FakeNode = Symbol('fake-node');\n\nexport type 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<\n Interpreter,\n | 'createNode'\n | 'setProp'\n | 'insertAfter'\n | 'remove'\n | 'createAnchor'\n | 'firstChild'\n | 'nextSib'\n | 'beforeIndent'\n | 'leaveNode'\n | 'leaveLogicNode'\n | 'beforeLogicIndent'\n >\n> & {\n noopEffect?: boolean;\n};\nexport type CustomRenderConf = Pick<\n TerpConf,\n | 'createNode'\n | 'setProp'\n | 'insertAfter'\n | 'remove'\n | 'createAnchor'\n | 'firstChild'\n | 'nextSib'\n | 'beforeIndent'\n | 'leaveNode'\n | 'leaveLogicNode'\n | 'beforeLogicIndent'\n | 'noopEffect'\n> & {\n /** program() 之后、flushMicroEffectManual() 之前调用 */\n onBeforeFlush?: () => void;\n};\n\nexport type Hook = (props: HookProps) => any;\n\nexport type HookType = 'dynamic' | 'static';\n\nexport enum ParseErrorCode {\n UNCLOSED_BRACE = 9001,\n UNCLOSED_STRING,\n UNCLOSED_STATIC_INS,\n INCONSISTENT_INDENT,\n INDENT_MISMATCH,\n MISSING_ASSIGN,\n INVALID_TAG_NAME,\n INVALID_PROP_KEY,\n ELSE_WITHOUT_IF,\n EMPTY_IF_BODY,\n EMPTY_FOR_BODY,\n MISSING_FOR_COLLECTION,\n MISSING_FOR_SEMICOLON,\n MISSING_FOR_ITEM,\n MISSING_COMMENT_SECOND_SLASH,\n MISSING_PROP_ASSIGNMENT,\n PIPE_IN_WRONG_CONTEXT\n}\nexport type ParseError = {\n code: ParseErrorCode;\n message: string;\n loc: SourceLocation;\n};\n\n/** tokenizer 抛出的带位置信息的语法错误 */\nexport class ParseSyntaxError extends SyntaxError {\n code: ParseErrorCode;\n loc: SourceLocation;\n constructor(code: ParseErrorCode, message: string, loc: SourceLocation) {\n super(message);\n this.code = code;\n this.loc = loc;\n }\n}\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 UI<T = any> = {\n /** 在哪个 Store 声明的 */\n boundStore: Store;\n __BOBE_IS_UI: true;\n /** 用户声明片段内可用的 props */\n defineProps?: T;\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 /** 响应式版本:数组为 proxy、Map/Set 的 item 已被 deepSignal 包装 */\n reactiveArr: any[];\n keys: string[] | null;\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 context: 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 context: any;\n};\n\n/** data 是 map<storeKey, store> */\nexport type ContextNode = Omit<LogicNode, 'data'> & {\n context: any;\n};\nexport type TpNode = LogicNode & {\n tpData: any;\n effect: Effect;\n contentBefore: any;\n contentAfter: any;\n owner: ComponentNode | FragmentNode;\n snapshot: ReturnType<Tokenizer['snapshot']>;\n};\n\nexport type DynamicNode = Omit<LogicNode, 'data'> & {\n tokenizer: Tokenizer;\n /** 模版片段快照 */\n fragmentSnapshot?: ReturnType<Tokenizer['snapshot']>;\n /** 渲染模版片段前的 快照,渲染完成后用于恢复 */\n resumeSnapshot?: ReturnType<Tokenizer['snapshot']>;\n snapshot: ReturnType<Tokenizer['snapshot']>;\n owner: ComponentNode | FragmentNode;\n data?: any;\n parentDataProvider: any;\n effect: Effect;\n textNode: any;\n};\n\nexport type FragmentNode = LogicNode & {\n tokenizer: Tokenizer;\n fragmentSnapshot?: ReturnType<Tokenizer['snapshot']>;\n resumeSnapshot?: ReturnType<Tokenizer['snapshot']>;\n};\nexport type ComponentNode = LogicNode & {\n tokenizer: Tokenizer;\n /** 模版片段快照 */\n fragmentSnapshot?: ReturnType<Tokenizer['snapshot']>;\n /** 渲染模版片段前的 快照,渲染完成后用于恢复 */\n resumeSnapshot?: ReturnType<Tokenizer['snapshot']>;\n};\nexport type RootNode = LogicNode & {};\n\nexport type Dep = Signal | Computed | (() => any) | string;\n\nexport const isDep = (target: unknown): target is Dep =>\n target &&\n (target instanceof Signal ||\n target instanceof Computed ||\n typeof target === 'function' ||\n typeof target === 'string');\n","import { escapeMap, isNum, matchId, matchIdStart, matchIdStart2, Queue } from 'bobe-shared';\nimport {\n BaseType,\n Hook,\n HookProps,\n HookType,\n ParseErrorCode,\n ParseSyntaxError,\n Position,\n SourceLocation,\n Token,\n TokenType\n} 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.initIndentWhenUseDedentAsEof();\n // this.waitingTokens.push({\n // type: TokenType.Indent,\n // typeName: TokenType[TokenType.Indent],\n // value: ''\n // })\n }\n }\n initIndentWhenUseDedentAsEof() {\n this.setToken(TokenType.Indent, '');\n this.isFirstToken = true;\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 /** 构造从当前扫描起始位置到模板结尾的 SourceLocation,用于未闭合错误 */\n private unclosedLoc(startOffset: number, startLine: number, startCol: number): SourceLocation {\n const end = this.code.length - 1; // 去掉末尾 EofId 前的位置\n return {\n start: { offset: startOffset, line: startLine, column: startCol },\n end: { offset: end, line: this.line, column: this.column },\n source: this.code.slice(startOffset, end)\n };\n }\n\n private throwUnclosed(\n code: ParseErrorCode,\n message: string,\n startOffset: number,\n startLine: number,\n startCol: number\n ): never {\n throw new ParseSyntaxError(code, message, this.unclosedLoc(startOffset, startLine, startCol));\n }\n\n // /** 恢复至某一个现场,进行 token 重算 */\n resume({ dentStack, waitingTokens, ..._snapshot }: ReturnType<Tokenizer['snapshot']>) {\n this.token = undefined;\n this.needIndent = false;\n this.isFirstToken = true;\n this.dentStack = dentStack ? dentStack.slice() : [0];\n if (waitingTokens) {\n this.waitingTokens = waitingTokens.clone();\n }\n Object.assign(this, _snapshot);\n }\n snapshot(keys?: (keyof Tokenizer)[], dtI = 0): Partial<Tokenizer> {\n const snap = {\n i: this.i + dtI,\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(targetDentLen?: number) {\n if (targetDentLen == undefined) {\n targetDentLen = this.dentStack[this.dentStack.length - 1];\n }\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 > targetDentLen) {\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 new ParseSyntaxError(ParseErrorCode.INCONSISTENT_INDENT, '缩进大小不统一', this.emptyLoc());\n }\n\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n break;\n }\n this.dentStack.pop();\n // 比目标值大,这一行被跳过了,不需要记录反缩进\n if (expLen > targetDentLen) {\n continue;\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, dt = 1) {\n this.token = {\n type,\n typeName: TokenType[type],\n value,\n loc:\n __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 + dt,\n line: this.line,\n column: this.column + dt\n },\n // TODO: 文件名\n source: this.code.slice(this.preI, this.i + dt)\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 // 所有代码已读完且无等待 token,直接返回当前 token 防止死循环\n if (this.i >= this.code.length && !this.waitingTokens.len) return this.token;\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.locStart();\n this.dent();\n this.locEnd();\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 /*----------------- 需要 loc 的 token -----------------*/\n default:\n this.locStart();\n switch (char) {\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 case '/':\n this.comment();\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.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 this.locEnd();\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 throw error;\n } finally {\n this.handledTokens.push(this.token);\n }\n }\n\n locStart() {\n if (__IS_COMPILER__) {\n this.preCol = this.column;\n this.preI = this.i;\n this.needLoc = true;\n }\n }\n locEnd() {\n if (__IS_COMPILER__) {\n this.needLoc = false;\n }\n }\n\n getComment() {\n let value = '/';\n let nextC = this.code[this.i + 1];\n if (nextC !== '/') {\n throw new ParseSyntaxError(ParseErrorCode.MISSING_COMMENT_SECOND_SLASH, '注释开头必须是 //', this.emptyLoc());\n }\n while (this.code[this.i + 1] !== '\\n') {\n this.next();\n value += this.code[this.i];\n }\n return value;\n }\n /**\n * 处理处于行末尾的 comment 例如:\n * div // 这里是注释\n */\n comment() {\n const value = this.getComment();\n // this.next(); // 设置当前字符为 /n\n }\n condExp() {\n this.locStart();\n\n let value = '';\n this.token = null;\n let char = this.code[this.i];\n while (char !== '\\n') {\n if (char === '\"' || char === \"'\") {\n value += char + this.getStr(char);\n }\n value += this.code[this.i];\n this.next();\n char = this.code[this.i];\n }\n // 此时 i -> \\n\n const trimmed = value.replace(/\\/\\/[\\s\\S]+/, '').trim();\n\n this.setToken(TokenType.Identifier, trimmed ? trimmed : true, 0);\n this.handledTokens.push(this.token);\n this.locEnd();\n return this.token;\n }\n isEol(i: number) {\n return this.code[i] === '\\n' || this.code[i] === '/';\n }\n /**\n * 解析到 for 时使用这个方法获取 for 后方的子表达式\n * 表达式通过 “;” 分割\n * // 最多可有三个表达式\n * for arr ; item index; item.key\n * @returns {boolean} 是否含有 key\n */\n public jsExp() {\n this.locStart();\n\n this.token = null;\n let value = '';\n\n let char = this.code[this.i];\n while (char !== ';' && char !== '\\n') {\n if (char === '\"' || char === \"'\") {\n value += char + this.getStr(char);\n }\n value += this.code[this.i];\n this.next();\n char = this.code[this.i];\n }\n this.setToken(TokenType.Identifier, value, 0);\n this.handledTokens.push(this.token);\n this.locEnd();\n return this.token;\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 peekCharIsEol() {\n const char = this.peekChar();\n return char === '\\n' || char === '/';\n }\n\n charIsEol(char: string) {\n return char === '\\n' || char === '/';\n }\n\n private assignment() {\n this.setToken(TokenType.Assign, '=');\n }\n private pipe() {\n this.setToken(TokenType.Pipe, '|');\n }\n private staticIns() {\n const startOffset = this.preI,\n startLine = this.line,\n startCol = this.preCol;\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 if (nextC === undefined) {\n this.throwUnclosed(ParseErrorCode.UNCLOSED_STATIC_INS, '未闭合的 \"${...}\"', startOffset, startLine, startCol);\n }\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 const startOffset = this.preI,\n startLine = this.line,\n startCol = this.preCol;\n let inComment: string,\n count = 0,\n value = '';\n while (1) {\n const char = this.code[this.i];\n if (char === undefined) {\n this.throwUnclosed(ParseErrorCode.UNCLOSED_BRACE, '未闭合的 \"{\"', startOffset, startLine, startCol);\n }\n const nextChar = this.code[this.i + 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 } 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 === '\"') {\n // 此时 i 指向尾 '\n value += char + this.getStr(char);\n }\n // 4. 只有在非字符串、非注释状态下才计数\n else if (char === '{') {\n count++;\n } else if (char === '}') {\n count--;\n }\n }\n\n if (count === 0 && 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 case '/':\n nextC = '/';\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 // 获取到下一个字符是 \\n 为止\n value += this.getComment();\n this.next(); // 设置当前字符为 \\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\n emptyLoc(): SourceLocation {\n const pos = this.getCurrentPos();\n return { start: pos, end: { offset: pos.offset + 1, line: pos.line, column: pos.column + 1 }, source: ' ' };\n }\n private dent() {\n const { value, isEmptyLine } = this.getDentValue();\n if (isEmptyLine) {\n // 这种情况下需要 next ,即后续从 \\n 之后重新开始匹配\n this.needIndent = true;\n this.next();\n return;\n }\n this.needIndent = false;\n // 比较长度,比上个 indent 长,缩进,比上个 indent 短,dedent\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, 0);\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 new ParseSyntaxError(ParseErrorCode.INCONSISTENT_INDENT, '缩进大小不统一', this.emptyLoc());\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), 0);\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' || !matchId(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: any, tokenType: TokenType;\n\n switch (value) {\n case 'null':\n realValue = null;\n tokenType = TokenType.Null;\n break;\n case 'undefined':\n realValue = undefined;\n tokenType = TokenType.Undefined;\n break;\n case 'false':\n realValue = false;\n tokenType = TokenType.Boolean;\n break;\n case 'true':\n realValue = true;\n tokenType = TokenType.Boolean;\n break;\n default:\n realValue = value;\n tokenType = TokenType.Identifier;\n break;\n }\n this.setToken(tokenType, realValue);\n }\n getStr(head: string, parseEscape = true) {\n const startOffset = this.preI,\n startLine = this.line,\n startCol = this.preCol;\n let value = '';\n let nextC;\n let continuousBackslashCount = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n if (nextC === undefined) {\n this.throwUnclosed(ParseErrorCode.UNCLOSED_STRING, '未闭合的字符串字面量', startOffset, startLine, startCol);\n }\n const memoCount = continuousBackslashCount;\n if (nextC === '\\\\') {\n continuousBackslashCount++;\n } else {\n continuousBackslashCount = 0;\n }\n this.next();\n /**\n * 引号前 \\ 为双数时,全都是字符 \\\n * */\n if (nextC === head && memoCount % 2 === 0) {\n break;\n }\n const mapped = escapeMap[nextC];\n if (!__IS_COMPILER__ && parseEscape && mapped) {\n value += mapped;\n } else {\n value += nextC;\n }\n }\n return value;\n }\n\n private str(char: string) {\n const value = this.getStr(char, false);\n this.setToken(TokenType.String, 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.Number, 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 Comment = 'Comment', // 注释节点\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 hasError?: boolean;\n parent?: BaseNode;\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 | CommentNode;\n\n// 真实DOM元素节点(使用NodeType.Element)\ninterface ElementNode extends BaseNode {\n type: NodeType.Element;\n tagName: string;\n props: Property[];\n children: TemplateNode[];\n}\n\ninterface CommentNode extends BaseNode {\n type: NodeType.Comment;\n value: string;\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 | TemplateNode[];\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: PropertyValue; // 组件名称\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 CommentNode\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 {\n TokenType,\n ParseError,\n ParseErrorCode,\n ParseSyntaxError,\n SourceLocation,\n BaseTokenType,\n ValueTokenType\n} from './type';\n\nexport class Compiler {\n errors: ParseError[] = [];\n currentParent?: BaseNode;\n constructor(\n public tokenizer: Tokenizer,\n public hooks: ParseHooks = {}\n ) {}\n\n private addError(code: ParseErrorCode, message: string, loc: SourceLocation, node?: BaseNode) {\n if (node) {\n node.hasError = true;\n }\n this.errors.push({ code, message, loc });\n }\n\n /**\n * 编译程序入口,生成AST\n */\n @NodeHook\n parseProgram(): Program {\n const body: TemplateNode[] = [];\n try {\n this.tokenizer.nextToken();\n\n // 解析文档主体内容\n while (!this.tokenizer.isEof()) {\n const node = this.templateNode(body);\n if (node) {\n body.push(node);\n }\n }\n } catch (error) {\n if (error instanceof ParseSyntaxError) {\n this.addError(error.code, error.message, error.loc);\n } else {\n this.addError(error.toString() as any, '未知错误', this.tokenizer.emptyLoc());\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(children);\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(siblings: TemplateNode[]): TemplateNode | null {\n const token = this.tokenizer.token;\n\n // Pipe 出现在非属性扩展行上下文中\n if (token.type & TokenType.Pipe) {\n this.addError(\n ParseErrorCode.PIPE_IN_WRONG_CONTEXT,\n '\"|\" 只能出现在元素属性扩展行中',\n token.loc ?? this.tokenizer.emptyLoc()\n );\n this.tokenizer.nextToken(); // 跳过 |\n return null;\n }\n\n const [hookType, value] = this.tokenizer._hook({});\n\n const isElseOrFail = value === 'else' || value === 'fail';\n // 检查是否为特殊关键字\n if (value === 'if' || isElseOrFail) {\n if (isElseOrFail) {\n const lastSibling = siblings[siblings.length - 1];\n const lastType = lastSibling?.type;\n if (lastType !== NodeType.If && lastType !== NodeType.Else && lastType !== NodeType.Fail) {\n this.addError(\n ParseErrorCode.ELSE_WITHOUT_IF,\n `\"${value}\" 前必须有 \"if\" 或 \"else\" 节点`,\n token.loc ?? this.tokenizer.emptyLoc()\n );\n }\n }\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\n /**\n * 解析元素节点\n */\n @NodeHook\n @NodeLoc\n parseComponentNode(node?: ComponentNode) {\n const name = this.parseName();\n this.tokenizer.nextToken(); // 跳过标签名\n\n // 解析属性\n node.type = NodeType.Component;\n node.componentName = name;\n const props: Property[] = this.headerLineAndExtensions();\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 if (!(tagToken.type & TokenType.Identifier)) {\n this.addError(\n ParseErrorCode.INVALID_TAG_NAME,\n `无效的标签名,期望标识符但得到 \"${tagToken.value}\"`,\n tagToken.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n // 跳到下一个 NewLine 恢复\n while (!(this.tokenizer.token.type & TokenType.NewLine) && !this.tokenizer.isEof()) {\n this.tokenizer.nextToken();\n }\n return null;\n }\n // 获取标签名\n const tagName = tagToken.value as string;\n this.tokenizer.nextToken(); // 跳过标签名\n\n // 解析属性\n node.type = NodeType.Element;\n node.tagName = tagName;\n const props: Property[] = this.headerLineAndExtensions();\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.parseJsExp();\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 // if (children.length === 0) {\n // this.addError('EMPTY_IF_BODY', `\"${keyword}\" 块没有子节点`, keywordLoc);\n // }\n\n node.children = children;\n\n return node;\n }\n\n /**\n * 解析循环节点(for)\n */\n @NodeHook\n @NodeLoc\n parseLoopNode(node?: LoopNode) {\n const forLoc = this.tokenizer.token.loc ?? this.tokenizer.emptyLoc();\n // 跳过 'for' 关键字,解析循环表达式\n this.tokenizer.jsExp();\n const collection = this.parseJsExp();\n\n if (!collection.value && collection.value !== 0) {\n this.addError(ParseErrorCode.MISSING_FOR_COLLECTION, '\"for\" 缺少集合表达式', forLoc, node);\n }\n\n const semicolonToken = this.tokenizer.nextToken(); // 期望分号\n if (!(semicolonToken.type & TokenType.Semicolon)) {\n this.addError(\n ParseErrorCode.MISSING_FOR_SEMICOLON,\n '\"for\" 语法:for <集合>; <item> [index][; key],缺少第一个 \";\"',\n semicolonToken.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n }\n\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.parseJsExp();\n\n if (!item.value && item.value !== 0) {\n this.addError(\n ParseErrorCode.MISSING_FOR_ITEM,\n '\"for\" 缺少 item 变量名',\n itemToken.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n }\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.parseJsExp();\n }\n } else if (char === '\\n') {\n }\n // 下一个是 indexName\n else {\n this.tokenizer.nextToken();\n index = this.parseJsExp();\n if (this.tokenizer.peekChar() === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') {\n this.tokenizer.jsExp();\n key = this.parseJsExp();\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 // if (children.length === 0) {\n // this.addError('EMPTY_FOR_BODY', '\"for\" 块没有子节点', forLoc);\n // }\n\n node.children = children;\n\n return node;\n }\n\n /**\n * 解析首行和扩展行的属性\n */\n private headerLineAndExtensions(): Property[] {\n const props: Property[] = [];\n\n do {\n props.push(...this.attributeList());\n\n // 跳过换行符\n if (this.tokenizer.token.type & TokenType.NewLine) {\n this.tokenizer.nextToken();\n }\n // 不是 pipe 就结束\n if ((this.tokenizer.token.type & TokenType.Pipe) === 0) {\n break;\n } else {\n this.tokenizer.nextToken();\n }\n } while (true);\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 const prop = this.parseProperty();\n if (prop) {\n props.push(prop);\n }\n }\n\n return props;\n }\n\n @NodeHook\n parseProperty(node?: Property) {\n node.type = NodeType.Property;\n if (this.tokenizer.token.type !== TokenType.Identifier) {\n this.addError(\n ParseErrorCode.INVALID_PROP_KEY,\n `属性名 \"${this.tokenizer.token.value}\" 不合法`,\n this.tokenizer.token.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n this.tokenizer.nextToken(); // 跳过key\n return null;\n }\n\n node.key = this.parsePropertyKey();\n const token = this.tokenizer.nextToken(); // 跳过key\n if (token.value !== '=') {\n this.addError(\n ParseErrorCode.MISSING_ASSIGN,\n `属性 \"${node.key.key}\" 缺少 \"=\" 赋值符号`,\n node.key.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n this.handleOnlyKeyLoc(node);\n return node;\n }\n\n const valueToken = this.tokenizer.nextToken(); // 跳过等号\n // 换行,下面缩进代码应该是子块\n if (valueToken.type & TokenType.NewLine) {\n this.tokenizer.nextToken(); // 跳过换行符,下一个应该是缩进符\n node.value = this.parsePropertyInlineFragment();\n this.handleKeyValueLoc(node);\n return node;\n }\n\n if ((valueToken.type & ValueTokenType) === 0) {\n this.addError(\n ParseErrorCode.MISSING_PROP_ASSIGNMENT,\n `属性值不合法, \"${valueToken.value}\" 不合法`,\n valueToken.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n\n this.handleOnlyKeyLoc(node);\n return node;\n }\n\n node.value = this.parsePropertyValue();\n this.tokenizer.nextToken();\n this.handleKeyValueLoc(node);\n return node;\n }\n\n handleOnlyKeyLoc(node: Property) {\n node.loc.start = node.key.loc.start;\n node.loc.end = node.key.loc.end;\n node.loc.source = this.tokenizer.code.slice(node.loc.start.offset, node.loc.end.offset);\n }\n\n handleKeyValueLoc(node: Property) {\n node.loc.start = node.key.loc.start;\n node.loc.end = node.value.loc.end;\n node.loc.source = this.tokenizer.code.slice(node.loc.start.offset, node.loc.end.offset);\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 parseJsExp(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 * 根据值类型创建属性值节点\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 @NodeHook\n @NodeLoc\n parsePropertyInlineFragment(node?: PropertyValue) {\n const list = this.handleChildren();\n node.type = NodeType.StaticValue;\n node.value = list;\n return node;\n }\n\n /**\n * 根据值类型创建名称\n */\n @NodeHook\n @TokenLoc\n parseName(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 prevParent = this.currentParent;\n const hook = this.hooks[context.name as keyof typeof this.hooks];\n const node = { loc: {} } as BaseNode;\n node.parent = prevParent;\n hook?.enter?.call(this, node);\n this.currentParent = node;\n const result = target.call(this, node);\n this.currentParent = prevParent;\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","import { isStore, Keys } from \"aoye\";\nimport { UI } from \"./type\";\nimport type { Tokenizer } from \"./tokenizer\";\n\nexport 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\n\nexport class InlineFragment {\n [Keys.ProxyFreeObject] = true;\n constructor(\n public snapshot: Partial<Tokenizer>,\n public data: any,\n public key: string,\n public tokenizer: Tokenizer\n ) {}\n}\n\nexport const isUI = (fn: any): fn is UI => typeof fn === 'function' && fn.__BOBE_IS_UI;\n\nexport const isRenderAble = (val: any) => isStore(val) || isUI(val) || val instanceof InlineFragment\n\nconst SAFE_HANDLER: ProxyHandler<object> = {\n has: () => true,\n get: (t, k) => {\n // 返回原型上的值,缺失返回 undefined\n if (typeof k === 'symbol') return (t as any)[k];\n return k in t ? (t as any)[k] : undefined;\n },\n};\n\n/**\n * 包装 data 为 safe proxy,解决 with(data) 中访问不存在的标识符抛出\n * ReferenceError 的问题。缺失的属性返回 undefined,可选链自然兼容。\n */\nexport const safe = (data: any) => new Proxy(data, SAFE_HANDLER);","import { StackItem } from './type';\nimport type { MultiTypeStack } from './typed';\n\nexport const KEY_INDEX = '__BOBE_KEY_INDEX';\nlet _ctxStack: MultiTypeStack<StackItem>;\nexport const getCtxStack = () => _ctxStack;\nexport const setCtxStack = (stack: MultiTypeStack<StackItem>) => (_ctxStack = stack);\n","import { Tokenizer } from './tokenizer';\nimport {\n Computed,\n deepSignal,\n Effect,\n effect,\n getPulling,\n isStore,\n Keys,\n noopEffect,\n NoopEffect,\n runWithPulling,\n ScheduleType,\n Scope,\n setPulling,\n shareSignal,\n Signal,\n SignalNode,\n Store,\n toRaw\n} from 'aoye';\nimport {\n UI,\n ComponentNode,\n CondBit,\n IfNode,\n LogicNode,\n FakeType,\n NodeSort,\n ProgramCtx,\n StackItem,\n TerpConf,\n TokenType,\n TokenizerSwitcherBit,\n ForNode,\n ForItemNode,\n ContextNode,\n ContextBit,\n DynamicNode,\n CtxProviderBit,\n FakeNode,\n TpNode\n} from './type';\nimport { date32, jsVarRegexp, pick, pickInPlace } from 'bobe-shared';\nimport { MultiTypeStack } from './typed';\nimport { InlineFragment, isRenderAble, isUI, macInc, safe } from './util';\nimport { KEY_INDEX, setCtxStack } from './global';\n\nexport class Interpreter {\n opt: TerpConf;\n constructor(private tokenizer: Tokenizer) {}\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 setCtxStack(stack);\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 && ctxProvider.effect ? NodeSort.EffectNode : 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 if (ctx.current) {\n ctx.current.__logicType ? this.leaveLogicNode?.(ctx.current, false) : this.leaveNode?.(ctx.current, false);\n }\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 isEffectNode = ctx.current && ctx.current.__logicType && ctx.current.effect;\n stack.push(\n {\n node: ctx.current,\n prev: ctx.prevSibling\n },\n !ctx.current.__logicType\n ? NodeSort.Real\n : (isEffectNode ? NodeSort.EffectNode : 0) |\n (ctx.current.__logicType & TokenizerSwitcherBit ? NodeSort.TokenizerSwitcher : 0) |\n (ctx.current.__logicType & ContextBit ? NodeSort.Context : 0) |\n (ctx.current.__logicType === FakeType.Component ? NodeSort.Component : 0) |\n // context 节点, 不提供 data 上下文,其余 Fake 节点提供 CtxProvider\n (ctx.current.__logicType & CtxProviderBit ? NodeSort.CtxProvider : 0)\n );\n if (ctx.current.__logicType) {\n this.beforeLogicIndent?.(ctx.current);\n // 父节点是带 effect 的 Fake 节点\n if (isEffectNode) {\n // 保证 if 子逻辑节点能被其 effect 管理\n setPulling(ctx.current.effect);\n if (ctx.current.__logicType & FakeType.ForItem) {\n ctx.prevSibling = ctx.current.realBefore;\n }\n if (ctx.current.__logicType & FakeType.Tp) {\n ctx.realParent = ctx.current.tpData[Keys.Raw].node;\n ctx.prevSibling = ctx.current.contentBefore;\n }\n }\n }\n // 父节点是原生节点时才修改 ctx.prevSibling\n else {\n if (ctx.current) {\n if (this.beforeIndent?.(ctx.current) === false) {\n const dentLen = this.tokenizer.dentStack[this.tokenizer.dentStack.length - 1];\n this.tokenizer.skip(dentLen);\n ctx.current = null;\n continue;\n }\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 ctx.current.__logicType ? this.leaveLogicNode?.(ctx.current, false) : this.leaveNode?.(ctx.current, false);\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.EffectNode) {\n // 找最近的 if for\n const parentLogic = stack.peekByType(NodeSort.EffectNode)?.node;\n if (parentLogic) {\n setPulling(parentLogic.effect);\n } else {\n setPulling(rootPulling);\n }\n }\n\n if (parent.__logicType === FakeType.Tp) {\n ctx.realParent = parent.realParent;\n }\n\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tokenizer\n if (sort & NodeSort.TokenizerSwitcher) {\n const switcher = stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n if (parent.resumeSnapshot) {\n this.tokenizer.resume(parent.resumeSnapshot);\n }\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 // 每个 for-item 不会走 handleInsert\n this.leaveLogicNode?.(parent, false);\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 insertAnchor(node: any, name = 'anchor', isBefore = false) {\n const { realParent, prevSibling, stack, before, current } = this.ctx;\n // 先将 after 插入\n const afterAnchor = this.createAnchor(name, isBefore);\n if (!isBefore) {\n this.anchorRefBack(afterAnchor, node);\n }\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> <headerLineAndExtensions>\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 === 'context') {\n _node = this.createContextNode();\n } else if (value === 'tp') {\n return this.createTpNode();\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 (isRenderAble(value)) {\n _node = this.componentOrFragmentDeclaration(value, ctx);\n }\n // 其余类型不允许静态插值\n else {\n _node = this.createNode('text');\n this.setProp(_node, 'text', String(value));\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 return this.dynamicDeclaration(data, value, ctx);\n // const val = data[Keys.Raw][value];\n // if (isRenderAble(val)) {\n // _node = this.componentOrFragmentDeclaration(val, ctx);\n // }\n // // 字符\n // else {\n // _node = this.createNode('text');\n // const str = valueIsMapKey ? value : this.getFn(data, value);\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.headerLineAndExtensions(_node);\n // 组件用完,切换回 真实node 的方法\n this.onePropParsed = this.oneRealPropParsed;\n if (_node.__logicType & TokenizerSwitcherBit) {\n this.tokenizer = _node.tokenizer;\n // 切换到子 tokenizer 时如有快照,则指定\n if (_node.fragmentSnapshot) {\n // TODO: 考虑使用 dent 处理时,的初始化 indent。这个行为应与 Tokenizer constructor 中逻辑一致\n this.tokenizer.resume(_node.fragmentSnapshot);\n this.tokenizer.useDedentAsEof = true;\n this.tokenizer.initIndentWhenUseDedentAsEof();\n }\n }\n return _node;\n }\n\n dynamicDeclaration(pData: any, value: string, ctx: ProgramCtx) {\n const valueIsMapKey = Reflect.has(pData[Keys.Raw], value);\n let node: DynamicNode = {\n __logicType: null,\n realParent: null,\n tokenizer: null,\n effect: null,\n textNode: null,\n owner: ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node,\n snapshot: this.tokenizer.snapshot(['dentStack', 'isFirstToken']),\n parentDataProvider: ctx.stack.peekByType(NodeSort.CtxProvider)?.node\n };\n let isUpdate = false;\n // 不论是否执行 if 都应该插入 anchor 节点用于后续\n node.realAfter = this.insertAnchor(node, `dynamic-after`);\n node.effect = this.effect(\n ({ old, val }) => {\n let { __logicType: oldLogicType, textNode: oldTextNode } = node;\n // 删除组件旧 dom\n if (oldLogicType) {\n this.removeLogicNode(node as LogicNode);\n pickInPlace(node, ['realParent', 'realBefore', 'realAfter', 'owner', 'snapshot', 'parentDataProvider']);\n }\n\n let logicType: FakeType | undefined;\n if (isRenderAble(val)) {\n // text -> component\n if (oldTextNode) {\n this.remove(oldTextNode);\n }\n const info = this.createComponentData(val);\n logicType = info.__logicType;\n Object.assign(node, info);\n /*----------------- 参考主 Declaration -----------------*/\n this.onePropParsed = info.onePropParsed;\n // 更新时切换 owner 的 tokenizer 来获取数据\n if (isUpdate) {\n this.tokenizer = node.owner.tokenizer;\n this.tokenizer.resume(node.snapshot);\n this.ctx.stack.push({ node: node.parentDataProvider, prev: null }, NodeSort.CtxProvider);\n }\n this.tokenizer.nextToken(); // 跳过 node 本身,token -> id\n this.headerLineAndExtensions(node);\n if (isUpdate) {\n this.ctx.stack.pop();\n }\n // 组件用完,切换回 真实node 的方法\n this.onePropParsed = this.oneRealPropParsed;\n this.tokenizer = node.tokenizer;\n // 切换到子 tokenizer 时如有快照,则指定\n if (node.fragmentSnapshot) {\n // TODO: 考虑使用 dent 处理时,的初始化 indent。这个行为应与 Tokenizer constructor 中逻辑一致\n this.tokenizer.resume(node.fragmentSnapshot);\n }\n if (isUpdate) {\n this.tokenizer.useDedentAsEof = false;\n this.program(node.realParent, node as any, node.realBefore);\n }\n // 首屏采用 useDedentAsEof\n else {\n this.tokenizer.useDedentAsEof = true;\n this.tokenizer.initIndentWhenUseDedentAsEof();\n }\n } else {\n node.__logicType = FakeType.DynamicText;\n // component/text/undefined -> text\n let textNode = oldTextNode;\n const isNewTextNode = !textNode;\n if (isNewTextNode) {\n textNode = node.textNode = this.createNode('text');\n }\n this.setProp(textNode, 'text', String(val));\n // this.onePropParsed(pData, textNode, 'text', String(val), valueIsMapKey, false);\n if (isNewTextNode) {\n if (isUpdate) {\n this.handleInsert(node.realParent, textNode, node.realBefore);\n } else {\n this.tokenizer.nextToken();\n this.headerLineAndExtensions(node);\n const { realParent, prevSibling } = this.ctx;\n this.handleInsert(realParent, textNode, prevSibling);\n }\n this.leaveNode?.(textNode, false);\n }\n }\n\n isUpdate = true;\n return (isDestroy: boolean) => {\n if (isDestroy) {\n this.removeLogicNode(node as LogicNode);\n }\n };\n },\n [\n () => {\n const val = valueIsMapKey ? pData[value] : this.getFn(pData, value)();\n return val;\n }\n ],\n { type: 'render' }\n );\n return node;\n }\n\n createTpNode() {\n const child = deepSignal({}, getPulling());\n const node: TpNode = {\n __logicType: FakeType.Tp,\n data: this.getData(),\n realParent: null,\n realBefore: null,\n realAfter: null,\n contentBefore: null,\n contentAfter: null,\n effect: null,\n snapshot: null,\n tpData: child,\n owner: this.ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node\n };\n\n this.onePropParsed = createStoreOnePropParsed(child);\n this.tokenizer.nextToken(); // 跳过 node 本身,token -> id\n // 内部会完成 snapshot\n this.headerLineAndExtensions(node);\n // 组件用完,切换回 真实node 的方法\n this.onePropParsed = this.oneRealPropParsed;\n node.realAfter = this.insertAnchor(node, 'tp-after');\n // 这两个是不需要 anchorRefBack,它们是用于控制内容移动的。tp 本身位置由 tp-after 控制\n const before = (node.contentBefore = this.createAnchor('tp-content-before', true));\n const after = (node.contentAfter = this.createAnchor('tp-content-after', true));\n let firstRender = true;\n node.effect = this.effect(\n ({ old: oldDom, val: dom }) => {\n const removeTpChild = () => {\n // 删除\n if (oldDom) {\n let point = before;\n do {\n const next = this.nextSib(point);\n this.remove(point, oldDom, null);\n if (point === after) break;\n point = next;\n } while (true);\n }\n };\n // 首屏让 program 自动往下解析,或者 skip\n if (firstRender) {\n // 有 dom 节点时,tp 在 program 中会将 dom 设置为 realParent 然后开始解析子树,这里不需要做任何处理\n if (dom) {\n this.handleInsert(dom, after, null);\n this.handleInsert(dom, before, null);\n }\n // 无 dom 节点跳过,在\n else {\n // 如果有缩进则跳过缩进内部的内容\n if (this.tokenizer.token.type === TokenType.Indent) {\n // 如果是 indent 此时缩进比 tp 更进一格,所以要找 -2 位置的缩进为 tp 的缩进\n const dentLen = this.tokenizer.dentStack[this.tokenizer.dentStack.length - 2] ?? 0;\n this.tokenizer.skip(dentLen);\n }\n }\n } else {\n if (dom) {\n // 移动\n if (oldDom) {\n let point = before,\n lastInsert = null;\n do {\n const next = this.nextSib(point);\n // 修改直接子逻辑节点的 realParent\n const fakeNode = point[FakeNode];\n if (fakeNode) {\n fakeNode.realParent = dom;\n }\n this.handleInsert(dom, point, lastInsert);\n if (point === after) break;\n lastInsert = point;\n point = next;\n } while (true);\n }\n // 新增 参照 condDeclaration\n else {\n this.handleInsert(dom, after, null);\n this.handleInsert(dom, before, null);\n this.tokenizer = node.owner.tokenizer;\n this.tokenizer.resume(node.snapshot);\n this.tokenizer.useDedentAsEof = false;\n this.program(dom, node.owner, before, node);\n }\n } else {\n // 删除\n removeTpChild();\n }\n }\n firstRender = false;\n return (isDestroy: boolean) => {\n if (isDestroy) {\n removeTpChild();\n }\n };\n },\n [() => child.node],\n { type: 'render' }\n );\n\n return node;\n }\n createContextNode() {\n const child = deepSignal({}, getPulling());\n const parentContext: any = this.ctx.stack.peekByType(NodeSort.Context)?.node?.context;\n if (parentContext) {\n Object.setPrototypeOf(child, parentContext);\n }\n\n this.onePropParsed = createStoreOnePropParsed(child);\n\n const node: ContextNode = {\n __logicType: FakeType.Context,\n context: child,\n realParent: null,\n realBefore: null,\n realAfter: null\n };\n node.realAfter = this.insertAnchor(node, 'context-after');\n return node;\n }\n\n formatForCollection(collection: any) {\n // 不调 toRaw:让 proxy 的 forEach 负责 trackIterator + deepSignal 包装 item\n const res = {\n arr: [] as any[],\n keys: null as string[] | null\n };\n\n // 数组\n if (Array.isArray(collection)) {\n res.arr = collection;\n return res;\n }\n\n // Map\n if (collection instanceof Map) {\n res.keys = [];\n collection.forEach((v, k) => {\n res.arr.push(v);\n res.keys.push(k);\n });\n return res;\n }\n\n // 集合\n if (typeof collection === 'object' && collection !== null) {\n if (collection[Symbol.iterator]) {\n res.arr = Array.from(collection);\n return res;\n }\n\n res.arr = Object.values(collection);\n res.keys = Object.keys(collection);\n return res;\n }\n\n if (typeof collection === 'number') {\n res.arr = Array.from({ length: collection });\n return res;\n }\n\n if (typeof collection === 'string') {\n res.arr = collection.split('');\n return res;\n }\n\n return res;\n }\n forDeclaration() {\n const arrExp = this.tokenizer.jsExp().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 reactiveArr: null,\n keys: 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 const rawGetKey = new Function('data', `with(data){return (${keyExp})}`) as any;\n forNode.getKey = (data: any) => rawGetKey(safe(data));\n }\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.insertAnchor(forNode, 'for-after');\n\n // 去除 dentStack 和 isFirstToken\n const { dentStack, isFirstToken, ...snapshotForUpdate } = forNode.snapshot;\n\n let isFirstRender = true;\n forNode.effect = new this.Effect(() => {\n const collection = arrSignal.get();\n const { arr: formattedArr, keys } = this.formatForCollection(collection);\n let arr: any = formattedArr;\n // 订阅 Iterator:数组/Map/Set 的结构变更\n arr[Keys.Iterator];\n const prevCtx = getPulling();\n setPulling(null);\n // reactiveArr:数组为 proxy 支持 index 级响应式,Map/Set item 已被 deepSignal 包装\n forNode.reactiveArr = formattedArr;\n // arr(diff 用):数组用 toRaw 避免 index 级依赖,Map/Set 本就是普通数组\n forNode.arr = Array.isArray(collection) ? toRaw(arr) : arr;\n forNode.keys = keys;\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.insertAnchor(item, 'for-item-after');\n item.realBefore = this.insertAnchor(item, 'for-item-before', true);\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, keys?.[i]);\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, keys?.[s]);\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, keys?.[e2]);\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, keys?.[newI]);\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 }, ScheduleType.Render);\n return forNode.children[0] || forNode;\n }\n\n /** after 锚点,对 fake 节点反引用\n * 用于 tp 节点 移动时,可以通过 after 锚点找到 fake 节点并做 realParent 的修正\n */\n anchorRefBack(anchor: any, node: LogicNode) {\n anchor[FakeNode] = node;\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.anchorRefBack(realAfter, item);\n this.handleInsert(forNode.realParent, realAfter, before);\n\n let realBefore = this.createAnchor('for-item-before', true);\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 // 解析到缩进小于 base 时自动 eof\n this.tokenizer.resume(snapshotForUpdate);\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(\n child: ForItemNode,\n data: any,\n itemExp: string | ((value: any) => any),\n i: number,\n indexName?: string,\n /** Map/Set 等有 key 时,index 值为 key */\n indexValue?: any\n ) {\n if (typeof itemExp === 'string') {\n child.data[itemExp] = data;\n if (indexName) {\n child.data[indexName] = indexValue ?? i;\n }\n } else {\n indexName = indexName || KEY_INDEX;\n child.data[indexName] = indexValue ?? 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 const context = this.ctx.stack.peekByType(NodeSort.Context)?.node?.data;\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 context\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, keys } = 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]: keys?.[i] ?? i\n }\n : {\n [itemExp]: arr[i]\n },\n getPulling()\n );\n } else {\n indexName = indexName ?? KEY_INDEX;\n const rawData = { [indexName]: keys?.[i] ?? i };\n data = deepSignal(rawData, getPulling());\n // 下标来源:\n // - getKey:用 data[indexName](reactive),key 表达式求值结果作为下标,下标变更时 Computed 自动重算\n // - keys 无 getKey:用 (data[indexName], i) — 下标是静态 i(扁平数组按位置索引),\n // 但通过逗号表达式读 data[indexName] 建立依赖:reuseForItem 更新 indexName 后 Computed 感知变化并重算\n // (Map/Set 的 reactiveArr 是 plain array,无 proxy get 陷阱,必须额外订阅 indexName)\n // - 无 keys 无 getKey:用 i — 普通数组,reactiveArr 是 proxy,reactiveArr[i] 的 get 陷阱自带 index 级依赖\n const computedData = new Computed(() =>\n itemExp((arrSignal.get(), forNode.reactiveArr)[getKey ? data[indexName] : keys ? (data[indexName], i) : i])\n );\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 new Scope(() => {\n return this.setProp(node, key, value, hookI);\n }).get();\n } else if (typeof value === 'function') {\n new this.Effect(() => {\n const res = value(data);\n const dispose = this.setProp(node, key, res, hookI);\n return dispose;\n }, ScheduleType.Render);\n } else if (valueIsMapKey) {\n new this.Effect(() => {\n const res = data[value];\n const dispose = this.setProp(node, key, res, hookI);\n return dispose;\n }, ScheduleType.Render);\n }\n // 静态数据\n else {\n this.setProp(node, key, value, hookI);\n }\n }\n\n oneRealPropParsed: Interpreter['onePropParsed'] = this.onePropParsed.bind(this);\n\n private createComponentData(ComponentOrRender: UI | typeof Store | InlineFragment) {\n let tokenizer: Tokenizer,\n child: any,\n fragmentSnapshot: Partial<Tokenizer>,\n resumeSnapshot: Partial<Tokenizer>,\n __logicType: FakeType.Component | FakeType.Fragment;\n\n const isCC = (ComponentOrRender as any).prototype instanceof Store;\n if (isCC) {\n const Component = ComponentOrRender as any;\n child = Component.new();\n tokenizer = child.ui(true);\n __logicType = FakeType.Component;\n } else if (ComponentOrRender instanceof InlineFragment) {\n const conf = ComponentOrRender;\n child = deepSignal({}, getPulling(), true);\n Object.setPrototypeOf(child, conf.data);\n tokenizer = conf.tokenizer;\n fragmentSnapshot = conf.snapshot;\n __logicType = FakeType.Fragment;\n resumeSnapshot = tokenizer.snapshot([\n 'dentStack',\n 'token',\n 'needIndent',\n 'isFirstToken',\n 'isFirstToken',\n 'useDedentAsEof'\n ]);\n } else {\n const render = ComponentOrRender as UI;\n const boundStore = render.boundStore;\n child = deepSignal({}, getPulling(), true);\n if (boundStore) {\n Object.setPrototypeOf(child, boundStore);\n }\n tokenizer = render(true);\n __logicType = FakeType.Fragment;\n }\n\n return {\n data: child,\n tokenizer,\n onePropParsed: createStoreOnePropParsed(child),\n fragmentSnapshot,\n resumeSnapshot,\n __logicType\n };\n }\n\n componentOrFragmentDeclaration(ComponentOrRender: UI | typeof Store | InlineFragment, ctx: ProgramCtx) {\n const { data, tokenizer, onePropParsed, fragmentSnapshot, resumeSnapshot, __logicType } =\n this.createComponentData(ComponentOrRender);\n const node: ComponentNode = {\n __logicType,\n realParent: ctx.realParent,\n realBefore: null,\n realAfter: null,\n data,\n tokenizer,\n fragmentSnapshot,\n resumeSnapshot\n };\n this.onePropParsed = onePropParsed;\n node.realAfter = this.insertAnchor(node, 'component-after');\n return node;\n }\n getFn(data: any, expression: string | number) {\n return new Function('data', `with(data){return (${expression})}`).bind(undefined, safe(data));\n }\n getAssignFn(data: any, expression: string | number) {\n const valueId = `value_bobe_${date32()}`;\n return new Function('data', valueId, `with(data){${expression}=${valueId}};`).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 context = ctx.stack.peekByType(NodeSort.Context)?.node?.data;\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 context\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.insertAnchor(ifNode, `${keyWord.value}-after`);\n\n const ef = this.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 { type: 'render' }\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 * 首行属性 + 可选的 pipe 扩展行\n * <headerLineAndExtensions> ::= <attributeList> NEWLINE (PIPE <attributeList> NEWLINE)*\n */\n headerLineAndExtensions(_node: any) {\n const { tokenizer } = this;\n do {\n const isComponent = _node.__logicType & TokenizerSwitcherBit;\n const isTp = _node.__logicType === FakeType.Tp;\n let snapshot: Partial<Tokenizer>, dentLen: number;\n const data = this.getData();\n const unHandledKey = this.attributeList(_node, data);\n // 为行内模板片段准备快照,当前 token 是 NEWLINE,快照需要包含换行符,所以 -1\n if (isComponent || isTp) {\n snapshot = tokenizer.snapshot(undefined, -1);\n dentLen = tokenizer.dentStack[tokenizer.dentStack.length - 1];\n }\n tokenizer.nextToken(); // NEWLINE\n if ((tokenizer.token.type & TokenType.Pipe) === 0) {\n // 是 indent, 且当前节点是组件节点,记录行内模板起始快照,\n // 跳过行内模板片段解析\n if (isComponent && tokenizer.token.type & TokenType.Indent) {\n this.inlineFragment(_node, snapshot, data, unHandledKey);\n tokenizer.skip(dentLen);\n if ((tokenizer.token.type & TokenType.Pipe) === 0) {\n break;\n }\n } else if (isTp) {\n _node.snapshot = snapshot;\n break;\n } else {\n break;\n }\n }\n tokenizer.nextToken(); // PIPE\n } while (true);\n }\n\n /**\n * 1. 快照\n * 2. 跳过 行内模板片段\n * 3. 准备\n * 1. tokenizer\n * 2. 快照\n * 3. 使用 CtxProvider 中 数据作为 data\n */\n inlineFragment(_node: any, snapshot: Partial<Tokenizer>, data: any, key = 'children') {\n const value = new InlineFragment(snapshot, data, key, this.tokenizer);\n this.onePropParsed(data, _node, key, value, false, true);\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, data: any) {\n let key: string, eq: any;\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 (key === 'props') {\n let prevKeys = new Set<any>();\n const savedDefaults = new Map<string, any>();\n new this.Effect(() => {\n const props = isFn ? rawVal : Reflect.has(data[Keys.Raw], value) ? data[value] : this.getFn(data, value)();\n const isComponent = _node.__logicType & TokenizerSwitcherBit;\n const rawTarget = isComponent ? _node.data[Keys.Raw] : null;\n\n const cleanupKeys = (keysToClean: Set<string>) => {\n for (const k of keysToClean) {\n if (k.startsWith('on')) continue;\n if (isComponent) {\n _node.data[k] = savedDefaults.has(k) ? savedDefaults.get(k) : undefined;\n } else {\n this.setProp(_node, k, undefined, hookI);\n }\n }\n };\n\n if (!props || typeof props !== 'object') {\n cleanupKeys(prevKeys);\n prevKeys.clear();\n return;\n }\n\n props[Keys.Iterator];\n const raw = props[Keys.Raw] || props;\n const keys = Object.keys(raw);\n const newKeys = new Set();\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n newKeys.add(k);\n prevKeys.delete(k);\n if (isComponent) {\n const savedK = savedDefaults.has(k);\n if (!savedK && Object.prototype.hasOwnProperty.call(rawTarget, k)) {\n savedDefaults.set(k, rawTarget[k]);\n }\n const val = props[k];\n _node.data[k] = val === undefined && savedK ? savedDefaults.get(k) : val;\n } else {\n this.onePropParsed(props, _node, k, k, true, false, hookI);\n }\n }\n\n cleanupKeys(prevKeys);\n prevKeys = newKeys;\n }, ScheduleType.Render);\n }\n // ref 应该将对应 key 值分配给 ref\n else if (key === 'ref') {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n let refValue = _node;\n if (_node.__logicType & TokenizerSwitcherBit) {\n refValue = _node.data;\n } else {\n refValue[Keys.ProxyFreeObject] = true;\n }\n\n if (valueIsMapKey) {\n data[value] = refValue;\n new Scope(() => () => {\n data[value] = null;\n }).get();\n } else {\n const fn = this.getAssignFn(data, value);\n // 执行赋值操作\n fn(refValue);\n new Scope(() => () => {\n fn(null);\n }).get();\n }\n }\n // 动态的要做成函数\n else 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 = undefined;\n eq = undefined;\n }\n this.tokenizer.nextToken();\n }\n return key;\n }\n\n config(opt: TerpConf) {\n Object.assign(this, opt);\n this.opt = opt;\n if (opt.noopEffect) {\n this.effect = noopEffect as any as typeof effect;\n this.Effect = NoopEffect as any as typeof Effect;\n }\n }\n\n createNode(name: string): any {\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, isBefore?: boolean): any {\n return {\n name,\n nextSibling: null,\n isBefore\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): any | (() => void) {\n node.props[key] = value;\n }\n\n beforeIndent?: (node: any) => boolean | void;\n leaveNode?: (node: any, isDedent: boolean) => void;\n beforeLogicIndent?: (node: any) => void;\n leaveLogicNode?: (node: any, isDedent: boolean) => void;\n\n Effect = Effect;\n effect = effect;\n}\n\nfunction createStoreOnePropParsed(child: any) {\n const onePropParsed: Interpreter['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(data));\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 return onePropParsed;\n}\n","import { flushMicroEffectManual, Keys, Store } from 'aoye';\nimport { Interpreter } from './terp';\nimport { Tokenizer } from './tokenizer';\nimport { UI, ComponentNode, CustomRenderConf, FakeType } from './type';\n\nexport function bobe<T extends Record<any, any> = any>(fragments: TemplateStringsArray, ...values: any[]) {\n const ui: UI<T> = 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 as any;\n ui[Keys.ProxyFreeObject] = true;\n ui.__BOBE_IS_UI = true;\n return ui;\n}\n\n// render -> options\nexport function customRender(option: CustomRenderConf) {\n // 保存 options\n return function render<T extends typeof Store>(Ctor: T, root: any) {\n const store = Ctor.new() as InstanceType<T>;\n // @ts-ignore\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\n option.onBeforeFlush?.();\n\n flushMicroEffectManual();\n // ui => bobe`` 返回的函数\n return [componentNode, store] as const;\n };\n}\n","import { getCtxStack } from './global';\nimport { NodeSort } from './type';\n\nexport type IContext = {\n <T = any>(name: string): T;\n <T = any>(): T;\n};\nexport const context: IContext = (name?: string) => {\n const stack = getCtxStack();\n if (!stack) {\n throw new Error('context() api 只能在组件中使用');\n }\n\n let context = stack.peekByType(NodeSort.Context)?.node?.context;\n\n if (name) {\n context = context?.[name];\n }\n\n if (!context) {\n console.warn(`context(${name ?? ''}) 为空`);\n }\n\n return context as any;\n};\n","import { effect as _effect, CustomEffectOpt, Store, ValueDiff } from 'aoye';\nimport { Dep, isDep } from './type';\nimport { Tokenizer } from './tokenizer';\nexport { Store } from 'aoye';\n\nconst depTokenizer = new Tokenizer(() => '', false);\n\nexport const effect = (\n callback: (...args: ValueDiff[]) => void,\n depOrOpt?: Dep[] | Dep | CustomEffectOpt,\n opt?: CustomEffectOpt\n) => {\n const isArray = Array.isArray(depOrOpt);\n const isSingleDep = isDep(depOrOpt);\n const deps = isArray ? depOrOpt : isSingleDep ? [depOrOpt] : [];\n const option = isArray || isSingleDep ? opt : depOrOpt;\n const newDeps: Dep[] = [];\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (typeof dep === 'string') {\n depTokenizer.code = dep.trim()+'\\n';\n let exp;\n while (depTokenizer.i < depTokenizer.code.length) {\n exp = depTokenizer.jsExp().value;\n depTokenizer.nextToken(); // 跳过分号\n newDeps.push(new Function('data', `let v;with(data){v=${exp};}return v;`).bind(undefined, Store.Current));\n }\n } else {\n newDeps.push(dep);\n }\n }\n\n return _effect(callback, newDeps, option);\n};\n"],"names":["TokenType","BaseTokenType","String","Number","Boolean","Null","Undefined","ValueTokenType","InsertionExp","StaticInsExp","FakeType","CondBit","If","Fail","Else","CtxProviderBit","For","ForItem","Component","Fragment","DynamicText","ContextBit","Context","Tp","TokenizerSwitcherBit","NodeSort","TerpEvt","FakeNode","Symbol","ParseErrorCode","ParseSyntaxError","SyntaxError","constructor","code","message","loc","isDep","target","Signal","Computed","Tokenizer","TabSize","Tab","Array","from","length","join","EofId","Date","now","DedentId","needIndent","isFirstToken","dentStack","i","line","column","preCol","preI","needLoc","handledTokens","waitingTokens","Queue","source","hook","useDedentAsEof","initIndentWhenUseDedentAsEof","setToken","Indent","next","char","getCurrentPos","offset","unclosedLoc","startOffset","startLine","startCol","end","start","slice","throwUnclosed","resume","_snapshot","token","undefined","clone","Object","assign","snapshot","keys","dtI","snap","k","skip","targetDentLen","skipFragment","_this$getDentValue","getDentValue","value","isEmptyLine","currLen","expLen","INCONSISTENT_INDENT","emptyLoc","shorterThanBaseDentEof","pop","Dedent","push","type","typeName","nextToken","setCode","trimEnd","tokenize","console","log","JSON","stringify","isEof","Identifier","dt","len","item","shift","outer","locStart","dent","locEnd","newLine","assignment","pipe","Semicolon","comment","str","braceToken","brace","handled","staticIns","isNum","number","matchIdStart2","identifier","error","getComment","nextC","MISSING_COMMENT_SECOND_SLASH","condExp","getStr","trimmed","replace","trim","isEol","jsExp","peekChar","peekCharIsEol","charIsEol","Assign","Pipe","innerBrace","UNCLOSED_STATIC_INS","inComment","count","UNCLOSED_BRACE","nextChar","NewLine","pos","_this$getDentValue2","indentHasLen","prevLen","yes","matchId","realValue","tokenType","head","parseEscape","continuousBackslashCount","UNCLOSED_STRING","memoCount","escapeMap","eof","Eof","HookId","hookI","_hook","props","isDynamicHook","isStaticHook","hookType","res","init","fragments","fragment","NodeType","Compiler","_applyDecs$e","_slicedToArray","_applyDecs","NodeHook","NodeLoc","TokenLoc","e","_initProto","errors","tokenizer","hooks","addError","node","hasError","parseProgram","body","templateNode","toString","Program","handleChildren","children","child","siblings","PIPE_IN_WRONG_CONTEXT","_this$tokenizer$_hook","_this$tokenizer$_hook2","isElseOrFail","lastSibling","lastType","ELSE_WITHOUT_IF","parseConditionalNode","parseLoopNode","parseComponentNode","parseElementNode","name","parseName","componentName","headerLineAndExtensions","propsAdded","call","tagToken","INVALID_TAG_NAME","tagName","Element","keyword","condition","parseJsExp","forLoc","collection","MISSING_FOR_COLLECTION","semicolonToken","MISSING_FOR_SEMICOLON","itemToken","isDestruct","MISSING_FOR_ITEM","key","index","attributeList","prop","parseProperty","Property","INVALID_PROP_KEY","parsePropertyKey","MISSING_ASSIGN","handleOnlyKeyLoc","valueToken","parsePropertyInlineFragment","handleKeyValueLoc","MISSING_PROP_ASSIGNMENT","parsePropertyValue","PropertyKey","_this$tokenizer$_hook3","_this$tokenizer$_hook4","DynamicValue","StaticValue","_this$tokenizer$_hook5","_this$tokenizer$_hook6","list","_this$tokenizer$_hook7","_this$tokenizer$_hook8","context","_node","result","prevParent","currentParent","parent","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","InlineFragment","Keys","ProxyFreeObject","data","isUI","fn","__BOBE_IS_UI","isRenderAble","val","isStore","SAFE_HANDLER","has","get","t","safe","Proxy","KEY_INDEX","_ctxStack","getCtxStack","setCtxStack","Interpreter","rootComponent","program","root","componentNode","before","ctxProvider","Real","CtxProvider","TokenizerSwitcher","__logicType","effect","EffectNode","rootLen","ctx","realParent","prevSibling","current","rootPulling","getPulling","handleInsert","leaveLogicNode","leaveNode","isEffectNode","beforeLogicIndent","setPulling","realBefore","tpData","Raw","contentBefore","beforeIndent","dentLen","declaration","_stack$pop","_stack$pop2","_stack$pop2$","sort","prevSameType","parentLogic","switcher","resumeSnapshot","_ref","forNode","insertAnchor","isBefore","_this$ctx","afterAnchor","createAnchor","anchorRefBack","parentComponent","insertAfter","realAfter","childCmp","getPrevRealSibling","point","lastChild","anchor","condDeclaration","createContextNode","createTpNode","forDeclaration","getData","componentOrFragmentDeclaration","createNode","setProp","dynamicDeclaration","onePropParsed","oneRealPropParsed","fragmentSnapshot","pData","valueIsMapKey","Reflect","textNode","owner","parentDataProvider","isUpdate","old","oldLogicType","oldTextNode","removeLogicNode","pickInPlace","remove","info","createComponentData","isNewTextNode","_this$ctx2","isDestroy","getFn","deepSignal","contentAfter","createStoreOnePropParsed","after","firstRender","oldDom","dom","removeTpChild","nextSib","lastInsert","fakeNode","parentContext","setPrototypeOf","formatForCollection","isArray","Map","forEach","v","iterator","values","split","arrExp","itemExp","vars","match","jsVarRegexp","varStr","Function","indexName","keyExp","reactiveArr","arrSignal","getKey","rawGetKey","cells","Meta","hasArrExpKey","_forNode$snapshot","snapshotForUpdate","_objectWithoutProperties","_excluded","isFirstRender","Effect","_this$formatForCollec","formattedArr","Iterator","prevCtx","toRaw","createForItem","firstInsert","oldLen","newLen","minLen","Math","min","newChildren","removeForItem","lastAfter","insertForItem","reuseForItem","s","e1","e2","itemData","getItemData","firstBefore","s1","s2","mixLen","key2new","set","maxIncNewI","hasMove","new2oldI","fill","newI","delete","incI","incLen","p1","p2","oldI","staticIdx","dispose","ScheduleType","Render","parentData","runWithPulling","indexValue","forItemId","forItemNode","scope","Scope","id","rawData","computedData","_this$ctx$stack$peekB","isFn","bind","ComponentOrRender","isCC","prototype","Store","new","ui","conf","render","boundStore","_this$createComponent","expression","getAssignFn","valueId","date32","keyWord","expToken","isElse","isIf","preIsCond","noCond","ifNode","preCond","signal","ef","firstChild","isComponent","isTp","unHandledKey","inlineFragment","eq","rawVal","prevKeys","Set","savedDefaults","rawTarget","cleanupKeys","keysToClean","startsWith","clear","raw","newKeys","add","savedK","hasOwnProperty","refValue","config","opt","noopEffect","NoopEffect","nextSibling","defaultInsert","defaultRemove","_","shareSignal","meta","computed","bobe","isSub","Current","customRender","option","Ctor","store","terp","onBeforeFlush","flushMicroEffectManual","Error","warn","depTokenizer","callback","depOrOpt","isSingleDep","deps","newDeps","dep","exp","_effect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bobe.compiler.esm.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","../src/context.ts","../src/signal-warp.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 String = 0b0000_0000_0000_0000_0000_0100_0000_0000,\n Number = 0b0000_0000_0000_0000_0000_1000_0000_0000,\n Boolean = 0b0000_0000_0000_0000_0001_0000_0000_0000,\n Null = 0b0000_0000_0000_0000_0010_0000_0000_0000,\n Undefined = 0b0000_0000_0000_0000_0100_0000_0000_0000,\n Comment = 0b0000_0000_0000_0000_1000_0000_0000_0000\n}\n\nexport const BaseTokenType =\n TokenType.String | TokenType.Number | TokenType.Boolean | TokenType.Null | TokenType.Undefined;\nexport const ValueTokenType = BaseTokenType | TokenType.InsertionExp | TokenType.StaticInsExp;\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 Context = 0b0000_0000_0000_0000_0000_0000_1000_0000,\n DynamicText = 0b0000_0000_0000_0000_0000_0001_0000_0000,\n Tp = 0b0000_0000_0000_0000_0000_0010_0000_0000\n}\n\nexport const CondBit = FakeType.If | FakeType.Fail | FakeType.Else;\n// export const LogicalBit =\n// 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 FakeType.DynamicText;\n\n/** 条件节点、ForItem节点、Context节点 */\nexport const ContextBit =\n FakeType.If | FakeType.Fail | FakeType.Else | FakeType.ForItem | FakeType.Context | FakeType.Tp;\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 EffectNode = 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 /** context 关键字对应的节点 */\n Context = 0b0000_0000_0000_0000_0000_0000_0010_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');\nexport const FakeNode = Symbol('fake-node');\n\nexport type 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<\n Interpreter,\n | 'createNode'\n | 'setProp'\n | 'insertAfter'\n | 'remove'\n | 'createAnchor'\n | 'firstChild'\n | 'nextSib'\n | 'beforeIndent'\n | 'leaveNode'\n | 'leaveLogicNode'\n | 'beforeLogicIndent'\n >\n> & {\n noopEffect?: boolean;\n};\nexport type CustomRenderConf = Pick<\n TerpConf,\n | 'createNode'\n | 'setProp'\n | 'insertAfter'\n | 'remove'\n | 'createAnchor'\n | 'firstChild'\n | 'nextSib'\n | 'beforeIndent'\n | 'leaveNode'\n | 'leaveLogicNode'\n | 'beforeLogicIndent'\n | 'noopEffect'\n> & {\n /** program() 之后、flushMicroEffectManual() 之前调用 */\n onBeforeFlush?: () => void;\n};\n\nexport type Hook = (props: HookProps) => any;\n\nexport type HookType = 'dynamic' | 'static';\n\nexport enum ParseErrorCode {\n UNCLOSED_BRACE = 9001,\n UNCLOSED_STRING,\n UNCLOSED_STATIC_INS,\n INCONSISTENT_INDENT,\n INDENT_MISMATCH,\n MISSING_ASSIGN,\n INVALID_TAG_NAME,\n INVALID_PROP_KEY,\n ELSE_WITHOUT_IF,\n EMPTY_IF_BODY,\n EMPTY_FOR_BODY,\n MISSING_FOR_COLLECTION,\n MISSING_FOR_SEMICOLON,\n MISSING_FOR_ITEM,\n MISSING_COMMENT_SECOND_SLASH,\n MISSING_PROP_ASSIGNMENT,\n PIPE_IN_WRONG_CONTEXT\n}\nexport type ParseError = {\n code: ParseErrorCode;\n message: string;\n loc: SourceLocation;\n};\n\n/** tokenizer 抛出的带位置信息的语法错误 */\nexport class ParseSyntaxError extends SyntaxError {\n code: ParseErrorCode;\n loc: SourceLocation;\n constructor(code: ParseErrorCode, message: string, loc: SourceLocation) {\n super(message);\n this.code = code;\n this.loc = loc;\n }\n}\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 UI<T = any> = {\n /** 在哪个 Store 声明的 */\n boundStore: Store;\n __BOBE_IS_UI: true;\n /** 用户声明片段内可用的 props */\n defineProps?: T;\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 /** 响应式版本:数组为 proxy、Map/Set 的 item 已被 deepSignal 包装 */\n reactiveArr: any[];\n keys: string[] | null;\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 context: 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 context: any;\n};\n\n/** data 是 map<storeKey, store> */\nexport type ContextNode = Omit<LogicNode, 'data'> & {\n context: any;\n};\nexport type TpNode = LogicNode & {\n tpData: any;\n effect: Scope;\n contentBefore: any;\n contentAfter: any;\n owner: ComponentNode | FragmentNode;\n snapshot: ReturnType<Tokenizer['snapshot']>;\n};\n\nexport type DynamicNode = Omit<LogicNode, 'data'> & {\n tokenizer: Tokenizer;\n /** 模版片段快照 */\n fragmentSnapshot?: ReturnType<Tokenizer['snapshot']>;\n /** 渲染模版片段前的 快照,渲染完成后用于恢复 */\n resumeSnapshot?: ReturnType<Tokenizer['snapshot']>;\n snapshot: ReturnType<Tokenizer['snapshot']>;\n owner: ComponentNode | FragmentNode;\n data?: any;\n parentDataProvider: any;\n effect: Effect;\n textNode: any;\n};\n\nexport type FragmentNode = LogicNode & {\n tokenizer: Tokenizer;\n fragmentSnapshot?: ReturnType<Tokenizer['snapshot']>;\n resumeSnapshot?: ReturnType<Tokenizer['snapshot']>;\n};\nexport type ComponentNode = LogicNode & {\n tokenizer: Tokenizer;\n /** 模版片段快照 */\n fragmentSnapshot?: ReturnType<Tokenizer['snapshot']>;\n /** 渲染模版片段前的 快照,渲染完成后用于恢复 */\n resumeSnapshot?: ReturnType<Tokenizer['snapshot']>;\n};\nexport type RootNode = LogicNode & {};\n\nexport type Dep = Signal | Computed | (() => any) | string;\n\nexport const isDep = (target: unknown): target is Dep =>\n target &&\n (target instanceof Signal ||\n target instanceof Computed ||\n typeof target === 'function' ||\n typeof target === 'string');\n","import { escapeMap, isNum, matchId, matchIdStart, matchIdStart2, Queue } from 'bobe-shared';\nimport {\n BaseType,\n Hook,\n HookProps,\n HookType,\n ParseErrorCode,\n ParseSyntaxError,\n Position,\n SourceLocation,\n Token,\n TokenType\n} 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.initIndentWhenUseDedentAsEof();\n // this.waitingTokens.push({\n // type: TokenType.Indent,\n // typeName: TokenType[TokenType.Indent],\n // value: ''\n // })\n }\n }\n initIndentWhenUseDedentAsEof() {\n this.setToken(TokenType.Indent, '');\n this.isFirstToken = true;\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 /** 构造从当前扫描起始位置到模板结尾的 SourceLocation,用于未闭合错误 */\n private unclosedLoc(startOffset: number, startLine: number, startCol: number): SourceLocation {\n const end = this.code.length - 1; // 去掉末尾 EofId 前的位置\n return {\n start: { offset: startOffset, line: startLine, column: startCol },\n end: { offset: end, line: this.line, column: this.column },\n source: this.code.slice(startOffset, end)\n };\n }\n\n private throwUnclosed(\n code: ParseErrorCode,\n message: string,\n startOffset: number,\n startLine: number,\n startCol: number\n ): never {\n throw new ParseSyntaxError(code, message, this.unclosedLoc(startOffset, startLine, startCol));\n }\n\n // /** 恢复至某一个现场,进行 token 重算 */\n resume({ dentStack, waitingTokens, ..._snapshot }: ReturnType<Tokenizer['snapshot']>) {\n this.token = undefined;\n this.needIndent = false;\n this.isFirstToken = true;\n this.dentStack = dentStack ? dentStack.slice() : [0];\n if (waitingTokens) {\n this.waitingTokens = waitingTokens.clone();\n }\n Object.assign(this, _snapshot);\n }\n snapshot(keys?: (keyof Tokenizer)[], dtI = 0): Partial<Tokenizer> {\n const snap = {\n i: this.i + dtI,\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(targetDentLen?: number) {\n if (targetDentLen == undefined) {\n targetDentLen = this.dentStack[this.dentStack.length - 1];\n }\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 > targetDentLen) {\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 new ParseSyntaxError(ParseErrorCode.INCONSISTENT_INDENT, '缩进大小不统一', this.emptyLoc());\n }\n\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n break;\n }\n this.dentStack.pop();\n // 比目标值大,这一行被跳过了,不需要记录反缩进\n if (expLen > targetDentLen) {\n continue;\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, dt = 1) {\n this.token = {\n type,\n typeName: TokenType[type],\n value,\n loc:\n __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 + dt,\n line: this.line,\n column: this.column + dt\n },\n // TODO: 文件名\n source: this.code.slice(this.preI, this.i + dt)\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 // 所有代码已读完且无等待 token,直接返回当前 token 防止死循环\n if (this.i >= this.code.length && !this.waitingTokens.len) return this.token;\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.locStart();\n this.dent();\n this.locEnd();\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 /*----------------- 需要 loc 的 token -----------------*/\n default:\n this.locStart();\n switch (char) {\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 case '/':\n this.comment();\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.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 this.locEnd();\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 throw error;\n } finally {\n this.handledTokens.push(this.token);\n }\n }\n\n locStart() {\n if (__IS_COMPILER__) {\n this.preCol = this.column;\n this.preI = this.i;\n this.needLoc = true;\n }\n }\n locEnd() {\n if (__IS_COMPILER__) {\n this.needLoc = false;\n }\n }\n\n getComment() {\n let value = '/';\n let nextC = this.code[this.i + 1];\n if (nextC !== '/') {\n throw new ParseSyntaxError(ParseErrorCode.MISSING_COMMENT_SECOND_SLASH, '注释开头必须是 //', this.emptyLoc());\n }\n while (this.code[this.i + 1] !== '\\n') {\n this.next();\n value += this.code[this.i];\n }\n return value;\n }\n /**\n * 处理处于行末尾的 comment 例如:\n * div // 这里是注释\n */\n comment() {\n const value = this.getComment();\n // this.next(); // 设置当前字符为 /n\n }\n condExp() {\n this.locStart();\n\n let value = '';\n this.token = null;\n let char = this.code[this.i];\n while (char !== '\\n') {\n if (char === '\"' || char === \"'\") {\n value += char + this.getStr(char);\n }\n value += this.code[this.i];\n this.next();\n char = this.code[this.i];\n }\n // 此时 i -> \\n\n const trimmed = value.replace(/\\/\\/[\\s\\S]+/, '').trim();\n\n this.setToken(TokenType.Identifier, trimmed ? trimmed : true, 0);\n this.handledTokens.push(this.token);\n this.locEnd();\n return this.token;\n }\n isEol(i: number) {\n return this.code[i] === '\\n' || this.code[i] === '/';\n }\n /**\n * 解析到 for 时使用这个方法获取 for 后方的子表达式\n * 表达式通过 “;” 分割\n * // 最多可有三个表达式\n * for arr ; item index; item.key\n * @returns {boolean} 是否含有 key\n */\n public jsExp() {\n this.locStart();\n\n this.token = null;\n let value = '';\n\n let char = this.code[this.i];\n while (char !== ';' && char !== '\\n') {\n if (char === '\"' || char === \"'\") {\n value += char + this.getStr(char);\n }\n value += this.code[this.i];\n this.next();\n char = this.code[this.i];\n }\n this.setToken(TokenType.Identifier, value, 0);\n this.handledTokens.push(this.token);\n this.locEnd();\n return this.token;\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 peekCharIsEol() {\n const char = this.peekChar();\n return char === '\\n' || char === '/';\n }\n\n charIsEol(char: string) {\n return char === '\\n' || char === '/';\n }\n\n private assignment() {\n this.setToken(TokenType.Assign, '=');\n }\n private pipe() {\n this.setToken(TokenType.Pipe, '|');\n }\n private staticIns() {\n const startOffset = this.preI,\n startLine = this.line,\n startCol = this.preCol;\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 if (nextC === undefined) {\n this.throwUnclosed(ParseErrorCode.UNCLOSED_STATIC_INS, '未闭合的 \"${...}\"', startOffset, startLine, startCol);\n }\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 const startOffset = this.preI,\n startLine = this.line,\n startCol = this.preCol;\n let inComment: string,\n count = 0,\n value = '';\n while (1) {\n const char = this.code[this.i];\n if (char === undefined) {\n this.throwUnclosed(ParseErrorCode.UNCLOSED_BRACE, '未闭合的 \"{\"', startOffset, startLine, startCol);\n }\n const nextChar = this.code[this.i + 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 } 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 === '\"') {\n // 此时 i 指向尾 '\n value += char + this.getStr(char);\n }\n // 4. 只有在非字符串、非注释状态下才计数\n else if (char === '{') {\n count++;\n } else if (char === '}') {\n count--;\n }\n }\n\n if (count === 0 && 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 case '/':\n nextC = '/';\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 // 获取到下一个字符是 \\n 为止\n value += this.getComment();\n this.next(); // 设置当前字符为 \\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\n emptyLoc(): SourceLocation {\n const pos = this.getCurrentPos();\n return { start: pos, end: { offset: pos.offset + 1, line: pos.line, column: pos.column + 1 }, source: ' ' };\n }\n private dent() {\n const { value, isEmptyLine } = this.getDentValue();\n if (isEmptyLine) {\n // 这种情况下需要 next ,即后续从 \\n 之后重新开始匹配\n this.needIndent = true;\n this.next();\n return;\n }\n this.needIndent = false;\n // 比较长度,比上个 indent 长,缩进,比上个 indent 短,dedent\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, 0);\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 new ParseSyntaxError(ParseErrorCode.INCONSISTENT_INDENT, '缩进大小不统一', this.emptyLoc());\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), 0);\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' || !matchId(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: any, tokenType: TokenType;\n\n switch (value) {\n case 'null':\n realValue = null;\n tokenType = TokenType.Null;\n break;\n case 'undefined':\n realValue = undefined;\n tokenType = TokenType.Undefined;\n break;\n case 'false':\n realValue = false;\n tokenType = TokenType.Boolean;\n break;\n case 'true':\n realValue = true;\n tokenType = TokenType.Boolean;\n break;\n default:\n realValue = value;\n tokenType = TokenType.Identifier;\n break;\n }\n this.setToken(tokenType, realValue);\n }\n getStr(head: string, parseEscape = true) {\n const startOffset = this.preI,\n startLine = this.line,\n startCol = this.preCol;\n let value = '';\n let nextC;\n let continuousBackslashCount = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n if (nextC === undefined) {\n this.throwUnclosed(ParseErrorCode.UNCLOSED_STRING, '未闭合的字符串字面量', startOffset, startLine, startCol);\n }\n const memoCount = continuousBackslashCount;\n if (nextC === '\\\\') {\n continuousBackslashCount++;\n } else {\n continuousBackslashCount = 0;\n }\n this.next();\n /**\n * 引号前 \\ 为双数时,全都是字符 \\\n * */\n if (nextC === head && memoCount % 2 === 0) {\n break;\n }\n const mapped = escapeMap[nextC];\n if (!__IS_COMPILER__ && parseEscape && mapped) {\n value += mapped;\n } else {\n value += nextC;\n }\n }\n return value;\n }\n\n private str(char: string) {\n const value = this.getStr(char, false);\n this.setToken(TokenType.String, 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.Number, 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 Comment = 'Comment', // 注释节点\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 hasError?: boolean;\n parent?: BaseNode;\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 | CommentNode;\n\n// 真实DOM元素节点(使用NodeType.Element)\ninterface ElementNode extends BaseNode {\n type: NodeType.Element;\n tagName: string;\n props: Property[];\n children: TemplateNode[];\n}\n\ninterface CommentNode extends BaseNode {\n type: NodeType.Comment;\n value: string;\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 | TemplateNode[];\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: PropertyValue; // 组件名称\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 CommentNode\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 {\n TokenType,\n ParseError,\n ParseErrorCode,\n ParseSyntaxError,\n SourceLocation,\n BaseTokenType,\n ValueTokenType\n} from './type';\n\nexport class Compiler {\n errors: ParseError[] = [];\n currentParent?: BaseNode;\n constructor(\n public tokenizer: Tokenizer,\n public hooks: ParseHooks = {}\n ) {}\n\n private addError(code: ParseErrorCode, message: string, loc: SourceLocation, node?: BaseNode) {\n if (node) {\n node.hasError = true;\n }\n this.errors.push({ code, message, loc });\n }\n\n /**\n * 编译程序入口,生成AST\n */\n @NodeHook\n parseProgram(): Program {\n const body: TemplateNode[] = [];\n try {\n this.tokenizer.nextToken();\n\n // 解析文档主体内容\n while (!this.tokenizer.isEof()) {\n const node = this.templateNode(body);\n if (node) {\n body.push(node);\n }\n }\n } catch (error) {\n if (error instanceof ParseSyntaxError) {\n this.addError(error.code, error.message, error.loc);\n } else {\n this.addError(error.toString() as any, '未知错误', this.tokenizer.emptyLoc());\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(children);\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(siblings: TemplateNode[]): TemplateNode | null {\n const token = this.tokenizer.token;\n\n // Pipe 出现在非属性扩展行上下文中\n if (token.type & TokenType.Pipe) {\n this.addError(\n ParseErrorCode.PIPE_IN_WRONG_CONTEXT,\n '\"|\" 只能出现在元素属性扩展行中',\n token.loc ?? this.tokenizer.emptyLoc()\n );\n this.tokenizer.nextToken(); // 跳过 |\n return null;\n }\n\n const [hookType, value] = this.tokenizer._hook({});\n\n const isElseOrFail = value === 'else' || value === 'fail';\n // 检查是否为特殊关键字\n if (value === 'if' || isElseOrFail) {\n if (isElseOrFail) {\n const lastSibling = siblings[siblings.length - 1];\n const lastType = lastSibling?.type;\n if (lastType !== NodeType.If && lastType !== NodeType.Else && lastType !== NodeType.Fail) {\n this.addError(\n ParseErrorCode.ELSE_WITHOUT_IF,\n `\"${value}\" 前必须有 \"if\" 或 \"else\" 节点`,\n token.loc ?? this.tokenizer.emptyLoc()\n );\n }\n }\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\n /**\n * 解析元素节点\n */\n @NodeHook\n @NodeLoc\n parseComponentNode(node?: ComponentNode) {\n const name = this.parseName();\n this.tokenizer.nextToken(); // 跳过标签名\n\n // 解析属性\n node.type = NodeType.Component;\n node.componentName = name;\n const props: Property[] = this.headerLineAndExtensions();\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 if (!(tagToken.type & TokenType.Identifier)) {\n this.addError(\n ParseErrorCode.INVALID_TAG_NAME,\n `无效的标签名,期望标识符但得到 \"${tagToken.value}\"`,\n tagToken.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n // 跳到下一个 NewLine 恢复\n while (!(this.tokenizer.token.type & TokenType.NewLine) && !this.tokenizer.isEof()) {\n this.tokenizer.nextToken();\n }\n return null;\n }\n // 获取标签名\n const tagName = tagToken.value as string;\n this.tokenizer.nextToken(); // 跳过标签名\n\n // 解析属性\n node.type = NodeType.Element;\n node.tagName = tagName;\n const props: Property[] = this.headerLineAndExtensions();\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.parseJsExp();\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 // if (children.length === 0) {\n // this.addError('EMPTY_IF_BODY', `\"${keyword}\" 块没有子节点`, keywordLoc);\n // }\n\n node.children = children;\n\n return node;\n }\n\n /**\n * 解析循环节点(for)\n */\n @NodeHook\n @NodeLoc\n parseLoopNode(node?: LoopNode) {\n const forLoc = this.tokenizer.token.loc ?? this.tokenizer.emptyLoc();\n // 跳过 'for' 关键字,解析循环表达式\n this.tokenizer.jsExp();\n const collection = this.parseJsExp();\n\n if (!collection.value && collection.value !== 0) {\n this.addError(ParseErrorCode.MISSING_FOR_COLLECTION, '\"for\" 缺少集合表达式', forLoc, node);\n }\n\n const semicolonToken = this.tokenizer.nextToken(); // 期望分号\n if (!(semicolonToken.type & TokenType.Semicolon)) {\n this.addError(\n ParseErrorCode.MISSING_FOR_SEMICOLON,\n '\"for\" 语法:for <集合>; <item> [index][; key],缺少第一个 \";\"',\n semicolonToken.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n }\n\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.parseJsExp();\n\n if (!item.value && item.value !== 0) {\n this.addError(\n ParseErrorCode.MISSING_FOR_ITEM,\n '\"for\" 缺少 item 变量名',\n itemToken.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n }\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.parseJsExp();\n }\n } else if (char === '\\n') {\n }\n // 下一个是 indexName\n else {\n this.tokenizer.nextToken();\n index = this.parseJsExp();\n if (this.tokenizer.peekChar() === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') {\n this.tokenizer.jsExp();\n key = this.parseJsExp();\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 // if (children.length === 0) {\n // this.addError('EMPTY_FOR_BODY', '\"for\" 块没有子节点', forLoc);\n // }\n\n node.children = children;\n\n return node;\n }\n\n /**\n * 解析首行和扩展行的属性\n */\n private headerLineAndExtensions(): Property[] {\n const props: Property[] = [];\n\n do {\n props.push(...this.attributeList());\n\n // 跳过换行符\n if (this.tokenizer.token.type & TokenType.NewLine) {\n this.tokenizer.nextToken();\n }\n // 不是 pipe 就结束\n if ((this.tokenizer.token.type & TokenType.Pipe) === 0) {\n break;\n } else {\n this.tokenizer.nextToken();\n }\n } while (true);\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 const prop = this.parseProperty();\n if (prop) {\n props.push(prop);\n }\n }\n\n return props;\n }\n\n @NodeHook\n parseProperty(node?: Property) {\n node.type = NodeType.Property;\n if (this.tokenizer.token.type !== TokenType.Identifier) {\n this.addError(\n ParseErrorCode.INVALID_PROP_KEY,\n `属性名 \"${this.tokenizer.token.value}\" 不合法`,\n this.tokenizer.token.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n this.tokenizer.nextToken(); // 跳过key\n return null;\n }\n\n node.key = this.parsePropertyKey();\n const token = this.tokenizer.nextToken(); // 跳过key\n if (token.value !== '=') {\n this.addError(\n ParseErrorCode.MISSING_ASSIGN,\n `属性 \"${node.key.key}\" 缺少 \"=\" 赋值符号`,\n node.key.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n this.handleOnlyKeyLoc(node);\n return node;\n }\n\n const valueToken = this.tokenizer.nextToken(); // 跳过等号\n // 换行,下面缩进代码应该是子块\n if (valueToken.type & TokenType.NewLine) {\n this.tokenizer.nextToken(); // 跳过换行符,下一个应该是缩进符\n node.value = this.parsePropertyInlineFragment();\n this.handleKeyValueLoc(node);\n return node;\n }\n\n if ((valueToken.type & ValueTokenType) === 0) {\n this.addError(\n ParseErrorCode.MISSING_PROP_ASSIGNMENT,\n `属性值不合法, \"${valueToken.value}\" 不合法`,\n valueToken.loc ?? this.tokenizer.emptyLoc(),\n node\n );\n\n this.handleOnlyKeyLoc(node);\n return node;\n }\n\n node.value = this.parsePropertyValue();\n this.tokenizer.nextToken();\n this.handleKeyValueLoc(node);\n return node;\n }\n\n handleOnlyKeyLoc(node: Property) {\n node.loc.start = node.key.loc.start;\n node.loc.end = node.key.loc.end;\n node.loc.source = this.tokenizer.code.slice(node.loc.start.offset, node.loc.end.offset);\n }\n\n handleKeyValueLoc(node: Property) {\n node.loc.start = node.key.loc.start;\n node.loc.end = node.value.loc.end;\n node.loc.source = this.tokenizer.code.slice(node.loc.start.offset, node.loc.end.offset);\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 parseJsExp(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 * 根据值类型创建属性值节点\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 @NodeHook\n @NodeLoc\n parsePropertyInlineFragment(node?: PropertyValue) {\n const list = this.handleChildren();\n node.type = NodeType.StaticValue;\n node.value = list;\n return node;\n }\n\n /**\n * 根据值类型创建名称\n */\n @NodeHook\n @TokenLoc\n parseName(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 prevParent = this.currentParent;\n const hook = this.hooks[context.name as keyof typeof this.hooks];\n const node = { loc: {} } as BaseNode;\n node.parent = prevParent;\n hook?.enter?.call(this, node);\n this.currentParent = node;\n const result = target.call(this, node);\n this.currentParent = prevParent;\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","import { isStore, Keys } from \"aoye\";\nimport { UI } from \"./type\";\nimport type { Tokenizer } from \"./tokenizer\";\n\nexport 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\n\nexport class InlineFragment {\n [Keys.ProxyFreeObject] = true;\n constructor(\n public snapshot: Partial<Tokenizer>,\n public data: any,\n public key: string,\n public tokenizer: Tokenizer\n ) {}\n}\n\nexport const isUI = (fn: any): fn is UI => typeof fn === 'function' && fn.__BOBE_IS_UI;\n\nexport const isRenderAble = (val: any) => isStore(val) || isUI(val) || val instanceof InlineFragment\n\nconst SAFE_HANDLER: ProxyHandler<object> = {\n has: () => true,\n get: (t, k) => {\n // 返回原型上的值,缺失返回 undefined\n if (typeof k === 'symbol') return (t as any)[k];\n return (t as any)[k];\n },\n};\n\n/**\n * 包装 data 为 safe proxy,解决 with(data) 中访问不存在的标识符抛出\n * ReferenceError 的问题。缺失的属性返回 undefined,可选链自然兼容。\n */\nexport const safe = (data: any) => new Proxy(data, SAFE_HANDLER);","import { StackItem } from './type';\nimport type { MultiTypeStack } from './typed';\n\nexport const KEY_INDEX = '__BOBE_KEY_INDEX';\nlet _ctxStack: MultiTypeStack<StackItem>;\nexport const getCtxStack = () => _ctxStack;\nexport const setCtxStack = (stack: MultiTypeStack<StackItem>) => (_ctxStack = stack);\n","import { Tokenizer } from './tokenizer';\nimport {\n backupSignal,\n Computed,\n deepSignal,\n Effect,\n effect,\n getProxyHasKey,\n getPulling,\n isStore,\n Keys,\n noopEffect,\n NoopEffect,\n runWithPulling,\n ScheduleType,\n Scope,\n setPulling,\n shareSignal,\n Signal,\n SignalNode,\n Store,\n toRaw\n} from 'aoye';\nimport {\n UI,\n ComponentNode,\n CondBit,\n IfNode,\n LogicNode,\n FakeType,\n NodeSort,\n ProgramCtx,\n StackItem,\n TerpConf,\n TokenType,\n TokenizerSwitcherBit,\n ForNode,\n ForItemNode,\n ContextNode,\n ContextBit,\n DynamicNode,\n CtxProviderBit,\n FakeNode,\n TpNode\n} from './type';\nimport { date32, hasOwn, jsVarRegexp, pick, pickInPlace } from 'bobe-shared';\nimport { MultiTypeStack } from './typed';\nimport { InlineFragment, isRenderAble, isUI, macInc, safe } from './util';\nimport { KEY_INDEX, setCtxStack } from './global';\n\nexport class Interpreter {\n opt: TerpConf;\n constructor(private tokenizer: Tokenizer) {}\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 setCtxStack(stack);\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 && ctxProvider.effect ? NodeSort.EffectNode : 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 if (ctx.current) {\n ctx.current.__logicType ? this.leaveLogicNode?.(ctx.current, false) : this.leaveNode?.(ctx.current, false);\n }\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 isEffectNode = ctx.current && ctx.current.__logicType && ctx.current.effect;\n stack.push(\n {\n node: ctx.current,\n prev: ctx.prevSibling\n },\n !ctx.current.__logicType\n ? NodeSort.Real\n : (isEffectNode ? NodeSort.EffectNode : 0) |\n (ctx.current.__logicType & TokenizerSwitcherBit ? NodeSort.TokenizerSwitcher : 0) |\n (ctx.current.__logicType & ContextBit ? NodeSort.Context : 0) |\n (ctx.current.__logicType === FakeType.Component ? NodeSort.Component : 0) |\n (ctx.current.__logicType === FakeType.Tp ? NodeSort.Real : 0) |\n // context 节点, 不提供 data 上下文,其余 Fake 节点提供 CtxProvider\n (ctx.current.__logicType & CtxProviderBit ? NodeSort.CtxProvider : 0)\n );\n if (ctx.current.__logicType) {\n this.beforeLogicIndent?.(ctx.current);\n // 父节点是带 effect 的 Fake 节点\n if (isEffectNode) {\n // 保证 if 子逻辑节点能被其 effect 管理\n setPulling(ctx.current.effect);\n if (ctx.current.__logicType & FakeType.ForItem) {\n ctx.prevSibling = ctx.current.realBefore;\n }\n if (ctx.current.__logicType & FakeType.Tp) {\n runWithPulling(() => {\n ctx.realParent = ctx.current.tpData.node;\n }, null);\n ctx.prevSibling = ctx.current.contentBefore;\n }\n }\n }\n // 父节点是原生节点时才修改 ctx.prevSibling\n else {\n if (ctx.current) {\n if (this.beforeIndent?.(ctx.current) === false) {\n const dentLen = this.tokenizer.dentStack[this.tokenizer.dentStack.length - 1];\n this.tokenizer.skip(dentLen);\n ctx.current = null;\n continue;\n }\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 ctx.current.__logicType ? this.leaveLogicNode?.(ctx.current, false) : this.leaveNode?.(ctx.current, false);\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 / tp 节点\n if (!parent.__logicType) {\n const prevSameType = stack.peekByType(NodeSort.Real);\n const sameNode = prevSameType?.node;\n if (sameNode) {\n ctx.realParent =\n sameNode.__logicType === FakeType.Tp\n ? runWithPulling(() => (sameNode as TpNode).tpData.node, null)\n : sameNode;\n } else {\n ctx.realParent = root;\n }\n }\n // 弹出非原生节点\n else {\n // 考虑 if, for 等获取最后一个插入节点\n if (sort & NodeSort.EffectNode) {\n // 找最近的 if for\n const parentLogic = stack.peekByType(NodeSort.EffectNode)?.node;\n if (parentLogic) {\n setPulling(parentLogic.effect);\n } else {\n setPulling(rootPulling);\n }\n }\n\n if (parent.__logicType === FakeType.Tp) {\n ctx.realParent = parent.realParent;\n }\n\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tokenizer\n if (sort & NodeSort.TokenizerSwitcher) {\n const switcher = stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n if (parent.resumeSnapshot) {\n this.tokenizer.resume(parent.resumeSnapshot);\n }\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 // 每个 for-item 不会走 handleInsert\n this.leaveLogicNode?.(parent, false);\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 insertAnchor(node: any, name = 'anchor', isBefore = false) {\n const { realParent, prevSibling, stack, before, current } = this.ctx;\n // 先将 after 插入\n const afterAnchor = this.createAnchor(name, isBefore);\n if (!isBefore) {\n this.anchorRefBack(afterAnchor, node);\n }\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> <headerLineAndExtensions>\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 === 'context') {\n _node = this.createContextNode();\n } else if (value === 'tp') {\n return this.createTpNode();\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 (isRenderAble(value)) {\n _node = this.componentOrFragmentDeclaration(value, ctx);\n }\n // 其余类型不允许静态插值\n else {\n _node = this.createNode('text');\n this.setProp(_node, 'text', String(value));\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 return this.dynamicDeclaration(data, value, ctx);\n // const val = data[Keys.Raw][value];\n // if (isRenderAble(val)) {\n // _node = this.componentOrFragmentDeclaration(val, ctx);\n // }\n // // 字符\n // else {\n // _node = this.createNode('text');\n // const str = valueIsMapKey ? value : this.getFn(data, value);\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.headerLineAndExtensions(_node);\n // 组件用完,切换回 真实node 的方法\n this.onePropParsed = this.oneRealPropParsed;\n if (_node.__logicType & TokenizerSwitcherBit) {\n this.tokenizer = _node.tokenizer;\n // 切换到子 tokenizer 时如有快照,则指定\n if (_node.fragmentSnapshot) {\n // TODO: 考虑使用 dent 处理时,的初始化 indent。这个行为应与 Tokenizer constructor 中逻辑一致\n this.tokenizer.resume(_node.fragmentSnapshot);\n this.tokenizer.useDedentAsEof = true;\n this.tokenizer.initIndentWhenUseDedentAsEof();\n }\n }\n return _node;\n }\n\n dynamicDeclaration(pData: any, value: string, ctx: ProgramCtx) {\n const valueIsMapKey = Boolean(getProxyHasKey(pData, value));\n let node: DynamicNode = {\n __logicType: null,\n realParent: null,\n tokenizer: null,\n effect: null,\n textNode: null,\n owner: ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node,\n snapshot: this.tokenizer.snapshot(['dentStack', 'isFirstToken']),\n parentDataProvider: ctx.stack.peekByType(NodeSort.CtxProvider)?.node\n };\n let isUpdate = false;\n // 不论是否执行 if 都应该插入 anchor 节点用于后续\n node.realAfter = this.insertAnchor(node, `dynamic-after`);\n node.effect = this.effect(\n ({ old, val }) => {\n let { __logicType: oldLogicType, textNode: oldTextNode } = node;\n // 删除组件旧 dom\n if (oldLogicType) {\n this.removeLogicNode(node as LogicNode);\n pickInPlace(node, ['realParent', 'realBefore', 'realAfter', 'owner', 'snapshot', 'parentDataProvider']);\n }\n\n let logicType: FakeType | undefined;\n if (isRenderAble(val)) {\n // text -> component\n if (oldTextNode) {\n this.remove(oldTextNode);\n }\n const info = this.createComponentData(val);\n logicType = info.__logicType;\n Object.assign(node, info);\n /*----------------- 参考主 Declaration -----------------*/\n this.onePropParsed = info.onePropParsed;\n // 更新时切换 owner 的 tokenizer 来获取数据\n if (isUpdate) {\n this.tokenizer = node.owner.tokenizer;\n this.tokenizer.resume(node.snapshot);\n this.ctx.stack.push({ node: node.parentDataProvider, prev: null }, NodeSort.CtxProvider);\n }\n this.tokenizer.nextToken(); // 跳过 node 本身,token -> id\n this.headerLineAndExtensions(node);\n if (isUpdate) {\n this.ctx.stack.pop();\n }\n // 组件用完,切换回 真实node 的方法\n this.onePropParsed = this.oneRealPropParsed;\n this.tokenizer = node.tokenizer;\n // 切换到子 tokenizer 时如有快照,则指定\n if (node.fragmentSnapshot) {\n // TODO: 考虑使用 dent 处理时,的初始化 indent。这个行为应与 Tokenizer constructor 中逻辑一致\n this.tokenizer.resume(node.fragmentSnapshot);\n }\n if (isUpdate) {\n this.tokenizer.useDedentAsEof = false;\n this.program(node.realParent, node as any, node.realBefore);\n }\n // 首屏采用 useDedentAsEof\n else {\n this.tokenizer.useDedentAsEof = true;\n this.tokenizer.initIndentWhenUseDedentAsEof();\n }\n } else {\n node.__logicType = FakeType.DynamicText;\n // component/text/undefined -> text\n let textNode = oldTextNode;\n const isNewTextNode = !textNode;\n if (isNewTextNode) {\n textNode = node.textNode = this.createNode('text');\n }\n this.setProp(textNode, 'text', String(val));\n // this.onePropParsed(pData, textNode, 'text', String(val), valueIsMapKey, false);\n if (isNewTextNode) {\n if (isUpdate) {\n this.handleInsert(node.realParent, textNode, node.realBefore);\n } else {\n this.tokenizer.nextToken();\n this.headerLineAndExtensions(node);\n const { realParent, prevSibling } = this.ctx;\n this.handleInsert(realParent, textNode, prevSibling);\n }\n this.leaveNode?.(textNode, false);\n }\n }\n\n isUpdate = true;\n return (isDestroy: boolean) => {\n if (isDestroy) {\n this.removeLogicNode(node as LogicNode);\n }\n };\n },\n [valueIsMapKey ? () => pData[value] : this.getFn(pData, value)],\n { type: 'render' }\n );\n return node;\n }\n\n createTpNode() {\n const child = deepSignal({}, getPulling());\n const node: TpNode = {\n __logicType: FakeType.Tp,\n data: this.getData(),\n realParent: null,\n realBefore: null,\n realAfter: null,\n contentBefore: null,\n contentAfter: null,\n effect: null,\n snapshot: null,\n tpData: child,\n owner: this.ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node\n };\n\n this.onePropParsed = createStoreOnePropParsed(child);\n this.tokenizer.nextToken(); // 跳过 node 本身,token -> id\n // 内部会完成 snapshot\n this.headerLineAndExtensions(node);\n // 组件用完,切换回 真实node 的方法\n this.onePropParsed = this.oneRealPropParsed;\n node.realAfter = this.insertAnchor(node, 'tp-after');\n // 这两个是不需要 anchorRefBack,它们是用于控制内容移动的。tp 本身位置由 tp-after 控制\n const before = (node.contentBefore = this.createAnchor('tp-content-before', true));\n const after = (node.contentAfter = this.createAnchor('tp-content-after', true));\n let firstRender = true;\n // 创建 Scope 管理子 effect 生命周期(参照 forItem),\n // 使 tp 移动目标 DOM 时子 effect 不被销毁\n let scope = new Scope(() => {});\n scope.scope = null;\n runWithPulling(() => {\n scope.get();\n }, null);\n node.effect = scope;\n this.effect(\n ({ old: oldDom, val: dom }) => {\n const removeTpChild = () => {\n // 删除\n if (oldDom) {\n let point = before;\n do {\n const next = this.nextSib(point);\n this.remove(point, oldDom, null);\n if (point === after) break;\n point = next;\n } while (true);\n }\n };\n /**\n * TODO: 在 SSR 渲染时字符串的拼接靠的是 节点创建 与 插入的时机来确定\n * 但是 tp 节点可能将后创建的节点插入到已创建的节点中,导致字符串拼接出现问题\n * 目前 SSR 只能让 tp 在首屏时不做插入,等到 hydrate 后通过更新渲染进行插入\n */\n // 首屏让 program 自动往下解析,或者 skip\n if (firstRender) {\n // 有 dom 节点时,tp 在 program 中会将 dom 设置为 realParent 然后开始解析子树,这里不需要做任何处理\n if (dom) {\n this.handleInsert(dom, after, null);\n this.handleInsert(dom, before, null);\n }\n // 无 dom 节点跳过,在\n else {\n // 如果有缩进则跳过缩进内部的内容\n if (this.tokenizer.token.type === TokenType.Indent) {\n // 如果是 indent 此时缩进比 tp 更进一格,所以要找 -2 位置的缩进为 tp 的缩进\n const dentLen = this.tokenizer.dentStack[this.tokenizer.dentStack.length - 2] ?? 0;\n this.tokenizer.skip(dentLen);\n }\n }\n } else {\n if (dom) {\n // 移动\n if (oldDom) {\n let point = before,\n lastInsert = null;\n do {\n const next = this.nextSib(point);\n // 修改直接子逻辑节点的 realParent\n const fakeNode = point[FakeNode];\n if (fakeNode) {\n fakeNode.realParent = dom;\n }\n this.handleInsert(dom, point, lastInsert);\n if (point === after) break;\n lastInsert = point;\n point = next;\n } while (true);\n }\n // 新增 参照 condDeclaration\n else {\n this.handleInsert(dom, after, null);\n this.handleInsert(dom, before, null);\n runWithPulling(() => {\n this.tokenizer = node.owner.tokenizer;\n this.tokenizer.resume(node.snapshot);\n this.tokenizer.useDedentAsEof = false;\n this.program(dom, node.owner, before, node);\n }, scope);\n }\n } else {\n // 删除\n removeTpChild();\n scope.dispose();\n scope = new Scope(() => {});\n scope.scope = null;\n runWithPulling(() => { scope.get(); }, null);\n node.effect = scope;\n }\n }\n firstRender = false;\n return (isDestroy: boolean) => {\n if (isDestroy) {\n removeTpChild();\n scope.dispose();\n }\n };\n },\n [() => child.node],\n { type: 'render' }\n );\n\n return node;\n }\n createContextNode() {\n const child = deepSignal({}, getPulling());\n const parentContext: any = this.ctx.stack.peekByType(NodeSort.Context)?.node?.context;\n if (parentContext) {\n backupSignal(child, parentContext);\n }\n\n this.onePropParsed = createStoreOnePropParsed(child);\n\n const node: ContextNode = {\n __logicType: FakeType.Context,\n context: child,\n realParent: null,\n realBefore: null,\n realAfter: null\n };\n node.realAfter = this.insertAnchor(node, 'context-after');\n return node;\n }\n\n formatForCollection(collection: any) {\n // 不调 toRaw:让 proxy 的 forEach 负责 trackIterator + deepSignal 包装 item\n const res = {\n arr: [] as any[],\n keys: null as string[] | null\n };\n\n // 数组\n if (Array.isArray(collection)) {\n res.arr = collection;\n return res;\n }\n\n // Map\n if (collection instanceof Map) {\n res.keys = [];\n collection.forEach((v, k) => {\n res.arr.push(v);\n res.keys.push(k);\n });\n return res;\n }\n\n // 集合\n if (typeof collection === 'object' && collection !== null) {\n if (collection[Symbol.iterator]) {\n res.arr = Array.from(collection);\n return res;\n }\n\n res.arr = Object.values(collection);\n res.keys = Object.keys(collection);\n return res;\n }\n\n if (typeof collection === 'number') {\n res.arr = Array.from({ length: collection });\n return res;\n }\n\n if (typeof collection === 'string') {\n res.arr = collection.split('');\n return res;\n }\n\n return res;\n }\n forDeclaration() {\n const arrExp = this.tokenizer.jsExp().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 reactiveArr: null,\n keys: 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 const rawGetKey = new Function('data', `with(data){return (${keyExp})}`) as any;\n forNode.getKey = (data: any) => rawGetKey(safe(data));\n }\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.insertAnchor(forNode, 'for-after');\n\n // 去除 dentStack 和 isFirstToken\n const { dentStack, isFirstToken, ...snapshotForUpdate } = forNode.snapshot;\n\n let isFirstRender = true;\n forNode.effect = new this.Effect(() => {\n const collection = arrSignal.get();\n const { arr: formattedArr, keys } = this.formatForCollection(collection);\n let arr: any = formattedArr;\n // 订阅 Iterator:数组/Map/Set 的结构变更\n arr[Keys.Iterator];\n const prevCtx = getPulling();\n setPulling(null);\n // reactiveArr:数组为 proxy 支持 index 级响应式,Map/Set item 已被 deepSignal 包装\n forNode.reactiveArr = formattedArr;\n // arr(diff 用):数组用 toRaw 避免 index 级依赖,Map/Set 本就是普通数组\n forNode.arr = Array.isArray(collection) ? toRaw(arr) : arr;\n forNode.keys = keys;\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.insertAnchor(item, 'for-item-after');\n item.realBefore = this.insertAnchor(item, 'for-item-before', true);\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, keys?.[i]);\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, keys?.[s]);\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, keys?.[e2]);\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, keys?.[newI]);\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 }, ScheduleType.Render);\n return forNode.children[0] || forNode;\n }\n\n /** after 锚点,对 fake 节点反引用\n * 用于 tp 节点 移动时,可以通过 after 锚点找到 fake 节点并做 realParent 的修正\n */\n anchorRefBack(anchor: any, node: LogicNode) {\n anchor[FakeNode] = node;\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.anchorRefBack(realAfter, item);\n this.handleInsert(forNode.realParent, realAfter, before);\n\n let realBefore = this.createAnchor('for-item-before', true);\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 // 解析到缩进小于 base 时自动 eof\n this.tokenizer.resume(snapshotForUpdate);\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(\n child: ForItemNode,\n data: any,\n itemExp: string | ((value: any) => any),\n i: number,\n indexName?: string,\n /** Map/Set 等有 key 时,index 值为 key */\n indexValue?: any\n ) {\n if (typeof itemExp === 'string') {\n child.data[itemExp] = data;\n if (indexName) {\n child.data[indexName] = indexValue ?? i;\n }\n } else {\n indexName = indexName || KEY_INDEX;\n child.data[indexName] = indexValue ?? 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 const context = this.ctx.stack.peekByType(NodeSort.Context)?.node?.data;\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 context\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, keys } = 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]: keys?.[i] ?? i\n }\n : {\n [itemExp]: arr[i]\n },\n getPulling()\n );\n } else {\n indexName = indexName ?? KEY_INDEX;\n const rawData = { [indexName]: keys?.[i] ?? i };\n data = deepSignal(rawData, getPulling());\n // 下标来源:\n // - getKey:用 data[indexName](reactive),key 表达式求值结果作为下标,下标变更时 Computed 自动重算\n // - keys 无 getKey:用 (data[indexName], i) — 下标是静态 i(扁平数组按位置索引),\n // 但通过逗号表达式读 data[indexName] 建立依赖:reuseForItem 更新 indexName 后 Computed 感知变化并重算\n // (Map/Set 的 reactiveArr 是 plain array,无 proxy get 陷阱,必须额外订阅 indexName)\n // - 无 keys 无 getKey:用 i — 普通数组,reactiveArr 是 proxy,reactiveArr[i] 的 get 陷阱自带 index 级依赖\n const computedData = new Computed(() =>\n itemExp((arrSignal.get(), forNode.reactiveArr)[getKey ? data[indexName] : keys ? (data[indexName], i) : i])\n );\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 backupSignal(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 new Scope(() => {\n return this.setProp(node, key, value, hookI);\n }).get();\n } else if (typeof value === 'function') {\n new this.Effect(() => {\n const res = value(data);\n const dispose = this.setProp(node, key, res, hookI);\n return dispose;\n }, ScheduleType.Render);\n } else if (valueIsMapKey) {\n new this.Effect(() => {\n const res = data[value];\n const dispose = this.setProp(node, key, res, hookI);\n return dispose;\n }, ScheduleType.Render);\n }\n // 静态数据\n else {\n this.setProp(node, key, value, hookI);\n }\n }\n\n oneRealPropParsed: Interpreter['onePropParsed'] = this.onePropParsed.bind(this);\n\n private createComponentData(ComponentOrRender: UI | typeof Store | InlineFragment) {\n let tokenizer: Tokenizer,\n child: any,\n fragmentSnapshot: Partial<Tokenizer>,\n resumeSnapshot: Partial<Tokenizer>,\n __logicType: FakeType.Component | FakeType.Fragment;\n\n const isCC = (ComponentOrRender as any).prototype instanceof Store;\n if (isCC) {\n const Component = ComponentOrRender as any;\n child = Component.new();\n tokenizer = child.ui(true);\n __logicType = FakeType.Component;\n } else if (ComponentOrRender instanceof InlineFragment) {\n const conf = ComponentOrRender;\n child = deepSignal({}, getPulling(), true);\n backupSignal(child, conf.data);\n tokenizer = conf.tokenizer;\n fragmentSnapshot = conf.snapshot;\n __logicType = FakeType.Fragment;\n resumeSnapshot = tokenizer.snapshot([\n 'dentStack',\n 'token',\n 'needIndent',\n 'isFirstToken',\n 'isFirstToken',\n 'useDedentAsEof'\n ]);\n } else {\n const render = ComponentOrRender as UI;\n const boundStore = render.boundStore;\n child = deepSignal({}, getPulling(), true);\n if (boundStore) {\n backupSignal(child, boundStore);\n }\n tokenizer = render(true);\n __logicType = FakeType.Fragment;\n }\n\n return {\n data: child,\n tokenizer,\n onePropParsed: createStoreOnePropParsed(child),\n fragmentSnapshot,\n resumeSnapshot,\n __logicType\n };\n }\n\n componentOrFragmentDeclaration(ComponentOrRender: UI | typeof Store | InlineFragment, ctx: ProgramCtx) {\n const { data, tokenizer, onePropParsed, fragmentSnapshot, resumeSnapshot, __logicType } =\n this.createComponentData(ComponentOrRender);\n const node: ComponentNode = {\n __logicType,\n realParent: ctx.realParent,\n realBefore: null,\n realAfter: null,\n data,\n tokenizer,\n fragmentSnapshot,\n resumeSnapshot\n };\n this.onePropParsed = onePropParsed;\n node.realAfter = this.insertAnchor(node, 'component-after');\n return node;\n }\n getFn(data: any, expression: string | number) {\n return new Function('data', `with(data){return (${expression})}`).bind(undefined, safe(data));\n }\n getAssignFn(data: any, expression: string | number) {\n const valueId = `value_bobe_${date32()}`;\n return new Function('data', valueId, `with(data){${expression}=${valueId}};`).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 context = ctx.stack.peekByType(NodeSort.Context)?.node?.data;\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 context\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.insertAnchor(ifNode, `${keyWord.value}-after`);\n\n const ef = this.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 { type: 'render' }\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 * 首行属性 + 可选的 pipe 扩展行\n * <headerLineAndExtensions> ::= <attributeList> NEWLINE (PIPE <attributeList> NEWLINE)*\n */\n headerLineAndExtensions(_node: any) {\n const { tokenizer } = this;\n do {\n const isComponent = _node.__logicType & TokenizerSwitcherBit;\n const isTp = _node.__logicType === FakeType.Tp;\n let snapshot: Partial<Tokenizer>, dentLen: number;\n const data = this.getData();\n const unHandledKey = this.attributeList(_node, data);\n // 为行内模板片段准备快照,当前 token 是 NEWLINE,快照需要包含换行符,所以 -1\n if (isComponent || isTp) {\n snapshot = tokenizer.snapshot(undefined, -1);\n dentLen = tokenizer.dentStack[tokenizer.dentStack.length - 1];\n }\n tokenizer.nextToken(); // NEWLINE\n if ((tokenizer.token.type & TokenType.Pipe) === 0) {\n // 是 indent, 且当前节点是组件节点,记录行内模板起始快照,\n // 跳过行内模板片段解析\n if (isComponent && tokenizer.token.type & TokenType.Indent) {\n this.inlineFragment(_node, snapshot, data, unHandledKey);\n tokenizer.skip(dentLen);\n if ((tokenizer.token.type & TokenType.Pipe) === 0) {\n break;\n }\n } else if (isTp) {\n _node.snapshot = snapshot;\n break;\n } else {\n break;\n }\n }\n tokenizer.nextToken(); // PIPE\n } while (true);\n }\n\n /**\n * 1. 快照\n * 2. 跳过 行内模板片段\n * 3. 准备\n * 1. tokenizer\n * 2. 快照\n * 3. 使用 CtxProvider 中 数据作为 data\n */\n inlineFragment(_node: any, snapshot: Partial<Tokenizer>, data: any, key = 'children') {\n const value = new InlineFragment(snapshot, data, key, this.tokenizer);\n this.onePropParsed(data, _node, key, value, false, true);\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, data: any) {\n let key: string, eq: any;\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 (key === 'props') {\n let prevKeys = new Set<any>();\n const savedDefaults = new Map<string, any>();\n new this.Effect(() => {\n const props = isFn ? rawVal : Reflect.has(data[Keys.Raw], value) ? data[value] : this.getFn(data, value)();\n const isComponent = _node.__logicType & TokenizerSwitcherBit;\n const rawTarget = isComponent ? _node.data[Keys.Raw] : null;\n\n const cleanupKeys = (keysToClean: Set<string>) => {\n for (const k of keysToClean) {\n if (k.startsWith('on')) continue;\n if (isComponent) {\n _node.data[k] = savedDefaults.has(k) ? savedDefaults.get(k) : undefined;\n } else {\n this.setProp(_node, k, undefined, hookI);\n }\n }\n };\n\n if (!props || typeof props !== 'object') {\n cleanupKeys(prevKeys);\n prevKeys.clear();\n return;\n }\n\n props[Keys.Iterator];\n const raw = props[Keys.Raw] || props;\n const keys = Object.keys(raw);\n const newKeys = new Set();\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n newKeys.add(k);\n prevKeys.delete(k);\n if (isComponent) {\n const savedK = savedDefaults.has(k);\n if (!savedK && hasOwn(rawTarget, k)) {\n savedDefaults.set(k, rawTarget[k]);\n }\n const val = props[k];\n _node.data[k] = val === undefined && savedK ? savedDefaults.get(k) : val;\n } else {\n this.onePropParsed(props, _node, k, k, true, false, hookI);\n }\n }\n\n cleanupKeys(prevKeys);\n prevKeys = newKeys;\n }, ScheduleType.Render);\n }\n // ref 应该将对应 key 值分配给 ref\n else if (key === 'ref') {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n let refValue = _node;\n if (_node.__logicType & TokenizerSwitcherBit) {\n refValue = _node.data;\n } else {\n refValue[Keys.ProxyFreeObject] = true;\n }\n\n if (valueIsMapKey) {\n data[value] = refValue;\n new Scope(() => () => {\n data[value] = null;\n }).get();\n } else {\n const fn = this.getAssignFn(data, value);\n // 执行赋值操作\n fn(refValue);\n new Scope(() => () => {\n fn(null);\n }).get();\n }\n }\n // 动态的要做成函数\n else if (hookType === 'dynamic') {\n const valueIsMapKey = Boolean(getProxyHasKey(data, 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 = undefined;\n eq = undefined;\n }\n this.tokenizer.nextToken();\n }\n return key;\n }\n\n config(opt: TerpConf) {\n Object.assign(this, opt);\n this.opt = opt;\n if (opt.noopEffect) {\n this.effect = noopEffect as any as typeof effect;\n this.Effect = NoopEffect as any as typeof Effect;\n }\n }\n\n createNode(name: string): any {\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, isBefore?: boolean): any {\n return {\n name,\n nextSibling: null,\n isBefore\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): any | (() => void) {\n node.props[key] = value;\n }\n\n beforeIndent?: (node: any) => boolean | void;\n leaveNode?: (node: any, isDedent: boolean) => void;\n beforeLogicIndent?: (node: any) => void;\n leaveLogicNode?: (node: any, isDedent: boolean) => void;\n\n Effect = Effect;\n effect = effect;\n}\n\nfunction createStoreOnePropParsed(child: any) {\n const onePropParsed: Interpreter['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(data));\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 return onePropParsed;\n}\n","import { flushMicroEffectManual, Keys, Store } from 'aoye';\nimport { Interpreter } from './terp';\nimport { Tokenizer } from './tokenizer';\nimport { UI, ComponentNode, CustomRenderConf, FakeType } from './type';\n\nexport function bobe<T extends Record<any, any> = any>(fragments: TemplateStringsArray, ...values: any[]) {\n const ui: UI<T> = 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 as any;\n ui[Keys.ProxyFreeObject] = true;\n ui.__BOBE_IS_UI = true;\n return ui;\n}\n\n// render -> options\nexport function customRender(option: CustomRenderConf) {\n // 保存 options\n return function render<T extends typeof Store>(Ctor: T, root: any) {\n const store = Ctor.new() as InstanceType<T>;\n // @ts-ignore\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\n option.onBeforeFlush?.();\n\n flushMicroEffectManual();\n // ui => bobe`` 返回的函数\n return [componentNode, store] as const;\n };\n}\n","import { getCtxStack } from './global';\nimport { NodeSort } from './type';\n\nexport type IContext = {\n <T = any>(name: string): T;\n <T = any>(): T;\n};\nexport const context: IContext = (name?: string) => {\n const stack = getCtxStack();\n if (!stack) {\n throw new Error('context() api 只能在组件中使用');\n }\n\n let context = stack.peekByType(NodeSort.Context)?.node?.context;\n\n if (name) {\n context = context?.[name];\n }\n\n if (!context) {\n console.warn(`context(${name ?? ''}) 为空`);\n }\n\n return context as any;\n};\n","import { effect as _effect, CustomEffectOpt, Store, ValueDiff } from 'aoye';\nimport { Dep, isDep } from './type';\nimport { Tokenizer } from './tokenizer';\nexport { Store } from 'aoye';\n\nconst depTokenizer = new Tokenizer(() => '', false);\n\nexport const effect = (\n callback: (...args: ValueDiff[]) => void,\n depOrOpt?: Dep[] | Dep | CustomEffectOpt,\n opt?: CustomEffectOpt\n) => {\n const isArray = Array.isArray(depOrOpt);\n const isSingleDep = isDep(depOrOpt);\n const deps = isArray ? depOrOpt : isSingleDep ? [depOrOpt] : [];\n const option = isArray || isSingleDep ? opt : depOrOpt;\n const newDeps: Dep[] = [];\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (typeof dep === 'string') {\n depTokenizer.code = dep.trim()+'\\n';\n let exp;\n while (depTokenizer.i < depTokenizer.code.length) {\n exp = depTokenizer.jsExp().value;\n depTokenizer.nextToken(); // 跳过分号\n newDeps.push(new Function('data', `let v;with(data){v=${exp};}return v;`).bind(undefined, Store.Current));\n }\n } else {\n newDeps.push(dep);\n }\n }\n\n return _effect(callback, newDeps, option);\n};\n"],"names":["TokenType","BaseTokenType","String","Number","Boolean","Null","Undefined","ValueTokenType","InsertionExp","StaticInsExp","FakeType","CondBit","If","Fail","Else","CtxProviderBit","For","ForItem","Component","Fragment","DynamicText","ContextBit","Context","Tp","TokenizerSwitcherBit","NodeSort","TerpEvt","FakeNode","Symbol","ParseErrorCode","ParseSyntaxError","SyntaxError","constructor","code","message","loc","isDep","target","Signal","Computed","Tokenizer","TabSize","Tab","Array","from","length","join","EofId","Date","now","DedentId","needIndent","isFirstToken","dentStack","i","line","column","preCol","preI","needLoc","handledTokens","waitingTokens","Queue","source","hook","useDedentAsEof","initIndentWhenUseDedentAsEof","setToken","Indent","next","char","getCurrentPos","offset","unclosedLoc","startOffset","startLine","startCol","end","start","slice","throwUnclosed","resume","_snapshot","token","undefined","clone","Object","assign","snapshot","keys","dtI","snap","k","skip","targetDentLen","skipFragment","_this$getDentValue","getDentValue","value","isEmptyLine","currLen","expLen","INCONSISTENT_INDENT","emptyLoc","shorterThanBaseDentEof","pop","Dedent","push","type","typeName","nextToken","setCode","trimEnd","tokenize","console","log","JSON","stringify","isEof","Identifier","dt","len","item","shift","outer","locStart","dent","locEnd","newLine","assignment","pipe","Semicolon","comment","str","braceToken","brace","handled","staticIns","isNum","number","matchIdStart2","identifier","error","getComment","nextC","MISSING_COMMENT_SECOND_SLASH","condExp","getStr","trimmed","replace","trim","isEol","jsExp","peekChar","peekCharIsEol","charIsEol","Assign","Pipe","innerBrace","UNCLOSED_STATIC_INS","inComment","count","UNCLOSED_BRACE","nextChar","NewLine","pos","_this$getDentValue2","indentHasLen","prevLen","yes","matchId","realValue","tokenType","head","parseEscape","continuousBackslashCount","UNCLOSED_STRING","memoCount","escapeMap","eof","Eof","HookId","hookI","_hook","props","isDynamicHook","isStaticHook","hookType","res","init","fragments","fragment","NodeType","Compiler","_applyDecs$e","_slicedToArray","_applyDecs","NodeHook","NodeLoc","TokenLoc","e","_initProto","errors","tokenizer","hooks","addError","node","hasError","parseProgram","body","templateNode","toString","Program","handleChildren","children","child","siblings","PIPE_IN_WRONG_CONTEXT","_this$tokenizer$_hook","_this$tokenizer$_hook2","isElseOrFail","lastSibling","lastType","ELSE_WITHOUT_IF","parseConditionalNode","parseLoopNode","parseComponentNode","parseElementNode","name","parseName","componentName","headerLineAndExtensions","propsAdded","call","tagToken","INVALID_TAG_NAME","tagName","Element","keyword","condition","parseJsExp","forLoc","collection","MISSING_FOR_COLLECTION","semicolonToken","MISSING_FOR_SEMICOLON","itemToken","isDestruct","MISSING_FOR_ITEM","key","index","attributeList","prop","parseProperty","Property","INVALID_PROP_KEY","parsePropertyKey","MISSING_ASSIGN","handleOnlyKeyLoc","valueToken","parsePropertyInlineFragment","handleKeyValueLoc","MISSING_PROP_ASSIGNMENT","parsePropertyValue","PropertyKey","_this$tokenizer$_hook3","_this$tokenizer$_hook4","DynamicValue","StaticValue","_this$tokenizer$_hook5","_this$tokenizer$_hook6","list","_this$tokenizer$_hook7","_this$tokenizer$_hook8","context","_node","result","prevParent","currentParent","parent","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","InlineFragment","Keys","ProxyFreeObject","data","isUI","fn","__BOBE_IS_UI","isRenderAble","val","isStore","SAFE_HANDLER","has","get","t","safe","Proxy","KEY_INDEX","_ctxStack","getCtxStack","setCtxStack","Interpreter","rootComponent","program","root","componentNode","before","ctxProvider","Real","CtxProvider","TokenizerSwitcher","__logicType","effect","EffectNode","rootLen","ctx","realParent","prevSibling","current","rootPulling","getPulling","handleInsert","leaveLogicNode","leaveNode","isEffectNode","beforeLogicIndent","setPulling","realBefore","runWithPulling","tpData","contentBefore","beforeIndent","dentLen","declaration","_stack$pop","_stack$pop2","_stack$pop2$","sort","prevSameType","sameNode","parentLogic","switcher","resumeSnapshot","_ref","forNode","insertAnchor","isBefore","_this$ctx","afterAnchor","createAnchor","anchorRefBack","parentComponent","insertAfter","realAfter","childCmp","getPrevRealSibling","point","lastChild","anchor","condDeclaration","createContextNode","createTpNode","forDeclaration","getData","componentOrFragmentDeclaration","createNode","setProp","dynamicDeclaration","onePropParsed","oneRealPropParsed","fragmentSnapshot","pData","valueIsMapKey","getProxyHasKey","textNode","owner","parentDataProvider","isUpdate","old","oldLogicType","oldTextNode","removeLogicNode","pickInPlace","remove","info","createComponentData","isNewTextNode","_this$ctx2","isDestroy","getFn","deepSignal","contentAfter","createStoreOnePropParsed","after","firstRender","scope","Scope","oldDom","dom","removeTpChild","nextSib","lastInsert","fakeNode","dispose","parentContext","backupSignal","formatForCollection","isArray","Map","forEach","v","iterator","values","split","arrExp","itemExp","vars","match","jsVarRegexp","varStr","Function","indexName","keyExp","reactiveArr","arrSignal","getKey","rawGetKey","cells","Meta","hasArrExpKey","Reflect","Raw","_forNode$snapshot","snapshotForUpdate","_objectWithoutProperties","_excluded","isFirstRender","Effect","_this$formatForCollec","formattedArr","Iterator","prevCtx","toRaw","createForItem","firstInsert","oldLen","newLen","minLen","Math","min","newChildren","removeForItem","lastAfter","insertForItem","reuseForItem","s","e1","e2","itemData","getItemData","firstBefore","s1","s2","mixLen","key2new","set","maxIncNewI","hasMove","new2oldI","fill","newI","delete","incI","incLen","p1","p2","oldI","staticIdx","ScheduleType","Render","parentData","indexValue","forItemId","forItemNode","id","rawData","computedData","_this$ctx$stack$peekB","isFn","bind","ComponentOrRender","isCC","prototype","Store","new","ui","conf","render","boundStore","_this$createComponent","expression","getAssignFn","valueId","date32","keyWord","expToken","isElse","isIf","preIsCond","noCond","ifNode","preCond","signal","ef","firstChild","isComponent","isTp","unHandledKey","inlineFragment","eq","rawVal","prevKeys","Set","savedDefaults","rawTarget","cleanupKeys","keysToClean","startsWith","clear","raw","newKeys","add","savedK","hasOwn","refValue","config","opt","noopEffect","NoopEffect","nextSibling","defaultInsert","defaultRemove","_","shareSignal","meta","computed","bobe","isSub","Current","customRender","option","Ctor","store","terp","onBeforeFlush","flushMicroEffectManual","Error","warn","depTokenizer","callback","depOrOpt","isSingleDep","deps","newDeps","dep","exp","_effect"],"mappings":"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"}
|