UNPKG

zenstack

Version:

FullStack enhancement for Prisma ORM: seamless integration from database to UI

53 lines (52 loc) 1.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateCheckerType = generateCheckerType; const sdk_1 = require("@zenstackhq/sdk"); const lower_case_first_1 = require("lower-case-first"); const ts_pattern_1 = require("ts-pattern"); /** * Generates a `ModelCheckers` interface that contains a `check` method for each model in the schema. * * E.g.: * * ```ts * type CheckerOperation = 'create' | 'read' | 'update' | 'delete'; * * export interface ModelCheckers { * user: { check(op: CheckerOperation, args?: { email?: string; age?: number; }): Promise<boolean> }, * ... * } * ``` */ function generateCheckerType(model) { return ` import type { PolicyCrudKind } from '@zenstackhq/runtime'; export interface ModelCheckers { ${(0, sdk_1.getDataModels)(model) .map((dataModel) => `\t${(0, lower_case_first_1.lowerCaseFirst)(dataModel.name)}: ${generateDataModelChecker(dataModel)}`) .join(',\n')} } `; } function generateDataModelChecker(dataModel) { return `{ check(args: { operation: PolicyCrudKind, where?: ${generateDataModelArgs(dataModel)} }): Promise<boolean> }`; } function generateDataModelArgs(dataModel) { return `{ ${dataModel.fields .filter((field) => isFieldFilterable(field)) .map((field) => `${field.name}?: ${mapFieldType(field)}`) .join('; ')} }`; } function isFieldFilterable(field) { return !!mapFieldType(field); } function mapFieldType(field) { return (0, ts_pattern_1.match)(field.type.type) .with('Boolean', () => 'boolean') .with(ts_pattern_1.P.union('BigInt', 'Int', 'Float', 'Decimal'), () => 'number') .with('String', () => 'string') .otherwise(() => undefined); } //# sourceMappingURL=checker-type-generator.js.map