UNPKG

zenstack

Version:

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

135 lines 5.81 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ZModelFormatter = void 0; const langium_1 = require("langium"); const ast = __importStar(require("@zenstackhq/language/ast")); const module_1 = require("@zenstackhq/language/generated/module"); class ZModelFormatter extends langium_1.AbstractFormatter { constructor(services) { super(); this.isPrismaStyle = true; this.configurationProvider = services.shared.workspace.ConfigurationProvider; } format(node) { const formatter = this.getNodeFormatter(node); if (ast.isDataModelField(node) || ast.isTypeDefField(node)) { if (this.isPrismaStyle && (ast.isDataModel(node.$container) || ast.isTypeDef(node.$container))) { const dataModel = node.$container; const compareFn = (a, b) => b - a; const maxNameLength = dataModel.fields.map((x) => x.name.length).sort(compareFn)[0]; const maxTypeLength = dataModel.fields.map(this.getFieldTypeLength).sort(compareFn)[0]; formatter.property('type').prepend(langium_1.Formatting.spaces(maxNameLength - node.name.length + 1)); if (node.attributes.length > 0) { formatter .node(node.attributes[0]) .prepend(langium_1.Formatting.spaces(maxTypeLength - this.getFieldTypeLength(node) + 1)); formatter.nodes(...node.attributes.slice(1)).prepend(langium_1.Formatting.oneSpace()); } } else { formatter.property('type').prepend(langium_1.Formatting.oneSpace()); if (node.attributes.length > 0) { formatter.properties('attributes').prepend(langium_1.Formatting.oneSpace()); } } } else if (ast.isDataModelFieldAttribute(node)) { formatter.keyword('(').surround(langium_1.Formatting.noSpace()); formatter.keyword(')').prepend(langium_1.Formatting.noSpace()); formatter.keyword(',').append(langium_1.Formatting.oneSpace()); if (node.args.length > 1) { formatter.nodes(...node.args.slice(1)).prepend(langium_1.Formatting.oneSpace()); } } else if (ast.isAttributeArg(node)) { formatter.keyword(':').prepend(langium_1.Formatting.noSpace()); formatter.keyword(':').append(langium_1.Formatting.oneSpace()); } else if (ast.isAbstractDeclaration(node)) { const bracesOpen = formatter.keyword('{'); const bracesClose = formatter.keyword('}'); // allow extra blank lines between declarations formatter.interior(bracesOpen, bracesClose).prepend(langium_1.Formatting.indent({ allowMore: true })); bracesOpen.prepend(langium_1.Formatting.oneSpace()); bracesClose.prepend(langium_1.Formatting.newLine()); } else if (ast.isModel(node)) { const model = node; const nodes = formatter.nodes(...model.declarations); nodes.prepend(langium_1.Formatting.noIndent()); } } formatDocument(document, params) { this.formatOptions = params.options; this.configurationProvider.getConfiguration(module_1.ZModelLanguageMetaData.languageId, 'format').then((config) => { // in the CLI case, the config is undefined if (config) { if (config.usePrismaStyle === false) { this.setPrismaStyle(false); } else { this.setPrismaStyle(true); } } }); return super.formatDocument(document, params); } getFormatOptions() { return this.formatOptions; } getIndent() { return 1; } setPrismaStyle(isPrismaStyle) { this.isPrismaStyle = isPrismaStyle; } getFieldTypeLength(field) { let length; if (field.type.type) { length = field.type.type.length; } else if (field.type.reference) { length = field.type.reference.$refText.length; } else if (ast.isDataModelField(field) && field.type.unsupported) { const name = `Unsupported("${field.type.unsupported.value.value}")`; length = name.length; } else { // we shouldn't get here length = 1; } if (field.type.optional) { length += 1; } if (field.type.array) { length += 2; } return length; } } exports.ZModelFormatter = ZModelFormatter; //# sourceMappingURL=zmodel-formatter.js.map