scripts/build-style/copy.ts (46 lines of code) (raw):
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { copy, readFile, writeFile, existsSync } from 'fs-extra'
import glob from 'glob'
export type CopyBaseOptions = Record<'esStr' | 'libStr', string>
const importLibToEs = async ({
libStr,
esStr,
filename,
}: CopyBaseOptions & { filename: string }) => {
if (!existsSync(filename)) {
return Promise.resolve()
}
const fileContent: string = (await readFile(filename)).toString()
return writeFile(
filename,
fileContent.replace(new RegExp(libStr, 'g'), esStr)
)
}
export const runCopy = ({
resolveForItem,
...lastOpts
}: CopyBaseOptions & { resolveForItem?: (filename: string) => unknown }) => {
return new Promise((resolve, reject) => {
glob(`./src/**/*`, (err, files) => {
if (err) {
return reject(err)
}
const all = [] as Promise<unknown>[]
for (let i = 0; i < files.length; i += 1) {
const filename = files[i]
resolveForItem?.(filename)
if (/\.(less|scss)$/.test(filename)) {
all.push(copy(filename, filename.replace(/src\//, 'esm/')))
all.push(copy(filename, filename.replace(/src\//, 'lib/')))
continue
}
if (/\/style.ts$/.test(filename)) {
importLibToEs({
...lastOpts,
filename: filename.replace(/src\//, 'esm/').replace(/\.ts$/, '.js'),
})
continue
}
}
})
})
}