likec4 1.59.3 → 1.59.4

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 (49) hide show
  1. package/__app__/src/chunks/AIChat.mjs +108 -108
  2. package/__app__/src/chunks/LikeC4Styles.mjs +752 -604
  3. package/__app__/src/chunks/ProjectsOverview.mjs +72 -72
  4. package/__app__/src/chunks/es.mjs +1 -1
  5. package/__app__/src/chunks/hooks.mjs +94 -91
  6. package/__app__/src/chunks/libs/@floating-ui.mjs +3 -3
  7. package/__app__/src/chunks/libs/@mantine.mjs +1609 -892
  8. package/__app__/src/chunks/libs/@tanstack-ai.mjs +2 -2
  9. package/__app__/src/chunks/libs/@tanstack.mjs +4 -10
  10. package/__app__/src/chunks/libs/@xyflow/react.mjs +4 -4
  11. package/__app__/src/chunks/libs/d3.mjs +4 -9
  12. package/__app__/src/chunks/libs/fast-equals.mjs +61 -49
  13. package/__app__/src/chunks/libs/framer.mjs +6 -6
  14. package/__app__/src/chunks/styled-system.mjs +2578 -124
  15. package/__app__/src/main.mjs +21537 -20155
  16. package/__app__/src/style.css +1 -1
  17. package/config/schema.json +14 -0
  18. package/dist/app/render-view-client.css +1 -1
  19. package/dist/app/render-view-client.js +99 -105
  20. package/dist/chunks/filenames.mjs +6 -6
  21. package/dist/chunks/index.d.mts +7 -1
  22. package/dist/chunks/index2.d.mts +38 -21
  23. package/dist/chunks/libs/@chevrotain/gast.mjs +1 -1
  24. package/dist/chunks/libs/@chevrotain/types.d.mts +108 -0
  25. package/dist/chunks/libs/@logtape/logtape.mjs +4 -4
  26. package/dist/chunks/libs/langium.d.mts +1777 -16
  27. package/dist/chunks/libs/langium.mjs +4 -4
  28. package/dist/chunks/libs/p-queue.mjs +1 -1
  29. package/dist/chunks/libs/package-manager-detector.mjs +1 -1
  30. package/dist/chunks/libs/pako.mjs +2 -2
  31. package/dist/chunks/libs/picomatch.mjs +1 -1
  32. package/dist/chunks/libs/pretty-ms.mjs +1 -1
  33. package/dist/chunks/libs/remeda.mjs +1 -1
  34. package/dist/chunks/libs/ufo.mjs +1 -1
  35. package/dist/chunks/libs/unstorage.mjs +1 -1
  36. package/dist/chunks/libs/zod.d.mts +1717 -17
  37. package/dist/chunks/node.mjs +58 -59
  38. package/dist/chunks/vite-plugin.mjs +15 -12
  39. package/dist/cli/index.d.mts +1 -1
  40. package/dist/cli/index.mjs +104 -88
  41. package/dist/index.d.mts +3 -3
  42. package/dist/model/index.d.mts +4 -4
  43. package/dist/vite-plugin/index.d.mts +2 -2
  44. package/dist/vite-plugin/internal/index.d.mts +15 -15
  45. package/dist/vite-plugin/internal/index.mjs +72 -27
  46. package/package.json +28 -28
  47. package/react/index.d.mts +22720 -1460
  48. package/react/index.mjs +30391 -25072
  49. package/vite-plugin-modules.d.ts +4 -2
package/dist/index.d.mts CHANGED
@@ -38,8 +38,8 @@ type LikeC4Options = {
38
38
  */
39
39
  logLevel?: 'trace' | 'debug' | 'info' | 'warning' | 'error' | undefined;
40
40
  };
41
- interface LikeC4 extends LikeC4$1 {}
42
- declare namespace LikeC4 {
41
+ export interface LikeC4 extends LikeC4$1 {}
42
+ export declare namespace LikeC4 {
43
43
  function fromSource(likec4SourceCode: string, _opts?: LikeC4Options): Promise<LikeC4>;
44
44
  /**
45
45
  * Initializes a LikeC4 instance from the specified workspace path.
@@ -48,4 +48,4 @@ declare namespace LikeC4 {
48
48
  function fromWorkspace(path?: string, _opts?: LikeC4Options): Promise<LikeC4>;
49
49
  }
50
50
  //#endregion
51
- export { LikeC4, type LikeC4Options, type WriteDSLOptions, writeDSL };
51
+ export { type LikeC4Options, type WriteDSLOptions, writeDSL };
@@ -48,13 +48,13 @@ interface SequenceViewLayout {
48
48
  }
49
49
  //#endregion
50
50
  //#region src/sequence/sequence-view.d.ts
51
- declare function calcSequenceLayout(view: LayoutedDynamicView): LayoutedDynamicView.Sequence.Layout;
51
+ export declare function calcSequenceLayout(view: LayoutedDynamicView): LayoutedDynamicView.Sequence.Layout;
52
52
  //#endregion
53
53
  //#region src/model/index.d.ts
54
- type UnknownLayouted = types.UnknownLayouted;
54
+ export type UnknownLayouted = types.UnknownLayouted;
55
55
  /**
56
56
  * Used by vite plugin to generate `virtual:likec4/model`
57
57
  */
58
- declare function createLikeC4Model(model: any): LikeC4Model$1<UnknownLayouted>;
58
+ export declare function createLikeC4Model(model: any): LikeC4Model$1<UnknownLayouted>;
59
59
  //#endregion
60
- export { type ComputedProjectEdge, type ComputedProjectNode, type ComputedProjectsView, Connection, ConnectionModel, DeployedInstanceModel, DeploymentConnectionModel, type DeploymentElementModel, DeploymentNodeModel, type DeploymentRelationEndpoint, DeploymentRelationModel, EdgeModel, ElementModel, type LayoutedProjectEdge, type LayoutedProjectNode, type LayoutedProjectsView, LikeC4DeploymentModel, LikeC4Model, LikeC4ViewModel, NodeModel, RelationshipModel, type SequenceViewLayout, UnknownLayouted, calcSequenceLayout, createLikeC4Model, deploymentConnection, differenceConnections, findAscendingConnections, findDeepestNestedConnection, findDescendantConnections, hasSameSource, hasSameSourceTarget, hasSameTarget, isAnyInOut, isDeployedInstanceModel, isDeploymentElementModel, isDeploymentNodeModel, isDeploymentRelationModel, isEdgeModel, isElementModel, isIncoming, isLikeC4ViewModel, isNestedConnection, isNestedElementOfDeployedInstanceModel, isNodeModel, isOutgoing, isRelationModel, mergeConnections, modelConnection, sortConnectionsByBoundaryHierarchy, sortDeepestFirst, type types };
60
+ export { type ComputedProjectEdge, type ComputedProjectNode, type ComputedProjectsView, Connection, ConnectionModel, DeployedInstanceModel, DeploymentConnectionModel, type DeploymentElementModel, DeploymentNodeModel, type DeploymentRelationEndpoint, DeploymentRelationModel, EdgeModel, ElementModel, type LayoutedProjectEdge, type LayoutedProjectNode, type LayoutedProjectsView, LikeC4DeploymentModel, LikeC4Model, LikeC4ViewModel, NodeModel, RelationshipModel, type SequenceViewLayout, deploymentConnection, differenceConnections, findAscendingConnections, findDeepestNestedConnection, findDescendantConnections, hasSameSource, hasSameSourceTarget, hasSameTarget, isAnyInOut, isDeployedInstanceModel, isDeploymentElementModel, isDeploymentNodeModel, isDeploymentRelationModel, isEdgeModel, isElementModel, isIncoming, isLikeC4ViewModel, isNestedConnection, isNestedElementOfDeployedInstanceModel, isNodeModel, isOutgoing, isRelationModel, mergeConnections, modelConnection, sortConnectionsByBoundaryHierarchy, sortDeepestFirst, type types };
@@ -138,6 +138,6 @@ type LikeC4VitePluginOptions = SharedOptions & ({
138
138
  watch?: never;
139
139
  logLevel?: never;
140
140
  });
141
- declare function LikeC4VitePlugin({ environments, appConfig, ai: _ai, ...pluginOpts }: LikeC4VitePluginOptions): PluginOption;
141
+ export declare function LikeC4VitePlugin({ environments, appConfig, ai: _ai, ...pluginOpts }: LikeC4VitePluginOptions): PluginOption;
142
142
  //#endregion
143
- export { LikeC4VitePlugin, type LikeC4VitePluginOptions };
143
+ export type { LikeC4VitePluginOptions };
@@ -3,7 +3,7 @@ import { DependencyList } from "react";
3
3
  import { LayoutedElementView, LayoutedLikeC4ModelData, LayoutedView, ProjectId, ViewChange, ViewId } from "@likec4/core/types";
4
4
  import { AdhocViewPredicate } from "@likec4/core/compute-view";
5
5
  //#region ../vite-plugin/dist/internal/index.d.mts
6
- //#region ../../node_modules/.pnpm/nanostores@1.5.2/node_modules/nanostores/atom/index.d.ts
6
+ //#region ../../node_modules/.pnpm/nanostores@1.5.3/node_modules/nanostores/atom/index.d.ts
7
7
  type AllKeys<T> = T extends any ? keyof T : never;
8
8
  type Primitive = boolean | number | string;
9
9
  type ReadonlyIfObject<Value> = Value extends undefined ? Value : Value extends ((...args: any) => any) ? Value : Value extends Primitive ? Value : Value extends object ? Readonly<Value> : Value;
@@ -141,9 +141,9 @@ type Atom<Value = any> = ReadableAtom<Value> | WritableAtom<Value>;
141
141
  * @param initialValue Initial value of the store.
142
142
  * @returns The store object with methods to subscribe.
143
143
  */
144
- declare function atom<Value, StoreExt = object>(...args: undefined extends Value ? [] | [Value] : [Value]): PreinitializedWritableAtom<Value> & StoreExt;
144
+ export declare function atom<Value, StoreExt = object>(...args: undefined extends Value ? [] | [Value] : [Value]): PreinitializedWritableAtom<Value> & StoreExt;
145
145
  //#endregion
146
- //#region ../../node_modules/.pnpm/nanostores@1.5.2/node_modules/nanostores/map/index.d.ts
146
+ //#region ../../node_modules/.pnpm/nanostores@1.5.3/node_modules/nanostores/map/index.d.ts
147
147
  type KeyofBase = keyof any;
148
148
  type Get<T, K extends KeyofBase> = T extends any ? K extends keyof T ? T[K] : never : never;
149
149
  type HasIndexSignature<T> = string extends keyof T ? true : false;
@@ -248,21 +248,21 @@ interface PreinitializedMapStore<Value extends object = any> extends MapStore<Va
248
248
  * @param value Initial store value.
249
249
  * @returns The store object with methods to subscribe.
250
250
  */
251
- declare function map<Value extends object, StoreExt extends object = object>(value: Value): PreinitializedMapStore<Value> & StoreExt;
251
+ export declare function map<Value extends object, StoreExt extends object = object>(value: Value): PreinitializedMapStore<Value> & StoreExt;
252
252
  /**
253
253
  * Create map store with no initial value, or one that may be missing.
254
254
  *
255
255
  * @param value Initial store value, if there is one.
256
256
  * @returns The store object with methods to subscribe.
257
257
  */
258
- declare function map<Value extends object, StoreExt extends object = object>(value?: Value): PreinitializedMapStore<Partial<Value>> & StoreExt;
258
+ export declare function map<Value extends object, StoreExt extends object = object>(value?: Value): PreinitializedMapStore<Partial<Value>> & StoreExt;
259
259
  //#endregion
260
- //#region ../../node_modules/.pnpm/nanostores@1.5.2/node_modules/nanostores/task/index.d.ts
260
+ //#region ../../node_modules/.pnpm/nanostores@1.5.3/node_modules/nanostores/task/index.d.ts
261
261
  interface Task<Value> extends Promise<Value> {
262
262
  t: true;
263
263
  }
264
264
  //#endregion
265
- //#region ../../node_modules/.pnpm/nanostores@1.5.2/node_modules/nanostores/computed/index.d.ts
265
+ //#region ../../node_modules/.pnpm/nanostores@1.5.3/node_modules/nanostores/computed/index.d.ts
266
266
  type StoreValues<Stores extends readonly Gettable[]> = { -readonly [Index in keyof Stores]: StoreValue<Stores[Index]>; };
267
267
  interface Computed {
268
268
  /**
@@ -291,7 +291,7 @@ interface Computed {
291
291
  */
292
292
  <Value, OriginStores extends readonly Store[]>(stores: readonly [...OriginStores], cb: (...values: StoreValues<OriginStores>) => Task<Value> | Value): ReadableAtom<Value>;
293
293
  }
294
- declare const computed: Computed;
294
+ export declare const computed: Computed;
295
295
  interface Batched {
296
296
  <Value, OriginStore extends Store>(stores: OriginStore, cb: (value: StoreValue<OriginStore>) => Task<Value> | Value): ReadableAtom<Value>;
297
297
  /**
@@ -310,7 +310,7 @@ interface Batched {
310
310
  */
311
311
  <Value, OriginStores extends readonly Store[]>(stores: readonly [...OriginStores], cb: (...values: StoreValues<OriginStores>) => Task<Value> | Value): ReadableAtom<Value>;
312
312
  }
313
- declare const batched: Batched;
313
+ export declare const batched: Batched;
314
314
  //#endregion
315
315
  //#region src/rpc/protocol.d.ts
316
316
  interface LikeC4VitePluginRpc {
@@ -343,7 +343,7 @@ interface LikeC4VitePluginRpc {
343
343
  }): Promise<LayoutedElementView>;
344
344
  }
345
345
  //#endregion
346
- //#region ../../node_modules/.pnpm/@nanostores+react@1.1.0_nanostores@1.5.2_react@19.2.8/node_modules/@nanostores/react/index.d.ts
346
+ //#region ../../node_modules/.pnpm/@nanostores+react@1.1.0_nanostores@1.5.3_react@19.2.8/node_modules/@nanostores/react/index.d.ts
347
347
  type StoreKeys<T> = T extends {
348
348
  setKey: (k: infer K, v: any) => unknown;
349
349
  } ? K : never;
@@ -389,10 +389,10 @@ interface UseStoreOptions<SomeStore> {
389
389
  * @param store Store instance.
390
390
  * @returns Store value.
391
391
  */
392
- declare function useStore<SomeStore extends Store>(store: SomeStore, options?: UseStoreOptions<SomeStore>): StoreValue<SomeStore>;
392
+ export declare function useStore<SomeStore extends Store>(store: SomeStore, options?: UseStoreOptions<SomeStore>): StoreValue<SomeStore>;
393
393
  //#endregion
394
394
  //#region src/internal.d.ts
395
- interface LikeC4VitePluginRpcOptions {
395
+ export interface LikeC4VitePluginRpcOptions {
396
396
  /**
397
397
  * Function to post raw message
398
398
  */
@@ -406,8 +406,8 @@ interface LikeC4VitePluginRpcOptions {
406
406
  * Create a PluginRPC instance for the LikeC4 Vite plugin
407
407
  * used by the Vite plugin in virtual modules
408
408
  */
409
- declare function createRpc(options: LikeC4VitePluginRpcOptions): LikeC4VitePluginRpc;
410
- declare function createHooksForModel($atom: WritableAtom<LayoutedLikeC4ModelData>): {
409
+ export declare function createRpc(options: LikeC4VitePluginRpcOptions): LikeC4VitePluginRpc;
410
+ export declare function createHooksForModel($atom: WritableAtom<LayoutedLikeC4ModelData>): {
411
411
  updateModel: (data: LayoutedLikeC4ModelData) => void;
412
412
  $likec4model: Atom<LikeC4Model.Layouted>;
413
413
  useLikeC4Model: () => LikeC4Model.Layouted;
@@ -415,4 +415,4 @@ declare function createHooksForModel($atom: WritableAtom<LayoutedLikeC4ModelData
415
415
  useLikeC4View: (viewId: string) => LayoutedView | null;
416
416
  };
417
417
  //#endregion
418
- export { type Atom, type LikeC4VitePluginRpc, LikeC4VitePluginRpcOptions, type ReadableAtom, type WritableAtom, atom, batched, computed, createHooksForModel, createRpc, map, useStore };
418
+ export type { Atom, LikeC4VitePluginRpc, ReadableAtom, WritableAtom };
@@ -1,7 +1,7 @@
1
1
  import { LikeC4Model } from "@likec4/core/model";
2
2
  import { useCallback, useMemo, useRef, useSyncExternalStore } from "react";
3
3
 
4
- //#region ../../node_modules/.pnpm/nanostores@1.5.2/node_modules/nanostores/atom/index.js
4
+ //#region ../../node_modules/.pnpm/nanostores@1.5.3/node_modules/nanostores/atom/index.js
5
5
  let listenerQueue = [];
6
6
  let lqIndex = 0;
7
7
  let batchSeen = null;
@@ -9,12 +9,17 @@ const QUEUE_ITEMS_PER_LISTENER = 4;
9
9
  const nanostoresGlobal = globalThis.nanostoresGlobal ||= { epoch: 0 };
10
10
  let drainQueue = () => {
11
11
  let thrown;
12
- for (lqIndex = 0; lqIndex < listenerQueue.length; lqIndex += QUEUE_ITEMS_PER_LISTENER) try {
13
- listenerQueue[lqIndex](listenerQueue[lqIndex + 1].value, listenerQueue[lqIndex + 2], listenerQueue[lqIndex + 3]);
14
- } catch (e) {
15
- thrown = e;
12
+ let i;
13
+ while (lqIndex < listenerQueue.length) {
14
+ i = lqIndex;
15
+ lqIndex += QUEUE_ITEMS_PER_LISTENER;
16
+ try {
17
+ listenerQueue[i](listenerQueue[i + 1].value, listenerQueue[i + 2], listenerQueue[i + 3]);
18
+ } catch (e) {
19
+ thrown = e;
20
+ }
16
21
  }
17
- listenerQueue.length = 0;
22
+ listenerQueue.length = lqIndex = 0;
18
23
  if (thrown) throw thrown;
19
24
  };
20
25
  const atom = /* @__NO_SIDE_EFFECTS__ */ (initialValue) => {
@@ -30,7 +35,7 @@ const atom = /* @__NO_SIDE_EFFECTS__ */ (initialValue) => {
30
35
  listen(listener) {
31
36
  $atom.lc = listeners.push(listener);
32
37
  return () => {
33
- for (let i = lqIndex + QUEUE_ITEMS_PER_LISTENER; i < listenerQueue.length;) if (listenerQueue[i] === listener) listenerQueue.splice(i, QUEUE_ITEMS_PER_LISTENER);
38
+ for (let i = lqIndex; i < listenerQueue.length;) if (listenerQueue[i] === listener) listenerQueue.splice(i, QUEUE_ITEMS_PER_LISTENER);
34
39
  else i += QUEUE_ITEMS_PER_LISTENER;
35
40
  let index = listeners.indexOf(listener);
36
41
  if (~index) {
@@ -68,7 +73,7 @@ const atom = /* @__NO_SIDE_EFFECTS__ */ (initialValue) => {
68
73
  };
69
74
 
70
75
  //#endregion
71
- //#region ../../node_modules/.pnpm/nanostores@1.5.2/node_modules/nanostores/lifecycle/index.js
76
+ //#region ../../node_modules/.pnpm/nanostores@1.5.3/node_modules/nanostores/lifecycle/index.js
72
77
  const MOUNT = 5;
73
78
  const UNMOUNT = 6;
74
79
  const REVERT_MUTATION = 10;
@@ -85,11 +90,12 @@ let on = (object, listener, eventKey, mutateStore) => {
85
90
  return () => {
86
91
  let currentListeners = object.events[eventKey];
87
92
  let index = currentListeners.indexOf(listener);
88
- currentListeners.splice(index, 1);
89
- if (!currentListeners.length) {
90
- delete object.events[eventKey];
91
- object.events[eventKey + REVERT_MUTATION]();
92
- delete object.events[eventKey + REVERT_MUTATION];
93
+ if (~index) {
94
+ currentListeners.splice(index, 1);
95
+ if (!currentListeners.length) {
96
+ object.events[eventKey + REVERT_MUTATION]();
97
+ delete object.events[eventKey + REVERT_MUTATION];
98
+ }
93
99
  }
94
100
  };
95
101
  };
@@ -128,7 +134,7 @@ let onMount = ($store, initialize) => {
128
134
  };
129
135
 
130
136
  //#endregion
131
- //#region ../../node_modules/.pnpm/nanostores@1.5.2/node_modules/nanostores/computed/index.js
137
+ //#region ../../node_modules/.pnpm/nanostores@1.5.3/node_modules/nanostores/computed/index.js
132
138
  let computedStore = (stores, cb, batched) => {
133
139
  if (!Array.isArray(stores)) stores = [stores];
134
140
  let previousArgs;
@@ -137,7 +143,7 @@ let computedStore = (stores, cb, batched) => {
137
143
  if (currentEpoch === nanostoresGlobal.epoch) return;
138
144
  currentEpoch = nanostoresGlobal.epoch;
139
145
  let args = stores.map(($store) => $store.get());
140
- if (!previousArgs || args.some((arg, i) => arg !== previousArgs[i])) {
146
+ if (!previousArgs?.every((arg, i) => stores[i].eq(arg, args[i]))) {
141
147
  previousArgs = args;
142
148
  let value = cb(...args);
143
149
  if (value && value.then && value.t) value.then((asyncValue) => {
@@ -149,7 +155,7 @@ let computedStore = (stores, cb, batched) => {
149
155
  }
150
156
  }
151
157
  };
152
- let $computed = /* @__PURE__ */ atom(void 0);
158
+ let $computed = /* @__PURE__ */ atom();
153
159
  let get = $computed.get;
154
160
  $computed.get = () => {
155
161
  set();
@@ -173,7 +179,7 @@ const computed = /* @__NO_SIDE_EFFECTS__ */ (stores, fn) => computedStore(stores
173
179
  const batched = /* @__NO_SIDE_EFFECTS__ */ (stores, fn) => computedStore(stores, fn, true);
174
180
 
175
181
  //#endregion
176
- //#region ../../node_modules/.pnpm/nanostores@1.5.2/node_modules/nanostores/deep-map/path.js
182
+ //#region ../../node_modules/.pnpm/nanostores@1.5.3/node_modules/nanostores/deep-map/path.js
177
183
  function getPath(obj, path) {
178
184
  let allKeys = getAllKeysFromPath(path);
179
185
  let res = obj;
@@ -196,7 +202,7 @@ function getKeyAndIndicesFromKey(key) {
196
202
  }
197
203
 
198
204
  //#endregion
199
- //#region ../../node_modules/.pnpm/nanostores@1.5.2/node_modules/nanostores/listen-keys/index.js
205
+ //#region ../../node_modules/.pnpm/nanostores@1.5.3/node_modules/nanostores/listen-keys/index.js
200
206
  function listenKeys($store, keys, listener) {
201
207
  let keysSet = new Set(keys);
202
208
  return $store.listen((value, oldValue, changed) => {
@@ -205,7 +211,7 @@ function listenKeys($store, keys, listener) {
205
211
  }
206
212
 
207
213
  //#endregion
208
- //#region ../../node_modules/.pnpm/nanostores@1.5.2/node_modules/nanostores/map/index.js
214
+ //#region ../../node_modules/.pnpm/nanostores@1.5.3/node_modules/nanostores/map/index.js
209
215
  const map = /* @__NO_SIDE_EFFECTS__ */ (initial = {}) => {
210
216
  let $map = /* @__PURE__ */ atom(initial);
211
217
  $map.eqKey = Object.is;
@@ -227,7 +233,7 @@ const map = /* @__NO_SIDE_EFFECTS__ */ (initial = {}) => {
227
233
  };
228
234
 
229
235
  //#endregion
230
- //#region ../../node_modules/.pnpm/@nanostores+react@1.1.0_nanostores@1.5.2_react@19.2.8/node_modules/@nanostores/react/index.js
236
+ //#region ../../node_modules/.pnpm/@nanostores+react@1.1.0_nanostores@1.5.3_react@19.2.8/node_modules/@nanostores/react/index.js
231
237
  let emit = (snapshotRef, onChange) => (value) => {
232
238
  if (snapshotRef.current === value) return;
233
239
  snapshotRef.current = value;
@@ -445,7 +451,7 @@ function createBirpc($functions, options) {
445
451
  }
446
452
 
447
453
  //#endregion
448
- //#region ../../node_modules/.pnpm/fast-equals@6.0.2/node_modules/fast-equals/dist/es/index.mjs
454
+ //#region ../../node_modules/.pnpm/fast-equals@6.0.3/node_modules/fast-equals/dist/es/index.mjs
449
455
  const { getOwnPropertyNames, getOwnPropertySymbols } = Object;
450
456
  const { hasOwnProperty } = Object.prototype;
451
457
  /**
@@ -491,6 +497,7 @@ const hasOwn = Object.hasOwn || ((object, property) => hasOwnProperty.call(objec
491
497
  const PREACT_VNODE = "__v";
492
498
  const PREACT_OWNER = "__o";
493
499
  const REACT_OWNER = "_owner";
500
+ const HAS_FLOAT_16_ARRAY = typeof Float16Array !== "undefined";
494
501
  const { getOwnPropertyDescriptor, keys } = Object;
495
502
  /**
496
503
  * Whether the values passed are equal based on a [SameValue](https://262.ecma-international.org/7.0/#sec-samevalue) basis.
@@ -544,9 +551,16 @@ function areDatesEqual(a, b) {
544
551
  }
545
552
  /**
546
553
  * Whether the errors passed are equal in value.
554
+ *
555
+ * @note
556
+ * `name`, `message` and `stack` are own properties but are not enumerable, so they are compared
557
+ * explicitly. `cause` is compared by value rather than by reference, matching how every other
558
+ * nested value in the comparison is treated. Own enumerable properties (which custom `Error`
559
+ * subclasses commonly add) are compared by composing this with the object comparator in the
560
+ * comparator config, so that the strict and circular variants apply to them as well.
547
561
  */
548
- function areErrorsEqual(a, b) {
549
- return a.name === b.name && a.message === b.message && a.cause === b.cause && a.stack === b.stack;
562
+ function areErrorsEqual(a, b, state) {
563
+ return a.name === b.name && a.message === b.message && a.stack === b.stack && state.equals(a.cause, b.cause, "cause", "cause", a, b, state);
550
564
  }
551
565
  /**
552
566
  * Whether the `Map`s are equal in value.
@@ -659,6 +673,10 @@ function areSetsEqual(a, b, state) {
659
673
  function areTypedArraysEqual(a, b) {
660
674
  let index = a.length;
661
675
  if (b.length !== index || a.byteOffset !== b.byteOffset) return false;
676
+ if (a instanceof Float64Array || a instanceof Float32Array || HAS_FLOAT_16_ARRAY && a instanceof Float16Array) {
677
+ while (index-- > 0) if (a[index] !== b[index] && (a[index] === a[index] || b[index] === b[index])) return false;
678
+ return true;
679
+ }
662
680
  while (index-- > 0) if (a[index] !== b[index]) return false;
663
681
  return true;
664
682
  }
@@ -666,7 +684,32 @@ function areTypedArraysEqual(a, b) {
666
684
  * Whether the URL instances are equal in value.
667
685
  */
668
686
  function areUrlsEqual(a, b) {
669
- return a.hostname === b.hostname && a.pathname === b.pathname && a.protocol === b.protocol && a.port === b.port && a.hash === b.hash && a.username === b.username && a.password === b.password;
687
+ if (a.href === b.href) return true;
688
+ return a.protocol === b.protocol && a.username === b.username && a.password === b.password && a.host === b.host && a.pathname === b.pathname && a.hash === b.hash && areSearchParamsEqual(a.searchParams, b.searchParams);
689
+ }
690
+ /**
691
+ * Whether the search params passed are equal in value.
692
+ *
693
+ * @note
694
+ * Order is not significant, matching how the other unordered collections in the library are
695
+ * compared. Repeated keys are, so this is a comparison of multisets rather than of sets:
696
+ * `a=1&a=2` is equal to `a=2&a=1`, but not to `a=1&a=1`.
697
+ */
698
+ function areSearchParamsEqual(a, b) {
699
+ const serializedA = a.toString();
700
+ const serializedB = b.toString();
701
+ return serializedA === serializedB || sortSearchParams(serializedA) === sortSearchParams(serializedB);
702
+ }
703
+ /**
704
+ * Reorder a serialized query string so that params holding the same pairs compare as equal
705
+ * regardless of the order they appear in.
706
+ *
707
+ * @note
708
+ * The serializer percent-encodes `&` and `=` wherever they appear inside a name or a value, so
709
+ * splitting on `&` recovers exactly the pairs and nothing else.
710
+ */
711
+ function sortSearchParams(serialized) {
712
+ return serialized.split("&").sort().join("&");
670
713
  }
671
714
  function isPropertyEqual(a, b, state, property) {
672
715
  if ((property === REACT_OWNER || property === PREACT_OWNER || property === PREACT_VNODE) && (a.$$typeof || b.$$typeof)) return true;
@@ -719,7 +762,7 @@ function createEqualityComparatorConfig({ circular, createCustomConfig, strict }
719
762
  areArraysEqual: strict ? areObjectsEqualStrict : areArraysEqual,
720
763
  areDataViewsEqual,
721
764
  areDatesEqual,
722
- areErrorsEqual,
765
+ areErrorsEqual: strict ? combineComparators(areErrorsEqual, areObjectsEqualStrict) : combineComparators(areErrorsEqual, areObjectsEqual),
723
766
  areFunctionsEqual: strictEqual,
724
767
  areMapsEqual: strict ? combineComparators(areMapsEqual, areObjectsEqualStrict) : areMapsEqual,
725
768
  areNumbersEqual: sameValueEqual,
@@ -734,11 +777,13 @@ function createEqualityComparatorConfig({ circular, createCustomConfig, strict }
734
777
  if (createCustomConfig) config = Object.assign({}, config, createCustomConfig(config));
735
778
  if (circular) {
736
779
  const areArraysEqual = createIsCircular(config.areArraysEqual);
780
+ const areErrorsEqual = createIsCircular(config.areErrorsEqual);
737
781
  const areMapsEqual = createIsCircular(config.areMapsEqual);
738
782
  const areObjectsEqual = createIsCircular(config.areObjectsEqual);
739
783
  const areSetsEqual = createIsCircular(config.areSetsEqual);
740
784
  config = Object.assign({}, config, {
741
785
  areArraysEqual,
786
+ areErrorsEqual,
742
787
  areMapsEqual,
743
788
  areObjectsEqual,
744
789
  areSetsEqual
@@ -789,13 +834,13 @@ function createIsEqual({ circular, comparator, createState, equals, strict }) {
789
834
  /**
790
835
  * Create a map of `toString()` values to their respective handlers for `tag`-based lookups.
791
836
  */
792
- function createSupportedComparatorMap({ areArrayBuffersEqual, areArraysEqual, areDataViewsEqual, areDatesEqual, areErrorsEqual, areFunctionsEqual, areMapsEqual, areNumbersEqual, areObjectsEqual, arePrimitiveWrappersEqual, areRegExpsEqual, areSetsEqual, areTypedArraysEqual, areUrlsEqual }) {
837
+ function createSupportedComparatorMap({ areArrayBuffersEqual, areArraysEqual, areDataViewsEqual, areDatesEqual, areErrorsEqual, areFunctionsEqual, areMapsEqual, areObjectsEqual, arePrimitiveWrappersEqual, areRegExpsEqual, areSetsEqual, areTypedArraysEqual, areUrlsEqual }) {
793
838
  return {
794
839
  "[object Arguments]": areObjectsEqual,
795
840
  "[object Array]": areArraysEqual,
796
841
  "[object ArrayBuffer]": areArrayBuffersEqual,
797
842
  "[object AsyncGeneratorFunction]": areFunctionsEqual,
798
- "[object BigInt]": areNumbersEqual,
843
+ "[object BigInt]": arePrimitiveWrappersEqual,
799
844
  "[object BigInt64Array]": areTypedArraysEqual,
800
845
  "[object BigUint64Array]": areTypedArraysEqual,
801
846
  "[object Boolean]": arePrimitiveWrappersEqual,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "likec4",
3
3
  "description": "Toolchain for your architecture diagrams",
4
- "version": "1.59.3",
4
+ "version": "1.59.4",
5
5
  "license": "MIT",
6
6
  "homepage": "https://likec4.dev",
7
7
  "author": "Denis Davydkov <denis@davydkov.com>",
@@ -90,11 +90,11 @@
90
90
  },
91
91
  "dependencies": {
92
92
  "@hpcc-js/wasm-graphviz": "1.22.2",
93
- "@likec4/core": "1.59.3",
93
+ "@likec4/core": "1.59.4",
94
94
  "@likec4/icons": "1.46.4",
95
95
  "@vitejs/plugin-react": "^6.1.1",
96
96
  "bundle-require": "^5.1.0",
97
- "esbuild": "0.28.1",
97
+ "esbuild": "0.28.2",
98
98
  "fdir": "6.4.0",
99
99
  "playwright": "1.60.0",
100
100
  "chokidar": "^5.0.0",
@@ -139,25 +139,25 @@
139
139
  },
140
140
  "devDependencies": {
141
141
  "langium": "3.5.0",
142
- "@likec4/config": "1.59.3",
143
- "@likec4/leanix-bridge": "1.59.3",
144
- "@likec4/log": "1.59.3",
145
- "@likec4/language-server": "1.59.3",
146
- "@likec4/language-services": "1.59.3",
147
- "@likec4/mcp": "1.59.3",
142
+ "@likec4/config": "1.59.4",
143
+ "@likec4/leanix-bridge": "1.59.4",
144
+ "@likec4/log": "1.59.4",
145
+ "@likec4/language-server": "1.59.4",
146
+ "@likec4/language-services": "1.59.4",
147
+ "@likec4/mcp": "1.59.4",
148
148
  "@dagrejs/dagre": "1.1.8",
149
149
  "@fontsource-variable/ibm-plex-sans": "^5.2.8",
150
- "@likec4/devops": "1.59.3",
151
- "@likec4/diagram": "1.59.3",
152
- "@likec4/layouts": "1.59.3",
153
- "@likec4/vite-plugin": "1.59.3",
154
- "@likec4/react": "1.59.3",
155
- "@likec4/spa": "1.59.3",
156
- "@likec4/generators": "1.59.3",
157
- "@likec4/style-preset": "1.59.3",
158
- "@likec4/styles": "1.59.3",
159
- "@likec4/tsconfig": "1.59.3",
160
- "@pandacss/dev": "^1.11.4",
150
+ "@likec4/devops": "1.59.4",
151
+ "@likec4/diagram": "1.59.4",
152
+ "@likec4/layouts": "1.59.4",
153
+ "@likec4/vite-plugin": "1.59.4",
154
+ "@likec4/react": "1.59.4",
155
+ "@likec4/spa": "1.59.4",
156
+ "@likec4/generators": "1.59.4",
157
+ "@likec4/style-preset": "1.59.4",
158
+ "@likec4/styles": "1.59.4",
159
+ "@likec4/tsconfig": "1.59.4",
160
+ "@pandacss/dev": "^1.12.1",
161
161
  "@tanstack/ai": "^0.14.0",
162
162
  "@types/node": "~22.19.19",
163
163
  "@types/picomatch": "^4.0.3",
@@ -174,7 +174,7 @@
174
174
  "defu": "^6.1.7",
175
175
  "esbuild-node-externals": "1.23.1",
176
176
  "esm-env": "^1.2.2",
177
- "fast-equals": "^6.0.2",
177
+ "fast-equals": "^6.0.3",
178
178
  "get-port": "^7.2.0",
179
179
  "is-inside-container": "^1.0.0",
180
180
  "json5": "^2.2.3",
@@ -182,12 +182,12 @@
182
182
  "mkdirp": "^3.0.1",
183
183
  "npm-run-all2": "^8.0.4",
184
184
  "p-limit": "7.3.2",
185
- "nanostores": "1.5.2",
185
+ "nanostores": "1.5.3",
186
186
  "@nanostores/react": "1.1.0",
187
- "oxlint": "1.72.0",
188
- "package-manager-detector": "1.6.0",
187
+ "oxlint": "1.81.0",
188
+ "package-manager-detector": "1.8.0",
189
189
  "package-up": "^5.0.0",
190
- "postcss": "8.5.23",
190
+ "postcss": "8.5.28",
191
191
  "pretty-ms": "^9.3.0",
192
192
  "react": "19.2.8",
193
193
  "react-dom": "19.2.8",
@@ -197,11 +197,11 @@
197
197
  "semver": "^7.8.1",
198
198
  "strip-indent": "^4.1.1",
199
199
  "tinyrainbow": "^3.1.1",
200
- "tsx": "4.22.5",
200
+ "tsx": "4.23.13",
201
201
  "turbo": "2.10.12",
202
202
  "typescript": "6.0.3",
203
203
  "ufo": "1.6.4",
204
- "tsdown": "^0.22.9",
204
+ "tsdown": "^0.23.0",
205
205
  "vite-plugin-dts": "^5.1.0",
206
206
  "vitest": "4.1.11",
207
207
  "vscode-jsonrpc": "8.2.0",
@@ -209,7 +209,7 @@
209
209
  "vscode-languageserver-types": "3.17.5",
210
210
  "vscode-uri": "3.1.0",
211
211
  "which": "^5.0.0",
212
- "wireit": "0.14.12",
212
+ "wireit": "0.14.13",
213
213
  "zod": "^4.4.3",
214
214
  "zx": "8.8.5"
215
215
  },