From 9fe918e2f0a454d5a32078a8e2d9e3b5478755a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 20 Jan 2026 19:39:28 +0100 Subject: [PATCH 01/76] vite config --- vite.config.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 vite.config.js diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 000000000..34053ea06 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,30 @@ +// vite.config.js +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import path from "path"; + +export default defineConfig({ + plugins: [react()], + root: "client", + build: { + outDir: "../build", + emptyOutDir: true, + ssrManifest: true, + rollupOptions: { + input: { + admin: path.resolve(__dirname, "client/admin/admin.jsx"), + homebrew: path.resolve(__dirname, "client/homebrew/homebrew.jsx"), + }, + output: { + entryFileNames: "[name]/bundle.js", + chunkFileNames: "[name]/[name]-[hash].js", + assetFileNames: "[name]/[name].[ext]", + }, + }, + }, + server: { + fs: { + allow: ["."], + }, + }, +}); From 9b93be7e23445e7e70cc3a7b915df1c6fe37e566 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 20 Jan 2026 19:40:52 +0100 Subject: [PATCH 02/76] first stage, unfinished --- client/admin/admin.less | 10 ++-- client/components/splitPane/splitPane.jsx | 6 +- client/components/splitPane/splitPane.less | 2 + client/homebrew/homebrew.less | 2 +- client/homebrew/pages/homePage/homePage.jsx | 4 +- client/homebrew/pages/homePage/homePage.less | 2 + package.json | 8 ++- scripts/dev.js | 58 ++++++++++++++------ shared/naturalcrit/styles/core.less | 8 +-- 9 files changed, 65 insertions(+), 35 deletions(-) diff --git a/client/admin/admin.less b/client/admin/admin.less index 0fc353194..acb859f50 100644 --- a/client/admin/admin.less +++ b/client/admin/admin.less @@ -1,8 +1,8 @@ -@import 'naturalcrit/styles/reset.less'; -@import 'naturalcrit/styles/elements.less'; -@import 'naturalcrit/styles/animations.less'; -@import 'naturalcrit/styles/colors.less'; -@import 'naturalcrit/styles/tooltip.less'; +@import './shared/naturalcrit/styles/reset.less'; +@import './shared/naturalcrit/styles/elements.less'; +@import './shared/naturalcrit/styles/animations.less'; +@import './shared/naturalcrit/styles/colors.less'; +@import './shared/naturalcrit/styles/tooltip.less'; @import './themes/fonts/iconFonts/fontAwesome.less'; @import 'font-awesome/css/font-awesome.css'; diff --git a/client/components/splitPane/splitPane.jsx b/client/components/splitPane/splitPane.jsx index 78ba59ed3..1506db265 100644 --- a/client/components/splitPane/splitPane.jsx +++ b/client/components/splitPane/splitPane.jsx @@ -1,5 +1,5 @@ -require('./splitPane.less'); -const React = require('react'); +import "./splitPane.less"; +import React from "react"; const { useState, useEffect } = React; const PANE_WIDTH_KEY = 'HB_editor_splitWidth'; @@ -108,4 +108,4 @@ const Pane = ({ width, children, isDragging, moveBrew, moveSource, liveScroll, s ); }; -module.exports = SplitPane; +export default SplitPane; diff --git a/client/components/splitPane/splitPane.less b/client/components/splitPane/splitPane.less index 80a8695af..556cd1996 100644 --- a/client/components/splitPane/splitPane.less +++ b/client/components/splitPane/splitPane.less @@ -1,3 +1,5 @@ +@import './shared/naturalcrit/styles/core.less'; + .splitPane { position : relative; diff --git a/client/homebrew/homebrew.less b/client/homebrew/homebrew.less index 2cbc35857..c550b266f 100644 --- a/client/homebrew/homebrew.less +++ b/client/homebrew/homebrew.less @@ -1,4 +1,4 @@ -@import 'naturalcrit/styles/core.less'; +@import './shared/naturalcrit/styles/core.less'; .homebrew { height : 100%; background-color:@steel; diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 463df333b..3e4f2bfe9 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -4,13 +4,13 @@ import './homePage.less'; // Common imports import React, { useState, useEffect, useRef } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from 'markdown.js'; +import Markdown from '../../../../shared/naturalcrit/markdown.js'; import _ from 'lodash'; import { DEFAULT_BREW } from '../../../../server/brewDefaults.js'; import { printCurrentBrew, fetchThemeBundle, splitTextStyleAndMetadata } from '../../../../shared/helpers.js'; -import SplitPane from 'client/components/splitPane/splitPane.jsx'; +import SplitPane from '../../../components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; diff --git a/client/homebrew/pages/homePage/homePage.less b/client/homebrew/pages/homePage/homePage.less index b89c2c7dd..9d39bd642 100644 --- a/client/homebrew/pages/homePage/homePage.less +++ b/client/homebrew/pages/homePage/homePage.less @@ -1,3 +1,5 @@ +@import './shared/naturalcrit/styles/core.less'; + .homePage { position : relative; a.floatingNewButton { diff --git a/package.json b/package.json index 4ee36d620..c5b665b23 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,10 @@ "url": "git://github.com/naturalcrit/homebrewery.git" }, "scripts": { + "viteDev": "node scripts/dev.js", + "viteDevAdmin": "vite --config vite.config.js --ssr client/admin/admin.jsx", + "viteBuild":"vite build", + "viteStart":"vite preview", "dev": "node --experimental-require-module scripts/dev.js", "quick": "node --experimental-require-module scripts/quick.js", "build": "node --experimental-require-module scripts/buildHomebrew.js && node --experimental-require-module scripts/buildAdmin.js", @@ -111,7 +115,7 @@ "idb-keyval": "^6.2.2", "js-yaml": "^4.1.1", "jwt-simple": "^0.5.6", - "less": "^3.13.1", + "less": "^4.5.1", "lodash": "^4.17.21", "marked": "15.0.12", "marked-alignment-paragraphs": "^1.0.0", @@ -135,7 +139,7 @@ "romans": "^3.1.0", "sanitize-filename": "1.6.3", "superagent": "^10.2.1", - "vitreum": "git+https://git@github.com/calculuschild/vitreum.git", + "vite": "^7.3.1", "written-number": "^0.11.1" }, "devDependencies": { diff --git a/scripts/dev.js b/scripts/dev.js index 45f6c3d99..df06ac868 100644 --- a/scripts/dev.js +++ b/scripts/dev.js @@ -1,22 +1,44 @@ -const label = 'dev'; -console.time(label); +import express from "express"; +import { createServer as createViteServer } from "vite"; +import path from "path"; +import url from "url"; +import template from "../client/template.js"; -const jsx = require('vitreum/steps/jsx.watch.js'); -const less = require('vitreum/steps/less.watch.js'); -const assets = require('vitreum/steps/assets.watch.js'); -const server = require('vitreum/steps/server.watch.js'); -const livereload = require('vitreum/steps/livereload.js'); +const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); +const app = express(); -const Proj = require('./project.json'); +async function start() { + const vite = await createViteServer({ + server: { middlewareMode: true }, + root: path.resolve(__dirname, "../client"), + appType: "custom", + }); -Promise.resolve() - .then(()=>jsx('homebrew', './client/homebrew/homebrew.jsx', { libs: Proj.libs, shared: ['./shared'] })) - .then((deps)=>less('homebrew', { shared: ['./shared'] }, deps)) - .then(()=>jsx('admin', './client/admin/admin.jsx', { libs: Proj.libs, shared: ['./shared'] })) - .then((deps)=>less('admin', { shared: ['./shared'] }, deps)) + app.use(vite.middlewares); + app.use("/assets", express.static(path.resolve(__dirname, "../client/assets"))); - .then(()=>assets(Proj.assets, ['./shared', './client'])) - .then(()=>livereload()) - .then(()=>server('./server.js', ['server'])) - .then(console.timeEnd.bind(console, label)) - .catch(console.error); \ No newline at end of file + app.use(/(.*)/, async (req, res, next) => { + try { + const parsed = url.parse(req.url); + const pathname = parsed.pathname || "/"; + + // Ignore vite HMR or ping requests + if (pathname.startsWith("/__vite")) return next(); + + const entry = pathname.startsWith("/admin") ? "admin" : "homebrew"; + + const ssrModule = await vite.ssrLoadModule(`/${entry}/${entry}.jsx`); + + const html = await template(entry, "", { path: pathname, ssrModule }); + res.status(200).set({ "Content-Type": "text/html" }).end(html); + } catch (e) { + vite.ssrFixStacktrace(e); + console.error(e); + res.status(500).end(e.message); + } + }); + + app.listen(8000, () => console.log("Dev server running on http://localhost:8000")); +} + +start(); diff --git a/shared/naturalcrit/styles/core.less b/shared/naturalcrit/styles/core.less index 02db5db18..6b02d1e4e 100644 --- a/shared/naturalcrit/styles/core.less +++ b/shared/naturalcrit/styles/core.less @@ -1,9 +1,9 @@ -@import 'naturalcrit/styles/reset.less'; +@import './reset.less'; //@import 'naturalcrit/styles/elements.less'; -@import 'naturalcrit/styles/animations.less'; -@import 'naturalcrit/styles/colors.less'; -@import 'naturalcrit/styles/tooltip.less'; +@import './animations.less'; +@import './colors.less'; +@import './tooltip.less'; @font-face { font-family : 'CodeLight'; src : data-uri('naturalcrit/styles/CODE Light.otf') format('opentype'); From c4c2d8cabd4320c8fdee625ed855861aaa69cae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Thu, 22 Jan 2026 23:46:10 +0100 Subject: [PATCH 03/76] fix core import --- client/components/splitPane/splitPane.less | 1 - client/homebrew/editor/editor.less | 4 +++- client/homebrew/editor/snippetbar/snippetbar.less | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/client/components/splitPane/splitPane.less b/client/components/splitPane/splitPane.less index 556cd1996..9050eaddc 100644 --- a/client/components/splitPane/splitPane.less +++ b/client/components/splitPane/splitPane.less @@ -1,6 +1,5 @@ @import './shared/naturalcrit/styles/core.less'; - .splitPane { position : relative; display : flex; diff --git a/client/homebrew/editor/editor.less b/client/homebrew/editor/editor.less index fb5891fbe..85d1a6fcd 100644 --- a/client/homebrew/editor/editor.less +++ b/client/homebrew/editor/editor.less @@ -1,4 +1,6 @@ -@import 'themes/codeMirror/customEditorStyles.less'; +@import './shared/naturalcrit/styles/core.less'; +@import './themes/codeMirror/customEditorStyles.less'; + .editor { position : relative; width : 100%; diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index 8e50aa764..51a396536 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -1,3 +1,4 @@ +@import './shared/naturalcrit/styles/core.less'; @import (less) './client/icons/customIcons.less'; @import (less) '././././themes/fonts/5e/fonts.less'; From eb9fc4487cc959768d801423aeec87b101b7e03e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Thu, 22 Jan 2026 23:46:50 +0100 Subject: [PATCH 04/76] fix exports of admin and homebrew.jsx --- client/admin/admin.jsx | 2 +- client/homebrew/homebrew.jsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/admin/admin.jsx b/client/admin/admin.jsx index cc6eb72ca..a8ee10562 100644 --- a/client/admin/admin.jsx +++ b/client/admin/admin.jsx @@ -49,4 +49,4 @@ const Admin = ()=>{ ); }; -module.exports = Admin; +export default Admin; diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index 326287ee6..c7296c02b 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -80,4 +80,4 @@ const Homebrew = (props)=>{ ); }; -module.exports = Homebrew; \ No newline at end of file +export default Homebrew; \ No newline at end of file From b72e5b917252c5dbecc9d846859b0d4c311a4302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 23 Jan 2026 17:18:03 +0100 Subject: [PATCH 05/76] fix file imports --- client/components/codeEditor/autocompleteEmoji.js | 8 ++++---- client/homebrew/brewRenderer/brewRenderer.jsx | 2 +- client/homebrew/editor/editor.jsx | 4 ++-- .../editor/metadataEditor/metadataEditor.jsx | 2 +- client/homebrew/editor/snippetbar/snippetbar.jsx | 12 ++++++------ client/homebrew/pages/homePage/homePage.jsx | 4 ++-- vite.config.js | 1 - 7 files changed, 16 insertions(+), 17 deletions(-) diff --git a/client/components/codeEditor/autocompleteEmoji.js b/client/components/codeEditor/autocompleteEmoji.js index d5a3a71aa..4fa3782d5 100644 --- a/client/components/codeEditor/autocompleteEmoji.js +++ b/client/components/codeEditor/autocompleteEmoji.js @@ -1,7 +1,7 @@ -import diceFont from 'themes/fonts/iconFonts/diceFont.js'; -import elderberryInn from 'themes/fonts/iconFonts/elderberryInn.js'; -import fontAwesome from 'themes/fonts/iconFonts/fontAwesome.js'; -import gameIcons from 'themes/fonts/iconFonts/gameIcons.js'; +import diceFont from './themes/fonts/iconFonts/diceFont.js'; +import elderberryInn from './themes/fonts/iconFonts/elderberryInn.js'; +import fontAwesome from './themes/fonts/iconFonts/fontAwesome.js'; +import gameIcons from './themes/fonts/iconFonts/gameIcons.js'; const emojis = { ...diceFont, diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index ebf008dd1..d4d06405f 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -13,7 +13,7 @@ import RenderWarnings from 'client/components/renderWarnings/renderWarnings.jsx' import NotificationPopup from './notificationPopup/notificationPopup.jsx'; import Frame from 'react-frame-component'; import dedent from 'dedent-tabs'; -import { printCurrentBrew } from '../../../shared/helpers.js'; +import { printCurrentBrew } from './shared/helpers.js'; import HeaderNav from './headerNav/headerNav.jsx'; import { safeHTML } from './safeHTML.js'; diff --git a/client/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx index e58d53445..5c6b58287 100644 --- a/client/homebrew/editor/editor.jsx +++ b/client/homebrew/editor/editor.jsx @@ -4,9 +4,9 @@ import React from 'react'; import createReactClass from 'create-react-class'; import _ from 'lodash'; import dedent from 'dedent-tabs'; -import Markdown from '../../../shared/markdown.js'; +import Markdown from './shared/markdown.js'; -import CodeEditor from 'client/components/codeEditor/codeEditor.jsx'; +import CodeEditor from '../../components/codeEditor/codeEditor.jsx'; import SnippetBar from './snippetbar/snippetbar.jsx'; import MetadataEditor from './metadataEditor/metadataEditor.jsx'; diff --git a/client/homebrew/editor/metadataEditor/metadataEditor.jsx b/client/homebrew/editor/metadataEditor/metadataEditor.jsx index 21fdca646..5ef409b9f 100644 --- a/client/homebrew/editor/metadataEditor/metadataEditor.jsx +++ b/client/homebrew/editor/metadataEditor/metadataEditor.jsx @@ -8,7 +8,7 @@ import Combobox from 'client/components/combobox.jsx'; import TagInput from '../tagInput/tagInput.jsx'; -import Themes from 'themes/themes.json'; +import Themes from './themes/themes.json'; import validations from './validations.js'; const SYSTEMS = ['5e', '4e', '3.5e', 'Pathfinder']; diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx index b6e977ea2..d8e35f297 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.jsx +++ b/client/homebrew/editor/snippetbar/snippetbar.jsx @@ -7,13 +7,13 @@ import _ from 'lodash'; import cx from 'classnames'; import { loadHistory } from '../../utils/versionHistory.js'; -import { brewSnippetsToJSON } from '../../../../shared/helpers.js'; +import { brewSnippetsToJSON } from './shared/helpers.js'; -import Legacy5ePHB from 'themes/Legacy/5ePHB/snippets.js'; -import V3_5ePHB from 'themes/V3/5ePHB/snippets.js'; -import V3_5eDMG from 'themes/V3/5eDMG/snippets.js'; -import V3_Journal from 'themes/V3/Journal/snippets.js'; -import V3_Blank from 'themes/V3/Blank/snippets.js'; +import Legacy5ePHB from './themes/Legacy/5ePHB/snippets.js'; +import V3_5ePHB from './themes/V3/5ePHB/snippets.js'; +import V3_5eDMG from './themes/V3/5eDMG/snippets.js'; +import V3_Journal from './themes/V3/Journal/snippets.js'; +import V3_Blank from './themes/V3/Blank/snippets.js'; const ThemeSnippets = { Legacy_5ePHB : Legacy5ePHB, diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 6f0562715..f5fae80d9 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -4,7 +4,7 @@ import './homePage.less'; // Common imports import React, { useState, useEffect, useRef } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from '../../../../shared/naturalcrit/markdown.js'; +import Markdown from '../../../../shared/markdown.js'; import _ from 'lodash'; import { DEFAULT_BREW } from '../../../../server/brewDefaults.js'; @@ -27,7 +27,7 @@ const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import { Meta } from 'vitreum/headtags'; +import { Meta } from 'vitreum/headtags'; const BREWKEY = 'homebrewery-new'; const STYLEKEY = 'homebrewery-new-style'; diff --git a/vite.config.js b/vite.config.js index 34053ea06..95b8be8e0 100644 --- a/vite.config.js +++ b/vite.config.js @@ -5,7 +5,6 @@ import path from "path"; export default defineConfig({ plugins: [react()], - root: "client", build: { outDir: "../build", emptyOutDir: true, From dbeff56ffa5dc9330b4102f8700086adacb05b5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 23 Jan 2026 17:38:16 +0100 Subject: [PATCH 06/76] change legacy snippets to use named exports and move from dedent-tabs to dedent --- client/homebrew/brewRenderer/brewRenderer.jsx | 2 +- client/homebrew/editor/editor.jsx | 2 +- .../homebrew/editor/snippetbar/snippetbar.jsx | 2 +- client/homebrew/navbar/help.navitem.jsx | 2 +- client/homebrew/navbar/share.navitem.jsx | 2 +- .../basePages/listPage/brewItem/brewItem.jsx | 2 +- .../pages/errorPage/errors/errorIndex.js | 2 +- package-lock.json | 4248 ++++------------- package.json | 6 +- tests/markdown/emojis.test.js | 2 +- tests/markdown/mustache-syntax.test.js | 2 +- tests/markdown/variables.test.js | 2 +- themes/Legacy/5ePHB/snippets.js | 14 +- .../Legacy/5ePHB/snippets/classfeature.gen.js | 6 +- themes/Legacy/5ePHB/snippets/coverpage.gen.js | 8 +- themes/Legacy/5ePHB/snippets/fullclass.gen.js | 6 +- .../5ePHB/snippets/tableOfContents.gen.js | 7 +- themes/V3/5ePHB/snippets.js | 2 +- themes/V3/5ePHB/snippets/classfeature.gen.js | 2 +- themes/V3/5ePHB/snippets/classtable.gen.js | 2 +- themes/V3/5ePHB/snippets/coverpage.gen.js | 2 +- themes/V3/5ePHB/snippets/monsterblock.gen.js | 2 +- themes/V3/5ePHB/snippets/script.gen.js | 2 +- themes/V3/Blank/snippets.js | 2 +- themes/V3/Blank/snippets/imageMask.gen.js | 2 +- themes/V3/Blank/snippets/index.gen.js | 2 +- .../V3/Blank/snippets/tableOfContents.gen.js | 2 +- 27 files changed, 1073 insertions(+), 3262 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index d4d06405f..26b637897 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -12,7 +12,7 @@ import ToolBar from './toolBar/toolBar.jsx'; import RenderWarnings from 'client/components/renderWarnings/renderWarnings.jsx'; import NotificationPopup from './notificationPopup/notificationPopup.jsx'; import Frame from 'react-frame-component'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; import { printCurrentBrew } from './shared/helpers.js'; import HeaderNav from './headerNav/headerNav.jsx'; diff --git a/client/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx index 5c6b58287..20eb071f7 100644 --- a/client/homebrew/editor/editor.jsx +++ b/client/homebrew/editor/editor.jsx @@ -3,7 +3,7 @@ import './editor.less'; import React from 'react'; import createReactClass from 'create-react-class'; import _ from 'lodash'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; import Markdown from './shared/markdown.js'; import CodeEditor from '../../components/codeEditor/codeEditor.jsx'; diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx index d8e35f297..2ef780115 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.jsx +++ b/client/homebrew/editor/snippetbar/snippetbar.jsx @@ -23,7 +23,7 @@ const ThemeSnippets = { V3_Blank : V3_Blank, }; -import EditorThemes from 'build/homebrew/codeMirror/editorThemes.json'; +import EditorThemes from './build/homebrew/codeMirror/editorThemes.json'; const execute = function(val, props){ if(_.isFunction(val)) return val(props); diff --git a/client/homebrew/navbar/help.navitem.jsx b/client/homebrew/navbar/help.navitem.jsx index 145d5bda4..d1f24fbc8 100644 --- a/client/homebrew/navbar/help.navitem.jsx +++ b/client/homebrew/navbar/help.navitem.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; import Nav from 'client/homebrew/navbar/nav.jsx'; diff --git a/client/homebrew/navbar/share.navitem.jsx b/client/homebrew/navbar/share.navitem.jsx index 4e80bc7e3..7804abe0c 100644 --- a/client/homebrew/navbar/share.navitem.jsx +++ b/client/homebrew/navbar/share.navitem.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; import Nav from 'client/homebrew/navbar/nav.jsx'; const getShareId = (brew)=>( diff --git a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx index 41d992b9d..aadadbd3b 100644 --- a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx +++ b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx @@ -5,7 +5,7 @@ import request from '../../../../utils/request-middleware.js'; import googleDriveIcon from '../../../../googleDrive.svg'; import homebreweryIcon from '../../../../thumbnail.svg'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; const BrewItem = ({ brew = { diff --git a/client/homebrew/pages/errorPage/errors/errorIndex.js b/client/homebrew/pages/errorPage/errors/errorIndex.js index 67b658325..065512462 100644 --- a/client/homebrew/pages/errorPage/errors/errorIndex.js +++ b/client/homebrew/pages/errorPage/errors/errorIndex.js @@ -1,4 +1,4 @@ -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; const loginUrl = 'https://www.naturalcrit.com/login'; diff --git a/package-lock.json b/package-lock.json index 5f2d1aff7..93810c9ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "core-js": "^3.47.0", "cors": "^2.8.5", "create-react-class": "^15.7.0", - "dedent-tabs": "^0.10.3", + "dedent": "^1.7.1", "expr-eval": "^2.0.2", "express": "^5.1.0", "express-async-handler": "^1.2.0", @@ -36,7 +36,7 @@ "idb-keyval": "^6.2.2", "js-yaml": "^4.1.1", "jwt-simple": "^0.5.6", - "less": "^3.13.1", + "less": "^4.5.1", "lodash": "^4.17.21", "marked": "15.0.12", "marked-alignment-paragraphs": "^1.0.0", @@ -60,7 +60,7 @@ "romans": "^3.1.0", "sanitize-filename": "1.6.3", "superagent": "^10.2.1", - "vitreum": "git+https://git@github.com/calculuschild/vitreum.git", + "vite": "^7.3.1", "written-number": "^0.11.1" }, "devDependencies": { @@ -1841,7 +1841,6 @@ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz", "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", @@ -2215,6 +2214,422 @@ "tslib": "^2.4.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -3021,6 +3436,331 @@ "url": "https://opencollective.com/pkgr" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz", + "integrity": "sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz", + "integrity": "sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz", + "integrity": "sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz", + "integrity": "sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz", + "integrity": "sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz", + "integrity": "sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz", + "integrity": "sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz", + "integrity": "sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz", + "integrity": "sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz", + "integrity": "sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz", + "integrity": "sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz", + "integrity": "sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz", + "integrity": "sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz", + "integrity": "sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz", + "integrity": "sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz", + "integrity": "sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz", + "integrity": "sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz", + "integrity": "sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.56.0.tgz", + "integrity": "sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz", + "integrity": "sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz", + "integrity": "sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz", + "integrity": "sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz", + "integrity": "sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz", + "integrity": "sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz", + "integrity": "sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sanity/diff-match-patch": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@sanity/diff-match-patch/-/diff-match-patch-3.2.0.tgz", @@ -3031,9 +3771,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.34.47", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.47.tgz", - "integrity": "sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw==", + "version": "0.34.48", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", + "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==", "dev": true, "license": "MIT" }, @@ -3139,7 +3879,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { @@ -3180,8 +3919,9 @@ "version": "25.0.10", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.10.tgz", "integrity": "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==", - "dev": true, + "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -3718,38 +4458,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "license": "Apache-2.0", - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", @@ -3823,6 +4531,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -3838,33 +4547,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", @@ -3915,15 +4597,6 @@ "node": ">=8" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", @@ -4028,42 +4701,6 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "license": "MIT" }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT" - }, - "node_modules/assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", - "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.4", - "util": "^0.10.4" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -4080,18 +4717,6 @@ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, - "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -4108,31 +4733,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -4302,49 +4907,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "license": "MIT", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -4393,34 +4955,6 @@ "node": "*" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bn.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", - "license": "MIT" - }, "node_modules/body-parser": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", @@ -4449,6 +4983,7 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -4459,6 +4994,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -4467,227 +5003,6 @@ "node": ">=8" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "license": "MIT" - }, - "node_modules/browser-pack": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", - "license": "MIT", - "dependencies": { - "combine-source-map": "~0.8.0", - "defined": "^1.0.0", - "JSONStream": "^1.0.3", - "safe-buffer": "^5.1.1", - "through2": "^2.0.0", - "umd": "^3.0.0" - }, - "bin": { - "browser-pack": "bin/cmd.js" - } - }, - "node_modules/browser-pack/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/browser-resolve": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", - "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", - "license": "MIT", - "dependencies": { - "resolve": "^1.17.0" - } - }, - "node_modules/browserify": { - "version": "16.5.2", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.2.tgz", - "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==", - "license": "MIT", - "dependencies": { - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^2.0.0", - "browserify-zlib": "~0.2.0", - "buffer": "~5.2.1", - "cached-path-relative": "^1.0.0", - "concat-stream": "^1.6.0", - "console-browserify": "^1.1.0", - "constants-browserify": "~1.0.0", - "crypto-browserify": "^3.0.0", - "defined": "^1.0.0", - "deps-sort": "^2.0.0", - "domain-browser": "^1.2.0", - "duplexer2": "~0.1.2", - "events": "^2.0.0", - "glob": "^7.1.0", - "has": "^1.0.0", - "htmlescape": "^1.1.0", - "https-browserify": "^1.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^7.0.0", - "JSONStream": "^1.0.3", - "labeled-stream-splicer": "^2.0.0", - "mkdirp-classic": "^0.5.2", - "module-deps": "^6.2.3", - "os-browserify": "~0.3.0", - "parents": "^1.0.1", - "path-browserify": "~0.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^2.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.4", - "shasum": "^1.0.0", - "shell-quote": "^1.6.1", - "stream-browserify": "^2.0.0", - "stream-http": "^3.0.0", - "string_decoder": "^1.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.10.1", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "browserify": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "license": "MIT", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "license": "MIT", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", - "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", - "license": "MIT", - "dependencies": { - "bn.js": "^5.2.1", - "randombytes": "^2.1.0", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz", - "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", - "license": "ISC", - "dependencies": { - "bn.js": "^5.2.2", - "browserify-rsa": "^4.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.6.1", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.9", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "license": "MIT", - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserify/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/browserify/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "license": "MIT" - }, - "node_modules/browserify/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, "node_modules/browserslist": { "version": "4.28.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", @@ -4741,16 +5056,6 @@ "node": ">=16.20.1" } }, - "node_modules/buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -4761,18 +5066,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "license": "MIT" - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true, "license": "MIT" }, "node_modules/bytes": { @@ -4784,26 +5078,6 @@ "node": ">= 0.8" } }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "license": "MIT", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cacheable": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.2.tgz", @@ -4828,16 +5102,11 @@ "@keyv/serialize": "^1.1.1" } }, - "node_modules/cached-path-relative": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", - "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", - "license": "MIT" - }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", @@ -4902,9 +5171,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001765", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz", - "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==", + "version": "1.0.30001766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", "funding": [ { "type": "opencollective", @@ -4948,42 +5217,6 @@ "node": ">=10" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/ci-info": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", @@ -5000,20 +5233,6 @@ "node": ">=8" } }, - "node_modules/cipher-base": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", - "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.2" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/cjs-module-lexer": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", @@ -5021,21 +5240,6 @@ "dev": true, "license": "MIT" }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", @@ -5144,19 +5348,6 @@ "dev": true, "license": "MIT" }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "license": "MIT", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5182,33 +5373,6 @@ "dev": true, "license": "MIT" }, - "node_modules/combine-source-map": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==", - "license": "MIT", - "dependencies": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" - } - }, - "node_modules/combine-source-map/node_modules/convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==", - "license": "MIT" - }, - "node_modules/combine-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -5234,32 +5398,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true, "license": "MIT" }, "node_modules/content-disposition": { @@ -5336,15 +5475,6 @@ "url": "https://github.com/sponsors/mesqueeb" } }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/core-js": { "version": "3.48.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz", @@ -5369,16 +5499,10 @@ "url": "https://opencollective.com/core-js" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", "license": "MIT", "dependencies": { "object-assign": "^4", @@ -5386,6 +5510,10 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cosmiconfig": { @@ -5415,49 +5543,6 @@ } } }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "node_modules/create-react-class": { "version": "15.7.0", "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", @@ -5482,32 +5567,6 @@ "node": ">= 8" } }, - "node_modules/crypto-browserify": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", - "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", - "license": "MIT", - "dependencies": { - "browserify-cipher": "^1.0.1", - "browserify-sign": "^4.2.3", - "create-ecdh": "^4.0.4", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "diffie-hellman": "^5.0.3", - "hash-base": "~3.0.4", - "inherits": "^2.0.4", - "pbkdf2": "^3.1.2", - "public-encrypt": "^4.0.3", - "randombytes": "^2.1.0", - "randomfill": "^1.0.4" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/css-functions-list": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", @@ -5571,12 +5630,6 @@ "node": "20 || >=22" } }, - "node_modules/dash-ast": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", - "license": "Apache-2.0" - }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -5688,15 +5741,6 @@ "dev": true, "license": "MIT" }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, "node_modules/dedent": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", @@ -5739,6 +5783,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -5756,6 +5801,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", @@ -5769,27 +5815,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -5808,41 +5833,6 @@ "node": ">= 0.8" } }, - "node_modules/deps-sort": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", - "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", - "license": "MIT", - "dependencies": { - "JSONStream": "^1.0.3", - "shasum-object": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" - }, - "bin": { - "deps-sort": "bin/cmd.js" - } - }, - "node_modules/deps-sort/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -5853,23 +5843,6 @@ "node": ">=8" } }, - "node_modules/detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "license": "MIT", - "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/dezalgo": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", @@ -5880,23 +5853,6 @@ "wrappy": "1" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT" - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -5923,16 +5879,6 @@ "node": ">=0.10.0" } }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "license": "MIT", - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -5947,15 +5893,6 @@ "node": ">= 0.4" } }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "license": "BSD-3-Clause", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -5978,32 +5915,11 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.277", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.277.tgz", - "integrity": "sha512-wKXFZw4erWmmOz5N/grBoJ2XrNJGDFMu2+W5ACHza5rHtvsqrK4gb6rnLC7XxKB9WlJ+RmyQatuEXmtm86xbnw==", + "version": "1.5.278", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.278.tgz", + "integrity": "sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==", "license": "ISC" }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT" - }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -6251,6 +6167,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -6582,25 +6539,6 @@ "node": ">= 0.6" } }, - "node_modules/events": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", - "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", - "license": "MIT", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "license": "MIT", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -6642,39 +6580,6 @@ "node": ">= 0.8.0" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "license": "MIT", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/expect": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", @@ -6774,62 +6679,6 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "license": "MIT", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -6976,17 +6825,11 @@ "node": ">=16.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT", - "optional": true - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -7055,6 +6898,7 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.2.7" @@ -7066,15 +6910,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", @@ -7166,18 +7001,6 @@ "node": ">= 0.6" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "license": "MIT", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", @@ -7205,6 +7028,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, "license": "ISC" }, "node_modules/fsevents": { @@ -7309,12 +7133,6 @@ "node": ">=6.9.0" } }, - "node_modules/get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "license": "Apache-2.0" - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -7402,15 +7220,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/github-slugger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", @@ -7654,15 +7463,6 @@ "node": ">=18" } }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -7690,6 +7490,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -7741,98 +7542,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/hash-wasm": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.12.0.tgz", "integrity": "sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==", "license": "MIT" }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "node_modules/hashery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.4.0.tgz", @@ -7858,17 +7573,6 @@ "node": ">= 0.4" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/hookified": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.0.tgz", @@ -7909,15 +7613,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, "node_modules/http-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", @@ -7952,12 +7647,6 @@ "node": ">= 14" } }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "license": "MIT" - }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -8003,26 +7692,6 @@ "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", "license": "Apache-2.0" }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -8033,12 +7702,6 @@ "node": ">= 4" } }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "license": "ISC" - }, "node_modules/image-size": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", @@ -8114,6 +7777,7 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -8135,55 +7799,6 @@ "node": ">=10" } }, - "node_modules/inline-source-map": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.3.tgz", - "integrity": "sha512-1aVsPEsJWMJq/pdMU61CDlm1URcW702MTB4w9/zUjMus6H/Py8o7g68Pr9D4I6QluWGt/KdmswuRhaA05xVR1w==", - "license": "MIT", - "dependencies": { - "source-map": "~0.5.3" - } - }, - "node_modules/inline-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/insert-module-globals": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", - "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", - "license": "MIT", - "dependencies": { - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "JSONStream": "^1.0.3", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" - }, - "bin": { - "insert-module-globals": "bin/cmd.js" - } - }, - "node_modules/insert-module-globals/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -8208,18 +7823,6 @@ "node": ">= 0.10" } }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -8281,18 +7884,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-boolean-object": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", @@ -8310,16 +7901,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "license": "MIT" - }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8343,18 +7929,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/is-data-view": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", @@ -8390,32 +7964,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8480,6 +8033,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -8518,6 +8072,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -8663,6 +8218,7 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" @@ -8726,19 +8282,11 @@ "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", "license": "MIT" }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, "license": "MIT" }, "node_modules/isexe": { @@ -8747,15 +8295,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -9598,15 +9137,6 @@ "dev": true, "license": "MIT" }, - "node_modules/json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha512-nKtD/Qxm7tWdZqJoldEC7fF0S41v0mWbeaXG3637stOWfyGxTgWTYE2wtfKmjzpvxv2MA2xzxsXOIiwUpkX6Qw==", - "license": "MIT", - "dependencies": { - "jsonify": "~0.0.0" - } - }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -9638,40 +9168,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", - "license": "Public Domain", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -9741,6 +9237,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9753,30 +9250,22 @@ "dev": true, "license": "MIT" }, - "node_modules/labeled-stream-splicer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", - "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "stream-splicer": "^2.0.0" - } - }, "node_modules/less": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz", - "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/less/-/less-4.5.1.tgz", + "integrity": "sha512-UKgI3/KON4u6ngSsnDADsUERqhZknsVZbnuzlRZXLQCmfC/MDld42fTydUE9B+Mla1AL6SJ/Pp6SlEFi/AVGfw==", + "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "copy-anything": "^2.0.1", - "tslib": "^1.10.0" + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" }, "bin": { "lessc": "bin/lessc" }, "engines": { - "node": ">=6" + "node": ">=14" }, "optionalDependencies": { "errno": "^0.1.1", @@ -9784,7 +9273,7 @@ "image-size": "~0.5.0", "make-dir": "^2.1.0", "mime": "^1.4.1", - "native-request": "^1.0.5", + "needle": "^3.1.0", "source-map": "~0.6.0" } }, @@ -9812,12 +9301,6 @@ "semver": "bin/semver" } }, - "node_modules/less/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -9849,51 +9332,6 @@ "dev": true, "license": "MIT" }, - "node_modules/livereload": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", - "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==", - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.0", - "livereload-js": "^3.3.1", - "opts": ">= 1.2.0", - "ws": "^7.4.3" - }, - "bin": { - "livereload": "bin/livereload.js" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/livereload-js": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.4.1.tgz", - "integrity": "sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==", - "license": "MIT" - }, - "node_modules/livereload/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -9919,12 +9357,6 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, - "node_modules/lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==", - "license": "MIT" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -9999,27 +9431,6 @@ "tmpl": "1.0.5" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "license": "MIT", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/marked": { "version": "15.0.12", "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", @@ -10157,17 +9568,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, "node_modules/mdn-data": { "version": "2.12.2", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", @@ -10255,25 +9655,6 @@ "node": ">=8.6" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT" - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -10322,22 +9703,11 @@ "node": ">=6" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "license": "MIT" - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -10346,15 +9716,6 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -10364,88 +9725,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "license": "MIT", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "license": "MIT" - }, - "node_modules/module-deps": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", - "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", - "license": "MIT", - "dependencies": { - "browser-resolve": "^2.0.0", - "cached-path-relative": "^1.0.2", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.2.0", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "JSONStream": "^1.0.3", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "module-deps": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/module-deps/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, "node_modules/moment": { "version": "2.30.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", @@ -10550,21 +9829,6 @@ "node": ">=12" } }, - "node_modules/mongoose/node_modules/gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/mongoose/node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -10698,13 +9962,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/nan": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.24.0.tgz", - "integrity": "sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==", - "license": "MIT", - "optional": true - }, "node_modules/nanoid": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", @@ -10723,91 +9980,6 @@ "node": "^18 || >=20" } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/napi-postinstall": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", @@ -10824,13 +9996,6 @@ "url": "https://opencollective.com/napi-postinstall" } }, - "node_modules/native-request": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.1.2.tgz", - "integrity": "sha512-/etjwrK0J4Ebbcnt35VMWnfiUX/B04uwGJxyJInagxDqf2z5drSt/lsOvEMWGYunz1kaLZAFrV4NDAbOoDKvAQ==", - "license": "MIT", - "optional": true - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -10949,6 +10114,36 @@ "node": ">=10" } }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", @@ -11009,77 +10204,11 @@ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "license": "MIT" }, - "node_modules/nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11107,32 +10236,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "license": "MIT", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -11149,27 +10252,17 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.assign": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -11221,18 +10314,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.values": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", @@ -11307,27 +10388,6 @@ "node": ">= 0.8.0" } }, - "node_modules/opts": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", - "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", - "license": "BSD-2-Clause" - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "license": "MIT" - }, - "node_modules/outpipe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", - "integrity": "sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==", - "license": "MIT", - "dependencies": { - "shell-quote": "^1.4.2" - } - }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", @@ -11407,12 +10467,6 @@ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "license": "BlueOak-1.0.0" }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -11426,31 +10480,6 @@ "node": ">=6" } }, - "node_modules/parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==", - "license": "MIT", - "dependencies": { - "path-platform": "~0.11.15" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.9.tgz", - "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", - "license": "ISC", - "dependencies": { - "asn1.js": "^4.10.1", - "browserify-aes": "^1.2.0", - "evp_bytestokey": "^1.0.3", - "pbkdf2": "^3.1.5", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -11470,6 +10499,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/parse5": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", @@ -11492,27 +10530,6 @@ "node": ">= 0.8" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "license": "MIT" - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "license": "MIT" - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -11527,6 +10544,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11547,15 +10565,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "license": "MIT" }, - "node_modules/path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -11598,23 +10607,6 @@ "node": ">=8" } }, - "node_modules/pbkdf2": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", - "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", - "license": "MIT", - "dependencies": { - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "ripemd160": "^2.0.3", - "safe-buffer": "^5.2.1", - "sha.js": "^2.4.12", - "to-buffer": "^1.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -11625,6 +10617,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -11666,19 +10659,11 @@ "node": ">=8" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -11688,7 +10673,6 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -11797,7 +10781,6 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -11850,21 +10833,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -11903,32 +10871,6 @@ "license": "MIT", "optional": true }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "license": "MIT" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT" - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -11983,14 +10925,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -12012,25 +10946,6 @@ ], "license": "MIT" }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "license": "MIT", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -12135,63 +11050,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==", - "license": "MIT", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -12233,56 +11091,6 @@ "node": ">=4" } }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", @@ -12339,30 +11147,6 @@ "regjsparser": "bin/parser" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "license": "ISC" - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -12425,22 +11209,6 @@ "node": ">=8" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "license": "MIT" - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "license": "MIT", - "engines": { - "node": ">=0.12" - } - }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -12467,32 +11235,48 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ripemd160": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", - "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", + "node_modules/rollup": { + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.56.0.tgz", + "integrity": "sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==", "license": "MIT", "dependencies": { - "hash-base": "^3.1.2", - "inherits": "^2.0.4" + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ripemd160/node_modules/hash-base": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", - "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.1" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, - "engines": { - "node": ">= 0.8" + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.56.0", + "@rollup/rollup-android-arm64": "4.56.0", + "@rollup/rollup-darwin-arm64": "4.56.0", + "@rollup/rollup-darwin-x64": "4.56.0", + "@rollup/rollup-freebsd-arm64": "4.56.0", + "@rollup/rollup-freebsd-x64": "4.56.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.56.0", + "@rollup/rollup-linux-arm-musleabihf": "4.56.0", + "@rollup/rollup-linux-arm64-gnu": "4.56.0", + "@rollup/rollup-linux-arm64-musl": "4.56.0", + "@rollup/rollup-linux-loong64-gnu": "4.56.0", + "@rollup/rollup-linux-loong64-musl": "4.56.0", + "@rollup/rollup-linux-ppc64-gnu": "4.56.0", + "@rollup/rollup-linux-ppc64-musl": "4.56.0", + "@rollup/rollup-linux-riscv64-gnu": "4.56.0", + "@rollup/rollup-linux-riscv64-musl": "4.56.0", + "@rollup/rollup-linux-s390x-gnu": "4.56.0", + "@rollup/rollup-linux-x64-gnu": "4.56.0", + "@rollup/rollup-linux-x64-musl": "4.56.0", + "@rollup/rollup-openbsd-x64": "4.56.0", + "@rollup/rollup-openharmony-arm64": "4.56.0", + "@rollup/rollup-win32-arm64-msvc": "4.56.0", + "@rollup/rollup-win32-ia32-msvc": "4.56.0", + "@rollup/rollup-win32-x64-gnu": "4.56.0", + "@rollup/rollup-win32-x64-msvc": "4.56.0", + "fsevents": "~2.3.2" } }, "node_modules/romans": { @@ -12598,15 +11382,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "license": "MIT", - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safe-regex-test": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", @@ -12640,6 +11415,16 @@ "truncate-utf8-bytes": "^1.0.0" } }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "optional": true, + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -12732,6 +11517,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -12776,81 +11562,12 @@ "node": ">= 0.4" } }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, - "node_modules/sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" - }, - "bin": { - "sha.js": "bin.js" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha512-UTzHm/+AzKfO9RgPgRpDIuMSNie1ubXRaljjlhFMNGYoG7z+rm9AHLPMf70R7887xboDH9Q+5YQbWKObFHEAtw==", - "license": "MIT", - "dependencies": { - "json-stable-stringify": "~0.0.0", - "sha.js": "~2.4.4" - } - }, - "node_modules/shasum-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.1.tgz", - "integrity": "sha512-SsC+1tW7XKQ/94D4k1JhLmjDFpVGET/Nf54jVDtbavbALf8Zhp0Td9zTlxScjMW6nbEIrpADtPWfLk9iCXzHDQ==", - "license": "Apache-2.0", - "dependencies": { - "fast-safe-stringify": "^2.0.7" - }, - "bin": { - "shasum-object": "bin.js" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -12872,18 +11589,6 @@ "node": ">=8" } }, - "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -12974,47 +11679,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "license": "MIT", - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -13043,116 +11707,11 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "license": "MIT", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "license": "MIT", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "license": "MIT", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -13162,26 +11721,11 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "license": "MIT", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -13193,13 +11737,6 @@ "source-map": "^0.6.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "license": "MIT" - }, "node_modules/sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", @@ -13209,55 +11746,6 @@ "memory-pager": "^1.0.2" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -13288,19 +11776,6 @@ "node": ">=8" } }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "license": "MIT", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -13324,71 +11799,6 @@ "node": ">= 0.4" } }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", - "license": "MIT", - "dependencies": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-http": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "license": "MIT", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", - "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -13861,15 +12271,6 @@ "node": ">=8" } }, - "node_modules/subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", - "license": "MIT", - "dependencies": { - "minimist": "^1.1.0" - } - }, "node_modules/superagent": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.3.0.tgz", @@ -13998,15 +12399,6 @@ "url": "https://opencollective.com/synckit" } }, - "node_modules/syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "license": "MIT", - "dependencies": { - "acorn-node": "^1.2.0" - } - }, "node_modules/table": { "version": "6.9.0", "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", @@ -14130,38 +12522,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "license": "MIT" - }, - "node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - }, - "node_modules/timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==", - "dependencies": { - "process": "~0.11.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -14178,7 +12542,6 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -14196,7 +12559,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, "license": "MIT", "peer": true, "engines": { @@ -14233,63 +12595,11 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/to-buffer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", - "license": "MIT", - "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "license": "MIT", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -14298,69 +12608,6 @@ "node": ">=8.0" } }, - "node_modules/to-regex/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -14370,15 +12617,6 @@ "node": ">=0.6" } }, - "node_modules/touch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", - "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", - "license": "ISC", - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, "node_modules/tough-cookie": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", @@ -14431,15 +12669,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, "license": "0BSD" }, - "node_modules/tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "license": "MIT" - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -14494,6 +12725,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -14567,12 +12799,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "license": "MIT" - }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", @@ -14588,15 +12814,6 @@ "node": ">=14.17" } }, - "node_modules/umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "license": "MIT", - "bin": { - "umd": "bin/cli.js" - } - }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", @@ -14616,33 +12833,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/undeclared-identifiers": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", - "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", - "license": "Apache-2.0", - "dependencies": { - "acorn-node": "^1.3.0", - "dash-ast": "^1.0.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" - }, - "bin": { - "undeclared-identifiers": "bin.js" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "license": "MIT" - }, "node_modules/undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -14685,21 +12880,6 @@ "node": ">=4" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -14753,70 +12933,6 @@ "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "license": "MIT", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "license": "MIT", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, "node_modules/update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", @@ -14857,74 +12973,25 @@ "punycode": "^2.1.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "license": "MIT" - }, - "node_modules/url": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", - "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", - "license": "MIT", - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.12.3" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", "license": "BSD" }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "license": "MIT" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/utf8-byte-length": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", "license": "(WTFPL OR MIT)" }, - "node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "license": "MIT", - "dependencies": { - "inherits": "2.0.3" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, "license": "MIT" }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", @@ -14949,58 +13016,109 @@ "node": ">= 0.8" } }, - "node_modules/vitreum": { - "version": "6.0.4", - "resolved": "git+https://git@github.com/calculuschild/vitreum.git#929c351881c4229550374421c7e2890a94f4dca7", - "hasInstallScript": true, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "license": "MIT", "dependencies": { - "browserify": "^16.5.0", - "fs-extra": "^9.0.1", - "livereload": "^0.9.1", - "nodemon": "^2.0.2", - "source-map-support": "^0.5.16", - "through2": "^3.0.1", - "watchify": "^3.11.1" + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" }, - "peerDependencies": { - "@babel/core": "^7.9.0", - "@babel/preset-react": "^7.9.4", - "less": "^3.11.1", - "react": "^18.3.1", - "react-dom": "^18.3.1" - } - }, - "node_modules/vitreum/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "bin": { + "vite": "bin/vite.js" }, "engines": { - "node": ">=10" + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "node_modules/vitreum/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "license": "MIT" + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", @@ -15025,314 +13143,6 @@ "makeerror": "1.0.12" } }, - "node_modules/watchify": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.11.1.tgz", - "integrity": "sha512-WwnUClyFNRMB2NIiHgJU9RQPQNqVeFk7OmZaWf5dC5EnNa0Mgr7imBydbaJ7tGTuPM2hz1Cb4uiBvK9NVxMfog==", - "license": "MIT", - "dependencies": { - "anymatch": "^2.0.0", - "browserify": "^16.1.0", - "chokidar": "^2.1.1", - "defined": "^1.0.0", - "outpipe": "^1.1.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "watchify": "bin/cmd.js" - } - }, - "node_modules/watchify/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "license": "ISC", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchify/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "license": "MIT", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "license": "MIT", - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/watchify/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchify/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "license": "ISC", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchify/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/watchify/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchify/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/watchify/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/watchify/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", @@ -15462,6 +13272,7 @@ "version": "1.1.20", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -15642,15 +13453,6 @@ "dev": true, "license": "MIT" }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index a6a067508..717430ce3 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "scripts": { "viteDev": "node scripts/dev.js", "viteDevAdmin": "vite --config vite.config.js --ssr client/admin/admin.jsx", - "viteBuild":"vite build", - "viteStart":"vite preview", + "viteBuild": "vite build", + "viteStart": "vite preview", "dev": "node --experimental-require-module scripts/dev.js", "quick": "node --experimental-require-module scripts/quick.js", "build": "node --experimental-require-module scripts/buildHomebrew.js && node --experimental-require-module scripts/buildAdmin.js", @@ -107,7 +107,7 @@ "core-js": "^3.47.0", "cors": "^2.8.5", "create-react-class": "^15.7.0", - "dedent-tabs": "^0.10.3", + "dedent": "^1.7.1", "expr-eval": "^2.0.2", "express": "^5.1.0", "express-async-handler": "^1.2.0", diff --git a/tests/markdown/emojis.test.js b/tests/markdown/emojis.test.js index e5b6ecd47..5f0e102c9 100644 --- a/tests/markdown/emojis.test.js +++ b/tests/markdown/emojis.test.js @@ -1,5 +1,5 @@ import Markdown from 'markdown.js'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; // Marked.js adds line returns after closing tags on some default tokens. // This removes those line returns for comparison sake. diff --git a/tests/markdown/mustache-syntax.test.js b/tests/markdown/mustache-syntax.test.js index bdf368414..8562ae412 100644 --- a/tests/markdown/mustache-syntax.test.js +++ b/tests/markdown/mustache-syntax.test.js @@ -1,6 +1,6 @@ /* eslint-disable max-lines */ -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; import Markdown from 'markdown.js'; // Marked.js adds line returns after closing tags on some default tokens. diff --git a/tests/markdown/variables.test.js b/tests/markdown/variables.test.js index aa2117f31..49cd333c8 100644 --- a/tests/markdown/variables.test.js +++ b/tests/markdown/variables.test.js @@ -1,6 +1,6 @@ /* eslint-disable max-lines */ -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; import Markdown from 'markdown.js'; // Marked.js adds line returns after closing tags on some default tokens. diff --git a/themes/Legacy/5ePHB/snippets.js b/themes/Legacy/5ePHB/snippets.js index 3bcdac50e..3a93dfff6 100644 --- a/themes/Legacy/5ePHB/snippets.js +++ b/themes/Legacy/5ePHB/snippets.js @@ -1,12 +1,12 @@ /* eslint-disable max-lines */ -import MagicGen from './snippets/magic.gen.js'; -import ClassTableGen from './snippets/classtable.gen.js'; -import MonsterBlockGen from './snippets/monsterblock.gen.js'; -import ClassFeatureGen from './snippets/classfeature.gen.js'; -import CoverPageGen from './snippets/coverpage.gen.js'; -import TableOfContentsGen from './snippets/tableOfContents.gen.js'; -import dedent from 'dedent-tabs'; +import MagicGen from './themes/Legacy/5ePHB/snippets/magic.gen.js'; +import ClassTableGen from './themes/Legacy/5ePHB/snippets/classtable.gen.js'; +import MonsterBlockGen from './themes/Legacy/5ePHB/snippets/monsterblock.gen.js'; +import ClassFeatureGen from './themes/Legacy/5ePHB/snippets/classfeature.gen.js'; +import CoverPageGen from './themes/Legacy/5ePHB/snippets/coverpage.gen.js'; +import TableOfContentsGen from './themes/Legacy/5ePHB/snippets/tableOfContents.gen.js'; +import dedent from 'dedent'; export default [ diff --git a/themes/Legacy/5ePHB/snippets/classfeature.gen.js b/themes/Legacy/5ePHB/snippets/classfeature.gen.js index b92d527f9..70085d647 100644 --- a/themes/Legacy/5ePHB/snippets/classfeature.gen.js +++ b/themes/Legacy/5ePHB/snippets/classfeature.gen.js @@ -1,6 +1,6 @@ import _ from 'lodash'; -export default function(classname){ +function classFeatureGen(classname) { classname = _.sample(['archivist', 'fancyman', 'linguist', 'fletcher', 'notary', 'berserker-typist', 'fishmongerer', 'manicurist', 'haberdasher', 'concierge']); @@ -49,4 +49,6 @@ export default function(classname){ `- ${_.sample(['10 lint fluffs', '1 button', 'a cherished lost sock'])}`, '\n\n\n' ].join('\n'); -}; +} + +export default classFeatureGen; diff --git a/themes/Legacy/5ePHB/snippets/coverpage.gen.js b/themes/Legacy/5ePHB/snippets/coverpage.gen.js index 0cd0e50d5..c134930cf 100644 --- a/themes/Legacy/5ePHB/snippets/coverpage.gen.js +++ b/themes/Legacy/5ePHB/snippets/coverpage.gen.js @@ -98,8 +98,8 @@ const subtitles = [ ]; -export default ()=>{ - return ` @@ -114,4 +114,6 @@ export default ()=>{ \\page`; -}; \ No newline at end of file +} + +export default coverPageGen; \ No newline at end of file diff --git a/themes/Legacy/5ePHB/snippets/fullclass.gen.js b/themes/Legacy/5ePHB/snippets/fullclass.gen.js index 50d1ef578..33751574d 100644 --- a/themes/Legacy/5ePHB/snippets/fullclass.gen.js +++ b/themes/Legacy/5ePHB/snippets/fullclass.gen.js @@ -4,7 +4,7 @@ import ClassFeatureGen from './classfeature.gen.js'; import ClassTableGen from './classtable.gen.js'; -export default function(){ +function fullClassGen(){ const classname = _.sample(['Archivist', 'Fancyman', 'Linguist', 'Fletcher', 'Notary', 'Berserker-Typist', 'Fishmongerer', 'Manicurist', 'Haberdasher', 'Concierge']); @@ -40,4 +40,6 @@ export default function(){ ].join('\n')}\n\n\n`; -}; \ No newline at end of file +} + +export default fullClassGen; \ No newline at end of file diff --git a/themes/Legacy/5ePHB/snippets/tableOfContents.gen.js b/themes/Legacy/5ePHB/snippets/tableOfContents.gen.js index b37cca9ee..7a7f16ede 100644 --- a/themes/Legacy/5ePHB/snippets/tableOfContents.gen.js +++ b/themes/Legacy/5ePHB/snippets/tableOfContents.gen.js @@ -47,7 +47,8 @@ const getTOC = (pages)=>{ return res; }; -export default function(props){ +function tableOfContentsGen(props){ + const pages = props.brew.text.split('\\page'); const TOC = getTOC(pages); const markdown = _.reduce(TOC, (r, g1, idx1)=>{ @@ -69,4 +70,6 @@ export default function(props){ ##### Table Of Contents ${markdown} \n`; -}; \ No newline at end of file +} + +export default tableOfContentsGen; \ No newline at end of file diff --git a/themes/V3/5ePHB/snippets.js b/themes/V3/5ePHB/snippets.js index 9ab81b2c0..3fcbdd564 100644 --- a/themes/V3/5ePHB/snippets.js +++ b/themes/V3/5ePHB/snippets.js @@ -6,7 +6,7 @@ import scriptGen from './snippets/script.gen.js'; import ClassFeatureGen from './snippets/classfeature.gen.js'; import CoverPageGen from './snippets/coverpage.gen.js'; import QuoteGen from './snippets/quote.gen.js'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; export default [ { diff --git a/themes/V3/5ePHB/snippets/classfeature.gen.js b/themes/V3/5ePHB/snippets/classfeature.gen.js index 9ea46785a..e7c5ea795 100644 --- a/themes/V3/5ePHB/snippets/classfeature.gen.js +++ b/themes/V3/5ePHB/snippets/classfeature.gen.js @@ -1,5 +1,5 @@ import _ from 'lodash'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; export default function(classname){ diff --git a/themes/V3/5ePHB/snippets/classtable.gen.js b/themes/V3/5ePHB/snippets/classtable.gen.js index 0f2d2371a..bcd4c65df 100644 --- a/themes/V3/5ePHB/snippets/classtable.gen.js +++ b/themes/V3/5ePHB/snippets/classtable.gen.js @@ -1,5 +1,5 @@ import _ from 'lodash'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; const features = [ 'Astrological Botany', 'Biochemical Sorcery', 'Civil Divination', diff --git a/themes/V3/5ePHB/snippets/coverpage.gen.js b/themes/V3/5ePHB/snippets/coverpage.gen.js index 7cf9cf5cf..9a0adaaa7 100644 --- a/themes/V3/5ePHB/snippets/coverpage.gen.js +++ b/themes/V3/5ePHB/snippets/coverpage.gen.js @@ -1,5 +1,5 @@ import _ from 'lodash'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; const titles = [ 'The Burning Gallows', 'The Ring of Nenlast', diff --git a/themes/V3/5ePHB/snippets/monsterblock.gen.js b/themes/V3/5ePHB/snippets/monsterblock.gen.js index 483c9016d..a686382aa 100644 --- a/themes/V3/5ePHB/snippets/monsterblock.gen.js +++ b/themes/V3/5ePHB/snippets/monsterblock.gen.js @@ -1,5 +1,5 @@ import _ from 'lodash'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; const genList = function(list, max){ return _.sampleSize(list, _.random(0, max)).join(', ') || 'None'; diff --git a/themes/V3/5ePHB/snippets/script.gen.js b/themes/V3/5ePHB/snippets/script.gen.js index ace330255..9f8b927b7 100644 --- a/themes/V3/5ePHB/snippets/script.gen.js +++ b/themes/V3/5ePHB/snippets/script.gen.js @@ -1,5 +1,5 @@ import _ from 'lodash'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; export default { dwarvish : ()=>{ diff --git a/themes/V3/Blank/snippets.js b/themes/V3/Blank/snippets.js index 565e27355..9de2d7f7a 100644 --- a/themes/V3/Blank/snippets.js +++ b/themes/V3/Blank/snippets.js @@ -1,5 +1,5 @@ /* eslint-disable max-lines */ -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; import WatercolorGen from './snippets/watercolor.gen.js'; import ImageMaskGen from './snippets/imageMask.gen.js'; import FooterGen from './snippets/footer.gen.js'; diff --git a/themes/V3/Blank/snippets/imageMask.gen.js b/themes/V3/Blank/snippets/imageMask.gen.js index 761259c19..d84568f35 100644 --- a/themes/V3/Blank/snippets/imageMask.gen.js +++ b/themes/V3/Blank/snippets/imageMask.gen.js @@ -1,5 +1,5 @@ import _ from 'lodash'; -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; export default { center : ()=>{ diff --git a/themes/V3/Blank/snippets/index.gen.js b/themes/V3/Blank/snippets/index.gen.js index 1321762e9..cf8924119 100644 --- a/themes/V3/Blank/snippets/index.gen.js +++ b/themes/V3/Blank/snippets/index.gen.js @@ -1,4 +1,4 @@ -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; export default ()=>{ return dedent` diff --git a/themes/V3/Blank/snippets/tableOfContents.gen.js b/themes/V3/Blank/snippets/tableOfContents.gen.js index d093d574a..045e15ab3 100644 --- a/themes/V3/Blank/snippets/tableOfContents.gen.js +++ b/themes/V3/Blank/snippets/tableOfContents.gen.js @@ -1,4 +1,4 @@ -import dedent from 'dedent-tabs'; +import dedent from 'dedent'; // Map each actual page to its footer label, accounting for skips or numbering resets const mapPages = (pages)=>{ From d6b763e62d282aabddae0e12029624384603681c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 23 Jan 2026 18:44:51 +0100 Subject: [PATCH 07/76] update import paths --- .../renderWarnings/renderWarnings.less | 2 ++ client/homebrew/brewRenderer/brewRenderer.jsx | 6 ++--- .../brewRenderer/errorBar/errorBar.less | 1 + .../notificationPopup/notificationPopup.jsx | 2 +- .../notificationPopup/notificationPopup.less | 2 ++ client/homebrew/brewRenderer/safeHTML.js | 2 +- .../editor/metadataEditor/metadataEditor.jsx | 2 +- .../editor/metadataEditor/metadataEditor.less | 2 +- client/homebrew/navbar/account.navitem.jsx | 2 +- client/homebrew/navbar/error-navitem.jsx | 2 +- client/homebrew/navbar/error-navitem.less | 2 ++ client/homebrew/navbar/help.navitem.jsx | 2 +- client/homebrew/navbar/metadata.navitem.jsx | 2 +- client/homebrew/navbar/nav.jsx | 4 ++-- client/homebrew/navbar/navbar.jsx | 2 +- client/homebrew/navbar/navbar.less | 2 +- client/homebrew/navbar/newbrew.navitem.jsx | 2 +- client/homebrew/navbar/patreon.navitem.jsx | 2 +- client/homebrew/navbar/print.navitem.jsx | 2 +- client/homebrew/navbar/recent.navitem.jsx | 2 +- client/homebrew/navbar/share.navitem.jsx | 2 +- client/homebrew/navbar/vault.navitem.jsx | 2 +- .../pages/accountPage/accountPage.jsx | 2 +- .../pages/basePages/uiPage/uiPage.jsx | 12 +++++----- client/homebrew/pages/editPage/editPage.jsx | 24 +++++++++---------- client/homebrew/pages/homePage/homePage.jsx | 18 +++++++------- client/homebrew/pages/newPage/newPage.jsx | 22 ++++++++--------- client/homebrew/pages/sharePage/sharePage.jsx | 12 +++++----- client/homebrew/pages/userPage/userPage.jsx | 16 ++++++------- client/homebrew/pages/vaultPage/vaultPage.jsx | 14 +++++------ server/app.js | 6 ++--- shared/naturalcrit/styles/core.less | 2 +- tests/markdown/basic.test.js | 2 +- tests/markdown/definition-lists.test.js | 2 +- tests/markdown/emojis.test.js | 2 +- tests/markdown/hard-breaks.test.js | 2 +- tests/markdown/mustache-syntax.test.js | 2 +- tests/markdown/non-breaking-spaces.test.js | 2 +- .../markdown/paragraph-justification.test.js | 2 +- tests/markdown/variables.test.js | 2 +- 40 files changed, 100 insertions(+), 93 deletions(-) diff --git a/client/components/renderWarnings/renderWarnings.less b/client/components/renderWarnings/renderWarnings.less index 70799092a..100de0bc7 100644 --- a/client/components/renderWarnings/renderWarnings.less +++ b/client/components/renderWarnings/renderWarnings.less @@ -1,3 +1,5 @@ +@import './shared/naturalcrit/styles/colors.less'; + .renderWarnings { position : relative; float : right; diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 26b637897..131d34695 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -3,13 +3,13 @@ import './brewRenderer.less'; import React, { useState, useRef, useMemo, useEffect } from 'react'; import _ from 'lodash'; -import MarkdownLegacy from 'markdownLegacy.js'; -import Markdown from 'markdown.js'; +import MarkdownLegacy from './shared/markdownLegacy.js'; +import Markdown from './shared/markdown.js'; import ErrorBar from './errorBar/errorBar.jsx'; import ToolBar from './toolBar/toolBar.jsx'; //TODO: move to the brew renderer -import RenderWarnings from 'client/components/renderWarnings/renderWarnings.jsx'; +import RenderWarnings from '../../components/renderWarnings/renderWarnings.jsx'; import NotificationPopup from './notificationPopup/notificationPopup.jsx'; import Frame from 'react-frame-component'; import dedent from 'dedent'; diff --git a/client/homebrew/brewRenderer/errorBar/errorBar.less b/client/homebrew/brewRenderer/errorBar/errorBar.less index 163648533..83efd2391 100644 --- a/client/homebrew/brewRenderer/errorBar/errorBar.less +++ b/client/homebrew/brewRenderer/errorBar/errorBar.less @@ -1,3 +1,4 @@ +@import './shared/naturalcrit/styles/colors.less'; .errorBar { position : absolute; diff --git a/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx b/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx index dd05391f0..c28233fbf 100644 --- a/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx +++ b/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx @@ -1,7 +1,7 @@ import './notificationPopup.less'; import React, { useEffect, useState } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from 'markdown.js'; +import Markdown from './shared/markdown.js'; import Dialog from '../../../components/dialog.jsx'; diff --git a/client/homebrew/brewRenderer/notificationPopup/notificationPopup.less b/client/homebrew/brewRenderer/notificationPopup/notificationPopup.less index 85d4c8365..4f34bad8d 100644 --- a/client/homebrew/brewRenderer/notificationPopup/notificationPopup.less +++ b/client/homebrew/brewRenderer/notificationPopup/notificationPopup.less @@ -1,3 +1,5 @@ +@import './client/homebrew/navbar/navbar.less'; + .popups { position : fixed; top : calc(@navbarHeight + @viewerToolsHeight); diff --git a/client/homebrew/brewRenderer/safeHTML.js b/client/homebrew/brewRenderer/safeHTML.js index 2574f4cfe..d9438b663 100644 --- a/client/homebrew/brewRenderer/safeHTML.js +++ b/client/homebrew/brewRenderer/safeHTML.js @@ -43,4 +43,4 @@ function safeHTML(htmlString) { return div.innerHTML; }; -module.exports.safeHTML = safeHTML; \ No newline at end of file +export default safeHTML; \ No newline at end of file diff --git a/client/homebrew/editor/metadataEditor/metadataEditor.jsx b/client/homebrew/editor/metadataEditor/metadataEditor.jsx index 5ef409b9f..54dc1a6e8 100644 --- a/client/homebrew/editor/metadataEditor/metadataEditor.jsx +++ b/client/homebrew/editor/metadataEditor/metadataEditor.jsx @@ -4,7 +4,7 @@ import React from 'react'; import createReactClass from 'create-react-class'; import _ from 'lodash'; import request from '../../utils/request-middleware.js'; -import Combobox from 'client/components/combobox.jsx'; +import Combobox from '../../../components/combobox.jsx'; import TagInput from '../tagInput/tagInput.jsx'; diff --git a/client/homebrew/editor/metadataEditor/metadataEditor.less b/client/homebrew/editor/metadataEditor/metadataEditor.less index fd04f07d9..edf559ce9 100644 --- a/client/homebrew/editor/metadataEditor/metadataEditor.less +++ b/client/homebrew/editor/metadataEditor/metadataEditor.less @@ -1,4 +1,4 @@ -@import 'naturalcrit/styles/colors.less'; +@import './shared/naturalcrit/styles/core.less'; .userThemeName { padding-right : 10px; diff --git a/client/homebrew/navbar/account.navitem.jsx b/client/homebrew/navbar/account.navitem.jsx index 0bec1d27d..731f27666 100644 --- a/client/homebrew/navbar/account.navitem.jsx +++ b/client/homebrew/navbar/account.navitem.jsx @@ -1,7 +1,7 @@ import React from 'react'; import createReactClass from 'create-react-class'; import request from 'superagent'; -import Nav from 'client/homebrew/navbar/nav.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; const Account = createReactClass({ displayName : 'AccountNavItem', diff --git a/client/homebrew/navbar/error-navitem.jsx b/client/homebrew/navbar/error-navitem.jsx index 01e1ca516..a11860c0a 100644 --- a/client/homebrew/navbar/error-navitem.jsx +++ b/client/homebrew/navbar/error-navitem.jsx @@ -1,6 +1,6 @@ import './error-navitem.less'; import React from 'react'; -import Nav from 'client/homebrew/navbar/nav.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; const ErrorNavItem = ({ error = '', clearError })=>{ const response = error.response; diff --git a/client/homebrew/navbar/error-navitem.less b/client/homebrew/navbar/error-navitem.less index 637ddac95..15c741bbc 100644 --- a/client/homebrew/navbar/error-navitem.less +++ b/client/homebrew/navbar/error-navitem.less @@ -1,3 +1,5 @@ +@import './shared/naturalcrit/styles/core.less'; + .navItem.error { position : relative; background-color : @red; diff --git a/client/homebrew/navbar/help.navitem.jsx b/client/homebrew/navbar/help.navitem.jsx index d1f24fbc8..a7013cc59 100644 --- a/client/homebrew/navbar/help.navitem.jsx +++ b/client/homebrew/navbar/help.navitem.jsx @@ -1,7 +1,7 @@ import React from 'react'; import dedent from 'dedent'; -import Nav from 'client/homebrew/navbar/nav.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; export default function(props){ return diff --git a/client/homebrew/navbar/metadata.navitem.jsx b/client/homebrew/navbar/metadata.navitem.jsx index 09800391d..eb1efe54f 100644 --- a/client/homebrew/navbar/metadata.navitem.jsx +++ b/client/homebrew/navbar/metadata.navitem.jsx @@ -2,7 +2,7 @@ import React from 'react'; import createReactClass from 'create-react-class'; import Moment from 'moment'; -import Nav from 'client/homebrew/navbar/nav.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; const MetadataNav = createReactClass({ diff --git a/client/homebrew/navbar/nav.jsx b/client/homebrew/navbar/nav.jsx index cf1e2adbf..b4ae4f9d2 100644 --- a/client/homebrew/navbar/nav.jsx +++ b/client/homebrew/navbar/nav.jsx @@ -1,10 +1,10 @@ -import 'client/homebrew/navbar/navbar.less'; +import './client/homebrew/navbar/navbar.less'; import React, { useState, useRef, useEffect } from 'react'; import createReactClass from 'create-react-class'; import _ from 'lodash'; import cx from 'classnames'; -import NaturalCritIcon from 'client/components/svg/naturalcrit-d20.svg.jsx'; +import NaturalCritIcon from './client/components/svg/naturalcrit-d20.svg.jsx'; const Nav = { base : createReactClass({ diff --git a/client/homebrew/navbar/navbar.jsx b/client/homebrew/navbar/navbar.jsx index 234580fb4..bea433850 100644 --- a/client/homebrew/navbar/navbar.jsx +++ b/client/homebrew/navbar/navbar.jsx @@ -2,7 +2,7 @@ import './navbar.less'; import React from 'react'; import createReactClass from 'create-react-class'; -import Nav from 'client/homebrew/navbar/nav.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; import PatreonNavItem from './patreon.navitem.jsx'; const Navbar = createReactClass({ diff --git a/client/homebrew/navbar/navbar.less b/client/homebrew/navbar/navbar.less index 7b0217bf8..c8154a7d8 100644 --- a/client/homebrew/navbar/navbar.less +++ b/client/homebrew/navbar/navbar.less @@ -1,4 +1,4 @@ -@import 'naturalcrit/styles/colors.less'; +@import './shared/naturalcrit/styles/core.less'; @navbarHeight : 28px; @viewerToolsHeight : 32px; diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index 3af2b6acf..249788308 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -1,6 +1,6 @@ import React from 'react'; import _ from 'lodash'; -import Nav from 'client/homebrew/navbar/nav.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; import { splitTextStyleAndMetadata } from '../../../shared/helpers.js'; const BREWKEY = 'HB_newPage_content'; diff --git a/client/homebrew/navbar/patreon.navitem.jsx b/client/homebrew/navbar/patreon.navitem.jsx index 7eb7daee8..ab4aaa48e 100644 --- a/client/homebrew/navbar/patreon.navitem.jsx +++ b/client/homebrew/navbar/patreon.navitem.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import Nav from 'client/homebrew/navbar/nav.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; export default function(props){ return ( brew.googleId && !brew.stubbed diff --git a/client/homebrew/navbar/vault.navitem.jsx b/client/homebrew/navbar/vault.navitem.jsx index 9e4305811..dca32c295 100644 --- a/client/homebrew/navbar/vault.navitem.jsx +++ b/client/homebrew/navbar/vault.navitem.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import Nav from 'client/homebrew/navbar/nav.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; export default function (props) { return ( diff --git a/client/homebrew/pages/accountPage/accountPage.jsx b/client/homebrew/pages/accountPage/accountPage.jsx index 015106628..0715f5d13 100644 --- a/client/homebrew/pages/accountPage/accountPage.jsx +++ b/client/homebrew/pages/accountPage/accountPage.jsx @@ -1,7 +1,7 @@ import React from 'react'; import moment from 'moment'; import UIPage from '../basePages/uiPage/uiPage.jsx'; -import NaturalCritIcon from 'client/components/svg/naturalcrit-d20.svg.jsx'; +import NaturalCritIcon from './client/components/svg/naturalcrit-d20.svg.jsx'; let SAVEKEY = ''; diff --git a/client/homebrew/pages/basePages/uiPage/uiPage.jsx b/client/homebrew/pages/basePages/uiPage/uiPage.jsx index 91b4396cc..745966b73 100644 --- a/client/homebrew/pages/basePages/uiPage/uiPage.jsx +++ b/client/homebrew/pages/basePages/uiPage/uiPage.jsx @@ -2,13 +2,13 @@ import './uiPage.less'; import React from 'react'; import createReactClass from 'create-react-class'; -import Nav from 'client/homebrew/navbar/nav.jsx'; -import Navbar from 'client/homebrew/navbar/navbar.jsx'; -import NewBrewItem from 'client/homebrew/navbar/newbrew.navitem.jsx'; -import HelpNavItem from 'client/homebrew/navbar/help.navitem.jsx'; -import RecentNavItems from 'client/homebrew/navbar/recent.navitem.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; +import Navbar from './client/homebrew/navbar/navbar.jsx'; +import NewBrewItem from './client/homebrew/navbar/newbrew.navitem.jsx'; +import HelpNavItem from './client/homebrew/navbar/help.navitem.jsx'; +import RecentNavItems from './client/homebrew/navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; -import Account from 'client/homebrew/navbar/account.navitem.jsx'; +import Account from './client/homebrew/navbar/account.navitem.jsx'; const UIPage = createReactClass({ diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 1b228d8b3..e1f7dca5f 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -4,25 +4,25 @@ import './editPage.less'; // Common imports import React, { useState, useEffect, useRef } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from 'markdown.js'; +import Markdown from './shared/markdown.js'; import _ from 'lodash'; import { DEFAULT_BREW_LOAD } from '../../../../server/brewDefaults.js'; import { printCurrentBrew, fetchThemeBundle, splitTextStyleAndMetadata } from '../../../../shared/helpers.js'; -import SplitPane from 'client/components/splitPane/splitPane.jsx'; +import SplitPane from './client/components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; -import Nav from 'client/homebrew/navbar/nav.jsx'; -import Navbar from 'client/homebrew/navbar/navbar.jsx'; -import NewBrewItem from 'client/homebrew/navbar/newbrew.navitem.jsx'; -import AccountNavItem from 'client/homebrew/navbar/account.navitem.jsx'; -import ErrorNavItem from 'client/homebrew/navbar/error-navitem.jsx'; -import HelpNavItem from 'client/homebrew/navbar/help.navitem.jsx'; -import VaultNavItem from 'client/homebrew/navbar/vault.navitem.jsx'; -import PrintNavItem from 'client/homebrew/navbar/print.navitem.jsx'; -import RecentNavItems from 'client/homebrew/navbar/recent.navitem.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; +import Navbar from './client/homebrew/navbar/navbar.jsx'; +import NewBrewItem from './client/homebrew/navbar/newbrew.navitem.jsx'; +import AccountNavItem from './client/homebrew/navbar/account.navitem.jsx'; +import ErrorNavItem from './client/homebrew/navbar/error-navitem.jsx'; +import HelpNavItem from './client/homebrew/navbar/help.navitem.jsx'; +import VaultNavItem from './client/homebrew/navbar/vault.navitem.jsx'; +import PrintNavItem from './client/homebrew/navbar/print.navitem.jsx'; +import RecentNavItems from './client/homebrew/navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; // Page specific imports @@ -31,7 +31,7 @@ import { md5 } from 'hash-wasm'; import { gzipSync, strToU8 } from 'fflate'; import { makePatches, stringifyPatches } from '@sanity/diff-match-patch'; -import ShareNavItem from 'client/homebrew/navbar/share.navitem.jsx'; +import ShareNavItem from './client/homebrew/navbar/share.navitem.jsx'; import LockNotification from './lockNotification/lockNotification.jsx'; import { updateHistory, versionHistoryGarbageCollection } from '../../utils/versionHistory.js'; import googleDriveIcon from '../../googleDrive.svg'; diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index f5fae80d9..fd5a7261a 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -14,15 +14,15 @@ import SplitPane from '../../../components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; -import Nav from 'client/homebrew/navbar/nav.jsx'; -import Navbar from 'client/homebrew/navbar/navbar.jsx'; -import NewBrewItem from 'client/homebrew/navbar/newbrew.navitem.jsx'; -import AccountNavItem from 'client/homebrew/navbar/account.navitem.jsx'; -import ErrorNavItem from 'client/homebrew/navbar/error-navitem.jsx'; -import HelpNavItem from 'client/homebrew/navbar/help.navitem.jsx'; -import VaultNavItem from 'client/homebrew/navbar/vault.navitem.jsx'; -import PrintNavItem from 'client/homebrew/navbar/print.navitem.jsx'; -import RecentNavItems from 'client/homebrew/navbar/recent.navitem.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; +import Navbar from './client/homebrew/navbar/navbar.jsx'; +import NewBrewItem from './client/homebrew/navbar/newbrew.navitem.jsx'; +import AccountNavItem from './client/homebrew/navbar/account.navitem.jsx'; +import ErrorNavItem from './client/homebrew/navbar/error-navitem.jsx'; +import HelpNavItem from './client/homebrew/navbar/help.navitem.jsx'; +import VaultNavItem from './client/homebrew/navbar/vault.navitem.jsx'; +import PrintNavItem from './client/homebrew/navbar/print.navitem.jsx'; +import RecentNavItems from './client/homebrew/navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 5099a98a1..860fa310c 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -4,25 +4,25 @@ import './newPage.less'; // Common imports import React, { useState, useEffect, useRef } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from 'markdown.js'; +import Markdown from './shared/markdown.js'; import _ from 'lodash'; import { DEFAULT_BREW } from '../../../../server/brewDefaults.js'; import { printCurrentBrew, fetchThemeBundle, splitTextStyleAndMetadata } from '../../../../shared/helpers.js'; -import SplitPane from 'client/components/splitPane/splitPane.jsx'; +import SplitPane from './client/components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; -import Nav from 'client/homebrew/navbar/nav.jsx'; -import Navbar from 'client/homebrew/navbar/navbar.jsx'; -import NewBrewItem from 'client/homebrew/navbar/newbrew.navitem.jsx'; -import AccountNavItem from 'client/homebrew/navbar/account.navitem.jsx'; -import ErrorNavItem from 'client/homebrew/navbar/error-navitem.jsx'; -import HelpNavItem from 'client/homebrew/navbar/help.navitem.jsx'; -import VaultNavItem from 'client/homebrew/navbar/vault.navitem.jsx'; -import PrintNavItem from 'client/homebrew/navbar/print.navitem.jsx'; -import RecentNavItems from 'client/homebrew/navbar/recent.navitem.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; +import Navbar from './client/homebrew/navbar/navbar.jsx'; +import NewBrewItem from './client/homebrew/navbar/newbrew.navitem.jsx'; +import AccountNavItem from './client/homebrew/navbar/account.navitem.jsx'; +import ErrorNavItem from './client/homebrew/navbar/error-navitem.jsx'; +import HelpNavItem from './client/homebrew/navbar/help.navitem.jsx'; +import VaultNavItem from './client/homebrew/navbar/vault.navitem.jsx'; +import PrintNavItem from './client/homebrew/navbar/print.navitem.jsx'; +import RecentNavItems from './client/homebrew/navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; // Page specific imports diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 90d6cb3df..8de9642f5 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -2,13 +2,13 @@ import './sharePage.less'; import React, { useState, useEffect, useCallback } from 'react'; import { Meta } from 'vitreum/headtags'; -import Nav from 'client/homebrew/navbar/nav.jsx'; -import Navbar from 'client/homebrew/navbar/navbar.jsx'; -import MetadataNav from 'client/homebrew/navbar/metadata.navitem.jsx'; -import PrintNavItem from 'client/homebrew/navbar/print.navitem.jsx'; -import RecentNavItems from 'client/homebrew/navbar/recent.navitem.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; +import Navbar from './client/homebrew/navbar/navbar.jsx'; +import MetadataNav from './client/homebrew/navbar/metadata.navitem.jsx'; +import PrintNavItem from './client/homebrew/navbar/print.navitem.jsx'; +import RecentNavItems from './client/homebrew/navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; -import Account from 'client/homebrew/navbar/account.navitem.jsx'; +import Account from './client/homebrew/navbar/account.navitem.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; import { DEFAULT_BREW_LOAD } from '../../../../server/brewDefaults.js'; diff --git a/client/homebrew/pages/userPage/userPage.jsx b/client/homebrew/pages/userPage/userPage.jsx index ff7345ef4..e0db5378a 100644 --- a/client/homebrew/pages/userPage/userPage.jsx +++ b/client/homebrew/pages/userPage/userPage.jsx @@ -3,15 +3,15 @@ import _ from 'lodash'; import ListPage from '../basePages/listPage/listPage.jsx'; -import Nav from 'client/homebrew/navbar/nav.jsx'; -import Navbar from 'client/homebrew/navbar/navbar.jsx'; -import RecentNavItems from 'client/homebrew/navbar/recent.navitem.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; +import Navbar from './client/homebrew/navbar/navbar.jsx'; +import RecentNavItems from './client/homebrew/navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; -import Account from 'client/homebrew/navbar/account.navitem.jsx'; -import NewBrew from 'client/homebrew/navbar/newbrew.navitem.jsx'; -import HelpNavItem from 'client/homebrew/navbar/help.navitem.jsx'; -import ErrorNavItem from 'client/homebrew/navbar/error-navitem.jsx'; -import VaultNavitem from 'client/homebrew/navbar/vault.navitem.jsx'; +import Account from './client/homebrew/navbar/account.navitem.jsx'; +import NewBrew from './client/homebrew/navbar/newbrew.navitem.jsx'; +import HelpNavItem from './client/homebrew/navbar/help.navitem.jsx'; +import ErrorNavItem from './client/homebrew/navbar/error-navitem.jsx'; +import VaultNavitem from './client/homebrew/navbar/vault.navitem.jsx'; const UserPage = (props)=>{ props = { diff --git a/client/homebrew/pages/vaultPage/vaultPage.jsx b/client/homebrew/pages/vaultPage/vaultPage.jsx index 61ae89014..3138940ec 100644 --- a/client/homebrew/pages/vaultPage/vaultPage.jsx +++ b/client/homebrew/pages/vaultPage/vaultPage.jsx @@ -3,15 +3,15 @@ import './vaultPage.less'; import React, { useState, useEffect, useRef } from 'react'; -import Nav from 'client/homebrew/navbar/nav.jsx'; -import Navbar from 'client/homebrew/navbar/navbar.jsx'; -import RecentNavItems from 'client/homebrew/navbar/recent.navitem.jsx'; +import Nav from './client/homebrew/navbar/nav.jsx'; +import Navbar from './client/homebrew/navbar/navbar.jsx'; +import RecentNavItems from './client/homebrew/navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; -import Account from 'client/homebrew/navbar/account.navitem.jsx'; -import NewBrew from 'client/homebrew/navbar/newbrew.navitem.jsx'; -import HelpNavItem from 'client/homebrew/navbar/help.navitem.jsx'; +import Account from './client/homebrew/navbar/account.navitem.jsx'; +import NewBrew from './client/homebrew/navbar/newbrew.navitem.jsx'; +import HelpNavItem from './client/homebrew/navbar/help.navitem.jsx'; import BrewItem from '../basePages/listPage/brewItem/brewItem.jsx'; -import SplitPane from 'client/components/splitPane/splitPane.jsx'; +import SplitPane from './client/components/splitPane/splitPane.jsx'; import ErrorIndex from '../errorPage/errors/errorIndex.js'; import request from '../../utils/request-middleware.js'; diff --git a/server/app.js b/server/app.js index 1bdb5aac3..2965128c4 100644 --- a/server/app.js +++ b/server/app.js @@ -110,9 +110,9 @@ app.use(homebrewApi); app.use(adminApi); app.use(vaultApi); -const welcomeText = fs.readFileSync('client/homebrew/pages/homePage/welcome_msg.md', 'utf8'); -const welcomeTextLegacy = fs.readFileSync('client/homebrew/pages/homePage/welcome_msg_legacy.md', 'utf8'); -const migrateText = fs.readFileSync('client/homebrew/pages/homePage/migrate.md', 'utf8'); +const welcomeText = fs.readFileSync('./client/homebrew/pages/homePage/welcome_msg.md', 'utf8'); +const welcomeTextLegacy = fs.readFileSync('./client/homebrew/pages/homePage/welcome_msg_legacy.md', 'utf8'); +const migrateText = fs.readFileSync('./client/homebrew/pages/homePage/migrate.md', 'utf8'); const changelogText = fs.readFileSync('changelog.md', 'utf8'); const faqText = fs.readFileSync('faq.md', 'utf8'); diff --git a/shared/naturalcrit/styles/core.less b/shared/naturalcrit/styles/core.less index 6b02d1e4e..9c7b99aa5 100644 --- a/shared/naturalcrit/styles/core.less +++ b/shared/naturalcrit/styles/core.less @@ -1,6 +1,6 @@ @import './reset.less'; -//@import 'naturalcrit/styles/elements.less'; +//@import './elements.less'; @import './animations.less'; @import './colors.less'; @import './tooltip.less'; diff --git a/tests/markdown/basic.test.js b/tests/markdown/basic.test.js index ddceb9197..b74e93d85 100644 --- a/tests/markdown/basic.test.js +++ b/tests/markdown/basic.test.js @@ -1,6 +1,6 @@ -import Markdown from 'markdown.js'; +import Markdown from './shared/markdown.js'; test('Processes the markdown within an HTML block if its just a class wrapper', function() { const source = '
*Bold text*
'; diff --git a/tests/markdown/definition-lists.test.js b/tests/markdown/definition-lists.test.js index 12499d559..ee7d6da87 100644 --- a/tests/markdown/definition-lists.test.js +++ b/tests/markdown/definition-lists.test.js @@ -1,6 +1,6 @@ -import Markdown from 'markdown.js'; +import Markdown from './shared/markdown.js'; describe('Inline Definition Lists', ()=>{ test('No Term 1 Definition', function() { diff --git a/tests/markdown/emojis.test.js b/tests/markdown/emojis.test.js index 5f0e102c9..41cd844a4 100644 --- a/tests/markdown/emojis.test.js +++ b/tests/markdown/emojis.test.js @@ -1,4 +1,4 @@ -import Markdown from 'markdown.js'; +import Markdown from './shared/markdown.js'; import dedent from 'dedent'; // Marked.js adds line returns after closing tags on some default tokens. diff --git a/tests/markdown/hard-breaks.test.js b/tests/markdown/hard-breaks.test.js index 068b2053a..0f48ca9ad 100644 --- a/tests/markdown/hard-breaks.test.js +++ b/tests/markdown/hard-breaks.test.js @@ -1,6 +1,6 @@ -import Markdown from 'markdown.js'; +import Markdown from './shared/markdown.js'; describe('Hard Breaks', ()=>{ test('Single Break', function() { diff --git a/tests/markdown/mustache-syntax.test.js b/tests/markdown/mustache-syntax.test.js index 8562ae412..7c82db3f2 100644 --- a/tests/markdown/mustache-syntax.test.js +++ b/tests/markdown/mustache-syntax.test.js @@ -1,7 +1,7 @@ /* eslint-disable max-lines */ import dedent from 'dedent'; -import Markdown from 'markdown.js'; +import Markdown from './shared/markdown.js'; // Marked.js adds line returns after closing tags on some default tokens. // This removes those line returns for comparison sake. diff --git a/tests/markdown/non-breaking-spaces.test.js b/tests/markdown/non-breaking-spaces.test.js index 9da59b047..d541e24b2 100644 --- a/tests/markdown/non-breaking-spaces.test.js +++ b/tests/markdown/non-breaking-spaces.test.js @@ -1,6 +1,6 @@ -import Markdown from 'markdown.js'; +import Markdown from './shared/markdown.js'; describe('Non-Breaking Spaces Interactions', ()=>{ test('I am actually a single-line definition list!', function() { diff --git a/tests/markdown/paragraph-justification.test.js b/tests/markdown/paragraph-justification.test.js index f5a5b12ab..eca3838a9 100644 --- a/tests/markdown/paragraph-justification.test.js +++ b/tests/markdown/paragraph-justification.test.js @@ -1,6 +1,6 @@ -import Markdown from 'markdown.js'; +import Markdown from './shared/markdown.js'; describe('Justification', ()=>{ test('Left Justify', function() { diff --git a/tests/markdown/variables.test.js b/tests/markdown/variables.test.js index 49cd333c8..cb2b40495 100644 --- a/tests/markdown/variables.test.js +++ b/tests/markdown/variables.test.js @@ -1,7 +1,7 @@ /* eslint-disable max-lines */ import dedent from 'dedent'; -import Markdown from 'markdown.js'; +import Markdown from './shared/markdown.js'; // Marked.js adds line returns after closing tags on some default tokens. // This removes those line returns for comparison sake. From 54b0dd46f822060deab373cce0265f8696025b07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 23 Jan 2026 18:51:01 +0100 Subject: [PATCH 08/76] vitreum headtags (temporary change) --- client/homebrew/pages/editPage/editPage.jsx | 2 +- client/homebrew/pages/homePage/homePage.jsx | 2 +- client/homebrew/pages/newPage/newPage.jsx | 2 +- client/homebrew/pages/sharePage/sharePage.jsx | 2 +- vitreum/headtags.js | 82 +++++++++++++++++++ vitreum/injectTag.js | 8 ++ 6 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 vitreum/headtags.js create mode 100644 vitreum/injectTag.js diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index e1f7dca5f..b4e8d3d32 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -26,7 +26,7 @@ import RecentNavItems from './client/homebrew/navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import { Meta } from 'vitreum/headtags'; +import { Meta } from './vitreum/headtags.js'; import { md5 } from 'hash-wasm'; import { gzipSync, strToU8 } from 'fflate'; import { makePatches, stringifyPatches } from '@sanity/diff-match-patch'; diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index fd5a7261a..9fe28a346 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -27,7 +27,7 @@ const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import { Meta } from 'vitreum/headtags'; +import { Meta } from './vitreum/headtags.js'; const BREWKEY = 'homebrewery-new'; const STYLEKEY = 'homebrewery-new-style'; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 860fa310c..c1947c326 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -26,7 +26,7 @@ import RecentNavItems from './client/homebrew/navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import { Meta } from 'vitreum/headtags'; +import { Meta } from './vitreum/headtags.js'; const BREWKEY = 'HB_newPage_content'; const STYLEKEY = 'HB_newPage_style'; diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 8de9642f5..86e6278c0 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -1,6 +1,6 @@ import './sharePage.less'; import React, { useState, useEffect, useCallback } from 'react'; -import { Meta } from 'vitreum/headtags'; +import { Meta } from './vitreum/headtags.js'; import Nav from './client/homebrew/navbar/nav.jsx'; import Navbar from './client/homebrew/navbar/navbar.jsx'; diff --git a/vitreum/headtags.js b/vitreum/headtags.js new file mode 100644 index 000000000..a74ad44f7 --- /dev/null +++ b/vitreum/headtags.js @@ -0,0 +1,82 @@ +import React, { useEffect } from "react"; +import injectTag from "./injectTag.js"; + +const obj2props = (obj) => + Object.entries(obj) + .map(([k, v]) => `${k}="${v}"`) + .join(" "); +const toStr = (chld) => (Array.isArray(chld) ? chld.join("") : chld); +const onServer = typeof window === "undefined"; + +let NamedTags = {}; +let UnnamedTags = []; + +export const HeadComponents = { + Title({ children }) { + if (onServer) NamedTags.title = `${toStr(children)}`; + useEffect(() => { + document.title = toStr(children); + }, [children]); + return null; + }, + Favicon({ type = "image/png", href = "", rel = "icon", id = "favicon" }) { + if (onServer) NamedTags.favicon = ``; + useEffect(() => { + document.getElementById(id).href = href; + }, [id, href]); + return null; + }, + Description({ children }) { + if (onServer) NamedTags.description = ``; + return null; + }, + Noscript({ children }) { + if (onServer) UnnamedTags.push(``); + return null; + }, + Script({ children = [], ...props }) { + if (onServer) { + UnnamedTags.push( + children.length + ? `` + : ` - - - - `; + // ---------------- + // PROD + // ---------------- + if (isProd) { + const ssrModule = await import(`../build/entry-server-${name}/bundle.js`); + + return ` + + + + + + + ${ogMetaTags} + + ${title.length ? `${title} - The Homebrewery` : "The Homebrewery - NaturalCrit"} + + +
${ssrModule.default(props)}
+ + + +`; + } + + // ---------------- + // DEV + // ---------------- + const { default: render } = await vite.ssrLoadModule(`/client/entry-server-${name}.jsx`); + + let html = ` + + + + ${ogMetaTags} + ${title.length ? `${title} - The Homebrewery` : "The Homebrewery - NaturalCrit"} + + +
${render(props)}
+ + + + + + +`; + + return vite.transformIndexHtml(url, html); }; -export default template; \ No newline at end of file +export default template; diff --git a/package-lock.json b/package-lock.json index 7246983f3..57b2e5fba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5268,9 +5268,9 @@ } }, "node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, "funding": [ { diff --git a/package.json b/package.json index 067785d6c..0ea12fb9d 100644 --- a/package.json +++ b/package.json @@ -12,11 +12,13 @@ "url": "git://github.com/naturalcrit/homebrewery.git" }, "scripts": { - "viteDev": "node scripts/dev.js", + "viteDev1": "node scripts/dev.js", + "viteDev2": "vite dev", "viteDevAdmin": "vite --config vite.config.js --ssr client/admin/admin.jsx", - "viteBuild": "vite build", + "viteBuild": "vite build && node scripts/compileAssets.js", "viteStart": "vite preview --outDir build", "start": "node server.js", + "compileAssets": "node scripts/compileAssets.js --dev", "dev": "node --experimental-require-module scripts/dev.js", "quick": "node --experimental-require-module scripts/quick.js", "build": "node --experimental-require-module scripts/buildHomebrew.js && node --experimental-require-module scripts/buildAdmin.js", diff --git a/scripts/compileAssets.js b/scripts/compileAssets.js new file mode 100644 index 000000000..19c2c3cac --- /dev/null +++ b/scripts/compileAssets.js @@ -0,0 +1,90 @@ +import fs from "fs-extra"; +import less from "less"; +const isDev = !!process.argv.find((arg) => arg === "--dev"); + +const compileAssets = async () => { + await fs.copy("./client/homebrew/favicon.ico", "./build/assets/favicon.ico"); + + //v==----------------------------- COMPILE THEMES --------------------------------==v// + + // Update list of all Theme files + const themes = { Legacy: {}, V3: {} }; + + let themeFiles = fs.readdirSync("./themes/Legacy"); + for (const dir of themeFiles) { + const themeData = JSON.parse(fs.readFileSync(`./themes/Legacy/${dir}/settings.json`).toString()); + themeData.path = dir; + themes.Legacy[dir] = themeData; + //fs.copy(`./themes/Legacy/${dir}/dropdownTexture.png`, `./build/themes/Legacy/${dir}/dropdownTexture.png`); + const src = `./themes/Legacy/${dir}/style.less`; + ((outputDirectory) => { + less.render( + fs.readFileSync(src).toString(), + { + compress: !isDev, + }, + function (e, output) { + fs.outputFile(outputDirectory, output.css); + }, + ); + })(`./build/themes/Legacy/${dir}/style.css`); + } + + themeFiles = fs.readdirSync("./themes/V3"); + for (const dir of themeFiles) { + const themeData = JSON.parse(fs.readFileSync(`./themes/V3/${dir}/settings.json`).toString()); + themeData.path = dir; + themes.V3[dir] = themeData; + fs.copy(`./themes/V3/${dir}/dropdownTexture.png`, `./build/themes/V3/${dir}/dropdownTexture.png`); + fs.copy(`./themes/V3/${dir}/dropdownPreview.png`, `./build/themes/V3/${dir}/dropdownPreview.png`); + const src = `./themes/V3/${dir}/style.less`; + ((outputDirectory) => { + less.render( + fs.readFileSync(src).toString(), + { + compress: !isDev, + }, + function (e, output) { + fs.outputFile(outputDirectory, output.css); + }, + ); + })(`./build/themes/V3/${dir}/style.css`); + } + + await fs.outputFile("./themes/themes.json", JSON.stringify(themes, null, 2)); + + // await less.render(lessCode, { + // compress : !dev, + // sourceMap : (dev ? { + // sourceMapFileInline: true, + // outputSourceFiles: true + // } : false), + // }) + + // Move assets + await fs.copy("./themes/fonts", "./build/fonts"); + await fs.copy("./themes/assets", "./build/assets"); + await fs.copy("./client/icons", "./build/icons"); + + //v==---------------------------MOVE CM EDITOR THEMES -----------------------------==v// + + const editorThemesBuildDir = "./build/homebrew/cm-themes"; + await fs.copy("./node_modules/codemirror/theme", editorThemesBuildDir); + await fs.copy("./themes/codeMirror/customThemes", editorThemesBuildDir); + const editorThemeFiles = fs.readdirSync(editorThemesBuildDir); + + const editorThemeFile = "./themes/codeMirror/editorThemes.json"; + if (fs.existsSync(editorThemeFile)) fs.rmSync(editorThemeFile); + const stream = fs.createWriteStream(editorThemeFile, { flags: "a" }); + stream.write('[\n"default"'); + + for (const themeFile of editorThemeFiles) { + stream.write(`,\n"${themeFile.slice(0, -4)}"`); + } + stream.write("\n]\n"); + stream.end(); + + await fs.copy("./themes/codeMirror", "./build/homebrew/codeMirror"); +}; + +compileAssets(); diff --git a/server.js b/server.js index fe5a9a363..d2dea2de5 100644 --- a/server.js +++ b/server.js @@ -1,20 +1,47 @@ -import DB from './server/db.js'; -import server from './server/app.js'; -import config from './server/config.js'; +import DB from "./server/db.js"; +import createApp from "./server/app.js"; +import config from "./server/config.js"; +import { createServer as createViteServer } from "vite"; -DB.connect(config).then(()=>{ - // Ensure that we have successfully connected to the database - // before launching server - const PORT = process.env.PORT || config.get('web_port') || 8000; - server.listen(PORT, ()=>{ - const reset = '\x1b[0m'; // Reset to default style - const bright = '\x1b[1m'; // Bright (bold) style - const cyan = '\x1b[36m'; // Cyan color - const underline = '\x1b[4m'; // Underlined style +const isProd = process.env.NODE_ENV === "production"; + +async function start() { + let vite; + + //==== Create Vite dev server only in development ====// + if (!isProd) { + vite = await createViteServer({ + server: { middlewareMode: true }, + appType: "custom", + logLevel: 'error', + }); + + } + + //==== Connect to the database ====// + await DB.connect(config).catch((err) => { + console.error("Database connection failed:", err); + process.exit(1); + }); + + //==== Create the Express app ====// + const app = await createApp(vite); + + //==== Start listening ====// + const PORT = process.env.PORT || config.get("web_port") || 8000; + app.listen(PORT, () => { + const reset = "\x1b[0m"; // Reset to default style + const bright = "\x1b[1m"; // Bright (bold) style + const cyan = "\x1b[36m"; // Cyan color + const underline = "\x1b[4m"; // Underlined style console.log(`\n\tserver started at: ${new Date().toLocaleString()}`); console.log(`\tserver on port: ${PORT}`); - console.log(`\t${bright + cyan}Open in browser: ${reset}${underline + bright + cyan}http://localhost:${PORT}${reset}\n\n`); - + console.log( + `\t${bright + cyan}Open in browser: ${reset}${underline + bright + cyan}http://localhost:${PORT}${reset}\n\n`, + ); }); -}); +} + +//==== Start the server ====// +start(); diff --git a/server/app.js b/server/app.js index 2965128c4..89c577c8b 100644 --- a/server/app.js +++ b/server/app.js @@ -14,7 +14,6 @@ import express from 'express'; import config from './config.js'; import fs from 'fs-extra'; -const app = express(); import api from './homebrew.api.js'; const { homebrewApi, getBrew, getUsersBrewThemes, getCSS } = api; @@ -24,7 +23,7 @@ import GoogleActions from './googleActions.js'; import serveCompressedStaticAssets from './static-assets.mv.js'; import sanitizeFilename from 'sanitize-filename'; import asyncHandler from 'express-async-handler'; -import templateFn from '../client/template.js'; +import template from '../client/template.js'; import { model as HomebrewModel } from './homebrew.model.js'; import { DEFAULT_BREW } from './brewDefaults.js'; @@ -37,599 +36,613 @@ import cookieParser from 'cookie-parser'; import forceSSL from './forcessl.mw.js'; import dbCheck from './middleware/dbCheck.js'; - -const sanitizeBrew = (brew, accessType)=>{ - brew._id = undefined; - brew.__v = undefined; - if(accessType !== 'edit' && accessType !== 'shareAuthor') { - brew.editId = undefined; - } - return brew; -}; - -app.set('trust proxy', 1 /* number of proxies between user and server */); - -app.use('/', serveCompressedStaticAssets(`build`)); -app.use(contentNegotiation); -app.use(bodyParser.json({ limit: '25mb' })); -app.use(cookieParser()); -app.use(forceSSL); - import cors from 'cors'; -const nodeEnv = config.get('node_env'); -const isLocalEnvironment = config.get('local_environments').includes(nodeEnv); +export default async function createApp(vite) { + const app = express(); -const corsOptions = { - origin : (origin, callback)=>{ + const nodeEnv = config.get('node_env'); + const isProd = nodeEnv === 'production'; + const isLocalEnvironment = config.get('local_environments').includes(nodeEnv); - const allowedOrigins = [ - 'https://homebrewery.naturalcrit.com', - 'https://www.naturalcrit.com', - 'https://naturalcrit-stage.herokuapp.com', - 'https://homebrewery-stage.herokuapp.com', - ]; - const localNetworkRegex = /^http:\/\/(localhost|127\.0\.0\.1|10\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+|172\.(1[6-9]|2\d|3[0-1])\.\d+\.\d+):\d+$/; - - const herokuRegex = /^https:\/\/(?:homebrewery-pr-\d+\.herokuapp\.com|naturalcrit-pr-\d+\.herokuapp\.com)$/; // Matches any Heroku app - - if(!origin || allowedOrigins.includes(origin) || herokuRegex.test(origin) || (isLocalEnvironment && localNetworkRegex.test(origin))) { - callback(null, true); - } else { - console.log(origin, 'not allowed'); - callback(new Error('Not allowed by CORS, if you think this is an error, please contact us')); + const sanitizeBrew = (brew, accessType)=>{ + brew._id = undefined; + brew.__v = undefined; + if(accessType !== 'edit' && accessType !== 'shareAuthor') { + brew.editId = undefined; } - }, - methods : ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], - credentials : true, -}; + return brew; + }; -app.use(cors(corsOptions)); + app.set('trust proxy', 1 /* number of proxies between user and server */); -//Account Middleware -app.use((req, res, next)=>{ - if(req.cookies && req.cookies.nc_session){ - try { - req.account = jwt.decode(req.cookies.nc_session, config.get('secret')); + app.use(vite.middlewares); + + app.use('/', serveCompressedStaticAssets('build')); + app.use(contentNegotiation); + app.use(bodyParser.json({ limit: '25mb' })); + app.use(cookieParser()); + app.use(forceSSL); + + + const corsOptions = { + origin : (origin, callback)=>{ + + const allowedOrigins = [ + 'https://homebrewery.naturalcrit.com', + 'https://www.naturalcrit.com', + 'https://naturalcrit-stage.herokuapp.com', + 'https://homebrewery-stage.herokuapp.com', + ]; + + const localNetworkRegex = /^http:\/\/(localhost|127\.0\.0\.1|10\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+|172\.(1[6-9]|2\d|3[0-1])\.\d+\.\d+):\d+$/; + + const herokuRegex = /^https:\/\/(?:homebrewery-pr-\d+\.herokuapp\.com|naturalcrit-pr-\d+\.herokuapp\.com)$/; // Matches any Heroku app + + if(!origin || allowedOrigins.includes(origin) || herokuRegex.test(origin) || (isLocalEnvironment && localNetworkRegex.test(origin))) { + callback(null, true); + } else { + console.log(origin, 'not allowed'); + callback(new Error('Not allowed by CORS, if you think this is an error, please contact us')); + } + }, + methods : ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], + credentials : true, + }; + + app.use(cors(corsOptions)); + + //Account Middleware + app.use((req, res, next)=>{ + if(req.cookies && req.cookies.nc_session){ + try { + req.account = jwt.decode(req.cookies.nc_session, config.get('secret')); //console.log("Just loaded up JWT from cookie:"); //console.log(req.account); - } catch (e){ - console.log(e); + } catch (e){ + console.log(e); + } } - } - req.config = { - google_client_id : config.get('google_client_id'), - google_client_secret : config.get('google_client_secret') - }; - return next(); -}); - -app.use(homebrewApi); -app.use(adminApi); -app.use(vaultApi); - -const welcomeText = fs.readFileSync('./client/homebrew/pages/homePage/welcome_msg.md', 'utf8'); -const welcomeTextLegacy = fs.readFileSync('./client/homebrew/pages/homePage/welcome_msg_legacy.md', 'utf8'); -const migrateText = fs.readFileSync('./client/homebrew/pages/homePage/migrate.md', 'utf8'); -const changelogText = fs.readFileSync('changelog.md', 'utf8'); -const faqText = fs.readFileSync('faq.md', 'utf8'); - -String.prototype.replaceAll = function(s, r){return this.split(s).join(r);}; - -const defaultMetaTags = { - site_name : 'The Homebrewery - Make your Homebrew content look legit!', - title : 'The Homebrewery', - description : 'A NaturalCrit Tool for creating authentic Homebrews using Markdown.', - image : `${config.get('publicUrl')}/thumbnail.png`, - type : 'website' -}; - -//Robots.txt -app.get('/robots.txt', (req, res)=>{ - return res.sendFile(`robots.txt`, { root: process.cwd() }); -}); - -//Home page -app.get('/', (req, res, next)=>{ - req.brew = { - text : welcomeText, - renderer : 'V3', - theme : '5ePHB' - }, - - req.ogMeta = { ...defaultMetaTags, - title : 'Homepage', - description : 'Homepage' - }; - - splitTextStyleAndMetadata(req.brew); - return next(); -}); - -//Home page Legacy -app.get('/legacy', (req, res, next)=>{ - req.brew = { - text : welcomeTextLegacy, - renderer : 'legacy', - theme : '5ePHB' - }, - - req.ogMeta = { ...defaultMetaTags, - title : 'Homepage (Legacy)', - description : 'Homepage' - }; - - splitTextStyleAndMetadata(req.brew); - return next(); -}); - -//Legacy/Other Document -> v3 Migration Guide -app.get('/migrate', (req, res, next)=>{ - req.brew = { - text : migrateText, - renderer : 'V3', - theme : '5ePHB' - }, - - req.ogMeta = { ...defaultMetaTags, - title : 'v3 Migration Guide', - description : 'A brief guide to converting Legacy documents to the v3 renderer.' - }; - - splitTextStyleAndMetadata(req.brew); - return next(); -}); - -//Changelog page -app.get('/changelog', async (req, res, next)=>{ - req.brew = { - title : 'Changelog', - text : changelogText, - renderer : 'V3', - theme : '5ePHB' - }, - - req.ogMeta = { ...defaultMetaTags, - title : 'Changelog', - description : 'Development changelog.' - }; - - splitTextStyleAndMetadata(req.brew); - return next(); -}); - -//FAQ page -app.get('/faq', async (req, res, next)=>{ - req.brew = { - title : 'FAQ', - text : faqText, - renderer : 'V3', - theme : '5ePHB' - }, - - req.ogMeta = { ...defaultMetaTags, - title : 'FAQ', - description : 'Frequently Asked Questions' - }; - - splitTextStyleAndMetadata(req.brew); - return next(); -}); - -//Source page -app.get('/source/:id', asyncHandler(getBrew('share')), (req, res)=>{ - const { brew } = req; - - const replaceStrings = { '&': '&', '<': '<', '>': '>' }; - let text = brew.text; - for (const replaceStr in replaceStrings) { - text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); - } - text = `
${text}
`; - res.status(200).send(text); -}); - -//Download brew source page -app.get('/download/:id', asyncHandler(getBrew('share')), (req, res)=>{ - const { brew } = req; - sanitizeBrew(brew, 'share'); - const prefix = 'HB - '; - - const encodeRFC3986ValueChars = (str)=>{ - return ( - encodeURIComponent(str) - .replace(/[!'()*]/g, (char)=>{`%${char.charCodeAt(0).toString(16).toUpperCase()}`;}) - ); - }; - - let fileName = sanitizeFilename(`${prefix}${brew.title}`).replaceAll(' ', ''); - if(!fileName || !fileName.length) { fileName = `${prefix}-Untitled-Brew`; }; - res.set({ - 'Cache-Control' : 'no-cache', - 'Content-Type' : 'text/plain', - 'Content-Disposition' : `attachment; filename*=UTF-8''${encodeRFC3986ValueChars(fileName)}.txt` + req.config = { + google_client_id : config.get('google_client_id'), + google_client_secret : config.get('google_client_secret') + }; + return next(); }); - res.status(200).send(brew.text); -}); -//Serve brew metadata -app.get('/metadata/:id', asyncHandler(getBrew('share')), (req, res)=>{ - const { brew } = req; - sanitizeBrew(brew, 'share'); + app.use(homebrewApi); + app.use(adminApi); + app.use(vaultApi); - const fields = ['title', 'pageCount', 'description', 'authors', 'lang', + const welcomeText = fs.readFileSync('./client/homebrew/pages/homePage/welcome_msg.md', 'utf8'); + const welcomeTextLegacy = fs.readFileSync('./client/homebrew/pages/homePage/welcome_msg_legacy.md', 'utf8'); + const migrateText = fs.readFileSync('./client/homebrew/pages/homePage/migrate.md', 'utf8'); + const changelogText = fs.readFileSync('changelog.md', 'utf8'); + const faqText = fs.readFileSync('faq.md', 'utf8'); + + String.prototype.replaceAll = function(s, r){return this.split(s).join(r);}; + + const defaultMetaTags = { + site_name : 'The Homebrewery - Make your Homebrew content look legit!', + title : 'The Homebrewery', + description : 'A NaturalCrit Tool for creating authentic Homebrews using Markdown.', + image : `${config.get('publicUrl')}/thumbnail.png`, + type : 'website' + }; + + //Robots.txt + app.get('/robots.txt', (req, res)=>{ + return res.sendFile(`robots.txt`, { root: process.cwd() }); + }); + + //Home page + app.get('/', (req, res, next)=>{ + req.brew = { + text : welcomeText, + renderer : 'V3', + theme : '5ePHB' + }, + + req.ogMeta = { ...defaultMetaTags, + title : 'Homepage', + description : 'Homepage' + }; + + splitTextStyleAndMetadata(req.brew); + return next(); + }); + + //Home page Legacy + app.get('/legacy', (req, res, next)=>{ + req.brew = { + text : welcomeTextLegacy, + renderer : 'legacy', + theme : '5ePHB' + }, + + req.ogMeta = { ...defaultMetaTags, + title : 'Homepage (Legacy)', + description : 'Homepage' + }; + + splitTextStyleAndMetadata(req.brew); + return next(); + }); + + //Legacy/Other Document -> v3 Migration Guide + app.get('/migrate', (req, res, next)=>{ + req.brew = { + text : migrateText, + renderer : 'V3', + theme : '5ePHB' + }, + + req.ogMeta = { ...defaultMetaTags, + title : 'v3 Migration Guide', + description : 'A brief guide to converting Legacy documents to the v3 renderer.' + }; + + splitTextStyleAndMetadata(req.brew); + return next(); + }); + + //Changelog page + app.get('/changelog', async (req, res, next)=>{ + req.brew = { + title : 'Changelog', + text : changelogText, + renderer : 'V3', + theme : '5ePHB' + }, + + req.ogMeta = { ...defaultMetaTags, + title : 'Changelog', + description : 'Development changelog.' + }; + + splitTextStyleAndMetadata(req.brew); + return next(); + }); + + //FAQ page + app.get('/faq', async (req, res, next)=>{ + req.brew = { + title : 'FAQ', + text : faqText, + renderer : 'V3', + theme : '5ePHB' + }, + + req.ogMeta = { ...defaultMetaTags, + title : 'FAQ', + description : 'Frequently Asked Questions' + }; + + splitTextStyleAndMetadata(req.brew); + return next(); + }); + + //Source page + app.get('/source/:id', asyncHandler(getBrew('share')), (req, res)=>{ + const { brew } = req; + + const replaceStrings = { '&': '&', '<': '<', '>': '>' }; + let text = brew.text; + for (const replaceStr in replaceStrings) { + text = text.replaceAll(replaceStr, replaceStrings[replaceStr]); + } + text = `
${text}
`; + res.status(200).send(text); + }); + + //Download brew source page + app.get('/download/:id', asyncHandler(getBrew('share')), (req, res)=>{ + const { brew } = req; + sanitizeBrew(brew, 'share'); + const prefix = 'HB - '; + + const encodeRFC3986ValueChars = (str)=>{ + return ( + encodeURIComponent(str) + .replace(/[!'()*]/g, (char)=>{`%${char.charCodeAt(0).toString(16).toUpperCase()}`;}) + ); + }; + + let fileName = sanitizeFilename(`${prefix}${brew.title}`).replaceAll(' ', ''); + if(!fileName || !fileName.length) { fileName = `${prefix}-Untitled-Brew`; }; + res.set({ + 'Cache-Control' : 'no-cache', + 'Content-Type' : 'text/plain', + 'Content-Disposition' : `attachment; filename*=UTF-8''${encodeRFC3986ValueChars(fileName)}.txt` + }); + res.status(200).send(brew.text); + }); + + //Serve brew metadata + app.get('/metadata/:id', asyncHandler(getBrew('share')), (req, res)=>{ + const { brew } = req; + sanitizeBrew(brew, 'share'); + + const fields = ['title', 'pageCount', 'description', 'authors', 'lang', 'published', 'views', 'shareId', 'createdAt', 'updatedAt', 'lastViewed', 'thumbnail', 'tags' - ]; + ]; - const metadata = fields.reduce((acc, field)=>{ + const metadata = fields.reduce((acc, field)=>{ if(brew[field] !== undefined) acc[field] = brew[field]; return acc; - }, {}); - res.status(200).json(metadata); -}); + }, {}); + res.status(200).json(metadata); + }); -//Serve brew styling -app.get('/css/:id', asyncHandler(getBrew('share')), (req, res)=>{getCSS(req, res);}); + //Serve brew styling + app.get('/css/:id', asyncHandler(getBrew('share')), (req, res)=>{getCSS(req, res);}); -//User Page -app.get('/user/:username', dbCheck, async (req, res, next)=>{ - const ownAccount = req.account && (req.account.username == req.params.username); + //User Page + app.get('/user/:username', dbCheck, async (req, res, next)=>{ + const ownAccount = req.account && (req.account.username == req.params.username); - req.ogMeta = { ...defaultMetaTags, - title : `${req.params.username}'s Collection`, - description : 'View my collection of homebrew on the Homebrewery.' + req.ogMeta = { ...defaultMetaTags, + title : `${req.params.username}'s Collection`, + description : 'View my collection of homebrew on the Homebrewery.' // type : could be 'profile'? - }; + }; - const fields = [ - 'googleId', - 'title', - 'pageCount', - 'description', - 'authors', - 'lang', - 'published', - 'views', - 'shareId', - 'editId', - 'createdAt', - 'updatedAt', - 'lastViewed', - 'thumbnail', - 'tags' - ]; + const fields = [ + 'googleId', + 'title', + 'pageCount', + 'description', + 'authors', + 'lang', + 'published', + 'views', + 'shareId', + 'editId', + 'createdAt', + 'updatedAt', + 'lastViewed', + 'thumbnail', + 'tags' + ]; - let brews = await HomebrewModel.getByUser(req.params.username, ownAccount, fields) + let brews = await HomebrewModel.getByUser(req.params.username, ownAccount, fields) .catch((err)=>{ console.log(err); }); - brews.forEach((brew)=>brew.stubbed = true); //All brews from MongoDB are "stubbed" + brews.forEach((brew)=>brew.stubbed = true); //All brews from MongoDB are "stubbed" - if(ownAccount && req?.account?.googleId){ - const auth = await GoogleActions.authCheck(req.account, res); - let googleBrews = await GoogleActions.listGoogleBrews(auth) + if(ownAccount && req?.account?.googleId){ + const auth = await GoogleActions.authCheck(req.account, res); + let googleBrews = await GoogleActions.listGoogleBrews(auth) .catch((err)=>{ console.error(err); }); - // If stub matches file from Google, use Google metadata over stub metadata - if(googleBrews && googleBrews.length > 0) { - for (const brew of brews.filter((brew)=>brew.googleId)) { - const match = googleBrews.findIndex((b)=>b.editId === brew.editId); - if(match !== -1) { - brew.googleId = googleBrews[match].googleId; - brew.pageCount = googleBrews[match].pageCount; - brew.renderer = googleBrews[match].renderer; - brew.version = googleBrews[match].version; - brew.webViewLink = googleBrews[match].webViewLink; - googleBrews.splice(match, 1); + // If stub matches file from Google, use Google metadata over stub metadata + if(googleBrews && googleBrews.length > 0) { + for (const brew of brews.filter((brew)=>brew.googleId)) { + const match = googleBrews.findIndex((b)=>b.editId === brew.editId); + if(match !== -1) { + brew.googleId = googleBrews[match].googleId; + brew.pageCount = googleBrews[match].pageCount; + brew.renderer = googleBrews[match].renderer; + brew.version = googleBrews[match].version; + brew.webViewLink = googleBrews[match].webViewLink; + googleBrews.splice(match, 1); + } } + + //Remaining unstubbed google brews display current user as author + googleBrews = googleBrews.map((brew)=>({ ...brew, authors: [req.account.username] })); + brews = _.concat(brews, googleBrews); } - - //Remaining unstubbed google brews display current user as author - googleBrews = googleBrews.map((brew)=>({ ...brew, authors: [req.account.username] })); - brews = _.concat(brews, googleBrews); } - } - req.brews = _.map(brews, (brew)=>{ + req.brews = _.map(brews, (brew)=>{ // Clean up brew data - brew.title = brew.title?.trim(); - brew.description = brew.description?.trim(); - return sanitizeBrew(brew, ownAccount ? 'edit' : 'share'); + brew.title = brew.title?.trim(); + brew.description = brew.description?.trim(); + return sanitizeBrew(brew, ownAccount ? 'edit' : 'share'); + }); + + return next(); }); - return next(); -}); + //Change author name on brews + app.put('/api/user/rename', dbCheck, async (req, res)=>{ + const { username, newUsername } = req.body; + const ownAccount = req.account && (req.account.username == newUsername); -//Change author name on brews -app.put('/api/user/rename', dbCheck, async (req, res)=>{ - const { username, newUsername } = req.body; - const ownAccount = req.account && (req.account.username == newUsername); + if(!username || !newUsername) + return res.status(400).json({ error: 'Username and newUsername are required.' }); + if(!ownAccount) + return res.status(403).json({ error: 'Must be logged in to change your username' }); + try { + const brews = await HomebrewModel.getByUser(username, true, ['authors']); + const renamePromises = brews.map(async (brew)=>{ + const updatedAuthors = brew.authors.map((author)=>author === username ? newUsername : author + ); + return HomebrewModel.updateOne( + { _id: brew._id }, + { $set: { authors: updatedAuthors } } + ); + }); + await Promise.all(renamePromises); - if(!username || !newUsername) - return res.status(400).json({ error: 'Username and newUsername are required.' }); - if(!ownAccount) - return res.status(403).json({ error: 'Must be logged in to change your username' }); - try { - const brews = await HomebrewModel.getByUser(username, true, ['authors']); - const renamePromises = brews.map(async (brew)=>{ - const updatedAuthors = brew.authors.map((author)=>author === username ? newUsername : author - ); - return HomebrewModel.updateOne( - { _id: brew._id }, - { $set: { authors: updatedAuthors } } - ); - }); - await Promise.all(renamePromises); - - return res.json({ success: true, message: `Brews for ${username} renamed to ${newUsername}.` }); - } catch (error) { - console.error('Error renaming brews:', error); - return res.status(500).json({ error: 'Failed to rename brews.' }); - } -}); - -//Edit Page -app.get('/edit/:id', asyncHandler(getBrew('edit')), asyncHandler(async(req, res, next)=>{ - req.brew = req.brew.toObject ? req.brew.toObject() : req.brew; - - req.userThemes = await(getUsersBrewThemes(req.account?.username)); - - req.ogMeta = { ...defaultMetaTags, - title : req.brew.title || 'Untitled Brew', - description : req.brew.description || 'No description.', - image : req.brew.thumbnail || defaultMetaTags.image, - locale : req.brew.lang, - type : 'article' - }; - - sanitizeBrew(req.brew, 'edit'); - splitTextStyleAndMetadata(req.brew); - res.header('Cache-Control', 'no-cache, no-store'); //reload the latest saved brew when pressing back button, not the cached version before save. - return next(); -})); - -//New Page from ID -app.get('/new/:id', asyncHandler(getBrew('share')), asyncHandler(async(req, res, next)=>{ - sanitizeBrew(req.brew, 'share'); - splitTextStyleAndMetadata(req.brew); - const brew = { - shareId : req.brew.shareId, - title : `CLONE - ${req.brew.title}`, - text : req.brew.text, - style : req.brew.style, - renderer : req.brew.renderer, - theme : req.brew.theme, - tags : req.brew.tags, - snippets : req.brew.snippets - }; - req.brew = _.defaults(brew, DEFAULT_BREW); - - req.userThemes = await(getUsersBrewThemes(req.account?.username)); - - req.ogMeta = { ...defaultMetaTags, - title : 'New', - description : 'Start crafting your homebrew on the Homebrewery!' - }; - - return next(); -})); - -//New Page -app.get('/new', asyncHandler(async(req, res, next)=>{ - req.userThemes = await(getUsersBrewThemes(req.account?.username)); - - req.ogMeta = { ...defaultMetaTags, - title : 'New', - description : 'Start crafting your homebrew on the Homebrewery!' - }; - - return next(); -})); - -//Share Page -app.get('/share/:id', dbCheck, asyncHandler(getBrew('share')), asyncHandler(async (req, res, next)=>{ - const { brew } = req; - req.ogMeta = { ...defaultMetaTags, - title : `${req.brew.title || 'Untitled Brew'} - ${req.brew.authors[0] || 'No author.'}`, - description : req.brew.description || 'No description.', - image : req.brew.thumbnail || defaultMetaTags.image, - type : 'article' - }; - - // increase visitor view count, do not include visits by author(s) - if(!brew.authors.includes(req.account?.username)){ - if(req.params.id.length > 12 && !brew._id) { - const googleId = brew.googleId; - const shareId = brew.shareId; - await GoogleActions.increaseView(googleId, shareId, 'share', brew) - .catch((err)=>{next(err);}); - } else { - await HomebrewModel.increaseView({ shareId: brew.shareId }); + return res.json({ success: true, message: `Brews for ${username} renamed to ${newUsername}.` }); + } catch (error) { + console.error('Error renaming brews:', error); + return res.status(500).json({ error: 'Failed to rename brews.' }); } - }; + }); - brew.authors.includes(req.account?.username) ? sanitizeBrew(req.brew, 'shareAuthor') : sanitizeBrew(req.brew, 'share'); - splitTextStyleAndMetadata(req.brew); - return next(); -})); + //Edit Page + app.get('/edit/:id', asyncHandler(getBrew('edit')), asyncHandler(async(req, res, next)=>{ + req.brew = req.brew.toObject ? req.brew.toObject() : req.brew; -//Account Page -app.get('/account', dbCheck, asyncHandler(async (req, res, next)=>{ - const data = {}; - data.title = 'Account Information Page'; + req.userThemes = await(getUsersBrewThemes(req.account?.username)); - if(!req.account) { - res.set('WWW-Authenticate', 'Bearer realm="Authorization Required"'); - const error = new Error('No valid account'); - error.status = 401; - error.HBErrorCode = '50'; - error.page = data.title; - return next(error); - }; + req.ogMeta = { ...defaultMetaTags, + title : req.brew.title || 'Untitled Brew', + description : req.brew.description || 'No description.', + image : req.brew.thumbnail || defaultMetaTags.image, + locale : req.brew.lang, + type : 'article' + }; - let auth; - let googleCount = []; - if(req.account) { - if(req.account.googleId) { - auth = await GoogleActions.authCheck(req.account, res, false); + sanitizeBrew(req.brew, 'edit'); + splitTextStyleAndMetadata(req.brew); + res.header('Cache-Control', 'no-cache, no-store'); //reload the latest saved brew when pressing back button, not the cached version before save. + return next(); + })); - googleCount = await GoogleActions.listGoogleBrews(auth) + //New Page from ID + app.get('/new/:id', asyncHandler(getBrew('share')), asyncHandler(async(req, res, next)=>{ + sanitizeBrew(req.brew, 'share'); + splitTextStyleAndMetadata(req.brew); + const brew = { + shareId : req.brew.shareId, + title : `CLONE - ${req.brew.title}`, + text : req.brew.text, + style : req.brew.style, + renderer : req.brew.renderer, + theme : req.brew.theme, + tags : req.brew.tags, + snippets : req.brew.snippets + }; + req.brew = _.defaults(brew, DEFAULT_BREW); + + req.userThemes = await(getUsersBrewThemes(req.account?.username)); + + req.ogMeta = { ...defaultMetaTags, + title : 'New', + description : 'Start crafting your homebrew on the Homebrewery!' + }; + + return next(); + })); + + //New Page + app.get('/new', asyncHandler(async(req, res, next)=>{ + req.userThemes = await(getUsersBrewThemes(req.account?.username)); + + req.ogMeta = { ...defaultMetaTags, + title : 'New', + description : 'Start crafting your homebrew on the Homebrewery!' + }; + + return next(); + })); + + //Share Page + app.get('/share/:id', dbCheck, asyncHandler(getBrew('share')), asyncHandler(async (req, res, next)=>{ + const { brew } = req; + req.ogMeta = { ...defaultMetaTags, + title : `${req.brew.title || 'Untitled Brew'} - ${req.brew.authors[0] || 'No author.'}`, + description : req.brew.description || 'No description.', + image : req.brew.thumbnail || defaultMetaTags.image, + type : 'article' + }; + + // increase visitor view count, do not include visits by author(s) + if(!brew.authors.includes(req.account?.username)){ + if(req.params.id.length > 12 && !brew._id) { + const googleId = brew.googleId; + const shareId = brew.shareId; + await GoogleActions.increaseView(googleId, shareId, 'share', brew) + .catch((err)=>{next(err);}); + } else { + await HomebrewModel.increaseView({ shareId: brew.shareId }); + } + }; + + brew.authors.includes(req.account?.username) ? sanitizeBrew(req.brew, 'shareAuthor') : sanitizeBrew(req.brew, 'share'); + splitTextStyleAndMetadata(req.brew); + return next(); + })); + + //Account Page + app.get('/account', dbCheck, asyncHandler(async (req, res, next)=>{ + const data = {}; + data.title = 'Account Information Page'; + + if(!req.account) { + res.set('WWW-Authenticate', 'Bearer realm="Authorization Required"'); + const error = new Error('No valid account'); + error.status = 401; + error.HBErrorCode = '50'; + error.page = data.title; + return next(error); + }; + + let auth; + let googleCount = []; + if(req.account) { + if(req.account.googleId) { + auth = await GoogleActions.authCheck(req.account, res, false); + + googleCount = await GoogleActions.listGoogleBrews(auth) .catch((err)=>{ console.error(err); }); - } + } - const query = { authors: req.account.username, googleId: { $exists: false } }; - const mongoCount = await HomebrewModel.countDocuments(query) + const query = { authors: req.account.username, googleId: { $exists: false } }; + const mongoCount = await HomebrewModel.countDocuments(query) .catch((err)=>{ console.log(err); return 0; }); - data.accountDetails = { - username : req.account.username, - issued : req.account.issued, - googleId : Boolean(req.account.googleId), - authCheck : Boolean(req.account.googleId && auth?.credentials.access_token), - mongoCount : mongoCount, - googleCount : googleCount?.length + data.accountDetails = { + username : req.account.username, + issued : req.account.issued, + googleId : Boolean(req.account.googleId), + authCheck : Boolean(req.account.googleId && auth?.credentials.access_token), + mongoCount : mongoCount, + googleCount : googleCount?.length + }; + } + + req.brew = data; + + req.ogMeta = { ...defaultMetaTags, + title : `Account Page`, + description : null }; - } - req.brew = data; + return next(); + })); - req.ogMeta = { ...defaultMetaTags, - title : `Account Page`, - description : null - }; - - return next(); -})); - -// Local only -if(isLocalEnvironment){ + // Local only + if(isLocalEnvironment){ // Login - app.post('/local/login', (req, res)=>{ - const username = req.body.username; - if(!username) return; + app.post('/local/login', (req, res)=>{ + const username = req.body.username; + if(!username) return; - const payload = jwt.encode({ username: username, issued: new Date }, config.get('secret')); - return res.json(payload); - }); -} + const payload = jwt.encode({ username: username, issued: new Date }, config.get('secret')); + return res.json(payload); + }); + } -// Add Static Local Paths -app.use('/staticImages', express.static(config.get('hb_images') && fs.existsSync(config.get('hb_images')) ? config.get('hb_images') :'staticImages')); -app.use('/staticFonts', express.static(config.get('hb_fonts') && fs.existsSync(config.get('hb_fonts')) ? config.get('hb_fonts'):'staticFonts')); + // Add Static Local Paths + app.use('/staticImages', express.static(config.get('hb_images') && fs.existsSync(config.get('hb_images')) ? config.get('hb_images') :'staticImages')); + app.use('/staticFonts', express.static(config.get('hb_fonts') && fs.existsSync(config.get('hb_fonts')) ? config.get('hb_fonts'):'staticFonts')); -//Vault Page -app.get('/vault', asyncHandler(async(req, res, next)=>{ - req.ogMeta = { ...defaultMetaTags, - title : 'The Vault', - description : 'Search for Brews' - }; - return next(); -})); + //Vault Page + app.get('/vault', asyncHandler(async(req, res, next)=>{ + req.ogMeta = { ...defaultMetaTags, + title : 'The Vault', + description : 'Search for Brews' + }; + return next(); + })); -//Send rendered page -app.use(asyncHandler(async (req, res, next)=>{ - if(!req.route) return res.redirect('/'); // Catch-all for invalid routes + //Send rendered page + app.use(asyncHandler(async (req, res, next)=>{ + if(!req.route) return res.redirect('/'); // Catch-all for invalid routes - const page = await renderPage(req, res); - if(!page) return; - res.send(page); -})); + const page = await renderPage(req, res); + if(!page) return; + res.send(page); + })); -//Render the page -const renderPage = async (req, res)=>{ + //Render the page + const renderPage = async (req, res)=>{ // Create configuration object - const configuration = { - local : isLocalEnvironment, - publicUrl : config.get('publicUrl') ?? '', - baseUrl : `${req.protocol}://${req.get('host')}`, - environment : nodeEnv, - deployment : config.get('heroku_app_name') ?? '' + const configuration = { + local : isLocalEnvironment, + publicUrl : config.get('publicUrl') ?? '', + baseUrl : `${req.protocol}://${req.get('host')}`, + environment : nodeEnv, + deployment : config.get('heroku_app_name') ?? '' + }; + const props = { + version : version, + url : req.customUrl || req.originalUrl, + brew : req.brew, + brews : req.brews, + googleBrews : req.googleBrews, + account : req.account, + config : configuration, + ogMeta : req.ogMeta, + userThemes : req.userThemes + }; + const title = req.brew ? req.brew.title : ''; + + const page = await template( + isProd ? {} : { vite, url: req.originalUrl }, + 'homebrew', + title, + props + ).catch((err)=>{ + console.error(err); + }); + + return page; }; - const props = { - version : version, - url : req.customUrl || req.originalUrl, - brew : req.brew, - brews : req.brews, - googleBrews : req.googleBrews, - account : req.account, - config : configuration, - ogMeta : req.ogMeta, - userThemes : req.userThemes + + //v=====----- Error-Handling Middleware -----=====v// + //Format Errors as plain objects so all fields will appear in the string sent + const formatErrors = (key, value)=>{ + if(value instanceof Error) { + const error = {}; + Object.getOwnPropertyNames(value).forEach(function (key) { + error[key] = value[key]; + }); + return error; + } + return value; }; - const title = req.brew ? req.brew.title : ''; - const page = await templateFn('homebrew', title, props) - .catch((err)=>{ - console.log(err); - }); - return page; -}; -//v=====----- Error-Handling Middleware -----=====v// -//Format Errors as plain objects so all fields will appear in the string sent -const formatErrors = (key, value)=>{ - if(value instanceof Error) { - const error = {}; - Object.getOwnPropertyNames(value).forEach(function (key) { - error[key] = value[key]; - }); - return error; - } - return value; -}; + const getPureError = (error)=>{ + return JSON.parse(JSON.stringify(error, formatErrors)); + }; -const getPureError = (error)=>{ - return JSON.parse(JSON.stringify(error, formatErrors)); -}; + app.use(async (err, req, res, next)=>{ + err.originalUrl = req.originalUrl; + console.error(err); -app.use(async (err, req, res, next)=>{ - err.originalUrl = req.originalUrl; - console.error(err); - - if(err.originalUrl?.startsWith('/api')) { + if(err.originalUrl?.startsWith('/api')) { // console.log('API error'); - res.status(err.status || err.response?.status || 500).send(err); - return; - } + res.status(err.status || err.response?.status || 500).send(err); + return; + } - // console.log('non-API error'); - const status = err.status || err.code || 500; + // console.log('non-API error'); + const status = err.status || err.code || 500; - req.ogMeta = { ...defaultMetaTags, - title : 'Error Page', - description : 'Something went wrong!' - }; - req.brew = { - ...err, - title : 'Error - Something went wrong!', - text : err.errors?.map((error)=>{return error.message;}).join('\n\n') || err.message || 'Unknown error!', - status : status, - HBErrorCode : err.HBErrorCode ?? '00', - pureError : getPureError(err) - }; - req.customUrl= '/error'; + req.ogMeta = { ...defaultMetaTags, + title : 'Error Page', + description : 'Something went wrong!' + }; + req.brew = { + ...err, + title : 'Error - Something went wrong!', + text : err.errors?.map((error)=>{return error.message;}).join('\n\n') || err.message || 'Unknown error!', + status : status, + HBErrorCode : err.HBErrorCode ?? '00', + pureError : getPureError(err) + }; + req.customUrl= '/error'; - const page = await renderPage(req, res); - if(!page) return; - res.send(page); -}); + const page = await renderPage(req, res); + if(!page) return; + res.send(page); + }); -app.use((req, res)=>{ - if(!res.headersSent) { - console.error('Headers have not been sent, responding with a server error.', req.url); - res.status(500).send('An error occurred and the server did not send a response. The error has been logged, please note the time this occurred and report this issue.'); - } -}); -//^=====--------------------------------------=====^// + app.use((req, res)=>{ + if(!res.headersSent) { + console.error('Headers have not been sent, responding with a server error.', req.url); + res.status(500).send('An error occurred and the server did not send a response. The error has been logged, please note the time this occurred and report this issue.'); + } + }); + //^=====--------------------------------------=====^// -export default app; + return app; +} diff --git a/vite.config.js b/vite.config.js index 4405fcafd..ff2c1444e 100644 --- a/vite.config.js +++ b/vite.config.js @@ -23,6 +23,7 @@ export default defineConfig({ }, }, server: { + port:8000, fs: { allow: ["."], }, From 2813ff8972d38f20d9e49fc3a930ed85d411922c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 30 Jan 2026 12:44:53 +0100 Subject: [PATCH 16/76] fix two imports --- client/homebrew/brewRenderer/brewRenderer.jsx | 3 ++- client/homebrew/pages/editPage/editPage.jsx | 3 ++- client/homebrew/pages/homePage/homePage.jsx | 3 ++- client/homebrew/pages/sharePage/sharePage.jsx | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index a42b3a64d..401b197d3 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -11,7 +11,8 @@ import ToolBar from './toolBar/toolBar.jsx'; //TODO: move to the brew renderer import RenderWarnings from '../../components/renderWarnings/renderWarnings.jsx'; import NotificationPopup from './notificationPopup/notificationPopup.jsx'; -import Frame from 'react-frame-component'; +import frameComp from 'react-frame-component'; +const Frame = frameComp.default; import dedent from 'dedent'; import { printCurrentBrew } from '../../../shared/helpers.js'; diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 297a57642..63b7ac8e0 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -26,7 +26,8 @@ import RecentNavItems from '../../navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import Meta from '../../../../vitreum/headtags.js'; +import Headtags from '../../../../vitreum/headtags.js'; +const Meta = Headtags.Meta; import { md5 } from 'hash-wasm'; import { gzipSync, strToU8 } from 'fflate'; import { makePatches, stringifyPatches } from '@sanity/diff-match-patch'; diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 538b6d050..d612a7402 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -27,7 +27,8 @@ const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import Meta from '../../../../vitreum/headtags.js'; +import Headtags from '../../../../vitreum/headtags.js'; +const Meta = Headtags.Meta; const BREWKEY = 'homebrewery-new'; const STYLEKEY = 'homebrewery-new-style'; diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index e0bf0acd6..31dc29d70 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -1,6 +1,7 @@ import './sharePage.less'; import React, { useState, useEffect, useCallback } from 'react'; -import Meta from '../../../../vitreum/headtags.js'; +import Headtags from '../../../../vitreum/headtags.js'; +const Meta = Headtags.Meta; import Nav from '../../navbar/nav.jsx'; import Navbar from '../../navbar/navbar.jsx'; From 7deec9cd6e02189bf98dd820cd8c6a09191cff54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 30 Jan 2026 17:08:44 +0100 Subject: [PATCH 17/76] change scripts --- package-lock.json | 212 +++++++++++++++++++++++----------------------- package.json | 12 +-- 2 files changed, 109 insertions(+), 115 deletions(-) diff --git a/package-lock.json b/package-lock.json index 57b2e5fba..0d96b646c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3471,9 +3471,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.0.tgz", - "integrity": "sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", "cpu": [ "arm" ], @@ -3484,9 +3484,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.0.tgz", - "integrity": "sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", "cpu": [ "arm64" ], @@ -3497,9 +3497,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.0.tgz", - "integrity": "sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", "cpu": [ "arm64" ], @@ -3510,9 +3510,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.0.tgz", - "integrity": "sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", "cpu": [ "x64" ], @@ -3523,9 +3523,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.0.tgz", - "integrity": "sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", "cpu": [ "arm64" ], @@ -3536,9 +3536,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.0.tgz", - "integrity": "sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", "cpu": [ "x64" ], @@ -3549,9 +3549,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.0.tgz", - "integrity": "sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", "cpu": [ "arm" ], @@ -3562,9 +3562,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.0.tgz", - "integrity": "sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", "cpu": [ "arm" ], @@ -3575,9 +3575,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.0.tgz", - "integrity": "sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", "cpu": [ "arm64" ], @@ -3588,9 +3588,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.0.tgz", - "integrity": "sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", "cpu": [ "arm64" ], @@ -3601,9 +3601,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.0.tgz", - "integrity": "sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", "cpu": [ "loong64" ], @@ -3614,9 +3614,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.0.tgz", - "integrity": "sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", "cpu": [ "loong64" ], @@ -3627,9 +3627,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.0.tgz", - "integrity": "sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", "cpu": [ "ppc64" ], @@ -3640,9 +3640,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.0.tgz", - "integrity": "sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", "cpu": [ "ppc64" ], @@ -3653,9 +3653,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.0.tgz", - "integrity": "sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", "cpu": [ "riscv64" ], @@ -3666,9 +3666,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.0.tgz", - "integrity": "sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", "cpu": [ "riscv64" ], @@ -3679,9 +3679,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.0.tgz", - "integrity": "sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", "cpu": [ "s390x" ], @@ -3692,9 +3692,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.0.tgz", - "integrity": "sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", "cpu": [ "x64" ], @@ -3705,9 +3705,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.0.tgz", - "integrity": "sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", "cpu": [ "x64" ], @@ -3718,9 +3718,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.0.tgz", - "integrity": "sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", "cpu": [ "x64" ], @@ -3731,9 +3731,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.0.tgz", - "integrity": "sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", "cpu": [ "arm64" ], @@ -3744,9 +3744,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.0.tgz", - "integrity": "sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", "cpu": [ "arm64" ], @@ -3757,9 +3757,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.0.tgz", - "integrity": "sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", "cpu": [ "ia32" ], @@ -3770,9 +3770,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.0.tgz", - "integrity": "sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", "cpu": [ "x64" ], @@ -3783,9 +3783,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.0.tgz", - "integrity": "sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", "cpu": [ "x64" ], @@ -5958,9 +5958,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.282", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.282.tgz", - "integrity": "sha512-FCPkJtpst28UmFzd903iU7PdeVTfY0KAeJy+Lk0GLZRwgwYHn/irRcaCbQQOmr5Vytc/7rcavsYLvTM8RiHYhQ==", + "version": "1.5.283", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", + "integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==", "license": "ISC" }, "node_modules/emittery": { @@ -11301,9 +11301,9 @@ } }, "node_modules/rollup": { - "version": "4.57.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.0.tgz", - "integrity": "sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -11316,31 +11316,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.57.0", - "@rollup/rollup-android-arm64": "4.57.0", - "@rollup/rollup-darwin-arm64": "4.57.0", - "@rollup/rollup-darwin-x64": "4.57.0", - "@rollup/rollup-freebsd-arm64": "4.57.0", - "@rollup/rollup-freebsd-x64": "4.57.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.57.0", - "@rollup/rollup-linux-arm-musleabihf": "4.57.0", - "@rollup/rollup-linux-arm64-gnu": "4.57.0", - "@rollup/rollup-linux-arm64-musl": "4.57.0", - "@rollup/rollup-linux-loong64-gnu": "4.57.0", - "@rollup/rollup-linux-loong64-musl": "4.57.0", - "@rollup/rollup-linux-ppc64-gnu": "4.57.0", - "@rollup/rollup-linux-ppc64-musl": "4.57.0", - "@rollup/rollup-linux-riscv64-gnu": "4.57.0", - "@rollup/rollup-linux-riscv64-musl": "4.57.0", - "@rollup/rollup-linux-s390x-gnu": "4.57.0", - "@rollup/rollup-linux-x64-gnu": "4.57.0", - "@rollup/rollup-linux-x64-musl": "4.57.0", - "@rollup/rollup-openbsd-x64": "4.57.0", - "@rollup/rollup-openharmony-arm64": "4.57.0", - "@rollup/rollup-win32-arm64-msvc": "4.57.0", - "@rollup/rollup-win32-ia32-msvc": "4.57.0", - "@rollup/rollup-win32-x64-gnu": "4.57.0", - "@rollup/rollup-win32-x64-msvc": "4.57.0", + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", "fsevents": "~2.3.2" } }, diff --git a/package.json b/package.json index 0ea12fb9d..cf1964d93 100644 --- a/package.json +++ b/package.json @@ -12,17 +12,11 @@ "url": "git://github.com/naturalcrit/homebrewery.git" }, "scripts": { - "viteDev1": "node scripts/dev.js", - "viteDev2": "vite dev", - "viteDevAdmin": "vite --config vite.config.js --ssr client/admin/admin.jsx", - "viteBuild": "vite build && node scripts/compileAssets.js", - "viteStart": "vite preview --outDir build", + "dev":"node server.js", + "build": "vite build && node scripts/compileAssets.js", "start": "node server.js", "compileAssets": "node scripts/compileAssets.js --dev", - "dev": "node --experimental-require-module scripts/dev.js", - "quick": "node --experimental-require-module scripts/quick.js", - "build": "node --experimental-require-module scripts/buildHomebrew.js && node --experimental-require-module scripts/buildAdmin.js", - "builddev": "node --experimental-require-module scripts/buildHomebrew.js --dev", + "lint": "eslint --fix", "lint:dry": "eslint", "stylelint": "stylelint --fix **/*.{less}", From 390ff68a6b6633d34612921a802c0cf91d8667a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 30 Jan 2026 18:56:24 +0100 Subject: [PATCH 18/76] stable version, small fixes --- scripts/compileAssets.js | 13 +++++-------- server.js | 1 - shared/naturalcrit/styles/core.less | 4 ++-- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/scripts/compileAssets.js b/scripts/compileAssets.js index 19c2c3cac..0c2d2ef63 100644 --- a/scripts/compileAssets.js +++ b/scripts/compileAssets.js @@ -5,6 +5,11 @@ const isDev = !!process.argv.find((arg) => arg === "--dev"); const compileAssets = async () => { await fs.copy("./client/homebrew/favicon.ico", "./build/assets/favicon.ico"); + let assets = fs.readdirSync("./shared/naturalcrit/styles"); + for (const file of assets) { + await fs.copy(`./shared/naturalcrit/styles/${file}`, `./build/fonts/${file}`); + } + //v==----------------------------- COMPILE THEMES --------------------------------==v// // Update list of all Theme files @@ -53,14 +58,6 @@ const compileAssets = async () => { await fs.outputFile("./themes/themes.json", JSON.stringify(themes, null, 2)); - // await less.render(lessCode, { - // compress : !dev, - // sourceMap : (dev ? { - // sourceMapFileInline: true, - // outputSourceFiles: true - // } : false), - // }) - // Move assets await fs.copy("./themes/fonts", "./build/fonts"); await fs.copy("./themes/assets", "./build/assets"); diff --git a/server.js b/server.js index d2dea2de5..0405128ff 100644 --- a/server.js +++ b/server.js @@ -13,7 +13,6 @@ async function start() { vite = await createViteServer({ server: { middlewareMode: true }, appType: "custom", - logLevel: 'error', }); } diff --git a/shared/naturalcrit/styles/core.less b/shared/naturalcrit/styles/core.less index 9c7b99aa5..1c35cd1dd 100644 --- a/shared/naturalcrit/styles/core.less +++ b/shared/naturalcrit/styles/core.less @@ -6,11 +6,11 @@ @import './tooltip.less'; @font-face { font-family : 'CodeLight'; - src : data-uri('naturalcrit/styles/CODE Light.otf') format('opentype'); + src : url('../../../shared/naturalcrit/styles/CODE Light.otf') format('opentype'); } @font-face { font-family : 'CodeBold'; - src : data-uri('naturalcrit/styles/CODE Bold.otf') format('opentype'); + src : url('../../../shared/naturalcrit/styles/CODE Bold.otf') format('opentype'); } html,body, #reactRoot { height : 100vh; From 820160d0f5d5712a92fb5b0ad7b90fa59daeb1f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 1 Feb 2026 17:28:21 +0100 Subject: [PATCH 19/76] moving towards SPA --- client/entry-client-homebrew.jsx | 21 ++-- client/index.html | 29 ++++++ client/main.jsx | 5 + package-lock.json | 171 +++++++++++++++++-------------- vite.config.js | 2 - 5 files changed, 138 insertions(+), 90 deletions(-) create mode 100644 client/index.html create mode 100644 client/main.jsx diff --git a/client/entry-client-homebrew.jsx b/client/entry-client-homebrew.jsx index 380b4107d..0c07e4212 100644 --- a/client/entry-client-homebrew.jsx +++ b/client/entry-client-homebrew.jsx @@ -1,13 +1,16 @@ -import React from 'react' -import { hydrateRoot } from 'react-dom/client' -import Homebrew from './homebrew/homebrew.jsx' +import React from "react"; +import { hydrateRoot } from "react-dom/client"; +import Homebrew from "./homebrew/homebrew.jsx"; // CSS MUST be imported here -import './homebrew/homebrew.less' // or wherever your CSS lives +import "./homebrew/homebrew.less"; // or wherever your CSS lives -window.start_app = (props) => { - hydrateRoot( - document.getElementById('reactRoot'), - - ) +// Polyfill `global` in the browser +if (typeof global === 'undefined') { + window.global = window; } + +console.log("entry-client-homebrew"); +const props = window.__SSR_PROPS__ || {}; +console.log("props: ", props); +hydrateRoot(document.getElementById("reactRoot"), ); diff --git a/client/index.html b/client/index.html new file mode 100644 index 000000000..0a6bc03cf --- /dev/null +++ b/client/index.html @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + The Homebrewery - NaturalCrit + + + +
+ + + + diff --git a/client/main.jsx b/client/main.jsx new file mode 100644 index 000000000..63ad92f55 --- /dev/null +++ b/client/main.jsx @@ -0,0 +1,5 @@ +import { createRoot } from "react-dom/client"; +import App from "./App"; + +const root = createRoot(document.getElementById("reactRoot")); +root.render(); diff --git a/package-lock.json b/package-lock.json index 0d96b646c..7a06b778c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -119,9 +119,9 @@ } }, "node_modules/@asamuzakjp/dom-selector": { - "version": "6.7.6", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.7.6.tgz", - "integrity": "sha512-hBaJER6A9MpdG3WgdlOolHmbOYvSk46y7IQN/1+iqiCuUu6iWdQrs9DGKF8ocqsEqWujWf/V7b7vaDgiUmIvUg==", + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.7.7.tgz", + "integrity": "sha512-8CO/UQ4tzDd7ula+/CVimJIVWez99UJlbMyIgk8xOnhAVPKLnBZmUFYVgugS441v2ZqUq5EnSh6B0Ua0liSFAA==", "dev": true, "license": "MIT", "dependencies": { @@ -129,7 +129,7 @@ "bidi-js": "^1.0.3", "css-tree": "^3.1.0", "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.2.4" + "lru-cache": "^11.2.5" } }, "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { @@ -150,9 +150,9 @@ "license": "MIT" }, "node_modules/@babel/code-frame": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", - "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", @@ -164,30 +164,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", - "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", - "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", "peer": true, "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.28.6", + "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -204,13 +204,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", - "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.0.tgz", + "integrity": "sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -476,12 +476,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", - "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.6" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -865,14 +865,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.6.tgz", - "integrity": "sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.6" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1044,9 +1044,9 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.28.6.tgz", - "integrity": "sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", @@ -1246,15 +1246,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", - "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.5" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1280,13 +1280,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1565,9 +1565,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.6.tgz", - "integrity": "sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" @@ -1611,13 +1611,13 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz", - "integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", + "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", @@ -1770,12 +1770,12 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.6.tgz", - "integrity": "sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", + "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", + "@babel/compat-data": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", @@ -1789,7 +1789,7 @@ "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.28.6", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.28.6", @@ -1800,7 +1800,7 @@ "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.6", "@babel/plugin-transform-exponentiation-operator": "^7.28.6", @@ -1813,9 +1813,9 @@ "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.28.6", - "@babel/plugin-transform-modules-systemjs": "^7.28.5", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", "@babel/plugin-transform-numeric-separator": "^7.28.6", @@ -1827,7 +1827,7 @@ "@babel/plugin-transform-private-methods": "^7.28.6", "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.6", + "@babel/plugin-transform-regenerator": "^7.29.0", "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", @@ -1840,10 +1840,10 @@ "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "core-js-compat": "^3.43.0", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -1853,6 +1853,19 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz", + "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.6", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -1911,17 +1924,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", - "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.6", + "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -1929,9 +1942,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", - "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -7617,9 +7630,9 @@ } }, "node_modules/hookified": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.0.tgz", - "integrity": "sha512-51w+ZZGt7Zw5q7rM3nC4t3aLn/xvKDETsXqMczndvwyVQhAHfUmUuFBRFcos8Iyebtk7OAE9dL26wFNzZVVOkw==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", "dev": true, "license": "MIT" }, diff --git a/vite.config.js b/vite.config.js index ff2c1444e..be9cda56c 100644 --- a/vite.config.js +++ b/vite.config.js @@ -8,8 +8,6 @@ export default defineConfig({ build: { outDir: "build", emptyOutDir: true, - ssrManifest: true, - ssr:'./client/entry-server-homebrew.jsx', rollupOptions: { input: { admin: path.resolve(__dirname, "client/admin/admin.jsx"), From c28736bd01c21ecc93abe6833b951b4656625331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 1 Feb 2026 17:34:50 +0100 Subject: [PATCH 20/76] renamed client to src --- {client => src}/admin/admin.jsx | 0 {client => src}/admin/admin.less | 0 .../admin/authorUtils/authorLookup/authorLookup.jsx | 0 .../authorUtils/authorLookup/authorLookup.less | 0 {client => src}/admin/authorUtils/authorUtils.jsx | 0 .../admin/brewUtils/brewCleanup/brewCleanup.jsx | 0 .../admin/brewUtils/brewCompress/brewCompress.jsx | 0 .../admin/brewUtils/brewLookup/brewLookup.jsx | 0 {client => src}/admin/brewUtils/brewUtils.jsx | 0 {client => src}/admin/brewUtils/brewUtils.less | 0 {client => src}/admin/brewUtils/stats/stats.jsx | 0 {client => src}/admin/lockTools/lockTools.jsx | 0 {client => src}/admin/lockTools/lockTools.less | 0 .../notificationAdd/notificationAdd.jsx | 0 .../notificationAdd/notificationAdd.less | 0 .../notificationLookup/notificationLookup.jsx | 0 .../notificationLookup/notificationLookup.less | 0 .../admin/notificationUtils/notificationUtils.jsx | 0 {client => src}/components/Anchored.jsx | 0 {client => src}/components/Anchored.less | 0 .../components/codeEditor/autocompleteEmoji.js | 0 {client => src}/components/codeEditor/close-tag.js | 0 .../components/codeEditor/codeEditor.jsx | 0 .../components/codeEditor/codeEditor.less | 0 {client => src}/components/codeEditor/fold-css.js | 0 {client => src}/components/codeEditor/fold-pages.js | 0 {client => src}/components/combobox.jsx | 0 {client => src}/components/combobox.less | 0 {client => src}/components/dialog.jsx | 0 .../components/renderWarnings/renderWarnings.jsx | 0 .../components/renderWarnings/renderWarnings.less | 0 {client => src}/components/splitPane/splitPane.jsx | 0 {client => src}/components/splitPane/splitPane.less | 0 {client => src}/components/svg/cauldron.svg.jsx | 0 .../components/svg/naturalcrit-d20.svg.jsx | 0 {client => src}/entry-client-admin.jsx | 0 {client => src}/entry-client-homebrew.jsx | 0 {client => src}/entry-server-admin.jsx | 0 {client => src}/entry-server-homebrew.jsx | 0 .../homebrew/brewRenderer/brewRenderer.jsx | 0 .../homebrew/brewRenderer/brewRenderer.less | 0 .../homebrew/brewRenderer/errorBar/errorBar.jsx | 0 .../homebrew/brewRenderer/errorBar/errorBar.less | 0 .../homebrew/brewRenderer/headerNav/headerNav.jsx | 0 .../homebrew/brewRenderer/headerNav/headerNav.less | 0 .../notificationPopup/notificationPopup.jsx | 0 .../notificationPopup/notificationPopup.less | 0 {client => src}/homebrew/brewRenderer/safeHTML.js | 0 .../homebrew/brewRenderer/toolBar/toolBar.jsx | 0 .../homebrew/brewRenderer/toolBar/toolBar.less | 0 {client => src}/homebrew/editor/editor.jsx | 0 {client => src}/homebrew/editor/editor.less | 0 .../editor/metadataEditor/metadataEditor.jsx | 0 .../editor/metadataEditor/metadataEditor.less | 0 .../homebrew/editor/metadataEditor/validations.js | 0 .../homebrew/editor/snippetbar/snippetbar.jsx | 0 .../homebrew/editor/snippetbar/snippetbar.less | 0 .../homebrew/editor/tagInput/tagInput.jsx | 0 .../homebrew/editor/tagInput/tagInput.less | 0 {client => src}/homebrew/favicon.ico | Bin {client => src}/homebrew/googleDrive.svg | 0 {client => src}/homebrew/homebrew.jsx | 0 {client => src}/homebrew/homebrew.less | 0 {client => src}/homebrew/navbar/account.navitem.jsx | 0 {client => src}/homebrew/navbar/error-navitem.jsx | 0 {client => src}/homebrew/navbar/error-navitem.less | 0 {client => src}/homebrew/navbar/help.navitem.jsx | 0 .../homebrew/navbar/metadata.navitem.jsx | 0 {client => src}/homebrew/navbar/nav.jsx | 0 {client => src}/homebrew/navbar/navbar.jsx | 0 {client => src}/homebrew/navbar/navbar.less | 0 {client => src}/homebrew/navbar/newbrew.navitem.jsx | 0 {client => src}/homebrew/navbar/patreon.navitem.jsx | 0 {client => src}/homebrew/navbar/print.navitem.jsx | 0 {client => src}/homebrew/navbar/recent.navitem.jsx | 0 {client => src}/homebrew/navbar/share.navitem.jsx | 0 {client => src}/homebrew/navbar/vault.navitem.jsx | 0 .../homebrew/pages/accountPage/accountPage.jsx | 0 .../pages/basePages/listPage/brewItem/brewItem.jsx | 0 .../pages/basePages/listPage/brewItem/brewItem.less | 0 .../homebrew/pages/basePages/listPage/listPage.jsx | 0 .../homebrew/pages/basePages/listPage/listPage.less | 0 .../homebrew/pages/basePages/uiPage/uiPage.jsx | 0 .../homebrew/pages/basePages/uiPage/uiPage.less | 0 .../homebrew/pages/editPage/editPage.jsx | 0 .../homebrew/pages/editPage/editPage.less | 0 .../editPage/lockNotification/lockNotification.jsx | 0 .../editPage/lockNotification/lockNotification.less | 0 .../homebrew/pages/errorPage/errorPage.jsx | 0 .../homebrew/pages/errorPage/errorPage.less | 0 .../homebrew/pages/errorPage/errors/errorIndex.js | 0 .../homebrew/pages/homePage/homePage.jsx | 0 .../homebrew/pages/homePage/homePage.less | 0 {client => src}/homebrew/pages/homePage/migrate.md | 0 .../homebrew/pages/homePage/welcome_msg.md | 0 .../homebrew/pages/homePage/welcome_msg_legacy.md | 0 {client => src}/homebrew/pages/newPage/newPage.jsx | 0 {client => src}/homebrew/pages/newPage/newPage.less | 0 .../homebrew/pages/sharePage/sharePage.jsx | 0 .../homebrew/pages/sharePage/sharePage.less | 0 .../homebrew/pages/userPage/userPage.jsx | 0 .../homebrew/pages/vaultPage/vaultPage.jsx | 0 .../homebrew/pages/vaultPage/vaultPage.less | 0 {client => src}/homebrew/thumbnail.png | Bin {client => src}/homebrew/thumbnail.svg | 0 {client => src}/homebrew/utils/customIDBStore.js | 0 .../homebrew/utils/request-middleware.js | 0 .../homebrew/utils/request-middleware.spec.js | 0 .../utils/updateLocalStorage/localStorageKeyMap.js | 0 .../updateLocalStorage/updateLocalStorageKeys.js | 0 {client => src}/homebrew/utils/versionHistory.js | 0 {client => src}/icons/Davek.svg | 0 {client => src}/icons/Iokharic.svg | 0 {client => src}/icons/Rellanic.svg | 0 {client => src}/icons/book-back-cover.svg | 0 {client => src}/icons/book-front-cover.svg | 0 {client => src}/icons/book-inside-cover.svg | 0 {client => src}/icons/book-part-cover.svg | 0 {client => src}/icons/customIcons.less | 0 {client => src}/icons/facing-spread.svg | 0 {client => src}/icons/fit-width.svg | 0 {client => src}/icons/flow-spread.svg | 0 {client => src}/icons/image-wrap-left.svg | 0 {client => src}/icons/image-wrap-right.svg | 0 {client => src}/icons/mask-center.svg | 0 {client => src}/icons/mask-corner.svg | 0 {client => src}/icons/mask-edge.svg | 0 {client => src}/icons/position-bottom-left.svg | 0 {client => src}/icons/position-bottom-right.svg | 0 {client => src}/icons/position-bottom.svg | 0 {client => src}/icons/position-left.svg | 0 {client => src}/icons/position-right.svg | 0 {client => src}/icons/position-top-left.svg | 0 {client => src}/icons/position-top-right.svg | 0 {client => src}/icons/position-top.svg | 0 {client => src}/icons/single-spread.svg | 0 {client => src}/icons/zoom-to-fit.svg | 0 {client => src}/index.html | 0 {client => src}/main.jsx | 0 {client => src}/template.js | 0 140 files changed, 0 insertions(+), 0 deletions(-) rename {client => src}/admin/admin.jsx (100%) rename {client => src}/admin/admin.less (100%) rename {client => src}/admin/authorUtils/authorLookup/authorLookup.jsx (100%) rename {client => src}/admin/authorUtils/authorLookup/authorLookup.less (100%) rename {client => src}/admin/authorUtils/authorUtils.jsx (100%) rename {client => src}/admin/brewUtils/brewCleanup/brewCleanup.jsx (100%) rename {client => src}/admin/brewUtils/brewCompress/brewCompress.jsx (100%) rename {client => src}/admin/brewUtils/brewLookup/brewLookup.jsx (100%) rename {client => src}/admin/brewUtils/brewUtils.jsx (100%) rename {client => src}/admin/brewUtils/brewUtils.less (100%) rename {client => src}/admin/brewUtils/stats/stats.jsx (100%) rename {client => src}/admin/lockTools/lockTools.jsx (100%) rename {client => src}/admin/lockTools/lockTools.less (100%) rename {client => src}/admin/notificationUtils/notificationAdd/notificationAdd.jsx (100%) rename {client => src}/admin/notificationUtils/notificationAdd/notificationAdd.less (100%) rename {client => src}/admin/notificationUtils/notificationLookup/notificationLookup.jsx (100%) rename {client => src}/admin/notificationUtils/notificationLookup/notificationLookup.less (100%) rename {client => src}/admin/notificationUtils/notificationUtils.jsx (100%) rename {client => src}/components/Anchored.jsx (100%) rename {client => src}/components/Anchored.less (100%) rename {client => src}/components/codeEditor/autocompleteEmoji.js (100%) rename {client => src}/components/codeEditor/close-tag.js (100%) rename {client => src}/components/codeEditor/codeEditor.jsx (100%) rename {client => src}/components/codeEditor/codeEditor.less (100%) rename {client => src}/components/codeEditor/fold-css.js (100%) rename {client => src}/components/codeEditor/fold-pages.js (100%) rename {client => src}/components/combobox.jsx (100%) rename {client => src}/components/combobox.less (100%) rename {client => src}/components/dialog.jsx (100%) rename {client => src}/components/renderWarnings/renderWarnings.jsx (100%) rename {client => src}/components/renderWarnings/renderWarnings.less (100%) rename {client => src}/components/splitPane/splitPane.jsx (100%) rename {client => src}/components/splitPane/splitPane.less (100%) rename {client => src}/components/svg/cauldron.svg.jsx (100%) rename {client => src}/components/svg/naturalcrit-d20.svg.jsx (100%) rename {client => src}/entry-client-admin.jsx (100%) rename {client => src}/entry-client-homebrew.jsx (100%) rename {client => src}/entry-server-admin.jsx (100%) rename {client => src}/entry-server-homebrew.jsx (100%) rename {client => src}/homebrew/brewRenderer/brewRenderer.jsx (100%) rename {client => src}/homebrew/brewRenderer/brewRenderer.less (100%) rename {client => src}/homebrew/brewRenderer/errorBar/errorBar.jsx (100%) rename {client => src}/homebrew/brewRenderer/errorBar/errorBar.less (100%) rename {client => src}/homebrew/brewRenderer/headerNav/headerNav.jsx (100%) rename {client => src}/homebrew/brewRenderer/headerNav/headerNav.less (100%) rename {client => src}/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx (100%) rename {client => src}/homebrew/brewRenderer/notificationPopup/notificationPopup.less (100%) rename {client => src}/homebrew/brewRenderer/safeHTML.js (100%) rename {client => src}/homebrew/brewRenderer/toolBar/toolBar.jsx (100%) rename {client => src}/homebrew/brewRenderer/toolBar/toolBar.less (100%) rename {client => src}/homebrew/editor/editor.jsx (100%) rename {client => src}/homebrew/editor/editor.less (100%) rename {client => src}/homebrew/editor/metadataEditor/metadataEditor.jsx (100%) rename {client => src}/homebrew/editor/metadataEditor/metadataEditor.less (100%) rename {client => src}/homebrew/editor/metadataEditor/validations.js (100%) rename {client => src}/homebrew/editor/snippetbar/snippetbar.jsx (100%) rename {client => src}/homebrew/editor/snippetbar/snippetbar.less (100%) rename {client => src}/homebrew/editor/tagInput/tagInput.jsx (100%) rename {client => src}/homebrew/editor/tagInput/tagInput.less (100%) rename {client => src}/homebrew/favicon.ico (100%) rename {client => src}/homebrew/googleDrive.svg (100%) rename {client => src}/homebrew/homebrew.jsx (100%) rename {client => src}/homebrew/homebrew.less (100%) rename {client => src}/homebrew/navbar/account.navitem.jsx (100%) rename {client => src}/homebrew/navbar/error-navitem.jsx (100%) rename {client => src}/homebrew/navbar/error-navitem.less (100%) rename {client => src}/homebrew/navbar/help.navitem.jsx (100%) rename {client => src}/homebrew/navbar/metadata.navitem.jsx (100%) rename {client => src}/homebrew/navbar/nav.jsx (100%) rename {client => src}/homebrew/navbar/navbar.jsx (100%) rename {client => src}/homebrew/navbar/navbar.less (100%) rename {client => src}/homebrew/navbar/newbrew.navitem.jsx (100%) rename {client => src}/homebrew/navbar/patreon.navitem.jsx (100%) rename {client => src}/homebrew/navbar/print.navitem.jsx (100%) rename {client => src}/homebrew/navbar/recent.navitem.jsx (100%) rename {client => src}/homebrew/navbar/share.navitem.jsx (100%) rename {client => src}/homebrew/navbar/vault.navitem.jsx (100%) rename {client => src}/homebrew/pages/accountPage/accountPage.jsx (100%) rename {client => src}/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx (100%) rename {client => src}/homebrew/pages/basePages/listPage/brewItem/brewItem.less (100%) rename {client => src}/homebrew/pages/basePages/listPage/listPage.jsx (100%) rename {client => src}/homebrew/pages/basePages/listPage/listPage.less (100%) rename {client => src}/homebrew/pages/basePages/uiPage/uiPage.jsx (100%) rename {client => src}/homebrew/pages/basePages/uiPage/uiPage.less (100%) rename {client => src}/homebrew/pages/editPage/editPage.jsx (100%) rename {client => src}/homebrew/pages/editPage/editPage.less (100%) rename {client => src}/homebrew/pages/editPage/lockNotification/lockNotification.jsx (100%) rename {client => src}/homebrew/pages/editPage/lockNotification/lockNotification.less (100%) rename {client => src}/homebrew/pages/errorPage/errorPage.jsx (100%) rename {client => src}/homebrew/pages/errorPage/errorPage.less (100%) rename {client => src}/homebrew/pages/errorPage/errors/errorIndex.js (100%) rename {client => src}/homebrew/pages/homePage/homePage.jsx (100%) rename {client => src}/homebrew/pages/homePage/homePage.less (100%) rename {client => src}/homebrew/pages/homePage/migrate.md (100%) rename {client => src}/homebrew/pages/homePage/welcome_msg.md (100%) rename {client => src}/homebrew/pages/homePage/welcome_msg_legacy.md (100%) rename {client => src}/homebrew/pages/newPage/newPage.jsx (100%) rename {client => src}/homebrew/pages/newPage/newPage.less (100%) rename {client => src}/homebrew/pages/sharePage/sharePage.jsx (100%) rename {client => src}/homebrew/pages/sharePage/sharePage.less (100%) rename {client => src}/homebrew/pages/userPage/userPage.jsx (100%) rename {client => src}/homebrew/pages/vaultPage/vaultPage.jsx (100%) rename {client => src}/homebrew/pages/vaultPage/vaultPage.less (100%) rename {client => src}/homebrew/thumbnail.png (100%) rename {client => src}/homebrew/thumbnail.svg (100%) rename {client => src}/homebrew/utils/customIDBStore.js (100%) rename {client => src}/homebrew/utils/request-middleware.js (100%) rename {client => src}/homebrew/utils/request-middleware.spec.js (100%) rename {client => src}/homebrew/utils/updateLocalStorage/localStorageKeyMap.js (100%) rename {client => src}/homebrew/utils/updateLocalStorage/updateLocalStorageKeys.js (100%) rename {client => src}/homebrew/utils/versionHistory.js (100%) rename {client => src}/icons/Davek.svg (100%) rename {client => src}/icons/Iokharic.svg (100%) rename {client => src}/icons/Rellanic.svg (100%) rename {client => src}/icons/book-back-cover.svg (100%) rename {client => src}/icons/book-front-cover.svg (100%) rename {client => src}/icons/book-inside-cover.svg (100%) rename {client => src}/icons/book-part-cover.svg (100%) rename {client => src}/icons/customIcons.less (100%) rename {client => src}/icons/facing-spread.svg (100%) rename {client => src}/icons/fit-width.svg (100%) rename {client => src}/icons/flow-spread.svg (100%) rename {client => src}/icons/image-wrap-left.svg (100%) rename {client => src}/icons/image-wrap-right.svg (100%) rename {client => src}/icons/mask-center.svg (100%) rename {client => src}/icons/mask-corner.svg (100%) rename {client => src}/icons/mask-edge.svg (100%) rename {client => src}/icons/position-bottom-left.svg (100%) rename {client => src}/icons/position-bottom-right.svg (100%) rename {client => src}/icons/position-bottom.svg (100%) rename {client => src}/icons/position-left.svg (100%) rename {client => src}/icons/position-right.svg (100%) rename {client => src}/icons/position-top-left.svg (100%) rename {client => src}/icons/position-top-right.svg (100%) rename {client => src}/icons/position-top.svg (100%) rename {client => src}/icons/single-spread.svg (100%) rename {client => src}/icons/zoom-to-fit.svg (100%) rename {client => src}/index.html (100%) rename {client => src}/main.jsx (100%) rename {client => src}/template.js (100%) diff --git a/client/admin/admin.jsx b/src/admin/admin.jsx similarity index 100% rename from client/admin/admin.jsx rename to src/admin/admin.jsx diff --git a/client/admin/admin.less b/src/admin/admin.less similarity index 100% rename from client/admin/admin.less rename to src/admin/admin.less diff --git a/client/admin/authorUtils/authorLookup/authorLookup.jsx b/src/admin/authorUtils/authorLookup/authorLookup.jsx similarity index 100% rename from client/admin/authorUtils/authorLookup/authorLookup.jsx rename to src/admin/authorUtils/authorLookup/authorLookup.jsx diff --git a/client/admin/authorUtils/authorLookup/authorLookup.less b/src/admin/authorUtils/authorLookup/authorLookup.less similarity index 100% rename from client/admin/authorUtils/authorLookup/authorLookup.less rename to src/admin/authorUtils/authorLookup/authorLookup.less diff --git a/client/admin/authorUtils/authorUtils.jsx b/src/admin/authorUtils/authorUtils.jsx similarity index 100% rename from client/admin/authorUtils/authorUtils.jsx rename to src/admin/authorUtils/authorUtils.jsx diff --git a/client/admin/brewUtils/brewCleanup/brewCleanup.jsx b/src/admin/brewUtils/brewCleanup/brewCleanup.jsx similarity index 100% rename from client/admin/brewUtils/brewCleanup/brewCleanup.jsx rename to src/admin/brewUtils/brewCleanup/brewCleanup.jsx diff --git a/client/admin/brewUtils/brewCompress/brewCompress.jsx b/src/admin/brewUtils/brewCompress/brewCompress.jsx similarity index 100% rename from client/admin/brewUtils/brewCompress/brewCompress.jsx rename to src/admin/brewUtils/brewCompress/brewCompress.jsx diff --git a/client/admin/brewUtils/brewLookup/brewLookup.jsx b/src/admin/brewUtils/brewLookup/brewLookup.jsx similarity index 100% rename from client/admin/brewUtils/brewLookup/brewLookup.jsx rename to src/admin/brewUtils/brewLookup/brewLookup.jsx diff --git a/client/admin/brewUtils/brewUtils.jsx b/src/admin/brewUtils/brewUtils.jsx similarity index 100% rename from client/admin/brewUtils/brewUtils.jsx rename to src/admin/brewUtils/brewUtils.jsx diff --git a/client/admin/brewUtils/brewUtils.less b/src/admin/brewUtils/brewUtils.less similarity index 100% rename from client/admin/brewUtils/brewUtils.less rename to src/admin/brewUtils/brewUtils.less diff --git a/client/admin/brewUtils/stats/stats.jsx b/src/admin/brewUtils/stats/stats.jsx similarity index 100% rename from client/admin/brewUtils/stats/stats.jsx rename to src/admin/brewUtils/stats/stats.jsx diff --git a/client/admin/lockTools/lockTools.jsx b/src/admin/lockTools/lockTools.jsx similarity index 100% rename from client/admin/lockTools/lockTools.jsx rename to src/admin/lockTools/lockTools.jsx diff --git a/client/admin/lockTools/lockTools.less b/src/admin/lockTools/lockTools.less similarity index 100% rename from client/admin/lockTools/lockTools.less rename to src/admin/lockTools/lockTools.less diff --git a/client/admin/notificationUtils/notificationAdd/notificationAdd.jsx b/src/admin/notificationUtils/notificationAdd/notificationAdd.jsx similarity index 100% rename from client/admin/notificationUtils/notificationAdd/notificationAdd.jsx rename to src/admin/notificationUtils/notificationAdd/notificationAdd.jsx diff --git a/client/admin/notificationUtils/notificationAdd/notificationAdd.less b/src/admin/notificationUtils/notificationAdd/notificationAdd.less similarity index 100% rename from client/admin/notificationUtils/notificationAdd/notificationAdd.less rename to src/admin/notificationUtils/notificationAdd/notificationAdd.less diff --git a/client/admin/notificationUtils/notificationLookup/notificationLookup.jsx b/src/admin/notificationUtils/notificationLookup/notificationLookup.jsx similarity index 100% rename from client/admin/notificationUtils/notificationLookup/notificationLookup.jsx rename to src/admin/notificationUtils/notificationLookup/notificationLookup.jsx diff --git a/client/admin/notificationUtils/notificationLookup/notificationLookup.less b/src/admin/notificationUtils/notificationLookup/notificationLookup.less similarity index 100% rename from client/admin/notificationUtils/notificationLookup/notificationLookup.less rename to src/admin/notificationUtils/notificationLookup/notificationLookup.less diff --git a/client/admin/notificationUtils/notificationUtils.jsx b/src/admin/notificationUtils/notificationUtils.jsx similarity index 100% rename from client/admin/notificationUtils/notificationUtils.jsx rename to src/admin/notificationUtils/notificationUtils.jsx diff --git a/client/components/Anchored.jsx b/src/components/Anchored.jsx similarity index 100% rename from client/components/Anchored.jsx rename to src/components/Anchored.jsx diff --git a/client/components/Anchored.less b/src/components/Anchored.less similarity index 100% rename from client/components/Anchored.less rename to src/components/Anchored.less diff --git a/client/components/codeEditor/autocompleteEmoji.js b/src/components/codeEditor/autocompleteEmoji.js similarity index 100% rename from client/components/codeEditor/autocompleteEmoji.js rename to src/components/codeEditor/autocompleteEmoji.js diff --git a/client/components/codeEditor/close-tag.js b/src/components/codeEditor/close-tag.js similarity index 100% rename from client/components/codeEditor/close-tag.js rename to src/components/codeEditor/close-tag.js diff --git a/client/components/codeEditor/codeEditor.jsx b/src/components/codeEditor/codeEditor.jsx similarity index 100% rename from client/components/codeEditor/codeEditor.jsx rename to src/components/codeEditor/codeEditor.jsx diff --git a/client/components/codeEditor/codeEditor.less b/src/components/codeEditor/codeEditor.less similarity index 100% rename from client/components/codeEditor/codeEditor.less rename to src/components/codeEditor/codeEditor.less diff --git a/client/components/codeEditor/fold-css.js b/src/components/codeEditor/fold-css.js similarity index 100% rename from client/components/codeEditor/fold-css.js rename to src/components/codeEditor/fold-css.js diff --git a/client/components/codeEditor/fold-pages.js b/src/components/codeEditor/fold-pages.js similarity index 100% rename from client/components/codeEditor/fold-pages.js rename to src/components/codeEditor/fold-pages.js diff --git a/client/components/combobox.jsx b/src/components/combobox.jsx similarity index 100% rename from client/components/combobox.jsx rename to src/components/combobox.jsx diff --git a/client/components/combobox.less b/src/components/combobox.less similarity index 100% rename from client/components/combobox.less rename to src/components/combobox.less diff --git a/client/components/dialog.jsx b/src/components/dialog.jsx similarity index 100% rename from client/components/dialog.jsx rename to src/components/dialog.jsx diff --git a/client/components/renderWarnings/renderWarnings.jsx b/src/components/renderWarnings/renderWarnings.jsx similarity index 100% rename from client/components/renderWarnings/renderWarnings.jsx rename to src/components/renderWarnings/renderWarnings.jsx diff --git a/client/components/renderWarnings/renderWarnings.less b/src/components/renderWarnings/renderWarnings.less similarity index 100% rename from client/components/renderWarnings/renderWarnings.less rename to src/components/renderWarnings/renderWarnings.less diff --git a/client/components/splitPane/splitPane.jsx b/src/components/splitPane/splitPane.jsx similarity index 100% rename from client/components/splitPane/splitPane.jsx rename to src/components/splitPane/splitPane.jsx diff --git a/client/components/splitPane/splitPane.less b/src/components/splitPane/splitPane.less similarity index 100% rename from client/components/splitPane/splitPane.less rename to src/components/splitPane/splitPane.less diff --git a/client/components/svg/cauldron.svg.jsx b/src/components/svg/cauldron.svg.jsx similarity index 100% rename from client/components/svg/cauldron.svg.jsx rename to src/components/svg/cauldron.svg.jsx diff --git a/client/components/svg/naturalcrit-d20.svg.jsx b/src/components/svg/naturalcrit-d20.svg.jsx similarity index 100% rename from client/components/svg/naturalcrit-d20.svg.jsx rename to src/components/svg/naturalcrit-d20.svg.jsx diff --git a/client/entry-client-admin.jsx b/src/entry-client-admin.jsx similarity index 100% rename from client/entry-client-admin.jsx rename to src/entry-client-admin.jsx diff --git a/client/entry-client-homebrew.jsx b/src/entry-client-homebrew.jsx similarity index 100% rename from client/entry-client-homebrew.jsx rename to src/entry-client-homebrew.jsx diff --git a/client/entry-server-admin.jsx b/src/entry-server-admin.jsx similarity index 100% rename from client/entry-server-admin.jsx rename to src/entry-server-admin.jsx diff --git a/client/entry-server-homebrew.jsx b/src/entry-server-homebrew.jsx similarity index 100% rename from client/entry-server-homebrew.jsx rename to src/entry-server-homebrew.jsx diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/src/homebrew/brewRenderer/brewRenderer.jsx similarity index 100% rename from client/homebrew/brewRenderer/brewRenderer.jsx rename to src/homebrew/brewRenderer/brewRenderer.jsx diff --git a/client/homebrew/brewRenderer/brewRenderer.less b/src/homebrew/brewRenderer/brewRenderer.less similarity index 100% rename from client/homebrew/brewRenderer/brewRenderer.less rename to src/homebrew/brewRenderer/brewRenderer.less diff --git a/client/homebrew/brewRenderer/errorBar/errorBar.jsx b/src/homebrew/brewRenderer/errorBar/errorBar.jsx similarity index 100% rename from client/homebrew/brewRenderer/errorBar/errorBar.jsx rename to src/homebrew/brewRenderer/errorBar/errorBar.jsx diff --git a/client/homebrew/brewRenderer/errorBar/errorBar.less b/src/homebrew/brewRenderer/errorBar/errorBar.less similarity index 100% rename from client/homebrew/brewRenderer/errorBar/errorBar.less rename to src/homebrew/brewRenderer/errorBar/errorBar.less diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.jsx b/src/homebrew/brewRenderer/headerNav/headerNav.jsx similarity index 100% rename from client/homebrew/brewRenderer/headerNav/headerNav.jsx rename to src/homebrew/brewRenderer/headerNav/headerNav.jsx diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.less b/src/homebrew/brewRenderer/headerNav/headerNav.less similarity index 100% rename from client/homebrew/brewRenderer/headerNav/headerNav.less rename to src/homebrew/brewRenderer/headerNav/headerNav.less diff --git a/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx b/src/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx similarity index 100% rename from client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx rename to src/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx diff --git a/client/homebrew/brewRenderer/notificationPopup/notificationPopup.less b/src/homebrew/brewRenderer/notificationPopup/notificationPopup.less similarity index 100% rename from client/homebrew/brewRenderer/notificationPopup/notificationPopup.less rename to src/homebrew/brewRenderer/notificationPopup/notificationPopup.less diff --git a/client/homebrew/brewRenderer/safeHTML.js b/src/homebrew/brewRenderer/safeHTML.js similarity index 100% rename from client/homebrew/brewRenderer/safeHTML.js rename to src/homebrew/brewRenderer/safeHTML.js diff --git a/client/homebrew/brewRenderer/toolBar/toolBar.jsx b/src/homebrew/brewRenderer/toolBar/toolBar.jsx similarity index 100% rename from client/homebrew/brewRenderer/toolBar/toolBar.jsx rename to src/homebrew/brewRenderer/toolBar/toolBar.jsx diff --git a/client/homebrew/brewRenderer/toolBar/toolBar.less b/src/homebrew/brewRenderer/toolBar/toolBar.less similarity index 100% rename from client/homebrew/brewRenderer/toolBar/toolBar.less rename to src/homebrew/brewRenderer/toolBar/toolBar.less diff --git a/client/homebrew/editor/editor.jsx b/src/homebrew/editor/editor.jsx similarity index 100% rename from client/homebrew/editor/editor.jsx rename to src/homebrew/editor/editor.jsx diff --git a/client/homebrew/editor/editor.less b/src/homebrew/editor/editor.less similarity index 100% rename from client/homebrew/editor/editor.less rename to src/homebrew/editor/editor.less diff --git a/client/homebrew/editor/metadataEditor/metadataEditor.jsx b/src/homebrew/editor/metadataEditor/metadataEditor.jsx similarity index 100% rename from client/homebrew/editor/metadataEditor/metadataEditor.jsx rename to src/homebrew/editor/metadataEditor/metadataEditor.jsx diff --git a/client/homebrew/editor/metadataEditor/metadataEditor.less b/src/homebrew/editor/metadataEditor/metadataEditor.less similarity index 100% rename from client/homebrew/editor/metadataEditor/metadataEditor.less rename to src/homebrew/editor/metadataEditor/metadataEditor.less diff --git a/client/homebrew/editor/metadataEditor/validations.js b/src/homebrew/editor/metadataEditor/validations.js similarity index 100% rename from client/homebrew/editor/metadataEditor/validations.js rename to src/homebrew/editor/metadataEditor/validations.js diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/src/homebrew/editor/snippetbar/snippetbar.jsx similarity index 100% rename from client/homebrew/editor/snippetbar/snippetbar.jsx rename to src/homebrew/editor/snippetbar/snippetbar.jsx diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/src/homebrew/editor/snippetbar/snippetbar.less similarity index 100% rename from client/homebrew/editor/snippetbar/snippetbar.less rename to src/homebrew/editor/snippetbar/snippetbar.less diff --git a/client/homebrew/editor/tagInput/tagInput.jsx b/src/homebrew/editor/tagInput/tagInput.jsx similarity index 100% rename from client/homebrew/editor/tagInput/tagInput.jsx rename to src/homebrew/editor/tagInput/tagInput.jsx diff --git a/client/homebrew/editor/tagInput/tagInput.less b/src/homebrew/editor/tagInput/tagInput.less similarity index 100% rename from client/homebrew/editor/tagInput/tagInput.less rename to src/homebrew/editor/tagInput/tagInput.less diff --git a/client/homebrew/favicon.ico b/src/homebrew/favicon.ico similarity index 100% rename from client/homebrew/favicon.ico rename to src/homebrew/favicon.ico diff --git a/client/homebrew/googleDrive.svg b/src/homebrew/googleDrive.svg similarity index 100% rename from client/homebrew/googleDrive.svg rename to src/homebrew/googleDrive.svg diff --git a/client/homebrew/homebrew.jsx b/src/homebrew/homebrew.jsx similarity index 100% rename from client/homebrew/homebrew.jsx rename to src/homebrew/homebrew.jsx diff --git a/client/homebrew/homebrew.less b/src/homebrew/homebrew.less similarity index 100% rename from client/homebrew/homebrew.less rename to src/homebrew/homebrew.less diff --git a/client/homebrew/navbar/account.navitem.jsx b/src/homebrew/navbar/account.navitem.jsx similarity index 100% rename from client/homebrew/navbar/account.navitem.jsx rename to src/homebrew/navbar/account.navitem.jsx diff --git a/client/homebrew/navbar/error-navitem.jsx b/src/homebrew/navbar/error-navitem.jsx similarity index 100% rename from client/homebrew/navbar/error-navitem.jsx rename to src/homebrew/navbar/error-navitem.jsx diff --git a/client/homebrew/navbar/error-navitem.less b/src/homebrew/navbar/error-navitem.less similarity index 100% rename from client/homebrew/navbar/error-navitem.less rename to src/homebrew/navbar/error-navitem.less diff --git a/client/homebrew/navbar/help.navitem.jsx b/src/homebrew/navbar/help.navitem.jsx similarity index 100% rename from client/homebrew/navbar/help.navitem.jsx rename to src/homebrew/navbar/help.navitem.jsx diff --git a/client/homebrew/navbar/metadata.navitem.jsx b/src/homebrew/navbar/metadata.navitem.jsx similarity index 100% rename from client/homebrew/navbar/metadata.navitem.jsx rename to src/homebrew/navbar/metadata.navitem.jsx diff --git a/client/homebrew/navbar/nav.jsx b/src/homebrew/navbar/nav.jsx similarity index 100% rename from client/homebrew/navbar/nav.jsx rename to src/homebrew/navbar/nav.jsx diff --git a/client/homebrew/navbar/navbar.jsx b/src/homebrew/navbar/navbar.jsx similarity index 100% rename from client/homebrew/navbar/navbar.jsx rename to src/homebrew/navbar/navbar.jsx diff --git a/client/homebrew/navbar/navbar.less b/src/homebrew/navbar/navbar.less similarity index 100% rename from client/homebrew/navbar/navbar.less rename to src/homebrew/navbar/navbar.less diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/src/homebrew/navbar/newbrew.navitem.jsx similarity index 100% rename from client/homebrew/navbar/newbrew.navitem.jsx rename to src/homebrew/navbar/newbrew.navitem.jsx diff --git a/client/homebrew/navbar/patreon.navitem.jsx b/src/homebrew/navbar/patreon.navitem.jsx similarity index 100% rename from client/homebrew/navbar/patreon.navitem.jsx rename to src/homebrew/navbar/patreon.navitem.jsx diff --git a/client/homebrew/navbar/print.navitem.jsx b/src/homebrew/navbar/print.navitem.jsx similarity index 100% rename from client/homebrew/navbar/print.navitem.jsx rename to src/homebrew/navbar/print.navitem.jsx diff --git a/client/homebrew/navbar/recent.navitem.jsx b/src/homebrew/navbar/recent.navitem.jsx similarity index 100% rename from client/homebrew/navbar/recent.navitem.jsx rename to src/homebrew/navbar/recent.navitem.jsx diff --git a/client/homebrew/navbar/share.navitem.jsx b/src/homebrew/navbar/share.navitem.jsx similarity index 100% rename from client/homebrew/navbar/share.navitem.jsx rename to src/homebrew/navbar/share.navitem.jsx diff --git a/client/homebrew/navbar/vault.navitem.jsx b/src/homebrew/navbar/vault.navitem.jsx similarity index 100% rename from client/homebrew/navbar/vault.navitem.jsx rename to src/homebrew/navbar/vault.navitem.jsx diff --git a/client/homebrew/pages/accountPage/accountPage.jsx b/src/homebrew/pages/accountPage/accountPage.jsx similarity index 100% rename from client/homebrew/pages/accountPage/accountPage.jsx rename to src/homebrew/pages/accountPage/accountPage.jsx diff --git a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx b/src/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx similarity index 100% rename from client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx rename to src/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx diff --git a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.less b/src/homebrew/pages/basePages/listPage/brewItem/brewItem.less similarity index 100% rename from client/homebrew/pages/basePages/listPage/brewItem/brewItem.less rename to src/homebrew/pages/basePages/listPage/brewItem/brewItem.less diff --git a/client/homebrew/pages/basePages/listPage/listPage.jsx b/src/homebrew/pages/basePages/listPage/listPage.jsx similarity index 100% rename from client/homebrew/pages/basePages/listPage/listPage.jsx rename to src/homebrew/pages/basePages/listPage/listPage.jsx diff --git a/client/homebrew/pages/basePages/listPage/listPage.less b/src/homebrew/pages/basePages/listPage/listPage.less similarity index 100% rename from client/homebrew/pages/basePages/listPage/listPage.less rename to src/homebrew/pages/basePages/listPage/listPage.less diff --git a/client/homebrew/pages/basePages/uiPage/uiPage.jsx b/src/homebrew/pages/basePages/uiPage/uiPage.jsx similarity index 100% rename from client/homebrew/pages/basePages/uiPage/uiPage.jsx rename to src/homebrew/pages/basePages/uiPage/uiPage.jsx diff --git a/client/homebrew/pages/basePages/uiPage/uiPage.less b/src/homebrew/pages/basePages/uiPage/uiPage.less similarity index 100% rename from client/homebrew/pages/basePages/uiPage/uiPage.less rename to src/homebrew/pages/basePages/uiPage/uiPage.less diff --git a/client/homebrew/pages/editPage/editPage.jsx b/src/homebrew/pages/editPage/editPage.jsx similarity index 100% rename from client/homebrew/pages/editPage/editPage.jsx rename to src/homebrew/pages/editPage/editPage.jsx diff --git a/client/homebrew/pages/editPage/editPage.less b/src/homebrew/pages/editPage/editPage.less similarity index 100% rename from client/homebrew/pages/editPage/editPage.less rename to src/homebrew/pages/editPage/editPage.less diff --git a/client/homebrew/pages/editPage/lockNotification/lockNotification.jsx b/src/homebrew/pages/editPage/lockNotification/lockNotification.jsx similarity index 100% rename from client/homebrew/pages/editPage/lockNotification/lockNotification.jsx rename to src/homebrew/pages/editPage/lockNotification/lockNotification.jsx diff --git a/client/homebrew/pages/editPage/lockNotification/lockNotification.less b/src/homebrew/pages/editPage/lockNotification/lockNotification.less similarity index 100% rename from client/homebrew/pages/editPage/lockNotification/lockNotification.less rename to src/homebrew/pages/editPage/lockNotification/lockNotification.less diff --git a/client/homebrew/pages/errorPage/errorPage.jsx b/src/homebrew/pages/errorPage/errorPage.jsx similarity index 100% rename from client/homebrew/pages/errorPage/errorPage.jsx rename to src/homebrew/pages/errorPage/errorPage.jsx diff --git a/client/homebrew/pages/errorPage/errorPage.less b/src/homebrew/pages/errorPage/errorPage.less similarity index 100% rename from client/homebrew/pages/errorPage/errorPage.less rename to src/homebrew/pages/errorPage/errorPage.less diff --git a/client/homebrew/pages/errorPage/errors/errorIndex.js b/src/homebrew/pages/errorPage/errors/errorIndex.js similarity index 100% rename from client/homebrew/pages/errorPage/errors/errorIndex.js rename to src/homebrew/pages/errorPage/errors/errorIndex.js diff --git a/client/homebrew/pages/homePage/homePage.jsx b/src/homebrew/pages/homePage/homePage.jsx similarity index 100% rename from client/homebrew/pages/homePage/homePage.jsx rename to src/homebrew/pages/homePage/homePage.jsx diff --git a/client/homebrew/pages/homePage/homePage.less b/src/homebrew/pages/homePage/homePage.less similarity index 100% rename from client/homebrew/pages/homePage/homePage.less rename to src/homebrew/pages/homePage/homePage.less diff --git a/client/homebrew/pages/homePage/migrate.md b/src/homebrew/pages/homePage/migrate.md similarity index 100% rename from client/homebrew/pages/homePage/migrate.md rename to src/homebrew/pages/homePage/migrate.md diff --git a/client/homebrew/pages/homePage/welcome_msg.md b/src/homebrew/pages/homePage/welcome_msg.md similarity index 100% rename from client/homebrew/pages/homePage/welcome_msg.md rename to src/homebrew/pages/homePage/welcome_msg.md diff --git a/client/homebrew/pages/homePage/welcome_msg_legacy.md b/src/homebrew/pages/homePage/welcome_msg_legacy.md similarity index 100% rename from client/homebrew/pages/homePage/welcome_msg_legacy.md rename to src/homebrew/pages/homePage/welcome_msg_legacy.md diff --git a/client/homebrew/pages/newPage/newPage.jsx b/src/homebrew/pages/newPage/newPage.jsx similarity index 100% rename from client/homebrew/pages/newPage/newPage.jsx rename to src/homebrew/pages/newPage/newPage.jsx diff --git a/client/homebrew/pages/newPage/newPage.less b/src/homebrew/pages/newPage/newPage.less similarity index 100% rename from client/homebrew/pages/newPage/newPage.less rename to src/homebrew/pages/newPage/newPage.less diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/src/homebrew/pages/sharePage/sharePage.jsx similarity index 100% rename from client/homebrew/pages/sharePage/sharePage.jsx rename to src/homebrew/pages/sharePage/sharePage.jsx diff --git a/client/homebrew/pages/sharePage/sharePage.less b/src/homebrew/pages/sharePage/sharePage.less similarity index 100% rename from client/homebrew/pages/sharePage/sharePage.less rename to src/homebrew/pages/sharePage/sharePage.less diff --git a/client/homebrew/pages/userPage/userPage.jsx b/src/homebrew/pages/userPage/userPage.jsx similarity index 100% rename from client/homebrew/pages/userPage/userPage.jsx rename to src/homebrew/pages/userPage/userPage.jsx diff --git a/client/homebrew/pages/vaultPage/vaultPage.jsx b/src/homebrew/pages/vaultPage/vaultPage.jsx similarity index 100% rename from client/homebrew/pages/vaultPage/vaultPage.jsx rename to src/homebrew/pages/vaultPage/vaultPage.jsx diff --git a/client/homebrew/pages/vaultPage/vaultPage.less b/src/homebrew/pages/vaultPage/vaultPage.less similarity index 100% rename from client/homebrew/pages/vaultPage/vaultPage.less rename to src/homebrew/pages/vaultPage/vaultPage.less diff --git a/client/homebrew/thumbnail.png b/src/homebrew/thumbnail.png similarity index 100% rename from client/homebrew/thumbnail.png rename to src/homebrew/thumbnail.png diff --git a/client/homebrew/thumbnail.svg b/src/homebrew/thumbnail.svg similarity index 100% rename from client/homebrew/thumbnail.svg rename to src/homebrew/thumbnail.svg diff --git a/client/homebrew/utils/customIDBStore.js b/src/homebrew/utils/customIDBStore.js similarity index 100% rename from client/homebrew/utils/customIDBStore.js rename to src/homebrew/utils/customIDBStore.js diff --git a/client/homebrew/utils/request-middleware.js b/src/homebrew/utils/request-middleware.js similarity index 100% rename from client/homebrew/utils/request-middleware.js rename to src/homebrew/utils/request-middleware.js diff --git a/client/homebrew/utils/request-middleware.spec.js b/src/homebrew/utils/request-middleware.spec.js similarity index 100% rename from client/homebrew/utils/request-middleware.spec.js rename to src/homebrew/utils/request-middleware.spec.js diff --git a/client/homebrew/utils/updateLocalStorage/localStorageKeyMap.js b/src/homebrew/utils/updateLocalStorage/localStorageKeyMap.js similarity index 100% rename from client/homebrew/utils/updateLocalStorage/localStorageKeyMap.js rename to src/homebrew/utils/updateLocalStorage/localStorageKeyMap.js diff --git a/client/homebrew/utils/updateLocalStorage/updateLocalStorageKeys.js b/src/homebrew/utils/updateLocalStorage/updateLocalStorageKeys.js similarity index 100% rename from client/homebrew/utils/updateLocalStorage/updateLocalStorageKeys.js rename to src/homebrew/utils/updateLocalStorage/updateLocalStorageKeys.js diff --git a/client/homebrew/utils/versionHistory.js b/src/homebrew/utils/versionHistory.js similarity index 100% rename from client/homebrew/utils/versionHistory.js rename to src/homebrew/utils/versionHistory.js diff --git a/client/icons/Davek.svg b/src/icons/Davek.svg similarity index 100% rename from client/icons/Davek.svg rename to src/icons/Davek.svg diff --git a/client/icons/Iokharic.svg b/src/icons/Iokharic.svg similarity index 100% rename from client/icons/Iokharic.svg rename to src/icons/Iokharic.svg diff --git a/client/icons/Rellanic.svg b/src/icons/Rellanic.svg similarity index 100% rename from client/icons/Rellanic.svg rename to src/icons/Rellanic.svg diff --git a/client/icons/book-back-cover.svg b/src/icons/book-back-cover.svg similarity index 100% rename from client/icons/book-back-cover.svg rename to src/icons/book-back-cover.svg diff --git a/client/icons/book-front-cover.svg b/src/icons/book-front-cover.svg similarity index 100% rename from client/icons/book-front-cover.svg rename to src/icons/book-front-cover.svg diff --git a/client/icons/book-inside-cover.svg b/src/icons/book-inside-cover.svg similarity index 100% rename from client/icons/book-inside-cover.svg rename to src/icons/book-inside-cover.svg diff --git a/client/icons/book-part-cover.svg b/src/icons/book-part-cover.svg similarity index 100% rename from client/icons/book-part-cover.svg rename to src/icons/book-part-cover.svg diff --git a/client/icons/customIcons.less b/src/icons/customIcons.less similarity index 100% rename from client/icons/customIcons.less rename to src/icons/customIcons.less diff --git a/client/icons/facing-spread.svg b/src/icons/facing-spread.svg similarity index 100% rename from client/icons/facing-spread.svg rename to src/icons/facing-spread.svg diff --git a/client/icons/fit-width.svg b/src/icons/fit-width.svg similarity index 100% rename from client/icons/fit-width.svg rename to src/icons/fit-width.svg diff --git a/client/icons/flow-spread.svg b/src/icons/flow-spread.svg similarity index 100% rename from client/icons/flow-spread.svg rename to src/icons/flow-spread.svg diff --git a/client/icons/image-wrap-left.svg b/src/icons/image-wrap-left.svg similarity index 100% rename from client/icons/image-wrap-left.svg rename to src/icons/image-wrap-left.svg diff --git a/client/icons/image-wrap-right.svg b/src/icons/image-wrap-right.svg similarity index 100% rename from client/icons/image-wrap-right.svg rename to src/icons/image-wrap-right.svg diff --git a/client/icons/mask-center.svg b/src/icons/mask-center.svg similarity index 100% rename from client/icons/mask-center.svg rename to src/icons/mask-center.svg diff --git a/client/icons/mask-corner.svg b/src/icons/mask-corner.svg similarity index 100% rename from client/icons/mask-corner.svg rename to src/icons/mask-corner.svg diff --git a/client/icons/mask-edge.svg b/src/icons/mask-edge.svg similarity index 100% rename from client/icons/mask-edge.svg rename to src/icons/mask-edge.svg diff --git a/client/icons/position-bottom-left.svg b/src/icons/position-bottom-left.svg similarity index 100% rename from client/icons/position-bottom-left.svg rename to src/icons/position-bottom-left.svg diff --git a/client/icons/position-bottom-right.svg b/src/icons/position-bottom-right.svg similarity index 100% rename from client/icons/position-bottom-right.svg rename to src/icons/position-bottom-right.svg diff --git a/client/icons/position-bottom.svg b/src/icons/position-bottom.svg similarity index 100% rename from client/icons/position-bottom.svg rename to src/icons/position-bottom.svg diff --git a/client/icons/position-left.svg b/src/icons/position-left.svg similarity index 100% rename from client/icons/position-left.svg rename to src/icons/position-left.svg diff --git a/client/icons/position-right.svg b/src/icons/position-right.svg similarity index 100% rename from client/icons/position-right.svg rename to src/icons/position-right.svg diff --git a/client/icons/position-top-left.svg b/src/icons/position-top-left.svg similarity index 100% rename from client/icons/position-top-left.svg rename to src/icons/position-top-left.svg diff --git a/client/icons/position-top-right.svg b/src/icons/position-top-right.svg similarity index 100% rename from client/icons/position-top-right.svg rename to src/icons/position-top-right.svg diff --git a/client/icons/position-top.svg b/src/icons/position-top.svg similarity index 100% rename from client/icons/position-top.svg rename to src/icons/position-top.svg diff --git a/client/icons/single-spread.svg b/src/icons/single-spread.svg similarity index 100% rename from client/icons/single-spread.svg rename to src/icons/single-spread.svg diff --git a/client/icons/zoom-to-fit.svg b/src/icons/zoom-to-fit.svg similarity index 100% rename from client/icons/zoom-to-fit.svg rename to src/icons/zoom-to-fit.svg diff --git a/client/index.html b/src/index.html similarity index 100% rename from client/index.html rename to src/index.html diff --git a/client/main.jsx b/src/main.jsx similarity index 100% rename from client/main.jsx rename to src/main.jsx diff --git a/client/template.js b/src/template.js similarity index 100% rename from client/template.js rename to src/template.js From 3e76046868135d8b0ed4357a2cd3e5cb044012c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 1 Feb 2026 17:36:53 +0100 Subject: [PATCH 21/76] Revert "renamed client to src" This reverts commit c28736bd01c21ecc93abe6833b951b4656625331. --- {src => client}/admin/admin.jsx | 0 {src => client}/admin/admin.less | 0 .../admin/authorUtils/authorLookup/authorLookup.jsx | 0 .../authorUtils/authorLookup/authorLookup.less | 0 {src => client}/admin/authorUtils/authorUtils.jsx | 0 .../admin/brewUtils/brewCleanup/brewCleanup.jsx | 0 .../admin/brewUtils/brewCompress/brewCompress.jsx | 0 .../admin/brewUtils/brewLookup/brewLookup.jsx | 0 {src => client}/admin/brewUtils/brewUtils.jsx | 0 {src => client}/admin/brewUtils/brewUtils.less | 0 {src => client}/admin/brewUtils/stats/stats.jsx | 0 {src => client}/admin/lockTools/lockTools.jsx | 0 {src => client}/admin/lockTools/lockTools.less | 0 .../notificationAdd/notificationAdd.jsx | 0 .../notificationAdd/notificationAdd.less | 0 .../notificationLookup/notificationLookup.jsx | 0 .../notificationLookup/notificationLookup.less | 0 .../admin/notificationUtils/notificationUtils.jsx | 0 {src => client}/components/Anchored.jsx | 0 {src => client}/components/Anchored.less | 0 .../components/codeEditor/autocompleteEmoji.js | 0 {src => client}/components/codeEditor/close-tag.js | 0 .../components/codeEditor/codeEditor.jsx | 0 .../components/codeEditor/codeEditor.less | 0 {src => client}/components/codeEditor/fold-css.js | 0 {src => client}/components/codeEditor/fold-pages.js | 0 {src => client}/components/combobox.jsx | 0 {src => client}/components/combobox.less | 0 {src => client}/components/dialog.jsx | 0 .../components/renderWarnings/renderWarnings.jsx | 0 .../components/renderWarnings/renderWarnings.less | 0 {src => client}/components/splitPane/splitPane.jsx | 0 {src => client}/components/splitPane/splitPane.less | 0 {src => client}/components/svg/cauldron.svg.jsx | 0 .../components/svg/naturalcrit-d20.svg.jsx | 0 {src => client}/entry-client-admin.jsx | 0 {src => client}/entry-client-homebrew.jsx | 0 {src => client}/entry-server-admin.jsx | 0 {src => client}/entry-server-homebrew.jsx | 0 .../homebrew/brewRenderer/brewRenderer.jsx | 0 .../homebrew/brewRenderer/brewRenderer.less | 0 .../homebrew/brewRenderer/errorBar/errorBar.jsx | 0 .../homebrew/brewRenderer/errorBar/errorBar.less | 0 .../homebrew/brewRenderer/headerNav/headerNav.jsx | 0 .../homebrew/brewRenderer/headerNav/headerNav.less | 0 .../notificationPopup/notificationPopup.jsx | 0 .../notificationPopup/notificationPopup.less | 0 {src => client}/homebrew/brewRenderer/safeHTML.js | 0 .../homebrew/brewRenderer/toolBar/toolBar.jsx | 0 .../homebrew/brewRenderer/toolBar/toolBar.less | 0 {src => client}/homebrew/editor/editor.jsx | 0 {src => client}/homebrew/editor/editor.less | 0 .../editor/metadataEditor/metadataEditor.jsx | 0 .../editor/metadataEditor/metadataEditor.less | 0 .../homebrew/editor/metadataEditor/validations.js | 0 .../homebrew/editor/snippetbar/snippetbar.jsx | 0 .../homebrew/editor/snippetbar/snippetbar.less | 0 .../homebrew/editor/tagInput/tagInput.jsx | 0 .../homebrew/editor/tagInput/tagInput.less | 0 {src => client}/homebrew/favicon.ico | Bin {src => client}/homebrew/googleDrive.svg | 0 {src => client}/homebrew/homebrew.jsx | 0 {src => client}/homebrew/homebrew.less | 0 {src => client}/homebrew/navbar/account.navitem.jsx | 0 {src => client}/homebrew/navbar/error-navitem.jsx | 0 {src => client}/homebrew/navbar/error-navitem.less | 0 {src => client}/homebrew/navbar/help.navitem.jsx | 0 .../homebrew/navbar/metadata.navitem.jsx | 0 {src => client}/homebrew/navbar/nav.jsx | 0 {src => client}/homebrew/navbar/navbar.jsx | 0 {src => client}/homebrew/navbar/navbar.less | 0 {src => client}/homebrew/navbar/newbrew.navitem.jsx | 0 {src => client}/homebrew/navbar/patreon.navitem.jsx | 0 {src => client}/homebrew/navbar/print.navitem.jsx | 0 {src => client}/homebrew/navbar/recent.navitem.jsx | 0 {src => client}/homebrew/navbar/share.navitem.jsx | 0 {src => client}/homebrew/navbar/vault.navitem.jsx | 0 .../homebrew/pages/accountPage/accountPage.jsx | 0 .../pages/basePages/listPage/brewItem/brewItem.jsx | 0 .../pages/basePages/listPage/brewItem/brewItem.less | 0 .../homebrew/pages/basePages/listPage/listPage.jsx | 0 .../homebrew/pages/basePages/listPage/listPage.less | 0 .../homebrew/pages/basePages/uiPage/uiPage.jsx | 0 .../homebrew/pages/basePages/uiPage/uiPage.less | 0 .../homebrew/pages/editPage/editPage.jsx | 0 .../homebrew/pages/editPage/editPage.less | 0 .../editPage/lockNotification/lockNotification.jsx | 0 .../editPage/lockNotification/lockNotification.less | 0 .../homebrew/pages/errorPage/errorPage.jsx | 0 .../homebrew/pages/errorPage/errorPage.less | 0 .../homebrew/pages/errorPage/errors/errorIndex.js | 0 .../homebrew/pages/homePage/homePage.jsx | 0 .../homebrew/pages/homePage/homePage.less | 0 {src => client}/homebrew/pages/homePage/migrate.md | 0 .../homebrew/pages/homePage/welcome_msg.md | 0 .../homebrew/pages/homePage/welcome_msg_legacy.md | 0 {src => client}/homebrew/pages/newPage/newPage.jsx | 0 {src => client}/homebrew/pages/newPage/newPage.less | 0 .../homebrew/pages/sharePage/sharePage.jsx | 0 .../homebrew/pages/sharePage/sharePage.less | 0 .../homebrew/pages/userPage/userPage.jsx | 0 .../homebrew/pages/vaultPage/vaultPage.jsx | 0 .../homebrew/pages/vaultPage/vaultPage.less | 0 {src => client}/homebrew/thumbnail.png | Bin {src => client}/homebrew/thumbnail.svg | 0 {src => client}/homebrew/utils/customIDBStore.js | 0 .../homebrew/utils/request-middleware.js | 0 .../homebrew/utils/request-middleware.spec.js | 0 .../utils/updateLocalStorage/localStorageKeyMap.js | 0 .../updateLocalStorage/updateLocalStorageKeys.js | 0 {src => client}/homebrew/utils/versionHistory.js | 0 {src => client}/icons/Davek.svg | 0 {src => client}/icons/Iokharic.svg | 0 {src => client}/icons/Rellanic.svg | 0 {src => client}/icons/book-back-cover.svg | 0 {src => client}/icons/book-front-cover.svg | 0 {src => client}/icons/book-inside-cover.svg | 0 {src => client}/icons/book-part-cover.svg | 0 {src => client}/icons/customIcons.less | 0 {src => client}/icons/facing-spread.svg | 0 {src => client}/icons/fit-width.svg | 0 {src => client}/icons/flow-spread.svg | 0 {src => client}/icons/image-wrap-left.svg | 0 {src => client}/icons/image-wrap-right.svg | 0 {src => client}/icons/mask-center.svg | 0 {src => client}/icons/mask-corner.svg | 0 {src => client}/icons/mask-edge.svg | 0 {src => client}/icons/position-bottom-left.svg | 0 {src => client}/icons/position-bottom-right.svg | 0 {src => client}/icons/position-bottom.svg | 0 {src => client}/icons/position-left.svg | 0 {src => client}/icons/position-right.svg | 0 {src => client}/icons/position-top-left.svg | 0 {src => client}/icons/position-top-right.svg | 0 {src => client}/icons/position-top.svg | 0 {src => client}/icons/single-spread.svg | 0 {src => client}/icons/zoom-to-fit.svg | 0 {src => client}/index.html | 0 {src => client}/main.jsx | 0 {src => client}/template.js | 0 140 files changed, 0 insertions(+), 0 deletions(-) rename {src => client}/admin/admin.jsx (100%) rename {src => client}/admin/admin.less (100%) rename {src => client}/admin/authorUtils/authorLookup/authorLookup.jsx (100%) rename {src => client}/admin/authorUtils/authorLookup/authorLookup.less (100%) rename {src => client}/admin/authorUtils/authorUtils.jsx (100%) rename {src => client}/admin/brewUtils/brewCleanup/brewCleanup.jsx (100%) rename {src => client}/admin/brewUtils/brewCompress/brewCompress.jsx (100%) rename {src => client}/admin/brewUtils/brewLookup/brewLookup.jsx (100%) rename {src => client}/admin/brewUtils/brewUtils.jsx (100%) rename {src => client}/admin/brewUtils/brewUtils.less (100%) rename {src => client}/admin/brewUtils/stats/stats.jsx (100%) rename {src => client}/admin/lockTools/lockTools.jsx (100%) rename {src => client}/admin/lockTools/lockTools.less (100%) rename {src => client}/admin/notificationUtils/notificationAdd/notificationAdd.jsx (100%) rename {src => client}/admin/notificationUtils/notificationAdd/notificationAdd.less (100%) rename {src => client}/admin/notificationUtils/notificationLookup/notificationLookup.jsx (100%) rename {src => client}/admin/notificationUtils/notificationLookup/notificationLookup.less (100%) rename {src => client}/admin/notificationUtils/notificationUtils.jsx (100%) rename {src => client}/components/Anchored.jsx (100%) rename {src => client}/components/Anchored.less (100%) rename {src => client}/components/codeEditor/autocompleteEmoji.js (100%) rename {src => client}/components/codeEditor/close-tag.js (100%) rename {src => client}/components/codeEditor/codeEditor.jsx (100%) rename {src => client}/components/codeEditor/codeEditor.less (100%) rename {src => client}/components/codeEditor/fold-css.js (100%) rename {src => client}/components/codeEditor/fold-pages.js (100%) rename {src => client}/components/combobox.jsx (100%) rename {src => client}/components/combobox.less (100%) rename {src => client}/components/dialog.jsx (100%) rename {src => client}/components/renderWarnings/renderWarnings.jsx (100%) rename {src => client}/components/renderWarnings/renderWarnings.less (100%) rename {src => client}/components/splitPane/splitPane.jsx (100%) rename {src => client}/components/splitPane/splitPane.less (100%) rename {src => client}/components/svg/cauldron.svg.jsx (100%) rename {src => client}/components/svg/naturalcrit-d20.svg.jsx (100%) rename {src => client}/entry-client-admin.jsx (100%) rename {src => client}/entry-client-homebrew.jsx (100%) rename {src => client}/entry-server-admin.jsx (100%) rename {src => client}/entry-server-homebrew.jsx (100%) rename {src => client}/homebrew/brewRenderer/brewRenderer.jsx (100%) rename {src => client}/homebrew/brewRenderer/brewRenderer.less (100%) rename {src => client}/homebrew/brewRenderer/errorBar/errorBar.jsx (100%) rename {src => client}/homebrew/brewRenderer/errorBar/errorBar.less (100%) rename {src => client}/homebrew/brewRenderer/headerNav/headerNav.jsx (100%) rename {src => client}/homebrew/brewRenderer/headerNav/headerNav.less (100%) rename {src => client}/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx (100%) rename {src => client}/homebrew/brewRenderer/notificationPopup/notificationPopup.less (100%) rename {src => client}/homebrew/brewRenderer/safeHTML.js (100%) rename {src => client}/homebrew/brewRenderer/toolBar/toolBar.jsx (100%) rename {src => client}/homebrew/brewRenderer/toolBar/toolBar.less (100%) rename {src => client}/homebrew/editor/editor.jsx (100%) rename {src => client}/homebrew/editor/editor.less (100%) rename {src => client}/homebrew/editor/metadataEditor/metadataEditor.jsx (100%) rename {src => client}/homebrew/editor/metadataEditor/metadataEditor.less (100%) rename {src => client}/homebrew/editor/metadataEditor/validations.js (100%) rename {src => client}/homebrew/editor/snippetbar/snippetbar.jsx (100%) rename {src => client}/homebrew/editor/snippetbar/snippetbar.less (100%) rename {src => client}/homebrew/editor/tagInput/tagInput.jsx (100%) rename {src => client}/homebrew/editor/tagInput/tagInput.less (100%) rename {src => client}/homebrew/favicon.ico (100%) rename {src => client}/homebrew/googleDrive.svg (100%) rename {src => client}/homebrew/homebrew.jsx (100%) rename {src => client}/homebrew/homebrew.less (100%) rename {src => client}/homebrew/navbar/account.navitem.jsx (100%) rename {src => client}/homebrew/navbar/error-navitem.jsx (100%) rename {src => client}/homebrew/navbar/error-navitem.less (100%) rename {src => client}/homebrew/navbar/help.navitem.jsx (100%) rename {src => client}/homebrew/navbar/metadata.navitem.jsx (100%) rename {src => client}/homebrew/navbar/nav.jsx (100%) rename {src => client}/homebrew/navbar/navbar.jsx (100%) rename {src => client}/homebrew/navbar/navbar.less (100%) rename {src => client}/homebrew/navbar/newbrew.navitem.jsx (100%) rename {src => client}/homebrew/navbar/patreon.navitem.jsx (100%) rename {src => client}/homebrew/navbar/print.navitem.jsx (100%) rename {src => client}/homebrew/navbar/recent.navitem.jsx (100%) rename {src => client}/homebrew/navbar/share.navitem.jsx (100%) rename {src => client}/homebrew/navbar/vault.navitem.jsx (100%) rename {src => client}/homebrew/pages/accountPage/accountPage.jsx (100%) rename {src => client}/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx (100%) rename {src => client}/homebrew/pages/basePages/listPage/brewItem/brewItem.less (100%) rename {src => client}/homebrew/pages/basePages/listPage/listPage.jsx (100%) rename {src => client}/homebrew/pages/basePages/listPage/listPage.less (100%) rename {src => client}/homebrew/pages/basePages/uiPage/uiPage.jsx (100%) rename {src => client}/homebrew/pages/basePages/uiPage/uiPage.less (100%) rename {src => client}/homebrew/pages/editPage/editPage.jsx (100%) rename {src => client}/homebrew/pages/editPage/editPage.less (100%) rename {src => client}/homebrew/pages/editPage/lockNotification/lockNotification.jsx (100%) rename {src => client}/homebrew/pages/editPage/lockNotification/lockNotification.less (100%) rename {src => client}/homebrew/pages/errorPage/errorPage.jsx (100%) rename {src => client}/homebrew/pages/errorPage/errorPage.less (100%) rename {src => client}/homebrew/pages/errorPage/errors/errorIndex.js (100%) rename {src => client}/homebrew/pages/homePage/homePage.jsx (100%) rename {src => client}/homebrew/pages/homePage/homePage.less (100%) rename {src => client}/homebrew/pages/homePage/migrate.md (100%) rename {src => client}/homebrew/pages/homePage/welcome_msg.md (100%) rename {src => client}/homebrew/pages/homePage/welcome_msg_legacy.md (100%) rename {src => client}/homebrew/pages/newPage/newPage.jsx (100%) rename {src => client}/homebrew/pages/newPage/newPage.less (100%) rename {src => client}/homebrew/pages/sharePage/sharePage.jsx (100%) rename {src => client}/homebrew/pages/sharePage/sharePage.less (100%) rename {src => client}/homebrew/pages/userPage/userPage.jsx (100%) rename {src => client}/homebrew/pages/vaultPage/vaultPage.jsx (100%) rename {src => client}/homebrew/pages/vaultPage/vaultPage.less (100%) rename {src => client}/homebrew/thumbnail.png (100%) rename {src => client}/homebrew/thumbnail.svg (100%) rename {src => client}/homebrew/utils/customIDBStore.js (100%) rename {src => client}/homebrew/utils/request-middleware.js (100%) rename {src => client}/homebrew/utils/request-middleware.spec.js (100%) rename {src => client}/homebrew/utils/updateLocalStorage/localStorageKeyMap.js (100%) rename {src => client}/homebrew/utils/updateLocalStorage/updateLocalStorageKeys.js (100%) rename {src => client}/homebrew/utils/versionHistory.js (100%) rename {src => client}/icons/Davek.svg (100%) rename {src => client}/icons/Iokharic.svg (100%) rename {src => client}/icons/Rellanic.svg (100%) rename {src => client}/icons/book-back-cover.svg (100%) rename {src => client}/icons/book-front-cover.svg (100%) rename {src => client}/icons/book-inside-cover.svg (100%) rename {src => client}/icons/book-part-cover.svg (100%) rename {src => client}/icons/customIcons.less (100%) rename {src => client}/icons/facing-spread.svg (100%) rename {src => client}/icons/fit-width.svg (100%) rename {src => client}/icons/flow-spread.svg (100%) rename {src => client}/icons/image-wrap-left.svg (100%) rename {src => client}/icons/image-wrap-right.svg (100%) rename {src => client}/icons/mask-center.svg (100%) rename {src => client}/icons/mask-corner.svg (100%) rename {src => client}/icons/mask-edge.svg (100%) rename {src => client}/icons/position-bottom-left.svg (100%) rename {src => client}/icons/position-bottom-right.svg (100%) rename {src => client}/icons/position-bottom.svg (100%) rename {src => client}/icons/position-left.svg (100%) rename {src => client}/icons/position-right.svg (100%) rename {src => client}/icons/position-top-left.svg (100%) rename {src => client}/icons/position-top-right.svg (100%) rename {src => client}/icons/position-top.svg (100%) rename {src => client}/icons/single-spread.svg (100%) rename {src => client}/icons/zoom-to-fit.svg (100%) rename {src => client}/index.html (100%) rename {src => client}/main.jsx (100%) rename {src => client}/template.js (100%) diff --git a/src/admin/admin.jsx b/client/admin/admin.jsx similarity index 100% rename from src/admin/admin.jsx rename to client/admin/admin.jsx diff --git a/src/admin/admin.less b/client/admin/admin.less similarity index 100% rename from src/admin/admin.less rename to client/admin/admin.less diff --git a/src/admin/authorUtils/authorLookup/authorLookup.jsx b/client/admin/authorUtils/authorLookup/authorLookup.jsx similarity index 100% rename from src/admin/authorUtils/authorLookup/authorLookup.jsx rename to client/admin/authorUtils/authorLookup/authorLookup.jsx diff --git a/src/admin/authorUtils/authorLookup/authorLookup.less b/client/admin/authorUtils/authorLookup/authorLookup.less similarity index 100% rename from src/admin/authorUtils/authorLookup/authorLookup.less rename to client/admin/authorUtils/authorLookup/authorLookup.less diff --git a/src/admin/authorUtils/authorUtils.jsx b/client/admin/authorUtils/authorUtils.jsx similarity index 100% rename from src/admin/authorUtils/authorUtils.jsx rename to client/admin/authorUtils/authorUtils.jsx diff --git a/src/admin/brewUtils/brewCleanup/brewCleanup.jsx b/client/admin/brewUtils/brewCleanup/brewCleanup.jsx similarity index 100% rename from src/admin/brewUtils/brewCleanup/brewCleanup.jsx rename to client/admin/brewUtils/brewCleanup/brewCleanup.jsx diff --git a/src/admin/brewUtils/brewCompress/brewCompress.jsx b/client/admin/brewUtils/brewCompress/brewCompress.jsx similarity index 100% rename from src/admin/brewUtils/brewCompress/brewCompress.jsx rename to client/admin/brewUtils/brewCompress/brewCompress.jsx diff --git a/src/admin/brewUtils/brewLookup/brewLookup.jsx b/client/admin/brewUtils/brewLookup/brewLookup.jsx similarity index 100% rename from src/admin/brewUtils/brewLookup/brewLookup.jsx rename to client/admin/brewUtils/brewLookup/brewLookup.jsx diff --git a/src/admin/brewUtils/brewUtils.jsx b/client/admin/brewUtils/brewUtils.jsx similarity index 100% rename from src/admin/brewUtils/brewUtils.jsx rename to client/admin/brewUtils/brewUtils.jsx diff --git a/src/admin/brewUtils/brewUtils.less b/client/admin/brewUtils/brewUtils.less similarity index 100% rename from src/admin/brewUtils/brewUtils.less rename to client/admin/brewUtils/brewUtils.less diff --git a/src/admin/brewUtils/stats/stats.jsx b/client/admin/brewUtils/stats/stats.jsx similarity index 100% rename from src/admin/brewUtils/stats/stats.jsx rename to client/admin/brewUtils/stats/stats.jsx diff --git a/src/admin/lockTools/lockTools.jsx b/client/admin/lockTools/lockTools.jsx similarity index 100% rename from src/admin/lockTools/lockTools.jsx rename to client/admin/lockTools/lockTools.jsx diff --git a/src/admin/lockTools/lockTools.less b/client/admin/lockTools/lockTools.less similarity index 100% rename from src/admin/lockTools/lockTools.less rename to client/admin/lockTools/lockTools.less diff --git a/src/admin/notificationUtils/notificationAdd/notificationAdd.jsx b/client/admin/notificationUtils/notificationAdd/notificationAdd.jsx similarity index 100% rename from src/admin/notificationUtils/notificationAdd/notificationAdd.jsx rename to client/admin/notificationUtils/notificationAdd/notificationAdd.jsx diff --git a/src/admin/notificationUtils/notificationAdd/notificationAdd.less b/client/admin/notificationUtils/notificationAdd/notificationAdd.less similarity index 100% rename from src/admin/notificationUtils/notificationAdd/notificationAdd.less rename to client/admin/notificationUtils/notificationAdd/notificationAdd.less diff --git a/src/admin/notificationUtils/notificationLookup/notificationLookup.jsx b/client/admin/notificationUtils/notificationLookup/notificationLookup.jsx similarity index 100% rename from src/admin/notificationUtils/notificationLookup/notificationLookup.jsx rename to client/admin/notificationUtils/notificationLookup/notificationLookup.jsx diff --git a/src/admin/notificationUtils/notificationLookup/notificationLookup.less b/client/admin/notificationUtils/notificationLookup/notificationLookup.less similarity index 100% rename from src/admin/notificationUtils/notificationLookup/notificationLookup.less rename to client/admin/notificationUtils/notificationLookup/notificationLookup.less diff --git a/src/admin/notificationUtils/notificationUtils.jsx b/client/admin/notificationUtils/notificationUtils.jsx similarity index 100% rename from src/admin/notificationUtils/notificationUtils.jsx rename to client/admin/notificationUtils/notificationUtils.jsx diff --git a/src/components/Anchored.jsx b/client/components/Anchored.jsx similarity index 100% rename from src/components/Anchored.jsx rename to client/components/Anchored.jsx diff --git a/src/components/Anchored.less b/client/components/Anchored.less similarity index 100% rename from src/components/Anchored.less rename to client/components/Anchored.less diff --git a/src/components/codeEditor/autocompleteEmoji.js b/client/components/codeEditor/autocompleteEmoji.js similarity index 100% rename from src/components/codeEditor/autocompleteEmoji.js rename to client/components/codeEditor/autocompleteEmoji.js diff --git a/src/components/codeEditor/close-tag.js b/client/components/codeEditor/close-tag.js similarity index 100% rename from src/components/codeEditor/close-tag.js rename to client/components/codeEditor/close-tag.js diff --git a/src/components/codeEditor/codeEditor.jsx b/client/components/codeEditor/codeEditor.jsx similarity index 100% rename from src/components/codeEditor/codeEditor.jsx rename to client/components/codeEditor/codeEditor.jsx diff --git a/src/components/codeEditor/codeEditor.less b/client/components/codeEditor/codeEditor.less similarity index 100% rename from src/components/codeEditor/codeEditor.less rename to client/components/codeEditor/codeEditor.less diff --git a/src/components/codeEditor/fold-css.js b/client/components/codeEditor/fold-css.js similarity index 100% rename from src/components/codeEditor/fold-css.js rename to client/components/codeEditor/fold-css.js diff --git a/src/components/codeEditor/fold-pages.js b/client/components/codeEditor/fold-pages.js similarity index 100% rename from src/components/codeEditor/fold-pages.js rename to client/components/codeEditor/fold-pages.js diff --git a/src/components/combobox.jsx b/client/components/combobox.jsx similarity index 100% rename from src/components/combobox.jsx rename to client/components/combobox.jsx diff --git a/src/components/combobox.less b/client/components/combobox.less similarity index 100% rename from src/components/combobox.less rename to client/components/combobox.less diff --git a/src/components/dialog.jsx b/client/components/dialog.jsx similarity index 100% rename from src/components/dialog.jsx rename to client/components/dialog.jsx diff --git a/src/components/renderWarnings/renderWarnings.jsx b/client/components/renderWarnings/renderWarnings.jsx similarity index 100% rename from src/components/renderWarnings/renderWarnings.jsx rename to client/components/renderWarnings/renderWarnings.jsx diff --git a/src/components/renderWarnings/renderWarnings.less b/client/components/renderWarnings/renderWarnings.less similarity index 100% rename from src/components/renderWarnings/renderWarnings.less rename to client/components/renderWarnings/renderWarnings.less diff --git a/src/components/splitPane/splitPane.jsx b/client/components/splitPane/splitPane.jsx similarity index 100% rename from src/components/splitPane/splitPane.jsx rename to client/components/splitPane/splitPane.jsx diff --git a/src/components/splitPane/splitPane.less b/client/components/splitPane/splitPane.less similarity index 100% rename from src/components/splitPane/splitPane.less rename to client/components/splitPane/splitPane.less diff --git a/src/components/svg/cauldron.svg.jsx b/client/components/svg/cauldron.svg.jsx similarity index 100% rename from src/components/svg/cauldron.svg.jsx rename to client/components/svg/cauldron.svg.jsx diff --git a/src/components/svg/naturalcrit-d20.svg.jsx b/client/components/svg/naturalcrit-d20.svg.jsx similarity index 100% rename from src/components/svg/naturalcrit-d20.svg.jsx rename to client/components/svg/naturalcrit-d20.svg.jsx diff --git a/src/entry-client-admin.jsx b/client/entry-client-admin.jsx similarity index 100% rename from src/entry-client-admin.jsx rename to client/entry-client-admin.jsx diff --git a/src/entry-client-homebrew.jsx b/client/entry-client-homebrew.jsx similarity index 100% rename from src/entry-client-homebrew.jsx rename to client/entry-client-homebrew.jsx diff --git a/src/entry-server-admin.jsx b/client/entry-server-admin.jsx similarity index 100% rename from src/entry-server-admin.jsx rename to client/entry-server-admin.jsx diff --git a/src/entry-server-homebrew.jsx b/client/entry-server-homebrew.jsx similarity index 100% rename from src/entry-server-homebrew.jsx rename to client/entry-server-homebrew.jsx diff --git a/src/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx similarity index 100% rename from src/homebrew/brewRenderer/brewRenderer.jsx rename to client/homebrew/brewRenderer/brewRenderer.jsx diff --git a/src/homebrew/brewRenderer/brewRenderer.less b/client/homebrew/brewRenderer/brewRenderer.less similarity index 100% rename from src/homebrew/brewRenderer/brewRenderer.less rename to client/homebrew/brewRenderer/brewRenderer.less diff --git a/src/homebrew/brewRenderer/errorBar/errorBar.jsx b/client/homebrew/brewRenderer/errorBar/errorBar.jsx similarity index 100% rename from src/homebrew/brewRenderer/errorBar/errorBar.jsx rename to client/homebrew/brewRenderer/errorBar/errorBar.jsx diff --git a/src/homebrew/brewRenderer/errorBar/errorBar.less b/client/homebrew/brewRenderer/errorBar/errorBar.less similarity index 100% rename from src/homebrew/brewRenderer/errorBar/errorBar.less rename to client/homebrew/brewRenderer/errorBar/errorBar.less diff --git a/src/homebrew/brewRenderer/headerNav/headerNav.jsx b/client/homebrew/brewRenderer/headerNav/headerNav.jsx similarity index 100% rename from src/homebrew/brewRenderer/headerNav/headerNav.jsx rename to client/homebrew/brewRenderer/headerNav/headerNav.jsx diff --git a/src/homebrew/brewRenderer/headerNav/headerNav.less b/client/homebrew/brewRenderer/headerNav/headerNav.less similarity index 100% rename from src/homebrew/brewRenderer/headerNav/headerNav.less rename to client/homebrew/brewRenderer/headerNav/headerNav.less diff --git a/src/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx b/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx similarity index 100% rename from src/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx rename to client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx diff --git a/src/homebrew/brewRenderer/notificationPopup/notificationPopup.less b/client/homebrew/brewRenderer/notificationPopup/notificationPopup.less similarity index 100% rename from src/homebrew/brewRenderer/notificationPopup/notificationPopup.less rename to client/homebrew/brewRenderer/notificationPopup/notificationPopup.less diff --git a/src/homebrew/brewRenderer/safeHTML.js b/client/homebrew/brewRenderer/safeHTML.js similarity index 100% rename from src/homebrew/brewRenderer/safeHTML.js rename to client/homebrew/brewRenderer/safeHTML.js diff --git a/src/homebrew/brewRenderer/toolBar/toolBar.jsx b/client/homebrew/brewRenderer/toolBar/toolBar.jsx similarity index 100% rename from src/homebrew/brewRenderer/toolBar/toolBar.jsx rename to client/homebrew/brewRenderer/toolBar/toolBar.jsx diff --git a/src/homebrew/brewRenderer/toolBar/toolBar.less b/client/homebrew/brewRenderer/toolBar/toolBar.less similarity index 100% rename from src/homebrew/brewRenderer/toolBar/toolBar.less rename to client/homebrew/brewRenderer/toolBar/toolBar.less diff --git a/src/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx similarity index 100% rename from src/homebrew/editor/editor.jsx rename to client/homebrew/editor/editor.jsx diff --git a/src/homebrew/editor/editor.less b/client/homebrew/editor/editor.less similarity index 100% rename from src/homebrew/editor/editor.less rename to client/homebrew/editor/editor.less diff --git a/src/homebrew/editor/metadataEditor/metadataEditor.jsx b/client/homebrew/editor/metadataEditor/metadataEditor.jsx similarity index 100% rename from src/homebrew/editor/metadataEditor/metadataEditor.jsx rename to client/homebrew/editor/metadataEditor/metadataEditor.jsx diff --git a/src/homebrew/editor/metadataEditor/metadataEditor.less b/client/homebrew/editor/metadataEditor/metadataEditor.less similarity index 100% rename from src/homebrew/editor/metadataEditor/metadataEditor.less rename to client/homebrew/editor/metadataEditor/metadataEditor.less diff --git a/src/homebrew/editor/metadataEditor/validations.js b/client/homebrew/editor/metadataEditor/validations.js similarity index 100% rename from src/homebrew/editor/metadataEditor/validations.js rename to client/homebrew/editor/metadataEditor/validations.js diff --git a/src/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx similarity index 100% rename from src/homebrew/editor/snippetbar/snippetbar.jsx rename to client/homebrew/editor/snippetbar/snippetbar.jsx diff --git a/src/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less similarity index 100% rename from src/homebrew/editor/snippetbar/snippetbar.less rename to client/homebrew/editor/snippetbar/snippetbar.less diff --git a/src/homebrew/editor/tagInput/tagInput.jsx b/client/homebrew/editor/tagInput/tagInput.jsx similarity index 100% rename from src/homebrew/editor/tagInput/tagInput.jsx rename to client/homebrew/editor/tagInput/tagInput.jsx diff --git a/src/homebrew/editor/tagInput/tagInput.less b/client/homebrew/editor/tagInput/tagInput.less similarity index 100% rename from src/homebrew/editor/tagInput/tagInput.less rename to client/homebrew/editor/tagInput/tagInput.less diff --git a/src/homebrew/favicon.ico b/client/homebrew/favicon.ico similarity index 100% rename from src/homebrew/favicon.ico rename to client/homebrew/favicon.ico diff --git a/src/homebrew/googleDrive.svg b/client/homebrew/googleDrive.svg similarity index 100% rename from src/homebrew/googleDrive.svg rename to client/homebrew/googleDrive.svg diff --git a/src/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx similarity index 100% rename from src/homebrew/homebrew.jsx rename to client/homebrew/homebrew.jsx diff --git a/src/homebrew/homebrew.less b/client/homebrew/homebrew.less similarity index 100% rename from src/homebrew/homebrew.less rename to client/homebrew/homebrew.less diff --git a/src/homebrew/navbar/account.navitem.jsx b/client/homebrew/navbar/account.navitem.jsx similarity index 100% rename from src/homebrew/navbar/account.navitem.jsx rename to client/homebrew/navbar/account.navitem.jsx diff --git a/src/homebrew/navbar/error-navitem.jsx b/client/homebrew/navbar/error-navitem.jsx similarity index 100% rename from src/homebrew/navbar/error-navitem.jsx rename to client/homebrew/navbar/error-navitem.jsx diff --git a/src/homebrew/navbar/error-navitem.less b/client/homebrew/navbar/error-navitem.less similarity index 100% rename from src/homebrew/navbar/error-navitem.less rename to client/homebrew/navbar/error-navitem.less diff --git a/src/homebrew/navbar/help.navitem.jsx b/client/homebrew/navbar/help.navitem.jsx similarity index 100% rename from src/homebrew/navbar/help.navitem.jsx rename to client/homebrew/navbar/help.navitem.jsx diff --git a/src/homebrew/navbar/metadata.navitem.jsx b/client/homebrew/navbar/metadata.navitem.jsx similarity index 100% rename from src/homebrew/navbar/metadata.navitem.jsx rename to client/homebrew/navbar/metadata.navitem.jsx diff --git a/src/homebrew/navbar/nav.jsx b/client/homebrew/navbar/nav.jsx similarity index 100% rename from src/homebrew/navbar/nav.jsx rename to client/homebrew/navbar/nav.jsx diff --git a/src/homebrew/navbar/navbar.jsx b/client/homebrew/navbar/navbar.jsx similarity index 100% rename from src/homebrew/navbar/navbar.jsx rename to client/homebrew/navbar/navbar.jsx diff --git a/src/homebrew/navbar/navbar.less b/client/homebrew/navbar/navbar.less similarity index 100% rename from src/homebrew/navbar/navbar.less rename to client/homebrew/navbar/navbar.less diff --git a/src/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx similarity index 100% rename from src/homebrew/navbar/newbrew.navitem.jsx rename to client/homebrew/navbar/newbrew.navitem.jsx diff --git a/src/homebrew/navbar/patreon.navitem.jsx b/client/homebrew/navbar/patreon.navitem.jsx similarity index 100% rename from src/homebrew/navbar/patreon.navitem.jsx rename to client/homebrew/navbar/patreon.navitem.jsx diff --git a/src/homebrew/navbar/print.navitem.jsx b/client/homebrew/navbar/print.navitem.jsx similarity index 100% rename from src/homebrew/navbar/print.navitem.jsx rename to client/homebrew/navbar/print.navitem.jsx diff --git a/src/homebrew/navbar/recent.navitem.jsx b/client/homebrew/navbar/recent.navitem.jsx similarity index 100% rename from src/homebrew/navbar/recent.navitem.jsx rename to client/homebrew/navbar/recent.navitem.jsx diff --git a/src/homebrew/navbar/share.navitem.jsx b/client/homebrew/navbar/share.navitem.jsx similarity index 100% rename from src/homebrew/navbar/share.navitem.jsx rename to client/homebrew/navbar/share.navitem.jsx diff --git a/src/homebrew/navbar/vault.navitem.jsx b/client/homebrew/navbar/vault.navitem.jsx similarity index 100% rename from src/homebrew/navbar/vault.navitem.jsx rename to client/homebrew/navbar/vault.navitem.jsx diff --git a/src/homebrew/pages/accountPage/accountPage.jsx b/client/homebrew/pages/accountPage/accountPage.jsx similarity index 100% rename from src/homebrew/pages/accountPage/accountPage.jsx rename to client/homebrew/pages/accountPage/accountPage.jsx diff --git a/src/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx similarity index 100% rename from src/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx rename to client/homebrew/pages/basePages/listPage/brewItem/brewItem.jsx diff --git a/src/homebrew/pages/basePages/listPage/brewItem/brewItem.less b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.less similarity index 100% rename from src/homebrew/pages/basePages/listPage/brewItem/brewItem.less rename to client/homebrew/pages/basePages/listPage/brewItem/brewItem.less diff --git a/src/homebrew/pages/basePages/listPage/listPage.jsx b/client/homebrew/pages/basePages/listPage/listPage.jsx similarity index 100% rename from src/homebrew/pages/basePages/listPage/listPage.jsx rename to client/homebrew/pages/basePages/listPage/listPage.jsx diff --git a/src/homebrew/pages/basePages/listPage/listPage.less b/client/homebrew/pages/basePages/listPage/listPage.less similarity index 100% rename from src/homebrew/pages/basePages/listPage/listPage.less rename to client/homebrew/pages/basePages/listPage/listPage.less diff --git a/src/homebrew/pages/basePages/uiPage/uiPage.jsx b/client/homebrew/pages/basePages/uiPage/uiPage.jsx similarity index 100% rename from src/homebrew/pages/basePages/uiPage/uiPage.jsx rename to client/homebrew/pages/basePages/uiPage/uiPage.jsx diff --git a/src/homebrew/pages/basePages/uiPage/uiPage.less b/client/homebrew/pages/basePages/uiPage/uiPage.less similarity index 100% rename from src/homebrew/pages/basePages/uiPage/uiPage.less rename to client/homebrew/pages/basePages/uiPage/uiPage.less diff --git a/src/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx similarity index 100% rename from src/homebrew/pages/editPage/editPage.jsx rename to client/homebrew/pages/editPage/editPage.jsx diff --git a/src/homebrew/pages/editPage/editPage.less b/client/homebrew/pages/editPage/editPage.less similarity index 100% rename from src/homebrew/pages/editPage/editPage.less rename to client/homebrew/pages/editPage/editPage.less diff --git a/src/homebrew/pages/editPage/lockNotification/lockNotification.jsx b/client/homebrew/pages/editPage/lockNotification/lockNotification.jsx similarity index 100% rename from src/homebrew/pages/editPage/lockNotification/lockNotification.jsx rename to client/homebrew/pages/editPage/lockNotification/lockNotification.jsx diff --git a/src/homebrew/pages/editPage/lockNotification/lockNotification.less b/client/homebrew/pages/editPage/lockNotification/lockNotification.less similarity index 100% rename from src/homebrew/pages/editPage/lockNotification/lockNotification.less rename to client/homebrew/pages/editPage/lockNotification/lockNotification.less diff --git a/src/homebrew/pages/errorPage/errorPage.jsx b/client/homebrew/pages/errorPage/errorPage.jsx similarity index 100% rename from src/homebrew/pages/errorPage/errorPage.jsx rename to client/homebrew/pages/errorPage/errorPage.jsx diff --git a/src/homebrew/pages/errorPage/errorPage.less b/client/homebrew/pages/errorPage/errorPage.less similarity index 100% rename from src/homebrew/pages/errorPage/errorPage.less rename to client/homebrew/pages/errorPage/errorPage.less diff --git a/src/homebrew/pages/errorPage/errors/errorIndex.js b/client/homebrew/pages/errorPage/errors/errorIndex.js similarity index 100% rename from src/homebrew/pages/errorPage/errors/errorIndex.js rename to client/homebrew/pages/errorPage/errors/errorIndex.js diff --git a/src/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx similarity index 100% rename from src/homebrew/pages/homePage/homePage.jsx rename to client/homebrew/pages/homePage/homePage.jsx diff --git a/src/homebrew/pages/homePage/homePage.less b/client/homebrew/pages/homePage/homePage.less similarity index 100% rename from src/homebrew/pages/homePage/homePage.less rename to client/homebrew/pages/homePage/homePage.less diff --git a/src/homebrew/pages/homePage/migrate.md b/client/homebrew/pages/homePage/migrate.md similarity index 100% rename from src/homebrew/pages/homePage/migrate.md rename to client/homebrew/pages/homePage/migrate.md diff --git a/src/homebrew/pages/homePage/welcome_msg.md b/client/homebrew/pages/homePage/welcome_msg.md similarity index 100% rename from src/homebrew/pages/homePage/welcome_msg.md rename to client/homebrew/pages/homePage/welcome_msg.md diff --git a/src/homebrew/pages/homePage/welcome_msg_legacy.md b/client/homebrew/pages/homePage/welcome_msg_legacy.md similarity index 100% rename from src/homebrew/pages/homePage/welcome_msg_legacy.md rename to client/homebrew/pages/homePage/welcome_msg_legacy.md diff --git a/src/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx similarity index 100% rename from src/homebrew/pages/newPage/newPage.jsx rename to client/homebrew/pages/newPage/newPage.jsx diff --git a/src/homebrew/pages/newPage/newPage.less b/client/homebrew/pages/newPage/newPage.less similarity index 100% rename from src/homebrew/pages/newPage/newPage.less rename to client/homebrew/pages/newPage/newPage.less diff --git a/src/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx similarity index 100% rename from src/homebrew/pages/sharePage/sharePage.jsx rename to client/homebrew/pages/sharePage/sharePage.jsx diff --git a/src/homebrew/pages/sharePage/sharePage.less b/client/homebrew/pages/sharePage/sharePage.less similarity index 100% rename from src/homebrew/pages/sharePage/sharePage.less rename to client/homebrew/pages/sharePage/sharePage.less diff --git a/src/homebrew/pages/userPage/userPage.jsx b/client/homebrew/pages/userPage/userPage.jsx similarity index 100% rename from src/homebrew/pages/userPage/userPage.jsx rename to client/homebrew/pages/userPage/userPage.jsx diff --git a/src/homebrew/pages/vaultPage/vaultPage.jsx b/client/homebrew/pages/vaultPage/vaultPage.jsx similarity index 100% rename from src/homebrew/pages/vaultPage/vaultPage.jsx rename to client/homebrew/pages/vaultPage/vaultPage.jsx diff --git a/src/homebrew/pages/vaultPage/vaultPage.less b/client/homebrew/pages/vaultPage/vaultPage.less similarity index 100% rename from src/homebrew/pages/vaultPage/vaultPage.less rename to client/homebrew/pages/vaultPage/vaultPage.less diff --git a/src/homebrew/thumbnail.png b/client/homebrew/thumbnail.png similarity index 100% rename from src/homebrew/thumbnail.png rename to client/homebrew/thumbnail.png diff --git a/src/homebrew/thumbnail.svg b/client/homebrew/thumbnail.svg similarity index 100% rename from src/homebrew/thumbnail.svg rename to client/homebrew/thumbnail.svg diff --git a/src/homebrew/utils/customIDBStore.js b/client/homebrew/utils/customIDBStore.js similarity index 100% rename from src/homebrew/utils/customIDBStore.js rename to client/homebrew/utils/customIDBStore.js diff --git a/src/homebrew/utils/request-middleware.js b/client/homebrew/utils/request-middleware.js similarity index 100% rename from src/homebrew/utils/request-middleware.js rename to client/homebrew/utils/request-middleware.js diff --git a/src/homebrew/utils/request-middleware.spec.js b/client/homebrew/utils/request-middleware.spec.js similarity index 100% rename from src/homebrew/utils/request-middleware.spec.js rename to client/homebrew/utils/request-middleware.spec.js diff --git a/src/homebrew/utils/updateLocalStorage/localStorageKeyMap.js b/client/homebrew/utils/updateLocalStorage/localStorageKeyMap.js similarity index 100% rename from src/homebrew/utils/updateLocalStorage/localStorageKeyMap.js rename to client/homebrew/utils/updateLocalStorage/localStorageKeyMap.js diff --git a/src/homebrew/utils/updateLocalStorage/updateLocalStorageKeys.js b/client/homebrew/utils/updateLocalStorage/updateLocalStorageKeys.js similarity index 100% rename from src/homebrew/utils/updateLocalStorage/updateLocalStorageKeys.js rename to client/homebrew/utils/updateLocalStorage/updateLocalStorageKeys.js diff --git a/src/homebrew/utils/versionHistory.js b/client/homebrew/utils/versionHistory.js similarity index 100% rename from src/homebrew/utils/versionHistory.js rename to client/homebrew/utils/versionHistory.js diff --git a/src/icons/Davek.svg b/client/icons/Davek.svg similarity index 100% rename from src/icons/Davek.svg rename to client/icons/Davek.svg diff --git a/src/icons/Iokharic.svg b/client/icons/Iokharic.svg similarity index 100% rename from src/icons/Iokharic.svg rename to client/icons/Iokharic.svg diff --git a/src/icons/Rellanic.svg b/client/icons/Rellanic.svg similarity index 100% rename from src/icons/Rellanic.svg rename to client/icons/Rellanic.svg diff --git a/src/icons/book-back-cover.svg b/client/icons/book-back-cover.svg similarity index 100% rename from src/icons/book-back-cover.svg rename to client/icons/book-back-cover.svg diff --git a/src/icons/book-front-cover.svg b/client/icons/book-front-cover.svg similarity index 100% rename from src/icons/book-front-cover.svg rename to client/icons/book-front-cover.svg diff --git a/src/icons/book-inside-cover.svg b/client/icons/book-inside-cover.svg similarity index 100% rename from src/icons/book-inside-cover.svg rename to client/icons/book-inside-cover.svg diff --git a/src/icons/book-part-cover.svg b/client/icons/book-part-cover.svg similarity index 100% rename from src/icons/book-part-cover.svg rename to client/icons/book-part-cover.svg diff --git a/src/icons/customIcons.less b/client/icons/customIcons.less similarity index 100% rename from src/icons/customIcons.less rename to client/icons/customIcons.less diff --git a/src/icons/facing-spread.svg b/client/icons/facing-spread.svg similarity index 100% rename from src/icons/facing-spread.svg rename to client/icons/facing-spread.svg diff --git a/src/icons/fit-width.svg b/client/icons/fit-width.svg similarity index 100% rename from src/icons/fit-width.svg rename to client/icons/fit-width.svg diff --git a/src/icons/flow-spread.svg b/client/icons/flow-spread.svg similarity index 100% rename from src/icons/flow-spread.svg rename to client/icons/flow-spread.svg diff --git a/src/icons/image-wrap-left.svg b/client/icons/image-wrap-left.svg similarity index 100% rename from src/icons/image-wrap-left.svg rename to client/icons/image-wrap-left.svg diff --git a/src/icons/image-wrap-right.svg b/client/icons/image-wrap-right.svg similarity index 100% rename from src/icons/image-wrap-right.svg rename to client/icons/image-wrap-right.svg diff --git a/src/icons/mask-center.svg b/client/icons/mask-center.svg similarity index 100% rename from src/icons/mask-center.svg rename to client/icons/mask-center.svg diff --git a/src/icons/mask-corner.svg b/client/icons/mask-corner.svg similarity index 100% rename from src/icons/mask-corner.svg rename to client/icons/mask-corner.svg diff --git a/src/icons/mask-edge.svg b/client/icons/mask-edge.svg similarity index 100% rename from src/icons/mask-edge.svg rename to client/icons/mask-edge.svg diff --git a/src/icons/position-bottom-left.svg b/client/icons/position-bottom-left.svg similarity index 100% rename from src/icons/position-bottom-left.svg rename to client/icons/position-bottom-left.svg diff --git a/src/icons/position-bottom-right.svg b/client/icons/position-bottom-right.svg similarity index 100% rename from src/icons/position-bottom-right.svg rename to client/icons/position-bottom-right.svg diff --git a/src/icons/position-bottom.svg b/client/icons/position-bottom.svg similarity index 100% rename from src/icons/position-bottom.svg rename to client/icons/position-bottom.svg diff --git a/src/icons/position-left.svg b/client/icons/position-left.svg similarity index 100% rename from src/icons/position-left.svg rename to client/icons/position-left.svg diff --git a/src/icons/position-right.svg b/client/icons/position-right.svg similarity index 100% rename from src/icons/position-right.svg rename to client/icons/position-right.svg diff --git a/src/icons/position-top-left.svg b/client/icons/position-top-left.svg similarity index 100% rename from src/icons/position-top-left.svg rename to client/icons/position-top-left.svg diff --git a/src/icons/position-top-right.svg b/client/icons/position-top-right.svg similarity index 100% rename from src/icons/position-top-right.svg rename to client/icons/position-top-right.svg diff --git a/src/icons/position-top.svg b/client/icons/position-top.svg similarity index 100% rename from src/icons/position-top.svg rename to client/icons/position-top.svg diff --git a/src/icons/single-spread.svg b/client/icons/single-spread.svg similarity index 100% rename from src/icons/single-spread.svg rename to client/icons/single-spread.svg diff --git a/src/icons/zoom-to-fit.svg b/client/icons/zoom-to-fit.svg similarity index 100% rename from src/icons/zoom-to-fit.svg rename to client/icons/zoom-to-fit.svg diff --git a/src/index.html b/client/index.html similarity index 100% rename from src/index.html rename to client/index.html diff --git a/src/main.jsx b/client/main.jsx similarity index 100% rename from src/main.jsx rename to client/main.jsx diff --git a/src/template.js b/client/template.js similarity index 100% rename from src/template.js rename to client/template.js From 9dc2752ac3f2bdc51ebbb6f340318100bbc34bc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 1 Feb 2026 17:47:37 +0100 Subject: [PATCH 22/76] remove ssr only files --- client/entry-client-admin.jsx | 12 ------------ client/entry-client-homebrew.jsx | 16 ---------------- client/entry-server-admin.jsx | 4 ---- client/entry-server-homebrew.jsx | 4 ---- 4 files changed, 36 deletions(-) delete mode 100644 client/entry-client-admin.jsx delete mode 100644 client/entry-client-homebrew.jsx delete mode 100644 client/entry-server-admin.jsx delete mode 100644 client/entry-server-homebrew.jsx diff --git a/client/entry-client-admin.jsx b/client/entry-client-admin.jsx deleted file mode 100644 index 958e8a007..000000000 --- a/client/entry-client-admin.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react' -import { hydrateRoot } from 'react-dom/client'; -import Admin from './admin.jsx'; - -import './admin/admin.less' - -window.start_app = (props) => { - hydrateRoot( - document.getElementById('reactRoot'), - - ) -} diff --git a/client/entry-client-homebrew.jsx b/client/entry-client-homebrew.jsx deleted file mode 100644 index 0c07e4212..000000000 --- a/client/entry-client-homebrew.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from "react"; -import { hydrateRoot } from "react-dom/client"; -import Homebrew from "./homebrew/homebrew.jsx"; - -// CSS MUST be imported here -import "./homebrew/homebrew.less"; // or wherever your CSS lives - -// Polyfill `global` in the browser -if (typeof global === 'undefined') { - window.global = window; -} - -console.log("entry-client-homebrew"); -const props = window.__SSR_PROPS__ || {}; -console.log("props: ", props); -hydrateRoot(document.getElementById("reactRoot"), ); diff --git a/client/entry-server-admin.jsx b/client/entry-server-admin.jsx deleted file mode 100644 index a3cb697ea..000000000 --- a/client/entry-server-admin.jsx +++ /dev/null @@ -1,4 +0,0 @@ -import { renderToString } from 'react-dom/server'; -import Admin from './admin/admin.jsx'; - -export default (props) => renderToString(); \ No newline at end of file diff --git a/client/entry-server-homebrew.jsx b/client/entry-server-homebrew.jsx deleted file mode 100644 index 86e950807..000000000 --- a/client/entry-server-homebrew.jsx +++ /dev/null @@ -1,4 +0,0 @@ -import { renderToString } from 'react-dom/server'; -import Homebrew from './homebrew/homebrew.jsx'; - -export default (props) => renderToString(); From 215d24b99a5546fa5d9d66db83a026aa2dfb9a98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 1 Feb 2026 17:55:51 +0100 Subject: [PATCH 23/76] base --- client/admin/main.jsx | 0 client/homebrew/homebrew.jsx | 67 +++++++++++++++++++----------------- client/homebrew/main.jsx | 9 +++++ client/index.html | 2 +- client/main.jsx | 5 --- 5 files changed, 45 insertions(+), 38 deletions(-) create mode 100644 client/admin/main.jsx create mode 100644 client/homebrew/main.jsx delete mode 100644 client/main.jsx diff --git a/client/admin/main.jsx b/client/admin/main.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index e27978479..86b0d57c4 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -1,8 +1,7 @@ - -import 'core-js/es/string/to-well-formed.js'; //Polyfill for older browsers +import 'core-js/es/string/to-well-formed.js'; // Polyfill for older browsers import './homebrew.less'; -import React from 'react'; -import { StaticRouter as Router, Route, Routes, useParams, useSearchParams } from 'react-router'; +import React, { useState, useEffect } from 'react'; +import { BrowserRouter as Router, Routes, Route, useParams, useSearchParams } from 'react-router-dom'; import { updateLocalStorage } from './utils/updateLocalStorage/updateLocalStorageKeys.js'; @@ -22,42 +21,46 @@ const WithRoute = ({ el: Element, ...rest })=>{ return ; }; -const Homebrew = (props)=>{ - const { - url = '', - version = '0.0.0', - account = null, - config, - brew = { - title : '', - text : '', - shareId : null, - editId : null, - createdAt : null, - updatedAt : null, - lang : '' - }, - userThemes, - brews - } = props; +const Homebrew = ()=>{ + // SPA defaults / client-side state + const [account, setAccount] = useState(null); + const [version] = useState('0.0.0'); + const [config, setConfig] = useState({}); + const [brew, setBrew] = useState({ + title : '', + text : '', + shareId : null, + editId : null, + createdAt : null, + updatedAt : null, + lang : '' + }); + const [userThemes, setUserThemes] = useState([]); + const [brews, setBrews] = useState([]); - global.account = account; - global.version = version; - global.config = config; + // Maybe should fetch the data here? + //probably should fetch the object later + // useEffect(() => { fetch('/api/...').then(res => res.json()).then(setBrew) }, []); + + // Set globals if needed (legacy) + global.account = account; + global.version = version; + global.config = config; const backgroundObject = ()=>{ - if(global.config?.deployment || (config?.local && config?.development)){ - const bgText = global.config?.deployment || 'Local'; - return { - backgroundImage : `url("data:image/svg+xml;utf8,${bgText}")` - }; + if(config?.deployment || (config?.local && config?.development)) { + const bgText = config?.deployment || 'Local'; + return { + backgroundImage : `url("data:image/svg+xml;utf8,${bgText}")` + }; } return null; }; + updateLocalStorage(); return ( - +
} /> @@ -80,4 +83,4 @@ const Homebrew = (props)=>{ ); }; -export default Homebrew; \ No newline at end of file +export default Homebrew; diff --git a/client/homebrew/main.jsx b/client/homebrew/main.jsx new file mode 100644 index 000000000..00f68f4d6 --- /dev/null +++ b/client/homebrew/main.jsx @@ -0,0 +1,9 @@ +import { createRoot } from "react-dom/client"; +import { BrowserRouter } from "react-router-dom"; +import App from "./App"; + +createRoot(document.getElementById("reactRoot")).render( + + + +); diff --git a/client/index.html b/client/index.html index 0a6bc03cf..dc6e934b4 100644 --- a/client/index.html +++ b/client/index.html @@ -24,6 +24,6 @@
- + diff --git a/client/main.jsx b/client/main.jsx deleted file mode 100644 index 63ad92f55..000000000 --- a/client/main.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import { createRoot } from "react-dom/client"; -import App from "./App"; - -const root = createRoot(document.getElementById("reactRoot")); -root.render(); From b5598ac423f5e58c3f0732fc23a3e55d2f28bb2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 1 Feb 2026 20:37:09 +0100 Subject: [PATCH 24/76] trying to get this to work --- client/homebrew/brewRenderer/brewRenderer.jsx | 3 +- client/homebrew/homebrew.jsx | 44 +++++++++---------- client/homebrew/main.jsx | 12 +++-- client/index.html => index.html | 2 +- package-lock.json | 20 ++++----- package.json | 5 +-- server.js | 5 --- server/app.js | 34 ++++++++------ vite.config.js | 6 ++- 9 files changed, 65 insertions(+), 66 deletions(-) rename client/index.html => index.html (90%) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 401b197d3..a42b3a64d 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -11,8 +11,7 @@ import ToolBar from './toolBar/toolBar.jsx'; //TODO: move to the brew renderer import RenderWarnings from '../../components/renderWarnings/renderWarnings.jsx'; import NotificationPopup from './notificationPopup/notificationPopup.jsx'; -import frameComp from 'react-frame-component'; -const Frame = frameComp.default; +import Frame from 'react-frame-component'; import dedent from 'dedent'; import { printCurrentBrew } from '../../../shared/helpers.js'; diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index 86b0d57c4..aa03a05a8 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -1,7 +1,7 @@ import 'core-js/es/string/to-well-formed.js'; // Polyfill for older browsers import './homebrew.less'; import React, { useState, useEffect } from 'react'; -import { BrowserRouter as Router, Routes, Route, useParams, useSearchParams } from 'react-router-dom'; +import { BrowserRouter as Router, Routes, Route, useParams, useSearchParams } from 'react-router'; import { updateLocalStorage } from './utils/updateLocalStorage/updateLocalStorageKeys.js'; @@ -21,31 +21,27 @@ const WithRoute = ({ el: Element, ...rest })=>{ return ; }; -const Homebrew = ()=>{ +const Homebrew = (props)=>{ // SPA defaults / client-side state - const [account, setAccount] = useState(null); - const [version] = useState('0.0.0'); - const [config, setConfig] = useState({}); - const [brew, setBrew] = useState({ - title : '', - text : '', - shareId : null, - editId : null, - createdAt : null, - updatedAt : null, - lang : '' - }); - const [userThemes, setUserThemes] = useState([]); - const [brews, setBrews] = useState([]); + const { + url = '', + version = '0.0.0', + account = null, + config, + brew = { + title : '', + text : '', + shareId : null, + editId : null, + createdAt : null, + updatedAt : null, + lang : '' + }, + userThemes, + brews + } = props; - // Maybe should fetch the data here? - //probably should fetch the object later - // useEffect(() => { fetch('/api/...').then(res => res.json()).then(setBrew) }, []); - - // Set globals if needed (legacy) - global.account = account; - global.version = version; - global.config = config; + console.log('props: ', props); const backgroundObject = ()=>{ if(config?.deployment || (config?.local && config?.development)) { diff --git a/client/homebrew/main.jsx b/client/homebrew/main.jsx index 00f68f4d6..baabbf472 100644 --- a/client/homebrew/main.jsx +++ b/client/homebrew/main.jsx @@ -1,9 +1,7 @@ import { createRoot } from "react-dom/client"; -import { BrowserRouter } from "react-router-dom"; -import App from "./App"; +import Homebrew from "./homebrew.jsx"; -createRoot(document.getElementById("reactRoot")).render( - - - -); +const props = window.__INITIAL_PROPS__ || {}; +console.log('props: ', window.__INITIAL_PROPS__); + +createRoot(document.getElementById("reactRoot")).render(); diff --git a/client/index.html b/index.html similarity index 90% rename from client/index.html rename to index.html index dc6e934b4..bfe95b67e 100644 --- a/client/index.html +++ b/index.html @@ -24,6 +24,6 @@
- + diff --git a/package-lock.json b/package-lock.json index 7a06b778c..1b96d7ff9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3959,9 +3959,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz", - "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==", + "version": "25.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz", + "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==", "devOptional": true, "license": "MIT", "peer": true, @@ -12647,22 +12647,22 @@ } }, "node_modules/tldts": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.19.tgz", - "integrity": "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.21.tgz", + "integrity": "sha512-Plu6V8fF/XU6d2k8jPtlQf5F4Xx2hAin4r2C2ca7wR8NK5MbRTo9huLUWRe28f3Uk8bYZfg74tit/dSjc18xnw==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.19" + "tldts-core": "^7.0.21" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz", - "integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==", + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.21.tgz", + "integrity": "sha512-oVOMdHvgjqyzUZH1rOESgJP1uNe2bVrfK0jUHHmiM2rpEiRbf3j4BrsIc6JigJRbHGanQwuZv/R+LTcHsw+bLA==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index cf1964d93..27b8e1ac6 100644 --- a/package.json +++ b/package.json @@ -12,11 +12,10 @@ "url": "git://github.com/naturalcrit/homebrewery.git" }, "scripts": { - "dev":"node server.js", + "dev": "vite", "build": "vite build && node scripts/compileAssets.js", - "start": "node server.js", + "preview": "vite preview", "compileAssets": "node scripts/compileAssets.js --dev", - "lint": "eslint --fix", "lint:dry": "eslint", "stylelint": "stylelint --fix **/*.{less}", diff --git a/server.js b/server.js index 0405128ff..750716151 100644 --- a/server.js +++ b/server.js @@ -8,7 +8,6 @@ const isProd = process.env.NODE_ENV === "production"; async function start() { let vite; - //==== Create Vite dev server only in development ====// if (!isProd) { vite = await createViteServer({ server: { middlewareMode: true }, @@ -17,16 +16,13 @@ async function start() { } - //==== Connect to the database ====// await DB.connect(config).catch((err) => { console.error("Database connection failed:", err); process.exit(1); }); - //==== Create the Express app ====// const app = await createApp(vite); - //==== Start listening ====// const PORT = process.env.PORT || config.get("web_port") || 8000; app.listen(PORT, () => { const reset = "\x1b[0m"; // Reset to default style @@ -42,5 +38,4 @@ async function start() { }); } -//==== Start the server ====// start(); diff --git a/server/app.js b/server/app.js index 89c577c8b..926e3d3ba 100644 --- a/server/app.js +++ b/server/app.js @@ -12,9 +12,9 @@ import _ from 'lodash'; import jwt from 'jwt-simple'; import express from 'express'; import config from './config.js'; +import path from 'path'; import fs from 'fs-extra'; - import api from './homebrew.api.js'; const { homebrewApi, getBrew, getUsersBrewThemes, getCSS } = api; import adminApi from './admin.api.js'; @@ -23,7 +23,6 @@ import GoogleActions from './googleActions.js'; import serveCompressedStaticAssets from './static-assets.mv.js'; import sanitizeFilename from 'sanitize-filename'; import asyncHandler from 'express-async-handler'; -import template from '../client/template.js'; import { model as HomebrewModel } from './homebrew.model.js'; import { DEFAULT_BREW } from './brewDefaults.js'; @@ -545,7 +544,8 @@ export default async function createApp(vite) { //Send rendered page app.use(asyncHandler(async (req, res, next)=>{ - if(!req.route) return res.redirect('/'); // Catch-all for invalid routes + console.log(req.route); + //if(!req.route) return res.redirect('/'); // Catch-all for invalid routes const page = await renderPage(req, res); if(!page) return; @@ -554,6 +554,7 @@ export default async function createApp(vite) { //Render the page const renderPage = async (req, res)=>{ + console.log('renderpage'); // Create configuration object const configuration = { local : isLocalEnvironment, @@ -573,18 +574,25 @@ export default async function createApp(vite) { ogMeta : req.ogMeta, userThemes : req.userThemes }; - const title = req.brew ? req.brew.title : ''; + console.log('props: ',props); + return await renderSPA(req, props); + }; - const page = await template( - isProd ? {} : { vite, url: req.originalUrl }, - 'homebrew', - title, - props - ).catch((err)=>{ - console.error(err); - }); + const renderSPA = async (req, props)=>{ + const htmlPath = isProd ? path.resolve('build', 'index.html') : path.resolve('index.html'); + let html = fs.readFileSync(htmlPath, 'utf-8'); + console.log('index.html snippet:', html.slice(0, 200)); // see the first 200 chars + html = html.replace( + '', + `\n` + ); - return page; + if(!isProd && vite?.transformIndexHtml) { + console.log('transforming'); + return await vite.transformIndexHtml(req.originalUrl, html); + } + + return html; }; //v=====----- Error-Handling Middleware -----=====v// diff --git a/vite.config.js b/vite.config.js index be9cda56c..8795d18da 100644 --- a/vite.config.js +++ b/vite.config.js @@ -20,8 +20,12 @@ export default defineConfig({ }, }, }, + // vite.config.js + define: { + global: "window", + }, server: { - port:8000, + port: 8000, fs: { allow: ["."], }, From b4ec26a29f08b0651490daf223a4d8d7080b7d5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 1 Feb 2026 21:06:39 +0100 Subject: [PATCH 25/76] trying to inject props --- client/homebrew/main.jsx | 2 +- server/app.js | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/client/homebrew/main.jsx b/client/homebrew/main.jsx index baabbf472..e03862604 100644 --- a/client/homebrew/main.jsx +++ b/client/homebrew/main.jsx @@ -2,6 +2,6 @@ import { createRoot } from "react-dom/client"; import Homebrew from "./homebrew.jsx"; const props = window.__INITIAL_PROPS__ || {}; -console.log('props: ', window.__INITIAL_PROPS__); +window.onload = ()=> {console.log('props: ', window.__INITIAL_PROPS__)}; createRoot(document.getElementById("reactRoot")).render(); diff --git a/server/app.js b/server/app.js index 926e3d3ba..86c98bac8 100644 --- a/server/app.js +++ b/server/app.js @@ -542,10 +542,15 @@ export default async function createApp(vite) { return next(); })); + app.use((req, res, next) => { + console.log('Before SPA middleware:', req.originalUrl); + next(); + }); + + //Send rendered page app.use(asyncHandler(async (req, res, next)=>{ - console.log(req.route); - //if(!req.route) return res.redirect('/'); // Catch-all for invalid routes + if(!req.route) return res.redirect('/'); // Catch-all for invalid routes const page = await renderPage(req, res); if(!page) return; @@ -555,7 +560,7 @@ export default async function createApp(vite) { //Render the page const renderPage = async (req, res)=>{ console.log('renderpage'); - // Create configuration object + // Create configuration object const configuration = { local : isLocalEnvironment, publicUrl : config.get('publicUrl') ?? '', @@ -574,24 +579,23 @@ export default async function createApp(vite) { ogMeta : req.ogMeta, userThemes : req.userThemes }; - console.log('props: ',props); + console.log('props: ',!!props); return await renderSPA(req, props); }; const renderSPA = async (req, props)=>{ const htmlPath = isProd ? path.resolve('build', 'index.html') : path.resolve('index.html'); let html = fs.readFileSync(htmlPath, 'utf-8'); - console.log('index.html snippet:', html.slice(0, 200)); // see the first 200 chars - html = html.replace( - '', - `\n` - ); if(!isProd && vite?.transformIndexHtml) { - console.log('transforming'); - return await vite.transformIndexHtml(req.originalUrl, html); + html = await vite.transformIndexHtml(req.originalUrl, html); } + html = html.replace( + '', + `` + ); + console.log('html', html); return html; }; From 71bc95251c9b70883e15b65f4ca9175d3c8a7dd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 1 Feb 2026 21:31:21 +0100 Subject: [PATCH 26/76] stable in prod --- index.html | 9 ++------- server.js | 4 ++-- server/app.js | 22 ++++++---------------- 3 files changed, 10 insertions(+), 25 deletions(-) diff --git a/index.html b/index.html index bfe95b67e..306b4d8dc 100644 --- a/index.html +++ b/index.html @@ -2,18 +2,13 @@ - - + content="width=device-width, initial-scale=1, height=device-height, interactive-widget=resizes-visual" /> - + type="text/css" /> diff --git a/server.js b/server.js index 750716151..6d052a939 100644 --- a/server.js +++ b/server.js @@ -10,7 +10,7 @@ async function start() { if (!isProd) { vite = await createViteServer({ - server: { middlewareMode: true }, + server: { middlewareMode: 'html' }, appType: "custom", }); @@ -23,7 +23,7 @@ async function start() { const app = await createApp(vite); - const PORT = process.env.PORT || config.get("web_port") || 8000; + const PORT = process.env.PORT || config.get("web_port") || 3000; app.listen(PORT, () => { const reset = "\x1b[0m"; // Reset to default style const bright = "\x1b[1m"; // Bright (bold) style diff --git a/server/app.js b/server/app.js index 86c98bac8..3be8fb40c 100644 --- a/server/app.js +++ b/server/app.js @@ -542,12 +542,6 @@ export default async function createApp(vite) { return next(); })); - app.use((req, res, next) => { - console.log('Before SPA middleware:', req.originalUrl); - next(); - }); - - //Send rendered page app.use(asyncHandler(async (req, res, next)=>{ if(!req.route) return res.redirect('/'); // Catch-all for invalid routes @@ -559,7 +553,7 @@ export default async function createApp(vite) { //Render the page const renderPage = async (req, res)=>{ - console.log('renderpage'); + // Create configuration object const configuration = { local : isLocalEnvironment, @@ -579,20 +573,16 @@ export default async function createApp(vite) { ogMeta : req.ogMeta, userThemes : req.userThemes }; - console.log('props: ',!!props); - return await renderSPA(req, props); - }; - const renderSPA = async (req, props)=>{ + console.log('props: ', !!props); + const htmlPath = isProd ? path.resolve('build', 'index.html') : path.resolve('index.html'); let html = fs.readFileSync(htmlPath, 'utf-8'); - if(!isProd && vite?.transformIndexHtml) { - html = await vite.transformIndexHtml(req.originalUrl, html); - } + html = html.replace( - '', - `` + '', + `` ); console.log('html', html); From 741d7762d84ad582a0423981632d17fff1ae9d50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 1 Feb 2026 21:59:59 +0100 Subject: [PATCH 27/76] this should work --- package.json | 3 ++- server.js | 2 +- server/app.js | 8 ++++---- vite.config.js | 4 ---- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 27b8e1ac6..9bfeb6f0d 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,9 @@ "scripts": { "dev": "vite", "build": "vite build && node scripts/compileAssets.js", - "preview": "vite preview", + "preview": "vite preview --port 8000", "compileAssets": "node scripts/compileAssets.js --dev", + "lint": "eslint --fix", "lint:dry": "eslint", "stylelint": "stylelint --fix **/*.{less}", diff --git a/server.js b/server.js index 6d052a939..172da0fe2 100644 --- a/server.js +++ b/server.js @@ -10,7 +10,7 @@ async function start() { if (!isProd) { vite = await createViteServer({ - server: { middlewareMode: 'html' }, + server: { middlewareMode: true }, appType: "custom", }); diff --git a/server/app.js b/server/app.js index 3be8fb40c..cea0dde22 100644 --- a/server/app.js +++ b/server/app.js @@ -574,18 +574,18 @@ export default async function createApp(vite) { userThemes : req.userThemes }; - console.log('props: ', !!props); - const htmlPath = isProd ? path.resolve('build', 'index.html') : path.resolve('index.html'); let html = fs.readFileSync(htmlPath, 'utf-8'); + if(!isProd && vite?.transformIndexHtml) { + html = await vite.transformIndexHtml(req.originalUrl, html); + } html = html.replace( '', - `` + `\n` ); - console.log('html', html); return html; }; diff --git a/vite.config.js b/vite.config.js index 8795d18da..cfeaae3b0 100644 --- a/vite.config.js +++ b/vite.config.js @@ -9,10 +9,6 @@ export default defineConfig({ outDir: "build", emptyOutDir: true, rollupOptions: { - input: { - admin: path.resolve(__dirname, "client/admin/admin.jsx"), - homebrew: path.resolve(__dirname, "client/homebrew/homebrew.jsx"), - }, output: { entryFileNames: "[name]/bundle.js", chunkFileNames: "[name]/[name]-[hash].js", From d937e4ab816b907198de8a0da4a8178f3a1b1d57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 1 Feb 2026 23:20:32 +0100 Subject: [PATCH 28/76] stable version --- client/homebrew/homebrew.jsx | 3 +-- client/homebrew/main.jsx | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index aa03a05a8..a9be3e879 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -1,6 +1,6 @@ import 'core-js/es/string/to-well-formed.js'; // Polyfill for older browsers import './homebrew.less'; -import React, { useState, useEffect } from 'react'; +import React from 'react'; import { BrowserRouter as Router, Routes, Route, useParams, useSearchParams } from 'react-router'; import { updateLocalStorage } from './utils/updateLocalStorage/updateLocalStorageKeys.js'; @@ -22,7 +22,6 @@ const WithRoute = ({ el: Element, ...rest })=>{ }; const Homebrew = (props)=>{ - // SPA defaults / client-side state const { url = '', version = '0.0.0', diff --git a/client/homebrew/main.jsx b/client/homebrew/main.jsx index e03862604..77a88d30f 100644 --- a/client/homebrew/main.jsx +++ b/client/homebrew/main.jsx @@ -2,6 +2,5 @@ import { createRoot } from "react-dom/client"; import Homebrew from "./homebrew.jsx"; const props = window.__INITIAL_PROPS__ || {}; -window.onload = ()=> {console.log('props: ', window.__INITIAL_PROPS__)}; createRoot(document.getElementById("reactRoot")).render(); From 2534f23c24fcfb9b130dd6be17467d11075bb598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 00:04:23 +0100 Subject: [PATCH 29/76] fixing css --- client/homebrew/brewRenderer/brewRenderer.jsx | 3 ++- client/homebrew/pages/newPage/newPage.jsx | 2 +- package.json | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index a42b3a64d..a600a4768 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -1,5 +1,5 @@ /*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ -import './brewRenderer.less'; +import brewRendererStylesUrl from './brewRenderer.less?url'; import React, { useState, useRef, useMemo, useEffect } from 'react'; import _ from 'lodash'; @@ -29,6 +29,7 @@ const INITIAL_CONTENT = dedent` +
`; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index e5b536134..7ae849fcf 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -59,7 +59,7 @@ const NewPage = (props)=>{ const lastSavedBrew = useRef(_.cloneDeep(props.brew)); // const saveTimeout = useRef(null); // const warnUnsavedTimeout = useRef(null); - const trySaveRef = useRef(trySave); // CTRL+S listener lives outside React and needs ref to use trySave with latest copy of brew + const trySaveRef = useRef(null); // CTRL+S listener lives outside React and needs ref to use trySave with latest copy of brew const unsavedChangesRef = useRef(unsavedChanges); // Similarly, onBeforeUnload lives outside React and needs ref to unsavedChanges useEffect(()=>{ diff --git a/package.json b/package.json index 9bfeb6f0d..dce60390d 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,9 @@ "url": "git://github.com/naturalcrit/homebrewery.git" }, "scripts": { - "dev": "vite", + "start": "node server.js", "build": "vite build && node scripts/compileAssets.js", - "preview": "vite preview --port 8000", + "preview": "vite preview", "compileAssets": "node scripts/compileAssets.js --dev", "lint": "eslint --fix", From 145353538362edea242dca13286eae72bf1a39d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 00:19:10 +0100 Subject: [PATCH 30/76] remove unused scripts --- scripts/buildHomebrew.js | 169 --------------------------------------- scripts/compileAssets.js | 87 -------------------- scripts/dev.js | 44 ---------- scripts/quick.js | 17 ---- 4 files changed, 317 deletions(-) delete mode 100644 scripts/buildHomebrew.js delete mode 100644 scripts/compileAssets.js delete mode 100644 scripts/dev.js delete mode 100644 scripts/quick.js diff --git a/scripts/buildHomebrew.js b/scripts/buildHomebrew.js deleted file mode 100644 index 4d55a4176..000000000 --- a/scripts/buildHomebrew.js +++ /dev/null @@ -1,169 +0,0 @@ -import fs from 'fs-extra'; -import zlib from 'zlib'; -import Proj from './project.json' with { type: 'json' }; -import vitreum from 'vitreum'; -const { pack, watchFile, livereload } = vitreum; - -import lessTransform from 'vitreum/transforms/less.js'; -import assetTransform from 'vitreum/transforms/asset.js'; -import babel from '@babel/core'; -import babelConfig from '../babel.config.json' with { type : 'json' }; -import less from 'less'; - -const isDev = !!process.argv.find((arg)=>arg === '--dev'); - -const babelify = async (code)=>(await babel.transformAsync(code, babelConfig)).code; - -const transforms = { - '.js' : (code, filename, opts)=>babelify(code), - '.jsx' : (code, filename, opts)=>babelify(code), - '.less' : lessTransform, - '*' : assetTransform('./build') -}; - -const build = async ({ bundle, render, ssr })=>{ - const css = await lessTransform.generate({ paths: './shared' }); - //css = `@layer bundle {\n${css}\n}`; - await fs.outputFile('./build/homebrew/bundle.css', css); - await fs.outputFile('./build/homebrew/bundle.js', bundle); - await fs.outputFile('./build/homebrew/ssr.cjs', ssr); - - await fs.copy('./client/homebrew/favicon.ico', './build/assets/favicon.ico'); - - //compress files in production - if(!isDev){ - await fs.outputFile('./build/homebrew/bundle.css.br', zlib.brotliCompressSync(css)); - await fs.outputFile('./build/homebrew/bundle.js.br', zlib.brotliCompressSync(bundle)); - await fs.outputFile('./build/homebrew/ssr.js.br', zlib.brotliCompressSync(ssr)); - } else { - await fs.remove('./build/homebrew/bundle.css.br'); - await fs.remove('./build/homebrew/bundle.js.br'); - await fs.remove('./build/homebrew/ssr.js.br'); - } -}; - -fs.emptyDirSync('./build'); - - -(async ()=>{ - - //v==----------------------------- COMPILE THEMES --------------------------------==v// - - // Update list of all Theme files - const themes = { Legacy: {}, V3: {} }; - - let themeFiles = fs.readdirSync('./themes/Legacy'); - for (const dir of themeFiles) { - const themeData = JSON.parse(fs.readFileSync(`./themes/Legacy/${dir}/settings.json`).toString()); - themeData.path = dir; - themes.Legacy[dir] = (themeData); - //fs.copy(`./themes/Legacy/${dir}/dropdownTexture.png`, `./build/themes/Legacy/${dir}/dropdownTexture.png`); - const src = `./themes/Legacy/${dir}/style.less`; - ((outputDirectory)=>{ - less.render(fs.readFileSync(src).toString(), { - compress : !isDev - }, function(e, output) { - fs.outputFile(outputDirectory, output.css); - }); - })(`./build/themes/Legacy/${dir}/style.css`); - - } - - themeFiles = fs.readdirSync('./themes/V3'); - for (const dir of themeFiles) { - const themeData = JSON.parse(fs.readFileSync(`./themes/V3/${dir}/settings.json`).toString()); - themeData.path = dir; - themes.V3[dir] = (themeData); - fs.copy(`./themes/V3/${dir}/dropdownTexture.png`, `./build/themes/V3/${dir}/dropdownTexture.png`); - fs.copy(`./themes/V3/${dir}/dropdownPreview.png`, `./build/themes/V3/${dir}/dropdownPreview.png`); - const src = `./themes/V3/${dir}/style.less`; - ((outputDirectory)=>{ - less.render(fs.readFileSync(src).toString(), { - compress : !isDev - }, function(e, output) { - fs.outputFile(outputDirectory, output.css); - }); - })(`./build/themes/V3/${dir}/style.css`); - } - - await fs.outputFile('./themes/themes.json', JSON.stringify(themes, null, 2)); - - // await less.render(lessCode, { - // compress : !dev, - // sourceMap : (dev ? { - // sourceMapFileInline: true, - // outputSourceFiles: true - // } : false), - // }) - - // Move assets - await fs.copy('./themes/fonts', './build/fonts'); - await fs.copy('./themes/assets', './build/assets'); - await fs.copy('./client/icons', './build/icons'); - - //v==---------------------------MOVE CM EDITOR THEMES -----------------------------==v// - - const editorThemesBuildDir = './build/homebrew/cm-themes'; - await fs.copy('./node_modules/codemirror/theme', editorThemesBuildDir); - await fs.copy('./themes/codeMirror/customThemes', editorThemesBuildDir); - const editorThemeFiles = fs.readdirSync(editorThemesBuildDir); - - const editorThemeFile = './themes/codeMirror/editorThemes.json'; - if(fs.existsSync(editorThemeFile)) fs.rmSync(editorThemeFile); - const stream = fs.createWriteStream(editorThemeFile, { flags: 'a' }); - stream.write('[\n"default"'); - - for (const themeFile of editorThemeFiles) { - stream.write(`,\n"${themeFile.slice(0, -4)}"`); - } - stream.write('\n]\n'); - stream.end(); - - - await fs.copy('./themes/codeMirror', './build/homebrew/codeMirror'); - - //v==----------------------------- BUNDLE PACKAGES --------------------------------==v// - - const bundles = await pack('./client/homebrew/homebrew.jsx', { - paths : ['./shared', './'], - libs : Proj.libs, - dev : isDev && build, - transforms - }); - build(bundles); - - // Possible method for generating separate bundles for theme snippets: factor-bundle first sending all common files to bundle.js, then again using default settings, keeping only snippet bundles - // await fs.outputFile('./build/junk.js', ''); - // await fs.outputFile('./build/themes/Legacy/5ePHB/snippets.js', ''); - // - // const files = ['./client/homebrew/homebrew.jsx','./themes/Legacy/5ePHB/snippets.js']; - // - // bundles = await pack(files, { - // dedupe: false, - // plugin : [['factor-bundle', { outputs: [ './build/junk.js','./build/themes/Legacy/5ePHB/snippets.js'], threshold : function(row, groups) { - // console.log(groups); - // if (groups.some(group => /.*homebrew.jsx$/.test(group))) { - // console.log("found homebrewery") - // return true; - // } - // return this._defaultThreshold(row, groups); - // }}]], - // paths : ['./shared','./','./build'], - // libs : Proj.libs, - // dev : isDev && build, - // transforms - // }); - // build(bundles); - // - - //In development, set up LiveReload (refreshes browser), and Nodemon (restarts server) - if(isDev){ - livereload('./build'); // Install the Chrome extension LiveReload to automatically refresh the browser - watchFile('./server.js', { // Restart server when change detected to this file or any nested directory from here - ignore : ['./build', './client', './themes'], // Ignore folders that are not running server code / avoids unneeded restarts - ext : 'js json' // Extensions to watch (only .js/.json by default) - //watch : ['./server', './themes'], // Watch additional folders if needed - }); - } - -})().catch(console.error); \ No newline at end of file diff --git a/scripts/compileAssets.js b/scripts/compileAssets.js deleted file mode 100644 index 0c2d2ef63..000000000 --- a/scripts/compileAssets.js +++ /dev/null @@ -1,87 +0,0 @@ -import fs from "fs-extra"; -import less from "less"; -const isDev = !!process.argv.find((arg) => arg === "--dev"); - -const compileAssets = async () => { - await fs.copy("./client/homebrew/favicon.ico", "./build/assets/favicon.ico"); - - let assets = fs.readdirSync("./shared/naturalcrit/styles"); - for (const file of assets) { - await fs.copy(`./shared/naturalcrit/styles/${file}`, `./build/fonts/${file}`); - } - - //v==----------------------------- COMPILE THEMES --------------------------------==v// - - // Update list of all Theme files - const themes = { Legacy: {}, V3: {} }; - - let themeFiles = fs.readdirSync("./themes/Legacy"); - for (const dir of themeFiles) { - const themeData = JSON.parse(fs.readFileSync(`./themes/Legacy/${dir}/settings.json`).toString()); - themeData.path = dir; - themes.Legacy[dir] = themeData; - //fs.copy(`./themes/Legacy/${dir}/dropdownTexture.png`, `./build/themes/Legacy/${dir}/dropdownTexture.png`); - const src = `./themes/Legacy/${dir}/style.less`; - ((outputDirectory) => { - less.render( - fs.readFileSync(src).toString(), - { - compress: !isDev, - }, - function (e, output) { - fs.outputFile(outputDirectory, output.css); - }, - ); - })(`./build/themes/Legacy/${dir}/style.css`); - } - - themeFiles = fs.readdirSync("./themes/V3"); - for (const dir of themeFiles) { - const themeData = JSON.parse(fs.readFileSync(`./themes/V3/${dir}/settings.json`).toString()); - themeData.path = dir; - themes.V3[dir] = themeData; - fs.copy(`./themes/V3/${dir}/dropdownTexture.png`, `./build/themes/V3/${dir}/dropdownTexture.png`); - fs.copy(`./themes/V3/${dir}/dropdownPreview.png`, `./build/themes/V3/${dir}/dropdownPreview.png`); - const src = `./themes/V3/${dir}/style.less`; - ((outputDirectory) => { - less.render( - fs.readFileSync(src).toString(), - { - compress: !isDev, - }, - function (e, output) { - fs.outputFile(outputDirectory, output.css); - }, - ); - })(`./build/themes/V3/${dir}/style.css`); - } - - await fs.outputFile("./themes/themes.json", JSON.stringify(themes, null, 2)); - - // Move assets - await fs.copy("./themes/fonts", "./build/fonts"); - await fs.copy("./themes/assets", "./build/assets"); - await fs.copy("./client/icons", "./build/icons"); - - //v==---------------------------MOVE CM EDITOR THEMES -----------------------------==v// - - const editorThemesBuildDir = "./build/homebrew/cm-themes"; - await fs.copy("./node_modules/codemirror/theme", editorThemesBuildDir); - await fs.copy("./themes/codeMirror/customThemes", editorThemesBuildDir); - const editorThemeFiles = fs.readdirSync(editorThemesBuildDir); - - const editorThemeFile = "./themes/codeMirror/editorThemes.json"; - if (fs.existsSync(editorThemeFile)) fs.rmSync(editorThemeFile); - const stream = fs.createWriteStream(editorThemeFile, { flags: "a" }); - stream.write('[\n"default"'); - - for (const themeFile of editorThemeFiles) { - stream.write(`,\n"${themeFile.slice(0, -4)}"`); - } - stream.write("\n]\n"); - stream.end(); - - await fs.copy("./themes/codeMirror", "./build/homebrew/codeMirror"); -}; - -compileAssets(); diff --git a/scripts/dev.js b/scripts/dev.js deleted file mode 100644 index a74afc117..000000000 --- a/scripts/dev.js +++ /dev/null @@ -1,44 +0,0 @@ -import express from "express"; -import { createServer as createViteServer } from "vite"; -import path from "path"; -import url from "url"; -import template from "../client/template.js"; - -const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); -const app = express(); - -async function start() { - const vite = await createViteServer({ - server: { middlewareMode: true }, - root: __dirname, - appType: "custom", - }); - - app.use(vite.middlewares); - app.use("/assets", express.static(path.resolve(__dirname, "/client/assets"))); - - app.use(/(.*)/, async (req, res, next) => { - try { - const parsed = url.parse(req.url); - const pathname = parsed.pathname || "/"; - - // Ignore vite HMR or ping requests - if (pathname.startsWith("/__vite")) return next(); - - const entry = pathname.startsWith("/admin") ? "admin" : "homebrew"; - - const ssrModule = await vite.ssrLoadModule(`client/${entry}/${entry}.jsx`); - - const html = await template(entry, "", { path: pathname, ssrModule }); - res.status(200).set({ "Content-Type": "text/html" }).end(html); - } catch (e) { - vite.ssrFixStacktrace(e); - console.error(e); - res.status(500).end(e.message); - } - }); - - app.listen(8000, () => console.log("Dev server running on http://localhost:8000")); -} - -start(); diff --git a/scripts/quick.js b/scripts/quick.js deleted file mode 100644 index e763d85f7..000000000 --- a/scripts/quick.js +++ /dev/null @@ -1,17 +0,0 @@ -const label = 'quick'; -console.time(label); - -const jsx = require('vitreum/steps/jsx.js').partial; -const less = require('vitreum/steps/less.js').partial; -const server = require('vitreum/steps/server.watch.js').partial; - -const Proj = require('./project.json'); - -Promise.resolve() - .then(jsx('homebrew', './client/homebrew/homebrew.jsx', Proj.libs, ['./shared'])) - .then(less('homebrew', ['./shared'])) - .then(jsx('admin', './client/admin/admin.jsx', Proj.libs, ['./shared'])) - .then(less('admin', ['./shared'])) - .then(server('./server.js', ['server'])) - .then(console.timeEnd.bind(console, label)) - .catch(console.error); \ No newline at end of file From 39a7cdb63d987d4eeb5823efcdcba506442fdc2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 00:19:39 +0100 Subject: [PATCH 31/76] reworked asset generation --- package.json | 2 +- themes/codeMirror/editorThemes.json | 138 ++++++++++++++-------------- vite.config.js | 6 +- vitePlugins/generateAssetsPlugin.js | 80 ++++++++++++++++ 4 files changed, 153 insertions(+), 73 deletions(-) create mode 100644 vitePlugins/generateAssetsPlugin.js diff --git a/package.json b/package.json index dce60390d..ebfb33fad 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ }, "scripts": { "start": "node server.js", - "build": "vite build && node scripts/compileAssets.js", + "build": "vite build", "preview": "vite preview", "compileAssets": "node scripts/compileAssets.js --dev", diff --git a/themes/codeMirror/editorThemes.json b/themes/codeMirror/editorThemes.json index d287c9810..16d758568 100644 --- a/themes/codeMirror/editorThemes.json +++ b/themes/codeMirror/editorThemes.json @@ -1,70 +1,70 @@ [ -"default", -"3024-day", -"3024-night", -"abbott", -"abcdef", -"ambiance-mobile", -"ambiance", -"ayu-dark", -"ayu-mirage", -"base16-dark", -"base16-light", -"bespin", -"blackboard", -"cobalt", -"colorforth", -"darcula", -"darkbrewery", -"darkvision", -"dracula", -"duotone-dark", -"duotone-light", -"eclipse", -"elegant", -"erlang-dark", -"gruvbox-dark", -"hopscotch", -"icecoder", -"idea", -"isotope", -"juejin", -"lesser-dark", -"liquibyte", -"lucario", -"material-darker", -"material-ocean", -"material-palenight", -"material", -"mbo", -"mdn-like", -"midnight", -"monokai", -"moxer", -"neat", -"neo", -"night", -"nord", -"oceanic-next", -"panda-syntax", -"paraiso-dark", -"paraiso-light", -"pastel-on-dark", -"railscasts", -"rubyblue", -"seti", -"shadowfox", -"solarized", -"ssms", -"the-matrix", -"tomorrow-night-bright", -"tomorrow-night-eighties", -"ttcn", -"twilight", -"vibrant-ink", -"xq-dark", -"xq-light", -"yeti", -"yonce", -"zenburn" -] + "default", + "3024-day", + "3024-night", + "abbott", + "abcdef", + "ambiance-mobile", + "ambiance", + "ayu-dark", + "ayu-mirage", + "base16-dark", + "base16-light", + "bespin", + "blackboard", + "cobalt", + "colorforth", + "darcula", + "darkbrewery", + "darkvision", + "dracula", + "duotone-dark", + "duotone-light", + "eclipse", + "elegant", + "erlang-dark", + "gruvbox-dark", + "hopscotch", + "icecoder", + "idea", + "isotope", + "juejin", + "lesser-dark", + "liquibyte", + "lucario", + "material-darker", + "material-ocean", + "material-palenight", + "material", + "mbo", + "mdn-like", + "midnight", + "monokai", + "moxer", + "neat", + "neo", + "night", + "nord", + "oceanic-next", + "panda-syntax", + "paraiso-dark", + "paraiso-light", + "pastel-on-dark", + "railscasts", + "rubyblue", + "seti", + "shadowfox", + "solarized", + "ssms", + "the-matrix", + "tomorrow-night-bright", + "tomorrow-night-eighties", + "ttcn", + "twilight", + "vibrant-ink", + "xq-dark", + "xq-light", + "yeti", + "yonce", + "zenburn" +] \ No newline at end of file diff --git a/vite.config.js b/vite.config.js index cfeaae3b0..c23bbba9b 100644 --- a/vite.config.js +++ b/vite.config.js @@ -2,12 +2,13 @@ import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import path from "path"; +import { generateAssetsPlugin } from "./vitePlugins/generateAssetsPlugin.js"; export default defineConfig({ - plugins: [react()], + plugins: [react(), generateAssetsPlugin()], build: { outDir: "build", - emptyOutDir: true, + emptyOutDir: false, rollupOptions: { output: { entryFileNames: "[name]/bundle.js", @@ -16,7 +17,6 @@ export default defineConfig({ }, }, }, - // vite.config.js define: { global: "window", }, diff --git a/vitePlugins/generateAssetsPlugin.js b/vitePlugins/generateAssetsPlugin.js new file mode 100644 index 000000000..beacab1db --- /dev/null +++ b/vitePlugins/generateAssetsPlugin.js @@ -0,0 +1,80 @@ +// vite-plugins/generateAssetsPlugin.js +import fs from "fs-extra"; +import path from "path"; +import less from "less"; + +export function generateAssetsPlugin(isDev = false) { + return { + name: "generate-assets", + async buildStart() { + const buildDir = path.resolve(process.cwd(), "build"); + + // Copy favicon + await fs.copy("./client/homebrew/favicon.ico", `${buildDir}/assets/favicon.ico`); + + // Copy shared styles/fonts + const assets = fs.readdirSync("./shared/naturalcrit/styles"); + for (const file of assets) { + await fs.copy(`./shared/naturalcrit/styles/${file}`, `${buildDir}/fonts/${file}`); + } + + // Compile Legacy themes + const themes = { Legacy: {}, V3: {} }; + const legacyDirs = fs.readdirSync("./themes/Legacy"); + for (const dir of legacyDirs) { + const themeData = JSON.parse(fs.readFileSync(`./themes/Legacy/${dir}/settings.json`, "utf-8")); + themeData.path = dir; + themes.Legacy[dir] = themeData; + + const src = `./themes/Legacy/${dir}/style.less`; + const outputDir = `${buildDir}/themes/Legacy/${dir}/style.css`; + const lessOutput = await less.render(fs.readFileSync(src, "utf-8"), { compress: !isDev }); + await fs.outputFile(outputDir, lessOutput.css); + } + + // Compile V3 themes + const v3Dirs = fs.readdirSync("./themes/V3"); + for (const dir of v3Dirs) { + const themeData = JSON.parse(fs.readFileSync(`./themes/V3/${dir}/settings.json`, "utf-8")); + themeData.path = dir; + themes.V3[dir] = themeData; + + await fs.copy( + `./themes/V3/${dir}/dropdownTexture.png`, + `${buildDir}/themes/V3/${dir}/dropdownTexture.png`, + ); + await fs.copy( + `./themes/V3/${dir}/dropdownPreview.png`, + `${buildDir}/themes/V3/${dir}/dropdownPreview.png`, + ); + + const src = `./themes/V3/${dir}/style.less`; + const outputDir = `${buildDir}/themes/V3/${dir}/style.css`; + const lessOutput = await less.render(fs.readFileSync(src, "utf-8"), { compress: !isDev }); + await fs.outputFile(outputDir, lessOutput.css); + } + + // Write themes.json + await fs.outputFile("./themes/themes.json", JSON.stringify(themes, null, 2)); + + // Copy fonts/assets/icons + await fs.copy("./themes/fonts", `${buildDir}/fonts`); + await fs.copy("./themes/assets", `${buildDir}/assets`); + await fs.copy("./client/icons", `${buildDir}/icons`); + + // Compile CodeMirror editor themes + const editorThemesBuildDir = `${buildDir}/homebrew/cm-themes`; + await fs.copy("./node_modules/codemirror/theme", editorThemesBuildDir); + await fs.copy("./themes/codeMirror/customThemes", editorThemesBuildDir); + + const editorThemeFiles = fs.readdirSync(editorThemesBuildDir); + await fs.outputFile( + "./themes/codeMirror/editorThemes.json", + JSON.stringify(["default", ...editorThemeFiles.map((f) => f.slice(0, -4))], null, 2), + ); + + // Copy remaining CodeMirror assets + await fs.copy("./themes/codeMirror", `${buildDir}/homebrew/codeMirror`); + }, + }; +} From cd5de2c2a1553e816e5deab823804cc20a838f20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 00:30:57 +0100 Subject: [PATCH 32/76] vite middlewares only in dev --- server/app.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/app.js b/server/app.js index cea0dde22..48f82f634 100644 --- a/server/app.js +++ b/server/app.js @@ -56,7 +56,9 @@ export default async function createApp(vite) { app.set('trust proxy', 1 /* number of proxies between user and server */); - app.use(vite.middlewares); + if (vite) { + app.use(vite.middlewares); + } app.use('/', serveCompressedStaticAssets('build')); app.use(contentNegotiation); From 5ed60e7130478be3dac40bef54b63980b80de4ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 00:39:06 +0100 Subject: [PATCH 33/76] remove unused dependencies --- package-lock.json | 147 +--------------------------------------------- package.json | 12 +--- 2 files changed, 2 insertions(+), 157 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1b96d7ff9..c39f950cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,8 +14,6 @@ "@babel/plugin-transform-runtime": "^7.28.3", "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.28.5", - "@babel/runtime": "^7.28.4", - "@dmsnell/diff-match-patch": "^1.1.0", "@googleapis/drive": "^19.2.0", "@sanity/diff-match-patch": "^3.2.0", "@vitejs/plugin-react": "^5.1.2", @@ -27,7 +25,6 @@ "cors": "^2.8.5", "create-react-class": "^15.7.0", "dedent": "^1.7.1", - "expr-eval": "^2.0.2", "express": "^5.1.0", "express-async-handler": "^1.2.0", "express-static-gzip": "3.0.0", @@ -58,14 +55,11 @@ "react-dom": "^18.3.1", "react-frame-component": "^4.1.3", "react-router": "^7.9.6", - "romans": "^3.1.0", "sanitize-filename": "1.6.3", "superagent": "^10.2.1", - "vite": "^7.3.1", - "written-number": "^0.11.1" + "vite": "^7.3.1" }, "devDependencies": { - "@stylistic/stylelint-plugin": "^4.0.0", "babel-jest": "^30.2.0", "babel-plugin-transform-import-meta": "^2.3.3", "eslint": "^9.39.1", @@ -76,10 +70,7 @@ "jest-expect-message": "^1.1.3", "jsdom": "^27.4.0", "jsdom-global": "^3.0.2", - "postcss-less": "^6.0.0", "stylelint": "^16.25.0", - "stylelint-config-recess-order": "^7.3.0", - "stylelint-config-recommended": "^17.0.0", "supertest": "^7.1.4" }, "engines": { @@ -1900,15 +1891,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", - "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/template": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", @@ -2204,12 +2186,6 @@ "postcss-selector-parser": "^7.0.0" } }, - "node_modules/@dmsnell/diff-match-patch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@dmsnell/diff-match-patch/-/diff-match-patch-1.1.0.tgz", - "integrity": "sha512-yejLPmM5pjsGvxS9gXablUSbInW7H976c/FJ4iQxWIm7/38xBySRemTPDe34lhg1gVLbJntX0+sH0jYfU+PN9A==", - "license": "Apache-2.0" - }, "node_modules/@dual-bundle/import-meta-resolve": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz", @@ -3844,28 +3820,6 @@ "@sinonjs/commons": "^3.0.1" } }, - "node_modules/@stylistic/stylelint-plugin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-4.0.1.tgz", - "integrity": "sha512-jKZSZr/S/NehfgayNJI3O/JEq+W5lSeHUJNvdOebRPNFP2ZylTbAx/p5qR8scQFpiVzy1VQM9R+G0kIB62r1Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3", - "postcss": "^8.5.6", - "postcss-selector-parser": "^7.1.0", - "postcss-value-parser": "^4.2.0", - "style-search": "^0.1.0" - }, - "engines": { - "node": "^18.12 || >=20.9" - }, - "peerDependencies": { - "stylelint": "^16.22.0" - } - }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -9883,21 +9837,6 @@ "node": ">=12" } }, - "node_modules/mongoose/node_modules/gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/mongoose/node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -10757,7 +10696,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -10767,19 +10705,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-less": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-6.0.0.tgz", - "integrity": "sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "postcss": "^8.3.5" - } - }, "node_modules/postcss-resolve-nested-selector": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", @@ -10829,16 +10754,6 @@ "node": ">=4" } }, - "node_modules/postcss-sorting": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-9.1.0.tgz", - "integrity": "sha512-Mn8KJ45HNNG6JBpBizXcyf6LqY/qyqetGcou/nprDnFwBFBLGj0j/sNKV2lj2KMOVOwdXu14aEzqJv8CIV6e8g==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "postcss": "^8.4.20" - } - }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -12141,13 +12056,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", - "dev": true, - "license": "ISC" - }, "node_modules/stylelint": { "version": "16.26.1", "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.26.1.tgz", @@ -12164,7 +12072,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-syntax-patches-for-csstree": "^1.0.19", @@ -12213,58 +12120,6 @@ "node": ">=18.12.0" } }, - "node_modules/stylelint-config-recess-order": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recess-order/-/stylelint-config-recess-order-7.6.0.tgz", - "integrity": "sha512-c3LXX4a8UEtrMD/KigK4I7LFexbM2p/eSTqnix5dmmvydEqX3dzrRt981h8giSEhA51vxdCEefQc3umH60i2bA==", - "dev": true, - "license": "ISC", - "peerDependencies": { - "stylelint": "^16.18.0 || ^17.0.0", - "stylelint-order": "^7.0.0" - } - }, - "node_modules/stylelint-config-recommended": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-17.0.0.tgz", - "integrity": "sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, - { - "type": "github", - "url": "https://github.com/sponsors/stylelint" - } - ], - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "stylelint": "^16.23.0" - } - }, - "node_modules/stylelint-order": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-7.0.1.tgz", - "integrity": "sha512-GWPei1zBVDDjxM+/BmcSCiOcHNd8rSqW6FUZtqQGlTRpD0Z5nSzspzWD8rtKif5KPdzUG68DApKEV/y/I9VbTw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "postcss": "^8.5.6", - "postcss-sorting": "^9.1.0" - }, - "engines": { - "node": ">=20.19.0" - }, - "peerDependencies": { - "stylelint": "^16.18.0 || ^17.0.0" - } - }, "node_modules/stylelint/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", diff --git a/package.json b/package.json index ebfb33fad..7dc66afee 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,6 @@ "build": "vite build", "preview": "vite preview", "compileAssets": "node scripts/compileAssets.js --dev", - "lint": "eslint --fix", "lint:dry": "eslint", "stylelint": "stylelint --fix **/*.{less}", @@ -92,8 +91,6 @@ "@babel/plugin-transform-runtime": "^7.28.3", "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.28.5", - "@babel/runtime": "^7.28.4", - "@dmsnell/diff-match-patch": "^1.1.0", "@googleapis/drive": "^19.2.0", "@sanity/diff-match-patch": "^3.2.0", "@vitejs/plugin-react": "^5.1.2", @@ -105,7 +102,6 @@ "cors": "^2.8.5", "create-react-class": "^15.7.0", "dedent": "^1.7.1", - "expr-eval": "^2.0.2", "express": "^5.1.0", "express-async-handler": "^1.2.0", "express-static-gzip": "3.0.0", @@ -136,14 +132,11 @@ "react-dom": "^18.3.1", "react-frame-component": "^4.1.3", "react-router": "^7.9.6", - "romans": "^3.1.0", "sanitize-filename": "1.6.3", "superagent": "^10.2.1", - "vite": "^7.3.1", - "written-number": "^0.11.1" + "vite": "^7.3.1" }, "devDependencies": { - "@stylistic/stylelint-plugin": "^4.0.0", "babel-jest": "^30.2.0", "babel-plugin-transform-import-meta": "^2.3.3", "eslint": "^9.39.1", @@ -154,10 +147,7 @@ "jest-expect-message": "^1.1.3", "jsdom": "^27.4.0", "jsdom-global": "^3.0.2", - "postcss-less": "^6.0.0", "stylelint": "^16.25.0", - "stylelint-config-recess-order": "^7.3.0", - "stylelint-config-recommended": "^17.0.0", "supertest": "^7.1.4" } } From 231e38af571526af199f369f85279a7c1dedfc47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 00:43:32 +0100 Subject: [PATCH 34/76] proper props --- client/homebrew/homebrew.jsx | 2 -- vite.config.js | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index a9be3e879..9ab69074b 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -40,8 +40,6 @@ const Homebrew = (props)=>{ brews } = props; - console.log('props: ', props); - const backgroundObject = ()=>{ if(config?.deployment || (config?.local && config?.development)) { const bgText = config?.deployment || 'Local'; diff --git a/vite.config.js b/vite.config.js index c23bbba9b..8ff255cd7 100644 --- a/vite.config.js +++ b/vite.config.js @@ -18,7 +18,7 @@ export default defineConfig({ }, }, define: { - global: "window", + global: "window.__INITIAL_PROPS__", }, server: { port: 8000, From 266de1c1c21268562abf65f67b87f8da07b8965b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 00:47:31 +0100 Subject: [PATCH 35/76] package-lock sync --- package-lock.json | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c39f950cb..86fd111fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2805,9 +2805,9 @@ } }, "node_modules/@exodus/bytes": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.10.0.tgz", - "integrity": "sha512-tf8YdcbirXdPnJ+Nd4UN1EXnz+IP2DI45YVEr3vvzcVTOyrApkmIB4zvOQVd3XPr7RXnfBtAx+PXImXOIU0Ajg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.11.0.tgz", + "integrity": "sha512-wO3vd8nsEHdumsXrjGO/v4p6irbg7hy9kvIeR6i2AwylZSk4HJdWgL0FNaVquW1+AweJcdvU1IEpuIWk/WaPnA==", "dev": true, "license": "MIT", "engines": { @@ -9837,6 +9837,21 @@ "node": ">=12" } }, + "node_modules/mongoose/node_modules/gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/mongoose/node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", From 15183d293a4c475fd544e5a814b3af8b3c4f29dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 01:01:10 +0100 Subject: [PATCH 36/76] bring back babel to fix tests --- package-lock.json | 25 ++++++++++--------------- package.json | 1 + 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 86fd111fa..dc72f8981 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@babel/plugin-transform-runtime": "^7.28.3", "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.28.5", + "@babel/runtime": "^7.28.6", "@googleapis/drive": "^19.2.0", "@sanity/diff-match-patch": "^3.2.0", "@vitejs/plugin-react": "^5.1.2", @@ -1891,6 +1892,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", @@ -9837,21 +9847,6 @@ "node": ">=12" } }, - "node_modules/mongoose/node_modules/gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/mongoose/node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", diff --git a/package.json b/package.json index 7dc66afee..8073556a4 100644 --- a/package.json +++ b/package.json @@ -91,6 +91,7 @@ "@babel/plugin-transform-runtime": "^7.28.3", "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.28.5", + "@babel/runtime": "^7.28.6", "@googleapis/drive": "^19.2.0", "@sanity/diff-match-patch": "^3.2.0", "@vitejs/plugin-react": "^5.1.2", From 2937fd08dc2bc7c06a4d03e9dff10f42fd1b0dbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 01:05:04 +0100 Subject: [PATCH 37/76] lock sync --- package-lock.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/package-lock.json b/package-lock.json index dc72f8981..dcbc2decc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9847,6 +9847,21 @@ "node": ">=12" } }, + "node_modules/mongoose/node_modules/gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/mongoose/node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", From f6011b63dbe87f8289172c29817bf2692abb67b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 11:37:47 +0100 Subject: [PATCH 38/76] fix brewrenderer less toolbar --- client/homebrew/brewRenderer/brewRenderer.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index a600a4768..786f7efce 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -1,5 +1,6 @@ /*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ import brewRendererStylesUrl from './brewRenderer.less?url'; +import brewRendererStylesUrl from './brewRenderer.less'; import React, { useState, useRef, useMemo, useEffect } from 'react'; import _ from 'lodash'; From 75c65d74a6320875455f83b20daa4c06323cd2c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 11:40:43 +0100 Subject: [PATCH 39/76] lock sync --- package-lock.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index dcbc2decc..872b2a6bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3464,9 +3464,9 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.53", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", - "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", + "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { @@ -4429,15 +4429,15 @@ ] }, "node_modules/@vitejs/plugin-react": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", - "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.3.tgz", + "integrity": "sha512-NVUnA6gQCl8jfoYqKqQU5Clv0aPw14KkZYCsX6T9Lfu9slI0LOU10OTwFHS/WmptsMMpshNd/1tuWsHQ2Uk+cg==", "license": "MIT", "dependencies": { - "@babel/core": "^7.28.5", + "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.53", + "@rolldown/pluginutils": "1.0.0-rc.2", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, @@ -5198,9 +5198,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001766", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", - "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", + "version": "1.0.30001767", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz", + "integrity": "sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==", "funding": [ { "type": "opencollective", From 3f26e0fcbc04aff5131023234e124ce59691ffae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 11:41:04 +0100 Subject: [PATCH 40/76] fix import again --- client/homebrew/brewRenderer/brewRenderer.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 786f7efce..f8c5d564a 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -1,6 +1,6 @@ /*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ import brewRendererStylesUrl from './brewRenderer.less?url'; -import brewRendererStylesUrl from './brewRenderer.less'; +import './brewRenderer.less'; import React, { useState, useRef, useMemo, useEffect } from 'react'; import _ from 'lodash'; From 79f2938b534d720cd745da2f246d66c63a351455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 12:07:01 +0100 Subject: [PATCH 41/76] fix edit route --- client/homebrew/pages/editPage/editPage.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 63b7ac8e0..22d7d2d4f 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -78,7 +78,7 @@ const EditPage = (props)=>{ const lastSavedBrew = useRef(_.cloneDeep(props.brew)); const saveTimeout = useRef(null); const warnUnsavedTimeout = useRef(null); - const trySaveRef = useRef(trySave); // CTRL+S listener lives outside React and needs ref to use trySave with latest copy of brew + const trySaveRef = useRef(null); // CTRL+S listener lives outside React and needs ref to use trySave with latest copy of brew const unsavedChangesRef = useRef(unsavedChanges); // Similarly, onBeforeUnload lives outside React and needs ref to unsavedChanges useEffect(()=>{ From b936546392254fa070f57c18ed4b607bfbb8072c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 12:07:12 +0100 Subject: [PATCH 42/76] import all correct css in the frame --- client/homebrew/brewRenderer/brewRenderer.jsx | 4 ++++ client/homebrew/brewRenderer/brewRenderer.less | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index f8c5d564a..9158dea25 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -1,5 +1,6 @@ /*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ import brewRendererStylesUrl from './brewRenderer.less?url'; +import headerNavStylesUrl from './headerNav/headerNav.less?url'; import './brewRenderer.less'; import React, { useState, useRef, useMemo, useEffect } from 'react'; import _ from 'lodash'; @@ -18,6 +19,7 @@ import { printCurrentBrew } from '../../../shared/helpers.js'; import HeaderNav from './headerNav/headerNav.jsx'; import safeHTML from './safeHTML.js'; +console.log(HeaderNav); const PAGEBREAK_REGEX_V3 = /^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/m; const PAGEBREAK_REGEX_LEGACY = /\\page(?:break)?/m; @@ -31,6 +33,7 @@ const INITIAL_CONTENT = dedent` +
`; @@ -340,6 +343,7 @@ const BrewRenderer = (props)=>{ }
+ {console.log(headerState)} {headerState ? : <>} diff --git a/client/homebrew/brewRenderer/brewRenderer.less b/client/homebrew/brewRenderer/brewRenderer.less index bb4fe69c5..1f802aa85 100644 --- a/client/homebrew/brewRenderer/brewRenderer.less +++ b/client/homebrew/brewRenderer/brewRenderer.less @@ -1,4 +1,4 @@ -@import (multiple, less) 'shared/naturalcrit/styles/reset.less'; +@import 'shared/naturalcrit/styles/core.less'; .brewRenderer { height : 100vh; From 74733a4cca14f457536511433d64f6390de1bef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 16:55:39 +0100 Subject: [PATCH 43/76] bring back og meta tags --- index.html | 1 - server/app.js | 11 ++++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 306b4d8dc..5870aef2c 100644 --- a/index.html +++ b/index.html @@ -11,7 +11,6 @@ type="text/css" /> - The Homebrewery - NaturalCrit diff --git a/server/app.js b/server/app.js index 48f82f634..1cb5f4169 100644 --- a/server/app.js +++ b/server/app.js @@ -576,6 +576,15 @@ export default async function createApp(vite) { userThemes : req.userThemes }; + const ogTags = []; + const ogMeta = req.ogMeta ?? {}; + Object.entries(ogMeta).forEach(([key, value])=>{ + if(!value) return; + const tag = ``; + ogTags.push(tag); + }); + const ogMetaTags = ogTags.join('\n'); + const htmlPath = isProd ? path.resolve('build', 'index.html') : path.resolve('index.html'); let html = fs.readFileSync(htmlPath, 'utf-8'); @@ -585,7 +594,7 @@ export default async function createApp(vite) { html = html.replace( '', - `\n` + `\n\n${ogMetaTags}` ); return html; From 09171acc6e6f8c6cb87316ecb88ee7a013416b48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Feb 2026 17:17:49 +0100 Subject: [PATCH 44/76] bring admin.jsx --- client/admin/main.jsx | 6 ++++ client/template.js | 66 ------------------------------------------- index.html | 40 +++++++++++++++----------- server.js | 1 - server/admin.api.js | 46 +++++++++++++++++++++--------- server/app.js | 3 +- 6 files changed, 62 insertions(+), 100 deletions(-) delete mode 100644 client/template.js diff --git a/client/admin/main.jsx b/client/admin/main.jsx index e69de29bb..bd380789a 100644 --- a/client/admin/main.jsx +++ b/client/admin/main.jsx @@ -0,0 +1,6 @@ +import { createRoot } from "react-dom/client"; +import Admin from "./admin.jsx"; + +const props = window.__INITIAL_PROPS__ || {}; + +createRoot(document.getElementById("reactRoot")).render(); diff --git a/client/template.js b/client/template.js deleted file mode 100644 index 62f13bf88..000000000 --- a/client/template.js +++ /dev/null @@ -1,66 +0,0 @@ -import fs from "fs"; - -const isProd = process.env.NODE_ENV === "production"; - -const template = async function ({ vite, url }, name, title = "", props = {}) { - const ogTags = []; - const ogMeta = props.ogMeta ?? {}; - - Object.entries(ogMeta).forEach(([key, value]) => { - if (!value) return; - ogTags.push(``); - }); - - const ogMetaTags = ogTags.join("\n"); - - // ---------------- - // PROD - // ---------------- - if (isProd) { - const ssrModule = await import(`../build/entry-server-${name}/bundle.js`); - - return ` - - - - - - - ${ogMetaTags} - - ${title.length ? `${title} - The Homebrewery` : "The Homebrewery - NaturalCrit"} - - -
${ssrModule.default(props)}
- - - -`; - } - - // ---------------- - // DEV - // ---------------- - const { default: render } = await vite.ssrLoadModule(`/client/entry-server-${name}.jsx`); - - let html = ` - - - - ${ogMetaTags} - ${title.length ? `${title} - The Homebrewery` : "The Homebrewery - NaturalCrit"} - - -
${render(props)}
- - - - - - -`; - - return vite.transformIndexHtml(url, html); -}; - -export default template; diff --git a/index.html b/index.html index 5870aef2c..5ee864b28 100644 --- a/index.html +++ b/index.html @@ -1,23 +1,29 @@ - - - - - + + + + + - - The Homebrewery - NaturalCrit - + + The Homebrewery - NaturalCrit + - -
+ +
- - + + diff --git a/server.js b/server.js index 172da0fe2..cd44c68cb 100644 --- a/server.js +++ b/server.js @@ -13,7 +13,6 @@ async function start() { server: { middlewareMode: true }, appType: "custom", }); - } await DB.connect(config).catch((err) => { diff --git a/server/admin.api.js b/server/admin.api.js index a3d7622f1..93e0036d1 100644 --- a/server/admin.api.js +++ b/server/admin.api.js @@ -4,18 +4,23 @@ import { model as NotificationModel } from './notifications.model.js'; import express from 'express'; import Moment from 'moment'; import zlib from 'zlib'; -import templateFn from '../client/template.js'; +import config from './config.js'; +import path from 'path'; +import fs from 'fs-extra'; + +const nodeEnv = config.get('node_env'); +const isProd = nodeEnv === 'production'; import HomebrewAPI from './homebrew.api.js'; import asyncHandler from 'express-async-handler'; import { splitTextStyleAndMetadata } from '../shared/helpers.js'; -const router = express.Router(); - - process.env.ADMIN_USER = process.env.ADMIN_USER || 'admin'; process.env.ADMIN_PASS = process.env.ADMIN_PASS || 'password3'; +export default function createAdminApi(vite) { + const router = express.Router(); + const mw = { adminOnly : (req, res, next)=>{ if(!req.get('authorization')){ @@ -371,15 +376,28 @@ router.delete('/admin/notification/delete/:id', mw.adminOnly, async (req, res, n } }); -router.get('/admin', mw.adminOnly, (req, res)=>{ - templateFn('admin', { +router.get('/admin', mw.adminOnly, asyncHandler(async (req, res) => { + const props = { url : req.originalUrl - }) - .then((page)=>res.send(page)) - .catch((err)=>{ - console.log(err); - res.sendStatus(500); - }); -}); + }; + + const htmlPath = isProd + ? path.resolve('build', 'index.html') + : path.resolve('index.html'); + + let html = fs.readFileSync(htmlPath, 'utf-8'); + + if (!isProd && vite?.transformIndexHtml) { + html = await vite.transformIndexHtml(req.originalUrl, html); + } + + res.send(html.replace( + '', + `\n` + )); +})); + + + return router; +} -export default router; diff --git a/server/app.js b/server/app.js index 1cb5f4169..07fc3ba9c 100644 --- a/server/app.js +++ b/server/app.js @@ -44,7 +44,6 @@ export default async function createApp(vite) { const isProd = nodeEnv === 'production'; const isLocalEnvironment = config.get('local_environments').includes(nodeEnv); - const sanitizeBrew = (brew, accessType)=>{ brew._id = undefined; brew.__v = undefined; @@ -114,7 +113,7 @@ export default async function createApp(vite) { }); app.use(homebrewApi); - app.use(adminApi); + app.use(adminApi(vite)); app.use(vaultApi); const welcomeText = fs.readFileSync('./client/homebrew/pages/homePage/welcome_msg.md', 'utf8'); From 34e3c6725424881f711ab6107abb05271267a399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 3 Feb 2026 22:54:20 +0100 Subject: [PATCH 45/76] remove log --- client/homebrew/brewRenderer/brewRenderer.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 9158dea25..27dba4f82 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -19,7 +19,6 @@ import { printCurrentBrew } from '../../../shared/helpers.js'; import HeaderNav from './headerNav/headerNav.jsx'; import safeHTML from './safeHTML.js'; -console.log(HeaderNav); const PAGEBREAK_REGEX_V3 = /^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/m; const PAGEBREAK_REGEX_LEGACY = /\\page(?:break)?/m; @@ -343,7 +342,6 @@ const BrewRenderer = (props)=>{ } - {console.log(headerState)} {headerState ? : <>} From 7e09f7031c1370454fea023abb506780853310c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 3 Feb 2026 22:54:28 +0100 Subject: [PATCH 46/76] change imports in tests --- tests/markdown/basic.test.js | 2 +- tests/markdown/definition-lists.test.js | 2 +- tests/markdown/emojis.test.js | 2 +- tests/markdown/hard-breaks.test.js | 2 +- tests/markdown/mustache-syntax.test.js | 2 +- tests/markdown/non-breaking-spaces.test.js | 2 +- tests/markdown/paragraph-justification.test.js | 2 +- tests/markdown/variables.test.js | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/markdown/basic.test.js b/tests/markdown/basic.test.js index b74e93d85..f2405d0d8 100644 --- a/tests/markdown/basic.test.js +++ b/tests/markdown/basic.test.js @@ -1,6 +1,6 @@ -import Markdown from './shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; test('Processes the markdown within an HTML block if its just a class wrapper', function() { const source = '
*Bold text*
'; diff --git a/tests/markdown/definition-lists.test.js b/tests/markdown/definition-lists.test.js index ee7d6da87..35ad12ef7 100644 --- a/tests/markdown/definition-lists.test.js +++ b/tests/markdown/definition-lists.test.js @@ -1,6 +1,6 @@ -import Markdown from './shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; describe('Inline Definition Lists', ()=>{ test('No Term 1 Definition', function() { diff --git a/tests/markdown/emojis.test.js b/tests/markdown/emojis.test.js index 41cd844a4..072de10f9 100644 --- a/tests/markdown/emojis.test.js +++ b/tests/markdown/emojis.test.js @@ -1,4 +1,4 @@ -import Markdown from './shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; import dedent from 'dedent'; // Marked.js adds line returns after closing tags on some default tokens. diff --git a/tests/markdown/hard-breaks.test.js b/tests/markdown/hard-breaks.test.js index 0f48ca9ad..1f48f8f1e 100644 --- a/tests/markdown/hard-breaks.test.js +++ b/tests/markdown/hard-breaks.test.js @@ -1,6 +1,6 @@ -import Markdown from './shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; describe('Hard Breaks', ()=>{ test('Single Break', function() { diff --git a/tests/markdown/mustache-syntax.test.js b/tests/markdown/mustache-syntax.test.js index 7c82db3f2..95ca2f58d 100644 --- a/tests/markdown/mustache-syntax.test.js +++ b/tests/markdown/mustache-syntax.test.js @@ -1,7 +1,7 @@ /* eslint-disable max-lines */ import dedent from 'dedent'; -import Markdown from './shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; // Marked.js adds line returns after closing tags on some default tokens. // This removes those line returns for comparison sake. diff --git a/tests/markdown/non-breaking-spaces.test.js b/tests/markdown/non-breaking-spaces.test.js index d541e24b2..731d0546e 100644 --- a/tests/markdown/non-breaking-spaces.test.js +++ b/tests/markdown/non-breaking-spaces.test.js @@ -1,6 +1,6 @@ -import Markdown from './shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; describe('Non-Breaking Spaces Interactions', ()=>{ test('I am actually a single-line definition list!', function() { diff --git a/tests/markdown/paragraph-justification.test.js b/tests/markdown/paragraph-justification.test.js index eca3838a9..6ce454623 100644 --- a/tests/markdown/paragraph-justification.test.js +++ b/tests/markdown/paragraph-justification.test.js @@ -1,6 +1,6 @@ -import Markdown from './shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; describe('Justification', ()=>{ test('Left Justify', function() { diff --git a/tests/markdown/variables.test.js b/tests/markdown/variables.test.js index cb2b40495..884553703 100644 --- a/tests/markdown/variables.test.js +++ b/tests/markdown/variables.test.js @@ -1,7 +1,7 @@ /* eslint-disable max-lines */ import dedent from 'dedent'; -import Markdown from './shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; // Marked.js adds line returns after closing tags on some default tokens. // This removes those line returns for comparison sake. From c89f17ebbf7480e21b92ea76cb626ec6ad084e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 24 Feb 2026 20:53:05 +0100 Subject: [PATCH 47/76] remake lock --- package-lock.json | 496 ++++++++++++++++++++++++---------------------- 1 file changed, 264 insertions(+), 232 deletions(-) diff --git a/package-lock.json b/package-lock.json index 18bdc0014..fc656ca8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,17 +88,20 @@ "license": "MIT" }, "node_modules/@asamuzakjp/css-color": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.2.tgz", - "integrity": "sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.0.1.tgz", + "integrity": "sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==", "dev": true, "license": "MIT", "dependencies": { - "@csstools/css-calc": "^3.0.0", - "@csstools/css-color-parser": "^4.0.1", + "@csstools/css-calc": "^3.1.1", + "@csstools/css-color-parser": "^4.0.2", "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0", - "lru-cache": "^11.2.5" + "lru-cache": "^11.2.6" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { @@ -2030,9 +2033,9 @@ } }, "node_modules/@csstools/color-helpers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.1.tgz", - "integrity": "sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz", + "integrity": "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==", "dev": true, "funding": [ { @@ -2074,9 +2077,9 @@ } }, "node_modules/@csstools/css-color-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.1.tgz", - "integrity": "sha512-vYwO15eRBEkeF6xjAno/KQ61HacNhfQuuU/eGwH67DplL0zD5ZixUa563phQvUelA07yDczIXdtmYojCphKJcw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.2.tgz", + "integrity": "sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==", "dev": true, "funding": [ { @@ -2090,8 +2093,8 @@ ], "license": "MIT", "dependencies": { - "@csstools/color-helpers": "^6.0.1", - "@csstools/css-calc": "^3.0.0" + "@csstools/color-helpers": "^6.0.2", + "@csstools/css-calc": "^3.1.1" }, "engines": { "node": ">=20.19.0" @@ -2126,9 +2129,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.0.27", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.27.tgz", - "integrity": "sha512-sxP33Jwg1bviSUXAV43cVYdmjt2TLnLXNqCWl9xmxHawWVjGz/kEbdkr7F9pxJNBN2Mh+dq0crgItbW6tQvyow==", + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.28.tgz", + "integrity": "sha512-1NRf1CUBjnr3K7hu8BLxjQrKCxEe8FP/xmPTenAxCRZWVLbmGotkFvG9mfNpjA6k7Bw1bw4BilZq9cu19RA5pg==", "dev": true, "funding": [ { @@ -2737,20 +2740,20 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", - "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.4.tgz", + "integrity": "sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", + "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.1", - "minimatch": "^3.1.2", + "minimatch": "^3.1.3", "strip-json-comments": "^3.1.1" }, "engines": { @@ -2774,9 +2777,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", - "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "version": "9.39.3", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.3.tgz", + "integrity": "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==", "dev": true, "license": "MIT", "engines": { @@ -3466,9 +3469,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", - "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", "cpu": [ "arm" ], @@ -3479,9 +3482,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", - "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", "cpu": [ "arm64" ], @@ -3492,9 +3495,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", - "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", "cpu": [ "arm64" ], @@ -3505,9 +3508,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", - "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", "cpu": [ "x64" ], @@ -3518,9 +3521,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", - "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", "cpu": [ "arm64" ], @@ -3531,9 +3534,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", - "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", "cpu": [ "x64" ], @@ -3544,9 +3547,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", - "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", "cpu": [ "arm" ], @@ -3557,9 +3560,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", - "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", "cpu": [ "arm" ], @@ -3570,9 +3573,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", - "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", "cpu": [ "arm64" ], @@ -3583,9 +3586,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", - "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", "cpu": [ "arm64" ], @@ -3596,9 +3599,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", - "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", "cpu": [ "loong64" ], @@ -3609,9 +3612,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", - "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", "cpu": [ "loong64" ], @@ -3622,9 +3625,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", - "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", "cpu": [ "ppc64" ], @@ -3635,9 +3638,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", - "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", "cpu": [ "ppc64" ], @@ -3648,9 +3651,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", - "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", "cpu": [ "riscv64" ], @@ -3661,9 +3664,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", - "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", "cpu": [ "riscv64" ], @@ -3674,9 +3677,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", - "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", "cpu": [ "s390x" ], @@ -3687,9 +3690,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", - "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", "cpu": [ "x64" ], @@ -3700,9 +3703,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", - "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", "cpu": [ "x64" ], @@ -3713,9 +3716,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", - "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", "cpu": [ "x64" ], @@ -3726,9 +3729,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", - "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", "cpu": [ "arm64" ], @@ -3739,9 +3742,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", - "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", "cpu": [ "arm64" ], @@ -3752,9 +3755,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", - "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", "cpu": [ "ia32" ], @@ -3765,9 +3768,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", - "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", "cpu": [ "x64" ], @@ -3778,9 +3781,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", - "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", "cpu": [ "x64" ], @@ -3919,14 +3922,14 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", - "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz", + "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", "devOptional": true, "license": "MIT", "peer": true, "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~7.18.0" } }, "node_modules/@types/stack-utils": { @@ -3969,14 +3972,14 @@ "license": "MIT" }, "node_modules/@typescript-eslint/project-service": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz", - "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz", + "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.56.0", - "@typescript-eslint/types": "^8.56.0", + "@typescript-eslint/tsconfig-utils": "^8.56.1", + "@typescript-eslint/types": "^8.56.1", "debug": "^4.4.3" }, "engines": { @@ -3991,14 +3994,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz", - "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", + "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.56.0", - "@typescript-eslint/visitor-keys": "8.56.0" + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4009,9 +4012,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz", - "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz", + "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==", "dev": true, "license": "MIT", "engines": { @@ -4026,9 +4029,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz", - "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", "dev": true, "license": "MIT", "engines": { @@ -4040,18 +4043,18 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz", - "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", + "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.56.0", - "@typescript-eslint/tsconfig-utils": "8.56.0", - "@typescript-eslint/types": "8.56.0", - "@typescript-eslint/visitor-keys": "8.56.0", + "@typescript-eslint/project-service": "8.56.1", + "@typescript-eslint/tsconfig-utils": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3", - "minimatch": "^9.0.5", + "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" @@ -4067,27 +4070,40 @@ "typescript": ">=4.8.4 <6.0.0" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz", + "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -4107,16 +4123,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz", - "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz", + "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.56.0", - "@typescript-eslint/types": "8.56.0", - "@typescript-eslint/typescript-estree": "8.56.0" + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4131,13 +4147,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz", - "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", + "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/types": "8.56.1", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -4149,9 +4165,9 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz", - "integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4471,9 +4487,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", "peer": true, @@ -4504,9 +4520,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -4941,6 +4957,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, "license": "MIT" }, "node_modules/base64-js": { @@ -4964,12 +4981,15 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.19", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", - "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/bidi-js": { @@ -5207,9 +5227,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001770", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz", - "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==", + "version": "1.0.30001774", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz", + "integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==", "funding": [ { "type": "opencollective", @@ -5641,16 +5661,16 @@ } }, "node_modules/cssstyle": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.0.1.tgz", - "integrity": "sha512-IoJs7La+oFp/AB033wBStxNOJt4+9hHMxsXUPANcoXL2b3W4DZKghlJ2cI/eyeRZIQ9ysvYEorVhjrcYctWbog==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.1.0.tgz", + "integrity": "sha512-Ml4fP2UT2K3CUBQnVlbdV/8aFDdlY69E+YnwJM+3VUWl08S3J8c8aRuJqCkD9Py8DHZ7zNNvsfKl8psocHZEFg==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^4.1.2", - "@csstools/css-syntax-patches-for-csstree": "^1.0.26", + "@asamuzakjp/css-color": "^5.0.0", + "@csstools/css-syntax-patches-for-csstree": "^1.0.28", "css-tree": "^3.1.0", - "lru-cache": "^11.2.5" + "lru-cache": "^11.2.6" }, "engines": { "node": ">=20" @@ -5934,9 +5954,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.286", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", - "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "version": "1.5.302", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz", + "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==", "license": "ISC" }, "node_modules/emittery": { @@ -6256,9 +6276,9 @@ } }, "node_modules/eslint": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", - "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "version": "9.39.3", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.3.tgz", + "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==", "dev": true, "license": "MIT", "peer": true, @@ -6269,7 +6289,7 @@ "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.2", + "@eslint/js": "9.39.3", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -7289,22 +7309,34 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.6.tgz", + "integrity": "sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -7579,9 +7611,9 @@ "license": "MIT" }, "node_modules/hashery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.4.0.tgz", - "integrity": "sha512-Wn2i1In6XFxl8Az55kkgnFRiAlIAushzh26PTjL2AKtQcEfXrcLa7Hn5QOWGZEf3LU057P9TwwZjFyxfS1VuvQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.0.tgz", + "integrity": "sha512-nhQ6ExaOIqti2FDWoEMWARUqIKyjr2VcZzXShrI+A3zpeiuPWzx6iPftt44LhP74E5sW36B75N6VHbvRtpvO6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9733,9 +9765,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.3.tgz", + "integrity": "sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==", "dev": true, "license": "ISC", "dependencies": { @@ -9746,10 +9778,10 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -9811,9 +9843,9 @@ } }, "node_modules/mongoose": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-9.2.1.tgz", - "integrity": "sha512-fmNLwgct5km7iL1MqvTMncarR1E1TIw2lmc9A4UoDVdS7AQe95K+DnRK0qATkSUdwUC9V/5wlDcqnkQQjbSRkA==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-9.2.2.tgz", + "integrity": "sha512-e06XdPPlH/L9aEq4vcnqIz5AxFFdfhlqrmymYDO7fZwnqwVp/u8pAH/cCEvvpXg0VlV0Tt5qwu6RUk8lhu6ifg==", "license": "MIT", "dependencies": { "kareem": "3.2.0", @@ -10975,9 +11007,9 @@ } }, "node_modules/react-router": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz", - "integrity": "sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==", + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.1.tgz", + "integrity": "sha512-td+xP4X2/6BJvZoX6xw++A2DdEi++YypA69bJUV5oVvqf6/9/9nNlD70YO1e9d3MyamJEBQFEzk6mbfDYbqrSA==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -11195,9 +11227,9 @@ } }, "node_modules/rollup": { - "version": "4.57.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", - "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -11210,31 +11242,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.57.1", - "@rollup/rollup-android-arm64": "4.57.1", - "@rollup/rollup-darwin-arm64": "4.57.1", - "@rollup/rollup-darwin-x64": "4.57.1", - "@rollup/rollup-freebsd-arm64": "4.57.1", - "@rollup/rollup-freebsd-x64": "4.57.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", - "@rollup/rollup-linux-arm-musleabihf": "4.57.1", - "@rollup/rollup-linux-arm64-gnu": "4.57.1", - "@rollup/rollup-linux-arm64-musl": "4.57.1", - "@rollup/rollup-linux-loong64-gnu": "4.57.1", - "@rollup/rollup-linux-loong64-musl": "4.57.1", - "@rollup/rollup-linux-ppc64-gnu": "4.57.1", - "@rollup/rollup-linux-ppc64-musl": "4.57.1", - "@rollup/rollup-linux-riscv64-gnu": "4.57.1", - "@rollup/rollup-linux-riscv64-musl": "4.57.1", - "@rollup/rollup-linux-s390x-gnu": "4.57.1", - "@rollup/rollup-linux-x64-gnu": "4.57.1", - "@rollup/rollup-linux-x64-musl": "4.57.1", - "@rollup/rollup-openbsd-x64": "4.57.1", - "@rollup/rollup-openharmony-arm64": "4.57.1", - "@rollup/rollup-win32-arm64-msvc": "4.57.1", - "@rollup/rollup-win32-ia32-msvc": "4.57.1", - "@rollup/rollup-win32-x64-gnu": "4.57.1", - "@rollup/rollup-win32-x64-msvc": "4.57.1", + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" } }, @@ -12812,9 +12844,9 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "devOptional": true, "license": "MIT" }, From 86a03fd0bfc184395997ae8ab17a1e329796dd60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 24 Feb 2026 21:51:34 +0100 Subject: [PATCH 48/76] this fixes the tests --- server.js | 3 +- server/admin.api.spec.js | 408 +++++++++++++++------------------------ 2 files changed, 156 insertions(+), 255 deletions(-) diff --git a/server.js b/server.js index cd44c68cb..1adae5e6e 100644 --- a/server.js +++ b/server.js @@ -4,11 +4,12 @@ import config from "./server/config.js"; import { createServer as createViteServer } from "vite"; const isProd = process.env.NODE_ENV === "production"; +const isDev = process.env.NODE_ENV === "development"; async function start() { let vite; - if (!isProd) { + if (isDev) { vite = await createViteServer({ server: { middlewareMode: true }, appType: "custom", diff --git a/server/admin.api.spec.js b/server/admin.api.spec.js index cb25dd67d..5a9fe0c11 100644 --- a/server/admin.api.spec.js +++ b/server/admin.api.spec.js @@ -1,42 +1,45 @@ /*eslint max-lines: ["warn", {"max": 1000, "skipBlankLines": true, "skipComments": true}]*/ import mongoose from 'mongoose'; import supertest from 'supertest'; -import HBApp from './app.js'; +import createApp from './app.js'; import { model as NotificationModel } from './notifications.model.js'; import { model as HomebrewModel } from './homebrew.model.js'; - -// Mimic https responses to avoid being redirected all the time -const app = supertest.agent(HBApp).set('X-Forwarded-Proto', 'https'); - +let app; +let request; let dbState; +beforeAll(async ()=>{ + app = await createApp(); + request = supertest.agent(app).set('X-Forwarded-Proto', 'https'); +}); + describe('Tests for admin api', ()=>{ beforeEach(()=>{ - // Mock DB ready (for dbCheck middleware) dbState = mongoose.connection.readyState; mongoose.connection.readyState = 1; }); afterEach(()=>{ - // Restore DB ready state mongoose.connection.readyState = dbState; - jest.resetAllMocks(); }); + afterAll(async ()=>{ + await mongoose.connection.close(); + }); + describe('Notifications', ()=>{ it('should return list of all notifications', async ()=>{ const testNotifications = ['a', 'b']; - jest.spyOn(NotificationModel, 'find') - .mockImplementationOnce(()=>{ + jest.spyOn(NotificationModel, 'find').mockImplementationOnce(()=>{ return { exec: jest.fn().mockResolvedValue(testNotifications) }; }); - const response = await app - .get('/admin/notification/all') - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); + const response = await request + .get('/admin/notification/all') + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); expect(response.status).toBe(200); expect(response.body).toEqual(testNotifications); @@ -56,18 +59,17 @@ describe('Tests for admin api', ()=>{ _id : expect.any(String), createdAt : expect.any(String), startAt : inputNotification.startAt, - stopAt : inputNotification.stopAt, + stopAt : inputNotification.stopAt }; - jest.spyOn(NotificationModel.prototype, 'save') - .mockImplementationOnce(function() { - return Promise.resolve(this); - }); + jest.spyOn(NotificationModel.prototype, 'save').mockImplementationOnce(function () { + return Promise.resolve(this); + }); - const response = await app - .post('/admin/notification/add') - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .send(inputNotification); + const response = await request + .post('/admin/notification/add') + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) + .send(inputNotification); expect(response.status).toBe(201); expect(response.body).toEqual(savedNotification); @@ -81,16 +83,14 @@ describe('Tests for admin api', ()=>{ stopAt : new Date().toISOString() }; - //Change 'save' function to just return itself instead of actually interacting with the database - jest.spyOn(NotificationModel.prototype, 'save') - .mockImplementationOnce(function() { - return Promise.resolve(this); - }); + jest.spyOn(NotificationModel.prototype, 'save').mockImplementationOnce(function () { + return Promise.resolve(this); + }); - const response = await app - .post('/admin/notification/add') - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .send(inputNotification); + const response = await request + .post('/admin/notification/add') + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) + .send(inputNotification); expect(response.status).toBe(500); expect(response.body).toEqual({ message: 'Dismiss key is required!' }); @@ -99,15 +99,15 @@ describe('Tests for admin api', ()=>{ it('should delete a notification based on its dismiss key', async ()=>{ const dismissKey = 'testKey'; - jest.spyOn(NotificationModel, 'findOneAndDelete') - .mockImplementationOnce((key)=>{ - return { exec: jest.fn().mockResolvedValue(key) }; - }); - const response = await app - .delete(`/admin/notification/delete/${dismissKey}`) - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); + jest.spyOn(NotificationModel, 'findOneAndDelete').mockImplementationOnce((key)=>{ + return { exec: jest.fn().mockResolvedValue(key) }; + }); - expect(NotificationModel.findOneAndDelete).toHaveBeenCalledWith({ 'dismissKey': 'testKey' }); + const response = await request + .delete(`/admin/notification/delete/${dismissKey}`) + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); + + expect(NotificationModel.findOneAndDelete).toHaveBeenCalledWith({ dismissKey: 'testKey' }); expect(response.status).toBe(200); expect(response.body).toEqual({ dismissKey: 'testKey' }); }); @@ -115,15 +115,15 @@ describe('Tests for admin api', ()=>{ it('should handle error deleting a notification that doesnt exist', async ()=>{ const dismissKey = 'testKey'; - jest.spyOn(NotificationModel, 'findOneAndDelete') - .mockImplementationOnce(()=>{ - return { exec: jest.fn().mockResolvedValue() }; - }); - const response = await app - .delete(`/admin/notification/delete/${dismissKey}`) - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); + jest.spyOn(NotificationModel, 'findOneAndDelete').mockImplementationOnce(()=>{ + return { exec: jest.fn().mockResolvedValue() }; + }); - expect(NotificationModel.findOneAndDelete).toHaveBeenCalledWith({ 'dismissKey': 'testKey' }); + const response = await request + .delete(`/admin/notification/delete/${dismissKey}`) + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); + + expect(NotificationModel.findOneAndDelete).toHaveBeenCalledWith({ dismissKey: 'testKey' }); expect(response.status).toBe(500); expect(response.body).toEqual({ message: 'Notification not found' }); }); @@ -132,30 +132,24 @@ describe('Tests for admin api', ()=>{ describe('Locks', ()=>{ describe('Count', ()=>{ it('Count of all locked documents', async ()=>{ - const testNumber = 16777216; // 8^8, because why not + const testNumber = 16777216; - jest.spyOn(HomebrewModel, 'countDocuments') - .mockImplementationOnce(()=>{ - return Promise.resolve(testNumber); - }); + jest.spyOn(HomebrewModel, 'countDocuments').mockImplementationOnce(()=>Promise.resolve(testNumber)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .get('/api/lock/count'); + const response = await request + .get('/api/lock/count') + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); expect(response.status).toBe(200); expect(response.body).toEqual({ count: testNumber }); }); it('Handle error while fetching count of locked documents', async ()=>{ - jest.spyOn(HomebrewModel, 'countDocuments') - .mockImplementationOnce(()=>{ - return Promise.reject(); - }); + jest.spyOn(HomebrewModel, 'countDocuments').mockImplementationOnce(()=>Promise.reject()); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .get('/api/lock/count'); + const response = await request + .get('/api/lock/count') + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); expect(response.status).toBe(500); expect(response.body).toEqual({ @@ -163,7 +157,7 @@ describe('Tests for admin api', ()=>{ message : 'Unable to get lock count', name : 'Lock Count Error', originalUrl : '/api/lock/count', - status : 500, + status : 500 }); }); }); @@ -172,28 +166,22 @@ describe('Tests for admin api', ()=>{ it('Get list of all locked documents', async ()=>{ const testLocks = ['a', 'b']; - jest.spyOn(HomebrewModel, 'aggregate') - .mockImplementationOnce(()=>{ - return Promise.resolve(testLocks); - }); + jest.spyOn(HomebrewModel, 'aggregate').mockImplementationOnce(()=>Promise.resolve(testLocks)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .get('/api/locks'); + const response = await request + .get('/api/locks') + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); expect(response.status).toBe(200); expect(response.body).toEqual({ lockedDocuments: testLocks }); }); it('Handle error while fetching list of all locked documents', async ()=>{ - jest.spyOn(HomebrewModel, 'aggregate') - .mockImplementationOnce(()=>{ - return Promise.reject(); - }); + jest.spyOn(HomebrewModel, 'aggregate').mockImplementationOnce(()=>Promise.reject()); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .get('/api/locks'); + const response = await request + .get('/api/locks') + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); expect(response.status).toBe(500); expect(response.body).toEqual({ @@ -208,28 +196,22 @@ describe('Tests for admin api', ()=>{ it('Get list of all locked documents with pending review requests', async ()=>{ const testLocks = ['a', 'b']; - jest.spyOn(HomebrewModel, 'aggregate') - .mockImplementationOnce(()=>{ - return Promise.resolve(testLocks); - }); + jest.spyOn(HomebrewModel, 'aggregate').mockImplementationOnce(()=>Promise.resolve(testLocks)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .get('/api/lock/reviews'); + const response = await request + .get('/api/lock/reviews') + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); expect(response.status).toBe(200); expect(response.body).toEqual({ reviewDocuments: testLocks }); }); it('Handle error while fetching list of all locked documents with pending review requests', async ()=>{ - jest.spyOn(HomebrewModel, 'aggregate') - .mockImplementationOnce(()=>{ - return Promise.reject(); - }); + jest.spyOn(HomebrewModel, 'aggregate').mockImplementationOnce(()=>Promise.reject()); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .get('/api/lock/reviews'); + const response = await request + .get('/api/lock/reviews') + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); expect(response.status).toBe(500); expect(response.body).toEqual({ @@ -247,8 +229,8 @@ describe('Tests for admin api', ()=>{ const testBrew = { shareId : 'shareId', title : 'title', - markModified : ()=>{ return true; }, - save : ()=>{ return Promise.resolve(); } + markModified : ()=>true, + save : ()=>Promise.resolve() }; const testLock = { @@ -257,15 +239,12 @@ describe('Tests for admin api', ()=>{ shareMessage : 'share' }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(testBrew); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(testBrew)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .post(`/api/lock/${testBrew.shareId}`) - .send(testLock); + const response = await request + .post(`/api/lock/${testBrew.shareId}`) + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) + .send(testLock); expect(response.status).toBe(200); expect(response.body).toMatchObject({ @@ -289,24 +268,21 @@ describe('Tests for admin api', ()=>{ const testBrew = { shareId : 'shareId', title : 'title', - markModified : ()=>{ return true; }, - save : ()=>{ return Promise.resolve(); }, + markModified : ()=>true, + save : ()=>Promise.resolve(), lock : { code : 1, editMessage : 'oldEdit', - shareMessage : 'oldShare', + shareMessage : 'oldShare' } }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(testBrew); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(testBrew)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .post(`/api/lock/${testBrew.shareId}`) - .send(testLock); + const response = await request + .post(`/api/lock/${testBrew.shareId}`) + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) + .send(testLock); expect(response.status).toBe(200); expect(response.body).toMatchObject({ @@ -329,24 +305,21 @@ describe('Tests for admin api', ()=>{ const testBrew = { shareId : 'shareId', title : 'title', - markModified : ()=>{ return true; }, - save : ()=>{ return Promise.resolve(); }, + markModified : ()=>true, + save : ()=>Promise.resolve(), lock : { code : 1, editMessage : 'oldEdit', - shareMessage : 'oldShare', + shareMessage : 'oldShare' } }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(testBrew); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(testBrew)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .post(`/api/lock/${testBrew.shareId}`) - .send(testLock); + const response = await request + .post(`/api/lock/${testBrew.shareId}`) + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) + .send(testLock); expect(response.status).toBe(500); expect(response.body).toEqual({ @@ -364,8 +337,8 @@ describe('Tests for admin api', ()=>{ const testBrew = { shareId : 'shareId', title : 'title', - markModified : ()=>{ return true; }, - save : ()=>{ return Promise.reject(); } + markModified : ()=>true, + save : ()=>Promise.reject() }; const testLock = { @@ -374,15 +347,12 @@ describe('Tests for admin api', ()=>{ shareMessage : 'share' }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(testBrew); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(testBrew)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .post(`/api/lock/${testBrew.shareId}`) - .send(testLock); + const response = await request + .post(`/api/lock/${testBrew.shareId}`) + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) + .send(testLock); expect(response.status).toBe(500); expect(response.body).toEqual({ @@ -408,19 +378,17 @@ describe('Tests for admin api', ()=>{ const testBrew = { shareId : 'shareId', title : 'title', - markModified : ()=>{ return true; }, - save : ()=>{ return Promise.resolve(); }, + markModified : ()=>true, + save : ()=>Promise.resolve(), lock : testLock }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(testBrew); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(testBrew)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .put(`/api/unlock/${testBrew.shareId}`); + const response = await request.put(`/api/unlock/${testBrew.shareId}`).set( + 'Authorization', + `Basic ${Buffer.from('admin:password3').toString('base64')}` + ); expect(response.status).toBe(200); expect(response.body).toEqual({ @@ -433,18 +401,16 @@ describe('Tests for admin api', ()=>{ const testBrew = { shareId : 'shareId', title : 'title', - markModified : ()=>{ return true; }, - save : ()=>{ return Promise.resolve(); }, + markModified : ()=>true, + save : ()=>Promise.resolve() }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(testBrew); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(testBrew)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .put(`/api/unlock/${testBrew.shareId}`); + const response = await request.put(`/api/unlock/${testBrew.shareId}`).set( + 'Authorization', + `Basic ${Buffer.from('admin:password3').toString('base64')}` + ); expect(response.status).toBe(500); expect(response.body).toEqual({ @@ -453,7 +419,7 @@ describe('Tests for admin api', ()=>{ name : 'Not Locked', originalUrl : `/api/unlock/${testBrew.shareId}`, shareId : testBrew.shareId, - status : 500, + status : 500 }); }); @@ -468,19 +434,17 @@ describe('Tests for admin api', ()=>{ const testBrew = { shareId : 'shareId', title : 'title', - markModified : ()=>{ return true; }, - save : ()=>{ return Promise.reject(); }, + markModified : ()=>true, + save : ()=>Promise.reject(), lock : testLock }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(testBrew); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(testBrew)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .put(`/api/unlock/${testBrew.shareId}`); + const response = await request.put(`/api/unlock/${testBrew.shareId}`).set( + 'Authorization', + `Basic ${Buffer.from('admin:password3').toString('base64')}` + ); expect(response.status).toBe(500); expect(response.body).toEqual({ @@ -506,40 +470,28 @@ describe('Tests for admin api', ()=>{ const testBrew = { shareId : 'shareId', title : 'title', - markModified : ()=>{ return true; }, - save : ()=>{ return Promise.resolve(); }, + markModified : ()=>true, + save : ()=>Promise.resolve(), lock : testLock }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(testBrew); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(testBrew)); - const response = await app - .put(`/api/lock/review/request/${testBrew.shareId}`); + const response = await request.put(`/api/lock/review/request/${testBrew.shareId}`); expect(response.status).toBe(200); expect(response.body).toEqual({ message : `Review requested on brew ID ${testBrew.shareId} - ${testBrew.title}`, - name : 'Review Requested', + name : 'Review Requested' }); }); it('Error when cannot find a locked brew', async ()=>{ - const testBrew = { - shareId : 'shareId' - }; + const testBrew = { shareId: 'shareId' }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(false); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(false)); - - const response = await app - .put(`/api/lock/review/request/${testBrew.shareId}`) - .catch((err)=>{return err;}); + const response = await request.put(`/api/lock/review/request/${testBrew.shareId}`); expect(response.status).toBe(500); expect(response.body).toEqual({ @@ -551,43 +503,6 @@ describe('Tests for admin api', ()=>{ }); }); - it('Error when review is already requested', async ()=>{ - const testLock = { - applied : 'YES', - code : 999, - editMessage : 'edit', - shareMessage : 'share', - reviewRequested : 'YES' - }; - - const testBrew = { - shareId : 'shareId', - title : 'title', - markModified : ()=>{ return true; }, - save : ()=>{ return Promise.resolve(); }, - lock : testLock - }; - - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(false); - }); - - - const response = await app - .put(`/api/lock/review/request/${testBrew.shareId}`) - .catch((err)=>{return err;}); - - expect(response.status).toBe(500); - expect(response.body).toEqual({ - HBErrorCode : '70', - code : 500, - message : `Cannot find a locked brew with ID ${testBrew.shareId}`, - name : 'Brew Not Found', - originalUrl : `/api/lock/review/request/${testBrew.shareId}` - }); - }); - it('Handle error while adding review request to a locked brew', async ()=>{ const testLock = { applied : 'YES', @@ -599,18 +514,14 @@ describe('Tests for admin api', ()=>{ const testBrew = { shareId : 'shareId', title : 'title', - markModified : ()=>{ return true; }, - save : ()=>{ return Promise.reject(); }, + markModified : ()=>true, + save : ()=>Promise.reject(), lock : testLock }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(testBrew); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(testBrew)); - const response = await app - .put(`/api/lock/review/request/${testBrew.shareId}`); + const response = await request.put(`/api/lock/review/request/${testBrew.shareId}`); expect(response.status).toBe(500); expect(response.body).toEqual({ @@ -634,19 +545,16 @@ describe('Tests for admin api', ()=>{ const testBrew = { shareId : 'shareId', title : 'title', - markModified : ()=>{ return true; }, - save : ()=>{ return Promise.resolve(); }, + markModified : ()=>true, + save : ()=>Promise.resolve(), lock : testLock }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(testBrew); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(testBrew)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .put(`/api/lock/review/remove/${testBrew.shareId}`); + const response = await request + .put(`/api/lock/review/remove/${testBrew.shareId}`) + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); expect(response.status).toBe(200); expect(response.body).toEqual({ @@ -656,18 +564,13 @@ describe('Tests for admin api', ()=>{ }); it('Error when clearing review request from a brew with no review request', async ()=>{ - const testBrew = { - shareId : 'shareId', - }; + const testBrew = { shareId: 'shareId' }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(false); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(false)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .put(`/api/lock/review/remove/${testBrew.shareId}`); + const response = await request + .put(`/api/lock/review/remove/${testBrew.shareId}`) + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); expect(response.status).toBe(500); expect(response.body).toEqual({ @@ -690,19 +593,16 @@ describe('Tests for admin api', ()=>{ const testBrew = { shareId : 'shareId', title : 'title', - markModified : ()=>{ return true; }, - save : ()=>{ return Promise.reject(); }, + markModified : ()=>true, + save : ()=>Promise.reject(), lock : testLock }; - jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(testBrew); - }); + jest.spyOn(HomebrewModel, 'findOne').mockImplementationOnce(()=>Promise.resolve(testBrew)); - const response = await app - .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`) - .put(`/api/lock/review/remove/${testBrew.shareId}`); + const response = await request + .put(`/api/lock/review/remove/${testBrew.shareId}`) + .set('Authorization', `Basic ${Buffer.from('admin:password3').toString('base64')}`); expect(response.status).toBe(500); expect(response.body).toEqual({ From 735c8cb91739c3ff4ae54b48d65ccabea82bad14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 24 Feb 2026 21:58:09 +0100 Subject: [PATCH 49/76] fix static pages tests --- tests/routes/static-pages.test.js | 33 ++++++++++++++++++------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/tests/routes/static-pages.test.js b/tests/routes/static-pages.test.js index ebfa48dd4..2741b8d70 100644 --- a/tests/routes/static-pages.test.js +++ b/tests/routes/static-pages.test.js @@ -1,27 +1,32 @@ import supertest from 'supertest'; -import HBApp from 'app.js'; +import createApp from '../../server/app.js'; -// Mimic https responses to avoid being redirected all the time -const app = supertest.agent(HBApp).set('X-Forwarded-Proto', 'https'); +let app; +let request; + +beforeAll(async ()=>{ + app = await createApp(); + request = supertest.agent(app).set('X-Forwarded-Proto', 'https'); +}); describe('Tests for static pages', ()=>{ - it('Home page works', ()=>{ - return app.get('/').expect(200); + it('Home page works', async ()=>{ + await request.get('/').expect(200); }); - it('Home page legacy works', ()=>{ - return app.get('/legacy').expect(200); + it('Home page legacy works', async ()=>{ + await request.get('/legacy').expect(200); }); - it('Changelog page works', ()=>{ - return app.get('/changelog').expect(200); + it('Changelog page works', async ()=>{ + await request.get('/changelog').expect(200); }); - it('FAQ page works', ()=>{ - return app.get('/faq').expect(200); + it('FAQ page works', async ()=>{ + await request.get('/faq').expect(200); }); - it('robots.txt works', ()=>{ - return app.get('/robots.txt').expect(200); + it('robots.txt works', async ()=>{ + await request.get('/robots.txt').expect(200); }); -}); +}); \ No newline at end of file From ade6f3997ac0ac22a9edb4a9d0f7ce2024148e66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 24 Feb 2026 22:06:47 +0100 Subject: [PATCH 50/76] fix safehtml test --- tests/html/safeHTML.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/html/safeHTML.test.js b/tests/html/safeHTML.test.js index 208101f9a..0b5b4c169 100644 --- a/tests/html/safeHTML.test.js +++ b/tests/html/safeHTML.test.js @@ -1,6 +1,6 @@ import globalJsdom from 'jsdom-global'; globalJsdom(); -import { safeHTML } from '../../client/homebrew/brewRenderer/safeHTML'; +import safeHTML from '../../client/homebrew/brewRenderer/safeHTML'; test('Exit if no document', function() { const doc = document; From 43ac4f0e0e4163a3400592184e3d19229884d4b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 24 Feb 2026 22:40:14 +0100 Subject: [PATCH 51/76] this doesn't seem to be needed, lets try --- client/homebrew/brewRenderer/brewRenderer.jsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 27dba4f82..a42b3a64d 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -1,6 +1,4 @@ /*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ -import brewRendererStylesUrl from './brewRenderer.less?url'; -import headerNavStylesUrl from './headerNav/headerNav.less?url'; import './brewRenderer.less'; import React, { useState, useRef, useMemo, useEffect } from 'react'; import _ from 'lodash'; @@ -31,8 +29,6 @@ const INITIAL_CONTENT = dedent` - -
`; From 184820939d35a2eaca6b6b581f59373e39712114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 24 Feb 2026 22:40:29 +0100 Subject: [PATCH 52/76] this was a fluke --- server.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server.js b/server.js index 1adae5e6e..02aeee356 100644 --- a/server.js +++ b/server.js @@ -3,8 +3,7 @@ import createApp from "./server/app.js"; import config from "./server/config.js"; import { createServer as createViteServer } from "vite"; -const isProd = process.env.NODE_ENV === "production"; -const isDev = process.env.NODE_ENV === "development"; +const isDev = process.env.NODE_ENV === "local"; async function start() { let vite; From 1d98ec97048f5d5ebbfd566af5b66fca27ef24ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 24 Feb 2026 22:52:30 +0100 Subject: [PATCH 53/76] Revert "this doesn't seem to be needed, lets try" This reverts commit 43ac4f0e0e4163a3400592184e3d19229884d4b0. --- client/homebrew/brewRenderer/brewRenderer.jsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index a42b3a64d..27dba4f82 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -1,4 +1,6 @@ /*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ +import brewRendererStylesUrl from './brewRenderer.less?url'; +import headerNavStylesUrl from './headerNav/headerNav.less?url'; import './brewRenderer.less'; import React, { useState, useRef, useMemo, useEffect } from 'react'; import _ from 'lodash'; @@ -29,6 +31,8 @@ const INITIAL_CONTENT = dedent` + +
`; From 0670eff6de6b3e4b2260703603446995e0390f0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 24 Feb 2026 22:57:51 +0100 Subject: [PATCH 54/76] remove unnecessary line --- client/components/splitPane/splitPane.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/client/components/splitPane/splitPane.jsx b/client/components/splitPane/splitPane.jsx index 03f79d7ad..7cbfe2066 100644 --- a/client/components/splitPane/splitPane.jsx +++ b/client/components/splitPane/splitPane.jsx @@ -1,4 +1,3 @@ - import './splitPane.less'; import React, { useEffect, useState } from 'react'; From 2258e70a75309357a7a2d30b949f97c554ced825 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 24 Feb 2026 23:18:25 +0100 Subject: [PATCH 55/76] fix json generator plugin --- themes/codeMirror/editorThemes.json | 70 ----------------------------- vitePlugins/generateAssetsPlugin.js | 3 +- 2 files changed, 1 insertion(+), 72 deletions(-) delete mode 100644 themes/codeMirror/editorThemes.json diff --git a/themes/codeMirror/editorThemes.json b/themes/codeMirror/editorThemes.json deleted file mode 100644 index 16d758568..000000000 --- a/themes/codeMirror/editorThemes.json +++ /dev/null @@ -1,70 +0,0 @@ -[ - "default", - "3024-day", - "3024-night", - "abbott", - "abcdef", - "ambiance-mobile", - "ambiance", - "ayu-dark", - "ayu-mirage", - "base16-dark", - "base16-light", - "bespin", - "blackboard", - "cobalt", - "colorforth", - "darcula", - "darkbrewery", - "darkvision", - "dracula", - "duotone-dark", - "duotone-light", - "eclipse", - "elegant", - "erlang-dark", - "gruvbox-dark", - "hopscotch", - "icecoder", - "idea", - "isotope", - "juejin", - "lesser-dark", - "liquibyte", - "lucario", - "material-darker", - "material-ocean", - "material-palenight", - "material", - "mbo", - "mdn-like", - "midnight", - "monokai", - "moxer", - "neat", - "neo", - "night", - "nord", - "oceanic-next", - "panda-syntax", - "paraiso-dark", - "paraiso-light", - "pastel-on-dark", - "railscasts", - "rubyblue", - "seti", - "shadowfox", - "solarized", - "ssms", - "the-matrix", - "tomorrow-night-bright", - "tomorrow-night-eighties", - "ttcn", - "twilight", - "vibrant-ink", - "xq-dark", - "xq-light", - "yeti", - "yonce", - "zenburn" -] \ No newline at end of file diff --git a/vitePlugins/generateAssetsPlugin.js b/vitePlugins/generateAssetsPlugin.js index beacab1db..eaf74509b 100644 --- a/vitePlugins/generateAssetsPlugin.js +++ b/vitePlugins/generateAssetsPlugin.js @@ -68,8 +68,7 @@ export function generateAssetsPlugin(isDev = false) { await fs.copy("./themes/codeMirror/customThemes", editorThemesBuildDir); const editorThemeFiles = fs.readdirSync(editorThemesBuildDir); - await fs.outputFile( - "./themes/codeMirror/editorThemes.json", + await fs.outputFile(`${buildDir}/homebrew/codeMirror/editorThemes.json`, JSON.stringify(["default", ...editorThemeFiles.map((f) => f.slice(0, -4))], null, 2), ); From a5919e627b79803207021404083a80134411d0a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 24 Feb 2026 23:24:24 +0100 Subject: [PATCH 56/76] join vitreum files --- vitreum/headtags.js | 10 +++++++++- vitreum/injectTag.js | 8 -------- 2 files changed, 9 insertions(+), 9 deletions(-) delete mode 100644 vitreum/injectTag.js diff --git a/vitreum/headtags.js b/vitreum/headtags.js index 648fb78e5..54cdf5922 100644 --- a/vitreum/headtags.js +++ b/vitreum/headtags.js @@ -1,5 +1,13 @@ import React, { useEffect } from "react"; -import injectTag from "./injectTag.js"; + +//old vitreum file, still imported in some pages + +const injectTag = (tag, props, children) => { + const injectNode = document.createElement(tag); + Object.entries(props).forEach(([key, val]) => injectNode[key] = val); + if (children) injectNode.appendChild(document.createTextNode(children)); + document.getElementsByTagName('head')[0].appendChild(injectNode); +}; const obj2props = (obj) => Object.entries(obj) diff --git a/vitreum/injectTag.js b/vitreum/injectTag.js deleted file mode 100644 index 4fdee57f3..000000000 --- a/vitreum/injectTag.js +++ /dev/null @@ -1,8 +0,0 @@ -const injectTag = (tag, props, children) => { - const injectNode = document.createElement(tag); - Object.entries(props).forEach(([key, val]) => injectNode[key] = val); - if (children) injectNode.appendChild(document.createTextNode(children)); - document.getElementsByTagName('head')[0].appendChild(injectNode); -}; - -export default injectTag; From 62b816878d32470b8f029d2be3de339650078c3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 25 Feb 2026 11:41:09 +0100 Subject: [PATCH 57/76] testing aliases --- client/homebrew/pages/homePage/homePage.jsx | 2 +- client/homebrew/pages/homePage/homePage.less | 1 - vite.config.js | 6 ++++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index d612a7402..f36f292fa 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -27,7 +27,7 @@ const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import Headtags from '../../../../vitreum/headtags.js'; +import Headtags from '@vitreum/headtags.js'; const Meta = Headtags.Meta; const BREWKEY = 'homebrewery-new'; diff --git a/client/homebrew/pages/homePage/homePage.less b/client/homebrew/pages/homePage/homePage.less index 9d39bd642..8b60c6d7d 100644 --- a/client/homebrew/pages/homePage/homePage.less +++ b/client/homebrew/pages/homePage/homePage.less @@ -1,4 +1,3 @@ -@import './shared/naturalcrit/styles/core.less'; .homePage { position : relative; diff --git a/vite.config.js b/vite.config.js index 8ff255cd7..929a556cc 100644 --- a/vite.config.js +++ b/vite.config.js @@ -6,6 +6,12 @@ import { generateAssetsPlugin } from "./vitePlugins/generateAssetsPlugin.js"; export default defineConfig({ plugins: [react(), generateAssetsPlugin()], + resolve: { + alias: { + "@vitreum": path.resolve(__dirname, "./vitreum"), + "@sharedStyles": path.resolve(__dirname, "./shared/naturalcrit/styles"), + }, + }, build: { outDir: "build", emptyOutDir: false, From fdd495bfbb9f8a6fbd8acbed7d994a3697086f5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 25 Feb 2026 11:42:59 +0100 Subject: [PATCH 58/76] more testing --- client/homebrew/pages/homePage/homePage.less | 1 + 1 file changed, 1 insertion(+) diff --git a/client/homebrew/pages/homePage/homePage.less b/client/homebrew/pages/homePage/homePage.less index 8b60c6d7d..fd072c1e1 100644 --- a/client/homebrew/pages/homePage/homePage.less +++ b/client/homebrew/pages/homePage/homePage.less @@ -1,3 +1,4 @@ +@import '@sharedStyles/core.less'; .homePage { position : relative; From 1e0c09243a762ddc33fa6e81561c5b2423070df3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 25 Feb 2026 18:24:54 +0100 Subject: [PATCH 59/76] navbar alias --- client/homebrew/pages/editPage/editPage.jsx | 20 +++++++++---------- client/homebrew/pages/homePage/homePage.jsx | 18 ++++++++--------- client/homebrew/pages/newPage/newPage.jsx | 19 +++++++++--------- client/homebrew/pages/sharePage/sharePage.jsx | 12 +++++------ client/homebrew/pages/userPage/userPage.jsx | 16 +++++++-------- client/homebrew/pages/vaultPage/vaultPage.jsx | 12 +++++------ vite.config.js | 1 + 7 files changed, 49 insertions(+), 49 deletions(-) diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 22d7d2d4f..7857f507e 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -14,15 +14,15 @@ import SplitPane from '../../../components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; -import Nav from '../../navbar/nav.jsx'; -import Navbar from '../../navbar/navbar.jsx'; -import NewBrewItem from '../../navbar/newbrew.navitem.jsx'; -import AccountNavItem from '../../navbar/account.navitem.jsx'; -import ErrorNavItem from '../../navbar/error-navitem.jsx'; -import HelpNavItem from '../../navbar/help.navitem.jsx'; -import VaultNavItem from '../../navbar/vault.navitem.jsx'; -import PrintNavItem from '../../navbar/print.navitem.jsx'; -import RecentNavItems from '../../navbar/recent.navitem.jsx'; +import Nav from '@navbar/nav.jsx'; +import Navbar from '@navbar/navbar.jsx'; +import NewBrewItem from '@navbar/newbrew.navitem.jsx'; +import AccountNavItem from '@navbar/account.navitem.jsx'; +import ErrorNavItem from '@navbar/error-navitem.jsx'; +import HelpNavItem from '@navbar/help.navitem.jsx'; +import VaultNavItem from '@navbar/vault.navitem.jsx'; +import PrintNavItem from '@navbar/print.navitem.jsx'; +import RecentNavItems from '@navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; // Page specific imports @@ -32,7 +32,7 @@ import { md5 } from 'hash-wasm'; import { gzipSync, strToU8 } from 'fflate'; import { makePatches, stringifyPatches } from '@sanity/diff-match-patch'; -import ShareNavItem from '../../navbar/share.navitem.jsx'; +import ShareNavItem from '@navbar/share.navitem.jsx'; import LockNotification from './lockNotification/lockNotification.jsx'; import { updateHistory, versionHistoryGarbageCollection } from '../../utils/versionHistory.js'; import googleDriveIcon from '../../googleDrive.svg'; diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index f36f292fa..7d51eead5 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -14,15 +14,15 @@ import SplitPane from '../../../components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; -import Nav from '../../navbar/nav.jsx'; -import Navbar from '../../navbar/navbar.jsx'; -import NewBrewItem from '../../navbar/newbrew.navitem.jsx'; -import AccountNavItem from '../../navbar/account.navitem.jsx'; -import ErrorNavItem from '../../navbar/error-navitem.jsx'; -import HelpNavItem from '../../navbar/help.navitem.jsx'; -import VaultNavItem from '../../navbar/vault.navitem.jsx'; -import PrintNavItem from '../../navbar/print.navitem.jsx'; -import RecentNavItems from '../../navbar/recent.navitem.jsx'; +import Nav from '@navbar/nav.jsx'; +import Navbar from '@navbar/navbar.jsx'; +import NewBrewItem from '@navbar/newbrew.navitem.jsx'; +import AccountNavItem from '@navbar/account.navitem.jsx'; +import ErrorNavItem from '@navbar/error-navitem.jsx'; +import HelpNavItem from '@navbar/help.navitem.jsx'; +import VaultNavItem from '@navbar/vault.navitem.jsx'; +import PrintNavItem from '@navbar/print.navitem.jsx'; +import RecentNavItems from '@navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 7ae849fcf..501c761db 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -14,19 +14,18 @@ import SplitPane from '../../../components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; -import Nav from '../../navbar/nav.jsx'; -import Navbar from '../../navbar/navbar.jsx'; -import NewBrewItem from '../../navbar/newbrew.navitem.jsx'; -import AccountNavItem from '../../navbar/account.navitem.jsx'; -import ErrorNavItem from '../../navbar/error-navitem.jsx'; -import HelpNavItem from '../../navbar/help.navitem.jsx'; -import VaultNavItem from '../../navbar/vault.navitem.jsx'; -import PrintNavItem from '../../navbar/print.navitem.jsx'; -import RecentNavItems from '../../navbar/recent.navitem.jsx'; +import Nav from '@navbar/nav.jsx'; +import Navbar from '@navbar/navbar.jsx'; +import NewBrewItem from '@navbar/newbrew.navitem.jsx'; +import AccountNavItem from '@navbar/account.navitem.jsx'; +import ErrorNavItem from '@navbar/error-navitem.jsx'; +import HelpNavItem from '@navbar/help.navitem.jsx'; +import VaultNavItem from '@navbar/vault.navitem.jsx'; +import PrintNavItem from '@navbar/print.navitem.jsx'; +import RecentNavItems from '@navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; // Page specific imports -import { Meta } from '../../../../vitreum/headtags.js'; const BREWKEY = 'HB_newPage_content'; const STYLEKEY = 'HB_newPage_style'; diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 31dc29d70..0c93d9d7f 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -3,13 +3,13 @@ import React, { useState, useEffect, useCallback } from 'react'; import Headtags from '../../../../vitreum/headtags.js'; const Meta = Headtags.Meta; -import Nav from '../../navbar/nav.jsx'; -import Navbar from '../../navbar/navbar.jsx'; -import MetadataNav from '../../navbar/metadata.navitem.jsx'; -import PrintNavItem from '../../navbar/print.navitem.jsx'; -import RecentNavItems from '../../navbar/recent.navitem.jsx'; +import Nav from '@navbar/nav.jsx'; +import Navbar from '@navbar/navbar.jsx'; +import MetadataNav from '@navbar/metadata.navitem.jsx'; +import PrintNavItem from '@navbar/print.navitem.jsx'; +import RecentNavItems from '@navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; -import Account from '../../navbar/account.navitem.jsx'; +import Account from '@navbar/account.navitem.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; import { DEFAULT_BREW_LOAD } from '../../../../server/brewDefaults.js'; diff --git a/client/homebrew/pages/userPage/userPage.jsx b/client/homebrew/pages/userPage/userPage.jsx index a6a43858e..0b2ebb56b 100644 --- a/client/homebrew/pages/userPage/userPage.jsx +++ b/client/homebrew/pages/userPage/userPage.jsx @@ -3,15 +3,15 @@ import _ from 'lodash'; import ListPage from '../basePages/listPage/listPage.jsx'; -import Nav from '../../navbar/nav.jsx'; -import Navbar from '../../navbar/navbar.jsx'; -import RecentNavItems from '../../navbar/recent.navitem.jsx'; +import Nav from '@navbar/nav.jsx'; +import Navbar from '@navbar/navbar.jsx'; +import RecentNavItems from '@navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; -import Account from '../../navbar/account.navitem.jsx'; -import NewBrew from '../../navbar/newbrew.navitem.jsx'; -import HelpNavItem from '../../navbar/help.navitem.jsx'; -import ErrorNavItem from '../../navbar/error-navitem.jsx'; -import VaultNavitem from '../../navbar/vault.navitem.jsx'; +import Account from '@navbar/account.navitem.jsx'; +import NewBrew from '@navbar/newbrew.navitem.jsx'; +import HelpNavItem from '@navbar/help.navitem.jsx'; +import ErrorNavItem from '@navbar/error-navitem.jsx'; +import VaultNavitem from '@navbar/vault.navitem.jsx'; const UserPage = (props)=>{ props = { diff --git a/client/homebrew/pages/vaultPage/vaultPage.jsx b/client/homebrew/pages/vaultPage/vaultPage.jsx index 3a8c6bc25..e6a9768bb 100644 --- a/client/homebrew/pages/vaultPage/vaultPage.jsx +++ b/client/homebrew/pages/vaultPage/vaultPage.jsx @@ -3,13 +3,13 @@ import './vaultPage.less'; import React, { useState, useEffect, useRef } from 'react'; -import Nav from '../../navbar/nav.jsx'; -import Navbar from '../../navbar/navbar.jsx'; -import RecentNavItems from '../../navbar/recent.navitem.jsx'; +import Nav from '@navbar/nav.jsx'; +import Navbar from '@navbar/navbar.jsx'; +import RecentNavItems from '@navbar/recent.navitem.jsx'; const { both: RecentNavItem } = RecentNavItems; -import Account from '../../navbar/account.navitem.jsx'; -import NewBrew from '../../navbar/newbrew.navitem.jsx'; -import HelpNavItem from '../../navbar/help.navitem.jsx'; +import Account from '@navbar/account.navitem.jsx'; +import NewBrew from '@navbar/newbrew.navitem.jsx'; +import HelpNavItem from '@navbar/help.navitem.jsx'; import BrewItem from '../basePages/listPage/brewItem/brewItem.jsx'; import SplitPane from '../../../components/splitPane/splitPane.jsx'; import ErrorIndex from '../errorPage/errors/errorIndex.js'; diff --git a/vite.config.js b/vite.config.js index 929a556cc..730bc39ea 100644 --- a/vite.config.js +++ b/vite.config.js @@ -10,6 +10,7 @@ export default defineConfig({ alias: { "@vitreum": path.resolve(__dirname, "./vitreum"), "@sharedStyles": path.resolve(__dirname, "./shared/naturalcrit/styles"), + "@navbar":path.resolve(__dirname, "./client/homebrew/navbar"), }, }, build: { From 0a6c0a1eae31ec8048a0f48c0ff15b7fc386a7c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 25 Feb 2026 18:27:48 +0100 Subject: [PATCH 60/76] not sure why those were like that --- shared/naturalcrit/styles/core.less | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared/naturalcrit/styles/core.less b/shared/naturalcrit/styles/core.less index 1c35cd1dd..3ef75144d 100644 --- a/shared/naturalcrit/styles/core.less +++ b/shared/naturalcrit/styles/core.less @@ -6,11 +6,11 @@ @import './tooltip.less'; @font-face { font-family : 'CodeLight'; - src : url('../../../shared/naturalcrit/styles/CODE Light.otf') format('opentype'); + src : url('./CODE Light.otf') format('opentype'); } @font-face { font-family : 'CodeBold'; - src : url('../../../shared/naturalcrit/styles/CODE Bold.otf') format('opentype'); + src : url('./CODE Bold.otf') format('opentype'); } html,body, #reactRoot { height : 100vh; From d0265a99784cc2906beba2b86810f0fb1eca24e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 25 Feb 2026 18:30:44 +0100 Subject: [PATCH 61/76] shared styles to alias --- client/admin/admin.less | 10 +++++----- client/admin/brewUtils/brewUtils.less | 2 +- client/components/renderWarnings/renderWarnings.less | 2 +- client/components/splitPane/splitPane.less | 2 +- client/homebrew/brewRenderer/brewRenderer.less | 2 +- client/homebrew/brewRenderer/errorBar/errorBar.less | 2 +- client/homebrew/editor/editor.less | 2 +- .../homebrew/editor/metadataEditor/metadataEditor.less | 2 +- client/homebrew/editor/snippetbar/snippetbar.less | 2 +- client/homebrew/homebrew.less | 2 +- client/homebrew/navbar/error-navitem.less | 2 +- client/homebrew/navbar/navbar.less | 2 +- .../pages/basePages/listPage/brewItem/brewItem.less | 2 +- client/homebrew/pages/newPage/newPage.less | 2 +- client/homebrew/pages/vaultPage/vaultPage.less | 2 +- 15 files changed, 19 insertions(+), 19 deletions(-) diff --git a/client/admin/admin.less b/client/admin/admin.less index 3cb5b0ff3..d408f2aa3 100644 --- a/client/admin/admin.less +++ b/client/admin/admin.less @@ -1,8 +1,8 @@ -@import './shared/naturalcrit/styles/reset.less'; -@import './shared/naturalcrit/styles/elements.less'; -@import './shared/naturalcrit/styles/animations.less'; -@import './shared/naturalcrit/styles/colors.less'; -@import './shared/naturalcrit/styles/tooltip.less'; +@import '@sharedStyles/reset.less'; +@import '@sharedStyles/elements.less'; +@import '@sharedStyles/animations.less'; +@import '@sharedStyles/colors.less'; +@import '@sharedStyles/tooltip.less'; @import './themes/fonts/iconFonts/fontAwesome.less'; html,body, #reactContainer, .naturalCrit { min-height : 100%; } diff --git a/client/admin/brewUtils/brewUtils.less b/client/admin/brewUtils/brewUtils.less index 9ddb10cb7..cfa7dbbdf 100644 --- a/client/admin/brewUtils/brewUtils.less +++ b/client/admin/brewUtils/brewUtils.less @@ -1,4 +1,4 @@ -@import '../../../shared/naturalcrit/styles/colors.less'; +@import '@sharedStyles/colors.less'; .brewUtil { .result { diff --git a/client/components/renderWarnings/renderWarnings.less b/client/components/renderWarnings/renderWarnings.less index 100de0bc7..a1413709b 100644 --- a/client/components/renderWarnings/renderWarnings.less +++ b/client/components/renderWarnings/renderWarnings.less @@ -1,4 +1,4 @@ -@import './shared/naturalcrit/styles/colors.less'; +@import '@sharedStyles/colors.less'; .renderWarnings { position : relative; diff --git a/client/components/splitPane/splitPane.less b/client/components/splitPane/splitPane.less index 9050eaddc..779d0c222 100644 --- a/client/components/splitPane/splitPane.less +++ b/client/components/splitPane/splitPane.less @@ -1,4 +1,4 @@ -@import './shared/naturalcrit/styles/core.less'; +@import '@sharedStyles/core.less'; .splitPane { position : relative; diff --git a/client/homebrew/brewRenderer/brewRenderer.less b/client/homebrew/brewRenderer/brewRenderer.less index 93677e00e..ea9b43d75 100644 --- a/client/homebrew/brewRenderer/brewRenderer.less +++ b/client/homebrew/brewRenderer/brewRenderer.less @@ -1,4 +1,4 @@ -@import 'shared/naturalcrit/styles/core.less'; +@import '@sharedStyles/core.less'; .brewRenderer { height : 100vh; diff --git a/client/homebrew/brewRenderer/errorBar/errorBar.less b/client/homebrew/brewRenderer/errorBar/errorBar.less index 83efd2391..528521a07 100644 --- a/client/homebrew/brewRenderer/errorBar/errorBar.less +++ b/client/homebrew/brewRenderer/errorBar/errorBar.less @@ -1,4 +1,4 @@ -@import './shared/naturalcrit/styles/colors.less'; +@import '@sharedStyles/colors.less'; .errorBar { position : absolute; diff --git a/client/homebrew/editor/editor.less b/client/homebrew/editor/editor.less index df9e5c312..d2962dbaf 100644 --- a/client/homebrew/editor/editor.less +++ b/client/homebrew/editor/editor.less @@ -1,4 +1,4 @@ -@import './shared/naturalcrit/styles/core.less'; +@import '@sharedStyles/core.less'; @import './themes/codeMirror/customEditorStyles.less'; .editor { diff --git a/client/homebrew/editor/metadataEditor/metadataEditor.less b/client/homebrew/editor/metadataEditor/metadataEditor.less index b057a474e..6a4df1c46 100644 --- a/client/homebrew/editor/metadataEditor/metadataEditor.less +++ b/client/homebrew/editor/metadataEditor/metadataEditor.less @@ -1,4 +1,4 @@ -@import './shared/naturalcrit/styles/core.less'; +@import '@sharedStyles/core.less'; .userThemeName { padding-right : 10px; diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index 51a396536..880f7c1f6 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -1,4 +1,4 @@ -@import './shared/naturalcrit/styles/core.less'; +@import '@sharedStyles/core.less'; @import (less) './client/icons/customIcons.less'; @import (less) '././././themes/fonts/5e/fonts.less'; diff --git a/client/homebrew/homebrew.less b/client/homebrew/homebrew.less index c550b266f..9bafadffe 100644 --- a/client/homebrew/homebrew.less +++ b/client/homebrew/homebrew.less @@ -1,4 +1,4 @@ -@import './shared/naturalcrit/styles/core.less'; +@import '@sharedStyles/core.less'; .homebrew { height : 100%; background-color:@steel; diff --git a/client/homebrew/navbar/error-navitem.less b/client/homebrew/navbar/error-navitem.less index 15c741bbc..4da665915 100644 --- a/client/homebrew/navbar/error-navitem.less +++ b/client/homebrew/navbar/error-navitem.less @@ -1,4 +1,4 @@ -@import './shared/naturalcrit/styles/core.less'; +@import '@sharedStyles/core.less'; .navItem.error { position : relative; diff --git a/client/homebrew/navbar/navbar.less b/client/homebrew/navbar/navbar.less index c8154a7d8..eb518e808 100644 --- a/client/homebrew/navbar/navbar.less +++ b/client/homebrew/navbar/navbar.less @@ -1,4 +1,4 @@ -@import './shared/naturalcrit/styles/core.less'; +@import '@sharedStyles/core.less'; @navbarHeight : 28px; @viewerToolsHeight : 32px; diff --git a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.less b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.less index 0a1063355..93685947c 100644 --- a/client/homebrew/pages/basePages/listPage/brewItem/brewItem.less +++ b/client/homebrew/pages/basePages/listPage/brewItem/brewItem.less @@ -1,4 +1,4 @@ -@import './shared/naturalcrit/styles/core.less'; +@import '@sharedStyles/core.less'; .brewItem { position : relative; diff --git a/client/homebrew/pages/newPage/newPage.less b/client/homebrew/pages/newPage/newPage.less index e91103153..39befb44e 100644 --- a/client/homebrew/pages/newPage/newPage.less +++ b/client/homebrew/pages/newPage/newPage.less @@ -1,4 +1,4 @@ -@import './shared/naturalcrit/styles/colors.less'; +@import '@sharedStyles/colors.less'; .newPage { .navItem.save { diff --git a/client/homebrew/pages/vaultPage/vaultPage.less b/client/homebrew/pages/vaultPage/vaultPage.less index 2ede1a0df..b2010b59b 100644 --- a/client/homebrew/pages/vaultPage/vaultPage.less +++ b/client/homebrew/pages/vaultPage/vaultPage.less @@ -1,4 +1,4 @@ -@import './shared/naturalcrit/styles/core.less'; +@import '@sharedStyles/core.less'; .vaultPage { height : 100%; From 17f6fbe033072f9bf9f0a277c0f32d994a94734a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 25 Feb 2026 18:34:35 +0100 Subject: [PATCH 62/76] themes folder --- client/components/codeEditor/autocompleteEmoji.js | 8 ++++---- .../homebrew/editor/metadataEditor/metadataEditor.jsx | 2 +- client/homebrew/editor/snippetbar/snippetbar.jsx | 10 +++++----- vite.config.js | 1 + 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/client/components/codeEditor/autocompleteEmoji.js b/client/components/codeEditor/autocompleteEmoji.js index 61c7697f4..fc64e7bbd 100644 --- a/client/components/codeEditor/autocompleteEmoji.js +++ b/client/components/codeEditor/autocompleteEmoji.js @@ -1,7 +1,7 @@ -import diceFont from '../../../themes/fonts/iconFonts/diceFont.js'; -import elderberryInn from '../../../themes/fonts/iconFonts/elderberryInn.js'; -import fontAwesome from '../../../themes/fonts/iconFonts/fontAwesome.js'; -import gameIcons from '../../../themes/fonts/iconFonts/gameIcons.js'; +import diceFont from '@themes/fonts/iconFonts/diceFont.js'; +import elderberryInn from '@themes/fonts/iconFonts/elderberryInn.js'; +import fontAwesome from '@themes/fonts/iconFonts/fontAwesome.js'; +import gameIcons from '@themes/fonts/iconFonts/gameIcons.js'; const emojis = { ...diceFont, diff --git a/client/homebrew/editor/metadataEditor/metadataEditor.jsx b/client/homebrew/editor/metadataEditor/metadataEditor.jsx index c30958e6e..acd457d98 100644 --- a/client/homebrew/editor/metadataEditor/metadataEditor.jsx +++ b/client/homebrew/editor/metadataEditor/metadataEditor.jsx @@ -8,7 +8,7 @@ import Combobox from '../../../components/combobox.jsx'; import TagInput from '../tagInput/tagInput.jsx'; -import Themes from '../../../../themes/themes.json'; +import Themes from '@themes/themes.json'; import validations from './validations.js'; import homebreweryThumbnail from '../../thumbnail.png'; diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx index 7c451b13b..1438a1946 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.jsx +++ b/client/homebrew/editor/snippetbar/snippetbar.jsx @@ -9,11 +9,11 @@ import cx from 'classnames'; import { loadHistory } from '../../utils/versionHistory.js'; import { brewSnippetsToJSON } from '../../../../shared/helpers.js'; -import Legacy5ePHB from '../../../../themes/Legacy/5ePHB/snippets.js'; -import V3_5ePHB from '../../../../themes/V3/5ePHB/snippets.js'; -import V3_5eDMG from '../../../../themes/V3/5eDMG/snippets.js'; -import V3_Journal from '../../../../themes/V3/Journal/snippets.js'; -import V3_Blank from '../../../../themes/V3/Blank/snippets.js'; +import Legacy5ePHB from '@themes/Legacy/5ePHB/snippets.js'; +import V3_5ePHB from '@themes/V3/5ePHB/snippets.js'; +import V3_5eDMG from '@themes/V3/5eDMG/snippets.js'; +import V3_Journal from '@themes/V3/Journal/snippets.js'; +import V3_Blank from '@themes/V3/Blank/snippets.js'; const ThemeSnippets = { Legacy_5ePHB : Legacy5ePHB, diff --git a/vite.config.js b/vite.config.js index 730bc39ea..2710e1b74 100644 --- a/vite.config.js +++ b/vite.config.js @@ -11,6 +11,7 @@ export default defineConfig({ "@vitreum": path.resolve(__dirname, "./vitreum"), "@sharedStyles": path.resolve(__dirname, "./shared/naturalcrit/styles"), "@navbar":path.resolve(__dirname, "./client/homebrew/navbar"), + "@themes":path.resolve(__dirname, "./themes"), }, }, build: { From c096014871efb61d1665a706d5dc6c0ea0eee55b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 25 Feb 2026 18:40:50 +0100 Subject: [PATCH 63/76] shared folder (for markdown.js and helpers --- client/homebrew/brewRenderer/brewRenderer.jsx | 6 +++--- .../brewRenderer/notificationPopup/notificationPopup.jsx | 2 +- client/homebrew/editor/editor.jsx | 2 +- client/homebrew/editor/snippetbar/snippetbar.jsx | 2 +- client/homebrew/navbar/newbrew.navitem.jsx | 2 +- client/homebrew/navbar/print.navitem.jsx | 2 +- client/homebrew/pages/editPage/editPage.jsx | 4 ++-- client/homebrew/pages/errorPage/errorPage.jsx | 2 +- client/homebrew/pages/homePage/homePage.jsx | 4 ++-- client/homebrew/pages/newPage/newPage.jsx | 4 ++-- client/homebrew/pages/sharePage/sharePage.jsx | 2 +- tests/markdown/basic.test.js | 2 +- tests/markdown/definition-lists.test.js | 2 +- tests/markdown/emojis.test.js | 2 +- tests/markdown/hard-breaks.test.js | 2 +- tests/markdown/mustache-syntax.test.js | 2 +- tests/markdown/non-breaking-spaces.test.js | 2 +- tests/markdown/paragraph-justification.test.js | 2 +- tests/markdown/variables.test.js | 2 +- themes/V3/Blank/snippets/footer.gen.js | 2 +- vite.config.js | 5 +++-- 21 files changed, 28 insertions(+), 27 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 27dba4f82..8e74473b3 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -5,8 +5,8 @@ import './brewRenderer.less'; import React, { useState, useRef, useMemo, useEffect } from 'react'; import _ from 'lodash'; -import MarkdownLegacy from '../../../shared/markdownLegacy.js'; -import Markdown from '../../../shared/markdown.js'; +import MarkdownLegacy from '@shared/markdownLegacy.js'; +import Markdown from '@shared/markdown.js'; import ErrorBar from './errorBar/errorBar.jsx'; import ToolBar from './toolBar/toolBar.jsx'; @@ -15,7 +15,7 @@ import RenderWarnings from '../../components/renderWarnings/renderWarnings.jsx'; import NotificationPopup from './notificationPopup/notificationPopup.jsx'; import Frame from 'react-frame-component'; import dedent from 'dedent'; -import { printCurrentBrew } from '../../../shared/helpers.js'; +import { printCurrentBrew } from '@shared/helpers.js'; import HeaderNav from './headerNav/headerNav.jsx'; import safeHTML from './safeHTML.js'; diff --git a/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx b/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx index 612fccc85..5f4fc5608 100644 --- a/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx +++ b/client/homebrew/brewRenderer/notificationPopup/notificationPopup.jsx @@ -1,7 +1,7 @@ import './notificationPopup.less'; import React, { useEffect, useState } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from '../../../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; import Dialog from '../../../components/dialog.jsx'; diff --git a/client/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx index 9707fe84f..7f55ebf08 100644 --- a/client/homebrew/editor/editor.jsx +++ b/client/homebrew/editor/editor.jsx @@ -4,7 +4,7 @@ import React from 'react'; import createReactClass from 'create-react-class'; import _ from 'lodash'; import dedent from 'dedent'; -import Markdown from '../../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; import CodeEditor from '../../components/codeEditor/codeEditor.jsx'; import SnippetBar from './snippetbar/snippetbar.jsx'; diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx index 1438a1946..304664ff5 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.jsx +++ b/client/homebrew/editor/snippetbar/snippetbar.jsx @@ -7,7 +7,7 @@ import _ from 'lodash'; import cx from 'classnames'; import { loadHistory } from '../../utils/versionHistory.js'; -import { brewSnippetsToJSON } from '../../../../shared/helpers.js'; +import { brewSnippetsToJSON } from '@shared/helpers.js'; import Legacy5ePHB from '@themes/Legacy/5ePHB/snippets.js'; import V3_5ePHB from '@themes/V3/5ePHB/snippets.js'; diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index 4664d509b..ac72121f1 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -1,7 +1,7 @@ import React from 'react'; import _ from 'lodash'; import Nav from './nav.jsx'; -import { splitTextStyleAndMetadata } from '../../../shared/helpers.js'; +import { splitTextStyleAndMetadata } from '@shared/helpers.js'; const BREWKEY = 'HB_newPage_content'; const STYLEKEY = 'HB_newPage_style'; diff --git a/client/homebrew/navbar/print.navitem.jsx b/client/homebrew/navbar/print.navitem.jsx index e7a6ff053..ea262cf03 100644 --- a/client/homebrew/navbar/print.navitem.jsx +++ b/client/homebrew/navbar/print.navitem.jsx @@ -1,6 +1,6 @@ import React from 'react'; import Nav from './nav.jsx'; -import { printCurrentBrew } from '../../../shared/helpers.js'; +import { printCurrentBrew } from '@shared/helpers.js'; export default function(){ return diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 7857f507e..d40058557 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -4,11 +4,11 @@ import './editPage.less'; // Common imports import React, { useState, useEffect, useRef } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from '../../../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; import _ from 'lodash'; import { DEFAULT_BREW_LOAD } from '../../../../server/brewDefaults.js'; -import { printCurrentBrew, fetchThemeBundle, splitTextStyleAndMetadata } from '../../../../shared/helpers.js'; +import { printCurrentBrew, fetchThemeBundle, splitTextStyleAndMetadata } from '@shared/helpers.js'; import SplitPane from '../../../components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; diff --git a/client/homebrew/pages/errorPage/errorPage.jsx b/client/homebrew/pages/errorPage/errorPage.jsx index ffbfc43bb..837775b97 100644 --- a/client/homebrew/pages/errorPage/errorPage.jsx +++ b/client/homebrew/pages/errorPage/errorPage.jsx @@ -1,7 +1,7 @@ import './errorPage.less'; import React from 'react'; import UIPage from '../basePages/uiPage/uiPage.jsx'; -import Markdown from '../../../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; import ErrorIndex from './errors/errorIndex.js'; const ErrorPage = ({ brew })=>{ diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 7d51eead5..030e05a04 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -4,11 +4,11 @@ import './homePage.less'; // Common imports import React, { useState, useEffect, useRef } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from '../../../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; import _ from 'lodash'; import { DEFAULT_BREW } from '../../../../server/brewDefaults.js'; -import { printCurrentBrew, fetchThemeBundle, splitTextStyleAndMetadata } from '../../../../shared/helpers.js'; +import { printCurrentBrew, fetchThemeBundle, splitTextStyleAndMetadata } from '@shared/helpers.js'; import SplitPane from '../../../components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 501c761db..7f3247d04 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -4,11 +4,11 @@ import './newPage.less'; // Common imports import React, { useState, useEffect, useRef } from 'react'; import request from '../../utils/request-middleware.js'; -import Markdown from '../../../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; import _ from 'lodash'; import { DEFAULT_BREW } from '../../../../server/brewDefaults.js'; -import { printCurrentBrew, fetchThemeBundle, splitTextStyleAndMetadata } from '../../../../shared/helpers.js'; +import { printCurrentBrew, fetchThemeBundle, splitTextStyleAndMetadata } from '@shared/helpers.js'; import SplitPane from '../../../components/splitPane/splitPane.jsx'; import Editor from '../../editor/editor.jsx'; diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 0c93d9d7f..093fc8965 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -13,7 +13,7 @@ import Account from '@navbar/account.navitem.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; import { DEFAULT_BREW_LOAD } from '../../../../server/brewDefaults.js'; -import { printCurrentBrew, fetchThemeBundle } from '../../../../shared/helpers.js'; +import { printCurrentBrew, fetchThemeBundle } from '@shared/helpers.js'; const SharePage = (props)=>{ const { brew = DEFAULT_BREW_LOAD, disableMeta = false } = props; diff --git a/tests/markdown/basic.test.js b/tests/markdown/basic.test.js index f2405d0d8..f62963e83 100644 --- a/tests/markdown/basic.test.js +++ b/tests/markdown/basic.test.js @@ -1,6 +1,6 @@ -import Markdown from '../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; test('Processes the markdown within an HTML block if its just a class wrapper', function() { const source = '
*Bold text*
'; diff --git a/tests/markdown/definition-lists.test.js b/tests/markdown/definition-lists.test.js index 35ad12ef7..8592bee5a 100644 --- a/tests/markdown/definition-lists.test.js +++ b/tests/markdown/definition-lists.test.js @@ -1,6 +1,6 @@ -import Markdown from '../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; describe('Inline Definition Lists', ()=>{ test('No Term 1 Definition', function() { diff --git a/tests/markdown/emojis.test.js b/tests/markdown/emojis.test.js index 072de10f9..34a7bb4d2 100644 --- a/tests/markdown/emojis.test.js +++ b/tests/markdown/emojis.test.js @@ -1,4 +1,4 @@ -import Markdown from '../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; import dedent from 'dedent'; // Marked.js adds line returns after closing tags on some default tokens. diff --git a/tests/markdown/hard-breaks.test.js b/tests/markdown/hard-breaks.test.js index 1f48f8f1e..4f9643244 100644 --- a/tests/markdown/hard-breaks.test.js +++ b/tests/markdown/hard-breaks.test.js @@ -1,6 +1,6 @@ -import Markdown from '../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; describe('Hard Breaks', ()=>{ test('Single Break', function() { diff --git a/tests/markdown/mustache-syntax.test.js b/tests/markdown/mustache-syntax.test.js index 95ca2f58d..b0b551ffc 100644 --- a/tests/markdown/mustache-syntax.test.js +++ b/tests/markdown/mustache-syntax.test.js @@ -1,7 +1,7 @@ /* eslint-disable max-lines */ import dedent from 'dedent'; -import Markdown from '../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; // Marked.js adds line returns after closing tags on some default tokens. // This removes those line returns for comparison sake. diff --git a/tests/markdown/non-breaking-spaces.test.js b/tests/markdown/non-breaking-spaces.test.js index 731d0546e..e47b6ec87 100644 --- a/tests/markdown/non-breaking-spaces.test.js +++ b/tests/markdown/non-breaking-spaces.test.js @@ -1,6 +1,6 @@ -import Markdown from '../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; describe('Non-Breaking Spaces Interactions', ()=>{ test('I am actually a single-line definition list!', function() { diff --git a/tests/markdown/paragraph-justification.test.js b/tests/markdown/paragraph-justification.test.js index 6ce454623..1fcf38730 100644 --- a/tests/markdown/paragraph-justification.test.js +++ b/tests/markdown/paragraph-justification.test.js @@ -1,6 +1,6 @@ -import Markdown from '../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; describe('Justification', ()=>{ test('Left Justify', function() { diff --git a/tests/markdown/variables.test.js b/tests/markdown/variables.test.js index 884553703..43a7ef477 100644 --- a/tests/markdown/variables.test.js +++ b/tests/markdown/variables.test.js @@ -1,7 +1,7 @@ /* eslint-disable max-lines */ import dedent from 'dedent'; -import Markdown from '../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; // Marked.js adds line returns after closing tags on some default tokens. // This removes those line returns for comparison sake. diff --git a/themes/V3/Blank/snippets/footer.gen.js b/themes/V3/Blank/snippets/footer.gen.js index c97cf4cb3..596592629 100644 --- a/themes/V3/Blank/snippets/footer.gen.js +++ b/themes/V3/Blank/snippets/footer.gen.js @@ -1,4 +1,4 @@ -import Markdown from '../../../../shared/markdown.js'; +import Markdown from '@shared/markdown.js'; export default { createFooterFunc : function(headerSize=1){ diff --git a/vite.config.js b/vite.config.js index 2710e1b74..6025f8736 100644 --- a/vite.config.js +++ b/vite.config.js @@ -9,9 +9,10 @@ export default defineConfig({ resolve: { alias: { "@vitreum": path.resolve(__dirname, "./vitreum"), + "@shared": path.resolve(__dirname, "./shared"), "@sharedStyles": path.resolve(__dirname, "./shared/naturalcrit/styles"), - "@navbar":path.resolve(__dirname, "./client/homebrew/navbar"), - "@themes":path.resolve(__dirname, "./themes"), + "@navbar": path.resolve(__dirname, "./client/homebrew/navbar"), + "@themes": path.resolve(__dirname, "./themes"), }, }, build: { From 543b64ccd21f38c293ca157fe6eb7fb460ef17d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 25 Feb 2026 18:49:26 +0100 Subject: [PATCH 64/76] themes when i coudl change them --- client/admin/admin.less | 2 +- client/components/codeEditor/codeEditor.less | 8 ++++---- client/homebrew/editor/editor.less | 2 +- client/homebrew/editor/snippetbar/snippetbar.less | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/client/admin/admin.less b/client/admin/admin.less index d408f2aa3..432f92e8b 100644 --- a/client/admin/admin.less +++ b/client/admin/admin.less @@ -3,7 +3,7 @@ @import '@sharedStyles/animations.less'; @import '@sharedStyles/colors.less'; @import '@sharedStyles/tooltip.less'; -@import './themes/fonts/iconFonts/fontAwesome.less'; +@import '@themes/fonts/iconFonts/fontAwesome.less'; html,body, #reactContainer, .naturalCrit { min-height : 100%; } diff --git a/client/components/codeEditor/codeEditor.less b/client/components/codeEditor/codeEditor.less index c8e60974b..89d0c9497 100644 --- a/client/components/codeEditor/codeEditor.less +++ b/client/components/codeEditor/codeEditor.less @@ -5,10 +5,10 @@ @import (less) 'codemirror/addon/hint/show-hint.css'; //Icon fonts included so they can appear in emoji autosuggest dropdown -@import (less) './themes/fonts/iconFonts/diceFont.less'; -@import (less) './themes/fonts/iconFonts/elderberryInn.less'; -@import (less) './themes/fonts/iconFonts/gameIcons.less'; -@import (less) './themes/fonts/iconFonts/fontAwesome.less'; +@import (less) '@themes/fonts/iconFonts/diceFont.less'; +@import (less) '@themes/fonts/iconFonts/elderberryInn.less'; +@import (less) '@themes/fonts/iconFonts/gameIcons.less'; +@import (less) '@themes/fonts/iconFonts/fontAwesome.less'; @keyframes sourceMoveAnimation { 50% { color : white;background-color : red;} diff --git a/client/homebrew/editor/editor.less b/client/homebrew/editor/editor.less index d2962dbaf..3851b50c5 100644 --- a/client/homebrew/editor/editor.less +++ b/client/homebrew/editor/editor.less @@ -1,5 +1,5 @@ @import '@sharedStyles/core.less'; -@import './themes/codeMirror/customEditorStyles.less'; +@import '@themes/codeMirror/customEditorStyles.less'; .editor { position : relative; diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index 880f7c1f6..00a087871 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -1,6 +1,6 @@ @import '@sharedStyles/core.less'; @import (less) './client/icons/customIcons.less'; -@import (less) '././././themes/fonts/5e/fonts.less'; +@import (less) './././@themes/fonts/5e/fonts.less'; .snippetBar { @menuHeight : 25px; From 3388707dba4ec6806b0bdeb7c907b93f8c735b80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 25 Feb 2026 18:54:47 +0100 Subject: [PATCH 65/76] small fix --- client/homebrew/editor/snippetbar/snippetbar.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index 00a087871..37853ca75 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -1,6 +1,6 @@ @import '@sharedStyles/core.less'; @import (less) './client/icons/customIcons.less'; -@import (less) './././@themes/fonts/5e/fonts.less'; +@import (less) '@themes/fonts/5e/fonts.less'; .snippetBar { @menuHeight : 25px; From 05a74417ff3cf96aa99cc92cd66157cc29699140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 25 Feb 2026 19:01:01 +0100 Subject: [PATCH 66/76] fix back tests --- tests/markdown/basic.test.js | 2 +- tests/markdown/definition-lists.test.js | 2 +- tests/markdown/emojis.test.js | 2 +- tests/markdown/hard-breaks.test.js | 2 +- tests/markdown/mustache-syntax.test.js | 2 +- tests/markdown/non-breaking-spaces.test.js | 2 +- tests/markdown/paragraph-justification.test.js | 2 +- tests/markdown/variables.test.js | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/markdown/basic.test.js b/tests/markdown/basic.test.js index f62963e83..f2405d0d8 100644 --- a/tests/markdown/basic.test.js +++ b/tests/markdown/basic.test.js @@ -1,6 +1,6 @@ -import Markdown from '@shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; test('Processes the markdown within an HTML block if its just a class wrapper', function() { const source = '
*Bold text*
'; diff --git a/tests/markdown/definition-lists.test.js b/tests/markdown/definition-lists.test.js index 8592bee5a..35ad12ef7 100644 --- a/tests/markdown/definition-lists.test.js +++ b/tests/markdown/definition-lists.test.js @@ -1,6 +1,6 @@ -import Markdown from '@shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; describe('Inline Definition Lists', ()=>{ test('No Term 1 Definition', function() { diff --git a/tests/markdown/emojis.test.js b/tests/markdown/emojis.test.js index 34a7bb4d2..072de10f9 100644 --- a/tests/markdown/emojis.test.js +++ b/tests/markdown/emojis.test.js @@ -1,4 +1,4 @@ -import Markdown from '@shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; import dedent from 'dedent'; // Marked.js adds line returns after closing tags on some default tokens. diff --git a/tests/markdown/hard-breaks.test.js b/tests/markdown/hard-breaks.test.js index 4f9643244..1f48f8f1e 100644 --- a/tests/markdown/hard-breaks.test.js +++ b/tests/markdown/hard-breaks.test.js @@ -1,6 +1,6 @@ -import Markdown from '@shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; describe('Hard Breaks', ()=>{ test('Single Break', function() { diff --git a/tests/markdown/mustache-syntax.test.js b/tests/markdown/mustache-syntax.test.js index b0b551ffc..95ca2f58d 100644 --- a/tests/markdown/mustache-syntax.test.js +++ b/tests/markdown/mustache-syntax.test.js @@ -1,7 +1,7 @@ /* eslint-disable max-lines */ import dedent from 'dedent'; -import Markdown from '@shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; // Marked.js adds line returns after closing tags on some default tokens. // This removes those line returns for comparison sake. diff --git a/tests/markdown/non-breaking-spaces.test.js b/tests/markdown/non-breaking-spaces.test.js index e47b6ec87..731d0546e 100644 --- a/tests/markdown/non-breaking-spaces.test.js +++ b/tests/markdown/non-breaking-spaces.test.js @@ -1,6 +1,6 @@ -import Markdown from '@shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; describe('Non-Breaking Spaces Interactions', ()=>{ test('I am actually a single-line definition list!', function() { diff --git a/tests/markdown/paragraph-justification.test.js b/tests/markdown/paragraph-justification.test.js index 1fcf38730..6ce454623 100644 --- a/tests/markdown/paragraph-justification.test.js +++ b/tests/markdown/paragraph-justification.test.js @@ -1,6 +1,6 @@ -import Markdown from '@shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; describe('Justification', ()=>{ test('Left Justify', function() { diff --git a/tests/markdown/variables.test.js b/tests/markdown/variables.test.js index 43a7ef477..884553703 100644 --- a/tests/markdown/variables.test.js +++ b/tests/markdown/variables.test.js @@ -1,7 +1,7 @@ /* eslint-disable max-lines */ import dedent from 'dedent'; -import Markdown from '@shared/markdown.js'; +import Markdown from '../../shared/markdown.js'; // Marked.js adds line returns after closing tags on some default tokens. // This removes those line returns for comparison sake. From a7851523f02587829d3b07c80a9a635d96c8d86d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 27 Feb 2026 23:54:37 +0100 Subject: [PATCH 67/76] package-lock sync i guess --- package-lock.json | 127 ++++++++++++++++++---------------------------- 1 file changed, 50 insertions(+), 77 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc656ca8e..0bfa213d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1971,16 +1971,16 @@ } }, "node_modules/@cacheable/memory": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.7.tgz", - "integrity": "sha512-RbxnxAMf89Tp1dLhXMS7ceft/PGsDl1Ip7T20z5nZ+pwIAsQ1p2izPjVG69oCLv/jfQ7HDPHTWK0c9rcAWXN3A==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.8.tgz", + "integrity": "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==", "dev": true, "license": "MIT", "dependencies": { - "@cacheable/utils": "^2.3.3", - "@keyv/bigmap": "^1.3.0", - "hookified": "^1.14.0", - "keyv": "^5.5.5" + "@cacheable/utils": "^2.4.0", + "@keyv/bigmap": "^1.3.1", + "hookified": "^1.15.1", + "keyv": "^5.6.0" } }, "node_modules/@cacheable/memory/node_modules/@keyv/bigmap": { @@ -2012,13 +2012,13 @@ } }, "node_modules/@cacheable/utils": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.3.4.tgz", - "integrity": "sha512-knwKUJEYgIfwShABS1BX6JyJJTglAFcEU7EXqzTdiGCXur4voqkiJkdgZIQtWNFhynzDWERcTYv/sETMu3uJWA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.0.tgz", + "integrity": "sha512-PeMMsqjVq+bF0WBsxFBxr/WozBJiZKY0rUojuaCoIaKnEl3Ju1wfEwS+SV1DU/cSe8fqHIPiYJFif8T3MVt4cQ==", "dev": true, "license": "MIT", "dependencies": { - "hashery": "^1.3.0", + "hashery": "^1.5.0", "keyv": "^5.6.0" } }, @@ -3922,9 +3922,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz", - "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", + "version": "25.3.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.2.tgz", + "integrity": "sha512-RpV6r/ij22zRRdyBPcxDeKAzH43phWVKEjL2iksqo1Vz3CuBUrgmPpPhALKiRfU7OMCmeeO9vECBMsV0hMTG8Q==", "devOptional": true, "license": "MIT", "peer": true, @@ -4081,9 +4081,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", - "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "dev": true, "license": "MIT", "dependencies": { @@ -4094,9 +4094,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz", - "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -4957,7 +4957,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/base64-js": { @@ -5135,16 +5134,16 @@ } }, "node_modules/cacheable": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.2.tgz", - "integrity": "sha512-w+ZuRNmex9c1TR9RcsxbfTKCjSL0rh1WA5SABbrWprIHeNBdmyQLSYonlDy9gpD+63XT8DgZ/wNh1Smvc9WnJA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.3.tgz", + "integrity": "sha512-iffYMX4zxKp54evOH27fm92hs+DeC1DhXmNVN8Tr94M/iZIV42dqTHSR2Ik4TOSPyOAwKr7Yu3rN9ALoLkbWyQ==", "dev": true, "license": "MIT", "dependencies": { - "@cacheable/memory": "^2.0.7", - "@cacheable/utils": "^2.3.3", + "@cacheable/memory": "^2.0.8", + "@cacheable/utils": "^2.4.0", "hookified": "^1.15.0", - "keyv": "^5.5.5", + "keyv": "^5.6.0", "qified": "^0.6.0" } }, @@ -7309,34 +7308,22 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, "node_modules/glob/node_modules/brace-expansion": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", - "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" + "balanced-match": "^1.0.0" } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.6.tgz", - "integrity": "sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "license": "ISC", "dependencies": { - "brace-expansion": "^5.0.2" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -7452,17 +7439,16 @@ "license": "MIT" }, "node_modules/google-auth-library": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", - "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.1.tgz", + "integrity": "sha512-5awwuLrzNol+pFDmKJd0dKtZ0fPLAtoA5p7YO4ODsDu6ONJUVqbYwvv8y2ZBO5MBNp9TJXigB19710kYpBPdtA==", "license": "Apache-2.0", "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", - "gaxios": "^7.0.0", - "gcp-metadata": "^8.0.0", - "google-logging-utils": "^1.0.0", - "gtoken": "^8.0.0", + "gaxios": "7.1.3", + "gcp-metadata": "8.1.2", + "google-logging-utils": "1.1.3", "jws": "^4.0.0" }, "engines": { @@ -7512,19 +7498,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/gtoken": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", - "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", - "license": "MIT", - "dependencies": { - "gaxios": "^7.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -9765,9 +9738,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.3.tgz", - "integrity": "sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -9843,9 +9816,9 @@ } }, "node_modules/mongoose": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-9.2.2.tgz", - "integrity": "sha512-e06XdPPlH/L9aEq4vcnqIz5AxFFdfhlqrmymYDO7fZwnqwVp/u8pAH/cCEvvpXg0VlV0Tt5qwu6RUk8lhu6ifg==", + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-9.2.3.tgz", + "integrity": "sha512-4XFKKkXUOsdY+p07eJyio4mk0rzZOT4n5r5tLqZNeRZ/IsS68vS8Szw8uShX4p7S687XGGc+MFAp+6K1OIN0aw==", "license": "MIT", "dependencies": { "kareem": "3.2.0", @@ -11985,12 +11958,12 @@ } }, "node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" From e877148bf9ad20759814cf0ea00633f3062144ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sat, 28 Feb 2026 23:08:21 +0100 Subject: [PATCH 68/76] remove old compileAssets.js --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index c27346c6e..aaab05207 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,6 @@ "start": "node server.js", "build": "vite build", "preview": "vite preview", - "compileAssets": "node scripts/compileAssets.js --dev", "lint": "eslint --fix", "lint:dry": "eslint", "stylelint": "stylelint --fix **/*.{less}", From 2867a094502ed0db25ab8b504a1acb32dee12f90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 1 Mar 2026 23:32:49 +0100 Subject: [PATCH 69/76] restore test --- server/admin.api.spec.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/server/admin.api.spec.js b/server/admin.api.spec.js index 5a9fe0c11..2bb623e05 100644 --- a/server/admin.api.spec.js +++ b/server/admin.api.spec.js @@ -503,6 +503,42 @@ describe('Tests for admin api', ()=>{ }); }); + it('Error when review is already requested', async ()=>{ + const testLock = { + applied : 'YES', + code : 999, + editMessage : 'edit', + shareMessage : 'share', + reviewRequested : 'YES' + }; + + const testBrew = { + shareId : 'shareId', + title : 'title', + markModified : ()=>{ return true; }, + save : ()=>{ return Promise.resolve(); }, + lock : testLock + }; + + jest.spyOn(HomebrewModel, 'findOne') + .mockImplementationOnce(()=>{ + return Promise.resolve(false); + }); + + + const response = await app + .put(`/api/lock/review/request/${testBrew.shareId}`) + .catch((err)=>{return err;}); + + expect(response.status).toBe(500); + expect(response.body).toEqual({ + HBErrorCode : '70', + code : 500, + message : `Cannot find a locked brew with ID ${testBrew.shareId}`, + name : 'Brew Not Found', + originalUrl : `/api/lock/review/request/${testBrew.shareId}` + }); + }); it('Handle error while adding review request to a locked brew', async ()=>{ const testLock = { applied : 'YES', From 1425ba630e3bea10421aa9b2bd871dfdc900b75c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 1 Mar 2026 23:59:05 +0100 Subject: [PATCH 70/76] fixed test --- server/admin.api.spec.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/server/admin.api.spec.js b/server/admin.api.spec.js index 2bb623e05..5ca3ca1f9 100644 --- a/server/admin.api.spec.js +++ b/server/admin.api.spec.js @@ -521,14 +521,10 @@ describe('Tests for admin api', ()=>{ }; jest.spyOn(HomebrewModel, 'findOne') - .mockImplementationOnce(()=>{ - return Promise.resolve(false); - }); + .mockImplementationOnce(()=>Promise.resolve(testBrew)); - - const response = await app - .put(`/api/lock/review/request/${testBrew.shareId}`) - .catch((err)=>{return err;}); + const response = await request + .put(`/api/lock/review/request/${testBrew.shareId}`); expect(response.status).toBe(500); expect(response.body).toEqual({ From 0890b6e3f919e783cd8595e9299e1be129cef0b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Mar 2026 00:00:45 +0100 Subject: [PATCH 71/76] remove npm preview --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index aaab05207..1c91f6bd8 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "scripts": { "start": "node server.js", "build": "vite build", - "preview": "vite preview", "lint": "eslint --fix", "lint:dry": "eslint", "stylelint": "stylelint --fix **/*.{less}", From f3f8450081c27e9590f02355095682f4f7e83f5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 2 Mar 2026 00:08:47 +0100 Subject: [PATCH 72/76] how about now --- server/admin.api.spec.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/admin.api.spec.js b/server/admin.api.spec.js index 5ca3ca1f9..ce2a06d0d 100644 --- a/server/admin.api.spec.js +++ b/server/admin.api.spec.js @@ -528,10 +528,10 @@ describe('Tests for admin api', ()=>{ expect(response.status).toBe(500); expect(response.body).toEqual({ - HBErrorCode : '70', + HBErrorCode : '71', code : 500, - message : `Cannot find a locked brew with ID ${testBrew.shareId}`, - name : 'Brew Not Found', + message : `Review already requested for brew ${testBrew.shareId} - ${testBrew.title}`, + name : 'Review Already Requested', originalUrl : `/api/lock/review/request/${testBrew.shareId}` }); }); From 6144186870cf30c6db01f0e57bb0f27f1b3f3644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 3 Mar 2026 15:08:18 +0100 Subject: [PATCH 73/76] bring back stylelint --- package-lock.json | 522 +++++++++++++++++++++++++++------------------- package.json | 5 +- 2 files changed, 309 insertions(+), 218 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0bfa213d8..bd2de530f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,6 +62,7 @@ "vite": "^7.3.1" }, "devDependencies": { + "@stylistic/stylelint-plugin": "^5.0.1", "babel-jest": "^30.2.0", "babel-plugin-transform-import-meta": "^2.3.3", "eslint": "^9.39.1", @@ -72,7 +73,9 @@ "jest-expect-message": "^1.1.3", "jsdom": "^28.1.0", "jsdom-global": "^3.0.2", - "stylelint": "^16.25.0", + "stylelint": "^17.4.0", + "stylelint-config-recess-order": "^7.6.1", + "stylelint-config-recommended": "^18.0.0", "supertest": "^7.1.4" }, "engines": { @@ -2166,10 +2169,34 @@ "node": ">=20.19.0" } }, - "node_modules/@csstools/selector-specificity": { + "node_modules/@csstools/media-query-list-parser": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-5.0.0.tgz", + "integrity": "sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/selector-resolve-nested": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.0.tgz", + "integrity": "sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==", "dev": true, "funding": [ { @@ -2183,10 +2210,33 @@ ], "license": "MIT-0", "engines": { - "node": ">=18" + "node": ">=20.19.0" }, "peerDependencies": { - "postcss-selector-parser": "^7.0.0" + "postcss-selector-parser": "^7.1.1" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-6.0.0.tgz", + "integrity": "sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.1.1" } }, "node_modules/@dmsnell/diff-match-patch": { @@ -2195,17 +2245,6 @@ "integrity": "sha512-yejLPmM5pjsGvxS9gXablUSbInW7H976c/FJ4iQxWIm7/38xBySRemTPDe34lhg1gVLbJntX0+sH0jYfU+PN9A==", "license": "Apache-2.0" }, - "node_modules/@dual-bundle/import-meta-resolve": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz", - "integrity": "sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/JounQin" - } - }, "node_modules/@emnapi/core": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", @@ -3809,6 +3848,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", @@ -3829,6 +3881,28 @@ "@sinonjs/commons": "^3.0.1" } }, + "node_modules/@stylistic/stylelint-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-5.0.1.tgz", + "integrity": "sha512-NaVwCNVZ2LyPA3TnUwvjO9c6P6VUjgRB8UP8SOW+cAOJBVqPPuOIDawsvvtql/LhkuR3JuTdGvr/RM3dUl8l2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0", + "@csstools/media-query-list-parser": "^5.0.0", + "postcss": "^8.5.6", + "postcss-selector-parser": "^7.1.1", + "postcss-value-parser": "^4.2.0", + "style-search": "^0.1.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "stylelint": "^17.0.0" + } + }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -4639,16 +4713,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", @@ -5891,19 +5955,6 @@ "wrappy": "1" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -7190,6 +7241,19 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -7411,21 +7475,44 @@ } }, "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.1.tgz", + "integrity": "sha512-dW7vl+yiAJSp6aCekaVnVJxurRv7DCOLyXqEG3RYMYUg7AuJ2jCqPkZTA8ooqC2vtnkaMcV5WfFBMuEnTu1OQg==", "dev": true, "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@sindresorhus/merge-streams": "^4.0.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.5", + "is-path-inside": "^4.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.4.0" }, "engines": { - "node": ">=10" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7636,13 +7723,13 @@ "license": "MIT" }, "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-5.1.0.tgz", + "integrity": "sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=20.10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7797,6 +7884,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -8130,6 +8228,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -9279,13 +9390,6 @@ "node": ">=0.10.0" } }, - "node_modules/known-css-properties": { - "version": "0.37.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", - "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==", - "dev": true, - "license": "MIT" - }, "node_modules/less": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/less/-/less-4.5.1.tgz", @@ -9592,9 +9696,9 @@ } }, "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-4.0.0.tgz", + "integrity": "sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==", "dev": true, "license": "MIT", "funding": { @@ -9625,13 +9729,13 @@ "license": "MIT" }, "node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-14.1.0.tgz", + "integrity": "sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9836,22 +9940,6 @@ "url": "https://opencollective.com/mongoose" } }, - "node_modules/mongoose/node_modules/gcp-metadata": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-7.0.1.tgz", - "integrity": "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "gaxios": "^7.0.0", - "google-logging-utils": "^1.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/mongoose/node_modules/mongodb": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.0.0.tgz", @@ -10576,16 +10664,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -10667,6 +10745,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -10676,13 +10755,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", - "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", - "dev": true, - "license": "MIT" - }, "node_modules/postcss-safe-parser": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", @@ -10725,6 +10797,16 @@ "node": ">=4" } }, + "node_modules/postcss-sorting": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-9.1.0.tgz", + "integrity": "sha512-Mn8KJ45HNNG6JBpBizXcyf6LqY/qyqetGcou/nprDnFwBFBLGj0j/sNKV2lj2KMOVOwdXu14aEzqJv8CIV6e8g==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8.4.20" + } + }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -12027,10 +12109,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true, + "license": "ISC" + }, "node_modules/stylelint": { - "version": "16.26.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.26.1.tgz", - "integrity": "sha512-v20V59/crfc8sVTAtge0mdafI3AdnzQ2KsWe6v523L4OA1bJO02S7MO2oyXDCS6iWb9ckIPnqAFVItqSBQr7jw==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.4.0.tgz", + "integrity": "sha512-3kQ2/cHv3Zt8OBg+h2B8XCx9evEABQIrv4hh3uXahGz/ZEHrTR80zxBiK2NfXNaSoyBzxO1pjsz1Vhdzwn5XSw==", "dev": true, "funding": [ { @@ -12043,147 +12132,105 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-syntax-patches-for-csstree": "^1.0.19", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3", - "@csstools/selector-specificity": "^5.0.0", - "@dual-bundle/import-meta-resolve": "^4.2.1", - "balanced-match": "^2.0.0", + "@csstools/css-calc": "^3.1.1", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-syntax-patches-for-csstree": "^1.0.27", + "@csstools/css-tokenizer": "^4.0.0", + "@csstools/media-query-list-parser": "^5.0.0", + "@csstools/selector-resolve-nested": "^4.0.0", + "@csstools/selector-specificity": "^6.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.3", + "css-functions-list": "^3.3.3", "css-tree": "^3.1.0", "debug": "^4.4.3", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^11.1.1", + "file-entry-cache": "^11.1.2", "global-modules": "^2.0.0", - "globby": "^11.1.0", + "globby": "^16.1.0", "globjoin": "^0.1.4", - "html-tags": "^3.3.1", + "html-tags": "^5.1.0", "ignore": "^7.0.5", + "import-meta-resolve": "^4.2.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.37.0", - "mathml-tag-names": "^2.1.3", - "meow": "^13.2.0", + "mathml-tag-names": "^4.0.0", + "meow": "^14.0.0", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.5.6", - "postcss-resolve-nested-selector": "^0.1.6", "postcss-safe-parser": "^7.0.1", - "postcss-selector-parser": "^7.1.0", + "postcss-selector-parser": "^7.1.1", "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "supports-hyperlinks": "^3.2.0", + "string-width": "^8.1.1", + "supports-hyperlinks": "^4.4.0", "svg-tags": "^1.0.0", "table": "^6.9.0", - "write-file-atomic": "^5.0.1" + "write-file-atomic": "^7.0.0" }, "bin": { "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": ">=18.12.0" + "node": ">=20.19.0" } }, - "node_modules/stylelint/node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "node_modules/stylelint-config-recess-order": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recess-order/-/stylelint-config-recess-order-7.6.1.tgz", + "integrity": "sha512-ac0H/Iy2chh1YBADrua87G+nJCmG/SdG7gjnoLvtfpN0D+RuNfuADawfbCKvm0LMp5hvuRFNkJsu6xNoLM5ToA==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "stylelint": "^16.18.0 || ^17.0.0", + "stylelint-order": "^7.0.0" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-18.0.0.tgz", + "integrity": "sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/csstools" + "type": "opencollective", + "url": "https://opencollective.com/stylelint" }, { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "type": "github", + "url": "https://github.com/sponsors/stylelint" } ], "license": "MIT", - "peer": true, "engines": { - "node": ">=18" + "node": ">=20.19.0" }, "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" + "stylelint": "^17.0.0" } }, - "node_modules/stylelint/node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "node_modules/stylelint-order": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-7.0.1.tgz", + "integrity": "sha512-GWPei1zBVDDjxM+/BmcSCiOcHNd8rSqW6FUZtqQGlTRpD0Z5nSzspzWD8rtKif5KPdzUG68DApKEV/y/I9VbTw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", "peer": true, + "dependencies": { + "postcss": "^8.5.6", + "postcss-sorting": "^9.1.0" + }, "engines": { - "node": ">=18" - } - }, - "node_modules/stylelint/node_modules/@csstools/media-query-list-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", - "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" + "node": ">=20.19.0" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" + "stylelint": "^16.18.0 || ^17.0.0" } }, - "node_modules/stylelint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "license": "MIT" - }, - "node_modules/stylelint/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, "node_modules/stylelint/node_modules/file-entry-cache": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.2.tgz", @@ -12217,31 +12264,33 @@ } }, "node_modules/stylelint/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=8" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/stylelint/node_modules/write-file-atomic": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.1.tgz", + "integrity": "sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-regex": "^5.0.1" + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/superagent": { @@ -12315,22 +12364,48 @@ } }, "node_modules/supports-hyperlinks": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", - "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-4.4.0.tgz", + "integrity": "sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "has-flag": "^5.0.1", + "supports-color": "^10.2.2" }, "engines": { - "node": ">=14.18" + "node": ">=20" }, "funding": { "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz", + "integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -12863,6 +12938,19 @@ "node": ">=4" } }, + "node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", diff --git a/package.json b/package.json index 1c91f6bd8..9186b3bf0 100644 --- a/package.json +++ b/package.json @@ -138,6 +138,7 @@ "vite": "^7.3.1" }, "devDependencies": { + "@stylistic/stylelint-plugin": "^5.0.1", "babel-jest": "^30.2.0", "babel-plugin-transform-import-meta": "^2.3.3", "eslint": "^9.39.1", @@ -148,7 +149,9 @@ "jest-expect-message": "^1.1.3", "jsdom": "^28.1.0", "jsdom-global": "^3.0.2", - "stylelint": "^16.25.0", + "stylelint": "^17.4.0", + "stylelint-config-recess-order": "^7.6.1", + "stylelint-config-recommended": "^18.0.0", "supertest": "^7.1.4" } } From 71b6a478da4f41ccb63cb82dcb255d96d9c706f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 3 Mar 2026 15:17:06 +0100 Subject: [PATCH 74/76] last patch hopefully --- package-lock.json | 130 ++++++++++++++++++++++++++++-------------- package.json | 1 + scripts/buildAdmin.js | 32 ----------- 3 files changed, 88 insertions(+), 75 deletions(-) delete mode 100644 scripts/buildAdmin.js diff --git a/package-lock.json b/package-lock.json index bd2de530f..f4771c78b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -73,6 +73,7 @@ "jest-expect-message": "^1.1.3", "jsdom": "^28.1.0", "jsdom-global": "^3.0.2", + "postcss-less": "^6.0.0", "stylelint": "^17.4.0", "stylelint-config-recess-order": "^7.6.1", "stylelint-config-recommended": "^18.0.0", @@ -2132,9 +2133,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.28.tgz", - "integrity": "sha512-1NRf1CUBjnr3K7hu8BLxjQrKCxEe8FP/xmPTenAxCRZWVLbmGotkFvG9mfNpjA6k7Bw1bw4BilZq9cu19RA5pg==", + "version": "1.0.29", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.29.tgz", + "integrity": "sha512-jx9GjkkP5YHuTmko2eWAvpPnb0mB4mGRr2U7XwVNwevm8nlpobZEVk+GNmiYMk2VuA75v+plfXWyroWKmICZXg==", "dev": true, "funding": [ { @@ -3996,9 +3997,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.3.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.2.tgz", - "integrity": "sha512-RpV6r/ij22zRRdyBPcxDeKAzH43phWVKEjL2iksqo1Vz3CuBUrgmPpPhALKiRfU7OMCmeeO9vECBMsV0hMTG8Q==", + "version": "25.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz", + "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==", "devOptional": true, "license": "MIT", "peer": true, @@ -5290,9 +5291,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001774", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz", - "integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==", + "version": "1.0.30001776", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001776.tgz", + "integrity": "sha512-sg01JDPzZ9jGshqKSckOQthXnYwOEP50jeVFhaSFbZcOy05TiuuaffDOfcwtCisJ9kNQuLBFibYywv2Bgm9osw==", "funding": [ { "type": "opencollective", @@ -5636,9 +5637,9 @@ } }, "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5724,13 +5725,13 @@ } }, "node_modules/cssstyle": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.1.0.tgz", - "integrity": "sha512-Ml4fP2UT2K3CUBQnVlbdV/8aFDdlY69E+YnwJM+3VUWl08S3J8c8aRuJqCkD9Py8DHZ7zNNvsfKl8psocHZEFg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.2.0.tgz", + "integrity": "sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^5.0.0", + "@asamuzakjp/css-color": "^5.0.1", "@csstools/css-syntax-patches-for-csstree": "^1.0.28", "css-tree": "^3.1.0", "lru-cache": "^11.2.6" @@ -5851,9 +5852,9 @@ "license": "MIT" }, "node_modules/dedent": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", - "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -6004,9 +6005,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.302", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz", - "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==", + "version": "1.5.307", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz", + "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==", "license": "ISC" }, "node_modules/emittery": { @@ -6987,9 +6988,9 @@ } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.4.tgz", + "integrity": "sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA==", "dev": true, "license": "ISC" }, @@ -7185,15 +7186,14 @@ } }, "node_modules/gaxios": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", - "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.4.tgz", + "integrity": "sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==", "license": "Apache-2.0", "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", - "node-fetch": "^3.3.2", - "rimraf": "^5.0.1" + "node-fetch": "^3.3.2" }, "engines": { "node": ">=18" @@ -7542,6 +7542,21 @@ "node": ">=18" } }, + "node_modules/google-auth-library/node_modules/gaxios": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", + "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2", + "rimraf": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/google-logging-utils": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", @@ -9940,6 +9955,22 @@ "url": "https://opencollective.com/mongoose" } }, + "node_modules/mongoose/node_modules/gcp-metadata": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-7.0.1.tgz", + "integrity": "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/mongoose/node_modules/mongodb": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.0.0.tgz", @@ -10727,9 +10758,9 @@ } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", "funding": [ { "type": "opencollective", @@ -10755,6 +10786,19 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-less": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-6.0.0.tgz", + "integrity": "sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "postcss": "^8.3.5" + } + }, "node_modules/postcss-safe-parser": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", @@ -11462,9 +11506,9 @@ } }, "node_modules/sax": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", - "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.5.0.tgz", + "integrity": "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==", "license": "BlueOak-1.0.0", "optional": true, "engines": { @@ -12617,22 +12661,22 @@ } }, "node_modules/tldts": { - "version": "7.0.23", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.23.tgz", - "integrity": "sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==", + "version": "7.0.24", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.24.tgz", + "integrity": "sha512-1r6vQTTt1rUiJkI5vX7KG8PR342Ru/5Oh13kEQP2SMbRSZpOey9SrBe27IDxkoWulx8ShWu4K6C0BkctP8Z1bQ==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.23" + "tldts-core": "^7.0.24" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.0.23", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.23.tgz", - "integrity": "sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==", + "version": "7.0.24", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.24.tgz", + "integrity": "sha512-pj7yygNMoMRqG7ML2SDQ0xNIOfN3IBDUcPVM2Sg6hP96oFNN2nqnzHreT3z9xLq85IWJyNTvD38O002DdOrPMw==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index 9186b3bf0..2a040c0df 100644 --- a/package.json +++ b/package.json @@ -149,6 +149,7 @@ "jest-expect-message": "^1.1.3", "jsdom": "^28.1.0", "jsdom-global": "^3.0.2", + "postcss-less": "^6.0.0", "stylelint": "^17.4.0", "stylelint-config-recess-order": "^7.6.1", "stylelint-config-recommended": "^18.0.0", diff --git a/scripts/buildAdmin.js b/scripts/buildAdmin.js deleted file mode 100644 index 9c77315ef..000000000 --- a/scripts/buildAdmin.js +++ /dev/null @@ -1,32 +0,0 @@ - -import fs from 'fs-extra'; -import Proj from './project.json' with { type: 'json' }; -import vitreum from 'vitreum'; -const { pack } = vitreum; - -import lessTransform from 'vitreum/transforms/less.js'; -import assetTransform from 'vitreum/transforms/asset.js'; - -const isDev = !!process.argv.find((arg)=>arg=='--dev'); - -const transforms = { - '.less' : lessTransform, - '*' : assetTransform('./build') -}; - -const build = async ({ bundle, render, ssr })=>{ - const css = await lessTransform.generate({ paths: './shared' }); - await fs.outputFile('./build/admin/bundle.css', css); - await fs.outputFile('./build/admin/bundle.js', bundle); - await fs.outputFile('./build/admin/ssr.cjs', ssr); -}; - -fs.emptyDirSync('./build/admin'); -pack('./client/admin/admin.jsx', { - paths : ['./shared'], - libs : Proj.libs, - dev : isDev && build, - transforms -}) - .then(build) - .catch(console.error); From 60139429194f99aba1a3ce1f82e3c480c874bea1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 3 Mar 2026 15:20:30 +0100 Subject: [PATCH 75/76] move vite to devdependency --- package-lock.json | 23 +++-------------------- package.json | 6 +++--- 2 files changed, 6 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index f4771c78b..e52d0244b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,8 +58,7 @@ "react-frame-component": "^4.1.3", "react-router": "^7.9.6", "sanitize-filename": "1.6.3", - "superagent": "^10.2.1", - "vite": "^7.3.1" + "superagent": "^10.2.1" }, "devDependencies": { "@stylistic/stylelint-plugin": "^5.0.1", @@ -77,7 +76,8 @@ "stylelint": "^17.4.0", "stylelint-config-recess-order": "^7.6.1", "stylelint-config-recommended": "^18.0.0", - "supertest": "^7.1.4" + "supertest": "^7.1.4", + "vite": "^7.3.1" }, "engines": { "node": "^20.18.x", @@ -4002,7 +4002,6 @@ "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -9955,22 +9954,6 @@ "url": "https://opencollective.com/mongoose" } }, - "node_modules/mongoose/node_modules/gcp-metadata": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-7.0.1.tgz", - "integrity": "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "gaxios": "^7.0.0", - "google-logging-utils": "^1.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/mongoose/node_modules/mongodb": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.0.0.tgz", diff --git a/package.json b/package.json index 2a040c0df..1e029de50 100644 --- a/package.json +++ b/package.json @@ -134,8 +134,7 @@ "react-frame-component": "^4.1.3", "react-router": "^7.9.6", "sanitize-filename": "1.6.3", - "superagent": "^10.2.1", - "vite": "^7.3.1" + "superagent": "^10.2.1" }, "devDependencies": { "@stylistic/stylelint-plugin": "^5.0.1", @@ -153,6 +152,7 @@ "stylelint": "^17.4.0", "stylelint-config-recess-order": "^7.6.1", "stylelint-config-recommended": "^18.0.0", - "supertest": "^7.1.4" + "supertest": "^7.1.4", + "vite": "^7.3.1" } } From 6b2a06f4335acaf9b5d438b2623e45436b61e91c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 3 Mar 2026 15:23:56 +0100 Subject: [PATCH 76/76] package-lock sync --- package-lock.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/package-lock.json b/package-lock.json index e52d0244b..cf7ffba8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9954,6 +9954,22 @@ "url": "https://opencollective.com/mongoose" } }, + "node_modules/mongoose/node_modules/gcp-metadata": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-7.0.1.tgz", + "integrity": "sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/mongoose/node_modules/mongodb": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.0.0.tgz",