From eb12f43379f5713159cfd8cc620e6b1a6f111719 Mon Sep 17 00:00:00 2001 From: mohiit1502 Date: Fri, 20 Sep 2024 10:29:43 +0530 Subject: [PATCH] Updated build pipeline --- build-tools/build.sh | 29 +++++++++++++++++++++++++++++ build-tools/generate-module.js | 33 +++++++++++++++++++++++++++++++++ build-tools/post-processor.js | 23 +++++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 4 ++-- 5 files changed, 89 insertions(+), 4 deletions(-) create mode 100755 build-tools/build.sh create mode 100644 build-tools/generate-module.js create mode 100644 build-tools/post-processor.js diff --git a/build-tools/build.sh b/build-tools/build.sh new file mode 100755 index 0000000..43bf4ce --- /dev/null +++ b/build-tools/build.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Get the directory of the current script +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +rm -rf build + +# Quality check +npx tsc + +# Generate Styles (with unneeded js) +# vite build --config vite-css.config.ts + +vite build + +# Generated source bundle +# tsc -p tsconfig.cjs.build.json +# tsc -p tsconfig.es.build.json + +# Cleanup unneeded js +# rm -f build/*.js + +# # Copy image files +# find src/static -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.gif" -o -name "*.svg" \) -exec cp {} build/cjs/static/ \; +# find src/static -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.gif" -o -name "*.svg" \) -exec cp {} build/es/static/ \; + +# Run Post processors: Update style imports in .js files, create component modules +node "$SCRIPT_DIR/post-processor.js" build/cjs +node "$SCRIPT_DIR/post-processor.js" build/es diff --git a/build-tools/generate-module.js b/build-tools/generate-module.js new file mode 100644 index 0000000..699fa72 --- /dev/null +++ b/build-tools/generate-module.js @@ -0,0 +1,33 @@ +import { promises as fs } from "fs" +import { dirname, resolve } from "path" +import { fileURLToPath } from "url" + +const __filename = fileURLToPath(import.meta.url) +const __dirname = dirname(__filename) + +const exclusions = ["enums.js", "navigator.js", "v4.js", "index.js"] + +async function generateModule(fileName) { + if (!exclusions.includes(fileName)) { + const dir = fileName.slice(0, -3) + const name = `@armco/utils/${dir}` + const packageJsonContent = { + name, + main: `../cjs/${dir}.js`, + module: `../es/${dir}.js`, + types: `../types/${dir}.d.ts`, + } + const dirPath = resolve(__dirname, `../build/${dir}`) + try { + await fs.mkdir(dirPath, { recursive: true }) + await fs.writeFile( + resolve(dirPath, "package.json"), + JSON.stringify(packageJsonContent, null, 2), + ) + } catch (error) { + console.error(`Error processing directory ${dirPath}:`, error) + } + } +} + +export default generateModule diff --git a/build-tools/post-processor.js b/build-tools/post-processor.js new file mode 100644 index 0000000..53c993f --- /dev/null +++ b/build-tools/post-processor.js @@ -0,0 +1,23 @@ +import { readdir } from "fs/promises" +import generateModule from "./generate-module.js" + +async function postProcessor(dir) { + try { + const files = await readdir(dir) + await Promise.all( + files.map(async (file) => { + await generateModule(file, dir) + }), + ) + } catch (error) { + console.error(`Error processing directory ${dir}:`, error) + } +} + +const targetDir = process.argv[2] +if (targetDir) { + postProcessor(targetDir) +} else { + console.error("Please provide the build directory to run post processor on.") + process.exit(1) +} diff --git a/package-lock.json b/package-lock.json index ab6c440..d837560 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@armco/utils", - "version": "0.0.6", + "version": "0.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@armco/utils", - "version": "0.0.6", + "version": "0.0.7", "license": "ISC", "dependencies": { "@armco/configs": "^0.0.3", diff --git a/package.json b/package.json index def303d..cf767d3 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "@armco/utils", - "version": "0.0.6", + "version": "0.0.7", "type": "module", "scripts": { - "build": "rm -rf build && tsc && vite build", + "build": "./build-tools/build.sh", "format": "prettier --write .", "lint": "eslint .", "publish:sh": "./publish.sh"