@c-rex/services 0.3.0-build.51 → 0.3.0-build.52

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.
@@ -1,4 +1,4 @@
1
- import { DirectoryNodeModel, ObjectRefModel } from '@c-rex/interfaces';
1
+ import { InformationUnitModel, ObjectRefModel, DirectoryNodeModel } from '@c-rex/interfaces';
2
2
 
3
3
  declare const IIRDS_RESOURCE_PLACEHOLDER_PREFIX = "&iirds;#";
4
4
  declare const IIRDS_STANDARD_NAMESPACE_RESOURCE_ID = "http://iirds.tekom.de/iirds#";
@@ -10,5 +10,20 @@ declare const matchesRootStructureType: (actual?: string | null, expected?: stri
10
10
  declare const getTocRefLabel: (ref?: ObjectRefModel | null, fallback?: string) => string;
11
11
  declare const getTocNodeLabel: (node?: DirectoryNodeModel | null) => string;
12
12
  declare const getTopicIdFromDirectoryNode: (node?: DirectoryNodeModel | null) => string | undefined;
13
+ type EmbeddedInformationUnitRef = ObjectRefModel & Pick<InformationUnitModel, "renditions">;
14
+ type TocHtmlTarget = {
15
+ source: string;
16
+ anchor: string;
17
+ };
18
+ /** Resolves the source of the HTML rendition even when it has no selector. */
19
+ declare const getTocHtmlSourceFromInformationUnit: (topic?: InformationUnitModel | EmbeddedInformationUnitRef | null) => string | undefined;
20
+ /**
21
+ * Resolves the HTML file and DOM anchor carried by an information unit.
22
+ * The IDS payload exposes the DOM id/name through rendition selector `value`,
23
+ * even though the generated selector model does not currently declare it.
24
+ */
25
+ declare const getTocHtmlTargetFromInformationUnit: (topic?: InformationUnitModel | EmbeddedInformationUnitRef | null) => TocHtmlTarget | undefined;
26
+ /** Resolves the HTML target from the first topic embedded in a TOC node. */
27
+ declare const getTocHtmlTargetFromDirectoryNode: (node?: DirectoryNodeModel | null) => TocHtmlTarget | undefined;
13
28
 
14
- export { DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID, IIRDS_RESOURCE_PLACEHOLDER_PREFIX, IIRDS_STANDARD_NAMESPACE_RESOURCE_ID, INDEX_ROOT_STRUCTURE_TYPE_RESOURCE_ID, getTocNodeLabel, getTocRefLabel, getTopicIdFromDirectoryNode, matchesRootStructureType, normalizeRootStructureTypeResourceId, normalizeStructureTypeResourceIdForComparison };
29
+ export { DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID, IIRDS_RESOURCE_PLACEHOLDER_PREFIX, IIRDS_STANDARD_NAMESPACE_RESOURCE_ID, INDEX_ROOT_STRUCTURE_TYPE_RESOURCE_ID, type TocHtmlTarget, getTocHtmlSourceFromInformationUnit, getTocHtmlTargetFromDirectoryNode, getTocHtmlTargetFromInformationUnit, getTocNodeLabel, getTocRefLabel, getTopicIdFromDirectoryNode, matchesRootStructureType, normalizeRootStructureTypeResourceId, normalizeStructureTypeResourceIdForComparison };
@@ -1,4 +1,4 @@
1
- import { DirectoryNodeModel, ObjectRefModel } from '@c-rex/interfaces';
1
+ import { InformationUnitModel, ObjectRefModel, DirectoryNodeModel } from '@c-rex/interfaces';
2
2
 
3
3
  declare const IIRDS_RESOURCE_PLACEHOLDER_PREFIX = "&iirds;#";
4
4
  declare const IIRDS_STANDARD_NAMESPACE_RESOURCE_ID = "http://iirds.tekom.de/iirds#";
@@ -10,5 +10,20 @@ declare const matchesRootStructureType: (actual?: string | null, expected?: stri
10
10
  declare const getTocRefLabel: (ref?: ObjectRefModel | null, fallback?: string) => string;
11
11
  declare const getTocNodeLabel: (node?: DirectoryNodeModel | null) => string;
12
12
  declare const getTopicIdFromDirectoryNode: (node?: DirectoryNodeModel | null) => string | undefined;
13
+ type EmbeddedInformationUnitRef = ObjectRefModel & Pick<InformationUnitModel, "renditions">;
14
+ type TocHtmlTarget = {
15
+ source: string;
16
+ anchor: string;
17
+ };
18
+ /** Resolves the source of the HTML rendition even when it has no selector. */
19
+ declare const getTocHtmlSourceFromInformationUnit: (topic?: InformationUnitModel | EmbeddedInformationUnitRef | null) => string | undefined;
20
+ /**
21
+ * Resolves the HTML file and DOM anchor carried by an information unit.
22
+ * The IDS payload exposes the DOM id/name through rendition selector `value`,
23
+ * even though the generated selector model does not currently declare it.
24
+ */
25
+ declare const getTocHtmlTargetFromInformationUnit: (topic?: InformationUnitModel | EmbeddedInformationUnitRef | null) => TocHtmlTarget | undefined;
26
+ /** Resolves the HTML target from the first topic embedded in a TOC node. */
27
+ declare const getTocHtmlTargetFromDirectoryNode: (node?: DirectoryNodeModel | null) => TocHtmlTarget | undefined;
13
28
 
14
- export { DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID, IIRDS_RESOURCE_PLACEHOLDER_PREFIX, IIRDS_STANDARD_NAMESPACE_RESOURCE_ID, INDEX_ROOT_STRUCTURE_TYPE_RESOURCE_ID, getTocNodeLabel, getTocRefLabel, getTopicIdFromDirectoryNode, matchesRootStructureType, normalizeRootStructureTypeResourceId, normalizeStructureTypeResourceIdForComparison };
29
+ export { DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID, IIRDS_RESOURCE_PLACEHOLDER_PREFIX, IIRDS_STANDARD_NAMESPACE_RESOURCE_ID, INDEX_ROOT_STRUCTURE_TYPE_RESOURCE_ID, type TocHtmlTarget, getTocHtmlSourceFromInformationUnit, getTocHtmlTargetFromDirectoryNode, getTocHtmlTargetFromInformationUnit, getTocNodeLabel, getTocRefLabel, getTopicIdFromDirectoryNode, matchesRootStructureType, normalizeRootStructureTypeResourceId, normalizeStructureTypeResourceIdForComparison };
@@ -24,6 +24,9 @@ __export(toc_structure_exports, {
24
24
  IIRDS_RESOURCE_PLACEHOLDER_PREFIX: () => IIRDS_RESOURCE_PLACEHOLDER_PREFIX,
25
25
  IIRDS_STANDARD_NAMESPACE_RESOURCE_ID: () => IIRDS_STANDARD_NAMESPACE_RESOURCE_ID,
26
26
  INDEX_ROOT_STRUCTURE_TYPE_RESOURCE_ID: () => INDEX_ROOT_STRUCTURE_TYPE_RESOURCE_ID,
27
+ getTocHtmlSourceFromInformationUnit: () => getTocHtmlSourceFromInformationUnit,
28
+ getTocHtmlTargetFromDirectoryNode: () => getTocHtmlTargetFromDirectoryNode,
29
+ getTocHtmlTargetFromInformationUnit: () => getTocHtmlTargetFromInformationUnit,
27
30
  getTocNodeLabel: () => getTocNodeLabel,
28
31
  getTocRefLabel: () => getTocRefLabel,
29
32
  getTopicIdFromDirectoryNode: () => getTopicIdFromDirectoryNode,
@@ -32,6 +35,7 @@ __export(toc_structure_exports, {
32
35
  normalizeStructureTypeResourceIdForComparison: () => normalizeStructureTypeResourceIdForComparison
33
36
  });
34
37
  module.exports = __toCommonJS(toc_structure_exports);
38
+ var import_utils = require("@c-rex/utils");
35
39
  var IIRDS_RESOURCE_PLACEHOLDER_PREFIX = "&iirds;#";
36
40
  var IIRDS_STANDARD_NAMESPACE_RESOURCE_ID = "http://iirds.tekom.de/iirds#";
37
41
  var DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID = `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}TableOfContents`;
@@ -73,12 +77,29 @@ var getTopicIdFromDirectoryNode = (node) => {
73
77
  const topicId = node?.informationUnits?.[0]?.shortId;
74
78
  return topicId || void 0;
75
79
  };
80
+ var getTocHtmlSourceFromInformationUnit = (topic) => {
81
+ const source = (0, import_utils.getHtmlRendition)(topic?.renditions)?.source?.trim();
82
+ return source || void 0;
83
+ };
84
+ var getTocHtmlTargetFromInformationUnit = (topic) => {
85
+ const rendition = (0, import_utils.getHtmlRendition)(topic?.renditions);
86
+ const source = getTocHtmlSourceFromInformationUnit(topic);
87
+ const anchor = rendition?.selectors?.map((selector) => selector.value?.trim()).find((value) => Boolean(value));
88
+ if (!source || !anchor) return void 0;
89
+ return { source, anchor };
90
+ };
91
+ var getTocHtmlTargetFromDirectoryNode = (node) => getTocHtmlTargetFromInformationUnit(
92
+ node?.informationUnits?.[0]
93
+ );
76
94
  // Annotate the CommonJS export names for ESM import in node:
77
95
  0 && (module.exports = {
78
96
  DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID,
79
97
  IIRDS_RESOURCE_PLACEHOLDER_PREFIX,
80
98
  IIRDS_STANDARD_NAMESPACE_RESOURCE_ID,
81
99
  INDEX_ROOT_STRUCTURE_TYPE_RESOURCE_ID,
100
+ getTocHtmlSourceFromInformationUnit,
101
+ getTocHtmlTargetFromDirectoryNode,
102
+ getTocHtmlTargetFromInformationUnit,
82
103
  getTocNodeLabel,
83
104
  getTocRefLabel,
84
105
  getTopicIdFromDirectoryNode,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/toc-structure.ts"],"sourcesContent":["import type { DirectoryNodeModel, ObjectRefModel } from \"@c-rex/interfaces\";\r\n\r\nexport const IIRDS_RESOURCE_PLACEHOLDER_PREFIX = \"&iirds;#\";\r\nexport const IIRDS_STANDARD_NAMESPACE_RESOURCE_ID =\r\n \"http://iirds.tekom.de/iirds#\";\r\nexport const DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID = `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}TableOfContents`;\r\nexport const INDEX_ROOT_STRUCTURE_TYPE_RESOURCE_ID = `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}Index`;\r\n\r\nexport const normalizeRootStructureTypeResourceId = (\r\n resourceId?: string | null,\r\n): string => {\r\n if (!resourceId?.trim()) {\r\n return DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID;\r\n }\r\n\r\n const normalized = resourceId.trim();\r\n if (normalized.startsWith(IIRDS_RESOURCE_PLACEHOLDER_PREFIX)) {\r\n return `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}${normalized.slice(IIRDS_RESOURCE_PLACEHOLDER_PREFIX.length)}`;\r\n }\r\n\r\n return normalized;\r\n};\r\n\r\nexport const normalizeStructureTypeResourceIdForComparison = (\r\n resourceId?: string | null,\r\n): string | undefined => {\r\n if (!resourceId?.trim()) {\r\n return undefined;\r\n }\r\n\r\n const normalized = normalizeRootStructureTypeResourceId(resourceId.trim());\r\n return normalized.replace(\r\n /^https:\\/\\/iirds\\.tekom\\.de\\/iirds#/i,\r\n IIRDS_STANDARD_NAMESPACE_RESOURCE_ID,\r\n );\r\n};\r\n\r\nexport const matchesRootStructureType = (\r\n actual?: string | null,\r\n expected?: string | null,\r\n): boolean => {\r\n const normalizedActual =\r\n normalizeStructureTypeResourceIdForComparison(actual);\r\n const normalizedExpected =\r\n normalizeStructureTypeResourceIdForComparison(expected);\r\n return Boolean(\r\n normalizedActual &&\r\n normalizedExpected &&\r\n normalizedActual === normalizedExpected,\r\n );\r\n};\r\n\r\nexport const getTocRefLabel = (\r\n ref?: ObjectRefModel | null,\r\n fallback?: string,\r\n): string => {\r\n return (\r\n ref?.labels?.[0]?.value?.trim() || fallback || ref?.shortId || \"Ohne Titel\"\r\n );\r\n};\r\n\r\nexport const getTocNodeLabel = (node?: DirectoryNodeModel | null): string => {\r\n return node?.labels?.[0]?.value?.trim() || node?.shortId || \"Ohne Titel\";\r\n};\r\n\r\nexport const getTopicIdFromDirectoryNode = (\r\n node?: DirectoryNodeModel | null,\r\n): string | undefined => {\r\n const topicId = node?.informationUnits?.[0]?.shortId;\r\n return topicId || undefined;\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,IAAM,oCAAoC;AAC1C,IAAM,uCACX;AACK,IAAM,8CAA8C,GAAG,oCAAoC;AAC3F,IAAM,wCAAwC,GAAG,oCAAoC;AAErF,IAAM,uCAAuC,CAClD,eACW;AACX,MAAI,CAAC,YAAY,KAAK,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,WAAW,KAAK;AACnC,MAAI,WAAW,WAAW,iCAAiC,GAAG;AAC5D,WAAO,GAAG,oCAAoC,GAAG,WAAW,MAAM,kCAAkC,MAAM,CAAC;AAAA,EAC7G;AAEA,SAAO;AACT;AAEO,IAAM,gDAAgD,CAC3D,eACuB;AACvB,MAAI,CAAC,YAAY,KAAK,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,qCAAqC,WAAW,KAAK,CAAC;AACzE,SAAO,WAAW;AAAA,IAChB;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,2BAA2B,CACtC,QACA,aACY;AACZ,QAAM,mBACJ,8CAA8C,MAAM;AACtD,QAAM,qBACJ,8CAA8C,QAAQ;AACxD,SAAO;AAAA,IACL,oBACA,sBACA,qBAAqB;AAAA,EACvB;AACF;AAEO,IAAM,iBAAiB,CAC5B,KACA,aACW;AACX,SACE,KAAK,SAAS,CAAC,GAAG,OAAO,KAAK,KAAK,YAAY,KAAK,WAAW;AAEnE;AAEO,IAAM,kBAAkB,CAAC,SAA6C;AAC3E,SAAO,MAAM,SAAS,CAAC,GAAG,OAAO,KAAK,KAAK,MAAM,WAAW;AAC9D;AAEO,IAAM,8BAA8B,CACzC,SACuB;AACvB,QAAM,UAAU,MAAM,mBAAmB,CAAC,GAAG;AAC7C,SAAO,WAAW;AACpB;","names":[]}
1
+ {"version":3,"sources":["../src/toc-structure.ts"],"sourcesContent":["import type {\r\n DirectoryNodeModel,\r\n InformationUnitModel,\r\n ObjectRefModel,\r\n RenditionSelectorModel,\r\n} from \"@c-rex/interfaces\";\r\nimport { getHtmlRendition } from \"@c-rex/utils\";\r\n\r\nexport const IIRDS_RESOURCE_PLACEHOLDER_PREFIX = \"&iirds;#\";\r\nexport const IIRDS_STANDARD_NAMESPACE_RESOURCE_ID =\r\n \"http://iirds.tekom.de/iirds#\";\r\nexport const DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID = `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}TableOfContents`;\r\nexport const INDEX_ROOT_STRUCTURE_TYPE_RESOURCE_ID = `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}Index`;\r\n\r\nexport const normalizeRootStructureTypeResourceId = (\r\n resourceId?: string | null,\r\n): string => {\r\n if (!resourceId?.trim()) {\r\n return DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID;\r\n }\r\n\r\n const normalized = resourceId.trim();\r\n if (normalized.startsWith(IIRDS_RESOURCE_PLACEHOLDER_PREFIX)) {\r\n return `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}${normalized.slice(IIRDS_RESOURCE_PLACEHOLDER_PREFIX.length)}`;\r\n }\r\n\r\n return normalized;\r\n};\r\n\r\nexport const normalizeStructureTypeResourceIdForComparison = (\r\n resourceId?: string | null,\r\n): string | undefined => {\r\n if (!resourceId?.trim()) {\r\n return undefined;\r\n }\r\n\r\n const normalized = normalizeRootStructureTypeResourceId(resourceId.trim());\r\n return normalized.replace(\r\n /^https:\\/\\/iirds\\.tekom\\.de\\/iirds#/i,\r\n IIRDS_STANDARD_NAMESPACE_RESOURCE_ID,\r\n );\r\n};\r\n\r\nexport const matchesRootStructureType = (\r\n actual?: string | null,\r\n expected?: string | null,\r\n): boolean => {\r\n const normalizedActual =\r\n normalizeStructureTypeResourceIdForComparison(actual);\r\n const normalizedExpected =\r\n normalizeStructureTypeResourceIdForComparison(expected);\r\n return Boolean(\r\n normalizedActual &&\r\n normalizedExpected &&\r\n normalizedActual === normalizedExpected,\r\n );\r\n};\r\n\r\nexport const getTocRefLabel = (\r\n ref?: ObjectRefModel | null,\r\n fallback?: string,\r\n): string => {\r\n return (\r\n ref?.labels?.[0]?.value?.trim() || fallback || ref?.shortId || \"Ohne Titel\"\r\n );\r\n};\r\n\r\nexport const getTocNodeLabel = (node?: DirectoryNodeModel | null): string => {\r\n return node?.labels?.[0]?.value?.trim() || node?.shortId || \"Ohne Titel\";\r\n};\r\n\r\nexport const getTopicIdFromDirectoryNode = (\r\n node?: DirectoryNodeModel | null,\r\n): string | undefined => {\r\n const topicId = node?.informationUnits?.[0]?.shortId;\r\n return topicId || undefined;\r\n};\r\n\r\ntype RenditionSelectorWithValue = RenditionSelectorModel & {\r\n value?: string | null;\r\n};\r\n\r\ntype EmbeddedInformationUnitRef = ObjectRefModel &\r\n Pick<InformationUnitModel, \"renditions\">;\r\n\r\nexport type TocHtmlTarget = {\r\n source: string;\r\n anchor: string;\r\n};\r\n\r\n/** Resolves the source of the HTML rendition even when it has no selector. */\r\nexport const getTocHtmlSourceFromInformationUnit = (\r\n topic?: InformationUnitModel | EmbeddedInformationUnitRef | null,\r\n): string | undefined => {\r\n const source = getHtmlRendition(topic?.renditions)?.source?.trim();\r\n return source || undefined;\r\n};\r\n\r\n/**\r\n * Resolves the HTML file and DOM anchor carried by an information unit.\r\n * The IDS payload exposes the DOM id/name through rendition selector `value`,\r\n * even though the generated selector model does not currently declare it.\r\n */\r\nexport const getTocHtmlTargetFromInformationUnit = (\r\n topic?: InformationUnitModel | EmbeddedInformationUnitRef | null,\r\n): TocHtmlTarget | undefined => {\r\n const rendition = getHtmlRendition(topic?.renditions);\r\n const source = getTocHtmlSourceFromInformationUnit(topic);\r\n const anchor = (\r\n rendition?.selectors as RenditionSelectorWithValue[] | null | undefined\r\n )\r\n ?.map((selector) => selector.value?.trim())\r\n .find((value): value is string => Boolean(value));\r\n\r\n if (!source || !anchor) return undefined;\r\n return { source, anchor };\r\n};\r\n\r\n/** Resolves the HTML target from the first topic embedded in a TOC node. */\r\nexport const getTocHtmlTargetFromDirectoryNode = (\r\n node?: DirectoryNodeModel | null,\r\n): TocHtmlTarget | undefined =>\r\n getTocHtmlTargetFromInformationUnit(\r\n node?.informationUnits?.[0] as EmbeddedInformationUnitRef | undefined,\r\n );\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,mBAAiC;AAE1B,IAAM,oCAAoC;AAC1C,IAAM,uCACX;AACK,IAAM,8CAA8C,GAAG,oCAAoC;AAC3F,IAAM,wCAAwC,GAAG,oCAAoC;AAErF,IAAM,uCAAuC,CAClD,eACW;AACX,MAAI,CAAC,YAAY,KAAK,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,WAAW,KAAK;AACnC,MAAI,WAAW,WAAW,iCAAiC,GAAG;AAC5D,WAAO,GAAG,oCAAoC,GAAG,WAAW,MAAM,kCAAkC,MAAM,CAAC;AAAA,EAC7G;AAEA,SAAO;AACT;AAEO,IAAM,gDAAgD,CAC3D,eACuB;AACvB,MAAI,CAAC,YAAY,KAAK,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,qCAAqC,WAAW,KAAK,CAAC;AACzE,SAAO,WAAW;AAAA,IAChB;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,2BAA2B,CACtC,QACA,aACY;AACZ,QAAM,mBACJ,8CAA8C,MAAM;AACtD,QAAM,qBACJ,8CAA8C,QAAQ;AACxD,SAAO;AAAA,IACL,oBACA,sBACA,qBAAqB;AAAA,EACvB;AACF;AAEO,IAAM,iBAAiB,CAC5B,KACA,aACW;AACX,SACE,KAAK,SAAS,CAAC,GAAG,OAAO,KAAK,KAAK,YAAY,KAAK,WAAW;AAEnE;AAEO,IAAM,kBAAkB,CAAC,SAA6C;AAC3E,SAAO,MAAM,SAAS,CAAC,GAAG,OAAO,KAAK,KAAK,MAAM,WAAW;AAC9D;AAEO,IAAM,8BAA8B,CACzC,SACuB;AACvB,QAAM,UAAU,MAAM,mBAAmB,CAAC,GAAG;AAC7C,SAAO,WAAW;AACpB;AAeO,IAAM,sCAAsC,CACjD,UACuB;AACvB,QAAM,aAAS,+BAAiB,OAAO,UAAU,GAAG,QAAQ,KAAK;AACjE,SAAO,UAAU;AACnB;AAOO,IAAM,sCAAsC,CACjD,UAC8B;AAC9B,QAAM,gBAAY,+BAAiB,OAAO,UAAU;AACpD,QAAM,SAAS,oCAAoC,KAAK;AACxD,QAAM,SACJ,WAAW,WAET,IAAI,CAAC,aAAa,SAAS,OAAO,KAAK,CAAC,EACzC,KAAK,CAAC,UAA2B,QAAQ,KAAK,CAAC;AAElD,MAAI,CAAC,UAAU,CAAC,OAAQ,QAAO;AAC/B,SAAO,EAAE,QAAQ,OAAO;AAC1B;AAGO,IAAM,oCAAoC,CAC/C,SAEA;AAAA,EACE,MAAM,mBAAmB,CAAC;AAC5B;","names":[]}
@@ -1,4 +1,5 @@
1
1
  // src/toc-structure.ts
2
+ import { getHtmlRendition } from "@c-rex/utils";
2
3
  var IIRDS_RESOURCE_PLACEHOLDER_PREFIX = "&iirds;#";
3
4
  var IIRDS_STANDARD_NAMESPACE_RESOURCE_ID = "http://iirds.tekom.de/iirds#";
4
5
  var DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID = `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}TableOfContents`;
@@ -40,11 +41,28 @@ var getTopicIdFromDirectoryNode = (node) => {
40
41
  const topicId = node?.informationUnits?.[0]?.shortId;
41
42
  return topicId || void 0;
42
43
  };
44
+ var getTocHtmlSourceFromInformationUnit = (topic) => {
45
+ const source = getHtmlRendition(topic?.renditions)?.source?.trim();
46
+ return source || void 0;
47
+ };
48
+ var getTocHtmlTargetFromInformationUnit = (topic) => {
49
+ const rendition = getHtmlRendition(topic?.renditions);
50
+ const source = getTocHtmlSourceFromInformationUnit(topic);
51
+ const anchor = rendition?.selectors?.map((selector) => selector.value?.trim()).find((value) => Boolean(value));
52
+ if (!source || !anchor) return void 0;
53
+ return { source, anchor };
54
+ };
55
+ var getTocHtmlTargetFromDirectoryNode = (node) => getTocHtmlTargetFromInformationUnit(
56
+ node?.informationUnits?.[0]
57
+ );
43
58
  export {
44
59
  DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID,
45
60
  IIRDS_RESOURCE_PLACEHOLDER_PREFIX,
46
61
  IIRDS_STANDARD_NAMESPACE_RESOURCE_ID,
47
62
  INDEX_ROOT_STRUCTURE_TYPE_RESOURCE_ID,
63
+ getTocHtmlSourceFromInformationUnit,
64
+ getTocHtmlTargetFromDirectoryNode,
65
+ getTocHtmlTargetFromInformationUnit,
48
66
  getTocNodeLabel,
49
67
  getTocRefLabel,
50
68
  getTopicIdFromDirectoryNode,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/toc-structure.ts"],"sourcesContent":["import type { DirectoryNodeModel, ObjectRefModel } from \"@c-rex/interfaces\";\r\n\r\nexport const IIRDS_RESOURCE_PLACEHOLDER_PREFIX = \"&iirds;#\";\r\nexport const IIRDS_STANDARD_NAMESPACE_RESOURCE_ID =\r\n \"http://iirds.tekom.de/iirds#\";\r\nexport const DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID = `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}TableOfContents`;\r\nexport const INDEX_ROOT_STRUCTURE_TYPE_RESOURCE_ID = `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}Index`;\r\n\r\nexport const normalizeRootStructureTypeResourceId = (\r\n resourceId?: string | null,\r\n): string => {\r\n if (!resourceId?.trim()) {\r\n return DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID;\r\n }\r\n\r\n const normalized = resourceId.trim();\r\n if (normalized.startsWith(IIRDS_RESOURCE_PLACEHOLDER_PREFIX)) {\r\n return `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}${normalized.slice(IIRDS_RESOURCE_PLACEHOLDER_PREFIX.length)}`;\r\n }\r\n\r\n return normalized;\r\n};\r\n\r\nexport const normalizeStructureTypeResourceIdForComparison = (\r\n resourceId?: string | null,\r\n): string | undefined => {\r\n if (!resourceId?.trim()) {\r\n return undefined;\r\n }\r\n\r\n const normalized = normalizeRootStructureTypeResourceId(resourceId.trim());\r\n return normalized.replace(\r\n /^https:\\/\\/iirds\\.tekom\\.de\\/iirds#/i,\r\n IIRDS_STANDARD_NAMESPACE_RESOURCE_ID,\r\n );\r\n};\r\n\r\nexport const matchesRootStructureType = (\r\n actual?: string | null,\r\n expected?: string | null,\r\n): boolean => {\r\n const normalizedActual =\r\n normalizeStructureTypeResourceIdForComparison(actual);\r\n const normalizedExpected =\r\n normalizeStructureTypeResourceIdForComparison(expected);\r\n return Boolean(\r\n normalizedActual &&\r\n normalizedExpected &&\r\n normalizedActual === normalizedExpected,\r\n );\r\n};\r\n\r\nexport const getTocRefLabel = (\r\n ref?: ObjectRefModel | null,\r\n fallback?: string,\r\n): string => {\r\n return (\r\n ref?.labels?.[0]?.value?.trim() || fallback || ref?.shortId || \"Ohne Titel\"\r\n );\r\n};\r\n\r\nexport const getTocNodeLabel = (node?: DirectoryNodeModel | null): string => {\r\n return node?.labels?.[0]?.value?.trim() || node?.shortId || \"Ohne Titel\";\r\n};\r\n\r\nexport const getTopicIdFromDirectoryNode = (\r\n node?: DirectoryNodeModel | null,\r\n): string | undefined => {\r\n const topicId = node?.informationUnits?.[0]?.shortId;\r\n return topicId || undefined;\r\n};\r\n"],"mappings":";AAEO,IAAM,oCAAoC;AAC1C,IAAM,uCACX;AACK,IAAM,8CAA8C,GAAG,oCAAoC;AAC3F,IAAM,wCAAwC,GAAG,oCAAoC;AAErF,IAAM,uCAAuC,CAClD,eACW;AACX,MAAI,CAAC,YAAY,KAAK,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,WAAW,KAAK;AACnC,MAAI,WAAW,WAAW,iCAAiC,GAAG;AAC5D,WAAO,GAAG,oCAAoC,GAAG,WAAW,MAAM,kCAAkC,MAAM,CAAC;AAAA,EAC7G;AAEA,SAAO;AACT;AAEO,IAAM,gDAAgD,CAC3D,eACuB;AACvB,MAAI,CAAC,YAAY,KAAK,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,qCAAqC,WAAW,KAAK,CAAC;AACzE,SAAO,WAAW;AAAA,IAChB;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,2BAA2B,CACtC,QACA,aACY;AACZ,QAAM,mBACJ,8CAA8C,MAAM;AACtD,QAAM,qBACJ,8CAA8C,QAAQ;AACxD,SAAO;AAAA,IACL,oBACA,sBACA,qBAAqB;AAAA,EACvB;AACF;AAEO,IAAM,iBAAiB,CAC5B,KACA,aACW;AACX,SACE,KAAK,SAAS,CAAC,GAAG,OAAO,KAAK,KAAK,YAAY,KAAK,WAAW;AAEnE;AAEO,IAAM,kBAAkB,CAAC,SAA6C;AAC3E,SAAO,MAAM,SAAS,CAAC,GAAG,OAAO,KAAK,KAAK,MAAM,WAAW;AAC9D;AAEO,IAAM,8BAA8B,CACzC,SACuB;AACvB,QAAM,UAAU,MAAM,mBAAmB,CAAC,GAAG;AAC7C,SAAO,WAAW;AACpB;","names":[]}
1
+ {"version":3,"sources":["../src/toc-structure.ts"],"sourcesContent":["import type {\r\n DirectoryNodeModel,\r\n InformationUnitModel,\r\n ObjectRefModel,\r\n RenditionSelectorModel,\r\n} from \"@c-rex/interfaces\";\r\nimport { getHtmlRendition } from \"@c-rex/utils\";\r\n\r\nexport const IIRDS_RESOURCE_PLACEHOLDER_PREFIX = \"&iirds;#\";\r\nexport const IIRDS_STANDARD_NAMESPACE_RESOURCE_ID =\r\n \"http://iirds.tekom.de/iirds#\";\r\nexport const DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID = `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}TableOfContents`;\r\nexport const INDEX_ROOT_STRUCTURE_TYPE_RESOURCE_ID = `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}Index`;\r\n\r\nexport const normalizeRootStructureTypeResourceId = (\r\n resourceId?: string | null,\r\n): string => {\r\n if (!resourceId?.trim()) {\r\n return DEFAULT_TOC_ROOT_STRUCTURE_TYPE_RESOURCE_ID;\r\n }\r\n\r\n const normalized = resourceId.trim();\r\n if (normalized.startsWith(IIRDS_RESOURCE_PLACEHOLDER_PREFIX)) {\r\n return `${IIRDS_STANDARD_NAMESPACE_RESOURCE_ID}${normalized.slice(IIRDS_RESOURCE_PLACEHOLDER_PREFIX.length)}`;\r\n }\r\n\r\n return normalized;\r\n};\r\n\r\nexport const normalizeStructureTypeResourceIdForComparison = (\r\n resourceId?: string | null,\r\n): string | undefined => {\r\n if (!resourceId?.trim()) {\r\n return undefined;\r\n }\r\n\r\n const normalized = normalizeRootStructureTypeResourceId(resourceId.trim());\r\n return normalized.replace(\r\n /^https:\\/\\/iirds\\.tekom\\.de\\/iirds#/i,\r\n IIRDS_STANDARD_NAMESPACE_RESOURCE_ID,\r\n );\r\n};\r\n\r\nexport const matchesRootStructureType = (\r\n actual?: string | null,\r\n expected?: string | null,\r\n): boolean => {\r\n const normalizedActual =\r\n normalizeStructureTypeResourceIdForComparison(actual);\r\n const normalizedExpected =\r\n normalizeStructureTypeResourceIdForComparison(expected);\r\n return Boolean(\r\n normalizedActual &&\r\n normalizedExpected &&\r\n normalizedActual === normalizedExpected,\r\n );\r\n};\r\n\r\nexport const getTocRefLabel = (\r\n ref?: ObjectRefModel | null,\r\n fallback?: string,\r\n): string => {\r\n return (\r\n ref?.labels?.[0]?.value?.trim() || fallback || ref?.shortId || \"Ohne Titel\"\r\n );\r\n};\r\n\r\nexport const getTocNodeLabel = (node?: DirectoryNodeModel | null): string => {\r\n return node?.labels?.[0]?.value?.trim() || node?.shortId || \"Ohne Titel\";\r\n};\r\n\r\nexport const getTopicIdFromDirectoryNode = (\r\n node?: DirectoryNodeModel | null,\r\n): string | undefined => {\r\n const topicId = node?.informationUnits?.[0]?.shortId;\r\n return topicId || undefined;\r\n};\r\n\r\ntype RenditionSelectorWithValue = RenditionSelectorModel & {\r\n value?: string | null;\r\n};\r\n\r\ntype EmbeddedInformationUnitRef = ObjectRefModel &\r\n Pick<InformationUnitModel, \"renditions\">;\r\n\r\nexport type TocHtmlTarget = {\r\n source: string;\r\n anchor: string;\r\n};\r\n\r\n/** Resolves the source of the HTML rendition even when it has no selector. */\r\nexport const getTocHtmlSourceFromInformationUnit = (\r\n topic?: InformationUnitModel | EmbeddedInformationUnitRef | null,\r\n): string | undefined => {\r\n const source = getHtmlRendition(topic?.renditions)?.source?.trim();\r\n return source || undefined;\r\n};\r\n\r\n/**\r\n * Resolves the HTML file and DOM anchor carried by an information unit.\r\n * The IDS payload exposes the DOM id/name through rendition selector `value`,\r\n * even though the generated selector model does not currently declare it.\r\n */\r\nexport const getTocHtmlTargetFromInformationUnit = (\r\n topic?: InformationUnitModel | EmbeddedInformationUnitRef | null,\r\n): TocHtmlTarget | undefined => {\r\n const rendition = getHtmlRendition(topic?.renditions);\r\n const source = getTocHtmlSourceFromInformationUnit(topic);\r\n const anchor = (\r\n rendition?.selectors as RenditionSelectorWithValue[] | null | undefined\r\n )\r\n ?.map((selector) => selector.value?.trim())\r\n .find((value): value is string => Boolean(value));\r\n\r\n if (!source || !anchor) return undefined;\r\n return { source, anchor };\r\n};\r\n\r\n/** Resolves the HTML target from the first topic embedded in a TOC node. */\r\nexport const getTocHtmlTargetFromDirectoryNode = (\r\n node?: DirectoryNodeModel | null,\r\n): TocHtmlTarget | undefined =>\r\n getTocHtmlTargetFromInformationUnit(\r\n node?.informationUnits?.[0] as EmbeddedInformationUnitRef | undefined,\r\n );\r\n"],"mappings":";AAMA,SAAS,wBAAwB;AAE1B,IAAM,oCAAoC;AAC1C,IAAM,uCACX;AACK,IAAM,8CAA8C,GAAG,oCAAoC;AAC3F,IAAM,wCAAwC,GAAG,oCAAoC;AAErF,IAAM,uCAAuC,CAClD,eACW;AACX,MAAI,CAAC,YAAY,KAAK,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,WAAW,KAAK;AACnC,MAAI,WAAW,WAAW,iCAAiC,GAAG;AAC5D,WAAO,GAAG,oCAAoC,GAAG,WAAW,MAAM,kCAAkC,MAAM,CAAC;AAAA,EAC7G;AAEA,SAAO;AACT;AAEO,IAAM,gDAAgD,CAC3D,eACuB;AACvB,MAAI,CAAC,YAAY,KAAK,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,qCAAqC,WAAW,KAAK,CAAC;AACzE,SAAO,WAAW;AAAA,IAChB;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,2BAA2B,CACtC,QACA,aACY;AACZ,QAAM,mBACJ,8CAA8C,MAAM;AACtD,QAAM,qBACJ,8CAA8C,QAAQ;AACxD,SAAO;AAAA,IACL,oBACA,sBACA,qBAAqB;AAAA,EACvB;AACF;AAEO,IAAM,iBAAiB,CAC5B,KACA,aACW;AACX,SACE,KAAK,SAAS,CAAC,GAAG,OAAO,KAAK,KAAK,YAAY,KAAK,WAAW;AAEnE;AAEO,IAAM,kBAAkB,CAAC,SAA6C;AAC3E,SAAO,MAAM,SAAS,CAAC,GAAG,OAAO,KAAK,KAAK,MAAM,WAAW;AAC9D;AAEO,IAAM,8BAA8B,CACzC,SACuB;AACvB,QAAM,UAAU,MAAM,mBAAmB,CAAC,GAAG;AAC7C,SAAO,WAAW;AACpB;AAeO,IAAM,sCAAsC,CACjD,UACuB;AACvB,QAAM,SAAS,iBAAiB,OAAO,UAAU,GAAG,QAAQ,KAAK;AACjE,SAAO,UAAU;AACnB;AAOO,IAAM,sCAAsC,CACjD,UAC8B;AAC9B,QAAM,YAAY,iBAAiB,OAAO,UAAU;AACpD,QAAM,SAAS,oCAAoC,KAAK;AACxD,QAAM,SACJ,WAAW,WAET,IAAI,CAAC,aAAa,SAAS,OAAO,KAAK,CAAC,EACzC,KAAK,CAAC,UAA2B,QAAQ,KAAK,CAAC;AAElD,MAAI,CAAC,UAAU,CAAC,OAAQ,QAAO;AAC/B,SAAO,EAAE,QAAQ,OAAO;AAC1B;AAGO,IAAM,oCAAoC,CAC/C,SAEA;AAAA,EACE,MAAM,mBAAmB,CAAC;AAC5B;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c-rex/services",
3
- "version": "0.3.0-build.51",
3
+ "version": "0.3.0-build.52",
4
4
  "files": [
5
5
  "dist"
6
6
  ],