From e80fa615dcffef17454c1f9e2d6d88a8a5cfc697 Mon Sep 17 00:00:00 2001 From: aleidk Date: Fri, 14 Feb 2025 16:45:25 -0300 Subject: [PATCH] fix: build binary of core --- packages/core/build.ts | 99 ++++++++++++++++++++++++++++++++++++++ packages/core/package.json | 7 ++- 2 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 packages/core/build.ts diff --git a/packages/core/build.ts b/packages/core/build.ts new file mode 100644 index 0000000..6182e2d --- /dev/null +++ b/packages/core/build.ts @@ -0,0 +1,99 @@ +#!/usr/bin/env bun + +import type { BuildConfig, BunPlugin, PluginBuilder } from "bun"; +import { parseArgs } from "node:util"; +import type { FileImporter } from "sass"; + +const { values, positionals } = parseArgs({ + args: Bun.argv, + options: { + production: { + type: "boolean", + short: "p", + default: true, + }, + filter: { + type: "string", + short: "f", + default: "all", + }, + }, + strict: true, + allowPositionals: true, +}); + +const outdir = positionals.at(2); + +if (!outdir) { + throw new Error("No outdir provided!"); +} + +const nodeModuleImporter: FileImporter<"async"> = { + findFileUrl(url) { + if (url.startsWith("@")) { + return new URL(import.meta.resolve(url)); + } + + return null; + }, +}; + +const sassPlugin: BunPlugin = { + name: "Sass Loader", + async setup(build: PluginBuilder) { + const sass = await import("sass"); + build.onLoad({ filter: /\.scss$/ }, async ({ path }) => { + // read and compile it with the sass compiler + const result = await sass.compileAsync(path, { + importers: [nodeModuleImporter], + }); + + return { + loader: "css", + contents: result.css, + }; + }); + }, +}; + +const assets: BuildConfig[] = []; + +const filter = values.filter ?? "all"; + +if (["all", "sass"].includes(filter)) { + assets.push({ + entrypoints: ["./src/style.scss"], + outdir: `${outdir}/css`, + naming: "[name].css", + plugins: [sassPlugin], + minify: values.production, + + // On by default in Bun v1.2+ + html: true, + experimentalCss: true, + }); +} + +// if (["all", "js", "ts"].includes(filter)) { +// assets.push({ +// entrypoints: ["./js/index.ts"], +// outdir: `${outdir}/js`, +// target: "browser", +// splitting: values.production, +// minify: values.production, +// }); +// } + +await Promise.all( + assets.map(async (item) => { + const result = await Bun.build(item); + + if (!result.success) { + throw new AggregateError(result.logs, "Build failed"); + } + + return result; + }), +); + +console.log(`${Bun.color("#a6da95", "ansi")}Assets succesfully build!\x1b[0m`); diff --git a/packages/core/package.json b/packages/core/package.json index 4a88f45..f740cb5 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -6,9 +6,12 @@ ".": "./src/style.scss", "./mixins": "./src/_mixins.scss" }, + "bin": { + "@mini-strap/core": "build.ts" + }, "scripts": { - "build": "bun sass --style compressed src/style.scss", - "ci:publish": "bun run build dist/style.css && bun publish --production --frozen-lockfile --silent" + "build": "bun sass --style compressed src/style.scss dist/style.css", + "ci:publish": "bun run build && bun publish --production --frozen-lockfile --silent" }, "devDependencies": { "@types/bun": "latest",