- Node/Express/TypeScript API under /api/v1 with JWT auth (login, refresh, logout, /me) - Prisma schema: vendors, users, roles, products, categories, taxes, transactions - SQLite for local dev; Postgres via docker-compose for production - Full CRUD routes for vendors, users, categories, taxes, products with Zod validation and RBAC - Paginated list endpoints scoped per vendor; refresh token rotation - React/TypeScript admin SPA (Vite): login, protected routing, sidebar layout - Pages: Dashboard, Catalog (tabbed Products/Categories/Taxes), Users, Vendor Settings - Shared UI: Table, Modal, FormField, Btn, PageHeader components - Multi-stage Dockerfile; docker-compose with Postgres healthcheck - Seed script with demo vendor and owner account - INSTRUCTIONS.md, ROADMAP.md, .claude/launch.json for dev server config Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
29 lines
1.1 KiB
JavaScript
29 lines
1.1 KiB
JavaScript
const path = require('path')
|
|
|
|
const postInstallScriptPath = path.join(__dirname, '..', 'dist', 'scripts', 'postinstall.js')
|
|
const localInstallScriptPath = path.join(__dirname, '..', 'dist', 'scripts', 'localinstall.js')
|
|
|
|
try {
|
|
// that's when we develop in the monorepo, `dist` does not exist yet
|
|
// so we compile postinstall script and trigger it immediately after
|
|
if (require('../package.json').version === '0.0.0') {
|
|
const execa = require('execa')
|
|
const buildScriptPath = path.join(__dirname, '..', 'helpers', 'build.ts')
|
|
|
|
execa.sync('pnpm', ['tsx', buildScriptPath], {
|
|
// for the sake of simplicity, we IGNORE_EXTERNALS in our own setup
|
|
// ie. when the monorepo installs, the postinstall is self-contained
|
|
env: { DEV: true, IGNORE_EXTERNALS: true },
|
|
stdio: 'inherit',
|
|
})
|
|
|
|
// if enabled, it will install engine overrides into the cache dir
|
|
execa.sync('node', [localInstallScriptPath], {
|
|
stdio: 'inherit',
|
|
})
|
|
}
|
|
} catch {}
|
|
|
|
// that's the normal path, when users get this package ready/installed
|
|
require(postInstallScriptPath)
|