@likec4/core 0.60.3 → 1.0.0-next.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 (72) hide show
  1. package/dist/cjs/colors/relationships.js +1 -1
  2. package/dist/cjs/log.d.ts +3 -0
  3. package/dist/cjs/log.js +10 -0
  4. package/dist/cjs/reset.d.ts +2 -0
  5. package/dist/cjs/types/computed-view.d.ts +3 -3
  6. package/dist/cjs/types/diagram.d.ts +6 -8
  7. package/dist/cjs/types/element.d.ts +2 -1
  8. package/dist/cjs/types/element.js +3 -1
  9. package/dist/cjs/types/index.d.ts +6 -6
  10. package/dist/cjs/types/index.js +33 -33
  11. package/dist/cjs/types/model.d.ts +2 -2
  12. package/dist/cjs/types/view.d.ts +4 -3
  13. package/dist/cjs/utils/fqn.d.ts +2 -2
  14. package/dist/cjs/utils/fqn.js +1 -2
  15. package/dist/cjs/utils/relations.js +6 -3
  16. package/dist/colors/element.js +75 -0
  17. package/dist/colors/index.js +9 -0
  18. package/dist/colors/relationships.js +49 -0
  19. package/dist/errors/index.js +111 -0
  20. package/dist/esm/colors/relationships.js +1 -1
  21. package/dist/esm/log.d.ts +3 -0
  22. package/dist/esm/log.js +5 -0
  23. package/dist/esm/reset.d.ts +2 -0
  24. package/dist/esm/types/computed-view.d.ts +3 -3
  25. package/dist/esm/types/diagram.d.ts +6 -8
  26. package/dist/esm/types/element.d.ts +2 -1
  27. package/dist/esm/types/element.js +9 -0
  28. package/dist/esm/types/index.d.ts +6 -6
  29. package/dist/esm/types/index.js +6 -6
  30. package/dist/esm/types/model.d.ts +2 -2
  31. package/dist/esm/types/view.d.ts +4 -3
  32. package/dist/esm/utils/fqn.d.ts +2 -2
  33. package/dist/esm/utils/fqn.js +1 -2
  34. package/dist/esm/utils/relations.js +6 -3
  35. package/dist/index.js +4 -0
  36. package/dist/types/_common.js +1 -0
  37. package/dist/types/colors/element.d.ts +69 -0
  38. package/dist/types/colors/index.d.ts +133 -0
  39. package/dist/types/colors/relationships.d.ts +58 -0
  40. package/dist/types/computed-view.js +1 -0
  41. package/dist/types/diagram.js +1 -0
  42. package/dist/types/element.js +14 -0
  43. package/dist/types/errors/index.d.ts +40 -0
  44. package/dist/types/expression.js +45 -0
  45. package/dist/types/index.d.ts +7 -0
  46. package/dist/types/index.js +11 -0
  47. package/dist/types/log.d.ts +4 -0
  48. package/dist/types/model.js +1 -0
  49. package/dist/types/opaque.js +1 -0
  50. package/dist/types/relation.js +3 -0
  51. package/dist/types/theme.js +1 -0
  52. package/dist/types/types/_common.d.ts +4 -0
  53. package/dist/types/types/computed-view.d.ts +46 -0
  54. package/dist/types/types/diagram.d.ts +41 -0
  55. package/dist/types/types/element.d.ts +31 -0
  56. package/dist/types/types/expression.d.ts +72 -0
  57. package/dist/types/types/index.d.ts +12 -0
  58. package/dist/types/types/model.d.ts +15 -0
  59. package/dist/types/types/opaque.d.ts +103 -0
  60. package/dist/types/types/relation.d.ts +25 -0
  61. package/dist/types/types/theme.d.ts +27 -0
  62. package/dist/types/types/view.d.ts +63 -0
  63. package/dist/types/utils/fqn.d.ts +34 -0
  64. package/dist/types/utils/guards.d.ts +5 -0
  65. package/dist/types/utils/index.d.ts +4 -0
  66. package/dist/types/utils/relations.d.ts +30 -0
  67. package/dist/types/view.js +16 -0
  68. package/dist/utils/fqn.js +98 -0
  69. package/dist/utils/guards.js +7 -0
  70. package/dist/utils/index.js +3 -0
  71. package/dist/utils/relations.js +79 -0
  72. package/package.json +4 -7
@@ -0,0 +1,79 @@
1
+ import { commonAncestor, compareFqnHierarchically, isAncestor } from './fqn';
2
+ /**
3
+ * Compares two relations hierarchically.
4
+ * From the most general (implicit) to the most specific.
5
+ */
6
+ export const compareRelations = (a, b) => {
7
+ const parentA = commonAncestor(a.source, a.target);
8
+ const parentB = commonAncestor(b.source, b.target);
9
+ if (parentA && !parentB) {
10
+ return 1;
11
+ }
12
+ if (!parentA && parentB) {
13
+ return -1;
14
+ }
15
+ const compareParents = parentA && parentB ? compareFqnHierarchically(parentA, parentB) : 0;
16
+ if (compareParents === 0) {
17
+ const compareSource = compareFqnHierarchically(a.source, b.source);
18
+ if (compareSource !== 0) {
19
+ return compareSource;
20
+ }
21
+ return compareFqnHierarchically(a.target, b.target);
22
+ }
23
+ return compareParents;
24
+ };
25
+ const isInside = (parent) => {
26
+ const prefix = parent + '.';
27
+ return (rel) => {
28
+ return rel.source.startsWith(prefix) && rel.target.startsWith(prefix);
29
+ };
30
+ };
31
+ const isBetween = (source, target) => {
32
+ const sourcePrefix = source + '.';
33
+ const targetPrefix = target + '.';
34
+ return (rel) => {
35
+ return ((rel.source === source || (rel.source + '.').startsWith(sourcePrefix))
36
+ && (rel.target === target || (rel.target + '.').startsWith(targetPrefix)));
37
+ };
38
+ };
39
+ const isAnyBetween = (source, target) => {
40
+ const predicates = [isBetween(source, target), isBetween(target, source)];
41
+ return (rel) => predicates.some(p => p(rel));
42
+ };
43
+ const isIncoming = (target) => {
44
+ const targetPrefix = target + '.';
45
+ return (rel) => {
46
+ return (!(rel.source + '.').startsWith(targetPrefix)
47
+ && (rel.target === target || (rel.target + '.').startsWith(targetPrefix)));
48
+ };
49
+ };
50
+ const isOutgoing = (source) => {
51
+ const sourcePrefix = source + '.';
52
+ return (rel) => {
53
+ return ((rel.source === source || (rel.source + '.').startsWith(sourcePrefix))
54
+ && !(rel.target + '.').startsWith(sourcePrefix));
55
+ };
56
+ };
57
+ const isAnyInOut = (source) => {
58
+ const predicates = [isIncoming(source), isOutgoing(source)];
59
+ return (rel) => {
60
+ return predicates.some(p => p(rel));
61
+ };
62
+ };
63
+ const hasRelation = (rel) => {
64
+ return (element) => {
65
+ return (rel.source === element.id
66
+ || rel.target === element.id
67
+ || isAncestor(element.id, rel.source)
68
+ || isAncestor(element.id, rel.target));
69
+ };
70
+ };
71
+ export const Relations = {
72
+ isInside,
73
+ isBetween,
74
+ isAnyBetween,
75
+ isIncoming,
76
+ isOutgoing,
77
+ isAnyInOut,
78
+ hasRelation
79
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@likec4/core",
3
- "version": "0.60.3",
3
+ "version": "1.0.0-next.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://likec4.dev",
6
6
  "author": "Denis Davydkov <denis@davydkov.com>",
@@ -77,21 +77,18 @@
77
77
  }
78
78
  },
79
79
  "dependencies": {
80
- "rambdax": "^9.1.1",
81
- "remeda": "^1.40.1",
80
+ "remeda": "^1.56.0",
82
81
  "safe-stable-stringify": "^2.4.3",
83
82
  "ts-custom-error": "^3.3.1"
84
83
  },
85
84
  "devDependencies": {
85
+ "@total-typescript/ts-reset": "^0.5.1",
86
86
  "execa": "^8.0.1",
87
- "typescript": "^5.4.2",
87
+ "typescript": "^5.4.3",
88
88
  "unbuild": "^2.0.0",
89
89
  "vitest": "^1.4.0"
90
90
  },
91
91
  "packageManager": "yarn@4.1.1",
92
- "volta": {
93
- "extends": "../../package.json"
94
- },
95
92
  "main": "./dist/cjs/index.js",
96
93
  "module": "./dist/esm/index.js",
97
94
  "types": "./dist/types/index.d.ts"