@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/library/oss.ts","../../src/library/oss-layout-api.ts"],"sourcesContent":["/**\n * Module: Schema of Synthesis Operations.\n */\n\nimport { type Graph } from '../graph';\n\nimport { type LibraryItem } from './library';\nimport { type NodePosition, type OssLayout } from './oss-layout';\n\n/** Represents OSS node type. */\nexport const NodeType = {\n OPERATION: 1,\n BLOCK: 2\n} as const;\nexport type NodeType = (typeof NodeType)[keyof typeof NodeType];\n\n/** Represents OSS graph node. */\ninterface OssNode extends NodePosition {\n nodeType: NodeType;\n parent: number | null;\n}\n\n/** Represents {@link Operation} type. */\nexport const OperationType = {\n INPUT: 'input',\n SYNTHESIS: 'synthesis',\n REPLICA: 'replica'\n} as const;\nexport type OperationType = (typeof OperationType)[keyof typeof OperationType];\n\n/** Represents {@link Substitution} extended data. */\nexport interface CstSubstituteInfo {\n original: number;\n substitution: number;\n operation: number;\n original_schema: number;\n original_alias: string;\n original_term: string;\n substitution_schema: number;\n substitution_alias: string;\n substitution_term: string;\n}\n\n/** Represents Operation common attributes. */\ninterface OperationBase extends OssNode {\n id: number;\n alias: string;\n title: string;\n description: string;\n operation_type: OperationType;\n result: number | null;\n nodeType: typeof NodeType.OPERATION;\n has_additions: boolean;\n}\n\n/** Represents Input Operation. */\nexport interface OperationInput extends OperationBase {\n operation_type: typeof OperationType.INPUT;\n is_import: boolean;\n}\n\n/** Represents Replica Operation. */\ninterface OperationReplica extends OperationBase {\n operation_type: typeof OperationType.REPLICA;\n target: number;\n}\n\n/** Represents Synthesis Operation. */\nexport interface OperationSynthesis extends OperationBase {\n operation_type: typeof OperationType.SYNTHESIS;\n is_consolidation: boolean; // aka 'diamond synthesis'\n substitutions: CstSubstituteInfo[];\n arguments: number[];\n}\n\n/** Represents Operation. */\nexport type Operation = OperationInput | OperationReplica | OperationSynthesis;\n\n/** Represents Block. */\nexport interface Block extends OssNode {\n id: number;\n oss: number;\n title: string;\n description: string;\n parent: number | null;\n nodeType: typeof NodeType.BLOCK;\n}\n\n/** Represents item of OperationSchema. */\nexport type OssItem = Operation | Block;\n\n/** Represents {@link OperationSchema} statistics. */\nexport interface OperationSchemaStats {\n count_all: number;\n count_inputs: number;\n count_synthesis: number;\n count_schemas: number;\n count_owned: number;\n count_block: number;\n count_references: number;\n}\n\n/** Represents OperationSchema. */\nexport interface OperationSchema extends LibraryItem {\n editors: number[];\n operations: Operation[];\n blocks: Block[];\n replicas: {\n original: number;\n replica: number;\n }[];\n layout: OssLayout;\n arguments: {\n operation: number;\n argument: number;\n }[];\n substitutions: CstSubstituteInfo[];\n\n graph: Graph;\n extendedGraph: Graph;\n hierarchy: Graph<string>;\n schemas: number[];\n stats: OperationSchemaStats;\n operationByID: Map<number, Operation>;\n blockByID: Map<number, Block>;\n itemByNodeID: Map<string, OssItem>;\n}\n\n/** Represents substitution error description. */\nexport interface SubstitutionErrorDescription {\n errorType: SubstitutionErrorType;\n params: string[];\n}\n\n/** Represents Substitution table error types. */\nexport const SubstitutionErrorType = {\n invalidIDs: 0,\n incorrectCst: 1,\n invalidClasses: 2,\n invalidBasic: 3,\n invalidConstant: 4,\n typificationCycle: 5,\n baseSubstitutionNotSet: 6,\n unequalTypification: 7,\n unequalExpressions: 8,\n unequalArgsCount: 9,\n unequalArgs: 10,\n invalidNominal: 11\n} as const;\nexport type SubstitutionErrorType = (typeof SubstitutionErrorType)[keyof typeof SubstitutionErrorType];\n","import { NodeType, type OperationSchema, OperationType } from './oss';\nimport { type NodePosition, type OssLayout, type Position2D, type Rectangle2D } from './oss-layout';\n\nexport const GRID_SIZE = 10; // pixels - size of OSS grid\nconst MIN_DISTANCE = 2 * GRID_SIZE; // pixels - minimum distance between nodes\n\nexport const OPERATION_NODE_WIDTH = 150;\nexport const OPERATION_NODE_HEIGHT = 40;\n\n/** Layout manipulations for {@link OperationSchema}. */\nexport class LayoutManager {\n public oss: OperationSchema;\n public layout: OssLayout;\n\n constructor(oss: OperationSchema, layout?: OssLayout) {\n this.oss = oss;\n if (layout) {\n this.layout = layout;\n } else {\n this.layout = this.oss.layout;\n }\n }\n\n /** Calculate insert position for a new {@link Operation} */\n newOperationPosition(position: Rectangle2D, parent: number | null, args: number[] = []): Rectangle2D {\n const result = { ...position };\n const parentNode = this.layout.find(pos => pos.nodeID === `b${parent}`) ?? null;\n const operations = this.layout.filter(pos => pos.nodeID.startsWith('o'));\n const hasArguments = args.length !== 0;\n if (hasArguments) {\n const pos = calculatePositionFromArgs(operations.filter(node => args.includes(Number(node.nodeID.slice(1)))));\n result.x = pos.x;\n result.y = pos.y;\n } else if (parentNode) {\n result.x = parentNode.x + MIN_DISTANCE;\n result.y = parentNode.y + MIN_DISTANCE;\n } else {\n const pos = this.calculatePositionForFreeOperation(result);\n result.x = pos.x;\n result.y = pos.y;\n }\n\n const siblingBlocks = this.oss.blocks.filter(block => block.parent === parent).map(block => block.nodeID);\n preventOverlap(\n result,\n this.layout.filter(node => siblingBlocks.includes(node.nodeID)),\n {\n moveX: !hasArguments,\n moveY: hasArguments\n }\n );\n\n preventOverlap(result, operations);\n this.extendParentBounds(parentNode, result);\n\n return result;\n }\n\n /** Calculate insert position for a new {@link Block} */\n newBlockPosition(position: Rectangle2D, parent: number | null, blocks: number[], operations: number[]): Rectangle2D {\n const blockNodes = blocks.map(id => this.layout.find(block => block.nodeID === `b${id}`)).filter(node => !!node);\n const operationNodes = operations\n .map(id => this.layout.find(operation => operation.nodeID === `o${id}`))\n .filter(node => !!node);\n const parentNode = this.layout.find(pos => pos.nodeID === `b${parent}`) ?? null;\n const parentID = parentNode ? parent : null;\n\n let result: Rectangle2D = { ...position };\n\n if (blockNodes.length !== 0 || operationNodes.length !== 0) {\n result = calculatePositionFromChildren(position, operationNodes, blockNodes);\n } else if (parentNode) {\n result = {\n x: parentNode.x + MIN_DISTANCE,\n y: parentNode.y + MIN_DISTANCE,\n width: position.width,\n height: position.height\n };\n } else {\n result = this.calculatePositionForFreeBlock(result);\n }\n\n if (blockNodes.length === 0 && operationNodes.length === 0) {\n const siblings = this.oss.blocks.filter(block => block.parent === parentID).map(block => block.nodeID);\n preventOverlap(\n result,\n this.layout.filter(node => siblings.includes(node.nodeID))\n );\n }\n\n this.extendParentBounds(parentNode, result);\n return result;\n }\n\n /** Calculate insert position for a new clone of {@link Operation} */\n newClonePosition(targetID: string): Rectangle2D | null {\n const targetNode = this.layout.find(pos => pos.nodeID === targetID);\n if (!targetNode) {\n return null;\n } else {\n return {\n x: targetNode.x + targetNode.width / 2 + GRID_SIZE,\n y: targetNode.y + targetNode.height / 2 + GRID_SIZE,\n width: OPERATION_NODE_WIDTH,\n height: OPERATION_NODE_HEIGHT\n };\n }\n }\n\n /** Update layout when parent changes */\n onChangeParent(targetID: string, newParent: string | null) {\n const targetNode = this.layout.find(pos => pos.nodeID === targetID);\n if (!targetNode) {\n return;\n }\n\n const parentNode = this.layout.find(pos => pos.nodeID === newParent) ?? null;\n const offset = this.calculateOffsetForParentChange(targetNode, parentNode);\n if (offset.x === 0 && offset.y === 0) {\n return;\n }\n\n targetNode.x += offset.x;\n targetNode.y += offset.y;\n\n const children = this.oss.hierarchy.expandAllOutputs([targetID]);\n const childrenPositions = this.layout.filter(pos => children.includes(pos.nodeID));\n for (const child of childrenPositions) {\n child.x += offset.x;\n child.y += offset.y;\n }\n\n this.extendParentBounds(parentNode, targetNode);\n }\n\n /** Calculate closest node to the left */\n selectLeft(targetID: string): string | null {\n const targetNode = this.layout.find(pos => pos.nodeID === targetID);\n if (!targetNode) {\n return null;\n }\n const operationNodes = this.layout.filter(pos => pos.nodeID !== targetID && pos.nodeID.startsWith('o'));\n const leftNodes = operationNodes.filter(pos => pos.x <= targetNode.x);\n if (leftNodes.length === 0) {\n return null;\n }\n const similarYNodes = leftNodes.filter(pos => Math.abs(pos.y - targetNode.y) <= MIN_DISTANCE);\n let closestNode: typeof targetNode | null = null;\n if (similarYNodes.length > 0) {\n closestNode = similarYNodes.reduce((prev, curr) => (curr.x > prev.x ? curr : prev));\n } else {\n closestNode = findClosestNodeByDistance(leftNodes, targetNode);\n }\n return closestNode?.nodeID ?? null;\n }\n\n /** Calculate closest node to the right */\n selectRight(targetID: string): string | null {\n const targetNode = this.layout.find(pos => pos.nodeID === targetID);\n if (!targetNode) {\n return null;\n }\n const operationNodes = this.layout.filter(pos => pos.nodeID !== targetID && pos.nodeID.startsWith('o'));\n const rightNodes = operationNodes.filter(pos => pos.x >= targetNode.x);\n if (rightNodes.length === 0) {\n return null;\n }\n const similarYNodes = rightNodes.filter(pos => Math.abs(pos.y - targetNode.y) <= MIN_DISTANCE);\n let closestNode: typeof targetNode | null = null;\n if (similarYNodes.length > 0) {\n closestNode = similarYNodes.reduce((prev, curr) => (curr.x < prev.x ? curr : prev));\n } else {\n closestNode = findClosestNodeByDistance(rightNodes, targetNode);\n }\n return closestNode?.nodeID ?? null;\n }\n\n /** Calculate closest node upwards */\n selectUp(targetID: string): string | null {\n const targetNode = this.layout.find(pos => pos.nodeID === targetID);\n if (!targetNode) {\n return null;\n }\n\n const operationNodes = this.layout.filter(pos => pos.nodeID !== targetID && pos.nodeID.startsWith('o'));\n const upperNodes = operationNodes.filter(pos => pos.y <= targetNode.y - MIN_DISTANCE);\n const targetOperation = this.oss.itemByNodeID.get(targetID);\n if (upperNodes.length === 0 || !targetOperation || targetOperation.nodeType === NodeType.BLOCK) {\n return null;\n }\n\n const predecessors = this.oss.graph.expandAllInputs([targetOperation.id]);\n const predecessorNodes = upperNodes.filter(pos => predecessors.includes(Number(pos.nodeID.slice(1))));\n\n let closestNode: typeof targetNode | null = null;\n if (predecessorNodes.length > 0) {\n closestNode = findClosestNodeByDistance(predecessorNodes, targetNode);\n } else {\n closestNode = findClosestNodeByDistance(upperNodes, targetNode);\n }\n return closestNode?.nodeID ?? null;\n }\n\n /** Calculate closest node downwards */\n selectDown(targetID: string): string | null {\n const targetNode = this.layout.find(pos => pos.nodeID === targetID);\n if (!targetNode) {\n return null;\n }\n\n const operationNodes = this.layout.filter(pos => pos.nodeID !== targetID && pos.nodeID.startsWith('o'));\n const lowerNodes = operationNodes.filter(pos => pos.y >= targetNode.y - MIN_DISTANCE);\n const targetOperation = this.oss.itemByNodeID.get(targetID);\n if (lowerNodes.length === 0 || !targetOperation || targetOperation.nodeType === NodeType.BLOCK) {\n return null;\n }\n\n const descendants = this.oss.graph.expandAllOutputs([targetOperation.id]);\n const descendantsNodes = lowerNodes.filter(pos => descendants.includes(Number(pos.nodeID.slice(1))));\n\n let closestNode: typeof targetNode | null = null;\n if (descendantsNodes.length > 0) {\n closestNode = findClosestNodeByDistance(descendantsNodes, targetNode);\n } else {\n closestNode = findClosestNodeByDistance(lowerNodes, targetNode);\n }\n return closestNode?.nodeID ?? null;\n }\n\n private extendParentBounds(parent: NodePosition | null, child: Rectangle2D) {\n if (!parent) {\n return;\n }\n const borderX = child.x + child.width + MIN_DISTANCE;\n const borderY = child.y + child.height + MIN_DISTANCE;\n parent.width = Math.max(parent.width, borderX - parent.x);\n parent.height = Math.max(parent.height, borderY - parent.y);\n }\n\n private calculatePositionForFreeOperation(initial: Position2D): Position2D {\n if (this.oss.operations.length === 0) {\n return initial;\n }\n\n const freeInputs = this.oss.operations\n .filter(\n operation =>\n operation.parent === null &&\n (operation.operation_type !== OperationType.SYNTHESIS || operation.arguments.length === 0)\n )\n .map(operation => operation.nodeID);\n let inputsPositions = this.layout.filter(pos => freeInputs.includes(pos.nodeID));\n if (inputsPositions.length === 0) {\n inputsPositions = this.layout.filter(pos => pos.nodeID.startsWith('o'));\n }\n const maxX = Math.max(...inputsPositions.map(node => node.x));\n const minY = Math.min(...inputsPositions.map(node => node.y));\n return {\n x: maxX + OPERATION_NODE_WIDTH + MIN_DISTANCE + GRID_SIZE,\n y: minY\n };\n }\n\n private calculatePositionForFreeBlock(initial: Rectangle2D): Rectangle2D {\n const rootBlocks = this.oss.blocks.filter(block => block.parent === null).map(block => block.nodeID);\n const blocksPositions = this.layout.filter(pos => rootBlocks.includes(pos.nodeID));\n if (blocksPositions.length === 0) {\n return initial;\n }\n const maxX = Math.max(...blocksPositions.map(node => node.x + node.width));\n const minY = Math.min(...blocksPositions.map(node => node.y));\n return { ...initial, x: maxX + MIN_DISTANCE, y: minY };\n }\n\n private calculateOffsetForParentChange(target: NodePosition, parent: NodePosition | null): Position2D {\n const newPosition = { ...target };\n if (parent === null) {\n const rootElements = this.oss.hierarchy.rootNodes();\n const positions = this.layout.filter(pos => rootElements.includes(pos.nodeID));\n preventOverlap(newPosition, positions);\n } else if (!rectanglesStrictOverlap(target, parent)) {\n newPosition.x = parent.x + MIN_DISTANCE;\n newPosition.y = parent.y + MIN_DISTANCE;\n\n const siblings = this.oss.hierarchy.at(parent.nodeID)?.outputs ?? [];\n const siblingsPositions = this.layout.filter(pos => siblings.includes(pos.nodeID));\n preventOverlap(newPosition, siblingsPositions);\n }\n return { x: newPosition.x - target.x, y: newPosition.y - target.y };\n }\n}\n\n// ======= Internals =======\nfunction rectanglesOverlap(a: Rectangle2D, b: Rectangle2D): boolean {\n return !(\n a.x + a.width + MIN_DISTANCE <= b.x ||\n b.x + b.width + MIN_DISTANCE <= a.x ||\n a.y + a.height + MIN_DISTANCE <= b.y ||\n b.y + b.height + MIN_DISTANCE <= a.y\n );\n}\n\nfunction rectanglesStrictOverlap(a: Rectangle2D, b: Rectangle2D): boolean {\n return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y);\n}\n\nfunction preventOverlap(\n target: Rectangle2D,\n fixedRectangles: Rectangle2D[],\n options: { moveX?: boolean; moveY?: boolean } = { moveX: true, moveY: true }\n) {\n if ((!options.moveX && !options.moveY) || fixedRectangles.length === 0) {\n return;\n }\n let hasOverlap: boolean;\n do {\n hasOverlap = false;\n for (const fixed of fixedRectangles) {\n if (rectanglesOverlap(target, fixed)) {\n hasOverlap = true;\n if (options.moveX) {\n target.x += MIN_DISTANCE;\n }\n if (options.moveY) {\n target.y += MIN_DISTANCE;\n }\n break;\n }\n }\n } while (hasOverlap);\n}\n\nfunction calculatePositionFromArgs(args: NodePosition[]): Position2D {\n const maxY = Math.max(...args.map(node => node.y));\n const minX = Math.min(...args.map(node => node.x));\n const maxX = Math.max(...args.map(node => node.x));\n return {\n x: Math.ceil((maxX + minX) / 2 / GRID_SIZE) * GRID_SIZE,\n y: maxY + 2 * OPERATION_NODE_HEIGHT + MIN_DISTANCE\n };\n}\n\nfunction calculatePositionFromChildren(\n initial: Rectangle2D,\n operations: NodePosition[],\n blocks: NodePosition[]\n): Rectangle2D {\n const allNodes = [...blocks, ...operations];\n if (allNodes.length === 0) {\n return initial;\n }\n\n const left = Math.min(...allNodes.map(n => n.x)) - MIN_DISTANCE;\n const top = Math.min(...allNodes.map(n => n.y)) - MIN_DISTANCE;\n const right = Math.max(...allNodes.map(n => n.x + n.width)) + MIN_DISTANCE;\n const bottom = Math.max(...allNodes.map(n => n.y + n.height)) + MIN_DISTANCE;\n\n return {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top\n };\n}\n\nfunction findClosestNodeByDistance(nodes: NodePosition[], target: NodePosition): NodePosition | null {\n let minDist = Infinity;\n let minNode = null;\n for (const curr of nodes) {\n const currDist = Math.hypot(curr.x - target.x, curr.y - target.y);\n if (currDist < minDist) {\n minDist = currDist;\n minNode = curr;\n }\n }\n return minNode;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"oss-layout-api.js","names":[],"sources":["../../src/library/oss-layout-api.ts"],"sourcesContent":["import { NodeType, type OperationSchema, OperationType } from './oss';\nimport { type NodePosition, type OssLayout, type Position2D, type Rectangle2D } from './oss-layout';\n\nexport const GRID_SIZE = 10; // pixels - size of OSS grid\nconst MIN_DISTANCE = 2 * GRID_SIZE; // pixels - minimum distance between nodes\n\nexport const OPERATION_NODE_WIDTH = 150;\nexport const OPERATION_NODE_HEIGHT = 40;\n\n/** Layout manipulations for {@link OperationSchema}. */\nexport class LayoutManager {\n public oss: OperationSchema;\n public layout: OssLayout;\n\n constructor(oss: OperationSchema, layout?: OssLayout) {\n this.oss = oss;\n if (layout) {\n this.layout = layout;\n } else {\n this.layout = this.oss.layout;\n }\n }\n\n /** Calculate insert position for a new {@link Operation} */\n newOperationPosition(position: Rectangle2D, parent: number | null, args: number[] = []): Rectangle2D {\n const result = { ...position };\n const parentNode = this.layout.find(pos => pos.nodeID === `b${parent}`) ?? null;\n const operations = this.layout.filter(pos => pos.nodeID.startsWith('o'));\n const hasArguments = args.length !== 0;\n if (hasArguments) {\n const pos = calculatePositionFromArgs(operations.filter(node => args.includes(Number(node.nodeID.slice(1)))));\n result.x = pos.x;\n result.y = pos.y;\n } else if (parentNode) {\n result.x = parentNode.x + MIN_DISTANCE;\n result.y = parentNode.y + MIN_DISTANCE;\n } else {\n const pos = this.calculatePositionForFreeOperation(result);\n result.x = pos.x;\n result.y = pos.y;\n }\n\n const siblingBlocks = this.oss.blocks.filter(block => block.parent === parent).map(block => block.nodeID);\n preventOverlap(\n result,\n this.layout.filter(node => siblingBlocks.includes(node.nodeID)),\n {\n moveX: !hasArguments,\n moveY: hasArguments\n }\n );\n\n preventOverlap(result, operations);\n this.extendParentBounds(parentNode, result);\n\n return result;\n }\n\n /** Calculate insert position for a new {@link Block} */\n newBlockPosition(position: Rectangle2D, parent: number | null, blocks: number[], operations: number[]): Rectangle2D {\n const blockNodes = blocks.map(id => this.layout.find(block => block.nodeID === `b${id}`)).filter(node => !!node);\n const operationNodes = operations\n .map(id => this.layout.find(operation => operation.nodeID === `o${id}`))\n .filter(node => !!node);\n const parentNode = this.layout.find(pos => pos.nodeID === `b${parent}`) ?? null;\n const parentID = parentNode ? parent : null;\n\n let result: Rectangle2D = { ...position };\n\n if (blockNodes.length !== 0 || operationNodes.length !== 0) {\n result = calculatePositionFromChildren(position, operationNodes, blockNodes);\n } else if (parentNode) {\n result = {\n x: parentNode.x + MIN_DISTANCE,\n y: parentNode.y + MIN_DISTANCE,\n width: position.width,\n height: position.height\n };\n } else {\n result = this.calculatePositionForFreeBlock(result);\n }\n\n if (blockNodes.length === 0 && operationNodes.length === 0) {\n const siblings = this.oss.blocks.filter(block => block.parent === parentID).map(block => block.nodeID);\n preventOverlap(\n result,\n this.layout.filter(node => siblings.includes(node.nodeID))\n );\n }\n\n this.extendParentBounds(parentNode, result);\n return result;\n }\n\n /** Calculate insert position for a new clone of {@link Operation} */\n newClonePosition(targetID: string): Rectangle2D | null {\n const targetNode = this.layout.find(pos => pos.nodeID === targetID);\n if (!targetNode) {\n return null;\n } else {\n return {\n x: targetNode.x + targetNode.width / 2 + GRID_SIZE,\n y: targetNode.y + targetNode.height / 2 + GRID_SIZE,\n width: OPERATION_NODE_WIDTH,\n height: OPERATION_NODE_HEIGHT\n };\n }\n }\n\n /** Update layout when parent changes */\n onChangeParent(targetID: string, newParent: string | null) {\n const targetNode = this.layout.find(pos => pos.nodeID === targetID);\n if (!targetNode) {\n return;\n }\n\n const parentNode = this.layout.find(pos => pos.nodeID === newParent) ?? null;\n const offset = this.calculateOffsetForParentChange(targetNode, parentNode);\n if (offset.x === 0 && offset.y === 0) {\n return;\n }\n\n targetNode.x += offset.x;\n targetNode.y += offset.y;\n\n const children = this.oss.hierarchy.expandAllOutputs([targetID]);\n const childrenPositions = this.layout.filter(pos => children.includes(pos.nodeID));\n for (const child of childrenPositions) {\n child.x += offset.x;\n child.y += offset.y;\n }\n\n this.extendParentBounds(parentNode, targetNode);\n }\n\n /** Calculate closest node to the left */\n selectLeft(targetID: string): string | null {\n const targetNode = this.layout.find(pos => pos.nodeID === targetID);\n if (!targetNode) {\n return null;\n }\n const operationNodes = this.layout.filter(pos => pos.nodeID !== targetID && pos.nodeID.startsWith('o'));\n const leftNodes = operationNodes.filter(pos => pos.x <= targetNode.x);\n if (leftNodes.length === 0) {\n return null;\n }\n const similarYNodes = leftNodes.filter(pos => Math.abs(pos.y - targetNode.y) <= MIN_DISTANCE);\n let closestNode: typeof targetNode | null = null;\n if (similarYNodes.length > 0) {\n closestNode = similarYNodes.reduce((prev, curr) => (curr.x > prev.x ? curr : prev));\n } else {\n closestNode = findClosestNodeByDistance(leftNodes, targetNode);\n }\n return closestNode?.nodeID ?? null;\n }\n\n /** Calculate closest node to the right */\n selectRight(targetID: string): string | null {\n const targetNode = this.layout.find(pos => pos.nodeID === targetID);\n if (!targetNode) {\n return null;\n }\n const operationNodes = this.layout.filter(pos => pos.nodeID !== targetID && pos.nodeID.startsWith('o'));\n const rightNodes = operationNodes.filter(pos => pos.x >= targetNode.x);\n if (rightNodes.length === 0) {\n return null;\n }\n const similarYNodes = rightNodes.filter(pos => Math.abs(pos.y - targetNode.y) <= MIN_DISTANCE);\n let closestNode: typeof targetNode | null = null;\n if (similarYNodes.length > 0) {\n closestNode = similarYNodes.reduce((prev, curr) => (curr.x < prev.x ? curr : prev));\n } else {\n closestNode = findClosestNodeByDistance(rightNodes, targetNode);\n }\n return closestNode?.nodeID ?? null;\n }\n\n /** Calculate closest node upwards */\n selectUp(targetID: string): string | null {\n const targetNode = this.layout.find(pos => pos.nodeID === targetID);\n if (!targetNode) {\n return null;\n }\n\n const operationNodes = this.layout.filter(pos => pos.nodeID !== targetID && pos.nodeID.startsWith('o'));\n const upperNodes = operationNodes.filter(pos => pos.y <= targetNode.y - MIN_DISTANCE);\n const targetOperation = this.oss.itemByNodeID.get(targetID);\n if (upperNodes.length === 0 || !targetOperation || targetOperation.nodeType === NodeType.BLOCK) {\n return null;\n }\n\n const predecessors = this.oss.graph.expandAllInputs([targetOperation.id]);\n const predecessorNodes = upperNodes.filter(pos => predecessors.includes(Number(pos.nodeID.slice(1))));\n\n let closestNode: typeof targetNode | null = null;\n if (predecessorNodes.length > 0) {\n closestNode = findClosestNodeByDistance(predecessorNodes, targetNode);\n } else {\n closestNode = findClosestNodeByDistance(upperNodes, targetNode);\n }\n return closestNode?.nodeID ?? null;\n }\n\n /** Calculate closest node downwards */\n selectDown(targetID: string): string | null {\n const targetNode = this.layout.find(pos => pos.nodeID === targetID);\n if (!targetNode) {\n return null;\n }\n\n const operationNodes = this.layout.filter(pos => pos.nodeID !== targetID && pos.nodeID.startsWith('o'));\n const lowerNodes = operationNodes.filter(pos => pos.y >= targetNode.y - MIN_DISTANCE);\n const targetOperation = this.oss.itemByNodeID.get(targetID);\n if (lowerNodes.length === 0 || !targetOperation || targetOperation.nodeType === NodeType.BLOCK) {\n return null;\n }\n\n const descendants = this.oss.graph.expandAllOutputs([targetOperation.id]);\n const descendantsNodes = lowerNodes.filter(pos => descendants.includes(Number(pos.nodeID.slice(1))));\n\n let closestNode: typeof targetNode | null = null;\n if (descendantsNodes.length > 0) {\n closestNode = findClosestNodeByDistance(descendantsNodes, targetNode);\n } else {\n closestNode = findClosestNodeByDistance(lowerNodes, targetNode);\n }\n return closestNode?.nodeID ?? null;\n }\n\n private extendParentBounds(parent: NodePosition | null, child: Rectangle2D) {\n if (!parent) {\n return;\n }\n const borderX = child.x + child.width + MIN_DISTANCE;\n const borderY = child.y + child.height + MIN_DISTANCE;\n parent.width = Math.max(parent.width, borderX - parent.x);\n parent.height = Math.max(parent.height, borderY - parent.y);\n }\n\n private calculatePositionForFreeOperation(initial: Position2D): Position2D {\n if (this.oss.operations.length === 0) {\n return initial;\n }\n\n const freeInputs = this.oss.operations\n .filter(\n operation =>\n operation.parent === null &&\n (operation.operation_type !== OperationType.SYNTHESIS || operation.arguments.length === 0)\n )\n .map(operation => operation.nodeID);\n let inputsPositions = this.layout.filter(pos => freeInputs.includes(pos.nodeID));\n if (inputsPositions.length === 0) {\n inputsPositions = this.layout.filter(pos => pos.nodeID.startsWith('o'));\n }\n const maxX = Math.max(...inputsPositions.map(node => node.x));\n const minY = Math.min(...inputsPositions.map(node => node.y));\n return {\n x: maxX + OPERATION_NODE_WIDTH + MIN_DISTANCE + GRID_SIZE,\n y: minY\n };\n }\n\n private calculatePositionForFreeBlock(initial: Rectangle2D): Rectangle2D {\n const rootBlocks = this.oss.blocks.filter(block => block.parent === null).map(block => block.nodeID);\n const blocksPositions = this.layout.filter(pos => rootBlocks.includes(pos.nodeID));\n if (blocksPositions.length === 0) {\n return initial;\n }\n const maxX = Math.max(...blocksPositions.map(node => node.x + node.width));\n const minY = Math.min(...blocksPositions.map(node => node.y));\n return { ...initial, x: maxX + MIN_DISTANCE, y: minY };\n }\n\n private calculateOffsetForParentChange(target: NodePosition, parent: NodePosition | null): Position2D {\n const newPosition = { ...target };\n if (parent === null) {\n const rootElements = this.oss.hierarchy.rootNodes();\n const positions = this.layout.filter(pos => rootElements.includes(pos.nodeID));\n preventOverlap(newPosition, positions);\n } else if (!rectanglesStrictOverlap(target, parent)) {\n newPosition.x = parent.x + MIN_DISTANCE;\n newPosition.y = parent.y + MIN_DISTANCE;\n\n const siblings = this.oss.hierarchy.at(parent.nodeID)?.outputs ?? [];\n const siblingsPositions = this.layout.filter(pos => siblings.includes(pos.nodeID));\n preventOverlap(newPosition, siblingsPositions);\n }\n return { x: newPosition.x - target.x, y: newPosition.y - target.y };\n }\n}\n\n// ======= Internals =======\nfunction rectanglesOverlap(a: Rectangle2D, b: Rectangle2D): boolean {\n return !(\n a.x + a.width + MIN_DISTANCE <= b.x ||\n b.x + b.width + MIN_DISTANCE <= a.x ||\n a.y + a.height + MIN_DISTANCE <= b.y ||\n b.y + b.height + MIN_DISTANCE <= a.y\n );\n}\n\nfunction rectanglesStrictOverlap(a: Rectangle2D, b: Rectangle2D): boolean {\n return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y);\n}\n\nfunction preventOverlap(\n target: Rectangle2D,\n fixedRectangles: Rectangle2D[],\n options: { moveX?: boolean; moveY?: boolean } = { moveX: true, moveY: true }\n) {\n if ((!options.moveX && !options.moveY) || fixedRectangles.length === 0) {\n return;\n }\n let hasOverlap: boolean;\n do {\n hasOverlap = false;\n for (const fixed of fixedRectangles) {\n if (rectanglesOverlap(target, fixed)) {\n hasOverlap = true;\n if (options.moveX) {\n target.x += MIN_DISTANCE;\n }\n if (options.moveY) {\n target.y += MIN_DISTANCE;\n }\n break;\n }\n }\n } while (hasOverlap);\n}\n\nfunction calculatePositionFromArgs(args: NodePosition[]): Position2D {\n const maxY = Math.max(...args.map(node => node.y));\n const minX = Math.min(...args.map(node => node.x));\n const maxX = Math.max(...args.map(node => node.x));\n return {\n x: Math.ceil((maxX + minX) / 2 / GRID_SIZE) * GRID_SIZE,\n y: maxY + 2 * OPERATION_NODE_HEIGHT + MIN_DISTANCE\n };\n}\n\nfunction calculatePositionFromChildren(\n initial: Rectangle2D,\n operations: NodePosition[],\n blocks: NodePosition[]\n): Rectangle2D {\n const allNodes = [...blocks, ...operations];\n if (allNodes.length === 0) {\n return initial;\n }\n\n const left = Math.min(...allNodes.map(n => n.x)) - MIN_DISTANCE;\n const top = Math.min(...allNodes.map(n => n.y)) - MIN_DISTANCE;\n const right = Math.max(...allNodes.map(n => n.x + n.width)) + MIN_DISTANCE;\n const bottom = Math.max(...allNodes.map(n => n.y + n.height)) + MIN_DISTANCE;\n\n return {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top\n };\n}\n\nfunction findClosestNodeByDistance(nodes: NodePosition[], target: NodePosition): NodePosition | null {\n let minDist = Infinity;\n let minNode = null;\n for (const curr of nodes) {\n const currDist = Math.hypot(curr.x - target.x, curr.y - target.y);\n if (currDist < minDist) {\n minDist = currDist;\n minNode = curr;\n }\n }\n return minNode;\n}\n"],"mappings":";;AAGA,MAAa,YAAY;AACzB,MAAM,eAAe;AAErB,MAAa,uBAAuB;AACpC,MAAa,wBAAwB;;AAGrC,IAAa,gBAAb,MAA2B;CACzB;CACA;CAEA,YAAY,KAAsB,QAAoB;EACpD,KAAK,MAAM;EACX,IAAI,QACF,KAAK,SAAS;OAEd,KAAK,SAAS,KAAK,IAAI;CAE3B;;CAGA,qBAAqB,UAAuB,QAAuB,OAAiB,CAAC,GAAgB;EACnG,MAAM,SAAS,EAAE,GAAG,SAAS;EAC7B,MAAM,aAAa,KAAK,OAAO,MAAK,QAAO,IAAI,WAAW,IAAI,QAAQ,KAAK;EAC3E,MAAM,aAAa,KAAK,OAAO,QAAO,QAAO,IAAI,OAAO,WAAW,GAAG,CAAC;EACvE,MAAM,eAAe,KAAK,WAAW;EACrC,IAAI,cAAc;GAChB,MAAM,MAAM,0BAA0B,WAAW,QAAO,SAAQ,KAAK,SAAS,OAAO,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;GAC5G,OAAO,IAAI,IAAI;GACf,OAAO,IAAI,IAAI;EACjB,OAAO,IAAI,YAAY;GACrB,OAAO,IAAI,WAAW,IAAI;GAC1B,OAAO,IAAI,WAAW,IAAI;EAC5B,OAAO;GACL,MAAM,MAAM,KAAK,kCAAkC,MAAM;GACzD,OAAO,IAAI,IAAI;GACf,OAAO,IAAI,IAAI;EACjB;EAEA,MAAM,gBAAgB,KAAK,IAAI,OAAO,QAAO,UAAS,MAAM,WAAW,MAAM,CAAC,CAAC,KAAI,UAAS,MAAM,MAAM;EACxG,eACE,QACA,KAAK,OAAO,QAAO,SAAQ,cAAc,SAAS,KAAK,MAAM,CAAC,GAC9D;GACE,OAAO,CAAC;GACR,OAAO;EACT,CACF;EAEA,eAAe,QAAQ,UAAU;EACjC,KAAK,mBAAmB,YAAY,MAAM;EAE1C,OAAO;CACT;;CAGA,iBAAiB,UAAuB,QAAuB,QAAkB,YAAmC;EAClH,MAAM,aAAa,OAAO,KAAI,OAAM,KAAK,OAAO,MAAK,UAAS,MAAM,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,QAAO,SAAQ,CAAC,CAAC,IAAI;EAC/G,MAAM,iBAAiB,WACpB,KAAI,OAAM,KAAK,OAAO,MAAK,cAAa,UAAU,WAAW,IAAI,IAAI,CAAC,CAAC,CACvE,QAAO,SAAQ,CAAC,CAAC,IAAI;EACxB,MAAM,aAAa,KAAK,OAAO,MAAK,QAAO,IAAI,WAAW,IAAI,QAAQ,KAAK;EAC3E,MAAM,WAAW,aAAa,SAAS;EAEvC,IAAI,SAAsB,EAAE,GAAG,SAAS;EAExC,IAAI,WAAW,WAAW,KAAK,eAAe,WAAW,GACvD,SAAS,8BAA8B,UAAU,gBAAgB,UAAU;OACtE,IAAI,YACT,SAAS;GACP,GAAG,WAAW,IAAI;GAClB,GAAG,WAAW,IAAI;GAClB,OAAO,SAAS;GAChB,QAAQ,SAAS;EACnB;OAEA,SAAS,KAAK,8BAA8B,MAAM;EAGpD,IAAI,WAAW,WAAW,KAAK,eAAe,WAAW,GAAG;GAC1D,MAAM,WAAW,KAAK,IAAI,OAAO,QAAO,UAAS,MAAM,WAAW,QAAQ,CAAC,CAAC,KAAI,UAAS,MAAM,MAAM;GACrG,eACE,QACA,KAAK,OAAO,QAAO,SAAQ,SAAS,SAAS,KAAK,MAAM,CAAC,CAC3D;EACF;EAEA,KAAK,mBAAmB,YAAY,MAAM;EAC1C,OAAO;CACT;;CAGA,iBAAiB,UAAsC;EACrD,MAAM,aAAa,KAAK,OAAO,MAAK,QAAO,IAAI,WAAW,QAAQ;EAClE,IAAI,CAAC,YACH,OAAO;OAEP,OAAO;GACL,GAAG,WAAW,IAAI,WAAW,QAAQ,IAAA;GACrC,GAAG,WAAW,IAAI,WAAW,SAAS,IAAA;GACtC,OAAA;GACA,QAAA;EACF;CAEJ;;CAGA,eAAe,UAAkB,WAA0B;EACzD,MAAM,aAAa,KAAK,OAAO,MAAK,QAAO,IAAI,WAAW,QAAQ;EAClE,IAAI,CAAC,YACH;EAGF,MAAM,aAAa,KAAK,OAAO,MAAK,QAAO,IAAI,WAAW,SAAS,KAAK;EACxE,MAAM,SAAS,KAAK,+BAA+B,YAAY,UAAU;EACzE,IAAI,OAAO,MAAM,KAAK,OAAO,MAAM,GACjC;EAGF,WAAW,KAAK,OAAO;EACvB,WAAW,KAAK,OAAO;EAEvB,MAAM,WAAW,KAAK,IAAI,UAAU,iBAAiB,CAAC,QAAQ,CAAC;EAC/D,MAAM,oBAAoB,KAAK,OAAO,QAAO,QAAO,SAAS,SAAS,IAAI,MAAM,CAAC;EACjF,KAAK,MAAM,SAAS,mBAAmB;GACrC,MAAM,KAAK,OAAO;GAClB,MAAM,KAAK,OAAO;EACpB;EAEA,KAAK,mBAAmB,YAAY,UAAU;CAChD;;CAGA,WAAW,UAAiC;EAC1C,MAAM,aAAa,KAAK,OAAO,MAAK,QAAO,IAAI,WAAW,QAAQ;EAClE,IAAI,CAAC,YACH,OAAO;EAGT,MAAM,YADiB,KAAK,OAAO,QAAO,QAAO,IAAI,WAAW,YAAY,IAAI,OAAO,WAAW,GAAG,CACnF,CAAA,CAAe,QAAO,QAAO,IAAI,KAAK,WAAW,CAAC;EACpE,IAAI,UAAU,WAAW,GACvB,OAAO;EAET,MAAM,gBAAgB,UAAU,QAAO,QAAO,KAAK,IAAI,IAAI,IAAI,WAAW,CAAC,KAAK,YAAY;EAC5F,IAAI,cAAwC;EAC5C,IAAI,cAAc,SAAS,GACzB,cAAc,cAAc,QAAQ,MAAM,SAAU,KAAK,IAAI,KAAK,IAAI,OAAO,IAAK;OAElF,cAAc,0BAA0B,WAAW,UAAU;EAE/D,OAAO,aAAa,UAAU;CAChC;;CAGA,YAAY,UAAiC;EAC3C,MAAM,aAAa,KAAK,OAAO,MAAK,QAAO,IAAI,WAAW,QAAQ;EAClE,IAAI,CAAC,YACH,OAAO;EAGT,MAAM,aADiB,KAAK,OAAO,QAAO,QAAO,IAAI,WAAW,YAAY,IAAI,OAAO,WAAW,GAAG,CAClF,CAAA,CAAe,QAAO,QAAO,IAAI,KAAK,WAAW,CAAC;EACrE,IAAI,WAAW,WAAW,GACxB,OAAO;EAET,MAAM,gBAAgB,WAAW,QAAO,QAAO,KAAK,IAAI,IAAI,IAAI,WAAW,CAAC,KAAK,YAAY;EAC7F,IAAI,cAAwC;EAC5C,IAAI,cAAc,SAAS,GACzB,cAAc,cAAc,QAAQ,MAAM,SAAU,KAAK,IAAI,KAAK,IAAI,OAAO,IAAK;OAElF,cAAc,0BAA0B,YAAY,UAAU;EAEhE,OAAO,aAAa,UAAU;CAChC;;CAGA,SAAS,UAAiC;EACxC,MAAM,aAAa,KAAK,OAAO,MAAK,QAAO,IAAI,WAAW,QAAQ;EAClE,IAAI,CAAC,YACH,OAAO;EAIT,MAAM,aADiB,KAAK,OAAO,QAAO,QAAO,IAAI,WAAW,YAAY,IAAI,OAAO,WAAW,GAAG,CAClF,CAAA,CAAe,QAAO,QAAO,IAAI,KAAK,WAAW,IAAI,YAAY;EACpF,MAAM,kBAAkB,KAAK,IAAI,aAAa,IAAI,QAAQ;EAC1D,IAAI,WAAW,WAAW,KAAK,CAAC,mBAAmB,gBAAgB,aAAa,SAAS,OACvF,OAAO;EAGT,MAAM,eAAe,KAAK,IAAI,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;EACxE,MAAM,mBAAmB,WAAW,QAAO,QAAO,aAAa,SAAS,OAAO,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;EAEpG,IAAI,cAAwC;EAC5C,IAAI,iBAAiB,SAAS,GAC5B,cAAc,0BAA0B,kBAAkB,UAAU;OAEpE,cAAc,0BAA0B,YAAY,UAAU;EAEhE,OAAO,aAAa,UAAU;CAChC;;CAGA,WAAW,UAAiC;EAC1C,MAAM,aAAa,KAAK,OAAO,MAAK,QAAO,IAAI,WAAW,QAAQ;EAClE,IAAI,CAAC,YACH,OAAO;EAIT,MAAM,aADiB,KAAK,OAAO,QAAO,QAAO,IAAI,WAAW,YAAY,IAAI,OAAO,WAAW,GAAG,CAClF,CAAA,CAAe,QAAO,QAAO,IAAI,KAAK,WAAW,IAAI,YAAY;EACpF,MAAM,kBAAkB,KAAK,IAAI,aAAa,IAAI,QAAQ;EAC1D,IAAI,WAAW,WAAW,KAAK,CAAC,mBAAmB,gBAAgB,aAAa,SAAS,OACvF,OAAO;EAGT,MAAM,cAAc,KAAK,IAAI,MAAM,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;EACxE,MAAM,mBAAmB,WAAW,QAAO,QAAO,YAAY,SAAS,OAAO,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;EAEnG,IAAI,cAAwC;EAC5C,IAAI,iBAAiB,SAAS,GAC5B,cAAc,0BAA0B,kBAAkB,UAAU;OAEpE,cAAc,0BAA0B,YAAY,UAAU;EAEhE,OAAO,aAAa,UAAU;CAChC;CAEA,mBAA2B,QAA6B,OAAoB;EAC1E,IAAI,CAAC,QACH;EAEF,MAAM,UAAU,MAAM,IAAI,MAAM,QAAQ;EACxC,MAAM,UAAU,MAAM,IAAI,MAAM,SAAS;EACzC,OAAO,QAAQ,KAAK,IAAI,OAAO,OAAO,UAAU,OAAO,CAAC;EACxD,OAAO,SAAS,KAAK,IAAI,OAAO,QAAQ,UAAU,OAAO,CAAC;CAC5D;CAEA,kCAA0C,SAAiC;EACzE,IAAI,KAAK,IAAI,WAAW,WAAW,GACjC,OAAO;EAGT,MAAM,aAAa,KAAK,IAAI,WACzB,QACC,cACE,UAAU,WAAW,SACpB,UAAU,mBAAmB,cAAc,aAAa,UAAU,UAAU,WAAW,EAC5F,CAAC,CACA,KAAI,cAAa,UAAU,MAAM;EACpC,IAAI,kBAAkB,KAAK,OAAO,QAAO,QAAO,WAAW,SAAS,IAAI,MAAM,CAAC;EAC/E,IAAI,gBAAgB,WAAW,GAC7B,kBAAkB,KAAK,OAAO,QAAO,QAAO,IAAI,OAAO,WAAW,GAAG,CAAC;EAExE,MAAM,OAAO,KAAK,IAAI,GAAG,gBAAgB,KAAI,SAAQ,KAAK,CAAC,CAAC;EAC5D,MAAM,OAAO,KAAK,IAAI,GAAG,gBAAgB,KAAI,SAAQ,KAAK,CAAC,CAAC;EAC5D,OAAO;GACL,GAAG,OAAA,MAA8B,eAAA;GACjC,GAAG;EACL;CACF;CAEA,8BAAsC,SAAmC;EACvE,MAAM,aAAa,KAAK,IAAI,OAAO,QAAO,UAAS,MAAM,WAAW,IAAI,CAAC,CAAC,KAAI,UAAS,MAAM,MAAM;EACnG,MAAM,kBAAkB,KAAK,OAAO,QAAO,QAAO,WAAW,SAAS,IAAI,MAAM,CAAC;EACjF,IAAI,gBAAgB,WAAW,GAC7B,OAAO;EAET,MAAM,OAAO,KAAK,IAAI,GAAG,gBAAgB,KAAI,SAAQ,KAAK,IAAI,KAAK,KAAK,CAAC;EACzE,MAAM,OAAO,KAAK,IAAI,GAAG,gBAAgB,KAAI,SAAQ,KAAK,CAAC,CAAC;EAC5D,OAAO;GAAE,GAAG;GAAS,GAAG,OAAO;GAAc,GAAG;EAAK;CACvD;CAEA,+BAAuC,QAAsB,QAAyC;EACpG,MAAM,cAAc,EAAE,GAAG,OAAO;EAChC,IAAI,WAAW,MAAM;GACnB,MAAM,eAAe,KAAK,IAAI,UAAU,UAAU;GAElD,eAAe,aADG,KAAK,OAAO,QAAO,QAAO,aAAa,SAAS,IAAI,MAAM,CAChD,CAAS;EACvC,OAAO,IAAI,CAAC,wBAAwB,QAAQ,MAAM,GAAG;GACnD,YAAY,IAAI,OAAO,IAAI;GAC3B,YAAY,IAAI,OAAO,IAAI;GAE3B,MAAM,WAAW,KAAK,IAAI,UAAU,GAAG,OAAO,MAAM,CAAC,EAAE,WAAW,CAAC;GAEnE,eAAe,aADW,KAAK,OAAO,QAAO,QAAO,SAAS,SAAS,IAAI,MAAM,CACpD,CAAiB;EAC/C;EACA,OAAO;GAAE,GAAG,YAAY,IAAI,OAAO;GAAG,GAAG,YAAY,IAAI,OAAO;EAAE;CACpE;AACF;AAGA,SAAS,kBAAkB,GAAgB,GAAyB;CAClE,OAAO,EACL,EAAE,IAAI,EAAE,QAAQ,gBAAgB,EAAE,KAClC,EAAE,IAAI,EAAE,QAAQ,gBAAgB,EAAE,KAClC,EAAE,IAAI,EAAE,SAAS,gBAAgB,EAAE,KACnC,EAAE,IAAI,EAAE,SAAS,gBAAgB,EAAE;AAEvC;AAEA,SAAS,wBAAwB,GAAgB,GAAyB;CACxE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;AACxG;AAEA,SAAS,eACP,QACA,iBACA,UAAgD;CAAE,OAAO;CAAM,OAAO;AAAK,GAC3E;CACA,IAAK,CAAC,QAAQ,SAAS,CAAC,QAAQ,SAAU,gBAAgB,WAAW,GACnE;CAEF,IAAI;CACJ,GAAG;EACD,aAAa;EACb,KAAK,MAAM,SAAS,iBAClB,IAAI,kBAAkB,QAAQ,KAAK,GAAG;GACpC,aAAa;GACb,IAAI,QAAQ,OACV,OAAO,KAAK;GAEd,IAAI,QAAQ,OACV,OAAO,KAAK;GAEd;EACF;CAEJ,SAAS;AACX;AAEA,SAAS,0BAA0B,MAAkC;CACnE,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,KAAI,SAAQ,KAAK,CAAC,CAAC;CACjD,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,KAAI,SAAQ,KAAK,CAAC,CAAC;CACjD,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,KAAI,SAAQ,KAAK,CAAC,CAAC;CACjD,OAAO;EACL,GAAG,KAAK,MAAM,OAAO,QAAQ,IAAA,EAAa,IAAA;EAC1C,GAAG,OAAO,KAA4B;CACxC;AACF;AAEA,SAAS,8BACP,SACA,YACA,QACa;CACb,MAAM,WAAW,CAAC,GAAG,QAAQ,GAAG,UAAU;CAC1C,IAAI,SAAS,WAAW,GACtB,OAAO;CAGT,MAAM,OAAO,KAAK,IAAI,GAAG,SAAS,KAAI,MAAK,EAAE,CAAC,CAAC,IAAI;CACnD,MAAM,MAAM,KAAK,IAAI,GAAG,SAAS,KAAI,MAAK,EAAE,CAAC,CAAC,IAAI;CAClD,MAAM,QAAQ,KAAK,IAAI,GAAG,SAAS,KAAI,MAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI;CAC9D,MAAM,SAAS,KAAK,IAAI,GAAG,SAAS,KAAI,MAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI;CAEhE,OAAO;EACL,GAAG;EACH,GAAG;EACH,OAAO,QAAQ;EACf,QAAQ,SAAS;CACnB;AACF;AAEA,SAAS,0BAA0B,OAAuB,QAA2C;CACnG,IAAI,UAAU;CACd,IAAI,UAAU;CACd,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,WAAW,KAAK,MAAM,KAAK,IAAI,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC;EAChE,IAAI,WAAW,SAAS;GACtB,UAAU;GACV,UAAU;EACZ;CACF;CACA,OAAO;AACT"}
@@ -1,25 +1,2 @@
1
- /**
2
- * Module: OSS graphical representation.
3
- */
4
- /** Represents XY Position. */
5
- interface Position2D {
6
- x: number;
7
- y: number;
8
- }
9
- /** Represents XY Position and dimensions. */
10
- interface Rectangle2D extends Position2D {
11
- width: number;
12
- height: number;
13
- }
14
- /** Represents a node in {@link OssLayout}. */
15
- interface NodePosition {
16
- nodeID: string;
17
- x: number;
18
- y: number;
19
- width: number;
20
- height: number;
21
- }
22
- /** Represents {@link OperationSchema} layout. */
23
- type OssLayout = NodePosition[];
24
-
25
- export type { NodePosition, OssLayout, Position2D, Rectangle2D };
1
+ import { i as Rectangle2D, n as OssLayout, r as Position2D, t as NodePosition } from "../oss-layout-3glgAqfn.js";
2
+ export { NodePosition, OssLayout, Position2D, Rectangle2D };
@@ -1 +1 @@
1
- //# sourceMappingURL=oss-layout.js.map
1
+ export {};
@@ -1,136 +1,134 @@
1
- import { Graph } from '../graph/graph.js';
2
- import { LibraryItem } from './library.js';
3
- import { NodePosition, OssLayout } from './oss-layout.js';
4
-
5
- /**
6
- * Module: Schema of Synthesis Operations.
7
- */
1
+ import { t as Graph } from "../graph-DR8rL2o3.js";
2
+ import { r as LibraryItem } from "../library-CYun28Xz.js";
3
+ import { n as OssLayout, t as NodePosition } from "../oss-layout-3glgAqfn.js";
8
4
 
5
+ //#region src/library/oss.d.ts
9
6
  /** Represents OSS node type. */
10
7
  declare const NodeType: {
11
- readonly OPERATION: 1;
12
- readonly BLOCK: 2;
8
+ readonly OPERATION: 1;
9
+ readonly BLOCK: 2;
13
10
  };
14
11
  type NodeType = (typeof NodeType)[keyof typeof NodeType];
15
12
  /** Represents OSS graph node. */
16
13
  interface OssNode extends NodePosition {
17
- nodeType: NodeType;
18
- parent: number | null;
14
+ nodeType: NodeType;
15
+ parent: number | null;
19
16
  }
20
17
  /** Represents {@link Operation} type. */
21
18
  declare const OperationType: {
22
- readonly INPUT: "input";
23
- readonly SYNTHESIS: "synthesis";
24
- readonly REPLICA: "replica";
19
+ readonly INPUT: "input";
20
+ readonly SYNTHESIS: "synthesis";
21
+ readonly REPLICA: "replica";
25
22
  };
26
23
  type OperationType = (typeof OperationType)[keyof typeof OperationType];
27
24
  /** Represents {@link Substitution} extended data. */
28
25
  interface CstSubstituteInfo {
29
- original: number;
30
- substitution: number;
31
- operation: number;
32
- original_schema: number;
33
- original_alias: string;
34
- original_term: string;
35
- substitution_schema: number;
36
- substitution_alias: string;
37
- substitution_term: string;
26
+ original: number;
27
+ substitution: number;
28
+ operation: number;
29
+ original_schema: number;
30
+ original_alias: string;
31
+ original_term: string;
32
+ substitution_schema: number;
33
+ substitution_alias: string;
34
+ substitution_term: string;
38
35
  }
39
36
  /** Represents Operation common attributes. */
40
37
  interface OperationBase extends OssNode {
41
- id: number;
42
- alias: string;
43
- title: string;
44
- description: string;
45
- operation_type: OperationType;
46
- result: number | null;
47
- nodeType: typeof NodeType.OPERATION;
48
- has_additions: boolean;
38
+ id: number;
39
+ alias: string;
40
+ title: string;
41
+ description: string;
42
+ operation_type: OperationType;
43
+ result: number | null;
44
+ nodeType: typeof NodeType.OPERATION;
45
+ has_additions: boolean;
49
46
  }
50
47
  /** Represents Input Operation. */
51
48
  interface OperationInput extends OperationBase {
52
- operation_type: typeof OperationType.INPUT;
53
- is_import: boolean;
49
+ operation_type: typeof OperationType.INPUT;
50
+ is_import: boolean;
54
51
  }
55
52
  /** Represents Replica Operation. */
56
53
  interface OperationReplica extends OperationBase {
57
- operation_type: typeof OperationType.REPLICA;
58
- target: number;
54
+ operation_type: typeof OperationType.REPLICA;
55
+ target: number;
59
56
  }
60
57
  /** Represents Synthesis Operation. */
61
58
  interface OperationSynthesis extends OperationBase {
62
- operation_type: typeof OperationType.SYNTHESIS;
63
- is_consolidation: boolean;
64
- substitutions: CstSubstituteInfo[];
65
- arguments: number[];
59
+ operation_type: typeof OperationType.SYNTHESIS;
60
+ is_consolidation: boolean;
61
+ substitutions: CstSubstituteInfo[];
62
+ arguments: number[];
66
63
  }
67
64
  /** Represents Operation. */
68
65
  type Operation = OperationInput | OperationReplica | OperationSynthesis;
69
66
  /** Represents Block. */
70
67
  interface Block extends OssNode {
71
- id: number;
72
- oss: number;
73
- title: string;
74
- description: string;
75
- parent: number | null;
76
- nodeType: typeof NodeType.BLOCK;
68
+ id: number;
69
+ oss: number;
70
+ title: string;
71
+ description: string;
72
+ parent: number | null;
73
+ nodeType: typeof NodeType.BLOCK;
77
74
  }
78
75
  /** Represents item of OperationSchema. */
79
76
  type OssItem = Operation | Block;
80
77
  /** Represents {@link OperationSchema} statistics. */
81
78
  interface OperationSchemaStats {
82
- count_all: number;
83
- count_inputs: number;
84
- count_synthesis: number;
85
- count_schemas: number;
86
- count_owned: number;
87
- count_block: number;
88
- count_references: number;
79
+ count_all: number;
80
+ count_inputs: number;
81
+ count_synthesis: number;
82
+ count_schemas: number;
83
+ count_owned: number;
84
+ count_block: number;
85
+ count_references: number;
89
86
  }
90
87
  /** Represents OperationSchema. */
91
88
  interface OperationSchema extends LibraryItem {
92
- editors: number[];
93
- operations: Operation[];
94
- blocks: Block[];
95
- replicas: {
96
- original: number;
97
- replica: number;
98
- }[];
99
- layout: OssLayout;
100
- arguments: {
101
- operation: number;
102
- argument: number;
103
- }[];
104
- substitutions: CstSubstituteInfo[];
105
- graph: Graph;
106
- extendedGraph: Graph;
107
- hierarchy: Graph<string>;
108
- schemas: number[];
109
- stats: OperationSchemaStats;
110
- operationByID: Map<number, Operation>;
111
- blockByID: Map<number, Block>;
112
- itemByNodeID: Map<string, OssItem>;
89
+ editors: number[];
90
+ operations: Operation[];
91
+ blocks: Block[];
92
+ replicas: {
93
+ original: number;
94
+ replica: number;
95
+ }[];
96
+ layout: OssLayout;
97
+ arguments: {
98
+ operation: number;
99
+ argument: number;
100
+ }[];
101
+ substitutions: CstSubstituteInfo[];
102
+ graph: Graph;
103
+ extendedGraph: Graph;
104
+ hierarchy: Graph<string>;
105
+ schemas: number[];
106
+ stats: OperationSchemaStats;
107
+ operationByID: Map<number, Operation>;
108
+ blockByID: Map<number, Block>;
109
+ itemByNodeID: Map<string, OssItem>;
113
110
  }
114
111
  /** Represents substitution error description. */
115
112
  interface SubstitutionErrorDescription {
116
- errorType: SubstitutionErrorType;
117
- params: string[];
113
+ errorType: SubstitutionErrorType;
114
+ params: string[];
118
115
  }
119
116
  /** Represents Substitution table error types. */
120
117
  declare const SubstitutionErrorType: {
121
- readonly invalidIDs: 0;
122
- readonly incorrectCst: 1;
123
- readonly invalidClasses: 2;
124
- readonly invalidBasic: 3;
125
- readonly invalidConstant: 4;
126
- readonly typificationCycle: 5;
127
- readonly baseSubstitutionNotSet: 6;
128
- readonly unequalTypification: 7;
129
- readonly unequalExpressions: 8;
130
- readonly unequalArgsCount: 9;
131
- readonly unequalArgs: 10;
132
- readonly invalidNominal: 11;
118
+ readonly invalidIDs: 0;
119
+ readonly incorrectCst: 1;
120
+ readonly invalidClasses: 2;
121
+ readonly invalidBasic: 3;
122
+ readonly invalidConstant: 4;
123
+ readonly typificationCycle: 5;
124
+ readonly baseSubstitutionNotSet: 6;
125
+ readonly unequalTypification: 7;
126
+ readonly unequalExpressions: 8;
127
+ readonly unequalArgsCount: 9;
128
+ readonly unequalArgs: 10;
129
+ readonly invalidNominal: 11;
133
130
  };
134
131
  type SubstitutionErrorType = (typeof SubstitutionErrorType)[keyof typeof SubstitutionErrorType];
135
-
136
- export { type Block, type CstSubstituteInfo, NodeType, type Operation, type OperationInput, type OperationSchema, type OperationSchemaStats, type OperationSynthesis, OperationType, type OssItem, type SubstitutionErrorDescription, SubstitutionErrorType };
132
+ //#endregion
133
+ export { Block, CstSubstituteInfo, NodeType, Operation, OperationInput, OperationSchema, OperationSchemaStats, OperationSynthesis, OperationType, OssItem, SubstitutionErrorDescription, SubstitutionErrorType };
134
+ //# sourceMappingURL=oss.d.ts.map
@@ -1,30 +1,31 @@
1
- // src/library/oss.ts
2
- var NodeType = {
3
- OPERATION: 1,
4
- BLOCK: 2
1
+ //#region src/library/oss.ts
2
+ /** Represents OSS node type. */
3
+ const NodeType = {
4
+ OPERATION: 1,
5
+ BLOCK: 2
5
6
  };
6
- var OperationType = {
7
- INPUT: "input",
8
- SYNTHESIS: "synthesis",
9
- REPLICA: "replica"
7
+ /** Represents {@link Operation} type. */
8
+ const OperationType = {
9
+ INPUT: "input",
10
+ SYNTHESIS: "synthesis",
11
+ REPLICA: "replica"
10
12
  };
11
- var SubstitutionErrorType = {
12
- invalidIDs: 0,
13
- incorrectCst: 1,
14
- invalidClasses: 2,
15
- invalidBasic: 3,
16
- invalidConstant: 4,
17
- typificationCycle: 5,
18
- baseSubstitutionNotSet: 6,
19
- unequalTypification: 7,
20
- unequalExpressions: 8,
21
- unequalArgsCount: 9,
22
- unequalArgs: 10,
23
- invalidNominal: 11
24
- };
25
- export {
26
- NodeType,
27
- OperationType,
28
- SubstitutionErrorType
13
+ /** Represents Substitution table error types. */
14
+ const SubstitutionErrorType = {
15
+ invalidIDs: 0,
16
+ incorrectCst: 1,
17
+ invalidClasses: 2,
18
+ invalidBasic: 3,
19
+ invalidConstant: 4,
20
+ typificationCycle: 5,
21
+ baseSubstitutionNotSet: 6,
22
+ unequalTypification: 7,
23
+ unequalExpressions: 8,
24
+ unequalArgsCount: 9,
25
+ unequalArgs: 10,
26
+ invalidNominal: 11
29
27
  };
28
+ //#endregion
29
+ export { NodeType, OperationType, SubstitutionErrorType };
30
+
30
31
  //# sourceMappingURL=oss.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/library/oss.ts"],"sourcesContent":["/**\n * Module: Schema of Synthesis Operations.\n */\n\nimport { type Graph } from '../graph';\n\nimport { type LibraryItem } from './library';\nimport { type NodePosition, type OssLayout } from './oss-layout';\n\n/** Represents OSS node type. */\nexport const NodeType = {\n OPERATION: 1,\n BLOCK: 2\n} as const;\nexport type NodeType = (typeof NodeType)[keyof typeof NodeType];\n\n/** Represents OSS graph node. */\ninterface OssNode extends NodePosition {\n nodeType: NodeType;\n parent: number | null;\n}\n\n/** Represents {@link Operation} type. */\nexport const OperationType = {\n INPUT: 'input',\n SYNTHESIS: 'synthesis',\n REPLICA: 'replica'\n} as const;\nexport type OperationType = (typeof OperationType)[keyof typeof OperationType];\n\n/** Represents {@link Substitution} extended data. */\nexport interface CstSubstituteInfo {\n original: number;\n substitution: number;\n operation: number;\n original_schema: number;\n original_alias: string;\n original_term: string;\n substitution_schema: number;\n substitution_alias: string;\n substitution_term: string;\n}\n\n/** Represents Operation common attributes. */\ninterface OperationBase extends OssNode {\n id: number;\n alias: string;\n title: string;\n description: string;\n operation_type: OperationType;\n result: number | null;\n nodeType: typeof NodeType.OPERATION;\n has_additions: boolean;\n}\n\n/** Represents Input Operation. */\nexport interface OperationInput extends OperationBase {\n operation_type: typeof OperationType.INPUT;\n is_import: boolean;\n}\n\n/** Represents Replica Operation. */\ninterface OperationReplica extends OperationBase {\n operation_type: typeof OperationType.REPLICA;\n target: number;\n}\n\n/** Represents Synthesis Operation. */\nexport interface OperationSynthesis extends OperationBase {\n operation_type: typeof OperationType.SYNTHESIS;\n is_consolidation: boolean; // aka 'diamond synthesis'\n substitutions: CstSubstituteInfo[];\n arguments: number[];\n}\n\n/** Represents Operation. */\nexport type Operation = OperationInput | OperationReplica | OperationSynthesis;\n\n/** Represents Block. */\nexport interface Block extends OssNode {\n id: number;\n oss: number;\n title: string;\n description: string;\n parent: number | null;\n nodeType: typeof NodeType.BLOCK;\n}\n\n/** Represents item of OperationSchema. */\nexport type OssItem = Operation | Block;\n\n/** Represents {@link OperationSchema} statistics. */\nexport interface OperationSchemaStats {\n count_all: number;\n count_inputs: number;\n count_synthesis: number;\n count_schemas: number;\n count_owned: number;\n count_block: number;\n count_references: number;\n}\n\n/** Represents OperationSchema. */\nexport interface OperationSchema extends LibraryItem {\n editors: number[];\n operations: Operation[];\n blocks: Block[];\n replicas: {\n original: number;\n replica: number;\n }[];\n layout: OssLayout;\n arguments: {\n operation: number;\n argument: number;\n }[];\n substitutions: CstSubstituteInfo[];\n\n graph: Graph;\n extendedGraph: Graph;\n hierarchy: Graph<string>;\n schemas: number[];\n stats: OperationSchemaStats;\n operationByID: Map<number, Operation>;\n blockByID: Map<number, Block>;\n itemByNodeID: Map<string, OssItem>;\n}\n\n/** Represents substitution error description. */\nexport interface SubstitutionErrorDescription {\n errorType: SubstitutionErrorType;\n params: string[];\n}\n\n/** Represents Substitution table error types. */\nexport const SubstitutionErrorType = {\n invalidIDs: 0,\n incorrectCst: 1,\n invalidClasses: 2,\n invalidBasic: 3,\n invalidConstant: 4,\n typificationCycle: 5,\n baseSubstitutionNotSet: 6,\n unequalTypification: 7,\n unequalExpressions: 8,\n unequalArgsCount: 9,\n unequalArgs: 10,\n invalidNominal: 11\n} as const;\nexport type SubstitutionErrorType = (typeof SubstitutionErrorType)[keyof typeof SubstitutionErrorType];\n"],"mappings":";AAUO,IAAM,WAAW;AAAA,EACtB,WAAW;AAAA,EACX,OAAO;AACT;AAUO,IAAM,gBAAgB;AAAA,EAC3B,OAAO;AAAA,EACP,WAAW;AAAA,EACX,SAAS;AACX;AA4GO,IAAM,wBAAwB;AAAA,EACnC,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,gBAAgB;AAClB;","names":[]}
1
+ {"version":3,"file":"oss.js","names":[],"sources":["../../src/library/oss.ts"],"sourcesContent":["/**\n * Module: Schema of Synthesis Operations.\n */\n\nimport { type Graph } from '../graph';\n\nimport { type LibraryItem } from './library';\nimport { type NodePosition, type OssLayout } from './oss-layout';\n\n/** Represents OSS node type. */\nexport const NodeType = {\n OPERATION: 1,\n BLOCK: 2\n} as const;\nexport type NodeType = (typeof NodeType)[keyof typeof NodeType];\n\n/** Represents OSS graph node. */\ninterface OssNode extends NodePosition {\n nodeType: NodeType;\n parent: number | null;\n}\n\n/** Represents {@link Operation} type. */\nexport const OperationType = {\n INPUT: 'input',\n SYNTHESIS: 'synthesis',\n REPLICA: 'replica'\n} as const;\nexport type OperationType = (typeof OperationType)[keyof typeof OperationType];\n\n/** Represents {@link Substitution} extended data. */\nexport interface CstSubstituteInfo {\n original: number;\n substitution: number;\n operation: number;\n original_schema: number;\n original_alias: string;\n original_term: string;\n substitution_schema: number;\n substitution_alias: string;\n substitution_term: string;\n}\n\n/** Represents Operation common attributes. */\ninterface OperationBase extends OssNode {\n id: number;\n alias: string;\n title: string;\n description: string;\n operation_type: OperationType;\n result: number | null;\n nodeType: typeof NodeType.OPERATION;\n has_additions: boolean;\n}\n\n/** Represents Input Operation. */\nexport interface OperationInput extends OperationBase {\n operation_type: typeof OperationType.INPUT;\n is_import: boolean;\n}\n\n/** Represents Replica Operation. */\ninterface OperationReplica extends OperationBase {\n operation_type: typeof OperationType.REPLICA;\n target: number;\n}\n\n/** Represents Synthesis Operation. */\nexport interface OperationSynthesis extends OperationBase {\n operation_type: typeof OperationType.SYNTHESIS;\n is_consolidation: boolean; // aka 'diamond synthesis'\n substitutions: CstSubstituteInfo[];\n arguments: number[];\n}\n\n/** Represents Operation. */\nexport type Operation = OperationInput | OperationReplica | OperationSynthesis;\n\n/** Represents Block. */\nexport interface Block extends OssNode {\n id: number;\n oss: number;\n title: string;\n description: string;\n parent: number | null;\n nodeType: typeof NodeType.BLOCK;\n}\n\n/** Represents item of OperationSchema. */\nexport type OssItem = Operation | Block;\n\n/** Represents {@link OperationSchema} statistics. */\nexport interface OperationSchemaStats {\n count_all: number;\n count_inputs: number;\n count_synthesis: number;\n count_schemas: number;\n count_owned: number;\n count_block: number;\n count_references: number;\n}\n\n/** Represents OperationSchema. */\nexport interface OperationSchema extends LibraryItem {\n editors: number[];\n operations: Operation[];\n blocks: Block[];\n replicas: {\n original: number;\n replica: number;\n }[];\n layout: OssLayout;\n arguments: {\n operation: number;\n argument: number;\n }[];\n substitutions: CstSubstituteInfo[];\n\n graph: Graph;\n extendedGraph: Graph;\n hierarchy: Graph<string>;\n schemas: number[];\n stats: OperationSchemaStats;\n operationByID: Map<number, Operation>;\n blockByID: Map<number, Block>;\n itemByNodeID: Map<string, OssItem>;\n}\n\n/** Represents substitution error description. */\nexport interface SubstitutionErrorDescription {\n errorType: SubstitutionErrorType;\n params: string[];\n}\n\n/** Represents Substitution table error types. */\nexport const SubstitutionErrorType = {\n invalidIDs: 0,\n incorrectCst: 1,\n invalidClasses: 2,\n invalidBasic: 3,\n invalidConstant: 4,\n typificationCycle: 5,\n baseSubstitutionNotSet: 6,\n unequalTypification: 7,\n unequalExpressions: 8,\n unequalArgsCount: 9,\n unequalArgs: 10,\n invalidNominal: 11\n} as const;\nexport type SubstitutionErrorType = (typeof SubstitutionErrorType)[keyof typeof SubstitutionErrorType];\n"],"mappings":";;AAUA,MAAa,WAAW;CACtB,WAAW;CACX,OAAO;AACT;;AAUA,MAAa,gBAAgB;CAC3B,OAAO;CACP,WAAW;CACX,SAAS;AACX;;AA4GA,MAAa,wBAAwB;CACnC,YAAY;CACZ,cAAc;CACd,gBAAgB;CAChB,cAAc;CACd,iBAAiB;CACjB,mBAAmB;CACnB,wBAAwB;CACxB,qBAAqB;CACrB,oBAAoB;CACpB,kBAAkB;CAClB,aAAa;CACb,gBAAgB;AAClB"}