@likec4/core 0.33.0 → 0.34.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 (120) hide show
  1. package/dist/{colors.mjs → colors.cjs} +15 -3
  2. package/dist/colors.js +3 -15
  3. package/dist/compute-view/EdgeBuilder.cjs +37 -0
  4. package/dist/compute-view/EdgeBuilder.d.ts +1 -2
  5. package/dist/compute-view/EdgeBuilder.js +10 -18
  6. package/dist/compute-view/compute-ctx.cjs +35 -0
  7. package/dist/compute-view/compute-ctx.js +21 -14
  8. package/dist/compute-view/compute-element-view.cjs +135 -0
  9. package/dist/compute-view/compute-element-view.js +70 -62
  10. package/dist/compute-view/compute-predicates.cjs +363 -0
  11. package/dist/compute-view/compute-predicates.d.ts +1 -1
  12. package/dist/compute-view/compute-predicates.js +81 -115
  13. package/dist/compute-view/compute.cjs +60 -0
  14. package/dist/compute-view/compute.d.ts +13 -4
  15. package/dist/compute-view/compute.js +24 -31
  16. package/dist/compute-view/index.cjs +27 -0
  17. package/dist/compute-view/index.d.ts +2 -3
  18. package/dist/compute-view/index.js +2 -24
  19. package/dist/compute-view/utils/anyPossibleRelations.cjs +18 -0
  20. package/dist/compute-view/utils/anyPossibleRelations.js +6 -12
  21. package/dist/compute-view/utils/applyViewRuleStyles.cjs +57 -0
  22. package/dist/compute-view/utils/applyViewRuleStyles.d.ts +1 -2
  23. package/dist/compute-view/utils/applyViewRuleStyles.js +20 -29
  24. package/dist/compute-view/utils/{sortNodes.mjs → sortNodes.cjs} +19 -9
  25. package/dist/compute-view/utils/sortNodes.js +9 -19
  26. package/dist/errors/_base.cjs +62 -0
  27. package/dist/errors/_base.d.ts +20 -3
  28. package/dist/errors/_base.js +41 -14
  29. package/dist/errors/index.cjs +60 -0
  30. package/dist/errors/index.js +5 -60
  31. package/dist/errors/invariant.cjs +23 -0
  32. package/dist/errors/invariant.d.ts +5 -1
  33. package/dist/errors/invariant.js +9 -12
  34. package/dist/errors/model-index.cjs +23 -0
  35. package/dist/errors/model-index.d.ts +5 -1
  36. package/dist/errors/model-index.js +9 -12
  37. package/dist/errors/non-nullable.cjs +23 -0
  38. package/dist/errors/non-nullable.d.ts +5 -1
  39. package/dist/errors/non-nullable.js +11 -14
  40. package/dist/errors/nonexhaustive.cjs +23 -0
  41. package/dist/errors/nonexhaustive.d.ts +6 -2
  42. package/dist/errors/nonexhaustive.js +12 -13
  43. package/dist/index.cjs +71 -0
  44. package/dist/index.d.ts +2 -5
  45. package/dist/index.js +6 -71
  46. package/dist/model-index/{ModelIndex.mjs → ModelIndex.cjs} +35 -23
  47. package/dist/model-index/ModelIndex.js +23 -35
  48. package/dist/model-index/index.cjs +13 -0
  49. package/dist/model-index/index.js +1 -13
  50. package/dist/types/_common.cjs +1 -0
  51. package/dist/types/_common.js +0 -1
  52. package/dist/types/computed-view.cjs +1 -0
  53. package/dist/types/computed-view.js +0 -1
  54. package/dist/types/diagram.cjs +1 -0
  55. package/dist/types/diagram.js +0 -1
  56. package/dist/types/element.cjs +14 -0
  57. package/dist/types/element.js +3 -12
  58. package/dist/types/expression.cjs +45 -0
  59. package/dist/types/expression.js +11 -26
  60. package/dist/types/index.cjs +132 -0
  61. package/dist/types/index.d.ts +10 -12
  62. package/dist/types/index.js +11 -48
  63. package/dist/types/model.cjs +1 -0
  64. package/dist/types/model.d.ts +1 -1
  65. package/dist/types/model.js +0 -1
  66. package/dist/types/opaque.cjs +1 -0
  67. package/dist/types/opaque.d.ts +1 -1
  68. package/dist/types/opaque.js +0 -1
  69. package/dist/types/relation.cjs +1 -0
  70. package/dist/types/relation.js +0 -1
  71. package/dist/types/theme.cjs +1 -0
  72. package/dist/types/theme.js +0 -1
  73. package/dist/types/view.cjs +17 -0
  74. package/dist/types/view.js +4 -12
  75. package/dist/utils/compute-node-levels.cjs +48 -0
  76. package/dist/utils/compute-node-levels.d.ts +2 -2
  77. package/dist/utils/compute-node-levels.js +7 -24
  78. package/dist/utils/fqn.cjs +80 -0
  79. package/dist/utils/fqn.js +19 -33
  80. package/dist/utils/guards.cjs +22 -0
  81. package/dist/utils/guards.js +7 -16
  82. package/dist/utils/index.cjs +49 -0
  83. package/dist/utils/index.d.ts +1 -1
  84. package/dist/utils/index.js +4 -49
  85. package/dist/utils/relations.cjs +59 -0
  86. package/dist/utils/relations.d.ts +14 -12
  87. package/dist/utils/relations.js +28 -33
  88. package/package.json +58 -21
  89. package/dist/compute-view/EdgeBuilder.mjs +0 -31
  90. package/dist/compute-view/compute-ctx.mjs +0 -42
  91. package/dist/compute-view/compute-element-view.mjs +0 -145
  92. package/dist/compute-view/compute-predicates.mjs +0 -324
  93. package/dist/compute-view/compute.mjs +0 -39
  94. package/dist/compute-view/index.mjs +0 -1
  95. package/dist/compute-view/utils/anyPossibleRelations.mjs +0 -12
  96. package/dist/compute-view/utils/applyViewRuleStyles.mjs +0 -50
  97. package/dist/errors/_base.mjs +0 -4
  98. package/dist/errors/index.mjs +0 -5
  99. package/dist/errors/invariant.mjs +0 -8
  100. package/dist/errors/model-index.mjs +0 -8
  101. package/dist/errors/non-nullable.mjs +0 -8
  102. package/dist/errors/nonexhaustive.mjs +0 -5
  103. package/dist/index.mjs +0 -6
  104. package/dist/model-index/index.mjs +0 -1
  105. package/dist/types/_common.mjs +0 -0
  106. package/dist/types/computed-view.mjs +0 -0
  107. package/dist/types/diagram.mjs +0 -0
  108. package/dist/types/element.mjs +0 -5
  109. package/dist/types/expression.mjs +0 -30
  110. package/dist/types/index.mjs +0 -3
  111. package/dist/types/model.mjs +0 -0
  112. package/dist/types/opaque.mjs +0 -0
  113. package/dist/types/relation.mjs +0 -0
  114. package/dist/types/theme.mjs +0 -0
  115. package/dist/types/view.mjs +0 -9
  116. package/dist/utils/compute-node-levels.mjs +0 -31
  117. package/dist/utils/fqn.mjs +0 -66
  118. package/dist/utils/guards.mjs +0 -13
  119. package/dist/utils/index.mjs +0 -4
  120. package/dist/utils/relations.mjs +0 -42
@@ -1,22 +1,13 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.failUnexpected = failUnexpected;
7
- exports.ignoreNeverInRuntime = ignoreNeverInRuntime;
8
- exports.isNonEmptyArray = isNonEmptyArray;
9
- exports.isString = isString;
10
- var _nonexhaustive = require("../errors/nonexhaustive");
11
- function isString(value) {
1
+ import { NonExhaustiveError } from "../errors/index.js";
2
+ export function isString(value) {
12
3
  return typeof value === "string";
13
4
  }
14
- function failUnexpected(arg) {
15
- throw new _nonexhaustive.NonExhaustiveError(`Unexpected value: ${JSON.stringify(arg)}`);
5
+ export function failUnexpected(arg) {
6
+ throw new NonExhaustiveError(`Unexpected value: ${JSON.stringify(arg)}`);
16
7
  }
17
- function ignoreNeverInRuntime(arg) {
8
+ export function ignoreNeverInRuntime(arg) {
18
9
  console.warn(`Unexpected and ignored value: ${JSON.stringify(arg)}`);
19
10
  }
20
- function isNonEmptyArray(arr) {
11
+ export function isNonEmptyArray(arr) {
21
12
  return arr.length > 0;
22
- }
13
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _fqn = require("./fqn.cjs");
7
+ Object.keys(_fqn).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _fqn[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _fqn[key];
14
+ }
15
+ });
16
+ });
17
+ var _guards = require("./guards.cjs");
18
+ Object.keys(_guards).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _guards[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _guards[key];
25
+ }
26
+ });
27
+ });
28
+ var _computeNodeLevels = require("./compute-node-levels.cjs");
29
+ Object.keys(_computeNodeLevels).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _computeNodeLevels[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _computeNodeLevels[key];
36
+ }
37
+ });
38
+ });
39
+ var _relations = require("./relations.cjs");
40
+ Object.keys(_relations).forEach(function (key) {
41
+ if (key === "default" || key === "__esModule") return;
42
+ if (key in exports && exports[key] === _relations[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _relations[key];
47
+ }
48
+ });
49
+ });
@@ -1,4 +1,4 @@
1
1
  export * from './fqn';
2
2
  export * from './guards';
3
3
  export * from './compute-node-levels';
4
- export * as Relations from './relations';
4
+ export * from './relations';
@@ -1,49 +1,4 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- var _exportNames = {
7
- Relations: true
8
- };
9
- exports.Relations = void 0;
10
- var _fqn = require("./fqn");
11
- Object.keys(_fqn).forEach(function (key) {
12
- if (key === "default" || key === "__esModule") return;
13
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
14
- if (key in exports && exports[key] === _fqn[key]) return;
15
- Object.defineProperty(exports, key, {
16
- enumerable: true,
17
- get: function () {
18
- return _fqn[key];
19
- }
20
- });
21
- });
22
- var _guards = require("./guards");
23
- Object.keys(_guards).forEach(function (key) {
24
- if (key === "default" || key === "__esModule") return;
25
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
26
- if (key in exports && exports[key] === _guards[key]) return;
27
- Object.defineProperty(exports, key, {
28
- enumerable: true,
29
- get: function () {
30
- return _guards[key];
31
- }
32
- });
33
- });
34
- var _computeNodeLevels = require("./compute-node-levels");
35
- Object.keys(_computeNodeLevels).forEach(function (key) {
36
- if (key === "default" || key === "__esModule") return;
37
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
38
- if (key in exports && exports[key] === _computeNodeLevels[key]) return;
39
- Object.defineProperty(exports, key, {
40
- enumerable: true,
41
- get: function () {
42
- return _computeNodeLevels[key];
43
- }
44
- });
45
- });
46
- var _Relations = _interopRequireWildcard(require("./relations"));
47
- exports.Relations = _Relations;
48
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
49
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
1
+ export * from "./fqn.js";
2
+ export * from "./guards.js";
3
+ export * from "./compute-node-levels.js";
4
+ export * from "./relations.js";
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.compareRelations = exports.Relations = void 0;
7
+ var _remeda = require("remeda");
8
+ var _fqn = require("./fqn.cjs");
9
+ var _rambdax = require("rambdax");
10
+ const compareRelations = (a, b) => {
11
+ return (0, _fqn.compareFqnHierarchically)(a.source, b.source) || (0, _fqn.compareFqnHierarchically)(a.target, b.target);
12
+ };
13
+ exports.compareRelations = compareRelations;
14
+ const isInside = parent => {
15
+ const prefix = parent + ".";
16
+ return rel => {
17
+ return rel.source.startsWith(prefix) && rel.target.startsWith(prefix);
18
+ };
19
+ };
20
+ const isBetween = (source, target) => {
21
+ const sourcePrefix = source + ".";
22
+ const targetPrefix = target + ".";
23
+ return rel => {
24
+ return (rel.source === source || (rel.source + ".").startsWith(sourcePrefix)) && (rel.target === target || (rel.target + ".").startsWith(targetPrefix));
25
+ };
26
+ };
27
+ const isAnyBetween = (source, target) => {
28
+ return (0, _remeda.anyPass)([isBetween(source, target), isBetween(target, source)]);
29
+ };
30
+ const isIncoming = target => {
31
+ const targetPrefix = target + ".";
32
+ return rel => {
33
+ return !(rel.source + ".").startsWith(targetPrefix) && (rel.target === target || (rel.target + ".").startsWith(targetPrefix));
34
+ };
35
+ };
36
+ const isOutgoing = source => {
37
+ const sourcePrefix = source + ".";
38
+ return rel => {
39
+ return (rel.source === source || (rel.source + ".").startsWith(sourcePrefix)) && !(rel.target + ".").startsWith(sourcePrefix);
40
+ };
41
+ };
42
+ const isAnyInOut = source => {
43
+ return (0, _rambdax.either)(isIncoming(source), isOutgoing(source));
44
+ };
45
+ const hasRelation = rel => {
46
+ return element => {
47
+ return rel.source === element.id || rel.target === element.id || (0, _fqn.isAncestor)(element.id, rel.source) || (0, _fqn.isAncestor)(element.id, rel.target);
48
+ };
49
+ };
50
+ const Relations = {
51
+ isInside,
52
+ isBetween,
53
+ isAnyBetween,
54
+ isIncoming,
55
+ isOutgoing,
56
+ isAnyInOut,
57
+ hasRelation
58
+ };
59
+ exports.Relations = Relations;
@@ -8,16 +8,18 @@ export declare const compareRelations: <T extends {
8
8
  source: string;
9
9
  target: string;
10
10
  }>(a: T, b: T) => number;
11
- export declare const isInside: (parent: Fqn) => RelationPredicate;
12
- export declare const isBetween: (source: Fqn, target: Fqn) => RelationPredicate;
13
- export declare const isAnyBetween: (source: Fqn, target: Fqn) => RelationPredicate;
14
- export declare const isIncoming: (target: Fqn) => RelationPredicate;
15
- export declare const isOutgoing: (source: Fqn) => RelationPredicate;
16
- export declare const isAnyInOut: (source: Fqn) => RelationPredicate;
17
- export declare const hasRelation: <R extends {
18
- source: Fqn;
19
- target: Fqn;
20
- }>(rel: R) => <E extends {
21
- id: Fqn;
22
- }>(element: E) => boolean;
11
+ export declare const Relations: {
12
+ readonly isInside: (parent: Fqn) => RelationPredicate;
13
+ readonly isBetween: (source: Fqn, target: Fqn) => RelationPredicate;
14
+ readonly isAnyBetween: (source: Fqn, target: Fqn) => RelationPredicate;
15
+ readonly isIncoming: (target: Fqn) => RelationPredicate;
16
+ readonly isOutgoing: (source: Fqn) => RelationPredicate;
17
+ readonly isAnyInOut: (source: Fqn) => RelationPredicate;
18
+ readonly hasRelation: <R extends {
19
+ source: Fqn;
20
+ target: Fqn;
21
+ }>(rel: R) => <E extends {
22
+ id: Fqn;
23
+ }>(element: E) => boolean;
24
+ };
23
25
  export {};
@@ -1,56 +1,51 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.isOutgoing = exports.isInside = exports.isIncoming = exports.isBetween = exports.isAnyInOut = exports.isAnyBetween = exports.hasRelation = exports.compareRelations = void 0;
7
- var _remeda = require("remeda");
8
- var _fqn = require("./fqn");
9
- var _rambdax = require("rambdax");
10
- const compareRelations = (a, b) => {
11
- return (0, _fqn.compareFqnHierarchically)(a.source, b.source) || (0, _fqn.compareFqnHierarchically)(a.target, b.target);
12
- };
13
- exports.compareRelations = compareRelations;
14
- const isInside = parent => {
1
+ import { anyPass } from "remeda";
2
+ import { compareFqnHierarchically, isAncestor } from "./fqn.js";
3
+ import { either } from "rambdax";
4
+ export const compareRelations = (a, b) => {
5
+ return compareFqnHierarchically(a.source, b.source) || compareFqnHierarchically(a.target, b.target);
6
+ };
7
+ const isInside = (parent) => {
15
8
  const prefix = parent + ".";
16
- return rel => {
9
+ return (rel) => {
17
10
  return rel.source.startsWith(prefix) && rel.target.startsWith(prefix);
18
11
  };
19
12
  };
20
- exports.isInside = isInside;
21
13
  const isBetween = (source, target) => {
22
14
  const sourcePrefix = source + ".";
23
15
  const targetPrefix = target + ".";
24
- return rel => {
16
+ return (rel) => {
25
17
  return (rel.source === source || (rel.source + ".").startsWith(sourcePrefix)) && (rel.target === target || (rel.target + ".").startsWith(targetPrefix));
26
18
  };
27
19
  };
28
- exports.isBetween = isBetween;
29
20
  const isAnyBetween = (source, target) => {
30
- return (0, _remeda.anyPass)([isBetween(source, target), isBetween(target, source)]);
21
+ return anyPass([isBetween(source, target), isBetween(target, source)]);
31
22
  };
32
- exports.isAnyBetween = isAnyBetween;
33
- const isIncoming = target => {
23
+ const isIncoming = (target) => {
34
24
  const targetPrefix = target + ".";
35
- return rel => {
25
+ return (rel) => {
36
26
  return !(rel.source + ".").startsWith(targetPrefix) && (rel.target === target || (rel.target + ".").startsWith(targetPrefix));
37
27
  };
38
28
  };
39
- exports.isIncoming = isIncoming;
40
- const isOutgoing = source => {
29
+ const isOutgoing = (source) => {
41
30
  const sourcePrefix = source + ".";
42
- return rel => {
31
+ return (rel) => {
43
32
  return (rel.source === source || (rel.source + ".").startsWith(sourcePrefix)) && !(rel.target + ".").startsWith(sourcePrefix);
44
33
  };
45
34
  };
46
- exports.isOutgoing = isOutgoing;
47
- const isAnyInOut = source => {
48
- return (0, _rambdax.either)(isIncoming(source), isOutgoing(source));
35
+ const isAnyInOut = (source) => {
36
+ return either(isIncoming(source), isOutgoing(source));
49
37
  };
50
- exports.isAnyInOut = isAnyInOut;
51
- const hasRelation = rel => {
52
- return element => {
53
- return rel.source === element.id || rel.target === element.id || (0, _fqn.isAncestor)(element.id, rel.source) || (0, _fqn.isAncestor)(element.id, rel.target);
38
+ const hasRelation = (rel) => {
39
+ return (element) => {
40
+ return rel.source === element.id || rel.target === element.id || isAncestor(element.id, rel.source) || isAncestor(element.id, rel.target);
54
41
  };
55
42
  };
56
- exports.hasRelation = hasRelation;
43
+ export const Relations = {
44
+ isInside,
45
+ isBetween,
46
+ isAnyBetween,
47
+ isIncoming,
48
+ isOutgoing,
49
+ isAnyInOut,
50
+ hasRelation
51
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@likec4/core",
3
- "version": "0.33.0",
3
+ "version": "0.34.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://likec4.dev",
6
6
  "author": "Denis Davydkov <denis@davydkov.com>",
@@ -12,7 +12,8 @@
12
12
  "bugs": "https://github.com/likec4/likec4/issues",
13
13
  "scripts": {
14
14
  "compile": "tsc --noEmit",
15
- "build": "unbuild",
15
+ "build": "tsc",
16
+ "prepack": "unbuild",
16
17
  "dev": "tsc --watch",
17
18
  "lint": "run -T eslint src/ --fix",
18
19
  "test": "run -T vitest run",
@@ -23,51 +24,87 @@
23
24
  "dist"
24
25
  ],
25
26
  "type": "module",
26
- "main": "dist/index.js",
27
- "module": "dist/index.mjs",
28
- "types": "dist/index.d.ts",
27
+ "sideEffects": false,
28
+ "main": "./dist/index.cjs",
29
+ "module": "./dist/index.js",
30
+ "types": "./dist/index.d.ts",
29
31
  "exports": {
30
32
  ".": {
31
33
  "types": "./dist/index.d.ts",
32
- "import": "./dist/index.mjs",
33
- "require": "./dist/index.js"
34
+ "import": "./dist/index.js",
35
+ "require": "./dist/index.cjs"
34
36
  },
35
37
  "./types": {
36
38
  "types": "./dist/types/index.d.ts",
37
- "import": "./dist/types/index.mjs",
38
- "require": "./dist/types/index.js"
39
+ "import": "./dist/types/index.js",
40
+ "require": "./dist/types/index.cjs"
39
41
  },
40
42
  "./colors": {
41
43
  "types": "./dist/colors.d.ts",
42
- "import": "./dist/colors.mjs",
43
- "require": "./dist/colors.js"
44
+ "import": "./dist/colors.js",
45
+ "require": "./dist/colors.cjs"
44
46
  },
45
47
  "./errors": {
46
48
  "types": "./dist/errors/index.d.ts",
47
- "import": "./dist/errors/index.mjs",
48
- "require": "./dist/errors/index.js"
49
+ "import": "./dist/errors/index.js",
50
+ "require": "./dist/errors/index.cjs"
49
51
  },
50
52
  "./utils": {
51
53
  "types": "./dist/utils/index.d.ts",
52
- "import": "./dist/utils/index.mjs",
53
- "require": "./dist/utils/index.js"
54
+ "import": "./dist/utils/index.js",
55
+ "require": "./dist/utils/index.cjs"
54
56
  },
55
57
  "./compute-view": {
56
58
  "types": "./dist/compute-view/index.d.ts",
57
- "import": "./dist/compute-view/index.mjs",
58
- "require": "./dist/compute-view/index.js"
59
+ "import": "./dist/compute-view/index.js",
60
+ "require": "./dist/compute-view/index.cjs"
59
61
  }
60
62
  },
61
- "sideEffects": false,
62
63
  "publishConfig": {
63
64
  "registry": "https://registry.npmjs.org",
64
- "access": "public"
65
+ "access": "public",
66
+ "main": "./dist/index.cjs",
67
+ "module": "./dist/index.js",
68
+ "types": "./dist/index.d.ts",
69
+ "exports": {
70
+ ".": {
71
+ "types": "./dist/index.d.ts",
72
+ "import": "./dist/index.js",
73
+ "require": "./dist/index.cjs"
74
+ },
75
+ "./types": {
76
+ "types": "./dist/types/index.d.ts",
77
+ "import": "./dist/types/index.js",
78
+ "require": "./dist/types/index.cjs"
79
+ },
80
+ "./colors": {
81
+ "types": "./dist/colors.d.ts",
82
+ "import": "./dist/colors.js",
83
+ "require": "./dist/colors.cjs"
84
+ },
85
+ "./errors": {
86
+ "types": "./dist/errors/index.d.ts",
87
+ "import": "./dist/errors/index.js",
88
+ "require": "./dist/errors/index.cjs"
89
+ },
90
+ "./utils": {
91
+ "types": "./dist/utils/index.d.ts",
92
+ "import": "./dist/utils/index.js",
93
+ "require": "./dist/utils/index.cjs"
94
+ },
95
+ "./compute-view": {
96
+ "types": "./dist/compute-view/index.d.ts",
97
+ "import": "./dist/compute-view/index.js",
98
+ "require": "./dist/compute-view/index.cjs"
99
+ }
100
+ }
65
101
  },
66
102
  "dependencies": {
67
103
  "@dagrejs/graphlib": "^2.1.13",
68
- "modern-errors": "^6.0.0",
69
104
  "rambdax": "^9.1.1",
70
- "remeda": "^1.24.0"
105
+ "remeda": "^1.24.0",
106
+ "safe-stable-stringify": "^2.4.3",
107
+ "ts-custom-error": "^3.3.1"
71
108
  },
72
109
  "devDependencies": {
73
110
  "typescript": "^5.1.6",
@@ -1,31 +0,0 @@
1
- import { keys, pluck } from "rambdax";
2
- import { commonAncestor } from "../utils/fqn.mjs";
3
- import { compareRelations } from "../utils/relations.mjs";
4
- export class EdgeBuilder {
5
- _relationsObj = {};
6
- add(source, target, relation) {
7
- const bySource = this._relationsObj[source] ?? {};
8
- const relations = bySource[target] ?? [];
9
- relations.push(relation);
10
- bySource[target] = relations;
11
- this._relationsObj[source] = bySource;
12
- return this;
13
- }
14
- build() {
15
- return keys(this._relationsObj).flatMap((source) => {
16
- const targets = this._relationsObj[source] ?? {};
17
- return keys(targets).map((target) => {
18
- const relations = (targets[target] ?? []).sort(compareRelations);
19
- const label = relations.find((r) => r.title !== "")?.title ?? null;
20
- return {
21
- id: `${source}:${target}`,
22
- parent: commonAncestor(source, target),
23
- source,
24
- target,
25
- label,
26
- relations: pluck("id", relations)
27
- };
28
- });
29
- }).sort(compareRelations).reverse();
30
- }
31
- }
@@ -1,42 +0,0 @@
1
- import { difference } from "rambdax";
2
- export class ComputeCtx {
3
- constructor(index, root, elements = /* @__PURE__ */ new Set(), relations = /* @__PURE__ */ new Set(), implicits = /* @__PURE__ */ new Set()) {
4
- this.index = index;
5
- this.root = root;
6
- this.elements = elements;
7
- this.relations = relations;
8
- this.implicits = implicits;
9
- }
10
- include({
11
- elements,
12
- relations,
13
- implicits
14
- }) {
15
- return new ComputeCtx(
16
- this.index,
17
- this.root,
18
- elements ? /* @__PURE__ */ new Set([...this.elements, ...elements]) : this.elements,
19
- relations ? /* @__PURE__ */ new Set([...this.relations, ...relations]) : this.relations,
20
- implicits ? /* @__PURE__ */ new Set([...this.implicits, ...implicits]) : this.implicits
21
- );
22
- }
23
- exclude({
24
- elements,
25
- relations,
26
- implicits
27
- }) {
28
- let newImplicits = implicits ? new Set(difference([...this.implicits], implicits)) : this.implicits;
29
- if (elements) {
30
- newImplicits = new Set(
31
- difference([...newImplicits], elements)
32
- );
33
- }
34
- return new ComputeCtx(
35
- this.index,
36
- this.root,
37
- elements ? new Set(difference([...this.elements], elements)) : this.elements,
38
- relations ? new Set(difference([...this.relations], relations)) : this.relations,
39
- newImplicits
40
- );
41
- }
42
- }
@@ -1,145 +0,0 @@
1
- import { allPass, find } from "remeda";
2
- import { nonNullable, nonexhaustive } from "../errors/index.mjs";
3
- import {
4
- DefaultElementShape,
5
- DefaultThemeColor
6
- } from "../types/index.mjs";
7
- import * as Expr from "../types/expression.mjs";
8
- import { isViewRuleAutoLayout, isViewRuleExpression, isViewRuleStyle } from "../types/view.mjs";
9
- import { compareByFqnHierarchically, isAncestor, isSameHierarchy, parentFqn } from "../utils/index.mjs";
10
- import { EdgeBuilder } from "./EdgeBuilder.mjs";
11
- import { ComputeCtx } from "./compute-ctx.mjs";
12
- import {
13
- excludeElementKindOrTag,
14
- excludeElementRef,
15
- excludeInOutExpr,
16
- excludeIncomingExpr,
17
- excludeOutgoingExpr,
18
- excludeRelationExpr,
19
- excludeWildcardRef,
20
- includeElementKindOrTag,
21
- includeElementRef,
22
- includeInOutExpr,
23
- includeIncomingExpr,
24
- includeOutgoingExpr,
25
- includeRelationExpr,
26
- includeWildcardRef
27
- } from "./compute-predicates.mjs";
28
- import { applyViewRuleStyles } from "./utils/applyViewRuleStyles.mjs";
29
- import { sortNodes } from "./utils/sortNodes.mjs";
30
- function reduceToMap(elementsIterator) {
31
- return Array.from(elementsIterator).sort(compareByFqnHierarchically).reduce((map, { id, color, shape, ...el }) => {
32
- let parent = parentFqn(id);
33
- while (parent) {
34
- if (map.has(parent)) {
35
- break;
36
- }
37
- parent = parentFqn(parent);
38
- }
39
- if (parent) {
40
- const parentNd = nonNullable(map.get(parent));
41
- parentNd.children.push(id);
42
- }
43
- const node = {
44
- ...el,
45
- id,
46
- parent,
47
- color: color ?? DefaultThemeColor,
48
- shape: shape ?? DefaultElementShape,
49
- children: [],
50
- inEdges: [],
51
- outEdges: []
52
- };
53
- map.set(id, node);
54
- return map;
55
- }, /* @__PURE__ */ new Map());
56
- }
57
- export function computeElementView(view, index) {
58
- const rootElement = view.viewOf ?? null;
59
- let ctx = new ComputeCtx(index, rootElement);
60
- const rulesInclude = view.rules.filter(isViewRuleExpression);
61
- if (rootElement && rulesInclude.length == 0) {
62
- ctx = ctx.include({
63
- elements: [index.find(rootElement)]
64
- });
65
- }
66
- for (const { isInclude, exprs } of rulesInclude) {
67
- for (const expr of exprs) {
68
- if (Expr.isElementKindExpr(expr) || Expr.isElementTagExpr(expr)) {
69
- ctx = isInclude ? includeElementKindOrTag(ctx, expr) : excludeElementKindOrTag(ctx, expr);
70
- continue;
71
- }
72
- if (Expr.isElementRef(expr)) {
73
- ctx = isInclude ? includeElementRef(ctx, expr) : excludeElementRef(ctx, expr);
74
- continue;
75
- }
76
- if (Expr.isWildcard(expr)) {
77
- ctx = isInclude ? includeWildcardRef(ctx, expr) : excludeWildcardRef(ctx, expr);
78
- continue;
79
- }
80
- if (Expr.isIncoming(expr)) {
81
- ctx = isInclude ? includeIncomingExpr(ctx, expr) : excludeIncomingExpr(ctx, expr);
82
- continue;
83
- }
84
- if (Expr.isOutgoing(expr)) {
85
- ctx = isInclude ? includeOutgoingExpr(ctx, expr) : excludeOutgoingExpr(ctx, expr);
86
- continue;
87
- }
88
- if (Expr.isInOut(expr)) {
89
- ctx = isInclude ? includeInOutExpr(ctx, expr) : excludeInOutExpr(ctx, expr);
90
- continue;
91
- }
92
- if (Expr.isRelation(expr)) {
93
- ctx = isInclude ? includeRelationExpr(ctx, expr) : excludeRelationExpr(ctx, expr);
94
- continue;
95
- }
96
- nonexhaustive(expr);
97
- }
98
- }
99
- const allElements = [...ctx.elements, ...ctx.implicits].sort(compareByFqnHierarchically).reverse();
100
- const elementsWithRelations = /* @__PURE__ */ new Set();
101
- const edgeBuilder = new EdgeBuilder();
102
- const anscestorOf = (id) => (e) => e.id === id || isAncestor(e.id, id);
103
- const sortedRelations = [...ctx.relations];
104
- for (const rel of sortedRelations) {
105
- const source = find(allElements, anscestorOf(rel.source));
106
- if (!source) {
107
- continue;
108
- }
109
- const target = find(
110
- allElements,
111
- allPass([anscestorOf(rel.target), (e) => !isSameHierarchy(e, source)])
112
- );
113
- if (!target) {
114
- continue;
115
- }
116
- elementsWithRelations.add(source);
117
- elementsWithRelations.add(target);
118
- edgeBuilder.add(source.id, target.id, rel);
119
- }
120
- const elements = /* @__PURE__ */ new Set([...ctx.elements, ...elementsWithRelations]);
121
- const nodesMap = reduceToMap(elements);
122
- const edges = edgeBuilder.build().map((edge) => {
123
- while (edge.parent) {
124
- if (nodesMap.has(edge.parent)) {
125
- break;
126
- }
127
- edge.parent = parentFqn(edge.parent);
128
- }
129
- nonNullable(nodesMap.get(edge.source)).outEdges.push(edge.id);
130
- nonNullable(nodesMap.get(edge.target)).inEdges.push(edge.id);
131
- return edge;
132
- });
133
- const nodes = applyViewRuleStyles(
134
- view.rules.filter(isViewRuleStyle),
135
- sortNodes(nodesMap, edges)
136
- // map(e => nodesMap.get(e.id)!, Array.from(elements))
137
- );
138
- const autoLayoutRule = view.rules.find(isViewRuleAutoLayout);
139
- return {
140
- ...view,
141
- autoLayout: autoLayoutRule?.autoLayout ?? "TB",
142
- nodes,
143
- edges
144
- };
145
- }