New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@likec4/generators

Package Overview
Dependencies
Maintainers
1
Versions
93
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@likec4/generators - npm Package Compare versions

Comparing version 0.37.1 to 0.40.0

5

dist/d2/generate-d2.d.ts

@@ -1,3 +0,2 @@

import type { ComputedView } from '@likec4/core/types';
export declare function generateD2<V extends ComputedView>(view: V): string;
//# sourceMappingURL=generate-d2.d.ts.map
import type { ComputedView } from '@likec4/core';
export declare function generateD2<V extends ComputedView>(view: V): any;

133

dist/d2/generate-d2.js

@@ -1,75 +0,82 @@

import { CompositeGeneratorNode, NL, joinToNode, toString } from 'langium';
import { isNil } from 'rambdax';
import { CompositeGeneratorNode, NL, joinToNode, toString } from "langium";
import { isNil } from "rambdax";
const capitalizeFirstLetter = (value) => value.charAt(0).toLocaleUpperCase() + value.slice(1);
const fqnName = (nodeId) => nodeId.split('.').map(capitalizeFirstLetter).join('');
const fqnName = (nodeId) => nodeId.split(".").map(capitalizeFirstLetter).join("");
const nodeName = (node) => {
return fqnName(node.parent ? node.id.slice(node.parent.length + 1) : node.id);
return fqnName(node.parent ? node.id.slice(node.parent.length + 1) : node.id);
};
const d2direction = ({ autoLayout }) => {
switch (autoLayout) {
case 'TB': {
return 'down';
}
case 'BT': {
return 'up';
}
case 'LR': {
return 'right';
}
case 'RL': {
return 'left';
}
switch (autoLayout) {
case "TB": {
return "down";
}
case "BT": {
return "up";
}
case "LR": {
return "right";
}
case "RL": {
return "left";
}
}
};
const d2shape = ({ shape }) => {
switch (shape) {
case 'queue':
case 'cylinder':
case 'rectangle':
case 'person': {
return shape;
}
case 'storage': {
return 'stored_data';
}
case 'mobile':
case 'browser': {
return 'rectangle';
}
switch (shape) {
case "queue":
case "cylinder":
case "rectangle":
case "person": {
return shape;
}
case "storage": {
return "stored_data";
}
case "mobile":
case "browser": {
return "rectangle";
}
}
};
export function generateD2(view) {
const { nodes, edges } = view;
const names = new Map();
const printNode = (node, parentName) => {
const name = nodeName(node);
const fqnName = (parentName ? parentName + '.' : '') + name;
names.set(node.id, fqnName);
const label = node.title.replaceAll('\n', '\\n');
const shape = d2shape(node);
return new CompositeGeneratorNode()
.append(name, ': {', NL)
.indent({
indentedChildren: indent => indent
.append('label: "', label, '"', NL)
.appendIf(shape !== 'rectangle', 'shape: ', shape, NL)
.appendIf(node.children.length > 0, NL, joinToNode(nodes.filter(n => n.parent === node.id), n => printNode(n, fqnName))),
indentation: 2
})
.append('}', NL);
};
// return `${names.get(edge.source)} -> ${names.get(edge.target)}${edge.label ? ': ' + edge.label : ''}`
const printEdge = (edge) => {
return new CompositeGeneratorNode()
.append(names.get(edge.source), ' -> ', names.get(edge.target))
.append(out => edge.label && out.append(': ', edge.label.replaceAll('\n', '\\n')));
};
return toString(new CompositeGeneratorNode()
.append('direction: ', d2direction(view), NL, NL)
.append(joinToNode(nodes.filter(n => isNil(n.parent)), n => printNode(n), {
const { nodes, edges } = view;
const names = /* @__PURE__ */ new Map();
const printNode = (node, parentName) => {
const name = nodeName(node);
const fqnName2 = (parentName ? parentName + "." : "") + name;
names.set(node.id, fqnName2);
const label = node.title.replaceAll("\n", "\\n");
const shape = d2shape(node);
return new CompositeGeneratorNode().append(name, ": {", NL).indent({
indentedChildren: (indent) => indent.append('label: "', label, '"', NL).appendIf(shape !== "rectangle", "shape: ", shape, NL).appendIf(
node.children.length > 0,
NL,
joinToNode(
nodes.filter((n) => n.parent === node.id),
(n) => printNode(n, fqnName2)
)
),
indentation: 2
}).append("}", NL);
};
const printEdge = (edge) => {
return new CompositeGeneratorNode().append(names.get(edge.source), " -> ", names.get(edge.target)).append((out) => edge.label && out.append(": ", edge.label.replaceAll("\n", "\\n")));
};
return toString(
new CompositeGeneratorNode().append("direction: ", d2direction(view), NL, NL).append(
joinToNode(
nodes.filter((n) => isNil(n.parent)),
(n) => printNode(n),
{
appendNewLineIfNotEmpty: true
}
)
).appendIf(
edges.length > 0,
NL,
joinToNode(edges, (e) => printEdge(e), {
appendNewLineIfNotEmpty: true
}))
.appendIf(edges.length > 0, NL, joinToNode(edges, e => printEdge(e), {
appendNewLineIfNotEmpty: true
})));
})
)
);
}
export * from './generate-d2';
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

export * from './generate-d2';
export * from "./generate-d2.js";
export { generateReact } from './react/generate-react';
export { generateD2 } from './d2/generate-d2';
export { generateMermaid } from './mmd/generate-mmd';
export { generateViewsDataTs } from './views-data-ts/generate-views-data';
//# sourceMappingURL=index.d.ts.map
export { generateViewsDataTs, generateViewsDataJs } from './views-data-ts/generate-views-data';

@@ -1,4 +0,4 @@

export { generateReact } from './react/generate-react';
export { generateD2 } from './d2/generate-d2';
export { generateMermaid } from './mmd/generate-mmd';
export { generateViewsDataTs } from './views-data-ts/generate-views-data';
export { generateReact } from "./react/generate-react.js";
export { generateD2 } from "./d2/generate-d2.js";
export { generateMermaid } from "./mmd/generate-mmd.js";
export { generateViewsDataTs, generateViewsDataJs } from "./views-data-ts/generate-views-data.js";

@@ -1,3 +0,2 @@

import type { ComputedView } from '@likec4/core/types';
export declare function generateMermaid<V extends ComputedView>(view: V): string;
//# sourceMappingURL=generate-mmd.d.ts.map
import type { ComputedView } from '@likec4/core';
export declare function generateMermaid<V extends ComputedView>(view: V): any;

@@ -1,62 +0,86 @@

import { CompositeGeneratorNode, NL, joinToNode, toString } from 'langium';
import { isNil } from 'rambdax';
import { CompositeGeneratorNode, NL, joinToNode, toString } from "langium";
import { isNil } from "rambdax";
const capitalizeFirstLetter = (value) => value.charAt(0).toLocaleUpperCase() + value.slice(1);
const fqnName = (nodeId) => nodeId.split('.').map(capitalizeFirstLetter).join('');
const fqnName = (nodeId) => nodeId.split(".").map(capitalizeFirstLetter).join("");
const nodeName = (node) => {
return fqnName(node.parent ? node.id.slice(node.parent.length + 1) : node.id);
return fqnName(node.parent ? node.id.slice(node.parent.length + 1) : node.id);
};
const mmdshape = ({ shape }) => {
switch (shape) {
case 'queue':
case 'cylinder':
return ['[(', ')]'];
case 'person': {
return ['[fa:fa-user ', ']'];
}
case 'storage':
return ['([', '])'];
case 'mobile':
case 'browser':
case 'rectangle': {
return ['[', ']'];
}
switch (shape) {
case "queue":
case "cylinder":
return ["[(", ")]"];
case "person": {
return ["[fa:fa-user ", "]"];
}
case "storage":
return ["([", "])"];
case "mobile":
case "browser":
case "rectangle": {
return ["[", "]"];
}
}
};
export function generateMermaid(view) {
const { nodes, edges } = view;
const names = new Map();
const printNode = (node, parentName) => {
const name = nodeName(node);
const fqnName = (parentName ? parentName + '.' : '') + name;
names.set(node.id, fqnName);
const label = node.title.replaceAll('\n', '\\n');
const shape = mmdshape(node);
const baseNode = new CompositeGeneratorNode();
if (node.children.length > 0) {
baseNode
.append('subgraph ', fqnName, '["', label, '"]', NL)
.indent({
indentedChildren: indent => indent.appendIf(node.children.length > 0, NL, joinToNode(nodes.filter(n => n.parent === node.id), n => printNode(n, fqnName))),
indentation: 2
})
.append('end', NL);
const { nodes, edges } = view;
const names = /* @__PURE__ */ new Map();
const printNode = (node, parentName) => {
const name = nodeName(node);
const fqnName2 = (parentName ? parentName + "." : "") + name;
names.set(node.id, fqnName2);
const label = node.title.replaceAll("\n", "\\n");
const shape = mmdshape(node);
const baseNode = new CompositeGeneratorNode();
if (node.children.length > 0) {
baseNode.append("subgraph ", fqnName2, '["', label, '"]', NL).indent({
indentedChildren: (indent) => indent.appendIf(
node.children.length > 0,
NL,
joinToNode(
nodes.filter((n) => n.parent === node.id),
(n) => printNode(n, fqnName2)
)
),
indentation: 2
}).append("end", NL);
} else {
baseNode.append(fqnName2, shape[0], label, shape[1], NL);
}
return baseNode;
};
const printEdge = (edge) => {
return new CompositeGeneratorNode().append(
names.get(edge.source),
" --",
edge.label ? '"' + edge.label.replaceAll("\n", "\\n") + '"--' : "",
"> ",
names.get(edge.target)
);
};
return toString(
new CompositeGeneratorNode().appendIf(
view.title !== null && view.title.length > 0,
"---",
NL,
`title: ${view.title}`,
NL,
"---",
NL
).append("graph ", view.autoLayout, NL, NL).append(
joinToNode(
nodes.filter((n) => isNil(n.parent)),
(n) => printNode(n),
{
appendNewLineIfNotEmpty: true
}
else {
baseNode.append(fqnName, shape[0], label, shape[1], NL);
}
return baseNode;
};
// return `${names.get(edge.source)} -> ${names.get(edge.target)}${edge.label ? ': ' + edge.label : ''}`
const printEdge = (edge) => {
return new CompositeGeneratorNode().append(names.get(edge.source), ' --', edge.label ? '"' + edge.label.replaceAll('\n', '\\n') + '"--' : '', '> ', names.get(edge.target));
};
return toString(new CompositeGeneratorNode()
.appendIf(view.title !== null && view.title.length > 0, '---', NL, `title: ${view.title}`, NL, '---', NL)
.append('graph ', view.autoLayout, NL, NL)
.append(joinToNode(nodes.filter(n => isNil(n.parent)), n => printNode(n), {
)
).appendIf(
edges.length > 0,
NL,
joinToNode(edges, (e) => printEdge(e), {
appendNewLineIfNotEmpty: true
}))
.appendIf(edges.length > 0, NL, joinToNode(edges, e => printEdge(e), {
appendNewLineIfNotEmpty: true
})));
})
)
);
}
export * from './generate-mmd';
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

export * from './generate-mmd';
export * from "./generate-mmd.js";
import type { DiagramView } from '@likec4/core';
import { CompositeGeneratorNode } from 'langium';
export declare const generateViewId: (views: DiagramView[]) => CompositeGeneratorNode | undefined;
export declare function generateReact(views: DiagramView[]): string;
//# sourceMappingURL=generate-react.d.ts.map
export declare const generateViewId: (views: DiagramView[]) => any;
export declare function generateReact(views: DiagramView[]): any;

@@ -1,22 +0,22 @@

import JSON5 from 'json5';
import { CompositeGeneratorNode, NL, expandToNode, joinToNode, toString } from 'langium';
import JSON5 from "json5";
import { CompositeGeneratorNode, NL, expandToNode, joinToNode, toString } from "langium";
const componentName = (value) => {
if (!value.charAt(0).match(/[a-zA-Z]/)) {
value = 'View' + value;
}
value = value.replaceAll('_', '');
return value.charAt(0).toLocaleUpperCase() + value.slice(1);
if (!value.charAt(0).match(/[a-zA-Z]/)) {
value = "View" + value;
}
value = value.replaceAll("_", "");
return value.charAt(0).toLocaleUpperCase() + value.slice(1);
};
export const generateViewId = (views) => joinToNode(views, view => expandToNode `'${view.id}'`, {
separator: ' | '
export const generateViewId = (views) => joinToNode(views, (view) => expandToNode`'${view.id}'`, {
separator: " | "
});
export function generateReact(views) {
const components = views.map(({ id }) => {
return {
id,
name: componentName(id)
};
});
const out = new CompositeGeneratorNode();
out.appendTemplate `
const components = views.map(({ id }) => {
return {
id,
name: componentName(id)
};
});
const out = new CompositeGeneratorNode();
out.appendTemplate`
/******************************************************************************

@@ -31,21 +31,25 @@ * This file was generated

`.append(NL, NL);
if (components.length == 0) {
out.append('export {}', NL);
return toString(out);
}
out.appendTemplate `
if (components.length == 0) {
out.append("export {}", NL);
return toString(out);
}
out.appendTemplate`
export type LikeC4ViewId = ${generateViewId(views)};
export const LikeC4Views = {
`
.indent({
indentation: 2,
indentedChildren(indented) {
indented.appendNewLineIf(views.length > 1).append(joinToNode(views, view => expandToNode `${JSON5.stringify(view.id)}: (${JSON5.stringify(view)} as unknown) as DiagramView`, {
separator: ',',
appendNewLineIfNotEmpty: true
}));
}
})
.append('} as const satisfies Record<LikeC4ViewId, DiagramView>', NL, NL).appendTemplate `
`.indent({
indentation: 2,
indentedChildren(indented) {
indented.appendNewLineIf(views.length > 1).append(
joinToNode(
views,
(view) => expandToNode`${JSON5.stringify(view.id)}: (${JSON5.stringify(view)} as unknown) as DiagramView`,
{
separator: ",",
appendNewLineIfNotEmpty: true
}
)
);
}
}).append("} as const satisfies Record<LikeC4ViewId, DiagramView>", NL, NL).appendTemplate`
export type LikeC4Views = typeof LikeC4Views

@@ -87,3 +91,3 @@

`.append(NL, NL);
return toString(out);
return toString(out);
}
export * from './generate-react';
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

export * from './generate-react';
export * from "./generate-react.js";
import type { DiagramView } from '@likec4/core';
export declare function generateViewsDataTs(views: DiagramView[]): string;
//# sourceMappingURL=generate-views-data.d.ts.map
export declare function generateViewsDataJs(views: DiagramView[]): any;
export declare function generateViewsDataTs(views: DiagramView[]): any;

@@ -1,7 +0,45 @@

import JSON5 from 'json5';
import { CompositeGeneratorNode, NL, expandToNode, joinToNode, toString } from 'langium';
import { generateViewId } from '../react/generate-react';
import JSON5 from "json5";
import { CompositeGeneratorNode, NL, expandToNode, joinToNode, toString } from "langium";
import { generateViewId } from "../react/generate-react.js";
export function generateViewsDataJs(views) {
const out = new CompositeGeneratorNode();
out.appendTemplate`
/******************************************************************************
* This file was generated
* DO NOT EDIT MANUALLY!
******************************************************************************/
/* eslint-disable */
`.append(NL, NL);
if (views.length == 0) {
out.append("export const LikeC4Views = {}", NL);
return toString(out);
}
out.appendTemplate`
export const LikeC4Views = {
`.indent({
indentation: 2,
indentedChildren(indented) {
indented.appendNewLineIf(views.length > 1).append(
joinToNode(views, (view) => expandToNode`${JSON5.stringify(view.id)}: ${JSON5.stringify(view)}`, {
separator: ",",
appendNewLineIfNotEmpty: true
})
);
}
}).append("}", NL, NL).appendTemplate`
export function isLikeC4ViewId(value) {
return (
value != null &&
typeof value === 'string' &&
Object.prototype.hasOwnProperty.call(LikeC4Views, value)
)
}
`.append(NL, NL);
return toString(out);
}
export function generateViewsDataTs(views) {
const out = new CompositeGeneratorNode();
out.appendTemplate `
const out = new CompositeGeneratorNode();
out.appendTemplate`
/******************************************************************************

@@ -15,20 +53,24 @@ * This file was generated

`.append(NL, NL);
if (views.length == 0) {
out.append('export {}', NL);
return toString(out);
}
out.appendTemplate `
if (views.length == 0) {
out.append("export {}", NL);
return toString(out);
}
out.appendTemplate`
export type LikeC4ViewId = ${generateViewId(views)};
export const LikeC4Views = {
`
.indent({
indentation: 2,
indentedChildren(indented) {
indented.appendNewLineIf(views.length > 1).append(joinToNode(views, view => expandToNode `${JSON5.stringify(view.id)}: (${JSON5.stringify(view)} as unknown) as DiagramView`, {
separator: ',',
appendNewLineIfNotEmpty: true
}));
}
})
.append('} as const satisfies Record<LikeC4ViewId, DiagramView>', NL, NL).appendTemplate `
`.indent({
indentation: 2,
indentedChildren(indented) {
indented.appendNewLineIf(views.length > 1).append(
joinToNode(
views,
(view) => expandToNode`${JSON5.stringify(view.id)}: (${JSON5.stringify(view)} as unknown) as DiagramView`,
{
separator: ",",
appendNewLineIfNotEmpty: true
}
)
);
}
}).append("} as const satisfies Record<LikeC4ViewId, DiagramView>", NL, NL).appendTemplate`
export type LikeC4Views = typeof LikeC4Views

@@ -61,3 +103,3 @@

`.append(NL, NL);
return toString(out);
return toString(out);
}
export * from './generate-views-data';
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

export * from './generate-views-data';
export * from "./generate-views-data.js";
{
"name": "@likec4/generators",
"version": "0.37.1",
"version": "0.40.0",
"license": "MIT",

@@ -19,17 +19,18 @@ "bugs": "https://github.com/likec4/likec4/issues",

},
"main": "./dist/index.js",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"type": "module",
"sideEffects": false,
"exports": {
".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
}
},
"publishConfig": {
"registry": "https://registry.npmjs.org",
"access": "public",
"main": "./dist/index.js",
"module": "./dist/index.js",
"types": "./dist/index.d.ts"
"access": "public"
},
"scripts": {
"compile": "tsc --noEmit",
"build": "tsc",
"typecheck": "tsc --emitDeclarationOnly",
"build:watch": "tsc --watch",
"build": "unbuild",
"dev": "tsc --watch",

@@ -42,3 +43,3 @@ "lint": "run -T eslint src/ --fix",

"dependencies": {
"@likec4/core": "0.37.1",
"@likec4/core": "0.40.0",
"json5": "^2.2.3",

@@ -51,5 +52,6 @@ "langium": "^2.0.2",

"typescript": "^5.2.2",
"vitest": "^0.34.4"
"unbuild": "^2.0.0",
"vitest": "^0.34.6"
},
"packageManager": "yarn@3.6.3"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc