dismantle 0.2.1 → 0.2.2

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.
@@ -1062,8 +1062,8 @@ function getFunctionReplacement(ctx, path2, entryFile, bindings, halting) {
1062
1062
  path2.node.id,
1063
1063
  [t6.restElement(rest)],
1064
1064
  t6.blockStatement(replacement),
1065
- true,
1066
- halting.hasYield
1065
+ halting.hasYield,
1066
+ true
1067
1067
  );
1068
1068
  }
1069
1069
  return t6.arrowFunctionExpression(
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/index.ts", "../../../src/split.ts", "../../../src/hidden-imports.ts", "../../../src/utils/assert.ts", "../../../src/utils/generator-shim.ts", "../../../src/utils/get-descriptive-name.ts", "../../../src/utils/get-foreign-bindings.ts", "../../../src/utils/get-identifiers-from-lval.ts", "../../../src/utils/get-import-identifier.ts", "../../../src/utils/get-module-definition.ts", "../../../src/utils/get-import-specifier-name.ts", "../../../src/utils/unwrap.ts", "../../../src/utils/get-root-statement-path.ts", "../../../src/transform-block.ts", "../../../src/transform-call.ts", "../../../src/utils/register-import-specifiers.ts", "../../../src/plugin.ts", "../../../src/utils/xxhash32.ts"],
4
- "sourcesContent": ["import * as babel from '@babel/core';\nimport path from 'node:path';\nimport { plugin } from './plugin';\nimport type { CodeOutput, Options, StateContext } from './types';\nimport assert from './utils/assert';\nimport xxHash32 from './utils/xxhash32';\n\nexport interface Output extends CodeOutput {\n files: Map<string, CodeOutput>;\n entries: string[];\n roots: string[];\n}\n\nexport type {\n CodeOutput,\n DefaultImportDefinition,\n DirectiveDefinition,\n ImportDefinition,\n NamedImportDefinition,\n Options,\n} from './types';\n\nexport async function compile(\n id: string,\n code: string,\n options: Options,\n): Promise<Output> {\n const parsedPath = path.parse(id);\n\n const entries: string[] = [];\n const roots: string[] = [];\n const files = new Map<string, CodeOutput>();\n\n const ctx: StateContext = {\n id,\n path: parsedPath,\n imports: new Map(),\n virtual: {\n count: 0,\n },\n options,\n bindings: new Map(),\n blocks: {\n hash: xxHash32(id).toString(16),\n count: 0,\n },\n onVirtualFile(current, content, mode) {\n const filePath = path.join(parsedPath.dir, current);\n files.set(path.join(parsedPath.dir, current), content);\n if (mode === 'entry') {\n entries.push(filePath);\n } else if (mode === 'root') {\n roots.push(filePath);\n }\n },\n registrations: {\n identifiers: new Map(),\n namespaces: new Map(),\n },\n };\n\n const plugins: babel.ParserOptions['plugins'] = ['jsx'];\n\n if (/\\.[mc]?tsx?$/i.test(id)) {\n plugins.push('typescript');\n }\n\n const result = await babel.transformAsync(code, {\n plugins: [[plugin, ctx]],\n parserOpts: {\n plugins,\n },\n filename: parsedPath.base,\n ast: false,\n sourceFileName: id,\n sourceMaps: true,\n configFile: false,\n babelrc: false,\n });\n\n assert(result, 'invariant');\n\n return {\n code: result.code,\n map: result.map,\n files,\n entries,\n roots,\n };\n}\n", "import type * as babel from '@babel/core';\nimport type { Binding, BindingKind } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { HIDDEN_FUNC, HIDDEN_GENERATOR } from './hidden-imports';\nimport type {\n DirectiveDefinition,\n FunctionDefinition,\n ImportDefinition,\n ModuleDefinition,\n StateContext,\n} from './types';\nimport assert from './utils/assert';\nimport { generateCode } from './utils/generator-shim';\nimport { getDescriptiveName } from './utils/get-descriptive-name';\nimport getForeignBindings from './utils/get-foreign-bindings';\nimport { getIdentifiersFromLVal } from './utils/get-identifiers-from-lval';\nimport { getImportIdentifier } from './utils/get-import-identifier';\nimport { getModuleDefinition } from './utils/get-module-definition';\nimport { getRootStatementPath } from './utils/get-root-statement-path';\nimport { isPathValid, unwrapPath } from './utils/unwrap';\n\nfunction moduleDefinitionToImportSpecifier(definition: ModuleDefinition) {\n switch (definition.kind) {\n case 'default':\n return t.importDefaultSpecifier(t.identifier(definition.local));\n case 'named':\n return t.importSpecifier(\n t.identifier(definition.local),\n definition.imported\n ? t.identifier(definition.imported)\n : t.identifier(definition.local),\n );\n case 'namespace':\n return t.importNamespaceSpecifier(t.identifier(definition.local));\n }\n}\n\nfunction moduleDefinitionToImportDeclaration(definition: ModuleDefinition) {\n return t.importDeclaration(\n [moduleDefinitionToImportSpecifier(definition)],\n t.stringLiteral(definition.source),\n );\n}\n\nfunction moduleDefinitionsToImportDeclarations(\n definitions: ModuleDefinition[],\n) {\n const declarations: t.ImportDeclaration[] = [];\n for (let i = 0, len = definitions.length; i < len; i++) {\n declarations[i] = moduleDefinitionToImportDeclaration(definitions[i]);\n }\n return declarations;\n}\n\nfunction isMutation(kind: BindingKind): boolean {\n switch (kind) {\n case 'let':\n case 'var':\n case 'param':\n return true;\n case 'const':\n case 'hoisted':\n case 'local':\n case 'module':\n case 'unknown':\n return false;\n }\n}\n\nfunction registerModuleLevelBinding(\n ctx: StateContext,\n modules: ModuleDefinition[],\n binding: string,\n target: Binding,\n): void {\n const current = ctx.bindings.get(binding);\n if (current) {\n modules.push(current);\n } else if (isPathValid(target.path, t.isVariableDeclarator)) {\n const definitions = splitVariableDeclarator(ctx, target.path);\n for (let k = 0, klen = definitions.length; k < klen; k++) {\n modules.push(definitions[k]);\n ctx.bindings.set(definitions[k].local, definitions[k]);\n }\n } else if (isPathValid(target.path, t.isFunctionDeclaration)) {\n const definition = splitFunctionDeclaration(ctx, target.path);\n modules.push(definition);\n ctx.bindings.set(definition.local, definition);\n }\n}\n\nfunction registerBinding(\n ctx: StateContext,\n modules: ModuleDefinition[],\n locals: t.Identifier[],\n mutations: t.Identifier[],\n binding: string,\n target: Binding,\n pure?: boolean,\n): void {\n if (target.kind === 'module') {\n const result = getModuleDefinition(target.path);\n if (result) {\n modules.push(result);\n }\n } else if (target.kind === 'param') {\n locals.push(target.identifier);\n } else {\n let blockParent = target.path.scope.getBlockParent();\n const programParent = target.path.scope.getProgramParent();\n // a FunctionDeclaration binding refers to itself as the block parent\n if (blockParent.path === target.path) {\n blockParent = blockParent.parent;\n }\n if (blockParent === programParent) {\n registerModuleLevelBinding(ctx, modules, binding, target);\n } else if (!pure) {\n locals.push(target.identifier);\n if (isMutation(target.kind)) {\n mutations.push(target.identifier);\n }\n }\n }\n}\n\ninterface ExtractedBindings {\n modules: ModuleDefinition[];\n locals: t.Identifier[];\n mutations: t.Identifier[];\n}\n\nfunction extractBindings(\n ctx: StateContext,\n path: babel.NodePath,\n bindings: Set<string>,\n pure?: boolean,\n): ExtractedBindings {\n const modules: ModuleDefinition[] = [];\n const locals: t.Identifier[] = [];\n const mutations: t.Identifier[] = [];\n for (const binding of bindings) {\n const target = path.scope.getBinding(binding);\n if (target) {\n registerBinding(ctx, modules, locals, mutations, binding, target, pure);\n }\n }\n\n return {\n modules,\n locals,\n mutations,\n };\n}\n\nfunction createVirtualFileName(ctx: StateContext) {\n return `./${ctx.path.base}?${ctx.options.key}=${ctx.virtual.count++}${\n ctx.path.ext\n }`;\n}\n\nfunction createRootFile(\n ctx: StateContext,\n bindings: ExtractedBindings,\n replacement: t.Expression,\n): string {\n const rootFile = createVirtualFileName(ctx);\n const rootContent = generateCode(\n ctx.id,\n t.program([\n ...(ctx.options.mode === 'server'\n ? moduleDefinitionsToImportDeclarations(bindings.modules)\n : []),\n t.exportDefaultDeclaration(replacement),\n ]),\n );\n ctx.onVirtualFile(\n rootFile,\n { code: rootContent.code, map: rootContent.map },\n 'root',\n );\n return rootFile;\n}\n\nfunction createEntryFile(\n ctx: StateContext,\n path: babel.NodePath,\n rootFile: string,\n imported: ImportDefinition,\n): string {\n // Create an ID\n let id = `${ctx.blocks.hash}-${ctx.blocks.count++}`;\n if (ctx.options.env !== 'production') {\n id += `-${getDescriptiveName(path, 'anonymous')}`;\n }\n const entryID = path.scope.generateUidIdentifier('entry');\n const entryImports: ModuleDefinition[] = [\n {\n kind: imported.kind,\n source: imported.source,\n local: entryID.name,\n imported: imported.kind === 'named' ? imported.name : undefined,\n },\n ];\n const args: t.Expression[] = [t.stringLiteral(id)];\n if (ctx.options.mode === 'server') {\n const rootID = path.scope.generateUidIdentifier('root');\n entryImports.push({\n kind: 'default',\n source: rootFile,\n local: rootID.name,\n });\n args.push(rootID);\n }\n\n // Create the registration call\n const entryFile = createVirtualFileName(ctx);\n const entryContent = generateCode(\n ctx.id,\n t.program([\n ...moduleDefinitionsToImportDeclarations(entryImports),\n t.exportDefaultDeclaration(t.callExpression(entryID, args)),\n ]),\n );\n ctx.onVirtualFile(\n entryFile,\n { code: entryContent.code, map: entryContent.map },\n 'entry',\n );\n\n return entryFile;\n}\n\nfunction splitFunctionDeclaration(\n ctx: StateContext,\n path: babel.NodePath<t.FunctionDeclaration>,\n): ModuleDefinition {\n const bindings = getForeignBindings(path, 'function');\n const { modules } = extractBindings(ctx, path, bindings);\n const file = createVirtualFileName(ctx);\n const compiled = generateCode(\n ctx.id,\n t.program([\n ...moduleDefinitionsToImportDeclarations(modules),\n t.exportNamedDeclaration(path.node),\n ]),\n );\n ctx.onVirtualFile(file, { code: compiled.code, map: compiled.map }, 'none');\n\n const statement = getRootStatementPath(path);\n\n const identifier = path.node.id || path.scope.generateUidIdentifier('func');\n const definition: ModuleDefinition = {\n kind: 'named',\n local: identifier.name,\n source: file,\n };\n\n statement.insertBefore(moduleDefinitionToImportDeclaration(definition));\n path.remove();\n return definition;\n}\n\nfunction splitVariableDeclarator(\n ctx: StateContext,\n path: babel.NodePath<t.VariableDeclarator>,\n): ModuleDefinition[] {\n const init = unwrapPath(path.get('init'), t.isExpression);\n const modules = init\n ? extractBindings(\n ctx,\n path,\n getForeignBindings(\n path,\n isPathValid(init, t.isArrowFunctionExpression) ||\n isPathValid(init, t.isFunctionExpression)\n ? 'function'\n : 'expression',\n ),\n ).modules\n : [];\n const file = createVirtualFileName(ctx);\n const parent = path.parentPath.node as t.VariableDeclaration;\n const compiled = generateCode(\n ctx.id,\n t.program([\n ...moduleDefinitionsToImportDeclarations(modules),\n t.exportNamedDeclaration(t.variableDeclaration(parent.kind, [path.node])),\n ]),\n );\n ctx.onVirtualFile(file, { code: compiled.code, map: compiled.map }, 'none');\n const definitions: ModuleDefinition[] = getIdentifiersFromLVal(\n path.node.id,\n ).map(name => ({\n kind: 'named',\n local: name,\n source: file,\n }));\n // Replace declaration with definition\n const statement = getRootStatementPath(path);\n if (statement) {\n statement.insertBefore(moduleDefinitionsToImportDeclarations(definitions));\n }\n path.remove();\n return definitions;\n}\n/**\n * These are internal code for the control flow of the server block\n * The goal is to transform these into return statements, and the\n * the return value with the associated control flow code.\n * This allows the replacement statement for the server block to\n * know what to do if it encounters the said statement on the server.\n */\nconst BREAK_KEY = t.numericLiteral(0);\nconst CONTINUE_KEY = t.numericLiteral(1);\nconst RETURN_KEY = t.numericLiteral(2);\n// If the function has no explicit return\nconst NO_HALT_KEY = t.numericLiteral(3);\nconst THROW_KEY = t.numericLiteral(4);\nconst YIELD_KEY = t.numericLiteral(5);\n\ninterface HaltingBlockResult {\n breaks: string[];\n breakCount: number;\n continues: string[];\n continueCount: number;\n hasReturn: boolean;\n hasYield: boolean;\n}\n\nfunction transformBlockContent(\n path: babel.NodePath<t.BlockStatement>,\n mutations: t.Identifier[],\n): HaltingBlockResult {\n const target =\n path.scope.getFunctionParent() || path.scope.getProgramParent();\n\n const breaks: string[] = [];\n let breakCount = 0;\n const continues: string[] = [];\n let continueCount = 0;\n let hasReturn = false;\n let hasYield = false;\n\n const applyMutations = mutations.length\n ? path.scope.generateUidIdentifier('mutate')\n : undefined;\n\n // Transform the control flow statements\n path.traverse({\n BreakStatement(child) {\n const parent =\n child.scope.getFunctionParent() || child.scope.getProgramParent();\n if (parent === target) {\n const replacement: t.Expression[] = [BREAK_KEY];\n breakCount++;\n if (child.node.label) {\n const targetName = child.node.label.name;\n breaks.push(targetName);\n replacement.push(t.stringLiteral(targetName));\n } else {\n replacement.push(t.nullLiteral());\n }\n if (applyMutations) {\n replacement.push(t.callExpression(applyMutations, []));\n }\n child.replaceWith(t.returnStatement(t.arrayExpression(replacement)));\n child.skip();\n }\n },\n ContinueStatement(child) {\n const parent =\n child.scope.getFunctionParent() || child.scope.getProgramParent();\n if (parent === target) {\n const replacement: t.Expression[] = [CONTINUE_KEY];\n continueCount++;\n if (child.node.label) {\n const targetName = child.node.label.name;\n continues.push(targetName);\n replacement.push(t.stringLiteral(targetName));\n } else {\n replacement.push(t.nullLiteral());\n }\n if (applyMutations) {\n replacement.push(t.callExpression(applyMutations, []));\n }\n child.replaceWith(t.returnStatement(t.arrayExpression(replacement)));\n child.skip();\n }\n },\n ReturnStatement(child) {\n const parent =\n child.scope.getFunctionParent() || child.scope.getProgramParent();\n if (parent === target) {\n hasReturn = true;\n const arg = child.get('argument');\n arg.replaceWith(\n t.arrayExpression([\n RETURN_KEY,\n arg.node ? arg.node : t.nullLiteral(),\n applyMutations\n ? t.callExpression(applyMutations, [])\n : t.nullLiteral(),\n ]),\n );\n }\n },\n YieldExpression(child) {\n const parent =\n child.scope.getFunctionParent() || child.scope.getProgramParent();\n if (parent === target) {\n hasYield = true;\n if (child.node.delegate) {\n // TODO\n } else {\n const arg = child.get('argument');\n arg.replaceWith(\n t.arrayExpression([\n YIELD_KEY,\n arg.node ? arg.node : t.nullLiteral(),\n applyMutations\n ? t.callExpression(applyMutations, [])\n : t.nullLiteral(),\n ]),\n );\n }\n }\n },\n });\n\n const error = path.scope.generateUidIdentifier('error');\n\n const throwResult: t.Expression[] = [THROW_KEY, error];\n const haltResult: t.Expression[] = [NO_HALT_KEY];\n\n if (applyMutations) {\n throwResult.push(t.callExpression(applyMutations, []));\n haltResult.push(t.nullLiteral());\n haltResult.push(t.callExpression(applyMutations, []));\n }\n\n const statements: t.Statement[] = [\n t.tryStatement(\n t.blockStatement(path.node.body),\n t.catchClause(\n error,\n t.blockStatement([t.returnStatement(t.arrayExpression(throwResult))]),\n ),\n ),\n t.returnStatement(t.arrayExpression(haltResult)),\n ];\n\n if (applyMutations) {\n statements.unshift(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n applyMutations,\n t.arrowFunctionExpression(\n [],\n t.objectExpression(\n mutations.map(item => t.objectProperty(item, item, false, true)),\n ),\n ),\n ),\n ]),\n );\n }\n\n path.node.body = statements;\n return { breaks, continues, hasReturn, hasYield, breakCount, continueCount };\n}\n\n/**\n * This generates a chain of if-statements that checks the\n * received server return (which is transformed from the original block's\n * server statement)\n * Each if-statement matches an specific label, assuming that the original\n * break statement is a labeled break statement.\n * Otherwise, the output code is either a normal break statement or none.\n */\nfunction getBreakCheck(\n returnType: t.Identifier,\n returnResult: t.Identifier,\n breakCount: number,\n breaks: string[],\n check: t.Statement | undefined,\n): t.Statement | undefined {\n let current: t.Statement | undefined;\n if (breakCount !== breaks.length) {\n current = t.blockStatement([t.breakStatement()]);\n }\n for (let i = 0, len = breaks.length; i < len; i++) {\n const target = breaks[i];\n current = t.blockStatement([\n t.ifStatement(\n t.binaryExpression('===', returnResult, t.stringLiteral(target)),\n t.blockStatement([t.breakStatement(t.identifier(target))]),\n current,\n ),\n ]);\n }\n if (current) {\n return t.ifStatement(\n t.binaryExpression('===', returnType, BREAK_KEY),\n current,\n check,\n );\n }\n return check;\n}\n\n/**\n * This generates a chain of if-statements that checks the\n * received server return (which is transformed from the original block's\n * server statement)\n * Each if-statement matches an specific label, assuming that the original\n * continue statement is a labeled continue statement.\n * Otherwise, the output code is either a normal continue statement or none.\n */\nfunction getContinueCheck(\n returnType: t.Identifier,\n returnResult: t.Identifier,\n continueCount: number,\n continues: string[],\n check: t.Statement | undefined,\n): t.Statement | undefined {\n let current: t.Statement | undefined;\n if (continueCount !== continues.length) {\n current = t.blockStatement([t.continueStatement()]);\n }\n for (let i = 0, len = continues.length; i < len; i++) {\n const target = continues[i];\n current = t.blockStatement([\n t.ifStatement(\n t.binaryExpression('===', returnResult, t.stringLiteral(target)),\n t.blockStatement([t.continueStatement(t.identifier(target))]),\n current,\n ),\n ]);\n }\n if (current) {\n return t.ifStatement(\n t.binaryExpression('===', returnType, CONTINUE_KEY),\n current,\n check,\n );\n }\n return check;\n}\n\nfunction getGeneratorReplacementForServerBlock(\n path: babel.NodePath,\n registerID: t.Identifier,\n args: (t.Identifier | t.SpreadElement | t.ArrayExpression)[],\n): [replacements: t.Statement[], step: t.Identifier] {\n const iterator = path.scope.generateUidIdentifier('iterator');\n const step = path.scope.generateUidIdentifier('step');\n const replacement: t.Statement[] = [\n t.variableDeclaration('let', [\n t.variableDeclarator(step),\n // First, get the iterator by calling the generator\n t.variableDeclarator(\n iterator,\n t.awaitExpression(t.callExpression(registerID, args)),\n ),\n ]),\n // Create a while statement, the intent is to\n // repeatedly iterate the generator\n t.whileStatement(\n t.booleanLiteral(true),\n t.blockStatement([\n // Get the next value\n t.expressionStatement(\n t.assignmentExpression(\n '=',\n step,\n t.awaitExpression(\n t.callExpression(\n t.memberExpression(iterator, t.identifier('next')),\n [],\n ),\n ),\n ),\n ),\n // Check if the step is done\n t.ifStatement(\n t.memberExpression(step, t.identifier('done')),\n t.blockStatement([\n // exit the loop\n t.breakStatement(),\n ]),\n // Otherwise, yield the value\n t.blockStatement([\n t.expressionStatement(\n t.yieldExpression(\n t.memberExpression(step, t.identifier('value')),\n ),\n ),\n ]),\n ),\n ]),\n ),\n ];\n return [replacement, step];\n}\n\nfunction getBlockReplacement(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n entryFile: string,\n bindings: ExtractedBindings,\n halting: HaltingBlockResult,\n) {\n // Move to the replacement for the server block,\n // declare the type and result based from transformBlockContent\n const returnType = path.scope.generateUidIdentifier('type');\n const returnResult = path.scope.generateUidIdentifier('result');\n const returnMutations = path.scope.generateUidIdentifier('mutations');\n let check: t.Statement | undefined;\n // If the block has a return, we need to make sure that the\n // replacement does too.\n if (halting.hasReturn) {\n check = t.ifStatement(\n t.binaryExpression('===', returnType, RETURN_KEY),\n t.blockStatement([t.returnStatement(returnResult)]),\n check,\n );\n }\n // If the block has a break, we also do it.\n if (halting.breakCount > 0) {\n check = getBreakCheck(\n returnType,\n returnResult,\n halting.breakCount,\n halting.breaks,\n check,\n );\n }\n // If the block has a continue, we also do it.\n if (halting.continueCount > 0) {\n check = getContinueCheck(\n returnType,\n returnResult,\n halting.continueCount,\n halting.continues,\n check,\n );\n }\n const replacement: t.Statement[] = [];\n if (halting.hasYield) {\n const blockID = path.scope.generateUidIdentifier('block');\n replacement.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n blockID,\n t.callExpression(getImportIdentifier(ctx, path, HIDDEN_GENERATOR), [\n t.memberExpression(\n t.awaitExpression(t.importExpression(t.stringLiteral(entryFile))),\n t.identifier('default'),\n ),\n bindings.mutations.length\n ? t.arrowFunctionExpression(\n [returnMutations],\n t.assignmentExpression(\n '=',\n t.objectPattern(\n bindings.mutations.map(item =>\n t.objectProperty(item, item, false, true),\n ),\n ),\n returnMutations,\n ),\n )\n : t.nullLiteral(),\n ]),\n ),\n ]),\n );\n const [reps, step] = getGeneratorReplacementForServerBlock(\n path,\n blockID,\n bindings.locals,\n );\n for (let i = 0, len = reps.length; i < len; i++) {\n replacement.push(reps[i]);\n }\n replacement.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.arrayPattern([returnType, returnResult]),\n t.memberExpression(step, t.identifier('value')),\n ),\n ]),\n );\n } else {\n replacement.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.arrayPattern([returnType, returnResult]),\n t.awaitExpression(\n t.callExpression(\n t.callExpression(getImportIdentifier(ctx, path, HIDDEN_FUNC), [\n t.memberExpression(\n t.awaitExpression(\n t.importExpression(t.stringLiteral(entryFile)),\n ),\n t.identifier('default'),\n ),\n bindings.mutations.length\n ? t.arrowFunctionExpression(\n [returnMutations],\n t.assignmentExpression(\n '=',\n t.objectPattern(\n bindings.mutations.map(item =>\n t.objectProperty(item, item, false, true),\n ),\n ),\n returnMutations,\n ),\n )\n : t.nullLiteral(),\n ]),\n bindings.locals,\n ),\n ),\n ),\n ]),\n );\n }\n if (check) {\n replacement.push(check);\n }\n\n return t.blockStatement(replacement);\n}\n\nfunction replaceBlock(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n directive: DirectiveDefinition,\n bindings: ExtractedBindings,\n): void {\n // Transform all control statements\n const halting = transformBlockContent(path, bindings.mutations);\n const rootFile = createRootFile(\n ctx,\n bindings,\n t.functionExpression(\n undefined,\n bindings.locals,\n t.blockStatement(path.node.body),\n halting.hasYield,\n true,\n ),\n );\n const entryFile = createEntryFile(ctx, path, rootFile, directive.target);\n path.replaceWith(\n getBlockReplacement(ctx, path, entryFile, bindings, halting),\n );\n}\n\nexport function splitBlock(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n directive: DirectiveDefinition,\n): void {\n replaceBlock(\n ctx,\n path,\n directive,\n extractBindings(\n ctx,\n path,\n getForeignBindings(path, 'block'),\n directive.pure,\n ),\n );\n}\n\ninterface HaltingFunctionResult {\n hasReturn: boolean;\n hasYield: boolean;\n}\n\nfunction transformFunctionContent(\n path: babel.NodePath<t.BlockStatement>,\n mutations: t.Identifier[],\n): HaltingFunctionResult {\n const target =\n path.scope.getFunctionParent() || path.scope.getProgramParent();\n\n const applyMutations = mutations.length\n ? path.scope.generateUidIdentifier('mutate')\n : undefined;\n let hasReturn = false;\n let hasYield = false;\n\n // Transform the control flow statements\n path.traverse({\n ReturnStatement(child) {\n const parent =\n child.scope.getFunctionParent() || child.scope.getProgramParent();\n if (parent === target) {\n hasReturn = true;\n const replacement: t.Expression[] = [RETURN_KEY];\n if (child.node.argument) {\n replacement.push(child.node.argument);\n } else {\n replacement.push(t.nullLiteral());\n }\n if (applyMutations) {\n replacement.push(t.callExpression(applyMutations, []));\n }\n child.replaceWith(t.returnStatement(t.arrayExpression(replacement)));\n child.skip();\n }\n },\n YieldExpression(child) {\n const parent =\n child.scope.getFunctionParent() || child.scope.getProgramParent();\n if (parent === target) {\n hasYield = true;\n }\n },\n });\n\n const error = path.scope.generateUidIdentifier('error');\n\n const throwResult: t.Expression[] = [THROW_KEY, error];\n const haltResult: t.Expression[] = [NO_HALT_KEY];\n\n if (applyMutations) {\n throwResult.push(t.callExpression(applyMutations, []));\n haltResult.push(t.nullLiteral());\n haltResult.push(t.callExpression(applyMutations, []));\n }\n\n const statements: t.Statement[] = [\n t.tryStatement(\n t.blockStatement(path.node.body),\n t.catchClause(\n error,\n t.blockStatement([t.returnStatement(t.arrayExpression(throwResult))]),\n ),\n ),\n t.returnStatement(t.arrayExpression(haltResult)),\n ];\n\n if (applyMutations) {\n statements.unshift(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n applyMutations,\n t.arrowFunctionExpression(\n [],\n t.objectExpression(\n mutations.map(item => t.objectProperty(item, item, false, true)),\n ),\n ),\n ),\n ]),\n );\n }\n\n path.node.body = statements;\n\n return {\n hasReturn,\n hasYield,\n };\n}\n\nfunction getFunctionReplacement(\n ctx: StateContext,\n path: babel.NodePath<t.ArrowFunctionExpression | t.FunctionExpression>,\n entryFile: string,\n bindings: ExtractedBindings,\n halting: HaltingFunctionResult,\n): t.Expression {\n const rest = path.scope.generateUidIdentifier('rest');\n\n const returnType = path.scope.generateUidIdentifier('type');\n const returnResult = path.scope.generateUidIdentifier('result');\n const returnMutations = path.scope.generateUidIdentifier('mutations');\n\n const replacement: t.Statement[] = [];\n if (halting.hasYield) {\n const funcID = path.scope.generateUidIdentifier('fn');\n replacement.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n funcID,\n t.callExpression(getImportIdentifier(ctx, path, HIDDEN_GENERATOR), [\n t.memberExpression(\n t.awaitExpression(t.importExpression(t.stringLiteral(entryFile))),\n t.identifier('default'),\n ),\n bindings.mutations.length\n ? t.arrowFunctionExpression(\n [returnMutations],\n t.assignmentExpression(\n '=',\n t.objectPattern(\n bindings.mutations.map(item =>\n t.objectProperty(item, item, false, true),\n ),\n ),\n returnMutations,\n ),\n )\n : t.nullLiteral(),\n ]),\n ),\n ]),\n );\n const [reps, step] = getGeneratorReplacementForServerBlock(path, funcID, [\n t.arrayExpression(bindings.locals),\n t.spreadElement(rest),\n ]);\n for (let i = 0, len = reps.length; i < len; i++) {\n replacement.push(reps[i]);\n }\n replacement.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.arrayPattern([returnType, returnResult]),\n t.memberExpression(step, t.identifier('value')),\n ),\n ]),\n );\n } else {\n replacement.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.arrayPattern([returnType, returnResult]),\n t.awaitExpression(\n t.callExpression(\n t.callExpression(getImportIdentifier(ctx, path, HIDDEN_FUNC), [\n t.memberExpression(\n t.awaitExpression(\n t.importExpression(t.stringLiteral(entryFile)),\n ),\n t.identifier('default'),\n ),\n bindings.mutations.length\n ? t.arrowFunctionExpression(\n [returnMutations],\n t.assignmentExpression(\n '=',\n t.objectPattern(\n bindings.mutations.map(item =>\n t.objectProperty(item, item, false, true),\n ),\n ),\n returnMutations,\n ),\n )\n : t.nullLiteral(),\n ]),\n [t.arrayExpression(bindings.locals), t.spreadElement(rest)],\n ),\n ),\n ),\n ]),\n );\n }\n\n replacement.push(t.returnStatement(returnResult));\n\n if (isPathValid(path, t.isFunctionExpression)) {\n return t.functionExpression(\n path.node.id,\n [t.restElement(rest)],\n t.blockStatement(replacement),\n true,\n halting.hasYield,\n );\n }\n return t.arrowFunctionExpression(\n [t.restElement(rest)],\n t.blockStatement(replacement),\n true,\n );\n}\n\nfunction replaceFunction(\n ctx: StateContext,\n path: babel.NodePath<t.ArrowFunctionExpression | t.FunctionExpression>,\n func: FunctionDefinition,\n bindings: ExtractedBindings,\n): t.Expression {\n const body = path.get('body');\n if (isPathValid(body, t.isExpression)) {\n body.replaceWith(t.blockStatement([t.returnStatement(body.node)]));\n }\n assert(isPathValid(body, t.isBlockStatement), 'invariant');\n const halting = transformFunctionContent(body, bindings.mutations);\n const rootFile = createRootFile(\n ctx,\n bindings,\n t.isFunctionExpression(path.node)\n ? t.functionExpression(\n path.node.id,\n [t.arrayPattern(bindings.locals), ...path.node.params],\n path.node.body,\n path.node.async,\n path.node.generator,\n )\n : t.arrowFunctionExpression(\n [t.arrayPattern(bindings.locals), ...path.node.params],\n path.node.body,\n path.node.async,\n ),\n );\n\n const entryFile = createEntryFile(ctx, path, rootFile, func.target);\n\n return getFunctionReplacement(ctx, path, entryFile, bindings, halting);\n}\n\nexport function splitFunction(\n ctx: StateContext,\n path: babel.NodePath<t.ArrowFunctionExpression | t.FunctionExpression>,\n func: FunctionDefinition,\n): t.Expression {\n return replaceFunction(\n ctx,\n path,\n func,\n extractBindings(ctx, path, getForeignBindings(path, 'function'), func.pure),\n );\n}\n\nfunction replaceExpression(\n ctx: StateContext,\n path: babel.NodePath<t.Expression>,\n func: FunctionDefinition,\n bindings: ExtractedBindings,\n): t.Expression {\n const rootFile = createRootFile(ctx, bindings, path.node);\n const entryFile = createEntryFile(ctx, path, rootFile, func.target);\n\n const rest = path.scope.generateUidIdentifier('rest');\n\n return t.arrowFunctionExpression(\n [t.restElement(rest)],\n t.callExpression(\n t.memberExpression(\n t.awaitExpression(t.importExpression(t.stringLiteral(entryFile))),\n t.identifier('default'),\n ),\n [t.spreadElement(rest)],\n ),\n true,\n );\n}\n\nexport function splitExpression(\n ctx: StateContext,\n path: babel.NodePath<t.Expression>,\n func: FunctionDefinition,\n): t.Expression {\n return replaceExpression(\n ctx,\n path,\n func,\n extractBindings(\n ctx,\n path,\n getForeignBindings(path, 'expression'),\n func.pure,\n ),\n );\n}\n", "import type { ImportDefinition } from './types';\n\nexport const HIDDEN_FUNC: ImportDefinition = {\n kind: 'named',\n source: 'dismantle/runtime',\n name: '$$func',\n};\n\nexport const HIDDEN_GENERATOR: ImportDefinition = {\n kind: 'named',\n source: 'dismantle/runtime',\n name: '$$gen',\n};\n", "export default function assert(cond: unknown, error: string): asserts cond {\n if (!cond) {\n throw new Error(error);\n }\n}\n", "import _generator from '@babel/generator';\nimport type * as t from '@babel/types';\nimport type { CodeOutput } from '../types';\n\ntype GeneratorShim = typeof _generator;\n\n// https://github.com/babel/babel/issues/15269\nconst generator: GeneratorShim =\n typeof _generator !== 'function'\n ? (_generator as unknown as { default: GeneratorShim }).default\n : _generator;\n\nexport function generateCode(id: string, node: t.Node): CodeOutput {\n const result = generator(node, {\n sourceMaps: true,\n sourceFileName: id,\n });\n return {\n code: result.code,\n map: result.map,\n };\n}\n", "import type { NodePath } from '@babel/core';\n\nexport function getDescriptiveName(\n path: NodePath,\n defaultName: string,\n): string {\n let current: NodePath | null = path;\n while (current) {\n switch (current.node.type) {\n case 'FunctionDeclaration':\n case 'FunctionExpression': {\n if (current.node.id) {\n return current.node.id.name;\n }\n break;\n }\n case 'VariableDeclarator': {\n if (current.node.id.type === 'Identifier') {\n return current.node.id.name;\n }\n break;\n }\n case 'ClassPrivateMethod':\n case 'ClassMethod':\n case 'ObjectMethod': {\n switch (current.node.key.type) {\n case 'Identifier':\n return current.node.key.name;\n case 'PrivateName':\n return current.node.key.id.name;\n default:\n break;\n }\n break;\n }\n default:\n break;\n }\n current = current.parentPath;\n }\n return defaultName;\n}\n", "import type * as babel from '@babel/core';\nimport * as t from '@babel/types';\n\nfunction isForeignBinding(\n source: babel.NodePath,\n current: babel.NodePath,\n name: string,\n mode: 'block' | 'function',\n): boolean {\n if (current.scope.hasGlobal(name)) {\n return false;\n }\n if (source === current) {\n return true;\n }\n if (current.scope.hasOwnBinding(name)) {\n if (mode === 'block') {\n const binding = current.scope.getBinding(name);\n return !!binding && binding.kind === 'param';\n }\n return false;\n }\n if (current.parentPath) {\n return isForeignBinding(source, current.parentPath, name, mode);\n }\n return true;\n}\n\nfunction isInTypescript(path: babel.NodePath): boolean {\n let parent = path.parentPath;\n while (parent) {\n if (t.isTypeScript(parent.node) && !t.isExpression(parent.node)) {\n return true;\n }\n parent = parent.parentPath;\n }\n return false;\n}\n\nexport default function getForeignBindings(\n path: babel.NodePath,\n mode: 'block' | 'function' | 'expression',\n): Set<string> {\n const identifiers = new Set<string>();\n path.traverse({\n ReferencedIdentifier(p) {\n // Check identifiers that aren't in a TS expression\n if (\n !isInTypescript(p) &&\n (mode === 'expression'\n ? !path.scope.hasGlobal(p.node.name)\n : isForeignBinding(path, p, p.node.name, mode))\n ) {\n identifiers.add(p.node.name);\n }\n },\n });\n\n return identifiers;\n}\n", "import * as t from '@babel/types';\n\nfunction getIdentifiersFromArrayPattern(node: t.ArrayPattern): string[] {\n const ids: string[] = [];\n for (let i = 0, len = node.elements.length; i < len; i++) {\n const el = node.elements[i];\n if (el) {\n ids.push(...getIdentifiersFromLVal(el));\n }\n }\n return ids;\n}\n\nfunction getIdentifiersFromObjectPattern(node: t.ObjectPattern): string[] {\n const ids: string[] = [];\n for (let i = 0, len = node.properties.length; i < len; i++) {\n const el = node.properties[i];\n if (el) {\n if (el.type === 'RestElement') {\n ids.push(...getIdentifiersFromLVal(el));\n } else if (t.isLVal(el.value)) {\n ids.push(...getIdentifiersFromLVal(el.value));\n }\n }\n }\n return ids;\n}\n\nexport function getIdentifiersFromLVal(node: t.LVal): string[] {\n switch (node.type) {\n case 'Identifier':\n return [node.name];\n case 'ArrayPattern':\n return getIdentifiersFromArrayPattern(node);\n case 'AssignmentPattern':\n return getIdentifiersFromLVal(node.left);\n case 'ObjectPattern':\n return getIdentifiersFromObjectPattern(node);\n case 'RestElement':\n return getIdentifiersFromLVal(node.argument);\n default:\n return [];\n }\n}\n", "import type * as babel from '@babel/core';\nimport * as t from '@babel/types';\nimport type { ImportDefinition, StateContext } from '../types';\n\nexport function getImportIdentifier(\n state: StateContext,\n path: babel.NodePath,\n registration: ImportDefinition,\n): t.Identifier {\n const name = registration.kind === 'named' ? registration.name : 'default';\n const target = `${registration.source}[${name}]`;\n const current = state.imports.get(target);\n if (current) {\n return current;\n }\n const programParent = path.scope.getProgramParent();\n const uid = programParent.generateUidIdentifier(\n registration.kind === 'named' ? registration.name : 'default',\n );\n const newPath = (\n programParent.path as babel.NodePath<t.Program>\n ).unshiftContainer(\n 'body',\n t.importDeclaration(\n [\n registration.kind === 'named'\n ? t.importSpecifier(uid, t.identifier(registration.name))\n : t.importDefaultSpecifier(uid),\n ],\n t.stringLiteral(registration.source),\n ),\n )[0];\n programParent.registerDeclaration(newPath);\n state.imports.set(target, uid);\n return uid;\n}\n", "import type * as babel from '@babel/core';\nimport * as t from '@babel/types';\nimport type { ModuleDefinition } from '../types';\nimport { getImportSpecifierName } from './get-import-specifier-name';\nimport { isPathValid } from './unwrap';\n\nexport function getModuleDefinition(\n path: babel.NodePath,\n): ModuleDefinition | undefined {\n if (\n !(\n isPathValid(path, t.isImportSpecifier) ||\n isPathValid(path, t.isImportDefaultSpecifier) ||\n isPathValid(path, t.isImportNamespaceSpecifier)\n )\n ) {\n return undefined;\n }\n const parent =\n path.getStatementParent() as babel.NodePath<t.ImportDeclaration>;\n const source = parent.node.source.value;\n switch (path.node.type) {\n case 'ImportDefaultSpecifier':\n return {\n source,\n kind: 'default',\n local: path.node.local.name,\n };\n case 'ImportNamespaceSpecifier':\n return {\n source,\n kind: 'namespace',\n local: path.node.local.name,\n };\n case 'ImportSpecifier': {\n const imported = getImportSpecifierName(path.node);\n if (imported === 'default') {\n return {\n source,\n kind: 'default',\n local: path.node.local.name,\n imported: '',\n };\n }\n return {\n source,\n kind: 'named',\n local: path.node.local.name,\n imported,\n };\n }\n }\n}\n", "import type * as t from '@babel/types';\n\nexport function getImportSpecifierName(node: t.ImportSpecifier) {\n switch (node.imported.type) {\n case 'Identifier':\n return node.imported.name;\n case 'StringLiteral':\n return node.imported.value;\n }\n}\n", "import type * as babel from '@babel/core';\nimport type * as t from '@babel/types';\n\ntype TypeFilter<V extends t.Node> = (node: t.Node) => node is V;\n\nexport function isPathValid<V extends t.Node>(\n path: unknown,\n key: TypeFilter<V>,\n): path is babel.NodePath<V> {\n return key((path as babel.NodePath).node);\n}\n\nexport type NestedExpression =\n | t.ParenthesizedExpression\n | t.TypeCastExpression\n | t.TSAsExpression\n | t.TSSatisfiesExpression\n | t.TSNonNullExpression\n | t.TSInstantiationExpression\n | t.TSTypeAssertion;\n\nexport function isNestedExpression(node: t.Node): node is NestedExpression {\n switch (node.type) {\n case 'ParenthesizedExpression':\n case 'TypeCastExpression':\n case 'TSAsExpression':\n case 'TSSatisfiesExpression':\n case 'TSNonNullExpression':\n case 'TSTypeAssertion':\n case 'TSInstantiationExpression':\n return true;\n default:\n return false;\n }\n}\n\ntype TypeCheck<K> = K extends TypeFilter<infer U> ? U : never;\n\nexport function unwrapNode<K extends (value: t.Node) => boolean>(\n node: t.Node,\n key: K,\n): TypeCheck<K> | undefined {\n if (key(node)) {\n return node as TypeCheck<K>;\n }\n if (isNestedExpression(node)) {\n return unwrapNode(node.expression, key);\n }\n return undefined;\n}\n\nexport function unwrapPath<V extends t.Node>(\n path: unknown,\n key: TypeFilter<V>,\n): babel.NodePath<V> | undefined {\n if (isPathValid(path, key)) {\n return path;\n }\n if (isPathValid(path, isNestedExpression)) {\n return unwrapPath(path.get('expression'), key);\n }\n return undefined;\n}\n", "import type * as babel from '@babel/core';\nimport * as t from '@babel/types';\n\nexport function getRootStatementPath(path: babel.NodePath): babel.NodePath {\n let current = path.parentPath;\n while (current) {\n const next = current.parentPath;\n if (next && t.isProgram(next.node)) {\n return current;\n }\n current = next;\n }\n return path;\n}\n", "import type * as babel from '@babel/core';\nimport type * as t from '@babel/types';\nimport { splitBlock } from './split';\nimport type { DirectiveDefinition, StateContext } from './types';\n\nfunction getValidDirectiveFromString(\n ctx: StateContext,\n string: string,\n): DirectiveDefinition | undefined {\n for (let i = 0, len = ctx.options.directives.length; i < len; i++) {\n const current = ctx.options.directives[i];\n if (current.value === string) {\n return current;\n }\n }\n return undefined;\n}\n\nfunction getDefinitionFromDirectives(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n): DirectiveDefinition | undefined {\n for (let i = 0, len = path.node.directives.length; i < len; i++) {\n const statement = path.node.directives[i].value.value;\n const directive = getValidDirectiveFromString(ctx, statement);\n if (directive) {\n return directive;\n }\n }\n return undefined;\n}\n\nfunction getDefinitionFromFauxDirectives(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n): DirectiveDefinition | undefined {\n for (let i = 0, len = path.node.body.length; i < len; i++) {\n const statement = path.node.body[i];\n if (\n statement.type === 'ExpressionStatement' &&\n statement.expression.type === 'StringLiteral'\n ) {\n const directive = getValidDirectiveFromString(\n ctx,\n statement.expression.value,\n );\n if (directive) {\n return directive;\n }\n } else {\n break;\n }\n }\n return undefined;\n}\n\nfunction getDirectiveDefinitionFromBlock(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n): DirectiveDefinition | undefined {\n const parent = path.getFunctionParent();\n if (parent && !parent.node.async) {\n return undefined;\n }\n return (\n getDefinitionFromDirectives(ctx, path) ||\n getDefinitionFromFauxDirectives(ctx, path)\n );\n}\n\nfunction cleanBlockForDirectives(\n path: babel.NodePath<t.BlockStatement>,\n definition: DirectiveDefinition,\n): void {\n const newDirectives: t.Directive[] = [];\n for (let i = 0, len = path.node.directives.length; i < len; i++) {\n const current = path.node.directives[i];\n if (current.value.value !== definition.value) {\n newDirectives.push(current);\n }\n }\n path.node.directives = newDirectives;\n}\n\nfunction cleanBlockForFauxDirectives(\n path: babel.NodePath<t.BlockStatement>,\n definition: DirectiveDefinition,\n): void {\n const body = path.get('body');\n for (let i = 0, len = body.length; i < len; i++) {\n const statement = body[i];\n if (\n statement.node.type === 'ExpressionStatement' &&\n statement.node.expression.type === 'StringLiteral'\n ) {\n if (statement.node.expression.value === definition.value) {\n statement.remove();\n return;\n }\n }\n }\n}\n\nexport function transformBlock(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n): void {\n const definition = getDirectiveDefinitionFromBlock(ctx, path);\n if (!definition) {\n return;\n }\n cleanBlockForDirectives(path, definition);\n cleanBlockForFauxDirectives(path, definition);\n splitBlock(ctx, path, definition);\n}\n", "import type * as babel from '@babel/core';\nimport * as t from '@babel/types';\nimport { splitExpression, splitFunction } from './split';\nimport type { FunctionDefinition, StateContext } from './types';\nimport { isPathValid, unwrapNode } from './utils/unwrap';\n\nfunction getFunctionDefinitionFromPropName(\n definitions: FunctionDefinition[],\n propName: string,\n): FunctionDefinition | undefined {\n for (let i = 0, len = definitions.length; i < len; i++) {\n const def = definitions[i];\n if (def.source.kind === 'default' && propName === 'default') {\n return def;\n }\n if (def.source.kind === 'named' && propName === def.source.name) {\n return def;\n }\n }\n return undefined;\n}\n\nfunction getFunctionDefinitionFromCallee(\n ctx: StateContext,\n path: babel.NodePath<t.CallExpression>,\n): FunctionDefinition | undefined {\n const callee = path.node.callee;\n const id = unwrapNode(callee, t.isIdentifier);\n if (id) {\n const binding = path.scope.getBindingIdentifier(id.name);\n if (binding) {\n return ctx.registrations.identifiers.get(binding);\n }\n return undefined;\n }\n const memberExpr = unwrapNode(callee, t.isMemberExpression);\n if (\n memberExpr &&\n !memberExpr.computed &&\n t.isIdentifier(memberExpr.property)\n ) {\n const object = unwrapNode(memberExpr.object, t.isIdentifier);\n if (object) {\n const binding = path.scope.getBindingIdentifier(object.name);\n if (binding) {\n const definitions = ctx.registrations.namespaces.get(binding);\n if (definitions) {\n return getFunctionDefinitionFromPropName(\n definitions,\n memberExpr.property.name,\n );\n }\n }\n }\n }\n return undefined;\n}\n\nfunction isValidFunction(\n node: t.Node,\n): node is t.ArrowFunctionExpression | t.FunctionExpression {\n return t.isArrowFunctionExpression(node) || t.isFunctionExpression(node);\n}\n\nfunction isSkippableFunction(node: t.Expression): boolean {\n if (node.leadingComments) {\n for (let i = 0, len = node.leadingComments.length; i < len; i++) {\n if (/^@dismantle skip$/.test(node.leadingComments[i].value)) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function transformCall(\n ctx: StateContext,\n path: babel.NodePath<t.CallExpression>,\n): void {\n const definition = getFunctionDefinitionFromCallee(ctx, path);\n if (!definition) {\n return;\n }\n const args = path.get('arguments');\n const expr = args[0];\n if (isPathValid(expr, t.isExpression)) {\n if (isSkippableFunction(expr.node)) {\n return;\n }\n const replacement = isPathValid(expr, isValidFunction)\n ? splitFunction(ctx, expr, definition)\n : splitExpression(ctx, expr, definition);\n\n if (definition.preserve) {\n expr.replaceWith(t.addComment(replacement, 'leading', '@dismantle skip'));\n } else {\n path.replaceWith(replacement);\n }\n }\n}\n", "import type * as babel from '@babel/core';\nimport * as t from '@babel/types';\nimport type { FunctionDefinition, StateContext } from '../types';\nimport { getImportSpecifierName } from './get-import-specifier-name';\n\nfunction registerImportSpecifier(\n ctx: StateContext,\n node:\n | t.ImportSpecifier\n | t.ImportDefaultSpecifier\n | t.ImportNamespaceSpecifier,\n definition: FunctionDefinition,\n): void {\n if (t.isImportSpecifier(node)) {\n if (node.importKind === 'type' || node.importKind === 'typeof') {\n return;\n }\n const key = getImportSpecifierName(node);\n if (\n (definition.source.kind === 'named' && key === definition.source.name) ||\n (definition.source.kind === 'default' && key === 'default')\n ) {\n ctx.registrations.identifiers.set(node.local, definition);\n }\n }\n if (\n t.isImportDefaultSpecifier(node) &&\n definition.source.kind === 'default'\n ) {\n ctx.registrations.identifiers.set(node.local, definition);\n }\n if (t.isImportNamespaceSpecifier(node)) {\n let current = ctx.registrations.namespaces.get(node.local);\n if (!current) {\n current = [];\n }\n current.push(definition);\n ctx.registrations.namespaces.set(node.local, current);\n }\n}\n\nfunction registerImportDeclarationByDefinition(\n ctx: StateContext,\n path: babel.NodePath<t.ImportDeclaration>,\n definition: FunctionDefinition,\n): void {\n for (let i = 0, len = path.node.specifiers.length; i < len; i++) {\n const specifier = path.node.specifiers[i];\n registerImportSpecifier(ctx, specifier, definition);\n }\n}\n\nexport function registerImportSpecifiers(\n ctx: StateContext,\n programPath: babel.NodePath<t.Program>,\n): void {\n const len = ctx.options.functions.length;\n if (!len) {\n return;\n }\n programPath.traverse({\n ImportDeclaration(path) {\n if (\n path.node.importKind === 'type' ||\n path.node.importKind === 'typeof'\n ) {\n return;\n }\n for (let i = 0; i < len; i++) {\n const func = ctx.options.functions[i];\n if (func.source.source === path.node.source.value) {\n registerImportDeclarationByDefinition(ctx, path, func);\n }\n }\n },\n });\n}\n", "import type * as babel from '@babel/core';\nimport { transformBlock } from './transform-block';\nimport { transformCall } from './transform-call';\nimport type { StateContext } from './types';\nimport { registerImportSpecifiers } from './utils/register-import-specifiers';\n\ninterface State extends babel.PluginPass {\n opts: StateContext;\n}\n\nexport function plugin(): babel.PluginObj<State> {\n return {\n name: 'dismantle',\n visitor: {\n Program(path, ctx) {\n registerImportSpecifiers(ctx.opts, path);\n },\n BlockStatement(path, ctx) {\n transformBlock(ctx.opts, path);\n },\n CallExpression(path, ctx) {\n transformCall(ctx.opts, path);\n },\n },\n };\n}\n", "/* eslint-disable @typescript-eslint/no-shadow */\n/**\n * Copyright (c) 2019 Jason Dent\n * https://github.com/Jason3S/xxhash\n */\nconst PRIME32_1 = 2654435761;\nconst PRIME32_2 = 2246822519;\nconst PRIME32_3 = 3266489917;\nconst PRIME32_4 = 668265263;\nconst PRIME32_5 = 374761393;\n\nfunction toUtf8(text: string): Uint8Array {\n const bytes: number[] = [];\n for (let i = 0, n = text.length; i < n; ++i) {\n const c = text.charCodeAt(i);\n if (c < 0x80) {\n bytes.push(c);\n } else if (c < 0x800) {\n bytes.push(0xc0 | (c >> 6), 0x80 | (c & 0x3f));\n } else if (c < 0xd800 || c >= 0xe000) {\n bytes.push(0xe0 | (c >> 12), 0x80 | ((c >> 6) & 0x3f), 0x80 | (c & 0x3f));\n } else {\n const cp =\n 0x10000 + (((c & 0x3ff) << 10) | (text.charCodeAt(++i) & 0x3ff));\n bytes.push(\n 0xf0 | ((cp >> 18) & 0x7),\n 0x80 | ((cp >> 12) & 0x3f),\n 0x80 | ((cp >> 6) & 0x3f),\n 0x80 | (cp & 0x3f),\n );\n }\n }\n return new Uint8Array(bytes);\n}\n/**\n *\n * @param buffer - byte array or string\n * @param seed - optional seed (32-bit unsigned);\n */\nexport default function xxHash32(\n buffer: Uint8Array | string,\n seed = 0,\n): number {\n buffer = typeof buffer === 'string' ? toUtf8(buffer) : buffer;\n const b = buffer;\n\n /*\n Step 1. Initialize internal accumulators\n Each accumulator gets an initial value based on optional seed input.\n Since the seed is optional, it can be 0.\n ```\n u32 acc1 = seed + PRIME32_1 + PRIME32_2;\n u32 acc2 = seed + PRIME32_2;\n u32 acc3 = seed + 0;\n u32 acc4 = seed - PRIME32_1;\n ```\n Special case : input is less than 16 bytes\n When input is too small (< 16 bytes), the algorithm will not process any stripe.\n Consequently, it will not make use of parallel accumulators.\n In which case, a simplified initialization is performed, using a single accumulator :\n u32 acc = seed + PRIME32_5;\n The algorithm then proceeds directly to step 4.\n */\n\n let acc = (seed + PRIME32_5) & 0xffffffff;\n let offset = 0;\n\n if (b.length >= 16) {\n const accN = [\n (seed + PRIME32_1 + PRIME32_2) & 0xffffffff,\n (seed + PRIME32_2) & 0xffffffff,\n (seed + 0) & 0xffffffff,\n (seed - PRIME32_1) & 0xffffffff,\n ];\n\n /*\n Step 2. Process stripes\n A stripe is a contiguous segment of 16 bytes. It is evenly divided into 4 lanes,\n of 4 bytes each. The first lane is used to update accumulator 1, the second lane\n is used to update accumulator 2, and so on. Each lane read its associated 32-bit\n value using little-endian convention. For each {lane, accumulator}, the update\n process is called a round, and applies the following formula :\n ```\n accN = accN + (laneN * PRIME32_2);\n accN = accN <<< 13;\n accN = accN * PRIME32_1;\n ```\n This shuffles the bits so that any bit from input lane impacts several bits in\n output accumulator. All operations are performed modulo 2^32.\n Input is consumed one full stripe at a time. Step 2 is looped as many times as\n necessary to consume the whole input, except the last remaining bytes which cannot\n form a stripe (< 16 bytes). When that happens, move to step 3.\n */\n\n const b = buffer;\n const limit = b.length - 16;\n let lane = 0;\n for (offset = 0; (offset & 0xfffffff0) <= limit; offset += 4) {\n const i = offset;\n const laneN0 = b[i + 0] + (b[i + 1] << 8);\n const laneN1 = b[i + 2] + (b[i + 3] << 8);\n const laneNP = laneN0 * PRIME32_2 + ((laneN1 * PRIME32_2) << 16);\n let acc = (accN[lane] + laneNP) & 0xffffffff;\n acc = (acc << 13) | (acc >>> 19);\n const acc0 = acc & 0xffff;\n const acc1 = acc >>> 16;\n accN[lane] = (acc0 * PRIME32_1 + ((acc1 * PRIME32_1) << 16)) & 0xffffffff;\n lane = (lane + 1) & 0x3;\n }\n\n /*\n Step 3. Accumulator convergence\n All 4 lane accumulators from previous steps are merged to produce a\n single remaining accumulator\n of same width (32-bit). The associated formula is as follows :\n ```\n acc = (acc1 <<< 1) + (acc2 <<< 7) + (acc3 <<< 12) + (acc4 <<< 18);\n ```\n */\n acc =\n (((accN[0] << 1) | (accN[0] >>> 31)) +\n ((accN[1] << 7) | (accN[1] >>> 25)) +\n ((accN[2] << 12) | (accN[2] >>> 20)) +\n ((accN[3] << 18) | (accN[3] >>> 14))) &\n 0xffffffff;\n }\n\n /*\n Step 4. Add input length\n The input total length is presumed known at this stage.\n This step is just about adding the length to\n accumulator, so that it participates to final mixing.\n ```\n acc = acc + (u32)inputLength;\n ```\n */\n acc = (acc + buffer.length) & 0xffffffff;\n\n /*\n Step 5. Consume remaining input\n There may be up to 15 bytes remaining to consume from the input.\n The final stage will digest them according\n to following pseudo-code :\n ```\n while (remainingLength >= 4) {\n lane = read_32bit_little_endian(input_ptr);\n acc = acc + lane * PRIME32_3;\n acc = (acc <<< 17) * PRIME32_4;\n input_ptr += 4; remainingLength -= 4;\n }\n ```\n This process ensures that all input bytes are present in the final mix.\n */\n\n const limit = buffer.length - 4;\n for (; offset <= limit; offset += 4) {\n const i = offset;\n const laneN0 = b[i + 0] + (b[i + 1] << 8);\n const laneN1 = b[i + 2] + (b[i + 3] << 8);\n const laneP = laneN0 * PRIME32_3 + ((laneN1 * PRIME32_3) << 16);\n acc = (acc + laneP) & 0xffffffff;\n acc = (acc << 17) | (acc >>> 15);\n acc =\n ((acc & 0xffff) * PRIME32_4 + (((acc >>> 16) * PRIME32_4) << 16)) &\n 0xffffffff;\n }\n\n /*\n ```\n while (remainingLength >= 1) {\n lane = read_byte(input_ptr);\n acc = acc + lane * PRIME32_5;\n acc = (acc <<< 11) * PRIME32_1;\n input_ptr += 1; remainingLength -= 1;\n }\n ```\n */\n\n for (; offset < b.length; ++offset) {\n const lane = b[offset];\n acc += lane * PRIME32_5;\n acc = (acc << 11) | (acc >>> 21);\n acc =\n ((acc & 0xffff) * PRIME32_1 + (((acc >>> 16) * PRIME32_1) << 16)) &\n 0xffffffff;\n }\n\n /*\n Step 6. Final mix (avalanche)\n The final mix ensures that all input bits have a chance to impact any bit in\n the output digest, resulting in an unbiased distribution. This is also called\n avalanche effect.\n ```\n acc = acc xor (acc >> 15);\n acc = acc * PRIME32_2;\n acc = acc xor (acc >> 13);\n acc = acc * PRIME32_3;\n acc = acc xor (acc >> 16);\n ```\n */\n\n acc ^= acc >>> 15;\n acc =\n (((acc & 0xffff) * PRIME32_2) & 0xffffffff) +\n (((acc >>> 16) * PRIME32_2) << 16);\n acc ^= acc >>> 13;\n acc =\n (((acc & 0xffff) * PRIME32_3) & 0xffffffff) +\n (((acc >>> 16) * PRIME32_3) << 16);\n acc ^= acc >>> 16;\n\n // turn any negatives back into a positive number;\n return acc < 0 ? acc + 4294967296 : acc;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as babel from '@babel/core';\nimport path from 'node:path';\nimport { plugin } from './plugin';\nimport type { CodeOutput, Options, StateContext } from './types';\nimport assert from './utils/assert';\nimport xxHash32 from './utils/xxhash32';\n\nexport interface Output extends CodeOutput {\n files: Map<string, CodeOutput>;\n entries: string[];\n roots: string[];\n}\n\nexport type {\n CodeOutput,\n DefaultImportDefinition,\n DirectiveDefinition,\n ImportDefinition,\n NamedImportDefinition,\n Options,\n} from './types';\n\nexport async function compile(\n id: string,\n code: string,\n options: Options,\n): Promise<Output> {\n const parsedPath = path.parse(id);\n\n const entries: string[] = [];\n const roots: string[] = [];\n const files = new Map<string, CodeOutput>();\n\n const ctx: StateContext = {\n id,\n path: parsedPath,\n imports: new Map(),\n virtual: {\n count: 0,\n },\n options,\n bindings: new Map(),\n blocks: {\n hash: xxHash32(id).toString(16),\n count: 0,\n },\n onVirtualFile(current, content, mode) {\n const filePath = path.join(parsedPath.dir, current);\n files.set(path.join(parsedPath.dir, current), content);\n if (mode === 'entry') {\n entries.push(filePath);\n } else if (mode === 'root') {\n roots.push(filePath);\n }\n },\n registrations: {\n identifiers: new Map(),\n namespaces: new Map(),\n },\n };\n\n const plugins: babel.ParserOptions['plugins'] = ['jsx'];\n\n if (/\\.[mc]?tsx?$/i.test(id)) {\n plugins.push('typescript');\n }\n\n const result = await babel.transformAsync(code, {\n plugins: [[plugin, ctx]],\n parserOpts: {\n plugins,\n },\n filename: parsedPath.base,\n ast: false,\n sourceFileName: id,\n sourceMaps: true,\n configFile: false,\n babelrc: false,\n });\n\n assert(result, 'invariant');\n\n return {\n code: result.code,\n map: result.map,\n files,\n entries,\n roots,\n };\n}\n", "import type * as babel from '@babel/core';\nimport type { Binding, BindingKind } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { HIDDEN_FUNC, HIDDEN_GENERATOR } from './hidden-imports';\nimport type {\n DirectiveDefinition,\n FunctionDefinition,\n ImportDefinition,\n ModuleDefinition,\n StateContext,\n} from './types';\nimport assert from './utils/assert';\nimport { generateCode } from './utils/generator-shim';\nimport { getDescriptiveName } from './utils/get-descriptive-name';\nimport getForeignBindings from './utils/get-foreign-bindings';\nimport { getIdentifiersFromLVal } from './utils/get-identifiers-from-lval';\nimport { getImportIdentifier } from './utils/get-import-identifier';\nimport { getModuleDefinition } from './utils/get-module-definition';\nimport { getRootStatementPath } from './utils/get-root-statement-path';\nimport { isPathValid, unwrapPath } from './utils/unwrap';\n\nfunction moduleDefinitionToImportSpecifier(definition: ModuleDefinition) {\n switch (definition.kind) {\n case 'default':\n return t.importDefaultSpecifier(t.identifier(definition.local));\n case 'named':\n return t.importSpecifier(\n t.identifier(definition.local),\n definition.imported\n ? t.identifier(definition.imported)\n : t.identifier(definition.local),\n );\n case 'namespace':\n return t.importNamespaceSpecifier(t.identifier(definition.local));\n }\n}\n\nfunction moduleDefinitionToImportDeclaration(definition: ModuleDefinition) {\n return t.importDeclaration(\n [moduleDefinitionToImportSpecifier(definition)],\n t.stringLiteral(definition.source),\n );\n}\n\nfunction moduleDefinitionsToImportDeclarations(\n definitions: ModuleDefinition[],\n) {\n const declarations: t.ImportDeclaration[] = [];\n for (let i = 0, len = definitions.length; i < len; i++) {\n declarations[i] = moduleDefinitionToImportDeclaration(definitions[i]);\n }\n return declarations;\n}\n\nfunction isMutation(kind: BindingKind): boolean {\n switch (kind) {\n case 'let':\n case 'var':\n case 'param':\n return true;\n case 'const':\n case 'hoisted':\n case 'local':\n case 'module':\n case 'unknown':\n return false;\n }\n}\n\nfunction registerModuleLevelBinding(\n ctx: StateContext,\n modules: ModuleDefinition[],\n binding: string,\n target: Binding,\n): void {\n const current = ctx.bindings.get(binding);\n if (current) {\n modules.push(current);\n } else if (isPathValid(target.path, t.isVariableDeclarator)) {\n const definitions = splitVariableDeclarator(ctx, target.path);\n for (let k = 0, klen = definitions.length; k < klen; k++) {\n modules.push(definitions[k]);\n ctx.bindings.set(definitions[k].local, definitions[k]);\n }\n } else if (isPathValid(target.path, t.isFunctionDeclaration)) {\n const definition = splitFunctionDeclaration(ctx, target.path);\n modules.push(definition);\n ctx.bindings.set(definition.local, definition);\n }\n}\n\nfunction registerBinding(\n ctx: StateContext,\n modules: ModuleDefinition[],\n locals: t.Identifier[],\n mutations: t.Identifier[],\n binding: string,\n target: Binding,\n pure?: boolean,\n): void {\n if (target.kind === 'module') {\n const result = getModuleDefinition(target.path);\n if (result) {\n modules.push(result);\n }\n } else if (target.kind === 'param') {\n locals.push(target.identifier);\n } else {\n let blockParent = target.path.scope.getBlockParent();\n const programParent = target.path.scope.getProgramParent();\n // a FunctionDeclaration binding refers to itself as the block parent\n if (blockParent.path === target.path) {\n blockParent = blockParent.parent;\n }\n if (blockParent === programParent) {\n registerModuleLevelBinding(ctx, modules, binding, target);\n } else if (!pure) {\n locals.push(target.identifier);\n if (isMutation(target.kind)) {\n mutations.push(target.identifier);\n }\n }\n }\n}\n\ninterface ExtractedBindings {\n modules: ModuleDefinition[];\n locals: t.Identifier[];\n mutations: t.Identifier[];\n}\n\nfunction extractBindings(\n ctx: StateContext,\n path: babel.NodePath,\n bindings: Set<string>,\n pure?: boolean,\n): ExtractedBindings {\n const modules: ModuleDefinition[] = [];\n const locals: t.Identifier[] = [];\n const mutations: t.Identifier[] = [];\n for (const binding of bindings) {\n const target = path.scope.getBinding(binding);\n if (target) {\n registerBinding(ctx, modules, locals, mutations, binding, target, pure);\n }\n }\n\n return {\n modules,\n locals,\n mutations,\n };\n}\n\nfunction createVirtualFileName(ctx: StateContext) {\n return `./${ctx.path.base}?${ctx.options.key}=${ctx.virtual.count++}${\n ctx.path.ext\n }`;\n}\n\nfunction createRootFile(\n ctx: StateContext,\n bindings: ExtractedBindings,\n replacement: t.Expression,\n): string {\n const rootFile = createVirtualFileName(ctx);\n const rootContent = generateCode(\n ctx.id,\n t.program([\n ...(ctx.options.mode === 'server'\n ? moduleDefinitionsToImportDeclarations(bindings.modules)\n : []),\n t.exportDefaultDeclaration(replacement),\n ]),\n );\n ctx.onVirtualFile(\n rootFile,\n { code: rootContent.code, map: rootContent.map },\n 'root',\n );\n return rootFile;\n}\n\nfunction createEntryFile(\n ctx: StateContext,\n path: babel.NodePath,\n rootFile: string,\n imported: ImportDefinition,\n): string {\n // Create an ID\n let id = `${ctx.blocks.hash}-${ctx.blocks.count++}`;\n if (ctx.options.env !== 'production') {\n id += `-${getDescriptiveName(path, 'anonymous')}`;\n }\n const entryID = path.scope.generateUidIdentifier('entry');\n const entryImports: ModuleDefinition[] = [\n {\n kind: imported.kind,\n source: imported.source,\n local: entryID.name,\n imported: imported.kind === 'named' ? imported.name : undefined,\n },\n ];\n const args: t.Expression[] = [t.stringLiteral(id)];\n if (ctx.options.mode === 'server') {\n const rootID = path.scope.generateUidIdentifier('root');\n entryImports.push({\n kind: 'default',\n source: rootFile,\n local: rootID.name,\n });\n args.push(rootID);\n }\n\n // Create the registration call\n const entryFile = createVirtualFileName(ctx);\n const entryContent = generateCode(\n ctx.id,\n t.program([\n ...moduleDefinitionsToImportDeclarations(entryImports),\n t.exportDefaultDeclaration(t.callExpression(entryID, args)),\n ]),\n );\n ctx.onVirtualFile(\n entryFile,\n { code: entryContent.code, map: entryContent.map },\n 'entry',\n );\n\n return entryFile;\n}\n\nfunction splitFunctionDeclaration(\n ctx: StateContext,\n path: babel.NodePath<t.FunctionDeclaration>,\n): ModuleDefinition {\n const bindings = getForeignBindings(path, 'function');\n const { modules } = extractBindings(ctx, path, bindings);\n const file = createVirtualFileName(ctx);\n const compiled = generateCode(\n ctx.id,\n t.program([\n ...moduleDefinitionsToImportDeclarations(modules),\n t.exportNamedDeclaration(path.node),\n ]),\n );\n ctx.onVirtualFile(file, { code: compiled.code, map: compiled.map }, 'none');\n\n const statement = getRootStatementPath(path);\n\n const identifier = path.node.id || path.scope.generateUidIdentifier('func');\n const definition: ModuleDefinition = {\n kind: 'named',\n local: identifier.name,\n source: file,\n };\n\n statement.insertBefore(moduleDefinitionToImportDeclaration(definition));\n path.remove();\n return definition;\n}\n\nfunction splitVariableDeclarator(\n ctx: StateContext,\n path: babel.NodePath<t.VariableDeclarator>,\n): ModuleDefinition[] {\n const init = unwrapPath(path.get('init'), t.isExpression);\n const modules = init\n ? extractBindings(\n ctx,\n path,\n getForeignBindings(\n path,\n isPathValid(init, t.isArrowFunctionExpression) ||\n isPathValid(init, t.isFunctionExpression)\n ? 'function'\n : 'expression',\n ),\n ).modules\n : [];\n const file = createVirtualFileName(ctx);\n const parent = path.parentPath.node as t.VariableDeclaration;\n const compiled = generateCode(\n ctx.id,\n t.program([\n ...moduleDefinitionsToImportDeclarations(modules),\n t.exportNamedDeclaration(t.variableDeclaration(parent.kind, [path.node])),\n ]),\n );\n ctx.onVirtualFile(file, { code: compiled.code, map: compiled.map }, 'none');\n const definitions: ModuleDefinition[] = getIdentifiersFromLVal(\n path.node.id,\n ).map(name => ({\n kind: 'named',\n local: name,\n source: file,\n }));\n // Replace declaration with definition\n const statement = getRootStatementPath(path);\n if (statement) {\n statement.insertBefore(moduleDefinitionsToImportDeclarations(definitions));\n }\n path.remove();\n return definitions;\n}\n/**\n * These are internal code for the control flow of the server block\n * The goal is to transform these into return statements, and the\n * the return value with the associated control flow code.\n * This allows the replacement statement for the server block to\n * know what to do if it encounters the said statement on the server.\n */\nconst BREAK_KEY = t.numericLiteral(0);\nconst CONTINUE_KEY = t.numericLiteral(1);\nconst RETURN_KEY = t.numericLiteral(2);\n// If the function has no explicit return\nconst NO_HALT_KEY = t.numericLiteral(3);\nconst THROW_KEY = t.numericLiteral(4);\nconst YIELD_KEY = t.numericLiteral(5);\n\ninterface HaltingBlockResult {\n breaks: string[];\n breakCount: number;\n continues: string[];\n continueCount: number;\n hasReturn: boolean;\n hasYield: boolean;\n}\n\nfunction transformBlockContent(\n path: babel.NodePath<t.BlockStatement>,\n mutations: t.Identifier[],\n): HaltingBlockResult {\n const target =\n path.scope.getFunctionParent() || path.scope.getProgramParent();\n\n const breaks: string[] = [];\n let breakCount = 0;\n const continues: string[] = [];\n let continueCount = 0;\n let hasReturn = false;\n let hasYield = false;\n\n const applyMutations = mutations.length\n ? path.scope.generateUidIdentifier('mutate')\n : undefined;\n\n // Transform the control flow statements\n path.traverse({\n BreakStatement(child) {\n const parent =\n child.scope.getFunctionParent() || child.scope.getProgramParent();\n if (parent === target) {\n const replacement: t.Expression[] = [BREAK_KEY];\n breakCount++;\n if (child.node.label) {\n const targetName = child.node.label.name;\n breaks.push(targetName);\n replacement.push(t.stringLiteral(targetName));\n } else {\n replacement.push(t.nullLiteral());\n }\n if (applyMutations) {\n replacement.push(t.callExpression(applyMutations, []));\n }\n child.replaceWith(t.returnStatement(t.arrayExpression(replacement)));\n child.skip();\n }\n },\n ContinueStatement(child) {\n const parent =\n child.scope.getFunctionParent() || child.scope.getProgramParent();\n if (parent === target) {\n const replacement: t.Expression[] = [CONTINUE_KEY];\n continueCount++;\n if (child.node.label) {\n const targetName = child.node.label.name;\n continues.push(targetName);\n replacement.push(t.stringLiteral(targetName));\n } else {\n replacement.push(t.nullLiteral());\n }\n if (applyMutations) {\n replacement.push(t.callExpression(applyMutations, []));\n }\n child.replaceWith(t.returnStatement(t.arrayExpression(replacement)));\n child.skip();\n }\n },\n ReturnStatement(child) {\n const parent =\n child.scope.getFunctionParent() || child.scope.getProgramParent();\n if (parent === target) {\n hasReturn = true;\n const arg = child.get('argument');\n arg.replaceWith(\n t.arrayExpression([\n RETURN_KEY,\n arg.node ? arg.node : t.nullLiteral(),\n applyMutations\n ? t.callExpression(applyMutations, [])\n : t.nullLiteral(),\n ]),\n );\n }\n },\n YieldExpression(child) {\n const parent =\n child.scope.getFunctionParent() || child.scope.getProgramParent();\n if (parent === target) {\n hasYield = true;\n if (child.node.delegate) {\n // TODO\n } else {\n const arg = child.get('argument');\n arg.replaceWith(\n t.arrayExpression([\n YIELD_KEY,\n arg.node ? arg.node : t.nullLiteral(),\n applyMutations\n ? t.callExpression(applyMutations, [])\n : t.nullLiteral(),\n ]),\n );\n }\n }\n },\n });\n\n const error = path.scope.generateUidIdentifier('error');\n\n const throwResult: t.Expression[] = [THROW_KEY, error];\n const haltResult: t.Expression[] = [NO_HALT_KEY];\n\n if (applyMutations) {\n throwResult.push(t.callExpression(applyMutations, []));\n haltResult.push(t.nullLiteral());\n haltResult.push(t.callExpression(applyMutations, []));\n }\n\n const statements: t.Statement[] = [\n t.tryStatement(\n t.blockStatement(path.node.body),\n t.catchClause(\n error,\n t.blockStatement([t.returnStatement(t.arrayExpression(throwResult))]),\n ),\n ),\n t.returnStatement(t.arrayExpression(haltResult)),\n ];\n\n if (applyMutations) {\n statements.unshift(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n applyMutations,\n t.arrowFunctionExpression(\n [],\n t.objectExpression(\n mutations.map(item => t.objectProperty(item, item, false, true)),\n ),\n ),\n ),\n ]),\n );\n }\n\n path.node.body = statements;\n return { breaks, continues, hasReturn, hasYield, breakCount, continueCount };\n}\n\n/**\n * This generates a chain of if-statements that checks the\n * received server return (which is transformed from the original block's\n * server statement)\n * Each if-statement matches an specific label, assuming that the original\n * break statement is a labeled break statement.\n * Otherwise, the output code is either a normal break statement or none.\n */\nfunction getBreakCheck(\n returnType: t.Identifier,\n returnResult: t.Identifier,\n breakCount: number,\n breaks: string[],\n check: t.Statement | undefined,\n): t.Statement | undefined {\n let current: t.Statement | undefined;\n if (breakCount !== breaks.length) {\n current = t.blockStatement([t.breakStatement()]);\n }\n for (let i = 0, len = breaks.length; i < len; i++) {\n const target = breaks[i];\n current = t.blockStatement([\n t.ifStatement(\n t.binaryExpression('===', returnResult, t.stringLiteral(target)),\n t.blockStatement([t.breakStatement(t.identifier(target))]),\n current,\n ),\n ]);\n }\n if (current) {\n return t.ifStatement(\n t.binaryExpression('===', returnType, BREAK_KEY),\n current,\n check,\n );\n }\n return check;\n}\n\n/**\n * This generates a chain of if-statements that checks the\n * received server return (which is transformed from the original block's\n * server statement)\n * Each if-statement matches an specific label, assuming that the original\n * continue statement is a labeled continue statement.\n * Otherwise, the output code is either a normal continue statement or none.\n */\nfunction getContinueCheck(\n returnType: t.Identifier,\n returnResult: t.Identifier,\n continueCount: number,\n continues: string[],\n check: t.Statement | undefined,\n): t.Statement | undefined {\n let current: t.Statement | undefined;\n if (continueCount !== continues.length) {\n current = t.blockStatement([t.continueStatement()]);\n }\n for (let i = 0, len = continues.length; i < len; i++) {\n const target = continues[i];\n current = t.blockStatement([\n t.ifStatement(\n t.binaryExpression('===', returnResult, t.stringLiteral(target)),\n t.blockStatement([t.continueStatement(t.identifier(target))]),\n current,\n ),\n ]);\n }\n if (current) {\n return t.ifStatement(\n t.binaryExpression('===', returnType, CONTINUE_KEY),\n current,\n check,\n );\n }\n return check;\n}\n\nfunction getGeneratorReplacementForServerBlock(\n path: babel.NodePath,\n registerID: t.Identifier,\n args: (t.Identifier | t.SpreadElement | t.ArrayExpression)[],\n): [replacements: t.Statement[], step: t.Identifier] {\n const iterator = path.scope.generateUidIdentifier('iterator');\n const step = path.scope.generateUidIdentifier('step');\n const replacement: t.Statement[] = [\n t.variableDeclaration('let', [\n t.variableDeclarator(step),\n // First, get the iterator by calling the generator\n t.variableDeclarator(\n iterator,\n t.awaitExpression(t.callExpression(registerID, args)),\n ),\n ]),\n // Create a while statement, the intent is to\n // repeatedly iterate the generator\n t.whileStatement(\n t.booleanLiteral(true),\n t.blockStatement([\n // Get the next value\n t.expressionStatement(\n t.assignmentExpression(\n '=',\n step,\n t.awaitExpression(\n t.callExpression(\n t.memberExpression(iterator, t.identifier('next')),\n [],\n ),\n ),\n ),\n ),\n // Check if the step is done\n t.ifStatement(\n t.memberExpression(step, t.identifier('done')),\n t.blockStatement([\n // exit the loop\n t.breakStatement(),\n ]),\n // Otherwise, yield the value\n t.blockStatement([\n t.expressionStatement(\n t.yieldExpression(\n t.memberExpression(step, t.identifier('value')),\n ),\n ),\n ]),\n ),\n ]),\n ),\n ];\n return [replacement, step];\n}\n\nfunction getBlockReplacement(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n entryFile: string,\n bindings: ExtractedBindings,\n halting: HaltingBlockResult,\n) {\n // Move to the replacement for the server block,\n // declare the type and result based from transformBlockContent\n const returnType = path.scope.generateUidIdentifier('type');\n const returnResult = path.scope.generateUidIdentifier('result');\n const returnMutations = path.scope.generateUidIdentifier('mutations');\n let check: t.Statement | undefined;\n // If the block has a return, we need to make sure that the\n // replacement does too.\n if (halting.hasReturn) {\n check = t.ifStatement(\n t.binaryExpression('===', returnType, RETURN_KEY),\n t.blockStatement([t.returnStatement(returnResult)]),\n check,\n );\n }\n // If the block has a break, we also do it.\n if (halting.breakCount > 0) {\n check = getBreakCheck(\n returnType,\n returnResult,\n halting.breakCount,\n halting.breaks,\n check,\n );\n }\n // If the block has a continue, we also do it.\n if (halting.continueCount > 0) {\n check = getContinueCheck(\n returnType,\n returnResult,\n halting.continueCount,\n halting.continues,\n check,\n );\n }\n const replacement: t.Statement[] = [];\n if (halting.hasYield) {\n const blockID = path.scope.generateUidIdentifier('block');\n replacement.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n blockID,\n t.callExpression(getImportIdentifier(ctx, path, HIDDEN_GENERATOR), [\n t.memberExpression(\n t.awaitExpression(t.importExpression(t.stringLiteral(entryFile))),\n t.identifier('default'),\n ),\n bindings.mutations.length\n ? t.arrowFunctionExpression(\n [returnMutations],\n t.assignmentExpression(\n '=',\n t.objectPattern(\n bindings.mutations.map(item =>\n t.objectProperty(item, item, false, true),\n ),\n ),\n returnMutations,\n ),\n )\n : t.nullLiteral(),\n ]),\n ),\n ]),\n );\n const [reps, step] = getGeneratorReplacementForServerBlock(\n path,\n blockID,\n bindings.locals,\n );\n for (let i = 0, len = reps.length; i < len; i++) {\n replacement.push(reps[i]);\n }\n replacement.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.arrayPattern([returnType, returnResult]),\n t.memberExpression(step, t.identifier('value')),\n ),\n ]),\n );\n } else {\n replacement.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.arrayPattern([returnType, returnResult]),\n t.awaitExpression(\n t.callExpression(\n t.callExpression(getImportIdentifier(ctx, path, HIDDEN_FUNC), [\n t.memberExpression(\n t.awaitExpression(\n t.importExpression(t.stringLiteral(entryFile)),\n ),\n t.identifier('default'),\n ),\n bindings.mutations.length\n ? t.arrowFunctionExpression(\n [returnMutations],\n t.assignmentExpression(\n '=',\n t.objectPattern(\n bindings.mutations.map(item =>\n t.objectProperty(item, item, false, true),\n ),\n ),\n returnMutations,\n ),\n )\n : t.nullLiteral(),\n ]),\n bindings.locals,\n ),\n ),\n ),\n ]),\n );\n }\n if (check) {\n replacement.push(check);\n }\n\n return t.blockStatement(replacement);\n}\n\nfunction replaceBlock(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n directive: DirectiveDefinition,\n bindings: ExtractedBindings,\n): void {\n // Transform all control statements\n const halting = transformBlockContent(path, bindings.mutations);\n const rootFile = createRootFile(\n ctx,\n bindings,\n t.functionExpression(\n undefined,\n bindings.locals,\n t.blockStatement(path.node.body),\n halting.hasYield,\n true,\n ),\n );\n const entryFile = createEntryFile(ctx, path, rootFile, directive.target);\n path.replaceWith(\n getBlockReplacement(ctx, path, entryFile, bindings, halting),\n );\n}\n\nexport function splitBlock(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n directive: DirectiveDefinition,\n): void {\n replaceBlock(\n ctx,\n path,\n directive,\n extractBindings(\n ctx,\n path,\n getForeignBindings(path, 'block'),\n directive.pure,\n ),\n );\n}\n\ninterface HaltingFunctionResult {\n hasReturn: boolean;\n hasYield: boolean;\n}\n\nfunction transformFunctionContent(\n path: babel.NodePath<t.BlockStatement>,\n mutations: t.Identifier[],\n): HaltingFunctionResult {\n const target =\n path.scope.getFunctionParent() || path.scope.getProgramParent();\n\n const applyMutations = mutations.length\n ? path.scope.generateUidIdentifier('mutate')\n : undefined;\n let hasReturn = false;\n let hasYield = false;\n\n // Transform the control flow statements\n path.traverse({\n ReturnStatement(child) {\n const parent =\n child.scope.getFunctionParent() || child.scope.getProgramParent();\n if (parent === target) {\n hasReturn = true;\n const replacement: t.Expression[] = [RETURN_KEY];\n if (child.node.argument) {\n replacement.push(child.node.argument);\n } else {\n replacement.push(t.nullLiteral());\n }\n if (applyMutations) {\n replacement.push(t.callExpression(applyMutations, []));\n }\n child.replaceWith(t.returnStatement(t.arrayExpression(replacement)));\n child.skip();\n }\n },\n YieldExpression(child) {\n const parent =\n child.scope.getFunctionParent() || child.scope.getProgramParent();\n if (parent === target) {\n hasYield = true;\n }\n },\n });\n\n const error = path.scope.generateUidIdentifier('error');\n\n const throwResult: t.Expression[] = [THROW_KEY, error];\n const haltResult: t.Expression[] = [NO_HALT_KEY];\n\n if (applyMutations) {\n throwResult.push(t.callExpression(applyMutations, []));\n haltResult.push(t.nullLiteral());\n haltResult.push(t.callExpression(applyMutations, []));\n }\n\n const statements: t.Statement[] = [\n t.tryStatement(\n t.blockStatement(path.node.body),\n t.catchClause(\n error,\n t.blockStatement([t.returnStatement(t.arrayExpression(throwResult))]),\n ),\n ),\n t.returnStatement(t.arrayExpression(haltResult)),\n ];\n\n if (applyMutations) {\n statements.unshift(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n applyMutations,\n t.arrowFunctionExpression(\n [],\n t.objectExpression(\n mutations.map(item => t.objectProperty(item, item, false, true)),\n ),\n ),\n ),\n ]),\n );\n }\n\n path.node.body = statements;\n\n return {\n hasReturn,\n hasYield,\n };\n}\n\nfunction getFunctionReplacement(\n ctx: StateContext,\n path: babel.NodePath<t.ArrowFunctionExpression | t.FunctionExpression>,\n entryFile: string,\n bindings: ExtractedBindings,\n halting: HaltingFunctionResult,\n): t.Expression {\n const rest = path.scope.generateUidIdentifier('rest');\n\n const returnType = path.scope.generateUidIdentifier('type');\n const returnResult = path.scope.generateUidIdentifier('result');\n const returnMutations = path.scope.generateUidIdentifier('mutations');\n\n const replacement: t.Statement[] = [];\n if (halting.hasYield) {\n const funcID = path.scope.generateUidIdentifier('fn');\n replacement.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n funcID,\n t.callExpression(getImportIdentifier(ctx, path, HIDDEN_GENERATOR), [\n t.memberExpression(\n t.awaitExpression(t.importExpression(t.stringLiteral(entryFile))),\n t.identifier('default'),\n ),\n bindings.mutations.length\n ? t.arrowFunctionExpression(\n [returnMutations],\n t.assignmentExpression(\n '=',\n t.objectPattern(\n bindings.mutations.map(item =>\n t.objectProperty(item, item, false, true),\n ),\n ),\n returnMutations,\n ),\n )\n : t.nullLiteral(),\n ]),\n ),\n ]),\n );\n const [reps, step] = getGeneratorReplacementForServerBlock(path, funcID, [\n t.arrayExpression(bindings.locals),\n t.spreadElement(rest),\n ]);\n for (let i = 0, len = reps.length; i < len; i++) {\n replacement.push(reps[i]);\n }\n replacement.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.arrayPattern([returnType, returnResult]),\n t.memberExpression(step, t.identifier('value')),\n ),\n ]),\n );\n } else {\n replacement.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.arrayPattern([returnType, returnResult]),\n t.awaitExpression(\n t.callExpression(\n t.callExpression(getImportIdentifier(ctx, path, HIDDEN_FUNC), [\n t.memberExpression(\n t.awaitExpression(\n t.importExpression(t.stringLiteral(entryFile)),\n ),\n t.identifier('default'),\n ),\n bindings.mutations.length\n ? t.arrowFunctionExpression(\n [returnMutations],\n t.assignmentExpression(\n '=',\n t.objectPattern(\n bindings.mutations.map(item =>\n t.objectProperty(item, item, false, true),\n ),\n ),\n returnMutations,\n ),\n )\n : t.nullLiteral(),\n ]),\n [t.arrayExpression(bindings.locals), t.spreadElement(rest)],\n ),\n ),\n ),\n ]),\n );\n }\n\n replacement.push(t.returnStatement(returnResult));\n\n if (isPathValid(path, t.isFunctionExpression)) {\n return t.functionExpression(\n path.node.id,\n [t.restElement(rest)],\n t.blockStatement(replacement),\n halting.hasYield,\n true,\n );\n }\n return t.arrowFunctionExpression(\n [t.restElement(rest)],\n t.blockStatement(replacement),\n true,\n );\n}\n\nfunction replaceFunction(\n ctx: StateContext,\n path: babel.NodePath<t.ArrowFunctionExpression | t.FunctionExpression>,\n func: FunctionDefinition,\n bindings: ExtractedBindings,\n): t.Expression {\n const body = path.get('body');\n if (isPathValid(body, t.isExpression)) {\n body.replaceWith(t.blockStatement([t.returnStatement(body.node)]));\n }\n assert(isPathValid(body, t.isBlockStatement), 'invariant');\n const halting = transformFunctionContent(body, bindings.mutations);\n const rootFile = createRootFile(\n ctx,\n bindings,\n t.isFunctionExpression(path.node)\n ? t.functionExpression(\n path.node.id,\n [t.arrayPattern(bindings.locals), ...path.node.params],\n path.node.body,\n path.node.async,\n path.node.generator,\n )\n : t.arrowFunctionExpression(\n [t.arrayPattern(bindings.locals), ...path.node.params],\n path.node.body,\n path.node.async,\n ),\n );\n\n const entryFile = createEntryFile(ctx, path, rootFile, func.target);\n\n return getFunctionReplacement(ctx, path, entryFile, bindings, halting);\n}\n\nexport function splitFunction(\n ctx: StateContext,\n path: babel.NodePath<t.ArrowFunctionExpression | t.FunctionExpression>,\n func: FunctionDefinition,\n): t.Expression {\n return replaceFunction(\n ctx,\n path,\n func,\n extractBindings(ctx, path, getForeignBindings(path, 'function'), func.pure),\n );\n}\n\nfunction replaceExpression(\n ctx: StateContext,\n path: babel.NodePath<t.Expression>,\n func: FunctionDefinition,\n bindings: ExtractedBindings,\n): t.Expression {\n const rootFile = createRootFile(ctx, bindings, path.node);\n const entryFile = createEntryFile(ctx, path, rootFile, func.target);\n\n const rest = path.scope.generateUidIdentifier('rest');\n\n return t.arrowFunctionExpression(\n [t.restElement(rest)],\n t.callExpression(\n t.memberExpression(\n t.awaitExpression(t.importExpression(t.stringLiteral(entryFile))),\n t.identifier('default'),\n ),\n [t.spreadElement(rest)],\n ),\n true,\n );\n}\n\nexport function splitExpression(\n ctx: StateContext,\n path: babel.NodePath<t.Expression>,\n func: FunctionDefinition,\n): t.Expression {\n return replaceExpression(\n ctx,\n path,\n func,\n extractBindings(\n ctx,\n path,\n getForeignBindings(path, 'expression'),\n func.pure,\n ),\n );\n}\n", "import type { ImportDefinition } from './types';\n\nexport const HIDDEN_FUNC: ImportDefinition = {\n kind: 'named',\n source: 'dismantle/runtime',\n name: '$$func',\n};\n\nexport const HIDDEN_GENERATOR: ImportDefinition = {\n kind: 'named',\n source: 'dismantle/runtime',\n name: '$$gen',\n};\n", "export default function assert(cond: unknown, error: string): asserts cond {\n if (!cond) {\n throw new Error(error);\n }\n}\n", "import _generator from '@babel/generator';\nimport type * as t from '@babel/types';\nimport type { CodeOutput } from '../types';\n\ntype GeneratorShim = typeof _generator;\n\n// https://github.com/babel/babel/issues/15269\nconst generator: GeneratorShim =\n typeof _generator !== 'function'\n ? (_generator as unknown as { default: GeneratorShim }).default\n : _generator;\n\nexport function generateCode(id: string, node: t.Node): CodeOutput {\n const result = generator(node, {\n sourceMaps: true,\n sourceFileName: id,\n });\n return {\n code: result.code,\n map: result.map,\n };\n}\n", "import type { NodePath } from '@babel/core';\n\nexport function getDescriptiveName(\n path: NodePath,\n defaultName: string,\n): string {\n let current: NodePath | null = path;\n while (current) {\n switch (current.node.type) {\n case 'FunctionDeclaration':\n case 'FunctionExpression': {\n if (current.node.id) {\n return current.node.id.name;\n }\n break;\n }\n case 'VariableDeclarator': {\n if (current.node.id.type === 'Identifier') {\n return current.node.id.name;\n }\n break;\n }\n case 'ClassPrivateMethod':\n case 'ClassMethod':\n case 'ObjectMethod': {\n switch (current.node.key.type) {\n case 'Identifier':\n return current.node.key.name;\n case 'PrivateName':\n return current.node.key.id.name;\n default:\n break;\n }\n break;\n }\n default:\n break;\n }\n current = current.parentPath;\n }\n return defaultName;\n}\n", "import type * as babel from '@babel/core';\nimport * as t from '@babel/types';\n\nfunction isForeignBinding(\n source: babel.NodePath,\n current: babel.NodePath,\n name: string,\n mode: 'block' | 'function',\n): boolean {\n if (current.scope.hasGlobal(name)) {\n return false;\n }\n if (source === current) {\n return true;\n }\n if (current.scope.hasOwnBinding(name)) {\n if (mode === 'block') {\n const binding = current.scope.getBinding(name);\n return !!binding && binding.kind === 'param';\n }\n return false;\n }\n if (current.parentPath) {\n return isForeignBinding(source, current.parentPath, name, mode);\n }\n return true;\n}\n\nfunction isInTypescript(path: babel.NodePath): boolean {\n let parent = path.parentPath;\n while (parent) {\n if (t.isTypeScript(parent.node) && !t.isExpression(parent.node)) {\n return true;\n }\n parent = parent.parentPath;\n }\n return false;\n}\n\nexport default function getForeignBindings(\n path: babel.NodePath,\n mode: 'block' | 'function' | 'expression',\n): Set<string> {\n const identifiers = new Set<string>();\n path.traverse({\n ReferencedIdentifier(p) {\n // Check identifiers that aren't in a TS expression\n if (\n !isInTypescript(p) &&\n (mode === 'expression'\n ? !path.scope.hasGlobal(p.node.name)\n : isForeignBinding(path, p, p.node.name, mode))\n ) {\n identifiers.add(p.node.name);\n }\n },\n });\n\n return identifiers;\n}\n", "import * as t from '@babel/types';\n\nfunction getIdentifiersFromArrayPattern(node: t.ArrayPattern): string[] {\n const ids: string[] = [];\n for (let i = 0, len = node.elements.length; i < len; i++) {\n const el = node.elements[i];\n if (el) {\n ids.push(...getIdentifiersFromLVal(el));\n }\n }\n return ids;\n}\n\nfunction getIdentifiersFromObjectPattern(node: t.ObjectPattern): string[] {\n const ids: string[] = [];\n for (let i = 0, len = node.properties.length; i < len; i++) {\n const el = node.properties[i];\n if (el) {\n if (el.type === 'RestElement') {\n ids.push(...getIdentifiersFromLVal(el));\n } else if (t.isLVal(el.value)) {\n ids.push(...getIdentifiersFromLVal(el.value));\n }\n }\n }\n return ids;\n}\n\nexport function getIdentifiersFromLVal(node: t.LVal): string[] {\n switch (node.type) {\n case 'Identifier':\n return [node.name];\n case 'ArrayPattern':\n return getIdentifiersFromArrayPattern(node);\n case 'AssignmentPattern':\n return getIdentifiersFromLVal(node.left);\n case 'ObjectPattern':\n return getIdentifiersFromObjectPattern(node);\n case 'RestElement':\n return getIdentifiersFromLVal(node.argument);\n default:\n return [];\n }\n}\n", "import type * as babel from '@babel/core';\nimport * as t from '@babel/types';\nimport type { ImportDefinition, StateContext } from '../types';\n\nexport function getImportIdentifier(\n state: StateContext,\n path: babel.NodePath,\n registration: ImportDefinition,\n): t.Identifier {\n const name = registration.kind === 'named' ? registration.name : 'default';\n const target = `${registration.source}[${name}]`;\n const current = state.imports.get(target);\n if (current) {\n return current;\n }\n const programParent = path.scope.getProgramParent();\n const uid = programParent.generateUidIdentifier(\n registration.kind === 'named' ? registration.name : 'default',\n );\n const newPath = (\n programParent.path as babel.NodePath<t.Program>\n ).unshiftContainer(\n 'body',\n t.importDeclaration(\n [\n registration.kind === 'named'\n ? t.importSpecifier(uid, t.identifier(registration.name))\n : t.importDefaultSpecifier(uid),\n ],\n t.stringLiteral(registration.source),\n ),\n )[0];\n programParent.registerDeclaration(newPath);\n state.imports.set(target, uid);\n return uid;\n}\n", "import type * as babel from '@babel/core';\nimport * as t from '@babel/types';\nimport type { ModuleDefinition } from '../types';\nimport { getImportSpecifierName } from './get-import-specifier-name';\nimport { isPathValid } from './unwrap';\n\nexport function getModuleDefinition(\n path: babel.NodePath,\n): ModuleDefinition | undefined {\n if (\n !(\n isPathValid(path, t.isImportSpecifier) ||\n isPathValid(path, t.isImportDefaultSpecifier) ||\n isPathValid(path, t.isImportNamespaceSpecifier)\n )\n ) {\n return undefined;\n }\n const parent =\n path.getStatementParent() as babel.NodePath<t.ImportDeclaration>;\n const source = parent.node.source.value;\n switch (path.node.type) {\n case 'ImportDefaultSpecifier':\n return {\n source,\n kind: 'default',\n local: path.node.local.name,\n };\n case 'ImportNamespaceSpecifier':\n return {\n source,\n kind: 'namespace',\n local: path.node.local.name,\n };\n case 'ImportSpecifier': {\n const imported = getImportSpecifierName(path.node);\n if (imported === 'default') {\n return {\n source,\n kind: 'default',\n local: path.node.local.name,\n imported: '',\n };\n }\n return {\n source,\n kind: 'named',\n local: path.node.local.name,\n imported,\n };\n }\n }\n}\n", "import type * as t from '@babel/types';\n\nexport function getImportSpecifierName(node: t.ImportSpecifier) {\n switch (node.imported.type) {\n case 'Identifier':\n return node.imported.name;\n case 'StringLiteral':\n return node.imported.value;\n }\n}\n", "import type * as babel from '@babel/core';\nimport type * as t from '@babel/types';\n\ntype TypeFilter<V extends t.Node> = (node: t.Node) => node is V;\n\nexport function isPathValid<V extends t.Node>(\n path: unknown,\n key: TypeFilter<V>,\n): path is babel.NodePath<V> {\n return key((path as babel.NodePath).node);\n}\n\nexport type NestedExpression =\n | t.ParenthesizedExpression\n | t.TypeCastExpression\n | t.TSAsExpression\n | t.TSSatisfiesExpression\n | t.TSNonNullExpression\n | t.TSInstantiationExpression\n | t.TSTypeAssertion;\n\nexport function isNestedExpression(node: t.Node): node is NestedExpression {\n switch (node.type) {\n case 'ParenthesizedExpression':\n case 'TypeCastExpression':\n case 'TSAsExpression':\n case 'TSSatisfiesExpression':\n case 'TSNonNullExpression':\n case 'TSTypeAssertion':\n case 'TSInstantiationExpression':\n return true;\n default:\n return false;\n }\n}\n\ntype TypeCheck<K> = K extends TypeFilter<infer U> ? U : never;\n\nexport function unwrapNode<K extends (value: t.Node) => boolean>(\n node: t.Node,\n key: K,\n): TypeCheck<K> | undefined {\n if (key(node)) {\n return node as TypeCheck<K>;\n }\n if (isNestedExpression(node)) {\n return unwrapNode(node.expression, key);\n }\n return undefined;\n}\n\nexport function unwrapPath<V extends t.Node>(\n path: unknown,\n key: TypeFilter<V>,\n): babel.NodePath<V> | undefined {\n if (isPathValid(path, key)) {\n return path;\n }\n if (isPathValid(path, isNestedExpression)) {\n return unwrapPath(path.get('expression'), key);\n }\n return undefined;\n}\n", "import type * as babel from '@babel/core';\nimport * as t from '@babel/types';\n\nexport function getRootStatementPath(path: babel.NodePath): babel.NodePath {\n let current = path.parentPath;\n while (current) {\n const next = current.parentPath;\n if (next && t.isProgram(next.node)) {\n return current;\n }\n current = next;\n }\n return path;\n}\n", "import type * as babel from '@babel/core';\nimport type * as t from '@babel/types';\nimport { splitBlock } from './split';\nimport type { DirectiveDefinition, StateContext } from './types';\n\nfunction getValidDirectiveFromString(\n ctx: StateContext,\n string: string,\n): DirectiveDefinition | undefined {\n for (let i = 0, len = ctx.options.directives.length; i < len; i++) {\n const current = ctx.options.directives[i];\n if (current.value === string) {\n return current;\n }\n }\n return undefined;\n}\n\nfunction getDefinitionFromDirectives(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n): DirectiveDefinition | undefined {\n for (let i = 0, len = path.node.directives.length; i < len; i++) {\n const statement = path.node.directives[i].value.value;\n const directive = getValidDirectiveFromString(ctx, statement);\n if (directive) {\n return directive;\n }\n }\n return undefined;\n}\n\nfunction getDefinitionFromFauxDirectives(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n): DirectiveDefinition | undefined {\n for (let i = 0, len = path.node.body.length; i < len; i++) {\n const statement = path.node.body[i];\n if (\n statement.type === 'ExpressionStatement' &&\n statement.expression.type === 'StringLiteral'\n ) {\n const directive = getValidDirectiveFromString(\n ctx,\n statement.expression.value,\n );\n if (directive) {\n return directive;\n }\n } else {\n break;\n }\n }\n return undefined;\n}\n\nfunction getDirectiveDefinitionFromBlock(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n): DirectiveDefinition | undefined {\n const parent = path.getFunctionParent();\n if (parent && !parent.node.async) {\n return undefined;\n }\n return (\n getDefinitionFromDirectives(ctx, path) ||\n getDefinitionFromFauxDirectives(ctx, path)\n );\n}\n\nfunction cleanBlockForDirectives(\n path: babel.NodePath<t.BlockStatement>,\n definition: DirectiveDefinition,\n): void {\n const newDirectives: t.Directive[] = [];\n for (let i = 0, len = path.node.directives.length; i < len; i++) {\n const current = path.node.directives[i];\n if (current.value.value !== definition.value) {\n newDirectives.push(current);\n }\n }\n path.node.directives = newDirectives;\n}\n\nfunction cleanBlockForFauxDirectives(\n path: babel.NodePath<t.BlockStatement>,\n definition: DirectiveDefinition,\n): void {\n const body = path.get('body');\n for (let i = 0, len = body.length; i < len; i++) {\n const statement = body[i];\n if (\n statement.node.type === 'ExpressionStatement' &&\n statement.node.expression.type === 'StringLiteral'\n ) {\n if (statement.node.expression.value === definition.value) {\n statement.remove();\n return;\n }\n }\n }\n}\n\nexport function transformBlock(\n ctx: StateContext,\n path: babel.NodePath<t.BlockStatement>,\n): void {\n const definition = getDirectiveDefinitionFromBlock(ctx, path);\n if (!definition) {\n return;\n }\n cleanBlockForDirectives(path, definition);\n cleanBlockForFauxDirectives(path, definition);\n splitBlock(ctx, path, definition);\n}\n", "import type * as babel from '@babel/core';\nimport * as t from '@babel/types';\nimport { splitExpression, splitFunction } from './split';\nimport type { FunctionDefinition, StateContext } from './types';\nimport { isPathValid, unwrapNode } from './utils/unwrap';\n\nfunction getFunctionDefinitionFromPropName(\n definitions: FunctionDefinition[],\n propName: string,\n): FunctionDefinition | undefined {\n for (let i = 0, len = definitions.length; i < len; i++) {\n const def = definitions[i];\n if (def.source.kind === 'default' && propName === 'default') {\n return def;\n }\n if (def.source.kind === 'named' && propName === def.source.name) {\n return def;\n }\n }\n return undefined;\n}\n\nfunction getFunctionDefinitionFromCallee(\n ctx: StateContext,\n path: babel.NodePath<t.CallExpression>,\n): FunctionDefinition | undefined {\n const callee = path.node.callee;\n const id = unwrapNode(callee, t.isIdentifier);\n if (id) {\n const binding = path.scope.getBindingIdentifier(id.name);\n if (binding) {\n return ctx.registrations.identifiers.get(binding);\n }\n return undefined;\n }\n const memberExpr = unwrapNode(callee, t.isMemberExpression);\n if (\n memberExpr &&\n !memberExpr.computed &&\n t.isIdentifier(memberExpr.property)\n ) {\n const object = unwrapNode(memberExpr.object, t.isIdentifier);\n if (object) {\n const binding = path.scope.getBindingIdentifier(object.name);\n if (binding) {\n const definitions = ctx.registrations.namespaces.get(binding);\n if (definitions) {\n return getFunctionDefinitionFromPropName(\n definitions,\n memberExpr.property.name,\n );\n }\n }\n }\n }\n return undefined;\n}\n\nfunction isValidFunction(\n node: t.Node,\n): node is t.ArrowFunctionExpression | t.FunctionExpression {\n return t.isArrowFunctionExpression(node) || t.isFunctionExpression(node);\n}\n\nfunction isSkippableFunction(node: t.Expression): boolean {\n if (node.leadingComments) {\n for (let i = 0, len = node.leadingComments.length; i < len; i++) {\n if (/^@dismantle skip$/.test(node.leadingComments[i].value)) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function transformCall(\n ctx: StateContext,\n path: babel.NodePath<t.CallExpression>,\n): void {\n const definition = getFunctionDefinitionFromCallee(ctx, path);\n if (!definition) {\n return;\n }\n const args = path.get('arguments');\n const expr = args[0];\n if (isPathValid(expr, t.isExpression)) {\n if (isSkippableFunction(expr.node)) {\n return;\n }\n const replacement = isPathValid(expr, isValidFunction)\n ? splitFunction(ctx, expr, definition)\n : splitExpression(ctx, expr, definition);\n\n if (definition.preserve) {\n expr.replaceWith(t.addComment(replacement, 'leading', '@dismantle skip'));\n } else {\n path.replaceWith(replacement);\n }\n }\n}\n", "import type * as babel from '@babel/core';\nimport * as t from '@babel/types';\nimport type { FunctionDefinition, StateContext } from '../types';\nimport { getImportSpecifierName } from './get-import-specifier-name';\n\nfunction registerImportSpecifier(\n ctx: StateContext,\n node:\n | t.ImportSpecifier\n | t.ImportDefaultSpecifier\n | t.ImportNamespaceSpecifier,\n definition: FunctionDefinition,\n): void {\n if (t.isImportSpecifier(node)) {\n if (node.importKind === 'type' || node.importKind === 'typeof') {\n return;\n }\n const key = getImportSpecifierName(node);\n if (\n (definition.source.kind === 'named' && key === definition.source.name) ||\n (definition.source.kind === 'default' && key === 'default')\n ) {\n ctx.registrations.identifiers.set(node.local, definition);\n }\n }\n if (\n t.isImportDefaultSpecifier(node) &&\n definition.source.kind === 'default'\n ) {\n ctx.registrations.identifiers.set(node.local, definition);\n }\n if (t.isImportNamespaceSpecifier(node)) {\n let current = ctx.registrations.namespaces.get(node.local);\n if (!current) {\n current = [];\n }\n current.push(definition);\n ctx.registrations.namespaces.set(node.local, current);\n }\n}\n\nfunction registerImportDeclarationByDefinition(\n ctx: StateContext,\n path: babel.NodePath<t.ImportDeclaration>,\n definition: FunctionDefinition,\n): void {\n for (let i = 0, len = path.node.specifiers.length; i < len; i++) {\n const specifier = path.node.specifiers[i];\n registerImportSpecifier(ctx, specifier, definition);\n }\n}\n\nexport function registerImportSpecifiers(\n ctx: StateContext,\n programPath: babel.NodePath<t.Program>,\n): void {\n const len = ctx.options.functions.length;\n if (!len) {\n return;\n }\n programPath.traverse({\n ImportDeclaration(path) {\n if (\n path.node.importKind === 'type' ||\n path.node.importKind === 'typeof'\n ) {\n return;\n }\n for (let i = 0; i < len; i++) {\n const func = ctx.options.functions[i];\n if (func.source.source === path.node.source.value) {\n registerImportDeclarationByDefinition(ctx, path, func);\n }\n }\n },\n });\n}\n", "import type * as babel from '@babel/core';\nimport { transformBlock } from './transform-block';\nimport { transformCall } from './transform-call';\nimport type { StateContext } from './types';\nimport { registerImportSpecifiers } from './utils/register-import-specifiers';\n\ninterface State extends babel.PluginPass {\n opts: StateContext;\n}\n\nexport function plugin(): babel.PluginObj<State> {\n return {\n name: 'dismantle',\n visitor: {\n Program(path, ctx) {\n registerImportSpecifiers(ctx.opts, path);\n },\n BlockStatement(path, ctx) {\n transformBlock(ctx.opts, path);\n },\n CallExpression(path, ctx) {\n transformCall(ctx.opts, path);\n },\n },\n };\n}\n", "/* eslint-disable @typescript-eslint/no-shadow */\n/**\n * Copyright (c) 2019 Jason Dent\n * https://github.com/Jason3S/xxhash\n */\nconst PRIME32_1 = 2654435761;\nconst PRIME32_2 = 2246822519;\nconst PRIME32_3 = 3266489917;\nconst PRIME32_4 = 668265263;\nconst PRIME32_5 = 374761393;\n\nfunction toUtf8(text: string): Uint8Array {\n const bytes: number[] = [];\n for (let i = 0, n = text.length; i < n; ++i) {\n const c = text.charCodeAt(i);\n if (c < 0x80) {\n bytes.push(c);\n } else if (c < 0x800) {\n bytes.push(0xc0 | (c >> 6), 0x80 | (c & 0x3f));\n } else if (c < 0xd800 || c >= 0xe000) {\n bytes.push(0xe0 | (c >> 12), 0x80 | ((c >> 6) & 0x3f), 0x80 | (c & 0x3f));\n } else {\n const cp =\n 0x10000 + (((c & 0x3ff) << 10) | (text.charCodeAt(++i) & 0x3ff));\n bytes.push(\n 0xf0 | ((cp >> 18) & 0x7),\n 0x80 | ((cp >> 12) & 0x3f),\n 0x80 | ((cp >> 6) & 0x3f),\n 0x80 | (cp & 0x3f),\n );\n }\n }\n return new Uint8Array(bytes);\n}\n/**\n *\n * @param buffer - byte array or string\n * @param seed - optional seed (32-bit unsigned);\n */\nexport default function xxHash32(\n buffer: Uint8Array | string,\n seed = 0,\n): number {\n buffer = typeof buffer === 'string' ? toUtf8(buffer) : buffer;\n const b = buffer;\n\n /*\n Step 1. Initialize internal accumulators\n Each accumulator gets an initial value based on optional seed input.\n Since the seed is optional, it can be 0.\n ```\n u32 acc1 = seed + PRIME32_1 + PRIME32_2;\n u32 acc2 = seed + PRIME32_2;\n u32 acc3 = seed + 0;\n u32 acc4 = seed - PRIME32_1;\n ```\n Special case : input is less than 16 bytes\n When input is too small (< 16 bytes), the algorithm will not process any stripe.\n Consequently, it will not make use of parallel accumulators.\n In which case, a simplified initialization is performed, using a single accumulator :\n u32 acc = seed + PRIME32_5;\n The algorithm then proceeds directly to step 4.\n */\n\n let acc = (seed + PRIME32_5) & 0xffffffff;\n let offset = 0;\n\n if (b.length >= 16) {\n const accN = [\n (seed + PRIME32_1 + PRIME32_2) & 0xffffffff,\n (seed + PRIME32_2) & 0xffffffff,\n (seed + 0) & 0xffffffff,\n (seed - PRIME32_1) & 0xffffffff,\n ];\n\n /*\n Step 2. Process stripes\n A stripe is a contiguous segment of 16 bytes. It is evenly divided into 4 lanes,\n of 4 bytes each. The first lane is used to update accumulator 1, the second lane\n is used to update accumulator 2, and so on. Each lane read its associated 32-bit\n value using little-endian convention. For each {lane, accumulator}, the update\n process is called a round, and applies the following formula :\n ```\n accN = accN + (laneN * PRIME32_2);\n accN = accN <<< 13;\n accN = accN * PRIME32_1;\n ```\n This shuffles the bits so that any bit from input lane impacts several bits in\n output accumulator. All operations are performed modulo 2^32.\n Input is consumed one full stripe at a time. Step 2 is looped as many times as\n necessary to consume the whole input, except the last remaining bytes which cannot\n form a stripe (< 16 bytes). When that happens, move to step 3.\n */\n\n const b = buffer;\n const limit = b.length - 16;\n let lane = 0;\n for (offset = 0; (offset & 0xfffffff0) <= limit; offset += 4) {\n const i = offset;\n const laneN0 = b[i + 0] + (b[i + 1] << 8);\n const laneN1 = b[i + 2] + (b[i + 3] << 8);\n const laneNP = laneN0 * PRIME32_2 + ((laneN1 * PRIME32_2) << 16);\n let acc = (accN[lane] + laneNP) & 0xffffffff;\n acc = (acc << 13) | (acc >>> 19);\n const acc0 = acc & 0xffff;\n const acc1 = acc >>> 16;\n accN[lane] = (acc0 * PRIME32_1 + ((acc1 * PRIME32_1) << 16)) & 0xffffffff;\n lane = (lane + 1) & 0x3;\n }\n\n /*\n Step 3. Accumulator convergence\n All 4 lane accumulators from previous steps are merged to produce a\n single remaining accumulator\n of same width (32-bit). The associated formula is as follows :\n ```\n acc = (acc1 <<< 1) + (acc2 <<< 7) + (acc3 <<< 12) + (acc4 <<< 18);\n ```\n */\n acc =\n (((accN[0] << 1) | (accN[0] >>> 31)) +\n ((accN[1] << 7) | (accN[1] >>> 25)) +\n ((accN[2] << 12) | (accN[2] >>> 20)) +\n ((accN[3] << 18) | (accN[3] >>> 14))) &\n 0xffffffff;\n }\n\n /*\n Step 4. Add input length\n The input total length is presumed known at this stage.\n This step is just about adding the length to\n accumulator, so that it participates to final mixing.\n ```\n acc = acc + (u32)inputLength;\n ```\n */\n acc = (acc + buffer.length) & 0xffffffff;\n\n /*\n Step 5. Consume remaining input\n There may be up to 15 bytes remaining to consume from the input.\n The final stage will digest them according\n to following pseudo-code :\n ```\n while (remainingLength >= 4) {\n lane = read_32bit_little_endian(input_ptr);\n acc = acc + lane * PRIME32_3;\n acc = (acc <<< 17) * PRIME32_4;\n input_ptr += 4; remainingLength -= 4;\n }\n ```\n This process ensures that all input bytes are present in the final mix.\n */\n\n const limit = buffer.length - 4;\n for (; offset <= limit; offset += 4) {\n const i = offset;\n const laneN0 = b[i + 0] + (b[i + 1] << 8);\n const laneN1 = b[i + 2] + (b[i + 3] << 8);\n const laneP = laneN0 * PRIME32_3 + ((laneN1 * PRIME32_3) << 16);\n acc = (acc + laneP) & 0xffffffff;\n acc = (acc << 17) | (acc >>> 15);\n acc =\n ((acc & 0xffff) * PRIME32_4 + (((acc >>> 16) * PRIME32_4) << 16)) &\n 0xffffffff;\n }\n\n /*\n ```\n while (remainingLength >= 1) {\n lane = read_byte(input_ptr);\n acc = acc + lane * PRIME32_5;\n acc = (acc <<< 11) * PRIME32_1;\n input_ptr += 1; remainingLength -= 1;\n }\n ```\n */\n\n for (; offset < b.length; ++offset) {\n const lane = b[offset];\n acc += lane * PRIME32_5;\n acc = (acc << 11) | (acc >>> 21);\n acc =\n ((acc & 0xffff) * PRIME32_1 + (((acc >>> 16) * PRIME32_1) << 16)) &\n 0xffffffff;\n }\n\n /*\n Step 6. Final mix (avalanche)\n The final mix ensures that all input bits have a chance to impact any bit in\n the output digest, resulting in an unbiased distribution. This is also called\n avalanche effect.\n ```\n acc = acc xor (acc >> 15);\n acc = acc * PRIME32_2;\n acc = acc xor (acc >> 13);\n acc = acc * PRIME32_3;\n acc = acc xor (acc >> 16);\n ```\n */\n\n acc ^= acc >>> 15;\n acc =\n (((acc & 0xffff) * PRIME32_2) & 0xffffffff) +\n (((acc >>> 16) * PRIME32_2) << 16);\n acc ^= acc >>> 13;\n acc =\n (((acc & 0xffff) * PRIME32_3) & 0xffffffff) +\n (((acc >>> 16) * PRIME32_3) << 16);\n acc ^= acc >>> 16;\n\n // turn any negatives back into a positive number;\n return acc < 0 ? acc + 4294967296 : acc;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["t", "_generator", "path", "path", "t", "t", "path", "t", "path", "path", "t", "path", "path", "identifier", "path", "t", "path", "t", "path", "path", "b", "limit", "acc", "path"]
7
7
  }
@@ -1062,8 +1062,8 @@ function getFunctionReplacement(ctx, path2, entryFile, bindings, halting) {
1062
1062
  path2.node.id,
1063
1063
  [t6.restElement(rest)],
1064
1064
  t6.blockStatement(replacement),
1065
- true,
1066
- halting.hasYield
1065
+ halting.hasYield,
1066
+ true
1067
1067
  );
1068
1068
  }
1069
1069
  return t6.arrowFunctionExpression(