import { NodeTransform } from '../transform' import { findDir } from '../utils' import { ElementNode, ForNode, IfNode, NodeTypes } from '../ast' import { SET_BLOCK_TRACKING } from '../runtimeHelpers' const seen = new WeakSet() export const transformOnce: NodeTransform = (node, context) => { if (node.type === NodeTypes.ELEMENT && findDir(node, 'once', true)) { if (seen.has(node)) { return } seen.add(node) context.helper(SET_BLOCK_TRACKING) return () => { const cur = context.currentNode as ElementNode | IfNode | ForNode if (cur.codegenNode) { cur.codegenNode = context.cache(cur.codegenNode, true /* isVNode */) } } } }