@zenstackhq/language 3.0.0-alpha.8 → 3.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ast.cjs +85 -156
- package/dist/ast.cjs.map +1 -1
- package/dist/ast.d.cts +45 -80
- package/dist/ast.d.ts +45 -80
- package/dist/ast.js +79 -144
- package/dist/ast.js.map +1 -1
- package/dist/index.cjs +693 -623
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +695 -625
- package/dist/index.js.map +1 -1
- package/dist/utils.cjs +1528 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +94 -0
- package/dist/utils.d.ts +94 -0
- package/dist/utils.js +1453 -0
- package/dist/utils.js.map +1 -0
- package/package.json +18 -4
- package/res/stdlib.zmodel +47 -101
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/constants.ts","../src/generated/ast.ts"],"sourcesContent":["import { invariant } from '@zenstackhq/common-helpers';\nimport { AstUtils, URI, type AstNode, type LangiumDocument, type LangiumDocuments, type Reference } from 'langium';\nimport fs from 'node:fs';\nimport path from 'path';\nimport { STD_LIB_MODULE_NAME, type ExpressionContext } from './constants';\nimport {\n BinaryExpr,\n ConfigExpr,\n isArrayExpr,\n isBinaryExpr,\n isConfigArrayExpr,\n isDataField,\n isDataModel,\n isEnumField,\n isExpression,\n isInvocationExpr,\n isLiteralExpr,\n isMemberAccessExpr,\n isModel,\n isObjectExpr,\n isReferenceExpr,\n isStringLiteral,\n isTypeDef,\n Model,\n ModelImport,\n ReferenceExpr,\n type Attribute,\n type AttributeParam,\n type BuiltinType,\n type DataField,\n type DataFieldAttribute,\n type DataModel,\n type DataModelAttribute,\n type Enum,\n type EnumField,\n type Expression,\n type ExpressionType,\n type FunctionDecl,\n type TypeDef,\n} from './generated/ast';\n\nexport type AttributeTarget =\n | DataModel\n | TypeDef\n | DataField\n | Enum\n | EnumField\n | FunctionDecl\n | Attribute\n | AttributeParam;\n\nexport function hasAttribute(decl: AttributeTarget, name: string) {\n return !!getAttribute(decl, name);\n}\n\nexport function getAttribute(decl: AttributeTarget, name: string) {\n return (decl.attributes as (DataModelAttribute | DataFieldAttribute)[]).find((attr) => attr.decl.$refText === name);\n}\n\nexport function isFromStdlib(node: AstNode) {\n const model = AstUtils.getContainerOfType(node, isModel);\n return !!model && !!model.$document && model.$document.uri.path.endsWith(STD_LIB_MODULE_NAME);\n}\n\nexport function isAuthInvocation(node: AstNode) {\n return isInvocationExpr(node) && node.function.ref?.name === 'auth' && isFromStdlib(node.function.ref);\n}\n\n/**\n * Try getting string value from a potential string literal expression\n */\nexport function getStringLiteral(node: AstNode | undefined): string | undefined {\n return isStringLiteral(node) ? node.value : undefined;\n}\n\nconst isoDateTimeRegex = /^\\d{4}(-\\d\\d(-\\d\\d(T\\d\\d:\\d\\d(:\\d\\d)?(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?)?)?)?$/i;\n\n/**\n * Determines if the given sourceType is assignable to a destination of destType\n */\nexport function typeAssignable(destType: ExpressionType, sourceType: ExpressionType, sourceExpr?: Expression): boolean {\n // implicit conversion from ISO datetime string to datetime\n if (destType === 'DateTime' && sourceType === 'String' && sourceExpr && isStringLiteral(sourceExpr)) {\n const literal = getStringLiteral(sourceExpr);\n if (literal && isoDateTimeRegex.test(literal)) {\n // implicitly convert to DateTime\n sourceType = 'DateTime';\n }\n }\n\n switch (destType) {\n case 'Any':\n return true;\n case 'Float':\n return sourceType === 'Any' || sourceType === 'Int' || sourceType === 'Float';\n default:\n return sourceType === 'Any' || sourceType === destType;\n }\n}\n\n/**\n * Maps a ZModel builtin type to expression type\n */\nexport function mapBuiltinTypeToExpressionType(\n type: BuiltinType | 'Any' | 'Object' | 'Null' | 'Unsupported',\n): ExpressionType | 'Any' {\n switch (type) {\n case 'Any':\n case 'Boolean':\n case 'String':\n case 'DateTime':\n case 'Int':\n case 'Float':\n case 'Null':\n return type;\n case 'BigInt':\n return 'Int';\n case 'Decimal':\n return 'Float';\n case 'Json':\n case 'Bytes':\n return 'Any';\n case 'Object':\n return 'Object';\n case 'Unsupported':\n return 'Unsupported';\n }\n}\n\nexport function isAuthOrAuthMemberAccess(expr: Expression): boolean {\n return isAuthInvocation(expr) || (isMemberAccessExpr(expr) && isAuthOrAuthMemberAccess(expr.operand));\n}\n\nexport function isEnumFieldReference(node: AstNode): node is ReferenceExpr {\n return isReferenceExpr(node) && isEnumField(node.target.ref);\n}\n\nexport function isDataFieldReference(node: AstNode): node is ReferenceExpr {\n return isReferenceExpr(node) && isDataField(node.target.ref);\n}\n\n/**\n * Returns if the given field is a relation field.\n */\nexport function isRelationshipField(field: DataField) {\n return isDataModel(field.type.reference?.ref);\n}\n\nexport function isFutureExpr(node: AstNode) {\n return isInvocationExpr(node) && node.function.ref?.name === 'future' && isFromStdlib(node.function.ref);\n}\n\nexport function isDelegateModel(node: AstNode) {\n return isDataModel(node) && hasAttribute(node, '@@delegate');\n}\n\nexport function resolved<T extends AstNode>(ref: Reference<T>): T {\n if (!ref.ref) {\n throw new Error(`Reference not resolved: ${ref.$refText}`);\n }\n return ref.ref;\n}\n\nexport function getRecursiveBases(\n decl: DataModel | TypeDef,\n includeDelegate = true,\n seen = new Set<DataModel | TypeDef>(),\n): (TypeDef | DataModel)[] {\n const result: (TypeDef | DataModel)[] = [];\n if (seen.has(decl)) {\n return result;\n }\n seen.add(decl);\n decl.mixins.forEach((mixin) => {\n const baseDecl = mixin.ref;\n if (baseDecl) {\n if (!includeDelegate && isDelegateModel(baseDecl)) {\n return;\n }\n result.push(baseDecl);\n result.push(...getRecursiveBases(baseDecl, includeDelegate, seen));\n }\n });\n return result;\n}\n\n/**\n * Gets `@@id` fields declared at the data model level (including search in base models)\n */\nexport function getModelIdFields(model: DataModel) {\n const modelsToCheck = [model, ...getRecursiveBases(model)];\n\n for (const modelToCheck of modelsToCheck) {\n const allAttributes = getAllAttributes(modelToCheck);\n const idAttr = allAttributes.find((attr) => attr.decl.$refText === '@@id');\n if (!idAttr) {\n continue;\n }\n const fieldsArg = idAttr.args.find((a) => a.$resolvedParam?.name === 'fields');\n if (!fieldsArg || !isArrayExpr(fieldsArg.value)) {\n continue;\n }\n\n return fieldsArg.value.items\n .filter((item): item is ReferenceExpr => isReferenceExpr(item))\n .map((item) => resolved(item.target) as DataField);\n }\n\n return [];\n}\n\n/**\n * Gets `@@unique` fields declared at the data model level (including search in base models)\n */\nexport function getModelUniqueFields(model: DataModel) {\n const modelsToCheck = [model, ...getRecursiveBases(model)];\n\n for (const modelToCheck of modelsToCheck) {\n const allAttributes = getAllAttributes(modelToCheck);\n const uniqueAttr = allAttributes.find((attr) => attr.decl.$refText === '@@unique');\n if (!uniqueAttr) {\n continue;\n }\n const fieldsArg = uniqueAttr.args.find((a) => a.$resolvedParam?.name === 'fields');\n if (!fieldsArg || !isArrayExpr(fieldsArg.value)) {\n continue;\n }\n\n return fieldsArg.value.items\n .filter((item): item is ReferenceExpr => isReferenceExpr(item))\n .map((item) => resolved(item.target) as DataField);\n }\n\n return [];\n}\n\n/**\n * Gets lists of unique fields declared at the data model level\n *\n * TODO: merge this with {@link getModelUniqueFields}\n */\nexport function getUniqueFields(model: DataModel) {\n const uniqueAttrs = model.attributes.filter(\n (attr) => attr.decl.ref?.name === '@@unique' || attr.decl.ref?.name === '@@id',\n );\n return uniqueAttrs.map((uniqueAttr) => {\n const fieldsArg = uniqueAttr.args.find((a) => a.$resolvedParam?.name === 'fields');\n if (!fieldsArg || !isArrayExpr(fieldsArg.value)) {\n return [];\n }\n\n return fieldsArg.value.items\n .filter((item): item is ReferenceExpr => isReferenceExpr(item))\n .map((item) => resolved(item.target) as DataField);\n });\n}\n\nexport function findUpAst(node: AstNode, predicate: (node: AstNode) => boolean): AstNode | undefined {\n let curr: AstNode | undefined = node;\n while (curr) {\n if (predicate(curr)) {\n return curr;\n }\n curr = curr.$container;\n }\n return undefined;\n}\n\nexport function getLiteral<T extends string | number | boolean | any = any>(\n expr: Expression | ConfigExpr | undefined,\n): T | undefined {\n switch (expr?.$type) {\n case 'ObjectExpr':\n return getObjectLiteral<T>(expr);\n case 'StringLiteral':\n case 'BooleanLiteral':\n return expr.value as T;\n case 'NumberLiteral':\n return parseFloat(expr.value) as T;\n default:\n return undefined;\n }\n}\n\nexport function getObjectLiteral<T>(expr: Expression | ConfigExpr | undefined): T | undefined {\n if (!expr || !isObjectExpr(expr)) {\n return undefined;\n }\n const result: Record<string, unknown> = {};\n for (const field of expr.fields) {\n let fieldValue: unknown;\n if (isLiteralExpr(field.value)) {\n fieldValue = getLiteral(field.value);\n } else if (isArrayExpr(field.value)) {\n fieldValue = getLiteralArray(field.value);\n } else if (isObjectExpr(field.value)) {\n fieldValue = getObjectLiteral(field.value);\n }\n if (fieldValue === undefined) {\n return undefined;\n } else {\n result[field.name] = fieldValue;\n }\n }\n return result as T;\n}\n\nexport function getLiteralArray<T extends string | number | boolean | any = any>(\n expr: Expression | ConfigExpr | undefined,\n): T[] | undefined {\n const arr = getArray(expr);\n if (!arr) {\n return undefined;\n }\n return arr.map((item) => isExpression(item) && getLiteral<T>(item)).filter((v): v is T => v !== undefined);\n}\n\nfunction getArray(expr: Expression | ConfigExpr | undefined) {\n return isArrayExpr(expr) || isConfigArrayExpr(expr) ? expr.items : undefined;\n}\n\nexport function getAttributeArgLiteral<T extends string | number | boolean>(\n attr: DataModelAttribute | DataFieldAttribute,\n name: string,\n): T | undefined {\n for (const arg of attr.args) {\n if (arg.$resolvedParam?.name === name) {\n return getLiteral<T>(arg.value);\n }\n }\n return undefined;\n}\n\nexport function getFunctionExpressionContext(funcDecl: FunctionDecl) {\n const funcAllowedContext: ExpressionContext[] = [];\n const funcAttr = funcDecl.attributes.find((attr) => attr.decl.$refText === '@@@expressionContext');\n if (funcAttr) {\n const contextArg = funcAttr.args[0]?.value;\n if (isArrayExpr(contextArg)) {\n contextArg.items.forEach((item) => {\n if (isEnumFieldReference(item)) {\n funcAllowedContext.push(item.target.$refText as ExpressionContext);\n }\n });\n }\n }\n return funcAllowedContext;\n}\n\nexport function getFieldReference(expr: Expression): DataField | undefined {\n if (isReferenceExpr(expr) && isDataField(expr.target.ref)) {\n return expr.target.ref;\n } else if (isMemberAccessExpr(expr) && isDataField(expr.member.ref)) {\n return expr.member.ref;\n } else {\n return undefined;\n }\n}\n\nexport function isCheckInvocation(node: AstNode) {\n return isInvocationExpr(node) && node.function.ref?.name === 'check' && isFromStdlib(node.function.ref);\n}\n\nexport function resolveTransitiveImports(documents: LangiumDocuments, model: Model) {\n return resolveTransitiveImportsInternal(documents, model);\n}\n\nfunction resolveTransitiveImportsInternal(\n documents: LangiumDocuments,\n model: Model,\n initialModel = model,\n visited: Set<string> = new Set(),\n models: Set<Model> = new Set(),\n) {\n const doc = AstUtils.getDocument(model);\n const initialDoc = AstUtils.getDocument(initialModel);\n\n if (initialDoc.uri.fsPath.toLowerCase() !== doc.uri.fsPath.toLowerCase()) {\n models.add(model);\n }\n\n const normalizedPath = doc.uri.fsPath.toLowerCase();\n if (!visited.has(normalizedPath)) {\n visited.add(normalizedPath);\n for (const imp of model.imports) {\n const importedModel = resolveImport(documents, imp);\n if (importedModel) {\n resolveTransitiveImportsInternal(documents, importedModel, initialModel, visited, models);\n }\n }\n }\n return Array.from(models);\n}\n\nexport function resolveImport(documents: LangiumDocuments, imp: ModelImport) {\n const resolvedUri = resolveImportUri(imp);\n try {\n if (resolvedUri) {\n let resolvedDocument = documents.getDocument(resolvedUri);\n if (!resolvedDocument) {\n const content = fs.readFileSync(resolvedUri.fsPath, 'utf-8');\n resolvedDocument = documents.createDocument(resolvedUri, content);\n }\n const node = resolvedDocument.parseResult.value;\n if (isModel(node)) {\n return node;\n }\n }\n } catch {\n // NOOP\n }\n return undefined;\n}\n\nexport function resolveImportUri(imp: ModelImport) {\n if (!imp.path) {\n return undefined;\n }\n const doc = AstUtils.getDocument(imp);\n const dir = path.dirname(doc.uri.fsPath);\n const importPath = imp.path.endsWith('.zmodel') ? imp.path : `${imp.path}.zmodel`;\n return URI.file(path.resolve(dir, importPath));\n}\n\n/**\n * Gets data models and type defs in the ZModel schema.\n */\nexport function getDataModelAndTypeDefs(model: Model, includeIgnored = false) {\n const r = model.declarations.filter((d): d is DataModel | TypeDef => isDataModel(d) || isTypeDef(d));\n if (includeIgnored) {\n return r;\n } else {\n return r.filter((model) => !hasAttribute(model, '@@ignore'));\n }\n}\n\nexport function getAllDeclarationsIncludingImports(documents: LangiumDocuments, model: Model) {\n const imports = resolveTransitiveImports(documents, model);\n return model.declarations.concat(...imports.map((imp) => imp.declarations));\n}\n\nexport function getAuthDecl(decls: (DataModel | TypeDef)[]) {\n let authModel = decls.find((m) => hasAttribute(m, '@@auth'));\n if (!authModel) {\n authModel = decls.find((m) => m.name === 'User');\n }\n return authModel;\n}\n\nexport function isFutureInvocation(node: AstNode) {\n return isInvocationExpr(node) && node.function.ref?.name === 'future' && isFromStdlib(node.function.ref);\n}\n\nexport function isCollectionPredicate(node: AstNode): node is BinaryExpr {\n return isBinaryExpr(node) && ['?', '!', '^'].includes(node.operator);\n}\n\nexport function getAllLoadedDataModelsAndTypeDefs(langiumDocuments: LangiumDocuments) {\n return langiumDocuments.all\n .map((doc) => doc.parseResult.value as Model)\n .flatMap((model) => model.declarations.filter((d): d is DataModel | TypeDef => isDataModel(d) || isTypeDef(d)))\n .toArray();\n}\n\nexport function getAllDataModelsIncludingImports(documents: LangiumDocuments, model: Model) {\n return getAllDeclarationsIncludingImports(documents, model).filter(isDataModel);\n}\n\nexport function getAllLoadedAndReachableDataModelsAndTypeDefs(\n langiumDocuments: LangiumDocuments,\n fromModel?: DataModel,\n) {\n // get all data models from loaded documents\n const allDataModels = getAllLoadedDataModelsAndTypeDefs(langiumDocuments);\n\n if (fromModel) {\n // merge data models transitively reached from the current model\n const model = AstUtils.getContainerOfType(fromModel, isModel);\n if (model) {\n const transitiveDataModels = getAllDataModelsIncludingImports(langiumDocuments, model);\n transitiveDataModels.forEach((dm) => {\n if (!allDataModels.includes(dm)) {\n allDataModels.push(dm);\n }\n });\n }\n }\n\n return allDataModels;\n}\n\nexport function getContainingDataModel(node: Expression): DataModel | undefined {\n let curr: AstNode | undefined = node.$container;\n while (curr) {\n if (isDataModel(curr)) {\n return curr;\n }\n curr = curr.$container;\n }\n return undefined;\n}\n\nexport function isMemberContainer(node: unknown): node is DataModel | TypeDef {\n return isDataModel(node) || isTypeDef(node);\n}\n\nexport function getAllFields(\n decl: DataModel | TypeDef,\n includeIgnored = false,\n seen: Set<DataModel | TypeDef> = new Set(),\n): DataField[] {\n if (seen.has(decl)) {\n return [];\n }\n seen.add(decl);\n\n const fields: DataField[] = [];\n for (const mixin of decl.mixins) {\n invariant(mixin.ref, `Mixin ${mixin.$refText} is not resolved`);\n fields.push(...getAllFields(mixin.ref, includeIgnored, seen));\n }\n\n if (isDataModel(decl) && decl.baseModel) {\n invariant(decl.baseModel.ref, `Base model ${decl.baseModel.$refText} is not resolved`);\n fields.push(...getAllFields(decl.baseModel.ref, includeIgnored, seen));\n }\n\n fields.push(...decl.fields.filter((f) => includeIgnored || !hasAttribute(f, '@ignore')));\n return fields;\n}\n\nexport function getAllAttributes(\n decl: DataModel | TypeDef,\n seen: Set<DataModel | TypeDef> = new Set(),\n): DataModelAttribute[] {\n if (seen.has(decl)) {\n return [];\n }\n seen.add(decl);\n\n const attributes: DataModelAttribute[] = [];\n for (const mixin of decl.mixins) {\n invariant(mixin.ref, `Mixin ${mixin.$refText} is not resolved`);\n attributes.push(...getAllAttributes(mixin.ref, seen));\n }\n\n if (isDataModel(decl) && decl.baseModel) {\n invariant(decl.baseModel.ref, `Base model ${decl.baseModel.$refText} is not resolved`);\n attributes.push(...getAllAttributes(decl.baseModel.ref, seen));\n }\n\n attributes.push(...decl.attributes);\n return attributes;\n}\n\n/**\n * Retrieve the document in which the given AST node is contained. A reference to the document is\n * usually held by the root node of the AST.\n *\n * @throws an error if the node is not contained in a document.\n */\nexport function getDocument<T extends AstNode = AstNode>(node: AstNode): LangiumDocument<T> {\n const rootNode = findRootNode(node);\n const result = rootNode.$document;\n if (!result) {\n throw new Error('AST node has no document.');\n }\n return result as LangiumDocument<T>;\n}\n\n/**\n * Returns the root node of the given AST node by following the `$container` references.\n */\nexport function findRootNode(node: AstNode): AstNode {\n while (node.$container) {\n node = node.$container;\n }\n return node;\n}\n","/**\n * Supported Prisma db providers\n */\nexport const SUPPORTED_PROVIDERS = [\n 'sqlite',\n 'postgresql',\n // TODO: other providers\n // 'mysql',\n // 'sqlserver',\n // 'cockroachdb',\n];\n\n/**\n * All scalar types\n */\nexport const SCALAR_TYPES = ['String', 'Int', 'Float', 'Decimal', 'BigInt', 'Boolean', 'Bytes', 'DateTime'];\n\n/**\n * Name of standard library module\n */\nexport const STD_LIB_MODULE_NAME = 'stdlib.zmodel';\n\n/**\n * Name of module contributed by plugins\n */\nexport const PLUGIN_MODULE_NAME = 'plugin.zmodel';\n\n/**\n * Validation issues\n */\nexport enum IssueCodes {\n MissingOppositeRelation = 'miss-opposite-relation',\n}\n\n/**\n * Expression context\n */\nexport enum ExpressionContext {\n DefaultValue = 'DefaultValue',\n AccessPolicy = 'AccessPolicy',\n ValidationRule = 'ValidationRule',\n Index = 'Index',\n}\n","/******************************************************************************\n * This file was generated by langium-cli 3.5.0.\n * DO NOT EDIT MANUALLY!\n ******************************************************************************/\n\n/* eslint-disable */\nimport * as langium from 'langium';\n\nexport const ZModelTerminals = {\n WS: /\\s+/,\n INTERNAL_ATTRIBUTE_NAME: /@@@([_a-zA-Z][\\w_]*\\.)*[_a-zA-Z][\\w_]*/,\n MODEL_ATTRIBUTE_NAME: /@@([_a-zA-Z][\\w_]*\\.)*[_a-zA-Z][\\w_]*/,\n FIELD_ATTRIBUTE_NAME: /@([_a-zA-Z][\\w_]*\\.)*[_a-zA-Z][\\w_]*/,\n ID: /[_a-zA-Z][\\w_]*/,\n STRING: /\"(\\\\.|[^\"\\\\])*\"|'(\\\\.|[^'\\\\])*'/,\n NUMBER: /[+-]?[0-9]+(\\.[0-9]+)?/,\n TRIPLE_SLASH_COMMENT: /\\/\\/\\/[^\\n\\r]*/,\n ML_COMMENT: /\\/\\*[\\s\\S]*?\\*\\//,\n SL_COMMENT: /\\/\\/[^\\n\\r]*/,\n};\n\nexport type ZModelTerminalNames = keyof typeof ZModelTerminals;\n\nexport type ZModelKeywordNames =\n | \"!\"\n | \"!=\"\n | \"&&\"\n | \"(\"\n | \")\"\n | \",\"\n | \".\"\n | \":\"\n | \";\"\n | \"<\"\n | \"<=\"\n | \"=\"\n | \"==\"\n | \">\"\n | \">=\"\n | \"?\"\n | \"Any\"\n | \"BigInt\"\n | \"Boolean\"\n | \"Bytes\"\n | \"ContextType\"\n | \"DateTime\"\n | \"Decimal\"\n | \"FieldReference\"\n | \"Float\"\n | \"Int\"\n | \"Json\"\n | \"Null\"\n | \"Object\"\n | \"String\"\n | \"TransitiveFieldReference\"\n | \"Unsupported\"\n | \"[\"\n | \"]\"\n | \"^\"\n | \"_\"\n | \"abstract\"\n | \"attribute\"\n | \"datasource\"\n | \"enum\"\n | \"extends\"\n | \"false\"\n | \"function\"\n | \"generator\"\n | \"import\"\n | \"in\"\n | \"model\"\n | \"mutation\"\n | \"null\"\n | \"plugin\"\n | \"procedure\"\n | \"this\"\n | \"true\"\n | \"type\"\n | \"view\"\n | \"with\"\n | \"{\"\n | \"||\"\n | \"}\";\n\nexport type ZModelTokenNames = ZModelTerminalNames | ZModelKeywordNames;\n\nexport type AbstractDeclaration = Attribute | DataModel | DataSource | Enum | FunctionDecl | GeneratorDecl | Plugin | Procedure | TypeDef;\n\nexport const AbstractDeclaration = 'AbstractDeclaration';\n\nexport function isAbstractDeclaration(item: unknown): item is AbstractDeclaration {\n return reflection.isInstance(item, AbstractDeclaration);\n}\n\nexport type Boolean = boolean;\n\nexport function isBoolean(item: unknown): item is Boolean {\n return typeof item === 'boolean';\n}\n\nexport type BuiltinType = 'BigInt' | 'Boolean' | 'Bytes' | 'DateTime' | 'Decimal' | 'Float' | 'Int' | 'Json' | 'String';\n\nexport function isBuiltinType(item: unknown): item is BuiltinType {\n return item === 'String' || item === 'Boolean' || item === 'Int' || item === 'BigInt' || item === 'Float' || item === 'Decimal' || item === 'DateTime' || item === 'Json' || item === 'Bytes';\n}\n\nexport type ConfigExpr = ConfigArrayExpr | InvocationExpr | LiteralExpr;\n\nexport const ConfigExpr = 'ConfigExpr';\n\nexport function isConfigExpr(item: unknown): item is ConfigExpr {\n return reflection.isInstance(item, ConfigExpr);\n}\n\nexport type Expression = ArrayExpr | BinaryExpr | InvocationExpr | LiteralExpr | MemberAccessExpr | NullExpr | ObjectExpr | ReferenceExpr | ThisExpr | UnaryExpr;\n\nexport const Expression = 'Expression';\n\nexport function isExpression(item: unknown): item is Expression {\n return reflection.isInstance(item, Expression);\n}\n\nexport type ExpressionType = 'Any' | 'Boolean' | 'DateTime' | 'Float' | 'Int' | 'Null' | 'Object' | 'String' | 'Unsupported';\n\nexport function isExpressionType(item: unknown): item is ExpressionType {\n return item === 'String' || item === 'Int' || item === 'Float' || item === 'Boolean' || item === 'DateTime' || item === 'Null' || item === 'Object' || item === 'Any' || item === 'Unsupported';\n}\n\nexport type LiteralExpr = BooleanLiteral | NumberLiteral | StringLiteral;\n\nexport const LiteralExpr = 'LiteralExpr';\n\nexport function isLiteralExpr(item: unknown): item is LiteralExpr {\n return reflection.isInstance(item, LiteralExpr);\n}\n\nexport type MemberAccessTarget = DataField;\n\nexport const MemberAccessTarget = 'MemberAccessTarget';\n\nexport function isMemberAccessTarget(item: unknown): item is MemberAccessTarget {\n return reflection.isInstance(item, MemberAccessTarget);\n}\n\nexport type ReferenceTarget = DataField | EnumField | FunctionParam;\n\nexport const ReferenceTarget = 'ReferenceTarget';\n\nexport function isReferenceTarget(item: unknown): item is ReferenceTarget {\n return reflection.isInstance(item, ReferenceTarget);\n}\n\nexport type RegularID = 'abstract' | 'attribute' | 'datasource' | 'enum' | 'import' | 'in' | 'model' | 'plugin' | 'type' | 'view' | string;\n\nexport function isRegularID(item: unknown): item is RegularID {\n return item === 'model' || item === 'enum' || item === 'attribute' || item === 'datasource' || item === 'plugin' || item === 'abstract' || item === 'in' || item === 'view' || item === 'import' || item === 'type' || (typeof item === 'string' && (/[_a-zA-Z][\\w_]*/.test(item)));\n}\n\nexport type RegularIDWithTypeNames = 'Any' | 'BigInt' | 'Boolean' | 'Bytes' | 'DateTime' | 'Decimal' | 'Float' | 'Int' | 'Json' | 'Null' | 'Object' | 'String' | 'Unsupported' | RegularID;\n\nexport function isRegularIDWithTypeNames(item: unknown): item is RegularIDWithTypeNames {\n return isRegularID(item) || item === 'String' || item === 'Boolean' || item === 'Int' || item === 'BigInt' || item === 'Float' || item === 'Decimal' || item === 'DateTime' || item === 'Json' || item === 'Bytes' || item === 'Null' || item === 'Object' || item === 'Any' || item === 'Unsupported';\n}\n\nexport type TypeDeclaration = DataModel | Enum | TypeDef;\n\nexport const TypeDeclaration = 'TypeDeclaration';\n\nexport function isTypeDeclaration(item: unknown): item is TypeDeclaration {\n return reflection.isInstance(item, TypeDeclaration);\n}\n\nexport interface Argument extends langium.AstNode {\n readonly $container: InvocationExpr;\n readonly $type: 'Argument';\n value: Expression;\n}\n\nexport const Argument = 'Argument';\n\nexport function isArgument(item: unknown): item is Argument {\n return reflection.isInstance(item, Argument);\n}\n\nexport interface ArrayExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | PluginField | ReferenceArg | UnaryExpr;\n readonly $type: 'ArrayExpr';\n items: Array<Expression>;\n}\n\nexport const ArrayExpr = 'ArrayExpr';\n\nexport function isArrayExpr(item: unknown): item is ArrayExpr {\n return reflection.isInstance(item, ArrayExpr);\n}\n\nexport interface Attribute extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'Attribute';\n attributes: Array<InternalAttribute>;\n comments: Array<string>;\n name: string;\n params: Array<AttributeParam>;\n}\n\nexport const Attribute = 'Attribute';\n\nexport function isAttribute(item: unknown): item is Attribute {\n return reflection.isInstance(item, Attribute);\n}\n\nexport interface AttributeArg extends langium.AstNode {\n readonly $container: DataFieldAttribute | DataModelAttribute | InternalAttribute;\n readonly $type: 'AttributeArg';\n name?: RegularID;\n value: Expression;\n}\n\nexport const AttributeArg = 'AttributeArg';\n\nexport function isAttributeArg(item: unknown): item is AttributeArg {\n return reflection.isInstance(item, AttributeArg);\n}\n\nexport interface AttributeParam extends langium.AstNode {\n readonly $container: Attribute;\n readonly $type: 'AttributeParam';\n attributes: Array<InternalAttribute>;\n comments: Array<string>;\n default: boolean;\n name: RegularID;\n type: AttributeParamType;\n}\n\nexport const AttributeParam = 'AttributeParam';\n\nexport function isAttributeParam(item: unknown): item is AttributeParam {\n return reflection.isInstance(item, AttributeParam);\n}\n\nexport interface AttributeParamType extends langium.AstNode {\n readonly $container: AttributeParam;\n readonly $type: 'AttributeParamType';\n array: boolean;\n optional: boolean;\n reference?: langium.Reference<TypeDeclaration>;\n type?: 'ContextType' | 'FieldReference' | 'TransitiveFieldReference' | ExpressionType;\n}\n\nexport const AttributeParamType = 'AttributeParamType';\n\nexport function isAttributeParamType(item: unknown): item is AttributeParamType {\n return reflection.isInstance(item, AttributeParamType);\n}\n\nexport interface BinaryExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'BinaryExpr';\n left: Expression;\n operator: '!' | '!=' | '&&' | '<' | '<=' | '==' | '>' | '>=' | '?' | '^' | 'in' | '||';\n right: Expression;\n}\n\nexport const BinaryExpr = 'BinaryExpr';\n\nexport function isBinaryExpr(item: unknown): item is BinaryExpr {\n return reflection.isInstance(item, BinaryExpr);\n}\n\nexport interface BooleanLiteral extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | ConfigArrayExpr | ConfigField | ConfigInvocationArg | FieldInitializer | FunctionDecl | MemberAccessExpr | PluginField | ReferenceArg | UnaryExpr | UnsupportedFieldType;\n readonly $type: 'BooleanLiteral';\n value: Boolean;\n}\n\nexport const BooleanLiteral = 'BooleanLiteral';\n\nexport function isBooleanLiteral(item: unknown): item is BooleanLiteral {\n return reflection.isInstance(item, BooleanLiteral);\n}\n\nexport interface ConfigArrayExpr extends langium.AstNode {\n readonly $container: ConfigField;\n readonly $type: 'ConfigArrayExpr';\n items: Array<ConfigInvocationExpr | LiteralExpr>;\n}\n\nexport const ConfigArrayExpr = 'ConfigArrayExpr';\n\nexport function isConfigArrayExpr(item: unknown): item is ConfigArrayExpr {\n return reflection.isInstance(item, ConfigArrayExpr);\n}\n\nexport interface ConfigField extends langium.AstNode {\n readonly $container: DataSource | GeneratorDecl;\n readonly $type: 'ConfigField';\n name: RegularID;\n value: ConfigExpr;\n}\n\nexport const ConfigField = 'ConfigField';\n\nexport function isConfigField(item: unknown): item is ConfigField {\n return reflection.isInstance(item, ConfigField);\n}\n\nexport interface ConfigInvocationArg extends langium.AstNode {\n readonly $container: ConfigInvocationExpr;\n readonly $type: 'ConfigInvocationArg';\n name: string;\n value: LiteralExpr;\n}\n\nexport const ConfigInvocationArg = 'ConfigInvocationArg';\n\nexport function isConfigInvocationArg(item: unknown): item is ConfigInvocationArg {\n return reflection.isInstance(item, ConfigInvocationArg);\n}\n\nexport interface ConfigInvocationExpr extends langium.AstNode {\n readonly $container: ConfigArrayExpr;\n readonly $type: 'ConfigInvocationExpr';\n args: Array<ConfigInvocationArg>;\n name: string;\n}\n\nexport const ConfigInvocationExpr = 'ConfigInvocationExpr';\n\nexport function isConfigInvocationExpr(item: unknown): item is ConfigInvocationExpr {\n return reflection.isInstance(item, ConfigInvocationExpr);\n}\n\nexport interface DataField extends langium.AstNode {\n readonly $container: DataModel | TypeDef;\n readonly $type: 'DataField';\n attributes: Array<DataFieldAttribute>;\n comments: Array<string>;\n name: RegularIDWithTypeNames;\n type: DataFieldType;\n}\n\nexport const DataField = 'DataField';\n\nexport function isDataField(item: unknown): item is DataField {\n return reflection.isInstance(item, DataField);\n}\n\nexport interface DataFieldAttribute extends langium.AstNode {\n readonly $container: DataField | EnumField;\n readonly $type: 'DataFieldAttribute';\n args: Array<AttributeArg>;\n decl: langium.Reference<Attribute>;\n}\n\nexport const DataFieldAttribute = 'DataFieldAttribute';\n\nexport function isDataFieldAttribute(item: unknown): item is DataFieldAttribute {\n return reflection.isInstance(item, DataFieldAttribute);\n}\n\nexport interface DataFieldType extends langium.AstNode {\n readonly $container: DataField;\n readonly $type: 'DataFieldType';\n array: boolean;\n optional: boolean;\n reference?: langium.Reference<TypeDeclaration>;\n type?: BuiltinType;\n unsupported?: UnsupportedFieldType;\n}\n\nexport const DataFieldType = 'DataFieldType';\n\nexport function isDataFieldType(item: unknown): item is DataFieldType {\n return reflection.isInstance(item, DataFieldType);\n}\n\nexport interface DataModel extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'DataModel';\n attributes: Array<DataModelAttribute>;\n baseModel?: langium.Reference<DataModel>;\n comments: Array<string>;\n fields: Array<DataField>;\n isView: boolean;\n mixins: Array<langium.Reference<TypeDef>>;\n name: RegularID;\n}\n\nexport const DataModel = 'DataModel';\n\nexport function isDataModel(item: unknown): item is DataModel {\n return reflection.isInstance(item, DataModel);\n}\n\nexport interface DataModelAttribute extends langium.AstNode {\n readonly $container: DataModel | Enum | TypeDef;\n readonly $type: 'DataModelAttribute';\n args: Array<AttributeArg>;\n decl: langium.Reference<Attribute>;\n}\n\nexport const DataModelAttribute = 'DataModelAttribute';\n\nexport function isDataModelAttribute(item: unknown): item is DataModelAttribute {\n return reflection.isInstance(item, DataModelAttribute);\n}\n\nexport interface DataSource extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'DataSource';\n fields: Array<ConfigField>;\n name: RegularID;\n}\n\nexport const DataSource = 'DataSource';\n\nexport function isDataSource(item: unknown): item is DataSource {\n return reflection.isInstance(item, DataSource);\n}\n\nexport interface Enum extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'Enum';\n attributes: Array<DataModelAttribute>;\n comments: Array<string>;\n fields: Array<EnumField>;\n name: RegularID;\n}\n\nexport const Enum = 'Enum';\n\nexport function isEnum(item: unknown): item is Enum {\n return reflection.isInstance(item, Enum);\n}\n\nexport interface EnumField extends langium.AstNode {\n readonly $container: Enum;\n readonly $type: 'EnumField';\n attributes: Array<DataFieldAttribute>;\n comments: Array<string>;\n name: RegularIDWithTypeNames;\n}\n\nexport const EnumField = 'EnumField';\n\nexport function isEnumField(item: unknown): item is EnumField {\n return reflection.isInstance(item, EnumField);\n}\n\nexport interface FieldInitializer extends langium.AstNode {\n readonly $container: ObjectExpr;\n readonly $type: 'FieldInitializer';\n name: RegularID | string;\n value: Expression;\n}\n\nexport const FieldInitializer = 'FieldInitializer';\n\nexport function isFieldInitializer(item: unknown): item is FieldInitializer {\n return reflection.isInstance(item, FieldInitializer);\n}\n\nexport interface FunctionDecl extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'FunctionDecl';\n attributes: Array<InternalAttribute>;\n expression?: Expression;\n name: RegularID;\n params: Array<FunctionParam>;\n returnType: FunctionParamType;\n}\n\nexport const FunctionDecl = 'FunctionDecl';\n\nexport function isFunctionDecl(item: unknown): item is FunctionDecl {\n return reflection.isInstance(item, FunctionDecl);\n}\n\nexport interface FunctionParam extends langium.AstNode {\n readonly $container: FunctionDecl | Procedure;\n readonly $type: 'FunctionParam';\n name: RegularID;\n optional: boolean;\n type: FunctionParamType;\n}\n\nexport const FunctionParam = 'FunctionParam';\n\nexport function isFunctionParam(item: unknown): item is FunctionParam {\n return reflection.isInstance(item, FunctionParam);\n}\n\nexport interface FunctionParamType extends langium.AstNode {\n readonly $container: FunctionDecl | FunctionParam | Procedure | ProcedureParam;\n readonly $type: 'FunctionParamType';\n array: boolean;\n reference?: langium.Reference<TypeDeclaration>;\n type?: ExpressionType;\n}\n\nexport const FunctionParamType = 'FunctionParamType';\n\nexport function isFunctionParamType(item: unknown): item is FunctionParamType {\n return reflection.isInstance(item, FunctionParamType);\n}\n\nexport interface GeneratorDecl extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'GeneratorDecl';\n fields: Array<ConfigField>;\n name: RegularID;\n}\n\nexport const GeneratorDecl = 'GeneratorDecl';\n\nexport function isGeneratorDecl(item: unknown): item is GeneratorDecl {\n return reflection.isInstance(item, GeneratorDecl);\n}\n\nexport interface InternalAttribute extends langium.AstNode {\n readonly $container: Attribute | AttributeParam | FunctionDecl | Procedure;\n readonly $type: 'InternalAttribute';\n args: Array<AttributeArg>;\n decl: langium.Reference<Attribute>;\n}\n\nexport const InternalAttribute = 'InternalAttribute';\n\nexport function isInternalAttribute(item: unknown): item is InternalAttribute {\n return reflection.isInstance(item, InternalAttribute);\n}\n\nexport interface InvocationExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | ConfigField | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'InvocationExpr';\n args: Array<Argument>;\n function: langium.Reference<FunctionDecl>;\n}\n\nexport const InvocationExpr = 'InvocationExpr';\n\nexport function isInvocationExpr(item: unknown): item is InvocationExpr {\n return reflection.isInstance(item, InvocationExpr);\n}\n\nexport interface MemberAccessExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'MemberAccessExpr';\n member: langium.Reference<MemberAccessTarget>;\n operand: Expression;\n}\n\nexport const MemberAccessExpr = 'MemberAccessExpr';\n\nexport function isMemberAccessExpr(item: unknown): item is MemberAccessExpr {\n return reflection.isInstance(item, MemberAccessExpr);\n}\n\nexport interface Model extends langium.AstNode {\n readonly $type: 'Model';\n declarations: Array<AbstractDeclaration>;\n imports: Array<ModelImport>;\n}\n\nexport const Model = 'Model';\n\nexport function isModel(item: unknown): item is Model {\n return reflection.isInstance(item, Model);\n}\n\nexport interface ModelImport extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'ModelImport';\n path: string;\n}\n\nexport const ModelImport = 'ModelImport';\n\nexport function isModelImport(item: unknown): item is ModelImport {\n return reflection.isInstance(item, ModelImport);\n}\n\nexport interface NullExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'NullExpr';\n value: 'null';\n}\n\nexport const NullExpr = 'NullExpr';\n\nexport function isNullExpr(item: unknown): item is NullExpr {\n return reflection.isInstance(item, NullExpr);\n}\n\nexport interface NumberLiteral extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | ConfigArrayExpr | ConfigField | ConfigInvocationArg | FieldInitializer | FunctionDecl | MemberAccessExpr | PluginField | ReferenceArg | UnaryExpr | UnsupportedFieldType;\n readonly $type: 'NumberLiteral';\n value: string;\n}\n\nexport const NumberLiteral = 'NumberLiteral';\n\nexport function isNumberLiteral(item: unknown): item is NumberLiteral {\n return reflection.isInstance(item, NumberLiteral);\n}\n\nexport interface ObjectExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | PluginField | ReferenceArg | UnaryExpr;\n readonly $type: 'ObjectExpr';\n fields: Array<FieldInitializer>;\n}\n\nexport const ObjectExpr = 'ObjectExpr';\n\nexport function isObjectExpr(item: unknown): item is ObjectExpr {\n return reflection.isInstance(item, ObjectExpr);\n}\n\nexport interface Plugin extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'Plugin';\n fields: Array<PluginField>;\n name: RegularID;\n}\n\nexport const Plugin = 'Plugin';\n\nexport function isPlugin(item: unknown): item is Plugin {\n return reflection.isInstance(item, Plugin);\n}\n\nexport interface PluginField extends langium.AstNode {\n readonly $container: Plugin;\n readonly $type: 'PluginField';\n name: RegularID;\n value: ArrayExpr | LiteralExpr | ObjectExpr;\n}\n\nexport const PluginField = 'PluginField';\n\nexport function isPluginField(item: unknown): item is PluginField {\n return reflection.isInstance(item, PluginField);\n}\n\nexport interface Procedure extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'Procedure';\n attributes: Array<InternalAttribute>;\n mutation: boolean;\n name: RegularID;\n params: Array<FunctionParam | ProcedureParam>;\n returnType: FunctionParamType;\n}\n\nexport const Procedure = 'Procedure';\n\nexport function isProcedure(item: unknown): item is Procedure {\n return reflection.isInstance(item, Procedure);\n}\n\nexport interface ProcedureParam extends langium.AstNode {\n readonly $container: Procedure;\n readonly $type: 'ProcedureParam';\n name: RegularID;\n optional: boolean;\n type: FunctionParamType;\n}\n\nexport const ProcedureParam = 'ProcedureParam';\n\nexport function isProcedureParam(item: unknown): item is ProcedureParam {\n return reflection.isInstance(item, ProcedureParam);\n}\n\nexport interface ReferenceArg extends langium.AstNode {\n readonly $container: ReferenceExpr;\n readonly $type: 'ReferenceArg';\n name: string;\n value: Expression;\n}\n\nexport const ReferenceArg = 'ReferenceArg';\n\nexport function isReferenceArg(item: unknown): item is ReferenceArg {\n return reflection.isInstance(item, ReferenceArg);\n}\n\nexport interface ReferenceExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'ReferenceExpr';\n args: Array<ReferenceArg>;\n target: langium.Reference<ReferenceTarget>;\n}\n\nexport const ReferenceExpr = 'ReferenceExpr';\n\nexport function isReferenceExpr(item: unknown): item is ReferenceExpr {\n return reflection.isInstance(item, ReferenceExpr);\n}\n\nexport interface StringLiteral extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | ConfigArrayExpr | ConfigField | ConfigInvocationArg | FieldInitializer | FunctionDecl | MemberAccessExpr | PluginField | ReferenceArg | UnaryExpr | UnsupportedFieldType;\n readonly $type: 'StringLiteral';\n value: string;\n}\n\nexport const StringLiteral = 'StringLiteral';\n\nexport function isStringLiteral(item: unknown): item is StringLiteral {\n return reflection.isInstance(item, StringLiteral);\n}\n\nexport interface ThisExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'ThisExpr';\n value: 'this';\n}\n\nexport const ThisExpr = 'ThisExpr';\n\nexport function isThisExpr(item: unknown): item is ThisExpr {\n return reflection.isInstance(item, ThisExpr);\n}\n\nexport interface TypeDef extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'TypeDef';\n attributes: Array<DataModelAttribute>;\n comments: Array<string>;\n fields: Array<DataField>;\n mixins: Array<langium.Reference<TypeDef>>;\n name: RegularID;\n}\n\nexport const TypeDef = 'TypeDef';\n\nexport function isTypeDef(item: unknown): item is TypeDef {\n return reflection.isInstance(item, TypeDef);\n}\n\nexport interface UnaryExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'UnaryExpr';\n operand: Expression;\n operator: '!';\n}\n\nexport const UnaryExpr = 'UnaryExpr';\n\nexport function isUnaryExpr(item: unknown): item is UnaryExpr {\n return reflection.isInstance(item, UnaryExpr);\n}\n\nexport interface UnsupportedFieldType extends langium.AstNode {\n readonly $container: DataFieldType;\n readonly $type: 'UnsupportedFieldType';\n value: LiteralExpr;\n}\n\nexport const UnsupportedFieldType = 'UnsupportedFieldType';\n\nexport function isUnsupportedFieldType(item: unknown): item is UnsupportedFieldType {\n return reflection.isInstance(item, UnsupportedFieldType);\n}\n\nexport type ZModelAstType = {\n AbstractDeclaration: AbstractDeclaration\n Argument: Argument\n ArrayExpr: ArrayExpr\n Attribute: Attribute\n AttributeArg: AttributeArg\n AttributeParam: AttributeParam\n AttributeParamType: AttributeParamType\n BinaryExpr: BinaryExpr\n BooleanLiteral: BooleanLiteral\n ConfigArrayExpr: ConfigArrayExpr\n ConfigExpr: ConfigExpr\n ConfigField: ConfigField\n ConfigInvocationArg: ConfigInvocationArg\n ConfigInvocationExpr: ConfigInvocationExpr\n DataField: DataField\n DataFieldAttribute: DataFieldAttribute\n DataFieldType: DataFieldType\n DataModel: DataModel\n DataModelAttribute: DataModelAttribute\n DataSource: DataSource\n Enum: Enum\n EnumField: EnumField\n Expression: Expression\n FieldInitializer: FieldInitializer\n FunctionDecl: FunctionDecl\n FunctionParam: FunctionParam\n FunctionParamType: FunctionParamType\n GeneratorDecl: GeneratorDecl\n InternalAttribute: InternalAttribute\n InvocationExpr: InvocationExpr\n LiteralExpr: LiteralExpr\n MemberAccessExpr: MemberAccessExpr\n MemberAccessTarget: MemberAccessTarget\n Model: Model\n ModelImport: ModelImport\n NullExpr: NullExpr\n NumberLiteral: NumberLiteral\n ObjectExpr: ObjectExpr\n Plugin: Plugin\n PluginField: PluginField\n Procedure: Procedure\n ProcedureParam: ProcedureParam\n ReferenceArg: ReferenceArg\n ReferenceExpr: ReferenceExpr\n ReferenceTarget: ReferenceTarget\n StringLiteral: StringLiteral\n ThisExpr: ThisExpr\n TypeDeclaration: TypeDeclaration\n TypeDef: TypeDef\n UnaryExpr: UnaryExpr\n UnsupportedFieldType: UnsupportedFieldType\n}\n\nexport class ZModelAstReflection extends langium.AbstractAstReflection {\n\n getAllTypes(): string[] {\n return [AbstractDeclaration, Argument, ArrayExpr, Attribute, AttributeArg, AttributeParam, AttributeParamType, BinaryExpr, BooleanLiteral, ConfigArrayExpr, ConfigExpr, ConfigField, ConfigInvocationArg, ConfigInvocationExpr, DataField, DataFieldAttribute, DataFieldType, DataModel, DataModelAttribute, DataSource, Enum, EnumField, Expression, FieldInitializer, FunctionDecl, FunctionParam, FunctionParamType, GeneratorDecl, InternalAttribute, InvocationExpr, LiteralExpr, MemberAccessExpr, MemberAccessTarget, Model, ModelImport, NullExpr, NumberLiteral, ObjectExpr, Plugin, PluginField, Procedure, ProcedureParam, ReferenceArg, ReferenceExpr, ReferenceTarget, StringLiteral, ThisExpr, TypeDeclaration, TypeDef, UnaryExpr, UnsupportedFieldType];\n }\n\n protected override computeIsSubtype(subtype: string, supertype: string): boolean {\n switch (subtype) {\n case ArrayExpr:\n case BinaryExpr:\n case MemberAccessExpr:\n case NullExpr:\n case ObjectExpr:\n case ReferenceExpr:\n case ThisExpr:\n case UnaryExpr: {\n return this.isSubtype(Expression, supertype);\n }\n case Attribute:\n case DataSource:\n case FunctionDecl:\n case GeneratorDecl:\n case Plugin:\n case Procedure: {\n return this.isSubtype(AbstractDeclaration, supertype);\n }\n case BooleanLiteral:\n case NumberLiteral:\n case StringLiteral: {\n return this.isSubtype(LiteralExpr, supertype);\n }\n case ConfigArrayExpr: {\n return this.isSubtype(ConfigExpr, supertype);\n }\n case DataField: {\n return this.isSubtype(MemberAccessTarget, supertype) || this.isSubtype(ReferenceTarget, supertype);\n }\n case DataModel:\n case Enum:\n case TypeDef: {\n return this.isSubtype(AbstractDeclaration, supertype) || this.isSubtype(TypeDeclaration, supertype);\n }\n case EnumField:\n case FunctionParam: {\n return this.isSubtype(ReferenceTarget, supertype);\n }\n case InvocationExpr:\n case LiteralExpr: {\n return this.isSubtype(ConfigExpr, supertype) || this.isSubtype(Expression, supertype);\n }\n default: {\n return false;\n }\n }\n }\n\n getReferenceType(refInfo: langium.ReferenceInfo): string {\n const referenceId = `${refInfo.container.$type}:${refInfo.property}`;\n switch (referenceId) {\n case 'AttributeParamType:reference':\n case 'DataFieldType:reference':\n case 'FunctionParamType:reference': {\n return TypeDeclaration;\n }\n case 'DataFieldAttribute:decl':\n case 'DataModelAttribute:decl':\n case 'InternalAttribute:decl': {\n return Attribute;\n }\n case 'DataModel:baseModel': {\n return DataModel;\n }\n case 'DataModel:mixins':\n case 'TypeDef:mixins': {\n return TypeDef;\n }\n case 'InvocationExpr:function': {\n return FunctionDecl;\n }\n case 'MemberAccessExpr:member': {\n return MemberAccessTarget;\n }\n case 'ReferenceExpr:target': {\n return ReferenceTarget;\n }\n default: {\n throw new Error(`${referenceId} is not a valid reference id.`);\n }\n }\n }\n\n getTypeMetaData(type: string): langium.TypeMetaData {\n switch (type) {\n case Argument: {\n return {\n name: Argument,\n properties: [\n { name: 'value' }\n ]\n };\n }\n case ArrayExpr: {\n return {\n name: ArrayExpr,\n properties: [\n { name: 'items', defaultValue: [] }\n ]\n };\n }\n case Attribute: {\n return {\n name: Attribute,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'comments', defaultValue: [] },\n { name: 'name' },\n { name: 'params', defaultValue: [] }\n ]\n };\n }\n case AttributeArg: {\n return {\n name: AttributeArg,\n properties: [\n { name: 'name' },\n { name: 'value' }\n ]\n };\n }\n case AttributeParam: {\n return {\n name: AttributeParam,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'comments', defaultValue: [] },\n { name: 'default', defaultValue: false },\n { name: 'name' },\n { name: 'type' }\n ]\n };\n }\n case AttributeParamType: {\n return {\n name: AttributeParamType,\n properties: [\n { name: 'array', defaultValue: false },\n { name: 'optional', defaultValue: false },\n { name: 'reference' },\n { name: 'type' }\n ]\n };\n }\n case BinaryExpr: {\n return {\n name: BinaryExpr,\n properties: [\n { name: 'left' },\n { name: 'operator' },\n { name: 'right' }\n ]\n };\n }\n case BooleanLiteral: {\n return {\n name: BooleanLiteral,\n properties: [\n { name: 'value' }\n ]\n };\n }\n case ConfigArrayExpr: {\n return {\n name: ConfigArrayExpr,\n properties: [\n { name: 'items', defaultValue: [] }\n ]\n };\n }\n case ConfigField: {\n return {\n name: ConfigField,\n properties: [\n { name: 'name' },\n { name: 'value' }\n ]\n };\n }\n case ConfigInvocationArg: {\n return {\n name: ConfigInvocationArg,\n properties: [\n { name: 'name' },\n { name: 'value' }\n ]\n };\n }\n case ConfigInvocationExpr: {\n return {\n name: ConfigInvocationExpr,\n properties: [\n { name: 'args', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case DataField: {\n return {\n name: DataField,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'comments', defaultValue: [] },\n { name: 'name' },\n { name: 'type' }\n ]\n };\n }\n case DataFieldAttribute: {\n return {\n name: DataFieldAttribute,\n properties: [\n { name: 'args', defaultValue: [] },\n { name: 'decl' }\n ]\n };\n }\n case DataFieldType: {\n return {\n name: DataFieldType,\n properties: [\n { name: 'array', defaultValue: false },\n { name: 'optional', defaultValue: false },\n { name: 'reference' },\n { name: 'type' },\n { name: 'unsupported' }\n ]\n };\n }\n case DataModel: {\n return {\n name: DataModel,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'baseModel' },\n { name: 'comments', defaultValue: [] },\n { name: 'fields', defaultValue: [] },\n { name: 'isView', defaultValue: false },\n { name: 'mixins', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case DataModelAttribute: {\n return {\n name: DataModelAttribute,\n properties: [\n { name: 'args', defaultValue: [] },\n { name: 'decl' }\n ]\n };\n }\n case DataSource: {\n return {\n name: DataSource,\n properties: [\n { name: 'fields', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case Enum: {\n return {\n name: Enum,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'comments', defaultValue: [] },\n { name: 'fields', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case EnumField: {\n return {\n name: EnumField,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'comments', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case FieldInitializer: {\n return {\n name: FieldInitializer,\n properties: [\n { name: 'name' },\n { name: 'value' }\n ]\n };\n }\n case FunctionDecl: {\n return {\n name: FunctionDecl,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'expression' },\n { name: 'name' },\n { name: 'params', defaultValue: [] },\n { name: 'returnType' }\n ]\n };\n }\n case FunctionParam: {\n return {\n name: FunctionParam,\n properties: [\n { name: 'name' },\n { name: 'optional', defaultValue: false },\n { name: 'type' }\n ]\n };\n }\n case FunctionParamType: {\n return {\n name: FunctionParamType,\n properties: [\n { name: 'array', defaultValue: false },\n { name: 'reference' },\n { name: 'type' }\n ]\n };\n }\n case GeneratorDecl: {\n return {\n name: GeneratorDecl,\n properties: [\n { name: 'fields', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case InternalAttribute: {\n return {\n name: InternalAttribute,\n properties: [\n { name: 'args', defaultValue: [] },\n { name: 'decl' }\n ]\n };\n }\n case InvocationExpr: {\n return {\n name: InvocationExpr,\n properties: [\n { name: 'args', defaultValue: [] },\n { name: 'function' }\n ]\n };\n }\n case MemberAccessExpr: {\n return {\n name: MemberAccessExpr,\n properties: [\n { name: 'member' },\n { name: 'operand' }\n ]\n };\n }\n case Model: {\n return {\n name: Model,\n properties: [\n { name: 'declarations', defaultValue: [] },\n { name: 'imports', defaultValue: [] }\n ]\n };\n }\n case ModelImport: {\n return {\n name: ModelImport,\n properties: [\n { name: 'path' }\n ]\n };\n }\n case NullExpr: {\n return {\n name: NullExpr,\n properties: [\n { name: 'value' }\n ]\n };\n }\n case NumberLiteral: {\n return {\n name: NumberLiteral,\n properties: [\n { name: 'value' }\n ]\n };\n }\n case ObjectExpr: {\n return {\n name: ObjectExpr,\n properties: [\n { name: 'fields', defaultValue: [] }\n ]\n };\n }\n case Plugin: {\n return {\n name: Plugin,\n properties: [\n { name: 'fields', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case PluginField: {\n return {\n name: PluginField,\n properties: [\n { name: 'name' },\n { name: 'value' }\n ]\n };\n }\n case Procedure: {\n return {\n name: Procedure,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'mutation', defaultValue: false },\n { name: 'name' },\n { name: 'params', defaultValue: [] },\n { name: 'returnType' }\n ]\n };\n }\n case ProcedureParam: {\n return {\n name: ProcedureParam,\n properties: [\n { name: 'name' },\n { name: 'optional', defaultValue: false },\n { name: 'type' }\n ]\n };\n }\n case ReferenceArg: {\n return {\n name: ReferenceArg,\n properties: [\n { name: 'name' },\n { name: 'value' }\n ]\n };\n }\n case ReferenceExpr: {\n return {\n name: ReferenceExpr,\n properties: [\n { name: 'args', defaultValue: [] },\n { name: 'target' }\n ]\n };\n }\n case StringLiteral: {\n return {\n name: StringLiteral,\n properties: [\n { name: 'value' }\n ]\n };\n }\n case ThisExpr: {\n return {\n name: ThisExpr,\n properties: [\n { name: 'value' }\n ]\n };\n }\n case TypeDef: {\n return {\n name: TypeDef,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'comments', defaultValue: [] },\n { name: 'fields', defaultValue: [] },\n { name: 'mixins', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case UnaryExpr: {\n return {\n name: UnaryExpr,\n properties: [\n { name: 'operand' },\n { name: 'operator' }\n ]\n };\n }\n case UnsupportedFieldType: {\n return {\n name: UnsupportedFieldType,\n properties: [\n { name: 'value' }\n ]\n };\n }\n default: {\n return {\n name: type,\n properties: []\n };\n }\n }\n }\n}\n\nexport const reflection = new ZModelAstReflection();\n"],"mappings":"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","names":["invariant","AstUtils","URI","fs","path","STD_LIB_MODULE_NAME","langium","AbstractDeclaration","ConfigExpr","Expression","isExpression","item","reflection","isInstance","LiteralExpr","isLiteralExpr","item","reflection","isInstance","MemberAccessTarget","ReferenceTarget","TypeDeclaration","Argument","ArrayExpr","isArrayExpr","item","reflection","isInstance","Attribute","AttributeArg","AttributeParam","AttributeParamType","BinaryExpr","isBinaryExpr","item","reflection","isInstance","BooleanLiteral","ConfigArrayExpr","isConfigArrayExpr","item","reflection","isInstance","ConfigField","ConfigInvocationArg","ConfigInvocationExpr","DataField","isDataField","item","reflection","isInstance","DataFieldAttribute","DataFieldType","DataModel","isDataModel","item","reflection","isInstance","DataModelAttribute","DataSource","Enum","EnumField","isEnumField","item","reflection","isInstance","FieldInitializer","FunctionDecl","FunctionParam","FunctionParamType","GeneratorDecl","InternalAttribute","InvocationExpr","isInvocationExpr","item","reflection","isInstance","MemberAccessExpr","isMemberAccessExpr","Model","isModel","ModelImport","NullExpr","NumberLiteral","ObjectExpr","isObjectExpr","item","reflection","isInstance","Plugin","PluginField","Procedure","ProcedureParam","ReferenceArg","ReferenceExpr","isReferenceExpr","item","reflection","isInstance","StringLiteral","isStringLiteral","ThisExpr","TypeDef","isTypeDef","item","reflection","isInstance","UnaryExpr","UnsupportedFieldType","ZModelAstReflection","AbstractAstReflection","getAllTypes","AbstractDeclaration","Argument","ArrayExpr","Attribute","AttributeArg","AttributeParam","AttributeParamType","BinaryExpr","BooleanLiteral","ConfigArrayExpr","ConfigExpr","ConfigField","ConfigInvocationArg","ConfigInvocationExpr","DataField","DataFieldAttribute","DataFieldType","DataModel","DataModelAttribute","DataSource","Enum","EnumField","Expression","FieldInitializer","FunctionDecl","FunctionParam","FunctionParamType","GeneratorDecl","InternalAttribute","InvocationExpr","LiteralExpr","MemberAccessExpr","MemberAccessTarget","Model","ModelImport","NullExpr","NumberLiteral","ObjectExpr","Plugin","PluginField","Procedure","ProcedureParam","ReferenceArg","ReferenceExpr","ReferenceTarget","StringLiteral","ThisExpr","TypeDeclaration","TypeDef","UnaryExpr","UnsupportedFieldType","computeIsSubtype","subtype","supertype","isSubtype","getReferenceType","refInfo","referenceId","container","$type","property","Error","getTypeMetaData","type","name","properties","defaultValue","reflection","hasAttribute","decl","name","getAttribute","attributes","find","attr","$refText","isFromStdlib","node","model","AstUtils","getContainerOfType","isModel","$document","uri","path","endsWith","STD_LIB_MODULE_NAME","isAuthInvocation","isInvocationExpr","function","ref","getStringLiteral","isStringLiteral","value","undefined","isoDateTimeRegex","typeAssignable","destType","sourceType","sourceExpr","literal","test","mapBuiltinTypeToExpressionType","type","isAuthOrAuthMemberAccess","expr","isMemberAccessExpr","operand","isEnumFieldReference","isReferenceExpr","isEnumField","target","isDataFieldReference","isDataField","isRelationshipField","field","isDataModel","reference","isFutureExpr","isDelegateModel","resolved","Error","getRecursiveBases","includeDelegate","seen","Set","result","has","add","mixins","forEach","mixin","baseDecl","push","getModelIdFields","modelsToCheck","modelToCheck","allAttributes","getAllAttributes","idAttr","fieldsArg","args","a","$resolvedParam","isArrayExpr","items","filter","item","map","getModelUniqueFields","uniqueAttr","getUniqueFields","uniqueAttrs","findUpAst","predicate","curr","$container","getLiteral","$type","getObjectLiteral","parseFloat","isObjectExpr","fields","fieldValue","isLiteralExpr","getLiteralArray","arr","getArray","isExpression","v","isConfigArrayExpr","getAttributeArgLiteral","arg","getFunctionExpressionContext","funcDecl","funcAllowedContext","funcAttr","contextArg","getFieldReference","member","isCheckInvocation","resolveTransitiveImports","documents","resolveTransitiveImportsInternal","initialModel","visited","models","doc","getDocument","initialDoc","fsPath","toLowerCase","normalizedPath","imp","imports","importedModel","resolveImport","Array","from","resolvedUri","resolveImportUri","resolvedDocument","content","fs","readFileSync","createDocument","parseResult","dir","dirname","importPath","URI","file","resolve","getDataModelAndTypeDefs","includeIgnored","r","declarations","d","isTypeDef","getAllDeclarationsIncludingImports","concat","getAuthDecl","decls","authModel","m","isFutureInvocation","isCollectionPredicate","isBinaryExpr","includes","operator","getAllLoadedDataModelsAndTypeDefs","langiumDocuments","all","flatMap","toArray","getAllDataModelsIncludingImports","getAllLoadedAndReachableDataModelsAndTypeDefs","fromModel","allDataModels","transitiveDataModels","dm","getContainingDataModel","isMemberContainer","getAllFields","invariant","baseModel","f","rootNode","findRootNode"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zenstackhq/language",
|
|
3
3
|
"description": "ZenStack ZModel language specification",
|
|
4
|
-
"version": "3.0.0-
|
|
4
|
+
"version": "3.0.0-beta.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "ZenStack Team",
|
|
7
7
|
"files": [
|
|
@@ -30,6 +30,16 @@
|
|
|
30
30
|
"default": "./dist/ast.cjs"
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
|
+
"./utils": {
|
|
34
|
+
"import": {
|
|
35
|
+
"types": "./dist/utils.d.ts",
|
|
36
|
+
"default": "./dist/utils.js"
|
|
37
|
+
},
|
|
38
|
+
"require": {
|
|
39
|
+
"types": "./dist/utils.d.cts",
|
|
40
|
+
"default": "./dist/utils.cjs"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
33
43
|
"./package.json": {
|
|
34
44
|
"import": "./package.json",
|
|
35
45
|
"require": "./package.json"
|
|
@@ -43,15 +53,19 @@
|
|
|
43
53
|
"devDependencies": {
|
|
44
54
|
"@types/pluralize": "^0.0.33",
|
|
45
55
|
"langium-cli": "3.5.0",
|
|
46
|
-
"
|
|
47
|
-
"@
|
|
56
|
+
"tmp": "^0.2.3",
|
|
57
|
+
"@types/tmp": "^0.2.6",
|
|
58
|
+
"@zenstackhq/eslint-config": "3.0.0-beta.1",
|
|
59
|
+
"@zenstackhq/common-helpers": "3.0.0-beta.1",
|
|
60
|
+
"@zenstackhq/vitest-config": "3.0.0-beta.1",
|
|
61
|
+
"@zenstackhq/typescript-config": "3.0.0-beta.1"
|
|
48
62
|
},
|
|
49
63
|
"volta": {
|
|
50
64
|
"node": "18.19.1",
|
|
51
65
|
"npm": "10.2.4"
|
|
52
66
|
},
|
|
53
67
|
"scripts": {
|
|
54
|
-
"build": "pnpm langium:generate && tsup-node",
|
|
68
|
+
"build": "pnpm langium:generate && tsc --noEmit && tsup-node",
|
|
55
69
|
"lint": "eslint src --ext ts",
|
|
56
70
|
"langium:generate": "langium generate",
|
|
57
71
|
"langium:generate:production": "langium generate --mode=production",
|
package/res/stdlib.zmodel
CHANGED
|
@@ -199,11 +199,6 @@ function currentOperation(casing: String?): String {
|
|
|
199
199
|
*/
|
|
200
200
|
attribute @@@targetField(_ targetField: AttributeTargetField[])
|
|
201
201
|
|
|
202
|
-
/**
|
|
203
|
-
* Marks an attribute to be applicable to type defs and fields.
|
|
204
|
-
*/
|
|
205
|
-
attribute @@@supportTypeDef()
|
|
206
|
-
|
|
207
202
|
/**
|
|
208
203
|
* Marks an attribute to be used for data validation.
|
|
209
204
|
*/
|
|
@@ -224,6 +219,11 @@ attribute @@@prisma()
|
|
|
224
219
|
*/
|
|
225
220
|
attribute @@@completionHint(_ values: String[])
|
|
226
221
|
|
|
222
|
+
/**
|
|
223
|
+
* Indicates that the attribute can only be applied once to a declaration.
|
|
224
|
+
*/
|
|
225
|
+
attribute @@@once()
|
|
226
|
+
|
|
227
227
|
/**
|
|
228
228
|
* Defines a single-field ID on the model.
|
|
229
229
|
*
|
|
@@ -232,13 +232,13 @@ attribute @@@completionHint(_ values: String[])
|
|
|
232
232
|
* @param sort: Allows you to specify in what order the entries of the ID are stored in the database. The available options are Asc and Desc.
|
|
233
233
|
* @param clustered: Defines whether the ID is clustered or non-clustered. Defaults to true.
|
|
234
234
|
*/
|
|
235
|
-
attribute @id(map: String?, length: Int?, sort: SortOrder?, clustered: Boolean?) @@@prisma @@@
|
|
235
|
+
attribute @id(map: String?, length: Int?, sort: SortOrder?, clustered: Boolean?) @@@prisma @@@once
|
|
236
236
|
|
|
237
237
|
/**
|
|
238
238
|
* Defines a default value for a field.
|
|
239
239
|
* @param value: An expression (e.g. 5, true, now(), auth()).
|
|
240
240
|
*/
|
|
241
|
-
attribute @default(_ value: ContextType, map: String?) @@@prisma
|
|
241
|
+
attribute @default(_ value: ContextType, map: String?) @@@prisma
|
|
242
242
|
|
|
243
243
|
/**
|
|
244
244
|
* Defines a unique constraint for this field.
|
|
@@ -247,7 +247,7 @@ attribute @default(_ value: ContextType, map: String?) @@@prisma @@@supportTypeD
|
|
|
247
247
|
* @param sort: Allows you to specify in what order the entries of the constraint are stored in the database. The available options are Asc and Desc.
|
|
248
248
|
* @param clustered: Boolean Defines whether the constraint is clustered or non-clustered. Defaults to false.
|
|
249
249
|
*/
|
|
250
|
-
attribute @unique(map: String?, length: Int?, sort: SortOrder?, clustered: Boolean?) @@@prisma
|
|
250
|
+
attribute @unique(map: String?, length: Int?, sort: SortOrder?, clustered: Boolean?) @@@prisma @@@once
|
|
251
251
|
|
|
252
252
|
/**
|
|
253
253
|
* Defines a multi-field ID (composite ID) on the model.
|
|
@@ -259,7 +259,7 @@ attribute @unique(map: String?, length: Int?, sort: SortOrder?, clustered: Boole
|
|
|
259
259
|
* @param sort: Allows you to specify in what order the entries of the ID are stored in the database. The available options are Asc and Desc.
|
|
260
260
|
* @param clustered: Defines whether the ID is clustered or non-clustered. Defaults to true.
|
|
261
261
|
*/
|
|
262
|
-
attribute @@id(_ fields: FieldReference[], name: String?, map: String?, length: Int?, sort: SortOrder?, clustered: Boolean?) @@@prisma
|
|
262
|
+
attribute @@id(_ fields: FieldReference[], name: String?, map: String?, length: Int?, sort: SortOrder?, clustered: Boolean?) @@@prisma @@@once
|
|
263
263
|
|
|
264
264
|
/**
|
|
265
265
|
* Defines a compound unique constraint for the specified fields.
|
|
@@ -424,25 +424,12 @@ attribute @@fulltext(_ fields: FieldReference[], map: String?) @@@prisma
|
|
|
424
424
|
|
|
425
425
|
// String type modifiers
|
|
426
426
|
|
|
427
|
-
enum MSSQLServerTypes {
|
|
428
|
-
Max
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
attribute @db.String(_ x: Int?) @@@targetField([StringField]) @@@prisma
|
|
432
427
|
attribute @db.Text() @@@targetField([StringField]) @@@prisma
|
|
433
|
-
attribute @db.NText() @@@targetField([StringField]) @@@prisma
|
|
434
428
|
attribute @db.Char(_ x: Int?) @@@targetField([StringField]) @@@prisma
|
|
435
|
-
attribute @db.NChar(_ x: Int?) @@@targetField([StringField]) @@@prisma
|
|
436
429
|
attribute @db.VarChar(_ x: Any?) @@@targetField([StringField]) @@@prisma
|
|
437
|
-
attribute @db.NVarChar(_ x: Any?) @@@targetField([StringField]) @@@prisma
|
|
438
|
-
attribute @db.CatalogSingleChar() @@@targetField([StringField]) @@@prisma
|
|
439
|
-
attribute @db.TinyText() @@@targetField([StringField]) @@@prisma
|
|
440
|
-
attribute @db.MediumText() @@@targetField([StringField]) @@@prisma
|
|
441
|
-
attribute @db.LongText() @@@targetField([StringField]) @@@prisma
|
|
442
430
|
attribute @db.Bit(_ x: Int?) @@@targetField([StringField, BooleanField, BytesField]) @@@prisma
|
|
443
431
|
attribute @db.VarBit(_ x: Int?) @@@targetField([StringField]) @@@prisma
|
|
444
432
|
attribute @db.Uuid() @@@targetField([StringField]) @@@prisma
|
|
445
|
-
attribute @db.UniqueIdentifier() @@@targetField([StringField]) @@@prisma
|
|
446
433
|
attribute @db.Xml() @@@targetField([StringField]) @@@prisma
|
|
447
434
|
attribute @db.Inet() @@@targetField([StringField]) @@@prisma
|
|
448
435
|
attribute @db.Citext() @@@targetField([StringField]) @@@prisma
|
|
@@ -450,8 +437,6 @@ attribute @db.Citext() @@@targetField([StringField]) @@@prisma
|
|
|
450
437
|
// Boolean type modifiers
|
|
451
438
|
|
|
452
439
|
attribute @db.Boolean() @@@targetField([BooleanField]) @@@prisma
|
|
453
|
-
attribute @db.TinyInt(_ x: Int?) @@@targetField([BooleanField, IntField]) @@@prisma
|
|
454
|
-
attribute @db.Bool() @@@targetField([BooleanField]) @@@prisma
|
|
455
440
|
|
|
456
441
|
// Int type modifiers
|
|
457
442
|
|
|
@@ -459,38 +444,19 @@ attribute @db.Int() @@@targetField([IntField]) @@@prisma
|
|
|
459
444
|
attribute @db.Integer() @@@targetField([IntField]) @@@prisma
|
|
460
445
|
attribute @db.SmallInt() @@@targetField([IntField]) @@@prisma
|
|
461
446
|
attribute @db.Oid() @@@targetField([IntField]) @@@prisma
|
|
462
|
-
attribute @db.UnsignedInt() @@@targetField([IntField]) @@@prisma
|
|
463
|
-
attribute @db.UnsignedSmallInt() @@@targetField([IntField]) @@@prisma
|
|
464
|
-
attribute @db.MediumInt() @@@targetField([IntField]) @@@prisma
|
|
465
|
-
attribute @db.UnsignedMediumInt() @@@targetField([IntField]) @@@prisma
|
|
466
|
-
attribute @db.UnsignedTinyInt() @@@targetField([IntField]) @@@prisma
|
|
467
|
-
attribute @db.Year() @@@targetField([IntField]) @@@prisma
|
|
468
|
-
attribute @db.Int4() @@@targetField([IntField]) @@@prisma
|
|
469
|
-
attribute @db.Int2() @@@targetField([IntField]) @@@prisma
|
|
470
447
|
|
|
471
448
|
// BigInt type modifiers
|
|
472
449
|
|
|
473
450
|
attribute @db.BigInt() @@@targetField([BigIntField]) @@@prisma
|
|
474
|
-
attribute @db.UnsignedBigInt() @@@targetField([BigIntField]) @@@prisma
|
|
475
|
-
attribute @db.Int8() @@@targetField([BigIntField]) @@@prisma
|
|
476
451
|
|
|
477
452
|
// Float/Decimal type modifiers
|
|
478
453
|
attribute @db.DoublePrecision() @@@targetField([FloatField, DecimalField]) @@@prisma
|
|
479
454
|
attribute @db.Real() @@@targetField([FloatField, DecimalField]) @@@prisma
|
|
480
|
-
attribute @db.Float() @@@targetField([FloatField, DecimalField]) @@@prisma
|
|
481
455
|
attribute @db.Decimal(_ p: Int?, _ s: Int?) @@@targetField([FloatField, DecimalField]) @@@prisma
|
|
482
|
-
attribute @db.Double() @@@targetField([FloatField, DecimalField]) @@@prisma
|
|
483
456
|
attribute @db.Money() @@@targetField([FloatField, DecimalField]) @@@prisma
|
|
484
|
-
attribute @db.SmallMoney() @@@targetField([FloatField, DecimalField]) @@@prisma
|
|
485
|
-
attribute @db.Float8() @@@targetField([FloatField, DecimalField]) @@@prisma
|
|
486
|
-
attribute @db.Float4() @@@targetField([FloatField, DecimalField]) @@@prisma
|
|
487
457
|
|
|
488
458
|
// DateTime type modifiers
|
|
489
459
|
|
|
490
|
-
attribute @db.DateTime(_ x: Int?) @@@targetField([DateTimeField]) @@@prisma
|
|
491
|
-
attribute @db.DateTime2() @@@targetField([DateTimeField]) @@@prisma
|
|
492
|
-
attribute @db.SmallDateTime() @@@targetField([DateTimeField]) @@@prisma
|
|
493
|
-
attribute @db.DateTimeOffset() @@@targetField([DateTimeField]) @@@prisma
|
|
494
460
|
attribute @db.Timestamp(_ x: Int?) @@@targetField([DateTimeField]) @@@prisma
|
|
495
461
|
attribute @db.Timestamptz(_ x: Int?) @@@targetField([DateTimeField]) @@@prisma
|
|
496
462
|
attribute @db.Date() @@@targetField([DateTimeField]) @@@prisma
|
|
@@ -504,49 +470,14 @@ attribute @db.JsonB() @@@targetField([JsonField]) @@@prisma
|
|
|
504
470
|
|
|
505
471
|
// Bytes type modifiers
|
|
506
472
|
|
|
507
|
-
attribute @db.Bytes() @@@targetField([BytesField]) @@@prisma
|
|
508
473
|
attribute @db.ByteA() @@@targetField([BytesField]) @@@prisma
|
|
509
|
-
attribute @db.LongBlob() @@@targetField([BytesField]) @@@prisma
|
|
510
|
-
attribute @db.Binary() @@@targetField([BytesField]) @@@prisma
|
|
511
|
-
attribute @db.VarBinary(_ x: Int?) @@@targetField([BytesField]) @@@prisma
|
|
512
|
-
attribute @db.TinyBlob() @@@targetField([BytesField]) @@@prisma
|
|
513
|
-
attribute @db.Blob() @@@targetField([BytesField]) @@@prisma
|
|
514
|
-
attribute @db.MediumBlob() @@@targetField([BytesField]) @@@prisma
|
|
515
|
-
attribute @db.Image() @@@targetField([BytesField]) @@@prisma
|
|
516
|
-
|
|
517
|
-
/**
|
|
518
|
-
* Specifies the schema to use in a multi-schema database. https://www.prisma.io/docs/guides/database/multi-schema.
|
|
519
|
-
*
|
|
520
|
-
* @param: The name of the database schema.
|
|
521
|
-
*/
|
|
522
|
-
attribute @@schema(_ name: String) @@@prisma
|
|
523
|
-
|
|
524
|
-
/**
|
|
525
|
-
* Indicates that the field is a password field and needs to be hashed before persistence.
|
|
526
|
-
*
|
|
527
|
-
* ZenStack uses `bcryptjs` library to hash password. You can use the `saltLength` parameter
|
|
528
|
-
* to configure the cost of hashing, or use `salt` parameter to provide an explicit salt.
|
|
529
|
-
* By default, salt length of 12 is used.
|
|
530
|
-
*
|
|
531
|
-
* @see https://www.npmjs.com/package/bcryptjs for details
|
|
532
|
-
*
|
|
533
|
-
* @param saltLength: length of salt to use (cost factor for the hash function)
|
|
534
|
-
* @param salt: salt to use (a pregenerated valid salt)
|
|
535
|
-
*/
|
|
536
|
-
attribute @password(saltLength: Int?, salt: String?) @@@targetField([StringField])
|
|
537
|
-
|
|
538
474
|
|
|
539
|
-
/**
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
attribute
|
|
545
|
-
|
|
546
|
-
/**
|
|
547
|
-
* Indicates that the field should be omitted when read from the generated services.
|
|
548
|
-
*/
|
|
549
|
-
attribute @omit()
|
|
475
|
+
// /**
|
|
476
|
+
// * Specifies the schema to use in a multi-schema database. https://www.prisma.io/docs/guides/database/multi-schema.
|
|
477
|
+
// *
|
|
478
|
+
// * @param: The name of the database schema.
|
|
479
|
+
// */
|
|
480
|
+
// attribute @@schema(_ name: String) @@@prisma
|
|
550
481
|
|
|
551
482
|
//////////////////////////////////////////////
|
|
552
483
|
// Begin validation attributes and functions
|
|
@@ -555,82 +486,82 @@ attribute @omit()
|
|
|
555
486
|
/**
|
|
556
487
|
* Validates length of a string field.
|
|
557
488
|
*/
|
|
558
|
-
attribute @length(_ min: Int?, _ max: Int?, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
489
|
+
attribute @length(_ min: Int?, _ max: Int?, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
559
490
|
|
|
560
491
|
/**
|
|
561
492
|
* Validates a string field value starts with the given text.
|
|
562
493
|
*/
|
|
563
|
-
attribute @startsWith(_ text: String, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
494
|
+
attribute @startsWith(_ text: String, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
564
495
|
|
|
565
496
|
/**
|
|
566
497
|
* Validates a string field value ends with the given text.
|
|
567
498
|
*/
|
|
568
|
-
attribute @endsWith(_ text: String, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
499
|
+
attribute @endsWith(_ text: String, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
569
500
|
|
|
570
501
|
/**
|
|
571
502
|
* Validates a string field value contains the given text.
|
|
572
503
|
*/
|
|
573
|
-
attribute @contains(_ text: String, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
504
|
+
attribute @contains(_ text: String, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
574
505
|
|
|
575
506
|
/**
|
|
576
507
|
* Validates a string field value matches a regex.
|
|
577
508
|
*/
|
|
578
|
-
attribute @regex(_ regex: String, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
509
|
+
attribute @regex(_ regex: String, _ message: String?) @@@targetField([StringField]) @@@validation
|
|
579
510
|
|
|
580
511
|
/**
|
|
581
512
|
* Validates a string field value is a valid email address.
|
|
582
513
|
*/
|
|
583
|
-
attribute @email(_ message: String?) @@@targetField([StringField]) @@@validation
|
|
514
|
+
attribute @email(_ message: String?) @@@targetField([StringField]) @@@validation
|
|
584
515
|
|
|
585
516
|
/**
|
|
586
517
|
* Validates a string field value is a valid ISO datetime.
|
|
587
518
|
*/
|
|
588
|
-
attribute @datetime(_ message: String?) @@@targetField([StringField]) @@@validation
|
|
519
|
+
attribute @datetime(_ message: String?) @@@targetField([StringField]) @@@validation
|
|
589
520
|
|
|
590
521
|
/**
|
|
591
522
|
* Validates a string field value is a valid url.
|
|
592
523
|
*/
|
|
593
|
-
attribute @url(_ message: String?) @@@targetField([StringField]) @@@validation
|
|
524
|
+
attribute @url(_ message: String?) @@@targetField([StringField]) @@@validation
|
|
594
525
|
|
|
595
526
|
/**
|
|
596
527
|
* Trims whitespaces from the start and end of the string.
|
|
597
528
|
*/
|
|
598
|
-
attribute @trim() @@@targetField([StringField]) @@@validation
|
|
529
|
+
attribute @trim() @@@targetField([StringField]) @@@validation
|
|
599
530
|
|
|
600
531
|
/**
|
|
601
532
|
* Transform entire string toLowerCase.
|
|
602
533
|
*/
|
|
603
|
-
attribute @lower() @@@targetField([StringField]) @@@validation
|
|
534
|
+
attribute @lower() @@@targetField([StringField]) @@@validation
|
|
604
535
|
|
|
605
536
|
/**
|
|
606
537
|
* Transform entire string toUpperCase.
|
|
607
538
|
*/
|
|
608
|
-
attribute @upper() @@@targetField([StringField]) @@@validation
|
|
539
|
+
attribute @upper() @@@targetField([StringField]) @@@validation
|
|
609
540
|
|
|
610
541
|
/**
|
|
611
542
|
* Validates a number field is greater than the given value.
|
|
612
543
|
*/
|
|
613
|
-
attribute @gt(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
|
|
544
|
+
attribute @gt(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
|
|
614
545
|
|
|
615
546
|
/**
|
|
616
547
|
* Validates a number field is greater than or equal to the given value.
|
|
617
548
|
*/
|
|
618
|
-
attribute @gte(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
|
|
549
|
+
attribute @gte(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
|
|
619
550
|
|
|
620
551
|
/**
|
|
621
552
|
* Validates a number field is less than the given value.
|
|
622
553
|
*/
|
|
623
|
-
attribute @lt(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
|
|
554
|
+
attribute @lt(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
|
|
624
555
|
|
|
625
556
|
/**
|
|
626
557
|
* Validates a number field is less than or equal to the given value.
|
|
627
558
|
*/
|
|
628
|
-
attribute @lte(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
|
|
559
|
+
attribute @lte(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
|
|
629
560
|
|
|
630
561
|
/**
|
|
631
562
|
* Validates the entity with a complex condition.
|
|
632
563
|
*/
|
|
633
|
-
attribute @@validate(_ value: Boolean, _ message: String?, _ path: String[]?) @@@validation
|
|
564
|
+
attribute @@validate(_ value: Boolean, _ message: String?, _ path: String[]?) @@@validation
|
|
634
565
|
|
|
635
566
|
/**
|
|
636
567
|
* Validates length of a string field.
|
|
@@ -718,4 +649,19 @@ function auth(): Any {
|
|
|
718
649
|
* Used to specify the model for resolving `auth()` function call in access policies. A Zmodel
|
|
719
650
|
* can have at most one model with this attribute. By default, the model named "User" is used.
|
|
720
651
|
*/
|
|
721
|
-
attribute @@auth()
|
|
652
|
+
attribute @@auth()
|
|
653
|
+
|
|
654
|
+
/**
|
|
655
|
+
* Attaches arbitrary metadata to a model or type def.
|
|
656
|
+
*/
|
|
657
|
+
attribute @@meta(_ name: String, _ value: Any)
|
|
658
|
+
|
|
659
|
+
/**
|
|
660
|
+
* Attaches arbitrary metadata to a field.
|
|
661
|
+
*/
|
|
662
|
+
attribute @meta(_ name: String, _ value: Any)
|
|
663
|
+
|
|
664
|
+
/**
|
|
665
|
+
* Marks an attribute as deprecated.
|
|
666
|
+
*/
|
|
667
|
+
attribute @@@deprecated(_ message: String)
|