From 2bf731c8afc1f44f32247d76e850dddfd2ad0a0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20G=C3=B3mez?= Date: Tue, 24 Mar 2026 18:36:53 +0100 Subject: [PATCH 01/19] build: using Vite as bundler --- .gitignore | 1 + js/vite-entry.js | 38 +++ layouts/partials/footer_js.html | 38 +++ layouts/partials/head.html | 104 ++++++++ layouts/partials/vite.html | 33 +++ package.json | 13 +- static/images/bg-jumbotron-default.jpg | Bin 0 -> 70838 bytes static/images/bg-traces-alt.jpg | Bin 0 -> 29809 bytes static/images/bg-traces.jpg | Bin 0 -> 29962 bytes vite.config.js | 159 ++++++++++++ yarn.lock | 345 ++++++++++++++++++++++++- 11 files changed, 727 insertions(+), 4 deletions(-) create mode 100644 js/vite-entry.js create mode 100644 layouts/partials/footer_js.html create mode 100644 layouts/partials/head.html create mode 100644 layouts/partials/vite.html create mode 100644 static/images/bg-jumbotron-default.jpg create mode 100644 static/images/bg-traces-alt.jpg create mode 100644 static/images/bg-traces.jpg create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore index 1c9bec49..d55d1739 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,6 @@ /static/fonts/vendor/ /static/js/ /static/css/ +/static/dist/ /public/ /.project diff --git a/js/vite-entry.js b/js/vite-entry.js new file mode 100644 index 00000000..dd619c7d --- /dev/null +++ b/js/vite-entry.js @@ -0,0 +1,38 @@ +/*! + * Vite entry point — wraps js/main.js with jQuery global setup. + * jQuery must be on window.$ / window.jQuery BEFORE bootstrap and + * solstice-assets initialise, so we use top-level await + dynamic import + * to guarantee execution order (static imports are hoisted). + * + * js/main.js is left untouched for the Laravel Mix pipeline. + */ + +// Patch addEventListener BEFORE loading any library code so that +// DOMContentLoaded listeners registered by eclipsefdn-solstice-assets +// fire immediately when the DOM is already ready (which it is, because +// + {{ end }} + + + {{ range $key, $value := (.Page.Scratch.Get "mustache-templates") }} + + {{ end }} + + + + + {{ if eq (.Page.Scratch.Get "is_using_twitter") "true" }} + + {{ end }} + diff --git a/layouts/partials/head.html b/layouts/partials/head.html new file mode 100644 index 00000000..9519f7c6 --- /dev/null +++ b/layouts/partials/head.html @@ -0,0 +1,104 @@ + + + + + +{{ $title := .Params.seo_title | default (.Params.headline | plainify) | default (.Title | plainify) | default .Site.Title }} +{{ if (.Params.format_seo_title | default true) }} + {{ $title = $title | title }} +{{ end }} +{{ $title_suffix := "" }} +{{ if not .Params.hide_seo_title_suffix }} + {{ $title_suffix = .Params.seo_title_suffix | default .Site.Params.seo_title_suffix }} +{{ end }} +{{ $full_title := printf "%s%s" $title $title_suffix }} +{{ $full_title }} + + +{{ if isset .Page.Params "redirect_url" }} + + + +{{ end }} +{{- with .Description | default .Page.Params.summary | default .Site.Params.description | plainify }} +{{- with . | replaceRE "{{[\\s\\S]*?}}" " " | truncate 160 }} + + + +{{- end }} +{{- end }} +{{- with .Page.Params.author }} + +{{- end }} + {{- with .Params.page_favicon | default .Site.Params.favicon | default "https://www.eclipse.org/favicon.ico"}} + +{{- end -}} +{{- with .Page.Params.metatag_robots }} + +{{- end }} + +{{- with .Params.share_img | default .Params.image | default .Site.Params.share_img | default .Site.Params.logo }} + + +{{- end }} + +{{- with .Site.Params.author.twitter }} + + +{{- end }} +{{- with .Site.Params.fb_app_id }} + +{{- end }} + + + +{{- with .Keywords | default .Site.Params.keywords }} + +{{ end }} + +{{ hugo.Generator -}} + +{{ $canonical_url := (.Page.Params.canonical_url | default .Permalink) | absLangURL }} + +{{ with .OutputFormats.Get "RSS" }} + +{{ end }} +{{ if ne .Page.Params.disable_css "true" }} +{{/* Vite: load styles via the Vite pipeline instead of the static Mix output */}} +{{ partial "vite.html" "less/styles.less" }} +{{- with .Site.Params.style_overrides }} + +{{- end }} +{{- with .Page.Params.page_css_file }} + +{{- end }} +{{- end }} +{{- partial "google_tag_manager.html" . }} +{{- partial "head_variables.html" . }} + +{{ $metadata := .Page.Params.metadata | default slice }} +{{ range $metadata }} + {{ $path_parts := split .path "/" }} + {{ $data := $.Site.Data }} + {{ range $path_parts }} + {{ $data = index $data . }} + {{ end }} + {{ if eq .type "ld+json" }} + + {{ end }} +{{ end }} diff --git a/layouts/partials/vite.html b/layouts/partials/vite.html new file mode 100644 index 00000000..a428aa4c --- /dev/null +++ b/layouts/partials/vite.html @@ -0,0 +1,33 @@ +{{ $entry := . }} + +{{ if hugo.IsServer }} + {{/* In dev mode, Vite dev server handles both JS and CSS modules */}} + +{{ else }} + {{ $manifestPath := "static/dist/.vite/manifest.json" }} + + {{ if fileExists $manifestPath }} + {{ $manifest := transform.Unmarshal (readFile $manifestPath) }} + {{ $fileData := index $manifest $entry }} + + {{ if $fileData }} + {{/* Output CSS chunks (from JS entry points that import CSS) */}} + {{ if $fileData.css }} + {{ range $fileData.css }} + + {{ end }} + {{ end }} + + {{/* Determine if the built file is CSS or JS and output the correct tag */}} + {{ if strings.HasSuffix $fileData.file ".css" }} + + {{ else }} + + {{ end }} + {{ else }} + {{ warnf "Vite manifest missing entry: %s" $entry }} + {{ end }} + {{ else }} + {{ warnf "Vite manifest not found at %s" $manifestPath }} + {{ end }} +{{ end }} diff --git a/package.json b/package.json index 108b1fe3..52a175de 100644 --- a/package.json +++ b/package.json @@ -17,12 +17,21 @@ "watch": "NODE_ENV=development webpack --watch --progress --config=node_modules/laravel-mix/setup/webpack.config.js", "hot": "NODE_ENV=development webpack-dev-server --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", "production": "NODE_ENV=production webpack --progress --config=node_modules/laravel-mix/setup/webpack.config.js", - "postinstall": "NODE_ENV=production npm run production" + "postinstall": "NODE_ENV=production npm run production", + "vite:dev": "vite", + "vite:build": "vite build", + "vite:preview": "vite preview", + "hugo:dev": "hugo server --port 1313" }, "readmeFilename": "README.md", "browserslist": "last 5 version, > 0.2%, not dead, IE 11", "dependencies": { "eclipsefdn-hugo-solstice-theme": "0.2.6" }, - "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e", + "devDependencies": { + "less": "^4.6.4", + "less-loader": "^12.3.2", + "vite": "^8.0.2" + } } diff --git a/static/images/bg-jumbotron-default.jpg b/static/images/bg-jumbotron-default.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e356698fb7193d7738dd0fef8005a5273e0146da GIT binary patch literal 70838 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
R;%VBO+M&T-OZ_rg3O{) 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%0DnPfO5}+fy`GzW*q*b+b!}N} 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 literal 0 HcmV?d00001 diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 00000000..d1a51205 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,159 @@ +import { defineConfig } from 'vite'; +import { createRequire } from 'module'; +import path from 'path'; + +const require = createRequire(import.meta.url); +const resolve = (...segments) => path.resolve(__dirname, ...segments); + +// --------------------------------------------------------------------------- +// Plugins +// --------------------------------------------------------------------------- + +/** + * Replicate the eclipsefdn-solstice-assets custom webpack mustache loader. + * .partial.mustache → raw string export + * .mustache → callable function that compiles & renders via Hogan.js + * + * Matches the original loader (build/transform-mustache.js) which defers + * Hogan.compile() to module-evaluation time in the browser, then returns a + * callable `(...args) => compiled.render(...args)`. + */ +function mustachePlugin() { + return { + name: 'vite-plugin-mustache', + transform(src, id) { + if (!id.endsWith('.mustache')) return null; + + if (id.endsWith('.partial.mustache')) { + return { code: `export default ${JSON.stringify(src)};`, map: null }; + } + + return { + code: [ + `import Hogan from 'hogan.js';`, + `var t = Hogan.compile(${JSON.stringify(src)});`, + `export default function() { return t.render.apply(t, arguments); };`, + ].join('\n'), + map: null, + }; + }, + }; +} + +/** + * Proxy HTML requests to a running Hugo dev server (localhost:1313) so Vite + * can inject its HMR client. Non-HTML assets (fonts, images …) are also + * proxied as a fallback when Vite doesn't serve them itself. + */ +function hugoProxyPlugin() { + const HUGO = 'http://localhost:1313'; + const VITE_OWNED = [ + '/@', '/src/', '/node_modules/', '/js/', '/less/', + ]; + + return { + name: 'hugo-html-proxy', + configureServer(server) { + server.middlewares.use(async (req, res, next) => { + if (VITE_OWNED.some((p) => req.url.startsWith(p))) return next(); + + const url = `${HUGO}${req.url}`; + + // HTML → fetch from Hugo, strip its livereload, let Vite inject HMR + if (req.headers.accept?.includes('text/html')) { + try { + const r = await fetch(url); + if (!r.ok) return next(); + let html = await r.text(); + html = html.replace(/]*><\/script>/gi, ''); + html = await server.transformIndexHtml(req.url, html); + res.writeHead(200, { 'Content-Type': 'text/html' }); + return res.end(html); + } catch { + res.writeHead(502, { 'Content-Type': 'text/html' }); + return res.end('

502 – Hugo not reachable

Run yarn hugo:dev first.

'); + } + } + + // Everything else → try Hugo, then fall through to Vite + try { + const r = await fetch(url); + if (r.ok) { + const ct = r.headers.get('content-type'); + if (ct) res.setHeader('Content-Type', ct); + res.writeHead(200); + return res.end(Buffer.from(await r.arrayBuffer())); + } + } catch { /* Hugo not running */ } + + next(); + }); + }, + }; +} + +// --------------------------------------------------------------------------- +// Config +// --------------------------------------------------------------------------- + +export default defineConfig({ + plugins: [mustachePlugin(), hugoProxyPlugin()], + + // Shim Node globals used by CJS deps (parse-link-header reads process.env) + define: { 'process.env': '{}' }, + + resolve: { + // LESS files use the webpack `~` prefix for bare imports + alias: [{ find: /^~/, replacement: '' }], + }, + + css: { + preprocessorOptions: { + less: { + math: 'always', + modifyVars: { + 'fa-font-path': `"${resolve('node_modules/@fortawesome/fontawesome-free/webfonts')}"`, + 'icon-font-path': `"${resolve('node_modules/bootstrap/fonts')}/"`, + }, + }, + }, + }, + + // eclipsefdn-solstice-assets must be excluded (it contains .mustache files + // that need the custom plugin), but that hides all its CJS deps from Vite's + // automatic dependency discovery — so we list them explicitly. + optimizeDeps: { + exclude: ['eclipsefdn-solstice-assets'], + include: [ + 'jquery', + 'bootstrap', + 'cookieconsent', + 'element-closest-polyfill', + 'ellipsize', + 'feather-icons', + 'hogan.js', + 'isomorphic-fetch', + 'jquery-match-height', + 'mustache', + 'numeral', + 'owl.carousel', + 'parse-link-header', + ], + }, + + // Disable Vite's default public directory copying — Hugo's output lives in + // public/ and we don't want it duplicated into static/dist/ on build. + publicDir: false, + + build: { + outDir: 'static/dist', + emptyOutDir: false, + manifest: true, + rollupOptions: { + input: { + main: resolve('js/vite-entry.js'), + styles: resolve('less/styles.less'), + }, + }, + }, +}); diff --git a/yarn.lock b/yarn.lock index 6bbe89af..44ce6796 100644 --- a/yarn.lock +++ b/yarn.lock @@ -980,6 +980,28 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@emnapi/core@^1.7.1": + version "1.9.1" + resolved "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz#2143069c744ca2442074f8078462e51edd63c7bd" + integrity sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA== + dependencies: + "@emnapi/wasi-threads" "1.2.0" + tslib "^2.4.0" + +"@emnapi/runtime@^1.7.1": + version "1.9.1" + resolved "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz#115ff2a0d589865be6bd8e9d701e499c473f2a8d" + integrity sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz#a19d9772cc3d195370bf6e2a805eec40aa75e18e" + integrity sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg== + dependencies: + tslib "^2.4.0" + "@fortawesome/fontawesome-free@^6.5.2": version "6.7.2" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.2.tgz#8249de9b7e22fcb3ceb5e66090c30a1d5492b81a" @@ -1049,6 +1071,15 @@ dependencies: call-bind "^1.0.7" +"@napi-rs/wasm-runtime@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz#c3705ab549d176b8dc5172723d6156c3dc426af2" + integrity sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A== + dependencies: + "@emnapi/core" "^1.7.1" + "@emnapi/runtime" "^1.7.1" + "@tybys/wasm-util" "^0.10.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1070,11 +1101,105 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@oxc-project/types@=0.122.0": + version "0.122.0" + resolved "https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz#2f4e77a3b183c87b2a326affd703ef71ba836601" + integrity sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA== + +"@rolldown/binding-android-arm64@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.11.tgz#25a584227ed97239fd564451c0db2c359751b42a" + integrity sha512-SJ+/g+xNnOh6NqYxD0V3uVN4W3VfnrGsC9/hoglicgTNfABFG9JjISvkkU0dNY84MNHLWyOgxP9v9Y9pX4S7+A== + +"@rolldown/binding-darwin-arm64@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.11.tgz#dcfa96c4d8c7baa47f5b90294ce8ebf1b0b1dbf9" + integrity sha512-7WQgR8SfOPwmDZGFkThUvsmd/nwAWv91oCO4I5LS7RKrssPZmOt7jONN0cW17ydGC1n/+puol1IpoieKqQidmg== + +"@rolldown/binding-darwin-x64@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.11.tgz#6e751ea2067cacee0c94f0e8b087761dde62f9ea" + integrity sha512-39Ks6UvIHq4rEogIfQBoBRusj0Q0nPVWIvqmwBLaT6aqQGIakHdESBVOPRRLacy4WwUPIx4ZKzfZ9PMW+IeyUQ== + +"@rolldown/binding-freebsd-x64@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.11.tgz#b7582b959398c5871034b94ba0a8ecde0425a8e7" + integrity sha512-jfsm0ZHfhiqrvWjJAmzsqiIFPz5e7mAoCOPBNTcNgkiid/LaFKiq92+0ojH+nmJmKYkre4t71BWXUZDNp7vsag== + +"@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.11.tgz#3b8c5e071d6a0ed1cb1880c1948c6fece553502a" + integrity sha512-zjQaUtSyq1nVe3nxmlSCuR96T1LPlpvmJ0SZy0WJFEsV4kFbXcq2u68L4E6O0XeFj4aex9bEauqjW8UQBeAvfQ== + +"@rolldown/binding-linux-arm64-gnu@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.11.tgz#2533165620137b077ae4ede92b752a63cd85cfcb" + integrity sha512-WMW1yE6IOnehTcFE9eipFkm3XN63zypWlrJQ2iF7NrQ9b2LDRjumFoOGJE8RJJTJCTBAdmLMnJ8uVitACUUo1Q== + +"@rolldown/binding-linux-arm64-musl@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.11.tgz#b04cf5b806a012027a4e8b139e0f86b2ff7621c0" + integrity sha512-jfndI9tsfm4APzjNt6QdBkYwre5lRPUgHeDHoI7ydKUuJvz3lZeCfMsI56BZj+7BYqiKsJm7cfd/6KYV7ubrBg== + +"@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.11.tgz#bda9c11fe03482033d5dac6a943802b3e7579550" + integrity sha512-ZlFgw46NOAGMgcdvdYwAGu2Q+SLFA9LzbJLW+iyMOJyhj5wk6P3KEE9Gct4xWwSzFoPI7JCdYmYMzVtlgQ+zfw== + +"@rolldown/binding-linux-s390x-gnu@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.11.tgz#55daa2d35f92f62e958fc44e12db1c16e1f271c5" + integrity sha512-hIOYmuT6ofM4K04XAZd3OzMySEO4K0/nc9+jmNcxNAxRi6c5UWpqfw3KMFV4MVFWL+jQsSh+bGw2VqmaPMTLyw== + +"@rolldown/binding-linux-x64-gnu@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.11.tgz#8ca1abf607bbe2f7fdd6f6416192937dc9ea1e54" + integrity sha512-qXBQQO9OvkjjQPLdUVr7Nr2t3QTZI7s4KZtfw7HzBgjbmAPSFwSv4rmET9lLSgq3rH/ndA3ngv3Qb8l2njoPNA== + +"@rolldown/binding-linux-x64-musl@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.11.tgz#36a52beee8ac97a79d1ed8f1b94fab677e3e4d11" + integrity sha512-/tpFfoSTzUkH9LPY+cYbqZBDyyX62w5fICq9qzsHLL8uTI6BHip3Q9Uzft0wylk/i8OOwKik8OxW+QAhDmzwmg== + +"@rolldown/binding-openharmony-arm64@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.11.tgz#91c74fd23b3f3f3942fe4b3aefc9428ecbaa55fd" + integrity sha512-mcp3Rio2w72IvdZG0oQ4bM2c2oumtwHfUfKncUM6zGgz0KgPz4YmDPQfnXEiY5t3+KD/i8HG2rOB/LxdmieK2g== + +"@rolldown/binding-wasm32-wasi@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.11.tgz#6520bafe57ff1cd2fb45f8f22b1cb6d57be44e79" + integrity sha512-LXk5Hii1Ph9asuGRjBuz8TUxdc1lWzB7nyfdoRgI0WGPZKmCxvlKk8KfYysqtr4MfGElu/f/pEQRh8fcEgkrWw== + dependencies: + "@napi-rs/wasm-runtime" "^1.1.1" + +"@rolldown/binding-win32-arm64-msvc@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.11.tgz#73dd1c4737473c8270b61cd2e42b05a34453ffc0" + integrity sha512-dDwf5otnx0XgRY1yqxOC4ITizcdzS/8cQ3goOWv3jFAo4F+xQYni+hnMuO6+LssHHdJW7+OCVL3CoU4ycnh35Q== + +"@rolldown/binding-win32-x64-msvc@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.11.tgz#4d922aa6dd6bf27c73eba93fec9a0aed62549095" + integrity sha512-LN4/skhSggybX71ews7dAj6r2geaMJfm3kMbK2KhFMg9B10AZXnKoLCVVgzhMHL0S+aKtr4p8QbAW8k+w95bAA== + +"@rolldown/pluginutils@1.0.0-rc.11": + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.11.tgz#110d8cc72990c4e36a79791eeafe7cca979e00c9" + integrity sha512-xQO9vbwBecJRv9EUcQ/y0dzSTJgA7Q6UVN7xp6B81+tBGSLVAK03yJ9NkJaUA7JFD91kbjxRSC/mDnmvXzbHoQ== + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@tybys/wasm-util@^0.10.1": + version "0.10.1" + resolved "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" + integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== + dependencies: + tslib "^2.4.0" + "@types/babel__core@^7.1.16": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" @@ -2202,6 +2327,13 @@ copy-anything@^2.0.1: dependencies: is-what "^3.14.1" +copy-anything@^3.0.5: + version "3.0.5" + resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz#2d92dce8c498f790fa7ad16b01a1ae5a45b020a0" + integrity sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w== + dependencies: + is-what "^4.1.8" + core-js-compat@^3.37.1, core-js-compat@^3.38.0: version "3.38.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09" @@ -2519,6 +2651,11 @@ destroy@1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +detect-libc@^2.0.3: + version "2.1.2" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + detect-node@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" @@ -3026,6 +3163,11 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + feather-icons@^4.29.1: version "4.29.2" resolved "https://registry.yarnpkg.com/feather-icons/-/feather-icons-4.29.2.tgz#b03a47588a1c400f215e884504db1c18860d89f8" @@ -3135,7 +3277,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: +fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -3526,6 +3668,13 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" @@ -3802,6 +3951,11 @@ is-what@^3.14.1: resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== +is-what@^4.1.8: + version "4.1.16" + resolved "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz#1ad860a19da8b4895ad5495da3182ce2acdd7a6f" + integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== + is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" @@ -3998,6 +4152,11 @@ launch-editor@^2.6.0: picocolors "^1.0.0" shell-quote "^1.8.1" +less-loader@^12.3.2: + version "12.3.2" + resolved "https://registry.npmjs.org/less-loader/-/less-loader-12.3.2.tgz#88dac1736b4f2e3f76db9b1617c1398ae91cd4bb" + integrity sha512-uLV5c702ff2jBvO7qewpkLRzkh/I9QW07ur2NKkv8TVTrtX2lrKjEbEU/LLXAn7cgpCIBbkfyUm4qYXCQs5/+w== + less-loader@^7.3.0: version "7.3.0" resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-7.3.0.tgz#f9d6d36d18739d642067a05fb5bd70c8c61317e5" @@ -4023,11 +4182,101 @@ less@^3.13.1: native-request "^1.0.5" source-map "~0.6.0" +less@^4.6.4: + version "4.6.4" + resolved "https://registry.npmjs.org/less/-/less-4.6.4.tgz#3ff8068e6c8a59f1ece8a6b9227bda28c1ed68a2" + integrity sha512-OJmO5+HxZLLw0RLzkqaNHzcgEAQG7C0y3aMbwtCzIUFZsLMNNq/1IdAdHEycQ58CwUO3jPTHmoN+tE5I7FQxNg== + dependencies: + copy-anything "^3.0.5" + parse-node-version "^1.0.1" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + needle "^3.1.0" + source-map "~0.6.0" + lightbox2@^2.11.4: version "2.11.4" resolved "https://registry.yarnpkg.com/lightbox2/-/lightbox2-2.11.4.tgz#3ba020011ecea9237d0905c47db4026e9ab64400" integrity sha512-Fof7RJFWV3Fe4CWTjpto30h04Led97nRStFNLaUD/VrlEs72r7LF9WMndENYvU2e4o8WboSuy+dmetXSKSnQ2Q== +lightningcss-android-arm64@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz#f033885116dfefd9c6f54787523e3514b61e1968" + integrity sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg== + +lightningcss-darwin-arm64@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz#50b71871b01c8199584b649e292547faea7af9b5" + integrity sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ== + +lightningcss-darwin-x64@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz#35f3e97332d130b9ca181e11b568ded6aebc6d5e" + integrity sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w== + +lightningcss-freebsd-x64@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz#9777a76472b64ed6ff94342ad64c7bafd794a575" + integrity sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig== + +lightningcss-linux-arm-gnueabihf@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz#13ae652e1ab73b9135d7b7da172f666c410ad53d" + integrity sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw== + +lightningcss-linux-arm64-gnu@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz#417858795a94592f680123a1b1f9da8a0e1ef335" + integrity sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ== + +lightningcss-linux-arm64-musl@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz#6be36692e810b718040802fd809623cffe732133" + integrity sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg== + +lightningcss-linux-x64-gnu@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz#0b7803af4eb21cfd38dd39fe2abbb53c7dd091f6" + integrity sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA== + +lightningcss-linux-x64-musl@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz#88dc8ba865ddddb1ac5ef04b0f161804418c163b" + integrity sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg== + +lightningcss-win32-arm64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz#4f30ba3fa5e925f5b79f945e8cc0d176c3b1ab38" + integrity sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw== + +lightningcss-win32-x64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz#141aa5605645064928902bb4af045fa7d9f4220a" + integrity sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q== + +lightningcss@^1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz#b85aae96486dcb1bf49a7c8571221273f4f1e4a9" + integrity sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-android-arm64 "1.32.0" + lightningcss-darwin-arm64 "1.32.0" + lightningcss-darwin-x64 "1.32.0" + lightningcss-freebsd-x64 "1.32.0" + lightningcss-linux-arm-gnueabihf "1.32.0" + lightningcss-linux-arm64-gnu "1.32.0" + lightningcss-linux-arm64-musl "1.32.0" + lightningcss-linux-x64-gnu "1.32.0" + lightningcss-linux-x64-musl "1.32.0" + lightningcss-win32-arm64-msvc "1.32.0" + lightningcss-win32-x64-msvc "1.32.0" + lilconfig@^2.0.3, lilconfig@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" @@ -4286,6 +4535,11 @@ mustache@^4.2.0: resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" @@ -4296,6 +4550,14 @@ native-request@^1.0.5: resolved "https://registry.yarnpkg.com/native-request/-/native-request-1.1.2.tgz#b677952757429db6cd41972a29c3b781977413ed" integrity sha512-/etjwrK0J4Ebbcnt35VMWnfiUX/B04uwGJxyJInagxDqf2z5drSt/lsOvEMWGYunz1kaLZAFrV4NDAbOoDKvAQ== +needle@^3.1.0: + version "3.5.0" + resolved "https://registry.npmjs.org/needle/-/needle-3.5.0.tgz#aa2023642cb41b11a11babb733fd8fa952919112" + integrity sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w== + dependencies: + iconv-lite "^0.6.3" + sax "^1.2.4" + negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -4579,6 +4841,11 @@ parse-link-header@^2.0.0: dependencies: xtend "~4.0.1" +parse-node-version@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -4643,11 +4910,21 @@ picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" + integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -4929,6 +5206,15 @@ postcss@^8.2.15, postcss@^8.4.31: picocolors "^1.1.0" source-map-js "^1.2.1" +postcss@^8.5.8: + version "8.5.8" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz#6230ecc8fb02e7a0f6982e53990937857e13f399" + integrity sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -5215,6 +5501,30 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rolldown@1.0.0-rc.11: + version "1.0.0-rc.11" + resolved "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.11.tgz#6eaf091b1bbb5ed92e5302171a3d59f0d026d9c0" + integrity sha512-NRjoKMusSjfRbSYiH3VSumlkgFe7kYAa3pzVOsVYVFY3zb5d7nS+a3KGQ7hJKXuYWbzJKPVQ9Wxq2UvyK+ENpw== + dependencies: + "@oxc-project/types" "=0.122.0" + "@rolldown/pluginutils" "1.0.0-rc.11" + optionalDependencies: + "@rolldown/binding-android-arm64" "1.0.0-rc.11" + "@rolldown/binding-darwin-arm64" "1.0.0-rc.11" + "@rolldown/binding-darwin-x64" "1.0.0-rc.11" + "@rolldown/binding-freebsd-x64" "1.0.0-rc.11" + "@rolldown/binding-linux-arm-gnueabihf" "1.0.0-rc.11" + "@rolldown/binding-linux-arm64-gnu" "1.0.0-rc.11" + "@rolldown/binding-linux-arm64-musl" "1.0.0-rc.11" + "@rolldown/binding-linux-ppc64-gnu" "1.0.0-rc.11" + "@rolldown/binding-linux-s390x-gnu" "1.0.0-rc.11" + "@rolldown/binding-linux-x64-gnu" "1.0.0-rc.11" + "@rolldown/binding-linux-x64-musl" "1.0.0-rc.11" + "@rolldown/binding-openharmony-arm64" "1.0.0-rc.11" + "@rolldown/binding-wasm32-wasi" "1.0.0-rc.11" + "@rolldown/binding-win32-arm64-msvc" "1.0.0-rc.11" + "@rolldown/binding-win32-x64-msvc" "1.0.0-rc.11" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -5251,11 +5561,16 @@ safe-regex-test@^1.0.3: es-errors "^1.3.0" is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sax@^1.2.4: + version "1.6.0" + resolved "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz#da59637629307b97e7c4cb28e080a7bc38560d5b" + integrity sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA== + schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" @@ -5741,6 +6056,14 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -5794,6 +6117,11 @@ tslib@^2.0.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== +tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -5966,6 +6294,19 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +vite@^8.0.2: + version "8.0.2" + resolved "https://registry.npmjs.org/vite/-/vite-8.0.2.tgz#fcee428eb0ad3d4aa9843d7f7ba981679bbe5edc" + integrity sha512-1gFhNi+bHhRE/qKZOJXACm6tX4bA3Isy9KuKF15AgSRuRazNBOJfdDemPBU16/mpMxApDPrWvZ08DcLPEoRnuA== + dependencies: + lightningcss "^1.32.0" + picomatch "^4.0.3" + postcss "^8.5.8" + rolldown "1.0.0-rc.11" + tinyglobby "^0.2.15" + optionalDependencies: + fsevents "~2.3.3" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" From 56b6c75860f4664bd37c464e381dd46e470fc6e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20G=C3=B3mez?= Date: Tue, 24 Mar 2026 18:51:39 +0100 Subject: [PATCH 02/19] build: bad base argument for build --- vite.config.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/vite.config.js b/vite.config.js index d1a51205..2a1342fb 100644 --- a/vite.config.js +++ b/vite.config.js @@ -4,6 +4,8 @@ import path from 'path'; const require = createRequire(import.meta.url); const resolve = (...segments) => path.resolve(__dirname, ...segments); +const isProd = process.env.NODE_ENV === 'production' || + process.argv.includes('build'); // --------------------------------------------------------------------------- // Plugins @@ -99,6 +101,10 @@ function hugoProxyPlugin() { export default defineConfig({ plugins: [mustachePlugin(), hugoProxyPlugin()], + // In production, assets live under /dist/ (Hugo copies static/dist → public/dist). + // In dev, the Vite dev server serves from root. + base: isProd ? '/dist/' : '/', + // Shim Node globals used by CJS deps (parse-link-header reads process.env) define: { 'process.env': '{}' }, From e332b1e420289fbbdbdd9bc62aea1b3bad5d3ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20G=C3=B3mez?= Date: Tue, 24 Mar 2026 18:54:54 +0100 Subject: [PATCH 03/19] build: updating jenkins config --- Jenkinsfile | 1 + build.sh | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 build.sh diff --git a/Jenkinsfile b/Jenkinsfile index f79d39ab..8556c2a2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -5,6 +5,7 @@ hugo ( productionDomain: 'openhwfoundation.org', build: [ containerImage: 'eclipsefdn/hugo-node:h0.144.2-n22.14.0', + script: 'build.sh', ], deployment: [ nginxServerConf: 'config/nginx/default.conf' diff --git a/build.sh b/build.sh new file mode 100644 index 00000000..72550454 --- /dev/null +++ b/build.sh @@ -0,0 +1,5 @@ +set -euo pipefail + +yarn install --frozen-lockfile; +yarn run vite:build; +hugo --minify; From e77a7d46597e8583f79bee25aae438f74a20c162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20G=C3=B3mez?= Date: Tue, 24 Mar 2026 19:11:13 +0100 Subject: [PATCH 04/19] build: remove webpack mix --- config.toml | 2 -- js/vite-entry.js | 1 - package.json | 17 +++------- static/mix-manifest.json | 4 --- vite.config.js | 12 +++---- webpack.mix.js | 23 -------------- yarn.lock | 68 +++++++++++++++++++++++++++------------- 7 files changed, 56 insertions(+), 71 deletions(-) delete mode 100644 static/mix-manifest.json delete mode 100644 webpack.mix.js diff --git a/config.toml b/config.toml index 8b05d855..7561d90e 100644 --- a/config.toml +++ b/config.toml @@ -17,14 +17,12 @@ themesDir = "node_modules/" keywords = ["open-source", "risc-v", "hardware", "software", "hw", "sw", "eclipse ide"] logo = "/images/openhw-landscape.png" logo_width = "200" - styles = "css/styles.css" favicon = "images/favicon.ico" # share_img = "" gcse = "" # subtheme = "" header_wrapper_class = "header-default-bg-img" hide_call_for_action = true - js = "js/solstice.js" featured_content_publish_target = "openhwgroup" call_for_action_text = "Download" call_for_action_url = "#" diff --git a/js/vite-entry.js b/js/vite-entry.js index dd619c7d..863f883b 100644 --- a/js/vite-entry.js +++ b/js/vite-entry.js @@ -4,7 +4,6 @@ * solstice-assets initialise, so we use top-level await + dynamic import * to guarantee execution order (static imports are hoisted). * - * js/main.js is left untouched for the Laravel Mix pipeline. */ // Patch addEventListener BEFORE loading any library code so that diff --git a/package.json b/package.json index 52a175de..dcfb6a71 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,6 @@ { "name": "eclipsefdn-hugo-openhwgroup", "description": "Source code for openhwfoundation.org", - "main": "webpack.min.js", "author": "Christopher Guindon", "license": "EPL-2.0", "version": "0.0.1", @@ -10,18 +9,12 @@ }, "repository": { "type": "git", - "url": "git://github.com/openhwgroup/openhwgroup.org.git" + "url": "git://github.com/openhwgroup/openhwfoundation.org.git" }, "scripts": { - "dev": "NODE_ENV=development webpack --progress --config=node_modules/laravel-mix/setup/webpack.config.js", - "watch": "NODE_ENV=development webpack --watch --progress --config=node_modules/laravel-mix/setup/webpack.config.js", - "hot": "NODE_ENV=development webpack-dev-server --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", - "production": "NODE_ENV=production webpack --progress --config=node_modules/laravel-mix/setup/webpack.config.js", - "postinstall": "NODE_ENV=production npm run production", - "vite:dev": "vite", - "vite:build": "vite build", - "vite:preview": "vite preview", - "hugo:dev": "hugo server --port 1313" + "dev": "concurrently \"hugo server --port 1313\" \"vite --open\"", + "build": "vite build", + "preview": "vite preview" }, "readmeFilename": "README.md", "browserslist": "last 5 version, > 0.2%, not dead, IE 11", @@ -30,8 +23,8 @@ }, "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e", "devDependencies": { + "concurrently": "^9.2.1", "less": "^4.6.4", - "less-loader": "^12.3.2", "vite": "^8.0.2" } } diff --git a/static/mix-manifest.json b/static/mix-manifest.json deleted file mode 100644 index ea94b686..00000000 --- a/static/mix-manifest.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "/js/solstice.js": "/js/solstice.js", - "/css/styles.css": "/css/styles.css" -} diff --git a/vite.config.js b/vite.config.js index 2a1342fb..cbe33aaa 100644 --- a/vite.config.js +++ b/vite.config.js @@ -3,9 +3,7 @@ import { createRequire } from 'module'; import path from 'path'; const require = createRequire(import.meta.url); -const resolve = (...segments) => path.resolve(__dirname, ...segments); -const isProd = process.env.NODE_ENV === 'production' || - process.argv.includes('build'); +const resolve = (...segments) => path.resolve(import.meta.dirname, ...segments); // --------------------------------------------------------------------------- // Plugins @@ -98,12 +96,12 @@ function hugoProxyPlugin() { // Config // --------------------------------------------------------------------------- -export default defineConfig({ +export default defineConfig(({ command }) => ({ plugins: [mustachePlugin(), hugoProxyPlugin()], // In production, assets live under /dist/ (Hugo copies static/dist → public/dist). // In dev, the Vite dev server serves from root. - base: isProd ? '/dist/' : '/', + base: command === 'build' ? '/dist/' : '/', // Shim Node globals used by CJS deps (parse-link-header reads process.env) define: { 'process.env': '{}' }, @@ -153,7 +151,7 @@ export default defineConfig({ build: { outDir: 'static/dist', - emptyOutDir: false, + emptyOutDir: true, manifest: true, rollupOptions: { input: { @@ -162,4 +160,4 @@ export default defineConfig({ }, }, }, -}); +})); diff --git a/webpack.mix.js b/webpack.mix.js deleted file mode 100644 index b7eb10c7..00000000 --- a/webpack.mix.js +++ /dev/null @@ -1,23 +0,0 @@ -/*! - * Copyright (c) 2019 Eclipse Foundation, Inc. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * Contributors: - * Christopher Guindon - * - * SPDX-License-Identifier: EPL-2.0 -*/ - -require('./node_modules/eclipsefdn-solstice-assets/webpack-solstice-assets.mix.js'); -let mix = require('laravel-mix'); -mix.EclipseFdnSolsticeAssets(); - -mix.setPublicPath('static'); -mix.setResourceRoot('../'); - -mix.less('./less/styles.less', 'static/css/styles.css'); - -mix.js('js/main.js', './static/js/solstice.js'); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 44ce6796..3e93423a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2076,6 +2076,14 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001663: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz" integrity sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw== +chalk@4.1.2, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -2085,14 +2093,6 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - charenc@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" @@ -2268,6 +2268,18 @@ concat@^1.0.3: dependencies: commander "^2.9.0" +concurrently@^9.2.1: + version "9.2.1" + resolved "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz#248ea21b95754947be2dad9c3e4b60f18ca4e44f" + integrity sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng== + dependencies: + chalk "4.1.2" + rxjs "7.8.2" + shell-quote "1.8.3" + supports-color "8.1.1" + tree-kill "1.2.2" + yargs "17.7.2" + connect-history-api-fallback@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" @@ -4152,11 +4164,6 @@ launch-editor@^2.6.0: picocolors "^1.0.0" shell-quote "^1.8.1" -less-loader@^12.3.2: - version "12.3.2" - resolved "https://registry.npmjs.org/less-loader/-/less-loader-12.3.2.tgz#88dac1736b4f2e3f76db9b1617c1398ae91cd4bb" - integrity sha512-uLV5c702ff2jBvO7qewpkLRzkh/I9QW07ur2NKkv8TVTrtX2lrKjEbEU/LLXAn7cgpCIBbkfyUm4qYXCQs5/+w== - less-loader@^7.3.0: version "7.3.0" resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-7.3.0.tgz#f9d6d36d18739d642067a05fb5bd70c8c61317e5" @@ -5532,6 +5539,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@7.8.2: + version "7.8.2" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" @@ -5740,6 +5754,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@1.8.3: + version "1.8.3" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" + integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== + shell-quote@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" @@ -5948,6 +5967,13 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" +supports-color@8.1.1, supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -5962,13 +5988,6 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -6096,6 +6115,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +tree-kill@1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + ts-loader@^9.5.1: version "9.5.1" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.1.tgz#63d5912a86312f1fbe32cef0859fb8b2193d9b89" @@ -6117,7 +6141,7 @@ tslib@^2.0.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== -tslib@^2.4.0: +tslib@^2.1.0, tslib@^2.4.0: version "2.8.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -6579,7 +6603,7 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.2.1: +yargs@17.7.2, yargs@^17.2.1: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== From ecf525d6533af3a7ea208261f0cbaefe71589d4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20G=C3=B3mez?= Date: Tue, 24 Mar 2026 19:31:43 +0100 Subject: [PATCH 05/19] build: fix dev server blink --- layouts/partials/vite.html | 13 +++++++++++-- vite.config.js | 2 -- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/layouts/partials/vite.html b/layouts/partials/vite.html index a428aa4c..a7f710c0 100644 --- a/layouts/partials/vite.html +++ b/layouts/partials/vite.html @@ -1,8 +1,17 @@ {{ $entry := . }} {{ if hugo.IsServer }} - {{/* In dev mode, Vite dev server handles both JS and CSS modules */}} - + {{ if or (strings.HasSuffix $entry ".less") (strings.HasSuffix $entry ".css") }} + {{/* Hide page until styles are injected to prevent FOUC (flash of unstyled content). + The import resolves after Vite injects the + + {{ else }} + + {{ end }} {{ else }} {{ $manifestPath := "static/dist/.vite/manifest.json" }} diff --git a/vite.config.js b/vite.config.js index cbe33aaa..b3f5e914 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,8 +1,6 @@ import { defineConfig } from 'vite'; -import { createRequire } from 'module'; import path from 'path'; -const require = createRequire(import.meta.url); const resolve = (...segments) => path.resolve(import.meta.dirname, ...segments); // --------------------------------------------------------------------------- From 3b6d259f5df2aaef9a6622fc026fdba0f4db15e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20G=C3=B3mez?= Date: Tue, 24 Mar 2026 19:34:59 +0100 Subject: [PATCH 06/19] build: fix build script --- build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sh b/build.sh index 72550454..2a30bbd8 100644 --- a/build.sh +++ b/build.sh @@ -1,5 +1,5 @@ set -euo pipefail yarn install --frozen-lockfile; -yarn run vite:build; +yarn run build; hugo --minify; From fb506262894ec875fb2ffc7776636be5c1ef96c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20G=C3=B3mez?= Date: Tue, 24 Mar 2026 21:38:20 +0100 Subject: [PATCH 07/19] build: making vite transform all build outputs --- .gitignore | 1 - build.sh | 3 +- layouts/partials/vite.html | 34 ++------- vite.config.js | 145 ++++++++++++++++++++++++++++++++----- 4 files changed, 132 insertions(+), 51 deletions(-) diff --git a/.gitignore b/.gitignore index d55d1739..1c9bec49 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,5 @@ /static/fonts/vendor/ /static/js/ /static/css/ -/static/dist/ /public/ /.project diff --git a/build.sh b/build.sh index 2a30bbd8..89f3a696 100644 --- a/build.sh +++ b/build.sh @@ -1,5 +1,4 @@ set -euo pipefail yarn install --frozen-lockfile; -yarn run build; -hugo --minify; +yarn build; diff --git a/layouts/partials/vite.html b/layouts/partials/vite.html index a7f710c0..17b85b28 100644 --- a/layouts/partials/vite.html +++ b/layouts/partials/vite.html @@ -1,7 +1,7 @@ {{ $entry := . }} -{{ if hugo.IsServer }} - {{ if or (strings.HasSuffix $entry ".less") (strings.HasSuffix $entry ".css") }} +{{ if or (strings.HasSuffix $entry ".less") (strings.HasSuffix $entry ".css") }} + {{ if hugo.IsServer }} {{/* Hide page until styles are injected to prevent FOUC (flash of unstyled content). The import resolves after Vite injects the @@ -10,33 +10,9 @@ document.getElementById('vite-fouc-guard').remove(); {{ else }} - + {{/* In build mode, Vite extracts the CSS import into a tag */}} + {{ end }} {{ else }} - {{ $manifestPath := "static/dist/.vite/manifest.json" }} - - {{ if fileExists $manifestPath }} - {{ $manifest := transform.Unmarshal (readFile $manifestPath) }} - {{ $fileData := index $manifest $entry }} - - {{ if $fileData }} - {{/* Output CSS chunks (from JS entry points that import CSS) */}} - {{ if $fileData.css }} - {{ range $fileData.css }} - - {{ end }} - {{ end }} - - {{/* Determine if the built file is CSS or JS and output the correct tag */}} - {{ if strings.HasSuffix $fileData.file ".css" }} - - {{ else }} - - {{ end }} - {{ else }} - {{ warnf "Vite manifest missing entry: %s" $entry }} - {{ end }} - {{ else }} - {{ warnf "Vite manifest not found at %s" $manifestPath }} - {{ end }} + {{ end }} diff --git a/vite.config.js b/vite.config.js index b3f5e914..47f309d2 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,7 +1,25 @@ import { defineConfig } from 'vite'; -import path from 'path'; +import { execFileSync } from 'node:child_process'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; -const resolve = (...segments) => path.resolve(import.meta.dirname, ...segments); +const projectRoot = import.meta.dirname; +const resolve = (...segments) => path.resolve(projectRoot, ...segments); + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +/** Recursively walk a directory, skipping symlinks. */ +function walkDir(dir, callback) { + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + if (entry.isSymbolicLink()) continue; + const full = path.join(dir, entry.name); + if (entry.isDirectory()) walkDir(full, callback); + else callback(full); + } +} // --------------------------------------------------------------------------- // Plugins @@ -90,16 +108,111 @@ function hugoProxyPlugin() { }; } +/** + * Build-only plugin: runs Hugo, then feeds its HTML output to Vite as MPA + * entry points so the full Vite ecosystem (asset hashing, modulepreload, + * image optimisation plugins, etc.) applies to the final site. + */ +function hugoBuildPlugin() { + let tmpDir; + let baseUrl; + + return { + name: 'vite-plugin-hugo-build', + apply: 'build', + + config() { + // Read the baseurl from Hugo config so we can absolutize URLs below + const configToml = fs.readFileSync(resolve('config.toml'), 'utf-8'); + const match = configToml.match(/^baseurl\s*=\s*"([^"]+)"/im); + baseUrl = match?.[1]?.replace(/\/$/, '') || ''; + + // 1. Build Hugo site to a temp directory + tmpDir = fs.realpathSync( + fs.mkdtempSync(path.join(os.tmpdir(), 'hugo-vite-')), + ); + execFileSync('hugo', ['--minify', '--destination', tmpDir], { + cwd: projectRoot, + stdio: 'inherit', + }); + + // 2. Symlink source dirs so Vite can resolve imports from the HTML + for (const name of ['js', 'less', 'node_modules']) { + const link = path.join(tmpDir, name); + if (!fs.existsSync(link)) { + fs.symlinkSync(path.join(projectRoot, name), link); + } + } + + // 3. Discover all HTML files as MPA entry points + const htmlFiles = []; + walkDir(tmpDir, (f) => { + if (f.endsWith('.html')) htmlFiles.push(path.relative(tmpDir, f)); + }); + + const input = Object.fromEntries( + htmlFiles.map((f) => [ + f.replace(/\.html$/, '').replaceAll('/', '_') || 'index', + path.join(tmpDir, f), + ]), + ); + + // 4. Clean the output directory (outDir is outside root, so Vite + // won't empty it automatically) + const outDir = resolve('public'); + fs.rmSync(outDir, { recursive: true, force: true }); + + return { + root: tmpDir, + build: { + outDir, + emptyOutDir: false, + rollupOptions: { input }, + }, + }; + }, + + // Make canonical and alternate link URLs absolute to prevent Vite from + // trying to read directory-pointing URLs (e.g. href="/") as asset files. + transformIndexHtml: { + order: 'pre', + handler(html) { + return html.replace(/]*>/gi, (tag) => { + if (!/rel=(?:"|)(?:canonical|alternate)(?:"|)/i.test(tag)) return tag; + return tag.replace( + /(href=(?:"|))(\/[^">\s]*)/, + (_, pre, url) => pre + baseUrl + url, + ); + }); + }, + }, + + writeBundle() { + // Copy non-HTML static assets (images, fonts, XML, etc.) from + // Hugo's output to the final directory. HTML files are already + // processed by Vite's build pipeline. + const outDir = resolve('public'); + walkDir(tmpDir, (f) => { + if (f.endsWith('.html')) return; + const rel = path.relative(tmpDir, f); + const dest = path.join(outDir, rel); + fs.mkdirSync(path.dirname(dest), { recursive: true }); + fs.copyFileSync(f, dest); + }); + }, + + closeBundle() { + if (tmpDir) fs.rmSync(tmpDir, { recursive: true, force: true }); + }, + }; +} + // --------------------------------------------------------------------------- // Config // --------------------------------------------------------------------------- -export default defineConfig(({ command }) => ({ - plugins: [mustachePlugin(), hugoProxyPlugin()], - - // In production, assets live under /dist/ (Hugo copies static/dist → public/dist). - // In dev, the Vite dev server serves from root. - base: command === 'build' ? '/dist/' : '/', +export default defineConfig({ + plugins: [mustachePlugin(), hugoProxyPlugin(), hugoBuildPlugin()], // Shim Node globals used by CJS deps (parse-link-header reads process.env) define: { 'process.env': '{}' }, @@ -144,18 +257,12 @@ export default defineConfig(({ command }) => ({ }, // Disable Vite's default public directory copying — Hugo's output lives in - // public/ and we don't want it duplicated into static/dist/ on build. + // public/ and we don't want it served as static files in dev. publicDir: false, + // Used by `vite preview` to know where the build output lives. + // During `vite build`, the hugoBuildPlugin overrides this with an absolute path. build: { - outDir: 'static/dist', - emptyOutDir: true, - manifest: true, - rollupOptions: { - input: { - main: resolve('js/vite-entry.js'), - styles: resolve('less/styles.less'), - }, - }, + outDir: 'public', }, -})); +}); From 0231010257e63d9bebccd1237945303db38049a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20G=C3=B3mez?= Date: Tue, 24 Mar 2026 21:52:31 +0100 Subject: [PATCH 08/19] build: removing unnecesary vite partial --- config.toml | 2 + js/{vite-entry.js => entry.js} | 0 layouts/partials/footer_js.html | 5 +- layouts/partials/head.html | 104 -------------------------------- layouts/partials/vite.html | 18 ------ 5 files changed, 5 insertions(+), 124 deletions(-) rename js/{vite-entry.js => entry.js} (100%) delete mode 100644 layouts/partials/head.html delete mode 100644 layouts/partials/vite.html diff --git a/config.toml b/config.toml index 7561d90e..c39937cb 100644 --- a/config.toml +++ b/config.toml @@ -17,6 +17,8 @@ themesDir = "node_modules/" keywords = ["open-source", "risc-v", "hardware", "software", "hw", "sw", "eclipse ide"] logo = "/images/openhw-landscape.png" logo_width = "200" + styles = "less/styles.less" + js = "js/entry.js" favicon = "images/favicon.ico" # share_img = "" gcse = "" diff --git a/js/vite-entry.js b/js/entry.js similarity index 100% rename from js/vite-entry.js rename to js/entry.js diff --git a/layouts/partials/footer_js.html b/layouts/partials/footer_js.html index 06000d98..56672aa1 100644 --- a/layouts/partials/footer_js.html +++ b/layouts/partials/footer_js.html @@ -1,7 +1,8 @@