@dbml/parse 3.6.1 → 3.7.0

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.
Files changed (63) hide show
  1. package/dist/compiler.d.ts +79 -0
  2. package/dist/constants.d.ts +2 -0
  3. package/dist/dbml-parse.js +1 -1
  4. package/dist/dbml-parse.mjs +1 -1
  5. package/dist/index.d.ts +5 -0
  6. package/dist/lib/analyzer/analyzer.d.ts +12 -0
  7. package/dist/lib/analyzer/binder/binder.d.ts +10 -0
  8. package/dist/lib/analyzer/binder/elementBinder/custom.d.ts +11 -0
  9. package/dist/lib/analyzer/binder/elementBinder/elementBinder.d.ts +22 -0
  10. package/dist/lib/analyzer/binder/elementBinder/enum.d.ts +13 -0
  11. package/dist/lib/analyzer/binder/elementBinder/indexes.d.ts +17 -0
  12. package/dist/lib/analyzer/binder/elementBinder/note.d.ts +13 -0
  13. package/dist/lib/analyzer/binder/elementBinder/project.d.ts +11 -0
  14. package/dist/lib/analyzer/binder/elementBinder/ref.d.ts +17 -0
  15. package/dist/lib/analyzer/binder/elementBinder/table.d.ts +32 -0
  16. package/dist/lib/analyzer/binder/elementBinder/tableGroup.d.ts +17 -0
  17. package/dist/lib/analyzer/binder/utils.d.ts +14 -0
  18. package/dist/lib/analyzer/symbol/factory.d.ts +9 -0
  19. package/dist/lib/analyzer/symbol/symbolIndex.d.ts +27 -0
  20. package/dist/lib/analyzer/symbol/symbolTable.d.ts +12 -0
  21. package/dist/lib/analyzer/symbol/symbols.d.ts +77 -0
  22. package/dist/lib/analyzer/symbol/utils.d.ts +3 -0
  23. package/dist/lib/analyzer/types.d.ts +9 -0
  24. package/dist/lib/analyzer/utils.d.ts +38 -0
  25. package/dist/lib/analyzer/validator/elementValidators/custom.d.ts +21 -0
  26. package/dist/lib/analyzer/validator/elementValidators/enum.d.ts +26 -0
  27. package/dist/lib/analyzer/validator/elementValidators/indexes.d.ts +25 -0
  28. package/dist/lib/analyzer/validator/elementValidators/note.d.ts +23 -0
  29. package/dist/lib/analyzer/validator/elementValidators/project.d.ts +22 -0
  30. package/dist/lib/analyzer/validator/elementValidators/ref.d.ts +24 -0
  31. package/dist/lib/analyzer/validator/elementValidators/table.d.ts +26 -0
  32. package/dist/lib/analyzer/validator/elementValidators/tableGroup.d.ts +25 -0
  33. package/dist/lib/analyzer/validator/utils.d.ts +54 -0
  34. package/dist/lib/analyzer/validator/validator.d.ts +12 -0
  35. package/dist/lib/errors.d.ts +92 -0
  36. package/dist/lib/interpreter/elementInterpreter/enum.d.ts +13 -0
  37. package/dist/lib/interpreter/elementInterpreter/project.d.ts +13 -0
  38. package/dist/lib/interpreter/elementInterpreter/ref.d.ts +15 -0
  39. package/dist/lib/interpreter/elementInterpreter/sticky_note.d.ts +15 -0
  40. package/dist/lib/interpreter/elementInterpreter/table.d.ts +21 -0
  41. package/dist/lib/interpreter/elementInterpreter/tableGroup.d.ts +13 -0
  42. package/dist/lib/interpreter/interpreter.d.ts +11 -0
  43. package/dist/lib/interpreter/utils.d.ts +29 -0
  44. package/dist/lib/lexer/lexer.d.ts +43 -0
  45. package/dist/lib/lexer/tokens.d.ts +46 -0
  46. package/dist/lib/lexer/utils.d.ts +8 -0
  47. package/dist/lib/option.d.ts +17 -0
  48. package/dist/lib/parser/contextStack.d.ts +21 -0
  49. package/dist/lib/parser/factory.d.ts +9 -0
  50. package/dist/lib/parser/nodes.d.ts +209 -0
  51. package/dist/lib/parser/parser.d.ts +54 -0
  52. package/dist/lib/parser/utils.d.ts +47 -0
  53. package/dist/lib/report.d.ts +9 -0
  54. package/dist/lib/serialization/serialize.d.ts +5 -0
  55. package/dist/lib/utils.d.ts +12 -0
  56. package/dist/services/definition/provider.d.ts +8 -0
  57. package/dist/services/index.d.ts +6 -0
  58. package/dist/services/references/provider.d.ts +8 -0
  59. package/dist/services/suggestions/provider.d.ts +9 -0
  60. package/dist/services/suggestions/utils.d.ts +9 -0
  61. package/dist/services/types.d.ts +60 -0
  62. package/dist/services/utils.d.ts +3 -0
  63. package/package.json +5 -3
@@ -0,0 +1,12 @@
1
+ import { NodeSymbolIndex } from './symbolIndex';
2
+ import { NodeSymbol } from './symbols';
3
+
4
+ export default class SymbolTable {
5
+ private table;
6
+ constructor();
7
+ has(id: NodeSymbolIndex): boolean;
8
+ set(id: NodeSymbolIndex, value: NodeSymbol): void;
9
+ get(id: NodeSymbolIndex): NodeSymbol | undefined;
10
+ get(id: NodeSymbolIndex, defaultValue: NodeSymbol): NodeSymbol;
11
+ entries(): IterableIterator<[NodeSymbolIndex, NodeSymbol]>;
12
+ }
@@ -0,0 +1,77 @@
1
+ import { default as SymbolTable } from './symbolTable';
2
+ import { SyntaxNode } from '../../parser/nodes';
3
+
4
+ export type NodeSymbolId = number;
5
+ export declare class NodeSymbolIdGenerator {
6
+ private id;
7
+ reset(): void;
8
+ nextId(): NodeSymbolId;
9
+ }
10
+ export interface NodeSymbol {
11
+ id: NodeSymbolId;
12
+ symbolTable?: SymbolTable;
13
+ declaration?: SyntaxNode;
14
+ references: SyntaxNode[];
15
+ }
16
+ export declare class SchemaSymbol implements NodeSymbol {
17
+ id: NodeSymbolId;
18
+ symbolTable: SymbolTable;
19
+ references: SyntaxNode[];
20
+ constructor({ symbolTable }: {
21
+ symbolTable: SymbolTable;
22
+ }, id: NodeSymbolId);
23
+ }
24
+ export declare class EnumSymbol implements NodeSymbol {
25
+ id: NodeSymbolId;
26
+ symbolTable: SymbolTable;
27
+ declaration: SyntaxNode;
28
+ references: SyntaxNode[];
29
+ constructor({ symbolTable, declaration }: {
30
+ symbolTable: SymbolTable;
31
+ declaration: SyntaxNode;
32
+ }, id: NodeSymbolId);
33
+ }
34
+ export declare class EnumFieldSymbol implements NodeSymbol {
35
+ id: NodeSymbolId;
36
+ declaration: SyntaxNode;
37
+ references: SyntaxNode[];
38
+ constructor({ declaration }: {
39
+ declaration: SyntaxNode;
40
+ }, id: NodeSymbolId);
41
+ }
42
+ export declare class TableSymbol implements NodeSymbol {
43
+ id: NodeSymbolId;
44
+ symbolTable: SymbolTable;
45
+ declaration: SyntaxNode;
46
+ references: SyntaxNode[];
47
+ constructor({ symbolTable, declaration }: {
48
+ symbolTable: SymbolTable;
49
+ declaration: SyntaxNode;
50
+ }, id: NodeSymbolId);
51
+ }
52
+ export declare class ColumnSymbol implements NodeSymbol {
53
+ id: NodeSymbolId;
54
+ declaration: SyntaxNode;
55
+ references: SyntaxNode[];
56
+ constructor({ declaration }: {
57
+ declaration: SyntaxNode;
58
+ }, id: NodeSymbolId);
59
+ }
60
+ export declare class TableGroupSymbol implements NodeSymbol {
61
+ id: NodeSymbolId;
62
+ symbolTable: SymbolTable;
63
+ declaration: SyntaxNode;
64
+ references: SyntaxNode[];
65
+ constructor({ symbolTable, declaration }: {
66
+ symbolTable: SymbolTable;
67
+ declaration: SyntaxNode;
68
+ }, id: NodeSymbolId);
69
+ }
70
+ export declare class TableGroupFieldSymbol implements NodeSymbol {
71
+ id: NodeSymbolId;
72
+ declaration: SyntaxNode;
73
+ references: SyntaxNode[];
74
+ constructor({ declaration }: {
75
+ declaration: SyntaxNode;
76
+ }, id: NodeSymbolId);
77
+ }
@@ -0,0 +1,3 @@
1
+ import { NodeSymbolIndex } from './symbolIndex';
2
+
3
+ export declare function generatePossibleIndexes(name: string): NodeSymbolIndex[];
@@ -0,0 +1,9 @@
1
+ export declare enum ElementKind {
2
+ Table = "table",
3
+ Enum = "enum",
4
+ Ref = "ref",
5
+ Note = "note",
6
+ Project = "project",
7
+ Indexes = "indexes",
8
+ TableGroup = "tablegroup"
9
+ }
@@ -0,0 +1,38 @@
1
+ import { Option } from '../option';
2
+ import { ElementDeclarationNode, FunctionExpressionNode, InfixExpressionNode, PrimaryExpressionNode, SyntaxNode, VariableNode } from '../parser/nodes';
3
+ import { NodeSymbolIndex } from './symbol/symbolIndex';
4
+ import { NodeSymbol } from './symbol/symbols';
5
+ import { SyntaxToken } from '../lexer/tokens';
6
+ import { ElementKind } from './types';
7
+
8
+ export declare function getElementKind(node?: ElementDeclarationNode): Option<ElementKind>;
9
+ export declare function destructureMemberAccessExpression(node: SyntaxNode): Option<SyntaxNode[]>;
10
+ export declare function destructureComplexVariable(node?: SyntaxNode): Option<string[]>;
11
+ export declare function destructureComplexTuple(node?: SyntaxNode): Option<{
12
+ variables: string[];
13
+ tupleElements?: string[];
14
+ }>;
15
+ export declare function extractVariableFromExpression(node?: SyntaxNode): Option<string>;
16
+ export declare function destructureIndexNode(node: SyntaxNode): Option<{
17
+ functional: FunctionExpressionNode[];
18
+ nonFunctional: (PrimaryExpressionNode & {
19
+ expression: VariableNode;
20
+ })[];
21
+ }>;
22
+ export declare function extractVarNameFromPrimaryVariable(node?: PrimaryExpressionNode & {
23
+ expression: VariableNode;
24
+ }): Option<string>;
25
+ export declare function extractQuotedStringToken(value?: SyntaxNode): Option<string>;
26
+ export declare function isBinaryRelationship(value?: SyntaxNode): value is InfixExpressionNode;
27
+ export declare function isEqualTupleOperands(value: InfixExpressionNode): value is InfixExpressionNode;
28
+ export declare function isValidIndexName(value?: SyntaxNode): value is (PrimaryExpressionNode & {
29
+ expression: VariableNode;
30
+ }) | FunctionExpressionNode;
31
+ export declare function extractIndexName(value: (PrimaryExpressionNode & {
32
+ expression: VariableNode & {
33
+ variable: SyntaxToken;
34
+ };
35
+ }) | (FunctionExpressionNode & {
36
+ value: SyntaxToken;
37
+ })): string;
38
+ export declare function findSymbol(id: NodeSymbolIndex, startElement: ElementDeclarationNode): NodeSymbol | undefined;
@@ -0,0 +1,21 @@
1
+ import { CompileError } from '../../../errors';
2
+ import { BlockExpressionNode, ElementDeclarationNode, FunctionApplicationNode } from '../../../parser/nodes';
3
+ import { default as SymbolFactory } from '../../symbol/factory';
4
+ import { SyntaxToken } from '../../../lexer/tokens';
5
+ import { ElementValidator } from '../types';
6
+ import { default as SymbolTable } from '../../../analyzer/symbol/symbolTable';
7
+
8
+ export default class CustomValidator implements ElementValidator {
9
+ private declarationNode;
10
+ private publicSymbolTable;
11
+ private symbolFactory;
12
+ constructor(declarationNode: ElementDeclarationNode & {
13
+ type: SyntaxToken;
14
+ }, publicSymbolTable: SymbolTable, symbolFactory: SymbolFactory);
15
+ validate(): CompileError[];
16
+ private validateContext;
17
+ private validateName;
18
+ private validateAlias;
19
+ private validateSettingList;
20
+ validateBody(body?: FunctionApplicationNode | BlockExpressionNode): CompileError[];
21
+ }
@@ -0,0 +1,26 @@
1
+ import { default as SymbolFactory } from '../../symbol/factory';
2
+ import { CompileError } from '../../../errors';
3
+ import { BlockExpressionNode, ElementDeclarationNode, FunctionApplicationNode, ListExpressionNode } from '../../../parser/nodes';
4
+ import { SyntaxToken } from '../../../lexer/tokens';
5
+ import { ElementValidator } from '../types';
6
+ import { default as SymbolTable } from '../../../analyzer/symbol/symbolTable';
7
+
8
+ export default class EnumValidator implements ElementValidator {
9
+ private declarationNode;
10
+ private publicSymbolTable;
11
+ private symbolFactory;
12
+ constructor(declarationNode: ElementDeclarationNode & {
13
+ type: SyntaxToken;
14
+ }, publicSymbolTable: SymbolTable, symbolFactory: SymbolFactory);
15
+ validate(): CompileError[];
16
+ private validateContext;
17
+ private validateName;
18
+ private validateAlias;
19
+ registerElement(): CompileError[];
20
+ private validateSettingList;
21
+ validateBody(body?: FunctionApplicationNode | BlockExpressionNode): CompileError[];
22
+ validateFields(fields: FunctionApplicationNode[]): CompileError[];
23
+ validateFieldSettings(settings: ListExpressionNode): CompileError[];
24
+ private validateSubElements;
25
+ registerField(field: FunctionApplicationNode): CompileError[];
26
+ }
@@ -0,0 +1,25 @@
1
+ import { default as SymbolFactory } from '../../symbol/factory';
2
+ import { CompileError } from '../../../errors';
3
+ import { ElementDeclarationNode, SyntaxNode } from '../../../parser/nodes';
4
+ import { SyntaxToken } from '../../../lexer/tokens';
5
+ import { ElementValidator } from '../types';
6
+ import { default as SymbolTable } from '../../../analyzer/symbol/symbolTable';
7
+
8
+ export default class IndexesValidator implements ElementValidator {
9
+ private declarationNode;
10
+ private publicSymbolTable;
11
+ private symbolFactory;
12
+ constructor(declarationNode: ElementDeclarationNode & {
13
+ type: SyntaxToken;
14
+ }, publicSymbolTable: SymbolTable, symbolFactory: SymbolFactory);
15
+ validate(): CompileError[];
16
+ private validateContext;
17
+ private validateName;
18
+ private validateAlias;
19
+ private validateSettingList;
20
+ private validateBody;
21
+ private validateFields;
22
+ private validateFieldSetting;
23
+ private validateSubElements;
24
+ }
25
+ export declare function isValidIndexesType(value?: SyntaxNode): boolean;
@@ -0,0 +1,23 @@
1
+ import { default as SymbolFactory } from '../../symbol/factory';
2
+ import { CompileError } from '../../../errors';
3
+ import { BlockExpressionNode, ElementDeclarationNode, FunctionApplicationNode } from '../../../parser/nodes';
4
+ import { SyntaxToken } from '../../../lexer/tokens';
5
+ import { ElementValidator } from '../types';
6
+ import { default as SymbolTable } from '../../../analyzer/symbol/symbolTable';
7
+
8
+ export default class NoteValidator implements ElementValidator {
9
+ private declarationNode;
10
+ private publicSymbolTable;
11
+ private symbolFactory;
12
+ constructor(declarationNode: ElementDeclarationNode & {
13
+ type: SyntaxToken;
14
+ }, publicSymbolTable: SymbolTable, symbolFactory: SymbolFactory);
15
+ validate(): CompileError[];
16
+ private validateContext;
17
+ private validateName;
18
+ private validateAlias;
19
+ private validateSettingList;
20
+ validateBody(body?: FunctionApplicationNode | BlockExpressionNode): CompileError[];
21
+ validateFields(fields: FunctionApplicationNode[]): CompileError[];
22
+ private validateSubElements;
23
+ }
@@ -0,0 +1,22 @@
1
+ import { default as SymbolFactory } from '../../symbol/factory';
2
+ import { CompileError } from '../../../errors';
3
+ import { BlockExpressionNode, ElementDeclarationNode, FunctionApplicationNode } from '../../../parser/nodes';
4
+ import { SyntaxToken } from '../../../lexer/tokens';
5
+ import { ElementValidator } from '../types';
6
+ import { default as SymbolTable } from '../../../analyzer/symbol/symbolTable';
7
+
8
+ export default class ProjectValidator implements ElementValidator {
9
+ private declarationNode;
10
+ private publicSymbolTable;
11
+ private symbolFactory;
12
+ constructor(declarationNode: ElementDeclarationNode & {
13
+ type: SyntaxToken;
14
+ }, publicSymbolTable: SymbolTable, symbolFactory: SymbolFactory);
15
+ validate(): CompileError[];
16
+ private validateContext;
17
+ private validateName;
18
+ private validateAlias;
19
+ private validateSettingList;
20
+ validateBody(body?: FunctionApplicationNode | BlockExpressionNode): CompileError[];
21
+ private validateSubElements;
22
+ }
@@ -0,0 +1,24 @@
1
+ import { SyntaxToken } from '../../../lexer/tokens';
2
+ import { default as SymbolFactory } from '../../symbol/factory';
3
+ import { CompileError } from '../../../errors';
4
+ import { BlockExpressionNode, ElementDeclarationNode, FunctionApplicationNode, ListExpressionNode } from '../../../parser/nodes';
5
+ import { ElementValidator } from '../types';
6
+ import { default as SymbolTable } from '../../../analyzer/symbol/symbolTable';
7
+
8
+ export default class RefValidator implements ElementValidator {
9
+ private declarationNode;
10
+ private publicSymbolTable;
11
+ private symbolFactory;
12
+ constructor(declarationNode: ElementDeclarationNode & {
13
+ type: SyntaxToken;
14
+ }, publicSymbolTable: SymbolTable, symbolFactory: SymbolFactory);
15
+ validate(): CompileError[];
16
+ private validateContext;
17
+ private validateName;
18
+ private validateAlias;
19
+ private validateSettingList;
20
+ validateBody(body?: FunctionApplicationNode | BlockExpressionNode): CompileError[];
21
+ validateFields(fields: FunctionApplicationNode[]): CompileError[];
22
+ validateFieldSettings(settings: ListExpressionNode): CompileError[];
23
+ private validateSubElements;
24
+ }
@@ -0,0 +1,26 @@
1
+ import { default as SymbolFactory } from '../../symbol/factory';
2
+ import { CompileError } from '../../../errors';
3
+ import { BlockExpressionNode, ElementDeclarationNode, ExpressionNode, FunctionApplicationNode } from '../../../parser/nodes';
4
+ import { ElementValidator } from '../types';
5
+ import { SyntaxToken } from '../../../lexer/tokens';
6
+ import { default as SymbolTable } from '../../../analyzer/symbol/symbolTable';
7
+
8
+ export default class TableValidator implements ElementValidator {
9
+ private declarationNode;
10
+ private symbolFactory;
11
+ private publicSymbolTable;
12
+ constructor(declarationNode: ElementDeclarationNode & {
13
+ type: SyntaxToken;
14
+ }, publicSymbolTable: SymbolTable, symbolFactory: SymbolFactory);
15
+ validate(): CompileError[];
16
+ private validateContext;
17
+ private validateName;
18
+ private validateAlias;
19
+ private validateSettingList;
20
+ registerElement(): CompileError[];
21
+ validateBody(body?: FunctionApplicationNode | BlockExpressionNode): CompileError[];
22
+ validateFields(fields: FunctionApplicationNode[]): CompileError[];
23
+ registerField(field: FunctionApplicationNode): CompileError[];
24
+ validateFieldSetting(parts: ExpressionNode[]): CompileError[];
25
+ private validateSubElements;
26
+ }
@@ -0,0 +1,25 @@
1
+ import { CompileError } from '../../../errors';
2
+ import { ElementValidator } from '../types';
3
+ import { default as SymbolTable } from '../../../analyzer/symbol/symbolTable';
4
+ import { SyntaxToken } from '../../../lexer/tokens';
5
+ import { BlockExpressionNode, ElementDeclarationNode, FunctionApplicationNode } from '../../../parser/nodes';
6
+ import { default as SymbolFactory } from '../../../analyzer/symbol/factory';
7
+
8
+ export default class TableGroupValidator implements ElementValidator {
9
+ private declarationNode;
10
+ private publicSymbolTable;
11
+ private symbolFactory;
12
+ constructor(declarationNode: ElementDeclarationNode & {
13
+ type: SyntaxToken;
14
+ }, publicSymbolTable: SymbolTable, symbolFactory: SymbolFactory);
15
+ validate(): CompileError[];
16
+ private validateContext;
17
+ private validateName;
18
+ private validateAlias;
19
+ registerElement(): CompileError[];
20
+ private validateSettingList;
21
+ validateBody(body?: FunctionApplicationNode | BlockExpressionNode): CompileError[];
22
+ validateFields(fields: FunctionApplicationNode[]): CompileError[];
23
+ private validateSubElements;
24
+ registerField(field: FunctionApplicationNode): CompileError[];
25
+ }
@@ -0,0 +1,54 @@
1
+ import { SyntaxToken, SyntaxTokenKind } from '../../lexer/tokens';
2
+ import { AttributeNode, BlockExpressionNode, ElementDeclarationNode, ListExpressionNode, LiteralNode, PrefixExpressionNode, PrimaryExpressionNode, SyntaxNode, TupleExpressionNode, VariableNode } from '../../parser/nodes';
3
+ import { default as CustomValidator } from './elementValidators/custom';
4
+ import { default as EnumValidator } from './elementValidators/enum';
5
+ import { default as IndexesValidator } from './elementValidators/indexes';
6
+ import { default as NoteValidator } from './elementValidators/note';
7
+ import { default as ProjectValidator } from './elementValidators/project';
8
+ import { default as RefValidator } from './elementValidators/ref';
9
+ import { default as TableValidator } from './elementValidators/table';
10
+ import { default as TableGroupValidator } from './elementValidators/tableGroup';
11
+ import { default as SymbolTable } from '../symbol/symbolTable';
12
+ import { default as SymbolFactory } from '../symbol/factory';
13
+ import { default as Report } from '../../report';
14
+ import { CompileError } from '../../errors';
15
+
16
+ export declare function pickValidator(element: ElementDeclarationNode & {
17
+ type: SyntaxToken;
18
+ }): typeof CustomValidator | typeof EnumValidator | typeof TableValidator | typeof TableGroupValidator | typeof ProjectValidator | typeof RefValidator | typeof NoteValidator | typeof IndexesValidator;
19
+ export declare function isValidName(nameNode: SyntaxNode): boolean;
20
+ export declare function isValidAlias(aliasNode: SyntaxNode): aliasNode is PrimaryExpressionNode & {
21
+ expression: VariableNode;
22
+ };
23
+ export declare function isSimpleName(nameNode: SyntaxNode): nameNode is PrimaryExpressionNode & {
24
+ expression: VariableNode;
25
+ };
26
+ export declare function isValidSettingList(settingListNode: SyntaxNode): settingListNode is ListExpressionNode;
27
+ export declare function hasComplexBody(node: ElementDeclarationNode): node is ElementDeclarationNode & {
28
+ body: BlockExpressionNode;
29
+ bodyColon: undefined;
30
+ };
31
+ export declare function hasSimpleBody(node: ElementDeclarationNode): node is ElementDeclarationNode & {
32
+ bodyColon: SyntaxToken;
33
+ };
34
+ export declare function registerSchemaStack(variables: string[], globalSchema: SymbolTable, symbolFactory: SymbolFactory): SymbolTable;
35
+ export declare function isRelationshipOp(op?: string): boolean;
36
+ export declare function isValidColor(value?: SyntaxNode): boolean;
37
+ export declare function isVoid(value?: SyntaxNode): boolean;
38
+ export declare function isValidDefaultValue(value?: SyntaxNode): boolean;
39
+ export declare function isExpressionANumber(value?: SyntaxNode): value is PrimaryExpressionNode & {
40
+ expression: LiteralNode & {
41
+ literal: {
42
+ kind: SyntaxTokenKind.NUMERIC_LITERAL;
43
+ };
44
+ };
45
+ };
46
+ export declare function isUnaryRelationship(value?: SyntaxNode): value is PrefixExpressionNode;
47
+ export declare function isTupleOfVariables(value?: SyntaxNode): value is TupleExpressionNode & {
48
+ elementList: (PrimaryExpressionNode & {
49
+ expression: VariableNode;
50
+ })[];
51
+ };
52
+ export declare function aggregateSettingList(settingList?: ListExpressionNode): Report<{
53
+ [index: string]: AttributeNode[];
54
+ }, CompileError>;
@@ -0,0 +1,12 @@
1
+ import { default as Report } from '../../report';
2
+ import { CompileError } from '../../errors';
3
+ import { ProgramNode } from '../../parser/nodes';
4
+ import { default as SymbolFactory } from '../symbol/factory';
5
+
6
+ export default class Validator {
7
+ private ast;
8
+ private publicSchemaSymbol;
9
+ private symbolFactory;
10
+ constructor(ast: ProgramNode, symbolFactory: SymbolFactory);
11
+ validate(): Report<ProgramNode, CompileError>;
12
+ }
@@ -0,0 +1,92 @@
1
+ import { SyntaxToken } from './lexer/tokens';
2
+ import { SyntaxNode } from './parser/nodes';
3
+
4
+ export declare enum CompileErrorCode {
5
+ UNKNOWN_SYMBOL = 1000,
6
+ UNEXPECTED_SYMBOL = 1001,
7
+ UNEXPECTED_EOF = 1002,
8
+ UNEXPECTED_NEWLINE = 1003,
9
+ UNKNOWN_TOKEN = 1004,
10
+ UNEXPECTED_TOKEN = 1005,
11
+ UNEXPECTED_ELEMENT_DECLARATION = 1006,
12
+ MISSING_SPACES = 1007,
13
+ UNKNOWN_PREFIX_OP = 1008,
14
+ INVALID_OPERAND = 1009,
15
+ EMPTY_ATTRIBUTE_NAME = 1010,
16
+ INVALID_ESCAPE_SEQUENCE = 1011,
17
+ INVALID_NAME = 3000,
18
+ UNEXPECTED_NAME = 3001,
19
+ NAME_NOT_FOUND = 3002,
20
+ DUPLICATE_NAME = 3003,
21
+ INVALID_ALIAS = 3004,
22
+ UNEXPECTED_ALIAS = 3005,
23
+ UNEXPECTED_SETTINGS = 3006,
24
+ INVALID_SETTINGS = 3007,
25
+ UNEXPECTED_SIMPLE_BODY = 3008,
26
+ UNEXPECTED_COMPLEX_BODY = 3009,
27
+ INVALID_TABLE_CONTEXT = 3010,
28
+ INVALID_TABLE_SETTING = 3011,
29
+ DUPLICATE_TABLE_SETTING = 3012,
30
+ INVALID_TABLEGROUP_CONTEXT = 3013,
31
+ INVALID_TABLEGROUP_ELEMENT_NAME = 3014,
32
+ DUPLICATE_TABLEGROUP_ELEMENT_NAME = 3015,
33
+ DUPLICATE_TABLEGROUP_FIELD_NAME = 3016,
34
+ INVALID_TABLEGROUP_FIELD = 3017,
35
+ EMPTY_TABLE = 3018,
36
+ INVALID_COLUMN = 3019,
37
+ INVALID_COLUMN_NAME = 3020,
38
+ UNKNOWN_COLUMN_SETTING = 3021,
39
+ INVALID_COLUMN_TYPE = 3022,
40
+ DUPLICATE_COLUMN_NAME = 3023,
41
+ DUPLICATE_COLUMN_SETTING = 3024,
42
+ INVALID_COLUMN_SETTING_VALUE = 3025,
43
+ INVALID_ENUM_CONTEXT = 3026,
44
+ INVALID_ENUM_ELEMENT_NAME = 3027,
45
+ INVALID_ENUM_ELEMENT = 3028,
46
+ DUPLICATE_ENUM_ELEMENT_NAME = 3029,
47
+ UNKNOWN_ENUM_ELEMENT_SETTING = 3030,
48
+ DUPLICATE_ENUM_ELEMENT_SETTING = 3031,
49
+ INVALID_ENUM_ELEMENT_SETTING = 3032,
50
+ EMPTY_ENUM = 3033,
51
+ INVALID_REF_CONTEXT = 3034,
52
+ UNKNOWN_REF_SETTING = 3035,
53
+ DUPLICATE_REF_SETTING = 3036,
54
+ INVALID_REF_SETTING_VALUE = 3037,
55
+ INVALID_REF_RELATIONSHIP = 3038,
56
+ INVALID_REF_FIELD = 3039,
57
+ EMPTY_REF = 3040,
58
+ REF_REDEFINED = 3041,
59
+ INVALID_NOTE_CONTEXT = 3042,
60
+ INVALID_NOTE = 3043,
61
+ NOTE_REDEFINED = 3044,
62
+ NOTE_CONTENT_REDEFINED = 3045,
63
+ EMPTY_NOTE = 3046,
64
+ INVALID_INDEXES_CONTEXT = 3047,
65
+ INVALID_INDEXES_FIELD = 3048,
66
+ INVALID_INDEX = 3049,
67
+ UNKNOWN_INDEX_SETTING = 3050,
68
+ DUPLICATE_INDEX_SETTING = 3051,
69
+ UNEXPECTED_INDEX_SETTING_VALUE = 3052,
70
+ INVALID_INDEX_SETTING_VALUE = 3053,
71
+ INVALID_PROJECT_CONTEXT = 3054,
72
+ PROJECT_REDEFINED = 3055,
73
+ INVALID_PROJECT_FIELD = 3056,
74
+ INVALID_CUSTOM_CONTEXT = 3057,
75
+ INVALID_CUSTOM_ELEMENT_VALUE = 3058,
76
+ INVALID_ELEMENT_IN_SIMPLE_BODY = 3059,
77
+ BINDING_ERROR = 4000,
78
+ UNSUPPORTED = 5000,
79
+ CIRCULAR_REF = 5001,
80
+ SAME_ENDPOINT = 5002,
81
+ UNEQUAL_FIELDS_BINARY_REF = 5003,
82
+ CONFLICTING_SETTING = 5004,
83
+ TABLE_REAPPEAR_IN_TABLEGROUP = 5005
84
+ }
85
+ export declare class CompileError extends Error {
86
+ code: Readonly<CompileErrorCode>;
87
+ diagnostic: Readonly<string>;
88
+ nodeOrToken: Readonly<SyntaxNode | SyntaxToken | readonly (SyntaxNode | SyntaxToken)[]>;
89
+ start: Readonly<number>;
90
+ end: Readonly<number>;
91
+ constructor(code: number, message: string, nodeOrToken: SyntaxNode | SyntaxToken);
92
+ }
@@ -0,0 +1,13 @@
1
+ import { CompileError } from '../../errors';
2
+ import { ElementDeclarationNode } from '../../parser/nodes';
3
+ import { ElementInterpreter, InterpreterDatabase } from '../types';
4
+
5
+ export declare class EnumInterpreter implements ElementInterpreter {
6
+ private declarationNode;
7
+ private env;
8
+ private enum;
9
+ constructor(declarationNode: ElementDeclarationNode, env: InterpreterDatabase);
10
+ interpret(): CompileError[];
11
+ private interpretName;
12
+ private interpretBody;
13
+ }
@@ -0,0 +1,13 @@
1
+ import { CompileError } from '../../errors';
2
+ import { ElementDeclarationNode } from '../../parser/nodes';
3
+ import { ElementInterpreter, InterpreterDatabase } from '../types';
4
+
5
+ export declare class ProjectInterpreter implements ElementInterpreter {
6
+ private declarationNode;
7
+ private env;
8
+ private project;
9
+ constructor(declarationNode: ElementDeclarationNode, env: InterpreterDatabase);
10
+ interpret(): CompileError[];
11
+ private interpretName;
12
+ private interpretBody;
13
+ }
@@ -0,0 +1,15 @@
1
+ import { CompileError } from '../../errors';
2
+ import { ElementDeclarationNode } from '../../parser/nodes';
3
+ import { ElementInterpreter, InterpreterDatabase } from '../types';
4
+
5
+ export declare class RefInterpreter implements ElementInterpreter {
6
+ private declarationNode;
7
+ private env;
8
+ private container;
9
+ private ref;
10
+ constructor(declarationNode: ElementDeclarationNode, env: InterpreterDatabase);
11
+ interpret(): CompileError[];
12
+ private interpretName;
13
+ private interpretBody;
14
+ private interpretField;
15
+ }
@@ -0,0 +1,15 @@
1
+ import { ElementInterpreter, InterpreterDatabase } from '../types';
2
+ import { ElementDeclarationNode } from '../../parser/nodes';
3
+ import { CompileError } from '../../errors';
4
+
5
+ export declare class StickyNoteInterpreter implements ElementInterpreter {
6
+ private declarationNode;
7
+ private env;
8
+ private note;
9
+ constructor(declarationNode: ElementDeclarationNode, env: InterpreterDatabase);
10
+ interpret(): CompileError[];
11
+ private interpretName;
12
+ private interpretSettingList;
13
+ private interpretBody;
14
+ private interpretNote;
15
+ }
@@ -0,0 +1,21 @@
1
+ import { ElementInterpreter, InterpreterDatabase } from '../types';
2
+ import { ElementDeclarationNode } from '../../parser/nodes';
3
+ import { CompileError } from '../../errors';
4
+
5
+ export declare class TableInterpreter implements ElementInterpreter {
6
+ private declarationNode;
7
+ private env;
8
+ private table;
9
+ private pkColumns;
10
+ constructor(declarationNode: ElementDeclarationNode, env: InterpreterDatabase);
11
+ interpret(): CompileError[];
12
+ private interpretName;
13
+ private interpretAlias;
14
+ private interpretSettingList;
15
+ private interpretBody;
16
+ private interpretSubElements;
17
+ private interpretFields;
18
+ private interpretColumn;
19
+ private interpretIndexes;
20
+ private registerInlineRefToEnv;
21
+ }
@@ -0,0 +1,13 @@
1
+ import { CompileError } from '../../errors';
2
+ import { ElementDeclarationNode } from '../../parser/nodes';
3
+ import { ElementInterpreter, InterpreterDatabase } from '../types';
4
+
5
+ export declare class TableGroupInterpreter implements ElementInterpreter {
6
+ private declarationNode;
7
+ private env;
8
+ private tableGroup;
9
+ constructor(declarationNode: ElementDeclarationNode, env: InterpreterDatabase);
10
+ interpret(): CompileError[];
11
+ private interpretName;
12
+ private interpretBody;
13
+ }
@@ -0,0 +1,11 @@
1
+ import { ProgramNode } from '../parser/nodes';
2
+ import { CompileError } from '../errors';
3
+ import { Database, InterpreterDatabase } from './types';
4
+ import { default as Report } from '../report';
5
+
6
+ export default class Interpreter {
7
+ ast: ProgramNode;
8
+ env: InterpreterDatabase;
9
+ constructor(ast: ProgramNode);
10
+ interpret(): Report<Database, CompileError>;
11
+ }
@@ -0,0 +1,29 @@
1
+ import { ColumnSymbol } from '../analyzer/symbol/symbols';
2
+ import { LiteralNode, PrimaryExpressionNode, SyntaxNode } from '../parser/nodes';
3
+ import { RelationCardinality, Table, TokenPosition } from './types';
4
+ import { SyntaxTokenKind } from '../lexer/tokens';
5
+
6
+ export declare function extractNamesFromRefOperand(operand: SyntaxNode, owner?: Table): {
7
+ schemaName: string | null;
8
+ tableName: string;
9
+ fieldNames: string[];
10
+ };
11
+ export declare function getMultiplicities(op: string): [RelationCardinality, RelationCardinality];
12
+ export declare function getTokenPosition(node: SyntaxNode): TokenPosition;
13
+ export declare function getColumnSymbolsOfRefOperand(ref: SyntaxNode): ColumnSymbol[];
14
+ export declare function extractElementName(nameNode: SyntaxNode): {
15
+ schemaName: string[];
16
+ name: string;
17
+ };
18
+ export declare function extractColor(node: PrimaryExpressionNode & {
19
+ expression: LiteralNode;
20
+ } & {
21
+ literal: {
22
+ kind: SyntaxTokenKind.COLOR_LITERAL;
23
+ };
24
+ }): string;
25
+ export declare function getRefId(sym1: ColumnSymbol, sym2: ColumnSymbol): string;
26
+ export declare function getRefId(sym1: ColumnSymbol[], sym2: ColumnSymbol[]): string;
27
+ export declare function isSameEndpoint(sym1: ColumnSymbol, sym2: ColumnSymbol): boolean;
28
+ export declare function isSameEndpoint(sym1: ColumnSymbol[], sym2: ColumnSymbol[]): boolean;
29
+ export declare function normalizeNoteContent(content: string): string;