likec4 1.34.2 → 1.36.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.
- package/__app__/src/main.js +13096 -9900
- package/__app__/src/style.css +1 -1
- package/dist/cli/index.mjs +277 -276
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/shared/{likec4.C6HFkgux.d.mts → likec4.CoVNuZKl.d.mts} +46 -23
- package/dist/shared/likec4.D8qlxD_Y.mjs +239 -0
- package/dist/shared/{likec4.B5b4pT-B.mjs → likec4.DWIqzE5d.mjs} +1891 -1884
- package/dist/vite-plugin/index.d.mts +2 -2
- package/dist/vite-plugin/index.mjs +1 -1
- package/package.json +31 -30
- package/react/index.d.mts +221 -30
- package/react/index.mjs +77 -63
- package/vite-plugin-modules.d.ts +2 -1
- package/dist/shared/likec4.ButMg-j9.mjs +0 -239
package/dist/index.d.mts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { LikeC4Model } from '@likec4/core/model';
|
|
2
2
|
import { UnknownLayouted } from './model/index.mjs';
|
|
3
|
-
import { W as WorkspaceFolder, a as LikeC4Services, L as LikeC4LanguageServices, b as LikeC4Views, R as Range } from './shared/likec4.
|
|
3
|
+
import { W as WorkspaceFolder, a as LikeC4Services, L as LikeC4LanguageServices, b as LikeC4Views, R as Range } from './shared/likec4.CoVNuZKl.mjs';
|
|
4
4
|
import { ProjectId, NonEmptyArray } from '@likec4/core';
|
|
5
5
|
import { DiagramView } from '@likec4/core/types';
|
|
6
6
|
export * from '@likec4/core/types';
|
|
7
7
|
import 'type-fest';
|
|
8
|
-
import '/home/runner/work/likec4/likec4/node_modules/.pnpm/@types+picomatch@4.0.
|
|
8
|
+
import '/home/runner/work/likec4/likec4/node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/posix.d.ts';
|
|
9
9
|
import '@likec4/core/utils';
|
|
10
10
|
|
|
11
11
|
type Logger = {
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{LikeC4Model as o}from"@likec4/core/model";export{L as LikeC4}from"./shared/likec4.
|
|
1
|
+
import{LikeC4Model as o}from"@likec4/core/model";export{L as LikeC4}from"./shared/likec4.DWIqzE5d.mjs";import"node:fs";import"node:path";import"node:url";import"./shared/likec4.BeWJWU7_.mjs";import"tty";import"node:util";import"util";import"path";import"os";import"crypto";import"net";import"url";import"fs";import"child_process";import"@likec4/core";import"@likec4/core/types";import"events";import"@hpcc-js/wasm-graphviz";import"buffer";import"@likec4/core/compute-view";import"@likec4/core/utils";
|
|
2
2
|
import"node:process";import"boxen";import"node:child_process";import"node:events";import"node:fs/promises";import"node:stream/promises";import"node:readline/promises";import"node:os";import"fs/promises";function t(r){return o.create(r)}export{t as createLikeC4Model};
|
|
@@ -2,7 +2,7 @@ import { Tagged, ValueOf, ConditionalPick, Writable, Simplify, MergeExclusive }
|
|
|
2
2
|
import * as c4 from '@likec4/core';
|
|
3
3
|
import { Fqn, EdgeId, AnyAux, aux, ComputedView, Specification, DiagramView, MultiMap as MultiMap$1, ProjectId, NonEmptyArray, NonEmptyReadonlyArray, ViewId, RelationId, DeploymentFqn, ViewChange } from '@likec4/core';
|
|
4
4
|
import { LikeC4Model } from '@likec4/core/model';
|
|
5
|
-
import picomatch from '/home/runner/work/likec4/likec4/node_modules/.pnpm/@types+picomatch@4.0.
|
|
5
|
+
import picomatch from '/home/runner/work/likec4/likec4/node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/posix.d.ts';
|
|
6
6
|
import { ProjectId as ProjectId$1, Fqn as Fqn$1 } from '@likec4/core/types';
|
|
7
7
|
import { DefaultWeakMap, MultiMap as MultiMap$2 } from '@likec4/core/utils';
|
|
8
8
|
|
|
@@ -15717,13 +15717,14 @@ declare function readonly<TInput>(): ReadonlyAction<TInput>;
|
|
|
15717
15717
|
|
|
15718
15718
|
declare const ProjectConfig: ObjectSchema<{
|
|
15719
15719
|
readonly name: SchemaWithPipe<readonly [StringSchema<undefined>, NonEmptyAction<string, "Project name cannot be empty">, ExcludesAction<string, "default", "Project name cannot be \"default\"">, ExcludesAction<string, ".", "Project name cannot contain \".\", try to use A-z, 0-9, _ and -">, ExcludesAction<string, "@", "Project name cannot contain \"@\", try to use A-z, 0-9, _ and -">, ExcludesAction<string, "#", "Project name cannot contain \"#\", try to use A-z, 0-9, _ and -">, DescriptionAction<string, "Project name, must be unique in the workspace">]>;
|
|
15720
|
+
readonly title: OptionalSchema<SchemaWithPipe<readonly [StringSchema<undefined>, NonEmptyAction<string, "Project title cannot be empty if specified">, DescriptionAction<string, "A human readable title for the project">]>, undefined>;
|
|
15720
15721
|
readonly contactPerson: OptionalSchema<SchemaWithPipe<readonly [StringSchema<undefined>, NonEmptyAction<string, "Contact person cannot be empty if specified">, DescriptionAction<string, "A person who has been involved in creating or maintaining this project">]>, undefined>;
|
|
15721
15722
|
readonly exclude: OptionalSchema<SchemaWithPipe<readonly [ArraySchema<StringSchema<undefined>, undefined>, DescriptionAction<string[], "List of file patterns to exclude from the project, default is [\"**/node_modules/**/*\"]">]>, undefined>;
|
|
15722
15723
|
}, undefined>;
|
|
15723
15724
|
type ProjectConfig = InferOutput<typeof ProjectConfig>;
|
|
15724
15725
|
|
|
15725
15726
|
/******************************************************************************
|
|
15726
|
-
* This file was generated by langium-cli 3.5.
|
|
15727
|
+
* This file was generated by langium-cli 3.5.2.
|
|
15727
15728
|
* DO NOT EDIT MANUALLY!
|
|
15728
15729
|
******************************************************************************/
|
|
15729
15730
|
|
|
@@ -16262,7 +16263,7 @@ interface LineProperty extends AstNode {
|
|
|
16262
16263
|
}
|
|
16263
16264
|
declare const LineProperty = "LineProperty";
|
|
16264
16265
|
interface LinkProperty extends AstNode {
|
|
16265
|
-
readonly $container: DeployedInstanceBody | DeploymentNodeBody | DeploymentRelationBody | DeploymentViewBody | DynamicViewBody | ElementBody | ElementViewBody | ExtendDeploymentBody | ExtendElementBody | RelationBody;
|
|
16266
|
+
readonly $container: DeployedInstanceBody | DeploymentNodeBody | DeploymentRelationBody | DeploymentViewBody | DynamicViewBody | ElementBody | ElementViewBody | ExtendDeploymentBody | ExtendElementBody | RelationBody | SpecificationDeploymentNodeKind | SpecificationElementKind;
|
|
16266
16267
|
readonly $type: 'LinkProperty';
|
|
16267
16268
|
key: 'link';
|
|
16268
16269
|
title?: string;
|
|
@@ -16270,7 +16271,7 @@ interface LinkProperty extends AstNode {
|
|
|
16270
16271
|
}
|
|
16271
16272
|
declare const LinkProperty = "LinkProperty";
|
|
16272
16273
|
interface MarkdownOrString extends AstNode {
|
|
16273
|
-
readonly $container: ElementStringProperty | MetadataAttribute | NotationProperty | NotesProperty | RelationStringProperty | SpecificationRelationshipStringProperty | ViewStringProperty;
|
|
16274
|
+
readonly $container: ElementStringProperty | MetadataAttribute | NotationProperty | NotesProperty | RelationStringProperty | SpecificationElementStringProperty | SpecificationRelationshipStringProperty | ViewStringProperty;
|
|
16274
16275
|
readonly $type: 'MarkdownOrString';
|
|
16275
16276
|
markdown?: string;
|
|
16276
16277
|
text?: string;
|
|
@@ -16306,6 +16307,7 @@ declare const ModelDeployments = "ModelDeployments";
|
|
|
16306
16307
|
interface ModelViews extends AstNode {
|
|
16307
16308
|
readonly $container: LikeC4Grammar;
|
|
16308
16309
|
readonly $type: 'ModelViews';
|
|
16310
|
+
folder?: string;
|
|
16309
16311
|
name: 'views';
|
|
16310
16312
|
styles: Array<ViewRuleStyleOrGlobalRef>;
|
|
16311
16313
|
views: Array<LikeC4View>;
|
|
@@ -16464,7 +16466,7 @@ interface SpecificationDeploymentNodeKind extends AstNode {
|
|
|
16464
16466
|
readonly $container: SpecificationRule;
|
|
16465
16467
|
readonly $type: 'SpecificationDeploymentNodeKind';
|
|
16466
16468
|
kind: DeploymentNodeKind;
|
|
16467
|
-
props: Array<ElementStyleProperty | SpecificationElementStringProperty>;
|
|
16469
|
+
props: Array<ElementStyleProperty | LinkProperty | SpecificationElementStringProperty>;
|
|
16468
16470
|
tags?: Tags;
|
|
16469
16471
|
}
|
|
16470
16472
|
declare const SpecificationDeploymentNodeKind = "SpecificationDeploymentNodeKind";
|
|
@@ -16472,15 +16474,15 @@ interface SpecificationElementKind extends AstNode {
|
|
|
16472
16474
|
readonly $container: SpecificationRule;
|
|
16473
16475
|
readonly $type: 'SpecificationElementKind';
|
|
16474
16476
|
kind: ElementKind;
|
|
16475
|
-
props: Array<ElementStyleProperty | SpecificationElementStringProperty>;
|
|
16477
|
+
props: Array<ElementStyleProperty | LinkProperty | SpecificationElementStringProperty>;
|
|
16476
16478
|
tags?: Tags;
|
|
16477
16479
|
}
|
|
16478
16480
|
declare const SpecificationElementKind = "SpecificationElementKind";
|
|
16479
16481
|
interface SpecificationElementStringProperty extends AstNode {
|
|
16480
16482
|
readonly $container: SpecificationDeploymentNodeKind | SpecificationElementKind;
|
|
16481
16483
|
readonly $type: 'SpecificationElementStringProperty';
|
|
16482
|
-
key: 'notation' | 'technology';
|
|
16483
|
-
value:
|
|
16484
|
+
key: 'description' | 'notation' | 'technology' | 'title';
|
|
16485
|
+
value: MarkdownOrString;
|
|
16484
16486
|
}
|
|
16485
16487
|
declare const SpecificationElementStringProperty = "SpecificationElementStringProperty";
|
|
16486
16488
|
interface SpecificationRelationshipKind extends AstNode {
|
|
@@ -17388,7 +17390,7 @@ declare const DocumentParserFromMixins: {
|
|
|
17388
17390
|
isValid: IsValidFn;
|
|
17389
17391
|
readonly services: LikeC4Services;
|
|
17390
17392
|
readonly doc: ParsedLikeC4LangiumDocument;
|
|
17391
|
-
|
|
17393
|
+
get project(): {
|
|
17392
17394
|
id: ProjectId;
|
|
17393
17395
|
folder: ProjectId;
|
|
17394
17396
|
config: Readonly<ProjectConfig>;
|
|
@@ -17481,7 +17483,7 @@ declare const DocumentParserFromMixins: {
|
|
|
17481
17483
|
isValid: IsValidFn;
|
|
17482
17484
|
readonly services: LikeC4Services;
|
|
17483
17485
|
readonly doc: ParsedLikeC4LangiumDocument;
|
|
17484
|
-
|
|
17486
|
+
get project(): {
|
|
17485
17487
|
id: ProjectId;
|
|
17486
17488
|
folder: ProjectId;
|
|
17487
17489
|
config: Readonly<ProjectConfig>;
|
|
@@ -17536,7 +17538,7 @@ declare const DocumentParserFromMixins: {
|
|
|
17536
17538
|
isValid: IsValidFn;
|
|
17537
17539
|
readonly services: LikeC4Services;
|
|
17538
17540
|
readonly doc: ParsedLikeC4LangiumDocument;
|
|
17539
|
-
|
|
17541
|
+
get project(): {
|
|
17540
17542
|
id: ProjectId;
|
|
17541
17543
|
folder: ProjectId;
|
|
17542
17544
|
config: Readonly<ProjectConfig>;
|
|
@@ -17605,7 +17607,7 @@ declare const DocumentParserFromMixins: {
|
|
|
17605
17607
|
isValid: IsValidFn;
|
|
17606
17608
|
readonly services: LikeC4Services;
|
|
17607
17609
|
readonly doc: ParsedLikeC4LangiumDocument;
|
|
17608
|
-
|
|
17610
|
+
get project(): {
|
|
17609
17611
|
id: ProjectId;
|
|
17610
17612
|
folder: ProjectId;
|
|
17611
17613
|
config: Readonly<ProjectConfig>;
|
|
@@ -17667,7 +17669,7 @@ declare const DocumentParserFromMixins: {
|
|
|
17667
17669
|
isValid: IsValidFn;
|
|
17668
17670
|
readonly services: LikeC4Services;
|
|
17669
17671
|
readonly doc: ParsedLikeC4LangiumDocument;
|
|
17670
|
-
|
|
17672
|
+
get project(): {
|
|
17671
17673
|
id: ProjectId;
|
|
17672
17674
|
folder: ProjectId;
|
|
17673
17675
|
config: Readonly<ProjectConfig>;
|
|
@@ -17737,7 +17739,7 @@ declare const DocumentParserFromMixins: {
|
|
|
17737
17739
|
isValid: IsValidFn;
|
|
17738
17740
|
readonly services: LikeC4Services;
|
|
17739
17741
|
readonly doc: ParsedLikeC4LangiumDocument;
|
|
17740
|
-
|
|
17742
|
+
get project(): {
|
|
17741
17743
|
id: ProjectId;
|
|
17742
17744
|
folder: ProjectId;
|
|
17743
17745
|
config: Readonly<ProjectConfig>;
|
|
@@ -17800,7 +17802,7 @@ declare const DocumentParserFromMixins: {
|
|
|
17800
17802
|
isValid: IsValidFn;
|
|
17801
17803
|
readonly services: LikeC4Services;
|
|
17802
17804
|
readonly doc: ParsedLikeC4LangiumDocument;
|
|
17803
|
-
|
|
17805
|
+
get project(): {
|
|
17804
17806
|
id: ProjectId;
|
|
17805
17807
|
folder: ProjectId;
|
|
17806
17808
|
config: Readonly<ProjectConfig>;
|
|
@@ -17843,7 +17845,7 @@ declare const DocumentParserFromMixins: {
|
|
|
17843
17845
|
isValid: IsValidFn;
|
|
17844
17846
|
readonly services: LikeC4Services;
|
|
17845
17847
|
readonly doc: ParsedLikeC4LangiumDocument;
|
|
17846
|
-
|
|
17848
|
+
get project(): {
|
|
17847
17849
|
id: ProjectId;
|
|
17848
17850
|
folder: ProjectId;
|
|
17849
17851
|
config: Readonly<ProjectConfig>;
|
|
@@ -17901,7 +17903,7 @@ declare const DocumentParserFromMixins: {
|
|
|
17901
17903
|
isValid: IsValidFn;
|
|
17902
17904
|
readonly services: LikeC4Services;
|
|
17903
17905
|
readonly doc: ParsedLikeC4LangiumDocument;
|
|
17904
|
-
|
|
17906
|
+
get project(): {
|
|
17905
17907
|
id: ProjectId;
|
|
17906
17908
|
folder: ProjectId;
|
|
17907
17909
|
config: Readonly<ProjectConfig>;
|
|
@@ -18008,21 +18010,42 @@ declare namespace ChangeView {
|
|
|
18008
18010
|
}
|
|
18009
18011
|
|
|
18010
18012
|
type GraphvizOut = {
|
|
18011
|
-
dot: string;
|
|
18012
|
-
diagram: DiagramView;
|
|
18013
|
+
readonly dot: string;
|
|
18014
|
+
readonly diagram: DiagramView;
|
|
18013
18015
|
};
|
|
18014
18016
|
type GraphvizSvgOut = {
|
|
18015
|
-
id: ViewId;
|
|
18016
|
-
dot: string;
|
|
18017
|
-
svg: string;
|
|
18017
|
+
readonly id: ViewId;
|
|
18018
|
+
readonly dot: string;
|
|
18019
|
+
readonly svg: string;
|
|
18018
18020
|
};
|
|
18019
18021
|
interface LikeC4Views {
|
|
18020
18022
|
readonly layouter: GraphvizLayouter;
|
|
18023
|
+
/**
|
|
18024
|
+
* Returns computed views (i.e. views with predicates computed)
|
|
18025
|
+
*/
|
|
18021
18026
|
computedViews(projectId?: ProjectId | undefined, cancelToken?: CancellationToken): Promise<ComputedView[]>;
|
|
18022
|
-
|
|
18027
|
+
/**
|
|
18028
|
+
* Returns all layouted views (i.e. views with layout computed)
|
|
18029
|
+
* Result includes dot and diagram
|
|
18030
|
+
*/
|
|
18031
|
+
layoutAllViews(projectId?: ProjectId | undefined, cancelToken?: CancellationToken): Promise<GraphvizOut[]>;
|
|
18032
|
+
/**
|
|
18033
|
+
* Returns layouted view (i.e. view with layout computed)
|
|
18034
|
+
* Result includes dot and diagram
|
|
18035
|
+
*/
|
|
18023
18036
|
layoutView(viewId: ViewId, projectId?: ProjectId | undefined, cancelToken?: CancellationToken): Promise<GraphvizOut | null>;
|
|
18037
|
+
/**
|
|
18038
|
+
* Returns diagrams (i.e. views with layout computed)
|
|
18039
|
+
*/
|
|
18024
18040
|
diagrams(projectId?: ProjectId | undefined, cancelToken?: CancellationToken): Promise<Array<DiagramView>>;
|
|
18041
|
+
/**
|
|
18042
|
+
* Returns all layouted views as Graphviz output (i.e. views with layout computed)
|
|
18043
|
+
*/
|
|
18025
18044
|
viewsAsGraphvizOut(projectId?: ProjectId | undefined, cancelToken?: CancellationToken): Promise<Array<GraphvizSvgOut>>;
|
|
18045
|
+
/**
|
|
18046
|
+
* Open view in the preview panel.
|
|
18047
|
+
* (works only if running as a vscode extension)
|
|
18048
|
+
*/
|
|
18026
18049
|
openView(viewId: ViewId, projectId?: ProjectId | undefined): Promise<void>;
|
|
18027
18050
|
}
|
|
18028
18051
|
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import{invariant as de,isNonEmptyArray as ce}from"@likec4/core";import{relative as le}from"node:path";import{f as pe,g as J,T as ue,N as V,i as fe,n as x,j as U,u as N,l as ge,C as he,m as me,a as we,b as Ie,c as Ne,d as W,e as ye,h as G,L as ve}from"./likec4.DWIqzE5d.mjs";import{compareNatural as ke}from"@likec4/core/utils";import{u as Le}from"./likec4.BeWJWU7_.mjs";import{RichText as $e}from"@likec4/core/types";function je(...n){return Le(Se,n)}function Se(n,e){let i={};for(let t of e)t in n&&
|
|
2
|
+
(i[t]=n[t]);return i}function Ce(n){var e,i;if(n){if("astNode"in n)return Ee(n);if(Array.isArray(n))return n.reduce(z,void 0);{const t=n,r=Re(t)?Te((i=(e=t?.root)===null||e===void 0?void 0:e.astNode)!==null&&i!==void 0?i:t?.astNode):void 0;return C(t,r)}}else return}function Re(n){return typeof n<"u"&&"element"in n&&"text"in n}function Te(n){try{return J(n).uri.toString()}catch{return}}function Ee(n){var e,i;const{astNode:t,property:r,index:a}=n??{},s=(e=t?.$cstNode)!==null&&e!==void 0?e:t?.$textRegion;
|
|
3
|
+
if(!(t===void 0||s===void 0)){if(r===void 0)return C(s,O(t));{const o=d=>a!==void 0&&a>-1&&Array.isArray(t[r])?a<d.length?d[a]:void 0:d.reduce(z,void 0);if(!((i=s.assignments)===null||i===void 0)&&i[r]){const d=o(s.assignments[r]);return d&&C(d,O(t))}else if(t.$cstNode){const d=o(pe(t.$cstNode,r));return d&&C(d,O(t))}else return}}}function O(n){var e,i,t,r;return n.$cstNode?(i=(e=J(n))===null||e===void 0?void 0:e.uri)===null||i===void 0?void 0:i.toString():n.$textRegion?n.$textRegion.documentURI||
|
|
4
|
+
((r=(t=new ue(n,a=>a.$container?[a.$container]:[]).find(a=>{var s;return(s=a.$textRegion)===null||s===void 0?void 0:s.documentURI}))===null||t===void 0?void 0:t.$textRegion)===null||r===void 0?void 0:r.documentURI):void 0}function C(n,e){var i,t;const r={offset:n.offset,end:(i=n.end)!==null&&i!==void 0?i:n.offset+n.length,length:(t=n.length)!==null&&t!==void 0?t:n.end-n.offset};return n.range&&(r.range=n.range),e??(e=n.fileURI),e&&(r.fileURI=e),r}function z(n,e){var i,t;if(n){if(!e)return n&&C(n)}else
|
|
5
|
+
return e&&C(e);const r=(i=n.end)!==null&&i!==void 0?i:n.offset+n.length,a=(t=e.end)!==null&&t!==void 0?t:e.offset+e.length,s=Math.min(n.offset,e.offset),o=Math.max(r,a),d=o-s,p={offset:s,end:o,length:d};if(n.range&&e.range&&(p.range={start:e.range.start.line<n.range.start.line||e.range.start.line===n.range.start.line&&e.range.start.character<n.range.start.character?e.range.start:n.range.start,end:e.range.end.line>n.range.end.line||e.range.end.line===n.range.end.line&&e.range.end.character>n.range.
|
|
6
|
+
end.character?e.range.end:n.range.end}),n.fileURI||e.fileURI){const u=n.fileURI,h=e.fileURI,f=u&&h&&u!==h?`<unmergable text regions of ${u}, ${h}>`:u??h;p.fileURI=f}return p}class Me{constructor(e){this.defaultIndentation=" ",this.pendingIndent=!0,this.currentIndents=[],this.recentNonImmediateIndents=[],this.traceData=[],this.lines=[[]],this.length=0,typeof e=="string"?this.defaultIndentation=e:typeof e=="number"&&(this.defaultIndentation="".padStart(e))}get content(){return this.lines.map(e=>e.
|
|
7
|
+
join("")).join("")}get contentLength(){return this.length}get currentLineNumber(){return this.lines.length-1}get currentLineContent(){return this.lines[this.currentLineNumber].join("")}get currentPosition(){return{offset:this.contentLength,line:this.currentLineNumber,character:this.currentLineContent.length}}append(e,i){if(e.length>0){const t=i&&this.currentPosition;this.lines[this.currentLineNumber].push(e),this.length+=e.length,t&&this.indentPendingTraceRegions(t)}}indentPendingTraceRegions(e){
|
|
8
|
+
for(let i=this.traceData.length-1;i>=0;i--){const t=this.traceData[i];t.targetStart&&t.targetStart.offset===e.offset&&(t.targetStart=this.currentPosition)}}increaseIndent(e){this.currentIndents.push(e),e.indentImmediately||this.recentNonImmediateIndents.push(e)}decreaseIndent(){this.currentIndents.pop()}get relevantIndents(){return this.currentIndents.filter(e=>!this.recentNonImmediateIndents.includes(e))}resetCurrentLine(){this.length-=this.lines[this.currentLineNumber].join("").length,this.lines[this.
|
|
9
|
+
currentLineNumber]=[],this.pendingIndent=!0,this.recentNonImmediateIndents.length=0}addNewLine(){this.lines.push([]),this.pendingIndent=!0,this.recentNonImmediateIndents.length=0}pushTraceRegion(e){const i=be(e,this.currentPosition,t=>{var r,a;return(a=(r=this.traceData[this.traceData.length-1])===null||r===void 0?void 0:r.children)===null||a===void 0?void 0:a.push(t)});return this.traceData.push(i),i}popTraceRegion(e){const i=this.traceData.pop();return this.assertTrue(i===e,"Trace region misma\
|
|
10
|
+
tch!"),i}getParentTraceSourceFileURI(){var e;for(let i=this.traceData.length-1;i>-1;i--){const t=(e=this.traceData[i].sourceRegion)===null||e===void 0?void 0:e.fileURI;if(t)return t}}assertTrue(e,i){if(!e)throw new Error(i)}}function be(n,e,i){const t={sourceRegion:n,targetRegion:void 0,children:[],targetStart:e,complete:r=>{var a,s;return t.targetRegion={offset:t.targetStart.offset,end:r.offset,length:r.offset-t.targetStart.offset,range:{start:{line:t.targetStart.line,character:t.targetStart.character},
|
|
11
|
+
end:{line:r.line,character:r.character}}},delete t.targetStart,((a=t.children)===null||a===void 0?void 0:a.length)===0&&delete t.children,!((s=t.targetRegion)===null||s===void 0)&&s.length&&i(t),delete t.complete,t}};return t}function xe(n,e){const i=new Me(e),t=i.pushTraceRegion(void 0);B(n,i),i.popTraceRegion(t),t.complete&&t.complete(i.currentPosition);const r=t.children&&t.children.length===1?t.children[0]:void 0,a=r?.targetRegion,s=t.targetRegion;return a&&r.sourceRegion&&a.offset===s.offset&&
|
|
12
|
+
a.length===s.length?{text:i.content,trace:r}:{text:i.content,trace:t}}function B(n,e){typeof n=="string"?Ue(n,e):n instanceof F?De(n,e):n instanceof g?H(n,e):n instanceof M&&_e(n,e)}function Y(n,e){return typeof n=="string"?n.length!==0:n instanceof g?n.contents.some(i=>Y(i,e)):n instanceof M?!(n.ifNotEmpty&&e.currentLineContent.length===0):!1}function Ue(n,e){n&&(q(e,!1),e.append(n))}function q(n,e){var i;if(n.pendingIndent){let t="";for(const r of n.relevantIndents.filter(a=>a.indentEmptyLines||
|
|
13
|
+
!e))t+=(i=r.indentation)!==null&&i!==void 0?i:n.defaultIndentation;n.append(t,!0),n.pendingIndent=!1}}function H(n,e){let i;const t=Ce(n.tracedSource);t&&(i=e.pushTraceRegion(t));for(const r of n.contents)B(r,e);if(i){e.popTraceRegion(i);const r=e.getParentTraceSourceFileURI();r&&t?.fileURI===r&&delete t.fileURI,i.complete&&i.complete(e.currentPosition)}}function De(n,e){var i;if(Y(n,e)){n.indentImmediately&&!e.pendingIndent&&e.append((i=n.indentation)!==null&&i!==void 0?i:e.defaultIndentation,!0);
|
|
14
|
+
try{e.increaseIndent(n),H(n,e)}finally{e.decreaseIndent()}}}function _e(n,e){n.ifNotEmpty&&!Pe(e.currentLineContent)?e.resetCurrentLine():(q(e,!0),e.append(n.lineDelimiter),e.addNewLine())}function Pe(n){return n.trimStart()!==""}Object.freeze("__\xABSKIP^NEW^LINE^IF^EMPTY\xBB__");const Oe=/\S|$/;function Ae(n){const e=n.filter(t=>t.length>0).map(t=>t.search(Oe)),i=e.length===0?0:Math.min(...e);return Math.max(0,i)}function $(n,...e){const i=Je(n),t=Ve(n,e,i);return Ge(t)}function Fe(n,e,i){return(t,...r)=>Be(
|
|
15
|
+
n,e,i)($(t,...r))}function Je(n){const e=n.join("_").split(V),i=e.length>1&&e[0].trim().length===0,t=i&&e.length>1&&e[e.length-1].trim().length===0;if(e.length===1||e.length!==0&&e[0].trim().length!==0||e.length===2&&e[1].trim().length===0)return{indentation:0,omitFirstLine:i,omitLastLine:t,trimLastLine:e.length!==1&&e[e.length-1].trim().length===0};{let r=i?e.slice(1):e;r=t?r.slice(0,r.length-1):r,r=r.filter(s=>s.length!==0);const a=Ae(r);return{indentation:a,omitFirstLine:i,omitLastLine:t&&(e[e.
|
|
16
|
+
length-1].length<a||!e[e.length-1].startsWith(r[0].substring(0,a)))}}}function Ve(n,e,{indentation:i,omitFirstLine:t,omitLastLine:r,trimLastLine:a}){const s=[];n.forEach((p,u)=>{s.push(...p.split(V).map((h,f)=>f===0||h.length<i?h:h.substring(i)).reduce(u===0?(h,f,m)=>m===0?t?[]:[f]:m===1&&h.length===0?[f]:h.concat(D,f):(h,f,m)=>m===0?[f]:h.concat(D,f),[]).filter(h=>!(typeof h=="string"&&h.length===0)).concat(E(e[u])?e[u]:e[u]!==void 0?{content:String(e[u])}:u<e.length?K:[]))});const o=s.length,d=o!==
|
|
17
|
+
0?s[o-1]:void 0;return(r||a)&&typeof d=="string"&&d.trim().length===0?t&&o!==1&&s[o-2]===D?s.slice(0,o-2):s.slice(0,o-1):s}const D={isNewLine:!0},K={isUndefinedSegment:!0},X=n=>n===D,A=n=>n===K,We=n=>n.content!==void 0;function Ge(n){return n.reduce((i,t,r)=>A(t)?i:X(t)?{node:r!==0&&(A(n[r-1])||E(n[r-1]))||r>1&&typeof n[r-1]=="string"&&(A(n[r-2])||E(n[r-2]))?i.node.appendNewLineIfNotEmpty():i.node.appendNewLine()}:(()=>{var a;const s=(r===0||X(n[r-1]))&&typeof t=="string"&&t.length!==0?"".padStart(
|
|
18
|
+
t.length-t.trimStart().length):"",o=We(t)?t.content:t;let d;return{node:i.indented?i.node:s.length!==0?i.node.indent({indentation:s,indentImmediately:!1,indentedChildren:p=>d=p.append(o)}):i.node.append(o),indented:d??((a=i.indented)===null||a===void 0?void 0:a.append(o))}})(),{node:new g}).node}const ze=typeof process>"u"?`
|
|
19
|
+
`:process.platform==="win32"?`\r
|
|
20
|
+
`:`
|
|
21
|
+
`;function E(n){return n instanceof g||n instanceof F||n instanceof M}function j(n,e){return E(n)?xe(n,e).text:String(n)}class g{constructor(...e){this.contents=[],this.append(...e)}isEmpty(){return this.contents.length===0}trace(e,i,t){if(fe(e)){if(this.tracedSource={astNode:e,property:i,index:t},this.tracedSource.property===void 0&&this.tracedSource.index!==void 0&&this.tracedSource.index>-1)throw new Error("Generation support: 'property' argument must not be 'undefined' if a non-negative valu\
|
|
22
|
+
e is assigned to 'index' in 'CompositeGeneratorNode.trace(...)'.")}else this.tracedSource=e;return this}append(...e){for(const i of e)typeof i=="function"?i(this):i&&this.contents.push(i);return this}appendIf(e,...i){return e?this.append(...i):this}appendNewLine(){return this.append(c)}appendNewLineIf(e){return e?this.append(c):this}appendNewLineIfNotEmpty(){return this.append(Ye)}appendNewLineIfNotEmptyIf(e){return e?this.appendNewLineIfNotEmpty():this}appendTemplate(e,...i){return this.append(
|
|
23
|
+
$(e,...i))}appendTemplateIf(e){return e?(i,...t)=>this.appendTemplate(i,...t):()=>this}indent(e){const{indentedChildren:i,indentation:t,indentEmptyLines:r,indentImmediately:a}=Array.isArray(e)||typeof e=="function"?{indentedChildren:e}:typeof e=="object"?e:{},s=new F(t,a,r);return this.contents.push(s),Array.isArray(i)?s.append(...i):i&&s.append(i),this}appendTraced(e,i,t){return r=>this.append(new g().trace(e,i,t).append(r))}appendTracedIf(e,i,t,r){return e?this.appendTraced(typeof i=="function"?
|
|
24
|
+
i():i,t,r):()=>this}appendTracedTemplate(e,i,t){return(r,...a)=>this.append(Fe(e,i,t)(r,...a))}appendTracedTemplateIf(e,i,t,r){return e?this.appendTracedTemplate(typeof i=="function"?i():i,t,r):()=>this}}function Be(n,e,i){return t=>t instanceof g&&t.tracedSource===void 0?t.trace(n,e,i):new g().trace(n,e,i).append(t)}class F extends g{constructor(e,i=!0,t=!1){super(),this.indentImmediately=!0,this.indentEmptyLines=!1,typeof e=="string"?this.indentation=e:typeof e=="number"&&(this.indentation="".
|
|
25
|
+
padStart(e)),this.indentImmediately=i,this.indentEmptyLines=t}}class M{constructor(e,i=!1){this.ifNotEmpty=!1,this.lineDelimiter=e??ze,this.ifNotEmpty=i}}const c=new M,Ye=new M(void 0,!0),Q=n=>n===void 0||typeof n=="string"||E(n)?n:String(n);function y(n,e=Q,i={}){const t=typeof e=="function"?e:Q,{filter:r,prefix:a,suffix:s,separator:o,appendNewLineIfNotEmpty:d,skipNewLineAfterLastItem:p}=typeof e=="object"?e:i,u=typeof a=="function"?a:()=>a,h=typeof s=="function"?s:()=>s;return qe(n,(f,m,v,l)=>{
|
|
26
|
+
if(r&&!r(m,v,l))return f;const w=t(m,v,l);return w===void 0?f:(f??(f=new g)).append(u(m,v,l)).append(w).append(h(m,v,l)).appendIf(!l,o).appendNewLineIfNotEmptyIf(!f.isEmpty()&&!!d&&(!l||!p))})}function qe(n,e,i){const t=n[Symbol.iterator]();let r=t.next(),a=0,s=i;for(;!r.done;){const o=t.next();s=e(s,r.value,a,!!o.done),r=o,a++}return s}const He=n=>n.charAt(0).toLocaleUpperCase()+n.slice(1),Ke=n=>n.split(".").map(He).join(""),Xe=n=>Ke(n.parent?n.id.slice(n.parent.length+1):n.id),Qe=({autoLayout:n})=>{
|
|
27
|
+
switch(n.direction){case"TB":return"down";case"BT":return"up";case"LR":return"right";case"RL":return"left"}},Ze=({shape:n})=>{switch(n){case"queue":case"cylinder":case"rectangle":case"person":return n;case"storage":return"stored_data";case"mobile":case"browser":return"rectangle"}};function Z(n){const e=n.$view,{nodes:i,edges:t}=e,r=new Map,a=(o,d)=>{const p=Xe(o),u=(d?d+".":"")+p;r.set(o.id,u);const h=JSON.stringify(o.title),f=Ze(o);return new g().append(p,": {",c).indent({indentedChildren:m=>m.
|
|
28
|
+
append("label: ",h,c).appendIf(f!=="rectangle","shape: ",f,c).appendIf(o.children.length>0,c,y(i.filter(v=>v.parent===o.id),v=>a(v,u))),indentation:2}).append("}",c)},s=o=>new g().append(r.get(o.source)," -> ",r.get(o.target)).append(d=>o.label&&d.append(": ",JSON.stringify(o.label)));return j(new g().append("direction: ",Qe(e),c,c).append(y(i.filter(o=>x(o.parent)),o=>a(o),{appendNewLineIfNotEmpty:!0})).appendIf(t.length>0,c,y(t,o=>s(o),{appendNewLineIfNotEmpty:!0})))}const en=n=>n.charAt(0).toLocaleUpperCase()+
|
|
29
|
+
n.slice(1),nn=n=>n.split(".").map(en).join(""),tn=n=>nn(n.parent?n.id.slice(n.parent.length+1):n.id),rn=({shape:n})=>{switch(n){case"queue":case"cylinder":return["[(",")]"];case"person":return["[fa:fa-user ","]"];case"storage":return["([","])"];case"mobile":case"browser":case"rectangle":return["[","]"]}};function ee(n){const e=n.$view,{nodes:i,edges:t}=e,r=new Map,a=(o,d)=>{const p=tn(o),u=(d?d+".":"")+p;r.set(o.id,u);const h=o.title.replaceAll(`
|
|
30
|
+
`,"\\n"),f=rn(o),m=new g;return o.children.length>0?m.append("subgraph ",u,"[",JSON.stringify(o.title),"]",c).indent({indentedChildren:[y(i.filter(v=>v.parent===o.id),v=>a(v,u),{appendNewLineIfNotEmpty:!0})],indentation:2}).append("end",c):m.append(u,f[0],h,f[1]),m},s=o=>new g().append(r.get(o.source)," -.",o.label?' "'+o.label.replaceAll(`
|
|
31
|
+
`,"\\n")+'" .-':"-","> ",r.get(o.target));return j(new g().appendIf(e.title!==null&&e.title.length>0,"---",c,`title: ${JSON.stringify(e.title)}`,c,"---",c).append("graph ",e.autoLayout.direction,c).indent({indentedChildren:o=>{o.append(y(i.filter(d=>x(d.parent)),d=>a(d),{appendNewLineIfNotEmpty:!0})).appendIf(t.length>0,y(t,d=>s(d),{appendNewLineIfNotEmpty:!0}))},indentation:2}))}const on=n=>n.charAt(0).toLocaleUpperCase()+n.slice(1),_=n=>n.split(".").map(on).join(""),ne=n=>_(n.parent?n.id.slice(
|
|
32
|
+
n.parent.length+1):n.id),R=(n,e,i="#3b82f6")=>{switch(n){case"blue":case"primary":return"#3b82f6";case"amber":return"#a35829";case"gray":return"#737373";case"green":return"#428a4f";case"indigo":return"#6366f1";case"slate":case"muted":return"#64748b";case"red":return"#ac4d39";case"sky":case"secondary":return"#0284c7";case null:case void 0:return i;default:return e(n)||n}},an=({autoLayout:n})=>{switch(n.direction){case"TB":return"top to bottom";case"BT":return console.warn("Bottom to top direction\
|
|
33
|
+
is not supported. Defaulting to top to bottom."),"top to bottom";case"LR":return"left to right";case"RL":return console.warn("Right to left direction is not supported. Defaulting to left to right."),"left to right"}},te=({shape:n})=>{switch(n){case"queue":case"rectangle":case"person":return n;case"storage":case"cylinder":return"database";case"mobile":case"browser":return"rectangle"}},T=n=>x(n)?null:JSON.stringify(n).slice(1,-1);function ie(n){const e=n.$view,i=n.$model.specification.customColors??
|
|
34
|
+
{},{nodes:t,edges:r}=e,a=new Map(Object.entries(i)),s=l=>w=>a.get(w)?.elements[l],o=l=>w=>a.get(w)?.relationships[l],d=new Map,p=()=>new g().append('title "',e.title||e.id,'"',c).append(an(e)," direction",c),u=()=>new g().append("hide stereotype",c).append("skinparam ranksep ","60",c).append("skinparam nodesep ","30",c).append("skinparam {",c).indent({indentedChildren:l=>l.append("arrowFontSize ","10",c).append("defaultTextAlignment ","center",c).append("wrapWidth ","200",c).append("maxMessageSi\
|
|
35
|
+
ze ","100",c).append("shadowing ","false",c),indentation:2}).append("}",c),h=l=>{const w=te(l),I=_(l.id);return new g().append("skinparam ",w,"<<",I,">>","{",c).indent({indentedChildren:L=>L.append("BackgroundColor ",R(l.color,s("fill")),c).append("FontColor ",a.has(l.color)?R(l.color,s("hiContrast")):"#FFFFFF",c).append("BorderColor ",R(l.color,s("stroke")),c),indentation:2}).append("}",c)},f=l=>{const w=te(l),I=_(l.id),L=T(l.title)||ne(l),k=T(l.technology);d.set(l.id,I);const b=$e.from(l.description);
|
|
36
|
+
return new g().append(w," ").append('"').append("==",L).appendIf(!!k,"\\n","<size:10>[",k,"]</size>").appendIf(b.nonEmpty,"\\n\\n",T(b.text)).append('"'," <<",I,">> ","as ",I,c)},m=l=>{const w=T(l.title)||ne(l),I=_(l.id);return d.set(l.id,I),new g().append('rectangle "',w,'" <<',I,">> as ",I," {",c).indent({indentedChildren:L=>L.append("skinparam ","RectangleBorderColor<<",I,">> ",R(l.color,s("fill")),c).append("skinparam ","RectangleFontColor<<",I,">> ",R(l.color,s("fill")),c).append("skinparam\
|
|
37
|
+
","RectangleBorderStyle<<",I,">> ","dashed",c,c).append(y(t.filter(k=>k.parent===l.id),k=>k.children.length>0?m(k):f(k))),indentation:2}).append("}",c)},v=l=>{const w=T(l.technology)||"",I=T(l.label)||"",L=R(l.color,o("lineColor"),"#777777"),k=b=>`<color:${b}>`;return new g().append(d.get(l.source)," .[",L,",thickness=2].> ",d.get(l.target)).appendIf(!!(I||w),' : "',k(L)).appendIf(!!I,I,k(L)).appendIf(!!(I&&w),"\\n").appendIf(!!w,k(L),"<size:8>[",w,"]</size>").appendIf(!!(I||w),'"').append(c)};
|
|
38
|
+
return j(new g().append("@startuml",c).append(p(),c).append(u(),c).append(y(t.filter(l=>l.children.length==0),l=>h(l),{appendNewLineIfNotEmpty:!0})).append(y(t.filter(l=>x(l.parent)),l=>l.children.length>0?m(l):f(l),{appendNewLineIfNotEmpty:!0})).appendIf(r.length>0,c,y(r,l=>v(l),{appendNewLineIfNotEmpty:!0})).append("@enduml",c))}function S(n){return{matches:e=>{let{module:i,projectId:t}=e.match(/^likec4:plugin\/(?<projectId>.+)\/(?<module>.+)$/)?.groups??e.match(/^likec4:(?<module>.+)\/(?<projectId>.+)$/)?.
|
|
39
|
+
groups??{};return!i||!t?null:(i.endsWith(".js")&&(i=i.slice(0,-3)),i===n?t:null)},virtualId:e=>U("likec4:plugin",e,n)+".js"}}function P(n,e){return{id:`likec4:${n}`,virtualId:`likec4:plugin/${n}.js`,async load({likec4:i,logger:t,projects:r,assetsDir:a}){t.info(N.dim(`generating likec4:${n}`));const s=r.map(({id:o})=>{const d=U(`likec4:${n}`,o);return` case ${JSON.stringify(o)}: return await import(${JSON.stringify(d)})`});return`
|
|
40
|
+
export async function ${e}(projectId) {
|
|
41
|
+
switch (projectId) {
|
|
42
|
+
${s.join(`
|
|
43
|
+
`)}
|
|
44
|
+
default: throw new Error('Unknown projectId: ' + projectId)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
`}}}function sn(n){const e=new g;return e.appendTemplate`
|
|
48
|
+
/******************************************************************************
|
|
49
|
+
* This file was generated
|
|
50
|
+
* DO NOT EDIT MANUALLY!
|
|
51
|
+
******************************************************************************/
|
|
52
|
+
/* eslint-disable */
|
|
53
|
+
|
|
54
|
+
export function d2Source(viewId) {
|
|
55
|
+
switch (viewId) {
|
|
56
|
+
`.appendNewLine().indent({indentation:4,indentedChildren(i){i.append(y([...n.views()],t=>$`
|
|
57
|
+
case ${JSON.stringify(t.id)}: {
|
|
58
|
+
return ${JSON.stringify(Z(t))}
|
|
59
|
+
}
|
|
60
|
+
`,{appendNewLineIfNotEmpty:!0})).appendTemplate`
|
|
61
|
+
default: {
|
|
62
|
+
throw new Error('Unknown viewId: ' + viewId)
|
|
63
|
+
}
|
|
64
|
+
`}}).append(c," }",c).appendTemplate`
|
|
65
|
+
}
|
|
66
|
+
`.append(c,c),j(e)}const dn={...S("d2"),async load({likec4:n,projectId:e,logger:i}){i.info(N.dim(`generating likec4:d2/${e}`));const t=await n.computedModel(e);return sn(t)}},cn=P("d2","loadD2Sources");function ln(n){const e=new g;return e.appendTemplate`
|
|
67
|
+
/******************************************************************************
|
|
68
|
+
* This file was generated
|
|
69
|
+
* DO NOT EDIT MANUALLY!
|
|
70
|
+
******************************************************************************/
|
|
71
|
+
/* eslint-disable */
|
|
72
|
+
|
|
73
|
+
export function dotSource(viewId) {
|
|
74
|
+
switch (viewId) {
|
|
75
|
+
`.appendNewLine().indent({indentation:4,indentedChildren(i){i.append(y(Object.keys(n),t=>$`
|
|
76
|
+
case ${JSON.stringify(t)}: {
|
|
77
|
+
return ${JSON.stringify(n[t].dot)}
|
|
78
|
+
}
|
|
79
|
+
`,{appendNewLineIfNotEmpty:!0})).appendTemplate`
|
|
80
|
+
default: {
|
|
81
|
+
throw new Error('Unknown viewId: ' + viewId)
|
|
82
|
+
}
|
|
83
|
+
`}}).append(c," }",c).appendTemplate`
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function svgSource(viewId) {
|
|
87
|
+
switch (viewId) {
|
|
88
|
+
`.appendNewLine().indent({indentation:4,indentedChildren(i){i.append(y(Object.keys(n),t=>$`
|
|
89
|
+
case ${JSON.stringify(t)}: {
|
|
90
|
+
return ${JSON.stringify(n[t].svg)}
|
|
91
|
+
}
|
|
92
|
+
`,{appendNewLineIfNotEmpty:!0})).appendTemplate`
|
|
93
|
+
default: {
|
|
94
|
+
throw new Error('Unknown viewId: ' + viewId)
|
|
95
|
+
}
|
|
96
|
+
`}}).append(c," }",c,"}",c,c),j(e)}const pn={...S("dot"),async load({likec4:n,projectId:e,logger:i}){i.info(N.dim(`generating likec4:dot/${e}`));const t=await n.views.viewsAsGraphvizOut(e),r=ge(t,({id:a,svg:s,dot:o})=>[a,{dot:o,svg:s}]);return ln(r)}},un=P("dot","loadDotSources");function fn(n){const e=he(n.flatMap(r=>r.nodes.map(a=>a.icon)),Ie(r=>Ne(r)&&!(r.toLowerCase().startsWith("http:")||r.toLowerCase().startsWith("https:"))),we(),me(ke)),{imports:i,cases:t}=e.reduce((r,a,s)=>{const o=a.
|
|
97
|
+
startsWith("file:"),d="Icon"+s.toString().padStart(2,"0");if(o)return r.imports.push(`import ${d} from '${a}?inline'`),r.cases.push(` '${a}': () => jsx('img', { src: ${d} })`),r;const[p,u]=a.split(":");return r.imports.push(`import ${d} from 'likec4/icons/${p}/${u}'`),r.cases.push(` '${p}:${u}': ${d}`),r},{imports:[],cases:[]});return`
|
|
98
|
+
import { jsx } from 'react/jsx-runtime'
|
|
99
|
+
${i.join(`
|
|
100
|
+
`)}
|
|
101
|
+
|
|
102
|
+
const Icons = {
|
|
103
|
+
${t.join(`,
|
|
104
|
+
`)}
|
|
105
|
+
}
|
|
106
|
+
export function IconRenderer({ node }) {
|
|
107
|
+
const IconComponent = Icons[node.icon ?? '']
|
|
108
|
+
if (!IconComponent) {
|
|
109
|
+
return null
|
|
110
|
+
}
|
|
111
|
+
return jsx(IconComponent, {node})
|
|
112
|
+
}
|
|
113
|
+
`}const gn={...S("icons"),async load({likec4:n,projectId:e,logger:i}){i.info(N.dim(`generating likec4:icons/${e}`));const t=await n.views.computedViews(e);return fn(t)}},hn={id:"likec4:icons",virtualId:"likec4:plugin/icons.jsx",async load({likec4:n,projects:e,logger:i}){i.info(N.dim("generating likec4:icons"));const{imports:t,cases:r}=e.reduce((a,{id:s},o)=>{const d="Icons"+o.toString().padStart(2,"0"),p=U("likec4:icons",s);return a.imports.push(`import { IconRenderer as ${d} } from ${JSON.stringify(
|
|
114
|
+
p)}`),a.cases.push(` case ${JSON.stringify(s)}: return ${d}`),a},{imports:[],cases:[]});return`
|
|
115
|
+
${t.join(`
|
|
116
|
+
`)}
|
|
117
|
+
|
|
118
|
+
export function ProjectIcons(projectId) {
|
|
119
|
+
switch (projectId) {
|
|
120
|
+
${r.join(`
|
|
121
|
+
`)}
|
|
122
|
+
default:
|
|
123
|
+
throw new Error('Unknown projectId: ' + projectId)
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
`}};function mn(n){const e=new g;return e.appendTemplate`
|
|
127
|
+
/******************************************************************************
|
|
128
|
+
* This file was generated
|
|
129
|
+
* DO NOT EDIT MANUALLY!
|
|
130
|
+
******************************************************************************/
|
|
131
|
+
/* eslint-disable */
|
|
132
|
+
|
|
133
|
+
export function mmdSource(viewId) {
|
|
134
|
+
switch (viewId) {
|
|
135
|
+
`.appendNewLine().indent({indentation:4,indentedChildren(i){i.append(y([...n.views()],t=>$`
|
|
136
|
+
case ${JSON.stringify(t.id)}: {
|
|
137
|
+
return ${JSON.stringify(ee(t))}
|
|
138
|
+
}
|
|
139
|
+
`,{appendNewLineIfNotEmpty:!0})).appendTemplate`
|
|
140
|
+
default: {
|
|
141
|
+
throw new Error('Unknown viewId: ' + viewId)
|
|
142
|
+
}
|
|
143
|
+
`}}).append(c," }",c).appendTemplate`
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
`.append(c,c),j(e)}const wn={...S("mmd"),async load({likec4:n,projectId:e,logger:i}){i.info(N.dim(`generating virtual:likec4/mmd/${e}`));const t=await n.computedModel(e);return mn(t)}},In=P("mmd","loadMmdSources"),Nn=n=>`
|
|
147
|
+
import { createHooksForModel, atom } from 'likec4/vite-plugin/internal'
|
|
148
|
+
|
|
149
|
+
export const $likec4data = atom(${W.stringify(n.$data)})
|
|
150
|
+
|
|
151
|
+
export const {
|
|
152
|
+
updateModel,
|
|
153
|
+
$likec4model,
|
|
154
|
+
useLikeC4Model,
|
|
155
|
+
useLikeC4Views,
|
|
156
|
+
useLikeC4View
|
|
157
|
+
}= /* @__PURE__ */ createHooksForModel($likec4data)
|
|
158
|
+
|
|
159
|
+
if (import.meta.hot) {
|
|
160
|
+
import.meta.hot.accept(md => {
|
|
161
|
+
if (!import.meta.hot.data.$update) {
|
|
162
|
+
import.meta.hot.data.$update = updateModel
|
|
163
|
+
}
|
|
164
|
+
const update = md.$likec4data?.value
|
|
165
|
+
if (update) {
|
|
166
|
+
import.meta.hot.data.$update(update)
|
|
167
|
+
} else {
|
|
168
|
+
import.meta.hot.invalidate()
|
|
169
|
+
}
|
|
170
|
+
})
|
|
171
|
+
}
|
|
172
|
+
`,yn={...S("model"),async load({likec4:n,projectId:e,logger:i,assetsDir:t}){i.info(N.dim(`generating likec4:model/${e}`));const r=await n.layoutedModel(e);return Nn(r)}},vn={id:"likec4:model",virtualId:"likec4:plugin/model.js",async load({likec4:n,logger:e,projects:i,assetsDir:t}){return e.info(N.dim("generating likec4:model")),`
|
|
173
|
+
export async function loadModel(projectId) {
|
|
174
|
+
switch (projectId) {
|
|
175
|
+
${i.map(({id:r})=>{const a=U("likec4:model",r);return` case ${JSON.stringify(r)}: return await import(${JSON.stringify(a)})`}).join(`
|
|
176
|
+
`)}
|
|
177
|
+
default: throw new Error('Unknown projectId: ' + projectId)
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
`}},kn=n=>`
|
|
181
|
+
export const isSingleProject = ${n.length===1};
|
|
182
|
+
export const projects = ${W.stringify(n,null,2)};
|
|
183
|
+
`,Ln={id:"likec4:projects",virtualId:"likec4:plugin/projects.js",async load({likec4:n,logger:e,projects:i,assetsDir:t}){return e.info(N.dim("generating likec4:projects")),kn(ye(i,je(["id","title"])))}};function $n(n){const e=new g;return e.appendTemplate`
|
|
184
|
+
/******************************************************************************
|
|
185
|
+
* This file was generated
|
|
186
|
+
* DO NOT EDIT MANUALLY!
|
|
187
|
+
******************************************************************************/
|
|
188
|
+
/* eslint-disable */
|
|
189
|
+
|
|
190
|
+
export function pumlSource(viewId) {
|
|
191
|
+
switch (viewId) {
|
|
192
|
+
`.appendNewLine().indent({indentation:4,indentedChildren(i){i.append(y([...n.views()],t=>$`
|
|
193
|
+
case ${JSON.stringify(t.id)}: {
|
|
194
|
+
return ${JSON.stringify(ie(t))}
|
|
195
|
+
}
|
|
196
|
+
`,{appendNewLineIfNotEmpty:!0})).appendTemplate`
|
|
197
|
+
default: {
|
|
198
|
+
throw new Error('Unknown viewId: ' + viewId)
|
|
199
|
+
}
|
|
200
|
+
`}}).append(c," }",c).appendTemplate`
|
|
201
|
+
}
|
|
202
|
+
`.append(c,c),j(e)}const jn={...S("puml"),async load({likec4:n,projectId:e,logger:i}){i.info(N.dim(`generating likec4:puml/${e}`));const t=await n.computedModel(e);return $n(t)}},Sn=P("puml","loadPumlSources"),re=n=>`
|
|
203
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
204
|
+
import { LikeC4ModelProvider as Provider, LikeC4View as GenericView, ReactLikeC4 as GenericReactLikeC4 } from 'likec4/react';
|
|
205
|
+
import { IconRenderer } from 'likec4:icons/${n}'
|
|
206
|
+
|
|
207
|
+
import { useLikeC4Model, useLikeC4Views, useLikeC4View } from 'likec4:model/${n}'
|
|
208
|
+
|
|
209
|
+
export function LikeC4ModelProvider({ children }) {
|
|
210
|
+
const likeC4Model = useLikeC4Model()
|
|
211
|
+
return (_jsx(Provider, { likec4model: likeC4Model, children: children }));
|
|
212
|
+
}
|
|
213
|
+
export function LikeC4View(props) {
|
|
214
|
+
return (_jsx(LikeC4ModelProvider, { children: _jsx(GenericView, { renderIcon: IconRenderer, ...props }) }));
|
|
215
|
+
}
|
|
216
|
+
export function ReactLikeC4(props) {
|
|
217
|
+
return (_jsx(LikeC4ModelProvider, { children: _jsx(GenericReactLikeC4, { renderIcon: IconRenderer, ...props }) }));
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export {
|
|
221
|
+
useLikeC4Model,
|
|
222
|
+
useLikeC4View,
|
|
223
|
+
useLikeC4Views
|
|
224
|
+
}
|
|
225
|
+
`,Cn={...S("react"),async load({projectId:n,logger:e}){return e.info(N.dim(`generating likec4:react/${n}`)),re(n)}},Rn={id:"likec4:react",virtualId:"likec4:plugin/react.js",async load({logger:n,projects:e}){const i=G(e);return n.info(N.dim("generating likec4:react for")+" "+i.id),re(i.id)}},Tn=n=>`
|
|
226
|
+
export { IconRenderer } from 'likec4:icons/${n}'
|
|
227
|
+
export {
|
|
228
|
+
$likec4data,
|
|
229
|
+
$likec4model,
|
|
230
|
+
useLikeC4Model,
|
|
231
|
+
useLikeC4Views,
|
|
232
|
+
useLikeC4View
|
|
233
|
+
} from 'likec4:model/${n}'
|
|
234
|
+
export const projectId = ${JSON.stringify(n)}
|
|
235
|
+
`,En={id:"likec4:single-project",virtualId:"likec4:plugin/single-project.js",async load({likec4:n,logger:e,projects:i,assetsDir:t}){const r=G(i);return e.info(N.dim("generating likec4:single-project for")+" "+r.id),Tn(r.id)}},oe=[yn,gn,dn,pn,wn,jn],ae=[...oe,Cn],se=[Ln,vn,En,Rn,cn,un,In,Sn,hn],Mn=n=>{const e=n.toLowerCase();return e.endsWith(".c4")||e.endsWith(".likec4")||e.endsWith(".like-c4")};function bn({useOverviewGraph:n=!1,...e}){let i,t,r,a;return{name:"vite-plugin-likec4",async configResolved(s){
|
|
236
|
+
if(i=s.root,t=s.logger,n===!0){const o=s.resolve.alias.find(d=>d.find==="likec4/previews")?.replacement;o?(a=o,t.info(N.dim("likec4/previews alias")+" "+N.dim(a))):t.warn("likec4/previews alias not found")}e.languageServices?r=e.languageServices:r=(await ve.fromWorkspace(e.workspace??s.root,{logger:t,graphviz:e.graphviz??"wasm",printErrors:e.printErrors??!0,throwIfInvalid:e.throwIfInvalid??!1})).languageServices,a=r.workspaceUri.fsPath},resolveId(s){for(const o of ae){const d=o.matches(s);if(d)return o.
|
|
237
|
+
virtualId(d)}for(const o of se)if(o.id===s)return o.virtualId;return null},async load(s){for(const o of ae){const d=o.matches(s);if(d)return await o.load({logger:t,likec4:r,projectId:d,assetsDir:a,useOverviewGraph:n})}for(const o of se)if(o.virtualId===s){const d=(await r.projects()).map(p=>({id:p.id,title:p.config.title??p.id,folder:p.folder}));return de(ce(d)),await o.load({logger:t,likec4:r,projects:d,assetsDir:a,useOverviewGraph:n})}return null},configureServer(s){const o=r.projects().map(({
|
|
238
|
+
folder:p})=>p.fsPath);for(const p of o)t.info(`${N.dim("watch")} ${p}`);const d=p=>u=>{Mn(u)&&r.notifyUpdate({[p]:u})};s.watcher.add(o).on("add",d("changed")).on("change",d("changed")).on("unlink",d("removed")),r.builder.onModelParsed(async()=>{const[p]=r.getErrors();if(p){s.ws.send({type:"error",err:{name:"LikeC4ValidationError",message:`Validation failed
|
|
239
|
+
`+p.message.slice(0,500),stack:"",plugin:"vite-plugin-likec4",loc:{file:le(i,p.sourceFsPath),line:p.range.start.line+1,column:p.range.start.character+1}}});return}for(const u of r.projects())for(const h of oe){const f=s.moduleGraph.getModuleById(h.virtualId(u.id));if(f&&f.importers.size>0){t.info(`${N.green("reload")} ${N.dim(f.id??f.url)}`);try{await s.reloadModule(f)}catch(m){t.error(m)}}}})}}}export{g as C,bn as L,c as N,ee as a,Z as b,$ as e,ie as g,y as j,j as t};
|