@spotpatch/vite 1.8.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +115 -43
- package/dist/cli.js +90 -25
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +117 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +123 -9
- package/dist/index.js.map +1 -1
- package/dist/runtime-client.js +34 -34
- package/dist/runtime-data-flow-panel.js +26 -0
- package/dist/runtime-data-flow-prelude.js +1 -0
- package/dist/runtime-external-handoff-panel.js +28 -0
- package/dist/runtime-react-adapter.js +1 -1
- package/package.json +8 -7
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/initializer.ts","../src/setup.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\n\nimport {\n applyViteIntegrationPlan,\n checkViteIntegration,\n planViteIntegration,\n} from \"./initializer.js\";\nimport { detectPackageManager, installLatestAdapter } from \"./setup.js\";\n\nconst VERSION_PATTERN = /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-[0-9A-Za-z.-]+)?$/u;\n\nfunction writeUsage(): void {\n process.stderr.write(\n \"Usage: spotpatch-vite <setup|init|check>\\n\" +\n \" setup Install or upgrade @spotpatch/vite@latest, then initialize it.\\n\" +\n \" init Preview and apply safe Vite integration changes.\\n\" +\n \" check Verify the Vite integration without writing files.\\n\",\n );\n}\n\nasync function inspectViteProject(appRoot = process.cwd()): Promise<string> {\n const resolveFromApplication = createRequire(path.join(appRoot, \"package.json\"));\n let adapterEntry: string;\n let viteManifestPath: string;\n\n try {\n adapterEntry = resolveFromApplication.resolve(\"@spotpatch/vite\");\n viteManifestPath = resolveFromApplication.resolve(\"vite/package.json\");\n } catch (error: unknown) {\n throw new Error(\n \"SpotPatch could not resolve the local @spotpatch/vite and Vite packages.\",\n { cause: error },\n );\n }\n\n if (adapterEntry.length === 0) {\n throw new Error(\"SpotPatch could not resolve the Vite adapter export.\");\n }\n\n const manifest = JSON.parse(await readFile(viteManifestPath, \"utf8\")) as unknown;\n const version =\n typeof manifest === \"object\" &&\n manifest !== null &&\n \"version\" in manifest &&\n typeof manifest.version === \"string\"\n ? manifest.version\n : undefined;\n const match = version === undefined ? null : VERSION_PATTERN.exec(version);\n const major = Number(match?.[1]);\n\n if (\n version === undefined ||\n match === null ||\n !Number.isSafeInteger(major) ||\n major < 5 ||\n major >= 8\n ) {\n throw new Error(\n `SpotPatch Vite requires Vite >=5.0.0 <8.0.0; found ${version ?? \"unknown\"}.`,\n );\n }\n\n return version;\n}\n\nfunction writeTrustedModeStatus(available: boolean): void {\n process.stdout.write(\n available\n ? \"[spotpatch:vite] trusted fast mode is available in the page selector.\\n\"\n : \"[spotpatch:vite] review mode is ready; trusted fast mode needs a local TypeScript project check.\\n\",\n );\n}\n\nasync function runInit(arguments_: readonly string[]): Promise<number> {\n if (arguments_.length !== 0) {\n throw new Error(\"SpotPatch init does not accept positional arguments.\");\n }\n\n await inspectViteProject();\n const plan = await planViteIntegration();\n\n if (plan.changes.length === 0) {\n process.stdout.write(\"[spotpatch:vite] integration is already up to date.\\n\");\n writeTrustedModeStatus(plan.trustedFastModeAvailable);\n return 0;\n }\n\n process.stdout.write(\"[spotpatch:vite] integration preview (resulting files):\\n\");\n\n for (const change of plan.changes) {\n process.stdout.write(`\\n--- ${change.relativePath}\\n${change.nextContent}`);\n\n if (!change.nextContent.endsWith(\"\\n\")) {\n process.stdout.write(\"\\n\");\n }\n }\n\n await applyViteIntegrationPlan(plan);\n process.stdout.write(\n `[spotpatch:vite] updated ${String(plan.changes.length)} integration file(s).\\n`,\n );\n writeTrustedModeStatus(plan.trustedFastModeAvailable);\n\n return 0;\n}\n\nasync function runSetup(arguments_: readonly string[]): Promise<number> {\n if (arguments_.length !== 0) {\n throw new Error(\"SpotPatch setup does not accept positional arguments.\");\n }\n\n const packageManager = await detectPackageManager();\n await installLatestAdapter(packageManager);\n return runInit([]);\n}\n\nasync function runCheck(arguments_: readonly string[]): Promise<number> {\n if (arguments_.length !== 0) {\n throw new Error(\"SpotPatch check does not accept positional arguments.\");\n }\n\n const version = await inspectViteProject();\n const result = await checkViteIntegration();\n\n if (!result.ok) {\n for (const issue of result.issues) {\n process.stderr.write(`[spotpatch:vite] ${issue}\\n`);\n }\n\n return 1;\n }\n\n const mode = result.trustedFastModeAvailable\n ? \"trusted fast mode available\"\n : \"review mode\";\n process.stdout.write(\n `[spotpatch:vite] integration verified for Vite ${version} · ${mode}.\\n`,\n );\n return 0;\n}\n\nasync function main(arguments_: readonly string[]): Promise<number> {\n const [command, ...rest] = arguments_;\n\n if (command === \"setup\") {\n return runSetup(rest);\n }\n\n if (command === \"init\") {\n return runInit(rest);\n }\n\n if (command === \"check\") {\n return runCheck(rest);\n }\n\n writeUsage();\n return 1;\n}\n\ntry {\n process.exitCode = await main(process.argv.slice(2));\n} catch (error: unknown) {\n process.stderr.write(\n `[spotpatch:vite] ${\n error instanceof Error ? error.message : \"The command failed.\"\n }\\n`,\n );\n process.exitCode = 1;\n}\n","import path from \"node:path\";\n\nimport {\n applyIntegrationPlan,\n createIntegrationFileChange,\n discoverProjectValidationCheck,\n integrationPathExists,\n readIntegrationFile,\n type IntegrationFileChange,\n} from \"@spotpatch/dev-server\";\nimport { DEFAULT_AGENT_LIMITS } from \"@spotpatch/shared\";\nimport { MagicString } from \"magic-string\";\nimport {\n parseSync,\n Visitor,\n type ArrayExpression,\n type CallExpression,\n type ExportDefaultDeclaration,\n type Expression,\n type ImportDeclaration,\n type ObjectExpression,\n type ObjectProperty,\n type Program,\n type ReturnStatement,\n} from \"oxc-parser\";\n\nconst ADAPTER_PACKAGE_NAME = \"@spotpatch/vite\";\nconst CONFIG_FILE_NAMES = Object.freeze([\n \"vite.config.ts\",\n \"vite.config.mts\",\n \"vite.config.js\",\n \"vite.config.mjs\",\n] as const);\n\nexport interface ViteIntegrationPlan {\n readonly appRoot: string;\n readonly changes: readonly IntegrationFileChange[];\n readonly trustedFastModeAvailable: boolean;\n}\n\nexport interface ViteIntegrationCheck {\n readonly appRoot: string;\n readonly issues: readonly string[];\n readonly ok: boolean;\n readonly trustedFastModeAvailable: boolean;\n}\n\ninterface ParsedModule {\n readonly program: Program;\n readonly source: string;\n}\n\nfunction isParserErrorSeverity(value: unknown): boolean {\n return value === \"Error\";\n}\n\nfunction parseModule(absolutePath: string, source: string): ParsedModule {\n const result = parseSync(absolutePath, source, {\n sourceType: \"module\",\n showSemanticErrors: true,\n });\n const error = result.errors.find((entry) => isParserErrorSeverity(entry.severity));\n\n if (error !== undefined) {\n throw new SyntaxError(\n `SpotPatch could not safely parse ${path.basename(absolutePath)} (${error.message}).`,\n );\n }\n\n return Object.freeze({ program: result.program, source });\n}\n\nfunction importsOf(program: Program): readonly ImportDeclaration[] {\n return program.body.filter(\n (statement): statement is ImportDeclaration =>\n statement.type === \"ImportDeclaration\",\n );\n}\n\nfunction importInsertionOffset(program: Program): number {\n const lastImport = importsOf(program).at(-1);\n\n if (lastImport !== undefined) {\n return lastImport.end;\n }\n\n const directives = program.body.filter(\n (statement) =>\n statement.type === \"ExpressionStatement\" &&\n typeof statement.directive === \"string\",\n );\n return directives.at(-1)?.end ?? program.hashbang?.end ?? 0;\n}\n\nfunction insertStaticImport(\n magicString: MagicString,\n program: Program,\n statement: string,\n): void {\n const offset = importInsertionOffset(program);\n\n if (offset === 0) {\n magicString.prepend(`${statement}\\n`);\n return;\n }\n\n magicString.appendRight(offset, `\\n${statement}`);\n}\n\nfunction collectIdentifierNames(program: Program): ReadonlySet<string> {\n const names = new Set<string>();\n new Visitor({\n Identifier(node) {\n names.add(node.name);\n },\n }).visit(program);\n return names;\n}\n\nfunction choosePluginName(program: Program): string {\n const names = collectIdentifierNames(program);\n let suffix = 0;\n let candidate = \"spotPatch\";\n\n while (names.has(candidate)) {\n suffix += 1;\n candidate = `spotPatch${String(suffix)}`;\n }\n\n return candidate;\n}\n\nfunction importedPluginName(program: Program): string | undefined {\n const adapterImports = importsOf(program).filter(\n (statement) => statement.source.value === ADAPTER_PACKAGE_NAME,\n );\n\n if (adapterImports.length > 1) {\n throw new Error(\"SpotPatch init found duplicate @spotpatch/vite imports.\");\n }\n\n const adapterImport = adapterImports[0];\n\n if (adapterImport === undefined) {\n return undefined;\n }\n\n const plugin = adapterImport.specifiers.find(\n (specifier) =>\n specifier.type === \"ImportSpecifier\" &&\n specifier.imported.type === \"Identifier\" &&\n specifier.imported.name === \"spotPatch\" &&\n specifier.importKind !== \"type\",\n );\n\n if (plugin === undefined) {\n throw new Error(\n \"SpotPatch init cannot safely merge the existing @spotpatch/vite import.\",\n );\n }\n\n return plugin.local.name;\n}\n\nfunction unwrapExpression(expression: Expression): Expression {\n let current = expression;\n\n while (\n current.type === \"ParenthesizedExpression\" ||\n current.type === \"TSAsExpression\" ||\n current.type === \"TSSatisfiesExpression\" ||\n current.type === \"TSTypeAssertion\" ||\n current.type === \"TSNonNullExpression\"\n ) {\n current = current.expression;\n }\n\n return current;\n}\n\nfunction findDefaultExport(program: Program): ExportDefaultDeclaration {\n const exports = program.body.filter(\n (statement): statement is ExportDefaultDeclaration =>\n statement.type === \"ExportDefaultDeclaration\",\n );\n\n if (exports.length !== 1 || exports[0] === undefined) {\n throw new Error(\n \"SpotPatch init requires exactly one ESM default export in vite.config.\",\n );\n }\n\n return exports[0];\n}\n\nfunction findVariableInitializer(\n program: Program,\n name: string,\n): Expression | undefined {\n for (const statement of program.body) {\n if (statement.type !== \"VariableDeclaration\") {\n continue;\n }\n\n for (const declaration of statement.declarations) {\n if (\n declaration.id.type === \"Identifier\" &&\n declaration.id.name === name &&\n declaration.init !== null\n ) {\n return declaration.init;\n }\n }\n }\n\n return undefined;\n}\n\nfunction resolveConfigExpression(program: Program): Expression {\n const exported = findDefaultExport(program).declaration;\n\n if (\n exported.type === \"FunctionDeclaration\" ||\n exported.type === \"ClassDeclaration\" ||\n exported.type === \"TSInterfaceDeclaration\"\n ) {\n throw new Error(\n \"SpotPatch init requires vite.config to export a configuration expression.\",\n );\n }\n\n const expression = unwrapExpression(exported);\n const resolved =\n expression.type === \"Identifier\"\n ? findVariableInitializer(program, expression.name)\n : expression;\n\n if (resolved === undefined) {\n throw new Error(\"SpotPatch init could not resolve the vite.config export.\");\n }\n\n return unwrapExpression(resolved);\n}\n\nfunction resolveFactoryConfigObject(\n expression: Expression,\n): ObjectExpression | undefined {\n const factory = unwrapExpression(expression);\n\n if (\n factory.type !== \"ArrowFunctionExpression\" &&\n factory.type !== \"FunctionExpression\"\n ) {\n return undefined;\n }\n\n if (factory.body === null) {\n throw new Error(\n \"SpotPatch init cannot use a defineConfig callback without a body.\",\n );\n }\n\n if (factory.body.type !== \"BlockStatement\") {\n const returned = unwrapExpression(factory.body);\n return returned.type === \"ObjectExpression\" ? returned : undefined;\n }\n\n const returns: ReturnStatement[] = [];\n new Visitor({\n ReturnStatement(statement) {\n returns.push(statement);\n },\n }).visit({\n type: \"Program\",\n body: factory.body.body,\n sourceType: \"module\",\n hashbang: null,\n start: factory.body.start,\n end: factory.body.end,\n });\n\n const onlyReturn = returns.length === 1 ? returns[0] : undefined;\n\n if (onlyReturn?.argument == null) {\n throw new Error(\n \"SpotPatch init requires a defineConfig callback with exactly one top-level object return.\",\n );\n }\n\n const returned = unwrapExpression(onlyReturn.argument);\n\n if (returned.type !== \"ObjectExpression\") {\n throw new Error(\n \"SpotPatch init requires the defineConfig callback to return a configuration object directly.\",\n );\n }\n\n return returned;\n}\n\nfunction resolveConfigObject(program: Program): ObjectExpression {\n const expression = resolveConfigExpression(program);\n\n if (expression.type === \"ObjectExpression\") {\n return expression;\n }\n\n if (expression.type === \"CallExpression\") {\n const callee = unwrapExpression(expression.callee);\n const argument = expression.arguments[0];\n\n if (\n callee.type === \"Identifier\" &&\n callee.name === \"defineConfig\" &&\n expression.arguments.length === 1 &&\n argument !== undefined &&\n argument.type !== \"SpreadElement\"\n ) {\n const value = unwrapExpression(argument);\n\n if (value.type === \"ObjectExpression\") {\n return value;\n }\n\n const callbackObject = resolveFactoryConfigObject(value);\n\n if (callbackObject !== undefined) {\n return callbackObject;\n }\n }\n }\n\n throw new Error(\n \"SpotPatch init supports a configuration object or an object-returning callback passed to defineConfig.\",\n );\n}\n\nfunction propertyName(property: ObjectProperty): string | undefined {\n if (property.computed) {\n return undefined;\n }\n\n if (property.key.type === \"Identifier\") {\n return property.key.name;\n }\n\n if (property.key.type === \"Literal\" && typeof property.key.value === \"string\") {\n return property.key.value;\n }\n\n return undefined;\n}\n\nfunction findProperty(\n object: ObjectExpression,\n name: string,\n): ObjectProperty | undefined {\n const matches = object.properties.filter(\n (property): property is ObjectProperty =>\n property.type === \"Property\" && propertyName(property) === name,\n );\n\n if (matches.length > 1) {\n throw new Error(`SpotPatch init found duplicate ${name} properties.`);\n }\n\n return matches[0];\n}\n\nfunction lineIndentAt(source: string, offset: number): string {\n const lineStart = source.lastIndexOf(\"\\n\", Math.max(0, offset - 1)) + 1;\n return /^[\\t ]*/u.exec(source.slice(lineStart, offset))?.[0] ?? \"\";\n}\n\nfunction childIndent(source: string, object: ObjectExpression): string {\n const first = object.properties[0];\n\n if (first !== undefined) {\n return lineIndentAt(source, first.start);\n }\n\n return `${lineIndentAt(source, object.start)} `;\n}\n\nfunction trustedFastCall(pluginName: string, enabled: boolean): string {\n return enabled ? `${pluginName}({ trustedFastMode: true })` : `${pluginName}()`;\n}\n\nfunction directPluginCalls(\n plugins: ArrayExpression,\n pluginName: string,\n): readonly CallExpression[] {\n return plugins.elements.filter((element): element is CallExpression => {\n if (element?.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = unwrapExpression(element.callee);\n return callee.type === \"Identifier\" && callee.name === pluginName;\n });\n}\n\nfunction enableTrustedFastMode(\n magicString: MagicString,\n source: string,\n call: CallExpression,\n): void {\n if (call.arguments.length === 0) {\n magicString.overwrite(\n call.start,\n call.end,\n `${source.slice(call.start, call.end - 1)}{ trustedFastMode: true })`,\n );\n return;\n }\n\n const argument = call.arguments[0];\n\n if (\n call.arguments.length !== 1 ||\n argument === undefined ||\n argument.type === \"SpreadElement\"\n ) {\n throw new Error(\"SpotPatch init cannot safely update the spotPatch options.\");\n }\n\n const value = unwrapExpression(argument);\n\n if (value.type !== \"ObjectExpression\") {\n throw new Error(\"SpotPatch init requires spotPatch options to be an object.\");\n }\n\n const property = findProperty(value, \"trustedFastMode\");\n\n if (property !== undefined) {\n const propertyValue = unwrapExpression(property.value);\n\n if (propertyValue.type !== \"Literal\" || typeof propertyValue.value !== \"boolean\") {\n throw new Error(\n \"SpotPatch init requires trustedFastMode to be a boolean literal.\",\n );\n }\n\n if (!propertyValue.value) {\n magicString.overwrite(propertyValue.start, propertyValue.end, \"true\");\n }\n\n return;\n }\n\n const indent = childIndent(source, value);\n\n if (value.properties.length === 0) {\n magicString.appendLeft(value.end - 1, \" trustedFastMode: true \");\n } else {\n magicString.appendLeft(\n value.properties[0]?.start ?? value.end - 1,\n `trustedFastMode: true,\\n${indent}`,\n );\n }\n}\n\nfunction addPluginCall(\n magicString: MagicString,\n source: string,\n config: ObjectExpression,\n pluginName: string,\n trustedFastModeAvailable: boolean,\n): void {\n const pluginsProperty = findProperty(config, \"plugins\");\n const call = trustedFastCall(pluginName, trustedFastModeAvailable);\n\n if (pluginsProperty === undefined) {\n const indent = childIndent(source, config);\n\n if (config.properties.length === 0) {\n magicString.appendLeft(config.end - 1, `\\n${indent}plugins: [${call}],\\n`);\n } else {\n magicString.appendLeft(\n config.properties[0]?.start ?? config.end - 1,\n `plugins: [${call}],\\n${indent}`,\n );\n }\n\n return;\n }\n\n const value = unwrapExpression(pluginsProperty.value);\n\n if (value.type !== \"ArrayExpression\") {\n throw new Error(\"SpotPatch init requires vite.config plugins to be an array.\");\n }\n\n const existing = directPluginCalls(value, pluginName);\n\n if (existing.length > 1) {\n throw new Error(\"SpotPatch init found duplicate spotPatch plugins.\");\n }\n\n if (existing[0] !== undefined) {\n if (trustedFastModeAvailable) {\n enableTrustedFastMode(magicString, source, existing[0]);\n }\n\n return;\n }\n\n const first = value.elements.find((element) => element !== null);\n\n if (first === undefined) {\n magicString.appendLeft(value.end - 1, call);\n } else {\n magicString.appendLeft(\n first.start,\n `${call},\\n${lineIndentAt(source, first.start)}`,\n );\n }\n}\n\nfunction transformViteConfig(\n absolutePath: string,\n source: string,\n trustedFastModeAvailable: boolean,\n): string {\n const { program } = parseModule(absolutePath, source);\n const config = resolveConfigObject(program);\n const existingPluginName = importedPluginName(program);\n const pluginName = existingPluginName ?? choosePluginName(program);\n const magicString = new MagicString(source);\n\n if (existingPluginName === undefined) {\n const specifier =\n pluginName === \"spotPatch\" ? \"spotPatch\" : `spotPatch as ${pluginName}`;\n insertStaticImport(\n magicString,\n program,\n `import { ${specifier} } from ${JSON.stringify(ADAPTER_PACKAGE_NAME)};`,\n );\n }\n\n addPluginCall(magicString, source, config, pluginName, trustedFastModeAvailable);\n return magicString.toString();\n}\n\nasync function findViteConfig(appRoot: string): Promise<string> {\n const candidates = (\n await Promise.all(\n CONFIG_FILE_NAMES.map(async (name) => {\n const absolutePath = path.join(appRoot, name);\n return (await integrationPathExists(absolutePath)) ? absolutePath : undefined;\n }),\n )\n ).filter((value): value is string => value !== undefined);\n\n if (candidates.length !== 1 || candidates[0] === undefined) {\n throw new Error(\"SpotPatch init requires exactly one supported vite.config file.\");\n }\n\n return candidates[0];\n}\n\nexport async function planViteIntegration(\n directory = process.cwd(),\n): Promise<ViteIntegrationPlan> {\n const appRoot = path.resolve(directory);\n const configPath = await findViteConfig(appRoot);\n const [configSource, discoveredCheck] = await Promise.all([\n readIntegrationFile(configPath),\n discoverProjectValidationCheck({\n appRoot,\n timeoutMs: DEFAULT_AGENT_LIMITS.checkTimeoutMs,\n }),\n ]);\n const trustedFastModeAvailable = discoveredCheck !== undefined;\n const nextContent = transformViteConfig(\n configPath,\n configSource,\n trustedFastModeAvailable,\n );\n const change = createIntegrationFileChange(\n appRoot,\n configPath,\n nextContent,\n configSource,\n );\n\n return Object.freeze({\n appRoot,\n changes: Object.freeze(change === undefined ? [] : [change]),\n trustedFastModeAvailable,\n });\n}\n\nexport async function applyViteIntegrationPlan(\n plan: ViteIntegrationPlan,\n): Promise<void> {\n await applyIntegrationPlan(plan);\n}\n\nexport async function checkViteIntegration(\n directory = process.cwd(),\n): Promise<ViteIntegrationCheck> {\n try {\n const plan = await planViteIntegration(directory);\n const issues = plan.changes.map(\n (change) => `INTEGRATION_REQUIRED:${change.relativePath}`,\n );\n return Object.freeze({\n appRoot: plan.appRoot,\n issues: Object.freeze(issues),\n ok: issues.length === 0,\n trustedFastModeAvailable: plan.trustedFastModeAvailable,\n });\n } catch (error: unknown) {\n return Object.freeze({\n appRoot: path.resolve(directory),\n issues: Object.freeze([\n error instanceof Error ? error.message : \"SpotPatch integration check failed.\",\n ]),\n ok: false,\n trustedFastModeAvailable: false,\n });\n }\n}\n","import { spawn } from \"node:child_process\";\nimport { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type SupportedPackageManager = \"npm\" | \"pnpm\";\n\ninterface ApplicationManifest {\n readonly packageManager?: unknown;\n}\n\nexport interface InstallCommand {\n readonly arguments: readonly string[];\n readonly executable: string;\n}\n\nasync function pathExists(absolutePath: string): Promise<boolean> {\n try {\n await access(absolutePath);\n return true;\n } catch (error: unknown) {\n if (\n error instanceof Error &&\n \"code\" in error &&\n (error.code === \"ENOENT\" || error.code === \"ENOTDIR\")\n ) {\n return false;\n }\n\n throw error;\n }\n}\n\nexport async function detectPackageManager(\n appRoot = process.cwd(),\n userAgent = process.env.npm_config_user_agent ?? \"\",\n): Promise<SupportedPackageManager> {\n const manifestPath = path.join(appRoot, \"package.json\");\n const manifest = JSON.parse(\n await readFile(manifestPath, \"utf8\"),\n ) as ApplicationManifest;\n const declared = manifest.packageManager;\n\n if (typeof declared === \"string\") {\n const name = declared.split(\"@\", 1)[0];\n\n if (name === \"pnpm\" || name === \"npm\") {\n return name;\n }\n\n throw new Error(\n `SpotPatch setup supports npm and pnpm projects; package.json declares ${declared}.`,\n );\n }\n\n const [hasPnpmLock, hasNpmLock] = await Promise.all([\n pathExists(path.join(appRoot, \"pnpm-lock.yaml\")),\n pathExists(path.join(appRoot, \"package-lock.json\")),\n ]);\n\n if (hasPnpmLock !== hasNpmLock) {\n return hasPnpmLock ? \"pnpm\" : \"npm\";\n }\n\n if (hasPnpmLock && hasNpmLock) {\n throw new Error(\n \"SpotPatch setup found both pnpm-lock.yaml and package-lock.json; remove the stale lockfile or run installation and init separately.\",\n );\n }\n\n if (userAgent.startsWith(\"pnpm/\")) {\n return \"pnpm\";\n }\n\n if (userAgent.startsWith(\"npm/\")) {\n return \"npm\";\n }\n\n throw new Error(\n \"SpotPatch setup could not determine npm or pnpm; run installation and init separately.\",\n );\n}\n\nexport function createInstallCommand(\n packageManager: SupportedPackageManager,\n platform = process.platform,\n): InstallCommand {\n return Object.freeze({\n executable: platform === \"win32\" ? `${packageManager}.cmd` : packageManager,\n arguments: Object.freeze(\n packageManager === \"pnpm\"\n ? [\"add\", \"-D\", \"@spotpatch/vite@latest\"]\n : [\"install\", \"--save-dev\", \"@spotpatch/vite@latest\"],\n ),\n });\n}\n\nexport async function installLatestAdapter(\n packageManager: SupportedPackageManager,\n appRoot = process.cwd(),\n): Promise<void> {\n const command = createInstallCommand(packageManager);\n\n process.stdout.write(\n `[spotpatch:vite] installing @spotpatch/vite@latest with ${packageManager}...\\n`,\n );\n\n await new Promise<void>((resolve, reject) => {\n const child = spawn(command.executable, command.arguments, {\n cwd: appRoot,\n env: process.env,\n shell: false,\n stdio: \"inherit\",\n });\n\n child.once(\"error\", reject);\n child.once(\"exit\", (code, signal) => {\n if (code === 0) {\n resolve();\n return;\n }\n\n reject(\n new Error(\n `SpotPatch setup installation failed (${signal ?? `exit ${String(code)}`}).`,\n ),\n );\n });\n });\n}\n"],"mappings":"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","names":["readFile","path","returned","path","path","readFile"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/initializer.ts","../src/setup.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\n\nimport { runSpotPatchBridgeCli } from \"@spotpatch/bridge\";\n\nimport {\n applyViteIntegrationPlan,\n checkViteIntegration,\n planViteIntegration,\n} from \"./initializer.js\";\nimport { detectPackageManager, installCurrentAdapter } from \"./setup.js\";\n\nconst VERSION_PATTERN = /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-[0-9A-Za-z.-]+)?$/u;\n\nfunction writeUsage(): void {\n process.stderr.write(\n \"Usage: spotpatch-vite <setup|init|check|connect|bridge>\\n\" +\n \" setup Install this CLI's exact @spotpatch/vite version, then initialize it.\\n\" +\n \" init Preview and apply safe Vite integration changes.\\n\" +\n \" check Verify the Vite integration without writing files.\\n\" +\n \" connect codex Start the zero-setup Codex Agent connector.\\n\" +\n \" bridge Run the local external-Agent MCP, CLI, or setup commands.\\n\",\n );\n}\n\nasync function inspectViteProject(appRoot = process.cwd()): Promise<string> {\n const resolveFromApplication = createRequire(path.join(appRoot, \"package.json\"));\n let adapterEntry: string;\n let viteManifestPath: string;\n\n try {\n adapterEntry = resolveFromApplication.resolve(\"@spotpatch/vite\");\n viteManifestPath = resolveFromApplication.resolve(\"vite/package.json\");\n } catch (error: unknown) {\n throw new Error(\n \"SpotPatch could not resolve the local @spotpatch/vite and Vite packages.\",\n { cause: error },\n );\n }\n\n if (adapterEntry.length === 0) {\n throw new Error(\"SpotPatch could not resolve the Vite adapter export.\");\n }\n\n const manifest = JSON.parse(await readFile(viteManifestPath, \"utf8\")) as unknown;\n const version =\n typeof manifest === \"object\" &&\n manifest !== null &&\n \"version\" in manifest &&\n typeof manifest.version === \"string\"\n ? manifest.version\n : undefined;\n const match = version === undefined ? null : VERSION_PATTERN.exec(version);\n const major = Number(match?.[1]);\n\n if (\n version === undefined ||\n match === null ||\n !Number.isSafeInteger(major) ||\n major < 5 ||\n major >= 8\n ) {\n throw new Error(\n `SpotPatch Vite requires Vite >=5.0.0 <8.0.0; found ${version ?? \"unknown\"}.`,\n );\n }\n\n return version;\n}\n\nfunction writeTrustedModeStatus(available: boolean): void {\n process.stdout.write(\n available\n ? \"[spotpatch:vite] trusted fast mode is available in the page selector.\\n\"\n : \"[spotpatch:vite] review mode is ready; trusted fast mode needs a local TypeScript project check.\\n\",\n );\n}\n\nasync function runInit(arguments_: readonly string[]): Promise<number> {\n if (arguments_.length !== 0) {\n throw new Error(\"SpotPatch init does not accept positional arguments.\");\n }\n\n await inspectViteProject();\n const plan = await planViteIntegration();\n\n if (plan.changes.length === 0) {\n process.stdout.write(\"[spotpatch:vite] integration is already up to date.\\n\");\n writeTrustedModeStatus(plan.trustedFastModeAvailable);\n return 0;\n }\n\n process.stdout.write(\"[spotpatch:vite] integration preview (resulting files):\\n\");\n\n for (const change of plan.changes) {\n process.stdout.write(`\\n--- ${change.relativePath}\\n${change.nextContent}`);\n\n if (!change.nextContent.endsWith(\"\\n\")) {\n process.stdout.write(\"\\n\");\n }\n }\n\n await applyViteIntegrationPlan(plan);\n process.stdout.write(\n `[spotpatch:vite] updated ${String(plan.changes.length)} integration file(s).\\n`,\n );\n writeTrustedModeStatus(plan.trustedFastModeAvailable);\n\n return 0;\n}\n\nasync function runSetup(arguments_: readonly string[]): Promise<number> {\n if (arguments_.length !== 0) {\n throw new Error(\"SpotPatch setup does not accept positional arguments.\");\n }\n\n const packageManager = await detectPackageManager();\n await installCurrentAdapter(packageManager);\n return runInit([]);\n}\n\nasync function runCheck(arguments_: readonly string[]): Promise<number> {\n if (arguments_.length !== 0) {\n throw new Error(\"SpotPatch check does not accept positional arguments.\");\n }\n\n const version = await inspectViteProject();\n const result = await checkViteIntegration();\n\n if (!result.ok) {\n for (const issue of result.issues) {\n process.stderr.write(`[spotpatch:vite] ${issue}\\n`);\n }\n\n return 1;\n }\n\n const mode = result.trustedFastModeAvailable\n ? \"trusted fast mode available\"\n : \"review mode\";\n process.stdout.write(\n `[spotpatch:vite] integration verified for Vite ${version} · ${mode}.\\n`,\n );\n return 0;\n}\n\nasync function main(arguments_: readonly string[]): Promise<number> {\n const [command, ...rest] = arguments_;\n\n if (command === \"setup\") {\n return runSetup(rest);\n }\n\n if (command === \"init\") {\n return runInit(rest);\n }\n\n if (command === \"check\") {\n return runCheck(rest);\n }\n\n if (command === \"bridge\") {\n return runSpotPatchBridgeCli(rest, { adapter: \"vite\" });\n }\n\n if (command === \"connect\") {\n return runSpotPatchBridgeCli(arguments_, { adapter: \"vite\" });\n }\n\n writeUsage();\n return 1;\n}\n\ntry {\n process.exitCode = await main(process.argv.slice(2));\n} catch (error: unknown) {\n process.stderr.write(\n `[spotpatch:vite] ${\n error instanceof Error ? error.message : \"The command failed.\"\n }\\n`,\n );\n process.exitCode = 1;\n}\n","import path from \"node:path\";\n\nimport {\n applyIntegrationPlan,\n createIntegrationFileChange,\n discoverProjectValidationCheck,\n integrationPathExists,\n readIntegrationFile,\n type IntegrationFileChange,\n} from \"@spotpatch/dev-server\";\nimport { DEFAULT_AGENT_LIMITS } from \"@spotpatch/shared\";\nimport { MagicString } from \"magic-string\";\nimport {\n parseSync,\n Visitor,\n type ArrayExpression,\n type CallExpression,\n type ExportDefaultDeclaration,\n type Expression,\n type ImportDeclaration,\n type ObjectExpression,\n type ObjectProperty,\n type Program,\n type ReturnStatement,\n} from \"oxc-parser\";\n\nconst ADAPTER_PACKAGE_NAME = \"@spotpatch/vite\";\nconst CONFIG_FILE_NAMES = Object.freeze([\n \"vite.config.ts\",\n \"vite.config.mts\",\n \"vite.config.js\",\n \"vite.config.mjs\",\n] as const);\n\nexport interface ViteIntegrationPlan {\n readonly appRoot: string;\n readonly changes: readonly IntegrationFileChange[];\n readonly trustedFastModeAvailable: boolean;\n}\n\nexport interface ViteIntegrationCheck {\n readonly appRoot: string;\n readonly issues: readonly string[];\n readonly ok: boolean;\n readonly trustedFastModeAvailable: boolean;\n}\n\ninterface ParsedModule {\n readonly program: Program;\n readonly source: string;\n}\n\nfunction isParserErrorSeverity(value: unknown): boolean {\n return value === \"Error\";\n}\n\nfunction parseModule(absolutePath: string, source: string): ParsedModule {\n const result = parseSync(absolutePath, source, {\n sourceType: \"module\",\n showSemanticErrors: true,\n });\n const error = result.errors.find((entry) => isParserErrorSeverity(entry.severity));\n\n if (error !== undefined) {\n throw new SyntaxError(\n `SpotPatch could not safely parse ${path.basename(absolutePath)} (${error.message}).`,\n );\n }\n\n return Object.freeze({ program: result.program, source });\n}\n\nfunction importsOf(program: Program): readonly ImportDeclaration[] {\n return program.body.filter(\n (statement): statement is ImportDeclaration =>\n statement.type === \"ImportDeclaration\",\n );\n}\n\nfunction importInsertionOffset(program: Program): number {\n const lastImport = importsOf(program).at(-1);\n\n if (lastImport !== undefined) {\n return lastImport.end;\n }\n\n const directives = program.body.filter(\n (statement) =>\n statement.type === \"ExpressionStatement\" &&\n typeof statement.directive === \"string\",\n );\n return directives.at(-1)?.end ?? program.hashbang?.end ?? 0;\n}\n\nfunction insertStaticImport(\n magicString: MagicString,\n program: Program,\n statement: string,\n): void {\n const offset = importInsertionOffset(program);\n\n if (offset === 0) {\n magicString.prepend(`${statement}\\n`);\n return;\n }\n\n magicString.appendRight(offset, `\\n${statement}`);\n}\n\nfunction importQuote(source: string, program: Program): '\"' | \"'\" {\n const firstImport = importsOf(program)[0];\n\n if (firstImport !== undefined) {\n const quote = source[firstImport.source.start];\n\n if (quote === '\"' || quote === \"'\") {\n return quote;\n }\n }\n\n return '\"';\n}\n\nfunction collectIdentifierNames(program: Program): ReadonlySet<string> {\n const names = new Set<string>();\n new Visitor({\n Identifier(node) {\n names.add(node.name);\n },\n }).visit(program);\n return names;\n}\n\nfunction choosePluginName(program: Program): string {\n const names = collectIdentifierNames(program);\n let suffix = 0;\n let candidate = \"spotPatch\";\n\n while (names.has(candidate)) {\n suffix += 1;\n candidate = `spotPatch${String(suffix)}`;\n }\n\n return candidate;\n}\n\nfunction importedPluginName(program: Program): string | undefined {\n const adapterImports = importsOf(program).filter(\n (statement) => statement.source.value === ADAPTER_PACKAGE_NAME,\n );\n\n if (adapterImports.length > 1) {\n throw new Error(\"SpotPatch init found duplicate @spotpatch/vite imports.\");\n }\n\n const adapterImport = adapterImports[0];\n\n if (adapterImport === undefined) {\n return undefined;\n }\n\n const plugin = adapterImport.specifiers.find(\n (specifier) =>\n specifier.type === \"ImportSpecifier\" &&\n specifier.imported.type === \"Identifier\" &&\n specifier.imported.name === \"spotPatch\" &&\n specifier.importKind !== \"type\",\n );\n\n if (plugin === undefined) {\n throw new Error(\n \"SpotPatch init cannot safely merge the existing @spotpatch/vite import.\",\n );\n }\n\n return plugin.local.name;\n}\n\nfunction unwrapExpression(expression: Expression): Expression {\n let current = expression;\n\n while (\n current.type === \"ParenthesizedExpression\" ||\n current.type === \"TSAsExpression\" ||\n current.type === \"TSSatisfiesExpression\" ||\n current.type === \"TSTypeAssertion\" ||\n current.type === \"TSNonNullExpression\"\n ) {\n current = current.expression;\n }\n\n return current;\n}\n\nfunction findDefaultExport(program: Program): ExportDefaultDeclaration {\n const exports = program.body.filter(\n (statement): statement is ExportDefaultDeclaration =>\n statement.type === \"ExportDefaultDeclaration\",\n );\n\n if (exports.length !== 1 || exports[0] === undefined) {\n throw new Error(\n \"SpotPatch init requires exactly one ESM default export in vite.config.\",\n );\n }\n\n return exports[0];\n}\n\nfunction findVariableInitializer(\n program: Program,\n name: string,\n): Expression | undefined {\n for (const statement of program.body) {\n if (statement.type !== \"VariableDeclaration\") {\n continue;\n }\n\n for (const declaration of statement.declarations) {\n if (\n declaration.id.type === \"Identifier\" &&\n declaration.id.name === name &&\n declaration.init !== null\n ) {\n return declaration.init;\n }\n }\n }\n\n return undefined;\n}\n\nfunction resolveConfigExpression(program: Program): Expression {\n const exported = findDefaultExport(program).declaration;\n\n if (\n exported.type === \"FunctionDeclaration\" ||\n exported.type === \"ClassDeclaration\" ||\n exported.type === \"TSInterfaceDeclaration\"\n ) {\n throw new Error(\n \"SpotPatch init requires vite.config to export a configuration expression.\",\n );\n }\n\n const expression = unwrapExpression(exported);\n const resolved =\n expression.type === \"Identifier\"\n ? findVariableInitializer(program, expression.name)\n : expression;\n\n if (resolved === undefined) {\n throw new Error(\"SpotPatch init could not resolve the vite.config export.\");\n }\n\n return unwrapExpression(resolved);\n}\n\nfunction resolveFactoryConfigObject(\n expression: Expression,\n): ObjectExpression | undefined {\n const factory = unwrapExpression(expression);\n\n if (\n factory.type !== \"ArrowFunctionExpression\" &&\n factory.type !== \"FunctionExpression\"\n ) {\n return undefined;\n }\n\n if (factory.body === null) {\n throw new Error(\n \"SpotPatch init cannot use a defineConfig callback without a body.\",\n );\n }\n\n if (factory.body.type !== \"BlockStatement\") {\n const returned = unwrapExpression(factory.body);\n return returned.type === \"ObjectExpression\" ? returned : undefined;\n }\n\n const returns: ReturnStatement[] = [];\n new Visitor({\n ReturnStatement(statement) {\n returns.push(statement);\n },\n }).visit({\n type: \"Program\",\n body: factory.body.body,\n sourceType: \"module\",\n hashbang: null,\n start: factory.body.start,\n end: factory.body.end,\n });\n\n const onlyReturn = returns.length === 1 ? returns[0] : undefined;\n\n if (onlyReturn?.argument == null) {\n throw new Error(\n \"SpotPatch init requires a defineConfig callback with exactly one top-level object return.\",\n );\n }\n\n const returned = unwrapExpression(onlyReturn.argument);\n\n if (returned.type !== \"ObjectExpression\") {\n throw new Error(\n \"SpotPatch init requires the defineConfig callback to return a configuration object directly.\",\n );\n }\n\n return returned;\n}\n\nfunction resolveConfigObject(program: Program): ObjectExpression {\n const expression = resolveConfigExpression(program);\n\n if (expression.type === \"ObjectExpression\") {\n return expression;\n }\n\n if (expression.type === \"CallExpression\") {\n const callee = unwrapExpression(expression.callee);\n const argument = expression.arguments[0];\n\n if (\n callee.type === \"Identifier\" &&\n callee.name === \"defineConfig\" &&\n expression.arguments.length === 1 &&\n argument !== undefined &&\n argument.type !== \"SpreadElement\"\n ) {\n const value = unwrapExpression(argument);\n\n if (value.type === \"ObjectExpression\") {\n return value;\n }\n\n const callbackObject = resolveFactoryConfigObject(value);\n\n if (callbackObject !== undefined) {\n return callbackObject;\n }\n }\n }\n\n throw new Error(\n \"SpotPatch init supports a configuration object or an object-returning callback passed to defineConfig.\",\n );\n}\n\nfunction propertyName(property: ObjectProperty): string | undefined {\n if (property.computed) {\n return undefined;\n }\n\n if (property.key.type === \"Identifier\") {\n return property.key.name;\n }\n\n if (property.key.type === \"Literal\" && typeof property.key.value === \"string\") {\n return property.key.value;\n }\n\n return undefined;\n}\n\nfunction findProperty(\n object: ObjectExpression,\n name: string,\n): ObjectProperty | undefined {\n const matches = object.properties.filter(\n (property): property is ObjectProperty =>\n property.type === \"Property\" && propertyName(property) === name,\n );\n\n if (matches.length > 1) {\n throw new Error(`SpotPatch init found duplicate ${name} properties.`);\n }\n\n return matches[0];\n}\n\nfunction lineIndentAt(source: string, offset: number): string {\n const lineStart = source.lastIndexOf(\"\\n\", Math.max(0, offset - 1)) + 1;\n return /^[\\t ]*/u.exec(source.slice(lineStart, offset))?.[0] ?? \"\";\n}\n\nfunction childIndent(source: string, object: ObjectExpression): string {\n const first = object.properties[0];\n\n if (first !== undefined) {\n return lineIndentAt(source, first.start);\n }\n\n return `${lineIndentAt(source, object.start)} `;\n}\n\nfunction initializedPluginCall(pluginName: string, trustedFastMode: boolean): string {\n const options = [\n \"dataFlow: {}\",\n ...(trustedFastMode ? [\"trustedFastMode: true\"] : []),\n ];\n return `${pluginName}({ ${options.join(\", \")} })`;\n}\n\nfunction directPluginCalls(\n plugins: ArrayExpression,\n pluginName: string,\n): readonly CallExpression[] {\n return plugins.elements.filter((element): element is CallExpression => {\n if (element?.type !== \"CallExpression\") {\n return false;\n }\n\n const callee = unwrapExpression(element.callee);\n return callee.type === \"Identifier\" && callee.name === pluginName;\n });\n}\n\nfunction enableInitializedOptions(\n magicString: MagicString,\n source: string,\n call: CallExpression,\n trustedFastMode: boolean,\n): void {\n if (call.arguments.length === 0) {\n magicString.overwrite(\n call.start,\n call.end,\n initializedPluginCall(source.slice(call.start, call.callee.end), trustedFastMode),\n );\n return;\n }\n\n const argument = call.arguments[0];\n\n if (\n call.arguments.length !== 1 ||\n argument === undefined ||\n argument.type === \"SpreadElement\"\n ) {\n throw new Error(\"SpotPatch init cannot safely update the spotPatch options.\");\n }\n\n const value = unwrapExpression(argument);\n\n if (value.type !== \"ObjectExpression\") {\n throw new Error(\"SpotPatch init requires spotPatch options to be an object.\");\n }\n\n if (value.properties.some((property) => property.type === \"SpreadElement\")) {\n throw new Error(\n \"SpotPatch init cannot prove dataFlow through spread spotPatch options.\",\n );\n }\n\n const dataFlowProperty = findProperty(value, \"dataFlow\");\n const trustedFastModeProperty = findProperty(value, \"trustedFastMode\");\n const missingProperties: string[] = [];\n\n if (dataFlowProperty === undefined) {\n missingProperties.push(\"dataFlow: {}\");\n } else {\n const dataFlowValue = unwrapExpression(dataFlowProperty.value);\n\n if (dataFlowValue.type === \"Literal\" && dataFlowValue.value === false) {\n magicString.overwrite(dataFlowValue.start, dataFlowValue.end, \"{}\");\n } else if (dataFlowValue.type !== \"ObjectExpression\") {\n throw new Error(\n \"SpotPatch init requires dataFlow to be false or an options object.\",\n );\n }\n }\n\n if (trustedFastMode && trustedFastModeProperty === undefined) {\n missingProperties.push(\"trustedFastMode: true\");\n } else if (trustedFastModeProperty !== undefined) {\n const propertyValue = unwrapExpression(trustedFastModeProperty.value);\n\n if (propertyValue.type !== \"Literal\" || typeof propertyValue.value !== \"boolean\") {\n throw new Error(\n \"SpotPatch init requires trustedFastMode to be a boolean literal.\",\n );\n }\n\n if (trustedFastMode && !propertyValue.value) {\n magicString.overwrite(propertyValue.start, propertyValue.end, \"true\");\n }\n }\n\n if (missingProperties.length === 0) return;\n\n const indent = childIndent(source, value);\n\n if (value.properties.length === 0) {\n magicString.appendLeft(value.end - 1, ` ${missingProperties.join(\", \")} `);\n } else {\n magicString.appendLeft(\n value.properties[0]?.start ?? value.end - 1,\n `${missingProperties.join(`,\\n${indent}`)},\\n${indent}`,\n );\n }\n}\n\nfunction addPluginCall(\n magicString: MagicString,\n source: string,\n config: ObjectExpression,\n pluginName: string,\n trustedFastModeAvailable: boolean,\n): void {\n const pluginsProperty = findProperty(config, \"plugins\");\n const call = initializedPluginCall(pluginName, trustedFastModeAvailable);\n\n if (pluginsProperty === undefined) {\n const indent = childIndent(source, config);\n\n if (config.properties.length === 0) {\n magicString.appendLeft(config.end - 1, `\\n${indent}plugins: [${call}],\\n`);\n } else {\n magicString.appendLeft(\n config.properties[0]?.start ?? config.end - 1,\n `plugins: [${call}],\\n${indent}`,\n );\n }\n\n return;\n }\n\n const value = unwrapExpression(pluginsProperty.value);\n\n if (value.type !== \"ArrayExpression\") {\n throw new Error(\"SpotPatch init requires vite.config plugins to be an array.\");\n }\n\n const existing = directPluginCalls(value, pluginName);\n\n if (existing.length > 1) {\n throw new Error(\"SpotPatch init found duplicate spotPatch plugins.\");\n }\n\n if (existing[0] !== undefined) {\n enableInitializedOptions(\n magicString,\n source,\n existing[0],\n trustedFastModeAvailable,\n );\n\n return;\n }\n\n const first = value.elements.find((element) => element !== null);\n\n if (first === undefined) {\n magicString.appendLeft(value.end - 1, call);\n } else if (!source.slice(value.start, first.start).includes(\"\\n\")) {\n magicString.appendLeft(first.start, `${call}, `);\n } else {\n magicString.appendLeft(\n first.start,\n `${call},\\n${lineIndentAt(source, first.start)}`,\n );\n }\n}\n\nfunction transformViteConfig(\n absolutePath: string,\n source: string,\n trustedFastModeAvailable: boolean,\n): string {\n const { program } = parseModule(absolutePath, source);\n const config = resolveConfigObject(program);\n const existingPluginName = importedPluginName(program);\n const pluginName = existingPluginName ?? choosePluginName(program);\n const magicString = new MagicString(source);\n\n if (existingPluginName === undefined) {\n const specifier =\n pluginName === \"spotPatch\" ? \"spotPatch\" : `spotPatch as ${pluginName}`;\n const quote = importQuote(source, program);\n insertStaticImport(\n magicString,\n program,\n `import { ${specifier} } from ${quote}${ADAPTER_PACKAGE_NAME}${quote};`,\n );\n }\n\n addPluginCall(magicString, source, config, pluginName, trustedFastModeAvailable);\n return magicString.toString();\n}\n\nasync function findViteConfig(appRoot: string): Promise<string> {\n const candidates = (\n await Promise.all(\n CONFIG_FILE_NAMES.map(async (name) => {\n const absolutePath = path.join(appRoot, name);\n return (await integrationPathExists(absolutePath)) ? absolutePath : undefined;\n }),\n )\n ).filter((value): value is string => value !== undefined);\n\n if (candidates.length !== 1 || candidates[0] === undefined) {\n throw new Error(\"SpotPatch init requires exactly one supported vite.config file.\");\n }\n\n return candidates[0];\n}\n\nexport async function planViteIntegration(\n directory = process.cwd(),\n): Promise<ViteIntegrationPlan> {\n const appRoot = path.resolve(directory);\n const configPath = await findViteConfig(appRoot);\n const [configSource, discoveredCheck] = await Promise.all([\n readIntegrationFile(configPath),\n discoverProjectValidationCheck({\n appRoot,\n timeoutMs: DEFAULT_AGENT_LIMITS.checkTimeoutMs,\n }),\n ]);\n const trustedFastModeAvailable = discoveredCheck !== undefined;\n const nextContent = transformViteConfig(\n configPath,\n configSource,\n trustedFastModeAvailable,\n );\n const change = createIntegrationFileChange(\n appRoot,\n configPath,\n nextContent,\n configSource,\n );\n\n return Object.freeze({\n appRoot,\n changes: Object.freeze(change === undefined ? [] : [change]),\n trustedFastModeAvailable,\n });\n}\n\nexport async function applyViteIntegrationPlan(\n plan: ViteIntegrationPlan,\n): Promise<void> {\n await applyIntegrationPlan(plan);\n}\n\nexport async function checkViteIntegration(\n directory = process.cwd(),\n): Promise<ViteIntegrationCheck> {\n try {\n const plan = await planViteIntegration(directory);\n const issues = plan.changes.map(\n (change) => `INTEGRATION_REQUIRED:${change.relativePath}`,\n );\n return Object.freeze({\n appRoot: plan.appRoot,\n issues: Object.freeze(issues),\n ok: issues.length === 0,\n trustedFastModeAvailable: plan.trustedFastModeAvailable,\n });\n } catch (error: unknown) {\n return Object.freeze({\n appRoot: path.resolve(directory),\n issues: Object.freeze([\n error instanceof Error ? error.message : \"SpotPatch integration check failed.\",\n ]),\n ok: false,\n trustedFastModeAvailable: false,\n });\n }\n}\n","import { spawn } from \"node:child_process\";\nimport { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type SupportedPackageManager = \"npm\" | \"pnpm\";\n\ninterface ApplicationManifest {\n readonly packageManager?: unknown;\n}\n\nexport interface InstallCommand {\n readonly arguments: readonly string[];\n readonly executable: string;\n}\n\nconst VERSION_PATTERN = /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/u;\n\ninterface AdapterManifest {\n readonly version?: unknown;\n}\n\nasync function pathExists(absolutePath: string): Promise<boolean> {\n try {\n await access(absolutePath);\n return true;\n } catch (error: unknown) {\n if (\n error instanceof Error &&\n \"code\" in error &&\n (error.code === \"ENOENT\" || error.code === \"ENOTDIR\")\n ) {\n return false;\n }\n\n throw error;\n }\n}\n\nexport async function detectPackageManager(\n appRoot = process.cwd(),\n userAgent = process.env.npm_config_user_agent ?? \"\",\n): Promise<SupportedPackageManager> {\n const manifestPath = path.join(appRoot, \"package.json\");\n const manifest = JSON.parse(\n await readFile(manifestPath, \"utf8\"),\n ) as ApplicationManifest;\n const declared = manifest.packageManager;\n\n if (typeof declared === \"string\") {\n const name = declared.split(\"@\", 1)[0];\n\n if (name === \"pnpm\" || name === \"npm\") {\n return name;\n }\n\n throw new Error(\n `SpotPatch setup supports npm and pnpm projects; package.json declares ${declared}.`,\n );\n }\n\n const [hasPnpmLock, hasNpmLock] = await Promise.all([\n pathExists(path.join(appRoot, \"pnpm-lock.yaml\")),\n pathExists(path.join(appRoot, \"package-lock.json\")),\n ]);\n\n if (hasPnpmLock !== hasNpmLock) {\n return hasPnpmLock ? \"pnpm\" : \"npm\";\n }\n\n if (hasPnpmLock && hasNpmLock) {\n throw new Error(\n \"SpotPatch setup found both pnpm-lock.yaml and package-lock.json; remove the stale lockfile or run installation and init separately.\",\n );\n }\n\n if (userAgent.startsWith(\"pnpm/\")) {\n return \"pnpm\";\n }\n\n if (userAgent.startsWith(\"npm/\")) {\n return \"npm\";\n }\n\n throw new Error(\n \"SpotPatch setup could not determine npm or pnpm; run installation and init separately.\",\n );\n}\n\nexport function createInstallCommand(\n packageManager: SupportedPackageManager,\n version: string,\n platform = process.platform,\n): InstallCommand {\n if (!VERSION_PATTERN.test(version)) {\n throw new Error(\"SpotPatch setup could not determine its package version.\");\n }\n\n const packageSpecifier = `@spotpatch/vite@${version}`;\n\n return Object.freeze({\n executable: platform === \"win32\" ? `${packageManager}.cmd` : packageManager,\n arguments: Object.freeze(\n packageManager === \"pnpm\"\n ? [\"add\", \"-D\", packageSpecifier]\n : [\"install\", \"--save-dev\", packageSpecifier],\n ),\n });\n}\n\nexport async function readCurrentAdapterVersion(): Promise<string> {\n const manifest = JSON.parse(\n await readFile(new URL(\"../package.json\", import.meta.url), \"utf8\"),\n ) as AdapterManifest;\n const version = manifest.version;\n\n if (typeof version !== \"string\" || !VERSION_PATTERN.test(version)) {\n throw new Error(\"SpotPatch setup could not determine its package version.\");\n }\n\n return version;\n}\n\nexport async function installCurrentAdapter(\n packageManager: SupportedPackageManager,\n appRoot = process.cwd(),\n): Promise<void> {\n const version = await readCurrentAdapterVersion();\n const command = createInstallCommand(packageManager, version);\n\n process.stdout.write(\n `[spotpatch:vite] installing @spotpatch/vite@${version} with ${packageManager}...\\n`,\n );\n\n await new Promise<void>((resolve, reject) => {\n const child = spawn(command.executable, command.arguments, {\n cwd: appRoot,\n env: process.env,\n shell: false,\n stdio: \"inherit\",\n });\n\n child.once(\"error\", reject);\n child.once(\"exit\", (code, signal) => {\n if (code === 0) {\n resolve();\n return;\n }\n\n reject(\n new Error(\n `SpotPatch setup installation failed (${signal ?? `exit ${String(code)}`}).`,\n ),\n );\n });\n });\n}\n"],"mappings":"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","names":["readFile","path","returned","path","VERSION_PATTERN","path","readFile"]}
|
package/dist/index.cjs
CHANGED
|
@@ -51,7 +51,7 @@ var import_dev_server = require("@spotpatch/dev-server");
|
|
|
51
51
|
// package.json
|
|
52
52
|
var package_default = {
|
|
53
53
|
name: "@spotpatch/vite",
|
|
54
|
-
version: "1.
|
|
54
|
+
version: "1.10.0",
|
|
55
55
|
description: "Vite development plugin for SpotPatch.",
|
|
56
56
|
license: "MIT",
|
|
57
57
|
repository: {
|
|
@@ -97,11 +97,12 @@ var package_default = {
|
|
|
97
97
|
}
|
|
98
98
|
},
|
|
99
99
|
scripts: {
|
|
100
|
-
build: "tsup src/index.ts --format esm,cjs --dts --sourcemap --clean && tsup --config tsup.cli.config.ts && tsup --config tsup.runtime-client.config.ts && tsup --config tsup.runtime-react-adapter.config.ts",
|
|
100
|
+
build: "tsup src/index.ts --format esm,cjs --dts --sourcemap --clean && tsup --config tsup.cli.config.ts && tsup --config tsup.runtime-client.config.ts && tsup --config tsup.runtime-react-adapter.config.ts && tsup --config tsup.runtime-data-flow-prelude.config.ts && tsup --config tsup.runtime-data-flow-panel.config.ts && tsup --config tsup.runtime-external-handoff-panel.config.ts",
|
|
101
101
|
clean: `node --input-type=module -e "import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })"`,
|
|
102
102
|
typecheck: "tsc --noEmit -p tsconfig.json"
|
|
103
103
|
},
|
|
104
104
|
dependencies: {
|
|
105
|
+
"@spotpatch/bridge": "workspace:^",
|
|
105
106
|
"@spotpatch/compiler": "workspace:^",
|
|
106
107
|
"@spotpatch/dev-server": "workspace:^",
|
|
107
108
|
"@spotpatch/react-adapter": "workspace:^",
|
|
@@ -173,6 +174,18 @@ var SPOTPATCH_CLIENT_MODULE_ID = "virtual:spotpatch/client";
|
|
|
173
174
|
var RESOLVED_SPOTPATCH_CLIENT_MODULE_ID = `\0${SPOTPATCH_CLIENT_MODULE_ID}`;
|
|
174
175
|
var SPOTPATCH_REACT_ADAPTER_MODULE_ID = "virtual:spotpatch/react-adapter";
|
|
175
176
|
var RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID = `\0${SPOTPATCH_REACT_ADAPTER_MODULE_ID}`;
|
|
177
|
+
var SPOTPATCH_DATA_FLOW_MODULE_ID = "virtual:spotpatch/data-flow-runtime";
|
|
178
|
+
var RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID = `\0${SPOTPATCH_DATA_FLOW_MODULE_ID}`;
|
|
179
|
+
var SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = "virtual:spotpatch/data-flow-panel";
|
|
180
|
+
var RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = `\0${SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID}`;
|
|
181
|
+
var SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID = "virtual:spotpatch/external-handoff-panel";
|
|
182
|
+
var RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID = `\0${SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID}`;
|
|
183
|
+
function createDataFlowPreludeModule(input, bundle) {
|
|
184
|
+
return [
|
|
185
|
+
`const __SPOTPATCH_DATA_FLOW_CONFIG__ = ${JSON.stringify(input.context.getOptions().dataFlow)};`,
|
|
186
|
+
bundle
|
|
187
|
+
].join("\n");
|
|
188
|
+
}
|
|
176
189
|
function readRuntimeBundle(root, fileName) {
|
|
177
190
|
const resolveFromProject = (0, import_node_module.createRequire)(import_node_path.default.join(root, "package.json"));
|
|
178
191
|
const packageEntry = resolveFromProject.resolve("@spotpatch/vite");
|
|
@@ -196,8 +209,10 @@ function createClientModule(input, clientBundle, viteVersion) {
|
|
|
196
209
|
const runtimeConfig = {
|
|
197
210
|
ai: (0, import_dev_server.createRuntimeAiConfig)(options.ai),
|
|
198
211
|
budget: options.budget,
|
|
212
|
+
dataFlow: (0, import_dev_server.createRuntimeDataFlowConfig)(options.dataFlow),
|
|
199
213
|
debug: options.debug,
|
|
200
214
|
editor: options.editor,
|
|
215
|
+
externalAgent: options.externalAgent,
|
|
201
216
|
framework: "vite",
|
|
202
217
|
frameworkVersion: viteVersion,
|
|
203
218
|
locale: options.locale,
|
|
@@ -209,6 +224,8 @@ function createClientModule(input, clientBundle, viteVersion) {
|
|
|
209
224
|
spotPatchVersion: package_default.version
|
|
210
225
|
};
|
|
211
226
|
return [
|
|
227
|
+
...options.dataFlow.enabled ? [`import ${JSON.stringify(SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID)};`] : [],
|
|
228
|
+
...options.externalAgent.enabled ? [`import ${JSON.stringify(SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID)};`] : [],
|
|
212
229
|
`const __SPOTPATCH_BRAND_MARK_CONTENT__ = ${JSON.stringify(BRAND_MARK_CONTENT)};`,
|
|
213
230
|
`const __SPOTPATCH_RUNTIME_CONFIG__ = ${JSON.stringify(runtimeConfig)};`,
|
|
214
231
|
clientBundle
|
|
@@ -217,6 +234,9 @@ function createClientModule(input, clientBundle, viteVersion) {
|
|
|
217
234
|
function createRuntimeInjectionPlugin(input) {
|
|
218
235
|
let root = process.cwd();
|
|
219
236
|
let clientBundle = input.clientBundle;
|
|
237
|
+
let dataFlowPreludeBundle = input.dataFlowPreludeBundle;
|
|
238
|
+
let dataFlowPanelBundle = input.dataFlowPanelBundle;
|
|
239
|
+
let externalHandoffPanelBundle = input.externalHandoffPanelBundle;
|
|
220
240
|
let viteVersion = import_vite.version;
|
|
221
241
|
return {
|
|
222
242
|
name: "spotpatch:runtime-injection",
|
|
@@ -233,6 +253,15 @@ function createRuntimeInjectionPlugin(input) {
|
|
|
233
253
|
if (id === "@spotpatch/react-adapter" && importer === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID) {
|
|
234
254
|
return RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID;
|
|
235
255
|
}
|
|
256
|
+
if (id === SPOTPATCH_DATA_FLOW_MODULE_ID) {
|
|
257
|
+
return RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID;
|
|
258
|
+
}
|
|
259
|
+
if (id === SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {
|
|
260
|
+
return RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID;
|
|
261
|
+
}
|
|
262
|
+
if (id === SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {
|
|
263
|
+
return RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID;
|
|
264
|
+
}
|
|
236
265
|
return null;
|
|
237
266
|
},
|
|
238
267
|
load(id) {
|
|
@@ -243,18 +272,51 @@ function createRuntimeInjectionPlugin(input) {
|
|
|
243
272
|
if (id === RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID) {
|
|
244
273
|
return input.reactAdapterBundle ?? readRuntimeBundle(root, "runtime-react-adapter.js");
|
|
245
274
|
}
|
|
275
|
+
if (id === RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID) {
|
|
276
|
+
if (!input.context.getOptions().dataFlow.enabled) return null;
|
|
277
|
+
dataFlowPreludeBundle ??= readRuntimeBundle(
|
|
278
|
+
root,
|
|
279
|
+
"runtime-data-flow-prelude.js"
|
|
280
|
+
);
|
|
281
|
+
return createDataFlowPreludeModule(input, dataFlowPreludeBundle);
|
|
282
|
+
}
|
|
283
|
+
if (id === RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {
|
|
284
|
+
if (!input.context.getOptions().dataFlow.enabled) return null;
|
|
285
|
+
dataFlowPanelBundle ??= readRuntimeBundle(root, "runtime-data-flow-panel.js");
|
|
286
|
+
return dataFlowPanelBundle;
|
|
287
|
+
}
|
|
288
|
+
if (id === RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {
|
|
289
|
+
if (!input.context.getOptions().externalAgent.enabled) return null;
|
|
290
|
+
externalHandoffPanelBundle ??= readRuntimeBundle(
|
|
291
|
+
root,
|
|
292
|
+
"runtime-external-handoff-panel.js"
|
|
293
|
+
);
|
|
294
|
+
return externalHandoffPanelBundle;
|
|
295
|
+
}
|
|
246
296
|
return null;
|
|
247
297
|
},
|
|
248
298
|
transformIndexHtml() {
|
|
299
|
+
const client = {
|
|
300
|
+
tag: "script",
|
|
301
|
+
attrs: {
|
|
302
|
+
type: "module",
|
|
303
|
+
src: `/@id/${SPOTPATCH_CLIENT_MODULE_ID}`
|
|
304
|
+
},
|
|
305
|
+
injectTo: "head"
|
|
306
|
+
};
|
|
307
|
+
if (!input.context.getOptions().dataFlow.enabled) {
|
|
308
|
+
return [client];
|
|
309
|
+
}
|
|
249
310
|
return [
|
|
250
311
|
{
|
|
251
312
|
tag: "script",
|
|
252
313
|
attrs: {
|
|
253
314
|
type: "module",
|
|
254
|
-
src: `/@id/${
|
|
315
|
+
src: `/@id/${SPOTPATCH_DATA_FLOW_MODULE_ID}`
|
|
255
316
|
},
|
|
256
|
-
injectTo: "head"
|
|
257
|
-
}
|
|
317
|
+
injectTo: "head-prepend"
|
|
318
|
+
},
|
|
319
|
+
client
|
|
258
320
|
];
|
|
259
321
|
}
|
|
260
322
|
};
|
|
@@ -265,9 +327,12 @@ var import_node_path2 = __toESM(require("path"), 1);
|
|
|
265
327
|
var import_dev_server2 = require("@spotpatch/dev-server");
|
|
266
328
|
function createServerPlugin(input) {
|
|
267
329
|
let agentManager;
|
|
330
|
+
let externalHandoffService;
|
|
268
331
|
let config;
|
|
269
332
|
const closeResources = async () => {
|
|
270
333
|
input.registry.clear();
|
|
334
|
+
await externalHandoffService?.close();
|
|
335
|
+
externalHandoffService = void 0;
|
|
271
336
|
await agentManager?.close();
|
|
272
337
|
agentManager = void 0;
|
|
273
338
|
};
|
|
@@ -278,7 +343,7 @@ function createServerPlugin(input) {
|
|
|
278
343
|
configResolved(resolvedConfig) {
|
|
279
344
|
config = resolvedConfig;
|
|
280
345
|
},
|
|
281
|
-
configureServer(server) {
|
|
346
|
+
async configureServer(server) {
|
|
282
347
|
if (config === void 0) {
|
|
283
348
|
throw new Error("SpotPatch server initialized before Vite config resolution.");
|
|
284
349
|
}
|
|
@@ -289,9 +354,24 @@ function createServerPlugin(input) {
|
|
|
289
354
|
environment: input.context.getCredentialEnvironment(),
|
|
290
355
|
root
|
|
291
356
|
});
|
|
357
|
+
externalHandoffService = options.externalAgent.enabled ? (0, import_dev_server2.createExternalHandoffService)({
|
|
358
|
+
framework: "vite",
|
|
359
|
+
root,
|
|
360
|
+
sessionId: input.session.id
|
|
361
|
+
}) : void 0;
|
|
362
|
+
if (externalHandoffService !== void 0) {
|
|
363
|
+
try {
|
|
364
|
+
await externalHandoffService.start();
|
|
365
|
+
} catch {
|
|
366
|
+
config.logger.warn(
|
|
367
|
+
"[spotpatch:vite] External Agent handoff is unavailable; core tools remain active."
|
|
368
|
+
);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
292
371
|
server.middlewares.use(
|
|
293
372
|
(0, import_dev_server2.createSpotPatchMiddleware)({
|
|
294
373
|
...agentManager === void 0 ? {} : { agentManager },
|
|
374
|
+
...externalHandoffService === void 0 ? {} : { externalHandoffService },
|
|
295
375
|
options,
|
|
296
376
|
registry: input.registry,
|
|
297
377
|
root,
|
|
@@ -327,13 +407,18 @@ function stripViteQuery(id) {
|
|
|
327
407
|
}
|
|
328
408
|
function createTransformFilter(root, options) {
|
|
329
409
|
const sourceFilter = (0, import_compiler.createSourceFilter)(root, options);
|
|
410
|
+
const dataFlowFilter = (0, import_compiler.createDataFlowSourceFilter)(root, {
|
|
411
|
+
include: options.include,
|
|
412
|
+
exclude: options.exclude
|
|
413
|
+
});
|
|
330
414
|
return Object.freeze({
|
|
331
415
|
shouldTransform(id, code) {
|
|
332
416
|
if (id.startsWith("\0") || id.includes("virtual:spotpatch") || id.includes("/packages/vite/") || id.includes("\\packages\\vite\\")) {
|
|
333
417
|
return false;
|
|
334
418
|
}
|
|
335
419
|
const cleanId = stripViteQuery(id);
|
|
336
|
-
|
|
420
|
+
const absolutePath = import_node_path3.default.resolve(cleanId);
|
|
421
|
+
return sourceFilter.shouldTransform(absolutePath, code) || options.dataFlow.enabled && dataFlowFilter.shouldTransform(absolutePath, code);
|
|
337
422
|
}
|
|
338
423
|
});
|
|
339
424
|
}
|
|
@@ -352,6 +437,7 @@ function createTransformPlugin(input) {
|
|
|
352
437
|
let filter = createTransformFilter(root, input.context.getOptions());
|
|
353
438
|
let logger;
|
|
354
439
|
const warnedFiles = /* @__PURE__ */ new Set();
|
|
440
|
+
const warnedDataFlowDiagnostics = /* @__PURE__ */ new Set();
|
|
355
441
|
const cache = /* @__PURE__ */ new Map();
|
|
356
442
|
return {
|
|
357
443
|
name: "spotpatch:transform",
|
|
@@ -382,12 +468,36 @@ function createTransformPlugin(input) {
|
|
|
382
468
|
absolutePath: cleanId,
|
|
383
469
|
root,
|
|
384
470
|
fileId: input.registry.register(cleanId),
|
|
471
|
+
...options.dataFlow.enabled ? { dataFlow: { helperModule: SPOTPATCH_DATA_FLOW_MODULE_ID } } : {},
|
|
385
472
|
onWarning(warning) {
|
|
386
473
|
logger?.warn(
|
|
387
474
|
`[spotpatch:transform] Existing source marker at ${getDisplayPath(root, id)}:${String(warning.line)}:${String(warning.column)}; preserving application value.`
|
|
388
475
|
);
|
|
389
476
|
}
|
|
390
477
|
});
|
|
478
|
+
if (result?.dataFlow !== void 0) {
|
|
479
|
+
input.registry.registerDataFlowComponents(
|
|
480
|
+
cleanId,
|
|
481
|
+
result.dataFlow.sourceVersion,
|
|
482
|
+
result.dataFlow.anchors.flatMap(
|
|
483
|
+
(anchor) => anchor.kind === "component" ? [
|
|
484
|
+
{
|
|
485
|
+
componentSourceId: anchor.id,
|
|
486
|
+
line: anchor.line,
|
|
487
|
+
column: anchor.column
|
|
488
|
+
}
|
|
489
|
+
] : []
|
|
490
|
+
)
|
|
491
|
+
);
|
|
492
|
+
for (const diagnostic of result.dataFlow.diagnostics) {
|
|
493
|
+
const warningKey = `${cleanId}:${diagnostic.code}:${String(diagnostic.line)}:${String(diagnostic.column)}`;
|
|
494
|
+
if (warnedDataFlowDiagnostics.has(warningKey)) continue;
|
|
495
|
+
warnedDataFlowDiagnostics.add(warningKey);
|
|
496
|
+
logger?.warn(
|
|
497
|
+
`[spotpatch:data-flow] ${diagnostic.code} at ${getDisplayPath(root, id)}:${String(diagnostic.line)}:${String(diagnostic.column)}; keeping this adapter evidence partial.`
|
|
498
|
+
);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
391
501
|
const output = result === void 0 ? null : Object.freeze({
|
|
392
502
|
code: result.code,
|
|
393
503
|
map: result.map.toString()
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/plugin.ts","../src/runtime/runtime-injection-plugin.ts","../package.json","../../runtime/src/ui/brand-mark-content.ts","../src/server/server-plugin.ts","../src/transform/transform-plugin.ts","../src/transform/transform-filter.ts","../src/options.ts"],"sourcesContent":["export { spotPatch } from \"./plugin.js\";\nexport {\n DEFAULT_OPTIONS,\n resolveOptions,\n type ResolvedSpotPatchOptions,\n type SimpleAiOptions,\n type SpotPatchAiOptions,\n type SpotPatchOptions,\n type ViteSpotPatchOptions,\n} from \"./options.js\";\nexport {\n DEFAULT_AGENT_LIMITS,\n type AgentApplyMode,\n type AgentCheckDefinition,\n type AgentLimits,\n type AiExecutionOptions,\n type AiModelProfile,\n type AiOptions,\n type AiProviderAuthentication,\n type AiProviderProtocol,\n type ContextBudget,\n type OpenAICompatibleProviderOptions,\n type SpotPatchEditorPreference,\n} from \"@spotpatch/shared\";\n","import path from \"node:path\";\n\nimport {\n createSession,\n createSourceRegistry,\n resolveCredentialEnvironment,\n resolveEnvironmentAiConfiguration,\n resolveOptions,\n resolveProjectOptions,\n} from \"@spotpatch/dev-server\";\nimport { loadEnv, type ConfigEnv, type Plugin, type UserConfig } from \"vite\";\n\nimport type { ViteSpotPatchOptions } from \"./options.js\";\nimport type { SpotPatchPluginContext } from \"./plugin-context.js\";\nimport { createRuntimeInjectionPlugin } from \"./runtime/runtime-injection-plugin.js\";\nimport { createServerPlugin } from \"./server/server-plugin.js\";\nimport { createTransformPlugin } from \"./transform/transform-plugin.js\";\n\nexport function spotPatch(userOptions: ViteSpotPatchOptions = {}): Plugin[] {\n let options = resolveOptions(userOptions);\n let credentialEnvironment: Readonly<Record<string, string | undefined>> =\n Object.freeze({});\n\n if (!options.enabled) {\n return [];\n }\n\n const registry = createSourceRegistry();\n const session = createSession();\n const context = Object.freeze({\n getCredentialEnvironment: () => credentialEnvironment,\n getOptions: () => options,\n } satisfies SpotPatchPluginContext);\n const configure = async (\n config: UserConfig,\n environment: ConfigEnv,\n ): Promise<void> => {\n const root = path.resolve(process.cwd(), config.root ?? \".\");\n const loadedEnvironment =\n config.envDir === false\n ? process.env\n : loadEnv(environment.mode, path.resolve(root, config.envDir ?? \".\"), \"\");\n const environmentAi =\n userOptions.ai === undefined\n ? resolveEnvironmentAiConfiguration(loadedEnvironment).ai\n : false;\n\n options = await resolveProjectOptions({\n appRoot: root,\n environmentAi,\n options: userOptions,\n });\n\n credentialEnvironment = resolveCredentialEnvironment(options, loadedEnvironment);\n };\n\n return [\n createTransformPlugin({ configure, context, registry }),\n createRuntimeInjectionPlugin({ context, session }),\n createServerPlugin({ context, registry, session }),\n ];\n}\n","import { createRequire } from \"node:module\";\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nimport { createRuntimeAiConfig, type SpotPatchSession } from \"@spotpatch/dev-server\";\nimport packageMetadata from \"../../package.json\" with { type: \"json\" };\nimport { version as VITE_VERSION, type Plugin } from \"vite\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\nimport { BRAND_MARK_CONTENT } from \"./brand-mark-content.js\";\n\nexport const SPOTPATCH_CLIENT_MODULE_ID = \"virtual:spotpatch/client\";\nexport const RESOLVED_SPOTPATCH_CLIENT_MODULE_ID = `\\0${SPOTPATCH_CLIENT_MODULE_ID}`;\nexport const SPOTPATCH_REACT_ADAPTER_MODULE_ID = \"virtual:spotpatch/react-adapter\";\nexport const RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID = `\\0${SPOTPATCH_REACT_ADAPTER_MODULE_ID}`;\n\ninterface RuntimeInjectionPluginInput {\n readonly clientBundle?: string;\n readonly context: SpotPatchPluginContext;\n readonly reactAdapterBundle?: string;\n readonly session: SpotPatchSession;\n}\n\nfunction readRuntimeBundle(root: string, fileName: string): string {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const packageEntry = resolveFromProject.resolve(\"@spotpatch/vite\");\n const bundlePath = path.join(path.dirname(packageEntry), fileName);\n return readFileSync(bundlePath, \"utf8\");\n}\n\nfunction readConsumerViteVersion(root: string): string {\n try {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const manifestPath = resolveFromProject.resolve(\"vite/package.json\");\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as unknown;\n\n if (\n typeof manifest === \"object\" &&\n manifest !== null &&\n \"version\" in manifest &&\n typeof manifest.version === \"string\"\n ) {\n return manifest.version;\n }\n } catch {\n // Vite itself remains the safe fallback if package metadata is not exported.\n }\n\n return VITE_VERSION;\n}\n\nfunction createClientModule(\n input: RuntimeInjectionPluginInput,\n clientBundle: string,\n viteVersion: string,\n): string {\n const options = input.context.getOptions();\n const runtimeConfig = {\n ai: createRuntimeAiConfig(options.ai),\n budget: options.budget,\n debug: options.debug,\n editor: options.editor,\n framework: \"vite\" as const,\n frameworkVersion: viteVersion,\n locale: options.locale,\n maxTargets: options.maxTargets,\n redact: options.redact,\n sessionId: input.session.id,\n sessionToken: input.session.token,\n shortcut: options.shortcut,\n spotPatchVersion: packageMetadata.version,\n };\n\n return [\n `const __SPOTPATCH_BRAND_MARK_CONTENT__ = ${JSON.stringify(BRAND_MARK_CONTENT)};`,\n `const __SPOTPATCH_RUNTIME_CONFIG__ = ${JSON.stringify(runtimeConfig)};`,\n clientBundle,\n ].join(\"\\n\");\n}\n\nexport function createRuntimeInjectionPlugin(\n input: RuntimeInjectionPluginInput,\n): Plugin {\n let root = process.cwd();\n let clientBundle = input.clientBundle;\n let viteVersion = VITE_VERSION;\n\n return {\n name: \"spotpatch:runtime-injection\",\n apply: \"serve\",\n enforce: \"pre\",\n\n configResolved(config) {\n root = path.resolve(config.root);\n viteVersion = readConsumerViteVersion(root);\n },\n\n resolveId(id, importer) {\n if (id === SPOTPATCH_CLIENT_MODULE_ID) {\n return RESOLVED_SPOTPATCH_CLIENT_MODULE_ID;\n }\n\n if (\n id === \"@spotpatch/react-adapter\" &&\n importer === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID\n ) {\n return RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID;\n }\n\n return null;\n },\n\n load(id) {\n if (id === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID) {\n clientBundle ??= readRuntimeBundle(root, \"runtime-client.js\");\n return createClientModule(input, clientBundle, viteVersion);\n }\n\n if (id === RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID) {\n return (\n input.reactAdapterBundle ??\n readRuntimeBundle(root, \"runtime-react-adapter.js\")\n );\n }\n\n return null;\n },\n\n transformIndexHtml() {\n return [\n {\n tag: \"script\",\n attrs: {\n type: \"module\",\n src: `/@id/${SPOTPATCH_CLIENT_MODULE_ID}`,\n },\n injectTo: \"head\",\n },\n ];\n },\n };\n}\n","{\n \"name\": \"@spotpatch/vite\",\n \"version\": \"1.8.0\",\n \"description\": \"Vite development plugin for SpotPatch.\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/huanglvjing/spotpatch.git\",\n \"directory\": \"packages/vite\"\n },\n \"homepage\": \"https://github.com/huanglvjing/spotpatch#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/huanglvjing/spotpatch/issues\"\n },\n \"keywords\": [\n \"spotpatch\",\n \"vite\",\n \"react\",\n \"developer-tools\",\n \"ai-agent\"\n ],\n \"type\": \"module\",\n \"sideEffects\": false,\n \"engines\": {\n \"node\": \">=20.19.0\"\n },\n \"files\": [\n \"dist\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"spotpatch-vite\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n }\n },\n \"scripts\": {\n \"build\": \"tsup src/index.ts --format esm,cjs --dts --sourcemap --clean && tsup --config tsup.cli.config.ts && tsup --config tsup.runtime-client.config.ts && tsup --config tsup.runtime-react-adapter.config.ts\",\n \"clean\": \"node --input-type=module -e \\\"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\\\"\",\n \"typecheck\": \"tsc --noEmit -p tsconfig.json\"\n },\n \"dependencies\": {\n \"@spotpatch/compiler\": \"workspace:^\",\n \"@spotpatch/dev-server\": \"workspace:^\",\n \"@spotpatch/react-adapter\": \"workspace:^\",\n \"@spotpatch/runtime\": \"workspace:^\",\n \"@spotpatch/shared\": \"workspace:^\",\n \"magic-string\": \"1.1.0\",\n \"oxc-parser\": \"0.143.0\"\n },\n \"peerDependencies\": {\n \"vite\": \"^5.0.0 || ^6.0.0 || ^7.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","/**\n * Canonical SpotPatch mark from docs/assets/spotpatch-logo-mark.svg.\n *\n * The Vite development injector consumes this trusted asset separately from\n * the core browser bundle so the Runtime gzip budget remains enforceable.\n */\nexport const BRAND_MARK_CONTENT = `\n <defs>\n <linearGradient id=\"locator-gradient\" x1=\"76\" y1=\"92\" x2=\"436\" y2=\"374\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0\" stop-color=\"#B61CFF\" />\n <stop offset=\"0.38\" stop-color=\"#6D35FF\" />\n <stop offset=\"0.72\" stop-color=\"#168EFF\" />\n <stop offset=\"1\" stop-color=\"#00D9E9\" />\n </linearGradient>\n <linearGradient id=\"left-code-gradient\" x1=\"165\" y1=\"166\" x2=\"236\" y2=\"258\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#A51EFF\" />\n <stop offset=\"1\" stop-color=\"#653BFF\" />\n </linearGradient>\n <linearGradient id=\"right-code-gradient\" x1=\"276\" y1=\"166\" x2=\"347\" y2=\"258\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#158DFF\" />\n <stop offset=\"1\" stop-color=\"#00D8E9\" />\n </linearGradient>\n <linearGradient id=\"bolt-gradient\" x1=\"270\" y1=\"111\" x2=\"252\" y2=\"365\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#6840FF\" />\n <stop offset=\"0.48\" stop-color=\"#257BFF\" />\n <stop offset=\"1\" stop-color=\"#00CBEF\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#locator-gradient)\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M256 52C345.47 52 418 124.53 418 214C418 267.55 391.98 316.24 354.04 348.02L256 468L157.96 348.02C120.02 316.24 94 267.55 94 214C94 124.53 166.53 52 256 52ZM256 88C186.41 88 130 144.41 130 214C130 258.2 152.76 297.08 187.2 319.57L256 403.8L324.8 319.57C359.24 297.08 382 258.2 382 214C382 144.41 325.59 88 256 88Z\"\n />\n <rect x=\"238\" y=\"20\" width=\"36\" height=\"84\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <rect x=\"62\" y=\"196\" width=\"84\" height=\"36\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <rect x=\"366\" y=\"196\" width=\"84\" height=\"36\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <path\n d=\"M213.5 160L158 211.5L213.5 263L238 236.5L211 211.5L238 186.5L213.5 160Z\"\n fill=\"url(#left-code-gradient)\"\n />\n <path\n d=\"M298.5 160L354 211.5L298.5 263L274 236.5L301 211.5L274 186.5L298.5 160Z\"\n fill=\"url(#right-code-gradient)\"\n />\n <path\n d=\"M283 108L232 212L266 253L238 369L302 237L267 198L283 108Z\"\n fill=\"url(#bolt-gradient)\"\n />\n`;\n","import path from \"node:path\";\n\nimport {\n createAgentJobManager,\n createSpotPatchMiddleware,\n type AgentJobManager,\n type SourceRegistry,\n type SpotPatchSession,\n} from \"@spotpatch/dev-server\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\n\ninterface ServerPluginInput {\n readonly context: SpotPatchPluginContext;\n readonly registry: SourceRegistry;\n readonly session: SpotPatchSession;\n}\n\nexport function createServerPlugin(input: ServerPluginInput): Plugin {\n let agentManager: AgentJobManager | undefined;\n let config: ResolvedConfig | undefined;\n\n const closeResources = async (): Promise<void> => {\n input.registry.clear();\n await agentManager?.close();\n agentManager = undefined;\n };\n\n return {\n name: \"spotpatch:server\",\n apply: \"serve\",\n enforce: \"pre\",\n\n configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n\n configureServer(server) {\n if (config === undefined) {\n throw new Error(\"SpotPatch server initialized before Vite config resolution.\");\n }\n\n const root = path.resolve(config.root);\n const options = input.context.getOptions();\n agentManager =\n options.ai === false\n ? undefined\n : createAgentJobManager({\n ai: options.ai,\n environment: input.context.getCredentialEnvironment(),\n root,\n });\n\n server.middlewares.use(\n createSpotPatchMiddleware({\n ...(agentManager === undefined ? {} : { agentManager }),\n options,\n registry: input.registry,\n root,\n session: input.session,\n logger: config.logger,\n }),\n );\n\n server.httpServer?.once(\"close\", () => {\n void closeResources();\n });\n\n config.logger.info(\n `[spotpatch:vite] Ready. Toggle picker with ${options.shortcut}.`,\n );\n },\n\n async closeBundle() {\n await closeResources();\n },\n };\n}\n","import { createHash } from \"node:crypto\";\nimport path from \"node:path\";\n\nimport type { ConfigEnv, Plugin, ResolvedConfig, UserConfig } from \"vite\";\nimport { injectSourceMarkers } from \"@spotpatch/compiler\";\nimport type { SourceRegistry } from \"@spotpatch/dev-server\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\nimport { createTransformFilter, stripViteQuery } from \"./transform-filter.js\";\n\ninterface TransformPluginInput {\n readonly configure?: (\n config: UserConfig,\n environment: ConfigEnv,\n ) => void | Promise<void>;\n readonly context: SpotPatchPluginContext;\n readonly registry: SourceRegistry;\n}\n\ninterface ViteTransformOutput {\n readonly code: string;\n readonly map: string;\n}\n\nfunction createCacheKey(id: string, code: string): string {\n const hash = createHash(\"sha256\").update(code).digest(\"base64url\");\n return `${id}\\0${hash}`;\n}\n\nfunction getDisplayPath(root: string, id: string): string {\n const relative = path.relative(root, stripViteQuery(id));\n return relative.split(path.sep).join(\"/\");\n}\n\nexport function createTransformPlugin(input: TransformPluginInput): Plugin {\n let root = process.cwd();\n let filter = createTransformFilter(root, input.context.getOptions());\n let logger: ResolvedConfig[\"logger\"] | undefined;\n const warnedFiles = new Set<string>();\n const cache = new Map<string, ViteTransformOutput | null>();\n\n return {\n name: \"spotpatch:transform\",\n apply: \"serve\",\n enforce: \"pre\",\n\n async config(config, environment) {\n await input.configure?.(config, environment);\n },\n\n configResolved(config) {\n root = path.resolve(config.root);\n filter = createTransformFilter(root, input.context.getOptions());\n logger = config.logger;\n },\n\n transform(code, id) {\n if (!filter.shouldTransform(id, code)) {\n return null;\n }\n\n const cleanId = path.resolve(stripViteQuery(id));\n const cacheKey = createCacheKey(cleanId, code);\n\n if (cache.has(cacheKey)) {\n return cache.get(cacheKey) ?? null;\n }\n\n const startedAt = performance.now();\n const options = input.context.getOptions();\n\n try {\n const result = injectSourceMarkers({\n code,\n absolutePath: cleanId,\n root,\n fileId: input.registry.register(cleanId),\n onWarning(warning) {\n logger?.warn(\n `[spotpatch:transform] Existing source marker at ${getDisplayPath(root, id)}:${String(warning.line)}:${String(warning.column)}; preserving application value.`,\n );\n },\n });\n\n const output =\n result === undefined\n ? null\n : Object.freeze({\n code: result.code,\n map: result.map.toString(),\n });\n cache.set(cacheKey, output);\n\n if (options.debug) {\n const elapsed = performance.now() - startedAt;\n logger?.info(\n `[spotpatch:transform] ${getDisplayPath(root, id)} ${elapsed.toFixed(2)}ms`,\n );\n }\n\n return output;\n } catch (error: unknown) {\n if (!warnedFiles.has(cleanId)) {\n warnedFiles.add(cleanId);\n const detail =\n options.debug && error instanceof Error ? `: ${error.message}` : \"\";\n logger?.warn(\n `[spotpatch:transform] Failed to transform ${getDisplayPath(root, id)}; using original module${detail}`,\n );\n }\n\n return null;\n }\n },\n };\n}\n","import path from \"node:path\";\n\nimport { createSourceFilter } from \"@spotpatch/compiler\";\nimport type { ResolvedSpotPatchOptions } from \"@spotpatch/dev-server\";\n\nexport function stripViteQuery(id: string): string {\n const queryIndex = id.indexOf(\"?\");\n return queryIndex === -1 ? id : id.slice(0, queryIndex);\n}\n\nexport { isInsideRoot } from \"@spotpatch/compiler\";\n\nexport interface TransformFilter {\n shouldTransform(id: string, code: string): boolean;\n}\n\nexport function createTransformFilter(\n root: string,\n options: ResolvedSpotPatchOptions,\n): TransformFilter {\n const sourceFilter = createSourceFilter(root, options);\n\n return Object.freeze({\n shouldTransform(id: string, code: string): boolean {\n if (\n id.startsWith(\"\\0\") ||\n id.includes(\"virtual:spotpatch\") ||\n id.includes(\"/packages/vite/\") ||\n id.includes(\"\\\\packages\\\\vite\\\\\")\n ) {\n return false;\n }\n\n const cleanId = stripViteQuery(id);\n return sourceFilter.shouldTransform(path.resolve(cleanId), code);\n },\n });\n}\n","export {\n createRuntimeAiConfig,\n DEFAULT_EXCLUDE,\n DEFAULT_OPTIONS,\n resolveOptions,\n} from \"@spotpatch/dev-server\";\nexport type {\n FilterEntry,\n ResolvedSpotPatchOptions,\n SimpleAiOptions,\n SpotPatchAiOptions,\n SpotPatchOptions,\n} from \"@spotpatch/dev-server\";\n\nexport type ViteSpotPatchOptions = SharedSpotPatchOptions;\nimport type { SpotPatchOptions as SharedSpotPatchOptions } from \"@spotpatch/dev-server\";\n"],"mappings":"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","names":["import_node_path","import_dev_server","import_vite","path","VITE_VERSION","import_node_path","import_dev_server","path","import_node_path","import_compiler","import_node_path","import_compiler","path","path","path","import_dev_server"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/plugin.ts","../src/runtime/runtime-injection-plugin.ts","../package.json","../../runtime/src/ui/brand-mark-content.ts","../src/server/server-plugin.ts","../src/transform/transform-plugin.ts","../src/transform/transform-filter.ts","../src/options.ts"],"sourcesContent":["export { spotPatch } from \"./plugin.js\";\nexport {\n DEFAULT_OPTIONS,\n resolveOptions,\n type ResolvedSpotPatchOptions,\n type SimpleAiOptions,\n type SpotPatchAiOptions,\n type SpotPatchDataFlowOptions,\n type SpotPatchOptions,\n type ViteSpotPatchOptions,\n} from \"./options.js\";\nexport {\n DEFAULT_AGENT_LIMITS,\n type AgentApplyMode,\n type AgentCheckDefinition,\n type AgentLimits,\n type AiExecutionOptions,\n type AiModelProfile,\n type AiOptions,\n type AiProviderAuthentication,\n type AiProviderProtocol,\n type ContextBudget,\n type OpenAICompatibleProviderOptions,\n type SpotPatchEditorPreference,\n} from \"@spotpatch/shared\";\n","import path from \"node:path\";\n\nimport {\n createSession,\n createSourceRegistry,\n resolveCredentialEnvironment,\n resolveEnvironmentAiConfiguration,\n resolveOptions,\n resolveProjectOptions,\n} from \"@spotpatch/dev-server\";\nimport { loadEnv, type ConfigEnv, type Plugin, type UserConfig } from \"vite\";\n\nimport type { ViteSpotPatchOptions } from \"./options.js\";\nimport type { SpotPatchPluginContext } from \"./plugin-context.js\";\nimport { createRuntimeInjectionPlugin } from \"./runtime/runtime-injection-plugin.js\";\nimport { createServerPlugin } from \"./server/server-plugin.js\";\nimport { createTransformPlugin } from \"./transform/transform-plugin.js\";\n\nexport function spotPatch(userOptions: ViteSpotPatchOptions = {}): Plugin[] {\n let options = resolveOptions(userOptions);\n let credentialEnvironment: Readonly<Record<string, string | undefined>> =\n Object.freeze({});\n\n if (!options.enabled) {\n return [];\n }\n\n const registry = createSourceRegistry();\n const session = createSession();\n const context = Object.freeze({\n getCredentialEnvironment: () => credentialEnvironment,\n getOptions: () => options,\n } satisfies SpotPatchPluginContext);\n const configure = async (\n config: UserConfig,\n environment: ConfigEnv,\n ): Promise<void> => {\n const root = path.resolve(process.cwd(), config.root ?? \".\");\n const loadedEnvironment =\n config.envDir === false\n ? process.env\n : loadEnv(environment.mode, path.resolve(root, config.envDir ?? \".\"), \"\");\n const environmentAi =\n userOptions.ai === undefined\n ? resolveEnvironmentAiConfiguration(loadedEnvironment).ai\n : false;\n\n options = await resolveProjectOptions({\n appRoot: root,\n environmentAi,\n options: userOptions,\n });\n\n credentialEnvironment = resolveCredentialEnvironment(options, loadedEnvironment);\n };\n\n return [\n createTransformPlugin({ configure, context, registry }),\n createRuntimeInjectionPlugin({ context, session }),\n createServerPlugin({ context, registry, session }),\n ];\n}\n","import { createRequire } from \"node:module\";\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nimport {\n createRuntimeAiConfig,\n createRuntimeDataFlowConfig,\n type SpotPatchSession,\n} from \"@spotpatch/dev-server\";\nimport packageMetadata from \"../../package.json\" with { type: \"json\" };\nimport { version as VITE_VERSION, type Plugin } from \"vite\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\nimport { BRAND_MARK_CONTENT } from \"./brand-mark-content.js\";\n\nexport const SPOTPATCH_CLIENT_MODULE_ID = \"virtual:spotpatch/client\";\nexport const RESOLVED_SPOTPATCH_CLIENT_MODULE_ID = `\\0${SPOTPATCH_CLIENT_MODULE_ID}`;\nexport const SPOTPATCH_REACT_ADAPTER_MODULE_ID = \"virtual:spotpatch/react-adapter\";\nexport const RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID = `\\0${SPOTPATCH_REACT_ADAPTER_MODULE_ID}`;\nexport const SPOTPATCH_DATA_FLOW_MODULE_ID = \"virtual:spotpatch/data-flow-runtime\";\nexport const RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID = `\\0${SPOTPATCH_DATA_FLOW_MODULE_ID}`;\nexport const SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = \"virtual:spotpatch/data-flow-panel\";\nexport const RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID = `\\0${SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID}`;\nexport const SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID =\n \"virtual:spotpatch/external-handoff-panel\";\nexport const RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID = `\\0${SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID}`;\n\ninterface RuntimeInjectionPluginInput {\n readonly clientBundle?: string;\n readonly context: SpotPatchPluginContext;\n readonly dataFlowPreludeBundle?: string;\n readonly dataFlowPanelBundle?: string;\n readonly externalHandoffPanelBundle?: string;\n readonly reactAdapterBundle?: string;\n readonly session: SpotPatchSession;\n}\n\nfunction createDataFlowPreludeModule(\n input: RuntimeInjectionPluginInput,\n bundle: string,\n): string {\n return [\n `const __SPOTPATCH_DATA_FLOW_CONFIG__ = ${JSON.stringify(input.context.getOptions().dataFlow)};`,\n bundle,\n ].join(\"\\n\");\n}\n\nfunction readRuntimeBundle(root: string, fileName: string): string {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const packageEntry = resolveFromProject.resolve(\"@spotpatch/vite\");\n const bundlePath = path.join(path.dirname(packageEntry), fileName);\n return readFileSync(bundlePath, \"utf8\");\n}\n\nfunction readConsumerViteVersion(root: string): string {\n try {\n const resolveFromProject = createRequire(path.join(root, \"package.json\"));\n const manifestPath = resolveFromProject.resolve(\"vite/package.json\");\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as unknown;\n\n if (\n typeof manifest === \"object\" &&\n manifest !== null &&\n \"version\" in manifest &&\n typeof manifest.version === \"string\"\n ) {\n return manifest.version;\n }\n } catch {\n // Vite itself remains the safe fallback if package metadata is not exported.\n }\n\n return VITE_VERSION;\n}\n\nfunction createClientModule(\n input: RuntimeInjectionPluginInput,\n clientBundle: string,\n viteVersion: string,\n): string {\n const options = input.context.getOptions();\n const runtimeConfig = {\n ai: createRuntimeAiConfig(options.ai),\n budget: options.budget,\n dataFlow: createRuntimeDataFlowConfig(options.dataFlow),\n debug: options.debug,\n editor: options.editor,\n externalAgent: options.externalAgent,\n framework: \"vite\" as const,\n frameworkVersion: viteVersion,\n locale: options.locale,\n maxTargets: options.maxTargets,\n redact: options.redact,\n sessionId: input.session.id,\n sessionToken: input.session.token,\n shortcut: options.shortcut,\n spotPatchVersion: packageMetadata.version,\n };\n\n return [\n ...(options.dataFlow.enabled\n ? [`import ${JSON.stringify(SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID)};`]\n : []),\n ...(options.externalAgent.enabled\n ? [`import ${JSON.stringify(SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID)};`]\n : []),\n `const __SPOTPATCH_BRAND_MARK_CONTENT__ = ${JSON.stringify(BRAND_MARK_CONTENT)};`,\n `const __SPOTPATCH_RUNTIME_CONFIG__ = ${JSON.stringify(runtimeConfig)};`,\n clientBundle,\n ].join(\"\\n\");\n}\n\nexport function createRuntimeInjectionPlugin(\n input: RuntimeInjectionPluginInput,\n): Plugin {\n let root = process.cwd();\n let clientBundle = input.clientBundle;\n let dataFlowPreludeBundle = input.dataFlowPreludeBundle;\n let dataFlowPanelBundle = input.dataFlowPanelBundle;\n let externalHandoffPanelBundle = input.externalHandoffPanelBundle;\n let viteVersion = VITE_VERSION;\n\n return {\n name: \"spotpatch:runtime-injection\",\n apply: \"serve\",\n enforce: \"pre\",\n\n configResolved(config) {\n root = path.resolve(config.root);\n viteVersion = readConsumerViteVersion(root);\n },\n\n resolveId(id, importer) {\n if (id === SPOTPATCH_CLIENT_MODULE_ID) {\n return RESOLVED_SPOTPATCH_CLIENT_MODULE_ID;\n }\n\n if (\n id === \"@spotpatch/react-adapter\" &&\n importer === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID\n ) {\n return RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID;\n }\n\n if (id === SPOTPATCH_DATA_FLOW_MODULE_ID) {\n return RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID;\n }\n\n if (id === SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {\n return RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID;\n }\n\n if (id === SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {\n return RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID;\n }\n\n return null;\n },\n\n load(id) {\n if (id === RESOLVED_SPOTPATCH_CLIENT_MODULE_ID) {\n clientBundle ??= readRuntimeBundle(root, \"runtime-client.js\");\n return createClientModule(input, clientBundle, viteVersion);\n }\n\n if (id === RESOLVED_SPOTPATCH_REACT_ADAPTER_MODULE_ID) {\n return (\n input.reactAdapterBundle ??\n readRuntimeBundle(root, \"runtime-react-adapter.js\")\n );\n }\n\n if (id === RESOLVED_SPOTPATCH_DATA_FLOW_MODULE_ID) {\n if (!input.context.getOptions().dataFlow.enabled) return null;\n dataFlowPreludeBundle ??= readRuntimeBundle(\n root,\n \"runtime-data-flow-prelude.js\",\n );\n return createDataFlowPreludeModule(input, dataFlowPreludeBundle);\n }\n\n if (id === RESOLVED_SPOTPATCH_DATA_FLOW_PANEL_MODULE_ID) {\n if (!input.context.getOptions().dataFlow.enabled) return null;\n dataFlowPanelBundle ??= readRuntimeBundle(root, \"runtime-data-flow-panel.js\");\n return dataFlowPanelBundle;\n }\n\n if (id === RESOLVED_SPOTPATCH_EXTERNAL_HANDOFF_PANEL_MODULE_ID) {\n if (!input.context.getOptions().externalAgent.enabled) return null;\n externalHandoffPanelBundle ??= readRuntimeBundle(\n root,\n \"runtime-external-handoff-panel.js\",\n );\n return externalHandoffPanelBundle;\n }\n\n return null;\n },\n\n transformIndexHtml() {\n const client = {\n tag: \"script\",\n attrs: {\n type: \"module\",\n src: `/@id/${SPOTPATCH_CLIENT_MODULE_ID}`,\n },\n injectTo: \"head\" as const,\n };\n if (!input.context.getOptions().dataFlow.enabled) {\n return [client];\n }\n\n return [\n {\n tag: \"script\",\n attrs: {\n type: \"module\",\n src: `/@id/${SPOTPATCH_DATA_FLOW_MODULE_ID}`,\n },\n injectTo: \"head-prepend\" as const,\n },\n client,\n ];\n },\n };\n}\n","{\n \"name\": \"@spotpatch/vite\",\n \"version\": \"1.10.0\",\n \"description\": \"Vite development plugin for SpotPatch.\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/huanglvjing/spotpatch.git\",\n \"directory\": \"packages/vite\"\n },\n \"homepage\": \"https://github.com/huanglvjing/spotpatch#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/huanglvjing/spotpatch/issues\"\n },\n \"keywords\": [\n \"spotpatch\",\n \"vite\",\n \"react\",\n \"developer-tools\",\n \"ai-agent\"\n ],\n \"type\": \"module\",\n \"sideEffects\": false,\n \"engines\": {\n \"node\": \">=20.19.0\"\n },\n \"files\": [\n \"dist\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"spotpatch-vite\": \"./dist/cli.js\"\n },\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n }\n },\n \"scripts\": {\n \"build\": \"tsup src/index.ts --format esm,cjs --dts --sourcemap --clean && tsup --config tsup.cli.config.ts && tsup --config tsup.runtime-client.config.ts && tsup --config tsup.runtime-react-adapter.config.ts && tsup --config tsup.runtime-data-flow-prelude.config.ts && tsup --config tsup.runtime-data-flow-panel.config.ts && tsup --config tsup.runtime-external-handoff-panel.config.ts\",\n \"clean\": \"node --input-type=module -e \\\"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\\\"\",\n \"typecheck\": \"tsc --noEmit -p tsconfig.json\"\n },\n \"dependencies\": {\n \"@spotpatch/bridge\": \"workspace:^\",\n \"@spotpatch/compiler\": \"workspace:^\",\n \"@spotpatch/dev-server\": \"workspace:^\",\n \"@spotpatch/react-adapter\": \"workspace:^\",\n \"@spotpatch/runtime\": \"workspace:^\",\n \"@spotpatch/shared\": \"workspace:^\",\n \"magic-string\": \"1.1.0\",\n \"oxc-parser\": \"0.143.0\"\n },\n \"peerDependencies\": {\n \"vite\": \"^5.0.0 || ^6.0.0 || ^7.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","/**\n * Canonical SpotPatch mark from docs/assets/spotpatch-logo-mark.svg.\n *\n * The Vite development injector consumes this trusted asset separately from\n * the core browser bundle so the Runtime gzip budget remains enforceable.\n */\nexport const BRAND_MARK_CONTENT = `\n <defs>\n <linearGradient id=\"locator-gradient\" x1=\"76\" y1=\"92\" x2=\"436\" y2=\"374\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0\" stop-color=\"#B61CFF\" />\n <stop offset=\"0.38\" stop-color=\"#6D35FF\" />\n <stop offset=\"0.72\" stop-color=\"#168EFF\" />\n <stop offset=\"1\" stop-color=\"#00D9E9\" />\n </linearGradient>\n <linearGradient id=\"left-code-gradient\" x1=\"165\" y1=\"166\" x2=\"236\" y2=\"258\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#A51EFF\" />\n <stop offset=\"1\" stop-color=\"#653BFF\" />\n </linearGradient>\n <linearGradient id=\"right-code-gradient\" x1=\"276\" y1=\"166\" x2=\"347\" y2=\"258\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#158DFF\" />\n <stop offset=\"1\" stop-color=\"#00D8E9\" />\n </linearGradient>\n <linearGradient id=\"bolt-gradient\" x1=\"270\" y1=\"111\" x2=\"252\" y2=\"365\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#6840FF\" />\n <stop offset=\"0.48\" stop-color=\"#257BFF\" />\n <stop offset=\"1\" stop-color=\"#00CBEF\" />\n </linearGradient>\n </defs>\n <path\n fill=\"url(#locator-gradient)\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M256 52C345.47 52 418 124.53 418 214C418 267.55 391.98 316.24 354.04 348.02L256 468L157.96 348.02C120.02 316.24 94 267.55 94 214C94 124.53 166.53 52 256 52ZM256 88C186.41 88 130 144.41 130 214C130 258.2 152.76 297.08 187.2 319.57L256 403.8L324.8 319.57C359.24 297.08 382 258.2 382 214C382 144.41 325.59 88 256 88Z\"\n />\n <rect x=\"238\" y=\"20\" width=\"36\" height=\"84\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <rect x=\"62\" y=\"196\" width=\"84\" height=\"36\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <rect x=\"366\" y=\"196\" width=\"84\" height=\"36\" rx=\"4\" fill=\"url(#locator-gradient)\" />\n <path\n d=\"M213.5 160L158 211.5L213.5 263L238 236.5L211 211.5L238 186.5L213.5 160Z\"\n fill=\"url(#left-code-gradient)\"\n />\n <path\n d=\"M298.5 160L354 211.5L298.5 263L274 236.5L301 211.5L274 186.5L298.5 160Z\"\n fill=\"url(#right-code-gradient)\"\n />\n <path\n d=\"M283 108L232 212L266 253L238 369L302 237L267 198L283 108Z\"\n fill=\"url(#bolt-gradient)\"\n />\n`;\n","import path from \"node:path\";\n\nimport {\n createAgentJobManager,\n createExternalHandoffService,\n createSpotPatchMiddleware,\n type AgentJobManager,\n type ExternalHandoffService,\n type SourceRegistry,\n type SpotPatchSession,\n} from \"@spotpatch/dev-server\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\n\ninterface ServerPluginInput {\n readonly context: SpotPatchPluginContext;\n readonly registry: SourceRegistry;\n readonly session: SpotPatchSession;\n}\n\nexport function createServerPlugin(input: ServerPluginInput): Plugin {\n let agentManager: AgentJobManager | undefined;\n let externalHandoffService: ExternalHandoffService | undefined;\n let config: ResolvedConfig | undefined;\n\n const closeResources = async (): Promise<void> => {\n input.registry.clear();\n await externalHandoffService?.close();\n externalHandoffService = undefined;\n await agentManager?.close();\n agentManager = undefined;\n };\n\n return {\n name: \"spotpatch:server\",\n apply: \"serve\",\n enforce: \"pre\",\n\n configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n\n async configureServer(server) {\n if (config === undefined) {\n throw new Error(\"SpotPatch server initialized before Vite config resolution.\");\n }\n\n const root = path.resolve(config.root);\n const options = input.context.getOptions();\n agentManager =\n options.ai === false\n ? undefined\n : createAgentJobManager({\n ai: options.ai,\n environment: input.context.getCredentialEnvironment(),\n root,\n });\n externalHandoffService = options.externalAgent.enabled\n ? createExternalHandoffService({\n framework: \"vite\",\n root,\n sessionId: input.session.id,\n })\n : undefined;\n\n if (externalHandoffService !== undefined) {\n try {\n await externalHandoffService.start();\n } catch {\n config.logger.warn(\n \"[spotpatch:vite] External Agent handoff is unavailable; core tools remain active.\",\n );\n }\n }\n\n server.middlewares.use(\n createSpotPatchMiddleware({\n ...(agentManager === undefined ? {} : { agentManager }),\n ...(externalHandoffService === undefined ? {} : { externalHandoffService }),\n options,\n registry: input.registry,\n root,\n session: input.session,\n logger: config.logger,\n }),\n );\n\n server.httpServer?.once(\"close\", () => {\n void closeResources();\n });\n\n config.logger.info(\n `[spotpatch:vite] Ready. Toggle picker with ${options.shortcut}.`,\n );\n },\n\n async closeBundle() {\n await closeResources();\n },\n };\n}\n","import { createHash } from \"node:crypto\";\nimport path from \"node:path\";\n\nimport type { ConfigEnv, Plugin, ResolvedConfig, UserConfig } from \"vite\";\nimport { injectSourceMarkers } from \"@spotpatch/compiler\";\nimport type { SourceRegistry } from \"@spotpatch/dev-server\";\n\nimport type { SpotPatchPluginContext } from \"../plugin-context.js\";\nimport { SPOTPATCH_DATA_FLOW_MODULE_ID } from \"../runtime/runtime-injection-plugin.js\";\nimport { createTransformFilter, stripViteQuery } from \"./transform-filter.js\";\n\ninterface TransformPluginInput {\n readonly configure?: (\n config: UserConfig,\n environment: ConfigEnv,\n ) => void | Promise<void>;\n readonly context: SpotPatchPluginContext;\n readonly registry: SourceRegistry;\n}\n\ninterface ViteTransformOutput {\n readonly code: string;\n readonly map: string;\n}\n\nfunction createCacheKey(id: string, code: string): string {\n const hash = createHash(\"sha256\").update(code).digest(\"base64url\");\n return `${id}\\0${hash}`;\n}\n\nfunction getDisplayPath(root: string, id: string): string {\n const relative = path.relative(root, stripViteQuery(id));\n return relative.split(path.sep).join(\"/\");\n}\n\nexport function createTransformPlugin(input: TransformPluginInput): Plugin {\n let root = process.cwd();\n let filter = createTransformFilter(root, input.context.getOptions());\n let logger: ResolvedConfig[\"logger\"] | undefined;\n const warnedFiles = new Set<string>();\n const warnedDataFlowDiagnostics = new Set<string>();\n const cache = new Map<string, ViteTransformOutput | null>();\n\n return {\n name: \"spotpatch:transform\",\n apply: \"serve\",\n enforce: \"pre\",\n\n async config(config, environment) {\n await input.configure?.(config, environment);\n },\n\n configResolved(config) {\n root = path.resolve(config.root);\n filter = createTransformFilter(root, input.context.getOptions());\n logger = config.logger;\n },\n\n transform(code, id) {\n if (!filter.shouldTransform(id, code)) {\n return null;\n }\n\n const cleanId = path.resolve(stripViteQuery(id));\n const cacheKey = createCacheKey(cleanId, code);\n\n if (cache.has(cacheKey)) {\n return cache.get(cacheKey) ?? null;\n }\n\n const startedAt = performance.now();\n const options = input.context.getOptions();\n\n try {\n const result = injectSourceMarkers({\n code,\n absolutePath: cleanId,\n root,\n fileId: input.registry.register(cleanId),\n ...(options.dataFlow.enabled\n ? { dataFlow: { helperModule: SPOTPATCH_DATA_FLOW_MODULE_ID } }\n : {}),\n onWarning(warning) {\n logger?.warn(\n `[spotpatch:transform] Existing source marker at ${getDisplayPath(root, id)}:${String(warning.line)}:${String(warning.column)}; preserving application value.`,\n );\n },\n });\n\n if (result?.dataFlow !== undefined) {\n input.registry.registerDataFlowComponents(\n cleanId,\n result.dataFlow.sourceVersion,\n result.dataFlow.anchors.flatMap((anchor) =>\n anchor.kind === \"component\"\n ? [\n {\n componentSourceId: anchor.id,\n line: anchor.line,\n column: anchor.column,\n },\n ]\n : [],\n ),\n );\n for (const diagnostic of result.dataFlow.diagnostics) {\n const warningKey = `${cleanId}:${diagnostic.code}:${String(diagnostic.line)}:${String(diagnostic.column)}`;\n if (warnedDataFlowDiagnostics.has(warningKey)) continue;\n warnedDataFlowDiagnostics.add(warningKey);\n logger?.warn(\n `[spotpatch:data-flow] ${diagnostic.code} at ${getDisplayPath(root, id)}:${String(diagnostic.line)}:${String(diagnostic.column)}; keeping this adapter evidence partial.`,\n );\n }\n }\n\n const output =\n result === undefined\n ? null\n : Object.freeze({\n code: result.code,\n map: result.map.toString(),\n });\n cache.set(cacheKey, output);\n\n if (options.debug) {\n const elapsed = performance.now() - startedAt;\n logger?.info(\n `[spotpatch:transform] ${getDisplayPath(root, id)} ${elapsed.toFixed(2)}ms`,\n );\n }\n\n return output;\n } catch (error: unknown) {\n if (!warnedFiles.has(cleanId)) {\n warnedFiles.add(cleanId);\n const detail =\n options.debug && error instanceof Error ? `: ${error.message}` : \"\";\n logger?.warn(\n `[spotpatch:transform] Failed to transform ${getDisplayPath(root, id)}; using original module${detail}`,\n );\n }\n\n return null;\n }\n },\n };\n}\n","import path from \"node:path\";\n\nimport { createDataFlowSourceFilter, createSourceFilter } from \"@spotpatch/compiler\";\nimport type { ResolvedSpotPatchOptions } from \"@spotpatch/dev-server\";\n\nexport function stripViteQuery(id: string): string {\n const queryIndex = id.indexOf(\"?\");\n return queryIndex === -1 ? id : id.slice(0, queryIndex);\n}\n\nexport { isInsideRoot } from \"@spotpatch/compiler\";\n\nexport interface TransformFilter {\n shouldTransform(id: string, code: string): boolean;\n}\n\nexport function createTransformFilter(\n root: string,\n options: ResolvedSpotPatchOptions,\n): TransformFilter {\n const sourceFilter = createSourceFilter(root, options);\n const dataFlowFilter = createDataFlowSourceFilter(root, {\n include: options.include,\n exclude: options.exclude,\n });\n\n return Object.freeze({\n shouldTransform(id: string, code: string): boolean {\n if (\n id.startsWith(\"\\0\") ||\n id.includes(\"virtual:spotpatch\") ||\n id.includes(\"/packages/vite/\") ||\n id.includes(\"\\\\packages\\\\vite\\\\\")\n ) {\n return false;\n }\n\n const cleanId = stripViteQuery(id);\n const absolutePath = path.resolve(cleanId);\n return (\n sourceFilter.shouldTransform(absolutePath, code) ||\n (options.dataFlow.enabled && dataFlowFilter.shouldTransform(absolutePath, code))\n );\n },\n });\n}\n","export {\n createRuntimeAiConfig,\n DEFAULT_EXCLUDE,\n DEFAULT_OPTIONS,\n resolveOptions,\n} from \"@spotpatch/dev-server\";\nexport type {\n FilterEntry,\n ResolvedSpotPatchOptions,\n SimpleAiOptions,\n SpotPatchAiOptions,\n SpotPatchDataFlowOptions,\n SpotPatchOptions,\n} from \"@spotpatch/dev-server\";\n\nexport type ViteSpotPatchOptions = SharedSpotPatchOptions;\nimport type { SpotPatchOptions as SharedSpotPatchOptions } from \"@spotpatch/dev-server\";\n"],"mappings":"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","names":["import_node_path","import_dev_server","import_vite","path","VITE_VERSION","import_node_path","import_dev_server","path","import_node_path","import_compiler","import_node_path","import_compiler","path","path","path","import_dev_server"]}
|