@sap/csn-interop-renderer 0.2.0 → 0.3.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/cli/cliRunner.js +1 -1
- package/dist/src/customWebComponent/csnRenderer.d.ts +3 -1
- package/dist/src/customWebComponent/csnRenderer.js +8 -15
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.js +6 -5
- package/dist/src/parser.d.ts +2 -1
- package/dist/src/parser.js +3 -3
- package/dist/src/renderer.d.ts +2 -1
- package/dist/src/renderer.js +95 -97
- package/dist/src/rendererUtil.d.ts +4 -0
- package/dist/src/rendererUtil.js +69 -0
- package/dist/src/types/index.d.ts +22 -0
- package/dist/src/types/index.js +2 -0
- package/dist/src/types/marked-gfm-heading-id.d.ts +2 -0
- package/dist/src/types/marked-gfm-heading-id.js +2 -0
- package/package.json +8 -7
package/cli/cliRunner.js
CHANGED
|
@@ -52,7 +52,7 @@ async function run(argv) {
|
|
|
52
52
|
|
|
53
53
|
try {
|
|
54
54
|
const resultAsHtml = argv.r === "html";
|
|
55
|
-
result = await parser(trimmed, resultAsHtml);
|
|
55
|
+
result = await parser(trimmed, undefined, resultAsHtml);
|
|
56
56
|
} catch (error) {
|
|
57
57
|
process.stderr.write(`${error.message}\n\n`); // no [error]: needed, prefix is contained in the original code
|
|
58
58
|
process.exit(1);
|
|
@@ -5,6 +5,7 @@ export interface CsnRendererProps {
|
|
|
5
5
|
type CsnRendererPropName = keyof CsnRendererProps;
|
|
6
6
|
export declare class CsnRenderer extends HTMLElement {
|
|
7
7
|
private _htmlContent;
|
|
8
|
+
private _source;
|
|
8
9
|
constructor();
|
|
9
10
|
static observedAttributes: CsnRendererPropName[];
|
|
10
11
|
private _renderHtml;
|
|
@@ -17,10 +18,11 @@ declare global {
|
|
|
17
18
|
interface HTMLElementTagNameMap {
|
|
18
19
|
"csn-renderer": CsnRenderer;
|
|
19
20
|
}
|
|
20
|
-
namespace JSX {
|
|
21
|
+
namespace React.JSX {
|
|
21
22
|
interface IntrinsicElements {
|
|
22
23
|
["csn-renderer"]: {
|
|
23
24
|
source: string;
|
|
25
|
+
config?: string;
|
|
24
26
|
};
|
|
25
27
|
}
|
|
26
28
|
}
|
|
@@ -1,33 +1,26 @@
|
|
|
1
1
|
import { generateHtml } from "../index.js";
|
|
2
2
|
export class CsnRenderer extends HTMLElement {
|
|
3
3
|
_htmlContent = "";
|
|
4
|
+
_source = "";
|
|
4
5
|
constructor() {
|
|
5
6
|
super();
|
|
6
7
|
}
|
|
7
8
|
static observedAttributes = ["source"];
|
|
8
|
-
async _renderHtml(
|
|
9
|
-
if (
|
|
10
|
-
this._htmlContent = await generateHtml(JSON.parse(
|
|
9
|
+
async _renderHtml(value) {
|
|
10
|
+
if (value) {
|
|
11
|
+
this._htmlContent = await generateHtml(JSON.parse(value));
|
|
11
12
|
this.innerHTML = this._htmlContent;
|
|
12
13
|
}
|
|
13
|
-
else {
|
|
14
|
-
const csnDataSource = this.getAttribute("source");
|
|
15
|
-
if (csnDataSource) {
|
|
16
|
-
this._htmlContent = await generateHtml(JSON.parse(csnDataSource));
|
|
17
|
-
this.innerHTML = this._htmlContent;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
connectedCallback() {
|
|
22
|
-
void this._renderHtml();
|
|
23
14
|
}
|
|
15
|
+
connectedCallback() { }
|
|
24
16
|
disconnectedCallback() { }
|
|
25
17
|
adoptedCallback() { }
|
|
26
18
|
attributeChangedCallback(name, _oldValue, newValue) {
|
|
27
19
|
if (name === "source" && !!newValue && typeof newValue === "string") {
|
|
28
|
-
|
|
20
|
+
this._source = newValue;
|
|
21
|
+
void this._renderHtml(this._source);
|
|
29
22
|
}
|
|
30
23
|
}
|
|
31
24
|
}
|
|
32
25
|
customElements.define("csn-renderer", CsnRenderer);
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NuUmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3VzdG9tV2ViQ29tcG9uZW50L2NzblJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFTM0MsTUFBTSxPQUFPLFdBQVksU0FBUSxXQUFXO0lBQ2xDLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsT0FBTyxHQUFXLEVBQUUsQ0FBQztJQUU3QjtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVNLE1BQU0sQ0FBQyxrQkFBa0IsR0FBMEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU3RCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQWdDO1FBQ3hELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFTSxpQkFBaUIsS0FBVSxDQUFDO0lBRTVCLG9CQUFvQixLQUFVLENBQUM7SUFFL0IsZUFBZSxLQUFVLENBQUM7SUFFMUIsd0JBQXdCLENBQUMsSUFBeUIsRUFBRSxTQUFrQixFQUFFLFFBQWlCO1FBQzlGLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO1lBQ3hCLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7O0FBbUJILGNBQWMsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDIn0=
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import * as customWebComponent from "./customWebComponent/csnRenderer.js";
|
|
2
2
|
import { CSNInteropRoot } from "@sap/csn-interop-specification";
|
|
3
|
+
import { CsnRendererConfig } from "./types/index.js";
|
|
3
4
|
/**
|
|
4
5
|
* Converts JSON CSNInteropRoot object into an markdown string.
|
|
5
6
|
*
|
|
6
7
|
* @param inputText A valid JSON CSNInteropRoot object.
|
|
7
8
|
*/
|
|
8
|
-
declare function generateMarkdown(inputText: CSNInteropRoot): Promise<string>;
|
|
9
|
+
declare function generateMarkdown(inputText: CSNInteropRoot, config?: CsnRendererConfig): Promise<string>;
|
|
9
10
|
/**
|
|
10
11
|
* Converts JSON CSNInteropRoot object into an html string.
|
|
11
12
|
*
|
|
12
13
|
* @param inputText A valid JSON CSNInteropRoot object.
|
|
13
14
|
*/
|
|
14
|
-
declare function generateHtml(inputText: CSNInteropRoot): Promise<string>;
|
|
15
|
+
declare function generateHtml(inputText: CSNInteropRoot, config?: CsnRendererConfig): Promise<string>;
|
|
15
16
|
export { generateHtml, generateMarkdown, customWebComponent };
|
|
17
|
+
export * from "./types/index.js";
|
package/dist/src/index.js
CHANGED
|
@@ -5,8 +5,8 @@ import * as customWebComponent from "./customWebComponent/csnRenderer.js";
|
|
|
5
5
|
*
|
|
6
6
|
* @param inputText A valid JSON CSNInteropRoot object.
|
|
7
7
|
*/
|
|
8
|
-
async function generateMarkdown(inputText) {
|
|
9
|
-
const result = await parser(inputText);
|
|
8
|
+
async function generateMarkdown(inputText, config) {
|
|
9
|
+
const result = await parser(inputText, config);
|
|
10
10
|
return result;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
@@ -14,9 +14,10 @@ async function generateMarkdown(inputText) {
|
|
|
14
14
|
*
|
|
15
15
|
* @param inputText A valid JSON CSNInteropRoot object.
|
|
16
16
|
*/
|
|
17
|
-
async function generateHtml(inputText) {
|
|
18
|
-
const result = await parser(inputText, true);
|
|
17
|
+
async function generateHtml(inputText, config) {
|
|
18
|
+
const result = await parser(inputText, config, true);
|
|
19
19
|
return result;
|
|
20
20
|
}
|
|
21
21
|
export { generateHtml, generateMarkdown, customWebComponent };
|
|
22
|
-
|
|
22
|
+
export * from "./types/index.js";
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEtBQUssa0JBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFJMUU7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxTQUF5QixFQUFFLE1BQTBCO0lBQ25GLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxZQUFZLENBQUMsU0FBeUIsRUFBRSxNQUEwQjtJQUMvRSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFDOUQsY0FBYyxrQkFBa0IsQ0FBQyJ9
|
package/dist/src/parser.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { CSNInteropRoot } from "@sap/csn-interop-specification";
|
|
2
|
-
|
|
2
|
+
import { CsnRendererConfig } from "./types/index.js";
|
|
3
|
+
export declare const parser: (text: CSNInteropRoot, config?: CsnRendererConfig, generateAsHTml?: boolean) => Promise<string>;
|
package/dist/src/parser.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { schemas } from "@sap/csn-interop-specification";
|
|
2
2
|
import { renderer } from "./renderer.js";
|
|
3
|
-
export const parser = async (text, generateAsHTml = false) => {
|
|
3
|
+
export const parser = async (text, config, generateAsHTml = false) => {
|
|
4
4
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
5
5
|
let Draft07;
|
|
6
6
|
const jsonSchemaLib = await import("json-schema-library");
|
|
@@ -25,6 +25,6 @@ export const parser = async (text, generateAsHTml = false) => {
|
|
|
25
25
|
return combinedMessage;
|
|
26
26
|
}, ""));
|
|
27
27
|
}
|
|
28
|
-
return renderer(text, generateAsHTml);
|
|
28
|
+
return renderer(text, config, generateAsHTml);
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHekMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFDekIsSUFBb0IsRUFDcEIsTUFBMEIsRUFDMUIsaUJBQTBCLEtBQUssRUFDZCxFQUFFO0lBQ25CLGdFQUFnRTtJQUNoRSxJQUFJLE9BQU8sQ0FBQztJQUNaLE1BQU0sYUFBYSxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFMUQsc0NBQXNDO0lBQ3RDLElBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRixtQkFBbUI7UUFDbkIsT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzFDLENBQUM7U0FBTSxDQUFDO1FBQ04sc0JBQXNCO1FBQ3RCLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMvRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXRDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUUxQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvQyxlQUFlLElBQUksTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDO1lBQ3pFLE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDIn0=
|
package/dist/src/renderer.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { type CSNInteropRoot } from "@sap/csn-interop-specification";
|
|
2
|
-
|
|
2
|
+
import { CsnRendererConfig } from "./types/index.js";
|
|
3
|
+
export declare const renderer: (json: CSNInteropRoot, config?: CsnRendererConfig, asHTml?: boolean) => Promise<string>;
|
package/dist/src/renderer.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { marked } from "marked";
|
|
2
|
+
import { gfmHeadingId } from "marked-gfm-heading-id";
|
|
3
|
+
import { getDescriptionData } from "./rendererUtil.js";
|
|
2
4
|
// Helper functions
|
|
3
5
|
function isEntityDefinition(entry) {
|
|
4
6
|
return entry.kind === "entity";
|
|
@@ -21,46 +23,56 @@ function isCustomType(element) {
|
|
|
21
23
|
function isAssociationType(element) {
|
|
22
24
|
return "target" in element && element.type === "cds.Association";
|
|
23
25
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Get the header id the same format as GitHub does it for rendered markdown content.
|
|
28
|
+
* @param definitionName The name of a definition
|
|
29
|
+
* @param entityElementName The name of a definition element
|
|
30
|
+
* @returns The markdown headline id in specific GitHub format style
|
|
31
|
+
*
|
|
32
|
+
*/
|
|
33
|
+
function getHeaderId(definitionName, entityElementName) {
|
|
34
|
+
if (entityElementName) {
|
|
35
|
+
return `${definitionName.toLowerCase().replaceAll(".", "")}-${entityElementName.toLowerCase().replaceAll(".", "")}`;
|
|
32
36
|
}
|
|
33
|
-
return
|
|
34
|
-
}
|
|
35
|
-
function renderObject(content) {
|
|
36
|
-
return `<code>${JSON.stringify(content, undefined, 2).replace(/{/g, "{").replace(/}/g, "}")}</code>`;
|
|
37
|
+
return definitionName.toLowerCase().replaceAll(".", "");
|
|
37
38
|
}
|
|
38
39
|
// Sub render functions
|
|
39
|
-
function processEntities(entities, serviceNames, i18n) {
|
|
40
|
+
async function processEntities(entities, serviceNames, i18n, annotationValueLinkTransformers) {
|
|
41
|
+
if (!entities.length)
|
|
42
|
+
return "";
|
|
40
43
|
let output = "## Entity Definitions\n\n";
|
|
41
|
-
|
|
42
|
-
for (const [entityName, entity] of entities) {
|
|
43
|
-
output += `<div id="${entityName.toLowerCase()}"></div>\n\n`;
|
|
44
|
+
for (const [entityName, entityDefinition] of entities) {
|
|
44
45
|
output += `### ${entityName}\n\n`;
|
|
45
46
|
const dotSplittedEntityName = entityName.split(".");
|
|
46
|
-
if (dotSplittedEntityName.length > 1 &&
|
|
47
|
-
|
|
47
|
+
if (dotSplittedEntityName.length > 1 &&
|
|
48
|
+
dotSplittedEntityName[0] &&
|
|
49
|
+
serviceNames.includes(dotSplittedEntityName[0])) {
|
|
50
|
+
output += `Entity exposed via:\n[${dotSplittedEntityName[0]}](#${dotSplittedEntityName[0].toLowerCase()})\n\n`;
|
|
48
51
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
output +=
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
52
|
+
if (entityDefinition.doc) {
|
|
53
|
+
output += `${marked.parse(entityDefinition.doc)}\n`;
|
|
54
|
+
}
|
|
55
|
+
const entityRestProps = Object.entries(entityDefinition).filter(([key]) => !["kind", "doc", "elements"].includes(key));
|
|
56
|
+
output += `${await getDescriptionData(entityRestProps, annotationValueLinkTransformers, i18n)}\n\n`;
|
|
57
|
+
output += `Elements: \n\n`;
|
|
58
|
+
output += `<table>\n`;
|
|
59
|
+
output += `<tr>`;
|
|
60
|
+
output += `<th>Element</th>`;
|
|
61
|
+
output += `<th>Type</th>`;
|
|
62
|
+
output += `<th>Description</th>`;
|
|
63
|
+
output += `</tr>`;
|
|
64
|
+
for (const [elementName, elementDefinition] of Object.entries(entityDefinition.elements)) {
|
|
65
|
+
const elementRestProps = Object.entries(elementDefinition).filter(([key]) => !["type", "length", "cardinality", "on", "target"].includes(key));
|
|
66
|
+
const lengthConstraint = isLengthConstrainable(elementDefinition) && elementDefinition.length ? `(${elementDefinition.length})` : "";
|
|
67
|
+
const typeLink = isCustomType(elementDefinition)
|
|
68
|
+
? `<a href="#${elementDefinition.type.toLowerCase()}">${elementDefinition.type}</a>`
|
|
69
|
+
: elementDefinition.type + lengthConstraint;
|
|
70
|
+
let customDescriptionCellDataText = undefined;
|
|
71
|
+
// TODO: Composition handling
|
|
60
72
|
// Association handling
|
|
61
|
-
if (isAssociationType(
|
|
62
|
-
const targetEntityName =
|
|
63
|
-
const onClause =
|
|
73
|
+
if (isAssociationType(elementDefinition) && elementDefinition.target) {
|
|
74
|
+
const targetEntityName = elementDefinition.target;
|
|
75
|
+
const onClause = elementDefinition.on;
|
|
64
76
|
let targetElementName = "";
|
|
65
77
|
let viaKey = "";
|
|
66
78
|
// Extract foreign key and path descriptions
|
|
@@ -82,101 +94,86 @@ function processEntities(entities, serviceNames, i18n) {
|
|
|
82
94
|
}
|
|
83
95
|
}
|
|
84
96
|
}
|
|
85
|
-
const cardinality =
|
|
97
|
+
const cardinality = elementDefinition.cardinality?.max === "*" ? "to many" : "to one";
|
|
86
98
|
const pathDescription = targetEntityName && targetElementName
|
|
87
|
-
? `
|
|
99
|
+
? `path: <a href="#${getHeaderId(targetEntityName)}">${targetEntityName}</a>.<a href="#${getHeaderId(targetEntityName, targetElementName)}">${targetElementName}</a>`
|
|
88
100
|
: "";
|
|
89
|
-
|
|
101
|
+
customDescriptionCellDataText = `Association ${cardinality} <a href="#${getHeaderId(targetEntityName)}">${targetEntityName}</a> (${pathDescription}) via <a href="#${getHeaderId(entityName, viaKey)}">${viaKey}</a>`;
|
|
90
102
|
}
|
|
91
|
-
// Annotation handling
|
|
92
|
-
for (const [key, value] of Object.entries(element)) {
|
|
93
|
-
if (key.startsWith("@")) {
|
|
94
|
-
const formattedValue = typeof value === "object" ? renderObject(value) : renderStringWithI18n(value, i18n);
|
|
95
|
-
descriptionParts.push(`<strong>${key}</strong>: ${formattedValue}`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
const description = descriptionParts.join("<br />");
|
|
99
|
-
const typeLink = isCustomType(element)
|
|
100
|
-
? `<a href="#type-${element.type.toLowerCase()}" target="_self">${element.type}</a>`
|
|
101
|
-
: element.type;
|
|
102
103
|
output += `<tr>`;
|
|
103
|
-
output += `<td><strong id="${entityName
|
|
104
|
+
output += `<td><strong id="${getHeaderId(entityName, elementName)}">${elementName}</strong><br /><br /></td>`;
|
|
104
105
|
output += `<td>${typeLink}</td>`;
|
|
105
|
-
output += `<td>${
|
|
106
|
+
output += `<td>${await getDescriptionData(elementRestProps, annotationValueLinkTransformers, i18n, customDescriptionCellDataText)}</td>`;
|
|
106
107
|
output += `</tr>\n`;
|
|
107
108
|
}
|
|
108
109
|
output += "</table>\n\n";
|
|
109
110
|
}
|
|
110
111
|
return output;
|
|
111
112
|
}
|
|
112
|
-
function processTypes(types, i18n) {
|
|
113
|
+
async function processTypes(types, i18n, annotationValueLinkTransformers) {
|
|
113
114
|
if (!types.length)
|
|
114
115
|
return "";
|
|
115
116
|
let output = "## Type Definitions\n\n";
|
|
116
|
-
for (const [typeName,
|
|
117
|
-
const doc = definition.doc || "";
|
|
118
|
-
const lengthConstraint = isLengthConstrainable(definition) && definition.length ? `(${definition.length})` : "";
|
|
119
|
-
const annotations = Object.entries(definition).filter(([key]) => key.startsWith("@"));
|
|
120
|
-
const restProps = Object.entries(definition).filter(([key]) => !key.startsWith("@") && !["doc", "kind", "type", "length"].includes(key));
|
|
121
|
-
output += `<div id="type-${typeName.toLowerCase()}"></div>\n\n`;
|
|
117
|
+
for (const [typeName, typeDefinition] of types) {
|
|
122
118
|
output += `### ${typeName}\n\n`;
|
|
123
|
-
if (doc)
|
|
124
|
-
output += `${marked.parse(doc)}\n`;
|
|
125
|
-
output += `<table>\n<tr><th>Type</th><th>Description</th></tr>\n`;
|
|
126
|
-
const descriptionParts = restProps.map(([key, value]) => `<strong>${key}</strong>: ${typeof value === "object" ? renderObject(value) : value}`);
|
|
127
|
-
const annotationParts = annotations.map(([key, value]) => `<strong>${key}</strong>: ${typeof value === "object" ? renderObject(value) : renderStringWithI18n(value, i18n)}`);
|
|
128
|
-
output += `<tr>`;
|
|
129
|
-
output += `<td>${definition.type}${lengthConstraint}</td>`;
|
|
130
|
-
output += `<td>`;
|
|
131
|
-
if (descriptionParts.length) {
|
|
132
|
-
output += `${descriptionParts.join("<br />")}<br /><br />`;
|
|
119
|
+
if (typeDefinition.doc) {
|
|
120
|
+
output += `${marked.parse(typeDefinition.doc)}\n`;
|
|
133
121
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
output +=
|
|
122
|
+
const restProps = Object.entries(typeDefinition).filter(([key]) => !["doc", "kind", "type", "length"].includes(key));
|
|
123
|
+
if (!restProps.length)
|
|
124
|
+
return output;
|
|
125
|
+
output += `<table>\n`;
|
|
126
|
+
output += `<tr>`;
|
|
127
|
+
output += `<th>Type</th>`;
|
|
128
|
+
output += `<th>Description</th>`;
|
|
129
|
+
output += `</tr>`;
|
|
130
|
+
output += `<tr>`;
|
|
131
|
+
const lengthConstraint = isLengthConstrainable(typeDefinition) && typeDefinition.length ? `(${typeDefinition.length})` : "";
|
|
132
|
+
output += `<td>${typeDefinition.type}${lengthConstraint}</td>`;
|
|
133
|
+
output += `<td>${await getDescriptionData(restProps, annotationValueLinkTransformers, i18n)}</td>`;
|
|
134
|
+
output += `</tr>\n`;
|
|
138
135
|
output += `</table>\n\n`;
|
|
139
136
|
}
|
|
140
137
|
return output;
|
|
141
138
|
}
|
|
142
|
-
function processServices(services, entities, i18n) {
|
|
139
|
+
async function processServices(services, entities, i18n, annotationValueLinkTransformers) {
|
|
143
140
|
if (!services.length)
|
|
144
141
|
return "";
|
|
145
142
|
let output = "## Services\n\n";
|
|
146
|
-
for (const [serviceName,
|
|
147
|
-
const exposedEntities = entities.filter(([entityName]) => entityName.split(".")[0] === serviceName);
|
|
148
|
-
const doc = definition.doc || "";
|
|
149
|
-
const annotations = Object.entries(definition).filter(([key]) => key.startsWith("@"));
|
|
150
|
-
const restProps = Object.entries(definition).filter(([key]) => !key.startsWith("@") && !["doc", "kind", "type", "length"].includes(key));
|
|
151
|
-
output += `<div id="service-${serviceName.toLowerCase()}"></div>\n\n`;
|
|
143
|
+
for (const [serviceName, serviceDefinition] of services) {
|
|
152
144
|
output += `### ${serviceName}\n\n`;
|
|
153
|
-
if (doc)
|
|
154
|
-
output += `${marked.parse(doc)}\n`;
|
|
145
|
+
if (serviceDefinition.doc) {
|
|
146
|
+
output += `${marked.parse(serviceDefinition.doc)}\n`;
|
|
147
|
+
}
|
|
148
|
+
const exposedEntities = entities.filter(([entityName]) => entityName.split(".")[0] === serviceName);
|
|
155
149
|
if (exposedEntities) {
|
|
156
|
-
output += `Exposed Entities:\n\n${exposedEntities.reduce((result, [entityName]) => [...result, ` - [${entityName}](#${entityName
|
|
150
|
+
output += `Exposed Entities:\n\n${exposedEntities.reduce((result, [entityName]) => [...result, ` - [${entityName}](#${getHeaderId(entityName)})`], []).join("\n")}\n\n`;
|
|
157
151
|
}
|
|
158
|
-
|
|
152
|
+
const restProps = Object.entries(serviceDefinition).filter(([key]) => !["doc", "kind"].includes(key));
|
|
153
|
+
if (!restProps.length)
|
|
159
154
|
return output;
|
|
160
|
-
output += `<table>\n
|
|
161
|
-
const descriptionParts = restProps.map(([key, value]) => `<strong>${key}</strong>: ${typeof value === "object" ? renderObject(value) : value}`);
|
|
162
|
-
const annotationParts = annotations.map(([key, value]) => `<strong>${key}</strong>: ${typeof value === "object" ? renderObject(value) : renderStringWithI18n(value, i18n)}`);
|
|
155
|
+
output += `<table>\n`;
|
|
163
156
|
output += `<tr>`;
|
|
164
|
-
output += `<
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
output += `<strong>Annotations</strong><br />${annotationParts.join("<br />")}`;
|
|
170
|
-
}
|
|
171
|
-
output += `</td></tr>\n`;
|
|
157
|
+
output += `<th>Description</th>`;
|
|
158
|
+
output += `</tr>`;
|
|
159
|
+
output += `<tr>`;
|
|
160
|
+
output += `<td>${await getDescriptionData(restProps, annotationValueLinkTransformers, i18n)}</td>`;
|
|
161
|
+
output += `</tr>\n`;
|
|
172
162
|
output += `</table>\n\n`;
|
|
173
163
|
}
|
|
174
164
|
return output;
|
|
175
165
|
}
|
|
176
166
|
// Main renderer function
|
|
177
|
-
export const renderer = async (json, asHTml = false) => {
|
|
178
|
-
const { definitions, meta, i18n } = json;
|
|
167
|
+
export const renderer = async (json, config, asHTml = false) => {
|
|
168
|
+
const { definitions, meta, i18n, csnInteropEffective } = json;
|
|
179
169
|
let output = "";
|
|
170
|
+
switch (csnInteropEffective) {
|
|
171
|
+
case "1.0":
|
|
172
|
+
output += `>This Data Product definition description was done using the <a href="https://sap.github.io/csn-interop-specification/spec-v1/csn-interop-effective" target="_blank">Core Schema Notation Interoperability (short: CSN Interop)</a> format.\n\n`;
|
|
173
|
+
break;
|
|
174
|
+
default:
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
180
177
|
if (meta?.document?.title)
|
|
181
178
|
output += `# ${meta.document.title}\n\n`;
|
|
182
179
|
if (meta?.document?.doc)
|
|
@@ -185,13 +182,14 @@ export const renderer = async (json, asHTml = false) => {
|
|
|
185
182
|
const entities = Object.entries(definitions).filter(([_, def]) => isEntityDefinition(def));
|
|
186
183
|
const types = Object.entries(definitions).filter(([_, def]) => isTypeDefinition(def));
|
|
187
184
|
const services = Object.entries(definitions).filter(([_, def]) => isServiceDefinition(def));
|
|
188
|
-
output += processEntities(entities, services.map((serviceTuple) => serviceTuple[0]), i18n);
|
|
189
|
-
output += processTypes(types, i18n);
|
|
190
|
-
output += processServices(services, entities, i18n);
|
|
185
|
+
output += await processEntities(entities, services.map((serviceTuple) => serviceTuple[0]), i18n, config?.annotationLinkCallbacks);
|
|
186
|
+
output += await processTypes(types, i18n, config?.annotationLinkCallbacks);
|
|
187
|
+
output += await processServices(services, entities, i18n, config?.annotationLinkCallbacks);
|
|
191
188
|
if (asHTml) {
|
|
189
|
+
marked.use(gfmHeadingId());
|
|
192
190
|
const html = await marked.parse(output);
|
|
193
191
|
return html;
|
|
194
192
|
}
|
|
195
193
|
return output;
|
|
196
194
|
};
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFaEMsbUJBQW1CO0FBQ25CLFNBQVMsa0JBQWtCLENBQUMsS0FBc0I7SUFDaEQsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztBQUNqQyxDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FDbkMsS0FBMEU7SUFFMUUsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsS0FBcUI7SUFDbEQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFzQjtJQUM5QyxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO0FBQy9CLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEtBQXNCO0lBQ2pELE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUM7QUFDbEMsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE9BQXFCO0lBQ3pDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxPQUFxQztJQUM5RCxPQUFPLFFBQVEsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxpQkFBaUIsQ0FBQztBQUNuRSxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxPQUFlLEVBQUUsSUFBNEI7SUFDekUsTUFBTSxjQUFjLEdBQ2xCLE9BQU8sT0FBTyxDQUFDLE9BQU8s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
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3ZELG1CQUFtQjtBQUNuQixTQUFTLGtCQUFrQixDQUFDLEtBQXNCO0lBQ2hELE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQ25DLEtBQTBFO0lBRTFFLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUM1QixLQUFvQztJQUVwQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQXNCO0lBQzlDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUM7QUFDL0IsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsS0FBc0I7SUFDakQsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsT0FBcUI7SUFDekMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLE9BQXFDO0lBQzlELE9BQU8sUUFBUSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDO0FB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
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CSNInteropRoot } from "@sap/csn-interop-specification";
|
|
2
|
+
import { AnnotationLinkCallbacks } from "./types/index.js";
|
|
3
|
+
export declare function getDescriptionData(props: [string, unknown][], annotationLinkCallbacks: AnnotationLinkCallbacks | undefined, i18n: CSNInteropRoot["i18n"] | undefined, customDescriptionCellDataText?: string): Promise<string>;
|
|
4
|
+
export declare function renderContentWithI18n(content: unknown, i18n: CSNInteropRoot["i18n"] | undefined): string;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { marked } from "marked";
|
|
2
|
+
// TODO: extend function to support html line endings <br> and/or markdown line endings \n
|
|
3
|
+
// because the function can be called inside html table where <br> is needed and in plain markdown context where \n is needed BUT <br> just happens to work as well
|
|
4
|
+
export async function getDescriptionData(props, annotationLinkCallbacks, i18n, customDescriptionCellDataText) {
|
|
5
|
+
if (customDescriptionCellDataText)
|
|
6
|
+
return customDescriptionCellDataText;
|
|
7
|
+
const annotations = props.filter(([key]) => key.startsWith("@"));
|
|
8
|
+
const restProps = props.filter(([key]) => !key.startsWith("@"));
|
|
9
|
+
let description = "";
|
|
10
|
+
const restPropsParts = restProps.map((prop) => {
|
|
11
|
+
if (prop[0] === "doc") {
|
|
12
|
+
return `${marked.parse(typeof prop[1] === "string" ? prop[1] : JSON.stringify(prop[1]))}`;
|
|
13
|
+
}
|
|
14
|
+
return `${prop[0]}: ${renderContentWithI18n(prop[1], i18n)}`;
|
|
15
|
+
});
|
|
16
|
+
const annotationParts = await Promise.all(annotations.map(async ([key, value]) => {
|
|
17
|
+
if (annotationLinkCallbacks) {
|
|
18
|
+
let transformer = undefined;
|
|
19
|
+
for (const annotationKey in annotationLinkCallbacks) {
|
|
20
|
+
if (annotationKey === key) {
|
|
21
|
+
transformer = annotationLinkCallbacks[annotationKey];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
let linkValue = undefined;
|
|
25
|
+
if (transformer) {
|
|
26
|
+
if (transformer.constructor.name === "AsyncFunction") {
|
|
27
|
+
linkValue = await transformer(value);
|
|
28
|
+
}
|
|
29
|
+
else if (transformer.constructor.name === "Function") {
|
|
30
|
+
if (transformer(value).then) {
|
|
31
|
+
await transformer(value).then((result) => {
|
|
32
|
+
linkValue = result;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
linkValue = transformer(value);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (linkValue) {
|
|
41
|
+
return `${key}: <a href="${linkValue}" target="_blank">${renderContentWithI18n(value, i18n)}</a>`;
|
|
42
|
+
}
|
|
43
|
+
return `${key}: ${renderContentWithI18n(value, i18n)}`;
|
|
44
|
+
}
|
|
45
|
+
return `${key}: ${renderContentWithI18n(value, i18n)}`;
|
|
46
|
+
}));
|
|
47
|
+
if (restPropsParts.length) {
|
|
48
|
+
description += `${restPropsParts.join("<br />")}<br />`;
|
|
49
|
+
}
|
|
50
|
+
if (annotationParts.length) {
|
|
51
|
+
description += `${annotationParts.join("<br />")}`;
|
|
52
|
+
}
|
|
53
|
+
return description;
|
|
54
|
+
}
|
|
55
|
+
export function renderContentWithI18n(content, i18n) {
|
|
56
|
+
const escapedContent = JSON.stringify(content).replace(/{/g, "{").replace(/}/g, "}");
|
|
57
|
+
if (!i18n) {
|
|
58
|
+
return `<code>${escapedContent}</code>`;
|
|
59
|
+
}
|
|
60
|
+
if (typeof content === "string") {
|
|
61
|
+
const matches = content.match(/^{i18n>(.*)}$/);
|
|
62
|
+
const enKey = Object.keys(i18n).find((key) => key.match(/^en$/i));
|
|
63
|
+
if (matches && matches[1] && enKey && i18n[enKey] && i18n[enKey][matches[1]]) {
|
|
64
|
+
return i18n[enKey][matches[1]] || `<code>${escapedContent}</code>`;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return `<code>${escapedContent}</code>`;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXJVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlbmRlcmVyVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWhDLDBGQUEwRjtBQUMxRixtS0FBbUs7QUFDbkssTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsS0FBMEIsRUFDMUIsdUJBQTRELEVBQzVELElBQXdDLEVBQ3hDLDZCQUFzQztJQUV0QyxJQUFJLDZCQUE2QjtRQUFFLE9BQU8sNkJBQTZCLENBQUM7SUFFeEUsTUFBTSxXQUFXLEdBQXdCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEYsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRWhFLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUVyQixNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDNUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDdEIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVGLENBQUM7UUFDRCxPQUFPLEdBQUcsSUFBSSxD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
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type LinkCallbackFunction = ((annotationValue: unknown) => Promise<string>) | ((annotationValue: unknown) => string);
|
|
2
|
+
interface AnnotationLinkCallbacks<T = LinkCallbackFunction> {
|
|
3
|
+
/** Callback function to offer the possibility to provide a custom link transformer for a specific annotation key
|
|
4
|
+
Usage e.g. :
|
|
5
|
+
|
|
6
|
+
{
|
|
7
|
+
annotationLinkCallbacks: {
|
|
8
|
+
{
|
|
9
|
+
"@EndUserText.label": (_annotationValue: unknown): string => {
|
|
10
|
+
return "https://example.com/";
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
*/
|
|
17
|
+
[annotationKey: string]: T;
|
|
18
|
+
}
|
|
19
|
+
interface CsnRendererConfig {
|
|
20
|
+
annotationLinkCallbacks?: AnnotationLinkCallbacks;
|
|
21
|
+
}
|
|
22
|
+
export { CsnRendererConfig, AnnotationLinkCallbacks, LinkCallbackFunction };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package",
|
|
3
3
|
"name": "@sap/csn-interop-renderer",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.0",
|
|
5
5
|
"description": "Converts documents defined using CSN Interoperability Specification into markdown/HTML human readable documentation pages.",
|
|
6
6
|
"keywords": [],
|
|
7
7
|
"author": "SAP SE",
|
|
@@ -40,18 +40,19 @@
|
|
|
40
40
|
"render-examples": "node ./scripts/renderExamples.cjs"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@sap/csn-interop-specification": "1.0.
|
|
43
|
+
"@sap/csn-interop-specification": "1.0.3",
|
|
44
44
|
"commander": "13.1.0",
|
|
45
45
|
"json-schema-library": "10.0.0-rc7",
|
|
46
|
-
"marked": "15.0.
|
|
46
|
+
"marked": "15.0.8",
|
|
47
|
+
"marked-gfm-heading-id": "4.1.1"
|
|
47
48
|
},
|
|
48
49
|
"devDependencies": {
|
|
49
50
|
"@expo/spawn-async": "1.7.2",
|
|
50
51
|
"@sap/eslint-config": "0.4.0",
|
|
51
|
-
"@tsconfig/node22": "22.0.
|
|
52
|
+
"@tsconfig/node22": "22.0.1",
|
|
52
53
|
"@types/jest": "29.5.14",
|
|
53
54
|
"@types/tmp": "0.2.6",
|
|
54
|
-
"eslint": "9.
|
|
55
|
+
"eslint": "9.24.0",
|
|
55
56
|
"husky": "9.1.7",
|
|
56
57
|
"is-ci": "4.1.0",
|
|
57
58
|
"jest": "29.7.0",
|
|
@@ -63,9 +64,9 @@
|
|
|
63
64
|
"prettier": "3.5.3",
|
|
64
65
|
"rimraf": "6.0.1",
|
|
65
66
|
"tmp": "0.2.3",
|
|
66
|
-
"ts-jest": "29.
|
|
67
|
+
"ts-jest": "29.3.1",
|
|
67
68
|
"tsx": "4.19.3",
|
|
68
|
-
"typescript": "5.8.
|
|
69
|
+
"typescript": "5.8.3"
|
|
69
70
|
},
|
|
70
71
|
"lint-staged": {
|
|
71
72
|
"./**/*.{js,ts}": [
|