@terminalfour/terminalfour-js 1.0.0-rc.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.
Files changed (253) hide show
  1. package/LICENSE.md +106 -0
  2. package/README.md +169 -0
  3. package/dist/cjs/element-resolver.d.ts +115 -0
  4. package/dist/cjs/element-resolver.d.ts.map +1 -0
  5. package/dist/cjs/element-resolver.js +391 -0
  6. package/dist/cjs/element-resolver.js.map +1 -0
  7. package/dist/cjs/errors.d.ts +21 -0
  8. package/dist/cjs/errors.d.ts.map +1 -0
  9. package/dist/cjs/errors.js +21 -0
  10. package/dist/cjs/errors.js.map +1 -0
  11. package/dist/cjs/handlebars.d.ts +123 -0
  12. package/dist/cjs/handlebars.d.ts.map +1 -0
  13. package/dist/cjs/handlebars.js +306 -0
  14. package/dist/cjs/handlebars.js.map +1 -0
  15. package/dist/cjs/http-client.d.ts +21 -0
  16. package/dist/cjs/http-client.d.ts.map +1 -0
  17. package/dist/cjs/http-client.js +126 -0
  18. package/dist/cjs/http-client.js.map +1 -0
  19. package/dist/cjs/index.d.ts +37 -0
  20. package/dist/cjs/index.d.ts.map +1 -0
  21. package/dist/cjs/index.js +55 -0
  22. package/dist/cjs/index.js.map +1 -0
  23. package/dist/cjs/media-category-ref.d.ts +78 -0
  24. package/dist/cjs/media-category-ref.d.ts.map +1 -0
  25. package/dist/cjs/media-category-ref.js +184 -0
  26. package/dist/cjs/media-category-ref.js.map +1 -0
  27. package/dist/cjs/media-library.d.ts +30 -0
  28. package/dist/cjs/media-library.d.ts.map +1 -0
  29. package/dist/cjs/media-library.js +77 -0
  30. package/dist/cjs/media-library.js.map +1 -0
  31. package/dist/cjs/models/content-item.d.ts +80 -0
  32. package/dist/cjs/models/content-item.d.ts.map +1 -0
  33. package/dist/cjs/models/content-item.js +682 -0
  34. package/dist/cjs/models/content-item.js.map +1 -0
  35. package/dist/cjs/models/media-category-item.d.ts +29 -0
  36. package/dist/cjs/models/media-category-item.d.ts.map +1 -0
  37. package/dist/cjs/models/media-category-item.js +33 -0
  38. package/dist/cjs/models/media-category-item.js.map +1 -0
  39. package/dist/cjs/models/media-item.d.ts +74 -0
  40. package/dist/cjs/models/media-item.d.ts.map +1 -0
  41. package/dist/cjs/models/media-item.js +188 -0
  42. package/dist/cjs/models/media-item.js.map +1 -0
  43. package/dist/cjs/models/section-item.d.ts +58 -0
  44. package/dist/cjs/models/section-item.d.ts.map +1 -0
  45. package/dist/cjs/models/section-item.js +166 -0
  46. package/dist/cjs/models/section-item.js.map +1 -0
  47. package/dist/cjs/package.json +1 -0
  48. package/dist/cjs/resources/channel-resource.d.ts +112 -0
  49. package/dist/cjs/resources/channel-resource.d.ts.map +1 -0
  50. package/dist/cjs/resources/channel-resource.js +107 -0
  51. package/dist/cjs/resources/channel-resource.js.map +1 -0
  52. package/dist/cjs/resources/content-resource.d.ts +50 -0
  53. package/dist/cjs/resources/content-resource.d.ts.map +1 -0
  54. package/dist/cjs/resources/content-resource.js +286 -0
  55. package/dist/cjs/resources/content-resource.js.map +1 -0
  56. package/dist/cjs/resources/content-type-resource.d.ts +283 -0
  57. package/dist/cjs/resources/content-type-resource.d.ts.map +1 -0
  58. package/dist/cjs/resources/content-type-resource.js +970 -0
  59. package/dist/cjs/resources/content-type-resource.js.map +1 -0
  60. package/dist/cjs/resources/group-resource.d.ts +96 -0
  61. package/dist/cjs/resources/group-resource.d.ts.map +1 -0
  62. package/dist/cjs/resources/group-resource.js +213 -0
  63. package/dist/cjs/resources/group-resource.js.map +1 -0
  64. package/dist/cjs/resources/list-resource.d.ts +111 -0
  65. package/dist/cjs/resources/list-resource.d.ts.map +1 -0
  66. package/dist/cjs/resources/list-resource.js +179 -0
  67. package/dist/cjs/resources/list-resource.js.map +1 -0
  68. package/dist/cjs/resources/media-resource.d.ts +69 -0
  69. package/dist/cjs/resources/media-resource.d.ts.map +1 -0
  70. package/dist/cjs/resources/media-resource.js +210 -0
  71. package/dist/cjs/resources/media-resource.js.map +1 -0
  72. package/dist/cjs/resources/media-type-resource.d.ts +70 -0
  73. package/dist/cjs/resources/media-type-resource.d.ts.map +1 -0
  74. package/dist/cjs/resources/media-type-resource.js +195 -0
  75. package/dist/cjs/resources/media-type-resource.js.map +1 -0
  76. package/dist/cjs/resources/navigation-resource.d.ts +664 -0
  77. package/dist/cjs/resources/navigation-resource.d.ts.map +1 -0
  78. package/dist/cjs/resources/navigation-resource.js +2349 -0
  79. package/dist/cjs/resources/navigation-resource.js.map +1 -0
  80. package/dist/cjs/resources/page-layout-resource.d.ts +83 -0
  81. package/dist/cjs/resources/page-layout-resource.d.ts.map +1 -0
  82. package/dist/cjs/resources/page-layout-resource.js +214 -0
  83. package/dist/cjs/resources/page-layout-resource.js.map +1 -0
  84. package/dist/cjs/resources/user-resource.d.ts +126 -0
  85. package/dist/cjs/resources/user-resource.d.ts.map +1 -0
  86. package/dist/cjs/resources/user-resource.js +317 -0
  87. package/dist/cjs/resources/user-resource.js.map +1 -0
  88. package/dist/cjs/section-ref.d.ts +185 -0
  89. package/dist/cjs/section-ref.d.ts.map +1 -0
  90. package/dist/cjs/section-ref.js +813 -0
  91. package/dist/cjs/section-ref.js.map +1 -0
  92. package/dist/cjs/site-structure.d.ts +18 -0
  93. package/dist/cjs/site-structure.d.ts.map +1 -0
  94. package/dist/cjs/site-structure.js +57 -0
  95. package/dist/cjs/site-structure.js.map +1 -0
  96. package/dist/cjs/t4-client.d.ts +121 -0
  97. package/dist/cjs/t4-client.d.ts.map +1 -0
  98. package/dist/cjs/t4-client.js +190 -0
  99. package/dist/cjs/t4-client.js.map +1 -0
  100. package/dist/cjs/type-registry.d.ts +31 -0
  101. package/dist/cjs/type-registry.d.ts.map +1 -0
  102. package/dist/cjs/type-registry.js +76 -0
  103. package/dist/cjs/type-registry.js.map +1 -0
  104. package/dist/cjs/types.d.ts +211 -0
  105. package/dist/cjs/types.d.ts.map +1 -0
  106. package/dist/cjs/types.js +3 -0
  107. package/dist/cjs/types.js.map +1 -0
  108. package/dist/cjs/utils.d.ts +147 -0
  109. package/dist/cjs/utils.d.ts.map +1 -0
  110. package/dist/cjs/utils.js +408 -0
  111. package/dist/cjs/utils.js.map +1 -0
  112. package/dist/esm/element-resolver.d.ts +115 -0
  113. package/dist/esm/element-resolver.d.ts.map +1 -0
  114. package/dist/esm/element-resolver.js +387 -0
  115. package/dist/esm/element-resolver.js.map +1 -0
  116. package/dist/esm/errors.d.ts +21 -0
  117. package/dist/esm/errors.d.ts.map +1 -0
  118. package/dist/esm/errors.js +17 -0
  119. package/dist/esm/errors.js.map +1 -0
  120. package/dist/esm/handlebars.d.ts +123 -0
  121. package/dist/esm/handlebars.d.ts.map +1 -0
  122. package/dist/esm/handlebars.js +300 -0
  123. package/dist/esm/handlebars.js.map +1 -0
  124. package/dist/esm/http-client.d.ts +21 -0
  125. package/dist/esm/http-client.d.ts.map +1 -0
  126. package/dist/esm/http-client.js +122 -0
  127. package/dist/esm/http-client.js.map +1 -0
  128. package/dist/esm/index.d.ts +37 -0
  129. package/dist/esm/index.d.ts.map +1 -0
  130. package/dist/esm/index.js +26 -0
  131. package/dist/esm/index.js.map +1 -0
  132. package/dist/esm/media-category-ref.d.ts +78 -0
  133. package/dist/esm/media-category-ref.d.ts.map +1 -0
  134. package/dist/esm/media-category-ref.js +180 -0
  135. package/dist/esm/media-category-ref.js.map +1 -0
  136. package/dist/esm/media-library.d.ts +30 -0
  137. package/dist/esm/media-library.d.ts.map +1 -0
  138. package/dist/esm/media-library.js +73 -0
  139. package/dist/esm/media-library.js.map +1 -0
  140. package/dist/esm/models/content-item.d.ts +80 -0
  141. package/dist/esm/models/content-item.d.ts.map +1 -0
  142. package/dist/esm/models/content-item.js +676 -0
  143. package/dist/esm/models/content-item.js.map +1 -0
  144. package/dist/esm/models/media-category-item.d.ts +29 -0
  145. package/dist/esm/models/media-category-item.d.ts.map +1 -0
  146. package/dist/esm/models/media-category-item.js +29 -0
  147. package/dist/esm/models/media-category-item.js.map +1 -0
  148. package/dist/esm/models/media-item.d.ts +74 -0
  149. package/dist/esm/models/media-item.d.ts.map +1 -0
  150. package/dist/esm/models/media-item.js +184 -0
  151. package/dist/esm/models/media-item.js.map +1 -0
  152. package/dist/esm/models/section-item.d.ts +58 -0
  153. package/dist/esm/models/section-item.d.ts.map +1 -0
  154. package/dist/esm/models/section-item.js +162 -0
  155. package/dist/esm/models/section-item.js.map +1 -0
  156. package/dist/esm/resources/channel-resource.d.ts +112 -0
  157. package/dist/esm/resources/channel-resource.d.ts.map +1 -0
  158. package/dist/esm/resources/channel-resource.js +102 -0
  159. package/dist/esm/resources/channel-resource.js.map +1 -0
  160. package/dist/esm/resources/content-resource.d.ts +50 -0
  161. package/dist/esm/resources/content-resource.d.ts.map +1 -0
  162. package/dist/esm/resources/content-resource.js +282 -0
  163. package/dist/esm/resources/content-resource.js.map +1 -0
  164. package/dist/esm/resources/content-type-resource.d.ts +283 -0
  165. package/dist/esm/resources/content-type-resource.d.ts.map +1 -0
  166. package/dist/esm/resources/content-type-resource.js +964 -0
  167. package/dist/esm/resources/content-type-resource.js.map +1 -0
  168. package/dist/esm/resources/group-resource.d.ts +96 -0
  169. package/dist/esm/resources/group-resource.d.ts.map +1 -0
  170. package/dist/esm/resources/group-resource.js +208 -0
  171. package/dist/esm/resources/group-resource.js.map +1 -0
  172. package/dist/esm/resources/list-resource.d.ts +111 -0
  173. package/dist/esm/resources/list-resource.d.ts.map +1 -0
  174. package/dist/esm/resources/list-resource.js +174 -0
  175. package/dist/esm/resources/list-resource.js.map +1 -0
  176. package/dist/esm/resources/media-resource.d.ts +69 -0
  177. package/dist/esm/resources/media-resource.d.ts.map +1 -0
  178. package/dist/esm/resources/media-resource.js +206 -0
  179. package/dist/esm/resources/media-resource.js.map +1 -0
  180. package/dist/esm/resources/media-type-resource.d.ts +70 -0
  181. package/dist/esm/resources/media-type-resource.d.ts.map +1 -0
  182. package/dist/esm/resources/media-type-resource.js +190 -0
  183. package/dist/esm/resources/media-type-resource.js.map +1 -0
  184. package/dist/esm/resources/navigation-resource.d.ts +664 -0
  185. package/dist/esm/resources/navigation-resource.d.ts.map +1 -0
  186. package/dist/esm/resources/navigation-resource.js +2344 -0
  187. package/dist/esm/resources/navigation-resource.js.map +1 -0
  188. package/dist/esm/resources/page-layout-resource.d.ts +83 -0
  189. package/dist/esm/resources/page-layout-resource.d.ts.map +1 -0
  190. package/dist/esm/resources/page-layout-resource.js +209 -0
  191. package/dist/esm/resources/page-layout-resource.js.map +1 -0
  192. package/dist/esm/resources/user-resource.d.ts +126 -0
  193. package/dist/esm/resources/user-resource.d.ts.map +1 -0
  194. package/dist/esm/resources/user-resource.js +312 -0
  195. package/dist/esm/resources/user-resource.js.map +1 -0
  196. package/dist/esm/section-ref.d.ts +185 -0
  197. package/dist/esm/section-ref.d.ts.map +1 -0
  198. package/dist/esm/section-ref.js +808 -0
  199. package/dist/esm/section-ref.js.map +1 -0
  200. package/dist/esm/site-structure.d.ts +18 -0
  201. package/dist/esm/site-structure.d.ts.map +1 -0
  202. package/dist/esm/site-structure.js +53 -0
  203. package/dist/esm/site-structure.js.map +1 -0
  204. package/dist/esm/t4-client.d.ts +121 -0
  205. package/dist/esm/t4-client.d.ts.map +1 -0
  206. package/dist/esm/t4-client.js +186 -0
  207. package/dist/esm/t4-client.js.map +1 -0
  208. package/dist/esm/type-registry.d.ts +31 -0
  209. package/dist/esm/type-registry.d.ts.map +1 -0
  210. package/dist/esm/type-registry.js +72 -0
  211. package/dist/esm/type-registry.js.map +1 -0
  212. package/dist/esm/types.d.ts +211 -0
  213. package/dist/esm/types.d.ts.map +1 -0
  214. package/dist/esm/types.js +2 -0
  215. package/dist/esm/types.js.map +1 -0
  216. package/dist/esm/utils.d.ts +147 -0
  217. package/dist/esm/utils.d.ts.map +1 -0
  218. package/dist/esm/utils.js +355 -0
  219. package/dist/esm/utils.js.map +1 -0
  220. package/docs/channels.md +62 -0
  221. package/docs/content-types.md +313 -0
  222. package/docs/content.md +199 -0
  223. package/docs/error-handling.md +86 -0
  224. package/docs/getting-started.md +146 -0
  225. package/docs/groups-and-users.md +167 -0
  226. package/docs/handlebars.md +145 -0
  227. package/docs/lists.md +98 -0
  228. package/docs/media-types.md +111 -0
  229. package/docs/media.md +169 -0
  230. package/docs/navigation/a-to-z.md +62 -0
  231. package/docs/navigation/breadcrumbs.md +67 -0
  232. package/docs/navigation/css-selector.md +53 -0
  233. package/docs/navigation/generate-file.md +48 -0
  234. package/docs/navigation/keyword-search.md +134 -0
  235. package/docs/navigation/language-switcher.md +37 -0
  236. package/docs/navigation/link-menu.md +105 -0
  237. package/docs/navigation/pagination.md +80 -0
  238. package/docs/navigation/previous-next-fulltext.md +43 -0
  239. package/docs/navigation/publish-to-one-file.md +93 -0
  240. package/docs/navigation/related-content.md +79 -0
  241. package/docs/navigation/related-section-branch.md +31 -0
  242. package/docs/navigation/return-to-index.md +35 -0
  243. package/docs/navigation/section-details.md +51 -0
  244. package/docs/navigation/section-iterator.md +33 -0
  245. package/docs/navigation/section-meta-info.md +39 -0
  246. package/docs/navigation/site-map.md +58 -0
  247. package/docs/navigation/top-content.md +80 -0
  248. package/docs/navigation/top-stories.md +47 -0
  249. package/docs/navigation.md +134 -0
  250. package/docs/page-layouts.md +71 -0
  251. package/docs/sections.md +224 -0
  252. package/docs/typescript.md +124 -0
  253. package/package.json +64 -0
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Handlebars = exports.HandlebarsContentResource = exports.HandlebarsItem = void 0;
4
+ const utils_js_1 = require("./utils.js");
5
+ /**
6
+ * A mutable Handlebars item (helper or partial).
7
+ * Modify `name` and/or `code`, then call `save()` to persist.
8
+ * All saves are automatically set to approved status.
9
+ */
10
+ class HandlebarsItem {
11
+ constructor(dto, httpClient, sectionId, language, codeElementName) {
12
+ this.id = dto.id;
13
+ this.name = dto.name;
14
+ this.lastModified = dto.lastModified ? new Date(dto.lastModified) : null;
15
+ // Extract the code field value from elements
16
+ this.code = this.extractCode(dto.elements, codeElementName) ?? '';
17
+ Object.defineProperty(this, '_httpClient', { value: httpClient, enumerable: false });
18
+ Object.defineProperty(this, '_sectionId', { value: sectionId, enumerable: false });
19
+ Object.defineProperty(this, '_language', { value: language, enumerable: false });
20
+ Object.defineProperty(this, '_codeElementName', { value: codeElementName, enumerable: false });
21
+ Object.defineProperty(this, '_rawDTO', { value: dto, enumerable: false, writable: true });
22
+ }
23
+ /**
24
+ * Persists changes to name and/or code back to the server.
25
+ * Always saves with approved status.
26
+ */
27
+ async save() {
28
+ // Update elements with current name and code
29
+ const elements = { ...this._rawDTO.elements };
30
+ for (const key of Object.keys(elements)) {
31
+ if (key.toLowerCase().startsWith('name#')) {
32
+ elements[key] = this.name;
33
+ }
34
+ else if (key.toLowerCase().startsWith(this._codeElementName + '#')) {
35
+ elements[key] = this.code;
36
+ }
37
+ }
38
+ const response = await this._httpClient.request({
39
+ method: 'POST',
40
+ path: `/content/${this._sectionId}/${this.id}/${this._language}`,
41
+ body: {
42
+ id: this.id,
43
+ contentTypeID: this._rawDTO.contentTypeID,
44
+ name: this.name,
45
+ language: this._language,
46
+ status: 0, // approved
47
+ elements,
48
+ channels: this._rawDTO.channels,
49
+ canPublishNow: true,
50
+ canSaveAndApprove: true,
51
+ publishDate: this._rawDTO.publishDate ?? null,
52
+ expiryDate: this._rawDTO.expiryDate ?? null,
53
+ reviewDate: this._rawDTO.reviewDate ?? null,
54
+ archiveSection: this._rawDTO.archiveSection ?? null,
55
+ owner: this._rawDTO.owner ?? { id: 0, type: 'USER' },
56
+ excludedMirrorSectionIds: [],
57
+ sectionIDs: [this._sectionId],
58
+ version: this._rawDTO.version,
59
+ lastModified: this._rawDTO.lastModified,
60
+ },
61
+ });
62
+ // Update internal state from response
63
+ this.id = response.id;
64
+ this.name = response.name;
65
+ this.lastModified = response.lastModified ? new Date(response.lastModified) : null;
66
+ this.code = this.extractCode(response.elements, this._codeElementName) ?? this.code;
67
+ this._rawDTO = response;
68
+ }
69
+ /** Extracts the code value from the raw elements map */
70
+ extractCode(elements, codeElementName) {
71
+ for (const [key, value] of Object.entries(elements)) {
72
+ if (key.toLowerCase().startsWith(codeElementName + '#')) {
73
+ return value ?? null;
74
+ }
75
+ }
76
+ return null;
77
+ }
78
+ }
79
+ exports.HandlebarsItem = HandlebarsItem;
80
+ /**
81
+ * Generic resource for managing Handlebars content items (helpers or partials).
82
+ * Both share the same pattern: content in a hidden section with name + code fields.
83
+ */
84
+ class HandlebarsContentResource {
85
+ constructor(httpClient, config) {
86
+ // Cached config values
87
+ this.sectionIdPromise = null;
88
+ this.sectionIdExpiresAt = 0;
89
+ this.sectionIdEpoch = -1;
90
+ this.contentTypeIdPromise = null;
91
+ this.contentTypeIdExpiresAt = 0;
92
+ this.contentTypeIdEpoch = -1;
93
+ this.httpClient = httpClient;
94
+ this.config = config;
95
+ }
96
+ /** Fetches and caches the section ID */
97
+ getSectionId() {
98
+ if (!this.sectionIdPromise || Date.now() > this.sectionIdExpiresAt || this.sectionIdEpoch < (0, utils_js_1.getCacheEpoch)()) {
99
+ this.sectionIdExpiresAt = Date.now() + utils_js_1.DEFAULT_CACHE_TTL;
100
+ this.sectionIdEpoch = (0, utils_js_1.getCacheEpoch)();
101
+ this.sectionIdPromise = this.httpClient.request({
102
+ method: 'POST',
103
+ path: this.config.sectionIdConfigPath,
104
+ body: {},
105
+ }).then((res) => {
106
+ const opt = res.options.find((o) => o.name === this.config.sectionIdOptionName);
107
+ if (!opt)
108
+ throw new Error(`Could not resolve ${this.config.displayName.toLowerCase()} section ID from config`);
109
+ return Number(opt.value);
110
+ });
111
+ }
112
+ return this.sectionIdPromise;
113
+ }
114
+ /** Fetches and caches the content type ID */
115
+ getContentTypeId() {
116
+ if (!this.contentTypeIdPromise || Date.now() > this.contentTypeIdExpiresAt || this.contentTypeIdEpoch < (0, utils_js_1.getCacheEpoch)()) {
117
+ this.contentTypeIdExpiresAt = Date.now() + utils_js_1.DEFAULT_CACHE_TTL;
118
+ this.contentTypeIdEpoch = (0, utils_js_1.getCacheEpoch)();
119
+ this.contentTypeIdPromise = this.httpClient.request({
120
+ method: 'POST',
121
+ path: this.config.contentTypeIdConfigPath,
122
+ body: {},
123
+ }).then((res) => {
124
+ const opt = res.options.find((o) => o.name === this.config.contentTypeIdOptionName);
125
+ if (!opt)
126
+ throw new Error(`Could not resolve ${this.config.displayName.toLowerCase()} content type ID from config`);
127
+ return Number(opt.value);
128
+ });
129
+ }
130
+ return this.contentTypeIdPromise;
131
+ }
132
+ /**
133
+ * Lists all items (summaries only: id, name, lastModified).
134
+ */
135
+ async list() {
136
+ const sectionId = await this.getSectionId();
137
+ const language = 'en';
138
+ const response = await this.httpClient.request({
139
+ method: 'GET',
140
+ path: `/hierarchy/${sectionId}/${language}/contents?showAll=false&removeNonTranslated=false`,
141
+ });
142
+ return (response.children ?? []).map((child) => ({
143
+ id: child.content.id,
144
+ name: child.content.name,
145
+ lastModified: child.content.lastModified ? new Date(child.content.lastModified) : null,
146
+ }));
147
+ }
148
+ /**
149
+ * Resolves a name or ID to a numeric content ID.
150
+ * If a string is passed, lists all items and finds by name.
151
+ * Throws if the name is not found or if multiple items share the same name.
152
+ */
153
+ async resolveId(nameOrId) {
154
+ if (typeof nameOrId === 'number')
155
+ return nameOrId;
156
+ const items = await this.list();
157
+ const matches = items.filter((item) => item.name === nameOrId);
158
+ if (matches.length === 0) {
159
+ const available = items.map((i) => `"${i.name}"`).join(', ');
160
+ throw new Error(`${this.config.displayName} "${nameOrId}" not found. Available: ${available}`);
161
+ }
162
+ if (matches.length > 1) {
163
+ throw new Error(`Multiple ${this.config.displayName.toLowerCase()}s found with name "${nameOrId}" (IDs: ${matches.map((m) => m.id).join(', ')}). Use an ID instead.`);
164
+ }
165
+ return matches[0].id;
166
+ }
167
+ /**
168
+ * Retrieves a single item by name or ID. Returns a mutable HandlebarsItem.
169
+ */
170
+ async get(nameOrId) {
171
+ const id = await this.resolveId(nameOrId);
172
+ const sectionId = await this.getSectionId();
173
+ const language = 'en';
174
+ const dto = await this.httpClient.request({
175
+ method: 'GET',
176
+ path: `/content/${sectionId}/${id}/${language}`,
177
+ });
178
+ return new HandlebarsItem(dto, this.httpClient, sectionId, language, this.config.codeElementName);
179
+ }
180
+ /**
181
+ * Creates a new item. Always created as approved.
182
+ * Throws if an item with the same name already exists.
183
+ * Returns a mutable HandlebarsItem.
184
+ */
185
+ async create(data) {
186
+ if (!data.name?.trim())
187
+ throw new Error(`${this.config.displayName} name is required`);
188
+ if (!data.code?.trim())
189
+ throw new Error(`${this.config.displayName} code is required`);
190
+ // Check for duplicate names
191
+ const existing = await this.list();
192
+ const duplicate = existing.find((item) => item.name === data.name);
193
+ if (duplicate) {
194
+ throw new Error(`A ${this.config.displayName.toLowerCase()} named "${data.name}" already exists (ID: ${duplicate.id})`);
195
+ }
196
+ const [sectionId, contentTypeId] = await Promise.all([
197
+ this.getSectionId(),
198
+ this.getContentTypeId(),
199
+ ]);
200
+ const language = 'en';
201
+ // Fetch the content type template to get element keys
202
+ const template = await this.httpClient.request({
203
+ method: 'GET',
204
+ path: `/content/type/${contentTypeId}/${sectionId}`,
205
+ });
206
+ const elements = {};
207
+ for (const el of template.contentType.contentTypeElements) {
208
+ const key = `${el.name}#${el.id}:${el.type}`;
209
+ if (el.name.toLowerCase() === 'name') {
210
+ elements[key] = data.name;
211
+ }
212
+ else if (el.name.toLowerCase() === this.config.codeElementName) {
213
+ elements[key] = data.code;
214
+ }
215
+ }
216
+ const contentId = -Math.floor(Math.random() * 1000000);
217
+ const dto = await this.httpClient.request({
218
+ method: 'POST',
219
+ path: `/content/${sectionId}/${language}`,
220
+ body: {
221
+ id: contentId,
222
+ contentTypeID: contentTypeId,
223
+ name: data.name,
224
+ language,
225
+ status: 0, // approved
226
+ elements,
227
+ channels: template.channels,
228
+ canPublishNow: true,
229
+ canSaveAndApprove: true,
230
+ publishDate: null,
231
+ expiryDate: null,
232
+ reviewDate: null,
233
+ archiveSection: null,
234
+ owner: { id: 0, type: 'USER' },
235
+ excludedMirrorSectionIds: [],
236
+ },
237
+ });
238
+ return new HandlebarsItem(dto, this.httpClient, sectionId, language, this.config.codeElementName);
239
+ }
240
+ /**
241
+ * Updates an item's name and/or code (immutable pattern).
242
+ * Accepts a name or ID. Fetches existing, merges changes, saves. Always approved.
243
+ */
244
+ async update(nameOrId, data) {
245
+ const item = await this.get(nameOrId);
246
+ if (data.name !== undefined)
247
+ item.name = data.name;
248
+ if (data.code !== undefined)
249
+ item.code = data.code;
250
+ await item.save();
251
+ return item;
252
+ }
253
+ /**
254
+ * Deletes an item by name or ID (soft delete — sets to inactive).
255
+ */
256
+ async delete(nameOrId) {
257
+ const id = await this.resolveId(nameOrId);
258
+ const sectionId = await this.getSectionId();
259
+ const language = 'en';
260
+ await this.httpClient.request({
261
+ method: 'DELETE',
262
+ path: `/content/${sectionId}/${id}/${language}`,
263
+ });
264
+ }
265
+ /**
266
+ * Permanently removes an item by name or ID.
267
+ */
268
+ async purge(nameOrId) {
269
+ const id = await this.resolveId(nameOrId);
270
+ const language = 'en';
271
+ await this.httpClient.request({
272
+ method: 'POST',
273
+ path: '/content/purge',
274
+ body: {
275
+ languageCode: language,
276
+ contentIds: [String(id)],
277
+ },
278
+ });
279
+ }
280
+ }
281
+ exports.HandlebarsContentResource = HandlebarsContentResource;
282
+ /**
283
+ * The `t4.handlebars` namespace — provides access to helpers and partials.
284
+ */
285
+ class Handlebars {
286
+ constructor(httpClient) {
287
+ this.helpers = new HandlebarsContentResource(httpClient, {
288
+ sectionIdConfigPath: '/config/handlebars.helpersSectionId',
289
+ sectionIdOptionName: 'handlebars.helpersSectionId',
290
+ contentTypeIdConfigPath: '/config/handlebars.helpersContentTypeId',
291
+ contentTypeIdOptionName: 'handlebars.helpersContentTypeId',
292
+ codeElementName: 'function code',
293
+ displayName: 'Helper',
294
+ });
295
+ this.partials = new HandlebarsContentResource(httpClient, {
296
+ sectionIdConfigPath: '/config/handlebars.partialsSectionId',
297
+ sectionIdOptionName: 'handlebars.partialsSectionId',
298
+ contentTypeIdConfigPath: '/config/handlebars.partialsContentTypeId',
299
+ contentTypeIdOptionName: 'handlebars.partialsContentTypeId',
300
+ codeElementName: 'code',
301
+ displayName: 'Partial',
302
+ });
303
+ }
304
+ }
305
+ exports.Handlebars = Handlebars;
306
+ //# sourceMappingURL=handlebars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlebars.js","sourceRoot":"","sources":["../../src/handlebars.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { HttpRequestOptions } from './types.js';
2
+ /**
3
+ * Internal HTTP client that handles authentication, URL construction,
4
+ * content-type headers, JSON/multipart encoding, error wrapping,
5
+ * and concurrency limiting.
6
+ */
7
+ export declare class HttpClient {
8
+ private readonly baseUrl;
9
+ private readonly apiToken;
10
+ private readonly maxConcurrency;
11
+ private inFlight;
12
+ private waitQueue;
13
+ constructor(baseUrl: string, apiToken: string, concurrency?: number);
14
+ request<T>(options: HttpRequestOptions): Promise<T>;
15
+ /** Waits until a concurrency slot is available */
16
+ private acquireSlot;
17
+ /** Releases a concurrency slot and wakes the next waiter */
18
+ private releaseSlot;
19
+ private executeRequest;
20
+ }
21
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/http-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAOhD;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,SAAS,CAAyB;gBAE9B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IAM7D,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IASzD,kDAAkD;IAClD,OAAO,CAAC,WAAW;IAanB,4DAA4D;IAC5D,OAAO,CAAC,WAAW;YAML,cAAc;CA4E7B"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpClient = void 0;
4
+ const errors_js_1 = require("./errors.js");
5
+ const utils_js_1 = require("./utils.js");
6
+ /** Default maximum concurrent requests */
7
+ const DEFAULT_CONCURRENCY = 10;
8
+ /**
9
+ * Internal HTTP client that handles authentication, URL construction,
10
+ * content-type headers, JSON/multipart encoding, error wrapping,
11
+ * and concurrency limiting.
12
+ */
13
+ class HttpClient {
14
+ constructor(baseUrl, apiToken, concurrency) {
15
+ this.inFlight = 0;
16
+ this.waitQueue = [];
17
+ this.baseUrl = baseUrl;
18
+ this.apiToken = apiToken;
19
+ this.maxConcurrency = concurrency ?? DEFAULT_CONCURRENCY;
20
+ }
21
+ async request(options) {
22
+ await this.acquireSlot();
23
+ try {
24
+ return await this.executeRequest(options);
25
+ }
26
+ finally {
27
+ this.releaseSlot();
28
+ }
29
+ }
30
+ /** Waits until a concurrency slot is available */
31
+ acquireSlot() {
32
+ if (this.inFlight < this.maxConcurrency) {
33
+ this.inFlight++;
34
+ return Promise.resolve();
35
+ }
36
+ return new Promise((resolve) => {
37
+ this.waitQueue.push(() => {
38
+ this.inFlight++;
39
+ resolve();
40
+ });
41
+ });
42
+ }
43
+ /** Releases a concurrency slot and wakes the next waiter */
44
+ releaseSlot() {
45
+ this.inFlight--;
46
+ const next = this.waitQueue.shift();
47
+ if (next)
48
+ next();
49
+ }
50
+ async executeRequest(options) {
51
+ const url = this.baseUrl + options.path;
52
+ const headers = {
53
+ Authorization: this.apiToken,
54
+ Accept: 'application/json',
55
+ ...options.headers,
56
+ };
57
+ let body;
58
+ if (options.multipart && options.formData) {
59
+ // Let the runtime set Content-Type with the correct boundary
60
+ body = options.formData;
61
+ }
62
+ else if (options.headers?.['Content-Type']?.includes('x-www-form-urlencoded') && typeof options.body === 'string') {
63
+ // Form-encoded body — pass through as-is, Content-Type already set in headers
64
+ body = options.body;
65
+ }
66
+ else {
67
+ headers['Content-Type'] = 'application/json;charset=UTF-8';
68
+ if (options.body !== undefined) {
69
+ body = JSON.stringify(options.body);
70
+ }
71
+ }
72
+ let response;
73
+ try {
74
+ // Debug logging when T4_DEBUG env var is set
75
+ if (typeof process !== 'undefined' && process.env?.T4_DEBUG === '1') {
76
+ console.log(`\n[DEBUG] ${options.method} ${url}`);
77
+ if (body && typeof body === 'string') {
78
+ console.log('[DEBUG] Body:', body.substring(0, 3000));
79
+ }
80
+ }
81
+ response = await fetch(url, {
82
+ method: options.method,
83
+ headers,
84
+ body,
85
+ });
86
+ }
87
+ catch (error) {
88
+ throw new errors_js_1.T4ApiError({
89
+ statusCode: 0,
90
+ statusText: 'Network Error',
91
+ responseBody: error instanceof Error ? error.message : String(error),
92
+ requestUrl: url,
93
+ requestMethod: options.method,
94
+ cause: error instanceof Error ? error : undefined,
95
+ });
96
+ }
97
+ if (!response.ok) {
98
+ let responseBody;
99
+ try {
100
+ responseBody = await response.json();
101
+ }
102
+ catch {
103
+ responseBody = await response.text().catch(() => null);
104
+ }
105
+ throw new errors_js_1.T4ApiError({
106
+ statusCode: response.status,
107
+ statusText: response.statusText,
108
+ responseBody,
109
+ requestUrl: url,
110
+ requestMethod: options.method,
111
+ });
112
+ }
113
+ const text = await response.text();
114
+ if (!text)
115
+ return undefined;
116
+ try {
117
+ return JSON.parse(text);
118
+ }
119
+ catch {
120
+ (0, utils_js_1.debugWarn)(`Response from ${options.method} ${options.path} is not valid JSON, returning raw text`);
121
+ return text;
122
+ }
123
+ }
124
+ }
125
+ exports.HttpClient = HttpClient;
126
+ //# sourceMappingURL=http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/http-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export { T4Client } from './t4-client.js';
2
+ export { T4ApiError } from './errors.js';
3
+ export { ContentItem } from './models/content-item.js';
4
+ export { SectionItem } from './models/section-item.js';
5
+ export { MediaItem } from './models/media-item.js';
6
+ export type { MediaFileInput } from './models/media-item.js';
7
+ export { ContentType } from './resources/content-type-resource.js';
8
+ export { Layout } from './resources/content-type-resource.js';
9
+ export type { ListSummary, ListItemData } from './resources/list-resource.js';
10
+ export { List } from './resources/list-resource.js';
11
+ export type { GroupData, GroupMember } from './resources/group-resource.js';
12
+ export { Group } from './resources/group-resource.js';
13
+ export type { UserData } from './resources/user-resource.js';
14
+ export type { AuthMethods, AuthMethodValue } from './resources/user-resource.js';
15
+ export { User } from './resources/user-resource.js';
16
+ export type { PageLayoutSummary } from './resources/page-layout-resource.js';
17
+ export { PageLayout } from './resources/page-layout-resource.js';
18
+ export type { MediaTypeLayout, MediaTypeData } from './resources/media-type-resource.js';
19
+ export { MediaType, MediaTypeResource } from './resources/media-type-resource.js';
20
+ export type { NavigationType, NavigationSummary, CreateNavigationData, UpdateNavigationData } from './resources/navigation-resource.js';
21
+ export { NavigationResource, NavigationObject, NAVIGATION_TYPE_NAMES } from './resources/navigation-resource.js';
22
+ export { ChannelResource, Channel } from './resources/channel-resource.js';
23
+ export type { ChannelSummary, ChannelLanguage, Microsite } from './resources/channel-resource.js';
24
+ export { Handlebars, HandlebarsItem, HandlebarsContentResource } from './handlebars.js';
25
+ export type { HandlebarsItemSummary, HelperSummary, PartialSummary, Helper, Partial } from './handlebars.js';
26
+ export { SectionRef } from './section-ref.js';
27
+ export type { SectionTreeNode } from './section-ref.js';
28
+ export { SiteStructure } from './site-structure.js';
29
+ export { MediaCategoryRef } from './media-category-ref.js';
30
+ export { MediaCategoryItem } from './models/media-category-item.js';
31
+ export { MediaLibrary } from './media-library.js';
32
+ export type { MediaCategoryNode } from './media-library.js';
33
+ export type { MediaListItem } from './media-category-ref.js';
34
+ export type { T4ClientConfig, LanguageOption, ContentDTO, ContentTypeData, ContentTypeFieldDef, HierarchyNode, GetTreeOptions, AddSectionData, Owner, DateInput, CreateContentData, UpdateContentData, } from './types.js';
35
+ export type { SectionContentLinkInput, MediaElementUpload } from './element-resolver.js';
36
+ export type { FileInput } from './utils.js';
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACtD,YAAY,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAClF,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AACxI,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AACjH,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC3E,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACxF,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG7G,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,YAAY,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,cAAc,EACd,KAAK,EACL,SAAS,EACT,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGzF,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MediaLibrary = exports.MediaCategoryItem = exports.MediaCategoryRef = exports.SiteStructure = exports.SectionRef = exports.HandlebarsContentResource = exports.HandlebarsItem = exports.Handlebars = exports.Channel = exports.ChannelResource = exports.NAVIGATION_TYPE_NAMES = exports.NavigationObject = exports.NavigationResource = exports.MediaTypeResource = exports.MediaType = exports.PageLayout = exports.User = exports.Group = exports.List = exports.Layout = exports.ContentType = exports.MediaItem = exports.SectionItem = exports.ContentItem = exports.T4ApiError = exports.T4Client = void 0;
4
+ // Main client
5
+ var t4_client_js_1 = require("./t4-client.js");
6
+ Object.defineProperty(exports, "T4Client", { enumerable: true, get: function () { return t4_client_js_1.T4Client; } });
7
+ // Error class
8
+ var errors_js_1 = require("./errors.js");
9
+ Object.defineProperty(exports, "T4ApiError", { enumerable: true, get: function () { return errors_js_1.T4ApiError; } });
10
+ // Models
11
+ var content_item_js_1 = require("./models/content-item.js");
12
+ Object.defineProperty(exports, "ContentItem", { enumerable: true, get: function () { return content_item_js_1.ContentItem; } });
13
+ var section_item_js_1 = require("./models/section-item.js");
14
+ Object.defineProperty(exports, "SectionItem", { enumerable: true, get: function () { return section_item_js_1.SectionItem; } });
15
+ var media_item_js_1 = require("./models/media-item.js");
16
+ Object.defineProperty(exports, "MediaItem", { enumerable: true, get: function () { return media_item_js_1.MediaItem; } });
17
+ var content_type_resource_js_1 = require("./resources/content-type-resource.js");
18
+ Object.defineProperty(exports, "ContentType", { enumerable: true, get: function () { return content_type_resource_js_1.ContentType; } });
19
+ var content_type_resource_js_2 = require("./resources/content-type-resource.js");
20
+ Object.defineProperty(exports, "Layout", { enumerable: true, get: function () { return content_type_resource_js_2.Layout; } });
21
+ var list_resource_js_1 = require("./resources/list-resource.js");
22
+ Object.defineProperty(exports, "List", { enumerable: true, get: function () { return list_resource_js_1.List; } });
23
+ var group_resource_js_1 = require("./resources/group-resource.js");
24
+ Object.defineProperty(exports, "Group", { enumerable: true, get: function () { return group_resource_js_1.Group; } });
25
+ var user_resource_js_1 = require("./resources/user-resource.js");
26
+ Object.defineProperty(exports, "User", { enumerable: true, get: function () { return user_resource_js_1.User; } });
27
+ var page_layout_resource_js_1 = require("./resources/page-layout-resource.js");
28
+ Object.defineProperty(exports, "PageLayout", { enumerable: true, get: function () { return page_layout_resource_js_1.PageLayout; } });
29
+ var media_type_resource_js_1 = require("./resources/media-type-resource.js");
30
+ Object.defineProperty(exports, "MediaType", { enumerable: true, get: function () { return media_type_resource_js_1.MediaType; } });
31
+ Object.defineProperty(exports, "MediaTypeResource", { enumerable: true, get: function () { return media_type_resource_js_1.MediaTypeResource; } });
32
+ var navigation_resource_js_1 = require("./resources/navigation-resource.js");
33
+ Object.defineProperty(exports, "NavigationResource", { enumerable: true, get: function () { return navigation_resource_js_1.NavigationResource; } });
34
+ Object.defineProperty(exports, "NavigationObject", { enumerable: true, get: function () { return navigation_resource_js_1.NavigationObject; } });
35
+ Object.defineProperty(exports, "NAVIGATION_TYPE_NAMES", { enumerable: true, get: function () { return navigation_resource_js_1.NAVIGATION_TYPE_NAMES; } });
36
+ var channel_resource_js_1 = require("./resources/channel-resource.js");
37
+ Object.defineProperty(exports, "ChannelResource", { enumerable: true, get: function () { return channel_resource_js_1.ChannelResource; } });
38
+ Object.defineProperty(exports, "Channel", { enumerable: true, get: function () { return channel_resource_js_1.Channel; } });
39
+ var handlebars_js_1 = require("./handlebars.js");
40
+ Object.defineProperty(exports, "Handlebars", { enumerable: true, get: function () { return handlebars_js_1.Handlebars; } });
41
+ Object.defineProperty(exports, "HandlebarsItem", { enumerable: true, get: function () { return handlebars_js_1.HandlebarsItem; } });
42
+ Object.defineProperty(exports, "HandlebarsContentResource", { enumerable: true, get: function () { return handlebars_js_1.HandlebarsContentResource; } });
43
+ // Section reference
44
+ var section_ref_js_1 = require("./section-ref.js");
45
+ Object.defineProperty(exports, "SectionRef", { enumerable: true, get: function () { return section_ref_js_1.SectionRef; } });
46
+ var site_structure_js_1 = require("./site-structure.js");
47
+ Object.defineProperty(exports, "SiteStructure", { enumerable: true, get: function () { return site_structure_js_1.SiteStructure; } });
48
+ // Media category reference
49
+ var media_category_ref_js_1 = require("./media-category-ref.js");
50
+ Object.defineProperty(exports, "MediaCategoryRef", { enumerable: true, get: function () { return media_category_ref_js_1.MediaCategoryRef; } });
51
+ var media_category_item_js_1 = require("./models/media-category-item.js");
52
+ Object.defineProperty(exports, "MediaCategoryItem", { enumerable: true, get: function () { return media_category_item_js_1.MediaCategoryItem; } });
53
+ var media_library_js_1 = require("./media-library.js");
54
+ Object.defineProperty(exports, "MediaLibrary", { enumerable: true, get: function () { return media_library_js_1.MediaLibrary; } });
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACd,+CAA0C;AAAjC,wGAAA,QAAQ,OAAA;AAEjB,cAAc;AACd,yCAAyC;AAAhC,uGAAA,UAAU,OAAA;AAEnB,SAAS;AACT,4DAAuD;AAA9C,8GAAA,WAAW,OAAA;AACpB,4DAAuD;AAA9C,8GAAA,WAAW,OAAA;AACpB,wDAAmD;AAA1C,0GAAA,SAAS,OAAA;AAElB,iFAAmE;AAA1D,uHAAA,WAAW,OAAA;AACpB,iFAA8D;AAArD,kHAAA,MAAM,OAAA;AAEf,iEAAoD;AAA3C,wGAAA,IAAI,OAAA;AAEb,mEAAsD;AAA7C,0GAAA,KAAK,OAAA;AAGd,iEAAoD;AAA3C,wGAAA,IAAI,OAAA;AAEb,+EAAiE;AAAxD,qHAAA,UAAU,OAAA;AAEnB,6EAAkF;AAAzE,mHAAA,SAAS,OAAA;AAAE,2HAAA,iBAAiB,OAAA;AAErC,6EAAiH;AAAxG,4HAAA,kBAAkB,OAAA;AAAE,0HAAA,gBAAgB,OAAA;AAAE,+HAAA,qBAAqB,OAAA;AACpE,uEAA2E;AAAlE,sHAAA,eAAe,OAAA;AAAE,8GAAA,OAAO,OAAA;AAEjC,iDAAwF;AAA/E,2GAAA,UAAU,OAAA;AAAE,+GAAA,cAAc,OAAA;AAAE,0HAAA,yBAAyB,OAAA;AAG9D,oBAAoB;AACpB,mDAA8C;AAArC,4GAAA,UAAU,OAAA;AAEnB,yDAAoD;AAA3C,kHAAA,aAAa,OAAA;AAEtB,2BAA2B;AAC3B,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA;AACzB,0EAAoE;AAA3D,2HAAA,iBAAiB,OAAA;AAC1B,uDAAkD;AAAzC,gHAAA,YAAY,OAAA"}