@reckona/mreact-router 0.0.137 → 0.0.139

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.
Files changed (76) hide show
  1. package/README.md +1 -1
  2. package/dist/actions.d.ts +1 -0
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +32 -12
  5. package/dist/actions.js.map +1 -1
  6. package/dist/adapters/static.js +10 -4
  7. package/dist/adapters/static.js.map +1 -1
  8. package/dist/build.d.ts.map +1 -1
  9. package/dist/build.js +28 -21
  10. package/dist/build.js.map +1 -1
  11. package/dist/cache.d.ts +2 -0
  12. package/dist/cache.d.ts.map +1 -1
  13. package/dist/cache.js +23 -1
  14. package/dist/cache.js.map +1 -1
  15. package/dist/client.d.ts.map +1 -1
  16. package/dist/client.js +49 -12
  17. package/dist/client.js.map +1 -1
  18. package/dist/dev-server.d.ts +1 -0
  19. package/dist/dev-server.d.ts.map +1 -1
  20. package/dist/dev-server.js +6 -4
  21. package/dist/dev-server.js.map +1 -1
  22. package/dist/link.js +17 -3
  23. package/dist/link.js.map +1 -1
  24. package/dist/middleware.d.ts.map +1 -1
  25. package/dist/middleware.js +10 -7
  26. package/dist/middleware.js.map +1 -1
  27. package/dist/multipart.d.ts +5 -0
  28. package/dist/multipart.d.ts.map +1 -1
  29. package/dist/multipart.js +24 -1
  30. package/dist/multipart.js.map +1 -1
  31. package/dist/native-route-matcher.d.ts +9 -0
  32. package/dist/native-route-matcher.d.ts.map +1 -1
  33. package/dist/native-route-matcher.js +23 -11
  34. package/dist/native-route-matcher.js.map +1 -1
  35. package/dist/navigation.d.ts.map +1 -1
  36. package/dist/navigation.js +8 -1
  37. package/dist/navigation.js.map +1 -1
  38. package/dist/render.d.ts +5 -1
  39. package/dist/render.d.ts.map +1 -1
  40. package/dist/render.js +239 -95
  41. package/dist/render.js.map +1 -1
  42. package/dist/route-source.d.ts +3 -1
  43. package/dist/route-source.d.ts.map +1 -1
  44. package/dist/route-source.js +13 -11
  45. package/dist/route-source.js.map +1 -1
  46. package/dist/route-styles.d.ts +4 -0
  47. package/dist/route-styles.d.ts.map +1 -1
  48. package/dist/route-styles.js +15 -3
  49. package/dist/route-styles.js.map +1 -1
  50. package/dist/serve.d.ts.map +1 -1
  51. package/dist/serve.js +39 -9
  52. package/dist/serve.js.map +1 -1
  53. package/dist/server-action-inference.d.ts.map +1 -1
  54. package/dist/server-action-inference.js +57 -0
  55. package/dist/server-action-inference.js.map +1 -1
  56. package/dist/vite.d.ts.map +1 -1
  57. package/dist/vite.js +47 -11
  58. package/dist/vite.js.map +1 -1
  59. package/package.json +11 -11
  60. package/src/actions.ts +44 -10
  61. package/src/adapters/static.ts +11 -4
  62. package/src/build.ts +28 -17
  63. package/src/cache.ts +33 -1
  64. package/src/client.ts +49 -12
  65. package/src/dev-server.ts +11 -4
  66. package/src/link.ts +24 -3
  67. package/src/middleware.ts +12 -7
  68. package/src/multipart.ts +32 -1
  69. package/src/native-route-matcher.ts +34 -13
  70. package/src/navigation.ts +11 -2
  71. package/src/render.ts +321 -113
  72. package/src/route-source.ts +14 -10
  73. package/src/route-styles.ts +28 -3
  74. package/src/serve.ts +68 -15
  75. package/src/server-action-inference.ts +86 -0
  76. package/src/vite.ts +59 -12
@@ -1 +1 @@
1
- {"version":3,"file":"server-action-inference.js","sourceRoot":"","sources":["../src/server-action-inference.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { dirname, relative, sep } from \"node:path\";\nimport {\n analyzeBoundaryGraph,\n collectFormActionExpressionReferences,\n hasModuleDirective,\n type FormActionExpressionReference,\n} from \"@reckona/mreact-compiler\";\nimport type * as Ts from \"typescript\";\n\nlet ts = undefined as unknown as typeof Ts;\nlet typescriptLoaded = false;\n\nexport interface InferredServerActionReference {\n exportName: string;\n inferred: boolean;\n moduleId: string;\n}\n\nexport interface InferredServerActionExpressionReference\n extends InferredServerActionReference {\n end: number;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n sourceHash: string;\n start: number;\n}\n\nexport interface ServerActionInferenceDiagnostic {\n code: typeof dynamicFormActionInferenceCode;\n filename: string;\n level: \"warn\";\n message: string;\n}\n\nexport interface RuntimeServerActionInferenceFileSystem {\n isUseServerFile(file: string): Promise<boolean>;\n resolveSourceFile(directory: string, source: string): Promise<string | undefined>;\n}\n\nexport const dynamicFormActionInferenceCode =\n \"MR_SERVER_ACTION_INFERENCE_DYNAMIC_FORM_ACTION\";\n\nconst dynamicFormActionInferenceMessage =\n \"mreact could not infer a single server action from this form action expression. Pass the action function directly or use an explicit escape hatch.\";\n\nexport async function collectRuntimeInferredServerActions(options: {\n appDir: string;\n code: string;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n}): Promise<{\n diagnostics: ServerActionInferenceDiagnostic[];\n references: Map<string, InferredServerActionReference>;\n}> {\n const formReferences = collectFormActionExpressionReferences({\n code: options.code,\n filename: options.pageFile,\n });\n\n if (formReferences.length === 0) {\n return { diagnostics: [], references: new Map() };\n }\n\n await loadTypeScript();\n const program = ts.createProgram({\n host: createRuntimeProgramHost({\n code: options.code,\n compilerOptions: defaultCompilerOptions(),\n pageFile: options.pageFile,\n }),\n options: {\n allowJs: true,\n jsx: ts.JsxEmit.ReactJSX,\n module: ts.ModuleKind.NodeNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n noEmit: true,\n target: ts.ScriptTarget.ES2022,\n },\n rootNames: [options.pageFile],\n });\n const checker = program.getTypeChecker();\n const sourceFile = program.getSourceFile(options.pageFile);\n\n if (sourceFile === undefined) {\n return { diagnostics: [], references: new Map() };\n }\n\n const diagnostics: ServerActionInferenceDiagnostic[] = [];\n const references = new Map<string, InferredServerActionReference>();\n\n for (const formReference of formReferences) {\n const expression = findExpressionAt(sourceFile, formReference);\n\n if (expression === undefined) {\n continue;\n }\n\n const resolved = await resolveRuntimeActionExpression({\n appDir: options.appDir,\n checker,\n expression,\n fileSystem: options.fileSystem,\n pageFile: options.pageFile,\n seen: new Set(),\n });\n\n if (resolved.kind === \"resolved\") {\n references.set(formActionOccurrenceKey(formReference), resolved.reference);\n continue;\n }\n\n if (resolved.kind === \"dynamic\") {\n diagnostics.push({\n code: dynamicFormActionInferenceCode,\n filename: options.pageFile,\n level: \"warn\",\n message: dynamicFormActionInferenceMessage,\n });\n }\n }\n\n return { diagnostics, references };\n}\n\nexport async function collectBuildInferredServerActions(options: {\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n source: string;\n}): Promise<{\n diagnostics: ServerActionInferenceDiagnostic[];\n references: InferredServerActionExpressionReference[];\n}> {\n const formReferences = collectFormActionExpressionReferences({\n code: options.source,\n filename: options.file,\n });\n\n if (formReferences.length === 0) {\n return { diagnostics: [], references: [] };\n }\n\n await loadTypeScript();\n const program = createBuildProgram(options.file, options.files, options.source);\n const checker = program.getTypeChecker();\n const sourceFile = program.getSourceFile(options.file);\n\n if (sourceFile === undefined) {\n return { diagnostics: [], references: [] };\n }\n\n const diagnostics: ServerActionInferenceDiagnostic[] = [];\n const references: InferredServerActionExpressionReference[] = [];\n const sourceHash = formActionSourceHash(options.source);\n const graphReferences = await collectBuildBoundaryGraphServerActions({\n file: options.file,\n files: options.files,\n relativeRoutesDir: options.relativeRoutesDir,\n resolveSourceImport: options.resolveSourceImport,\n source: options.source,\n sourceHash,\n });\n\n for (const formReference of formReferences) {\n const expression = findExpressionAt(sourceFile, formReference);\n\n if (expression === undefined) {\n continue;\n }\n\n const resolved = resolveBuildActionExpression({\n checker,\n expression,\n file: options.file,\n files: options.files,\n relativeRoutesDir: options.relativeRoutesDir,\n resolveSourceImport: options.resolveSourceImport,\n seen: new Set(),\n });\n\n if (resolved.kind === \"resolved\") {\n references.push({\n ...resolved.reference,\n end: formReference.end,\n expression: formReference.expression,\n expressionEnd: formReference.expressionEnd,\n expressionStart: formReference.expressionStart,\n sourceHash,\n start: formReference.start,\n });\n continue;\n }\n\n const graphReference = graphReferences.get(formActionOccurrenceKey(formReference));\n\n if (graphReference !== undefined) {\n references.push(graphReference);\n continue;\n }\n\n if (resolved.kind === \"dynamic\") {\n diagnostics.push({\n code: dynamicFormActionInferenceCode,\n filename: options.file,\n level: \"warn\",\n message: dynamicFormActionInferenceMessage,\n });\n }\n }\n\n return { diagnostics, references };\n}\n\nasync function collectBuildBoundaryGraphServerActions(options: {\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n source: string;\n sourceHash: string;\n}): Promise<Map<string, InferredServerActionExpressionReference>> {\n const graph = await analyzeBoundaryGraph({\n entries: [{ file: options.file, kind: \"route-page\" }],\n readModule: (file) => (file === options.file ? options.source : options.files[file]),\n resolveModule: ({ importer, source }) => options.resolveSourceImport(importer, source),\n });\n const references = new Map<string, InferredServerActionExpressionReference>();\n\n for (const action of graph.serverActions) {\n const reference = {\n end: action.end,\n exportName: action.exportName,\n expression: action.expression,\n expressionEnd: action.expressionEnd,\n expressionStart: action.expressionStart,\n inferred: action.inferred,\n moduleId: moduleIdForBuildFile(action.moduleFile, options.relativeRoutesDir),\n sourceHash: options.sourceHash,\n start: action.start,\n };\n references.set(formActionOccurrenceKey(reference), reference);\n }\n\n return references;\n}\n\ntype RuntimeResolveResult =\n | { kind: \"dynamic\" }\n | { kind: \"resolved\"; reference: InferredServerActionReference }\n | { kind: \"unresolved\" };\n\ntype BuildResolveResult =\n | { kind: \"dynamic\" }\n | { kind: \"resolved\"; reference: InferredServerActionReference }\n | { kind: \"unresolved\" };\n\nasync function resolveRuntimeActionExpression(options: {\n appDir: string;\n checker: Ts.TypeChecker;\n expression: Ts.Expression;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n seen: Set<Ts.Node>;\n}): Promise<RuntimeResolveResult> {\n const expression = unwrapExpression(options.expression);\n\n if (options.seen.has(expression)) {\n return { kind: \"unresolved\" };\n }\n\n options.seen.add(expression);\n\n if (ts.isIdentifier(expression)) {\n return await resolveRuntimeIdentifier({ ...options, expression });\n }\n\n if (ts.isPropertyAccessExpression(expression)) {\n return await resolveRuntimePropertyAccess({ ...options, expression });\n }\n\n if (ts.isConditionalExpression(expression)) {\n return { kind: \"dynamic\" };\n }\n\n return { kind: \"unresolved\" };\n}\n\nasync function resolveRuntimeIdentifier(options: {\n appDir: string;\n checker: Ts.TypeChecker;\n expression: Ts.Identifier;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n seen: Set<Ts.Node>;\n}): Promise<RuntimeResolveResult> {\n const symbol = options.checker.getSymbolAtLocation(options.expression);\n\n if (symbol === undefined) {\n return { kind: \"unresolved\" };\n }\n\n for (const declaration of symbol.declarations ?? []) {\n if (ts.isImportSpecifier(declaration)) {\n return await referenceFromRuntimeImportSpecifier(options, declaration);\n }\n\n if (ts.isVariableDeclaration(declaration)) {\n if (declaration.initializer === undefined) {\n continue;\n }\n\n return await resolveRuntimeActionExpression({\n ...options,\n expression: declaration.initializer,\n });\n }\n }\n\n const aliased = aliasTargetSymbol(options.checker, symbol);\n\n if (aliased !== undefined) {\n const reference = await referenceFromRuntimeSymbolDeclaration(options, aliased);\n\n if (reference !== undefined) {\n return { kind: \"resolved\", reference };\n }\n }\n\n return { kind: \"unresolved\" };\n}\n\nasync function resolveRuntimePropertyAccess(options: {\n appDir: string;\n checker: Ts.TypeChecker;\n expression: Ts.PropertyAccessExpression;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n seen: Set<Ts.Node>;\n}): Promise<RuntimeResolveResult> {\n const object = unwrapExpression(options.expression.expression);\n\n if (!ts.isIdentifier(object)) {\n return { kind: \"unresolved\" };\n }\n\n const symbol = options.checker.getSymbolAtLocation(object);\n\n for (const declaration of symbol?.declarations ?? []) {\n if (!ts.isVariableDeclaration(declaration) || declaration.initializer === undefined) {\n continue;\n }\n\n const initializer = unwrapExpression(declaration.initializer);\n\n if (!ts.isObjectLiteralExpression(initializer)) {\n continue;\n }\n\n const property = initializer.properties.find((candidate) =>\n objectLiteralPropertyName(candidate) === options.expression.name.text,\n );\n\n if (property === undefined) {\n continue;\n }\n\n if (ts.isShorthandPropertyAssignment(property)) {\n return await resolveRuntimeSymbol(\n options,\n options.checker.getShorthandAssignmentValueSymbol(property),\n );\n }\n\n if (ts.isPropertyAssignment(property)) {\n return await resolveRuntimeActionExpression({\n ...options,\n expression: property.initializer,\n });\n }\n\n return { kind: \"dynamic\" };\n }\n\n return { kind: \"unresolved\" };\n}\n\nasync function resolveRuntimeSymbol(\n options: {\n appDir: string;\n checker: Ts.TypeChecker;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n },\n symbol: Ts.Symbol | undefined,\n): Promise<RuntimeResolveResult> {\n if (symbol === undefined) {\n return { kind: \"unresolved\" };\n }\n\n for (const declaration of symbol.declarations ?? []) {\n if (ts.isImportSpecifier(declaration)) {\n return await referenceFromRuntimeImportSpecifier(options, declaration);\n }\n }\n\n const aliased = aliasTargetSymbol(options.checker, symbol);\n\n if (aliased === undefined) {\n return { kind: \"unresolved\" };\n }\n\n const reference = await referenceFromRuntimeSymbolDeclaration(options, aliased);\n\n return reference === undefined ? { kind: \"unresolved\" } : { kind: \"resolved\", reference };\n}\n\nasync function referenceFromRuntimeImportSpecifier(\n options: {\n appDir: string;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n },\n declaration: Ts.ImportSpecifier,\n): Promise<RuntimeResolveResult> {\n const importDeclaration = declaration.parent.parent.parent;\n const source = importDeclaration.moduleSpecifier;\n\n if (!ts.isStringLiteral(source) || !source.text.startsWith(\".\")) {\n return { kind: \"unresolved\" };\n }\n\n const file = await options.fileSystem.resolveSourceFile(dirname(options.pageFile), source.text);\n\n if (file === undefined) {\n return { kind: \"unresolved\" };\n }\n\n return {\n kind: \"resolved\",\n reference: {\n exportName: declaration.propertyName?.text ?? declaration.name.text,\n inferred: !(await options.fileSystem.isUseServerFile(file)),\n moduleId: moduleIdForFile(options.appDir, file),\n },\n };\n}\n\nasync function referenceFromRuntimeSymbolDeclaration(\n options: {\n appDir: string;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n },\n symbol: Ts.Symbol,\n): Promise<InferredServerActionReference | undefined> {\n const declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];\n\n if (declaration === undefined) {\n return undefined;\n }\n\n const file = declaration.getSourceFile().fileName;\n\n if (file === options.pageFile || !isInsideAppDir(options.appDir, file)) {\n return undefined;\n }\n\n return {\n exportName: symbol.getName(),\n inferred: !(await options.fileSystem.isUseServerFile(file)),\n moduleId: moduleIdForFile(options.appDir, file),\n };\n}\n\nfunction resolveBuildActionExpression(options: {\n checker: Ts.TypeChecker;\n expression: Ts.Expression;\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n seen: Set<Ts.Node>;\n}): BuildResolveResult {\n const expression = unwrapExpression(options.expression);\n\n if (options.seen.has(expression)) {\n return { kind: \"unresolved\" };\n }\n\n options.seen.add(expression);\n\n if (ts.isIdentifier(expression)) {\n return resolveBuildIdentifier({ ...options, expression });\n }\n\n if (ts.isPropertyAccessExpression(expression)) {\n return resolveBuildPropertyAccess({ ...options, expression });\n }\n\n if (ts.isConditionalExpression(expression)) {\n return { kind: \"dynamic\" };\n }\n\n return { kind: \"unresolved\" };\n}\n\nfunction resolveBuildIdentifier(options: {\n checker: Ts.TypeChecker;\n expression: Ts.Identifier;\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n seen: Set<Ts.Node>;\n}): BuildResolveResult {\n const symbol = options.checker.getSymbolAtLocation(options.expression);\n\n if (symbol === undefined) {\n return { kind: \"unresolved\" };\n }\n\n for (const declaration of symbol.declarations ?? []) {\n if (ts.isImportSpecifier(declaration)) {\n return referenceFromBuildImportSpecifier(options, declaration);\n }\n\n if (ts.isVariableDeclaration(declaration)) {\n if (declaration.initializer === undefined) {\n continue;\n }\n\n return resolveBuildActionExpression({\n ...options,\n expression: declaration.initializer,\n });\n }\n }\n\n return { kind: \"unresolved\" };\n}\n\nfunction resolveBuildPropertyAccess(options: {\n checker: Ts.TypeChecker;\n expression: Ts.PropertyAccessExpression;\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n seen: Set<Ts.Node>;\n}): BuildResolveResult {\n const object = unwrapExpression(options.expression.expression);\n\n if (!ts.isIdentifier(object)) {\n return { kind: \"unresolved\" };\n }\n\n const symbol = options.checker.getSymbolAtLocation(object);\n\n for (const declaration of symbol?.declarations ?? []) {\n if (!ts.isVariableDeclaration(declaration) || declaration.initializer === undefined) {\n continue;\n }\n\n const initializer = unwrapExpression(declaration.initializer);\n\n if (!ts.isObjectLiteralExpression(initializer)) {\n continue;\n }\n\n const property = initializer.properties.find((candidate) =>\n objectLiteralPropertyName(candidate) === options.expression.name.text,\n );\n\n if (property === undefined) {\n continue;\n }\n\n if (ts.isShorthandPropertyAssignment(property)) {\n return resolveBuildSymbol(options, options.checker.getShorthandAssignmentValueSymbol(property));\n }\n\n if (ts.isPropertyAssignment(property)) {\n return resolveBuildActionExpression({\n ...options,\n expression: property.initializer,\n });\n }\n\n return { kind: \"dynamic\" };\n }\n\n return { kind: \"unresolved\" };\n}\n\nfunction resolveBuildSymbol(\n options: {\n checker: Ts.TypeChecker;\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n },\n symbol: Ts.Symbol | undefined,\n): BuildResolveResult {\n if (symbol === undefined) {\n return { kind: \"unresolved\" };\n }\n\n for (const declaration of symbol.declarations ?? []) {\n if (ts.isImportSpecifier(declaration)) {\n return referenceFromBuildImportSpecifier(options, declaration);\n }\n }\n\n return { kind: \"unresolved\" };\n}\n\nfunction referenceFromBuildImportSpecifier(\n options: {\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n },\n declaration: Ts.ImportSpecifier,\n): BuildResolveResult {\n const importDeclaration = declaration.parent.parent.parent;\n const source = importDeclaration.moduleSpecifier;\n\n if (!ts.isStringLiteral(source) || !source.text.startsWith(\".\")) {\n return { kind: \"unresolved\" };\n }\n\n const localFile = options.resolveSourceImport(options.file, source.text);\n\n if (localFile === undefined) {\n return { kind: \"unresolved\" };\n }\n\n const sourceCode = options.files[localFile];\n\n if (sourceCode === undefined) {\n return { kind: \"unresolved\" };\n }\n\n return {\n kind: \"resolved\",\n reference: {\n exportName: declaration.propertyName?.text ?? declaration.name.text,\n inferred: !hasUseServerDirectiveInSource({ code: sourceCode, filename: localFile }),\n moduleId: moduleIdForBuildFile(localFile, options.relativeRoutesDir),\n },\n };\n}\n\nfunction aliasTargetSymbol(checker: Ts.TypeChecker, symbol: Ts.Symbol): Ts.Symbol | undefined {\n if ((symbol.flags & ts.SymbolFlags.Alias) === 0) {\n return undefined;\n }\n\n return checker.getAliasedSymbol(symbol);\n}\n\nfunction findExpressionAt(\n sourceFile: Ts.SourceFile,\n reference: FormActionExpressionReference,\n): Ts.Expression | undefined {\n let found: Ts.Expression | undefined;\n\n const visit = (node: Ts.Node): void => {\n if (found !== undefined) {\n return;\n }\n\n if (\n ts.isExpression(node) &&\n node.getStart(sourceFile) === reference.expressionStart &&\n node.getEnd() === reference.expressionEnd\n ) {\n found = node;\n return;\n }\n\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return found;\n}\n\nfunction objectLiteralPropertyName(property: Ts.ObjectLiteralElementLike): string | undefined {\n if (\n ts.isShorthandPropertyAssignment(property) ||\n ts.isPropertyAssignment(property) ||\n ts.isMethodDeclaration(property)\n ) {\n return propertyNameText(property.name);\n }\n\n return undefined;\n}\n\nfunction propertyNameText(name: Ts.PropertyName): string | undefined {\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n return name.text;\n }\n\n return undefined;\n}\n\nfunction unwrapExpression(expression: Ts.Expression): Ts.Expression {\n let current = expression;\n\n while (\n ts.isParenthesizedExpression(current) ||\n ts.isAsExpression(current) ||\n ts.isSatisfiesExpression(current) ||\n ts.isTypeAssertionExpression(current) ||\n ts.isNonNullExpression(current)\n ) {\n current = current.expression;\n }\n\n return current;\n}\n\nfunction moduleIdForFile(appDir: string, file: string): string {\n return relative(appDir, file).split(sep).join(\"/\");\n}\n\nfunction isInsideAppDir(appDir: string, file: string): boolean {\n const relativePath = relative(appDir, file);\n\n return relativePath === \"\" || (!relativePath.startsWith(\"..\") && !relativePath.startsWith(\"/\"));\n}\n\nfunction moduleIdForBuildFile(file: string, relativeRoutesDir: string): string {\n return relativeRoutesDir === \"\" ? file : file.slice(relativeRoutesDir.length + 1);\n}\n\nfunction createBuildProgram(\n file: string,\n files: Record<string, string>,\n source: string,\n): Ts.Program {\n const compilerOptions = defaultCompilerOptions();\n const defaultHost = ts.createCompilerHost(compilerOptions, true);\n const host: Ts.CompilerHost = {\n ...defaultHost,\n fileExists: (filename) => filename === file || files[filename] !== undefined,\n getSourceFile: (filename, languageVersion) => {\n const fileSource = filename === file ? source : files[filename];\n\n if (fileSource !== undefined) {\n return ts.createSourceFile(filename, fileSource, languageVersion, true);\n }\n\n return defaultHost.getSourceFile(filename, languageVersion);\n },\n readFile: (filename) => (filename === file ? source : files[filename]),\n };\n\n return ts.createProgram({\n host,\n options: compilerOptions,\n rootNames: [file],\n });\n}\n\nfunction createRuntimeProgramHost(options: {\n code: string;\n compilerOptions: Ts.CompilerOptions;\n pageFile: string;\n}): Ts.CompilerHost {\n const defaultHost = ts.createCompilerHost(options.compilerOptions, true);\n\n return {\n ...defaultHost,\n fileExists: (filename) => filename === options.pageFile || defaultHost.fileExists(filename),\n getSourceFile: (filename, languageVersion) => {\n if (filename === options.pageFile) {\n return ts.createSourceFile(filename, options.code, languageVersion, true);\n }\n\n return defaultHost.getSourceFile(filename, languageVersion);\n },\n readFile: (filename) =>\n filename === options.pageFile ? options.code : defaultHost.readFile(filename),\n };\n}\n\nfunction defaultCompilerOptions(): Ts.CompilerOptions {\n return {\n allowJs: true,\n jsx: ts.JsxEmit.ReactJSX,\n module: ts.ModuleKind.NodeNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n noEmit: true,\n target: ts.ScriptTarget.ES2022,\n };\n}\n\nasync function loadTypeScript(): Promise<void> {\n if (typescriptLoaded) {\n return;\n }\n\n ts = await import(\"typescript\");\n typescriptLoaded = true;\n}\n\nexport function __readServerActionInferenceTypeScriptLoadedForTests(): boolean {\n return typescriptLoaded;\n}\n\nexport function __resetServerActionInferenceTypeScriptForTests(): void {\n ts = undefined as unknown as typeof Ts;\n typescriptLoaded = false;\n}\n\nfunction formActionOccurrenceKey(reference: {\n end: number;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n start: number;\n}): string {\n return [\n reference.start,\n reference.end,\n reference.expressionStart,\n reference.expressionEnd,\n reference.expression,\n ].join(\":\");\n}\n\nfunction formActionSourceHash(code: string): string {\n return createHash(\"sha256\").update(code).digest(\"base64url\");\n}\n\nexport function hasUseServerDirectiveInSource(input: {\n code: string;\n filename: string;\n}): boolean {\n return hasModuleDirective({\n code: input.code,\n directive: \"use server\",\n filename: input.filename,\n });\n}\n"]}
1
+ {"version":3,"file":"server-action-inference.js","sourceRoot":"","sources":["../src/server-action-inference.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { stat } from \"node:fs/promises\";\nimport { dirname, relative, sep } from \"node:path\";\nimport {\n analyzeBoundaryGraph,\n collectFormActionExpressionReferences,\n hasModuleDirective,\n type FormActionExpressionReference,\n} from \"@reckona/mreact-compiler\";\nimport type * as Ts from \"typescript\";\n\nlet ts = undefined as unknown as typeof Ts;\nlet typescriptLoaded = false;\nconst runtimeInferenceCache = new Map<string, RuntimeInferenceCacheEntry>();\nconst maxRuntimeInferenceCacheEntries = 512;\n\nexport interface InferredServerActionReference {\n exportName: string;\n inferred: boolean;\n moduleId: string;\n}\n\nexport interface InferredServerActionExpressionReference\n extends InferredServerActionReference {\n end: number;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n sourceHash: string;\n start: number;\n}\n\nexport interface ServerActionInferenceDiagnostic {\n code: typeof dynamicFormActionInferenceCode;\n filename: string;\n level: \"warn\";\n message: string;\n}\n\nexport interface RuntimeServerActionInferenceFileSystem {\n isUseServerFile(file: string): Promise<boolean>;\n resolveSourceFile(directory: string, source: string): Promise<string | undefined>;\n}\n\nexport const dynamicFormActionInferenceCode =\n \"MR_SERVER_ACTION_INFERENCE_DYNAMIC_FORM_ACTION\";\n\nconst dynamicFormActionInferenceMessage =\n \"mreact could not infer a single server action from this form action expression. Pass the action function directly or use an explicit escape hatch.\";\n\nexport async function collectRuntimeInferredServerActions(options: {\n appDir: string;\n code: string;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n}): Promise<{\n diagnostics: ServerActionInferenceDiagnostic[];\n references: Map<string, InferredServerActionReference>;\n}> {\n const formReferences = collectFormActionExpressionReferences({\n code: options.code,\n filename: options.pageFile,\n });\n\n if (formReferences.length === 0) {\n return { diagnostics: [], references: new Map() };\n }\n\n const sourceHash = formActionSourceHash(options.code);\n const cacheKey = `${options.appDir}\\0${options.pageFile}\\0${sourceHash}`;\n const cached = runtimeInferenceCache.get(cacheKey);\n if (cached !== undefined && (await runtimeInferenceCacheEntryIsFresh(cached))) {\n return {\n diagnostics: cached.diagnostics.map((diagnostic) => ({ ...diagnostic })),\n references: new Map(cached.references),\n };\n }\n\n await loadTypeScript();\n const program = ts.createProgram({\n host: createRuntimeProgramHost({\n code: options.code,\n compilerOptions: defaultCompilerOptions(),\n pageFile: options.pageFile,\n }),\n options: {\n allowJs: true,\n jsx: ts.JsxEmit.ReactJSX,\n module: ts.ModuleKind.NodeNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n noEmit: true,\n target: ts.ScriptTarget.ES2022,\n },\n rootNames: [options.pageFile],\n });\n const checker = program.getTypeChecker();\n const sourceFile = program.getSourceFile(options.pageFile);\n\n if (sourceFile === undefined) {\n return { diagnostics: [], references: new Map() };\n }\n\n const diagnostics: ServerActionInferenceDiagnostic[] = [];\n const references = new Map<string, InferredServerActionReference>();\n\n for (const formReference of formReferences) {\n const expression = findExpressionAt(sourceFile, formReference);\n\n if (expression === undefined) {\n continue;\n }\n\n const resolved = await resolveRuntimeActionExpression({\n appDir: options.appDir,\n checker,\n expression,\n fileSystem: options.fileSystem,\n pageFile: options.pageFile,\n seen: new Set(),\n });\n\n if (resolved.kind === \"resolved\") {\n references.set(formActionOccurrenceKey(formReference), resolved.reference);\n continue;\n }\n\n if (resolved.kind === \"dynamic\") {\n diagnostics.push({\n code: dynamicFormActionInferenceCode,\n filename: options.pageFile,\n level: \"warn\",\n message: dynamicFormActionInferenceMessage,\n });\n }\n }\n\n const dependencies = await runtimeProgramDependencyStats({\n appDir: options.appDir,\n pageFile: options.pageFile,\n program,\n });\n setRuntimeInferenceCacheEntry(cacheKey, {\n dependencies,\n diagnostics: diagnostics.map((diagnostic) => ({ ...diagnostic })),\n references: new Map(references),\n });\n\n return { diagnostics, references };\n}\n\nexport async function collectBuildInferredServerActions(options: {\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n source: string;\n}): Promise<{\n diagnostics: ServerActionInferenceDiagnostic[];\n references: InferredServerActionExpressionReference[];\n}> {\n const formReferences = collectFormActionExpressionReferences({\n code: options.source,\n filename: options.file,\n });\n\n if (formReferences.length === 0) {\n return { diagnostics: [], references: [] };\n }\n\n await loadTypeScript();\n const program = createBuildProgram(options.file, options.files, options.source);\n const checker = program.getTypeChecker();\n const sourceFile = program.getSourceFile(options.file);\n\n if (sourceFile === undefined) {\n return { diagnostics: [], references: [] };\n }\n\n const diagnostics: ServerActionInferenceDiagnostic[] = [];\n const references: InferredServerActionExpressionReference[] = [];\n const sourceHash = formActionSourceHash(options.source);\n const graphReferences = await collectBuildBoundaryGraphServerActions({\n file: options.file,\n files: options.files,\n relativeRoutesDir: options.relativeRoutesDir,\n resolveSourceImport: options.resolveSourceImport,\n source: options.source,\n sourceHash,\n });\n\n for (const formReference of formReferences) {\n const expression = findExpressionAt(sourceFile, formReference);\n\n if (expression === undefined) {\n continue;\n }\n\n const resolved = resolveBuildActionExpression({\n checker,\n expression,\n file: options.file,\n files: options.files,\n relativeRoutesDir: options.relativeRoutesDir,\n resolveSourceImport: options.resolveSourceImport,\n seen: new Set(),\n });\n\n if (resolved.kind === \"resolved\") {\n references.push({\n ...resolved.reference,\n end: formReference.end,\n expression: formReference.expression,\n expressionEnd: formReference.expressionEnd,\n expressionStart: formReference.expressionStart,\n sourceHash,\n start: formReference.start,\n });\n continue;\n }\n\n const graphReference = graphReferences.get(formActionOccurrenceKey(formReference));\n\n if (graphReference !== undefined) {\n references.push(graphReference);\n continue;\n }\n\n if (resolved.kind === \"dynamic\") {\n diagnostics.push({\n code: dynamicFormActionInferenceCode,\n filename: options.file,\n level: \"warn\",\n message: dynamicFormActionInferenceMessage,\n });\n }\n }\n\n return { diagnostics, references };\n}\n\nasync function collectBuildBoundaryGraphServerActions(options: {\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n source: string;\n sourceHash: string;\n}): Promise<Map<string, InferredServerActionExpressionReference>> {\n const graph = await analyzeBoundaryGraph({\n entries: [{ file: options.file, kind: \"route-page\" }],\n readModule: (file) => (file === options.file ? options.source : options.files[file]),\n resolveModule: ({ importer, source }) => options.resolveSourceImport(importer, source),\n });\n const references = new Map<string, InferredServerActionExpressionReference>();\n\n for (const action of graph.serverActions) {\n const reference = {\n end: action.end,\n exportName: action.exportName,\n expression: action.expression,\n expressionEnd: action.expressionEnd,\n expressionStart: action.expressionStart,\n inferred: action.inferred,\n moduleId: moduleIdForBuildFile(action.moduleFile, options.relativeRoutesDir),\n sourceHash: options.sourceHash,\n start: action.start,\n };\n references.set(formActionOccurrenceKey(reference), reference);\n }\n\n return references;\n}\n\ntype RuntimeResolveResult =\n | { kind: \"dynamic\" }\n | { kind: \"resolved\"; reference: InferredServerActionReference }\n | { kind: \"unresolved\" };\n\ntype BuildResolveResult =\n | { kind: \"dynamic\" }\n | { kind: \"resolved\"; reference: InferredServerActionReference }\n | { kind: \"unresolved\" };\n\nasync function resolveRuntimeActionExpression(options: {\n appDir: string;\n checker: Ts.TypeChecker;\n expression: Ts.Expression;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n seen: Set<Ts.Node>;\n}): Promise<RuntimeResolveResult> {\n const expression = unwrapExpression(options.expression);\n\n if (options.seen.has(expression)) {\n return { kind: \"unresolved\" };\n }\n\n options.seen.add(expression);\n\n if (ts.isIdentifier(expression)) {\n return await resolveRuntimeIdentifier({ ...options, expression });\n }\n\n if (ts.isPropertyAccessExpression(expression)) {\n return await resolveRuntimePropertyAccess({ ...options, expression });\n }\n\n if (ts.isConditionalExpression(expression)) {\n return { kind: \"dynamic\" };\n }\n\n return { kind: \"unresolved\" };\n}\n\nasync function resolveRuntimeIdentifier(options: {\n appDir: string;\n checker: Ts.TypeChecker;\n expression: Ts.Identifier;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n seen: Set<Ts.Node>;\n}): Promise<RuntimeResolveResult> {\n const symbol = options.checker.getSymbolAtLocation(options.expression);\n\n if (symbol === undefined) {\n return { kind: \"unresolved\" };\n }\n\n for (const declaration of symbol.declarations ?? []) {\n if (ts.isImportSpecifier(declaration)) {\n return await referenceFromRuntimeImportSpecifier(options, declaration);\n }\n\n if (ts.isVariableDeclaration(declaration)) {\n if (declaration.initializer === undefined) {\n continue;\n }\n\n return await resolveRuntimeActionExpression({\n ...options,\n expression: declaration.initializer,\n });\n }\n }\n\n const aliased = aliasTargetSymbol(options.checker, symbol);\n\n if (aliased !== undefined) {\n const reference = await referenceFromRuntimeSymbolDeclaration(options, aliased);\n\n if (reference !== undefined) {\n return { kind: \"resolved\", reference };\n }\n }\n\n return { kind: \"unresolved\" };\n}\n\nasync function resolveRuntimePropertyAccess(options: {\n appDir: string;\n checker: Ts.TypeChecker;\n expression: Ts.PropertyAccessExpression;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n seen: Set<Ts.Node>;\n}): Promise<RuntimeResolveResult> {\n const object = unwrapExpression(options.expression.expression);\n\n if (!ts.isIdentifier(object)) {\n return { kind: \"unresolved\" };\n }\n\n const symbol = options.checker.getSymbolAtLocation(object);\n\n for (const declaration of symbol?.declarations ?? []) {\n if (!ts.isVariableDeclaration(declaration) || declaration.initializer === undefined) {\n continue;\n }\n\n const initializer = unwrapExpression(declaration.initializer);\n\n if (!ts.isObjectLiteralExpression(initializer)) {\n continue;\n }\n\n const property = initializer.properties.find((candidate) =>\n objectLiteralPropertyName(candidate) === options.expression.name.text,\n );\n\n if (property === undefined) {\n continue;\n }\n\n if (ts.isShorthandPropertyAssignment(property)) {\n return await resolveRuntimeSymbol(\n options,\n options.checker.getShorthandAssignmentValueSymbol(property),\n );\n }\n\n if (ts.isPropertyAssignment(property)) {\n return await resolveRuntimeActionExpression({\n ...options,\n expression: property.initializer,\n });\n }\n\n return { kind: \"dynamic\" };\n }\n\n return { kind: \"unresolved\" };\n}\n\nasync function resolveRuntimeSymbol(\n options: {\n appDir: string;\n checker: Ts.TypeChecker;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n },\n symbol: Ts.Symbol | undefined,\n): Promise<RuntimeResolveResult> {\n if (symbol === undefined) {\n return { kind: \"unresolved\" };\n }\n\n for (const declaration of symbol.declarations ?? []) {\n if (ts.isImportSpecifier(declaration)) {\n return await referenceFromRuntimeImportSpecifier(options, declaration);\n }\n }\n\n const aliased = aliasTargetSymbol(options.checker, symbol);\n\n if (aliased === undefined) {\n return { kind: \"unresolved\" };\n }\n\n const reference = await referenceFromRuntimeSymbolDeclaration(options, aliased);\n\n return reference === undefined ? { kind: \"unresolved\" } : { kind: \"resolved\", reference };\n}\n\nasync function referenceFromRuntimeImportSpecifier(\n options: {\n appDir: string;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n },\n declaration: Ts.ImportSpecifier,\n): Promise<RuntimeResolveResult> {\n const importDeclaration = declaration.parent.parent.parent;\n const source = importDeclaration.moduleSpecifier;\n\n if (!ts.isStringLiteral(source) || !source.text.startsWith(\".\")) {\n return { kind: \"unresolved\" };\n }\n\n const file = await options.fileSystem.resolveSourceFile(dirname(options.pageFile), source.text);\n\n if (file === undefined) {\n return { kind: \"unresolved\" };\n }\n\n return {\n kind: \"resolved\",\n reference: {\n exportName: declaration.propertyName?.text ?? declaration.name.text,\n inferred: !(await options.fileSystem.isUseServerFile(file)),\n moduleId: moduleIdForFile(options.appDir, file),\n },\n };\n}\n\nasync function referenceFromRuntimeSymbolDeclaration(\n options: {\n appDir: string;\n fileSystem: RuntimeServerActionInferenceFileSystem;\n pageFile: string;\n },\n symbol: Ts.Symbol,\n): Promise<InferredServerActionReference | undefined> {\n const declaration = symbol.valueDeclaration ?? symbol.declarations?.[0];\n\n if (declaration === undefined) {\n return undefined;\n }\n\n const file = declaration.getSourceFile().fileName;\n\n if (file === options.pageFile || !isInsideAppDir(options.appDir, file)) {\n return undefined;\n }\n\n return {\n exportName: symbol.getName(),\n inferred: !(await options.fileSystem.isUseServerFile(file)),\n moduleId: moduleIdForFile(options.appDir, file),\n };\n}\n\nfunction resolveBuildActionExpression(options: {\n checker: Ts.TypeChecker;\n expression: Ts.Expression;\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n seen: Set<Ts.Node>;\n}): BuildResolveResult {\n const expression = unwrapExpression(options.expression);\n\n if (options.seen.has(expression)) {\n return { kind: \"unresolved\" };\n }\n\n options.seen.add(expression);\n\n if (ts.isIdentifier(expression)) {\n return resolveBuildIdentifier({ ...options, expression });\n }\n\n if (ts.isPropertyAccessExpression(expression)) {\n return resolveBuildPropertyAccess({ ...options, expression });\n }\n\n if (ts.isConditionalExpression(expression)) {\n return { kind: \"dynamic\" };\n }\n\n return { kind: \"unresolved\" };\n}\n\nfunction resolveBuildIdentifier(options: {\n checker: Ts.TypeChecker;\n expression: Ts.Identifier;\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n seen: Set<Ts.Node>;\n}): BuildResolveResult {\n const symbol = options.checker.getSymbolAtLocation(options.expression);\n\n if (symbol === undefined) {\n return { kind: \"unresolved\" };\n }\n\n for (const declaration of symbol.declarations ?? []) {\n if (ts.isImportSpecifier(declaration)) {\n return referenceFromBuildImportSpecifier(options, declaration);\n }\n\n if (ts.isVariableDeclaration(declaration)) {\n if (declaration.initializer === undefined) {\n continue;\n }\n\n return resolveBuildActionExpression({\n ...options,\n expression: declaration.initializer,\n });\n }\n }\n\n return { kind: \"unresolved\" };\n}\n\nfunction resolveBuildPropertyAccess(options: {\n checker: Ts.TypeChecker;\n expression: Ts.PropertyAccessExpression;\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n seen: Set<Ts.Node>;\n}): BuildResolveResult {\n const object = unwrapExpression(options.expression.expression);\n\n if (!ts.isIdentifier(object)) {\n return { kind: \"unresolved\" };\n }\n\n const symbol = options.checker.getSymbolAtLocation(object);\n\n for (const declaration of symbol?.declarations ?? []) {\n if (!ts.isVariableDeclaration(declaration) || declaration.initializer === undefined) {\n continue;\n }\n\n const initializer = unwrapExpression(declaration.initializer);\n\n if (!ts.isObjectLiteralExpression(initializer)) {\n continue;\n }\n\n const property = initializer.properties.find((candidate) =>\n objectLiteralPropertyName(candidate) === options.expression.name.text,\n );\n\n if (property === undefined) {\n continue;\n }\n\n if (ts.isShorthandPropertyAssignment(property)) {\n return resolveBuildSymbol(options, options.checker.getShorthandAssignmentValueSymbol(property));\n }\n\n if (ts.isPropertyAssignment(property)) {\n return resolveBuildActionExpression({\n ...options,\n expression: property.initializer,\n });\n }\n\n return { kind: \"dynamic\" };\n }\n\n return { kind: \"unresolved\" };\n}\n\nfunction resolveBuildSymbol(\n options: {\n checker: Ts.TypeChecker;\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n },\n symbol: Ts.Symbol | undefined,\n): BuildResolveResult {\n if (symbol === undefined) {\n return { kind: \"unresolved\" };\n }\n\n for (const declaration of symbol.declarations ?? []) {\n if (ts.isImportSpecifier(declaration)) {\n return referenceFromBuildImportSpecifier(options, declaration);\n }\n }\n\n return { kind: \"unresolved\" };\n}\n\nfunction referenceFromBuildImportSpecifier(\n options: {\n file: string;\n files: Record<string, string>;\n relativeRoutesDir: string;\n resolveSourceImport: (importer: string, source: string) => string | undefined;\n },\n declaration: Ts.ImportSpecifier,\n): BuildResolveResult {\n const importDeclaration = declaration.parent.parent.parent;\n const source = importDeclaration.moduleSpecifier;\n\n if (!ts.isStringLiteral(source) || !source.text.startsWith(\".\")) {\n return { kind: \"unresolved\" };\n }\n\n const localFile = options.resolveSourceImport(options.file, source.text);\n\n if (localFile === undefined) {\n return { kind: \"unresolved\" };\n }\n\n const sourceCode = options.files[localFile];\n\n if (sourceCode === undefined) {\n return { kind: \"unresolved\" };\n }\n\n return {\n kind: \"resolved\",\n reference: {\n exportName: declaration.propertyName?.text ?? declaration.name.text,\n inferred: !hasUseServerDirectiveInSource({ code: sourceCode, filename: localFile }),\n moduleId: moduleIdForBuildFile(localFile, options.relativeRoutesDir),\n },\n };\n}\n\nfunction aliasTargetSymbol(checker: Ts.TypeChecker, symbol: Ts.Symbol): Ts.Symbol | undefined {\n if ((symbol.flags & ts.SymbolFlags.Alias) === 0) {\n return undefined;\n }\n\n return checker.getAliasedSymbol(symbol);\n}\n\nfunction findExpressionAt(\n sourceFile: Ts.SourceFile,\n reference: FormActionExpressionReference,\n): Ts.Expression | undefined {\n let found: Ts.Expression | undefined;\n\n const visit = (node: Ts.Node): void => {\n if (found !== undefined) {\n return;\n }\n\n if (\n ts.isExpression(node) &&\n node.getStart(sourceFile) === reference.expressionStart &&\n node.getEnd() === reference.expressionEnd\n ) {\n found = node;\n return;\n }\n\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return found;\n}\n\nfunction objectLiteralPropertyName(property: Ts.ObjectLiteralElementLike): string | undefined {\n if (\n ts.isShorthandPropertyAssignment(property) ||\n ts.isPropertyAssignment(property) ||\n ts.isMethodDeclaration(property)\n ) {\n return propertyNameText(property.name);\n }\n\n return undefined;\n}\n\nfunction propertyNameText(name: Ts.PropertyName): string | undefined {\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n return name.text;\n }\n\n return undefined;\n}\n\nfunction unwrapExpression(expression: Ts.Expression): Ts.Expression {\n let current = expression;\n\n while (\n ts.isParenthesizedExpression(current) ||\n ts.isAsExpression(current) ||\n ts.isSatisfiesExpression(current) ||\n ts.isTypeAssertionExpression(current) ||\n ts.isNonNullExpression(current)\n ) {\n current = current.expression;\n }\n\n return current;\n}\n\nfunction moduleIdForFile(appDir: string, file: string): string {\n return relative(appDir, file).split(sep).join(\"/\");\n}\n\nfunction isInsideAppDir(appDir: string, file: string): boolean {\n const relativePath = relative(appDir, file);\n\n return relativePath === \"\" || (!relativePath.startsWith(\"..\") && !relativePath.startsWith(\"/\"));\n}\n\nfunction moduleIdForBuildFile(file: string, relativeRoutesDir: string): string {\n return relativeRoutesDir === \"\" ? file : file.slice(relativeRoutesDir.length + 1);\n}\n\nfunction createBuildProgram(\n file: string,\n files: Record<string, string>,\n source: string,\n): Ts.Program {\n const compilerOptions = defaultCompilerOptions();\n const defaultHost = ts.createCompilerHost(compilerOptions, true);\n const host: Ts.CompilerHost = {\n ...defaultHost,\n fileExists: (filename) => filename === file || files[filename] !== undefined,\n getSourceFile: (filename, languageVersion) => {\n const fileSource = filename === file ? source : files[filename];\n\n if (fileSource !== undefined) {\n return ts.createSourceFile(filename, fileSource, languageVersion, true);\n }\n\n return defaultHost.getSourceFile(filename, languageVersion);\n },\n readFile: (filename) => (filename === file ? source : files[filename]),\n };\n\n return ts.createProgram({\n host,\n options: compilerOptions,\n rootNames: [file],\n });\n}\n\nfunction createRuntimeProgramHost(options: {\n code: string;\n compilerOptions: Ts.CompilerOptions;\n pageFile: string;\n}): Ts.CompilerHost {\n const defaultHost = ts.createCompilerHost(options.compilerOptions, true);\n\n return {\n ...defaultHost,\n fileExists: (filename) => filename === options.pageFile || defaultHost.fileExists(filename),\n getSourceFile: (filename, languageVersion) => {\n if (filename === options.pageFile) {\n return ts.createSourceFile(filename, options.code, languageVersion, true);\n }\n\n return defaultHost.getSourceFile(filename, languageVersion);\n },\n readFile: (filename) =>\n filename === options.pageFile ? options.code : defaultHost.readFile(filename),\n };\n}\n\ninterface RuntimeInferenceCacheEntry {\n dependencies: readonly RuntimeInferenceDependency[];\n diagnostics: readonly ServerActionInferenceDiagnostic[];\n references: ReadonlyMap<string, InferredServerActionReference>;\n}\n\ninterface RuntimeInferenceDependency {\n file: string;\n mtimeMs: number;\n size: number;\n}\n\nasync function runtimeProgramDependencyStats(options: {\n appDir: string;\n pageFile: string;\n program: Ts.Program;\n}): Promise<RuntimeInferenceDependency[]> {\n const dependencies = options.program\n .getSourceFiles()\n .map((sourceFile) => sourceFile.fileName)\n .filter((file) => file !== options.pageFile && isInsideAppDir(options.appDir, file));\n const uniqueDependencies = [...new Set(dependencies)];\n\n return await Promise.all(\n uniqueDependencies.map(async (file) => {\n const stats = await stat(file);\n return { file, mtimeMs: stats.mtimeMs, size: stats.size };\n }),\n );\n}\n\nasync function runtimeInferenceCacheEntryIsFresh(\n entry: RuntimeInferenceCacheEntry,\n): Promise<boolean> {\n for (const dependency of entry.dependencies) {\n try {\n const stats = await stat(dependency.file);\n if (stats.mtimeMs !== dependency.mtimeMs || stats.size !== dependency.size) {\n return false;\n }\n } catch {\n return false;\n }\n }\n\n return true;\n}\n\nfunction setRuntimeInferenceCacheEntry(\n key: string,\n entry: RuntimeInferenceCacheEntry,\n): void {\n if (runtimeInferenceCache.size >= maxRuntimeInferenceCacheEntries) {\n const oldestKey = runtimeInferenceCache.keys().next().value;\n if (oldestKey !== undefined) {\n runtimeInferenceCache.delete(oldestKey);\n }\n }\n runtimeInferenceCache.set(key, entry);\n}\n\nfunction defaultCompilerOptions(): Ts.CompilerOptions {\n return {\n allowJs: true,\n jsx: ts.JsxEmit.ReactJSX,\n module: ts.ModuleKind.NodeNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n noEmit: true,\n target: ts.ScriptTarget.ES2022,\n };\n}\n\nasync function loadTypeScript(): Promise<void> {\n if (typescriptLoaded) {\n return;\n }\n\n ts = await import(\"typescript\");\n typescriptLoaded = true;\n}\n\nexport function __readServerActionInferenceTypeScriptLoadedForTests(): boolean {\n return typescriptLoaded;\n}\n\nexport function __resetServerActionInferenceTypeScriptForTests(): void {\n ts = undefined as unknown as typeof Ts;\n typescriptLoaded = false;\n runtimeInferenceCache.clear();\n}\n\nfunction formActionOccurrenceKey(reference: {\n end: number;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n start: number;\n}): string {\n return [\n reference.start,\n reference.end,\n reference.expressionStart,\n reference.expressionEnd,\n reference.expression,\n ].join(\":\");\n}\n\nfunction formActionSourceHash(code: string): string {\n return createHash(\"sha256\").update(code).digest(\"base64url\");\n}\n\nexport function hasUseServerDirectiveInSource(input: {\n code: string;\n filename: string;\n}): boolean {\n return hasModuleDirective({\n code: input.code,\n directive: \"use server\",\n filename: input.filename,\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,UAAU,EAEhB,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAoBhE,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIxE,MAAM,WAAW,8BAA+B,SAAQ,uBAAuB;IAC7E,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAC1C,UAAU,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACjD,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC,aAAa,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;IACzD,WAAW,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;CACnD;AAQD,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,UAAU,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACjD,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC,aAAa,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;CAC1D;AAmBD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CAqRrF;AAqBD,eAAO,MAAM,YAAY,kCAA4B,CAAC;AAoCtD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,OAAO,EAAE,GAC1B,wBAAwB,GAAG,SAAS,CActC;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,kBAAkB,CAc5B;AA4ED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAA;CAAO,GACjF,OAAO,CAAC,QAAQ,CAAC,CAuEnB"}
1
+ {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,UAAU,EAEhB,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAwBhE,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIxE,MAAM,WAAW,8BAA+B,SAAQ,uBAAuB;IAC7E,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAC1C,UAAU,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACjD,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC,aAAa,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;IACzD,WAAW,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;CACnD;AAQD,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,UAAU,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACjD,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC,aAAa,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;CAC1D;AAmBD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CAySrF;AAqBD,eAAO,MAAM,YAAY,kCAA4B,CAAC;AAoCtD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,OAAO,EAAE,GAC1B,wBAAwB,GAAG,SAAS,CActC;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,kBAAkB,CAc5B;AAyFD,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAA;CAAO,GACjF,OAAO,CAAC,QAAQ,CAAC,CAuEnB"}
package/dist/vite.js CHANGED
@@ -9,8 +9,8 @@ import { buildNavigationRuntimeBundle, buildClientRouteBundle, buildClientRouteE
9
9
  import { nodeRequestToWebRequest, sendResponse } from "./http.js";
10
10
  import { renderAppRequest } from "./render.js";
11
11
  import { stripRouteClientOnlyExports } from "./route-source.js";
12
- import { collectRouteCssHrefs, collectSpecialBoundaryFiles } from "./route-styles.js";
13
- import { scanAppRoutes } from "./routes.js";
12
+ import { collectRouteCssHrefs, collectSpecialBoundaryFiles, createCachedRouteSourceReader, } from "./route-styles.js";
13
+ import { createRouteMatcher, scanAppRoutes } from "./routes.js";
14
14
  import { resolveRequestHost } from "./serve.js";
15
15
  import { hasJsxSyntax } from "./source-jsx.js";
16
16
  import { workspacePackageFile } from "./workspace-packages.js";
@@ -117,6 +117,11 @@ export function createAppRouterVitePlugin(options) {
117
117
  userVitePlugins = routeTransformUserVitePlugins(userConfig.plugins);
118
118
  return {
119
119
  optimizeDeps: {
120
+ // Every client-importable mreact package must resolve through the
121
+ // same dev module graph. Prebundling any of them inlines a second
122
+ // reactive-core (and devtools) copy into the deps chunk, which
123
+ // silently breaks cross-package cell tracking, and also bypasses the
124
+ // react/react-dom alias resolution this plugin provides.
120
125
  exclude: [
121
126
  "react",
122
127
  "react-dom",
@@ -125,6 +130,21 @@ export function createAppRouterVitePlugin(options) {
125
130
  "react/jsx-dev-runtime",
126
131
  "react/jsx-runtime",
127
132
  "@reckona/mreact",
133
+ "@reckona/mreact-auth",
134
+ "@reckona/mreact-compat",
135
+ "@reckona/mreact-devtools",
136
+ "@reckona/mreact-dom",
137
+ "@reckona/mreact-forms",
138
+ "@reckona/mreact-next",
139
+ "@reckona/mreact-query",
140
+ "@reckona/mreact-reactive-core",
141
+ "@reckona/mreact-reactive-dom",
142
+ "@reckona/mreact-router",
143
+ "@reckona/mreact-scheduler",
144
+ "@reckona/mreact-shared",
145
+ "@reckona/mreact-store",
146
+ "@reckona/mreact-test-utils",
147
+ "@reckona/mreact-virtual",
128
148
  ],
129
149
  },
130
150
  };
@@ -348,6 +368,14 @@ async function handleAppRouterViteRequest(options, incoming, outgoing, next) {
348
368
  }
349
369
  const request = nodeRequestToWebRequest(incoming, origin);
350
370
  const routeTransformPlugins = options.navigationScanVitePlugins ?? options.vitePlugins;
371
+ const routes = await scanAppRoutes({ appDir: project.routesDir });
372
+ const routeMatcher = createRouteMatcher(routes);
373
+ const readRouteSource = createCachedRouteSourceReader();
374
+ const [clientStyles, clientStylesByFile, navigationScripts] = await Promise.all([
375
+ devRouteStyles(project, routes, readRouteSource),
376
+ devSpecialRouteStyles(project, readRouteSource),
377
+ devNavigationScripts(project.routesDir, routes, readRouteSource, options.clientRouteInferenceCache, routeTransformPlugins),
378
+ ]);
351
379
  await sendResponse(outgoing, await renderAppRequest({
352
380
  appDir: project.routesDir,
353
381
  define: options.define,
@@ -356,11 +384,14 @@ async function handleAppRouterViteRequest(options, incoming, outgoing, next) {
356
384
  allowedSourceDirs: project.allowedSourceDirs,
357
385
  projectRoot: project.projectRoot,
358
386
  },
359
- clientStyles: await devRouteStyles(project),
360
- clientStylesByFile: await devSpecialRouteStyles(project),
361
- navigationScripts: await devNavigationScripts(project.routesDir, options.clientRouteInferenceCache, routeTransformPlugins),
387
+ clientStyles,
388
+ clientStylesByFile,
389
+ clientRouteInferenceCache: options.clientRouteInferenceCache,
390
+ navigationScripts,
362
391
  request,
363
392
  routeCache: options.routeCache,
393
+ routeMatcher,
394
+ routes,
364
395
  serverActions: options.serverActions,
365
396
  vitePlugins: routeTransformPlugins,
366
397
  }));
@@ -536,8 +567,8 @@ function clientAssetBuildErrorResponse(filename, error) {
536
567
  headers: { "content-type": "text/javascript; charset=utf-8" },
537
568
  });
538
569
  }
539
- async function devRouteStyles(project) {
540
- const entries = await Promise.all((await scanAppRoutes({ appDir: project.routesDir })).map(async (route) => {
570
+ async function devRouteStyles(project, routes, readSource) {
571
+ const entries = await Promise.all(routes.map(async (route) => {
541
572
  if (route.kind !== "page") {
542
573
  return undefined;
543
574
  }
@@ -546,32 +577,37 @@ async function devRouteStyles(project) {
546
577
  hrefPrefix: devCssPrefix,
547
578
  pageFile: route.file,
548
579
  projectRoot: project.projectRoot,
580
+ readSource,
549
581
  });
550
582
  return hrefs.length === 0 ? undefined : [route.path, hrefs];
551
583
  }));
552
584
  const routeStyles = entries.filter((entry) => entry !== undefined);
553
585
  return new Map(routeStyles);
554
586
  }
555
- async function devSpecialRouteStyles(project) {
587
+ async function devSpecialRouteStyles(project, readSource) {
556
588
  const entries = await Promise.all((await collectSpecialBoundaryFiles(project.routesDir)).map(async (file) => {
557
589
  const hrefs = await collectRouteCssHrefs({
558
590
  appDir: project.routesDir,
559
591
  hrefPrefix: devCssPrefix,
560
592
  pageFile: file,
561
593
  projectRoot: project.projectRoot,
594
+ readSource,
562
595
  });
563
596
  return hrefs.length === 0 ? undefined : [file, hrefs];
564
597
  }));
565
598
  const routeStyles = entries.filter((entry) => entry !== undefined);
566
599
  return new Map(routeStyles);
567
600
  }
568
- async function devNavigationScripts(appDir, inferenceCache, vitePlugins) {
601
+ async function devNavigationScripts(appDir, routes, readSource, inferenceCache, vitePlugins) {
569
602
  const cache = inferenceCache ?? createClientRouteInferenceCache();
570
- const entries = await Promise.all((await scanAppRoutes({ appDir })).map(async (route) => {
603
+ const entries = await Promise.all(routes.map(async (route) => {
571
604
  if (route.kind !== "page") {
572
605
  return undefined;
573
606
  }
574
- const source = await readFile(route.file, "utf8");
607
+ const source = await readSource(route.file);
608
+ if (source === undefined) {
609
+ return undefined;
610
+ }
575
611
  const navigation = await resolveNavigationRuntime({
576
612
  appDir,
577
613
  cache,