@storyblok/api-client 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  4. package/dist/error.cjs +21 -0
  5. package/dist/error.cjs.map +1 -0
  6. package/dist/error.d.cts +19 -0
  7. package/dist/error.d.mts +19 -0
  8. package/dist/error.mjs +20 -0
  9. package/dist/error.mjs.map +1 -0
  10. package/dist/generated/datasource_entries/client.gen.cjs +10 -0
  11. package/dist/generated/datasource_entries/client.gen.cjs.map +1 -0
  12. package/dist/generated/datasource_entries/client.gen.mjs +10 -0
  13. package/dist/generated/datasource_entries/client.gen.mjs.map +1 -0
  14. package/dist/generated/datasource_entries/sdk.gen.cjs +21 -0
  15. package/dist/generated/datasource_entries/sdk.gen.cjs.map +1 -0
  16. package/dist/generated/datasource_entries/sdk.gen.mjs +21 -0
  17. package/dist/generated/datasource_entries/sdk.gen.mjs.map +1 -0
  18. package/dist/generated/datasource_entries/types.gen.d.cts +67 -0
  19. package/dist/generated/datasource_entries/types.gen.d.mts +67 -0
  20. package/dist/generated/datasources/client.gen.cjs +10 -0
  21. package/dist/generated/datasources/client.gen.cjs.map +1 -0
  22. package/dist/generated/datasources/client.gen.mjs +10 -0
  23. package/dist/generated/datasources/client.gen.mjs.map +1 -0
  24. package/dist/generated/datasources/sdk.gen.cjs +36 -0
  25. package/dist/generated/datasources/sdk.gen.cjs.map +1 -0
  26. package/dist/generated/datasources/sdk.gen.mjs +35 -0
  27. package/dist/generated/datasources/sdk.gen.mjs.map +1 -0
  28. package/dist/generated/datasources/types.gen.d.cts +109 -0
  29. package/dist/generated/datasources/types.gen.d.mts +109 -0
  30. package/dist/generated/links/client.gen.cjs +10 -0
  31. package/dist/generated/links/client.gen.cjs.map +1 -0
  32. package/dist/generated/links/client.gen.mjs +10 -0
  33. package/dist/generated/links/client.gen.mjs.map +1 -0
  34. package/dist/generated/links/sdk.gen.cjs +21 -0
  35. package/dist/generated/links/sdk.gen.cjs.map +1 -0
  36. package/dist/generated/links/sdk.gen.mjs +21 -0
  37. package/dist/generated/links/sdk.gen.mjs.map +1 -0
  38. package/dist/generated/links/types.gen.d.cts +142 -0
  39. package/dist/generated/links/types.gen.d.mts +142 -0
  40. package/dist/generated/shared/client/client.gen.cjs +215 -0
  41. package/dist/generated/shared/client/client.gen.cjs.map +1 -0
  42. package/dist/generated/shared/client/client.gen.mjs +213 -0
  43. package/dist/generated/shared/client/client.gen.mjs.map +1 -0
  44. package/dist/generated/shared/client/index.cjs +4 -0
  45. package/dist/generated/shared/client/index.mjs +6 -0
  46. package/dist/generated/shared/client/types.gen.d.cts +103 -0
  47. package/dist/generated/shared/client/types.gen.d.mts +103 -0
  48. package/dist/generated/shared/client/utils.gen.cjs +188 -0
  49. package/dist/generated/shared/client/utils.gen.cjs.map +1 -0
  50. package/dist/generated/shared/client/utils.gen.d.cts +21 -0
  51. package/dist/generated/shared/client/utils.gen.d.mts +21 -0
  52. package/dist/generated/shared/client/utils.gen.mjs +182 -0
  53. package/dist/generated/shared/client/utils.gen.mjs.map +1 -0
  54. package/dist/generated/shared/core/auth.gen.cjs +13 -0
  55. package/dist/generated/shared/core/auth.gen.cjs.map +1 -0
  56. package/dist/generated/shared/core/auth.gen.d.cts +21 -0
  57. package/dist/generated/shared/core/auth.gen.d.mts +21 -0
  58. package/dist/generated/shared/core/auth.gen.mjs +12 -0
  59. package/dist/generated/shared/core/auth.gen.mjs.map +1 -0
  60. package/dist/generated/shared/core/bodySerializer.gen.cjs +7 -0
  61. package/dist/generated/shared/core/bodySerializer.gen.cjs.map +1 -0
  62. package/dist/generated/shared/core/bodySerializer.gen.d.cts +20 -0
  63. package/dist/generated/shared/core/bodySerializer.gen.d.mts +20 -0
  64. package/dist/generated/shared/core/bodySerializer.gen.mjs +6 -0
  65. package/dist/generated/shared/core/bodySerializer.gen.mjs.map +1 -0
  66. package/dist/generated/shared/core/params.gen.cjs +11 -0
  67. package/dist/generated/shared/core/params.gen.cjs.map +1 -0
  68. package/dist/generated/shared/core/params.gen.mjs +11 -0
  69. package/dist/generated/shared/core/params.gen.mjs.map +1 -0
  70. package/dist/generated/shared/core/pathSerializer.gen.cjs +85 -0
  71. package/dist/generated/shared/core/pathSerializer.gen.cjs.map +1 -0
  72. package/dist/generated/shared/core/pathSerializer.gen.d.cts +13 -0
  73. package/dist/generated/shared/core/pathSerializer.gen.d.mts +13 -0
  74. package/dist/generated/shared/core/pathSerializer.gen.mjs +82 -0
  75. package/dist/generated/shared/core/pathSerializer.gen.mjs.map +1 -0
  76. package/dist/generated/shared/core/serverSentEvents.gen.cjs +96 -0
  77. package/dist/generated/shared/core/serverSentEvents.gen.cjs.map +1 -0
  78. package/dist/generated/shared/core/serverSentEvents.gen.d.cts +72 -0
  79. package/dist/generated/shared/core/serverSentEvents.gen.d.mts +72 -0
  80. package/dist/generated/shared/core/serverSentEvents.gen.mjs +95 -0
  81. package/dist/generated/shared/core/serverSentEvents.gen.mjs.map +1 -0
  82. package/dist/generated/shared/core/types.gen.d.cts +61 -0
  83. package/dist/generated/shared/core/types.gen.d.mts +61 -0
  84. package/dist/generated/shared/core/utils.gen.cjs +80 -0
  85. package/dist/generated/shared/core/utils.gen.cjs.map +1 -0
  86. package/dist/generated/shared/core/utils.gen.mjs +79 -0
  87. package/dist/generated/shared/core/utils.gen.mjs.map +1 -0
  88. package/dist/generated/spaces/client.gen.cjs +10 -0
  89. package/dist/generated/spaces/client.gen.cjs.map +1 -0
  90. package/dist/generated/spaces/client.gen.mjs +10 -0
  91. package/dist/generated/spaces/client.gen.mjs.map +1 -0
  92. package/dist/generated/spaces/sdk.gen.cjs +21 -0
  93. package/dist/generated/spaces/sdk.gen.cjs.map +1 -0
  94. package/dist/generated/spaces/sdk.gen.mjs +21 -0
  95. package/dist/generated/spaces/sdk.gen.mjs.map +1 -0
  96. package/dist/generated/spaces/types.gen.d.cts +34 -0
  97. package/dist/generated/spaces/types.gen.d.mts +34 -0
  98. package/dist/generated/stories/client.gen.cjs +10 -0
  99. package/dist/generated/stories/client.gen.cjs.map +1 -0
  100. package/dist/generated/stories/client.gen.mjs +10 -0
  101. package/dist/generated/stories/client.gen.mjs.map +1 -0
  102. package/dist/generated/stories/sdk.gen.cjs +36 -0
  103. package/dist/generated/stories/sdk.gen.cjs.map +1 -0
  104. package/dist/generated/stories/sdk.gen.mjs +35 -0
  105. package/dist/generated/stories/sdk.gen.mjs.map +1 -0
  106. package/dist/generated/stories/types.gen.d.cts +544 -0
  107. package/dist/generated/stories/types.gen.d.mts +544 -0
  108. package/dist/generated/tags/client.gen.cjs +10 -0
  109. package/dist/generated/tags/client.gen.cjs.map +1 -0
  110. package/dist/generated/tags/client.gen.mjs +10 -0
  111. package/dist/generated/tags/client.gen.mjs.map +1 -0
  112. package/dist/generated/tags/sdk.gen.cjs +21 -0
  113. package/dist/generated/tags/sdk.gen.cjs.map +1 -0
  114. package/dist/generated/tags/sdk.gen.mjs +21 -0
  115. package/dist/generated/tags/sdk.gen.mjs.map +1 -0
  116. package/dist/generated/tags/types.gen.d.cts +44 -0
  117. package/dist/generated/tags/types.gen.d.mts +44 -0
  118. package/dist/index.cjs +155 -0
  119. package/dist/index.cjs.map +1 -0
  120. package/dist/index.d.cts +161 -0
  121. package/dist/index.d.mts +161 -0
  122. package/dist/index.mjs +150 -0
  123. package/dist/index.mjs.map +1 -0
  124. package/dist/resources/datasource-entries.cjs +22 -0
  125. package/dist/resources/datasource-entries.cjs.map +1 -0
  126. package/dist/resources/datasource-entries.mjs +22 -0
  127. package/dist/resources/datasource-entries.mjs.map +1 -0
  128. package/dist/resources/datasources.cjs +37 -0
  129. package/dist/resources/datasources.cjs.map +1 -0
  130. package/dist/resources/datasources.mjs +37 -0
  131. package/dist/resources/datasources.mjs.map +1 -0
  132. package/dist/resources/links.cjs +22 -0
  133. package/dist/resources/links.cjs.map +1 -0
  134. package/dist/resources/links.mjs +22 -0
  135. package/dist/resources/links.mjs.map +1 -0
  136. package/dist/resources/spaces.cjs +22 -0
  137. package/dist/resources/spaces.cjs.map +1 -0
  138. package/dist/resources/spaces.mjs +22 -0
  139. package/dist/resources/spaces.mjs.map +1 -0
  140. package/dist/resources/stories.cjs +69 -0
  141. package/dist/resources/stories.cjs.map +1 -0
  142. package/dist/resources/stories.d.cts +16 -0
  143. package/dist/resources/stories.d.mts +16 -0
  144. package/dist/resources/stories.mjs +69 -0
  145. package/dist/resources/stories.mjs.map +1 -0
  146. package/dist/resources/tags.cjs +22 -0
  147. package/dist/resources/tags.cjs.map +1 -0
  148. package/dist/resources/tags.mjs +22 -0
  149. package/dist/resources/tags.mjs.map +1 -0
  150. package/dist/types.d.cts +19 -0
  151. package/dist/types.d.mts +19 -0
  152. package/dist/utils/array.cjs +12 -0
  153. package/dist/utils/array.cjs.map +1 -0
  154. package/dist/utils/array.mjs +11 -0
  155. package/dist/utils/array.mjs.map +1 -0
  156. package/dist/utils/cache.cjs +73 -0
  157. package/dist/utils/cache.cjs.map +1 -0
  158. package/dist/utils/cache.d.cts +26 -0
  159. package/dist/utils/cache.d.mts +26 -0
  160. package/dist/utils/cache.mjs +71 -0
  161. package/dist/utils/cache.mjs.map +1 -0
  162. package/dist/utils/cv.cjs +19 -0
  163. package/dist/utils/cv.cjs.map +1 -0
  164. package/dist/utils/cv.mjs +18 -0
  165. package/dist/utils/cv.mjs.map +1 -0
  166. package/dist/utils/fetch-rel-uuids.cjs +45 -0
  167. package/dist/utils/fetch-rel-uuids.cjs.map +1 -0
  168. package/dist/utils/fetch-rel-uuids.mjs +45 -0
  169. package/dist/utils/fetch-rel-uuids.mjs.map +1 -0
  170. package/dist/utils/inline-relations.cjs +86 -0
  171. package/dist/utils/inline-relations.cjs.map +1 -0
  172. package/dist/utils/inline-relations.mjs +84 -0
  173. package/dist/utils/inline-relations.mjs.map +1 -0
  174. package/dist/utils/rate-limit.cjs +140 -0
  175. package/dist/utils/rate-limit.cjs.map +1 -0
  176. package/dist/utils/rate-limit.d.cts +36 -0
  177. package/dist/utils/rate-limit.d.mts +36 -0
  178. package/dist/utils/rate-limit.mjs +137 -0
  179. package/dist/utils/rate-limit.mjs.map +1 -0
  180. package/dist/utils/request.cjs +38 -0
  181. package/dist/utils/request.cjs.map +1 -0
  182. package/dist/utils/request.mjs +35 -0
  183. package/dist/utils/request.mjs.map +1 -0
  184. package/package.json +79 -0
@@ -0,0 +1,69 @@
1
+ import { get, getAll } from "../generated/stories/sdk.gen.mjs";
2
+ import { inlineStoriesContent, inlineStoryContent, resolveRelationMap } from "../utils/inline-relations.mjs";
3
+
4
+ //#region src/resources/stories.ts
5
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
6
+ function createStoriesResource(deps) {
7
+ const { client, requestWithCache, asApiResponse, inlineRelations, throttleManager } = deps;
8
+ return {
9
+ get: async (identifier, options = {}) => {
10
+ const { query = {}, signal, throwOnError } = options;
11
+ const resolvedQuery = typeof identifier === "string" && UUID_RE.test(identifier) && !query.find_by ? {
12
+ ...query,
13
+ find_by: "uuid"
14
+ } : query;
15
+ const requestPath = `/v2/cdn/stories/${identifier}`;
16
+ return requestWithCache("GET", requestPath, resolvedQuery, async (requestQuery) => {
17
+ const response = await throttleManager.execute(requestPath, requestQuery, () => asApiResponse(get({
18
+ client,
19
+ path: { identifier },
20
+ query: requestQuery,
21
+ signal,
22
+ ...throwOnError === void 0 ? {} : { throwOnError }
23
+ })));
24
+ if (!inlineRelations || response.data === void 0) return response;
25
+ const resolved = await resolveRelationMap(response.data, requestQuery, {
26
+ client,
27
+ throttleManager
28
+ });
29
+ if (!resolved) return response;
30
+ return {
31
+ ...response,
32
+ data: {
33
+ ...response.data,
34
+ story: inlineStoryContent(response.data.story, resolved.relationPaths, resolved.relationMap)
35
+ }
36
+ };
37
+ });
38
+ },
39
+ getAll: async (options = {}) => {
40
+ const { query = {}, signal, throwOnError } = options;
41
+ const requestPath = "/v2/cdn/stories";
42
+ return requestWithCache("GET", requestPath, query, async (requestQuery) => {
43
+ const response = await throttleManager.execute(requestPath, requestQuery, () => asApiResponse(getAll({
44
+ client,
45
+ query: requestQuery,
46
+ signal,
47
+ ...throwOnError === void 0 ? {} : { throwOnError }
48
+ })));
49
+ if (!inlineRelations || response.data === void 0) return response;
50
+ const resolved = await resolveRelationMap(response.data, requestQuery, {
51
+ client,
52
+ throttleManager
53
+ });
54
+ if (!resolved) return response;
55
+ return {
56
+ ...response,
57
+ data: {
58
+ ...response.data,
59
+ stories: inlineStoriesContent(response.data.stories, resolved.relationPaths, resolved.relationMap)
60
+ }
61
+ };
62
+ });
63
+ }
64
+ };
65
+ }
66
+
67
+ //#endregion
68
+ export { createStoriesResource };
69
+ //# sourceMappingURL=stories.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stories.mjs","names":[],"sources":["../../src/resources/stories.ts"],"sourcesContent":["import { get, getAll } from '../generated/stories/sdk.gen';\nimport type { GetAllData, GetAllResponses, GetData, GetResponses } from '../generated/stories/types.gen';\nimport type {\n AssetField,\n MultilinkField,\n PluginField,\n RichtextField,\n StoryCapi,\n StoryContent,\n TableField,\n} from '../generated/stories';\nimport { inlineStoriesContent, inlineStoryContent, resolveRelationMap } from '../utils/inline-relations';\nimport type { ApiResponse, ResourceDeps } from '../types';\n\ntype InlinedStoryContentField =\n | string\n | number\n | boolean\n | Array<string | AssetField | StoryContent | StoryWithInlinedRelations>\n | AssetField\n | MultilinkField\n | TableField\n | RichtextField\n | PluginField\n | StoryWithInlinedRelations\n | undefined;\n\ninterface InlinedStoryContent {\n _uid: string;\n component: string;\n _editable?: string;\n [key: string]: InlinedStoryContentField;\n}\n\nexport type StoryWithInlinedRelations = Omit<StoryCapi, 'content'> & {\n content: InlinedStoryContent;\n};\n\ntype StoryResult<InlineRelations extends boolean> = InlineRelations extends true\n ? StoryWithInlinedRelations\n : StoryCapi;\n\ntype GetResponse<InlineRelations extends boolean> = Omit<GetResponses[200], 'story'> & {\n story: StoryResult<InlineRelations>;\n};\ntype GetAllResponse<InlineRelations extends boolean> = Omit<GetAllResponses[200], 'stories'> & {\n stories: Array<StoryResult<InlineRelations>>;\n};\n\n/** Pre-resolved to avoid TypeScript emitting deep indexed-access chains that trip up DTS bundlers. */\ntype StoryIdentifier = GetData['path']['identifier'];\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nexport interface StoriesResourceDeps extends ResourceDeps {\n inlineRelations: boolean;\n}\n\nexport function createStoriesResource<InlineRelations extends boolean>(\n deps: StoriesResourceDeps,\n) {\n const { client, requestWithCache, asApiResponse, inlineRelations, throttleManager } = deps;\n\n return {\n get: async <ThrowOnError extends boolean = false>(\n identifier: StoryIdentifier,\n options: { query?: GetData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError } = {},\n ): Promise<ApiResponse<GetResponse<InlineRelations>, ThrowOnError>> => {\n const { query = {}, signal, throwOnError } = options;\n const resolvedQuery = typeof identifier === 'string' && UUID_RE.test(identifier) && !query.find_by\n ? { ...query, find_by: 'uuid' as const }\n : query;\n const requestPath = `/v2/cdn/stories/${identifier}`;\n type Res = ApiResponse<GetResponse<InlineRelations>, ThrowOnError>;\n return requestWithCache<GetResponse<InlineRelations>, ThrowOnError>('GET', requestPath, resolvedQuery, async (requestQuery: Record<string, unknown>): Promise<Res> => {\n const response = await throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse<GetResponse<InlineRelations>, ThrowOnError>(get({\n client,\n path: { identifier },\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n })));\n\n if (!inlineRelations || response.data === undefined) {\n return response;\n }\n\n const resolved = await resolveRelationMap(response.data, requestQuery, { client, throttleManager });\n if (!resolved) {\n return response;\n }\n\n return {\n ...response,\n data: {\n ...response.data,\n story: inlineStoryContent(response.data.story, resolved.relationPaths, resolved.relationMap),\n },\n };\n });\n },\n\n getAll: async <ThrowOnError extends boolean = false>(\n options: { query?: GetAllData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError } = {},\n ): Promise<ApiResponse<GetAllResponse<InlineRelations>, ThrowOnError>> => {\n const { query = {}, signal, throwOnError } = options;\n const requestPath = '/v2/cdn/stories';\n type ResAll = ApiResponse<GetAllResponse<InlineRelations>, ThrowOnError>;\n return requestWithCache<GetAllResponse<InlineRelations>, ThrowOnError>('GET', requestPath, query, async (requestQuery: Record<string, unknown>): Promise<ResAll> => {\n const response = await throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse<GetAllResponse<InlineRelations>, ThrowOnError>(getAll({\n client,\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n })));\n\n if (!inlineRelations || response.data === undefined) {\n return response;\n }\n\n const resolved = await resolveRelationMap(response.data, requestQuery, { client, throttleManager });\n if (!resolved) {\n return response;\n }\n\n return {\n ...response,\n data: {\n ...response.data,\n stories: inlineStoriesContent(response.data.stories, resolved.relationPaths, resolved.relationMap),\n },\n };\n });\n },\n };\n}\n"],"mappings":";;;;AAoDA,MAAM,UAAU;AAMhB,SAAgB,sBACd,MACA;CACA,MAAM,EAAE,QAAQ,kBAAkB,eAAe,iBAAiB,oBAAoB;AAEtF,QAAO;EACL,KAAK,OACH,YACA,UAA2F,EAAE,KACxB;GACrE,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,iBAAiB;GAC7C,MAAM,gBAAgB,OAAO,eAAe,YAAY,QAAQ,KAAK,WAAW,IAAI,CAAC,MAAM,UACvF;IAAE,GAAG;IAAO,SAAS;IAAiB,GACtC;GACJ,MAAM,cAAc,mBAAmB;AAEvC,UAAO,iBAA6D,OAAO,aAAa,eAAe,OAAO,iBAAwD;IACpK,MAAM,WAAW,MAAM,gBAAgB,QAAQ,aAAa,oBAC1D,cAA0D,IAAI;KAC5D;KACA,MAAM,EAAE,YAAY;KACpB,OAAO;KACP;KACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;KACvD,CAAC,CAAC,CAAC;AAEN,QAAI,CAAC,mBAAmB,SAAS,SAAS,OACxC,QAAO;IAGT,MAAM,WAAW,MAAM,mBAAmB,SAAS,MAAM,cAAc;KAAE;KAAQ;KAAiB,CAAC;AACnG,QAAI,CAAC,SACH,QAAO;AAGT,WAAO;KACL,GAAG;KACH,MAAM;MACJ,GAAG,SAAS;MACZ,OAAO,mBAAmB,SAAS,KAAK,OAAO,SAAS,eAAe,SAAS,YAAY;MAC7F;KACF;KACD;;EAGJ,QAAQ,OACN,UAA8F,EAAE,KACxB;GACxE,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,iBAAiB;GAC7C,MAAM,cAAc;AAEpB,UAAO,iBAAgE,OAAO,aAAa,OAAO,OAAO,iBAA2D;IAClK,MAAM,WAAW,MAAM,gBAAgB,QAAQ,aAAa,oBAC1D,cAA6D,OAAO;KAClE;KACA,OAAO;KACP;KACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;KACvD,CAAC,CAAC,CAAC;AAEN,QAAI,CAAC,mBAAmB,SAAS,SAAS,OACxC,QAAO;IAGT,MAAM,WAAW,MAAM,mBAAmB,SAAS,MAAM,cAAc;KAAE;KAAQ;KAAiB,CAAC;AACnG,QAAI,CAAC,SACH,QAAO;AAGT,WAAO;KACL,GAAG;KACH,MAAM;MACJ,GAAG,SAAS;MACZ,SAAS,qBAAqB,SAAS,KAAK,SAAS,SAAS,eAAe,SAAS,YAAY;MACnG;KACF;KACD;;EAEL"}
@@ -0,0 +1,22 @@
1
+ const require_sdk_gen = require('../generated/tags/sdk.gen.cjs');
2
+
3
+ //#region src/resources/tags.ts
4
+ function createTagsResource(deps) {
5
+ const { client, requestWithCache, asApiResponse, throttleManager } = deps;
6
+ return { getAll: async (options = {}) => {
7
+ const { query = {}, signal, throwOnError } = options;
8
+ const requestPath = "/v2/cdn/tags";
9
+ return requestWithCache("GET", requestPath, query, (requestQuery) => {
10
+ return throttleManager.execute(requestPath, requestQuery, () => asApiResponse(require_sdk_gen.getAll({
11
+ client,
12
+ query: requestQuery,
13
+ signal,
14
+ ...throwOnError === void 0 ? {} : { throwOnError }
15
+ })));
16
+ });
17
+ } };
18
+ }
19
+
20
+ //#endregion
21
+ exports.createTagsResource = createTagsResource;
22
+ //# sourceMappingURL=tags.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.cjs","names":["getAllTagsApi"],"sources":["../../src/resources/tags.ts"],"sourcesContent":["import { getAll as getAllTagsApi } from '../generated/tags/sdk.gen';\nimport type { GetAllData as TagsGetAllData, GetAllResponses as TagsGetAllResponses } from '../generated/tags/types.gen';\nimport type { ApiResponse, ResourceDeps } from '../types';\n\nexport function createTagsResource(deps: ResourceDeps) {\n const { client, requestWithCache, asApiResponse, throttleManager } = deps;\n\n return {\n getAll: async <ThrowOnError extends boolean = false>(\n options: { query?: TagsGetAllData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError } = {},\n ): Promise<ApiResponse<TagsGetAllResponses[200], ThrowOnError>> => {\n const { query = {}, signal, throwOnError } = options;\n const requestPath = '/v2/cdn/tags';\n return requestWithCache<TagsGetAllResponses[200], ThrowOnError>('GET', requestPath, query, (requestQuery: Record<string, unknown>) => {\n return throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse<TagsGetAllResponses[200], ThrowOnError>(getAllTagsApi({\n client,\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n })));\n });\n },\n };\n}\n"],"mappings":";;;AAIA,SAAgB,mBAAmB,MAAoB;CACrD,MAAM,EAAE,QAAQ,kBAAkB,eAAe,oBAAoB;AAErE,QAAO,EACL,QAAQ,OACN,UAAkG,EAAE,KACnC;EACjE,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,iBAAiB;EAC7C,MAAM,cAAc;AACpB,SAAO,iBAAyD,OAAO,aAAa,QAAQ,iBAA0C;AACpI,UAAO,gBAAgB,QAAQ,aAAa,oBAC1C,cAAsDA,uBAAc;IAClE;IACA,OAAO;IACP;IACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IACvD,CAAC,CAAC,CAAC;IACN;IAEL"}
@@ -0,0 +1,22 @@
1
+ import { getAll } from "../generated/tags/sdk.gen.mjs";
2
+
3
+ //#region src/resources/tags.ts
4
+ function createTagsResource(deps) {
5
+ const { client, requestWithCache, asApiResponse, throttleManager } = deps;
6
+ return { getAll: async (options = {}) => {
7
+ const { query = {}, signal, throwOnError } = options;
8
+ const requestPath = "/v2/cdn/tags";
9
+ return requestWithCache("GET", requestPath, query, (requestQuery) => {
10
+ return throttleManager.execute(requestPath, requestQuery, () => asApiResponse(getAll({
11
+ client,
12
+ query: requestQuery,
13
+ signal,
14
+ ...throwOnError === void 0 ? {} : { throwOnError }
15
+ })));
16
+ });
17
+ } };
18
+ }
19
+
20
+ //#endregion
21
+ export { createTagsResource };
22
+ //# sourceMappingURL=tags.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.mjs","names":["getAllTagsApi"],"sources":["../../src/resources/tags.ts"],"sourcesContent":["import { getAll as getAllTagsApi } from '../generated/tags/sdk.gen';\nimport type { GetAllData as TagsGetAllData, GetAllResponses as TagsGetAllResponses } from '../generated/tags/types.gen';\nimport type { ApiResponse, ResourceDeps } from '../types';\n\nexport function createTagsResource(deps: ResourceDeps) {\n const { client, requestWithCache, asApiResponse, throttleManager } = deps;\n\n return {\n getAll: async <ThrowOnError extends boolean = false>(\n options: { query?: TagsGetAllData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError } = {},\n ): Promise<ApiResponse<TagsGetAllResponses[200], ThrowOnError>> => {\n const { query = {}, signal, throwOnError } = options;\n const requestPath = '/v2/cdn/tags';\n return requestWithCache<TagsGetAllResponses[200], ThrowOnError>('GET', requestPath, query, (requestQuery: Record<string, unknown>) => {\n return throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse<TagsGetAllResponses[200], ThrowOnError>(getAllTagsApi({\n client,\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n })));\n });\n },\n };\n}\n"],"mappings":";;;AAIA,SAAgB,mBAAmB,MAAoB;CACrD,MAAM,EAAE,QAAQ,kBAAkB,eAAe,oBAAoB;AAErE,QAAO,EACL,QAAQ,OACN,UAAkG,EAAE,KACnC;EACjE,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,iBAAiB;EAC7C,MAAM,cAAc;AACpB,SAAO,iBAAyD,OAAO,aAAa,QAAQ,iBAA0C;AACpI,UAAO,gBAAgB,QAAQ,aAAa,oBAC1C,cAAsDA,OAAc;IAClE;IACA,OAAO;IACP;IACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IACvD,CAAC,CAAC,CAAC;IACN;IAEL"}
@@ -0,0 +1,19 @@
1
+ import { RequestOptions } from "./generated/shared/client/types.gen.cjs";
2
+ import { ClientError } from "./error.cjs";
3
+
4
+ //#region src/types.d.ts
5
+ type ApiResponse<Data = unknown, ThrowOnError extends boolean = false> = ThrowOnError extends true ? {
6
+ data: Data;
7
+ response: Response;
8
+ request: Request;
9
+ } : {
10
+ data?: Data;
11
+ error?: ClientError;
12
+ response: Response;
13
+ request: Request;
14
+ };
15
+ type HttpRequestOptions = Omit<RequestOptions, 'method' | 'security' | 'url'>;
16
+ type HttpRequestMethod = <TData = unknown>(path: string, options?: HttpRequestOptions) => Promise<ApiResponse<TData>>;
17
+ //#endregion
18
+ export { ApiResponse, HttpRequestMethod, HttpRequestOptions };
19
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1,19 @@
1
+ import { RequestOptions } from "./generated/shared/client/types.gen.mjs";
2
+ import { ClientError } from "./error.mjs";
3
+
4
+ //#region src/types.d.ts
5
+ type ApiResponse<Data = unknown, ThrowOnError extends boolean = false> = ThrowOnError extends true ? {
6
+ data: Data;
7
+ response: Response;
8
+ request: Request;
9
+ } : {
10
+ data?: Data;
11
+ error?: ClientError;
12
+ response: Response;
13
+ request: Request;
14
+ };
15
+ type HttpRequestOptions = Omit<RequestOptions, 'method' | 'security' | 'url'>;
16
+ type HttpRequestMethod = <TData = unknown>(path: string, options?: HttpRequestOptions) => Promise<ApiResponse<TData>>;
17
+ //#endregion
18
+ export { ApiResponse, HttpRequestMethod, HttpRequestOptions };
19
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1,12 @@
1
+
2
+ //#region src/utils/array.ts
3
+ const chunkArray = (items, chunkSize) => {
4
+ if (chunkSize <= 0) return [];
5
+ const chunks = [];
6
+ for (let index = 0; index < items.length; index += chunkSize) chunks.push(items.slice(index, index + chunkSize));
7
+ return chunks;
8
+ };
9
+
10
+ //#endregion
11
+ exports.chunkArray = chunkArray;
12
+ //# sourceMappingURL=array.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.cjs","names":[],"sources":["../../src/utils/array.ts"],"sourcesContent":["export const chunkArray = <T>(items: T[], chunkSize: number): T[][] => {\n if (chunkSize <= 0) {\n return [];\n }\n\n const chunks: T[][] = [];\n for (let index = 0; index < items.length; index += chunkSize) {\n chunks.push(items.slice(index, index + chunkSize));\n }\n\n return chunks;\n};\n"],"mappings":";;AAAA,MAAa,cAAiB,OAAY,cAA6B;AACrE,KAAI,aAAa,EACf,QAAO,EAAE;CAGX,MAAM,SAAgB,EAAE;AACxB,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,UACjD,QAAO,KAAK,MAAM,MAAM,OAAO,QAAQ,UAAU,CAAC;AAGpD,QAAO"}
@@ -0,0 +1,11 @@
1
+ //#region src/utils/array.ts
2
+ const chunkArray = (items, chunkSize) => {
3
+ if (chunkSize <= 0) return [];
4
+ const chunks = [];
5
+ for (let index = 0; index < items.length; index += chunkSize) chunks.push(items.slice(index, index + chunkSize));
6
+ return chunks;
7
+ };
8
+
9
+ //#endregion
10
+ export { chunkArray };
11
+ //# sourceMappingURL=array.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.mjs","names":[],"sources":["../../src/utils/array.ts"],"sourcesContent":["export const chunkArray = <T>(items: T[], chunkSize: number): T[][] => {\n if (chunkSize <= 0) {\n return [];\n }\n\n const chunks: T[][] = [];\n for (let index = 0; index < items.length; index += chunkSize) {\n chunks.push(items.slice(index, index + chunkSize));\n }\n\n return chunks;\n};\n"],"mappings":";AAAA,MAAa,cAAiB,OAAY,cAA6B;AACrE,KAAI,aAAa,EACf,QAAO,EAAE;CAGX,MAAM,SAAgB,EAAE;AACxB,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,UACjD,QAAO,KAAK,MAAM,MAAM,OAAO,QAAQ,UAAU,CAAC;AAGpD,QAAO"}
@@ -0,0 +1,73 @@
1
+
2
+ //#region src/utils/cache.ts
3
+ const createMemoryCacheProvider = (options = {}) => {
4
+ const maxEntries = options.maxEntries ?? 1e3;
5
+ const cache = /* @__PURE__ */ new Map();
6
+ return {
7
+ async get(key) {
8
+ const entry = cache.get(key);
9
+ if (!entry) return;
10
+ if (Date.now() - entry.storedAt > entry.ttlMs) {
11
+ cache.delete(key);
12
+ return;
13
+ }
14
+ return entry;
15
+ },
16
+ async set(key, entry) {
17
+ const cacheEntry = {
18
+ ...entry,
19
+ storedAt: entry.storedAt ?? Date.now()
20
+ };
21
+ if (cache.has(key)) cache.delete(key);
22
+ cache.set(key, cacheEntry);
23
+ if (cache.size > maxEntries) {
24
+ const oldestKey = cache.keys().next().value;
25
+ if (oldestKey !== void 0) cache.delete(oldestKey);
26
+ }
27
+ },
28
+ async flush() {
29
+ cache.clear();
30
+ }
31
+ };
32
+ };
33
+ const createCacheFirstStrategy = () => {
34
+ return async ({ cachedResult, loadNetwork }) => {
35
+ if (cachedResult !== void 0) return cachedResult;
36
+ return loadNetwork();
37
+ };
38
+ };
39
+ const createNetworkFirstStrategy = () => {
40
+ return async ({ cachedResult, loadNetwork }) => {
41
+ try {
42
+ return await loadNetwork();
43
+ } catch (error) {
44
+ if (cachedResult !== void 0) return cachedResult;
45
+ throw error;
46
+ }
47
+ };
48
+ };
49
+ const createSwrStrategy = () => {
50
+ const revalidations = /* @__PURE__ */ new Map();
51
+ return async ({ key, cachedResult, loadNetwork }) => {
52
+ if (cachedResult !== void 0) {
53
+ if (!revalidations.has(key)) {
54
+ const revalidation = loadNetwork().catch(() => void 0).finally(() => {
55
+ revalidations.delete(key);
56
+ });
57
+ revalidations.set(key, revalidation);
58
+ }
59
+ return cachedResult;
60
+ }
61
+ return loadNetwork();
62
+ };
63
+ };
64
+ const createStrategy = (strategy) => {
65
+ if (strategy === "network-first") return createNetworkFirstStrategy();
66
+ if (strategy === "swr") return createSwrStrategy();
67
+ return createCacheFirstStrategy();
68
+ };
69
+
70
+ //#endregion
71
+ exports.createMemoryCacheProvider = createMemoryCacheProvider;
72
+ exports.createStrategy = createStrategy;
73
+ //# sourceMappingURL=cache.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.cjs","names":[],"sources":["../../src/utils/cache.ts"],"sourcesContent":["export type CacheStrategy = 'cache-first' | 'network-first' | 'swr';\n\ninterface StrategyContext<TData> {\n key: string;\n cachedResult: TData | undefined;\n loadNetwork: () => Promise<TData>;\n}\n\nexport type CacheStrategyHandler = <TData>(context: StrategyContext<TData>) => Promise<TData>;\n\nexport interface CacheEntry<TValue = unknown> {\n value: TValue;\n storedAt: number;\n ttlMs: number;\n}\n\nexport interface CacheEntryInput<TValue = unknown> {\n value: TValue;\n storedAt?: number;\n ttlMs: number;\n}\n\nexport interface CacheProvider {\n get: <TValue = unknown>(key: string) => Promise<CacheEntry<TValue> | undefined>;\n set: <TValue = unknown>(key: string, entry: CacheEntryInput<TValue>) => Promise<void>;\n flush: () => Promise<void>;\n}\n\ninterface MemoryCacheProviderOptions {\n maxEntries?: number;\n}\n\nexport const createMemoryCacheProvider = (\n options: MemoryCacheProviderOptions = {},\n): CacheProvider => {\n const maxEntries = options.maxEntries ?? 1_000;\n const cache = new Map<string, CacheEntry<unknown>>();\n\n return {\n async get<TValue = unknown>(key: string) {\n // Map stores heterogeneous CacheEntry<unknown>; caller provides the expected type via the generic.\n const entry = cache.get(key) as CacheEntry<TValue>;\n if (!entry) {\n return undefined;\n }\n\n if (Date.now() - entry.storedAt > entry.ttlMs) {\n cache.delete(key);\n return undefined;\n }\n\n return entry;\n },\n async set<TValue = unknown>(key: string, entry: CacheEntryInput<TValue>) {\n const cacheEntry: CacheEntry<TValue> = {\n ...entry,\n storedAt: entry.storedAt ?? Date.now(),\n };\n\n // Move existing keys to the end so eviction stays LRU-like.\n // Map#set updates values in place and does not change insertion order.\n if (cache.has(key)) {\n cache.delete(key);\n }\n\n cache.set(key, cacheEntry);\n\n if (cache.size > maxEntries) {\n const oldestKey = cache.keys().next().value;\n if (oldestKey !== undefined) {\n cache.delete(oldestKey);\n }\n }\n },\n async flush(): Promise<void> {\n cache.clear();\n },\n };\n};\n\nexport const createCacheFirstStrategy = (): CacheStrategyHandler => {\n return async <TData>({ cachedResult, loadNetwork }: StrategyContext<TData>) => {\n if (cachedResult !== undefined) {\n return cachedResult;\n }\n\n return loadNetwork();\n };\n};\n\nexport const createNetworkFirstStrategy = (): CacheStrategyHandler => {\n return async <TData>({ cachedResult, loadNetwork }: StrategyContext<TData>) => {\n try {\n return await loadNetwork();\n }\n catch (error) {\n // network-first: try network, fall back to cached data if available.\n if (cachedResult !== undefined) {\n return cachedResult;\n }\n\n throw error;\n }\n };\n};\n\nexport const createSwrStrategy = (): CacheStrategyHandler => {\n const revalidations = new Map<string, Promise<unknown>>();\n\n return async <TData>({ key, cachedResult, loadNetwork }: StrategyContext<TData>) => {\n if (cachedResult !== undefined) {\n if (!revalidations.has(key)) {\n const revalidation = loadNetwork()\n .catch(() => undefined)\n .finally(() => {\n revalidations.delete(key);\n });\n revalidations.set(key, revalidation);\n }\n\n return cachedResult;\n }\n\n return loadNetwork();\n };\n};\n\nexport const createStrategy = (strategy: CacheStrategy): CacheStrategyHandler => {\n if (strategy === 'network-first') {\n return createNetworkFirstStrategy();\n }\n\n if (strategy === 'swr') {\n return createSwrStrategy();\n }\n\n return createCacheFirstStrategy();\n};\n"],"mappings":";;AAgCA,MAAa,6BACX,UAAsC,EAAE,KACtB;CAClB,MAAM,aAAa,QAAQ,cAAc;CACzC,MAAM,wBAAQ,IAAI,KAAkC;AAEpD,QAAO;EACL,MAAM,IAAsB,KAAa;GAEvC,MAAM,QAAQ,MAAM,IAAI,IAAI;AAC5B,OAAI,CAAC,MACH;AAGF,OAAI,KAAK,KAAK,GAAG,MAAM,WAAW,MAAM,OAAO;AAC7C,UAAM,OAAO,IAAI;AACjB;;AAGF,UAAO;;EAET,MAAM,IAAsB,KAAa,OAAgC;GACvE,MAAM,aAAiC;IACrC,GAAG;IACH,UAAU,MAAM,YAAY,KAAK,KAAK;IACvC;AAID,OAAI,MAAM,IAAI,IAAI,CAChB,OAAM,OAAO,IAAI;AAGnB,SAAM,IAAI,KAAK,WAAW;AAE1B,OAAI,MAAM,OAAO,YAAY;IAC3B,MAAM,YAAY,MAAM,MAAM,CAAC,MAAM,CAAC;AACtC,QAAI,cAAc,OAChB,OAAM,OAAO,UAAU;;;EAI7B,MAAM,QAAuB;AAC3B,SAAM,OAAO;;EAEhB;;AAGH,MAAa,iCAAuD;AAClE,QAAO,OAAc,EAAE,cAAc,kBAA0C;AAC7E,MAAI,iBAAiB,OACnB,QAAO;AAGT,SAAO,aAAa;;;AAIxB,MAAa,mCAAyD;AACpE,QAAO,OAAc,EAAE,cAAc,kBAA0C;AAC7E,MAAI;AACF,UAAO,MAAM,aAAa;WAErB,OAAO;AAEZ,OAAI,iBAAiB,OACnB,QAAO;AAGT,SAAM;;;;AAKZ,MAAa,0BAAgD;CAC3D,MAAM,gCAAgB,IAAI,KAA+B;AAEzD,QAAO,OAAc,EAAE,KAAK,cAAc,kBAA0C;AAClF,MAAI,iBAAiB,QAAW;AAC9B,OAAI,CAAC,cAAc,IAAI,IAAI,EAAE;IAC3B,MAAM,eAAe,aAAa,CAC/B,YAAY,OAAU,CACtB,cAAc;AACb,mBAAc,OAAO,IAAI;MACzB;AACJ,kBAAc,IAAI,KAAK,aAAa;;AAGtC,UAAO;;AAGT,SAAO,aAAa;;;AAIxB,MAAa,kBAAkB,aAAkD;AAC/E,KAAI,aAAa,gBACf,QAAO,4BAA4B;AAGrC,KAAI,aAAa,MACf,QAAO,mBAAmB;AAG5B,QAAO,0BAA0B"}
@@ -0,0 +1,26 @@
1
+ //#region src/utils/cache.d.ts
2
+ type CacheStrategy = 'cache-first' | 'network-first' | 'swr';
3
+ interface StrategyContext<TData> {
4
+ key: string;
5
+ cachedResult: TData | undefined;
6
+ loadNetwork: () => Promise<TData>;
7
+ }
8
+ type CacheStrategyHandler = <TData>(context: StrategyContext<TData>) => Promise<TData>;
9
+ interface CacheEntry<TValue = unknown> {
10
+ value: TValue;
11
+ storedAt: number;
12
+ ttlMs: number;
13
+ }
14
+ interface CacheEntryInput<TValue = unknown> {
15
+ value: TValue;
16
+ storedAt?: number;
17
+ ttlMs: number;
18
+ }
19
+ interface CacheProvider {
20
+ get: <TValue = unknown>(key: string) => Promise<CacheEntry<TValue> | undefined>;
21
+ set: <TValue = unknown>(key: string, entry: CacheEntryInput<TValue>) => Promise<void>;
22
+ flush: () => Promise<void>;
23
+ }
24
+ //#endregion
25
+ export { CacheProvider, CacheStrategy, CacheStrategyHandler };
26
+ //# sourceMappingURL=cache.d.cts.map
@@ -0,0 +1,26 @@
1
+ //#region src/utils/cache.d.ts
2
+ type CacheStrategy = 'cache-first' | 'network-first' | 'swr';
3
+ interface StrategyContext<TData> {
4
+ key: string;
5
+ cachedResult: TData | undefined;
6
+ loadNetwork: () => Promise<TData>;
7
+ }
8
+ type CacheStrategyHandler = <TData>(context: StrategyContext<TData>) => Promise<TData>;
9
+ interface CacheEntry<TValue = unknown> {
10
+ value: TValue;
11
+ storedAt: number;
12
+ ttlMs: number;
13
+ }
14
+ interface CacheEntryInput<TValue = unknown> {
15
+ value: TValue;
16
+ storedAt?: number;
17
+ ttlMs: number;
18
+ }
19
+ interface CacheProvider {
20
+ get: <TValue = unknown>(key: string) => Promise<CacheEntry<TValue> | undefined>;
21
+ set: <TValue = unknown>(key: string, entry: CacheEntryInput<TValue>) => Promise<void>;
22
+ flush: () => Promise<void>;
23
+ }
24
+ //#endregion
25
+ export { CacheProvider, CacheStrategy, CacheStrategyHandler };
26
+ //# sourceMappingURL=cache.d.mts.map
@@ -0,0 +1,71 @@
1
+ //#region src/utils/cache.ts
2
+ const createMemoryCacheProvider = (options = {}) => {
3
+ const maxEntries = options.maxEntries ?? 1e3;
4
+ const cache = /* @__PURE__ */ new Map();
5
+ return {
6
+ async get(key) {
7
+ const entry = cache.get(key);
8
+ if (!entry) return;
9
+ if (Date.now() - entry.storedAt > entry.ttlMs) {
10
+ cache.delete(key);
11
+ return;
12
+ }
13
+ return entry;
14
+ },
15
+ async set(key, entry) {
16
+ const cacheEntry = {
17
+ ...entry,
18
+ storedAt: entry.storedAt ?? Date.now()
19
+ };
20
+ if (cache.has(key)) cache.delete(key);
21
+ cache.set(key, cacheEntry);
22
+ if (cache.size > maxEntries) {
23
+ const oldestKey = cache.keys().next().value;
24
+ if (oldestKey !== void 0) cache.delete(oldestKey);
25
+ }
26
+ },
27
+ async flush() {
28
+ cache.clear();
29
+ }
30
+ };
31
+ };
32
+ const createCacheFirstStrategy = () => {
33
+ return async ({ cachedResult, loadNetwork }) => {
34
+ if (cachedResult !== void 0) return cachedResult;
35
+ return loadNetwork();
36
+ };
37
+ };
38
+ const createNetworkFirstStrategy = () => {
39
+ return async ({ cachedResult, loadNetwork }) => {
40
+ try {
41
+ return await loadNetwork();
42
+ } catch (error) {
43
+ if (cachedResult !== void 0) return cachedResult;
44
+ throw error;
45
+ }
46
+ };
47
+ };
48
+ const createSwrStrategy = () => {
49
+ const revalidations = /* @__PURE__ */ new Map();
50
+ return async ({ key, cachedResult, loadNetwork }) => {
51
+ if (cachedResult !== void 0) {
52
+ if (!revalidations.has(key)) {
53
+ const revalidation = loadNetwork().catch(() => void 0).finally(() => {
54
+ revalidations.delete(key);
55
+ });
56
+ revalidations.set(key, revalidation);
57
+ }
58
+ return cachedResult;
59
+ }
60
+ return loadNetwork();
61
+ };
62
+ };
63
+ const createStrategy = (strategy) => {
64
+ if (strategy === "network-first") return createNetworkFirstStrategy();
65
+ if (strategy === "swr") return createSwrStrategy();
66
+ return createCacheFirstStrategy();
67
+ };
68
+
69
+ //#endregion
70
+ export { createMemoryCacheProvider, createStrategy };
71
+ //# sourceMappingURL=cache.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.mjs","names":[],"sources":["../../src/utils/cache.ts"],"sourcesContent":["export type CacheStrategy = 'cache-first' | 'network-first' | 'swr';\n\ninterface StrategyContext<TData> {\n key: string;\n cachedResult: TData | undefined;\n loadNetwork: () => Promise<TData>;\n}\n\nexport type CacheStrategyHandler = <TData>(context: StrategyContext<TData>) => Promise<TData>;\n\nexport interface CacheEntry<TValue = unknown> {\n value: TValue;\n storedAt: number;\n ttlMs: number;\n}\n\nexport interface CacheEntryInput<TValue = unknown> {\n value: TValue;\n storedAt?: number;\n ttlMs: number;\n}\n\nexport interface CacheProvider {\n get: <TValue = unknown>(key: string) => Promise<CacheEntry<TValue> | undefined>;\n set: <TValue = unknown>(key: string, entry: CacheEntryInput<TValue>) => Promise<void>;\n flush: () => Promise<void>;\n}\n\ninterface MemoryCacheProviderOptions {\n maxEntries?: number;\n}\n\nexport const createMemoryCacheProvider = (\n options: MemoryCacheProviderOptions = {},\n): CacheProvider => {\n const maxEntries = options.maxEntries ?? 1_000;\n const cache = new Map<string, CacheEntry<unknown>>();\n\n return {\n async get<TValue = unknown>(key: string) {\n // Map stores heterogeneous CacheEntry<unknown>; caller provides the expected type via the generic.\n const entry = cache.get(key) as CacheEntry<TValue>;\n if (!entry) {\n return undefined;\n }\n\n if (Date.now() - entry.storedAt > entry.ttlMs) {\n cache.delete(key);\n return undefined;\n }\n\n return entry;\n },\n async set<TValue = unknown>(key: string, entry: CacheEntryInput<TValue>) {\n const cacheEntry: CacheEntry<TValue> = {\n ...entry,\n storedAt: entry.storedAt ?? Date.now(),\n };\n\n // Move existing keys to the end so eviction stays LRU-like.\n // Map#set updates values in place and does not change insertion order.\n if (cache.has(key)) {\n cache.delete(key);\n }\n\n cache.set(key, cacheEntry);\n\n if (cache.size > maxEntries) {\n const oldestKey = cache.keys().next().value;\n if (oldestKey !== undefined) {\n cache.delete(oldestKey);\n }\n }\n },\n async flush(): Promise<void> {\n cache.clear();\n },\n };\n};\n\nexport const createCacheFirstStrategy = (): CacheStrategyHandler => {\n return async <TData>({ cachedResult, loadNetwork }: StrategyContext<TData>) => {\n if (cachedResult !== undefined) {\n return cachedResult;\n }\n\n return loadNetwork();\n };\n};\n\nexport const createNetworkFirstStrategy = (): CacheStrategyHandler => {\n return async <TData>({ cachedResult, loadNetwork }: StrategyContext<TData>) => {\n try {\n return await loadNetwork();\n }\n catch (error) {\n // network-first: try network, fall back to cached data if available.\n if (cachedResult !== undefined) {\n return cachedResult;\n }\n\n throw error;\n }\n };\n};\n\nexport const createSwrStrategy = (): CacheStrategyHandler => {\n const revalidations = new Map<string, Promise<unknown>>();\n\n return async <TData>({ key, cachedResult, loadNetwork }: StrategyContext<TData>) => {\n if (cachedResult !== undefined) {\n if (!revalidations.has(key)) {\n const revalidation = loadNetwork()\n .catch(() => undefined)\n .finally(() => {\n revalidations.delete(key);\n });\n revalidations.set(key, revalidation);\n }\n\n return cachedResult;\n }\n\n return loadNetwork();\n };\n};\n\nexport const createStrategy = (strategy: CacheStrategy): CacheStrategyHandler => {\n if (strategy === 'network-first') {\n return createNetworkFirstStrategy();\n }\n\n if (strategy === 'swr') {\n return createSwrStrategy();\n }\n\n return createCacheFirstStrategy();\n};\n"],"mappings":";AAgCA,MAAa,6BACX,UAAsC,EAAE,KACtB;CAClB,MAAM,aAAa,QAAQ,cAAc;CACzC,MAAM,wBAAQ,IAAI,KAAkC;AAEpD,QAAO;EACL,MAAM,IAAsB,KAAa;GAEvC,MAAM,QAAQ,MAAM,IAAI,IAAI;AAC5B,OAAI,CAAC,MACH;AAGF,OAAI,KAAK,KAAK,GAAG,MAAM,WAAW,MAAM,OAAO;AAC7C,UAAM,OAAO,IAAI;AACjB;;AAGF,UAAO;;EAET,MAAM,IAAsB,KAAa,OAAgC;GACvE,MAAM,aAAiC;IACrC,GAAG;IACH,UAAU,MAAM,YAAY,KAAK,KAAK;IACvC;AAID,OAAI,MAAM,IAAI,IAAI,CAChB,OAAM,OAAO,IAAI;AAGnB,SAAM,IAAI,KAAK,WAAW;AAE1B,OAAI,MAAM,OAAO,YAAY;IAC3B,MAAM,YAAY,MAAM,MAAM,CAAC,MAAM,CAAC;AACtC,QAAI,cAAc,OAChB,OAAM,OAAO,UAAU;;;EAI7B,MAAM,QAAuB;AAC3B,SAAM,OAAO;;EAEhB;;AAGH,MAAa,iCAAuD;AAClE,QAAO,OAAc,EAAE,cAAc,kBAA0C;AAC7E,MAAI,iBAAiB,OACnB,QAAO;AAGT,SAAO,aAAa;;;AAIxB,MAAa,mCAAyD;AACpE,QAAO,OAAc,EAAE,cAAc,kBAA0C;AAC7E,MAAI;AACF,UAAO,MAAM,aAAa;WAErB,OAAO;AAEZ,OAAI,iBAAiB,OACnB,QAAO;AAGT,SAAM;;;;AAKZ,MAAa,0BAAgD;CAC3D,MAAM,gCAAgB,IAAI,KAA+B;AAEzD,QAAO,OAAc,EAAE,KAAK,cAAc,kBAA0C;AAClF,MAAI,iBAAiB,QAAW;AAC9B,OAAI,CAAC,cAAc,IAAI,IAAI,EAAE;IAC3B,MAAM,eAAe,aAAa,CAC/B,YAAY,OAAU,CACtB,cAAc;AACb,mBAAc,OAAO,IAAI;MACzB;AACJ,kBAAc,IAAI,KAAK,aAAa;;AAGtC,UAAO;;AAGT,SAAO,aAAa;;;AAIxB,MAAa,kBAAkB,aAAkD;AAC/E,KAAI,aAAa,gBACf,QAAO,4BAA4B;AAGrC,KAAI,aAAa,MACf,QAAO,mBAAmB;AAG5B,QAAO,0BAA0B"}
@@ -0,0 +1,19 @@
1
+ const require_request = require('./request.cjs');
2
+
3
+ //#region src/utils/cv.ts
4
+ const extractCv = (maybeData) => {
5
+ return maybeData && typeof maybeData === "object" && "cv" in maybeData ? typeof maybeData.cv === "number" ? maybeData.cv : void 0 : void 0;
6
+ };
7
+ const applyCvToQuery = (query, cv) => {
8
+ if (require_request.isDraftRequest(query)) return query;
9
+ if (query.cv !== void 0) return query;
10
+ return {
11
+ ...query,
12
+ cv
13
+ };
14
+ };
15
+
16
+ //#endregion
17
+ exports.applyCvToQuery = applyCvToQuery;
18
+ exports.extractCv = extractCv;
19
+ //# sourceMappingURL=cv.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cv.cjs","names":["isDraftRequest"],"sources":["../../src/utils/cv.ts"],"sourcesContent":["import { isDraftRequest } from './request';\n\nexport const extractCv = (maybeData: unknown) => {\n return maybeData && typeof maybeData === 'object' && 'cv' in maybeData\n ? typeof maybeData.cv === 'number'\n ? maybeData.cv\n : undefined\n : undefined;\n};\n\nexport const applyCvToQuery = (\n query: Record<string, unknown>,\n cv: number,\n) => {\n if (isDraftRequest(query)) {\n return query;\n }\n\n if (query.cv !== undefined) {\n return query;\n }\n\n return {\n ...query,\n cv,\n };\n};\n"],"mappings":";;;AAEA,MAAa,aAAa,cAAuB;AAC/C,QAAO,aAAa,OAAO,cAAc,YAAY,QAAQ,YACzD,OAAO,UAAU,OAAO,WACtB,UAAU,KACV,SACF;;AAGN,MAAa,kBACX,OACA,OACG;AACH,KAAIA,+BAAe,MAAM,CACvB,QAAO;AAGT,KAAI,MAAM,OAAO,OACf,QAAO;AAGT,QAAO;EACL,GAAG;EACH;EACD"}
@@ -0,0 +1,18 @@
1
+ import { isDraftRequest } from "./request.mjs";
2
+
3
+ //#region src/utils/cv.ts
4
+ const extractCv = (maybeData) => {
5
+ return maybeData && typeof maybeData === "object" && "cv" in maybeData ? typeof maybeData.cv === "number" ? maybeData.cv : void 0 : void 0;
6
+ };
7
+ const applyCvToQuery = (query, cv) => {
8
+ if (isDraftRequest(query)) return query;
9
+ if (query.cv !== void 0) return query;
10
+ return {
11
+ ...query,
12
+ cv
13
+ };
14
+ };
15
+
16
+ //#endregion
17
+ export { applyCvToQuery, extractCv };
18
+ //# sourceMappingURL=cv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cv.mjs","names":[],"sources":["../../src/utils/cv.ts"],"sourcesContent":["import { isDraftRequest } from './request';\n\nexport const extractCv = (maybeData: unknown) => {\n return maybeData && typeof maybeData === 'object' && 'cv' in maybeData\n ? typeof maybeData.cv === 'number'\n ? maybeData.cv\n : undefined\n : undefined;\n};\n\nexport const applyCvToQuery = (\n query: Record<string, unknown>,\n cv: number,\n) => {\n if (isDraftRequest(query)) {\n return query;\n }\n\n if (query.cv !== undefined) {\n return query;\n }\n\n return {\n ...query,\n cv,\n };\n};\n"],"mappings":";;;AAEA,MAAa,aAAa,cAAuB;AAC/C,QAAO,aAAa,OAAO,cAAc,YAAY,QAAQ,YACzD,OAAO,UAAU,OAAO,WACtB,UAAU,KACV,SACF;;AAGN,MAAa,kBACX,OACA,OACG;AACH,KAAI,eAAe,MAAM,CACvB,QAAO;AAGT,KAAI,MAAM,OAAO,OACf,QAAO;AAGT,QAAO;EACL,GAAG;EACH;EACD"}
@@ -0,0 +1,45 @@
1
+ const require_sdk_gen = require('../generated/stories/sdk.gen.cjs');
2
+ const require_array = require('./array.cjs');
3
+
4
+ //#region src/utils/fetch-rel-uuids.ts
5
+ const UUID_CHUNK_SIZE = 50;
6
+ const QUERY_CONTEXT_KEYS = new Set([
7
+ "cv",
8
+ "fallback_lang",
9
+ "from_release",
10
+ "language",
11
+ "resolve_assets",
12
+ "resolve_links",
13
+ "resolve_links_level",
14
+ "version"
15
+ ]);
16
+ const pickQueryContext = (baseQuery) => {
17
+ const query = {};
18
+ for (const key of QUERY_CONTEXT_KEYS) if (baseQuery[key] !== void 0) query[key] = baseQuery[key];
19
+ return query;
20
+ };
21
+ const fetchMissingRelations = async ({ client, uuids, baseQuery, throttleManager }) => {
22
+ const queryContext = {
23
+ ...pickQueryContext(baseQuery),
24
+ per_page: UUID_CHUNK_SIZE
25
+ };
26
+ const chunks = require_array.chunkArray(uuids, UUID_CHUNK_SIZE);
27
+ return (await Promise.all(chunks.map((chunk) => throttleManager.execute("/v2/cdn/stories", queryContext, async () => {
28
+ const response = await require_sdk_gen.getAll({
29
+ client,
30
+ query: {
31
+ ...queryContext,
32
+ by_uuids: chunk.join(","),
33
+ per_page: UUID_CHUNK_SIZE
34
+ }
35
+ });
36
+ throttleManager.adaptToResponse(response.response);
37
+ if (response.error !== void 0) throw response.error;
38
+ if (response.data === void 0) throw new Error("Failed to fetch missing relations.");
39
+ return response.data.stories;
40
+ })))).flat();
41
+ };
42
+
43
+ //#endregion
44
+ exports.fetchMissingRelations = fetchMissingRelations;
45
+ //# sourceMappingURL=fetch-rel-uuids.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-rel-uuids.cjs","names":["chunkArray","getAll"],"sources":["../../src/utils/fetch-rel-uuids.ts"],"sourcesContent":["import type { Client } from '../generated/shared/client';\nimport { getAll } from '../generated/stories/sdk.gen';\nimport type { StoryCapi } from '../generated/stories/types.gen';\nimport type { ThrottleManager } from './rate-limit';\nimport { chunkArray } from './array';\n\nconst UUID_CHUNK_SIZE = 50;\nconst QUERY_CONTEXT_KEYS = new Set([\n 'cv',\n 'fallback_lang',\n 'from_release',\n 'language',\n 'resolve_assets',\n 'resolve_links',\n 'resolve_links_level',\n 'version',\n]);\n\nconst pickQueryContext = (baseQuery: Record<string, unknown>): Record<string, unknown> => {\n const query: Record<string, unknown> = {};\n for (const key of QUERY_CONTEXT_KEYS) {\n if (baseQuery[key] !== undefined) {\n query[key] = baseQuery[key];\n }\n }\n return query;\n};\n\ninterface FetchMissingRelationsOptions {\n client: Client;\n uuids: string[];\n baseQuery: Record<string, unknown>;\n throttleManager: ThrottleManager;\n}\n\nexport const fetchMissingRelations = async ({\n client,\n uuids,\n baseQuery,\n throttleManager,\n}: FetchMissingRelationsOptions): Promise<StoryCapi[]> => {\n const queryContext = { ...pickQueryContext(baseQuery), per_page: UUID_CHUNK_SIZE };\n const chunks = chunkArray(uuids, UUID_CHUNK_SIZE);\n\n const results = await Promise.all(\n chunks.map(chunk =>\n throttleManager.execute('/v2/cdn/stories', queryContext, async () => {\n const response = await getAll({\n client,\n query: {\n ...queryContext,\n by_uuids: chunk.join(','),\n per_page: UUID_CHUNK_SIZE,\n },\n });\n\n throttleManager.adaptToResponse(response.response);\n\n if (response.error !== undefined) {\n throw response.error;\n }\n\n if (response.data === undefined) {\n throw new Error('Failed to fetch missing relations.');\n }\n\n return response.data.stories;\n }),\n ),\n );\n\n return results.flat();\n};\n"],"mappings":";;;;AAMA,MAAM,kBAAkB;AACxB,MAAM,qBAAqB,IAAI,IAAI;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,oBAAoB,cAAgE;CACxF,MAAM,QAAiC,EAAE;AACzC,MAAK,MAAM,OAAO,mBAChB,KAAI,UAAU,SAAS,OACrB,OAAM,OAAO,UAAU;AAG3B,QAAO;;AAUT,MAAa,wBAAwB,OAAO,EAC1C,QACA,OACA,WACA,sBACwD;CACxD,MAAM,eAAe;EAAE,GAAG,iBAAiB,UAAU;EAAE,UAAU;EAAiB;CAClF,MAAM,SAASA,yBAAW,OAAO,gBAAgB;AA6BjD,SA3BgB,MAAM,QAAQ,IAC5B,OAAO,KAAI,UACT,gBAAgB,QAAQ,mBAAmB,cAAc,YAAY;EACnE,MAAM,WAAW,MAAMC,uBAAO;GAC5B;GACA,OAAO;IACL,GAAG;IACH,UAAU,MAAM,KAAK,IAAI;IACzB,UAAU;IACX;GACF,CAAC;AAEF,kBAAgB,gBAAgB,SAAS,SAAS;AAElD,MAAI,SAAS,UAAU,OACrB,OAAM,SAAS;AAGjB,MAAI,SAAS,SAAS,OACpB,OAAM,IAAI,MAAM,qCAAqC;AAGvD,SAAO,SAAS,KAAK;GACrB,CACH,CACF,EAEc,MAAM"}
@@ -0,0 +1,45 @@
1
+ import { getAll } from "../generated/stories/sdk.gen.mjs";
2
+ import { chunkArray } from "./array.mjs";
3
+
4
+ //#region src/utils/fetch-rel-uuids.ts
5
+ const UUID_CHUNK_SIZE = 50;
6
+ const QUERY_CONTEXT_KEYS = new Set([
7
+ "cv",
8
+ "fallback_lang",
9
+ "from_release",
10
+ "language",
11
+ "resolve_assets",
12
+ "resolve_links",
13
+ "resolve_links_level",
14
+ "version"
15
+ ]);
16
+ const pickQueryContext = (baseQuery) => {
17
+ const query = {};
18
+ for (const key of QUERY_CONTEXT_KEYS) if (baseQuery[key] !== void 0) query[key] = baseQuery[key];
19
+ return query;
20
+ };
21
+ const fetchMissingRelations = async ({ client, uuids, baseQuery, throttleManager }) => {
22
+ const queryContext = {
23
+ ...pickQueryContext(baseQuery),
24
+ per_page: UUID_CHUNK_SIZE
25
+ };
26
+ const chunks = chunkArray(uuids, UUID_CHUNK_SIZE);
27
+ return (await Promise.all(chunks.map((chunk) => throttleManager.execute("/v2/cdn/stories", queryContext, async () => {
28
+ const response = await getAll({
29
+ client,
30
+ query: {
31
+ ...queryContext,
32
+ by_uuids: chunk.join(","),
33
+ per_page: UUID_CHUNK_SIZE
34
+ }
35
+ });
36
+ throttleManager.adaptToResponse(response.response);
37
+ if (response.error !== void 0) throw response.error;
38
+ if (response.data === void 0) throw new Error("Failed to fetch missing relations.");
39
+ return response.data.stories;
40
+ })))).flat();
41
+ };
42
+
43
+ //#endregion
44
+ export { fetchMissingRelations };
45
+ //# sourceMappingURL=fetch-rel-uuids.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-rel-uuids.mjs","names":[],"sources":["../../src/utils/fetch-rel-uuids.ts"],"sourcesContent":["import type { Client } from '../generated/shared/client';\nimport { getAll } from '../generated/stories/sdk.gen';\nimport type { StoryCapi } from '../generated/stories/types.gen';\nimport type { ThrottleManager } from './rate-limit';\nimport { chunkArray } from './array';\n\nconst UUID_CHUNK_SIZE = 50;\nconst QUERY_CONTEXT_KEYS = new Set([\n 'cv',\n 'fallback_lang',\n 'from_release',\n 'language',\n 'resolve_assets',\n 'resolve_links',\n 'resolve_links_level',\n 'version',\n]);\n\nconst pickQueryContext = (baseQuery: Record<string, unknown>): Record<string, unknown> => {\n const query: Record<string, unknown> = {};\n for (const key of QUERY_CONTEXT_KEYS) {\n if (baseQuery[key] !== undefined) {\n query[key] = baseQuery[key];\n }\n }\n return query;\n};\n\ninterface FetchMissingRelationsOptions {\n client: Client;\n uuids: string[];\n baseQuery: Record<string, unknown>;\n throttleManager: ThrottleManager;\n}\n\nexport const fetchMissingRelations = async ({\n client,\n uuids,\n baseQuery,\n throttleManager,\n}: FetchMissingRelationsOptions): Promise<StoryCapi[]> => {\n const queryContext = { ...pickQueryContext(baseQuery), per_page: UUID_CHUNK_SIZE };\n const chunks = chunkArray(uuids, UUID_CHUNK_SIZE);\n\n const results = await Promise.all(\n chunks.map(chunk =>\n throttleManager.execute('/v2/cdn/stories', queryContext, async () => {\n const response = await getAll({\n client,\n query: {\n ...queryContext,\n by_uuids: chunk.join(','),\n per_page: UUID_CHUNK_SIZE,\n },\n });\n\n throttleManager.adaptToResponse(response.response);\n\n if (response.error !== undefined) {\n throw response.error;\n }\n\n if (response.data === undefined) {\n throw new Error('Failed to fetch missing relations.');\n }\n\n return response.data.stories;\n }),\n ),\n );\n\n return results.flat();\n};\n"],"mappings":";;;;AAMA,MAAM,kBAAkB;AACxB,MAAM,qBAAqB,IAAI,IAAI;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,oBAAoB,cAAgE;CACxF,MAAM,QAAiC,EAAE;AACzC,MAAK,MAAM,OAAO,mBAChB,KAAI,UAAU,SAAS,OACrB,OAAM,OAAO,UAAU;AAG3B,QAAO;;AAUT,MAAa,wBAAwB,OAAO,EAC1C,QACA,OACA,WACA,sBACwD;CACxD,MAAM,eAAe;EAAE,GAAG,iBAAiB,UAAU;EAAE,UAAU;EAAiB;CAClF,MAAM,SAAS,WAAW,OAAO,gBAAgB;AA6BjD,SA3BgB,MAAM,QAAQ,IAC5B,OAAO,KAAI,UACT,gBAAgB,QAAQ,mBAAmB,cAAc,YAAY;EACnE,MAAM,WAAW,MAAM,OAAO;GAC5B;GACA,OAAO;IACL,GAAG;IACH,UAAU,MAAM,KAAK,IAAI;IACzB,UAAU;IACX;GACF,CAAC;AAEF,kBAAgB,gBAAgB,SAAS,SAAS;AAElD,MAAI,SAAS,UAAU,OACrB,OAAM,SAAS;AAGjB,MAAI,SAAS,SAAS,OACpB,OAAM,IAAI,MAAM,qCAAqC;AAGvD,SAAO,SAAS,KAAK;GACrB,CACH,CACF,EAEc,MAAM"}