diff --git a/paskia-js/vite.config.js b/paskia-js/vite.config.js index d061f6c..65193e4 100644 --- a/paskia-js/vite.config.js +++ b/paskia-js/vite.config.js @@ -1,7 +1,10 @@ import { defineConfig } from 'vite' -import { resolve } from 'path' +import { resolve } from 'node:path' +import { fileURLToPath } from 'node:url' import dts from 'vite-plugin-dts' +const __dirname = fileURLToPath(new URL('.', import.meta.url)) + export default defineConfig({ plugins: [dts({ rollupTypes: true })], build: { diff --git a/scripts/build-frontend.py b/scripts/build-frontend.py index 3949078..3429a65 100644 --- a/scripts/build-frontend.py +++ b/scripts/build-frontend.py @@ -1,44 +1,44 @@ -import shutil +"""Hatch build hook for building paskia-js and Vue frontend during package build.""" + import subprocess from pathlib import Path from sys import stderr -from hatchling.builders.hooks.plugin.interface import BuildHookInterface +from hatchling.builders.hooks.plugin.interface import BuildHookInterface # type: ignore + +# Import utilities from fastapi-vue +exec(Path(__file__).parent.joinpath("fastapi-vue", "util.py").read_text("UTF-8")) # noqa: S102 def run(cmd, **kwargs): + """Run a command and display it.""" display_cmd = [Path(cmd[0]).name, *cmd[1:]] stderr.write(f"### {' '.join(display_cmd)}\n") subprocess.run(cmd, check=True, **kwargs) -def find_build_tool(): - install = [ - ("deno", "install", "--allow-scripts=npm:vue-demi"), - ("npm", "install"), - ("bun", "--bun", "install"), - ] - - build = [ - ("deno", "task", "build"), - ("npm", "run", "build"), - ("bun", "--bun", "run", "build"), - ] - - for i, b in zip(install, build, strict=False): - if tool := shutil.which(i[0]): - return [tool, *i[1:]], [tool, *b[1:]] - - raise RuntimeError("Deno, npm or Bun is required for building but none was found") - - class CustomBuildHook(BuildHookInterface): + """Build hook that compiles paskia-js and Vue frontend before packaging.""" + def initialize(self, version, build_data): super().initialize(version, build_data) - stderr.write(">>> Building the frontend\n") + stderr.write(">>> Building paskia-js library\n") install_cmd, build_cmd = find_build_tool() + try: + # Install dependencies for paskia-js + run(install_cmd, cwd="paskia-js") + stderr.write("\n") + # Build paskia-js + run(build_cmd, cwd="paskia-js") + stderr.write("\n") + except Exception as e: + stderr.write(f"Error occurred while building paskia-js: {e}\n") + raise + + stderr.write(">>> Building the frontend\n") + try: run(install_cmd, cwd="frontend") stderr.write("\n")