? availableProviders[cache.provider]
: Array.isArray(availableProviders[cache.provider])
? availableProviders[cache.provider][0]
: availableProviders[cache.provider]?.driver,
},
importKind: "value",
});
}
const argsName = `args__${cache.name}`;
const cacheKey = {
type: "ArrayExpression",
elements: [
{
type: "Literal",
value: cache.name,
},
...(cache.tags
? cache.tags.split(",").map((tag) => ({
type: "Literal",
value: tag.trim(),
}))
: []),
],
};
cache.node.body.body = [
...(cache.params.length > 0 || cache.node.params.length > 0
? [
{
type: "VariableDeclaration",
kind: "let",
declarations: [
{
type: "VariableDeclarator",
id: {
type: "ArrayPattern",
elements: [
...cache.params.map((param) => ({
type: "Identifier",
name: param,
})),
...cache.node.params,
],
},
init: {
type: "Identifier",
name: argsName,
},
},
],
},
]
: []),
{
type: "ReturnStatement",
argument: {
type: "CallExpression",
callee: {
type: "Identifier",
name: "useCache",
},
arguments: [
{
...cacheKey,
elements: [
...cacheKey.elements,
{
type: "ArrayExpression",
elements: cache.node.params,
},
...(this.environment.mode !== "build"
? [
{
type: "Literal",
value: hash,
},
{
type: "ObjectExpression",
properties: [
{
type: "Property",
kind: "init",
key: {
type: "Identifier",
name: "__devtools__",
},
value: { type: "Literal", value: true },
},
{
type: "Property",
kind: "init",
key: { type: "Identifier", name: "file" },
value: {
type: "Literal",
value: cache._origFile ?? id,
},
},
{
type: "Property",
kind: "init",
key: { type: "Identifier", name: "line" },
value: {
type: "Literal",
value: cache._origLine ?? 0,
},
},
{
type: "Property",
kind: "init",
key: { type: "Identifier", name: "col" },
value: {
type: "Literal",
value: cache._origCol ?? 0,
},
},
{
type: "Property",
kind: "init",
key: { type: "Identifier", name: "fn" },
value: {
type: "Literal",
value:
cache.identifier ||
cache.node.id?.name ||
(cache.node.parent?.type ===
"VariableDeclarator"
? cache.node.parent.id?.name
: null) ||
(cache.node.parent?.type ===
"ExportDefaultDeclaration"
? "default"
: null) ||
"anonymous",
},
},
],
},
]
: []),
],
},
{
type: "FunctionExpression",
id: null,
generator: false,
async:
!!cache.node.async ||
!(cache.provider === "request" && isClient),
params: [],
body: {
type: "BlockStatement",
body: cache.node.body.body.filter(
(node) =>
!(
node.type === "ExpressionStatement" &&
node.directive === "use cache"
)
),
},
},
...(cache.ttl
? [{ type: "Literal", value: Number(cache.ttl) }]
: [{ type: "Identifier", name: "undefined" }]),
...(cache.provider
? [
{ type: "Identifier", name: "undefined" },
{
type: "ObjectExpression",
properties: [
{
type: "Property",
kind: "init",
key: {
type: "Identifier",
name: "name",
},
value: {
type: "Literal",
value: cache.provider,
raw: `"${cache.provider}"`,
},
},
{
type: "Property",
kind: "init",
key: {
type: "Identifier",
name: "driver",
},
value: {
type: "Identifier",
name: `__react_server_cache_driver_${cache.provider}__`,
},
},
{
type: "Property",
kind: "init",
key: {
type: "Identifier",
name: "driverPath",