mirror of
https://github.com/actualbudget/actual.git
synced 2026-10-11 22:49:59 +00:00
[AI] Replace vite-plugin-peggy-loader with an in-repo Vite plugin (#8285)
* [AI] Replace vite-plugin-peggy-loader with in-repo Peggy plugin Drop the third-party vite-plugin-peggy-loader dependency in favor of a small in-repo Vite plugin (packages/loot-core/scripts/peggy.mts) that compiles .pegjs grammars using the existing peggy dependency. Wire it into the loot-core and api vite/vitest configs, and remove the now-dead loader from the component-library config (it imports no grammars). Co-Authored-By: Claude Opus 4.8 <[email protected]> Claude-Session: https://claude.ai/code/session_01Up3H4YR7L8Qb4UKxbasyMp * [AI] Host the Peggy Vite plugin in a workspace package Move the in-repo Peggy loader out of packages/loot-core/scripts and into a dedicated private workspace package, @actual-app/vite-plugin-peggy, so the loot-core and api configs reference it as a normal workspace dependency instead of reaching across packages with ../loot-core relative imports. The peggy dependency now lives with the plugin that uses it. Co-Authored-By: Claude Opus 4.8 <[email protected]> Claude-Session: https://claude.ai/code/session_01Up3H4YR7L8Qb4UKxbasyMp * [AI] Rename release note to match PR number Co-Authored-By: Claude Opus 4.8 <[email protected]> Claude-Session: https://claude.ai/code/session_01Up3H4YR7L8Qb4UKxbasyMp --------- Co-authored-by: Claude <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
ee972d45e6
commit
c74923eb30
@@ -62,13 +62,13 @@
|
|||||||
"uuid": "^14.0.0"
|
"uuid": "^14.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@actual-app/vite-plugin-peggy": "workspace:*",
|
||||||
"@playwright/test": "1.59.1",
|
"@playwright/test": "1.59.1",
|
||||||
"@typescript/native-preview": "beta",
|
"@typescript/native-preview": "beta",
|
||||||
"rollup-plugin-visualizer": "^7.0.1",
|
"rollup-plugin-visualizer": "^7.0.1",
|
||||||
"typescript-strict-plugin": "^2.4.4",
|
"typescript-strict-plugin": "^2.4.4",
|
||||||
"vite": "^8.0.16",
|
"vite": "^8.0.16",
|
||||||
"vite-plugin-node-polyfills": "^0.28.0",
|
"vite-plugin-node-polyfills": "^0.28.0",
|
||||||
"vite-plugin-peggy-loader": "^2.0.1",
|
|
||||||
"vitest": "^4.1.8"
|
"vitest": "^4.1.8"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
|
import { peggyLoader } from '@actual-app/vite-plugin-peggy';
|
||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
import { nodePolyfills } from 'vite-plugin-node-polyfills';
|
import { nodePolyfills } from 'vite-plugin-node-polyfills';
|
||||||
import peggyLoader from 'vite-plugin-peggy-loader';
|
|
||||||
|
|
||||||
const distDir = path.resolve(__dirname, 'dist');
|
const distDir = path.resolve(__dirname, 'dist');
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
|
import { peggyLoader } from '@actual-app/vite-plugin-peggy';
|
||||||
import { visualizer } from 'rollup-plugin-visualizer';
|
import { visualizer } from 'rollup-plugin-visualizer';
|
||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
import peggyLoader from 'vite-plugin-peggy-loader';
|
|
||||||
import { configDefaults } from 'vitest/config';
|
import { configDefaults } from 'vitest/config';
|
||||||
|
|
||||||
const lootCoreRoot = path.resolve(__dirname, '../loot-core');
|
const lootCoreRoot = path.resolve(__dirname, '../loot-core');
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import react from '@vitejs/plugin-react';
|
import react from '@vitejs/plugin-react';
|
||||||
import peggyLoader from 'vite-plugin-peggy-loader';
|
|
||||||
import { defineConfig } from 'vitest/config';
|
import { defineConfig } from 'vitest/config';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
@@ -9,5 +8,5 @@ export default defineConfig({
|
|||||||
include: ['src/**/*.web.test.(js|jsx|ts|tsx)'],
|
include: ['src/**/*.web.test.(js|jsx|ts|tsx)'],
|
||||||
maxWorkers: 2,
|
maxWorkers: 2,
|
||||||
},
|
},
|
||||||
plugins: [react(), peggyLoader()],
|
plugins: [react()],
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -207,6 +207,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@actual-app/crdt": "workspace:*",
|
"@actual-app/crdt": "workspace:*",
|
||||||
|
"@actual-app/vite-plugin-peggy": "workspace:*",
|
||||||
"@types/adm-zip": "^0.5.8",
|
"@types/adm-zip": "^0.5.8",
|
||||||
"@types/better-sqlite3": "^7.6.13",
|
"@types/better-sqlite3": "^7.6.13",
|
||||||
"@types/jlongster__sql.js": "npm:@types/sql.js@latest",
|
"@types/jlongster__sql.js": "npm:@types/sql.js@latest",
|
||||||
@@ -224,7 +225,6 @@
|
|||||||
"mockdate": "^3.0.5",
|
"mockdate": "^3.0.5",
|
||||||
"npm-run-all": "^4.1.5",
|
"npm-run-all": "^4.1.5",
|
||||||
"path-browserify": "^1.0.1",
|
"path-browserify": "^1.0.1",
|
||||||
"peggy": "5.1.0",
|
|
||||||
"rollup-plugin-visualizer": "^7.0.1",
|
"rollup-plugin-visualizer": "^7.0.1",
|
||||||
"stream-browserify": "^3.0.0",
|
"stream-browserify": "^3.0.0",
|
||||||
"timers-browserify": "^2.0.12",
|
"timers-browserify": "^2.0.12",
|
||||||
@@ -233,7 +233,6 @@
|
|||||||
"util": "^0.12.5",
|
"util": "^0.12.5",
|
||||||
"vite": "^8.0.16",
|
"vite": "^8.0.16",
|
||||||
"vite-plugin-node-polyfills": "^0.28.0",
|
"vite-plugin-node-polyfills": "^0.28.0",
|
||||||
"vite-plugin-peggy-loader": "^2.0.1",
|
|
||||||
"vitest": "^4.1.8",
|
"vitest": "^4.1.8",
|
||||||
"yargs": "^18.0.0"
|
"yargs": "^18.0.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
declare module 'vite-plugin-peggy-loader';
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
|
import { peggyLoader } from '@actual-app/vite-plugin-peggy';
|
||||||
import { visualizer } from 'rollup-plugin-visualizer';
|
import { visualizer } from 'rollup-plugin-visualizer';
|
||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
import { nodePolyfills } from 'vite-plugin-node-polyfills';
|
import { nodePolyfills } from 'vite-plugin-node-polyfills';
|
||||||
import peggyLoader from 'vite-plugin-peggy-loader';
|
|
||||||
|
|
||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
export default defineConfig(({ mode }) => {
|
export default defineConfig(({ mode }) => {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
|
import { peggyLoader } from '@actual-app/vite-plugin-peggy';
|
||||||
import { visualizer } from 'rollup-plugin-visualizer';
|
import { visualizer } from 'rollup-plugin-visualizer';
|
||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
import peggyLoader from 'vite-plugin-peggy-loader';
|
|
||||||
|
|
||||||
export default defineConfig(({ mode }) => {
|
export default defineConfig(({ mode }) => {
|
||||||
const outDir = path.resolve(__dirname, 'lib-dist/electron');
|
const outDir = path.resolve(__dirname, 'lib-dist/electron');
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import peggyLoader from 'vite-plugin-peggy-loader';
|
import { peggyLoader } from '@actual-app/vite-plugin-peggy';
|
||||||
import { defineConfig } from 'vitest/config';
|
import { defineConfig } from 'vitest/config';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import peggyLoader from 'vite-plugin-peggy-loader';
|
import { peggyLoader } from '@actual-app/vite-plugin-peggy';
|
||||||
import { defineConfig } from 'vitest/config';
|
import { defineConfig } from 'vitest/config';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import peggy from 'peggy';
|
||||||
|
|
||||||
|
// Matches the grammar files imported across the codebase (`.pegjs`/`.peggy`).
|
||||||
|
const GRAMMAR_RE = /\.peg(js|gy)$/;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In-repo replacement for the third-party `vite-plugin-peggy-loader`. Compiles
|
||||||
|
* imported Peggy grammars into an ES module that exports the generated parser
|
||||||
|
* (notably its `parse` function), using the `peggy` dependency directly.
|
||||||
|
*
|
||||||
|
* @returns {import('vite').Plugin}
|
||||||
|
*/
|
||||||
|
export function peggyLoader() {
|
||||||
|
return {
|
||||||
|
name: 'peggy-loader',
|
||||||
|
transform(grammar, id) {
|
||||||
|
if (!GRAMMAR_RE.test(id)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const code = peggy.generate(grammar, {
|
||||||
|
output: 'source',
|
||||||
|
format: 'es',
|
||||||
|
grammarSource: id,
|
||||||
|
});
|
||||||
|
|
||||||
|
return { code, map: null };
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "@actual-app/vite-plugin-peggy",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"private": true,
|
||||||
|
"description": "Vite plugin that compiles Peggy grammars (.pegjs) into ES modules.",
|
||||||
|
"type": "module",
|
||||||
|
"main": "./index.js",
|
||||||
|
"exports": "./index.js",
|
||||||
|
"dependencies": {
|
||||||
|
"peggy": "5.1.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"vite": "*"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
category: Maintenance
|
||||||
|
authors: [MatissJanis]
|
||||||
|
---
|
||||||
|
|
||||||
|
Replace the `vite-plugin-peggy-loader` dependency with a small in-repo Vite plugin that compiles Peggy grammars using the existing `peggy` dependency.
|
||||||
@@ -18,6 +18,7 @@ __metadata:
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@actual-app/core": "workspace:*"
|
"@actual-app/core": "workspace:*"
|
||||||
"@actual-app/crdt": "workspace:*"
|
"@actual-app/crdt": "workspace:*"
|
||||||
|
"@actual-app/vite-plugin-peggy": "workspace:*"
|
||||||
"@playwright/test": "npm:1.59.1"
|
"@playwright/test": "npm:1.59.1"
|
||||||
"@typescript/native-preview": "npm:beta"
|
"@typescript/native-preview": "npm:beta"
|
||||||
better-sqlite3: "npm:^12.10.0"
|
better-sqlite3: "npm:^12.10.0"
|
||||||
@@ -27,7 +28,6 @@ __metadata:
|
|||||||
uuid: "npm:^14.0.0"
|
uuid: "npm:^14.0.0"
|
||||||
vite: "npm:^8.0.16"
|
vite: "npm:^8.0.16"
|
||||||
vite-plugin-node-polyfills: "npm:^0.28.0"
|
vite-plugin-node-polyfills: "npm:^0.28.0"
|
||||||
vite-plugin-peggy-loader: "npm:^2.0.1"
|
|
||||||
vitest: "npm:^4.1.8"
|
vitest: "npm:^4.1.8"
|
||||||
languageName: unknown
|
languageName: unknown
|
||||||
linkType: soft
|
linkType: soft
|
||||||
@@ -99,6 +99,7 @@ __metadata:
|
|||||||
resolution: "@actual-app/core@workspace:packages/loot-core"
|
resolution: "@actual-app/core@workspace:packages/loot-core"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@actual-app/crdt": "workspace:*"
|
"@actual-app/crdt": "workspace:*"
|
||||||
|
"@actual-app/vite-plugin-peggy": "workspace:*"
|
||||||
"@jlongster/sql.js": "npm:^1.6.7"
|
"@jlongster/sql.js": "npm:^1.6.7"
|
||||||
"@rschedule/core": "npm:^1.5.0"
|
"@rschedule/core": "npm:^1.5.0"
|
||||||
"@rschedule/standard-date-adapter": "npm:^1.5.0"
|
"@rschedule/standard-date-adapter": "npm:^1.5.0"
|
||||||
@@ -131,7 +132,6 @@ __metadata:
|
|||||||
mockdate: "npm:^3.0.5"
|
mockdate: "npm:^3.0.5"
|
||||||
npm-run-all: "npm:^4.1.5"
|
npm-run-all: "npm:^4.1.5"
|
||||||
path-browserify: "npm:^1.0.1"
|
path-browserify: "npm:^1.0.1"
|
||||||
peggy: "npm:5.1.0"
|
|
||||||
promise-retry: "npm:^2.0.1"
|
promise-retry: "npm:^2.0.1"
|
||||||
rollup-plugin-visualizer: "npm:^7.0.1"
|
rollup-plugin-visualizer: "npm:^7.0.1"
|
||||||
stream-browserify: "npm:^3.0.0"
|
stream-browserify: "npm:^3.0.0"
|
||||||
@@ -143,7 +143,6 @@ __metadata:
|
|||||||
uuid: "npm:^14.0.0"
|
uuid: "npm:^14.0.0"
|
||||||
vite: "npm:^8.0.16"
|
vite: "npm:^8.0.16"
|
||||||
vite-plugin-node-polyfills: "npm:^0.28.0"
|
vite-plugin-node-polyfills: "npm:^0.28.0"
|
||||||
vite-plugin-peggy-loader: "npm:^2.0.1"
|
|
||||||
vitest: "npm:^4.1.8"
|
vitest: "npm:^4.1.8"
|
||||||
xml2js: "npm:^0.6.2"
|
xml2js: "npm:^0.6.2"
|
||||||
yargs: "npm:^18.0.0"
|
yargs: "npm:^18.0.0"
|
||||||
@@ -209,6 +208,16 @@ __metadata:
|
|||||||
languageName: unknown
|
languageName: unknown
|
||||||
linkType: soft
|
linkType: soft
|
||||||
|
|
||||||
|
"@actual-app/vite-plugin-peggy@workspace:*, @actual-app/vite-plugin-peggy@workspace:packages/vite-plugin-peggy":
|
||||||
|
version: 0.0.0-use.local
|
||||||
|
resolution: "@actual-app/vite-plugin-peggy@workspace:packages/vite-plugin-peggy"
|
||||||
|
dependencies:
|
||||||
|
peggy: "npm:5.1.0"
|
||||||
|
peerDependencies:
|
||||||
|
vite: "*"
|
||||||
|
languageName: unknown
|
||||||
|
linkType: soft
|
||||||
|
|
||||||
"@actual-app/web@workspace:*, @actual-app/web@workspace:packages/desktop-client":
|
"@actual-app/web@workspace:*, @actual-app/web@workspace:packages/desktop-client":
|
||||||
version: 0.0.0-use.local
|
version: 0.0.0-use.local
|
||||||
resolution: "@actual-app/web@workspace:packages/desktop-client"
|
resolution: "@actual-app/web@workspace:packages/desktop-client"
|
||||||
@@ -26861,15 +26870,6 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"vite-plugin-peggy-loader@npm:^2.0.1":
|
|
||||||
version: 2.0.1
|
|
||||||
resolution: "vite-plugin-peggy-loader@npm:2.0.1"
|
|
||||||
peerDependencies:
|
|
||||||
peggy: ^1.2.0 || ^3.0.2 || ^4.0.0
|
|
||||||
checksum: 10/55460efe15fe84774907a0f46b4351bc3d5e672c32575af3142aca27b99b64c45727e3159bfb191fdc9b890fba4a08eb306e4a8ce4823b1cfcfaa4bf79fa62ff
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"vite-plugin-pwa@npm:^1.3.0":
|
"vite-plugin-pwa@npm:^1.3.0":
|
||||||
version: 1.3.0
|
version: 1.3.0
|
||||||
resolution: "vite-plugin-pwa@npm:1.3.0"
|
resolution: "vite-plugin-pwa@npm:1.3.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user