- 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>
268 lines
8.2 KiB
JavaScript
268 lines
8.2 KiB
JavaScript
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
const {
|
|
Decimal,
|
|
objectEnumValues,
|
|
makeStrictEnum,
|
|
Public,
|
|
getRuntime,
|
|
skip
|
|
} = require('@prisma/client/runtime/index-browser.js')
|
|
|
|
|
|
const Prisma = {}
|
|
|
|
exports.Prisma = Prisma
|
|
exports.$Enums = {}
|
|
|
|
/**
|
|
* Prisma Client JS version: 5.22.0
|
|
* Query Engine version: 605197351a3c8bdd595af2d2a9bc3025bca48ea2
|
|
*/
|
|
Prisma.prismaVersion = {
|
|
client: "5.22.0",
|
|
engine: "605197351a3c8bdd595af2d2a9bc3025bca48ea2"
|
|
}
|
|
|
|
Prisma.PrismaClientKnownRequestError = () => {
|
|
const runtimeName = getRuntime().prettyName;
|
|
throw new Error(`PrismaClientKnownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
|
)};
|
|
Prisma.PrismaClientUnknownRequestError = () => {
|
|
const runtimeName = getRuntime().prettyName;
|
|
throw new Error(`PrismaClientUnknownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
|
)}
|
|
Prisma.PrismaClientRustPanicError = () => {
|
|
const runtimeName = getRuntime().prettyName;
|
|
throw new Error(`PrismaClientRustPanicError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
|
)}
|
|
Prisma.PrismaClientInitializationError = () => {
|
|
const runtimeName = getRuntime().prettyName;
|
|
throw new Error(`PrismaClientInitializationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
|
)}
|
|
Prisma.PrismaClientValidationError = () => {
|
|
const runtimeName = getRuntime().prettyName;
|
|
throw new Error(`PrismaClientValidationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
|
)}
|
|
Prisma.NotFoundError = () => {
|
|
const runtimeName = getRuntime().prettyName;
|
|
throw new Error(`NotFoundError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
|
)}
|
|
Prisma.Decimal = Decimal
|
|
|
|
/**
|
|
* Re-export of sql-template-tag
|
|
*/
|
|
Prisma.sql = () => {
|
|
const runtimeName = getRuntime().prettyName;
|
|
throw new Error(`sqltag is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
|
)}
|
|
Prisma.empty = () => {
|
|
const runtimeName = getRuntime().prettyName;
|
|
throw new Error(`empty is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
|
)}
|
|
Prisma.join = () => {
|
|
const runtimeName = getRuntime().prettyName;
|
|
throw new Error(`join is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
|
)}
|
|
Prisma.raw = () => {
|
|
const runtimeName = getRuntime().prettyName;
|
|
throw new Error(`raw is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
|
)}
|
|
Prisma.validator = Public.validator
|
|
|
|
/**
|
|
* Extensions
|
|
*/
|
|
Prisma.getExtensionContext = () => {
|
|
const runtimeName = getRuntime().prettyName;
|
|
throw new Error(`Extensions.getExtensionContext is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
|
)}
|
|
Prisma.defineExtension = () => {
|
|
const runtimeName = getRuntime().prettyName;
|
|
throw new Error(`Extensions.defineExtension is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
|
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
|
)}
|
|
|
|
/**
|
|
* Shorthand utilities for JSON filtering
|
|
*/
|
|
Prisma.DbNull = objectEnumValues.instances.DbNull
|
|
Prisma.JsonNull = objectEnumValues.instances.JsonNull
|
|
Prisma.AnyNull = objectEnumValues.instances.AnyNull
|
|
|
|
Prisma.NullTypes = {
|
|
DbNull: objectEnumValues.classes.DbNull,
|
|
JsonNull: objectEnumValues.classes.JsonNull,
|
|
AnyNull: objectEnumValues.classes.AnyNull
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Enums
|
|
*/
|
|
|
|
exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
|
|
Serializable: 'Serializable'
|
|
});
|
|
|
|
exports.Prisma.VendorScalarFieldEnum = {
|
|
id: 'id',
|
|
name: 'name',
|
|
businessNum: 'businessNum',
|
|
taxSettings: 'taxSettings',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
};
|
|
|
|
exports.Prisma.RoleScalarFieldEnum = {
|
|
id: 'id',
|
|
name: 'name'
|
|
};
|
|
|
|
exports.Prisma.UserScalarFieldEnum = {
|
|
id: 'id',
|
|
email: 'email',
|
|
passwordHash: 'passwordHash',
|
|
name: 'name',
|
|
vendorId: 'vendorId',
|
|
roleId: 'roleId',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
};
|
|
|
|
exports.Prisma.RefreshTokenScalarFieldEnum = {
|
|
id: 'id',
|
|
token: 'token',
|
|
userId: 'userId',
|
|
expiresAt: 'expiresAt',
|
|
createdAt: 'createdAt'
|
|
};
|
|
|
|
exports.Prisma.CategoryScalarFieldEnum = {
|
|
id: 'id',
|
|
name: 'name',
|
|
vendorId: 'vendorId',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
};
|
|
|
|
exports.Prisma.TaxScalarFieldEnum = {
|
|
id: 'id',
|
|
name: 'name',
|
|
rate: 'rate',
|
|
vendorId: 'vendorId',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
};
|
|
|
|
exports.Prisma.ProductScalarFieldEnum = {
|
|
id: 'id',
|
|
name: 'name',
|
|
sku: 'sku',
|
|
description: 'description',
|
|
price: 'price',
|
|
vendorId: 'vendorId',
|
|
categoryId: 'categoryId',
|
|
taxId: 'taxId',
|
|
tags: 'tags',
|
|
version: 'version',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
};
|
|
|
|
exports.Prisma.TransactionScalarFieldEnum = {
|
|
id: 'id',
|
|
idempotencyKey: 'idempotencyKey',
|
|
vendorId: 'vendorId',
|
|
userId: 'userId',
|
|
status: 'status',
|
|
paymentMethod: 'paymentMethod',
|
|
subtotal: 'subtotal',
|
|
taxTotal: 'taxTotal',
|
|
discountTotal: 'discountTotal',
|
|
total: 'total',
|
|
notes: 'notes',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
};
|
|
|
|
exports.Prisma.TransactionItemScalarFieldEnum = {
|
|
id: 'id',
|
|
transactionId: 'transactionId',
|
|
productId: 'productId',
|
|
productName: 'productName',
|
|
quantity: 'quantity',
|
|
unitPrice: 'unitPrice',
|
|
taxRate: 'taxRate',
|
|
discount: 'discount',
|
|
total: 'total'
|
|
};
|
|
|
|
exports.Prisma.SortOrder = {
|
|
asc: 'asc',
|
|
desc: 'desc'
|
|
};
|
|
|
|
exports.Prisma.NullsOrder = {
|
|
first: 'first',
|
|
last: 'last'
|
|
};
|
|
|
|
|
|
exports.Prisma.ModelName = {
|
|
Vendor: 'Vendor',
|
|
Role: 'Role',
|
|
User: 'User',
|
|
RefreshToken: 'RefreshToken',
|
|
Category: 'Category',
|
|
Tax: 'Tax',
|
|
Product: 'Product',
|
|
Transaction: 'Transaction',
|
|
TransactionItem: 'TransactionItem'
|
|
};
|
|
|
|
/**
|
|
* This is a stub Prisma Client that will error at runtime if called.
|
|
*/
|
|
class PrismaClient {
|
|
constructor() {
|
|
return new Proxy(this, {
|
|
get(target, prop) {
|
|
let message
|
|
const runtime = getRuntime()
|
|
if (runtime.isEdge) {
|
|
message = `PrismaClient is not configured to run in ${runtime.prettyName}. In order to run Prisma Client on edge runtime, either:
|
|
- Use Prisma Accelerate: https://pris.ly/d/accelerate
|
|
- Use Driver Adapters: https://pris.ly/d/driver-adapters
|
|
`;
|
|
} else {
|
|
message = 'PrismaClient is unable to run in this browser environment, or has been bundled for the browser (running in `' + runtime.prettyName + '`).'
|
|
}
|
|
|
|
message += `
|
|
If this is unexpected, please open an issue: https://pris.ly/prisma-prisma-bug-report`
|
|
|
|
throw new Error(message)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
exports.PrismaClient = PrismaClient
|
|
|
|
Object.assign(exports, Prisma)
|