import { useEnv, getMergeMeta } from '@opentiny/tiny-engine-meta-register'
import { importMapConfig } from '@opentiny/tiny-engine-common/js/importMap'
const getImportUrl = (pkgName: string) => {
const customImportMap = getMergeMeta('engine.config')?.importMap
const {
VITE_CDN_TYPE,
VITE_CDN_DOMAIN,
VITE_LOCAL_IMPORT_PATH = 'local-cdn-static',
BASE_URL,
VITE_LOCAL_IMPORT_MAPS
} = useEnv()
const isLocalBundle = VITE_LOCAL_IMPORT_MAPS === 'true'
const versionDelimiter = VITE_CDN_TYPE === 'npmmirror' && !isLocalBundle ? '/' : '@'
const fileDelimiter = VITE_CDN_TYPE === 'npmmirror' && !isLocalBundle ? '/files' : ''
const cdnDomain = isLocalBundle ? BASE_URL + VITE_LOCAL_IMPORT_PATH : VITE_CDN_DOMAIN
if (customImportMap?.imports?.[pkgName]) {
return customImportMap.imports[pkgName]
.replace('${VITE_CDN_DOMAIN}', cdnDomain)
.replace('${versionDelimiter}', versionDelimiter)
.replace('${fileDelimiter}', fileDelimiter)
}
if (importMapConfig.imports[pkgName]) {
return importMapConfig.imports[pkgName]
.replace('${VITE_CDN_DOMAIN}', cdnDomain)
.replace('${versionDelimiter}', versionDelimiter)
.replace('${fileDelimiter}', fileDelimiter)
}
}
const getImportStyleUrl = (pkgName: string) => {
const {
VITE_CDN_TYPE,
VITE_CDN_DOMAIN,
VITE_LOCAL_IMPORT_PATH = 'local-cdn-static',
BASE_URL,
VITE_LOCAL_IMPORT_MAPS
} = useEnv()
const isLocalBundle = VITE_LOCAL_IMPORT_MAPS === 'true'
const versionDelimiter = VITE_CDN_TYPE === 'npmmirror' && !isLocalBundle ? '/' : '@'
const fileDelimiter = VITE_CDN_TYPE === 'npmmirror' && !isLocalBundle ? '/files' : ''
const cdnDomain = isLocalBundle ? BASE_URL + VITE_LOCAL_IMPORT_PATH : VITE_CDN_DOMAIN
if (importMapConfig.importStyles[pkgName]) {
return importMapConfig.importStyles[pkgName]
.replace('${VITE_CDN_DOMAIN}', cdnDomain)
.replace('${versionDelimiter}', versionDelimiter)
.replace('${fileDelimiter}', fileDelimiter)
}
}
export function getImportMapData(canvasDeps = { scripts: [], styles: [] }) {
const blockRequire = {
imports: {
'@opentiny/vue': getImportUrl('@opentiny/vue'),
'@opentiny/vue-icon': getImportUrl('@opentiny/vue-icon'),
'@opentiny/tiny-engine-builtin-component': getImportUrl('@opentiny/tiny-engine-builtin-component')
},
importStyles: [getImportStyleUrl('@opentiny/vue-theme')]
}
const tinyVueRequire = {
imports: {
'@opentiny/vue-common': getImportUrl('@opentiny/vue-common'),
'@opentiny/vue-locale': getImportUrl('@opentiny/vue-locale'),
echarts: getImportUrl('echarts')
}
}
const materialsAndUtilsRequire = canvasDeps.scripts.reduce((imports, { package: pkg, script }) => {
if (pkg && script) {
imports[pkg] = script
}
return imports
}, {})
const importMap = {
imports: {
vue: getImportUrl('vue'),
'vue-i18n': getImportUrl('vue-i18n'),
...blockRequire.imports,
...tinyVueRequire.imports,
...materialsAndUtilsRequire
}
}
const importStyles = [...blockRequire.importStyles, ...canvasDeps.styles]
const customEnableTailWindCSS = getMergeMeta('engine.config')?.enableTailwindCSS
const tailwindURL = getImportUrl('@tailwindcss/browser')
const importScripts = customEnableTailWindCSS && tailwindURL ? [tailwindURL] : []
return {
importMap,
importStyles,
importScripts
}
}