@likec4/config 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.
@@ -29,6 +29,17 @@ declare const WebappExportFormatSchema: z.ZodEnum<{
29
29
  puml: "puml";
30
30
  drawio: "drawio";
31
31
  }>;
32
+ declare const RelationshipBrowserScopeSchema: z.ZodEnum<{
33
+ global: "global";
34
+ view: "view";
35
+ }>;
36
+ type RelationshipBrowserScope = z.infer<typeof RelationshipBrowserScopeSchema>;
37
+ declare const RelationshipsBrowserConfigSchema: z.ZodObject<{
38
+ defaultScope: z.ZodDefault<z.ZodEnum<{
39
+ global: "global";
40
+ view: "view";
41
+ }>>;
42
+ }, z.core.$strict>;
32
43
  declare const WebappConfigSchema: z.ZodObject<{
33
44
  exportFormats: z.ZodDefault<z.ZodArray<z.ZodEnum<{
34
45
  png: "png";
@@ -39,6 +50,12 @@ declare const WebappConfigSchema: z.ZodObject<{
39
50
  puml: "puml";
40
51
  drawio: "drawio";
41
52
  }>>>;
53
+ relationshipsBrowser: z.ZodOptional<z.ZodObject<{
54
+ defaultScope: z.ZodDefault<z.ZodEnum<{
55
+ global: "global";
56
+ view: "view";
57
+ }>>;
58
+ }, z.core.$strict>>;
42
59
  }, z.core.$strict>;
43
60
  type WebappConfig = z.infer<typeof WebappConfigSchema>;
44
61
  declare const LikeC4ProjectJsonConfigSchema: z.ZodObject<{
@@ -181,6 +198,12 @@ declare const LikeC4ProjectJsonConfigSchema: z.ZodObject<{
181
198
  puml: "puml";
182
199
  drawio: "drawio";
183
200
  }>>>;
201
+ relationshipsBrowser: z.ZodOptional<z.ZodObject<{
202
+ defaultScope: z.ZodDefault<z.ZodEnum<{
203
+ global: "global";
204
+ view: "view";
205
+ }>>;
206
+ }, z.core.$strict>>;
184
207
  }, z.core.$strict>>;
185
208
  }, z.core.$strip>;
186
209
  type LikeC4ProjectJsonConfig = z.input<typeof LikeC4ProjectJsonConfigSchema>;
@@ -625,4 +648,4 @@ declare function defineTheme<const S extends LikeC4ConfigThemeInput>(theme: S):
625
648
  */
626
649
  declare function defineStyle<const S extends LikeC4StylesConfigInput>(styles: S): LikeC4ProjectStylesConfig;
627
650
  //#endregion
628
- export { VscodeURI as C, IncludeConfig as D, WebappExportFormatSchema as E, LocateResult as S, WebappConfigSchema as T, GeneratorFnParams as _, defineThemeColor as a, LikeC4ProjectConfigOps as b, isLikeC4JsonConfig as c, LikeC4StylesConfig as d, LikeC4StylesConfigInput as f, GeneratorFnContext as g, GeneratorFn as h, defineTheme as i, isLikeC4NonJsonConfig as l, ThemeColorValuesInput as m, defineGenerators as n, ConfigFilenames as o, LikeC4StylesConfigSchema as p, defineStyle as r, isLikeC4Config as s, defineConfig as t, LikeC4ConfigThemeInput as u, LikeC4ProjectConfig as v, WebappConfig as w, LikeC4ProjectJsonConfig as x, LikeC4ProjectConfigInput as y };
651
+ export { IncludeConfig as A, RelationshipBrowserScope as C, WebappConfig as D, VscodeURI as E, WebappConfigSchema as O, LocateResult as S, RelationshipsBrowserConfigSchema as T, GeneratorFnParams as _, defineThemeColor as a, LikeC4ProjectConfigOps as b, isLikeC4JsonConfig as c, LikeC4StylesConfig as d, LikeC4StylesConfigInput as f, GeneratorFnContext as g, GeneratorFn as h, defineTheme as i, WebappExportFormatSchema as k, isLikeC4NonJsonConfig as l, ThemeColorValuesInput as m, defineGenerators as n, ConfigFilenames as o, LikeC4StylesConfigSchema as p, defineStyle as r, isLikeC4Config as s, defineConfig as t, LikeC4ConfigThemeInput as u, LikeC4ProjectConfig as v, RelationshipBrowserScopeSchema as w, LikeC4ProjectJsonConfig as x, LikeC4ProjectConfigInput as y };
@@ -10,9 +10,9 @@ These values will be used if such property is not defined`}),R=n.strictObject({c
10
10
  These values will be used if such property is not defined`}),relationship:L.optional().meta({description:`Override default values for relationship style properties
11
11
  These values will be used if such property is not defined`})}).meta({id:`DefaultStyleValues`}),z=n.union([n.string().min(1,`Custom CSS file path cannot be empty`),n.array(n.string().min(1,`Custom CSS file path cannot be empty`))]).meta({id:`CustomStylesheets`}),B=n.strictObject({theme:F.optional().meta({description:`Project theme customization`}),defaults:R.optional().meta({description:`Override default values for style properties
12
12
  These values will be used if such property is not defined`}),customCss:z.optional().meta({description:`Custom CSS (or list of CSS files) to be included in the generated diagrams`})}).transform(({theme:e,defaults:t,customCss:n})=>u({defaults:normalizeDefaults(t),customCss:normalizeStylesheets(n),theme:e}));function normalizeDefaults(e){if(!e)return;let{relationship:t,group:n,...r}=e;return u({...r,relationship:t&&u(t),group:n&&u(n)})}function normalizeStylesheets(e){if(!e)return;let t=(Array.isArray(e)?e:[e]).filter(Boolean);if(t.length!==0)return{paths:t,content:``}}const V=n.strictObject({outDir:n.string().default(`.likec4`).meta({description:[`Path to the directory where manual layouts will be stored,`,`relative to the folder containing the project config. `,``,`Defaults to '.likec4'.`].join(`
13
- `)})}).meta({id:`ManualLayoutsConfig`,description:`Configuration for manual layouts`}),H=n.enum(e),U=n.strictObject({exportFormats:n.array(H).refine(e=>new Set(e).size===e.length,{message:`Export formats cannot contain duplicates`}).default([...e]).meta({description:[`Webapp export formats enabled in the generated application.`,`Omit to enable all export formats. Use an empty array to disable webapp exports.`].join(`
14
- `)})}).meta({id:`WebappConfig`,description:`Configuration for the generated web application`}),W=n.union([n.strictObject({redirect:n.literal(!0)}),n.strictObject({include:n.array(n.string().nonempty().refine(e=>e!==`#`,{message:`selector cannot be "#"`})).nonempty(`include list cannot be empty`)}),n.strictObject({exclude:n.array(n.string().nonempty().refine(e=>e!==`#`,{message:`selector cannot be "#"`})).nonempty(`exclude list cannot be empty`)})]).meta({id:`LandingPageConfig`,description:`Configure the landing page. Use redirect to go to the index view, or include/exclude to filter the view grid.`}),G=n.object({name:n.string().nonempty(`Project name cannot be empty`).refine(e=>e!=="default",{abort:!0,error:`Project name cannot be "default"`}).refine(e=>!e.includes(`.`)&&!e.includes(`@`)&&!e.includes(`#`),{abort:!0,error:`Project name cannot contain ".", "@" or "#", try to use A-z, 0-9, _ and -`}).meta({description:`Project name, must be unique in the workspace`}),extends:n.union([n.string().min(1,`Extend path cannot be empty`),n.array(n.string().min(1,`Extend path cannot be empty`)).min(1,`Extend list cannot be empty`)]).optional().meta({description:`Extend styles from other config files`}),title:n.string().nonempty(`Project title cannot be empty if specified`).optional().meta({description:`A human readable title for the project`}),contactPerson:n.string().nonempty(`Contact person cannot be empty if specified`).optional().meta({description:`A person who has been involved in creating or maintaining this project`}),metadata:n.record(n.string(),n.any()).optional().meta({description:`Arbitrary metadata as key-value pairs for custom project information`}),styles:B.optional().meta({description:`Project styles customization`}),imageAliases:h.optional(),include:_.optional(),exclude:n.array(n.string()).optional().meta({description:`List of file patterns to exclude from the project, default is ["**/node_modules/**"]`}),manualLayouts:V.optional(),inferTechnologyFromIcon:n.boolean().optional().meta({description:[`Automatically derive element technology from icon name when technology is not set explicitly.`,`Applies to aws:, azure:, gcp:, and tech: icons. Bootstrap icons are excluded.`,`Defaults to true.`].join(`
15
- `)}),implicitViews:n.boolean().optional().meta({description:`Auto-generate scoped views for elements without explicit views. Defaults to false.`}),landingPage:W.optional(),webapp:U.optional()}).meta({id:`LikeC4ProjectConfig`,description:`LikeC4 Project Configuration`}),K=n.instanceof(Function),q=n.record(n.string(),K),J=G.extend({generators:q.optional()});function validateProjectConfig(e){let t=e.landingPage,r=null;if(t!=null){let e=W.safeParse(t);if(!e.success)throw Error(`Config validation failed:
16
- `+n.prettifyError(e.error));r=e.data}let i=G.safeParse(e);if(!i.success)throw Error(`Config validation failed:
17
- `+n.prettifyError(i.error));let a=i.data;r!==null&&(a={...a,landingPage:r});let o=e.generators;if(typeof o==`object`&&o&&!Array.isArray(o)){let e=q.safeParse(o);if(!e.success)throw Error(`Config validation failed (generators):
18
- `+n.prettifyError(e.error));return{...a,generators:e.data}}return a}function parseProjectConfigJSON(e){return validateProjectConfig(t.parse(e.trim()||`{}`))}const Y={parse:parseProjectConfigJSON,validate:validateProjectConfig,normalizeInclude:e=>{let t=_.safeParse(e);return t.success?t.data:{paths:[],maxDepth:3,fileThreshold:30}}};function trimTrailingSlashes(e){let t=e.length;for(;t>0&&(e[t-1]===`/`||e[t-1]===`\\`);)t--;return e.slice(0,t)}function splitPath(e){return e.split(`/`).flatMap(e=>e.split(`\\`))}function basename(e){let t=trimTrailingSlashes(e),n=splitPath(t);return n[n.length-1]||t}const X=[`.likec4rc`,`.likec4.config.json`,`likec4.config.json`],Z=[`likec4.config.js`,`likec4.config.cjs`,`likec4.config.mjs`,`likec4.config.ts`,`likec4.config.cts`,`likec4.config.mts`],Q=[...X,...Z];function isLikeC4JsonConfig(e){return X.includes(basename(e))}function isLikeC4NonJsonConfig(e){return Z.includes(basename(e))}function isLikeC4Config(e){return isLikeC4JsonConfig(e)||isLikeC4NonJsonConfig(e)}function defineConfig(e){return J.parse(e)}function defineGenerators(e){return q.parse(e)}function defineThemeColor(e){return j.parse(e)}function defineTheme(e){return F.parse(e)}function defineStyle(e){return B.parse(e)}export{defineThemeColor as a,isLikeC4JsonConfig as c,G as d,U as f,B as h,defineTheme as i,isLikeC4NonJsonConfig as l,validateProjectConfig as m,defineGenerators as n,Q as o,H as p,defineStyle as r,isLikeC4Config as s,defineConfig as t,Y as u};
13
+ `)})}).meta({id:`ManualLayoutsConfig`,description:`Configuration for manual layouts`}),H=n.enum(e),U=n.enum([`global`,`view`]),W=n.strictObject({defaultScope:U.default(`view`)}),G=n.strictObject({exportFormats:n.array(H).refine(e=>new Set(e).size===e.length,{message:`Export formats cannot contain duplicates`}).default([...e]).meta({description:[`Webapp export formats enabled in the generated application.`,`Omit to enable all export formats. Use an empty array to disable webapp exports.`].join(`
14
+ `)}),relationshipsBrowser:W.optional()}).meta({id:`WebappConfig`,description:`Configuration for the generated web application`}),K=n.union([n.strictObject({redirect:n.literal(!0)}),n.strictObject({include:n.array(n.string().nonempty().refine(e=>e!==`#`,{message:`selector cannot be "#"`})).nonempty(`include list cannot be empty`)}),n.strictObject({exclude:n.array(n.string().nonempty().refine(e=>e!==`#`,{message:`selector cannot be "#"`})).nonempty(`exclude list cannot be empty`)})]).meta({id:`LandingPageConfig`,description:`Configure the landing page. Use redirect to go to the index view, or include/exclude to filter the view grid.`}),q=n.object({name:n.string().nonempty(`Project name cannot be empty`).refine(e=>e!=="default",{abort:!0,error:`Project name cannot be "default"`}).refine(e=>!e.includes(`.`)&&!e.includes(`@`)&&!e.includes(`#`),{abort:!0,error:`Project name cannot contain ".", "@" or "#", try to use A-z, 0-9, _ and -`}).meta({description:`Project name, must be unique in the workspace`}),extends:n.union([n.string().min(1,`Extend path cannot be empty`),n.array(n.string().min(1,`Extend path cannot be empty`)).min(1,`Extend list cannot be empty`)]).optional().meta({description:`Extend styles from other config files`}),title:n.string().nonempty(`Project title cannot be empty if specified`).optional().meta({description:`A human readable title for the project`}),contactPerson:n.string().nonempty(`Contact person cannot be empty if specified`).optional().meta({description:`A person who has been involved in creating or maintaining this project`}),metadata:n.record(n.string(),n.any()).optional().meta({description:`Arbitrary metadata as key-value pairs for custom project information`}),styles:B.optional().meta({description:`Project styles customization`}),imageAliases:h.optional(),include:_.optional(),exclude:n.array(n.string()).optional().meta({description:`List of file patterns to exclude from the project, default is ["**/node_modules/**"]`}),manualLayouts:V.optional(),inferTechnologyFromIcon:n.boolean().optional().meta({description:[`Automatically derive element technology from icon name when technology is not set explicitly.`,`Applies to aws:, azure:, gcp:, and tech: icons. Bootstrap icons are excluded.`,`Defaults to true.`].join(`
15
+ `)}),implicitViews:n.boolean().optional().meta({description:`Auto-generate scoped views for elements without explicit views. Defaults to false.`}),landingPage:K.optional(),webapp:G.optional()}).meta({id:`LikeC4ProjectConfig`,description:`LikeC4 Project Configuration`}),J=n.instanceof(Function),Y=n.record(n.string(),J),X=q.extend({generators:Y.optional()});function validateProjectConfig(e){let t=e.landingPage,r=null;if(t!=null){let e=K.safeParse(t);if(!e.success)throw Error(`Config validation failed:
16
+ `+n.prettifyError(e.error));r=e.data}let i=q.safeParse(e);if(!i.success)throw Error(`Config validation failed:
17
+ `+n.prettifyError(i.error));let a=i.data;r!==null&&(a={...a,landingPage:r});let o=e.generators;if(typeof o==`object`&&o&&!Array.isArray(o)){let e=Y.safeParse(o);if(!e.success)throw Error(`Config validation failed (generators):
18
+ `+n.prettifyError(e.error));return{...a,generators:e.data}}return a}function parseProjectConfigJSON(e){return validateProjectConfig(t.parse(e.trim()||`{}`))}const Z={parse:parseProjectConfigJSON,validate:validateProjectConfig,normalizeInclude:e=>{let t=_.safeParse(e);return t.success?t.data:{paths:[],maxDepth:3,fileThreshold:30}}};function trimTrailingSlashes(e){let t=e.length;for(;t>0&&(e[t-1]===`/`||e[t-1]===`\\`);)t--;return e.slice(0,t)}function splitPath(e){return e.split(`/`).flatMap(e=>e.split(`\\`))}function basename(e){let t=trimTrailingSlashes(e),n=splitPath(t);return n[n.length-1]||t}const Q=[`.likec4rc`,`.likec4.config.json`,`likec4.config.json`],$=[`likec4.config.js`,`likec4.config.cjs`,`likec4.config.mjs`,`likec4.config.ts`,`likec4.config.cts`,`likec4.config.mts`],ee=[...Q,...$];function isLikeC4JsonConfig(e){return Q.includes(basename(e))}function isLikeC4NonJsonConfig(e){return $.includes(basename(e))}function isLikeC4Config(e){return isLikeC4JsonConfig(e)||isLikeC4NonJsonConfig(e)}function defineConfig(e){return X.parse(e)}function defineGenerators(e){return Y.parse(e)}function defineThemeColor(e){return j.parse(e)}function defineTheme(e){return F.parse(e)}function defineStyle(e){return B.parse(e)}export{B as _,defineThemeColor as a,isLikeC4JsonConfig as c,q as d,U as f,validateProjectConfig as g,H as h,defineTheme as i,isLikeC4NonJsonConfig as l,G as m,defineGenerators as n,ee as o,W as p,defineStyle as r,isLikeC4Config as s,defineConfig as t,Z as u};
package/dist/index.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- import { D as IncludeConfig, E as WebappExportFormatSchema, S as LocateResult, T as WebappConfigSchema, _ as GeneratorFnParams, a as defineThemeColor, b as LikeC4ProjectConfigOps, c as isLikeC4JsonConfig, d as LikeC4StylesConfig, f as LikeC4StylesConfigInput, g as GeneratorFnContext, h as GeneratorFn, i as defineTheme, l as isLikeC4NonJsonConfig, m as ThemeColorValuesInput, n as defineGenerators, o as ConfigFilenames, p as LikeC4StylesConfigSchema, r as defineStyle, s as isLikeC4Config, t as defineConfig, u as LikeC4ConfigThemeInput, v as LikeC4ProjectConfig, w as WebappConfig, x as LikeC4ProjectJsonConfig, y as LikeC4ProjectConfigInput } from "./chunks/index.mjs";
1
+ import { A as IncludeConfig, C as RelationshipBrowserScope, D as WebappConfig, O as WebappConfigSchema, S as LocateResult, T as RelationshipsBrowserConfigSchema, _ as GeneratorFnParams, a as defineThemeColor, b as LikeC4ProjectConfigOps, c as isLikeC4JsonConfig, d as LikeC4StylesConfig, f as LikeC4StylesConfigInput, g as GeneratorFnContext, h as GeneratorFn, i as defineTheme, k as WebappExportFormatSchema, l as isLikeC4NonJsonConfig, m as ThemeColorValuesInput, n as defineGenerators, o as ConfigFilenames, p as LikeC4StylesConfigSchema, r as defineStyle, s as isLikeC4Config, t as defineConfig, u as LikeC4ConfigThemeInput, v as LikeC4ProjectConfig, w as RelationshipBrowserScopeSchema, x as LikeC4ProjectJsonConfig, y as LikeC4ProjectConfigInput } from "./chunks/index.mjs";
2
2
  import { n as WebappExportFormats, t as WebappExportFormat } from "./chunks/webapp-export-formats.mjs";
3
- export { ConfigFilenames, type GeneratorFn, type GeneratorFnContext, type GeneratorFnParams, type IncludeConfig, type LikeC4ConfigThemeInput, type LikeC4ProjectConfig, type LikeC4ProjectConfigInput, LikeC4ProjectConfigOps, type LikeC4ProjectJsonConfig, type LikeC4StylesConfig, type LikeC4StylesConfigInput, LikeC4StylesConfigSchema, type LocateResult, type ThemeColorValuesInput, type WebappConfig, WebappConfigSchema, type WebappExportFormat, WebappExportFormatSchema, WebappExportFormats, defineConfig, defineGenerators, defineStyle, defineTheme, defineThemeColor, isLikeC4Config, isLikeC4JsonConfig, isLikeC4NonJsonConfig };
3
+ export { ConfigFilenames, type GeneratorFn, type GeneratorFnContext, type GeneratorFnParams, type IncludeConfig, type LikeC4ConfigThemeInput, type LikeC4ProjectConfig, type LikeC4ProjectConfigInput, LikeC4ProjectConfigOps, type LikeC4ProjectJsonConfig, type LikeC4StylesConfig, type LikeC4StylesConfigInput, LikeC4StylesConfigSchema, type LocateResult, type RelationshipBrowserScope, RelationshipBrowserScopeSchema, RelationshipsBrowserConfigSchema, type ThemeColorValuesInput, type WebappConfig, WebappConfigSchema, type WebappExportFormat, WebappExportFormatSchema, WebappExportFormats, defineConfig, defineGenerators, defineStyle, defineTheme, defineThemeColor, isLikeC4Config, isLikeC4JsonConfig, isLikeC4NonJsonConfig };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{a as e,c as t,f as n,h as r,i,l as a,n as o,o as s,p as c,r as l,s as u,t as d,u as f}from"./chunks/src.mjs";import{WebappExportFormats as p}from"./webapp-export-formats.mjs";export{s as ConfigFilenames,f as LikeC4ProjectConfigOps,r as LikeC4StylesConfigSchema,n as WebappConfigSchema,c as WebappExportFormatSchema,p as WebappExportFormats,d as defineConfig,o as defineGenerators,l as defineStyle,i as defineTheme,e as defineThemeColor,u as isLikeC4Config,t as isLikeC4JsonConfig,a as isLikeC4NonJsonConfig};
1
+ import{_ as e,a as t,c as n,f as r,h as i,i as a,l as o,m as s,n as c,o as l,p as u,r as d,s as f,t as p,u as m}from"./chunks/src.mjs";import{WebappExportFormats as h}from"./webapp-export-formats.mjs";export{l as ConfigFilenames,m as LikeC4ProjectConfigOps,e as LikeC4StylesConfigSchema,r as RelationshipBrowserScopeSchema,u as RelationshipsBrowserConfigSchema,s as WebappConfigSchema,i as WebappExportFormatSchema,h as WebappExportFormats,p as defineConfig,c as defineGenerators,d as defineStyle,a as defineTheme,t as defineThemeColor,f as isLikeC4Config,n as isLikeC4JsonConfig,o as isLikeC4NonJsonConfig};
@@ -1,11 +1,11 @@
1
1
  import { t as __name } from "../chunks/rolldown-runtime.mjs";
2
- import { C as VscodeURI, D as IncludeConfig, E as WebappExportFormatSchema, S as LocateResult, T as WebappConfigSchema, _ as GeneratorFnParams, a as defineThemeColor, b as LikeC4ProjectConfigOps, c as isLikeC4JsonConfig, d as LikeC4StylesConfig, f as LikeC4StylesConfigInput, g as GeneratorFnContext, h as GeneratorFn, i as defineTheme, l as isLikeC4NonJsonConfig, m as ThemeColorValuesInput, n as defineGenerators, o as ConfigFilenames, p as LikeC4StylesConfigSchema, r as defineStyle, s as isLikeC4Config, t as defineConfig, u as LikeC4ConfigThemeInput, v as LikeC4ProjectConfig, w as WebappConfig, x as LikeC4ProjectJsonConfig, y as LikeC4ProjectConfigInput } from "../chunks/index.mjs";
2
+ import { A as IncludeConfig, C as RelationshipBrowserScope, D as WebappConfig, E as VscodeURI, O as WebappConfigSchema, S as LocateResult, T as RelationshipsBrowserConfigSchema, _ as GeneratorFnParams, a as defineThemeColor, b as LikeC4ProjectConfigOps, c as isLikeC4JsonConfig, d as LikeC4StylesConfig, f as LikeC4StylesConfigInput, g as GeneratorFnContext, h as GeneratorFn, i as defineTheme, k as WebappExportFormatSchema, l as isLikeC4NonJsonConfig, m as ThemeColorValuesInput, n as defineGenerators, o as ConfigFilenames, p as LikeC4StylesConfigSchema, r as defineStyle, s as isLikeC4Config, t as defineConfig, u as LikeC4ConfigThemeInput, v as LikeC4ProjectConfig, w as RelationshipBrowserScopeSchema, x as LikeC4ProjectJsonConfig, y as LikeC4ProjectConfigInput } from "../chunks/index.mjs";
3
3
  import { n as WebappExportFormats, t as WebappExportFormat } from "../chunks/webapp-export-formats.mjs";
4
4
  //#region src/node/load-config.d.ts
5
5
  /**
6
6
  * Load LikeC4 Project config file.
7
7
  * If filepath is a non-JSON file, it will be bundled and required
8
8
  */
9
- declare function loadConfig(filepath: VscodeURI | string): Promise<LikeC4ProjectConfig>;
9
+ export declare function loadConfig(filepath: VscodeURI | string): Promise<LikeC4ProjectConfig>;
10
10
  //#endregion
11
- export { ConfigFilenames, type GeneratorFn, type GeneratorFnContext, type GeneratorFnParams, type IncludeConfig, type LikeC4ConfigThemeInput, type LikeC4ProjectConfig, type LikeC4ProjectConfigInput, LikeC4ProjectConfigOps, type LikeC4ProjectJsonConfig, type LikeC4StylesConfig, type LikeC4StylesConfigInput, LikeC4StylesConfigSchema, type LocateResult, type ThemeColorValuesInput, type WebappConfig, WebappConfigSchema, type WebappExportFormat, WebappExportFormatSchema, WebappExportFormats, defineConfig, defineGenerators, defineStyle, defineTheme, defineThemeColor, isLikeC4Config, isLikeC4JsonConfig, isLikeC4NonJsonConfig, loadConfig };
11
+ export { ConfigFilenames, type GeneratorFn, type GeneratorFnContext, type GeneratorFnParams, type IncludeConfig, type LikeC4ConfigThemeInput, type LikeC4ProjectConfig, type LikeC4ProjectConfigInput, LikeC4ProjectConfigOps, type LikeC4ProjectJsonConfig, type LikeC4StylesConfig, type LikeC4StylesConfigInput, LikeC4StylesConfigSchema, type LocateResult, type RelationshipBrowserScope, RelationshipBrowserScopeSchema, RelationshipsBrowserConfigSchema, type ThemeColorValuesInput, type WebappConfig, WebappConfigSchema, type WebappExportFormat, WebappExportFormatSchema, WebappExportFormats, defineConfig, defineGenerators, defineStyle, defineTheme, defineThemeColor, isLikeC4Config, isLikeC4JsonConfig, isLikeC4NonJsonConfig };
@@ -1,4 +1,4 @@
1
- import"../chunks/rolldown-runtime.mjs";import{a as e,c as t,d as n,f as r,h as i,i as a,l as o,m as s,n as c,o as l,p as u,r as d,s as f,t as p,u as m}from"../chunks/src.mjs";import{WebappExportFormats as h}from"../webapp-export-formats.mjs";import g from"json5";import _ from"zod/v4";import{invariant as v}from"@likec4/core";import{logger as y,wrapError as b}from"@likec4/log";import{bundleRequire as x}from"bundle-require";import{defu as S}from"defu";import{formatMessagesSync as C}from"esbuild";import*as w from"node:fs/promises";import{basename as T,dirname as E,relative as D,resolve as O}from"node:path";import{cwd as k}from"node:process";import{hasAtLeast as A,isNonNullish as j,last as M,omit as N}from"remeda";const P=n.pick({extends:!0,styles:!0}).loose(),normalizeExtends=e=>e?Array.isArray(e)?e:[e]:[],parseJsonConfig=async e=>{let t=await w.readFile(e,`utf-8`),n;try{n=g.parse(t.trim()||`{}`)}catch(t){throw b(t,`${e}:`)}if(!n||typeof n!=`object`||Array.isArray(n))throw Error(`${e}: Config must be a JSON object`);let r=P.safeParse(n);if(!r.success)throw Error(`${e}: Invalid config\n`+_.prettifyError(r.error));return r.data},loadJsonConfigs=async(e,t)=>{if(t.includes(e)){let n=t.indexOf(e),r=[...t.slice(n),e].join(` -> `);throw Error(`Config extends cycle detected: ${r}`)}let n=await parseJsonConfig(e),r=normalizeExtends(n.extends),i=[...t,e],a=[];for(let t of r){let n=O(E(e),t);a.push(...await loadJsonConfigs(n,i))}return[...a,n]};async function loadConfig(e){e=typeof e==`string`?e:e.fsPath,y.getChild(`config`).trace`Loading config: ${D(k(),e)}`;let n=E(e),r=T(e),i={name:T(n)};if(t(r)){let t=await loadJsonConfigs(O(e),[]);v(A(t,1),`Expect at least one config`);let n=N(M(t),[`extends`,`styles`]),r=t.map(e=>e.styles).filter(j),a=r.length>0?S({},...r.reverse()):void 0;return s({...i,...n,...a?{styles:a}:{}})}v(o(r),`Invalid name for config file: ${e}`);let{mod:a}=await x({filepath:e,cwd:n,esbuildOptions:{resolveExtensions:[`.ts`,`.mts`,`.cts`,`.mjs`,`.js`,`.cjs`],plugins:[{name:`likec4-config`,setup(e){e.onResolve({filter:/^@?likec4\/config$/},e=>({path:e.path,namespace:`likec4-config`})),e.onEnd(e=>{let t=C(e.errors,{kind:`error`});for(let e of t)y.error(e)}),e.onLoad({filter:/.*/,namespace:`likec4-config`},e=>({contents:`
1
+ import"../chunks/rolldown-runtime.mjs";import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,n as u,o as d,p as f,r as p,s as m,t as h,u as g}from"../chunks/src.mjs";import{WebappExportFormats as _}from"../webapp-export-formats.mjs";import v from"json5";import y from"zod/v4";import{invariant as b}from"@likec4/core";import{logger as x,wrapError as S}from"@likec4/log";import{bundleRequire as C}from"bundle-require";import{defu as w}from"defu";import{formatMessagesSync as T}from"esbuild";import*as E from"node:fs/promises";import{basename as D,dirname as O,relative as k,resolve as A}from"node:path";import{cwd as j}from"node:process";import{hasAtLeast as M,isNonNullish as N,last as P,omit as F}from"remeda";const I=r.pick({extends:!0,styles:!0}).loose(),normalizeExtends=e=>e?Array.isArray(e)?e:[e]:[],parseJsonConfig=async e=>{let t=await E.readFile(e,`utf-8`),n;try{n=v.parse(t.trim()||`{}`)}catch(t){throw S(t,`${e}:`)}if(!n||typeof n!=`object`||Array.isArray(n))throw Error(`${e}: Config must be a JSON object`);let r=I.safeParse(n);if(!r.success)throw Error(`${e}: Invalid config\n`+y.prettifyError(r.error));return r.data},loadJsonConfigs=async(e,t)=>{if(t.includes(e)){let n=t.indexOf(e),r=[...t.slice(n),e].join(` -> `);throw Error(`Config extends cycle detected: ${r}`)}let n=await parseJsonConfig(e),r=normalizeExtends(n.extends),i=[...t,e],a=[];for(let t of r){let n=A(O(e),t);a.push(...await loadJsonConfigs(n,i))}return[...a,n]};async function loadConfig(e){e=typeof e==`string`?e:e.fsPath,x.getChild(`config`).trace`Loading config: ${k(j(),e)}`;let t=O(e),r=D(e),i={name:D(t)};if(n(r)){let t=await loadJsonConfigs(A(e),[]);b(M(t,1),`Expect at least one config`);let n=F(P(t),[`extends`,`styles`]),r=t.map(e=>e.styles).filter(N),o=r.length>0?w({},...r.reverse()):void 0;return a({...i,...n,...o?{styles:o}:{}})}b(c(r),`Invalid name for config file: ${e}`);let{mod:o}=await C({filepath:e,cwd:t,esbuildOptions:{resolveExtensions:[`.ts`,`.mts`,`.cts`,`.mjs`,`.js`,`.cjs`],plugins:[{name:`likec4-config`,setup(e){e.onResolve({filter:/^@?likec4\/config$/},e=>({path:e.path,namespace:`likec4-config`})),e.onEnd(e=>{let t=T(e.errors,{kind:`error`});for(let e of t)x.error(e)}),e.onLoad({filter:/.*/,namespace:`likec4-config`},e=>({contents:`
2
2
  // Mock implementation to allow loading config files without bundling @likec4/config
3
3
  function mock(x) { return x }
4
4
  export {
@@ -7,4 +7,4 @@ export {
7
7
  mock as defineStyle,
8
8
  mock as defineTheme,
9
9
  mock as defineThemeColor,
10
- }`,loader:`js`}))}}]}});return s(Object.assign(i,a?.default??a))}export{l as ConfigFilenames,m as LikeC4ProjectConfigOps,i as LikeC4StylesConfigSchema,r as WebappConfigSchema,u as WebappExportFormatSchema,h as WebappExportFormats,p as defineConfig,c as defineGenerators,d as defineStyle,a as defineTheme,e as defineThemeColor,f as isLikeC4Config,t as isLikeC4JsonConfig,o as isLikeC4NonJsonConfig,loadConfig};
10
+ }`,loader:`js`}))}}]}});return a(Object.assign(i,o?.default??o))}export{d as ConfigFilenames,g as LikeC4ProjectConfigOps,e as LikeC4StylesConfigSchema,i as RelationshipBrowserScopeSchema,f as RelationshipsBrowserConfigSchema,l as WebappConfigSchema,o as WebappExportFormatSchema,_ as WebappExportFormats,h as defineConfig,u as defineGenerators,p as defineStyle,s as defineTheme,t as defineThemeColor,m as isLikeC4Config,n as isLikeC4JsonConfig,c as isLikeC4NonJsonConfig,loadConfig};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@likec4/config",
3
- "version": "1.59.3",
3
+ "version": "1.59.4",
4
4
  "license": "MIT",
5
5
  "homepage": "https://likec4.dev",
6
6
  "author": "Denis Davydkov <denis@davydkov.com>",
@@ -60,8 +60,8 @@
60
60
  "access": "public"
61
61
  },
62
62
  "dependencies": {
63
- "@likec4/core": "1.59.3",
64
- "@likec4/log": "1.59.3",
63
+ "@likec4/core": "1.59.4",
64
+ "@likec4/log": "1.59.4",
65
65
  "json5": "^2.2.3",
66
66
  "zod": "^4.4.3",
67
67
  "remeda": "^2.45.0",
@@ -71,7 +71,7 @@
71
71
  },
72
72
  "peerDependencies": {
73
73
  "bundle-require": "^5.1.0",
74
- "esbuild": "0.28.1"
74
+ "esbuild": "0.28.2"
75
75
  },
76
76
  "peerDependenciesMeta": {
77
77
  "esbuild": {
@@ -82,13 +82,13 @@
82
82
  }
83
83
  },
84
84
  "devDependencies": {
85
- "@likec4/tsconfig": "1.59.3",
86
- "@likec4/devops": "1.59.3",
85
+ "@likec4/tsconfig": "1.59.4",
86
+ "@likec4/devops": "1.59.4",
87
87
  "@types/node": "~22.19.19",
88
- "tsx": "4.22.5",
88
+ "tsx": "4.23.13",
89
89
  "turbo": "2.10.12",
90
90
  "typescript": "6.0.3",
91
- "tsdown": "^0.22.9",
91
+ "tsdown": "^0.23.0",
92
92
  "nano-spawn": "^2.1.0",
93
93
  "vitest": "4.1.11"
94
94
  },
package/schema.json CHANGED
@@ -568,6 +568,20 @@
568
568
  "drawio"
569
569
  ]
570
570
  }
571
+ },
572
+ "relationshipsBrowser": {
573
+ "type": "object",
574
+ "properties": {
575
+ "defaultScope": {
576
+ "default": "view",
577
+ "type": "string",
578
+ "enum": [
579
+ "global",
580
+ "view"
581
+ ]
582
+ }
583
+ },
584
+ "additionalProperties": false
571
585
  }
572
586
  },
573
587
  "additionalProperties": false,
package/src/index.ts CHANGED
@@ -13,12 +13,15 @@ export type {
13
13
  LikeC4ProjectConfigInput,
14
14
  LikeC4ProjectJsonConfig,
15
15
  LocateResult,
16
+ RelationshipBrowserScope,
16
17
  WebappConfig,
17
18
  WebappExportFormat,
18
19
  } from './schema'
19
20
 
20
21
  export {
21
22
  LikeC4ProjectConfigOps,
23
+ RelationshipBrowserScopeSchema,
24
+ RelationshipsBrowserConfigSchema,
22
25
  WebappConfigSchema,
23
26
  WebappExportFormats,
24
27
  WebappExportFormatSchema,
package/src/schema.ts CHANGED
@@ -60,6 +60,14 @@ export const WebappExportFormatSchema = z.enum(WebappExportFormats)
60
60
 
61
61
  export type { WebappExportFormat }
62
62
 
63
+ export const RelationshipBrowserScopeSchema = z.enum(['global', 'view'])
64
+
65
+ export type RelationshipBrowserScope = z.infer<typeof RelationshipBrowserScopeSchema>
66
+
67
+ export const RelationshipsBrowserConfigSchema = z.strictObject({
68
+ defaultScope: RelationshipBrowserScopeSchema.default('view'),
69
+ })
70
+
63
71
  export const WebappConfigSchema = z
64
72
  .strictObject({
65
73
  exportFormats: z.array(WebappExportFormatSchema)
@@ -74,6 +82,7 @@ export const WebappConfigSchema = z
74
82
  'Omit to enable all export formats. Use an empty array to disable webapp exports.',
75
83
  ].join('\n'),
76
84
  }),
85
+ relationshipsBrowser: RelationshipsBrowserConfigSchema.optional(),
77
86
  })
78
87
  .meta({
79
88
  id: 'WebappConfig',