@sap/csn-interop-renderer 0.2.1 → 0.3.1
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 +4 -2
- package/dist/src/customWebComponent/csnRenderer.js +8 -15
- package/dist/src/index.d.ts +9 -7
- package/dist/src/index.js +10 -9
- package/dist/src/parser.d.ts +3 -2
- package/dist/src/parser.js +3 -3
- package/dist/src/renderer.d.ts +3 -2
- package/dist/src/renderer.js +81 -95
- 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/package.json +10 -10
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);
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export interface CsnRendererProps {
|
|
2
|
-
/** @param source A valid text (containing JSON
|
|
2
|
+
/** @param source A valid text (containing JSON CSNInteropEffectiveDocument object).*/
|
|
3
3
|
source: string;
|
|
4
4
|
}
|
|
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
|
-
import {
|
|
2
|
+
import { CSNInteropEffectiveDocument } from "@sap/csn-interop-specification";
|
|
3
|
+
import { CsnRendererConfig } from "./types/index.js";
|
|
3
4
|
/**
|
|
4
|
-
* Converts JSON
|
|
5
|
+
* Converts JSON CSNInteropEffectiveDocument object into an markdown string.
|
|
5
6
|
*
|
|
6
|
-
* @param inputText A valid JSON
|
|
7
|
+
* @param inputText A valid JSON CSNInteropEffectiveDocument object.
|
|
7
8
|
*/
|
|
8
|
-
declare function generateMarkdown(inputText:
|
|
9
|
+
declare function generateMarkdown(inputText: CSNInteropEffectiveDocument, config?: CsnRendererConfig): Promise<string>;
|
|
9
10
|
/**
|
|
10
|
-
* Converts JSON
|
|
11
|
+
* Converts JSON CSNInteropEffectiveDocument object into an html string.
|
|
11
12
|
*
|
|
12
|
-
* @param inputText A valid JSON
|
|
13
|
+
* @param inputText A valid JSON CSNInteropEffectiveDocument object.
|
|
13
14
|
*/
|
|
14
|
-
declare function generateHtml(inputText:
|
|
15
|
+
declare function generateHtml(inputText: CSNInteropEffectiveDocument, config?: CsnRendererConfig): Promise<string>;
|
|
15
16
|
export { generateHtml, generateMarkdown, customWebComponent };
|
|
17
|
+
export * from "./types/index.js";
|
package/dist/src/index.js
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { parser } from "./parser.js";
|
|
2
2
|
import * as customWebComponent from "./customWebComponent/csnRenderer.js";
|
|
3
3
|
/**
|
|
4
|
-
* Converts JSON
|
|
4
|
+
* Converts JSON CSNInteropEffectiveDocument object into an markdown string.
|
|
5
5
|
*
|
|
6
|
-
* @param inputText A valid JSON
|
|
6
|
+
* @param inputText A valid JSON CSNInteropEffectiveDocument 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
|
/**
|
|
13
|
-
* Converts JSON
|
|
13
|
+
* Converts JSON CSNInteropEffectiveDocument object into an html string.
|
|
14
14
|
*
|
|
15
|
-
* @param inputText A valid JSON
|
|
15
|
+
* @param inputText A valid JSON CSNInteropEffectiveDocument 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEtBQUssa0JBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFJMUU7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxTQUFzQyxFQUFFLE1BQTBCO0lBQ2hHLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxZQUFZLENBQUMsU0FBc0MsRUFBRSxNQUEwQjtJQUM1RixNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFDOUQsY0FBYyxrQkFBa0IsQ0FBQyJ9
|
package/dist/src/parser.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { CSNInteropEffectiveDocument } from "@sap/csn-interop-specification";
|
|
2
|
+
import { CsnRendererConfig } from "./types/index.js";
|
|
3
|
+
export declare const parser: (text: CSNInteropEffectiveDocument, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQStCLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHekMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFDekIsSUFBaUMsRUFDakMsTUFBMEIsRUFDMUIsaUJBQTBCLEtBQUssRUFDZCxFQUFFO0lBQ25CLGdFQUFnRTtJQUNoRSxJQUFJLE9BQU8sQ0FBQztJQUNaLE1BQU0sYUFBYSxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFMUQsc0NBQXNDO0lBQ3RDLElBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRixtQkFBbUI7UUFDbkIsT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzFDLENBQUM7U0FBTSxDQUFDO1FBQ04sc0JBQXNCO1FBQ3RCLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMvRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXRDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUUxQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvQyxlQUFlLElBQUksTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDO1lBQ3pFLE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDIn0=
|
package/dist/src/renderer.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
|
|
1
|
+
import { type CSNInteropEffectiveDocument } from "@sap/csn-interop-specification";
|
|
2
|
+
import { CsnRendererConfig } from "./types/index.js";
|
|
3
|
+
export declare const renderer: (json: CSNInteropEffectiveDocument, config?: CsnRendererConfig, asHTml?: boolean) => Promise<string>;
|
package/dist/src/renderer.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { marked } from "marked";
|
|
2
2
|
import { gfmHeadingId } from "marked-gfm-heading-id";
|
|
3
|
+
import { getDescriptionData } from "./rendererUtil.js";
|
|
3
4
|
// Helper functions
|
|
4
5
|
function isEntityDefinition(entry) {
|
|
5
6
|
return entry.kind === "entity";
|
|
@@ -22,17 +23,6 @@ function isCustomType(element) {
|
|
|
22
23
|
function isAssociationType(element) {
|
|
23
24
|
return "target" in element && element.type === "cds.Association";
|
|
24
25
|
}
|
|
25
|
-
function renderStringWithI18n(content, i18n) {
|
|
26
|
-
const esacpedContent = typeof content.replace === "function" ? content.replace(/{/g, "{").replace(/}/g, "}") : content;
|
|
27
|
-
if (!i18n || typeof content?.match !== "function")
|
|
28
|
-
return esacpedContent;
|
|
29
|
-
const matches = content.match(/^{i18n>(.*)}$/);
|
|
30
|
-
const enKey = Object.keys(i18n).find((key) => key.match(/^en$/i));
|
|
31
|
-
if (matches?.[1] && enKey && i18n[enKey]?.[matches[1]]) {
|
|
32
|
-
return i18n[enKey][matches[1]];
|
|
33
|
-
}
|
|
34
|
-
return esacpedContent;
|
|
35
|
-
}
|
|
36
26
|
/**
|
|
37
27
|
* Get the header id the same format as GitHub does it for rendered markdown content.
|
|
38
28
|
* @param definitionName The name of a definition
|
|
@@ -46,34 +36,43 @@ function getHeaderId(definitionName, entityElementName) {
|
|
|
46
36
|
}
|
|
47
37
|
return definitionName.toLowerCase().replaceAll(".", "");
|
|
48
38
|
}
|
|
49
|
-
function renderObject(content) {
|
|
50
|
-
return `<code>${JSON.stringify(content, undefined, 2).replace(/{/g, "{").replace(/}/g, "}")}</code>`;
|
|
51
|
-
}
|
|
52
39
|
// Sub render functions
|
|
53
|
-
function processEntities(entities, serviceNames, i18n) {
|
|
40
|
+
async function processEntities(entities, serviceNames, i18n, annotationValueLinkTransformers) {
|
|
41
|
+
if (!entities.length)
|
|
42
|
+
return "";
|
|
54
43
|
let output = "## Entity Definitions\n\n";
|
|
55
|
-
|
|
56
|
-
for (const [entityName, entity] of entities) {
|
|
44
|
+
for (const [entityName, entityDefinition] of entities) {
|
|
57
45
|
output += `### ${entityName}\n\n`;
|
|
58
46
|
const dotSplittedEntityName = entityName.split(".");
|
|
59
|
-
if (dotSplittedEntityName.length > 1 &&
|
|
60
|
-
|
|
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`;
|
|
61
51
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
output +=
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
|
73
72
|
// Association handling
|
|
74
|
-
if (isAssociationType(
|
|
75
|
-
const targetEntityName =
|
|
76
|
-
const onClause =
|
|
73
|
+
if (isAssociationType(elementDefinition) && elementDefinition.target) {
|
|
74
|
+
const targetEntityName = elementDefinition.target;
|
|
75
|
+
const onClause = elementDefinition.on;
|
|
77
76
|
let targetElementName = "";
|
|
78
77
|
let viaKey = "";
|
|
79
78
|
// Extract foreign key and path descriptions
|
|
@@ -95,99 +94,86 @@ function processEntities(entities, serviceNames, i18n) {
|
|
|
95
94
|
}
|
|
96
95
|
}
|
|
97
96
|
}
|
|
98
|
-
const cardinality =
|
|
97
|
+
const cardinality = elementDefinition.cardinality?.max === "*" ? "to many" : "to one";
|
|
99
98
|
const pathDescription = targetEntityName && targetElementName
|
|
100
|
-
? `
|
|
99
|
+
? `path: <a href="#${getHeaderId(targetEntityName)}">${targetEntityName}</a>.<a href="#${getHeaderId(targetEntityName, targetElementName)}">${targetElementName}</a>`
|
|
101
100
|
: "";
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
// Annotation handling
|
|
105
|
-
for (const [key, value] of Object.entries(element)) {
|
|
106
|
-
if (key.startsWith("@")) {
|
|
107
|
-
const formattedValue = typeof value === "object" ? renderObject(value) : renderStringWithI18n(value, i18n);
|
|
108
|
-
descriptionParts.push(`<strong>${key}</strong>: ${formattedValue}`);
|
|
109
|
-
}
|
|
101
|
+
customDescriptionCellDataText = `Association ${cardinality} <a href="#${getHeaderId(targetEntityName)}">${targetEntityName}</a> (${pathDescription}) via <a href="#${getHeaderId(entityName, viaKey)}">${viaKey}</a>`;
|
|
110
102
|
}
|
|
111
|
-
const description = descriptionParts.join("<br />");
|
|
112
|
-
const typeLink = isCustomType(element)
|
|
113
|
-
? `<a href="#${element.type.toLowerCase()}">${element.type}</a>`
|
|
114
|
-
: element.type;
|
|
115
103
|
output += `<tr>`;
|
|
116
|
-
output += `<td><strong id="${getHeaderId(entityName, elementName)}">${elementName}</strong
|
|
104
|
+
output += `<td><strong id="${getHeaderId(entityName, elementName)}">${elementName}</strong><br /><br /></td>`;
|
|
117
105
|
output += `<td>${typeLink}</td>`;
|
|
118
|
-
output += `<td>${
|
|
106
|
+
output += `<td>${await getDescriptionData(elementRestProps, annotationValueLinkTransformers, i18n, customDescriptionCellDataText)}</td>`;
|
|
119
107
|
output += `</tr>\n`;
|
|
120
108
|
}
|
|
121
109
|
output += "</table>\n\n";
|
|
122
110
|
}
|
|
123
111
|
return output;
|
|
124
112
|
}
|
|
125
|
-
function processTypes(types, i18n) {
|
|
113
|
+
async function processTypes(types, i18n, annotationValueLinkTransformers) {
|
|
126
114
|
if (!types.length)
|
|
127
115
|
return "";
|
|
128
116
|
let output = "## Type Definitions\n\n";
|
|
129
|
-
for (const [typeName,
|
|
130
|
-
const doc = definition.doc || "";
|
|
131
|
-
const lengthConstraint = isLengthConstrainable(definition) && definition.length ? `(${definition.length})` : "";
|
|
132
|
-
const annotations = Object.entries(definition).filter(([key]) => key.startsWith("@"));
|
|
133
|
-
const restProps = Object.entries(definition).filter(([key]) => !key.startsWith("@") && !["doc", "kind", "type", "length"].includes(key));
|
|
117
|
+
for (const [typeName, typeDefinition] of types) {
|
|
134
118
|
output += `### ${typeName}\n\n`;
|
|
135
|
-
if (doc)
|
|
136
|
-
output += `${marked.parse(doc)}\n`;
|
|
137
|
-
output += `<table>\n<tr><th>Type</th><th>Description</th></tr>\n`;
|
|
138
|
-
const descriptionParts = restProps.map(([key, value]) => `<strong>${key}</strong>: ${typeof value === "object" ? renderObject(value) : value}`);
|
|
139
|
-
const annotationParts = annotations.map(([key, value]) => `<strong>${key}</strong>: ${typeof value === "object" ? renderObject(value) : renderStringWithI18n(value, i18n)}`);
|
|
140
|
-
output += `<tr>`;
|
|
141
|
-
output += `<td>${definition.type}${lengthConstraint}</td>`;
|
|
142
|
-
output += `<td>`;
|
|
143
|
-
if (descriptionParts.length) {
|
|
144
|
-
output += `${descriptionParts.join("<br />")}<br /><br />`;
|
|
145
|
-
}
|
|
146
|
-
if (annotationParts.length) {
|
|
147
|
-
output += `<strong>Annotations</strong><br />${annotationParts.join("<br />")}`;
|
|
119
|
+
if (typeDefinition.doc) {
|
|
120
|
+
output += `${marked.parse(typeDefinition.doc)}\n`;
|
|
148
121
|
}
|
|
149
|
-
|
|
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`;
|
|
150
135
|
output += `</table>\n\n`;
|
|
151
136
|
}
|
|
152
137
|
return output;
|
|
153
138
|
}
|
|
154
|
-
function processServices(services, entities, i18n) {
|
|
139
|
+
async function processServices(services, entities, i18n, annotationValueLinkTransformers) {
|
|
155
140
|
if (!services.length)
|
|
156
141
|
return "";
|
|
157
142
|
let output = "## Services\n\n";
|
|
158
|
-
for (const [serviceName,
|
|
159
|
-
const exposedEntities = entities.filter(([entityName]) => entityName.split(".")[0] === serviceName);
|
|
160
|
-
const doc = definition.doc || "";
|
|
161
|
-
const annotations = Object.entries(definition).filter(([key]) => key.startsWith("@"));
|
|
162
|
-
const restProps = Object.entries(definition).filter(([key]) => !key.startsWith("@") && !["doc", "kind", "type", "length"].includes(key));
|
|
143
|
+
for (const [serviceName, serviceDefinition] of services) {
|
|
163
144
|
output += `### ${serviceName}\n\n`;
|
|
164
|
-
if (doc)
|
|
165
|
-
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);
|
|
166
149
|
if (exposedEntities) {
|
|
167
150
|
output += `Exposed Entities:\n\n${exposedEntities.reduce((result, [entityName]) => [...result, ` - [${entityName}](#${getHeaderId(entityName)})`], []).join("\n")}\n\n`;
|
|
168
151
|
}
|
|
169
|
-
|
|
152
|
+
const restProps = Object.entries(serviceDefinition).filter(([key]) => !["doc", "kind"].includes(key));
|
|
153
|
+
if (!restProps.length)
|
|
170
154
|
return output;
|
|
171
|
-
output += `<table>\n
|
|
172
|
-
const descriptionParts = restProps.map(([key, value]) => `<strong>${key}</strong>: ${typeof value === "object" ? renderObject(value) : value}`);
|
|
173
|
-
const annotationParts = annotations.map(([key, value]) => `<strong>${key}</strong>: ${typeof value === "object" ? renderObject(value) : renderStringWithI18n(value, i18n)}`);
|
|
155
|
+
output += `<table>\n`;
|
|
174
156
|
output += `<tr>`;
|
|
175
|
-
output += `<
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
output += `<strong>Annotations</strong><br />${annotationParts.join("<br />")}`;
|
|
181
|
-
}
|
|
182
|
-
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`;
|
|
183
162
|
output += `</table>\n\n`;
|
|
184
163
|
}
|
|
185
164
|
return output;
|
|
186
165
|
}
|
|
187
166
|
// Main renderer function
|
|
188
|
-
export const renderer = async (json, asHTml = false) => {
|
|
189
|
-
const { definitions, meta, i18n } = json;
|
|
167
|
+
export const renderer = async (json, config, asHTml = false) => {
|
|
168
|
+
const { definitions, meta, i18n, csnInteropEffective } = json;
|
|
190
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
|
+
}
|
|
191
177
|
if (meta?.document?.title)
|
|
192
178
|
output += `# ${meta.document.title}\n\n`;
|
|
193
179
|
if (meta?.document?.doc)
|
|
@@ -196,9 +182,9 @@ export const renderer = async (json, asHTml = false) => {
|
|
|
196
182
|
const entities = Object.entries(definitions).filter(([_, def]) => isEntityDefinition(def));
|
|
197
183
|
const types = Object.entries(definitions).filter(([_, def]) => isTypeDefinition(def));
|
|
198
184
|
const services = Object.entries(definitions).filter(([_, def]) => isServiceDefinition(def));
|
|
199
|
-
output += processEntities(entities, services.map((serviceTuple) => serviceTuple[0]), i18n);
|
|
200
|
-
output += processTypes(types, i18n);
|
|
201
|
-
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);
|
|
202
188
|
if (asHTml) {
|
|
203
189
|
marked.use(gfmHeadingId());
|
|
204
190
|
const html = await marked.parse(output);
|
|
@@ -206,4 +192,4 @@ export const renderer = async (json, asHTml = false) => {
|
|
|
206
192
|
}
|
|
207
193
|
return output;
|
|
208
194
|
};
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELG1CQUFtQjtBQUNuQixTQUFTLGtCQUFrQixDQUFDLEtBQXNCO0lBQ2hELE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQ25DLEtBQTBFO0lBRTFFLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEtBQXFCO0lBQ2xELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBc0I7SUFDOUMsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztBQUMvQixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFzQjtJQUNqRCxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxPQUFxQjtJQUN6QyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsT0FBcUM7SUFDOUQsT0FBTyxRQUFRLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUM7QUFDbkUsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsT0FBZSxFQUFFLElBQTRC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
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3ZELG1CQUFtQjtBQUNuQixTQUFTLGtCQUFrQixDQUFDLEtBQXNCO0lBQ2hELE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQ25DLEtBQTBFO0lBRTFFLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUM1QixLQUFvQztJQUVwQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQXNCO0lBQzlDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUM7QUFDL0IsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsS0FBc0I7SUFDakQsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsT0FBcUI7SUFDekMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLE9BQXFDO0lBQzlELE9BQU8sUUFBUSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDO0FB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
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CSNInteropEffectiveDocument } from "@sap/csn-interop-specification";
|
|
2
|
+
import { AnnotationLinkCallbacks } from "./types/index.js";
|
|
3
|
+
export declare function getDescriptionData(props: [string, unknown][], annotationLinkCallbacks: AnnotationLinkCallbacks | undefined, i18n: CSNInteropEffectiveDocument["i18n"] | undefined, customDescriptionCellDataText?: string): Promise<string>;
|
|
4
|
+
export declare function renderContentWithI18n(content: unknown, i18n: CSNInteropEffectiveDocument["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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXJVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlbmRlcmVyVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWhDLDBGQUEwRjtBQUMxRixtS0FBbUs7QUFDbkssTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsS0FBMEIsRUFDMUIsdUJBQTRELEVBQzVELElBQXFELEVBQ3JELDZCQUFzQztJQUV0QyxJQUFJLDZCQUE2QjtRQUFFLE9BQU8sNkJBQTZCLENBQUM7SUFFeEUsTUFBTSxXQUFXLEdBQXdCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEYsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRWhFLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUVyQixNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDNUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDdEIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVGLENBQUM7UUFDRCxPQUFPLEdBQUcsSUFBSSxD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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.1",
|
|
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,19 +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.4",
|
|
44
44
|
"commander": "13.1.0",
|
|
45
|
-
"json-schema-library": "
|
|
46
|
-
"marked": "15.0.
|
|
45
|
+
"json-schema-library": "9.2.1",
|
|
46
|
+
"marked": "15.0.11",
|
|
47
47
|
"marked-gfm-heading-id": "4.1.1"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@expo/spawn-async": "1.7.2",
|
|
51
51
|
"@sap/eslint-config": "0.4.0",
|
|
52
|
-
"@tsconfig/node22": "22.0.
|
|
52
|
+
"@tsconfig/node22": "22.0.1",
|
|
53
53
|
"@types/jest": "29.5.14",
|
|
54
54
|
"@types/tmp": "0.2.6",
|
|
55
|
-
"eslint": "9.
|
|
55
|
+
"eslint": "9.26.0",
|
|
56
56
|
"husky": "9.1.7",
|
|
57
57
|
"is-ci": "4.1.0",
|
|
58
58
|
"jest": "29.7.0",
|
|
@@ -60,13 +60,13 @@
|
|
|
60
60
|
"jest-environment-jsdom": "29.7.0",
|
|
61
61
|
"jest-junit": "16.0.0",
|
|
62
62
|
"jest-watch-typeahead": "2.2.2",
|
|
63
|
-
"lint-staged": "
|
|
63
|
+
"lint-staged": "16.0.0",
|
|
64
64
|
"prettier": "3.5.3",
|
|
65
65
|
"rimraf": "6.0.1",
|
|
66
66
|
"tmp": "0.2.3",
|
|
67
|
-
"ts-jest": "29.
|
|
68
|
-
"tsx": "4.19.
|
|
69
|
-
"typescript": "5.8.
|
|
67
|
+
"ts-jest": "29.3.3",
|
|
68
|
+
"tsx": "4.19.4",
|
|
69
|
+
"typescript": "5.8.3"
|
|
70
70
|
},
|
|
71
71
|
"lint-staged": {
|
|
72
72
|
"./**/*.{js,ts}": [
|