@voerkai18n/utils
Version:
utils for voerkai18n
51 lines (38 loc) • 1.51 kB
text/typescript
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"))