@storyblok/management-api-client 0.3.0 → 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 (300) hide show
  1. package/README.md +3 -1
  2. package/dist/client.cjs +190 -0
  3. package/dist/client.cjs.map +1 -0
  4. package/dist/client.d.cts +632 -0
  5. package/dist/client.d.mts +632 -0
  6. package/dist/client.mjs +189 -0
  7. package/dist/client.mjs.map +1 -0
  8. package/dist/error.cjs.map +1 -1
  9. package/dist/error.d.cts +12 -2
  10. package/dist/error.d.mts +12 -2
  11. package/dist/error.mjs.map +1 -1
  12. package/dist/generated/mapi/_internal.gen.d.cts +541 -0
  13. package/dist/generated/mapi/_internal.gen.d.mts +541 -0
  14. package/dist/generated/{shared → mapi}/client/client.gen.cjs +1 -1
  15. package/dist/generated/mapi/client/client.gen.cjs.map +1 -0
  16. package/dist/generated/{shared → mapi}/client/client.gen.mjs +1 -1
  17. package/dist/generated/mapi/client/client.gen.mjs.map +1 -0
  18. package/dist/generated/{shared → mapi}/client/types.gen.d.cts +1 -1
  19. package/dist/generated/{shared → mapi}/client/types.gen.d.mts +1 -1
  20. package/dist/generated/{shared → mapi}/client/utils.gen.cjs +1 -1
  21. package/dist/generated/mapi/client/utils.gen.cjs.map +1 -0
  22. package/dist/generated/{shared → mapi}/client/utils.gen.d.cts +1 -1
  23. package/dist/generated/{shared → mapi}/client/utils.gen.d.mts +1 -1
  24. package/dist/generated/{shared → mapi}/client/utils.gen.mjs +1 -1
  25. package/dist/generated/mapi/client/utils.gen.mjs.map +1 -0
  26. package/dist/generated/mapi/client.gen.cjs +10 -0
  27. package/dist/generated/mapi/client.gen.cjs.map +1 -0
  28. package/dist/generated/mapi/client.gen.mjs +10 -0
  29. package/dist/generated/mapi/client.gen.mjs.map +1 -0
  30. package/dist/generated/{shared → mapi}/core/auth.gen.cjs +1 -1
  31. package/dist/generated/mapi/core/auth.gen.cjs.map +1 -0
  32. package/dist/generated/{shared → mapi}/core/auth.gen.d.cts +1 -1
  33. package/dist/generated/{shared → mapi}/core/auth.gen.d.mts +1 -1
  34. package/dist/generated/{shared → mapi}/core/auth.gen.mjs +1 -1
  35. package/dist/generated/mapi/core/auth.gen.mjs.map +1 -0
  36. package/dist/generated/{shared → mapi}/core/bodySerializer.gen.cjs +1 -1
  37. package/dist/generated/mapi/core/bodySerializer.gen.cjs.map +1 -0
  38. package/dist/generated/{shared → mapi}/core/bodySerializer.gen.d.cts +1 -1
  39. package/dist/generated/{shared → mapi}/core/bodySerializer.gen.d.mts +1 -1
  40. package/dist/generated/{shared → mapi}/core/bodySerializer.gen.mjs +1 -1
  41. package/dist/generated/mapi/core/bodySerializer.gen.mjs.map +1 -0
  42. package/dist/generated/{shared → mapi}/core/params.gen.cjs +1 -1
  43. package/dist/generated/mapi/core/params.gen.cjs.map +1 -0
  44. package/dist/generated/{shared → mapi}/core/params.gen.mjs +1 -1
  45. package/dist/generated/mapi/core/params.gen.mjs.map +1 -0
  46. package/dist/generated/{shared → mapi}/core/pathSerializer.gen.cjs +1 -1
  47. package/dist/generated/mapi/core/pathSerializer.gen.cjs.map +1 -0
  48. package/dist/generated/{shared → mapi}/core/pathSerializer.gen.d.cts +1 -1
  49. package/dist/generated/{shared → mapi}/core/pathSerializer.gen.d.mts +1 -1
  50. package/dist/generated/{shared → mapi}/core/pathSerializer.gen.mjs +1 -1
  51. package/dist/generated/mapi/core/pathSerializer.gen.mjs.map +1 -0
  52. package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.cjs +1 -1
  53. package/dist/generated/mapi/core/serverSentEvents.gen.cjs.map +1 -0
  54. package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.d.cts +1 -1
  55. package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.d.mts +1 -1
  56. package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.mjs +1 -1
  57. package/dist/generated/mapi/core/serverSentEvents.gen.mjs.map +1 -0
  58. package/dist/generated/{shared → mapi}/core/types.gen.d.cts +1 -1
  59. package/dist/generated/{shared → mapi}/core/types.gen.d.mts +1 -1
  60. package/dist/generated/{shared → mapi}/core/utils.gen.cjs +1 -1
  61. package/dist/generated/mapi/core/utils.gen.cjs.map +1 -0
  62. package/dist/generated/{shared → mapi}/core/utils.gen.mjs +1 -1
  63. package/dist/generated/mapi/core/utils.gen.mjs.map +1 -0
  64. package/dist/generated/mapi/sdk.gen.cjs +1477 -0
  65. package/dist/generated/mapi/sdk.gen.cjs.map +1 -0
  66. package/dist/generated/mapi/sdk.gen.mjs +1399 -0
  67. package/dist/generated/mapi/sdk.gen.mjs.map +1 -0
  68. package/dist/generated/mapi/types-aliased.gen.d.cts +1428 -0
  69. package/dist/generated/mapi/types-aliased.gen.d.mts +1428 -0
  70. package/dist/generated/mapi/types.gen.d.cts +5075 -0
  71. package/dist/generated/mapi/types.gen.d.mts +5075 -0
  72. package/dist/generated/overlay/_internal.gen.d.cts +850 -0
  73. package/dist/generated/overlay/_internal.gen.d.mts +850 -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 +30 -0
  77. package/dist/generated/types/block.d.mts +30 -0
  78. package/dist/generated/types/field.d.cts +75 -0
  79. package/dist/generated/types/field.d.mts +75 -0
  80. package/dist/generated/types/mapi-story.d.cts +29 -0
  81. package/dist/generated/types/mapi-story.d.mts +29 -0
  82. package/dist/index.cjs +3 -173
  83. package/dist/index.d.cts +13 -433
  84. package/dist/index.d.mts +13 -433
  85. package/dist/index.mjs +2 -171
  86. package/dist/resources/asset-folders.cjs +9 -9
  87. package/dist/resources/asset-folders.cjs.map +1 -1
  88. package/dist/resources/asset-folders.mjs +9 -9
  89. package/dist/resources/asset-folders.mjs.map +1 -1
  90. package/dist/resources/assets.cjs +57 -48
  91. package/dist/resources/assets.cjs.map +1 -1
  92. package/dist/resources/assets.d.cts +23 -27
  93. package/dist/resources/assets.d.mts +23 -27
  94. package/dist/resources/assets.mjs +57 -48
  95. package/dist/resources/assets.mjs.map +1 -1
  96. package/dist/resources/component-folders.cjs +9 -9
  97. package/dist/resources/component-folders.cjs.map +1 -1
  98. package/dist/resources/component-folders.mjs +9 -9
  99. package/dist/resources/component-folders.mjs.map +1 -1
  100. package/dist/resources/components.cjs +28 -20
  101. package/dist/resources/components.cjs.map +1 -1
  102. package/dist/resources/components.d.cts +76 -0
  103. package/dist/resources/components.d.mts +76 -0
  104. package/dist/resources/components.mjs +28 -20
  105. package/dist/resources/components.mjs.map +1 -1
  106. package/dist/resources/datasource-entries.cjs +28 -34
  107. package/dist/resources/datasource-entries.cjs.map +1 -1
  108. package/dist/resources/datasource-entries.mjs +29 -35
  109. package/dist/resources/datasource-entries.mjs.map +1 -1
  110. package/dist/resources/datasources.cjs +27 -9
  111. package/dist/resources/datasources.cjs.map +1 -1
  112. package/dist/resources/datasources.mjs +27 -9
  113. package/dist/resources/datasources.mjs.map +1 -1
  114. package/dist/resources/experiments.cjs +299 -0
  115. package/dist/resources/experiments.cjs.map +1 -0
  116. package/dist/resources/experiments.mjs +299 -0
  117. package/dist/resources/experiments.mjs.map +1 -0
  118. package/dist/resources/internal-tags.cjs +7 -7
  119. package/dist/resources/internal-tags.cjs.map +1 -1
  120. package/dist/resources/internal-tags.mjs +7 -7
  121. package/dist/resources/internal-tags.mjs.map +1 -1
  122. package/dist/resources/presets.cjs +9 -9
  123. package/dist/resources/presets.cjs.map +1 -1
  124. package/dist/resources/presets.mjs +9 -9
  125. package/dist/resources/presets.mjs.map +1 -1
  126. package/dist/resources/shared.cjs +15 -0
  127. package/dist/resources/shared.cjs.map +1 -1
  128. package/dist/resources/shared.mjs +15 -1
  129. package/dist/resources/shared.mjs.map +1 -1
  130. package/dist/resources/spaces.cjs +8 -7
  131. package/dist/resources/spaces.cjs.map +1 -1
  132. package/dist/resources/spaces.d.cts +8 -0
  133. package/dist/resources/spaces.d.mts +7 -0
  134. package/dist/resources/spaces.mjs +8 -7
  135. package/dist/resources/spaces.mjs.map +1 -1
  136. package/dist/resources/stories.cjs +20 -16
  137. package/dist/resources/stories.cjs.map +1 -1
  138. package/dist/resources/stories.d.cts +93 -0
  139. package/dist/resources/stories.d.mts +93 -0
  140. package/dist/resources/stories.mjs +20 -16
  141. package/dist/resources/stories.mjs.map +1 -1
  142. package/dist/resources/users.cjs +3 -3
  143. package/dist/resources/users.cjs.map +1 -1
  144. package/dist/resources/users.mjs +3 -3
  145. package/dist/resources/users.mjs.map +1 -1
  146. package/dist/utils/query-serializer.cjs +54 -0
  147. package/dist/utils/query-serializer.cjs.map +1 -0
  148. package/dist/utils/query-serializer.mjs +54 -0
  149. package/dist/utils/query-serializer.mjs.map +1 -0
  150. package/package.json +16 -14
  151. package/playground/integration-tests/README.md +24 -0
  152. package/playground/integration-tests/eslint.config.js +5 -0
  153. package/playground/integration-tests/node_modules/.bin/eslint +16 -0
  154. package/playground/integration-tests/node_modules/.bin/tsc +16 -0
  155. package/playground/integration-tests/node_modules/.bin/tsserver +16 -0
  156. package/playground/integration-tests/node_modules/.bin/vitest +16 -0
  157. package/playground/integration-tests/package.json +24 -0
  158. package/playground/integration-tests/test/setup.e2e.ts +11 -0
  159. package/playground/integration-tests/test/specs/mapi-round-trip.spec.e2e.ts +520 -0
  160. package/playground/integration-tests/test/types/components.test-d.ts +113 -0
  161. package/playground/integration-tests/test/types/resources.test-d.ts +364 -0
  162. package/playground/integration-tests/test/types/stories.test-d.ts +306 -0
  163. package/playground/integration-tests/vitest.config.e2e.ts +25 -0
  164. package/playground/integration-tests/vitest.config.ts +13 -0
  165. package/test/GUIDE.md +59 -0
  166. package/vitest.config.ts +5 -0
  167. package/dist/generated/asset_folders/client.gen.cjs +0 -10
  168. package/dist/generated/asset_folders/client.gen.cjs.map +0 -1
  169. package/dist/generated/asset_folders/client.gen.mjs +0 -10
  170. package/dist/generated/asset_folders/client.gen.mjs.map +0 -1
  171. package/dist/generated/asset_folders/sdk.gen.cjs +0 -99
  172. package/dist/generated/asset_folders/sdk.gen.cjs.map +0 -1
  173. package/dist/generated/asset_folders/sdk.gen.mjs +0 -95
  174. package/dist/generated/asset_folders/sdk.gen.mjs.map +0 -1
  175. package/dist/generated/asset_folders/types.gen.d.cts +0 -156
  176. package/dist/generated/asset_folders/types.gen.d.mts +0 -156
  177. package/dist/generated/assets/client.gen.cjs +0 -10
  178. package/dist/generated/assets/client.gen.cjs.map +0 -1
  179. package/dist/generated/assets/client.gen.mjs +0 -10
  180. package/dist/generated/assets/client.gen.mjs.map +0 -1
  181. package/dist/generated/assets/sdk.gen.cjs +0 -179
  182. package/dist/generated/assets/sdk.gen.cjs.map +0 -1
  183. package/dist/generated/assets/sdk.gen.mjs +0 -171
  184. package/dist/generated/assets/sdk.gen.mjs.map +0 -1
  185. package/dist/generated/assets/types.gen.d.cts +0 -415
  186. package/dist/generated/assets/types.gen.d.mts +0 -415
  187. package/dist/generated/component_folders/client.gen.cjs +0 -10
  188. package/dist/generated/component_folders/client.gen.cjs.map +0 -1
  189. package/dist/generated/component_folders/client.gen.mjs +0 -10
  190. package/dist/generated/component_folders/client.gen.mjs.map +0 -1
  191. package/dist/generated/component_folders/sdk.gen.cjs +0 -99
  192. package/dist/generated/component_folders/sdk.gen.cjs.map +0 -1
  193. package/dist/generated/component_folders/sdk.gen.mjs +0 -95
  194. package/dist/generated/component_folders/sdk.gen.mjs.map +0 -1
  195. package/dist/generated/component_folders/types.gen.d.cts +0 -118
  196. package/dist/generated/component_folders/types.gen.d.mts +0 -118
  197. package/dist/generated/components/client.gen.cjs +0 -10
  198. package/dist/generated/components/client.gen.cjs.map +0 -1
  199. package/dist/generated/components/client.gen.mjs +0 -10
  200. package/dist/generated/components/client.gen.mjs.map +0 -1
  201. package/dist/generated/components/sdk.gen.cjs +0 -171
  202. package/dist/generated/components/sdk.gen.cjs.map +0 -1
  203. package/dist/generated/components/sdk.gen.mjs +0 -163
  204. package/dist/generated/components/sdk.gen.mjs.map +0 -1
  205. package/dist/generated/components/types.gen.d.cts +0 -855
  206. package/dist/generated/components/types.gen.d.mts +0 -855
  207. package/dist/generated/datasource_entries/client.gen.cjs +0 -10
  208. package/dist/generated/datasource_entries/client.gen.cjs.map +0 -1
  209. package/dist/generated/datasource_entries/client.gen.mjs +0 -10
  210. package/dist/generated/datasource_entries/client.gen.mjs.map +0 -1
  211. package/dist/generated/datasource_entries/sdk.gen.cjs +0 -89
  212. package/dist/generated/datasource_entries/sdk.gen.cjs.map +0 -1
  213. package/dist/generated/datasource_entries/sdk.gen.mjs +0 -85
  214. package/dist/generated/datasource_entries/sdk.gen.mjs.map +0 -1
  215. package/dist/generated/datasource_entries/types.gen.d.cts +0 -156
  216. package/dist/generated/datasource_entries/types.gen.d.mts +0 -156
  217. package/dist/generated/datasources/client.gen.cjs +0 -10
  218. package/dist/generated/datasources/client.gen.cjs.map +0 -1
  219. package/dist/generated/datasources/client.gen.mjs +0 -10
  220. package/dist/generated/datasources/client.gen.mjs.map +0 -1
  221. package/dist/generated/datasources/sdk.gen.cjs +0 -89
  222. package/dist/generated/datasources/sdk.gen.cjs.map +0 -1
  223. package/dist/generated/datasources/sdk.gen.mjs +0 -85
  224. package/dist/generated/datasources/sdk.gen.mjs.map +0 -1
  225. package/dist/generated/datasources/types.gen.d.cts +0 -186
  226. package/dist/generated/datasources/types.gen.d.mts +0 -186
  227. package/dist/generated/internal_tags/client.gen.cjs +0 -10
  228. package/dist/generated/internal_tags/client.gen.cjs.map +0 -1
  229. package/dist/generated/internal_tags/client.gen.mjs +0 -10
  230. package/dist/generated/internal_tags/client.gen.mjs.map +0 -1
  231. package/dist/generated/internal_tags/sdk.gen.cjs +0 -74
  232. package/dist/generated/internal_tags/sdk.gen.cjs.map +0 -1
  233. package/dist/generated/internal_tags/sdk.gen.mjs +0 -71
  234. package/dist/generated/internal_tags/sdk.gen.mjs.map +0 -1
  235. package/dist/generated/internal_tags/types.gen.d.cts +0 -106
  236. package/dist/generated/internal_tags/types.gen.d.mts +0 -106
  237. package/dist/generated/presets/client.gen.cjs +0 -10
  238. package/dist/generated/presets/client.gen.cjs.map +0 -1
  239. package/dist/generated/presets/client.gen.mjs +0 -10
  240. package/dist/generated/presets/client.gen.mjs.map +0 -1
  241. package/dist/generated/presets/sdk.gen.cjs +0 -99
  242. package/dist/generated/presets/sdk.gen.cjs.map +0 -1
  243. package/dist/generated/presets/sdk.gen.mjs +0 -95
  244. package/dist/generated/presets/sdk.gen.mjs.map +0 -1
  245. package/dist/generated/presets/types.gen.d.cts +0 -176
  246. package/dist/generated/presets/types.gen.d.mts +0 -176
  247. package/dist/generated/shared/client/client.gen.cjs.map +0 -1
  248. package/dist/generated/shared/client/client.gen.mjs.map +0 -1
  249. package/dist/generated/shared/client/utils.gen.cjs.map +0 -1
  250. package/dist/generated/shared/client/utils.gen.mjs.map +0 -1
  251. package/dist/generated/shared/core/auth.gen.cjs.map +0 -1
  252. package/dist/generated/shared/core/auth.gen.mjs.map +0 -1
  253. package/dist/generated/shared/core/bodySerializer.gen.cjs.map +0 -1
  254. package/dist/generated/shared/core/bodySerializer.gen.mjs.map +0 -1
  255. package/dist/generated/shared/core/params.gen.cjs.map +0 -1
  256. package/dist/generated/shared/core/params.gen.mjs.map +0 -1
  257. package/dist/generated/shared/core/pathSerializer.gen.cjs.map +0 -1
  258. package/dist/generated/shared/core/pathSerializer.gen.mjs.map +0 -1
  259. package/dist/generated/shared/core/serverSentEvents.gen.cjs.map +0 -1
  260. package/dist/generated/shared/core/serverSentEvents.gen.mjs.map +0 -1
  261. package/dist/generated/shared/core/utils.gen.cjs.map +0 -1
  262. package/dist/generated/shared/core/utils.gen.mjs.map +0 -1
  263. package/dist/generated/spaces/client.gen.cjs +0 -10
  264. package/dist/generated/spaces/client.gen.cjs.map +0 -1
  265. package/dist/generated/spaces/client.gen.mjs +0 -10
  266. package/dist/generated/spaces/client.gen.mjs.map +0 -1
  267. package/dist/generated/spaces/sdk.gen.cjs +0 -99
  268. package/dist/generated/spaces/sdk.gen.cjs.map +0 -1
  269. package/dist/generated/spaces/sdk.gen.mjs +0 -95
  270. package/dist/generated/spaces/sdk.gen.mjs.map +0 -1
  271. package/dist/generated/spaces/types.gen.d.cts +0 -544
  272. package/dist/generated/spaces/types.gen.d.mts +0 -544
  273. package/dist/generated/stories/client.gen.cjs +0 -10
  274. package/dist/generated/stories/client.gen.cjs.map +0 -1
  275. package/dist/generated/stories/client.gen.mjs +0 -10
  276. package/dist/generated/stories/client.gen.mjs.map +0 -1
  277. package/dist/generated/stories/sdk.gen.cjs +0 -138
  278. package/dist/generated/stories/sdk.gen.cjs.map +0 -1
  279. package/dist/generated/stories/sdk.gen.mjs +0 -131
  280. package/dist/generated/stories/sdk.gen.mjs.map +0 -1
  281. package/dist/generated/stories/types.gen.d.cts +0 -1306
  282. package/dist/generated/stories/types.gen.d.mts +0 -1306
  283. package/dist/generated/users/client.gen.cjs +0 -10
  284. package/dist/generated/users/client.gen.cjs.map +0 -1
  285. package/dist/generated/users/client.gen.mjs +0 -10
  286. package/dist/generated/users/client.gen.mjs.map +0 -1
  287. package/dist/generated/users/sdk.gen.cjs +0 -44
  288. package/dist/generated/users/sdk.gen.cjs.map +0 -1
  289. package/dist/generated/users/sdk.gen.mjs +0 -43
  290. package/dist/generated/users/sdk.gen.mjs.map +0 -1
  291. package/dist/generated/users/types.gen.d.cts +0 -348
  292. package/dist/generated/users/types.gen.d.mts +0 -348
  293. package/dist/index.cjs.map +0 -1
  294. package/dist/index.mjs.map +0 -1
  295. package/dist/types.d.cts +0 -130
  296. package/dist/types.d.mts +0 -130
  297. /package/dist/generated/{shared → mapi}/client/client.gen.d.mts +0 -0
  298. /package/dist/generated/{shared → mapi}/client/index.cjs +0 -0
  299. /package/dist/generated/{shared → mapi}/client/index.d.mts +0 -0
  300. /package/dist/generated/{shared → mapi}/client/index.mjs +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"users.mjs","names":["usersApi.me","usersApi.updateMe"],"sources":["../../src/resources/users.ts"],"sourcesContent":["import * as usersApi from '../generated/users/sdk.gen';\nimport type {\n MeResponses,\n UpdateMeData,\n UpdateMeResponses,\n} from '../generated/users/types.gen';\nimport type { ApiResponse, FetchOptions, MapiResourceDeps } from '../index';\n\nexport function createUsersResource(deps: Omit<MapiResourceDeps, 'spaceId'>) {\n const { client, wrapRequest } = deps;\n\n return {\n me<ThrowOnError extends boolean = false>(options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {}): Promise<ApiResponse<MeResponses[200], ThrowOnError>> {\n const { signal, throwOnError, fetchOptions } = options;\n return wrapRequest<MeResponses[200], ThrowOnError>(() =>\n usersApi.me({ client, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n updateMe<ThrowOnError extends boolean = false>(options: { body: UpdateMeData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions }): Promise<ApiResponse<UpdateMeResponses[200], ThrowOnError>> {\n const { body, signal, throwOnError, fetchOptions } = options;\n return wrapRequest<UpdateMeResponses[200], ThrowOnError>(() =>\n usersApi.updateMe({ client, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n };\n}\n"],"mappings":";;;AAQA,SAAgB,oBAAoB,MAAyC;CAC3E,MAAM,EAAE,QAAQ,gBAAgB;AAEhC,QAAO;EACL,GAAyC,UAA8F,EAAE,EAAwD;GAC/L,MAAM,EAAE,QAAQ,cAAc,iBAAiB;AAC/C,UAAO,kBACLA,GAAY;IAAE;IAAQ;IAAQ,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IAAG,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAAG,CAAC,EAAE,aAAa;;EAEzM,SAA+C,SAAqL;GAClO,MAAM,EAAE,MAAM,QAAQ,cAAc,iBAAiB;AACrD,UAAO,kBACLC,SAAkB;IAAE;IAAQ;IAAM;IAAQ,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IAAG,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAAG,CAAC,EAAE,aAAa;;EAEtN"}
1
+ {"version":3,"file":"users.mjs","names":["mapi.getCurrentUser","mapi.updateCurrentUser"],"sources":["../../src/resources/users.ts"],"sourcesContent":["import * as mapi from '../generated/mapi/sdk.gen';\nimport type {\n GetCurrentUserResponses,\n UpdateCurrentUserData,\n UpdateCurrentUserResponses,\n} from '../generated/mapi/types.gen';\nimport type { ApiResponse, FetchOptions, MapiResourceDeps } from '../client';\n\nexport function createUsersResource<DefaultThrowOnError extends boolean = false>(deps: Omit<MapiResourceDeps<DefaultThrowOnError>, 'spaceId'>) {\n const { client, wrapRequest } = deps;\n\n return {\n me<ThrowOnError extends boolean = DefaultThrowOnError>(options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } = {}): Promise<ApiResponse<GetCurrentUserResponses[200], ThrowOnError>> {\n const { signal, throwOnError, fetchOptions } = options;\n return wrapRequest<GetCurrentUserResponses[200], ThrowOnError>(() =>\n mapi.getCurrentUser({ client, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n updateMe<ThrowOnError extends boolean = DefaultThrowOnError>(options: { body: UpdateCurrentUserData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions }): Promise<ApiResponse<UpdateCurrentUserResponses[200], ThrowOnError>> {\n const { body, signal, throwOnError, fetchOptions } = options;\n return wrapRequest<UpdateCurrentUserResponses[200], ThrowOnError>(() =>\n mapi.updateCurrentUser({ client, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n };\n}\n"],"mappings":";;;AAQA,SAAgB,oBAAiE,MAA8D;CAC7I,MAAM,EAAE,QAAQ,gBAAgB;AAEhC,QAAO;EACL,GAAuD,UAA8F,EAAE,EAAoE;GACzN,MAAM,EAAE,QAAQ,cAAc,iBAAiB;AAC/C,UAAO,kBACLA,eAAoB;IAAE;IAAQ;IAAQ,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IAAG,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAAG,CAAC,EAAE,aAAa;;EAEjN,SAA6D,SAAuM;GAClQ,MAAM,EAAE,MAAM,QAAQ,cAAc,iBAAiB;AACrD,UAAO,kBACLC,kBAAuB;IAAE;IAAQ;IAAM;IAAQ,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IAAG,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAAG,CAAC,EAAE,aAAa;;EAE3N"}
@@ -0,0 +1,54 @@
1
+ const require_pathSerializer_gen = require('../generated/mapi/core/pathSerializer.gen.cjs');
2
+
3
+ //#region src/utils/query-serializer.ts
4
+ /**
5
+ * Query serializer for the Management API client.
6
+ *
7
+ * Behaves identically to the generated default for primitives, primitive
8
+ * arrays, and dates, but additionally serializes **nested objects** (and arrays
9
+ * of objects) into bracket notation — e.g. `filter_query[component][in]=hero`.
10
+ *
11
+ * The generated default serializer throws on this nesting ("Deeply-nested
12
+ * arrays/objects aren't supported. Provide your own `querySerializer()`"), yet
13
+ * MAPI requires `filter_query` as a nested hash and rejects flat strings. This
14
+ * mirrors the bracket serialization used by `storyblok-js-client`.
15
+ */
16
+ function serialize(name, value, parts) {
17
+ if (value === void 0 || value === null) return;
18
+ if (value instanceof Date) {
19
+ parts.push(`${name}=${value.toISOString()}`);
20
+ return;
21
+ }
22
+ if (Array.isArray(value)) {
23
+ if (value.some((item) => item !== null && typeof item === "object")) {
24
+ for (const item of value) serialize(`${name}[]`, item, parts);
25
+ return;
26
+ }
27
+ const serialized = require_pathSerializer_gen.serializeArrayParam({
28
+ explode: true,
29
+ name,
30
+ style: "form",
31
+ value
32
+ });
33
+ if (serialized) parts.push(serialized);
34
+ return;
35
+ }
36
+ if (typeof value === "object") {
37
+ for (const [key, child] of Object.entries(value)) serialize(`${name}[${key}]`, child, parts);
38
+ return;
39
+ }
40
+ const serialized = require_pathSerializer_gen.serializePrimitiveParam({
41
+ name,
42
+ value
43
+ });
44
+ if (serialized) parts.push(serialized);
45
+ }
46
+ const querySerializer = (query) => {
47
+ const parts = [];
48
+ for (const [name, value] of Object.entries(query)) serialize(name, value, parts);
49
+ return parts.join("&");
50
+ };
51
+
52
+ //#endregion
53
+ exports.querySerializer = querySerializer;
54
+ //# sourceMappingURL=query-serializer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-serializer.cjs","names":["serializeArrayParam","serializePrimitiveParam"],"sources":["../../src/utils/query-serializer.ts"],"sourcesContent":["import type { QuerySerializer } from '../generated/mapi/core/bodySerializer.gen';\nimport { serializeArrayParam, serializePrimitiveParam } from '../generated/mapi/core/pathSerializer.gen';\n\n/**\n * Query serializer for the Management API client.\n *\n * Behaves identically to the generated default for primitives, primitive\n * arrays, and dates, but additionally serializes **nested objects** (and arrays\n * of objects) into bracket notation — e.g. `filter_query[component][in]=hero`.\n *\n * The generated default serializer throws on this nesting (\"Deeply-nested\n * arrays/objects aren't supported. Provide your own `querySerializer()`\"), yet\n * MAPI requires `filter_query` as a nested hash and rejects flat strings. This\n * mirrors the bracket serialization used by `storyblok-js-client`.\n */\nfunction serialize(name: string, value: unknown, parts: string[]): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (value instanceof Date) {\n parts.push(`${name}=${value.toISOString()}`);\n return;\n }\n\n if (Array.isArray(value)) {\n // Arrays containing objects (e.g. `filter_query.__or`) need per-item\n // bracket recursion; the default serializer cannot express them.\n if (value.some(item => item !== null && typeof item === 'object')) {\n for (const item of value) {\n serialize(`${name}[]`, item, parts);\n }\n return;\n }\n // Primitive arrays keep the generated default form (`name=a&name=b`).\n const serialized = serializeArrayParam({ explode: true, name, style: 'form', value });\n if (serialized) {\n parts.push(serialized);\n }\n return;\n }\n\n if (typeof value === 'object') {\n for (const [key, child] of Object.entries(value)) {\n serialize(`${name}[${key}]`, child, parts);\n }\n return;\n }\n\n const serialized = serializePrimitiveParam({ name, value: value as string });\n if (serialized) {\n parts.push(serialized);\n }\n}\n\nexport const querySerializer: QuerySerializer = (query) => {\n const parts: string[] = [];\n for (const [name, value] of Object.entries(query)) {\n serialize(name, value, parts);\n }\n return parts.join('&');\n};\n"],"mappings":";;;;;;;;;;;;;;;AAeA,SAAS,UAAU,MAAc,OAAgB,OAAuB;AACtE,KAAI,UAAU,UAAa,UAAU,KACnC;AAGF,KAAI,iBAAiB,MAAM;AACzB,QAAM,KAAK,GAAG,KAAK,GAAG,MAAM,aAAa,GAAG;AAC5C;;AAGF,KAAI,MAAM,QAAQ,MAAM,EAAE;AAGxB,MAAI,MAAM,MAAK,SAAQ,SAAS,QAAQ,OAAO,SAAS,SAAS,EAAE;AACjE,QAAK,MAAM,QAAQ,MACjB,WAAU,GAAG,KAAK,KAAK,MAAM,MAAM;AAErC;;EAGF,MAAM,aAAaA,+CAAoB;GAAE,SAAS;GAAM;GAAM,OAAO;GAAQ;GAAO,CAAC;AACrF,MAAI,WACF,OAAM,KAAK,WAAW;AAExB;;AAGF,KAAI,OAAO,UAAU,UAAU;AAC7B,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,CAC9C,WAAU,GAAG,KAAK,GAAG,IAAI,IAAI,OAAO,MAAM;AAE5C;;CAGF,MAAM,aAAaC,mDAAwB;EAAE;EAAa;EAAiB,CAAC;AAC5E,KAAI,WACF,OAAM,KAAK,WAAW;;AAI1B,MAAa,mBAAoC,UAAU;CACzD,MAAM,QAAkB,EAAE;AAC1B,MAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,MAAM,CAC/C,WAAU,MAAM,OAAO,MAAM;AAE/B,QAAO,MAAM,KAAK,IAAI"}
@@ -0,0 +1,54 @@
1
+ import { serializeArrayParam, serializePrimitiveParam } from "../generated/mapi/core/pathSerializer.gen.mjs";
2
+
3
+ //#region src/utils/query-serializer.ts
4
+ /**
5
+ * Query serializer for the Management API client.
6
+ *
7
+ * Behaves identically to the generated default for primitives, primitive
8
+ * arrays, and dates, but additionally serializes **nested objects** (and arrays
9
+ * of objects) into bracket notation — e.g. `filter_query[component][in]=hero`.
10
+ *
11
+ * The generated default serializer throws on this nesting ("Deeply-nested
12
+ * arrays/objects aren't supported. Provide your own `querySerializer()`"), yet
13
+ * MAPI requires `filter_query` as a nested hash and rejects flat strings. This
14
+ * mirrors the bracket serialization used by `storyblok-js-client`.
15
+ */
16
+ function serialize(name, value, parts) {
17
+ if (value === void 0 || value === null) return;
18
+ if (value instanceof Date) {
19
+ parts.push(`${name}=${value.toISOString()}`);
20
+ return;
21
+ }
22
+ if (Array.isArray(value)) {
23
+ if (value.some((item) => item !== null && typeof item === "object")) {
24
+ for (const item of value) serialize(`${name}[]`, item, parts);
25
+ return;
26
+ }
27
+ const serialized = serializeArrayParam({
28
+ explode: true,
29
+ name,
30
+ style: "form",
31
+ value
32
+ });
33
+ if (serialized) parts.push(serialized);
34
+ return;
35
+ }
36
+ if (typeof value === "object") {
37
+ for (const [key, child] of Object.entries(value)) serialize(`${name}[${key}]`, child, parts);
38
+ return;
39
+ }
40
+ const serialized = serializePrimitiveParam({
41
+ name,
42
+ value
43
+ });
44
+ if (serialized) parts.push(serialized);
45
+ }
46
+ const querySerializer = (query) => {
47
+ const parts = [];
48
+ for (const [name, value] of Object.entries(query)) serialize(name, value, parts);
49
+ return parts.join("&");
50
+ };
51
+
52
+ //#endregion
53
+ export { querySerializer };
54
+ //# sourceMappingURL=query-serializer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-serializer.mjs","names":[],"sources":["../../src/utils/query-serializer.ts"],"sourcesContent":["import type { QuerySerializer } from '../generated/mapi/core/bodySerializer.gen';\nimport { serializeArrayParam, serializePrimitiveParam } from '../generated/mapi/core/pathSerializer.gen';\n\n/**\n * Query serializer for the Management API client.\n *\n * Behaves identically to the generated default for primitives, primitive\n * arrays, and dates, but additionally serializes **nested objects** (and arrays\n * of objects) into bracket notation — e.g. `filter_query[component][in]=hero`.\n *\n * The generated default serializer throws on this nesting (\"Deeply-nested\n * arrays/objects aren't supported. Provide your own `querySerializer()`\"), yet\n * MAPI requires `filter_query` as a nested hash and rejects flat strings. This\n * mirrors the bracket serialization used by `storyblok-js-client`.\n */\nfunction serialize(name: string, value: unknown, parts: string[]): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (value instanceof Date) {\n parts.push(`${name}=${value.toISOString()}`);\n return;\n }\n\n if (Array.isArray(value)) {\n // Arrays containing objects (e.g. `filter_query.__or`) need per-item\n // bracket recursion; the default serializer cannot express them.\n if (value.some(item => item !== null && typeof item === 'object')) {\n for (const item of value) {\n serialize(`${name}[]`, item, parts);\n }\n return;\n }\n // Primitive arrays keep the generated default form (`name=a&name=b`).\n const serialized = serializeArrayParam({ explode: true, name, style: 'form', value });\n if (serialized) {\n parts.push(serialized);\n }\n return;\n }\n\n if (typeof value === 'object') {\n for (const [key, child] of Object.entries(value)) {\n serialize(`${name}[${key}]`, child, parts);\n }\n return;\n }\n\n const serialized = serializePrimitiveParam({ name, value: value as string });\n if (serialized) {\n parts.push(serialized);\n }\n}\n\nexport const querySerializer: QuerySerializer = (query) => {\n const parts: string[] = [];\n for (const [name, value] of Object.entries(query)) {\n serialize(name, value, parts);\n }\n return parts.join('&');\n};\n"],"mappings":";;;;;;;;;;;;;;;AAeA,SAAS,UAAU,MAAc,OAAgB,OAAuB;AACtE,KAAI,UAAU,UAAa,UAAU,KACnC;AAGF,KAAI,iBAAiB,MAAM;AACzB,QAAM,KAAK,GAAG,KAAK,GAAG,MAAM,aAAa,GAAG;AAC5C;;AAGF,KAAI,MAAM,QAAQ,MAAM,EAAE;AAGxB,MAAI,MAAM,MAAK,SAAQ,SAAS,QAAQ,OAAO,SAAS,SAAS,EAAE;AACjE,QAAK,MAAM,QAAQ,MACjB,WAAU,GAAG,KAAK,KAAK,MAAM,MAAM;AAErC;;EAGF,MAAM,aAAa,oBAAoB;GAAE,SAAS;GAAM;GAAM,OAAO;GAAQ;GAAO,CAAC;AACrF,MAAI,WACF,OAAM,KAAK,WAAW;AAExB;;AAGF,KAAI,OAAO,UAAU,UAAU;AAC7B,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,CAC9C,WAAU,GAAG,KAAK,GAAG,IAAI,IAAI,OAAO,MAAM;AAE5C;;CAGF,MAAM,aAAa,wBAAwB;EAAE;EAAa;EAAiB,CAAC;AAC5E,KAAI,WACF,OAAM,KAAK,WAAW;;AAI1B,MAAa,mBAAoC,UAAU;CACzD,MAAM,QAAkB,EAAE;AAC1B,MAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,MAAM,CAC/C,WAAU,MAAM,OAAO,MAAM;AAE/B,QAAO,MAAM,KAAK,IAAI"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@storyblok/management-api-client",
3
3
  "type": "module",
4
- "version": "0.3.0",
4
+ "version": "1.0.0-alpha.2",
5
5
  "private": false,
6
6
  "description": "Storyblok Management API Client",
7
7
  "author": "",
@@ -9,7 +9,7 @@
9
9
  "homepage": "https://github.com/storyblok/monoblok/tree/main/packages/mapi-client#readme",
10
10
  "repository": {
11
11
  "type": "git",
12
- "url": "https://github.com/storyblok/monoblok.git",
12
+ "url": "git+https://github.com/storyblok/monoblok.git",
13
13
  "directory": "packages/mapi-client"
14
14
  },
15
15
  "bugs": {
@@ -35,32 +35,34 @@
35
35
  "@storyblok/region-helper": "1.4.1"
36
36
  },
37
37
  "devDependencies": {
38
- "@hey-api/openapi-ts": "^0.92.3",
39
- "@msw/source": "^0.6.1",
40
38
  "@types/node": "^24.1.0",
41
39
  "eslint": "^9.39.2",
42
- "glob": "^13.0.6",
43
40
  "msw": "^2.12.9",
44
41
  "pathe": "^2.0.3",
45
42
  "tsdown": "^0.20.3",
46
43
  "tsx": "^4.20.3",
47
- "vitest": "^3.1.3",
44
+ "vitest": "^4.1.3",
48
45
  "@storyblok/eslint-config": "0.5.1",
49
- "@storyblok/openapi": "2.0.1"
46
+ "@storyblok/openapi-codegen": "0.0.1"
50
47
  },
51
48
  "nx": {
52
49
  "targets": {
53
50
  "generate": {
54
- "dependsOn": [
55
- "^build"
51
+ "inputs": [
52
+ "{projectRoot}/scripts/generate.ts",
53
+ "{projectRoot}/package.json",
54
+ "openapiCodegen"
56
55
  ],
57
56
  "outputs": [
58
57
  "{projectRoot}/src/generated/**"
58
+ ],
59
+ "cache": true,
60
+ "dependsOn": [
61
+ "@storyblok/openapi-codegen:build"
59
62
  ]
60
63
  },
61
64
  "build": {
62
65
  "dependsOn": [
63
- "generate",
64
66
  "^build"
65
67
  ],
66
68
  "outputs": [
@@ -72,10 +74,10 @@
72
74
  "scripts": {
73
75
  "generate": "tsx scripts/generate.ts",
74
76
  "build": "tsdown",
75
- "test": "vitest",
76
- "test:ci": "vitest run",
77
+ "test": "vitest run",
78
+ "test:types": "tsc --noEmit --skipLibCheck",
79
+ "coverage": "vitest run --coverage",
77
80
  "lint": "eslint .",
78
- "lint:fix": "eslint . --fix",
79
- "typecheck": "tsc --noEmit"
81
+ "lint:fix": "eslint . --fix"
80
82
  }
81
83
  }
@@ -0,0 +1,24 @@
1
+ # @storyblok/mapi-integration-tests
2
+
3
+ Integration tests for [`@storyblok/management-api-client`](../../) paired with [`@storyblok/schema`](../../../schema).
4
+
5
+ This playground exists so the management-api-client package itself stays free of a runtime dependency on `@storyblok/schema`, while still letting us verify that the two packages line up.
6
+
7
+ ## Type tests
8
+
9
+ `test/types/*.test-d.ts` assert that `defineBlock` / `defineX*` payloads from `@storyblok/schema` are assignable to the corresponding MAPI request bodies, and that `.withTypes()` narrows responses correctly. They run in CI:
10
+
11
+ ```bash
12
+ pnpm --filter @storyblok/mapi-integration-tests test
13
+ pnpm --filter @storyblok/mapi-integration-tests test:types
14
+ ```
15
+
16
+ ## End-to-end tests
17
+
18
+ `test/specs/*.spec.e2e.ts` exercise a real round-trip against the Storyblok MAPI using a personal access token. Run manually only:
19
+
20
+ ```bash
21
+ pnpm --filter @storyblok/mapi-integration-tests test:e2e
22
+ ```
23
+
24
+ Requires `.env.qa-engineer-manual` at the repo root with `STORYBLOK_TOKEN` and `STORYBLOK_SPACE_ID`.
@@ -0,0 +1,5 @@
1
+ import { storyblokLintConfig } from '@storyblok/eslint-config';
2
+
3
+ export default storyblokLintConfig({}, {
4
+ ignores: ['**/*.md'],
5
+ });
@@ -0,0 +1,16 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -x "$basedir/node" ]; then
13
+ exec "$basedir/node" "$basedir/../eslint/bin/eslint.js" "$@"
14
+ else
15
+ exec node "$basedir/../eslint/bin/eslint.js" "$@"
16
+ fi
@@ -0,0 +1,16 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -x "$basedir/node" ]; then
13
+ exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
14
+ else
15
+ exec node "$basedir/../typescript/bin/tsc" "$@"
16
+ fi
@@ -0,0 +1,16 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -x "$basedir/node" ]; then
13
+ exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
14
+ else
15
+ exec node "$basedir/../typescript/bin/tsserver" "$@"
16
+ fi
@@ -0,0 +1,16 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -x "$basedir/node" ]; then
13
+ exec "$basedir/node" "$basedir/../vitest/vitest.mjs" "$@"
14
+ else
15
+ exec node "$basedir/../vitest/vitest.mjs" "$@"
16
+ fi
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@storyblok/mapi-integration-tests",
3
+ "type": "module",
4
+ "version": "0.0.0",
5
+ "private": true,
6
+ "description": "Integration tests for @storyblok/management-api-client paired with @storyblok/schema",
7
+ "scripts": {
8
+ "test": "vitest run",
9
+ "test:types": "tsc --noEmit --skipLibCheck",
10
+ "test:e2e": "vitest run -c vitest.config.e2e.ts",
11
+ "lint": "eslint .",
12
+ "lint:fix": "eslint . --fix"
13
+ },
14
+ "devDependencies": {
15
+ "@storyblok/eslint-config": "workspace:*",
16
+ "@storyblok/management-api-client": "workspace:*",
17
+ "@storyblok/schema": "workspace:*",
18
+ "@types/node": "^24.1.0",
19
+ "dotenv": "^17.3.1",
20
+ "eslint": "^9.39.2",
21
+ "typescript": "5.8.3",
22
+ "vitest": "^4.1.3"
23
+ }
24
+ }
@@ -0,0 +1,11 @@
1
+ import { resolve } from 'node:path';
2
+ import { config } from 'dotenv';
3
+
4
+ config({ path: resolve(import.meta.dirname, '../../../../../.env.qa-engineer-manual') });
5
+
6
+ if (!process.env.STORYBLOK_TOKEN || !process.env.STORYBLOK_SPACE_ID) {
7
+ throw new Error(
8
+ 'E2E tests require STORYBLOK_TOKEN and STORYBLOK_SPACE_ID.\n'
9
+ + 'Create a .env.qa-engineer-manual file at the repo root with these variables.',
10
+ );
11
+ }