UNPKG

zenstack

Version:

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

66 lines 2.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ast_1 = require("@zenstackhq/language/ast"); const utils_1 = require("./utils"); const constants_1 = require("../constants"); /** * Validates data source declarations. */ class DataSourceValidator { validate(ds, accept) { (0, utils_1.validateDuplicatedDeclarations)(ds, ds.fields, accept); this.validateProvider(ds, accept); this.validateUrl(ds, accept); this.validateRelationMode(ds, accept); } validateProvider(ds, accept) { const provider = ds.fields.find((f) => f.name === 'provider'); if (!provider) { accept('error', 'datasource must include a "provider" field', { node: ds, }); return; } const value = (0, utils_1.getStringLiteral)(provider.value); if (!value) { accept('error', '"provider" must be set to a string literal', { node: provider.value, }); } else if (!constants_1.SUPPORTED_PROVIDERS.includes(value)) { accept('error', `Provider "${value}" is not supported. Choose from ${constants_1.SUPPORTED_PROVIDERS.map((p) => '"' + p + '"').join(' | ')}.`, { node: provider.value }); } } validateUrl(ds, accept) { var _a; const url = ds.fields.find((f) => f.name === 'url'); if (!url) { accept('error', 'datasource must include a "url" field', { node: ds, }); } for (const fieldName of ['url', 'shadowDatabaseUrl']) { const field = ds.fields.find((f) => f.name === fieldName); if (!field) { continue; } const value = (0, utils_1.getStringLiteral)(field.value); if (!value && !((0, ast_1.isInvocationExpr)(field.value) && ((_a = field.value.function.ref) === null || _a === void 0 ? void 0 : _a.name) === 'env')) { accept('error', `"${fieldName}" must be set to a string literal or an invocation of "env" function`, { node: field.value, }); } } } validateRelationMode(ds, accept) { const field = ds.fields.find((f) => f.name === 'relationMode'); if (field) { const val = (0, utils_1.getStringLiteral)(field.value); if (!val || !['foreignKeys', 'prisma'].includes(val)) { accept('error', '"relationMode" must be set to "foreignKeys" or "prisma"', { node: field.value }); } } } } exports.default = DataSourceValidator; //# sourceMappingURL=datasource-validator.js.map