UNPKG

@voerkai18n/utils

Version:

utils for voerkai18n

51 lines (38 loc) 1.51 kB
import { hasImport, HasImportOptions } from "./hasImport"; const RequireRegex = /(let|const|var)\s*((\{[^}]*\})|(\w+))\s+=\s*require\(['"]\S+['"]\)/gm export type AddImportOptions = HasImportOptions & { scriptSection?: RegExp } export function addImport(code:string,fromModule:string, importName:string, options?:AddImportOptions){ let { moduleType,scriptSection } = Object.assign({ moduleType : 'auto', scriptSection: /(<script[^>]*>)([\s\S]*?)(<\/script>)/gm },options) as Required<AddImportOptions> if(moduleType === 'auto'){ moduleType = RequireRegex.test(code) ? 'cjs' : 'ts' } if(hasImport(code,importName,options as HasImportOptions)){ return code }else{ const importCode = moduleType == 'cjs' ? `const { ${importName} } from "${fromModule}"` : `import { ${importName} } from "${fromModule}"` let hasScript = false // 在script标签中添加 code = code.replace(scriptSection,(matched,scriptBegin,scriptContent,scriptEnd)=>{ hasScript = true return matched.replace(scriptContent,scriptBegin+"\n"+importCode + "\n" + scriptContent + "\n" + scriptEnd) }) if(!hasScript){ code = importCode + "\n" + code } } return code } // const code = ` // <script> // aaaa // </script> // <script setup> // bbbb // </script> // ` // console.log(addImport(code,"languages","t"))