New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@mrleebo/prisma-ast

Package Overview
Dependencies
Maintainers
1
Versions
30
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mrleebo/prisma-ast - npm Package Compare versions

Comparing version 0.7.0 to 0.8.0

3

dist/getConfig.d.ts
import type { IParserConfig } from 'chevrotain';
export type PrismaAstParserConfig = Pick<IParserConfig, 'nodeLocationTracking'>;
export interface PrismaAstConfig {
parser: Pick<IParserConfig, 'nodeLocationTracking'>;
parser: PrismaAstParserConfig;
}
export default function getConfig(): PrismaAstConfig;

@@ -0,3 +1,8 @@

import { PrismaVisitor } from './visitor';
import type { CstNodeLocation } from 'chevrotain';
export declare function getSchema(source: string): Schema;
import { PrismaParser } from './parser';
export declare function getSchema(source: string, options?: {
parser: PrismaParser;
visitor: PrismaVisitor;
}): Schema;
export interface Schema {

@@ -4,0 +9,0 @@ type: 'schema';

@@ -6,1 +6,3 @@ export * from './getSchema';

export type { CstNodeLocation } from 'chevrotain';
export { VisitorClassFactory } from './visitor';
export { PrismaParser } from './parser';
import { CstParser } from 'chevrotain';
import { PrismaAstParserConfig } from './getConfig';
export declare class PrismaParser extends CstParser {
constructor();
readonly config: PrismaAstParserConfig;
constructor(config: PrismaAstParserConfig);
private break;

@@ -20,2 +22,2 @@ private keyedArg;

}
export declare const parser: PrismaParser;
export declare const defaultParser: PrismaParser;

@@ -181,2 +181,43 @@ 'use strict';

var schemaObjects = ['model', 'view'];
function isSchemaObject(obj) {
return obj != null && 'type' in obj && schemaObjects.includes(obj.type);
}
function isSchemaField(field) {
return field != null && 'type' in field && field.type === 'field';
}
function isToken(node) {
return 'image' in node[0];
}
function appendLocationData(data) {
for (var _len = arguments.length, tokens = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
tokens[_key - 1] = arguments[_key];
}
var location = tokens.reduce(function (memo, token) {
if (!token) return memo;
var _memo$endColumn = memo.endColumn,
endColumn = _memo$endColumn === void 0 ? -Infinity : _memo$endColumn,
_memo$endLine = memo.endLine,
endLine = _memo$endLine === void 0 ? -Infinity : _memo$endLine,
_memo$endOffset = memo.endOffset,
endOffset = _memo$endOffset === void 0 ? -Infinity : _memo$endOffset,
_memo$startColumn = memo.startColumn,
startColumn = _memo$startColumn === void 0 ? Infinity : _memo$startColumn,
_memo$startLine = memo.startLine,
startLine = _memo$startLine === void 0 ? Infinity : _memo$startLine,
_memo$startOffset = memo.startOffset,
startOffset = _memo$startOffset === void 0 ? Infinity : _memo$startOffset;
if (token.startLine != null && token.startLine < startLine) memo.startLine = token.startLine;
if (token.startColumn != null && token.startColumn < startColumn) memo.startColumn = token.startColumn;
if (token.startOffset != null && token.startOffset < startOffset) memo.startOffset = token.startOffset;
if (token.endLine != null && token.endLine > endLine) memo.endLine = token.endLine;
if (token.endColumn != null && token.endColumn > endColumn) memo.endColumn = token.endColumn;
if (token.endOffset != null && token.endOffset > endOffset) memo.endOffset = token.endOffset;
return memo;
}, {});
return Object.assign(data, {
location: location
});
}
var defaultConfig = {

@@ -196,5 +237,6 @@ parser: {

_inheritsLoose(PrismaParser, _CstParser);
function PrismaParser() {
function PrismaParser(config) {
var _this;
_this = _CstParser.call(this, multiModeTokens, getConfig().parser) || this;
_this = _CstParser.call(this, multiModeTokens, config) || this;
_this.config = void 0;
_this["break"] = _this.RULE('break', function () {

@@ -575,2 +617,3 @@ _this.CONSUME1(LineBreak);

_this.performSelfAnalysis();
_this.config = config;
return _this;

@@ -580,263 +623,232 @@ }

}(chevrotain.CstParser);
var parser = /*#__PURE__*/new PrismaParser();
var defaultParser = /*#__PURE__*/new PrismaParser( getConfig().parser);
var schemaObjects = ['model', 'view'];
function isSchemaObject(obj) {
return obj != null && 'type' in obj && schemaObjects.includes(obj.type);
}
function isSchemaField(field) {
return field != null && 'type' in field && field.type === 'field';
}
function isToken(node) {
return 'image' in node[0];
}
function appendLocationData(data) {
var _getConfig = getConfig(),
parser = _getConfig.parser;
if (parser.nodeLocationTracking === 'none') return data;
for (var _len = arguments.length, tokens = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
tokens[_key - 1] = arguments[_key];
}
var location = tokens.reduce(function (memo, token) {
if (!token) return memo;
var _memo$endColumn = memo.endColumn,
endColumn = _memo$endColumn === void 0 ? -Infinity : _memo$endColumn,
_memo$endLine = memo.endLine,
endLine = _memo$endLine === void 0 ? -Infinity : _memo$endLine,
_memo$endOffset = memo.endOffset,
endOffset = _memo$endOffset === void 0 ? -Infinity : _memo$endOffset,
_memo$startColumn = memo.startColumn,
startColumn = _memo$startColumn === void 0 ? Infinity : _memo$startColumn,
_memo$startLine = memo.startLine,
startLine = _memo$startLine === void 0 ? Infinity : _memo$startLine,
_memo$startOffset = memo.startOffset,
startOffset = _memo$startOffset === void 0 ? Infinity : _memo$startOffset;
if (token.startLine != null && token.startLine < startLine) memo.startLine = token.startLine;
if (token.startColumn != null && token.startColumn < startColumn) memo.startColumn = token.startColumn;
if (token.startOffset != null && token.startOffset < startOffset) memo.startOffset = token.startOffset;
if (token.endLine != null && token.endLine > endLine) memo.endLine = token.endLine;
if (token.endColumn != null && token.endColumn > endColumn) memo.endColumn = token.endColumn;
if (token.endOffset != null && token.endOffset > endOffset) memo.endOffset = token.endOffset;
return memo;
}, {});
return Object.assign(data, {
location: location
});
}
var BasePrismaVisitor = /*#__PURE__*/parser.getBaseCstVisitorConstructorWithDefaults();
var PrismaVisitor = /*#__PURE__*/function (_BasePrismaVisitor) {
_inheritsLoose(PrismaVisitor, _BasePrismaVisitor);
function PrismaVisitor() {
var _this;
_this = _BasePrismaVisitor.call(this) || this;
_this.validateVisitor();
return _this;
}
var _proto = PrismaVisitor.prototype;
_proto.schema = function schema(ctx) {
var _ctx$list,
_this2 = this;
var list = ((_ctx$list = ctx.list) == null ? void 0 : _ctx$list.map(function (item) {
return _this2.visit([item]);
})) || [];
return {
type: 'schema',
list: list
var VisitorClassFactory = function VisitorClassFactory(parser) {
var BasePrismaVisitor = parser.getBaseCstVisitorConstructorWithDefaults();
return /*#__PURE__*/function (_BasePrismaVisitor) {
_inheritsLoose(PrismaVisitor, _BasePrismaVisitor);
function PrismaVisitor() {
var _this;
_this = _BasePrismaVisitor.call(this) || this;
_this.validateVisitor();
return _this;
}
var _proto = PrismaVisitor.prototype;
_proto.schema = function schema(ctx) {
var _ctx$list,
_this2 = this;
var list = ((_ctx$list = ctx.list) == null ? void 0 : _ctx$list.map(function (item) {
return _this2.visit([item]);
})) || [];
return {
type: 'schema',
list: list
};
};
};
_proto.component = function component(ctx) {
var _ctx$type = ctx.type,
type = _ctx$type[0];
var _ctx$componentName = ctx.componentName,
name = _ctx$componentName[0];
var list = this.visit(ctx.block);
var data = function () {
switch (type.image) {
case 'datasource':
return {
type: 'datasource',
name: name.image,
assignments: list
};
case 'generator':
return {
type: 'generator',
name: name.image,
assignments: list
};
case 'model':
return {
type: 'model',
name: name.image,
properties: list
};
case 'view':
return {
type: 'view',
name: name.image,
properties: list
};
case 'enum':
return {
type: 'enum',
name: name.image,
enumerators: list
};
default:
throw new Error("Unexpected block type: " + type);
}
}();
return appendLocationData(data, type, name);
};
_proto["break"] = function _break() {
return {
type: 'break'
_proto.component = function component(ctx) {
var _ctx$type = ctx.type,
type = _ctx$type[0];
var _ctx$componentName = ctx.componentName,
name = _ctx$componentName[0];
var list = this.visit(ctx.block);
var data = function () {
switch (type.image) {
case 'datasource':
return {
type: 'datasource',
name: name.image,
assignments: list
};
case 'generator':
return {
type: 'generator',
name: name.image,
assignments: list
};
case 'model':
return {
type: 'model',
name: name.image,
properties: list
};
case 'view':
return {
type: 'view',
name: name.image,
properties: list
};
case 'enum':
return {
type: 'enum',
name: name.image,
enumerators: list
};
default:
throw new Error("Unexpected block type: " + type);
}
}();
return this.maybeAppendLocationData(data, type, name);
};
};
_proto.comment = function comment(ctx) {
var _ctx$text = ctx.text,
comment = _ctx$text[0];
var data = {
type: 'comment',
text: comment.image
_proto["break"] = function _break() {
return {
type: 'break'
};
};
return appendLocationData(data, comment);
};
_proto.block = function block(ctx) {
var _ctx$list2,
_this3 = this;
return (_ctx$list2 = ctx.list) == null ? void 0 : _ctx$list2.map(function (item) {
return _this3.visit([item]);
});
};
_proto.assignment = function assignment(ctx) {
var value = this.visit(ctx.assignmentValue);
var _ctx$assignmentName = ctx.assignmentName,
key = _ctx$assignmentName[0];
var data = {
type: 'assignment',
key: key.image,
value: value
_proto.comment = function comment(ctx) {
var _ctx$text = ctx.text,
comment = _ctx$text[0];
var data = {
type: 'comment',
text: comment.image
};
return this.maybeAppendLocationData(data, comment);
};
return appendLocationData(data, key);
};
_proto.field = function field(ctx) {
var _this4 = this,
_ctx$comment,
_ctx$optional,
_ctx$array;
var fieldType = this.visit(ctx.fieldType);
var _ctx$fieldName = ctx.fieldName,
name = _ctx$fieldName[0];
var attributes = ctx.attributeList && ctx.attributeList.map(function (item) {
return _this4.visit([item]);
});
var comment = (_ctx$comment = ctx.comment) == null || (_ctx$comment = _ctx$comment[0]) == null ? void 0 : _ctx$comment.image;
var data = {
type: 'field',
name: name.image,
fieldType: fieldType,
array: ctx.array != null,
optional: ctx.optional != null,
attributes: attributes,
comment: comment
_proto.block = function block(ctx) {
var _ctx$list2,
_this3 = this;
return (_ctx$list2 = ctx.list) == null ? void 0 : _ctx$list2.map(function (item) {
return _this3.visit([item]);
});
};
return appendLocationData(data, name, (_ctx$optional = ctx.optional) == null ? void 0 : _ctx$optional[0], (_ctx$array = ctx.array) == null ? void 0 : _ctx$array[0]);
};
_proto.attribute = function attribute(ctx) {
var _this5 = this;
var _ctx$attributeName = ctx.attributeName,
name = _ctx$attributeName[0];
var _ref = ctx.groupName || [{}],
group = _ref[0];
var args = ctx.attributeArg && ctx.attributeArg.map(function (attr) {
return _this5.visit(attr);
});
var kind = ctx.blockAttribute != null ? 'object' : 'field';
var data = {
type: 'attribute',
name: name.image,
kind: kind,
group: group.image,
args: args
_proto.assignment = function assignment(ctx) {
var value = this.visit(ctx.assignmentValue);
var _ctx$assignmentName = ctx.assignmentName,
key = _ctx$assignmentName[0];
var data = {
type: 'assignment',
key: key.image,
value: value
};
return this.maybeAppendLocationData(data, key);
};
var attrs = kind === 'object' ? ctx.blockAttribute : ctx.fieldAttribute;
return appendLocationData.apply(void 0, [data, name].concat(attrs, [group]));
};
_proto.attributeArg = function attributeArg(ctx) {
var value = this.visit(ctx.value);
return {
type: 'attributeArgument',
value: value
_proto.field = function field(ctx) {
var _this4 = this,
_ctx$comment,
_ctx$optional,
_ctx$array;
var fieldType = this.visit(ctx.fieldType);
var _ctx$fieldName = ctx.fieldName,
name = _ctx$fieldName[0];
var attributes = ctx.attributeList && ctx.attributeList.map(function (item) {
return _this4.visit([item]);
});
var comment = (_ctx$comment = ctx.comment) == null || (_ctx$comment = _ctx$comment[0]) == null ? void 0 : _ctx$comment.image;
var data = {
type: 'field',
name: name.image,
fieldType: fieldType,
array: ctx.array != null,
optional: ctx.optional != null,
attributes: attributes,
comment: comment
};
return this.maybeAppendLocationData(data, name, (_ctx$optional = ctx.optional) == null ? void 0 : _ctx$optional[0], (_ctx$array = ctx.array) == null ? void 0 : _ctx$array[0]);
};
};
_proto.func = function func(ctx) {
var _this6 = this;
var _ctx$funcName = ctx.funcName,
name = _ctx$funcName[0];
var params = ctx.value && ctx.value.map(function (item) {
return _this6.visit([item]);
});
var keyedParams = ctx.keyedArg && ctx.keyedArg.map(function (item) {
return _this6.visit([item]);
});
var pars = (params || keyedParams) && [].concat(params != null ? params : [], keyedParams != null ? keyedParams : []);
var data = {
type: 'function',
name: name.image,
params: pars
_proto.attribute = function attribute(ctx) {
var _this5 = this;
var _ctx$attributeName = ctx.attributeName,
name = _ctx$attributeName[0];
var _ref = ctx.groupName || [{}],
group = _ref[0];
var args = ctx.attributeArg && ctx.attributeArg.map(function (attr) {
return _this5.visit(attr);
});
var kind = ctx.blockAttribute != null ? 'object' : 'field';
var data = {
type: 'attribute',
name: name.image,
kind: kind,
group: group.image,
args: args
};
var attrs = kind === 'object' ? ctx.blockAttribute : ctx.fieldAttribute;
return this.maybeAppendLocationData.apply(this, [data, name].concat(attrs, [group]));
};
return appendLocationData(data, name);
};
_proto.array = function array(ctx) {
var _this7 = this;
var args = ctx.value && ctx.value.map(function (item) {
return _this7.visit([item]);
});
return {
type: 'array',
args: args
_proto.attributeArg = function attributeArg(ctx) {
var value = this.visit(ctx.value);
return {
type: 'attributeArgument',
value: value
};
};
};
_proto.keyedArg = function keyedArg(ctx) {
var _ctx$keyName = ctx.keyName,
key = _ctx$keyName[0];
var value = this.visit(ctx.value);
var data = {
type: 'keyValue',
key: key.image,
value: value
_proto.func = function func(ctx) {
var _this6 = this;
var _ctx$funcName = ctx.funcName,
name = _ctx$funcName[0];
var params = ctx.value && ctx.value.map(function (item) {
return _this6.visit([item]);
});
var keyedParams = ctx.keyedArg && ctx.keyedArg.map(function (item) {
return _this6.visit([item]);
});
var pars = (params || keyedParams) && [].concat(params != null ? params : [], keyedParams != null ? keyedParams : []);
var data = {
type: 'function',
name: name.image,
params: pars
};
return this.maybeAppendLocationData(data, name);
};
return appendLocationData(data, key);
};
_proto.value = function value(ctx) {
if (isToken(ctx.value)) {
var _ctx$value = ctx.value,
image = _ctx$value[0].image;
return image;
}
return this.visit(ctx.value);
};
_proto["enum"] = function _enum(ctx) {
var _ctx$comment2;
var _ctx$enumName = ctx.enumName,
name = _ctx$enumName[0];
var comment = (_ctx$comment2 = ctx.comment) == null || (_ctx$comment2 = _ctx$comment2[0]) == null ? void 0 : _ctx$comment2.image;
var data = {
type: 'enumerator',
name: name.image,
comment: comment
_proto.array = function array(ctx) {
var _this7 = this;
var args = ctx.value && ctx.value.map(function (item) {
return _this7.visit([item]);
});
return {
type: 'array',
args: args
};
};
return appendLocationData(data, name);
};
return PrismaVisitor;
}(BasePrismaVisitor);
_proto.keyedArg = function keyedArg(ctx) {
var _ctx$keyName = ctx.keyName,
key = _ctx$keyName[0];
var value = this.visit(ctx.value);
var data = {
type: 'keyValue',
key: key.image,
value: value
};
return this.maybeAppendLocationData(data, key);
};
_proto.value = function value(ctx) {
if (isToken(ctx.value)) {
var _ctx$value = ctx.value,
image = _ctx$value[0].image;
return image;
}
return this.visit(ctx.value);
};
_proto["enum"] = function _enum(ctx) {
var _ctx$comment2;
var _ctx$enumName = ctx.enumName,
name = _ctx$enumName[0];
var comment = (_ctx$comment2 = ctx.comment) == null || (_ctx$comment2 = _ctx$comment2[0]) == null ? void 0 : _ctx$comment2.image;
var data = {
type: 'enumerator',
name: name.image,
comment: comment
};
return this.maybeAppendLocationData(data, name);
};
_proto.maybeAppendLocationData = function maybeAppendLocationData(data) {
if (parser.config.nodeLocationTracking === 'none') return data;
for (var _len = arguments.length, tokens = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
tokens[_key - 1] = arguments[_key];
}
return appendLocationData.apply(void 0, [data].concat(tokens));
};
return PrismaVisitor;
}(BasePrismaVisitor);
};
var DefaultVisitorClass = /*#__PURE__*/VisitorClassFactory(defaultParser);
var defaultVisitor = /*#__PURE__*/new DefaultVisitorClass();
function getSchema(source) {
function getSchema(source, options) {
var _options$parser, _options$visitor;
var lexingResult = PrismaLexer.tokenize(source);
var parser = (_options$parser = options == null ? void 0 : options.parser) != null ? _options$parser : defaultParser;
parser.input = lexingResult.tokens;
var cstNode = parser.schema();
if (parser.errors.length > 0) throw parser.errors[0];
var visitor = new PrismaVisitor();
var visitor = (_options$visitor = options == null ? void 0 : options.visitor) != null ? _options$visitor : defaultVisitor;
return visitor.visit(cstNode);

@@ -1449,2 +1461,4 @@ }

exports.ConcretePrismaSchemaBuilder = ConcretePrismaSchemaBuilder;
exports.PrismaParser = PrismaParser;
exports.VisitorClassFactory = VisitorClassFactory;
exports.createPrismaSchemaBuilder = createPrismaSchemaBuilder;

@@ -1451,0 +1465,0 @@ exports.getSchema = getSchema;

@@ -1,2 +0,2 @@

"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("chevrotain"),t=require("lilconfig"),n=require("os"),r=e.createToken({name:"Identifier",pattern:/[a-zA-Z]\w*/}),a=e.createToken({name:"Datasource",pattern:/datasource/,push_mode:"block"}),i=e.createToken({name:"Generator",pattern:/generator/,push_mode:"block"}),u=e.createToken({name:"Model",pattern:/model/,push_mode:"block"}),o=e.createToken({name:"View",pattern:/view/,push_mode:"block"}),s=e.createToken({name:"Enum",pattern:/enum/,push_mode:"block"}),c=e.createToken({name:"True",pattern:/true/,longer_alt:r}),m=e.createToken({name:"False",pattern:/false/,longer_alt:r}),l=e.createToken({name:"Null",pattern:/null/,longer_alt:r}),p=e.createToken({name:"Comment",pattern:e.Lexer.NA}),f=e.createToken({name:"DocComment",pattern:/\/\/\/\s*(.+)/,categories:[p]}),L=e.createToken({name:"LineComment",pattern:/\/\/\s*(.+)/,categories:[p]}),d=e.createToken({name:"Attribute",pattern:e.Lexer.NA}),v=e.createToken({name:"BlockAttribute",pattern:/@@/,label:"'@@'",categories:[d]}),y=e.createToken({name:"FieldAttribute",pattern:/@/,label:"'@'",categories:[d]}),E=e.createToken({name:"Dot",pattern:/\./,label:"'.'"}),h=e.createToken({name:"QuestionMark",pattern:/\?/,label:"'?'"}),b=e.createToken({name:"LCurly",pattern:/{/,label:"'{'"}),g=e.createToken({name:"RCurly",pattern:/}/,label:"'}'",pop_mode:!0}),A=e.createToken({name:"LRound",pattern:/\(/,label:"'('"}),U=e.createToken({name:"RRound",pattern:/\)/,label:"')'"}),k=e.createToken({name:"LSquare",pattern:/\[/,label:"'['"}),S=e.createToken({name:"RSquare",pattern:/\]/,label:"']'"}),O=e.createToken({name:"Comma",pattern:/,/,label:"','"}),T=e.createToken({name:"Colon",pattern:/:/,label:"':'"}),B=e.createToken({name:"Equals",pattern:/=/,label:"'='"}),N=e.createToken({name:"StringLiteral",pattern:/"(:?[^\\"\n\r]|\\(:?[bfnrtv"\\/]|u[0-9a-fA-F]{4}))*"/}),C=e.createToken({name:"NumberLiteral",pattern:/-?(0|[1-9]\d*)(\.\d+)?([eE][+-]?\d+)?/}),w=e.createToken({name:"WhiteSpace",pattern:/\s+/,group:e.Lexer.SKIPPED}),M=e.createToken({name:"LineBreak",pattern:/\n|\r\n/,line_breaks:!0,label:"LineBreak"}),j=[p,f,L,M,w],R={modes:{global:[].concat(j,[a,i,u,o,s]),block:[].concat(j,[d,v,y,E,h,b,g,k,S,A,U,O,T,B,c,m,l,N,C,r])},defaultMode:"global"},_=new e.Lexer(R);function x(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,P(e,t)}function P(e,t){return P=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},P(e,t)}var I,V={parser:{nodeLocationTracking:"none"}};function D(){if(null!=I)return I;var e=t.lilconfigSync("prisma-ast").search();return I=Object.assign(V,null==e?void 0:e.config)}var F=new(function(e){function t(){var t;return(t=e.call(this,R,D().parser)||this).break=t.RULE("break",(function(){t.CONSUME1(M),t.CONSUME2(M)})),t.keyedArg=t.RULE("keyedArg",(function(){t.CONSUME(r,{LABEL:"keyName"}),t.CONSUME(T),t.SUBRULE(t.value)})),t.array=t.RULE("array",(function(){t.CONSUME(k),t.MANY_SEP({SEP:O,DEF:function(){t.SUBRULE(t.value)}}),t.CONSUME(S)})),t.func=t.RULE("func",(function(){t.CONSUME(r,{LABEL:"funcName"}),t.CONSUME(A),t.MANY_SEP({SEP:O,DEF:function(){t.OR([{ALT:function(){return t.SUBRULE(t.keyedArg)}},{ALT:function(){return t.SUBRULE(t.value)}}])}}),t.CONSUME(U)})),t.value=t.RULE("value",(function(){t.OR([{ALT:function(){return t.CONSUME(N,{LABEL:"value"})}},{ALT:function(){return t.CONSUME(C,{LABEL:"value"})}},{ALT:function(){return t.SUBRULE(t.array,{LABEL:"value"})}},{ALT:function(){return t.SUBRULE(t.func,{LABEL:"value"})}},{ALT:function(){return t.CONSUME(c,{LABEL:"value"})}},{ALT:function(){return t.CONSUME(m,{LABEL:"value"})}},{ALT:function(){return t.CONSUME(l,{LABEL:"value"})}},{ALT:function(){return t.CONSUME(r,{LABEL:"value"})}}])})),t.property=t.RULE("property",(function(){t.CONSUME(r,{LABEL:"propertyName"}),t.CONSUME(B),t.SUBRULE(t.value,{LABEL:"propertyValue"})})),t.assignment=t.RULE("assignment",(function(){t.CONSUME(r,{LABEL:"assignmentName"}),t.CONSUME(B),t.SUBRULE(t.value,{LABEL:"assignmentValue"})})),t.field=t.RULE("field",(function(){t.CONSUME(r,{LABEL:"fieldName"}),t.SUBRULE(t.value,{LABEL:"fieldType"}),t.OPTION1((function(){t.OR([{ALT:function(){t.CONSUME(k,{LABEL:"array"}),t.CONSUME(S,{LABEL:"array"})}},{ALT:function(){return t.CONSUME(h,{LABEL:"optional"})}}])})),t.MANY((function(){t.SUBRULE(t.attribute,{LABEL:"attributeList"})})),t.OPTION2((function(){t.CONSUME(p,{LABEL:"comment"})}))})),t.block=t.RULE("block",(function(e){void 0===e&&(e={});var n=e.componentType,r="enum"===n,a="model"===n||"view"===n;t.CONSUME(b),t.CONSUME1(M),t.MANY((function(){t.OR([{ALT:function(){return t.SUBRULE(t.comment,{LABEL:"list"})}},{GATE:function(){return a},ALT:function(){return t.SUBRULE(t.property,{LABEL:"list"})}},{ALT:function(){return t.SUBRULE(t.attribute,{LABEL:"list"})}},{GATE:function(){return a},ALT:function(){return t.SUBRULE(t.field,{LABEL:"list"})}},{GATE:function(){return r},ALT:function(){return t.SUBRULE(t.enum,{LABEL:"list"})}},{GATE:function(){return!a},ALT:function(){return t.SUBRULE(t.assignment,{LABEL:"list"})}},{ALT:function(){return t.SUBRULE(t.break,{LABEL:"list"})}},{ALT:function(){return t.CONSUME2(M)}}])})),t.CONSUME(g)})),t.enum=t.RULE("enum",(function(){t.CONSUME(r,{LABEL:"enumName"}),t.OPTION((function(){t.CONSUME(p,{LABEL:"comment"})}))})),t.attribute=t.RULE("attribute",(function(){t.OR1([{ALT:function(){return t.CONSUME(v,{LABEL:"blockAttribute"})}},{ALT:function(){return t.CONSUME(y,{LABEL:"fieldAttribute"})}}]),t.OR2([{ALT:function(){t.CONSUME1(r,{LABEL:"groupName"}),t.CONSUME(E),t.CONSUME2(r,{LABEL:"attributeName"})}},{ALT:function(){return t.CONSUME(r,{LABEL:"attributeName"})}}]),t.OPTION((function(){t.CONSUME(A),t.MANY_SEP({SEP:O,DEF:function(){t.SUBRULE(t.attributeArg)}}),t.CONSUME(U)}))})),t.attributeArg=t.RULE("attributeArg",(function(){t.OR([{ALT:function(){return t.SUBRULE(t.keyedArg,{LABEL:"value"})}},{ALT:function(){return t.SUBRULE(t.value,{LABEL:"value"})}}])})),t.component=t.RULE("component",(function(){var e=t.OR1([{ALT:function(){return t.CONSUME(a,{LABEL:"type"})}},{ALT:function(){return t.CONSUME(i,{LABEL:"type"})}},{ALT:function(){return t.CONSUME(u,{LABEL:"type"})}},{ALT:function(){return t.CONSUME(o,{LABEL:"type"})}},{ALT:function(){return t.CONSUME(s,{LABEL:"type"})}}]);t.OR2([{ALT:function(){t.CONSUME1(r,{LABEL:"groupName"}),t.CONSUME(E),t.CONSUME2(r,{LABEL:"componentName"})}},{ALT:function(){return t.CONSUME(r,{LABEL:"componentName"})}}]),t.SUBRULE(t.block,{ARGS:[{componentType:e.image}]})})),t.comment=t.RULE("comment",(function(){t.CONSUME(p,{LABEL:"text"})})),t.schema=t.RULE("schema",(function(){t.MANY((function(){t.OR([{ALT:function(){return t.SUBRULE(t.comment,{LABEL:"list"})}},{ALT:function(){return t.SUBRULE(t.component,{LABEL:"list"})}},{ALT:function(){return t.SUBRULE(t.break,{LABEL:"list"})}},{ALT:function(){return t.CONSUME(M)}}])}))})),t.performSelfAnalysis(),t}return x(t,e),t}(e.CstParser)),q=["model","view"];function G(e){return null!=e&&"type"in e&&q.includes(e.type)}function Y(e){return null!=e&&"type"in e&&"field"===e.type}function z(e){if("none"===D().parser.nodeLocationTracking)return e;for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var a=n.reduce((function(e,t){if(!t)return e;var n=e.endColumn,r=void 0===n?-Infinity:n,a=e.endLine,i=void 0===a?-Infinity:a,u=e.endOffset,o=void 0===u?-Infinity:u,s=e.startColumn,c=void 0===s?Infinity:s,m=e.startLine,l=e.startOffset,p=void 0===l?Infinity:l;return null!=t.startLine&&t.startLine<(void 0===m?Infinity:m)&&(e.startLine=t.startLine),null!=t.startColumn&&t.startColumn<c&&(e.startColumn=t.startColumn),null!=t.startOffset&&t.startOffset<p&&(e.startOffset=t.startOffset),null!=t.endLine&&t.endLine>i&&(e.endLine=t.endLine),null!=t.endColumn&&t.endColumn>r&&(e.endColumn=t.endColumn),null!=t.endOffset&&t.endOffset>o&&(e.endOffset=t.endOffset),e}),{});return Object.assign(e,{location:a})}var W=function(e){function t(){var t;return(t=e.call(this)||this).validateVisitor(),t}x(t,e);var n=t.prototype;return n.schema=function(e){var t,n=this;return{type:"schema",list:(null==(t=e.list)?void 0:t.map((function(e){return n.visit([e])})))||[]}},n.component=function(e){var t=e.type[0],n=e.componentName[0],r=this.visit(e.block);return z(function(){switch(t.image){case"datasource":return{type:"datasource",name:n.image,assignments:r};case"generator":return{type:"generator",name:n.image,assignments:r};case"model":return{type:"model",name:n.image,properties:r};case"view":return{type:"view",name:n.image,properties:r};case"enum":return{type:"enum",name:n.image,enumerators:r};default:throw new Error("Unexpected block type: "+t)}}(),t,n)},n.break=function(){return{type:"break"}},n.comment=function(e){var t=e.text[0];return z({type:"comment",text:t.image},t)},n.block=function(e){var t,n=this;return null==(t=e.list)?void 0:t.map((function(e){return n.visit([e])}))},n.assignment=function(e){var t=this.visit(e.assignmentValue),n=e.assignmentName[0];return z({type:"assignment",key:n.image,value:t},n)},n.field=function(e){var t,n,r,a=this,i=this.visit(e.fieldType),u=e.fieldName[0],o=e.attributeList&&e.attributeList.map((function(e){return a.visit([e])})),s=null==(t=e.comment)||null==(t=t[0])?void 0:t.image;return z({type:"field",name:u.image,fieldType:i,array:null!=e.array,optional:null!=e.optional,attributes:o,comment:s},u,null==(n=e.optional)?void 0:n[0],null==(r=e.array)?void 0:r[0])},n.attribute=function(e){var t=this,n=e.attributeName[0],r=(e.groupName||[{}])[0],a=e.attributeArg&&e.attributeArg.map((function(e){return t.visit(e)})),i=null!=e.blockAttribute?"object":"field";return z.apply(void 0,[{type:"attribute",name:n.image,kind:i,group:r.image,args:a},n].concat("object"===i?e.blockAttribute:e.fieldAttribute,[r]))},n.attributeArg=function(e){return{type:"attributeArgument",value:this.visit(e.value)}},n.func=function(e){var t=this,n=e.funcName[0],r=e.value&&e.value.map((function(e){return t.visit([e])})),a=e.keyedArg&&e.keyedArg.map((function(e){return t.visit([e])})),i=(r||a)&&[].concat(null!=r?r:[],null!=a?a:[]);return z({type:"function",name:n.image,params:i},n)},n.array=function(e){var t=this;return{type:"array",args:e.value&&e.value.map((function(e){return t.visit([e])}))}},n.keyedArg=function(e){var t=e.keyName[0],n=this.visit(e.value);return z({type:"keyValue",key:t.image,value:n},t)},n.value=function(e){return"image"in e.value[0]?e.value[0].image:this.visit(e.value)},n.enum=function(e){var t,n=e.enumName[0],r=null==(t=e.comment)||null==(t=t[0])?void 0:t.image;return z({type:"enumerator",name:n.image,comment:r},n)},t}(F.getBaseCstVisitorConstructorWithDefaults());function K(e){var t=_.tokenize(e);F.input=t.tokens;var n=F.schema();if(F.errors.length>0)throw F.errors[0];return(new W).visit(n)}var Q=["break","comment"],Z=["generator","datasource","model","view","enum","break","comment"];function H(e,t){void 0===t&&(t={});var r=t.sort,a=t.locales,i=void 0===a?void 0:a,u=t.sortOrder,o=void 0===u?void 0:u,s=e.list;if(void 0!==r&&r){s=e.list=s.filter((function(e){return"break"!==e.type}));var c=function(e,t,n){return void 0===n&&(n=Z),function(r,a){if(-1!==Q.indexOf(r.type)!=(-1!==Q.indexOf(a.type)))return e.list.indexOf(r)-e.list.indexOf(a);n!==Z&&(n=n.concat(Z));var i=n.indexOf(r.type)-n.indexOf(a.type);return 0!==i?i:"name"in r&&"name"in a?r.name.localeCompare(a.name,t):0}}(e,i,o);s.sort(c)}return s.map(J).filter(Boolean).join(n.EOL).replace(/(\r?\n\s*){3,}/g,n.EOL+n.EOL)+n.EOL}function J(e){switch(e.type){case"comment":return X(e);case"datasource":return r=ue((t=e).assignments),"\ndatasource "+t.name+" {\n "+r+"\n}";case"enum":return function(e){var t=e.enumerators.map(ee).filter(Boolean).join(n.EOL+" ").replace(/(\r?\n\s*){3,}/g,n.EOL+n.EOL+" ");return"\nenum "+e.name+" {\n "+t+"\n}"}(e);case"generator":return function(e){var t=ue(e.assignments);return"\ngenerator "+e.name+" {\n "+t+"\n}"}(e);case"model":case"view":return function(e){var t,r,a,i,u,o=(r=0,a=(t=e.properties).reduce((function(e,t,n,a){return"break"===t.type||(n>0&&"break"===a[n-1].type&&(e[++r]=[]),e[r].push(t)),e}),[[]]),i=a.map((function(e){return e.reduce((function(e,t){return Math.max(e,"field"===t.type?t.name.length:0)}),0)})),u=a.map((function(e){return e.reduce((function(e,t){return Math.max(e,"field"===t.type?re(t).length:0)}),0)})),t.map((function(e,t,n){return t>0&&"break"!==e.type&&"break"===n[t-1].type&&(i.shift(),u.shift()),function(e,t,n){switch(void 0===t&&(t=0),void 0===n&&(n=0),e.type){case"attribute":return te(e);case"field":return function(e,t,n){void 0===t&&(t=0),void 0===n&&(n=0);var r=e.name.padEnd(t),a=re(e).padEnd(n),i=e.attributes?e.attributes.map(te):[],u=e.comment;return[r,a].concat(i).filter(Boolean).join(" ").trim()+(u?" "+u:"")}(e,t,n);case"comment":return X(e);case"break":return $();default:throw new Error("Unrecognized property type")}}(e,i[0],u[0])})).filter(Boolean).join(n.EOL+" ").replace(/(\r?\n\s*){3,}/g,n.EOL+n.EOL+" "));return"\n"+e.type+" "+e.name+" {\n "+o+"\n}"}(e);case"break":return $();default:throw new Error("Unrecognized block type")}var t,r}function X(e){return e.text}function $(){return n.EOL}function ee(e){switch(e.type){case"enumerator":return[e.name,e.comment].filter(Boolean).join(" ");case"attribute":return te(e);case"comment":return X(e);case"break":return $();default:throw new Error("Unexpected enumerator type")}}function te(e){var t=e.args&&e.args.length>0?"("+e.args.map(ne).filter(Boolean).join(", ")+")":"",n=[e.name];return e.group&&n.unshift(e.group),("field"===e.kind?"@":"@@")+n.join(".")+t}function ne(e){return ie(e.value)}function re(e){var t=e.array?"[]":e.optional?"?":"";if("object"==typeof e.fieldType){if("function"===e.fieldType.type)return""+ae(e.fieldType)+t;throw new Error("Unexpected field type")}return""+e.fieldType+t}function ae(e){var t=e.params?e.params.map(ie):"";return e.name+"("+t+")"}function ie(e){if("object"==typeof e){if("type"in e)switch(e.type){case"keyValue":return e.key+": "+ie(e.value);case"function":return ae(e);case"array":return"["+(null!=e.args?e.args.map(ie).join(", "):"")+"]";default:throw new Error("Unexpected value type")}throw new Error("Unexpected object value")}return String(e)}function ue(e){var t=0,r=e.reduce((function(e,n,r,a){return"break"===n.type||(r>0&&"break"===a[r-1].type&&(e[++t]=[]),e[t].push(n)),e}),[[]]).map((function(e){return e.reduce((function(e,t){return Math.max(e,"assignment"===t.type?t.key.length:0)}),0)}));return e.map((function(e,t,n){return t>0&&"break"!==e.type&&"break"===n[t-1].type&&r.shift(),function(e,t){switch(void 0===t&&(t=0),e.type){case"comment":return X(e);case"break":return $();case"assignment":return e.key.padEnd(t)+" = "+ie(e.value);default:throw new Error("Unexpected assignment type")}}(e,r[0])})).filter(Boolean).join(n.EOL+" ").replace(/(\r?\n\s*){3,}/g,n.EOL+n.EOL+" ")}var oe=function(){function e(e){void 0===e&&(e=""),this.schema=void 0,this._subject=void 0,this._parent=void 0,this.schema=K(e)}var t=e.prototype;return t.print=function(e){return void 0===e&&(e={}),H(this.schema,e)},t.getSchema=function(){return this.schema},t.generator=function(e,t){void 0===t&&(t="prisma-client-js");var n=this.schema.list.reduce((function(t,n){return"generator"===n.type&&n.name===e?n:t}),{type:"generator",name:e,assignments:[{type:"assignment",key:"provider",value:'"'+t+'"'}]});return this.schema.list.includes(n)||this.schema.list.push(n),this._subject=n,this},t.drop=function(e){var t=this.schema.list.findIndex((function(t){return"name"in t&&t.name===e}));return-1!==t&&this.schema.list.splice(t,1),this},t.datasource=function(e,t){var n={type:"datasource",name:"db",assignments:[{type:"assignment",key:"url",value:"string"==typeof t?'"'+t+'"':{type:"function",name:"env",params:['"'+t.env+'"']}},{type:"assignment",key:"provider",value:e}]},r=this.schema.list.findIndex((function(e){return"datasource"===e.type}));return this.schema.list.splice(r,-1!==r?1:0,n),this._subject=n,this},t.model=function(e){var t=this.schema.list.reduce((function(t,n){return"model"===n.type&&n.name===e?n:t}),{type:"model",name:e,properties:[]});return this.schema.list.includes(t)||this.schema.list.push(t),this._subject=t,this},t.view=function(e){var t=this.schema.list.reduce((function(t,n){return"view"===n.type&&n.name===e?n:t}),{type:"view",name:e,properties:[]});return this.schema.list.includes(t)||this.schema.list.push(t),this._subject=t,this},t.enum=function(e,t){void 0===t&&(t=[]);var n=this.schema.list.reduce((function(t,n){return"enum"===n.type&&n.name===e?n:t}),{type:"enum",name:e,enumerators:t.map((function(e){return{type:"enumerator",name:e}}))});return this.schema.list.includes(n)||this.schema.list.push(n),this._subject=n,this},t.enumerator=function(e){var t=this.getSubject();if(!t||!("type"in t)||"enum"!==t.type)throw new Error("Subject must be a prisma enum!");return t.enumerators.push({type:"enumerator",name:e}),this},t.getSubject=function(){return this._subject},t.getParent=function(){return this._parent},t.blockAttribute=function(e,t){var n=this.getSubject();if(!G(n)){var r=this.getParent();if(!G(r))throw new Error("Subject must be a prisma model or view!");n=this._subject=r}var a=t?"string"==typeof t?[{type:"attributeArgument",value:'"'+t+'"'}]:Array.isArray(t)?[{type:"attributeArgument",value:{type:"array",args:t}}]:Object.entries(t).map((function(e){return{type:"attributeArgument",value:{type:"keyValue",key:e[0],value:e[1]}}})):[];return n.properties.push({type:"attribute",kind:"object",name:e,args:a}),this},t.attribute=function(e,t){var n=this.getParent(),r=this.getSubject();if(!G(n))throw new Error("Parent must be a prisma model or view!");if(!Y(r))throw new Error("Subject must be a prisma field!");r.attributes||(r.attributes=[]);var a=r.attributes.reduce((function(t,n){return"attribute"===n.type&&(n.group?n.group+".":"")+n.name===e?n:t}),{type:"attribute",kind:"field",name:e});if(Array.isArray(t)){var i=function e(t){var n,r;return"string"==typeof t?t:{type:"function",name:t.name,params:null!=(n=null==(r=t.function)?void 0:r.map(e))?n:[]}};t.length>0&&(a.args=t.map((function(e){return{type:"attributeArgument",value:i(e)}})))}else"object"==typeof t&&(a.args=Object.entries(t).map((function(e){return{type:"attributeArgument",value:{type:"keyValue",key:e[0],value:{type:"array",args:e[1]}}}})));return r.attributes.includes(a)||r.attributes.push(a),this},t.removeAttribute=function(e){var t=this.getParent(),n=this.getSubject();if(!G(t))throw new Error("Parent must be a prisma model or view!");if(!Y(n))throw new Error("Subject must be a prisma field!");return n.attributes||(n.attributes=[]),n.attributes=n.attributes.filter((function(t){return!("attribute"===t.type&&t.name===e)})),this},t.assignment=function(e,t){var n=this.getSubject();if(!n||!("type"in n)||!["generator","datasource"].includes(n.type))throw new Error("Subject must be a prisma generator or datasource!");var r=n.assignments.reduce((function(n,r){return"assignment"===r.type&&r.key===e?function(e,n){return e.value='"'+t+'"',e}(r):n}),{type:"assignment",key:e,value:'"'+t+'"'});return n.assignments.includes(r)||n.assignments.push(r),this},t.blockInsert=function(e){var t=this.getSubject(),n=["datasource","enum","generator","model","view"];if(!t||!("type"in t)||!n.includes(t.type)){var r=this.getParent();if(!r||!("type"in r)||!n.includes(r.type))throw new Error("Subject must be a prisma block!");t=this._subject=r}switch(t.type){case"datasource":case"generator":t.assignments.push(e);break;case"enum":t.enumerators.push(e);break;case"model":t.properties.push(e)}return this},t.break=function(){return this.blockInsert({type:"break"})},t.comment=function(e,t){return void 0===t&&(t=!1),this.blockInsert({type:"comment",text:"//"+(t?"/":"")+" "+e})},t.schemaComment=function(e,t){return void 0===t&&(t=!1),this.schema.list.push({type:"comment",text:"//"+(t?"/":"")+" "+e}),this},t.field=function(e,t){void 0===t&&(t="String");var n=this.getSubject();if(!G(n)){var r=this.getParent();if(!G(r))throw new Error("Subject must be a prisma model or view!");n=this._subject=r}var a=n.properties.reduce((function(t,n){return"field"===n.type&&n.name===e?n:t}),{type:"field",name:e,fieldType:t});return n.properties.includes(a)||n.properties.push(a),this._parent=n,this._subject=a,this},t.removeField=function(e){var t=this.getSubject();if(!G(t)){var n=this.getParent();if(!G(n))throw new Error("Subject must be a prisma model or view!");t=this._subject=n}return t.properties=t.properties.filter((function(t){return!("field"===t.type&&t.name===e)})),this},t.then=function(e){return e(this._subject),this},e}();exports.ConcretePrismaSchemaBuilder=oe,exports.createPrismaSchemaBuilder=function(e){return new oe(e)},exports.getSchema=K,exports.printSchema=H;
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("chevrotain"),t=require("lilconfig"),n=require("os"),r=e.createToken({name:"Identifier",pattern:/[a-zA-Z]\w*/}),a=e.createToken({name:"Datasource",pattern:/datasource/,push_mode:"block"}),i=e.createToken({name:"Generator",pattern:/generator/,push_mode:"block"}),u=e.createToken({name:"Model",pattern:/model/,push_mode:"block"}),o=e.createToken({name:"View",pattern:/view/,push_mode:"block"}),s=e.createToken({name:"Enum",pattern:/enum/,push_mode:"block"}),c=e.createToken({name:"True",pattern:/true/,longer_alt:r}),m=e.createToken({name:"False",pattern:/false/,longer_alt:r}),l=e.createToken({name:"Null",pattern:/null/,longer_alt:r}),p=e.createToken({name:"Comment",pattern:e.Lexer.NA}),f=e.createToken({name:"DocComment",pattern:/\/\/\/\s*(.+)/,categories:[p]}),L=e.createToken({name:"LineComment",pattern:/\/\/\s*(.+)/,categories:[p]}),d=e.createToken({name:"Attribute",pattern:e.Lexer.NA}),y=e.createToken({name:"BlockAttribute",pattern:/@@/,label:"'@@'",categories:[d]}),v=e.createToken({name:"FieldAttribute",pattern:/@/,label:"'@'",categories:[d]}),h=e.createToken({name:"Dot",pattern:/\./,label:"'.'"}),E=e.createToken({name:"QuestionMark",pattern:/\?/,label:"'?'"}),b=e.createToken({name:"LCurly",pattern:/{/,label:"'{'"}),g=e.createToken({name:"RCurly",pattern:/}/,label:"'}'",pop_mode:!0}),A=e.createToken({name:"LRound",pattern:/\(/,label:"'('"}),U=e.createToken({name:"RRound",pattern:/\)/,label:"')'"}),k=e.createToken({name:"LSquare",pattern:/\[/,label:"'['"}),S=e.createToken({name:"RSquare",pattern:/\]/,label:"']'"}),O=e.createToken({name:"Comma",pattern:/,/,label:"','"}),T=e.createToken({name:"Colon",pattern:/:/,label:"':'"}),B=e.createToken({name:"Equals",pattern:/=/,label:"'='"}),N=e.createToken({name:"StringLiteral",pattern:/"(:?[^\\"\n\r]|\\(:?[bfnrtv"\\/]|u[0-9a-fA-F]{4}))*"/}),C=e.createToken({name:"NumberLiteral",pattern:/-?(0|[1-9]\d*)(\.\d+)?([eE][+-]?\d+)?/}),w=e.createToken({name:"WhiteSpace",pattern:/\s+/,group:e.Lexer.SKIPPED}),M=e.createToken({name:"LineBreak",pattern:/\n|\r\n/,line_breaks:!0,label:"LineBreak"}),j=[p,f,L,M,w],R={modes:{global:[].concat(j,[a,i,u,o,s]),block:[].concat(j,[d,y,v,h,E,b,g,k,S,A,U,O,T,B,c,m,l,N,C,r])},defaultMode:"global"},_=new e.Lexer(R);function x(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,P(e,t)}function P(e,t){return P=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},P(e,t)}var D=["model","view"];function I(e){return null!=e&&"type"in e&&D.includes(e.type)}function V(e){return null!=e&&"type"in e&&"field"===e.type}function F(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var a=n.reduce((function(e,t){if(!t)return e;var n=e.endColumn,r=void 0===n?-Infinity:n,a=e.endLine,i=void 0===a?-Infinity:a,u=e.endOffset,o=void 0===u?-Infinity:u,s=e.startColumn,c=void 0===s?Infinity:s,m=e.startLine,l=e.startOffset,p=void 0===l?Infinity:l;return null!=t.startLine&&t.startLine<(void 0===m?Infinity:m)&&(e.startLine=t.startLine),null!=t.startColumn&&t.startColumn<c&&(e.startColumn=t.startColumn),null!=t.startOffset&&t.startOffset<p&&(e.startOffset=t.startOffset),null!=t.endLine&&t.endLine>i&&(e.endLine=t.endLine),null!=t.endColumn&&t.endColumn>r&&(e.endColumn=t.endColumn),null!=t.endOffset&&t.endOffset>o&&(e.endOffset=t.endOffset),e}),{});return Object.assign(e,{location:a})}var q,G={parser:{nodeLocationTracking:"none"}},Y=function(e){function t(t){var n;return(n=e.call(this,R,t)||this).config=void 0,n.break=n.RULE("break",(function(){n.CONSUME1(M),n.CONSUME2(M)})),n.keyedArg=n.RULE("keyedArg",(function(){n.CONSUME(r,{LABEL:"keyName"}),n.CONSUME(T),n.SUBRULE(n.value)})),n.array=n.RULE("array",(function(){n.CONSUME(k),n.MANY_SEP({SEP:O,DEF:function(){n.SUBRULE(n.value)}}),n.CONSUME(S)})),n.func=n.RULE("func",(function(){n.CONSUME(r,{LABEL:"funcName"}),n.CONSUME(A),n.MANY_SEP({SEP:O,DEF:function(){n.OR([{ALT:function(){return n.SUBRULE(n.keyedArg)}},{ALT:function(){return n.SUBRULE(n.value)}}])}}),n.CONSUME(U)})),n.value=n.RULE("value",(function(){n.OR([{ALT:function(){return n.CONSUME(N,{LABEL:"value"})}},{ALT:function(){return n.CONSUME(C,{LABEL:"value"})}},{ALT:function(){return n.SUBRULE(n.array,{LABEL:"value"})}},{ALT:function(){return n.SUBRULE(n.func,{LABEL:"value"})}},{ALT:function(){return n.CONSUME(c,{LABEL:"value"})}},{ALT:function(){return n.CONSUME(m,{LABEL:"value"})}},{ALT:function(){return n.CONSUME(l,{LABEL:"value"})}},{ALT:function(){return n.CONSUME(r,{LABEL:"value"})}}])})),n.property=n.RULE("property",(function(){n.CONSUME(r,{LABEL:"propertyName"}),n.CONSUME(B),n.SUBRULE(n.value,{LABEL:"propertyValue"})})),n.assignment=n.RULE("assignment",(function(){n.CONSUME(r,{LABEL:"assignmentName"}),n.CONSUME(B),n.SUBRULE(n.value,{LABEL:"assignmentValue"})})),n.field=n.RULE("field",(function(){n.CONSUME(r,{LABEL:"fieldName"}),n.SUBRULE(n.value,{LABEL:"fieldType"}),n.OPTION1((function(){n.OR([{ALT:function(){n.CONSUME(k,{LABEL:"array"}),n.CONSUME(S,{LABEL:"array"})}},{ALT:function(){return n.CONSUME(E,{LABEL:"optional"})}}])})),n.MANY((function(){n.SUBRULE(n.attribute,{LABEL:"attributeList"})})),n.OPTION2((function(){n.CONSUME(p,{LABEL:"comment"})}))})),n.block=n.RULE("block",(function(e){void 0===e&&(e={});var t=e.componentType,r="enum"===t,a="model"===t||"view"===t;n.CONSUME(b),n.CONSUME1(M),n.MANY((function(){n.OR([{ALT:function(){return n.SUBRULE(n.comment,{LABEL:"list"})}},{GATE:function(){return a},ALT:function(){return n.SUBRULE(n.property,{LABEL:"list"})}},{ALT:function(){return n.SUBRULE(n.attribute,{LABEL:"list"})}},{GATE:function(){return a},ALT:function(){return n.SUBRULE(n.field,{LABEL:"list"})}},{GATE:function(){return r},ALT:function(){return n.SUBRULE(n.enum,{LABEL:"list"})}},{GATE:function(){return!a},ALT:function(){return n.SUBRULE(n.assignment,{LABEL:"list"})}},{ALT:function(){return n.SUBRULE(n.break,{LABEL:"list"})}},{ALT:function(){return n.CONSUME2(M)}}])})),n.CONSUME(g)})),n.enum=n.RULE("enum",(function(){n.CONSUME(r,{LABEL:"enumName"}),n.OPTION((function(){n.CONSUME(p,{LABEL:"comment"})}))})),n.attribute=n.RULE("attribute",(function(){n.OR1([{ALT:function(){return n.CONSUME(y,{LABEL:"blockAttribute"})}},{ALT:function(){return n.CONSUME(v,{LABEL:"fieldAttribute"})}}]),n.OR2([{ALT:function(){n.CONSUME1(r,{LABEL:"groupName"}),n.CONSUME(h),n.CONSUME2(r,{LABEL:"attributeName"})}},{ALT:function(){return n.CONSUME(r,{LABEL:"attributeName"})}}]),n.OPTION((function(){n.CONSUME(A),n.MANY_SEP({SEP:O,DEF:function(){n.SUBRULE(n.attributeArg)}}),n.CONSUME(U)}))})),n.attributeArg=n.RULE("attributeArg",(function(){n.OR([{ALT:function(){return n.SUBRULE(n.keyedArg,{LABEL:"value"})}},{ALT:function(){return n.SUBRULE(n.value,{LABEL:"value"})}}])})),n.component=n.RULE("component",(function(){var e=n.OR1([{ALT:function(){return n.CONSUME(a,{LABEL:"type"})}},{ALT:function(){return n.CONSUME(i,{LABEL:"type"})}},{ALT:function(){return n.CONSUME(u,{LABEL:"type"})}},{ALT:function(){return n.CONSUME(o,{LABEL:"type"})}},{ALT:function(){return n.CONSUME(s,{LABEL:"type"})}}]);n.OR2([{ALT:function(){n.CONSUME1(r,{LABEL:"groupName"}),n.CONSUME(h),n.CONSUME2(r,{LABEL:"componentName"})}},{ALT:function(){return n.CONSUME(r,{LABEL:"componentName"})}}]),n.SUBRULE(n.block,{ARGS:[{componentType:e.image}]})})),n.comment=n.RULE("comment",(function(){n.CONSUME(p,{LABEL:"text"})})),n.schema=n.RULE("schema",(function(){n.MANY((function(){n.OR([{ALT:function(){return n.SUBRULE(n.comment,{LABEL:"list"})}},{ALT:function(){return n.SUBRULE(n.component,{LABEL:"list"})}},{ALT:function(){return n.SUBRULE(n.break,{LABEL:"list"})}},{ALT:function(){return n.CONSUME(M)}}])}))})),n.performSelfAnalysis(),n.config=t,n}return x(t,e),t}(e.CstParser),z=new Y(function(){if(null!=q)return q;var e=t.lilconfigSync("prisma-ast").search();return q=Object.assign(G,null==e?void 0:e.config)}().parser),W=function(e){return function(t){function n(){var e;return(e=t.call(this)||this).validateVisitor(),e}x(n,t);var r=n.prototype;return r.schema=function(e){var t,n=this;return{type:"schema",list:(null==(t=e.list)?void 0:t.map((function(e){return n.visit([e])})))||[]}},r.component=function(e){var t=e.type[0],n=e.componentName[0],r=this.visit(e.block),a=function(){switch(t.image){case"datasource":return{type:"datasource",name:n.image,assignments:r};case"generator":return{type:"generator",name:n.image,assignments:r};case"model":return{type:"model",name:n.image,properties:r};case"view":return{type:"view",name:n.image,properties:r};case"enum":return{type:"enum",name:n.image,enumerators:r};default:throw new Error("Unexpected block type: "+t)}}();return this.maybeAppendLocationData(a,t,n)},r.break=function(){return{type:"break"}},r.comment=function(e){var t=e.text[0];return this.maybeAppendLocationData({type:"comment",text:t.image},t)},r.block=function(e){var t,n=this;return null==(t=e.list)?void 0:t.map((function(e){return n.visit([e])}))},r.assignment=function(e){var t=this.visit(e.assignmentValue),n=e.assignmentName[0];return this.maybeAppendLocationData({type:"assignment",key:n.image,value:t},n)},r.field=function(e){var t,n,r,a=this,i=this.visit(e.fieldType),u=e.fieldName[0],o=e.attributeList&&e.attributeList.map((function(e){return a.visit([e])})),s=null==(t=e.comment)||null==(t=t[0])?void 0:t.image;return this.maybeAppendLocationData({type:"field",name:u.image,fieldType:i,array:null!=e.array,optional:null!=e.optional,attributes:o,comment:s},u,null==(n=e.optional)?void 0:n[0],null==(r=e.array)?void 0:r[0])},r.attribute=function(e){var t=this,n=e.attributeName[0],r=(e.groupName||[{}])[0],a=e.attributeArg&&e.attributeArg.map((function(e){return t.visit(e)})),i=null!=e.blockAttribute?"object":"field";return this.maybeAppendLocationData.apply(this,[{type:"attribute",name:n.image,kind:i,group:r.image,args:a},n].concat("object"===i?e.blockAttribute:e.fieldAttribute,[r]))},r.attributeArg=function(e){return{type:"attributeArgument",value:this.visit(e.value)}},r.func=function(e){var t=this,n=e.funcName[0],r=e.value&&e.value.map((function(e){return t.visit([e])})),a=e.keyedArg&&e.keyedArg.map((function(e){return t.visit([e])})),i=(r||a)&&[].concat(null!=r?r:[],null!=a?a:[]);return this.maybeAppendLocationData({type:"function",name:n.image,params:i},n)},r.array=function(e){var t=this;return{type:"array",args:e.value&&e.value.map((function(e){return t.visit([e])}))}},r.keyedArg=function(e){var t=e.keyName[0],n=this.visit(e.value);return this.maybeAppendLocationData({type:"keyValue",key:t.image,value:n},t)},r.value=function(e){return"image"in e.value[0]?e.value[0].image:this.visit(e.value)},r.enum=function(e){var t,n=e.enumName[0],r=null==(t=e.comment)||null==(t=t[0])?void 0:t.image;return this.maybeAppendLocationData({type:"enumerator",name:n.image,comment:r},n)},r.maybeAppendLocationData=function(t){if("none"===e.config.nodeLocationTracking)return t;for(var n=arguments.length,r=new Array(n>1?n-1:0),a=1;a<n;a++)r[a-1]=arguments[a];return F.apply(void 0,[t].concat(r))},n}(e.getBaseCstVisitorConstructorWithDefaults())},K=new(W(z));function Q(e,t){var n,r,a=_.tokenize(e),i=null!=(n=null==t?void 0:t.parser)?n:z;i.input=a.tokens;var u=i.schema();if(i.errors.length>0)throw i.errors[0];return(null!=(r=null==t?void 0:t.visitor)?r:K).visit(u)}var Z=["break","comment"],H=["generator","datasource","model","view","enum","break","comment"];function J(e,t){void 0===t&&(t={});var r=t.sort,a=t.locales,i=void 0===a?void 0:a,u=t.sortOrder,o=void 0===u?void 0:u,s=e.list;if(void 0!==r&&r){s=e.list=s.filter((function(e){return"break"!==e.type}));var c=function(e,t,n){return void 0===n&&(n=H),function(r,a){if(-1!==Z.indexOf(r.type)!=(-1!==Z.indexOf(a.type)))return e.list.indexOf(r)-e.list.indexOf(a);n!==H&&(n=n.concat(H));var i=n.indexOf(r.type)-n.indexOf(a.type);return 0!==i?i:"name"in r&&"name"in a?r.name.localeCompare(a.name,t):0}}(e,i,o);s.sort(c)}return s.map(X).filter(Boolean).join(n.EOL).replace(/(\r?\n\s*){3,}/g,n.EOL+n.EOL)+n.EOL}function X(e){switch(e.type){case"comment":return $(e);case"datasource":return r=oe((t=e).assignments),"\ndatasource "+t.name+" {\n "+r+"\n}";case"enum":return function(e){var t=e.enumerators.map(te).filter(Boolean).join(n.EOL+" ").replace(/(\r?\n\s*){3,}/g,n.EOL+n.EOL+" ");return"\nenum "+e.name+" {\n "+t+"\n}"}(e);case"generator":return function(e){var t=oe(e.assignments);return"\ngenerator "+e.name+" {\n "+t+"\n}"}(e);case"model":case"view":return function(e){var t,r,a,i,u,o=(r=0,a=(t=e.properties).reduce((function(e,t,n,a){return"break"===t.type||(n>0&&"break"===a[n-1].type&&(e[++r]=[]),e[r].push(t)),e}),[[]]),i=a.map((function(e){return e.reduce((function(e,t){return Math.max(e,"field"===t.type?t.name.length:0)}),0)})),u=a.map((function(e){return e.reduce((function(e,t){return Math.max(e,"field"===t.type?ae(t).length:0)}),0)})),t.map((function(e,t,n){return t>0&&"break"!==e.type&&"break"===n[t-1].type&&(i.shift(),u.shift()),function(e,t,n){switch(void 0===t&&(t=0),void 0===n&&(n=0),e.type){case"attribute":return ne(e);case"field":return function(e,t,n){void 0===t&&(t=0),void 0===n&&(n=0);var r=e.name.padEnd(t),a=ae(e).padEnd(n),i=e.attributes?e.attributes.map(ne):[],u=e.comment;return[r,a].concat(i).filter(Boolean).join(" ").trim()+(u?" "+u:"")}(e,t,n);case"comment":return $(e);case"break":return ee();default:throw new Error("Unrecognized property type")}}(e,i[0],u[0])})).filter(Boolean).join(n.EOL+" ").replace(/(\r?\n\s*){3,}/g,n.EOL+n.EOL+" "));return"\n"+e.type+" "+e.name+" {\n "+o+"\n}"}(e);case"break":return ee();default:throw new Error("Unrecognized block type")}var t,r}function $(e){return e.text}function ee(){return n.EOL}function te(e){switch(e.type){case"enumerator":return[e.name,e.comment].filter(Boolean).join(" ");case"attribute":return ne(e);case"comment":return $(e);case"break":return ee();default:throw new Error("Unexpected enumerator type")}}function ne(e){var t=e.args&&e.args.length>0?"("+e.args.map(re).filter(Boolean).join(", ")+")":"",n=[e.name];return e.group&&n.unshift(e.group),("field"===e.kind?"@":"@@")+n.join(".")+t}function re(e){return ue(e.value)}function ae(e){var t=e.array?"[]":e.optional?"?":"";if("object"==typeof e.fieldType){if("function"===e.fieldType.type)return""+ie(e.fieldType)+t;throw new Error("Unexpected field type")}return""+e.fieldType+t}function ie(e){var t=e.params?e.params.map(ue):"";return e.name+"("+t+")"}function ue(e){if("object"==typeof e){if("type"in e)switch(e.type){case"keyValue":return e.key+": "+ue(e.value);case"function":return ie(e);case"array":return"["+(null!=e.args?e.args.map(ue).join(", "):"")+"]";default:throw new Error("Unexpected value type")}throw new Error("Unexpected object value")}return String(e)}function oe(e){var t=0,r=e.reduce((function(e,n,r,a){return"break"===n.type||(r>0&&"break"===a[r-1].type&&(e[++t]=[]),e[t].push(n)),e}),[[]]).map((function(e){return e.reduce((function(e,t){return Math.max(e,"assignment"===t.type?t.key.length:0)}),0)}));return e.map((function(e,t,n){return t>0&&"break"!==e.type&&"break"===n[t-1].type&&r.shift(),function(e,t){switch(void 0===t&&(t=0),e.type){case"comment":return $(e);case"break":return ee();case"assignment":return e.key.padEnd(t)+" = "+ue(e.value);default:throw new Error("Unexpected assignment type")}}(e,r[0])})).filter(Boolean).join(n.EOL+" ").replace(/(\r?\n\s*){3,}/g,n.EOL+n.EOL+" ")}var se=function(){function e(e){void 0===e&&(e=""),this.schema=void 0,this._subject=void 0,this._parent=void 0,this.schema=Q(e)}var t=e.prototype;return t.print=function(e){return void 0===e&&(e={}),J(this.schema,e)},t.getSchema=function(){return this.schema},t.generator=function(e,t){void 0===t&&(t="prisma-client-js");var n=this.schema.list.reduce((function(t,n){return"generator"===n.type&&n.name===e?n:t}),{type:"generator",name:e,assignments:[{type:"assignment",key:"provider",value:'"'+t+'"'}]});return this.schema.list.includes(n)||this.schema.list.push(n),this._subject=n,this},t.drop=function(e){var t=this.schema.list.findIndex((function(t){return"name"in t&&t.name===e}));return-1!==t&&this.schema.list.splice(t,1),this},t.datasource=function(e,t){var n={type:"datasource",name:"db",assignments:[{type:"assignment",key:"url",value:"string"==typeof t?'"'+t+'"':{type:"function",name:"env",params:['"'+t.env+'"']}},{type:"assignment",key:"provider",value:e}]},r=this.schema.list.findIndex((function(e){return"datasource"===e.type}));return this.schema.list.splice(r,-1!==r?1:0,n),this._subject=n,this},t.model=function(e){var t=this.schema.list.reduce((function(t,n){return"model"===n.type&&n.name===e?n:t}),{type:"model",name:e,properties:[]});return this.schema.list.includes(t)||this.schema.list.push(t),this._subject=t,this},t.view=function(e){var t=this.schema.list.reduce((function(t,n){return"view"===n.type&&n.name===e?n:t}),{type:"view",name:e,properties:[]});return this.schema.list.includes(t)||this.schema.list.push(t),this._subject=t,this},t.enum=function(e,t){void 0===t&&(t=[]);var n=this.schema.list.reduce((function(t,n){return"enum"===n.type&&n.name===e?n:t}),{type:"enum",name:e,enumerators:t.map((function(e){return{type:"enumerator",name:e}}))});return this.schema.list.includes(n)||this.schema.list.push(n),this._subject=n,this},t.enumerator=function(e){var t=this.getSubject();if(!t||!("type"in t)||"enum"!==t.type)throw new Error("Subject must be a prisma enum!");return t.enumerators.push({type:"enumerator",name:e}),this},t.getSubject=function(){return this._subject},t.getParent=function(){return this._parent},t.blockAttribute=function(e,t){var n=this.getSubject();if(!I(n)){var r=this.getParent();if(!I(r))throw new Error("Subject must be a prisma model or view!");n=this._subject=r}var a=t?"string"==typeof t?[{type:"attributeArgument",value:'"'+t+'"'}]:Array.isArray(t)?[{type:"attributeArgument",value:{type:"array",args:t}}]:Object.entries(t).map((function(e){return{type:"attributeArgument",value:{type:"keyValue",key:e[0],value:e[1]}}})):[];return n.properties.push({type:"attribute",kind:"object",name:e,args:a}),this},t.attribute=function(e,t){var n=this.getParent(),r=this.getSubject();if(!I(n))throw new Error("Parent must be a prisma model or view!");if(!V(r))throw new Error("Subject must be a prisma field!");r.attributes||(r.attributes=[]);var a=r.attributes.reduce((function(t,n){return"attribute"===n.type&&(n.group?n.group+".":"")+n.name===e?n:t}),{type:"attribute",kind:"field",name:e});if(Array.isArray(t)){var i=function e(t){var n,r;return"string"==typeof t?t:{type:"function",name:t.name,params:null!=(n=null==(r=t.function)?void 0:r.map(e))?n:[]}};t.length>0&&(a.args=t.map((function(e){return{type:"attributeArgument",value:i(e)}})))}else"object"==typeof t&&(a.args=Object.entries(t).map((function(e){return{type:"attributeArgument",value:{type:"keyValue",key:e[0],value:{type:"array",args:e[1]}}}})));return r.attributes.includes(a)||r.attributes.push(a),this},t.removeAttribute=function(e){var t=this.getParent(),n=this.getSubject();if(!I(t))throw new Error("Parent must be a prisma model or view!");if(!V(n))throw new Error("Subject must be a prisma field!");return n.attributes||(n.attributes=[]),n.attributes=n.attributes.filter((function(t){return!("attribute"===t.type&&t.name===e)})),this},t.assignment=function(e,t){var n=this.getSubject();if(!n||!("type"in n)||!["generator","datasource"].includes(n.type))throw new Error("Subject must be a prisma generator or datasource!");var r=n.assignments.reduce((function(n,r){return"assignment"===r.type&&r.key===e?function(e,n){return e.value='"'+t+'"',e}(r):n}),{type:"assignment",key:e,value:'"'+t+'"'});return n.assignments.includes(r)||n.assignments.push(r),this},t.blockInsert=function(e){var t=this.getSubject(),n=["datasource","enum","generator","model","view"];if(!t||!("type"in t)||!n.includes(t.type)){var r=this.getParent();if(!r||!("type"in r)||!n.includes(r.type))throw new Error("Subject must be a prisma block!");t=this._subject=r}switch(t.type){case"datasource":case"generator":t.assignments.push(e);break;case"enum":t.enumerators.push(e);break;case"model":t.properties.push(e)}return this},t.break=function(){return this.blockInsert({type:"break"})},t.comment=function(e,t){return void 0===t&&(t=!1),this.blockInsert({type:"comment",text:"//"+(t?"/":"")+" "+e})},t.schemaComment=function(e,t){return void 0===t&&(t=!1),this.schema.list.push({type:"comment",text:"//"+(t?"/":"")+" "+e}),this},t.field=function(e,t){void 0===t&&(t="String");var n=this.getSubject();if(!I(n)){var r=this.getParent();if(!I(r))throw new Error("Subject must be a prisma model or view!");n=this._subject=r}var a=n.properties.reduce((function(t,n){return"field"===n.type&&n.name===e?n:t}),{type:"field",name:e,fieldType:t});return n.properties.includes(a)||n.properties.push(a),this._parent=n,this._subject=a,this},t.removeField=function(e){var t=this.getSubject();if(!I(t)){var n=this.getParent();if(!I(n))throw new Error("Subject must be a prisma model or view!");t=this._subject=n}return t.properties=t.properties.filter((function(t){return!("field"===t.type&&t.name===e)})),this},t.then=function(e){return e(this._subject),this},e}();exports.ConcretePrismaSchemaBuilder=se,exports.PrismaParser=Y,exports.VisitorClassFactory=W,exports.createPrismaSchemaBuilder=function(e){return new se(e)},exports.getSchema=Q,exports.printSchema=J;
//# sourceMappingURL=prisma-ast.cjs.production.min.js.map

@@ -177,2 +177,43 @@ import { Lexer, createToken, CstParser } from 'chevrotain';

var schemaObjects = ['model', 'view'];
function isSchemaObject(obj) {
return obj != null && 'type' in obj && schemaObjects.includes(obj.type);
}
function isSchemaField(field) {
return field != null && 'type' in field && field.type === 'field';
}
function isToken(node) {
return 'image' in node[0];
}
function appendLocationData(data) {
for (var _len = arguments.length, tokens = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
tokens[_key - 1] = arguments[_key];
}
var location = tokens.reduce(function (memo, token) {
if (!token) return memo;
var _memo$endColumn = memo.endColumn,
endColumn = _memo$endColumn === void 0 ? -Infinity : _memo$endColumn,
_memo$endLine = memo.endLine,
endLine = _memo$endLine === void 0 ? -Infinity : _memo$endLine,
_memo$endOffset = memo.endOffset,
endOffset = _memo$endOffset === void 0 ? -Infinity : _memo$endOffset,
_memo$startColumn = memo.startColumn,
startColumn = _memo$startColumn === void 0 ? Infinity : _memo$startColumn,
_memo$startLine = memo.startLine,
startLine = _memo$startLine === void 0 ? Infinity : _memo$startLine,
_memo$startOffset = memo.startOffset,
startOffset = _memo$startOffset === void 0 ? Infinity : _memo$startOffset;
if (token.startLine != null && token.startLine < startLine) memo.startLine = token.startLine;
if (token.startColumn != null && token.startColumn < startColumn) memo.startColumn = token.startColumn;
if (token.startOffset != null && token.startOffset < startOffset) memo.startOffset = token.startOffset;
if (token.endLine != null && token.endLine > endLine) memo.endLine = token.endLine;
if (token.endColumn != null && token.endColumn > endColumn) memo.endColumn = token.endColumn;
if (token.endOffset != null && token.endOffset > endOffset) memo.endOffset = token.endOffset;
return memo;
}, {});
return Object.assign(data, {
location: location
});
}
var defaultConfig = {

@@ -192,5 +233,6 @@ parser: {

_inheritsLoose(PrismaParser, _CstParser);
function PrismaParser() {
function PrismaParser(config) {
var _this;
_this = _CstParser.call(this, multiModeTokens, getConfig().parser) || this;
_this = _CstParser.call(this, multiModeTokens, config) || this;
_this.config = void 0;
_this["break"] = _this.RULE('break', function () {

@@ -571,2 +613,3 @@ _this.CONSUME1(LineBreak);

_this.performSelfAnalysis();
_this.config = config;
return _this;

@@ -576,263 +619,232 @@ }

}(CstParser);
var parser = /*#__PURE__*/new PrismaParser();
var defaultParser = /*#__PURE__*/new PrismaParser( getConfig().parser);
var schemaObjects = ['model', 'view'];
function isSchemaObject(obj) {
return obj != null && 'type' in obj && schemaObjects.includes(obj.type);
}
function isSchemaField(field) {
return field != null && 'type' in field && field.type === 'field';
}
function isToken(node) {
return 'image' in node[0];
}
function appendLocationData(data) {
var _getConfig = getConfig(),
parser = _getConfig.parser;
if (parser.nodeLocationTracking === 'none') return data;
for (var _len = arguments.length, tokens = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
tokens[_key - 1] = arguments[_key];
}
var location = tokens.reduce(function (memo, token) {
if (!token) return memo;
var _memo$endColumn = memo.endColumn,
endColumn = _memo$endColumn === void 0 ? -Infinity : _memo$endColumn,
_memo$endLine = memo.endLine,
endLine = _memo$endLine === void 0 ? -Infinity : _memo$endLine,
_memo$endOffset = memo.endOffset,
endOffset = _memo$endOffset === void 0 ? -Infinity : _memo$endOffset,
_memo$startColumn = memo.startColumn,
startColumn = _memo$startColumn === void 0 ? Infinity : _memo$startColumn,
_memo$startLine = memo.startLine,
startLine = _memo$startLine === void 0 ? Infinity : _memo$startLine,
_memo$startOffset = memo.startOffset,
startOffset = _memo$startOffset === void 0 ? Infinity : _memo$startOffset;
if (token.startLine != null && token.startLine < startLine) memo.startLine = token.startLine;
if (token.startColumn != null && token.startColumn < startColumn) memo.startColumn = token.startColumn;
if (token.startOffset != null && token.startOffset < startOffset) memo.startOffset = token.startOffset;
if (token.endLine != null && token.endLine > endLine) memo.endLine = token.endLine;
if (token.endColumn != null && token.endColumn > endColumn) memo.endColumn = token.endColumn;
if (token.endOffset != null && token.endOffset > endOffset) memo.endOffset = token.endOffset;
return memo;
}, {});
return Object.assign(data, {
location: location
});
}
var BasePrismaVisitor = /*#__PURE__*/parser.getBaseCstVisitorConstructorWithDefaults();
var PrismaVisitor = /*#__PURE__*/function (_BasePrismaVisitor) {
_inheritsLoose(PrismaVisitor, _BasePrismaVisitor);
function PrismaVisitor() {
var _this;
_this = _BasePrismaVisitor.call(this) || this;
_this.validateVisitor();
return _this;
}
var _proto = PrismaVisitor.prototype;
_proto.schema = function schema(ctx) {
var _ctx$list,
_this2 = this;
var list = ((_ctx$list = ctx.list) == null ? void 0 : _ctx$list.map(function (item) {
return _this2.visit([item]);
})) || [];
return {
type: 'schema',
list: list
var VisitorClassFactory = function VisitorClassFactory(parser) {
var BasePrismaVisitor = parser.getBaseCstVisitorConstructorWithDefaults();
return /*#__PURE__*/function (_BasePrismaVisitor) {
_inheritsLoose(PrismaVisitor, _BasePrismaVisitor);
function PrismaVisitor() {
var _this;
_this = _BasePrismaVisitor.call(this) || this;
_this.validateVisitor();
return _this;
}
var _proto = PrismaVisitor.prototype;
_proto.schema = function schema(ctx) {
var _ctx$list,
_this2 = this;
var list = ((_ctx$list = ctx.list) == null ? void 0 : _ctx$list.map(function (item) {
return _this2.visit([item]);
})) || [];
return {
type: 'schema',
list: list
};
};
};
_proto.component = function component(ctx) {
var _ctx$type = ctx.type,
type = _ctx$type[0];
var _ctx$componentName = ctx.componentName,
name = _ctx$componentName[0];
var list = this.visit(ctx.block);
var data = function () {
switch (type.image) {
case 'datasource':
return {
type: 'datasource',
name: name.image,
assignments: list
};
case 'generator':
return {
type: 'generator',
name: name.image,
assignments: list
};
case 'model':
return {
type: 'model',
name: name.image,
properties: list
};
case 'view':
return {
type: 'view',
name: name.image,
properties: list
};
case 'enum':
return {
type: 'enum',
name: name.image,
enumerators: list
};
default:
throw new Error("Unexpected block type: " + type);
}
}();
return appendLocationData(data, type, name);
};
_proto["break"] = function _break() {
return {
type: 'break'
_proto.component = function component(ctx) {
var _ctx$type = ctx.type,
type = _ctx$type[0];
var _ctx$componentName = ctx.componentName,
name = _ctx$componentName[0];
var list = this.visit(ctx.block);
var data = function () {
switch (type.image) {
case 'datasource':
return {
type: 'datasource',
name: name.image,
assignments: list
};
case 'generator':
return {
type: 'generator',
name: name.image,
assignments: list
};
case 'model':
return {
type: 'model',
name: name.image,
properties: list
};
case 'view':
return {
type: 'view',
name: name.image,
properties: list
};
case 'enum':
return {
type: 'enum',
name: name.image,
enumerators: list
};
default:
throw new Error("Unexpected block type: " + type);
}
}();
return this.maybeAppendLocationData(data, type, name);
};
};
_proto.comment = function comment(ctx) {
var _ctx$text = ctx.text,
comment = _ctx$text[0];
var data = {
type: 'comment',
text: comment.image
_proto["break"] = function _break() {
return {
type: 'break'
};
};
return appendLocationData(data, comment);
};
_proto.block = function block(ctx) {
var _ctx$list2,
_this3 = this;
return (_ctx$list2 = ctx.list) == null ? void 0 : _ctx$list2.map(function (item) {
return _this3.visit([item]);
});
};
_proto.assignment = function assignment(ctx) {
var value = this.visit(ctx.assignmentValue);
var _ctx$assignmentName = ctx.assignmentName,
key = _ctx$assignmentName[0];
var data = {
type: 'assignment',
key: key.image,
value: value
_proto.comment = function comment(ctx) {
var _ctx$text = ctx.text,
comment = _ctx$text[0];
var data = {
type: 'comment',
text: comment.image
};
return this.maybeAppendLocationData(data, comment);
};
return appendLocationData(data, key);
};
_proto.field = function field(ctx) {
var _this4 = this,
_ctx$comment,
_ctx$optional,
_ctx$array;
var fieldType = this.visit(ctx.fieldType);
var _ctx$fieldName = ctx.fieldName,
name = _ctx$fieldName[0];
var attributes = ctx.attributeList && ctx.attributeList.map(function (item) {
return _this4.visit([item]);
});
var comment = (_ctx$comment = ctx.comment) == null || (_ctx$comment = _ctx$comment[0]) == null ? void 0 : _ctx$comment.image;
var data = {
type: 'field',
name: name.image,
fieldType: fieldType,
array: ctx.array != null,
optional: ctx.optional != null,
attributes: attributes,
comment: comment
_proto.block = function block(ctx) {
var _ctx$list2,
_this3 = this;
return (_ctx$list2 = ctx.list) == null ? void 0 : _ctx$list2.map(function (item) {
return _this3.visit([item]);
});
};
return appendLocationData(data, name, (_ctx$optional = ctx.optional) == null ? void 0 : _ctx$optional[0], (_ctx$array = ctx.array) == null ? void 0 : _ctx$array[0]);
};
_proto.attribute = function attribute(ctx) {
var _this5 = this;
var _ctx$attributeName = ctx.attributeName,
name = _ctx$attributeName[0];
var _ref = ctx.groupName || [{}],
group = _ref[0];
var args = ctx.attributeArg && ctx.attributeArg.map(function (attr) {
return _this5.visit(attr);
});
var kind = ctx.blockAttribute != null ? 'object' : 'field';
var data = {
type: 'attribute',
name: name.image,
kind: kind,
group: group.image,
args: args
_proto.assignment = function assignment(ctx) {
var value = this.visit(ctx.assignmentValue);
var _ctx$assignmentName = ctx.assignmentName,
key = _ctx$assignmentName[0];
var data = {
type: 'assignment',
key: key.image,
value: value
};
return this.maybeAppendLocationData(data, key);
};
var attrs = kind === 'object' ? ctx.blockAttribute : ctx.fieldAttribute;
return appendLocationData.apply(void 0, [data, name].concat(attrs, [group]));
};
_proto.attributeArg = function attributeArg(ctx) {
var value = this.visit(ctx.value);
return {
type: 'attributeArgument',
value: value
_proto.field = function field(ctx) {
var _this4 = this,
_ctx$comment,
_ctx$optional,
_ctx$array;
var fieldType = this.visit(ctx.fieldType);
var _ctx$fieldName = ctx.fieldName,
name = _ctx$fieldName[0];
var attributes = ctx.attributeList && ctx.attributeList.map(function (item) {
return _this4.visit([item]);
});
var comment = (_ctx$comment = ctx.comment) == null || (_ctx$comment = _ctx$comment[0]) == null ? void 0 : _ctx$comment.image;
var data = {
type: 'field',
name: name.image,
fieldType: fieldType,
array: ctx.array != null,
optional: ctx.optional != null,
attributes: attributes,
comment: comment
};
return this.maybeAppendLocationData(data, name, (_ctx$optional = ctx.optional) == null ? void 0 : _ctx$optional[0], (_ctx$array = ctx.array) == null ? void 0 : _ctx$array[0]);
};
};
_proto.func = function func(ctx) {
var _this6 = this;
var _ctx$funcName = ctx.funcName,
name = _ctx$funcName[0];
var params = ctx.value && ctx.value.map(function (item) {
return _this6.visit([item]);
});
var keyedParams = ctx.keyedArg && ctx.keyedArg.map(function (item) {
return _this6.visit([item]);
});
var pars = (params || keyedParams) && [].concat(params != null ? params : [], keyedParams != null ? keyedParams : []);
var data = {
type: 'function',
name: name.image,
params: pars
_proto.attribute = function attribute(ctx) {
var _this5 = this;
var _ctx$attributeName = ctx.attributeName,
name = _ctx$attributeName[0];
var _ref = ctx.groupName || [{}],
group = _ref[0];
var args = ctx.attributeArg && ctx.attributeArg.map(function (attr) {
return _this5.visit(attr);
});
var kind = ctx.blockAttribute != null ? 'object' : 'field';
var data = {
type: 'attribute',
name: name.image,
kind: kind,
group: group.image,
args: args
};
var attrs = kind === 'object' ? ctx.blockAttribute : ctx.fieldAttribute;
return this.maybeAppendLocationData.apply(this, [data, name].concat(attrs, [group]));
};
return appendLocationData(data, name);
};
_proto.array = function array(ctx) {
var _this7 = this;
var args = ctx.value && ctx.value.map(function (item) {
return _this7.visit([item]);
});
return {
type: 'array',
args: args
_proto.attributeArg = function attributeArg(ctx) {
var value = this.visit(ctx.value);
return {
type: 'attributeArgument',
value: value
};
};
};
_proto.keyedArg = function keyedArg(ctx) {
var _ctx$keyName = ctx.keyName,
key = _ctx$keyName[0];
var value = this.visit(ctx.value);
var data = {
type: 'keyValue',
key: key.image,
value: value
_proto.func = function func(ctx) {
var _this6 = this;
var _ctx$funcName = ctx.funcName,
name = _ctx$funcName[0];
var params = ctx.value && ctx.value.map(function (item) {
return _this6.visit([item]);
});
var keyedParams = ctx.keyedArg && ctx.keyedArg.map(function (item) {
return _this6.visit([item]);
});
var pars = (params || keyedParams) && [].concat(params != null ? params : [], keyedParams != null ? keyedParams : []);
var data = {
type: 'function',
name: name.image,
params: pars
};
return this.maybeAppendLocationData(data, name);
};
return appendLocationData(data, key);
};
_proto.value = function value(ctx) {
if (isToken(ctx.value)) {
var _ctx$value = ctx.value,
image = _ctx$value[0].image;
return image;
}
return this.visit(ctx.value);
};
_proto["enum"] = function _enum(ctx) {
var _ctx$comment2;
var _ctx$enumName = ctx.enumName,
name = _ctx$enumName[0];
var comment = (_ctx$comment2 = ctx.comment) == null || (_ctx$comment2 = _ctx$comment2[0]) == null ? void 0 : _ctx$comment2.image;
var data = {
type: 'enumerator',
name: name.image,
comment: comment
_proto.array = function array(ctx) {
var _this7 = this;
var args = ctx.value && ctx.value.map(function (item) {
return _this7.visit([item]);
});
return {
type: 'array',
args: args
};
};
return appendLocationData(data, name);
};
return PrismaVisitor;
}(BasePrismaVisitor);
_proto.keyedArg = function keyedArg(ctx) {
var _ctx$keyName = ctx.keyName,
key = _ctx$keyName[0];
var value = this.visit(ctx.value);
var data = {
type: 'keyValue',
key: key.image,
value: value
};
return this.maybeAppendLocationData(data, key);
};
_proto.value = function value(ctx) {
if (isToken(ctx.value)) {
var _ctx$value = ctx.value,
image = _ctx$value[0].image;
return image;
}
return this.visit(ctx.value);
};
_proto["enum"] = function _enum(ctx) {
var _ctx$comment2;
var _ctx$enumName = ctx.enumName,
name = _ctx$enumName[0];
var comment = (_ctx$comment2 = ctx.comment) == null || (_ctx$comment2 = _ctx$comment2[0]) == null ? void 0 : _ctx$comment2.image;
var data = {
type: 'enumerator',
name: name.image,
comment: comment
};
return this.maybeAppendLocationData(data, name);
};
_proto.maybeAppendLocationData = function maybeAppendLocationData(data) {
if (parser.config.nodeLocationTracking === 'none') return data;
for (var _len = arguments.length, tokens = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
tokens[_key - 1] = arguments[_key];
}
return appendLocationData.apply(void 0, [data].concat(tokens));
};
return PrismaVisitor;
}(BasePrismaVisitor);
};
var DefaultVisitorClass = /*#__PURE__*/VisitorClassFactory(defaultParser);
var defaultVisitor = /*#__PURE__*/new DefaultVisitorClass();
function getSchema(source) {
function getSchema(source, options) {
var _options$parser, _options$visitor;
var lexingResult = PrismaLexer.tokenize(source);
var parser = (_options$parser = options == null ? void 0 : options.parser) != null ? _options$parser : defaultParser;
parser.input = lexingResult.tokens;
var cstNode = parser.schema();
if (parser.errors.length > 0) throw parser.errors[0];
var visitor = new PrismaVisitor();
var visitor = (_options$visitor = options == null ? void 0 : options.visitor) != null ? _options$visitor : defaultVisitor;
return visitor.visit(cstNode);

@@ -1444,3 +1456,3 @@ }

export { ConcretePrismaSchemaBuilder, createPrismaSchemaBuilder, getSchema, printSchema };
export { ConcretePrismaSchemaBuilder, PrismaParser, VisitorClassFactory, createPrismaSchemaBuilder, getSchema, printSchema };
//# sourceMappingURL=prisma-ast.esm.js.map

@@ -1,63 +0,8 @@

import { CstNode, IToken } from '@chevrotain/types';
import * as Types from './getSchema';
declare const BasePrismaVisitor: new (...args: any[]) => import("@chevrotain/types").ICstVisitor<any, any>;
export declare class PrismaVisitor extends BasePrismaVisitor {
constructor();
schema(ctx: CstNode & {
list: CstNode[];
}): Types.Schema;
component(ctx: CstNode & {
type: [IToken];
componentName: [IToken];
block: [CstNode];
}): Types.Block;
break(): Types.Break;
comment(ctx: CstNode & {
text: [IToken];
}): Types.Comment;
block(ctx: CstNode & {
list: CstNode[];
}): Types.Block[];
assignment(ctx: CstNode & {
assignmentName: [IToken];
assignmentValue: [CstNode];
}): Types.Assignment;
field(ctx: CstNode & {
fieldName: [IToken];
fieldType: [CstNode];
array: [IToken];
optional: [IToken];
attributeList: CstNode[];
comment: [IToken];
}): Types.Field;
attribute(ctx: CstNode & {
blockAttribute: [IToken];
fieldAttribute: [IToken];
groupName: [IToken];
attributeName: [IToken];
attributeArg: CstNode[];
}): Types.Attr;
attributeArg(ctx: CstNode & {
value: [CstNode];
}): Types.AttributeArgument;
func(ctx: CstNode & {
funcName: [IToken];
value: CstNode[];
keyedArg: CstNode[];
}): Types.Func;
array(ctx: CstNode & {
value: CstNode[];
}): Types.RelationArray;
keyedArg(ctx: CstNode & {
keyName: [IToken];
value: [CstNode];
}): Types.KeyValue;
value(ctx: CstNode & {
value: [IToken] | [CstNode];
}): Types.Value;
enum(ctx: CstNode & {
enumName: [IToken];
comment: [IToken];
}): Types.Enumerator;
}
import { PrismaParser } from './parser';
import { ICstVisitor } from 'chevrotain';
type Class<T> = new (...args: any[]) => T;
export type PrismaVisitor = ICstVisitor<any, any>;
export declare const VisitorClassFactory: (parser: PrismaParser) => Class<PrismaVisitor>;
export declare const DefaultVisitorClass: Class<PrismaVisitor>;
export declare const defaultVisitor: PrismaVisitor;
export {};
{
"version": "0.7.0",
"version": "0.8.0",
"license": "MIT",

@@ -4,0 +4,0 @@ "main": "dist/index.js",

@@ -137,3 +137,3 @@ # @mrleebo/prisma-ast

### Access a datasource programmatially
### Access a datasource programmatically

@@ -140,0 +140,0 @@ If you want to perform a custom action that there isn't a Builder method for, you can access the underlying schema object programmatically.

@@ -7,4 +7,5 @@ import type { IParserConfig } from 'chevrotain';

export type PrismaAstParserConfig = Pick<IParserConfig, 'nodeLocationTracking'>;
export interface PrismaAstConfig {
parser: Pick<IParserConfig, 'nodeLocationTracking'>;
parser: PrismaAstParserConfig;
}

@@ -11,0 +12,0 @@

import { PrismaLexer } from './lexer';
import { PrismaVisitor } from './visitor';
import { parser } from './parser';
import { PrismaVisitor, defaultVisitor } from './visitor';
import type { CstNodeLocation } from 'chevrotain';
import { PrismaParser, defaultParser } from './parser';

@@ -17,8 +17,17 @@ /**

* */
export function getSchema(source: string): Schema {
export function getSchema(
source: string,
options?: {
parser: PrismaParser;
visitor: PrismaVisitor;
}
): Schema {
const lexingResult = PrismaLexer.tokenize(source);
const parser = options?.parser ?? defaultParser;
parser.input = lexingResult.tokens;
const cstNode = parser.schema();
if (parser.errors.length > 0) throw parser.errors[0];
const visitor = new PrismaVisitor();
const visitor = options?.visitor ?? defaultVisitor;
return visitor.visit(cstNode);

@@ -25,0 +34,0 @@ }

@@ -6,1 +6,3 @@ export * from './getSchema';

export type { CstNodeLocation } from 'chevrotain';
export { VisitorClassFactory } from './visitor';
export { PrismaParser } from './parser';
import { CstParser } from 'chevrotain';
import getConfig from './getConfig';
import getConfig, { PrismaAstParserConfig } from './getConfig';
import * as lexer from './lexer';

@@ -7,5 +7,8 @@

export class PrismaParser extends CstParser {
constructor() {
super(lexer.multiModeTokens, getConfig().parser);
readonly config: PrismaAstParserConfig;
constructor(config: PrismaAstParserConfig) {
super(lexer.multiModeTokens, config);
this.performSelfAnalysis();
this.config = config;
}

@@ -233,2 +236,2 @@

export const parser = new PrismaParser();
export const defaultParser = new PrismaParser(getConfig().parser);
import type { CstNode, IToken } from 'chevrotain';
import getConfig from './getConfig';
import * as schema from './getSchema';

@@ -31,5 +30,2 @@

): T {
const { parser } = getConfig();
if (parser.nodeLocationTracking === 'none') return data;
const location = tokens.reduce((memo, token) => {

@@ -36,0 +32,0 @@ if (!token) return memo;

import { CstNode, IToken } from '@chevrotain/types';
import { parser } from './parser';
import * as Types from './getSchema';
import { appendLocationData, isToken } from './schemaUtils';
import { PrismaParser, defaultParser } from './parser';
import { ICstVisitor } from 'chevrotain';
const BasePrismaVisitor = parser.getBaseCstVisitorConstructorWithDefaults();
export class PrismaVisitor extends BasePrismaVisitor {
constructor() {
super();
this.validateVisitor();
}
type Class<T> = new (...args: any[]) => T;
export type PrismaVisitor = ICstVisitor<any, any>;
schema(ctx: CstNode & { list: CstNode[] }): Types.Schema {
const list = ctx.list?.map((item) => this.visit([item])) || [];
return { type: 'schema', list };
}
export const VisitorClassFactory = (
parser: PrismaParser
): Class<PrismaVisitor> => {
const BasePrismaVisitor = parser.getBaseCstVisitorConstructorWithDefaults();
return class PrismaVisitor extends BasePrismaVisitor {
constructor() {
super();
this.validateVisitor();
}
component(
ctx: CstNode & {
type: [IToken];
componentName: [IToken];
block: [CstNode];
schema(ctx: CstNode & { list: CstNode[] }): Types.Schema {
const list = ctx.list?.map((item) => this.visit([item])) || [];
return { type: 'schema', list };
}
): Types.Block {
const [type] = ctx.type;
const [name] = ctx.componentName;
const list = this.visit(ctx.block);
const data = (() => {
switch (type.image) {
case 'datasource':
return {
type: 'datasource',
name: name.image,
assignments: list,
} as const;
case 'generator':
return {
type: 'generator',
name: name.image,
assignments: list,
} as const;
case 'model':
return { type: 'model', name: name.image, properties: list } as const;
case 'view':
return { type: 'view', name: name.image, properties: list } as const;
case 'enum':
return { type: 'enum', name: name.image, enumerators: list } as const;
default:
throw new Error(`Unexpected block type: ${type}`);
component(
ctx: CstNode & {
type: [IToken];
componentName: [IToken];
block: [CstNode];
}
})();
): Types.Block {
const [type] = ctx.type;
const [name] = ctx.componentName;
const list = this.visit(ctx.block);
return appendLocationData(data, type, name);
}
const data = (() => {
switch (type.image) {
case 'datasource':
return {
type: 'datasource',
name: name.image,
assignments: list,
} as const;
case 'generator':
return {
type: 'generator',
name: name.image,
assignments: list,
} as const;
case 'model':
return {
type: 'model',
name: name.image,
properties: list,
} as const;
case 'view':
return {
type: 'view',
name: name.image,
properties: list,
} as const;
case 'enum':
return {
type: 'enum',
name: name.image,
enumerators: list,
} as const;
default:
throw new Error(`Unexpected block type: ${type}`);
}
})();
break(): Types.Break {
return { type: 'break' };
}
return this.maybeAppendLocationData(data, type, name);
}
comment(ctx: CstNode & { text: [IToken] }): Types.Comment {
const [comment] = ctx.text;
const data = { type: 'comment', text: comment.image } as const;
return appendLocationData(data, comment);
}
break(): Types.Break {
return { type: 'break' };
}
block(ctx: CstNode & { list: CstNode[] }): Types.Block[] {
return ctx.list?.map((item) => this.visit([item]));
}
comment(ctx: CstNode & { text: [IToken] }): Types.Comment {
const [comment] = ctx.text;
const data = { type: 'comment', text: comment.image } as const;
return this.maybeAppendLocationData(data, comment);
}
assignment(
ctx: CstNode & { assignmentName: [IToken]; assignmentValue: [CstNode] }
): Types.Assignment {
const value = this.visit(ctx.assignmentValue);
const [key] = ctx.assignmentName;
const data = { type: 'assignment', key: key.image, value } as const;
return appendLocationData(data, key);
}
block(ctx: CstNode & { list: CstNode[] }): Types.Block[] {
return ctx.list?.map((item) => this.visit([item]));
}
field(
ctx: CstNode & {
fieldName: [IToken];
fieldType: [CstNode];
array: [IToken];
optional: [IToken];
attributeList: CstNode[];
comment: [IToken];
assignment(
ctx: CstNode & { assignmentName: [IToken]; assignmentValue: [CstNode] }
): Types.Assignment {
const value = this.visit(ctx.assignmentValue);
const [key] = ctx.assignmentName;
const data = { type: 'assignment', key: key.image, value } as const;
return this.maybeAppendLocationData(data, key);
}
): Types.Field {
const fieldType = this.visit(ctx.fieldType);
const [name] = ctx.fieldName;
const attributes =
ctx.attributeList && ctx.attributeList.map((item) => this.visit([item]));
const comment = ctx.comment?.[0]?.image;
const data = {
type: 'field',
name: name.image,
fieldType,
array: ctx.array != null,
optional: ctx.optional != null,
attributes,
comment,
} as const;
return appendLocationData(data, name, ctx.optional?.[0], ctx.array?.[0]);
}
field(
ctx: CstNode & {
fieldName: [IToken];
fieldType: [CstNode];
array: [IToken];
optional: [IToken];
attributeList: CstNode[];
comment: [IToken];
}
): Types.Field {
const fieldType = this.visit(ctx.fieldType);
const [name] = ctx.fieldName;
const attributes =
ctx.attributeList &&
ctx.attributeList.map((item) => this.visit([item]));
const comment = ctx.comment?.[0]?.image;
const data = {
type: 'field',
name: name.image,
fieldType,
array: ctx.array != null,
optional: ctx.optional != null,
attributes,
comment,
} as const;
attribute(
ctx: CstNode & {
blockAttribute: [IToken];
fieldAttribute: [IToken];
groupName: [IToken];
attributeName: [IToken];
attributeArg: CstNode[];
return this.maybeAppendLocationData(
data,
name,
ctx.optional?.[0],
ctx.array?.[0]
);
}
): Types.Attr {
const [name] = ctx.attributeName;
const [group] = ctx.groupName || [{}];
const args =
ctx.attributeArg && ctx.attributeArg.map((attr) => this.visit(attr));
const kind = ctx.blockAttribute != null ? 'object' : 'field';
const data = {
type: 'attribute',
name: name.image,
kind,
group: group.image,
args,
} as const;
const attrs = kind === 'object' ? ctx.blockAttribute : ctx.fieldAttribute;
return appendLocationData(data, name, ...attrs, group);
}
attributeArg(ctx: CstNode & { value: [CstNode] }): Types.AttributeArgument {
const value = this.visit(ctx.value);
return { type: 'attributeArgument', value };
}
attribute(
ctx: CstNode & {
blockAttribute: [IToken];
fieldAttribute: [IToken];
groupName: [IToken];
attributeName: [IToken];
attributeArg: CstNode[];
}
): Types.Attr {
const [name] = ctx.attributeName;
const [group] = ctx.groupName || [{}];
const args =
ctx.attributeArg && ctx.attributeArg.map((attr) => this.visit(attr));
const kind = ctx.blockAttribute != null ? 'object' : 'field';
const data = {
type: 'attribute',
name: name.image,
kind,
group: group.image,
args,
} as const;
const attrs = kind === 'object' ? ctx.blockAttribute : ctx.fieldAttribute;
return this.maybeAppendLocationData(data, name, ...attrs, group);
}
func(
ctx: CstNode & { funcName: [IToken]; value: CstNode[]; keyedArg: CstNode[] }
): Types.Func {
const [name] = ctx.funcName;
const params = ctx.value && ctx.value.map((item) => this.visit([item]));
const keyedParams =
ctx.keyedArg && ctx.keyedArg.map((item) => this.visit([item]));
const pars = (params || keyedParams) && [
...(params ?? []),
...(keyedParams ?? []),
];
const data = { type: 'function', name: name.image, params: pars } as const;
return appendLocationData(data, name);
}
attributeArg(ctx: CstNode & { value: [CstNode] }): Types.AttributeArgument {
const value = this.visit(ctx.value);
return { type: 'attributeArgument', value };
}
array(ctx: CstNode & { value: CstNode[] }): Types.RelationArray {
const args = ctx.value && ctx.value.map((item) => this.visit([item]));
return { type: 'array', args };
}
func(
ctx: CstNode & {
funcName: [IToken];
value: CstNode[];
keyedArg: CstNode[];
}
): Types.Func {
const [name] = ctx.funcName;
const params = ctx.value && ctx.value.map((item) => this.visit([item]));
const keyedParams =
ctx.keyedArg && ctx.keyedArg.map((item) => this.visit([item]));
const pars = (params || keyedParams) && [
...(params ?? []),
...(keyedParams ?? []),
];
const data = {
type: 'function',
name: name.image,
params: pars,
} as const;
return this.maybeAppendLocationData(data, name);
}
keyedArg(
ctx: CstNode & { keyName: [IToken]; value: [CstNode] }
): Types.KeyValue {
const [key] = ctx.keyName;
const value = this.visit(ctx.value);
const data = { type: 'keyValue', key: key.image, value } as const;
return appendLocationData(data, key);
}
array(ctx: CstNode & { value: CstNode[] }): Types.RelationArray {
const args = ctx.value && ctx.value.map((item) => this.visit([item]));
return { type: 'array', args };
}
value(ctx: CstNode & { value: [IToken] | [CstNode] }): Types.Value {
if (isToken(ctx.value)) {
const [{ image }] = ctx.value;
return image;
keyedArg(
ctx: CstNode & { keyName: [IToken]; value: [CstNode] }
): Types.KeyValue {
const [key] = ctx.keyName;
const value = this.visit(ctx.value);
const data = { type: 'keyValue', key: key.image, value } as const;
return this.maybeAppendLocationData(data, key);
}
return this.visit(ctx.value);
}
enum(
ctx: CstNode & { enumName: [IToken]; comment: [IToken] }
): Types.Enumerator {
const [name] = ctx.enumName;
const comment = ctx.comment?.[0]?.image;
const data = { type: 'enumerator', name: name.image, comment } as const;
return appendLocationData(data, name);
}
}
value(ctx: CstNode & { value: [IToken] | [CstNode] }): Types.Value {
if (isToken(ctx.value)) {
const [{ image }] = ctx.value;
return image;
}
return this.visit(ctx.value);
}
enum(
ctx: CstNode & { enumName: [IToken]; comment: [IToken] }
): Types.Enumerator {
const [name] = ctx.enumName;
const comment = ctx.comment?.[0]?.image;
const data = { type: 'enumerator', name: name.image, comment } as const;
return this.maybeAppendLocationData(data, name);
}
maybeAppendLocationData<T extends Record<string, unknown>>(
data: T,
...tokens: IToken[]
): T {
if (parser.config.nodeLocationTracking === 'none') return data;
return appendLocationData(data, ...tokens);
}
};
};
export const DefaultVisitorClass = VisitorClassFactory(defaultParser);
export const defaultVisitor = new DefaultVisitorClass();

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc