import execa from "execa"; import L from "../../utils/logger"; const fs = require("fs"); interface Options { ignore?: boolean; } async function wrapComponent(name: string, options?: Options): Promise { if (!options) { options = { ignore: false, }; } if (name.slice(-3) !== ".js") { name += ".js"; } L.info(`wrap ${name} into a dir...`); if (options.ignore) { L.info("also add .gitignre and package.json"); } const pkgDir = name.split(".js")[0]; let fileContent = fs.readFileSync(`${name}`).toString(); if (!fileContent) { throw new Error("empty file"); } execa.commandSync(`mkdir -p ${pkgDir}`); let regex: RegExp; regex = /(import.*from.*['"])\.(.*)/g; fileContent = fileContent.replace(regex, "$1../.$2"); regex = /(import.*from.*['"])\.\.\/\.\/(.*)/g; fileContent = fileContent.replace(regex, "$1../$2"); regex = /(require\(['"])\.(.*)/g; fileContent = fileContent.replace(regex, "$1../.$2"); regex = /(require\(['"])\.\.\/\.\/(.*)/g; fileContent = fileContent.replace(regex, "$1../$2"); fs.writeFileSync(`${pkgDir}/index.js`, fileContent); fs.writeFileSync(`${pkgDir}/package.json`, '{"main": "./index.js"}'); if (options.ignore) { fs.writeFileSync(`${pkgDir}/.gitignore`, "package.json"); } execa.commandSync(`rm ${name}`); } export { wrapComponent };