@rsconcept/domain 1.0.0 → 1.1.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 (183) hide show
  1. package/README.md +3 -3
  2. package/dist/analyzer-DlSq3Y3r.d.ts +39 -0
  3. package/dist/arguments-extractor-1acwjQNc.d.ts +38 -0
  4. package/dist/ast-C8sIpKdL.d.ts +51 -0
  5. package/dist/ast-annotations-BiMjkKvz.d.ts +16 -0
  6. package/dist/branded-ZlzIcxzu.d.ts +9 -0
  7. package/dist/calculator-C9W2jkSx.d.ts +39 -0
  8. package/dist/cctext/index.d.ts +2 -1
  9. package/dist/cctext/index.js +2 -42
  10. package/dist/cctext/language-api.d.ts +10 -12
  11. package/dist/cctext/language-api.js +157 -227
  12. package/dist/cctext/language-api.js.map +1 -1
  13. package/dist/cctext/language.d.ts +24 -22
  14. package/dist/cctext/language.js +43 -39
  15. package/dist/cctext/language.js.map +1 -1
  16. package/dist/error-E1LVq_3w.d.ts +87 -0
  17. package/dist/graph/graph.d.ts +2 -62
  18. package/dist/graph/graph.js +339 -382
  19. package/dist/graph/graph.js.map +1 -1
  20. package/dist/graph/index.d.ts +2 -1
  21. package/dist/graph/index.js +2 -384
  22. package/dist/graph-DR8rL2o3.d.ts +64 -0
  23. package/dist/hash-Y8I4c6Al.d.ts +8 -0
  24. package/dist/index-BKZ67WMa.d.ts +1 -0
  25. package/dist/index-BVVgDSdq.d.ts +1 -0
  26. package/dist/index-DmtQKWjk.d.ts +1 -0
  27. package/dist/index-_6s0AX1B.d.ts +1 -0
  28. package/dist/index.d.ts +27 -28
  29. package/dist/index.js +23 -5851
  30. package/dist/lezer-tree-iS7LpLBJ.d.ts +14 -0
  31. package/dist/library/folder-tree.d.ts +22 -20
  32. package/dist/library/folder-tree.js +108 -130
  33. package/dist/library/folder-tree.js.map +1 -1
  34. package/dist/library/index.d.ts +8 -17
  35. package/dist/library/index.js +7 -2800
  36. package/dist/library/library-api.d.ts +3 -1
  37. package/dist/library/library-api.js +9 -8
  38. package/dist/library/library-api.js.map +1 -1
  39. package/dist/library/library.d.ts +2 -56
  40. package/dist/library/library.js +23 -19
  41. package/dist/library/library.js.map +1 -1
  42. package/dist/library/oss-api.d.ts +26 -37
  43. package/dist/library/oss-api.js +257 -1096
  44. package/dist/library/oss-api.js.map +1 -1
  45. package/dist/library/oss-layout-api.d.ts +28 -28
  46. package/dist/library/oss-layout-api.js +239 -316
  47. package/dist/library/oss-layout-api.js.map +1 -1
  48. package/dist/library/oss-layout.d.ts +2 -25
  49. package/dist/library/oss-layout.js +1 -1
  50. package/dist/library/oss.d.ts +87 -89
  51. package/dist/library/oss.js +27 -26
  52. package/dist/library/oss.js.map +1 -1
  53. package/dist/library/rsengine.d.ts +100 -106
  54. package/dist/library/rsengine.js +439 -2599
  55. package/dist/library/rsengine.js.map +1 -1
  56. package/dist/library/rsform-api.d.ts +11 -16
  57. package/dist/library/rsform-api.js +313 -825
  58. package/dist/library/rsform-api.js.map +1 -1
  59. package/dist/library/rsform.d.ts +159 -167
  60. package/dist/library/rsform.js +29 -28
  61. package/dist/library/rsform.js.map +1 -1
  62. package/dist/library/rsmodel-api.d.ts +8 -15
  63. package/dist/library/rsmodel-api.js +172 -813
  64. package/dist/library/rsmodel-api.js.map +1 -1
  65. package/dist/library/rsmodel.d.ts +27 -33
  66. package/dist/library/rsmodel.js +16 -23
  67. package/dist/library/rsmodel.js.map +1 -1
  68. package/dist/library/structure-planner.d.ts +20 -26
  69. package/dist/library/structure-planner.js +106 -474
  70. package/dist/library/structure-planner.js.map +1 -1
  71. package/dist/library-CYun28Xz.d.ts +58 -0
  72. package/dist/oss-layout-3glgAqfn.d.ts +27 -0
  73. package/dist/parser-Bwd8LxJ1.d.ts +7 -0
  74. package/dist/parsing/ast.d.ts +2 -49
  75. package/dist/parsing/ast.js +68 -76
  76. package/dist/parsing/ast.js.map +1 -1
  77. package/dist/parsing/index.d.ts +3 -3
  78. package/dist/parsing/index.js +3 -141
  79. package/dist/parsing/lezer-tree.d.ts +2 -13
  80. package/dist/parsing/lezer-tree.js +50 -43
  81. package/dist/parsing/lezer-tree.js.map +1 -1
  82. package/dist/rslang/api.d.ts +9 -14
  83. package/dist/rslang/api.js +114 -827
  84. package/dist/rslang/api.js.map +1 -1
  85. package/dist/rslang/ast-annotations.d.ts +2 -18
  86. package/dist/rslang/ast-annotations.js +34 -45
  87. package/dist/rslang/ast-annotations.js.map +1 -1
  88. package/dist/rslang/error.d.ts +2 -85
  89. package/dist/rslang/error.js +88 -150
  90. package/dist/rslang/error.js.map +1 -1
  91. package/dist/rslang/eval/calculator.d.ts +2 -43
  92. package/dist/rslang/eval/calculator.js +81 -1636
  93. package/dist/rslang/eval/calculator.js.map +1 -1
  94. package/dist/rslang/eval/evaluation-cache.d.ts +22 -26
  95. package/dist/rslang/eval/evaluation-cache.js +168 -287
  96. package/dist/rslang/eval/evaluation-cache.js.map +1 -1
  97. package/dist/rslang/eval/evaluator.d.ts +59 -63
  98. package/dist/rslang/eval/evaluator.js +602 -1509
  99. package/dist/rslang/eval/evaluator.js.map +1 -1
  100. package/dist/rslang/eval/value-api.d.ts +2 -48
  101. package/dist/rslang/eval/value-api.js +2 -490
  102. package/dist/rslang/eval/value.d.ts +2 -36
  103. package/dist/rslang/eval/value.js +2 -118
  104. package/dist/rslang/index.d.ts +14 -17
  105. package/dist/rslang/index.js +12 -4314
  106. package/dist/rslang/labels.d.ts +6 -6
  107. package/dist/rslang/labels.js +139 -305
  108. package/dist/rslang/labels.js.map +1 -1
  109. package/dist/rslang/parser/expression-generator.d.ts +5 -5
  110. package/dist/rslang/parser/expression-generator.js +248 -446
  111. package/dist/rslang/parser/expression-generator.js.map +1 -1
  112. package/dist/rslang/parser/normalize.d.ts +4 -8
  113. package/dist/rslang/parser/normalize.js +286 -481
  114. package/dist/rslang/parser/normalize.js.map +1 -1
  115. package/dist/rslang/parser/parser.d.ts +2 -5
  116. package/dist/rslang/parser/parser.js +30 -21
  117. package/dist/rslang/parser/parser.js.map +1 -1
  118. package/dist/rslang/parser/parser.terms.d.ts +43 -41
  119. package/dist/rslang/parser/parser.terms.js +44 -83
  120. package/dist/rslang/parser/parser.terms.js.map +1 -1
  121. package/dist/rslang/parser/syntax-errors.d.ts +5 -8
  122. package/dist/rslang/parser/syntax-errors.js +113 -382
  123. package/dist/rslang/parser/syntax-errors.js.map +1 -1
  124. package/dist/rslang/parser/token.d.ts +2 -79
  125. package/dist/rslang/parser/token.js +81 -93
  126. package/dist/rslang/parser/token.js.map +1 -1
  127. package/dist/rslang/semantic/analyzer.d.ts +2 -39
  128. package/dist/rslang/semantic/analyzer.js +186 -2600
  129. package/dist/rslang/semantic/analyzer.js.map +1 -1
  130. package/dist/rslang/semantic/arguments-extractor.d.ts +2 -42
  131. package/dist/rslang/semantic/arguments-extractor.js +202 -361
  132. package/dist/rslang/semantic/arguments-extractor.js.map +1 -1
  133. package/dist/rslang/semantic/type-auditor.d.ts +64 -68
  134. package/dist/rslang/semantic/type-auditor.js +594 -1564
  135. package/dist/rslang/semantic/type-auditor.js.map +1 -1
  136. package/dist/rslang/semantic/typification-api.d.ts +4 -7
  137. package/dist/rslang/semantic/typification-api.js +162 -303
  138. package/dist/rslang/semantic/typification-api.js.map +1 -1
  139. package/dist/rslang/semantic/typification-parser.d.ts +2 -12
  140. package/dist/rslang/semantic/typification-parser.js +165 -219
  141. package/dist/rslang/semantic/typification-parser.js.map +1 -1
  142. package/dist/rslang/semantic/typification.d.ts +2 -119
  143. package/dist/rslang/semantic/typification.js +66 -52
  144. package/dist/rslang/semantic/typification.js.map +1 -1
  145. package/dist/rslang/semantic/value-auditor.d.ts +32 -38
  146. package/dist/rslang/semantic/value-auditor.js +206 -518
  147. package/dist/rslang/semantic/value-auditor.js.map +1 -1
  148. package/dist/rslang/semantic/value-class.d.ts +2 -10
  149. package/dist/rslang/semantic/value-class.js +8 -7
  150. package/dist/rslang/semantic/value-class.js.map +1 -1
  151. package/dist/rslang/typification-graph.d.ts +2 -33
  152. package/dist/rslang/typification-graph.js +94 -306
  153. package/dist/rslang/typification-graph.js.map +1 -1
  154. package/dist/shared/branded.d.ts +2 -7
  155. package/dist/shared/branded.js +1 -1
  156. package/dist/shared/hash.d.ts +2 -6
  157. package/dist/shared/hash.js +13 -13
  158. package/dist/shared/hash.js.map +1 -1
  159. package/dist/shared/index.d.ts +3 -2
  160. package/dist/shared/index.js +2 -18
  161. package/dist/token-DeXAmzwr.d.ts +81 -0
  162. package/dist/typification-Dk-fisgO.d.ts +120 -0
  163. package/dist/typification-graph-6HcZ-rKH.d.ts +30 -0
  164. package/dist/typification-parser-BBVx1RxP.d.ts +13 -0
  165. package/dist/value-B8UtCqaK.js +366 -0
  166. package/dist/value-B8UtCqaK.js.map +1 -0
  167. package/dist/value-CTjX6825.d.ts +33 -0
  168. package/dist/value-api-Bw-SgaYY.d.ts +49 -0
  169. package/dist/value-class-CNI-lqXJ.d.ts +12 -0
  170. package/package.json +8 -8
  171. package/src/library/rsform-api.test.ts +24 -0
  172. package/src/library/rsform-api.ts +12 -4
  173. package/dist/cctext/index.js.map +0 -1
  174. package/dist/graph/index.js.map +0 -1
  175. package/dist/index.js.map +0 -1
  176. package/dist/library/index.js.map +0 -1
  177. package/dist/library/oss-layout.js.map +0 -1
  178. package/dist/parsing/index.js.map +0 -1
  179. package/dist/rslang/eval/value-api.js.map +0 -1
  180. package/dist/rslang/eval/value.js.map +0 -1
  181. package/dist/rslang/index.js.map +0 -1
  182. package/dist/shared/branded.js.map +0 -1
  183. package/dist/shared/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rslang/semantic/typification.ts","../../src/parsing/ast.ts","../../src/rslang/parser/token.ts","../../src/rslang/labels.ts","../../src/rslang/typification-graph.ts"],"sourcesContent":["/*\n * Module: Typification for RSLang.\n */\n\nimport { type Branded } from '../../shared';\n\n/** Typification structure enumeration. */\nexport const TypeID = {\n anyTypification: 1,\n integer: 2,\n basic: 3,\n tuple: 4,\n collection: 5,\n logic: 6,\n function: 7,\n predicate: 8\n} as const;\nexport type TypeID = (typeof TypeID)[keyof typeof TypeID];\n\n/** Represents type class. */\nexport const TypeClass = {\n logic: 1,\n typification: 2,\n function: 3,\n predicate: 4\n} as const;\nexport type TypeClass = (typeof TypeClass)[keyof typeof TypeClass];\n\n/** Logic type object. */\nexport const LogicT = { typeID: TypeID.logic } as const;\n\n/** Integer type object. */\nexport const IntegerT = {\n typeID: TypeID.integer,\n isOrdered: true,\n isArithmetic: true,\n isIntegerCompatible: true\n} as const;\n\n/** Type transformation path. */\nexport type TypePath = Branded<number[], 'TypePath'>;\n\n/** Creates type path. */\nexport function makeTypePath(path: number[]): TypePath {\n return path as TypePath;\n}\n\n/** AnyTyped type object. */\nexport const AnyTypificationT = { typeID: TypeID.anyTypification } as const;\n\n/** Empty set typification. */\nexport const EmptySetT = bool(AnyTypificationT);\n\n/** Parametrized typification. */\nexport type Parametrized = EchelonFunctional | EchelonPredicate;\n\n/** General expression types. */\nexport type ExpressionType =\n | EchelonLogic\n | EchelonBase\n | EchelonTuple\n | EchelonCollection\n | EchelonFunctional\n | EchelonPredicate\n | EchelonAnyTyped\n | EchelonInteger;\n\n/** Setexpr type. */\nexport type Typification = EchelonBase | EchelonAnyTyped | EchelonInteger | EchelonCollection | EchelonTuple;\n\n/** Typification context. */\nexport type TypeContext = Map<string, ExpressionType>;\n\n/** Functional argument. */\nexport interface Argument {\n readonly alias: string;\n readonly type: Typification;\n}\n\n/** Type: Logic. */\nexport interface EchelonLogic {\n readonly typeID: typeof TypeID.logic;\n}\n\n/** Type: AnyTyped. */\nexport interface EchelonAnyTyped {\n readonly typeID: typeof TypeID.anyTypification;\n}\n\n/** Type: Integer. */\nexport interface EchelonInteger {\n readonly typeID: typeof TypeID.integer;\n readonly isOrdered: true;\n readonly isArithmetic: true;\n readonly isIntegerCompatible: true;\n}\n\n/** Type: Element of basic set. */\nexport interface EchelonBase {\n readonly typeID: typeof TypeID.basic;\n readonly baseID: string;\n readonly isOrdered?: boolean;\n readonly isArithmetic?: boolean;\n readonly isIntegerCompatible?: boolean;\n}\n\n/** Type: Tuple. */\nexport interface EchelonTuple {\n readonly typeID: typeof TypeID.tuple;\n readonly factors: readonly Typification[];\n}\n\n/** Type: Collection. */\nexport interface EchelonCollection {\n readonly typeID: typeof TypeID.collection;\n readonly base: Typification;\n}\n\n/** Type: Functional. */\nexport interface EchelonFunctional {\n readonly typeID: typeof TypeID.function;\n readonly result: Typification;\n readonly args: readonly Argument[];\n}\n\n/** Type: Predicate. */\nexport interface EchelonPredicate {\n readonly typeID: typeof TypeID.predicate;\n readonly result: EchelonLogic;\n readonly args: readonly Argument[];\n}\n\n/** Create basic element typification. */\nexport function basic(alias: string): EchelonBase {\n return { typeID: TypeID.basic, baseID: alias };\n}\n\n/** Create constant element typification. */\nexport function constant(alias: string): EchelonBase {\n return { typeID: TypeID.basic, baseID: alias, isOrdered: true, isArithmetic: true, isIntegerCompatible: true };\n}\n\n/** Create boolean typification. */\nexport function bool(base: Typification): EchelonCollection {\n return { typeID: TypeID.collection, base };\n}\n\n/** Create tuple typification. */\nexport function tuple(factors: Typification[]): EchelonTuple {\n if (factors.length < 2) {\n throw new Error('Tuple with less than two factors is not allowed');\n }\n return { typeID: TypeID.tuple, factors };\n}\n\n/** Remove boolean from typification. */\nexport function debool(target: EchelonCollection): Typification {\n return target.base;\n}\n\n/** Extract component from tuple. */\nexport function component(target: EchelonTuple, index: number): Typification | null {\n return target.factors[index - 1] ?? null;\n}\n\n/** Checks if given type is typification. */\nexport function isTypification(type: ExpressionType | null): boolean {\n return (\n type?.typeID === TypeID.basic ||\n type?.typeID === TypeID.anyTypification ||\n type?.typeID === TypeID.integer ||\n type?.typeID === TypeID.collection ||\n type?.typeID === TypeID.tuple\n );\n}\n\n/** Checks if given type is radical. */\nexport function isRadical(alias: string): boolean {\n return alias.length > 0 && alias.startsWith('R') && alias[1] !== '0';\n}\n","import { type TreeCursor } from './lezer-tree';\n\nexport const TOKEN_ERROR = 0;\n\n/** Represents AST node data. */\ninterface AstNodeData extends Record<string, unknown> {\n dataType: string;\n value: unknown;\n}\n\n/** Represents AST structured node base. */\nexport interface AstNodeBase {\n typeID: number;\n data: AstNodeData;\n annotation?: Record<string, unknown>;\n}\n\n/** Represents AST structured node. */\nexport interface AstNode extends Record<string, unknown>, AstNodeBase {\n uid: number;\n from: number;\n to: number;\n hasError: boolean;\n parenthesis?: boolean;\n parent: AstNode | null;\n children: AstNode[];\n}\n\n/** Represents AST node. */\nexport interface FlatAstNode extends Record<string, unknown>, AstNodeBase {\n uid: number;\n parent: number | null;\n from: number;\n to: number;\n}\n\n/** Represents Syntax tree flat representation. */\nexport type FlatAST = FlatAstNode[];\n\n/** Builds AST tree from a given tree cursor, generating unique uids for each node. */\nexport function buildTree(cursor: TreeCursor): AstNode {\n let nextUid = 1;\n function genUid() {\n return nextUid++;\n }\n return buildTreeInternal(cursor, null, genUid);\n}\n\n/** Flattens AST tree to a array form. */\nexport function flattenAst(node: AstNode, parent: number | null = null, out: FlatAST = []): FlatAST {\n out.push({\n uid: node.uid,\n parent: parent,\n typeID: node.typeID,\n from: node.from,\n to: node.to,\n data: node.data,\n annotation: node.annotation\n });\n for (const child of node.children) {\n flattenAst(child, node.uid, out);\n }\n return out;\n}\n\n/** Visits AST tree in depth-first order. */\nexport function visitAstDFS(node: AstNode, callback: (node: AstNode) => void) {\n for (const child of node.children) {\n visitAstDFS(child, callback);\n }\n callback(node);\n}\n\n/** Finds and returns the AstNode with the given ui. */\nexport function findByUid(root: AstNode, uid: number): AstNode | null {\n let found: AstNode | null = null;\n visitAstDFS(root, node => {\n if (node.uid === uid && !found) {\n found = node;\n }\n });\n return found;\n}\n\n/** Prints AST tree. */\nexport function printAst(node: AstNode, printNode: (node: AstNode) => string): string {\n let children: string = '';\n for (const child of node.children) {\n children += `${printAst(child, printNode)}`;\n }\n return `[${printNode(node)}${children}]`;\n}\n\n/** Extracts node text. */\nexport function getNodeText(node: AstNode): string {\n if (node.data.dataType === 'string' && typeof node.data.value === 'string') {\n return node.data.value;\n }\n return `NO DATA NODE: ${node.typeID}`;\n}\n\n/** Extracts node indices. */\nexport function getNodeIndices(node: AstNode): number[] {\n if (node.data.dataType === 'string[]' && Array.isArray(node.data.value)) {\n return (node.data.value as string[]).map(s => parseInt(s, 10)).filter(n => !isNaN(n));\n }\n return [];\n}\n\n// ======== Internals ========\nfunction buildTreeInternal(cursor: TreeCursor, parent: AstNode | null = null, genUid: () => number): AstNode {\n const node = cursor.node;\n\n const result: AstNode = {\n uid: genUid(),\n typeID: node.type.isError ? 0 : node.type.id,\n from: node.from,\n to: node.to,\n hasError: node.type.isError,\n data: node.type.isError ? { dataType: 'null', value: null } : { dataType: 'string', value: node.type.name },\n parent,\n children: []\n };\n\n if (cursor.firstChild()) {\n do {\n const child = buildTreeInternal(cursor, result, genUid);\n if (child.hasError) {\n result.hasError = true;\n }\n result.children.push(child);\n } while (cursor.nextSibling());\n cursor.parent();\n }\n return result;\n}\n","import { TOKEN_ERROR } from '../../parsing';\n\n/** Represents RSLang token types. */\nexport const TokenID = {\n // Global, local IDs and literals\n ERROR: TOKEN_ERROR,\n\n ID_LOCAL: 258,\n ID_GLOBAL: 259,\n ID_FUNCTION: 260,\n ID_PREDICATE: 261,\n ID_RADICAL: 262,\n LIT_INTEGER: 263,\n LIT_WHOLE_NUMBERS: 264,\n LIT_EMPTYSET: 265,\n\n // Arithmetic\n PLUS: 266,\n MINUS: 267,\n MULTIPLY: 268,\n\n // Integer predicate symbols\n GREATER: 269,\n LESSER: 270,\n GREATER_OR_EQ: 271,\n LESSER_OR_EQ: 272,\n\n // Equality comparison\n EQUAL: 273,\n NOTEQUAL: 274,\n\n // Logic predicate symbols\n QUANTOR_UNIVERSAL: 275,\n QUANTOR_EXISTS: 276,\n LOGIC_NOT: 277,\n LOGIC_EQUIVALENT: 278,\n LOGIC_IMPLICATION: 279,\n LOGIC_OR: 280,\n LOGIC_AND: 281,\n\n // Set theory predicate symbols\n SET_IN: 282,\n SET_NOT_IN: 283,\n SUBSET: 284,\n SUBSET_OR_EQ: 285,\n NOT_SUBSET: 286,\n\n // Set theory operators\n DECART: 287,\n SET_UNION: 288,\n SET_INTERSECTION: 289,\n SET_MINUS: 290,\n SET_SYMMETRIC_MINUS: 291,\n BOOLEAN: 292,\n\n // Structure operations\n BIGPR: 293,\n SMALLPR: 294,\n FILTER: 295,\n CARD: 296,\n BOOL: 297,\n DEBOOL: 298,\n REDUCE: 299,\n\n // Term constructions prefixes\n DECLARATIVE: 300,\n RECURSIVE: 301,\n IMPERATIVE: 302,\n\n ITERATE: 303,\n ASSIGN: 304,\n\n // Punctuation\n PUNCTUATION_DEFINE: 305,\n PUNCTUATION_STRUCT: 306,\n PUNCTUATION_PL: 307,\n PUNCTUATION_PR: 308,\n PUNCTUATION_CL: 309,\n PUNCTUATION_CR: 310,\n PUNCTUATION_SL: 311,\n PUNCTUATION_SR: 312,\n PUNCTUATION_BAR: 313,\n PUNCTUATION_COMMA: 314,\n PUNCTUATION_SEMICOLON: 315,\n\n // ======= Non-terminal tokens =========\n NT_ENUM_DECL: 316,\n NT_TUPLE: 317,\n NT_ENUMERATION: 318,\n NT_TUPLE_DECL: 319,\n NT_ARG_DECL: 320,\n\n NT_FUNC_DEFINITION: 321,\n NT_ARGUMENTS: 322,\n NT_FUNC_CALL: 323,\n\n NT_DECLARATIVE_EXPR: 324,\n NT_IMPERATIVE_EXPR: 325,\n NT_RECURSIVE_FULL: 326,\n NT_RECURSIVE_SHORT: 327,\n\n // ======= Helper tokens ========\n INTERRUPT: 328,\n END: 329\n} as const;\nexport type TokenID = (typeof TokenID)[keyof typeof TokenID];\n","import { type AstNodeBase } from '../parsing';\n\nimport { TokenID } from './parser/token';\nimport { type ExpressionType, TypeID } from './semantic/typification';\n\nconst INTEGER_TYPE_NAME = 'Z';\nconst ANY_TYPE_NAME = 'R0';\nconst LOGIC_TYPE_NAME = 'Logic';\n\nconst labelTokenRecord: Partial<Record<TokenID, string>> = {\n [TokenID.DECART]: '×',\n [TokenID.PUNCTUATION_PL]: '( )',\n [TokenID.PUNCTUATION_SL]: '[ ]',\n [TokenID.QUANTOR_UNIVERSAL]: '∀',\n [TokenID.QUANTOR_EXISTS]: '∃',\n [TokenID.LOGIC_NOT]: '¬',\n [TokenID.LOGIC_AND]: '&',\n [TokenID.LOGIC_OR]: '∨',\n [TokenID.LOGIC_IMPLICATION]: '⇒',\n [TokenID.LOGIC_EQUIVALENT]: '⇔',\n [TokenID.LIT_EMPTYSET]: '∅',\n [TokenID.LIT_WHOLE_NUMBERS]: 'Z',\n [TokenID.MULTIPLY]: '*',\n [TokenID.EQUAL]: '=',\n [TokenID.NOTEQUAL]: '≠',\n [TokenID.GREATER_OR_EQ]: '≥',\n [TokenID.LESSER_OR_EQ]: '≤',\n [TokenID.SET_IN]: '∈',\n [TokenID.SET_NOT_IN]: '∉',\n [TokenID.SUBSET_OR_EQ]: '⊆',\n [TokenID.SUBSET]: '⊂',\n [TokenID.NOT_SUBSET]: '⊄',\n [TokenID.SET_INTERSECTION]: '∩',\n [TokenID.SET_UNION]: '∪',\n [TokenID.SET_MINUS]: '\\\\',\n [TokenID.SET_SYMMETRIC_MINUS]: '∆',\n [TokenID.BOOLEAN]: 'ℬ()',\n [TokenID.NT_DECLARATIVE_EXPR]: 'D{}',\n [TokenID.NT_IMPERATIVE_EXPR]: 'I{}',\n [TokenID.NT_RECURSIVE_FULL]: 'R{}',\n [TokenID.BIGPR]: 'Pr1()',\n [TokenID.SMALLPR]: 'pr1()',\n [TokenID.FILTER]: 'Fi1[]()',\n [TokenID.REDUCE]: 'red()',\n [TokenID.CARD]: 'card()',\n [TokenID.BOOL]: 'bool()',\n [TokenID.DEBOOL]: 'debool()',\n [TokenID.ASSIGN]: ':=',\n [TokenID.ITERATE]: ':∈'\n};\n\n/** Retrieves label for {@link TokenID}. */\nexport function labelToken(id: TokenID): string {\n const text = labelTokenRecord[id];\n return text ?? 'UNKNOWN TOKEN: ' + String(id);\n}\n\n/** Generates label for {@link AstNodeBase}. */\nexport function labelRSLangNode(node: AstNodeBase): string {\n // prettier-ignore\n switch (node.typeID) {\n case TokenID.ERROR: return '[ERROR]';\n case TokenID.ID_LOCAL:\n case TokenID.ID_GLOBAL:\n case TokenID.ID_FUNCTION:\n case TokenID.ID_PREDICATE:\n case TokenID.ID_RADICAL:\n return node.data.value as string;\n\n case TokenID.LIT_INTEGER: return String(node.data.value);\n\n case TokenID.BIGPR: return 'Pr' + (node.data.value as string[]).toString();\n case TokenID.SMALLPR: return 'pr' + (node.data.value as string[]).toString();\n case TokenID.FILTER: return 'Fi' + (node.data.value as string[]).toString();\n\n case TokenID.NT_DECLARATIVE_EXPR: return 'DECLARATIVE';\n case TokenID.NT_IMPERATIVE_EXPR: return 'IMPERATIVE';\n case TokenID.NT_RECURSIVE_FULL: return 'RECURSIVE';\n case TokenID.NT_RECURSIVE_SHORT: return 'RECURSIVE';\n\n case TokenID.BOOLEAN: return 'ℬ';\n case TokenID.REDUCE: return 'red';\n case TokenID.CARD: return 'card';\n case TokenID.BOOL: return 'bool';\n case TokenID.DEBOOL: return 'debool';\n\n case TokenID.PLUS: return '+';\n case TokenID.MINUS: return '-';\n case TokenID.MULTIPLY: return '*';\n case TokenID.GREATER: return '>';\n case TokenID.LESSER: return '<';\n\n case TokenID.NT_TUPLE: return 'TUPLE';\n case TokenID.NT_ENUMERATION: return 'ENUM';\n\n case TokenID.NT_ENUM_DECL: return 'ENUM_DECLARE';\n case TokenID.NT_TUPLE_DECL: return 'TUPLE_DECLARE';\n case TokenID.PUNCTUATION_DEFINE: return 'DEFINITION';\n case TokenID.PUNCTUATION_STRUCT: return 'STRUCTURE_DEFINE';\n\n case TokenID.NT_ARG_DECL: return 'ARG';\n case TokenID.NT_FUNC_CALL: return 'CALL';\n case TokenID.NT_ARGUMENTS: return 'ARGS';\n\n case TokenID.NT_FUNC_DEFINITION: return 'FUNCTION_DEFINE';\n\n case TokenID.DECART:\n case TokenID.QUANTOR_UNIVERSAL:\n case TokenID.QUANTOR_EXISTS:\n case TokenID.LOGIC_NOT:\n case TokenID.LOGIC_AND:\n case TokenID.LOGIC_OR:\n case TokenID.LOGIC_IMPLICATION:\n case TokenID.LOGIC_EQUIVALENT:\n case TokenID.LIT_EMPTYSET:\n case TokenID.LIT_WHOLE_NUMBERS:\n case TokenID.EQUAL:\n case TokenID.NOTEQUAL:\n case TokenID.GREATER_OR_EQ:\n case TokenID.LESSER_OR_EQ:\n case TokenID.SET_IN:\n case TokenID.SET_NOT_IN:\n case TokenID.SUBSET_OR_EQ:\n case TokenID.SUBSET:\n case TokenID.NOT_SUBSET:\n case TokenID.SET_INTERSECTION:\n case TokenID.SET_UNION:\n case TokenID.SET_MINUS:\n case TokenID.SET_SYMMETRIC_MINUS:\n case TokenID.ASSIGN:\n case TokenID.ITERATE:\n return labelToken(node.typeID);\n }\n if (node.data.value) {\n return node.data.value as string;\n }\n return 'UNKNOWN NODE: ' + String(node.typeID);\n}\n\n/** Converts expression type to string. */\nexport function labelType(type: ExpressionType | null): string {\n if (!type) {\n return 'N/A';\n }\n switch (type.typeID) {\n case TypeID.anyTypification:\n return ANY_TYPE_NAME;\n case TypeID.integer:\n return INTEGER_TYPE_NAME;\n case TypeID.basic:\n return type.baseID;\n case TypeID.tuple:\n return type.factors\n .map(factor => (factor.typeID === TypeID.tuple ? `(${labelType(factor)})` : labelType(factor)))\n .join('×');\n case TypeID.collection:\n return type.base.typeID === TypeID.collection ? `ℬ${labelType(type.base)}` : `ℬ(${labelType(type.base)})`;\n case TypeID.logic:\n return LOGIC_TYPE_NAME;\n case TypeID.predicate:\n case TypeID.function:\n const argsText = type.args.map(arg => labelType(arg.type)).join(', ');\n return `[${argsText}] → ${labelType(type.result)}`;\n }\n}\n\n/** Converts expression type to normalized string. */\nexport function normalizeType(type: ExpressionType | null): string {\n if (!type) {\n return 'N/A';\n }\n switch (type.typeID) {\n case TypeID.anyTypification:\n return ANY_TYPE_NAME;\n case TypeID.integer:\n case TypeID.basic:\n return 'X1';\n case TypeID.tuple:\n return type.factors\n .map(factor => (factor.typeID === TypeID.tuple ? `(${normalizeType(factor)})` : normalizeType(factor)))\n .join('×');\n case TypeID.collection:\n return type.base.typeID === TypeID.collection ? `ℬ${normalizeType(type.base)}` : `ℬ(${normalizeType(type.base)})`;\n case TypeID.logic:\n return LOGIC_TYPE_NAME;\n case TypeID.predicate:\n case TypeID.function:\n const argsText = type.args.map(arg => normalizeType(arg.type)).join(', ');\n return `[${argsText}] → ${normalizeType(type.result)}`;\n }\n}\n","/**\n * Module: Multi-graph for typifications.\n */\n\nimport {\n bool,\n type EchelonCollection,\n type EchelonTuple,\n type ExpressionType,\n tuple,\n TypeID,\n type Typification\n} from './semantic/typification';\nimport { labelType } from './labels';\n\n/** Represents a single node of a {@link TypificationGraph}. */\nexport interface TypificationNodeData extends Record<string, unknown> {\n id: number;\n rank: number;\n text: string;\n parents: number[];\n annotations: string[];\n}\n\n/** Represents a typification multi-graph. */\nexport class TypificationGraph {\n /** List of nodes. */\n nodes: TypificationNodeData[] = [];\n /** Map of nodes by ID. */\n nodeById = new Map<number, TypificationNodeData>();\n /** Map of nodes by alias. */\n nodeByAlias = new Map<string, TypificationNodeData>();\n\n /** Adds an element to the graph. */\n addElement(alias: string, type: ExpressionType): void {\n const node = this.processType(type);\n if (!node) {\n return;\n }\n this.addAliasAnnotation(node.id, alias);\n }\n\n private processType(type: ExpressionType): TypificationNodeData | null {\n switch (type.typeID) {\n case TypeID.logic:\n return null;\n\n case TypeID.anyTypification:\n case TypeID.integer:\n case TypeID.basic:\n return this.addBaseNode(type);\n\n case TypeID.collection:\n return this.addBooleanNode(type);\n case TypeID.tuple:\n return this.addCartesianNode(type);\n\n case TypeID.function:\n case TypeID.predicate:\n const combined = convertFunctionToTypification(type);\n if (!combined) {\n return null;\n }\n return this.processType(combined);\n }\n }\n\n private addBaseNode(type: Typification): TypificationNodeData {\n const text = labelType(type);\n const existingNode = this.nodes.find(node => node.text === text);\n if (existingNode) {\n return existingNode;\n }\n\n const node: TypificationNodeData = {\n id: this.nodes.length,\n text: text,\n rank: 0,\n parents: [],\n annotations: []\n };\n this.nodes.push(node);\n this.nodeById.set(node.id, node);\n return node;\n }\n\n private addBooleanNode(type: EchelonCollection): TypificationNodeData | null {\n const baseNode = this.processType(type.base);\n if (!baseNode) {\n return null;\n }\n\n const existingNode = this.nodes.find(node => node.parents.length === 1 && node.parents[0] === baseNode.id);\n if (existingNode) {\n return existingNode;\n }\n\n const node: TypificationNodeData = {\n id: this.nodes.length,\n rank: baseNode.rank + 1,\n text: labelType(type),\n parents: [baseNode.id],\n annotations: []\n };\n this.nodes.push(node);\n this.nodeById.set(node.id, node);\n return node;\n }\n\n private addCartesianNode(type: EchelonTuple): TypificationNodeData | null {\n const factors = type.factors.map(factor => this.processType(factor)).filter(factor => factor !== null);\n if (factors.length !== type.factors.length) {\n return null;\n }\n\n const existingNode = this.nodes.find(\n node => node.parents.length === factors.length && node.parents.every((p, i) => p === factors[i].id)\n );\n if (existingNode) {\n return existingNode;\n }\n\n const node: TypificationNodeData = {\n id: this.nodes.length,\n text: labelType(type),\n rank: Math.max(...factors.map(factor => factor.rank)) + 1,\n parents: factors.map(factor => factor.id),\n annotations: []\n };\n this.nodes.push(node);\n this.nodeById.set(node.id, node);\n return node;\n }\n\n private addAliasAnnotation(node: number, alias: string): void {\n const nodeToAnnotate = this.nodeById.get(node);\n if (!nodeToAnnotate) {\n throw new Error(`Node ${node} not found`);\n }\n nodeToAnnotate.annotations.push(alias);\n this.nodeByAlias.set(alias, nodeToAnnotate);\n }\n}\n\nfunction convertFunctionToTypification(type: ExpressionType): Typification | null {\n if (!('args' in type) || type.args.length === 0) {\n return null;\n }\n const args = type.args.length === 1 ? type.args[0].type : tuple(type.args.map(arg => arg.type));\n if (type.result.typeID === TypeID.logic) {\n return bool(args);\n } else {\n return bool(tuple([type.result, args]));\n }\n}\n"],"mappings":"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","names":["node"]}
1
+ {"version":3,"file":"typification-graph.js","names":[],"sources":["../../src/rslang/typification-graph.ts"],"sourcesContent":["/**\n * Module: Multi-graph for typifications.\n */\n\nimport {\n bool,\n type EchelonCollection,\n type EchelonTuple,\n type ExpressionType,\n tuple,\n TypeID,\n type Typification\n} from './semantic/typification';\nimport { labelType } from './labels';\n\n/** Represents a single node of a {@link TypificationGraph}. */\nexport interface TypificationNodeData extends Record<string, unknown> {\n id: number;\n rank: number;\n text: string;\n parents: number[];\n annotations: string[];\n}\n\n/** Represents a typification multi-graph. */\nexport class TypificationGraph {\n /** List of nodes. */\n nodes: TypificationNodeData[] = [];\n /** Map of nodes by ID. */\n nodeById = new Map<number, TypificationNodeData>();\n /** Map of nodes by alias. */\n nodeByAlias = new Map<string, TypificationNodeData>();\n\n /** Adds an element to the graph. */\n addElement(alias: string, type: ExpressionType): void {\n const node = this.processType(type);\n if (!node) {\n return;\n }\n this.addAliasAnnotation(node.id, alias);\n }\n\n private processType(type: ExpressionType): TypificationNodeData | null {\n switch (type.typeID) {\n case TypeID.logic:\n return null;\n\n case TypeID.anyTypification:\n case TypeID.integer:\n case TypeID.basic:\n return this.addBaseNode(type);\n\n case TypeID.collection:\n return this.addBooleanNode(type);\n case TypeID.tuple:\n return this.addCartesianNode(type);\n\n case TypeID.function:\n case TypeID.predicate:\n const combined = convertFunctionToTypification(type);\n if (!combined) {\n return null;\n }\n return this.processType(combined);\n }\n }\n\n private addBaseNode(type: Typification): TypificationNodeData {\n const text = labelType(type);\n const existingNode = this.nodes.find(node => node.text === text);\n if (existingNode) {\n return existingNode;\n }\n\n const node: TypificationNodeData = {\n id: this.nodes.length,\n text: text,\n rank: 0,\n parents: [],\n annotations: []\n };\n this.nodes.push(node);\n this.nodeById.set(node.id, node);\n return node;\n }\n\n private addBooleanNode(type: EchelonCollection): TypificationNodeData | null {\n const baseNode = this.processType(type.base);\n if (!baseNode) {\n return null;\n }\n\n const existingNode = this.nodes.find(node => node.parents.length === 1 && node.parents[0] === baseNode.id);\n if (existingNode) {\n return existingNode;\n }\n\n const node: TypificationNodeData = {\n id: this.nodes.length,\n rank: baseNode.rank + 1,\n text: labelType(type),\n parents: [baseNode.id],\n annotations: []\n };\n this.nodes.push(node);\n this.nodeById.set(node.id, node);\n return node;\n }\n\n private addCartesianNode(type: EchelonTuple): TypificationNodeData | null {\n const factors = type.factors.map(factor => this.processType(factor)).filter(factor => factor !== null);\n if (factors.length !== type.factors.length) {\n return null;\n }\n\n const existingNode = this.nodes.find(\n node => node.parents.length === factors.length && node.parents.every((p, i) => p === factors[i].id)\n );\n if (existingNode) {\n return existingNode;\n }\n\n const node: TypificationNodeData = {\n id: this.nodes.length,\n text: labelType(type),\n rank: Math.max(...factors.map(factor => factor.rank)) + 1,\n parents: factors.map(factor => factor.id),\n annotations: []\n };\n this.nodes.push(node);\n this.nodeById.set(node.id, node);\n return node;\n }\n\n private addAliasAnnotation(node: number, alias: string): void {\n const nodeToAnnotate = this.nodeById.get(node);\n if (!nodeToAnnotate) {\n throw new Error(`Node ${node} not found`);\n }\n nodeToAnnotate.annotations.push(alias);\n this.nodeByAlias.set(alias, nodeToAnnotate);\n }\n}\n\nfunction convertFunctionToTypification(type: ExpressionType): Typification | null {\n if (!('args' in type) || type.args.length === 0) {\n return null;\n }\n const args = type.args.length === 1 ? type.args[0].type : tuple(type.args.map(arg => arg.type));\n if (type.result.typeID === TypeID.logic) {\n return bool(args);\n } else {\n return bool(tuple([type.result, args]));\n }\n}\n"],"mappings":";;;;;;;AAyBA,IAAa,oBAAb,MAA+B;;CAE7B,QAAgC,CAAC;;CAEjC,2BAAW,IAAI,IAAkC;;CAEjD,8BAAc,IAAI,IAAkC;;CAGpD,WAAW,OAAe,MAA4B;EACpD,MAAM,OAAO,KAAK,YAAY,IAAI;EAClC,IAAI,CAAC,MACH;EAEF,KAAK,mBAAmB,KAAK,IAAI,KAAK;CACxC;CAEA,YAAoB,MAAmD;EACrE,QAAQ,KAAK,QAAb;GACE,KAAK,OAAO,OACV,OAAO;GAET,KAAK,OAAO;GACZ,KAAK,OAAO;GACZ,KAAK,OAAO,OACV,OAAO,KAAK,YAAY,IAAI;GAE9B,KAAK,OAAO,YACV,OAAO,KAAK,eAAe,IAAI;GACjC,KAAK,OAAO,OACV,OAAO,KAAK,iBAAiB,IAAI;GAEnC,KAAK,OAAO;GACZ,KAAK,OAAO;IACV,MAAM,WAAW,8BAA8B,IAAI;IACnD,IAAI,CAAC,UACH,OAAO;IAET,OAAO,KAAK,YAAY,QAAQ;EACpC;CACF;CAEA,YAAoB,MAA0C;EAC5D,MAAM,OAAO,UAAU,IAAI;EAC3B,MAAM,eAAe,KAAK,MAAM,MAAK,SAAQ,KAAK,SAAS,IAAI;EAC/D,IAAI,cACF,OAAO;EAGT,MAAM,OAA6B;GACjC,IAAI,KAAK,MAAM;GACT;GACN,MAAM;GACN,SAAS,CAAC;GACV,aAAa,CAAC;EAChB;EACA,KAAK,MAAM,KAAK,IAAI;EACpB,KAAK,SAAS,IAAI,KAAK,IAAI,IAAI;EAC/B,OAAO;CACT;CAEA,eAAuB,MAAsD;EAC3E,MAAM,WAAW,KAAK,YAAY,KAAK,IAAI;EAC3C,IAAI,CAAC,UACH,OAAO;EAGT,MAAM,eAAe,KAAK,MAAM,MAAK,SAAQ,KAAK,QAAQ,WAAW,KAAK,KAAK,QAAQ,OAAO,SAAS,EAAE;EACzG,IAAI,cACF,OAAO;EAGT,MAAM,OAA6B;GACjC,IAAI,KAAK,MAAM;GACf,MAAM,SAAS,OAAO;GACtB,MAAM,UAAU,IAAI;GACpB,SAAS,CAAC,SAAS,EAAE;GACrB,aAAa,CAAC;EAChB;EACA,KAAK,MAAM,KAAK,IAAI;EACpB,KAAK,SAAS,IAAI,KAAK,IAAI,IAAI;EAC/B,OAAO;CACT;CAEA,iBAAyB,MAAiD;EACxE,MAAM,UAAU,KAAK,QAAQ,KAAI,WAAU,KAAK,YAAY,MAAM,CAAC,CAAC,CAAC,QAAO,WAAU,WAAW,IAAI;EACrG,IAAI,QAAQ,WAAW,KAAK,QAAQ,QAClC,OAAO;EAGT,MAAM,eAAe,KAAK,MAAM,MAC9B,SAAQ,KAAK,QAAQ,WAAW,QAAQ,UAAU,KAAK,QAAQ,OAAO,GAAG,MAAM,MAAM,QAAQ,EAAE,CAAC,EAAE,CACpG;EACA,IAAI,cACF,OAAO;EAGT,MAAM,OAA6B;GACjC,IAAI,KAAK,MAAM;GACf,MAAM,UAAU,IAAI;GACpB,MAAM,KAAK,IAAI,GAAG,QAAQ,KAAI,WAAU,OAAO,IAAI,CAAC,IAAI;GACxD,SAAS,QAAQ,KAAI,WAAU,OAAO,EAAE;GACxC,aAAa,CAAC;EAChB;EACA,KAAK,MAAM,KAAK,IAAI;EACpB,KAAK,SAAS,IAAI,KAAK,IAAI,IAAI;EAC/B,OAAO;CACT;CAEA,mBAA2B,MAAc,OAAqB;EAC5D,MAAM,iBAAiB,KAAK,SAAS,IAAI,IAAI;EAC7C,IAAI,CAAC,gBACH,MAAM,IAAI,MAAM,QAAQ,KAAK,WAAW;EAE1C,eAAe,YAAY,KAAK,KAAK;EACrC,KAAK,YAAY,IAAI,OAAO,cAAc;CAC5C;AACF;AAEA,SAAS,8BAA8B,MAA2C;CAChF,IAAI,EAAE,UAAU,SAAS,KAAK,KAAK,WAAW,GAC5C,OAAO;CAET,MAAM,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,EAAE,CAAC,OAAO,MAAM,KAAK,KAAK,KAAI,QAAO,IAAI,IAAI,CAAC;CAC9F,IAAI,KAAK,OAAO,WAAW,OAAO,OAChC,OAAO,KAAK,IAAI;MAEhB,OAAO,KAAK,MAAM,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC;AAE1C"}
@@ -1,7 +1,2 @@
1
- declare const brand: unique symbol;
2
- /** Branded strict type. No runtime consequences. */
3
- type Branded<T, BrandT> = T & {
4
- readonly [brand]: BrandT;
5
- };
6
-
7
- export type { Branded };
1
+ import { t as Branded } from "../branded-ZlzIcxzu.js";
2
+ export { Branded };
@@ -1 +1 @@
1
- //# sourceMappingURL=branded.js.map
1
+ export {};
@@ -1,6 +1,2 @@
1
- /** 32-bit FNV-1a hash */
2
- declare function applyHash_fnv1a(str: string): number;
3
- /** Generates stub ID for text. */
4
- declare function generateStub(text: string): string;
5
-
6
- export { applyHash_fnv1a, generateStub };
1
+ import { n as generateStub, t as applyHash_fnv1a } from "../hash-Y8I4c6Al.js";
2
+ export { applyHash_fnv1a, generateStub };
@@ -1,18 +1,18 @@
1
- // src/shared/hash.ts
1
+ //#region src/shared/hash.ts
2
+ /** 32-bit FNV-1a hash */
2
3
  function applyHash_fnv1a(str) {
3
- let hash = 2166136261;
4
- for (let i = 0; i < str.length; i++) {
5
- hash ^= str.charCodeAt(i);
6
- hash = Math.imul(hash, 16777619);
7
- }
8
- return hash >>> 0;
4
+ let hash = 2166136261;
5
+ for (let i = 0; i < str.length; i++) {
6
+ hash ^= str.charCodeAt(i);
7
+ hash = Math.imul(hash, 16777619);
8
+ }
9
+ return hash >>> 0;
9
10
  }
11
+ /** Generates stub ID for text. */
10
12
  function generateStub(text) {
11
- const hash = applyHash_fnv1a(text);
12
- return hash.toString(16).padStart(8, "0").slice(0, 8);
13
+ return applyHash_fnv1a(text).toString(16).padStart(8, "0").slice(0, 8);
13
14
  }
14
- export {
15
- applyHash_fnv1a,
16
- generateStub
17
- };
15
+ //#endregion
16
+ export { applyHash_fnv1a, generateStub };
17
+
18
18
  //# sourceMappingURL=hash.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/shared/hash.ts"],"sourcesContent":["/** 32-bit FNV-1a hash */\nexport function applyHash_fnv1a(str: string): number {\n let hash = 0x811c9dc5;\n\n for (let i = 0; i < str.length; i++) {\n hash ^= str.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193);\n }\n\n return hash >>> 0;\n}\n\n/** Generates stub ID for text. */\nexport function generateStub(text: string): string {\n const hash = applyHash_fnv1a(text);\n return hash.toString(16).padStart(8, '0').slice(0, 8);\n}\n"],"mappings":";AACO,SAAS,gBAAgB,KAAqB;AACnD,MAAI,OAAO;AAEX,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAQ,IAAI,WAAW,CAAC;AACxB,WAAO,KAAK,KAAK,MAAM,QAAU;AAAA,EACnC;AAEA,SAAO,SAAS;AAClB;AAGO,SAAS,aAAa,MAAsB;AACjD,QAAM,OAAO,gBAAgB,IAAI;AACjC,SAAO,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC;AACtD;","names":[]}
1
+ {"version":3,"file":"hash.js","names":[],"sources":["../../src/shared/hash.ts"],"sourcesContent":["/** 32-bit FNV-1a hash */\nexport function applyHash_fnv1a(str: string): number {\n let hash = 0x811c9dc5;\n\n for (let i = 0; i < str.length; i++) {\n hash ^= str.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193);\n }\n\n return hash >>> 0;\n}\n\n/** Generates stub ID for text. */\nexport function generateStub(text: string): string {\n const hash = applyHash_fnv1a(text);\n return hash.toString(16).padStart(8, '0').slice(0, 8);\n}\n"],"mappings":";;AACA,SAAgB,gBAAgB,KAAqB;CACnD,IAAI,OAAO;CAEX,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;EACnC,QAAQ,IAAI,WAAW,CAAC;EACxB,OAAO,KAAK,KAAK,MAAM,QAAU;CACnC;CAEA,OAAO,SAAS;AAClB;;AAGA,SAAgB,aAAa,MAAsB;CAEjD,OADa,gBAAgB,IACtB,CAAA,CAAK,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;AACtD"}
@@ -1,2 +1,3 @@
1
- export { Branded } from './branded.js';
2
- export { applyHash_fnv1a, generateStub } from './hash.js';
1
+ import { t as Branded } from "../branded-ZlzIcxzu.js";
2
+ import { n as generateStub, t as applyHash_fnv1a } from "../hash-Y8I4c6Al.js";
3
+ export { type Branded, applyHash_fnv1a, generateStub };
@@ -1,18 +1,2 @@
1
- // src/shared/hash.ts
2
- function applyHash_fnv1a(str) {
3
- let hash = 2166136261;
4
- for (let i = 0; i < str.length; i++) {
5
- hash ^= str.charCodeAt(i);
6
- hash = Math.imul(hash, 16777619);
7
- }
8
- return hash >>> 0;
9
- }
10
- function generateStub(text) {
11
- const hash = applyHash_fnv1a(text);
12
- return hash.toString(16).padStart(8, "0").slice(0, 8);
13
- }
14
- export {
15
- applyHash_fnv1a,
16
- generateStub
17
- };
18
- //# sourceMappingURL=index.js.map
1
+ import { applyHash_fnv1a, generateStub } from "./hash.js";
2
+ export { applyHash_fnv1a, generateStub };
@@ -0,0 +1,81 @@
1
+ //#region src/rslang/parser/token.d.ts
2
+ /** Represents RSLang token types. */
3
+ declare const TokenID: {
4
+ readonly ERROR: 0;
5
+ readonly ID_LOCAL: 258;
6
+ readonly ID_GLOBAL: 259;
7
+ readonly ID_FUNCTION: 260;
8
+ readonly ID_PREDICATE: 261;
9
+ readonly ID_RADICAL: 262;
10
+ readonly LIT_INTEGER: 263;
11
+ readonly LIT_WHOLE_NUMBERS: 264;
12
+ readonly LIT_EMPTYSET: 265;
13
+ readonly PLUS: 266;
14
+ readonly MINUS: 267;
15
+ readonly MULTIPLY: 268;
16
+ readonly GREATER: 269;
17
+ readonly LESSER: 270;
18
+ readonly GREATER_OR_EQ: 271;
19
+ readonly LESSER_OR_EQ: 272;
20
+ readonly EQUAL: 273;
21
+ readonly NOTEQUAL: 274;
22
+ readonly QUANTOR_UNIVERSAL: 275;
23
+ readonly QUANTOR_EXISTS: 276;
24
+ readonly LOGIC_NOT: 277;
25
+ readonly LOGIC_EQUIVALENT: 278;
26
+ readonly LOGIC_IMPLICATION: 279;
27
+ readonly LOGIC_OR: 280;
28
+ readonly LOGIC_AND: 281;
29
+ readonly SET_IN: 282;
30
+ readonly SET_NOT_IN: 283;
31
+ readonly SUBSET: 284;
32
+ readonly SUBSET_OR_EQ: 285;
33
+ readonly NOT_SUBSET: 286;
34
+ readonly DECART: 287;
35
+ readonly SET_UNION: 288;
36
+ readonly SET_INTERSECTION: 289;
37
+ readonly SET_MINUS: 290;
38
+ readonly SET_SYMMETRIC_MINUS: 291;
39
+ readonly BOOLEAN: 292;
40
+ readonly BIGPR: 293;
41
+ readonly SMALLPR: 294;
42
+ readonly FILTER: 295;
43
+ readonly CARD: 296;
44
+ readonly BOOL: 297;
45
+ readonly DEBOOL: 298;
46
+ readonly REDUCE: 299;
47
+ readonly DECLARATIVE: 300;
48
+ readonly RECURSIVE: 301;
49
+ readonly IMPERATIVE: 302;
50
+ readonly ITERATE: 303;
51
+ readonly ASSIGN: 304;
52
+ readonly PUNCTUATION_DEFINE: 305;
53
+ readonly PUNCTUATION_STRUCT: 306;
54
+ readonly PUNCTUATION_PL: 307;
55
+ readonly PUNCTUATION_PR: 308;
56
+ readonly PUNCTUATION_CL: 309;
57
+ readonly PUNCTUATION_CR: 310;
58
+ readonly PUNCTUATION_SL: 311;
59
+ readonly PUNCTUATION_SR: 312;
60
+ readonly PUNCTUATION_BAR: 313;
61
+ readonly PUNCTUATION_COMMA: 314;
62
+ readonly PUNCTUATION_SEMICOLON: 315;
63
+ readonly NT_ENUM_DECL: 316;
64
+ readonly NT_TUPLE: 317;
65
+ readonly NT_ENUMERATION: 318;
66
+ readonly NT_TUPLE_DECL: 319;
67
+ readonly NT_ARG_DECL: 320;
68
+ readonly NT_FUNC_DEFINITION: 321;
69
+ readonly NT_ARGUMENTS: 322;
70
+ readonly NT_FUNC_CALL: 323;
71
+ readonly NT_DECLARATIVE_EXPR: 324;
72
+ readonly NT_IMPERATIVE_EXPR: 325;
73
+ readonly NT_RECURSIVE_FULL: 326;
74
+ readonly NT_RECURSIVE_SHORT: 327;
75
+ readonly INTERRUPT: 328;
76
+ readonly END: 329;
77
+ };
78
+ type TokenID = (typeof TokenID)[keyof typeof TokenID];
79
+ //#endregion
80
+ export { TokenID as t };
81
+ //# sourceMappingURL=token-DeXAmzwr.d.ts.map
@@ -0,0 +1,120 @@
1
+ import { t as Branded } from "./branded-ZlzIcxzu.js";
2
+ //#region src/rslang/semantic/typification.d.ts
3
+ /** Typification structure enumeration. */
4
+ declare const TypeID: {
5
+ readonly anyTypification: 1;
6
+ readonly integer: 2;
7
+ readonly basic: 3;
8
+ readonly tuple: 4;
9
+ readonly collection: 5;
10
+ readonly logic: 6;
11
+ readonly function: 7;
12
+ readonly predicate: 8;
13
+ };
14
+ type TypeID = (typeof TypeID)[keyof typeof TypeID];
15
+ /** Represents type class. */
16
+ declare const TypeClass: {
17
+ readonly logic: 1;
18
+ readonly typification: 2;
19
+ readonly function: 3;
20
+ readonly predicate: 4;
21
+ };
22
+ type TypeClass = (typeof TypeClass)[keyof typeof TypeClass];
23
+ /** Logic type object. */
24
+ declare const LogicT: {
25
+ readonly typeID: 6;
26
+ };
27
+ /** Integer type object. */
28
+ declare const IntegerT: {
29
+ readonly typeID: 2;
30
+ readonly isOrdered: true;
31
+ readonly isArithmetic: true;
32
+ readonly isIntegerCompatible: true;
33
+ };
34
+ /** Type transformation path. */
35
+ type TypePath = Branded<number[], 'TypePath'>;
36
+ /** Creates type path. */
37
+ declare function makeTypePath(path: number[]): TypePath;
38
+ /** AnyTyped type object. */
39
+ declare const AnyTypificationT: {
40
+ readonly typeID: 1;
41
+ };
42
+ /** Empty set typification. */
43
+ declare const EmptySetT: EchelonCollection;
44
+ /** Parametrized typification. */
45
+ type Parametrized = EchelonFunctional | EchelonPredicate;
46
+ /** General expression types. */
47
+ type ExpressionType = EchelonLogic | EchelonBase | EchelonTuple | EchelonCollection | EchelonFunctional | EchelonPredicate | EchelonAnyTyped | EchelonInteger;
48
+ /** Setexpr type. */
49
+ type Typification = EchelonBase | EchelonAnyTyped | EchelonInteger | EchelonCollection | EchelonTuple;
50
+ /** Typification context. */
51
+ type TypeContext = Map<string, ExpressionType>;
52
+ /** Functional argument. */
53
+ interface Argument {
54
+ readonly alias: string;
55
+ readonly type: Typification;
56
+ }
57
+ /** Type: Logic. */
58
+ interface EchelonLogic {
59
+ readonly typeID: typeof TypeID.logic;
60
+ }
61
+ /** Type: AnyTyped. */
62
+ interface EchelonAnyTyped {
63
+ readonly typeID: typeof TypeID.anyTypification;
64
+ }
65
+ /** Type: Integer. */
66
+ interface EchelonInteger {
67
+ readonly typeID: typeof TypeID.integer;
68
+ readonly isOrdered: true;
69
+ readonly isArithmetic: true;
70
+ readonly isIntegerCompatible: true;
71
+ }
72
+ /** Type: Element of basic set. */
73
+ interface EchelonBase {
74
+ readonly typeID: typeof TypeID.basic;
75
+ readonly baseID: string;
76
+ readonly isOrdered?: boolean;
77
+ readonly isArithmetic?: boolean;
78
+ readonly isIntegerCompatible?: boolean;
79
+ }
80
+ /** Type: Tuple. */
81
+ interface EchelonTuple {
82
+ readonly typeID: typeof TypeID.tuple;
83
+ readonly factors: readonly Typification[];
84
+ }
85
+ /** Type: Collection. */
86
+ interface EchelonCollection {
87
+ readonly typeID: typeof TypeID.collection;
88
+ readonly base: Typification;
89
+ }
90
+ /** Type: Functional. */
91
+ interface EchelonFunctional {
92
+ readonly typeID: typeof TypeID.function;
93
+ readonly result: Typification;
94
+ readonly args: readonly Argument[];
95
+ }
96
+ /** Type: Predicate. */
97
+ interface EchelonPredicate {
98
+ readonly typeID: typeof TypeID.predicate;
99
+ readonly result: EchelonLogic;
100
+ readonly args: readonly Argument[];
101
+ }
102
+ /** Create basic element typification. */
103
+ declare function basic(alias: string): EchelonBase;
104
+ /** Create constant element typification. */
105
+ declare function constant(alias: string): EchelonBase;
106
+ /** Create boolean typification. */
107
+ declare function bool(base: Typification): EchelonCollection;
108
+ /** Create tuple typification. */
109
+ declare function tuple(factors: Typification[]): EchelonTuple;
110
+ /** Remove boolean from typification. */
111
+ declare function debool(target: EchelonCollection): Typification;
112
+ /** Extract component from tuple. */
113
+ declare function component(target: EchelonTuple, index: number): Typification | null;
114
+ /** Checks if given type is typification. */
115
+ declare function isTypification(type: ExpressionType | null): boolean;
116
+ /** Checks if given type is radical. */
117
+ declare function isRadical(alias: string): boolean;
118
+ //#endregion
119
+ export { component as C, isTypification as D, isRadical as E, makeTypePath as O, bool as S, debool as T, TypeContext as _, EchelonCollection as a, Typification as b, EchelonLogic as c, EmptySetT as d, ExpressionType as f, TypeClass as g, Parametrized as h, EchelonBase as i, tuple as k, EchelonPredicate as l, LogicT as m, Argument as n, EchelonFunctional as o, IntegerT as p, EchelonAnyTyped as r, EchelonInteger as s, AnyTypificationT as t, EchelonTuple as u, TypeID as v, constant as w, basic as x, TypePath as y };
120
+ //# sourceMappingURL=typification-Dk-fisgO.d.ts.map
@@ -0,0 +1,30 @@
1
+ import { f as ExpressionType } from "./typification-Dk-fisgO.js";
2
+
3
+ //#region src/rslang/typification-graph.d.ts
4
+ /** Represents a single node of a {@link TypificationGraph}. */
5
+ interface TypificationNodeData extends Record<string, unknown> {
6
+ id: number;
7
+ rank: number;
8
+ text: string;
9
+ parents: number[];
10
+ annotations: string[];
11
+ }
12
+ /** Represents a typification multi-graph. */
13
+ declare class TypificationGraph {
14
+ /** List of nodes. */
15
+ nodes: TypificationNodeData[];
16
+ /** Map of nodes by ID. */
17
+ nodeById: Map<number, TypificationNodeData>;
18
+ /** Map of nodes by alias. */
19
+ nodeByAlias: Map<string, TypificationNodeData>;
20
+ /** Adds an element to the graph. */
21
+ addElement(alias: string, type: ExpressionType): void;
22
+ private processType;
23
+ private addBaseNode;
24
+ private addBooleanNode;
25
+ private addCartesianNode;
26
+ private addAliasAnnotation;
27
+ }
28
+ //#endregion
29
+ export { TypificationNodeData as n, TypificationGraph as t };
30
+ //# sourceMappingURL=typification-graph-6HcZ-rKH.d.ts.map
@@ -0,0 +1,13 @@
1
+ import { f as ExpressionType } from "./typification-Dk-fisgO.js";
2
+
3
+ //#region src/rslang/semantic/typification-parser.d.ts
4
+ interface TypificationParseResult {
5
+ type: ExpressionType | null;
6
+ error: string | null;
7
+ }
8
+ declare function parseTypeText(input: string): TypificationParseResult;
9
+ /** ASCII substitutions while editing typification text */
10
+ declare function applyAsciiTypeSubstitutions(raw: string): string;
11
+ //#endregion
12
+ export { applyAsciiTypeSubstitutions as n, parseTypeText as r, TypificationParseResult as t };
13
+ //# sourceMappingURL=typification-parser-BBVx1RxP.d.ts.map