diff --git a/package.json b/package.json index 0b70bd0..57f4b9d 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,17 @@ "module": "dist/index.mjs", "main": "dist/index.js", "scripts": { + "postbuild": "node script.js", "build": "rollup -c", "prepublishOnly": "npm run build" }, "devDependencies": { "@rollup/plugin-node-resolve": "^6.0.0", + "glob": "^7.1.6", "rollup": "^1.20.0", "rollup-plugin-svelte": "^5.0.0", - "svelte": "^3.0.0" + "svelte": "^3.0.0", + "svelte-preprocess": "^4.1.1" }, "keywords": [ "svelte" diff --git a/script.js b/script.js new file mode 100644 index 0000000..e30e4dc --- /dev/null +++ b/script.js @@ -0,0 +1,54 @@ +const svelte = require("svelte/compiler"); +const autoprocessor = require("svelte-preprocess"); +const fs = require("fs"); +const path = require("path"); +const glob = require("glob"); + +const runCommand = async () => { + // source file paths + const srcPath = path.join(__dirname, "src"); + + // read glob of files in directory + glob(path.join(srcPath, "**/*.svelte"), {}, (error, files) => { + // handling error + if (error) { + return console.log("Unable to scan directory: " + error); + } + // listing all files using forEach + files.forEach(async (file) => { + // load file + const sourceFile = fs.readFileSync(file, "utf-8"); + const distFile = file.replace("/src/", "/dist/"); + + // process .svelte file + if (file.includes(".svelte")) { + // run autopreprocessor + await parseSvelte(sourceFile, distFile); + } + // copy other files + else { + // copy static files + fs.copyFileSync(file, distFile); + } + }); + }); +}; + +const parseSvelte = async (source, destination) => { + await svelte + .preprocess(source, autoprocessor(), { + filename: path.basename(destination), + }) + .then((item) => { + // create directory and file + fs.mkdirSync(path.dirname(destination), { + recursive: true, + }); + // write compiled code to dist file + fs.writeFileSync(destination, item.code); + }) + .catch((error) => { + console.error(error.message); + }); +}; +runCommand();