@storyblok/api-client 1.0.0-alpha.1 → 1.0.0-alpha.2

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 (202) hide show
  1. package/README.md +3 -1
  2. package/dist/client.cjs +7 -4
  3. package/dist/client.cjs.map +1 -1
  4. package/dist/client.d.cts +302 -68
  5. package/dist/client.d.mts +302 -68
  6. package/dist/client.mjs +7 -4
  7. package/dist/client.mjs.map +1 -1
  8. package/dist/generated/capi/_internal.gen.d.cts +120 -0
  9. package/dist/generated/capi/_internal.gen.d.mts +120 -0
  10. package/dist/generated/{shared → capi}/client/client.gen.cjs +1 -1
  11. package/dist/generated/capi/client/client.gen.cjs.map +1 -0
  12. package/dist/generated/{shared → capi}/client/client.gen.mjs +1 -1
  13. package/dist/generated/capi/client/client.gen.mjs.map +1 -0
  14. package/dist/generated/{shared → capi}/client/types.gen.d.cts +1 -1
  15. package/dist/generated/{shared → capi}/client/types.gen.d.mts +1 -1
  16. package/dist/generated/{shared → capi}/client/utils.gen.cjs +1 -1
  17. package/dist/generated/capi/client/utils.gen.cjs.map +1 -0
  18. package/dist/generated/{shared → capi}/client/utils.gen.d.cts +1 -1
  19. package/dist/generated/{shared → capi}/client/utils.gen.d.mts +1 -1
  20. package/dist/generated/{shared → capi}/client/utils.gen.mjs +1 -1
  21. package/dist/generated/capi/client/utils.gen.mjs.map +1 -0
  22. package/dist/generated/capi/client.gen.cjs +10 -0
  23. package/dist/generated/capi/client.gen.cjs.map +1 -0
  24. package/dist/generated/capi/client.gen.mjs +10 -0
  25. package/dist/generated/capi/client.gen.mjs.map +1 -0
  26. package/dist/generated/{shared → capi}/core/auth.gen.cjs +1 -1
  27. package/dist/generated/capi/core/auth.gen.cjs.map +1 -0
  28. package/dist/generated/{shared → capi}/core/auth.gen.d.cts +1 -1
  29. package/dist/generated/{shared → capi}/core/auth.gen.d.mts +1 -1
  30. package/dist/generated/{shared → capi}/core/auth.gen.mjs +1 -1
  31. package/dist/generated/capi/core/auth.gen.mjs.map +1 -0
  32. package/dist/generated/{shared → capi}/core/bodySerializer.gen.cjs +1 -1
  33. package/dist/generated/capi/core/bodySerializer.gen.cjs.map +1 -0
  34. package/dist/generated/{shared → capi}/core/bodySerializer.gen.d.cts +1 -1
  35. package/dist/generated/{shared → capi}/core/bodySerializer.gen.d.mts +1 -1
  36. package/dist/generated/{shared → capi}/core/bodySerializer.gen.mjs +1 -1
  37. package/dist/generated/capi/core/bodySerializer.gen.mjs.map +1 -0
  38. package/dist/generated/{shared → capi}/core/params.gen.cjs +1 -1
  39. package/dist/generated/capi/core/params.gen.cjs.map +1 -0
  40. package/dist/generated/{shared → capi}/core/params.gen.mjs +1 -1
  41. package/dist/generated/capi/core/params.gen.mjs.map +1 -0
  42. package/dist/generated/{shared → capi}/core/pathSerializer.gen.cjs +1 -1
  43. package/dist/generated/capi/core/pathSerializer.gen.cjs.map +1 -0
  44. package/dist/generated/{shared → capi}/core/pathSerializer.gen.d.cts +1 -1
  45. package/dist/generated/{shared → capi}/core/pathSerializer.gen.d.mts +1 -1
  46. package/dist/generated/{shared → capi}/core/pathSerializer.gen.mjs +1 -1
  47. package/dist/generated/capi/core/pathSerializer.gen.mjs.map +1 -0
  48. package/dist/generated/{shared → capi}/core/serverSentEvents.gen.cjs +1 -1
  49. package/dist/generated/capi/core/serverSentEvents.gen.cjs.map +1 -0
  50. package/dist/generated/{shared → capi}/core/serverSentEvents.gen.d.cts +1 -1
  51. package/dist/generated/{shared → capi}/core/serverSentEvents.gen.d.mts +1 -1
  52. package/dist/generated/{shared → capi}/core/serverSentEvents.gen.mjs +1 -1
  53. package/dist/generated/capi/core/serverSentEvents.gen.mjs.map +1 -0
  54. package/dist/generated/{shared → capi}/core/types.gen.d.cts +1 -1
  55. package/dist/generated/{shared → capi}/core/types.gen.d.mts +1 -1
  56. package/dist/generated/{shared → capi}/core/utils.gen.cjs +1 -1
  57. package/dist/generated/capi/core/utils.gen.cjs.map +1 -0
  58. package/dist/generated/{shared → capi}/core/utils.gen.mjs +1 -1
  59. package/dist/generated/capi/core/utils.gen.mjs.map +1 -0
  60. package/dist/generated/capi/sdk.gen.cjs +141 -0
  61. package/dist/generated/capi/sdk.gen.cjs.map +1 -0
  62. package/dist/generated/capi/sdk.gen.mjs +133 -0
  63. package/dist/generated/capi/sdk.gen.mjs.map +1 -0
  64. package/dist/generated/capi/types-aliased.gen.d.cts +181 -0
  65. package/dist/generated/capi/types-aliased.gen.d.mts +181 -0
  66. package/dist/generated/capi/types.gen.d.cts +919 -0
  67. package/dist/generated/capi/types.gen.d.mts +919 -0
  68. package/dist/generated/mapi/_internal.gen.d.cts +146 -0
  69. package/dist/generated/mapi/_internal.gen.d.mts +146 -0
  70. package/dist/generated/mapi/types.gen.d.cts +293 -0
  71. package/dist/generated/mapi/types.gen.d.mts +293 -0
  72. package/dist/generated/overlay/_internal.gen.d.cts +831 -0
  73. package/dist/generated/overlay/_internal.gen.d.mts +831 -0
  74. package/dist/generated/types/_utils.d.cts +7 -0
  75. package/dist/generated/types/_utils.d.mts +7 -0
  76. package/dist/generated/types/block.d.cts +29 -0
  77. package/dist/generated/types/block.d.mts +29 -0
  78. package/dist/generated/types/field.d.cts +64 -0
  79. package/dist/generated/types/field.d.mts +64 -0
  80. package/dist/generated/types/story.d.cts +19 -0
  81. package/dist/generated/types/story.d.mts +19 -0
  82. package/dist/index.d.cts +6 -3
  83. package/dist/index.d.mts +6 -3
  84. package/dist/resources/datasource-entries.cjs +2 -2
  85. package/dist/resources/datasource-entries.cjs.map +1 -1
  86. package/dist/resources/datasource-entries.mjs +2 -2
  87. package/dist/resources/datasource-entries.mjs.map +1 -1
  88. package/dist/resources/datasources.cjs +4 -4
  89. package/dist/resources/datasources.cjs.map +1 -1
  90. package/dist/resources/datasources.mjs +4 -4
  91. package/dist/resources/datasources.mjs.map +1 -1
  92. package/dist/resources/experiments.cjs +26 -0
  93. package/dist/resources/experiments.cjs.map +1 -0
  94. package/dist/resources/experiments.mjs +26 -0
  95. package/dist/resources/experiments.mjs.map +1 -0
  96. package/dist/resources/links.cjs +2 -2
  97. package/dist/resources/links.cjs.map +1 -1
  98. package/dist/resources/links.mjs +2 -2
  99. package/dist/resources/links.mjs.map +1 -1
  100. package/dist/resources/spaces.cjs +4 -4
  101. package/dist/resources/spaces.cjs.map +1 -1
  102. package/dist/resources/spaces.mjs +4 -4
  103. package/dist/resources/spaces.mjs.map +1 -1
  104. package/dist/resources/stories.cjs +10 -8
  105. package/dist/resources/stories.cjs.map +1 -1
  106. package/dist/resources/stories.d.cts +16 -13
  107. package/dist/resources/stories.d.mts +16 -13
  108. package/dist/resources/stories.mjs +10 -8
  109. package/dist/resources/stories.mjs.map +1 -1
  110. package/dist/resources/tags.cjs +2 -2
  111. package/dist/resources/tags.cjs.map +1 -1
  112. package/dist/resources/tags.mjs +2 -2
  113. package/dist/resources/tags.mjs.map +1 -1
  114. package/dist/utils/fetch-rel-uuids.cjs +2 -2
  115. package/dist/utils/fetch-rel-uuids.cjs.map +1 -1
  116. package/dist/utils/fetch-rel-uuids.mjs +2 -2
  117. package/dist/utils/fetch-rel-uuids.mjs.map +1 -1
  118. package/dist/utils/inline-relations.cjs.map +1 -1
  119. package/dist/utils/inline-relations.mjs.map +1 -1
  120. package/package.json +13 -19
  121. package/dist/generated/datasource_entries/client.gen.cjs +0 -10
  122. package/dist/generated/datasource_entries/client.gen.cjs.map +0 -1
  123. package/dist/generated/datasource_entries/client.gen.mjs +0 -10
  124. package/dist/generated/datasource_entries/client.gen.mjs.map +0 -1
  125. package/dist/generated/datasource_entries/sdk.gen.cjs +0 -21
  126. package/dist/generated/datasource_entries/sdk.gen.cjs.map +0 -1
  127. package/dist/generated/datasource_entries/sdk.gen.mjs +0 -21
  128. package/dist/generated/datasource_entries/sdk.gen.mjs.map +0 -1
  129. package/dist/generated/datasource_entries/types.gen.d.cts +0 -52
  130. package/dist/generated/datasource_entries/types.gen.d.mts +0 -52
  131. package/dist/generated/datasources/client.gen.cjs +0 -10
  132. package/dist/generated/datasources/client.gen.cjs.map +0 -1
  133. package/dist/generated/datasources/client.gen.mjs +0 -10
  134. package/dist/generated/datasources/client.gen.mjs.map +0 -1
  135. package/dist/generated/datasources/sdk.gen.cjs +0 -36
  136. package/dist/generated/datasources/sdk.gen.cjs.map +0 -1
  137. package/dist/generated/datasources/sdk.gen.mjs +0 -35
  138. package/dist/generated/datasources/sdk.gen.mjs.map +0 -1
  139. package/dist/generated/datasources/types.gen.d.cts +0 -82
  140. package/dist/generated/datasources/types.gen.d.mts +0 -82
  141. package/dist/generated/links/client.gen.cjs +0 -10
  142. package/dist/generated/links/client.gen.cjs.map +0 -1
  143. package/dist/generated/links/client.gen.mjs +0 -10
  144. package/dist/generated/links/client.gen.mjs.map +0 -1
  145. package/dist/generated/links/sdk.gen.cjs +0 -21
  146. package/dist/generated/links/sdk.gen.cjs.map +0 -1
  147. package/dist/generated/links/sdk.gen.mjs +0 -21
  148. package/dist/generated/links/sdk.gen.mjs.map +0 -1
  149. package/dist/generated/links/types.gen.d.cts +0 -125
  150. package/dist/generated/links/types.gen.d.mts +0 -125
  151. package/dist/generated/shared/client/client.gen.cjs.map +0 -1
  152. package/dist/generated/shared/client/client.gen.mjs.map +0 -1
  153. package/dist/generated/shared/client/utils.gen.cjs.map +0 -1
  154. package/dist/generated/shared/client/utils.gen.mjs.map +0 -1
  155. package/dist/generated/shared/core/auth.gen.cjs.map +0 -1
  156. package/dist/generated/shared/core/auth.gen.mjs.map +0 -1
  157. package/dist/generated/shared/core/bodySerializer.gen.cjs.map +0 -1
  158. package/dist/generated/shared/core/bodySerializer.gen.mjs.map +0 -1
  159. package/dist/generated/shared/core/params.gen.cjs.map +0 -1
  160. package/dist/generated/shared/core/params.gen.mjs.map +0 -1
  161. package/dist/generated/shared/core/pathSerializer.gen.cjs.map +0 -1
  162. package/dist/generated/shared/core/pathSerializer.gen.mjs.map +0 -1
  163. package/dist/generated/shared/core/serverSentEvents.gen.cjs.map +0 -1
  164. package/dist/generated/shared/core/serverSentEvents.gen.mjs.map +0 -1
  165. package/dist/generated/shared/core/utils.gen.cjs.map +0 -1
  166. package/dist/generated/shared/core/utils.gen.mjs.map +0 -1
  167. package/dist/generated/spaces/client.gen.cjs +0 -10
  168. package/dist/generated/spaces/client.gen.cjs.map +0 -1
  169. package/dist/generated/spaces/client.gen.mjs +0 -10
  170. package/dist/generated/spaces/client.gen.mjs.map +0 -1
  171. package/dist/generated/spaces/sdk.gen.cjs +0 -21
  172. package/dist/generated/spaces/sdk.gen.cjs.map +0 -1
  173. package/dist/generated/spaces/sdk.gen.mjs +0 -21
  174. package/dist/generated/spaces/sdk.gen.mjs.map +0 -1
  175. package/dist/generated/spaces/types.gen.d.cts +0 -26
  176. package/dist/generated/spaces/types.gen.d.mts +0 -26
  177. package/dist/generated/stories/client.gen.cjs +0 -10
  178. package/dist/generated/stories/client.gen.cjs.map +0 -1
  179. package/dist/generated/stories/client.gen.mjs +0 -10
  180. package/dist/generated/stories/client.gen.mjs.map +0 -1
  181. package/dist/generated/stories/index.d.mts +0 -1
  182. package/dist/generated/stories/sdk.gen.cjs +0 -36
  183. package/dist/generated/stories/sdk.gen.cjs.map +0 -1
  184. package/dist/generated/stories/sdk.gen.d.mts +0 -1
  185. package/dist/generated/stories/sdk.gen.mjs +0 -35
  186. package/dist/generated/stories/sdk.gen.mjs.map +0 -1
  187. package/dist/generated/stories/types.gen.d.cts +0 -607
  188. package/dist/generated/stories/types.gen.d.mts +0 -607
  189. package/dist/generated/tags/client.gen.cjs +0 -10
  190. package/dist/generated/tags/client.gen.cjs.map +0 -1
  191. package/dist/generated/tags/client.gen.mjs +0 -10
  192. package/dist/generated/tags/client.gen.mjs.map +0 -1
  193. package/dist/generated/tags/sdk.gen.cjs +0 -21
  194. package/dist/generated/tags/sdk.gen.cjs.map +0 -1
  195. package/dist/generated/tags/sdk.gen.mjs +0 -21
  196. package/dist/generated/tags/sdk.gen.mjs.map +0 -1
  197. package/dist/generated/tags/types.gen.d.cts +0 -29
  198. package/dist/generated/tags/types.gen.d.mts +0 -29
  199. /package/dist/generated/{shared → capi}/client/client.gen.d.mts +0 -0
  200. /package/dist/generated/{shared → capi}/client/index.cjs +0 -0
  201. /package/dist/generated/{shared → capi}/client/index.d.mts +0 -0
  202. /package/dist/generated/{shared → capi}/client/index.mjs +0 -0
@@ -1,13 +1,13 @@
1
- import { get } from "../generated/spaces/sdk.gen.mjs";
1
+ import { getSpace } from "../generated/capi/sdk.gen.mjs";
2
2
 
3
3
  //#region src/resources/spaces.ts
4
4
  function createSpacesResource(deps) {
5
5
  const { client, requestWithCache, asApiResponse, throttleManager } = deps;
6
6
  return { get: async (options = {}) => {
7
- const { signal, throwOnError, fetchOptions } = options;
7
+ const { query = {}, signal, throwOnError, fetchOptions } = options;
8
8
  const requestPath = "/v2/cdn/spaces/me";
9
- return requestWithCache("GET", requestPath, {}, (requestQuery) => {
10
- return throttleManager.execute(requestPath, requestQuery, () => asApiResponse(get({
9
+ return requestWithCache("GET", requestPath, query, (requestQuery) => {
10
+ return throttleManager.execute(requestPath, requestQuery, () => asApiResponse(getSpace({
11
11
  client,
12
12
  query: requestQuery,
13
13
  signal,
@@ -1 +1 @@
1
- {"version":3,"file":"spaces.mjs","names":["getSpaceApi"],"sources":["../../src/resources/spaces.ts"],"sourcesContent":["import { get as getSpaceApi } from '../generated/spaces/sdk.gen';\nimport type { GetResponses as SpacesGetResponses } from '../generated/spaces/types.gen';\nimport type { ApiResponse, FetchOptions, ResourceDeps } from '../client';\n\nexport function createSpacesResource<DefaultThrowOnError extends boolean = false>(deps: ResourceDeps<DefaultThrowOnError>) {\n const { client, requestWithCache, asApiResponse, throttleManager } = deps;\n\n return {\n get: async <ThrowOnError extends boolean = DefaultThrowOnError>(\n options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<SpacesGetResponses[200], ThrowOnError>> => {\n const { signal, throwOnError, fetchOptions } = options;\n const requestPath = '/v2/cdn/spaces/me';\n return requestWithCache<SpacesGetResponses[200], ThrowOnError>('GET', requestPath, {}, (requestQuery: Record<string, unknown>) => {\n return throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse<SpacesGetResponses[200], ThrowOnError>(getSpaceApi({\n client,\n // The OpenAPI spec declares no query params so the generated type\n // is `query?: never`. At runtime we still need to pass a query object\n // because `setAuthParams` mutates it in-place to inject the `token`.\n query: requestQuery as never,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n })));\n });\n },\n };\n}\n"],"mappings":";;;AAIA,SAAgB,qBAAkE,MAAyC;CACzH,MAAM,EAAE,QAAQ,kBAAkB,eAAe,oBAAoB;AAErE,QAAO,EACL,KAAK,OACH,UAA8F,EAAE,KAChC;EAChE,MAAM,EAAE,QAAQ,cAAc,iBAAiB;EAC/C,MAAM,cAAc;AACpB,SAAO,iBAAwD,OAAO,aAAa,EAAE,GAAG,iBAA0C;AAChI,UAAO,gBAAgB,QAAQ,aAAa,oBAC1C,cAAqDA,IAAY;IAC/D;IAIA,OAAO;IACP;IACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IACtD,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAC5F,CAAC,CAAC,CAAC;IACN;IAEL"}
1
+ {"version":3,"file":"spaces.mjs","names":["getSpaceApi"],"sources":["../../src/resources/spaces.ts"],"sourcesContent":["import { getSpace as getSpaceApi } from '../generated/capi/sdk.gen';\nimport type { GetSpaceData, GetSpaceResponses } from '../generated/capi/types.gen';\nimport type { ApiResponse, FetchOptions, ResourceDeps } from '../client';\n\nexport function createSpacesResource<DefaultThrowOnError extends boolean = false>(deps: ResourceDeps<DefaultThrowOnError>) {\n const { client, requestWithCache, asApiResponse, throttleManager } = deps;\n\n return {\n get: async <ThrowOnError extends boolean = DefaultThrowOnError>(\n options: { query?: GetSpaceData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<GetSpaceResponses[200], ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const requestPath = '/v2/cdn/spaces/me';\n return requestWithCache<GetSpaceResponses[200], ThrowOnError>('GET', requestPath, query, (requestQuery: Record<string, unknown>) => {\n return throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse<GetSpaceResponses[200], ThrowOnError>(getSpaceApi({\n client,\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n })));\n });\n },\n };\n}\n"],"mappings":";;;AAIA,SAAgB,qBAAkE,MAAyC;CACzH,MAAM,EAAE,QAAQ,kBAAkB,eAAe,oBAAoB;AAErE,QAAO,EACL,KAAK,OACH,UAA6H,EAAE,KAChE;EAC/D,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;EAC3D,MAAM,cAAc;AACpB,SAAO,iBAAuD,OAAO,aAAa,QAAQ,iBAA0C;AAClI,UAAO,gBAAgB,QAAQ,aAAa,oBAC1C,cAAoDA,SAAY;IAC9D;IACA,OAAO;IACP;IACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IACtD,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAC5F,CAAC,CAAC,CAAC;IACN;IAEL"}
@@ -1,4 +1,4 @@
1
- const require_sdk_gen = require('../generated/stories/sdk.gen.cjs');
1
+ const require_sdk_gen = require('../generated/capi/sdk.gen.cjs');
2
2
  const require_inline_relations = require('../utils/inline-relations.cjs');
3
3
 
4
4
  //#region src/resources/stories.ts
@@ -15,9 +15,9 @@ function createStoriesResource(deps) {
15
15
  } : typedQuery;
16
16
  const requestPath = `/v2/cdn/stories/${identifier}`;
17
17
  return requestWithCache("GET", requestPath, resolvedQuery, async (requestQuery) => {
18
- const response = await throttleManager.execute(requestPath, requestQuery, () => asApiResponse(require_sdk_gen.get({
18
+ const response = await throttleManager.execute(requestPath, requestQuery, () => asApiResponse(require_sdk_gen.getStoryById({
19
19
  client,
20
- path: { identifier },
20
+ path: { id: identifier },
21
21
  query: requestQuery,
22
22
  signal,
23
23
  ...throwOnError === void 0 ? {} : { throwOnError },
@@ -27,7 +27,8 @@ function createStoriesResource(deps) {
27
27
  } } : {}
28
28
  })));
29
29
  if (!inlineRelations || response.data === void 0) return response;
30
- const resolved = await require_inline_relations.resolveRelationMap(response.data, requestQuery, {
30
+ const storyData = response.data;
31
+ const resolved = await require_inline_relations.resolveRelationMap(storyData, requestQuery, {
31
32
  client,
32
33
  throttleManager
33
34
  });
@@ -36,7 +37,7 @@ function createStoriesResource(deps) {
36
37
  ...response,
37
38
  data: {
38
39
  ...response.data,
39
- story: require_inline_relations.inlineStoryContent(response.data.story, resolved.relationPaths, resolved.relationMap)
40
+ story: require_inline_relations.inlineStoryContent(storyData.story, resolved.relationPaths, resolved.relationMap)
40
41
  }
41
42
  };
42
43
  }, inlineRelations ? { cacheKeyPrefix: "inline" } : void 0);
@@ -46,7 +47,7 @@ function createStoriesResource(deps) {
46
47
  const typedQuery = query ?? {};
47
48
  const requestPath = "/v2/cdn/stories";
48
49
  return requestWithCache("GET", requestPath, typedQuery, async (requestQuery) => {
49
- const response = await throttleManager.execute(requestPath, requestQuery, () => asApiResponse(require_sdk_gen.list({
50
+ const response = await throttleManager.execute(requestPath, requestQuery, () => asApiResponse(require_sdk_gen.listStories({
50
51
  client,
51
52
  query: requestQuery,
52
53
  signal,
@@ -57,7 +58,8 @@ function createStoriesResource(deps) {
57
58
  } } : {}
58
59
  })));
59
60
  if (!inlineRelations || response.data === void 0) return response;
60
- const resolved = await require_inline_relations.resolveRelationMap(response.data, requestQuery, {
61
+ const storiesData = response.data;
62
+ const resolved = await require_inline_relations.resolveRelationMap(storiesData, requestQuery, {
61
63
  client,
62
64
  throttleManager
63
65
  });
@@ -66,7 +68,7 @@ function createStoriesResource(deps) {
66
68
  ...response,
67
69
  data: {
68
70
  ...response.data,
69
- stories: require_inline_relations.inlineStoriesContent(response.data.stories, resolved.relationPaths, resolved.relationMap)
71
+ stories: require_inline_relations.inlineStoriesContent(storiesData.stories, resolved.relationPaths, resolved.relationMap)
70
72
  }
71
73
  };
72
74
  }, inlineRelations ? { cacheKeyPrefix: "inline" } : void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"stories.cjs","names":["get","resolveRelationMap","inlineStoryContent","list","inlineStoriesContent"],"sources":["../../src/resources/stories.ts"],"sourcesContent":["import { get, list } from '../generated/stories/sdk.gen';\nimport type { GetData, GetResponses, ListData, ListResponses } from '../generated/stories/types.gen';\nimport type {\n AssetFieldValue,\n BlokContent,\n MultilinkFieldValue,\n PluginFieldValue,\n RichtextFieldValue,\n StoryCapi,\n TableFieldValue,\n} from '../generated/stories';\nimport { inlineStoriesContent, inlineStoryContent, resolveRelationMap } from '../utils/inline-relations';\nimport type { ApiResponse, FetchOptions, ResourceDeps } from '../client';\nimport type { Story as CapiStory, Block as Component, RootBlocks as RootComponents } from '@storyblok/schema';\n\ntype InlinedStoryContentField =\n | string\n | number\n | boolean\n | Array<string | AssetFieldValue | BlokContent | StoryWithInlinedRelations>\n | AssetFieldValue\n | MultilinkFieldValue\n | TableFieldValue\n | RichtextFieldValue\n | PluginFieldValue\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\n/** Splits `\"comp.field,comp2.field2\"` into a union of `{ component, field }`. */\ntype ParseRelations<T extends string> =\n T extends `${infer Comp}.${infer Field},${infer Rest}`\n ? { component: Comp; field: Field } | ParseRelations<Rest>\n : T extends `${infer Comp}.${infer Field}`\n ? { component: Comp; field: Field }\n : never;\n\n/** Extracts resolved field names for a given component name. */\ntype ResolvedFieldsFor<R extends string, ComponentName extends string> =\n Extract<ParseRelations<R>, { component: ComponentName }>['field'];\n\n/** A resolved relation: a full story typed to the component union. */\ntype ResolvedRelation<TComponents extends Component> =\n { [K in TComponents as K['name']]: CapiStory<K, TComponents> }[TComponents['name']];\n\n/**\n * Given a story type and a set of resolved field names, replaces\n * those fields with `ResolvedRelation<TComponents>` (a full story object).\n */\ntype WithResolvedRelations<\n TStory,\n TComponents extends Component,\n Fields extends string,\n> = TStory extends { content: infer C } ? Omit<TStory, 'content'> & {\n content: {\n [K in keyof C]: K extends Fields ? ResolvedRelation<TComponents> : C[K]\n };\n}\n : TStory;\n\n/**\n * Resolves to a narrowed component-derived story type when `TComponents` is a specific\n * Component union, or falls back to the generated StoryCapi / StoryWithInlinedRelations\n * when `TComponents` is the default Component base type (no type argument provided).\n *\n * When `ResolveRelations` is a string literal (e.g. `\"article.author\"`),\n * matched fields are widened from their schema type to `ResolvedRelation<TComponents>`\n * — a full story object typed to the component union.\n *\n * Uses a mapped-type approach instead of a distributive conditional with a\n * separate full-components parameter. This ensures the full `TComponents` union is\n * preserved even when DTS bundlers (like tsdown) inline the type alias —\n * a distributive conditional + default-parameter pattern would collapse\n * both parameters to the distributed single member after inlining.\n *\n * The mapped type `{ [K in TComponents as K[\"name\"]]: CapiStory<K, TComponents> }`\n * iterates each union member as `K` while keeping `TComponents` as the full union\n * for nested blok field resolution. The final indexed access\n * `[TComponents[\"name\"]]` produces the discriminated union of all story types.\n */\ntype StoryResult<\n TComponents extends Component,\n InlineRelations extends boolean,\n ResolveRelationsRaw extends string | undefined = undefined,\n> =\n Component extends TComponents\n ? InlineRelations extends true ? StoryWithInlinedRelations : StoryCapi // fallback\n : ResolveRelationsRaw extends string\n ? {\n [K in RootComponents<TComponents> as K['name']]: WithResolvedRelations<\n CapiStory<K, TComponents>,\n TComponents,\n ResolvedFieldsFor<ResolveRelationsRaw, K['name']>\n >\n }[RootComponents<TComponents>['name']]\n : CapiStory<TComponents>;\n\ntype GetResponse<\n TComponents extends Component,\n InlineRelations extends boolean,\n ResolveRelationsRaw extends string | undefined = undefined,\n> = Omit<GetResponses[200], 'story'> & {\n story: StoryResult<TComponents, InlineRelations, ResolveRelationsRaw>;\n};\ntype ListResponse<\n TComponents extends Component,\n InlineRelations extends boolean,\n ResolveRelationsRaw extends string | undefined = undefined,\n> = Omit<ListResponses[200], 'stories'> & {\n stories: Array<StoryResult<TComponents, InlineRelations, ResolveRelationsRaw>>;\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<DefaultThrowOnError extends boolean = false> extends ResourceDeps<DefaultThrowOnError> {\n inlineRelations: boolean;\n}\n\nexport function createStoriesResource<\n TComponents extends Component = Component,\n InlineRelations extends boolean = false,\n DefaultThrowOnError extends boolean = false,\n>(\n deps: StoriesResourceDeps<DefaultThrowOnError>,\n) {\n const { client, requestWithCache, asApiResponse, inlineRelations, throttleManager } = deps;\n\n return {\n get: async <\n ThrowOnError extends boolean = DefaultThrowOnError,\n const ResolveRelationsStr extends string | undefined = undefined,\n >(\n identifier: StoryIdentifier,\n options: { query?: Omit<NonNullable<GetData['query']>, 'resolve_relations'> & { resolve_relations?: ResolveRelationsStr }; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<GetResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const typedQuery = (query ?? {}) as NonNullable<GetData['query']>;\n const resolvedQuery = typeof identifier === 'string' && UUID_RE.test(identifier) && !typedQuery.find_by\n ? { ...typedQuery, find_by: 'uuid' }\n : typedQuery;\n const requestPath = `/v2/cdn/stories/${identifier}`;\n return requestWithCache('GET', requestPath, resolvedQuery, async (requestQuery: Record<string, unknown>) => {\n const response = await throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse(get({\n client,\n path: { identifier },\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }))) satisfies ApiResponse<GetResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>;\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 // `inlineStoryContent` operates on raw `StoryCapi` shapes and mutates relation fields\n // from UUID strings to full story objects. We cast to satisfy its parameter type.\n story: inlineStoryContent(response.data.story as StoryCapi, resolved.relationPaths, resolved.relationMap),\n },\n };\n }, inlineRelations ? { cacheKeyPrefix: 'inline' } : undefined);\n },\n\n list: async <\n ThrowOnError extends boolean = DefaultThrowOnError,\n const ResolveRelationsStr extends string | undefined = undefined,\n >(\n options: { query?: Omit<NonNullable<ListData['query']>, 'resolve_relations'> & { resolve_relations?: ResolveRelationsStr }; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<ListResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const typedQuery = (query ?? {}) as NonNullable<ListData['query']>;\n const requestPath = '/v2/cdn/stories';\n return requestWithCache('GET', requestPath, typedQuery, async (requestQuery: Record<string, unknown>) => {\n const response = await throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse(list({\n client,\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }))) satisfies ApiResponse<ListResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>;\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 // `inlineStoriesContent` operates on raw `StoryCapi` shapes and mutates relation fields\n // from UUID strings to full story objects. We cast to satisfy its parameter type.\n stories: inlineStoriesContent(response.data.stories as StoryCapi[], resolved.relationPaths, resolved.relationMap),\n },\n };\n }, inlineRelations ? { cacheKeyPrefix: 'inline' } : undefined);\n },\n };\n}\n"],"mappings":";;;;AA6HA,MAAM,UAAU;AAMhB,SAAgB,sBAKd,MACA;CACA,MAAM,EAAE,QAAQ,kBAAkB,eAAe,iBAAiB,oBAAoB;AAEtF,QAAO;EACL,KAAK,OAIH,YACA,UAA8M,EAAE,KACzG;GACvG,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;GAC3D,MAAM,aAAc,SAAS,EAAE;GAC/B,MAAM,gBAAgB,OAAO,eAAe,YAAY,QAAQ,KAAK,WAAW,IAAI,CAAC,WAAW,UAC5F;IAAE,GAAG;IAAY,SAAS;IAAQ,GAClC;GACJ,MAAM,cAAc,mBAAmB;AACvC,UAAO,iBAAiB,OAAO,aAAa,eAAe,OAAO,iBAA0C;IAC1G,MAAM,WAAW,MAAM,gBAAgB,QAAQ,aAAa,oBAC1D,cAAcA,oBAAI;KAChB;KACA,MAAM,EAAE,YAAY;KACpB,OAAO;KACP;KACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;KACtD,GAAI,eAAe,EAAE,WAAW;MAAE,GAAG,OAAO,WAAW,CAAC;MAAW,GAAG;MAAc,EAAE,GAAG,EAAE;KAC5F,CAAC,CAAC,CAAC;AAEN,QAAI,CAAC,mBAAmB,SAAS,SAAS,OACxC,QAAO;IAGT,MAAM,WAAW,MAAMC,4CAAmB,SAAS,MAAM,cAAc;KAAE;KAAQ;KAAiB,CAAC;AACnG,QAAI,CAAC,SACH,QAAO;AAGT,WAAO;KACL,GAAG;KACH,MAAM;MACJ,GAAG,SAAS;MAGZ,OAAOC,4CAAmB,SAAS,KAAK,OAAoB,SAAS,eAAe,SAAS,YAAY;MAC1G;KACF;MACA,kBAAkB,EAAE,gBAAgB,UAAU,GAAG,OAAU;;EAGhE,MAAM,OAIJ,UAA+M,EAAE,KACzG;GACxG,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;GAC3D,MAAM,aAAc,SAAS,EAAE;GAC/B,MAAM,cAAc;AACpB,UAAO,iBAAiB,OAAO,aAAa,YAAY,OAAO,iBAA0C;IACvG,MAAM,WAAW,MAAM,gBAAgB,QAAQ,aAAa,oBAC1D,cAAcC,qBAAK;KACjB;KACA,OAAO;KACP;KACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;KACtD,GAAI,eAAe,EAAE,WAAW;MAAE,GAAG,OAAO,WAAW,CAAC;MAAW,GAAG;MAAc,EAAE,GAAG,EAAE;KAC5F,CAAC,CAAC,CAAC;AAEN,QAAI,CAAC,mBAAmB,SAAS,SAAS,OACxC,QAAO;IAGT,MAAM,WAAW,MAAMF,4CAAmB,SAAS,MAAM,cAAc;KAAE;KAAQ;KAAiB,CAAC;AACnG,QAAI,CAAC,SACH,QAAO;AAGT,WAAO;KACL,GAAG;KACH,MAAM;MACJ,GAAG,SAAS;MAGZ,SAASG,8CAAqB,SAAS,KAAK,SAAwB,SAAS,eAAe,SAAS,YAAY;MAClH;KACF;MACA,kBAAkB,EAAE,gBAAgB,UAAU,GAAG,OAAU;;EAEjE"}
1
+ {"version":3,"file":"stories.cjs","names":["getStoryById","resolveRelationMap","inlineStoryContent","listStories","inlineStoriesContent"],"sources":["../../src/resources/stories.ts"],"sourcesContent":["import { getStoryById, listStories } from '../generated/capi/sdk.gen';\nimport type { GetStoryByIdData, GetStoryByIdResponses, ListStoriesData, ListStoriesResponses } from '../generated/capi/types.gen';\nimport type {\n AssetFieldValue,\n BlockContent as BlokContent,\n MultilinkFieldValue,\n PluginFieldValue,\n RichtextFieldValue,\n TableFieldValue,\n} from '../generated/types/field';\nimport { inlineStoriesContent, inlineStoryContent, resolveRelationMap } from '../utils/inline-relations';\nimport type { ApiResponse, FetchOptions, ResourceDeps } from '../client';\nimport type { Block as Component, RootBlock as RootComponents } from '../generated/types/block';\nimport type { Story } from '../generated/types/story';\n\ntype InlinedStoryContentField =\n | string\n | number\n | boolean\n | Array<string | AssetFieldValue | BlokContent | StoryWithInlinedRelations>\n | AssetFieldValue\n | MultilinkFieldValue\n | TableFieldValue\n | RichtextFieldValue\n | PluginFieldValue\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<Story, 'content'> & {\n content: InlinedStoryContent;\n};\n\n/** Splits `\"comp.field,comp2.field2\"` into a union of `{ component, field }`. */\ntype ParseRelations<T extends string> =\n T extends `${infer Comp}.${infer Field},${infer Rest}`\n ? { component: Comp; field: Field } | ParseRelations<Rest>\n : T extends `${infer Comp}.${infer Field}`\n ? { component: Comp; field: Field }\n : never;\n\n/** Extracts resolved field names for a given component name. */\ntype ResolvedFieldsFor<R extends string, ComponentName extends string> =\n Extract<ParseRelations<R>, { component: ComponentName }>['field'];\n\n/** A resolved relation: a full story typed to the component union. */\ntype ResolvedRelation<TComponents extends Component> =\n { [K in TComponents as K['name']]: Story<K, TComponents> }[TComponents['name']];\n\n/**\n * Given a story type and a set of resolved field names, replaces\n * those fields with `ResolvedRelation<TComponents>` (a full story object).\n */\ntype WithResolvedRelations<\n TStory,\n TComponents extends Component,\n Fields extends string,\n> = TStory extends { content: infer C } ? Omit<TStory, 'content'> & {\n content: {\n [K in keyof C]: K extends Fields ? ResolvedRelation<TComponents> : C[K]\n };\n}\n : TStory;\n\n/**\n * Resolves to a narrowed component-derived story type when `TComponents` is a specific\n * Component union, or falls back to the generated Story / StoryWithInlinedRelations\n * when `TComponents` is the default Component base type (no type argument provided).\n *\n * When `ResolveRelations` is a string literal (e.g. `\"article.author\"`),\n * matched fields are widened from their schema type to `ResolvedRelation<TComponents>`\n * — a full story object typed to the component union.\n *\n * Uses a mapped-type approach instead of a distributive conditional with a\n * separate full-components parameter. This ensures the full `TComponents` union is\n * preserved even when DTS bundlers (like tsdown) inline the type alias —\n * a distributive conditional + default-parameter pattern would collapse\n * both parameters to the distributed single member after inlining.\n *\n * The mapped type `{ [K in TComponents as K[\"name\"]]: Story<K, TComponents> }`\n * iterates each union member as `K` while keeping `TComponents` as the full union\n * for nested blok field resolution. The final indexed access\n * `[TComponents[\"name\"]]` produces the discriminated union of all story types.\n */\ntype StoryResult<\n TComponents extends Component,\n InlineRelations extends boolean,\n ResolveRelationsRaw extends string | undefined = undefined,\n> =\n Component extends TComponents\n ? InlineRelations extends true ? StoryWithInlinedRelations : Story // fallback\n : ResolveRelationsRaw extends string\n ? {\n [K in RootComponents<TComponents> as K['name']]: WithResolvedRelations<\n Story<K, TComponents>,\n TComponents,\n ResolvedFieldsFor<ResolveRelationsRaw, K['name']>\n >\n }[RootComponents<TComponents>['name']]\n : Story<TComponents>;\n\ntype GetResponse<\n TComponents extends Component,\n InlineRelations extends boolean,\n ResolveRelationsRaw extends string | undefined = undefined,\n> = Omit<GetStoryByIdResponses[200], 'story'> & {\n story: StoryResult<TComponents, InlineRelations, ResolveRelationsRaw>;\n};\ntype ListResponse<\n TComponents extends Component,\n InlineRelations extends boolean,\n ResolveRelationsRaw extends string | undefined = undefined,\n> = Omit<ListStoriesResponses[200], 'stories'> & {\n stories: Array<StoryResult<TComponents, InlineRelations, ResolveRelationsRaw>>;\n};\n\n/**\n * Internal relation-resolution shapes. The public response types expose the\n * generic `Story`, but relation inlining needs to read the API's sidecar\n * `rels`/`rel_uuids` fields off the raw payload. These three interfaces model\n * that wire shape so the `response.data` narrowing below stays in one place\n * instead of being scattered as inline casts.\n */\ninterface StoryRelationData {\n rels?: Story[];\n rel_uuids?: string[];\n}\n\ninterface StoryData extends StoryRelationData {\n story: Story;\n}\n\ninterface StoriesData extends StoryRelationData {\n stories: Story[];\n}\n\n/** The story identifier path param (full slug, numeric ID, or UUID), derived from the generated request type. */\ntype StoryIdentifier = GetStoryByIdData['path']['id'];\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<DefaultThrowOnError extends boolean = false> extends ResourceDeps<DefaultThrowOnError> {\n inlineRelations: boolean;\n}\n\nexport function createStoriesResource<\n TComponents extends Component = Component,\n InlineRelations extends boolean = false,\n DefaultThrowOnError extends boolean = false,\n>(\n deps: StoriesResourceDeps<DefaultThrowOnError>,\n) {\n const { client, requestWithCache, asApiResponse, inlineRelations, throttleManager } = deps;\n\n return {\n get: async <\n ThrowOnError extends boolean = DefaultThrowOnError,\n const ResolveRelationsStr extends string | undefined = undefined,\n >(\n identifier: StoryIdentifier,\n options: { query?: Omit<NonNullable<GetStoryByIdData['query']>, 'resolve_relations'> & { resolve_relations?: ResolveRelationsStr }; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<GetResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const typedQuery = (query ?? {}) as NonNullable<GetStoryByIdData['query']>;\n const resolvedQuery = typeof identifier === 'string' && UUID_RE.test(identifier) && !typedQuery.find_by\n ? { ...typedQuery, find_by: 'uuid' }\n : typedQuery;\n const requestPath = `/v2/cdn/stories/${identifier}`;\n return requestWithCache('GET', requestPath, resolvedQuery, async (requestQuery: Record<string, unknown>) => {\n const response = await throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse(getStoryById({\n client,\n path: { id: identifier },\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }))) satisfies ApiResponse<GetResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>;\n\n if (!inlineRelations || response.data === undefined) {\n return response;\n }\n\n // Narrow to the internal relation shape to read the API's sidecar\n // `rels`/`rel_uuids`; consumers keep seeing the generic `Story`.\n const storyData = response.data as unknown as StoryData;\n const resolved = await resolveRelationMap(storyData, requestQuery, { client, throttleManager });\n if (!resolved) {\n return response;\n }\n\n return {\n ...response,\n data: {\n ...response.data,\n story: inlineStoryContent(storyData.story, resolved.relationPaths, resolved.relationMap),\n },\n };\n }, inlineRelations ? { cacheKeyPrefix: 'inline' } : undefined);\n },\n\n list: async <\n ThrowOnError extends boolean = DefaultThrowOnError,\n const ResolveRelationsStr extends string | undefined = undefined,\n >(\n options: { query?: Omit<NonNullable<ListStoriesData['query']>, 'resolve_relations'> & { resolve_relations?: ResolveRelationsStr }; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<ListResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const typedQuery = (query ?? {}) as NonNullable<ListStoriesData['query']>;\n const requestPath = '/v2/cdn/stories';\n return requestWithCache('GET', requestPath, typedQuery, async (requestQuery: Record<string, unknown>) => {\n const response = await throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse(listStories({\n client,\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }))) satisfies ApiResponse<ListResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>;\n\n if (!inlineRelations || response.data === undefined) {\n return response;\n }\n\n // Narrow to the internal relation shape to read the API's sidecar\n // `rels`/`rel_uuids`; consumers keep seeing the generic `Story`.\n const storiesData = response.data as unknown as StoriesData;\n const resolved = await resolveRelationMap(storiesData, requestQuery, { client, throttleManager });\n if (!resolved) {\n return response;\n }\n\n return {\n ...response,\n data: {\n ...response.data,\n stories: inlineStoriesContent(storiesData.stories, resolved.relationPaths, resolved.relationMap),\n },\n };\n }, inlineRelations ? { cacheKeyPrefix: 'inline' } : undefined);\n },\n };\n}\n"],"mappings":";;;;AAiJA,MAAM,UAAU;AAMhB,SAAgB,sBAKd,MACA;CACA,MAAM,EAAE,QAAQ,kBAAkB,eAAe,iBAAiB,oBAAoB;AAEtF,QAAO;EACL,KAAK,OAIH,YACA,UAAuN,EAAE,KAClH;GACvG,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;GAC3D,MAAM,aAAc,SAAS,EAAE;GAC/B,MAAM,gBAAgB,OAAO,eAAe,YAAY,QAAQ,KAAK,WAAW,IAAI,CAAC,WAAW,UAC5F;IAAE,GAAG;IAAY,SAAS;IAAQ,GAClC;GACJ,MAAM,cAAc,mBAAmB;AACvC,UAAO,iBAAiB,OAAO,aAAa,eAAe,OAAO,iBAA0C;IAC1G,MAAM,WAAW,MAAM,gBAAgB,QAAQ,aAAa,oBAC1D,cAAcA,6BAAa;KACzB;KACA,MAAM,EAAE,IAAI,YAAY;KACxB,OAAO;KACP;KACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;KACtD,GAAI,eAAe,EAAE,WAAW;MAAE,GAAG,OAAO,WAAW,CAAC;MAAW,GAAG;MAAc,EAAE,GAAG,EAAE;KAC5F,CAAC,CAAC,CAAC;AAEN,QAAI,CAAC,mBAAmB,SAAS,SAAS,OACxC,QAAO;IAKT,MAAM,YAAY,SAAS;IAC3B,MAAM,WAAW,MAAMC,4CAAmB,WAAW,cAAc;KAAE;KAAQ;KAAiB,CAAC;AAC/F,QAAI,CAAC,SACH,QAAO;AAGT,WAAO;KACL,GAAG;KACH,MAAM;MACJ,GAAG,SAAS;MACZ,OAAOC,4CAAmB,UAAU,OAAO,SAAS,eAAe,SAAS,YAAY;MACzF;KACF;MACA,kBAAkB,EAAE,gBAAgB,UAAU,GAAG,OAAU;;EAGhE,MAAM,OAIJ,UAAsN,EAAE,KAChH;GACxG,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;GAC3D,MAAM,aAAc,SAAS,EAAE;GAC/B,MAAM,cAAc;AACpB,UAAO,iBAAiB,OAAO,aAAa,YAAY,OAAO,iBAA0C;IACvG,MAAM,WAAW,MAAM,gBAAgB,QAAQ,aAAa,oBAC1D,cAAcC,4BAAY;KACxB;KACA,OAAO;KACP;KACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;KACtD,GAAI,eAAe,EAAE,WAAW;MAAE,GAAG,OAAO,WAAW,CAAC;MAAW,GAAG;MAAc,EAAE,GAAG,EAAE;KAC5F,CAAC,CAAC,CAAC;AAEN,QAAI,CAAC,mBAAmB,SAAS,SAAS,OACxC,QAAO;IAKT,MAAM,cAAc,SAAS;IAC7B,MAAM,WAAW,MAAMF,4CAAmB,aAAa,cAAc;KAAE;KAAQ;KAAiB,CAAC;AACjG,QAAI,CAAC,SACH,QAAO;AAGT,WAAO;KACL,GAAG;KACH,MAAM;MACJ,GAAG,SAAS;MACZ,SAASG,8CAAqB,YAAY,SAAS,SAAS,eAAe,SAAS,YAAY;MACjG;KACF;MACA,kBAAkB,EAAE,gBAAgB,UAAU,GAAG,OAAU;;EAEjE"}
@@ -1,16 +1,19 @@
1
- import { AssetFieldValue, BlokContent, GetData, GetResponses, ListData, ListResponses, MultilinkFieldValue, PluginFieldValue, RichtextFieldValue, StoryCapi, TableFieldValue } from "../generated/stories/types.gen.cjs";
1
+ import { GetStoryByIdData, GetStoryByIdResponses, ListStoriesData, ListStoriesResponses } from "../generated/capi/types.gen.cjs";
2
+ import { AssetFieldValue, MultilinkFieldValue, PluginFieldValue, RichtextFieldValue, TableFieldValue } from "../generated/overlay/_internal.gen.cjs";
3
+ import { Block, RootBlock } from "../generated/types/block.cjs";
4
+ import { BlockContent } from "../generated/types/field.cjs";
5
+ import { Story } from "../generated/types/story.cjs";
2
6
  import { ApiResponse, FetchOptions, ResourceDeps } from "../client.cjs";
3
- import { Block, RootBlocks, Story } from "@storyblok/schema";
4
7
 
5
8
  //#region src/resources/stories.d.ts
6
- type InlinedStoryContentField = string | number | boolean | Array<string | AssetFieldValue | BlokContent | StoryWithInlinedRelations> | AssetFieldValue | MultilinkFieldValue | TableFieldValue | RichtextFieldValue | PluginFieldValue | StoryWithInlinedRelations | undefined;
9
+ type InlinedStoryContentField = string | number | boolean | Array<string | AssetFieldValue | BlockContent | StoryWithInlinedRelations> | AssetFieldValue | MultilinkFieldValue | TableFieldValue | RichtextFieldValue | PluginFieldValue | StoryWithInlinedRelations | undefined;
7
10
  interface InlinedStoryContent {
8
11
  _uid: string;
9
12
  component: string;
10
13
  _editable?: string;
11
14
  [key: string]: InlinedStoryContentField;
12
15
  }
13
- type StoryWithInlinedRelations = Omit<StoryCapi, 'content'> & {
16
+ type StoryWithInlinedRelations = Omit<Story, 'content'> & {
14
17
  content: InlinedStoryContent;
15
18
  };
16
19
  /** Splits `"comp.field,comp2.field2"` into a union of `{ component, field }`. */
@@ -38,7 +41,7 @@ type WithResolvedRelations<TStory, TComponents extends Block, Fields extends str
38
41
  } : TStory;
39
42
  /**
40
43
  * Resolves to a narrowed component-derived story type when `TComponents` is a specific
41
- * Component union, or falls back to the generated StoryCapi / StoryWithInlinedRelations
44
+ * Component union, or falls back to the generated Story / StoryWithInlinedRelations
42
45
  * when `TComponents` is the default Component base type (no type argument provided).
43
46
  *
44
47
  * When `ResolveRelations` is a string literal (e.g. `"article.author"`),
@@ -51,26 +54,26 @@ type WithResolvedRelations<TStory, TComponents extends Block, Fields extends str
51
54
  * a distributive conditional + default-parameter pattern would collapse
52
55
  * both parameters to the distributed single member after inlining.
53
56
  *
54
- * The mapped type `{ [K in TComponents as K["name"]]: CapiStory<K, TComponents> }`
57
+ * The mapped type `{ [K in TComponents as K["name"]]: Story<K, TComponents> }`
55
58
  * iterates each union member as `K` while keeping `TComponents` as the full union
56
59
  * for nested blok field resolution. The final indexed access
57
60
  * `[TComponents["name"]]` produces the discriminated union of all story types.
58
61
  */
59
- type StoryResult<TComponents extends Block, InlineRelations extends boolean, ResolveRelationsRaw extends string | undefined = undefined> = Block extends TComponents ? InlineRelations extends true ? StoryWithInlinedRelations : StoryCapi : ResolveRelationsRaw extends string ? { [K in RootBlocks<TComponents> as K['name']]: WithResolvedRelations<Story<K, TComponents>, TComponents, ResolvedFieldsFor<ResolveRelationsRaw, K['name']>> }[RootBlocks<TComponents>['name']] : Story<TComponents>;
60
- type GetResponse<TComponents extends Block, InlineRelations extends boolean, ResolveRelationsRaw extends string | undefined = undefined> = Omit<GetResponses[200], 'story'> & {
62
+ type StoryResult<TComponents extends Block, InlineRelations extends boolean, ResolveRelationsRaw extends string | undefined = undefined> = Block extends TComponents ? InlineRelations extends true ? StoryWithInlinedRelations : Story : ResolveRelationsRaw extends string ? { [K in RootBlock<TComponents> as K['name']]: WithResolvedRelations<Story<K, TComponents>, TComponents, ResolvedFieldsFor<ResolveRelationsRaw, K['name']>> }[RootBlock<TComponents>['name']] : Story<TComponents>;
63
+ type GetResponse<TComponents extends Block, InlineRelations extends boolean, ResolveRelationsRaw extends string | undefined = undefined> = Omit<GetStoryByIdResponses[200], 'story'> & {
61
64
  story: StoryResult<TComponents, InlineRelations, ResolveRelationsRaw>;
62
65
  };
63
- type ListResponse<TComponents extends Block, InlineRelations extends boolean, ResolveRelationsRaw extends string | undefined = undefined> = Omit<ListResponses[200], 'stories'> & {
66
+ type ListResponse<TComponents extends Block, InlineRelations extends boolean, ResolveRelationsRaw extends string | undefined = undefined> = Omit<ListStoriesResponses[200], 'stories'> & {
64
67
  stories: Array<StoryResult<TComponents, InlineRelations, ResolveRelationsRaw>>;
65
68
  };
66
- /** Pre-resolved to avoid TypeScript emitting deep indexed-access chains that trip up DTS bundlers. */
67
- type StoryIdentifier = GetData['path']['identifier'];
69
+ /** The story identifier path param (full slug, numeric ID, or UUID), derived from the generated request type. */
70
+ type StoryIdentifier = GetStoryByIdData['path']['id'];
68
71
  interface StoriesResourceDeps<DefaultThrowOnError extends boolean = false> extends ResourceDeps<DefaultThrowOnError> {
69
72
  inlineRelations: boolean;
70
73
  }
71
74
  declare function createStoriesResource<TComponents extends Block = Block, InlineRelations extends boolean = false, DefaultThrowOnError extends boolean = false>(deps: StoriesResourceDeps<DefaultThrowOnError>): {
72
75
  get: <ThrowOnError extends boolean = DefaultThrowOnError, const ResolveRelationsStr extends string | undefined = undefined>(identifier: StoryIdentifier, options?: {
73
- query?: Omit<NonNullable<GetData["query"]>, "resolve_relations"> & {
76
+ query?: Omit<NonNullable<GetStoryByIdData["query"]>, "resolve_relations"> & {
74
77
  resolve_relations?: ResolveRelationsStr;
75
78
  };
76
79
  signal?: AbortSignal;
@@ -78,7 +81,7 @@ declare function createStoriesResource<TComponents extends Block = Block, Inline
78
81
  fetchOptions?: FetchOptions;
79
82
  }) => Promise<ApiResponse<GetResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>>;
80
83
  list: <ThrowOnError extends boolean = DefaultThrowOnError, const ResolveRelationsStr extends string | undefined = undefined>(options?: {
81
- query?: Omit<NonNullable<ListData["query"]>, "resolve_relations"> & {
84
+ query?: Omit<NonNullable<ListStoriesData["query"]>, "resolve_relations"> & {
82
85
  resolve_relations?: ResolveRelationsStr;
83
86
  };
84
87
  signal?: AbortSignal;
@@ -1,16 +1,19 @@
1
- import { AssetFieldValue, BlokContent, GetData, GetResponses, ListData, ListResponses, MultilinkFieldValue, PluginFieldValue, RichtextFieldValue, StoryCapi, TableFieldValue } from "../generated/stories/types.gen.mjs";
1
+ import { GetStoryByIdData, GetStoryByIdResponses, ListStoriesData, ListStoriesResponses } from "../generated/capi/types.gen.mjs";
2
+ import { AssetFieldValue, MultilinkFieldValue, PluginFieldValue, RichtextFieldValue, TableFieldValue } from "../generated/overlay/_internal.gen.mjs";
3
+ import { Block, RootBlock } from "../generated/types/block.mjs";
4
+ import { BlockContent } from "../generated/types/field.mjs";
5
+ import { Story } from "../generated/types/story.mjs";
2
6
  import { ApiResponse, FetchOptions, ResourceDeps } from "../client.mjs";
3
- import { Block, RootBlocks, Story } from "@storyblok/schema";
4
7
 
5
8
  //#region src/resources/stories.d.ts
6
- type InlinedStoryContentField = string | number | boolean | Array<string | AssetFieldValue | BlokContent | StoryWithInlinedRelations> | AssetFieldValue | MultilinkFieldValue | TableFieldValue | RichtextFieldValue | PluginFieldValue | StoryWithInlinedRelations | undefined;
9
+ type InlinedStoryContentField = string | number | boolean | Array<string | AssetFieldValue | BlockContent | StoryWithInlinedRelations> | AssetFieldValue | MultilinkFieldValue | TableFieldValue | RichtextFieldValue | PluginFieldValue | StoryWithInlinedRelations | undefined;
7
10
  interface InlinedStoryContent {
8
11
  _uid: string;
9
12
  component: string;
10
13
  _editable?: string;
11
14
  [key: string]: InlinedStoryContentField;
12
15
  }
13
- type StoryWithInlinedRelations = Omit<StoryCapi, 'content'> & {
16
+ type StoryWithInlinedRelations = Omit<Story, 'content'> & {
14
17
  content: InlinedStoryContent;
15
18
  };
16
19
  /** Splits `"comp.field,comp2.field2"` into a union of `{ component, field }`. */
@@ -38,7 +41,7 @@ type WithResolvedRelations<TStory, TComponents extends Block, Fields extends str
38
41
  } : TStory;
39
42
  /**
40
43
  * Resolves to a narrowed component-derived story type when `TComponents` is a specific
41
- * Component union, or falls back to the generated StoryCapi / StoryWithInlinedRelations
44
+ * Component union, or falls back to the generated Story / StoryWithInlinedRelations
42
45
  * when `TComponents` is the default Component base type (no type argument provided).
43
46
  *
44
47
  * When `ResolveRelations` is a string literal (e.g. `"article.author"`),
@@ -51,26 +54,26 @@ type WithResolvedRelations<TStory, TComponents extends Block, Fields extends str
51
54
  * a distributive conditional + default-parameter pattern would collapse
52
55
  * both parameters to the distributed single member after inlining.
53
56
  *
54
- * The mapped type `{ [K in TComponents as K["name"]]: CapiStory<K, TComponents> }`
57
+ * The mapped type `{ [K in TComponents as K["name"]]: Story<K, TComponents> }`
55
58
  * iterates each union member as `K` while keeping `TComponents` as the full union
56
59
  * for nested blok field resolution. The final indexed access
57
60
  * `[TComponents["name"]]` produces the discriminated union of all story types.
58
61
  */
59
- type StoryResult<TComponents extends Block, InlineRelations extends boolean, ResolveRelationsRaw extends string | undefined = undefined> = Block extends TComponents ? InlineRelations extends true ? StoryWithInlinedRelations : StoryCapi : ResolveRelationsRaw extends string ? { [K in RootBlocks<TComponents> as K['name']]: WithResolvedRelations<Story<K, TComponents>, TComponents, ResolvedFieldsFor<ResolveRelationsRaw, K['name']>> }[RootBlocks<TComponents>['name']] : Story<TComponents>;
60
- type GetResponse<TComponents extends Block, InlineRelations extends boolean, ResolveRelationsRaw extends string | undefined = undefined> = Omit<GetResponses[200], 'story'> & {
62
+ type StoryResult<TComponents extends Block, InlineRelations extends boolean, ResolveRelationsRaw extends string | undefined = undefined> = Block extends TComponents ? InlineRelations extends true ? StoryWithInlinedRelations : Story : ResolveRelationsRaw extends string ? { [K in RootBlock<TComponents> as K['name']]: WithResolvedRelations<Story<K, TComponents>, TComponents, ResolvedFieldsFor<ResolveRelationsRaw, K['name']>> }[RootBlock<TComponents>['name']] : Story<TComponents>;
63
+ type GetResponse<TComponents extends Block, InlineRelations extends boolean, ResolveRelationsRaw extends string | undefined = undefined> = Omit<GetStoryByIdResponses[200], 'story'> & {
61
64
  story: StoryResult<TComponents, InlineRelations, ResolveRelationsRaw>;
62
65
  };
63
- type ListResponse<TComponents extends Block, InlineRelations extends boolean, ResolveRelationsRaw extends string | undefined = undefined> = Omit<ListResponses[200], 'stories'> & {
66
+ type ListResponse<TComponents extends Block, InlineRelations extends boolean, ResolveRelationsRaw extends string | undefined = undefined> = Omit<ListStoriesResponses[200], 'stories'> & {
64
67
  stories: Array<StoryResult<TComponents, InlineRelations, ResolveRelationsRaw>>;
65
68
  };
66
- /** Pre-resolved to avoid TypeScript emitting deep indexed-access chains that trip up DTS bundlers. */
67
- type StoryIdentifier = GetData['path']['identifier'];
69
+ /** The story identifier path param (full slug, numeric ID, or UUID), derived from the generated request type. */
70
+ type StoryIdentifier = GetStoryByIdData['path']['id'];
68
71
  interface StoriesResourceDeps<DefaultThrowOnError extends boolean = false> extends ResourceDeps<DefaultThrowOnError> {
69
72
  inlineRelations: boolean;
70
73
  }
71
74
  declare function createStoriesResource<TComponents extends Block = Block, InlineRelations extends boolean = false, DefaultThrowOnError extends boolean = false>(deps: StoriesResourceDeps<DefaultThrowOnError>): {
72
75
  get: <ThrowOnError extends boolean = DefaultThrowOnError, const ResolveRelationsStr extends string | undefined = undefined>(identifier: StoryIdentifier, options?: {
73
- query?: Omit<NonNullable<GetData["query"]>, "resolve_relations"> & {
76
+ query?: Omit<NonNullable<GetStoryByIdData["query"]>, "resolve_relations"> & {
74
77
  resolve_relations?: ResolveRelationsStr;
75
78
  };
76
79
  signal?: AbortSignal;
@@ -78,7 +81,7 @@ declare function createStoriesResource<TComponents extends Block = Block, Inline
78
81
  fetchOptions?: FetchOptions;
79
82
  }) => Promise<ApiResponse<GetResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>>;
80
83
  list: <ThrowOnError extends boolean = DefaultThrowOnError, const ResolveRelationsStr extends string | undefined = undefined>(options?: {
81
- query?: Omit<NonNullable<ListData["query"]>, "resolve_relations"> & {
84
+ query?: Omit<NonNullable<ListStoriesData["query"]>, "resolve_relations"> & {
82
85
  resolve_relations?: ResolveRelationsStr;
83
86
  };
84
87
  signal?: AbortSignal;
@@ -1,4 +1,4 @@
1
- import { get, list } from "../generated/stories/sdk.gen.mjs";
1
+ import { getStoryById, listStories } from "../generated/capi/sdk.gen.mjs";
2
2
  import { inlineStoriesContent, inlineStoryContent, resolveRelationMap } from "../utils/inline-relations.mjs";
3
3
 
4
4
  //#region src/resources/stories.ts
@@ -15,9 +15,9 @@ function createStoriesResource(deps) {
15
15
  } : typedQuery;
16
16
  const requestPath = `/v2/cdn/stories/${identifier}`;
17
17
  return requestWithCache("GET", requestPath, resolvedQuery, async (requestQuery) => {
18
- const response = await throttleManager.execute(requestPath, requestQuery, () => asApiResponse(get({
18
+ const response = await throttleManager.execute(requestPath, requestQuery, () => asApiResponse(getStoryById({
19
19
  client,
20
- path: { identifier },
20
+ path: { id: identifier },
21
21
  query: requestQuery,
22
22
  signal,
23
23
  ...throwOnError === void 0 ? {} : { throwOnError },
@@ -27,7 +27,8 @@ function createStoriesResource(deps) {
27
27
  } } : {}
28
28
  })));
29
29
  if (!inlineRelations || response.data === void 0) return response;
30
- const resolved = await resolveRelationMap(response.data, requestQuery, {
30
+ const storyData = response.data;
31
+ const resolved = await resolveRelationMap(storyData, requestQuery, {
31
32
  client,
32
33
  throttleManager
33
34
  });
@@ -36,7 +37,7 @@ function createStoriesResource(deps) {
36
37
  ...response,
37
38
  data: {
38
39
  ...response.data,
39
- story: inlineStoryContent(response.data.story, resolved.relationPaths, resolved.relationMap)
40
+ story: inlineStoryContent(storyData.story, resolved.relationPaths, resolved.relationMap)
40
41
  }
41
42
  };
42
43
  }, inlineRelations ? { cacheKeyPrefix: "inline" } : void 0);
@@ -46,7 +47,7 @@ function createStoriesResource(deps) {
46
47
  const typedQuery = query ?? {};
47
48
  const requestPath = "/v2/cdn/stories";
48
49
  return requestWithCache("GET", requestPath, typedQuery, async (requestQuery) => {
49
- const response = await throttleManager.execute(requestPath, requestQuery, () => asApiResponse(list({
50
+ const response = await throttleManager.execute(requestPath, requestQuery, () => asApiResponse(listStories({
50
51
  client,
51
52
  query: requestQuery,
52
53
  signal,
@@ -57,7 +58,8 @@ function createStoriesResource(deps) {
57
58
  } } : {}
58
59
  })));
59
60
  if (!inlineRelations || response.data === void 0) return response;
60
- const resolved = await resolveRelationMap(response.data, requestQuery, {
61
+ const storiesData = response.data;
62
+ const resolved = await resolveRelationMap(storiesData, requestQuery, {
61
63
  client,
62
64
  throttleManager
63
65
  });
@@ -66,7 +68,7 @@ function createStoriesResource(deps) {
66
68
  ...response,
67
69
  data: {
68
70
  ...response.data,
69
- stories: inlineStoriesContent(response.data.stories, resolved.relationPaths, resolved.relationMap)
71
+ stories: inlineStoriesContent(storiesData.stories, resolved.relationPaths, resolved.relationMap)
70
72
  }
71
73
  };
72
74
  }, inlineRelations ? { cacheKeyPrefix: "inline" } : void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"stories.mjs","names":[],"sources":["../../src/resources/stories.ts"],"sourcesContent":["import { get, list } from '../generated/stories/sdk.gen';\nimport type { GetData, GetResponses, ListData, ListResponses } from '../generated/stories/types.gen';\nimport type {\n AssetFieldValue,\n BlokContent,\n MultilinkFieldValue,\n PluginFieldValue,\n RichtextFieldValue,\n StoryCapi,\n TableFieldValue,\n} from '../generated/stories';\nimport { inlineStoriesContent, inlineStoryContent, resolveRelationMap } from '../utils/inline-relations';\nimport type { ApiResponse, FetchOptions, ResourceDeps } from '../client';\nimport type { Story as CapiStory, Block as Component, RootBlocks as RootComponents } from '@storyblok/schema';\n\ntype InlinedStoryContentField =\n | string\n | number\n | boolean\n | Array<string | AssetFieldValue | BlokContent | StoryWithInlinedRelations>\n | AssetFieldValue\n | MultilinkFieldValue\n | TableFieldValue\n | RichtextFieldValue\n | PluginFieldValue\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\n/** Splits `\"comp.field,comp2.field2\"` into a union of `{ component, field }`. */\ntype ParseRelations<T extends string> =\n T extends `${infer Comp}.${infer Field},${infer Rest}`\n ? { component: Comp; field: Field } | ParseRelations<Rest>\n : T extends `${infer Comp}.${infer Field}`\n ? { component: Comp; field: Field }\n : never;\n\n/** Extracts resolved field names for a given component name. */\ntype ResolvedFieldsFor<R extends string, ComponentName extends string> =\n Extract<ParseRelations<R>, { component: ComponentName }>['field'];\n\n/** A resolved relation: a full story typed to the component union. */\ntype ResolvedRelation<TComponents extends Component> =\n { [K in TComponents as K['name']]: CapiStory<K, TComponents> }[TComponents['name']];\n\n/**\n * Given a story type and a set of resolved field names, replaces\n * those fields with `ResolvedRelation<TComponents>` (a full story object).\n */\ntype WithResolvedRelations<\n TStory,\n TComponents extends Component,\n Fields extends string,\n> = TStory extends { content: infer C } ? Omit<TStory, 'content'> & {\n content: {\n [K in keyof C]: K extends Fields ? ResolvedRelation<TComponents> : C[K]\n };\n}\n : TStory;\n\n/**\n * Resolves to a narrowed component-derived story type when `TComponents` is a specific\n * Component union, or falls back to the generated StoryCapi / StoryWithInlinedRelations\n * when `TComponents` is the default Component base type (no type argument provided).\n *\n * When `ResolveRelations` is a string literal (e.g. `\"article.author\"`),\n * matched fields are widened from their schema type to `ResolvedRelation<TComponents>`\n * — a full story object typed to the component union.\n *\n * Uses a mapped-type approach instead of a distributive conditional with a\n * separate full-components parameter. This ensures the full `TComponents` union is\n * preserved even when DTS bundlers (like tsdown) inline the type alias —\n * a distributive conditional + default-parameter pattern would collapse\n * both parameters to the distributed single member after inlining.\n *\n * The mapped type `{ [K in TComponents as K[\"name\"]]: CapiStory<K, TComponents> }`\n * iterates each union member as `K` while keeping `TComponents` as the full union\n * for nested blok field resolution. The final indexed access\n * `[TComponents[\"name\"]]` produces the discriminated union of all story types.\n */\ntype StoryResult<\n TComponents extends Component,\n InlineRelations extends boolean,\n ResolveRelationsRaw extends string | undefined = undefined,\n> =\n Component extends TComponents\n ? InlineRelations extends true ? StoryWithInlinedRelations : StoryCapi // fallback\n : ResolveRelationsRaw extends string\n ? {\n [K in RootComponents<TComponents> as K['name']]: WithResolvedRelations<\n CapiStory<K, TComponents>,\n TComponents,\n ResolvedFieldsFor<ResolveRelationsRaw, K['name']>\n >\n }[RootComponents<TComponents>['name']]\n : CapiStory<TComponents>;\n\ntype GetResponse<\n TComponents extends Component,\n InlineRelations extends boolean,\n ResolveRelationsRaw extends string | undefined = undefined,\n> = Omit<GetResponses[200], 'story'> & {\n story: StoryResult<TComponents, InlineRelations, ResolveRelationsRaw>;\n};\ntype ListResponse<\n TComponents extends Component,\n InlineRelations extends boolean,\n ResolveRelationsRaw extends string | undefined = undefined,\n> = Omit<ListResponses[200], 'stories'> & {\n stories: Array<StoryResult<TComponents, InlineRelations, ResolveRelationsRaw>>;\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<DefaultThrowOnError extends boolean = false> extends ResourceDeps<DefaultThrowOnError> {\n inlineRelations: boolean;\n}\n\nexport function createStoriesResource<\n TComponents extends Component = Component,\n InlineRelations extends boolean = false,\n DefaultThrowOnError extends boolean = false,\n>(\n deps: StoriesResourceDeps<DefaultThrowOnError>,\n) {\n const { client, requestWithCache, asApiResponse, inlineRelations, throttleManager } = deps;\n\n return {\n get: async <\n ThrowOnError extends boolean = DefaultThrowOnError,\n const ResolveRelationsStr extends string | undefined = undefined,\n >(\n identifier: StoryIdentifier,\n options: { query?: Omit<NonNullable<GetData['query']>, 'resolve_relations'> & { resolve_relations?: ResolveRelationsStr }; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<GetResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const typedQuery = (query ?? {}) as NonNullable<GetData['query']>;\n const resolvedQuery = typeof identifier === 'string' && UUID_RE.test(identifier) && !typedQuery.find_by\n ? { ...typedQuery, find_by: 'uuid' }\n : typedQuery;\n const requestPath = `/v2/cdn/stories/${identifier}`;\n return requestWithCache('GET', requestPath, resolvedQuery, async (requestQuery: Record<string, unknown>) => {\n const response = await throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse(get({\n client,\n path: { identifier },\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }))) satisfies ApiResponse<GetResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>;\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 // `inlineStoryContent` operates on raw `StoryCapi` shapes and mutates relation fields\n // from UUID strings to full story objects. We cast to satisfy its parameter type.\n story: inlineStoryContent(response.data.story as StoryCapi, resolved.relationPaths, resolved.relationMap),\n },\n };\n }, inlineRelations ? { cacheKeyPrefix: 'inline' } : undefined);\n },\n\n list: async <\n ThrowOnError extends boolean = DefaultThrowOnError,\n const ResolveRelationsStr extends string | undefined = undefined,\n >(\n options: { query?: Omit<NonNullable<ListData['query']>, 'resolve_relations'> & { resolve_relations?: ResolveRelationsStr }; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<ListResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const typedQuery = (query ?? {}) as NonNullable<ListData['query']>;\n const requestPath = '/v2/cdn/stories';\n return requestWithCache('GET', requestPath, typedQuery, async (requestQuery: Record<string, unknown>) => {\n const response = await throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse(list({\n client,\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }))) satisfies ApiResponse<ListResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>;\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 // `inlineStoriesContent` operates on raw `StoryCapi` shapes and mutates relation fields\n // from UUID strings to full story objects. We cast to satisfy its parameter type.\n stories: inlineStoriesContent(response.data.stories as StoryCapi[], resolved.relationPaths, resolved.relationMap),\n },\n };\n }, inlineRelations ? { cacheKeyPrefix: 'inline' } : undefined);\n },\n };\n}\n"],"mappings":";;;;AA6HA,MAAM,UAAU;AAMhB,SAAgB,sBAKd,MACA;CACA,MAAM,EAAE,QAAQ,kBAAkB,eAAe,iBAAiB,oBAAoB;AAEtF,QAAO;EACL,KAAK,OAIH,YACA,UAA8M,EAAE,KACzG;GACvG,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;GAC3D,MAAM,aAAc,SAAS,EAAE;GAC/B,MAAM,gBAAgB,OAAO,eAAe,YAAY,QAAQ,KAAK,WAAW,IAAI,CAAC,WAAW,UAC5F;IAAE,GAAG;IAAY,SAAS;IAAQ,GAClC;GACJ,MAAM,cAAc,mBAAmB;AACvC,UAAO,iBAAiB,OAAO,aAAa,eAAe,OAAO,iBAA0C;IAC1G,MAAM,WAAW,MAAM,gBAAgB,QAAQ,aAAa,oBAC1D,cAAc,IAAI;KAChB;KACA,MAAM,EAAE,YAAY;KACpB,OAAO;KACP;KACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;KACtD,GAAI,eAAe,EAAE,WAAW;MAAE,GAAG,OAAO,WAAW,CAAC;MAAW,GAAG;MAAc,EAAE,GAAG,EAAE;KAC5F,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;MAGZ,OAAO,mBAAmB,SAAS,KAAK,OAAoB,SAAS,eAAe,SAAS,YAAY;MAC1G;KACF;MACA,kBAAkB,EAAE,gBAAgB,UAAU,GAAG,OAAU;;EAGhE,MAAM,OAIJ,UAA+M,EAAE,KACzG;GACxG,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;GAC3D,MAAM,aAAc,SAAS,EAAE;GAC/B,MAAM,cAAc;AACpB,UAAO,iBAAiB,OAAO,aAAa,YAAY,OAAO,iBAA0C;IACvG,MAAM,WAAW,MAAM,gBAAgB,QAAQ,aAAa,oBAC1D,cAAc,KAAK;KACjB;KACA,OAAO;KACP;KACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;KACtD,GAAI,eAAe,EAAE,WAAW;MAAE,GAAG,OAAO,WAAW,CAAC;MAAW,GAAG;MAAc,EAAE,GAAG,EAAE;KAC5F,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;MAGZ,SAAS,qBAAqB,SAAS,KAAK,SAAwB,SAAS,eAAe,SAAS,YAAY;MAClH;KACF;MACA,kBAAkB,EAAE,gBAAgB,UAAU,GAAG,OAAU;;EAEjE"}
1
+ {"version":3,"file":"stories.mjs","names":[],"sources":["../../src/resources/stories.ts"],"sourcesContent":["import { getStoryById, listStories } from '../generated/capi/sdk.gen';\nimport type { GetStoryByIdData, GetStoryByIdResponses, ListStoriesData, ListStoriesResponses } from '../generated/capi/types.gen';\nimport type {\n AssetFieldValue,\n BlockContent as BlokContent,\n MultilinkFieldValue,\n PluginFieldValue,\n RichtextFieldValue,\n TableFieldValue,\n} from '../generated/types/field';\nimport { inlineStoriesContent, inlineStoryContent, resolveRelationMap } from '../utils/inline-relations';\nimport type { ApiResponse, FetchOptions, ResourceDeps } from '../client';\nimport type { Block as Component, RootBlock as RootComponents } from '../generated/types/block';\nimport type { Story } from '../generated/types/story';\n\ntype InlinedStoryContentField =\n | string\n | number\n | boolean\n | Array<string | AssetFieldValue | BlokContent | StoryWithInlinedRelations>\n | AssetFieldValue\n | MultilinkFieldValue\n | TableFieldValue\n | RichtextFieldValue\n | PluginFieldValue\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<Story, 'content'> & {\n content: InlinedStoryContent;\n};\n\n/** Splits `\"comp.field,comp2.field2\"` into a union of `{ component, field }`. */\ntype ParseRelations<T extends string> =\n T extends `${infer Comp}.${infer Field},${infer Rest}`\n ? { component: Comp; field: Field } | ParseRelations<Rest>\n : T extends `${infer Comp}.${infer Field}`\n ? { component: Comp; field: Field }\n : never;\n\n/** Extracts resolved field names for a given component name. */\ntype ResolvedFieldsFor<R extends string, ComponentName extends string> =\n Extract<ParseRelations<R>, { component: ComponentName }>['field'];\n\n/** A resolved relation: a full story typed to the component union. */\ntype ResolvedRelation<TComponents extends Component> =\n { [K in TComponents as K['name']]: Story<K, TComponents> }[TComponents['name']];\n\n/**\n * Given a story type and a set of resolved field names, replaces\n * those fields with `ResolvedRelation<TComponents>` (a full story object).\n */\ntype WithResolvedRelations<\n TStory,\n TComponents extends Component,\n Fields extends string,\n> = TStory extends { content: infer C } ? Omit<TStory, 'content'> & {\n content: {\n [K in keyof C]: K extends Fields ? ResolvedRelation<TComponents> : C[K]\n };\n}\n : TStory;\n\n/**\n * Resolves to a narrowed component-derived story type when `TComponents` is a specific\n * Component union, or falls back to the generated Story / StoryWithInlinedRelations\n * when `TComponents` is the default Component base type (no type argument provided).\n *\n * When `ResolveRelations` is a string literal (e.g. `\"article.author\"`),\n * matched fields are widened from their schema type to `ResolvedRelation<TComponents>`\n * — a full story object typed to the component union.\n *\n * Uses a mapped-type approach instead of a distributive conditional with a\n * separate full-components parameter. This ensures the full `TComponents` union is\n * preserved even when DTS bundlers (like tsdown) inline the type alias —\n * a distributive conditional + default-parameter pattern would collapse\n * both parameters to the distributed single member after inlining.\n *\n * The mapped type `{ [K in TComponents as K[\"name\"]]: Story<K, TComponents> }`\n * iterates each union member as `K` while keeping `TComponents` as the full union\n * for nested blok field resolution. The final indexed access\n * `[TComponents[\"name\"]]` produces the discriminated union of all story types.\n */\ntype StoryResult<\n TComponents extends Component,\n InlineRelations extends boolean,\n ResolveRelationsRaw extends string | undefined = undefined,\n> =\n Component extends TComponents\n ? InlineRelations extends true ? StoryWithInlinedRelations : Story // fallback\n : ResolveRelationsRaw extends string\n ? {\n [K in RootComponents<TComponents> as K['name']]: WithResolvedRelations<\n Story<K, TComponents>,\n TComponents,\n ResolvedFieldsFor<ResolveRelationsRaw, K['name']>\n >\n }[RootComponents<TComponents>['name']]\n : Story<TComponents>;\n\ntype GetResponse<\n TComponents extends Component,\n InlineRelations extends boolean,\n ResolveRelationsRaw extends string | undefined = undefined,\n> = Omit<GetStoryByIdResponses[200], 'story'> & {\n story: StoryResult<TComponents, InlineRelations, ResolveRelationsRaw>;\n};\ntype ListResponse<\n TComponents extends Component,\n InlineRelations extends boolean,\n ResolveRelationsRaw extends string | undefined = undefined,\n> = Omit<ListStoriesResponses[200], 'stories'> & {\n stories: Array<StoryResult<TComponents, InlineRelations, ResolveRelationsRaw>>;\n};\n\n/**\n * Internal relation-resolution shapes. The public response types expose the\n * generic `Story`, but relation inlining needs to read the API's sidecar\n * `rels`/`rel_uuids` fields off the raw payload. These three interfaces model\n * that wire shape so the `response.data` narrowing below stays in one place\n * instead of being scattered as inline casts.\n */\ninterface StoryRelationData {\n rels?: Story[];\n rel_uuids?: string[];\n}\n\ninterface StoryData extends StoryRelationData {\n story: Story;\n}\n\ninterface StoriesData extends StoryRelationData {\n stories: Story[];\n}\n\n/** The story identifier path param (full slug, numeric ID, or UUID), derived from the generated request type. */\ntype StoryIdentifier = GetStoryByIdData['path']['id'];\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<DefaultThrowOnError extends boolean = false> extends ResourceDeps<DefaultThrowOnError> {\n inlineRelations: boolean;\n}\n\nexport function createStoriesResource<\n TComponents extends Component = Component,\n InlineRelations extends boolean = false,\n DefaultThrowOnError extends boolean = false,\n>(\n deps: StoriesResourceDeps<DefaultThrowOnError>,\n) {\n const { client, requestWithCache, asApiResponse, inlineRelations, throttleManager } = deps;\n\n return {\n get: async <\n ThrowOnError extends boolean = DefaultThrowOnError,\n const ResolveRelationsStr extends string | undefined = undefined,\n >(\n identifier: StoryIdentifier,\n options: { query?: Omit<NonNullable<GetStoryByIdData['query']>, 'resolve_relations'> & { resolve_relations?: ResolveRelationsStr }; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<GetResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const typedQuery = (query ?? {}) as NonNullable<GetStoryByIdData['query']>;\n const resolvedQuery = typeof identifier === 'string' && UUID_RE.test(identifier) && !typedQuery.find_by\n ? { ...typedQuery, find_by: 'uuid' }\n : typedQuery;\n const requestPath = `/v2/cdn/stories/${identifier}`;\n return requestWithCache('GET', requestPath, resolvedQuery, async (requestQuery: Record<string, unknown>) => {\n const response = await throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse(getStoryById({\n client,\n path: { id: identifier },\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }))) satisfies ApiResponse<GetResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>;\n\n if (!inlineRelations || response.data === undefined) {\n return response;\n }\n\n // Narrow to the internal relation shape to read the API's sidecar\n // `rels`/`rel_uuids`; consumers keep seeing the generic `Story`.\n const storyData = response.data as unknown as StoryData;\n const resolved = await resolveRelationMap(storyData, requestQuery, { client, throttleManager });\n if (!resolved) {\n return response;\n }\n\n return {\n ...response,\n data: {\n ...response.data,\n story: inlineStoryContent(storyData.story, resolved.relationPaths, resolved.relationMap),\n },\n };\n }, inlineRelations ? { cacheKeyPrefix: 'inline' } : undefined);\n },\n\n list: async <\n ThrowOnError extends boolean = DefaultThrowOnError,\n const ResolveRelationsStr extends string | undefined = undefined,\n >(\n options: { query?: Omit<NonNullable<ListStoriesData['query']>, 'resolve_relations'> & { resolve_relations?: ResolveRelationsStr }; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<ListResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const typedQuery = (query ?? {}) as NonNullable<ListStoriesData['query']>;\n const requestPath = '/v2/cdn/stories';\n return requestWithCache('GET', requestPath, typedQuery, async (requestQuery: Record<string, unknown>) => {\n const response = await throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse(listStories({\n client,\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }))) satisfies ApiResponse<ListResponse<TComponents, InlineRelations, ResolveRelationsStr>, ThrowOnError>;\n\n if (!inlineRelations || response.data === undefined) {\n return response;\n }\n\n // Narrow to the internal relation shape to read the API's sidecar\n // `rels`/`rel_uuids`; consumers keep seeing the generic `Story`.\n const storiesData = response.data as unknown as StoriesData;\n const resolved = await resolveRelationMap(storiesData, requestQuery, { client, throttleManager });\n if (!resolved) {\n return response;\n }\n\n return {\n ...response,\n data: {\n ...response.data,\n stories: inlineStoriesContent(storiesData.stories, resolved.relationPaths, resolved.relationMap),\n },\n };\n }, inlineRelations ? { cacheKeyPrefix: 'inline' } : undefined);\n },\n };\n}\n"],"mappings":";;;;AAiJA,MAAM,UAAU;AAMhB,SAAgB,sBAKd,MACA;CACA,MAAM,EAAE,QAAQ,kBAAkB,eAAe,iBAAiB,oBAAoB;AAEtF,QAAO;EACL,KAAK,OAIH,YACA,UAAuN,EAAE,KAClH;GACvG,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;GAC3D,MAAM,aAAc,SAAS,EAAE;GAC/B,MAAM,gBAAgB,OAAO,eAAe,YAAY,QAAQ,KAAK,WAAW,IAAI,CAAC,WAAW,UAC5F;IAAE,GAAG;IAAY,SAAS;IAAQ,GAClC;GACJ,MAAM,cAAc,mBAAmB;AACvC,UAAO,iBAAiB,OAAO,aAAa,eAAe,OAAO,iBAA0C;IAC1G,MAAM,WAAW,MAAM,gBAAgB,QAAQ,aAAa,oBAC1D,cAAc,aAAa;KACzB;KACA,MAAM,EAAE,IAAI,YAAY;KACxB,OAAO;KACP;KACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;KACtD,GAAI,eAAe,EAAE,WAAW;MAAE,GAAG,OAAO,WAAW,CAAC;MAAW,GAAG;MAAc,EAAE,GAAG,EAAE;KAC5F,CAAC,CAAC,CAAC;AAEN,QAAI,CAAC,mBAAmB,SAAS,SAAS,OACxC,QAAO;IAKT,MAAM,YAAY,SAAS;IAC3B,MAAM,WAAW,MAAM,mBAAmB,WAAW,cAAc;KAAE;KAAQ;KAAiB,CAAC;AAC/F,QAAI,CAAC,SACH,QAAO;AAGT,WAAO;KACL,GAAG;KACH,MAAM;MACJ,GAAG,SAAS;MACZ,OAAO,mBAAmB,UAAU,OAAO,SAAS,eAAe,SAAS,YAAY;MACzF;KACF;MACA,kBAAkB,EAAE,gBAAgB,UAAU,GAAG,OAAU;;EAGhE,MAAM,OAIJ,UAAsN,EAAE,KAChH;GACxG,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;GAC3D,MAAM,aAAc,SAAS,EAAE;GAC/B,MAAM,cAAc;AACpB,UAAO,iBAAiB,OAAO,aAAa,YAAY,OAAO,iBAA0C;IACvG,MAAM,WAAW,MAAM,gBAAgB,QAAQ,aAAa,oBAC1D,cAAc,YAAY;KACxB;KACA,OAAO;KACP;KACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;KACtD,GAAI,eAAe,EAAE,WAAW;MAAE,GAAG,OAAO,WAAW,CAAC;MAAW,GAAG;MAAc,EAAE,GAAG,EAAE;KAC5F,CAAC,CAAC,CAAC;AAEN,QAAI,CAAC,mBAAmB,SAAS,SAAS,OACxC,QAAO;IAKT,MAAM,cAAc,SAAS;IAC7B,MAAM,WAAW,MAAM,mBAAmB,aAAa,cAAc;KAAE;KAAQ;KAAiB,CAAC;AACjG,QAAI,CAAC,SACH,QAAO;AAGT,WAAO;KACL,GAAG;KACH,MAAM;MACJ,GAAG,SAAS;MACZ,SAAS,qBAAqB,YAAY,SAAS,SAAS,eAAe,SAAS,YAAY;MACjG;KACF;MACA,kBAAkB,EAAE,gBAAgB,UAAU,GAAG,OAAU;;EAEjE"}
@@ -1,4 +1,4 @@
1
- const require_sdk_gen = require('../generated/tags/sdk.gen.cjs');
1
+ const require_sdk_gen = require('../generated/capi/sdk.gen.cjs');
2
2
 
3
3
  //#region src/resources/tags.ts
4
4
  function createTagsResource(deps) {
@@ -7,7 +7,7 @@ function createTagsResource(deps) {
7
7
  const { query = {}, signal, throwOnError, fetchOptions } = options;
8
8
  const requestPath = "/v2/cdn/tags";
9
9
  return requestWithCache("GET", requestPath, query, (requestQuery) => {
10
- return throttleManager.execute(requestPath, requestQuery, () => asApiResponse(require_sdk_gen.list({
10
+ return throttleManager.execute(requestPath, requestQuery, () => asApiResponse(require_sdk_gen.listTags({
11
11
  client,
12
12
  query: requestQuery,
13
13
  signal,
@@ -1 +1 @@
1
- {"version":3,"file":"tags.cjs","names":["listTagsApi"],"sources":["../../src/resources/tags.ts"],"sourcesContent":["import { list as listTagsApi } from '../generated/tags/sdk.gen';\nimport type { ListData as TagsListData, ListResponses as TagsListResponses } from '../generated/tags/types.gen';\nimport type { ApiResponse, FetchOptions, ResourceDeps } from '../client';\n\nexport function createTagsResource<DefaultThrowOnError extends boolean = false>(deps: ResourceDeps<DefaultThrowOnError>) {\n const { client, requestWithCache, asApiResponse, throttleManager } = deps;\n\n return {\n list: async <ThrowOnError extends boolean = DefaultThrowOnError>(\n options: { query?: TagsListData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<TagsListResponses[200], ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const requestPath = '/v2/cdn/tags';\n return requestWithCache<TagsListResponses[200], ThrowOnError>('GET', requestPath, query, (requestQuery: Record<string, unknown>) => {\n return throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse<TagsListResponses[200], ThrowOnError>(listTagsApi({\n client,\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n })));\n });\n },\n };\n}\n"],"mappings":";;;AAIA,SAAgB,mBAAgE,MAAyC;CACvH,MAAM,EAAE,QAAQ,kBAAkB,eAAe,oBAAoB;AAErE,QAAO,EACL,MAAM,OACJ,UAA6H,EAAE,KAChE;EAC/D,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;EAC3D,MAAM,cAAc;AACpB,SAAO,iBAAuD,OAAO,aAAa,QAAQ,iBAA0C;AAClI,UAAO,gBAAgB,QAAQ,aAAa,oBAC1C,cAAoDA,qBAAY;IAC9D;IACA,OAAO;IACP;IACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IACtD,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAC5F,CAAC,CAAC,CAAC;IACN;IAEL"}
1
+ {"version":3,"file":"tags.cjs","names":["listTagsApi"],"sources":["../../src/resources/tags.ts"],"sourcesContent":["import { listTags as listTagsApi } from '../generated/capi/sdk.gen';\nimport type { ListTagsData, ListTagsResponses } from '../generated/capi/types.gen';\nimport type { ApiResponse, FetchOptions, ResourceDeps } from '../client';\n\nexport function createTagsResource<DefaultThrowOnError extends boolean = false>(deps: ResourceDeps<DefaultThrowOnError>) {\n const { client, requestWithCache, asApiResponse, throttleManager } = deps;\n\n return {\n list: async <ThrowOnError extends boolean = DefaultThrowOnError>(\n options: { query?: ListTagsData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<ListTagsResponses[200], ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const requestPath = '/v2/cdn/tags';\n return requestWithCache<ListTagsResponses[200], ThrowOnError>('GET', requestPath, query, (requestQuery: Record<string, unknown>) => {\n return throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse<ListTagsResponses[200], ThrowOnError>(listTagsApi({\n client,\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n })));\n });\n },\n };\n}\n"],"mappings":";;;AAIA,SAAgB,mBAAgE,MAAyC;CACvH,MAAM,EAAE,QAAQ,kBAAkB,eAAe,oBAAoB;AAErE,QAAO,EACL,MAAM,OACJ,UAA6H,EAAE,KAChE;EAC/D,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;EAC3D,MAAM,cAAc;AACpB,SAAO,iBAAuD,OAAO,aAAa,QAAQ,iBAA0C;AAClI,UAAO,gBAAgB,QAAQ,aAAa,oBAC1C,cAAoDA,yBAAY;IAC9D;IACA,OAAO;IACP;IACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IACtD,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAC5F,CAAC,CAAC,CAAC;IACN;IAEL"}
@@ -1,4 +1,4 @@
1
- import { list } from "../generated/tags/sdk.gen.mjs";
1
+ import { listTags } from "../generated/capi/sdk.gen.mjs";
2
2
 
3
3
  //#region src/resources/tags.ts
4
4
  function createTagsResource(deps) {
@@ -7,7 +7,7 @@ function createTagsResource(deps) {
7
7
  const { query = {}, signal, throwOnError, fetchOptions } = options;
8
8
  const requestPath = "/v2/cdn/tags";
9
9
  return requestWithCache("GET", requestPath, query, (requestQuery) => {
10
- return throttleManager.execute(requestPath, requestQuery, () => asApiResponse(list({
10
+ return throttleManager.execute(requestPath, requestQuery, () => asApiResponse(listTags({
11
11
  client,
12
12
  query: requestQuery,
13
13
  signal,
@@ -1 +1 @@
1
- {"version":3,"file":"tags.mjs","names":["listTagsApi"],"sources":["../../src/resources/tags.ts"],"sourcesContent":["import { list as listTagsApi } from '../generated/tags/sdk.gen';\nimport type { ListData as TagsListData, ListResponses as TagsListResponses } from '../generated/tags/types.gen';\nimport type { ApiResponse, FetchOptions, ResourceDeps } from '../client';\n\nexport function createTagsResource<DefaultThrowOnError extends boolean = false>(deps: ResourceDeps<DefaultThrowOnError>) {\n const { client, requestWithCache, asApiResponse, throttleManager } = deps;\n\n return {\n list: async <ThrowOnError extends boolean = DefaultThrowOnError>(\n options: { query?: TagsListData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<TagsListResponses[200], ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const requestPath = '/v2/cdn/tags';\n return requestWithCache<TagsListResponses[200], ThrowOnError>('GET', requestPath, query, (requestQuery: Record<string, unknown>) => {\n return throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse<TagsListResponses[200], ThrowOnError>(listTagsApi({\n client,\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n })));\n });\n },\n };\n}\n"],"mappings":";;;AAIA,SAAgB,mBAAgE,MAAyC;CACvH,MAAM,EAAE,QAAQ,kBAAkB,eAAe,oBAAoB;AAErE,QAAO,EACL,MAAM,OACJ,UAA6H,EAAE,KAChE;EAC/D,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;EAC3D,MAAM,cAAc;AACpB,SAAO,iBAAuD,OAAO,aAAa,QAAQ,iBAA0C;AAClI,UAAO,gBAAgB,QAAQ,aAAa,oBAC1C,cAAoDA,KAAY;IAC9D;IACA,OAAO;IACP;IACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IACtD,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAC5F,CAAC,CAAC,CAAC;IACN;IAEL"}
1
+ {"version":3,"file":"tags.mjs","names":["listTagsApi"],"sources":["../../src/resources/tags.ts"],"sourcesContent":["import { listTags as listTagsApi } from '../generated/capi/sdk.gen';\nimport type { ListTagsData, ListTagsResponses } from '../generated/capi/types.gen';\nimport type { ApiResponse, FetchOptions, ResourceDeps } from '../client';\n\nexport function createTagsResource<DefaultThrowOnError extends boolean = false>(deps: ResourceDeps<DefaultThrowOnError>) {\n const { client, requestWithCache, asApiResponse, throttleManager } = deps;\n\n return {\n list: async <ThrowOnError extends boolean = DefaultThrowOnError>(\n options: { query?: ListTagsData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {},\n ): Promise<ApiResponse<ListTagsResponses[200], ThrowOnError>> => {\n const { query = {}, signal, throwOnError, fetchOptions } = options;\n const requestPath = '/v2/cdn/tags';\n return requestWithCache<ListTagsResponses[200], ThrowOnError>('GET', requestPath, query, (requestQuery: Record<string, unknown>) => {\n return throttleManager.execute(requestPath, requestQuery, () =>\n asApiResponse<ListTagsResponses[200], ThrowOnError>(listTagsApi({\n client,\n query: requestQuery,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n })));\n });\n },\n };\n}\n"],"mappings":";;;AAIA,SAAgB,mBAAgE,MAAyC;CACvH,MAAM,EAAE,QAAQ,kBAAkB,eAAe,oBAAoB;AAErE,QAAO,EACL,MAAM,OACJ,UAA6H,EAAE,KAChE;EAC/D,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,cAAc,iBAAiB;EAC3D,MAAM,cAAc;AACpB,SAAO,iBAAuD,OAAO,aAAa,QAAQ,iBAA0C;AAClI,UAAO,gBAAgB,QAAQ,aAAa,oBAC1C,cAAoDA,SAAY;IAC9D;IACA,OAAO;IACP;IACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IACtD,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAC5F,CAAC,CAAC,CAAC;IACN;IAEL"}
@@ -1,4 +1,4 @@
1
- const require_sdk_gen = require('../generated/stories/sdk.gen.cjs');
1
+ const require_sdk_gen = require('../generated/capi/sdk.gen.cjs');
2
2
  const require_array = require('./array.cjs');
3
3
 
4
4
  //#region src/utils/fetch-rel-uuids.ts
@@ -25,7 +25,7 @@ const fetchMissingRelations = async ({ client, uuids, baseQuery, throttleManager
25
25
  };
26
26
  const chunks = require_array.chunkArray(uuids, UUID_CHUNK_SIZE);
27
27
  return (await Promise.all(chunks.map((chunk) => throttleManager.execute("/v2/cdn/stories", queryContext, async () => {
28
- const response = await require_sdk_gen.list({
28
+ const response = await require_sdk_gen.listStories({
29
29
  client,
30
30
  query: {
31
31
  ...queryContext,
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-rel-uuids.cjs","names":["chunkArray","list"],"sources":["../../src/utils/fetch-rel-uuids.ts"],"sourcesContent":["import type { Client } from '../generated/shared/client';\nimport { list } 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 list({\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,qBAAK;GAC1B;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"}
1
+ {"version":3,"file":"fetch-rel-uuids.cjs","names":["chunkArray","listStories"],"sources":["../../src/utils/fetch-rel-uuids.ts"],"sourcesContent":["import type { Client } from '../generated/capi/client';\nimport { listStories } from '../generated/capi/sdk.gen';\nimport type { Story } from '../generated/types/story';\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<Story[]> => {\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 listStories({\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 // SDK return shape is the raw `DraftStory | PublishedStory` union; cast\n // to the wrapper `Story` (public type) so callers don't have to know\n // about the spec-level discriminated form and get the benefits of the\n // generic `Story` with schema support.\n return response.data.stories as unknown as Story[];\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,sBACoD;CACpD,MAAM,eAAe;EAAE,GAAG,iBAAiB,UAAU;EAAE,UAAU;EAAiB;CAClF,MAAM,SAASA,yBAAW,OAAO,gBAAgB;AAiCjD,SA/BgB,MAAM,QAAQ,IAC5B,OAAO,KAAI,UACT,gBAAgB,QAAQ,mBAAmB,cAAc,YAAY;EACnE,MAAM,WAAW,MAAMC,4BAAY;GACjC;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;AAOvD,SAAO,SAAS,KAAK;GACrB,CACH,CACF,EAEc,MAAM"}
@@ -1,4 +1,4 @@
1
- import { list } from "../generated/stories/sdk.gen.mjs";
1
+ import { listStories } from "../generated/capi/sdk.gen.mjs";
2
2
  import { chunkArray } from "./array.mjs";
3
3
 
4
4
  //#region src/utils/fetch-rel-uuids.ts
@@ -25,7 +25,7 @@ const fetchMissingRelations = async ({ client, uuids, baseQuery, throttleManager
25
25
  };
26
26
  const chunks = chunkArray(uuids, UUID_CHUNK_SIZE);
27
27
  return (await Promise.all(chunks.map((chunk) => throttleManager.execute("/v2/cdn/stories", queryContext, async () => {
28
- const response = await list({
28
+ const response = await listStories({
29
29
  client,
30
30
  query: {
31
31
  ...queryContext,
@@ -1 +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 { list } 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 list({\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,KAAK;GAC1B;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"}
1
+ {"version":3,"file":"fetch-rel-uuids.mjs","names":[],"sources":["../../src/utils/fetch-rel-uuids.ts"],"sourcesContent":["import type { Client } from '../generated/capi/client';\nimport { listStories } from '../generated/capi/sdk.gen';\nimport type { Story } from '../generated/types/story';\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<Story[]> => {\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 listStories({\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 // SDK return shape is the raw `DraftStory | PublishedStory` union; cast\n // to the wrapper `Story` (public type) so callers don't have to know\n // about the spec-level discriminated form and get the benefits of the\n // generic `Story` with schema support.\n return response.data.stories as unknown as Story[];\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,sBACoD;CACpD,MAAM,eAAe;EAAE,GAAG,iBAAiB,UAAU;EAAE,UAAU;EAAiB;CAClF,MAAM,SAAS,WAAW,OAAO,gBAAgB;AAiCjD,SA/BgB,MAAM,QAAQ,IAC5B,OAAO,KAAI,UACT,gBAAgB,QAAQ,mBAAmB,cAAc,YAAY;EACnE,MAAM,WAAW,MAAM,YAAY;GACjC;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;AAOvD,SAAO,SAAS,KAAK;GACrB,CACH,CACF,EAEc,MAAM"}