@intlayer/chokidar
Version:
Scans and builds Intlayer declaration files into dictionaries based on Intlayer configuration.
1 lines • 13.3 kB
Source Map (JSON)
{"version":3,"file":"configManipulation.cjs","names":[],"sources":["../../../../src/init/utils/configManipulation.ts"],"sourcesContent":["import * as recast from 'recast';\n\nconst { builders: b, namedTypes: n } = recast.types;\n\nconst injectImport = (\n ast: any,\n isCJS: boolean,\n importName: string,\n source: string\n) => {\n const body = ast.program.body;\n const hasImport = body.some((stmt: any) => {\n if (isCJS) {\n return (\n n.VariableDeclaration.check(stmt) &&\n stmt.declarations.some(\n (decl: any) =>\n n.VariableDeclarator.check(decl) &&\n n.CallExpression.check(decl.init) &&\n n.Identifier.check(decl.init.callee) &&\n decl.init.callee.name === 'require' &&\n n.StringLiteral.check(decl.init.arguments[0]) &&\n decl.init.arguments[0].value === source\n )\n );\n }\n return (\n n.ImportDeclaration.check(stmt) &&\n (stmt.source.value === source ||\n stmt.specifiers.some(\n (spec: any) =>\n (n.ImportSpecifier.check(spec) &&\n spec.imported.name === importName) ||\n (n.ImportDefaultSpecifier.check(spec) &&\n spec.local?.name === importName)\n ))\n );\n });\n\n if (hasImport) return;\n\n const declaration = isCJS\n ? b.variableDeclaration('const', [\n b.variableDeclarator(\n b.identifier(`{ ${importName} }`),\n b.callExpression(b.identifier('require'), [b.stringLiteral(source)])\n ),\n ])\n : b.importDeclaration(\n [b.importSpecifier(b.identifier(importName))],\n b.stringLiteral(source)\n );\n\n ast.program.body.unshift(declaration);\n};\n\nconst updatePluginArray = (\n objExpr: any,\n propertyName: string,\n pluginName: string\n) => {\n if (\n !objExpr ||\n (objExpr.type !== 'ObjectExpression' && !n.ObjectExpression.check(objExpr))\n )\n return;\n\n let prop = objExpr.properties.find((p: any) => {\n if (!p?.key) return false;\n const keyName = p.key.name || p.key.value;\n return keyName === propertyName;\n }) as any;\n\n if (!prop) {\n prop = b.property(\n 'init',\n b.identifier(propertyName),\n b.arrayExpression([])\n );\n objExpr.properties.push(prop);\n }\n\n const arrayValue = prop.value;\n\n if (\n arrayValue &&\n (arrayValue.type === 'ArrayExpression' ||\n n.ArrayExpression.check(arrayValue))\n ) {\n const hasPlugin = arrayValue.elements.some((el: any) => {\n const callee = el?.callee;\n if (!callee) return false;\n const name = callee.name || callee.id?.name;\n return name === pluginName || name === 'il';\n });\n\n if (!hasPlugin) {\n arrayValue.elements.push(b.callExpression(b.identifier(pluginName), []));\n }\n }\n};\n\nconst genericRecastVisit = (\n ast: any,\n updateConfigObject: (obj: any) => void,\n callNames: string[] = ['defineConfig']\n) => {\n recast.visit(ast, {\n visitExportDefaultDeclaration(path) {\n const decl = path.node.declaration;\n\n if (n.ObjectExpression.check(decl)) {\n updateConfigObject(decl);\n } else if (\n n.CallExpression.check(decl) &&\n n.Identifier.check(decl.callee) &&\n callNames.includes(decl.callee.name)\n ) {\n if (n.ObjectExpression.check(decl.arguments[0])) {\n updateConfigObject(decl.arguments[0]);\n }\n } else if (n.Identifier.check(decl)) {\n const name = decl.name;\n ast.program.body.forEach((stmt: any) => {\n if (n.VariableDeclaration.check(stmt)) {\n stmt.declarations.forEach((vdecl: any) => {\n if (\n n.VariableDeclarator.check(vdecl) &&\n n.Identifier.check(vdecl.id) &&\n vdecl.id.name === name &&\n n.ObjectExpression.check(vdecl.init)\n ) {\n updateConfigObject(vdecl.init);\n }\n });\n }\n });\n }\n return false;\n },\n visitAssignmentExpression(path) {\n const { left, right } = path.node;\n\n if (\n n.MemberExpression.check(left) &&\n recast.print(left).code === 'module.exports'\n ) {\n if (n.ObjectExpression.check(right)) {\n updateConfigObject(right);\n } else if (\n n.CallExpression.check(right) &&\n n.Identifier.check(right.callee) &&\n callNames.includes(right.callee.name)\n ) {\n if (n.ObjectExpression.check(right.arguments[0])) {\n updateConfigObject(right.arguments[0]);\n }\n }\n }\n return false;\n },\n });\n};\n\nexport const updateViteConfig = (\n content: string,\n extension: string\n): string => {\n const ast = recast.parse(content, {\n parser: require('recast/parsers/typescript'),\n });\n\n const isCJSFile =\n extension === 'cjs' ||\n (content.includes('module.exports') && !content.includes('import '));\n\n injectImport(ast, isCJSFile, 'intlayer', 'vite-intlayer');\n\n genericRecastVisit(ast, (obj) =>\n updatePluginArray(obj, 'plugins', 'intlayer')\n );\n\n return recast.print(ast).code;\n};\n\nexport const updateAstroConfig = (\n content: string,\n extension: string\n): string => {\n const ast = recast.parse(content, {\n parser: require('recast/parsers/typescript'),\n });\n\n const isCJSFile =\n extension === 'cjs' ||\n (content.includes('module.exports') && !content.includes('import '));\n\n injectImport(ast, isCJSFile, 'intlayer', 'astro-intlayer');\n\n genericRecastVisit(ast, (obj) =>\n updatePluginArray(obj, 'integrations', 'intlayer')\n );\n\n return recast.print(ast).code;\n};\n\nexport const updateNextConfig = (\n content: string,\n extension: string\n): string => {\n const ast = recast.parse(content, {\n parser: require('recast/parsers/typescript'),\n });\n\n const isCJSFile = extension === 'cjs' || content.includes('module.exports');\n\n injectImport(ast, isCJSFile, 'withIntlayer', 'next-intlayer/server');\n\n recast.visit(ast, {\n visitExportDefaultDeclaration(path) {\n const declaration = path.node.declaration;\n if (\n n.Expression.check(declaration) &&\n !(\n n.CallExpression.check(declaration) &&\n n.Identifier.check(declaration.callee) &&\n declaration.callee.name === 'withIntlayer'\n )\n ) {\n path\n .get('declaration')\n .replace(\n b.callExpression(b.identifier('withIntlayer'), [declaration as any])\n );\n }\n return false;\n },\n visitAssignmentExpression(path) {\n const { left, right } = path.node;\n\n if (\n n.MemberExpression.check(left) &&\n recast.print(left).code === 'module.exports' &&\n !(\n n.CallExpression.check(right) &&\n n.Identifier.check(right.callee) &&\n right.callee.name === 'withIntlayer'\n )\n ) {\n path\n .get('right')\n .replace(b.callExpression(b.identifier('withIntlayer'), [right]));\n }\n return false;\n },\n });\n\n return recast.print(ast).code;\n};\n\nexport const updateNuxtConfig = (content: string): string => {\n const ast = recast.parse(content, {\n parser: require('recast/parsers/typescript'),\n });\n\n const updateConfigObject = (objExpr: any) => {\n if (\n !objExpr ||\n (objExpr.type !== 'ObjectExpression' &&\n !n.ObjectExpression.check(objExpr))\n )\n return;\n\n let modulesProp = objExpr.properties.find((p: any) => {\n if (!p?.key) return false;\n const keyName = p.key.name || p.key.value;\n return keyName === 'modules';\n }) as any;\n\n if (!modulesProp) {\n modulesProp = b.property(\n 'init',\n b.identifier('modules'),\n b.arrayExpression([])\n );\n objExpr.properties.push(modulesProp);\n }\n\n const modulesValue = modulesProp.value;\n\n if (\n modulesValue &&\n (modulesValue.type === 'ArrayExpression' ||\n n.ArrayExpression.check(modulesValue))\n ) {\n const hasModule = modulesValue.elements.some((el: any) => {\n if (\n n.StringLiteral.check(el) ||\n el.type === 'StringLiteral' ||\n el.type === 'Literal'\n ) {\n return (el.value || el.extra?.rawValue) === 'nuxt-intlayer';\n }\n return false;\n });\n\n if (!hasModule) {\n modulesValue.elements.push(b.stringLiteral('nuxt-intlayer'));\n }\n }\n };\n\n genericRecastVisit(ast, updateConfigObject, ['defineNuxtConfig']);\n\n return recast.print(ast).code;\n};\n"],"mappings":"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"}