refactor: extract inline build scripts from package.json to files

- Extract copy-resources, copy-themes, copy-export-html from root
  package.json inline node -e commands to proper .cjs script files
- Extract pi-coding-agent copy-assets (356-char inline command) to
  scripts/copy-assets.cjs with readable multi-line formatting
- All scripts use .cjs extension for CommonJS compatibility in ESM
  package context
This commit is contained in:
Jeremy McSpadden 2026-03-16 13:34:05 -05:00
parent 4af3e5b741
commit d41338cafb
6 changed files with 44 additions and 4 deletions

View file

@ -44,9 +44,9 @@
"build:native-pkg": "npm run build -w @gsd/native",
"build:pi": "npm run build:native-pkg && npm run build:pi-tui && npm run build:pi-ai && npm run build:pi-agent-core && npm run build:pi-coding-agent",
"build": "npm run build:pi && tsc && npm run copy-resources && npm run copy-themes && npm run copy-export-html",
"copy-resources": "node -e \"const{cpSync,rmSync}=require('fs');rmSync('dist/resources',{recursive:true,force:true});cpSync('src/resources','dist/resources',{recursive:true,force:true})\"",
"copy-themes": "node -e \"const{mkdirSync,cpSync}=require('fs');const{resolve}=require('path');const src=resolve(__dirname,'packages/pi-coding-agent/dist/modes/interactive/theme');mkdirSync('pkg/dist/modes/interactive/theme',{recursive:true});cpSync(src,'pkg/dist/modes/interactive/theme',{recursive:true})\"",
"copy-export-html": "node -e \"const{mkdirSync,cpSync}=require('fs');const{resolve}=require('path');const src=resolve(__dirname,'packages/pi-coding-agent/dist/core/export-html');mkdirSync('pkg/dist/core/export-html',{recursive:true});cpSync(src,'pkg/dist/core/export-html',{recursive:true})\"",
"copy-resources": "node scripts/copy-resources.cjs",
"copy-themes": "node scripts/copy-themes.cjs",
"copy-export-html": "node scripts/copy-export-html.cjs",
"test:unit": "node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/resources/extensions/gsd/tests/*.test.ts src/resources/extensions/gsd/tests/*.test.mjs src/tests/*.test.ts",
"test:coverage": "c8 --reporter=text --reporter=lcov --exclude='src/resources/extensions/gsd/tests/**' --exclude='src/tests/**' --exclude='scripts/**' --exclude='native/**' --exclude='node_modules/**' --check-coverage --statements=40 --lines=40 --branches=0 --functions=0 node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/resources/extensions/gsd/tests/*.test.ts src/resources/extensions/gsd/tests/*.test.mjs src/tests/*.test.ts",
"test:integration": "node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/resources/extensions/gsd/tests/*integration*.test.ts src/tests/integration/*.test.ts",

View file

@ -21,7 +21,7 @@
},
"scripts": {
"build": "tsc -p tsconfig.json && npm run copy-assets",
"copy-assets": "node -e \"const{mkdirSync,cpSync}=require('fs');mkdirSync('dist/modes/interactive/theme',{recursive:true});cpSync('src/modes/interactive/theme','dist/modes/interactive/theme',{recursive:true,filter:(s)=>!s.endsWith('.ts')});mkdirSync('dist/core/export-html/vendor',{recursive:true});cpSync('src/core/export-html/template.html','dist/core/export-html/template.html');cpSync('src/core/export-html/template.css','dist/core/export-html/template.css');cpSync('src/core/export-html/template.js','dist/core/export-html/template.js');cpSync('src/core/export-html/vendor','dist/core/export-html/vendor',{recursive:true,filter:(s)=>!s.endsWith('.ts')});mkdirSync('dist/core/lsp',{recursive:true});cpSync('src/core/lsp/defaults.json','dist/core/lsp/defaults.json');cpSync('src/core/lsp/lsp.md','dist/core/lsp/lsp.md')\""
"copy-assets": "node scripts/copy-assets.cjs"
},
"dependencies": {
"@mariozechner/jiti": "^2.6.2",

View file

@ -0,0 +1,24 @@
#!/usr/bin/env node
const { mkdirSync, cpSync } = require('fs');
// Theme assets
mkdirSync('dist/modes/interactive/theme', { recursive: true });
cpSync('src/modes/interactive/theme', 'dist/modes/interactive/theme', {
recursive: true,
filter: (s) => !s.endsWith('.ts'),
});
// Export HTML templates and vendor files
mkdirSync('dist/core/export-html/vendor', { recursive: true });
cpSync('src/core/export-html/template.html', 'dist/core/export-html/template.html');
cpSync('src/core/export-html/template.css', 'dist/core/export-html/template.css');
cpSync('src/core/export-html/template.js', 'dist/core/export-html/template.js');
cpSync('src/core/export-html/vendor', 'dist/core/export-html/vendor', {
recursive: true,
filter: (s) => !s.endsWith('.ts'),
});
// LSP defaults
mkdirSync('dist/core/lsp', { recursive: true });
cpSync('src/core/lsp/defaults.json', 'dist/core/lsp/defaults.json');
cpSync('src/core/lsp/lsp.md', 'dist/core/lsp/lsp.md');

View file

@ -0,0 +1,6 @@
#!/usr/bin/env node
const { mkdirSync, cpSync } = require('fs');
const { resolve } = require('path');
const src = resolve(__dirname, '..', 'packages', 'pi-coding-agent', 'dist', 'core', 'export-html');
mkdirSync('pkg/dist/core/export-html', { recursive: true });
cpSync(src, 'pkg/dist/core/export-html', { recursive: true });

View file

@ -0,0 +1,4 @@
#!/usr/bin/env node
const { cpSync, rmSync } = require('fs');
rmSync('dist/resources', { recursive: true, force: true });
cpSync('src/resources', 'dist/resources', { recursive: true, force: true });

6
scripts/copy-themes.cjs Normal file
View file

@ -0,0 +1,6 @@
#!/usr/bin/env node
const { mkdirSync, cpSync } = require('fs');
const { resolve } = require('path');
const src = resolve(__dirname, '..', 'packages', 'pi-coding-agent', 'dist', 'modes', 'interactive', 'theme');
mkdirSync('pkg/dist/modes/interactive/theme', { recursive: true });
cpSync(src, 'pkg/dist/modes/interactive/theme', { recursive: true });