@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.
- package/README.md +1 -1
- package/dist/actions.d.ts +1 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +32 -12
- package/dist/actions.js.map +1 -1
- package/dist/adapters/static.js +10 -4
- package/dist/adapters/static.js.map +1 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +28 -21
- package/dist/build.js.map +1 -1
- package/dist/cache.d.ts +2 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +23 -1
- package/dist/cache.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +49 -12
- package/dist/client.js.map +1 -1
- package/dist/dev-server.d.ts +1 -0
- package/dist/dev-server.d.ts.map +1 -1
- package/dist/dev-server.js +6 -4
- package/dist/dev-server.js.map +1 -1
- package/dist/link.js +17 -3
- package/dist/link.js.map +1 -1
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +10 -7
- package/dist/middleware.js.map +1 -1
- package/dist/multipart.d.ts +5 -0
- package/dist/multipart.d.ts.map +1 -1
- package/dist/multipart.js +24 -1
- package/dist/multipart.js.map +1 -1
- package/dist/native-route-matcher.d.ts +9 -0
- package/dist/native-route-matcher.d.ts.map +1 -1
- package/dist/native-route-matcher.js +23 -11
- package/dist/native-route-matcher.js.map +1 -1
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +8 -1
- package/dist/navigation.js.map +1 -1
- package/dist/render.d.ts +5 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +239 -95
- package/dist/render.js.map +1 -1
- package/dist/route-source.d.ts +3 -1
- package/dist/route-source.d.ts.map +1 -1
- package/dist/route-source.js +13 -11
- package/dist/route-source.js.map +1 -1
- package/dist/route-styles.d.ts +4 -0
- package/dist/route-styles.d.ts.map +1 -1
- package/dist/route-styles.js +15 -3
- package/dist/route-styles.js.map +1 -1
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +39 -9
- package/dist/serve.js.map +1 -1
- package/dist/server-action-inference.d.ts.map +1 -1
- package/dist/server-action-inference.js +57 -0
- package/dist/server-action-inference.js.map +1 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +47 -11
- package/dist/vite.js.map +1 -1
- package/package.json +11 -11
- package/src/actions.ts +44 -10
- package/src/adapters/static.ts +11 -4
- package/src/build.ts +28 -17
- package/src/cache.ts +33 -1
- package/src/client.ts +49 -12
- package/src/dev-server.ts +11 -4
- package/src/link.ts +24 -3
- package/src/middleware.ts +12 -7
- package/src/multipart.ts +32 -1
- package/src/native-route-matcher.ts +34 -13
- package/src/navigation.ts +11 -2
- package/src/render.ts +321 -113
- package/src/route-source.ts +14 -10
- package/src/route-styles.ts +28 -3
- package/src/serve.ts +68 -15
- package/src/server-action-inference.ts +86 -0
- 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"]}
|
package/dist/vite.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
360
|
-
clientStylesByFile
|
|
361
|
-
|
|
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(
|
|
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(
|
|
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
|
|
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,
|