@storyblok/management-api-client 1.0.0-alpha.1 → 1.0.0-alpha.3
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.
- package/README.md +3 -1
- package/dist/client.cjs +9 -9
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +217 -203
- package/dist/client.d.mts +217 -203
- package/dist/client.mjs +9 -9
- package/dist/client.mjs.map +1 -1
- package/dist/generated/mapi/_internal.gen.d.cts +371 -0
- package/dist/generated/mapi/_internal.gen.d.mts +371 -0
- package/dist/generated/{shared → mapi}/client/client.gen.cjs +1 -1
- package/dist/generated/mapi/client/client.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/client/client.gen.mjs +1 -1
- package/dist/generated/mapi/client/client.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/client/types.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/client/types.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/client/utils.gen.cjs +1 -1
- package/dist/generated/mapi/client/utils.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/client/utils.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/client/utils.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/client/utils.gen.mjs +1 -1
- package/dist/generated/mapi/client/utils.gen.mjs.map +1 -0
- package/dist/generated/mapi/client.gen.cjs +10 -0
- package/dist/generated/mapi/client.gen.cjs.map +1 -0
- package/dist/generated/mapi/client.gen.mjs +10 -0
- package/dist/generated/mapi/client.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/auth.gen.cjs +1 -1
- package/dist/generated/mapi/core/auth.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/auth.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/core/auth.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/core/auth.gen.mjs +1 -1
- package/dist/generated/mapi/core/auth.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/bodySerializer.gen.cjs +1 -1
- package/dist/generated/mapi/core/bodySerializer.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/bodySerializer.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/core/bodySerializer.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/core/bodySerializer.gen.mjs +1 -1
- package/dist/generated/mapi/core/bodySerializer.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/params.gen.cjs +1 -1
- package/dist/generated/mapi/core/params.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/params.gen.mjs +1 -1
- package/dist/generated/mapi/core/params.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/pathSerializer.gen.cjs +1 -1
- package/dist/generated/mapi/core/pathSerializer.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/pathSerializer.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/core/pathSerializer.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/core/pathSerializer.gen.mjs +1 -1
- package/dist/generated/mapi/core/pathSerializer.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.cjs +1 -1
- package/dist/generated/mapi/core/serverSentEvents.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.mjs +1 -1
- package/dist/generated/mapi/core/serverSentEvents.gen.mjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/types.gen.d.cts +1 -1
- package/dist/generated/{shared → mapi}/core/types.gen.d.mts +1 -1
- package/dist/generated/{shared → mapi}/core/utils.gen.cjs +1 -1
- package/dist/generated/mapi/core/utils.gen.cjs.map +1 -0
- package/dist/generated/{shared → mapi}/core/utils.gen.mjs +1 -1
- package/dist/generated/mapi/core/utils.gen.mjs.map +1 -0
- package/dist/generated/mapi/sdk.gen.cjs +1477 -0
- package/dist/generated/mapi/sdk.gen.cjs.map +1 -0
- package/dist/generated/mapi/sdk.gen.mjs +1399 -0
- package/dist/generated/mapi/sdk.gen.mjs.map +1 -0
- package/dist/generated/mapi/types-aliased.gen.d.cts +1598 -0
- package/dist/generated/mapi/types-aliased.gen.d.mts +1598 -0
- package/dist/generated/mapi/types.gen.d.cts +5075 -0
- package/dist/generated/mapi/types.gen.d.mts +5075 -0
- package/dist/generated/{components/types.gen.d.cts → overlay/_internal.gen.d.cts} +281 -457
- package/dist/generated/{components/types.gen.d.mts → overlay/_internal.gen.d.mts} +281 -457
- package/dist/generated/types/_utils.d.cts +7 -0
- package/dist/generated/types/_utils.d.mts +7 -0
- package/dist/generated/types/block.d.cts +49 -0
- package/dist/generated/types/block.d.mts +49 -0
- package/dist/generated/types/field.d.cts +87 -0
- package/dist/generated/types/field.d.mts +87 -0
- package/dist/generated/types/mapi-story.d.cts +29 -0
- package/dist/generated/types/mapi-story.d.mts +29 -0
- package/dist/index.d.cts +8 -4
- package/dist/index.d.mts +8 -4
- package/dist/resources/asset-folders.cjs +9 -9
- package/dist/resources/asset-folders.cjs.map +1 -1
- package/dist/resources/asset-folders.mjs +9 -9
- package/dist/resources/asset-folders.mjs.map +1 -1
- package/dist/resources/assets.cjs +64 -46
- package/dist/resources/assets.cjs.map +1 -1
- package/dist/resources/assets.d.cts +23 -28
- package/dist/resources/assets.d.mts +23 -28
- package/dist/resources/assets.mjs +64 -46
- package/dist/resources/assets.mjs.map +1 -1
- package/dist/resources/component-folders.cjs +9 -9
- package/dist/resources/component-folders.cjs.map +1 -1
- package/dist/resources/component-folders.mjs +9 -9
- package/dist/resources/component-folders.mjs.map +1 -1
- package/dist/resources/components.cjs +28 -20
- package/dist/resources/components.cjs.map +1 -1
- package/dist/resources/components.d.cts +76 -0
- package/dist/resources/components.d.mts +76 -0
- package/dist/resources/components.mjs +28 -20
- package/dist/resources/components.mjs.map +1 -1
- package/dist/resources/datasource-entries.cjs +28 -34
- package/dist/resources/datasource-entries.cjs.map +1 -1
- package/dist/resources/datasource-entries.mjs +29 -35
- package/dist/resources/datasource-entries.mjs.map +1 -1
- package/dist/resources/datasources.cjs +27 -9
- package/dist/resources/datasources.cjs.map +1 -1
- package/dist/resources/datasources.mjs +27 -9
- package/dist/resources/datasources.mjs.map +1 -1
- package/dist/resources/experiments.cjs +299 -0
- package/dist/resources/experiments.cjs.map +1 -0
- package/dist/resources/experiments.mjs +299 -0
- package/dist/resources/experiments.mjs.map +1 -0
- package/dist/resources/internal-tags.cjs +7 -7
- package/dist/resources/internal-tags.cjs.map +1 -1
- package/dist/resources/internal-tags.mjs +7 -7
- package/dist/resources/internal-tags.mjs.map +1 -1
- package/dist/resources/presets.cjs +9 -9
- package/dist/resources/presets.cjs.map +1 -1
- package/dist/resources/presets.mjs +9 -9
- package/dist/resources/presets.mjs.map +1 -1
- package/dist/resources/shared.cjs +15 -0
- package/dist/resources/shared.cjs.map +1 -1
- package/dist/resources/shared.mjs +15 -1
- package/dist/resources/shared.mjs.map +1 -1
- package/dist/resources/spaces.cjs +8 -7
- package/dist/resources/spaces.cjs.map +1 -1
- package/dist/resources/spaces.d.cts +8 -0
- package/dist/resources/spaces.d.mts +7 -0
- package/dist/resources/spaces.mjs +8 -7
- package/dist/resources/spaces.mjs.map +1 -1
- package/dist/resources/stories.cjs +20 -16
- package/dist/resources/stories.cjs.map +1 -1
- package/dist/resources/stories.d.cts +30 -42
- package/dist/resources/stories.d.mts +30 -42
- package/dist/resources/stories.mjs +20 -16
- package/dist/resources/stories.mjs.map +1 -1
- package/dist/resources/users.cjs +3 -3
- package/dist/resources/users.cjs.map +1 -1
- package/dist/resources/users.mjs +3 -3
- package/dist/resources/users.mjs.map +1 -1
- package/dist/utils/query-serializer.cjs +54 -0
- package/dist/utils/query-serializer.cjs.map +1 -0
- package/dist/utils/query-serializer.mjs +54 -0
- package/dist/utils/query-serializer.mjs.map +1 -0
- package/dist/utils/rate-limit.cjs +15 -74
- package/dist/utils/rate-limit.cjs.map +1 -1
- package/dist/utils/rate-limit.d.cts +5 -6
- package/dist/utils/rate-limit.d.mts +5 -6
- package/dist/utils/rate-limit.mjs +15 -74
- package/dist/utils/rate-limit.mjs.map +1 -1
- package/package.json +13 -13
- package/playground/integration-tests/README.md +24 -0
- package/playground/integration-tests/eslint.config.js +5 -0
- package/playground/integration-tests/node_modules/.bin/eslint +16 -0
- package/playground/integration-tests/node_modules/.bin/tsc +16 -0
- package/playground/integration-tests/node_modules/.bin/tsserver +16 -0
- package/playground/integration-tests/node_modules/.bin/vitest +16 -0
- package/playground/integration-tests/package.json +24 -0
- package/{test → playground/integration-tests/test}/setup.e2e.ts +2 -2
- package/{test → playground/integration-tests/test}/specs/mapi-round-trip.spec.e2e.ts +31 -41
- package/playground/integration-tests/test/types/components.test-d.ts +74 -0
- package/playground/integration-tests/test/types/resources.test-d.ts +212 -0
- package/playground/integration-tests/test/types/stories.test-d.ts +273 -0
- package/{vitest.config.e2e.ts → playground/integration-tests/vitest.config.e2e.ts} +1 -2
- package/playground/integration-tests/vitest.config.ts +13 -0
- package/test/GUIDE.md +4 -4
- package/vitest.config.ts +2 -0
- package/dist/generated/asset_folders/client.gen.cjs +0 -10
- package/dist/generated/asset_folders/client.gen.cjs.map +0 -1
- package/dist/generated/asset_folders/client.gen.mjs +0 -10
- package/dist/generated/asset_folders/client.gen.mjs.map +0 -1
- package/dist/generated/asset_folders/sdk.gen.cjs +0 -99
- package/dist/generated/asset_folders/sdk.gen.cjs.map +0 -1
- package/dist/generated/asset_folders/sdk.gen.mjs +0 -95
- package/dist/generated/asset_folders/sdk.gen.mjs.map +0 -1
- package/dist/generated/asset_folders/types.gen.d.cts +0 -130
- package/dist/generated/asset_folders/types.gen.d.mts +0 -130
- package/dist/generated/assets/client.gen.cjs +0 -10
- package/dist/generated/assets/client.gen.cjs.map +0 -1
- package/dist/generated/assets/client.gen.mjs +0 -10
- package/dist/generated/assets/client.gen.mjs.map +0 -1
- package/dist/generated/assets/sdk.gen.cjs +0 -179
- package/dist/generated/assets/sdk.gen.cjs.map +0 -1
- package/dist/generated/assets/sdk.gen.mjs +0 -171
- package/dist/generated/assets/sdk.gen.mjs.map +0 -1
- package/dist/generated/assets/types.gen.d.cts +0 -343
- package/dist/generated/assets/types.gen.d.mts +0 -343
- package/dist/generated/component_folders/client.gen.cjs +0 -10
- package/dist/generated/component_folders/client.gen.cjs.map +0 -1
- package/dist/generated/component_folders/client.gen.mjs +0 -10
- package/dist/generated/component_folders/client.gen.mjs.map +0 -1
- package/dist/generated/component_folders/sdk.gen.cjs +0 -99
- package/dist/generated/component_folders/sdk.gen.cjs.map +0 -1
- package/dist/generated/component_folders/sdk.gen.mjs +0 -95
- package/dist/generated/component_folders/sdk.gen.mjs.map +0 -1
- package/dist/generated/component_folders/types.gen.d.cts +0 -102
- package/dist/generated/component_folders/types.gen.d.mts +0 -102
- package/dist/generated/components/client.gen.cjs +0 -10
- package/dist/generated/components/client.gen.cjs.map +0 -1
- package/dist/generated/components/client.gen.mjs +0 -10
- package/dist/generated/components/client.gen.mjs.map +0 -1
- package/dist/generated/components/sdk.gen.cjs +0 -171
- package/dist/generated/components/sdk.gen.cjs.map +0 -1
- package/dist/generated/components/sdk.gen.mjs +0 -163
- package/dist/generated/components/sdk.gen.mjs.map +0 -1
- package/dist/generated/datasource_entries/client.gen.cjs +0 -10
- package/dist/generated/datasource_entries/client.gen.cjs.map +0 -1
- package/dist/generated/datasource_entries/client.gen.mjs +0 -10
- package/dist/generated/datasource_entries/client.gen.mjs.map +0 -1
- package/dist/generated/datasource_entries/sdk.gen.cjs +0 -89
- package/dist/generated/datasource_entries/sdk.gen.cjs.map +0 -1
- package/dist/generated/datasource_entries/sdk.gen.mjs +0 -85
- package/dist/generated/datasource_entries/sdk.gen.mjs.map +0 -1
- package/dist/generated/datasource_entries/types.gen.d.cts +0 -130
- package/dist/generated/datasource_entries/types.gen.d.mts +0 -130
- package/dist/generated/datasources/client.gen.cjs +0 -10
- package/dist/generated/datasources/client.gen.cjs.map +0 -1
- package/dist/generated/datasources/client.gen.mjs +0 -10
- package/dist/generated/datasources/client.gen.mjs.map +0 -1
- package/dist/generated/datasources/sdk.gen.cjs +0 -89
- package/dist/generated/datasources/sdk.gen.cjs.map +0 -1
- package/dist/generated/datasources/sdk.gen.mjs +0 -85
- package/dist/generated/datasources/sdk.gen.mjs.map +0 -1
- package/dist/generated/datasources/types.gen.d.cts +0 -165
- package/dist/generated/datasources/types.gen.d.mts +0 -165
- package/dist/generated/internal_tags/client.gen.cjs +0 -10
- package/dist/generated/internal_tags/client.gen.cjs.map +0 -1
- package/dist/generated/internal_tags/client.gen.mjs +0 -10
- package/dist/generated/internal_tags/client.gen.mjs.map +0 -1
- package/dist/generated/internal_tags/sdk.gen.cjs +0 -74
- package/dist/generated/internal_tags/sdk.gen.cjs.map +0 -1
- package/dist/generated/internal_tags/sdk.gen.mjs +0 -71
- package/dist/generated/internal_tags/sdk.gen.mjs.map +0 -1
- package/dist/generated/internal_tags/types.gen.d.cts +0 -102
- package/dist/generated/internal_tags/types.gen.d.mts +0 -102
- package/dist/generated/presets/client.gen.cjs +0 -10
- package/dist/generated/presets/client.gen.cjs.map +0 -1
- package/dist/generated/presets/client.gen.mjs +0 -10
- package/dist/generated/presets/client.gen.mjs.map +0 -1
- package/dist/generated/presets/sdk.gen.cjs +0 -99
- package/dist/generated/presets/sdk.gen.cjs.map +0 -1
- package/dist/generated/presets/sdk.gen.mjs +0 -95
- package/dist/generated/presets/sdk.gen.mjs.map +0 -1
- package/dist/generated/presets/types.gen.d.cts +0 -171
- package/dist/generated/presets/types.gen.d.mts +0 -171
- package/dist/generated/shared/client/client.gen.cjs.map +0 -1
- package/dist/generated/shared/client/client.gen.mjs.map +0 -1
- package/dist/generated/shared/client/utils.gen.cjs.map +0 -1
- package/dist/generated/shared/client/utils.gen.mjs.map +0 -1
- package/dist/generated/shared/core/auth.gen.cjs.map +0 -1
- package/dist/generated/shared/core/auth.gen.mjs.map +0 -1
- package/dist/generated/shared/core/bodySerializer.gen.cjs.map +0 -1
- package/dist/generated/shared/core/bodySerializer.gen.mjs.map +0 -1
- package/dist/generated/shared/core/params.gen.cjs.map +0 -1
- package/dist/generated/shared/core/params.gen.mjs.map +0 -1
- package/dist/generated/shared/core/pathSerializer.gen.cjs.map +0 -1
- package/dist/generated/shared/core/pathSerializer.gen.mjs.map +0 -1
- package/dist/generated/shared/core/serverSentEvents.gen.cjs.map +0 -1
- package/dist/generated/shared/core/serverSentEvents.gen.mjs.map +0 -1
- package/dist/generated/shared/core/utils.gen.cjs.map +0 -1
- package/dist/generated/shared/core/utils.gen.mjs.map +0 -1
- package/dist/generated/spaces/client.gen.cjs +0 -10
- package/dist/generated/spaces/client.gen.cjs.map +0 -1
- package/dist/generated/spaces/client.gen.mjs +0 -10
- package/dist/generated/spaces/client.gen.mjs.map +0 -1
- package/dist/generated/spaces/sdk.gen.cjs +0 -99
- package/dist/generated/spaces/sdk.gen.cjs.map +0 -1
- package/dist/generated/spaces/sdk.gen.mjs +0 -95
- package/dist/generated/spaces/sdk.gen.mjs.map +0 -1
- package/dist/generated/spaces/types.gen.d.cts +0 -504
- package/dist/generated/spaces/types.gen.d.mts +0 -504
- package/dist/generated/stories/client.gen.cjs +0 -10
- package/dist/generated/stories/client.gen.cjs.map +0 -1
- package/dist/generated/stories/client.gen.mjs +0 -10
- package/dist/generated/stories/client.gen.mjs.map +0 -1
- package/dist/generated/stories/sdk.gen.cjs +0 -138
- package/dist/generated/stories/sdk.gen.cjs.map +0 -1
- package/dist/generated/stories/sdk.gen.mjs +0 -131
- package/dist/generated/stories/sdk.gen.mjs.map +0 -1
- package/dist/generated/stories/types.gen.d.cts +0 -1314
- package/dist/generated/stories/types.gen.d.mts +0 -1314
- package/dist/generated/users/client.gen.cjs +0 -10
- package/dist/generated/users/client.gen.cjs.map +0 -1
- package/dist/generated/users/client.gen.mjs +0 -10
- package/dist/generated/users/client.gen.mjs.map +0 -1
- package/dist/generated/users/sdk.gen.cjs +0 -44
- package/dist/generated/users/sdk.gen.cjs.map +0 -1
- package/dist/generated/users/sdk.gen.mjs +0 -43
- package/dist/generated/users/sdk.gen.mjs.map +0 -1
- package/dist/generated/users/types.gen.d.cts +0 -249
- package/dist/generated/users/types.gen.d.mts +0 -249
- /package/dist/generated/{shared → mapi}/client/client.gen.d.mts +0 -0
- /package/dist/generated/{shared → mapi}/client/index.cjs +0 -0
- /package/dist/generated/{shared → mapi}/client/index.d.mts +0 -0
- /package/dist/generated/{shared → mapi}/client/index.mjs +0 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { defineBlock, defineField } from '@storyblok/schema';
|
|
2
|
+
import { createManagementApiClient, type Story as StoryMapi } from '@storyblok/management-api-client';
|
|
3
|
+
import { describe, expectTypeOf, it } from 'vitest';
|
|
4
|
+
|
|
5
|
+
// Nestable block — not a root story type
|
|
6
|
+
const teaserComponent = defineBlock({
|
|
7
|
+
name: 'teaser',
|
|
8
|
+
fields: [
|
|
9
|
+
defineField('text', { type: 'text' }),
|
|
10
|
+
defineField('image', { type: 'asset' }),
|
|
11
|
+
],
|
|
12
|
+
id: 0,
|
|
13
|
+
created_at: '',
|
|
14
|
+
updated_at: '',
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
// Root content type that is also nestable (can appear as both a story and inside bloks)
|
|
18
|
+
const heroComponent = defineBlock({
|
|
19
|
+
name: 'hero',
|
|
20
|
+
is_root: true,
|
|
21
|
+
fields: [
|
|
22
|
+
defineField('title', { type: 'text' }),
|
|
23
|
+
defineField('count', { type: 'number' }),
|
|
24
|
+
// bloks field without a whitelist — resolves to nestable components only
|
|
25
|
+
defineField('sections', { type: 'bloks' }),
|
|
26
|
+
],
|
|
27
|
+
id: 0,
|
|
28
|
+
created_at: '',
|
|
29
|
+
updated_at: '',
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// Root content type, not nestable
|
|
33
|
+
const _pageComponent = defineBlock({
|
|
34
|
+
name: 'page',
|
|
35
|
+
is_root: true,
|
|
36
|
+
is_nestable: false,
|
|
37
|
+
fields: [
|
|
38
|
+
defineField('headline', { type: 'text' }),
|
|
39
|
+
defineField('body', { type: 'richtext' }),
|
|
40
|
+
defineField('teasers', { type: 'bloks', allow: [teaserComponent.name] }),
|
|
41
|
+
defineField('hero', { type: 'bloks', allow: [heroComponent.name] }),
|
|
42
|
+
defineField('blocks', { type: 'bloks', allow: [heroComponent.name, teaserComponent.name] }),
|
|
43
|
+
],
|
|
44
|
+
id: 0,
|
|
45
|
+
created_at: '',
|
|
46
|
+
updated_at: '',
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
const CLIENT_CONFIG = { personalAccessToken: 'test-token', spaceId: 12345 };
|
|
50
|
+
|
|
51
|
+
interface StoryblokTypes {
|
|
52
|
+
components: typeof _pageComponent | typeof heroComponent | typeof teaserComponent;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
describe('createManagementApiClient without .withTypes()', () => {
|
|
56
|
+
it('should return StoryMapi from stories.get()', async () => {
|
|
57
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
58
|
+
const result = await client.stories.get(123);
|
|
59
|
+
if (result.data) {
|
|
60
|
+
expectTypeOf(result.data.story).toEqualTypeOf<StoryMapi | undefined>();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('should return StoryMapi array from stories.list()', async () => {
|
|
65
|
+
const client = createManagementApiClient(CLIENT_CONFIG);
|
|
66
|
+
const result = await client.stories.list();
|
|
67
|
+
if (result.data) {
|
|
68
|
+
expectTypeOf(result.data.stories).toEqualTypeOf<StoryMapi[] | undefined>();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('should infer ThrowOnError from config without .withTypes()', async () => {
|
|
73
|
+
const client = createManagementApiClient({ ...CLIENT_CONFIG, throwOnError: true });
|
|
74
|
+
const result = await client.stories.get(123);
|
|
75
|
+
// ThrowOnError=true means data is always defined (no optional chaining needed)
|
|
76
|
+
expectTypeOf(result.data.story).toEqualTypeOf<StoryMapi | undefined>();
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('should allow per-call throwOnError override to false', async () => {
|
|
80
|
+
const client = createManagementApiClient({ ...CLIENT_CONFIG, throwOnError: true });
|
|
81
|
+
const result = await client.stories.get(123, { throwOnError: false });
|
|
82
|
+
if (result.data) {
|
|
83
|
+
expectTypeOf(result.data.story).toEqualTypeOf<StoryMapi | undefined>();
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
describe('createManagementApiClient with .withTypes()', () => {
|
|
89
|
+
it('should narrow page content fields after component discriminant check on get()', async () => {
|
|
90
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
91
|
+
const result = await client.stories.get(123);
|
|
92
|
+
if (result.data?.story) {
|
|
93
|
+
const story = result.data.story;
|
|
94
|
+
if (story.content.component === 'page') {
|
|
95
|
+
expectTypeOf(story.content.headline).toEqualTypeOf<string | null | undefined>();
|
|
96
|
+
expectTypeOf(story.content.component).toEqualTypeOf<'page'>();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('should narrow hero content fields after component discriminant check on get()', async () => {
|
|
102
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
103
|
+
const result = await client.stories.get(123);
|
|
104
|
+
if (result.data?.story) {
|
|
105
|
+
const story = result.data.story;
|
|
106
|
+
if (story.content.component === 'hero') {
|
|
107
|
+
expectTypeOf(story.content.title).toEqualTypeOf<string | null | undefined>();
|
|
108
|
+
expectTypeOf(story.content.count).toEqualTypeOf<number | null | undefined>();
|
|
109
|
+
expectTypeOf(story.content.component).toEqualTypeOf<'hero'>();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it('should have union of literal component names on content', async () => {
|
|
115
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
116
|
+
const result = await client.stories.get(123);
|
|
117
|
+
if (result.data?.story) {
|
|
118
|
+
// Only root components (is_root: true) appear in story content
|
|
119
|
+
expectTypeOf(result.data.story.content.component).toEqualTypeOf<'page' | 'hero'>();
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('should narrow discriminated union in stories.list()', async () => {
|
|
124
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
125
|
+
const result = await client.stories.list();
|
|
126
|
+
if (result.data?.stories) {
|
|
127
|
+
for (const story of result.data.stories) {
|
|
128
|
+
if (story.content.component === 'page') {
|
|
129
|
+
expectTypeOf(story.content.headline).toEqualTypeOf<string | null | undefined>();
|
|
130
|
+
}
|
|
131
|
+
if (story.content.component === 'hero') {
|
|
132
|
+
expectTypeOf(story.content.count).toEqualTypeOf<number | null | undefined>();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it('should narrow bloks field on page to whitelisted component names', async () => {
|
|
139
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
140
|
+
const result = await client.stories.get(123);
|
|
141
|
+
if (result.data?.story) {
|
|
142
|
+
const story = result.data.story;
|
|
143
|
+
if (story.content.component === 'page') {
|
|
144
|
+
if (story.content.teasers) {
|
|
145
|
+
for (const teaser of story.content.teasers) {
|
|
146
|
+
expectTypeOf(teaser.component).toEqualTypeOf<'teaser'>();
|
|
147
|
+
expectTypeOf(teaser.text).toEqualTypeOf<string | null | undefined>();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (story.content.hero) {
|
|
151
|
+
for (const hero of story.content.hero) {
|
|
152
|
+
expectTypeOf(hero.component).toEqualTypeOf<'hero'>();
|
|
153
|
+
expectTypeOf(hero.count).toEqualTypeOf<number | null | undefined>();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (story.content.blocks) {
|
|
157
|
+
for (const blok of story.content.blocks) {
|
|
158
|
+
// blocks whitelists both hero and teaser → union of the two
|
|
159
|
+
expectTypeOf(blok.component).toEqualTypeOf<'hero' | 'teaser'>();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it('should fall back to all schema components for bloks field without whitelist', async () => {
|
|
167
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
168
|
+
const result = await client.stories.get(123);
|
|
169
|
+
if (result.data?.story) {
|
|
170
|
+
const story = result.data.story;
|
|
171
|
+
if (story.content.component === 'hero' && story.content.sections) {
|
|
172
|
+
// sections has no component_whitelist — falls back to nestable (is_nestable: true)
|
|
173
|
+
// components only; page has is_nestable: false, so it is excluded
|
|
174
|
+
type Sections = typeof story.content.sections;
|
|
175
|
+
expectTypeOf<Sections[number]['component']>().toEqualTypeOf<'hero' | 'teaser'>();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it('should infer ThrowOnError alongside .withTypes()', async () => {
|
|
181
|
+
const client = createManagementApiClient({ ...CLIENT_CONFIG, throwOnError: true }).withTypes<StoryblokTypes>();
|
|
182
|
+
const result = await client.stories.get(123);
|
|
183
|
+
if (result.data.story) {
|
|
184
|
+
// ThrowOnError=true keeps data defined; only root components appear in content
|
|
185
|
+
expectTypeOf(result.data.story.content.component).toEqualTypeOf<'page' | 'hero'>();
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it('should allow per-call throwOnError override to false alongside .withTypes()', async () => {
|
|
190
|
+
const client = createManagementApiClient({ ...CLIENT_CONFIG, throwOnError: true }).withTypes<StoryblokTypes>();
|
|
191
|
+
const result = await client.stories.get(123, { throwOnError: false });
|
|
192
|
+
if (result.data?.story) {
|
|
193
|
+
expectTypeOf(result.data.story.content.component).toEqualTypeOf<'page' | 'hero'>();
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
it('should narrow story in create() response', async () => {
|
|
198
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
199
|
+
const result = await client.stories.create({
|
|
200
|
+
body: { story: { name: 'My Page', content: { component: 'page' } } },
|
|
201
|
+
});
|
|
202
|
+
if (result.data?.story) {
|
|
203
|
+
const story = result.data.story;
|
|
204
|
+
if (story.content.component === 'page') {
|
|
205
|
+
expectTypeOf(story.content.headline).toEqualTypeOf<string | null | undefined>();
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
it('should narrow story in update() response', async () => {
|
|
211
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
212
|
+
const result = await client.stories.update(123, {
|
|
213
|
+
body: { story: { content: { component: 'hero' } } },
|
|
214
|
+
});
|
|
215
|
+
if (result.data?.story) {
|
|
216
|
+
const story = result.data.story;
|
|
217
|
+
if (story.content.component === 'hero') {
|
|
218
|
+
expectTypeOf(story.content.title).toEqualTypeOf<string | null | undefined>();
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
it('should narrow create() body story.content to component union', async () => {
|
|
224
|
+
const _client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
225
|
+
type CreateBodyType = Parameters<typeof _client.stories.create>[0]['body'];
|
|
226
|
+
type CreateStoryContent = NonNullable<CreateBodyType['story']['content']>;
|
|
227
|
+
// The write payload's content discriminant is narrowed to root component names too
|
|
228
|
+
expectTypeOf<CreateStoryContent['component']>().toEqualTypeOf<'page' | 'hero'>();
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
it('should narrow update() body story.content to component union', async () => {
|
|
232
|
+
const _client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
233
|
+
type UpdateBodyType = Parameters<typeof _client.stories.update>[1]['body'];
|
|
234
|
+
type UpdateStoryContent = NonNullable<UpdateBodyType['story']['content']>;
|
|
235
|
+
// update() is the second positional arg (id, body); content discriminant is the root union
|
|
236
|
+
expectTypeOf<UpdateStoryContent['component']>().toEqualTypeOf<'page' | 'hero'>();
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
describe('withTypes() write-body narrowing', () => {
|
|
241
|
+
it('should reject nestable-only component name in create body content', () => {
|
|
242
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
243
|
+
client.stories.create({
|
|
244
|
+
// @ts-expect-error: teaser is nestable-only, not a root component
|
|
245
|
+
body: { story: { name: 'Bad', content: { component: 'teaser' } } },
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
it('should reject wrong field value type in create body content', () => {
|
|
250
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
251
|
+
client.stories.create({
|
|
252
|
+
body: { story: { name: 'Bad', content: {
|
|
253
|
+
component: 'page',
|
|
254
|
+
// @ts-expect-error: headline must be string, not number
|
|
255
|
+
headline: 123,
|
|
256
|
+
} } },
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
it('should return a typed story with content.component as discriminant from stories.get', async () => {
|
|
261
|
+
const client = createManagementApiClient(CLIENT_CONFIG).withTypes<StoryblokTypes>();
|
|
262
|
+
const result = await client.stories.get(123);
|
|
263
|
+
|
|
264
|
+
if (result.data?.story) {
|
|
265
|
+
const story = result.data.story;
|
|
266
|
+
expectTypeOf(story.content.component).toEqualTypeOf<'page' | 'hero'>();
|
|
267
|
+
|
|
268
|
+
if (story.content.component === 'page') {
|
|
269
|
+
expectTypeOf(story.content.headline).toEqualTypeOf<string | null | undefined>();
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
});
|
|
@@ -5,7 +5,7 @@ import { defineConfig } from 'vitest/config';
|
|
|
5
5
|
* Vitest config for end-to-end tests that hit the real Storyblok Management API.
|
|
6
6
|
*
|
|
7
7
|
* These tests are NOT run in CI. Trigger them manually:
|
|
8
|
-
* pnpm --filter @storyblok/
|
|
8
|
+
* pnpm --filter @storyblok/mapi-integration-tests test:e2e
|
|
9
9
|
*
|
|
10
10
|
* Prerequisites:
|
|
11
11
|
* - A .env.qa-engineer-manual file at the repo root with STORYBLOK_TOKEN and STORYBLOK_SPACE_ID.
|
|
@@ -18,7 +18,6 @@ export default defineConfig({
|
|
|
18
18
|
globals: true,
|
|
19
19
|
testTimeout: 60_000,
|
|
20
20
|
hookTimeout: 120_000,
|
|
21
|
-
// Run tests sequentially to avoid MAPI rate-limit issues
|
|
22
21
|
sequence: {
|
|
23
22
|
concurrent: false,
|
|
24
23
|
},
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="vitest" />
|
|
2
|
+
import { defineConfig } from 'vitest/config';
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
test: {
|
|
6
|
+
environment: 'node',
|
|
7
|
+
include: [],
|
|
8
|
+
typecheck: {
|
|
9
|
+
enabled: true,
|
|
10
|
+
include: ['./test/types/**/*.test-d.ts'],
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
});
|
package/test/GUIDE.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## Automated e2e tests
|
|
6
6
|
|
|
7
|
-
`
|
|
7
|
+
The `@storyblok/mapi-integration-tests` package (`packages/mapi-client/playground/integration-tests`) covers the full round-trip against a real Storyblok space in `test/specs/mapi-round-trip.spec.e2e.ts`:
|
|
8
8
|
|
|
9
9
|
- Seeds components, datasources, internal tags, presets, and stories via the MAPI.
|
|
10
10
|
- Validates runtime values, type narrowing, nested bloks (two- and three-level), unwhitelisted bloks, and update round-trips.
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
Run manually:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
pnpm --filter @storyblok/
|
|
16
|
+
pnpm --filter @storyblok/mapi-integration-tests test:e2e
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
### Prerequisites
|
|
@@ -48,7 +48,7 @@ node packages/cli/dist/index.mjs components push \
|
|
|
48
48
|
|
|
49
49
|
**Always push components before stories.** The CLI validates that each story's `content.component` (and any nested block components) exist in the space. Pushing stories first fails if the referenced components are not yet present.
|
|
50
50
|
|
|
51
|
-
You can do the same with stories
|
|
51
|
+
You can do the same with stories. **Story filename convention:** the CLI requires files named `{slug}_{uuid}.json` where the part after the last `_` exactly matches `story.uuid` in the JSON. Use hyphens (not underscores) in UUIDs. A mismatch causes Pass 2 of the push (reference mapping + content update) to silently skip all stories.
|
|
52
52
|
|
|
53
53
|
## Known quirks
|
|
54
54
|
|
|
@@ -56,4 +56,4 @@ You can do the same with stories and `defineStory`. **Story filename convention:
|
|
|
56
56
|
- **MAPI `stories.get` takes a positional ID, not an options object:** `client.stories.get(id)` — there is no `getBySlug`. The `list` response does not include `content`; call `get(id)` for full content.
|
|
57
57
|
- **MAPI client constructor uses `personalAccessToken`:** `createManagementApiClient({ personalAccessToken: '...', spaceId: ... })`.
|
|
58
58
|
- **Delete methods are `delete`:** Use `client.RESOURCE.delete(id)`.
|
|
59
|
-
- **Each story JSON must have a unique `id`.**
|
|
59
|
+
- **Each story JSON must have a unique `id`.** If multiple story files share the same `id`, the CLI's manifest maps all of them to the same `old_id` entry, causing "slug already taken" errors.
|
package/vitest.config.ts
CHANGED
|
@@ -4,8 +4,10 @@ import { defineConfig } from 'vitest/config';
|
|
|
4
4
|
export default defineConfig({
|
|
5
5
|
test: {
|
|
6
6
|
environment: 'node',
|
|
7
|
+
exclude: ['**/node_modules/**', '**/dist/**', './playground/**'],
|
|
7
8
|
typecheck: {
|
|
8
9
|
enabled: true,
|
|
10
|
+
exclude: ['**/node_modules/**', '**/dist/**', './playground/**'],
|
|
9
11
|
},
|
|
10
12
|
},
|
|
11
13
|
});
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
const require_utils_gen = require('../shared/client/utils.gen.cjs');
|
|
2
|
-
const require_client_gen = require('../shared/client/client.gen.cjs');
|
|
3
|
-
require('../shared/client/index.cjs');
|
|
4
|
-
|
|
5
|
-
//#region src/generated/asset_folders/client.gen.ts
|
|
6
|
-
const client = require_client_gen.createClient(require_utils_gen.createConfig({ baseUrl: "https://mapi.storyblok.com" }));
|
|
7
|
-
|
|
8
|
-
//#endregion
|
|
9
|
-
exports.client = client;
|
|
10
|
-
//# sourceMappingURL=client.gen.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.gen.cjs","names":["createClient","createConfig"],"sources":["../../../src/generated/asset_folders/client.gen.ts"],"sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type ClientOptions, type Config, createClient, createConfig } from '../shared/client';\nimport type { ClientOptions as ClientOptions2 } from './types.gen';\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (override?: Config<ClientOptions & T>) => Config<Required<ClientOptions> & T>;\n\nexport const client = createClient(createConfig<ClientOptions2>({ baseUrl: 'https://mapi.storyblok.com' }));\n"],"mappings":";;;;;AAeA,MAAa,SAASA,gCAAaC,+BAA6B,EAAE,SAAS,8BAA8B,CAAC,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { createConfig } from "../shared/client/utils.gen.mjs";
|
|
2
|
-
import { createClient } from "../shared/client/client.gen.mjs";
|
|
3
|
-
import "../shared/client/index.mjs";
|
|
4
|
-
|
|
5
|
-
//#region src/generated/asset_folders/client.gen.ts
|
|
6
|
-
const client = createClient(createConfig({ baseUrl: "https://mapi.storyblok.com" }));
|
|
7
|
-
|
|
8
|
-
//#endregion
|
|
9
|
-
export { client };
|
|
10
|
-
//# sourceMappingURL=client.gen.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.gen.mjs","names":[],"sources":["../../../src/generated/asset_folders/client.gen.ts"],"sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type ClientOptions, type Config, createClient, createConfig } from '../shared/client';\nimport type { ClientOptions as ClientOptions2 } from './types.gen';\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (override?: Config<ClientOptions & T>) => Config<Required<ClientOptions> & T>;\n\nexport const client = createClient(createConfig<ClientOptions2>({ baseUrl: 'https://mapi.storyblok.com' }));\n"],"mappings":";;;;;AAeA,MAAa,SAAS,aAAa,aAA6B,EAAE,SAAS,8BAA8B,CAAC,CAAC"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
const require_client_gen = require('./client.gen.cjs');
|
|
2
|
-
|
|
3
|
-
//#region src/generated/asset_folders/sdk.gen.ts
|
|
4
|
-
/**
|
|
5
|
-
* Retrieve Multiple Asset Folders
|
|
6
|
-
*
|
|
7
|
-
* An asset folder can be used to organize assets together. Each asset can belong to only one folder. Asset folders support hierarchical nesting via parent_id. This endpoint allows you to manage asset folders. You can use it to retrieve, create, update, or delete asset folders.
|
|
8
|
-
*/
|
|
9
|
-
const list = (options) => (options.client ?? require_client_gen.client).get({
|
|
10
|
-
security: [{
|
|
11
|
-
name: "Authorization",
|
|
12
|
-
type: "apiKey"
|
|
13
|
-
}, {
|
|
14
|
-
scheme: "bearer",
|
|
15
|
-
type: "http"
|
|
16
|
-
}],
|
|
17
|
-
url: "/v1/spaces/{space_id}/asset_folders",
|
|
18
|
-
...options
|
|
19
|
-
});
|
|
20
|
-
/**
|
|
21
|
-
* Create an Asset Folder
|
|
22
|
-
*
|
|
23
|
-
* An asset folder can be used to organize assets together. Each asset can belong to only one folder. Asset folders support hierarchical nesting via parent_id. This endpoint allows you to manage asset folders. You can use it to retrieve, create, update, or delete asset folders.
|
|
24
|
-
*/
|
|
25
|
-
const create = (options) => (options.client ?? require_client_gen.client).post({
|
|
26
|
-
security: [{
|
|
27
|
-
name: "Authorization",
|
|
28
|
-
type: "apiKey"
|
|
29
|
-
}, {
|
|
30
|
-
scheme: "bearer",
|
|
31
|
-
type: "http"
|
|
32
|
-
}],
|
|
33
|
-
url: "/v1/spaces/{space_id}/asset_folders",
|
|
34
|
-
...options,
|
|
35
|
-
headers: {
|
|
36
|
-
"Content-Type": "application/json",
|
|
37
|
-
...options.headers
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
/**
|
|
41
|
-
* Delete an Asset Folder
|
|
42
|
-
*
|
|
43
|
-
* Operations for a specific asset folder
|
|
44
|
-
*/
|
|
45
|
-
const delete_ = (options) => (options.client ?? require_client_gen.client).delete({
|
|
46
|
-
security: [{
|
|
47
|
-
name: "Authorization",
|
|
48
|
-
type: "apiKey"
|
|
49
|
-
}, {
|
|
50
|
-
scheme: "bearer",
|
|
51
|
-
type: "http"
|
|
52
|
-
}],
|
|
53
|
-
url: "/v1/spaces/{space_id}/asset_folders/{asset_folder_id}",
|
|
54
|
-
...options
|
|
55
|
-
});
|
|
56
|
-
/**
|
|
57
|
-
* Retrieve a Single Asset Folder
|
|
58
|
-
*
|
|
59
|
-
* Operations for a specific asset folder
|
|
60
|
-
*/
|
|
61
|
-
const get = (options) => (options.client ?? require_client_gen.client).get({
|
|
62
|
-
security: [{
|
|
63
|
-
name: "Authorization",
|
|
64
|
-
type: "apiKey"
|
|
65
|
-
}, {
|
|
66
|
-
scheme: "bearer",
|
|
67
|
-
type: "http"
|
|
68
|
-
}],
|
|
69
|
-
url: "/v1/spaces/{space_id}/asset_folders/{asset_folder_id}",
|
|
70
|
-
...options
|
|
71
|
-
});
|
|
72
|
-
/**
|
|
73
|
-
* Update an Asset Folder
|
|
74
|
-
*
|
|
75
|
-
* Operations for a specific asset folder
|
|
76
|
-
*/
|
|
77
|
-
const update = (options) => (options.client ?? require_client_gen.client).put({
|
|
78
|
-
security: [{
|
|
79
|
-
name: "Authorization",
|
|
80
|
-
type: "apiKey"
|
|
81
|
-
}, {
|
|
82
|
-
scheme: "bearer",
|
|
83
|
-
type: "http"
|
|
84
|
-
}],
|
|
85
|
-
url: "/v1/spaces/{space_id}/asset_folders/{asset_folder_id}",
|
|
86
|
-
...options,
|
|
87
|
-
headers: {
|
|
88
|
-
"Content-Type": "application/json",
|
|
89
|
-
...options.headers
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
//#endregion
|
|
94
|
-
exports.create = create;
|
|
95
|
-
exports.delete_ = delete_;
|
|
96
|
-
exports.get = get;
|
|
97
|
-
exports.list = list;
|
|
98
|
-
exports.update = update;
|
|
99
|
-
//# sourceMappingURL=sdk.gen.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.gen.cjs","names":["client"],"sources":["../../../src/generated/asset_folders/sdk.gen.ts"],"sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Client, Options as Options2, TDataShape } from '../shared/client';\nimport { client } from './client.gen';\nimport type { CreateData, CreateErrors, CreateResponses, DeleteData, DeleteErrors, DeleteResponses, GetData, GetErrors, GetResponses, ListData, ListErrors, ListResponses, UpdateData, UpdateErrors, UpdateResponses } from './types.gen';\n\nexport type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = Options2<TData, ThrowOnError> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client?: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: Record<string, unknown>;\n};\n\n/**\n * Retrieve Multiple Asset Folders\n *\n * An asset folder can be used to organize assets together. Each asset can belong to only one folder. Asset folders support hierarchical nesting via parent_id. This endpoint allows you to manage asset folders. You can use it to retrieve, create, update, or delete asset folders.\n */\nexport const list = <ThrowOnError extends boolean = false>(options: Options<ListData, ThrowOnError>) => (options.client ?? client).get<ListResponses, ListErrors, ThrowOnError>({\n security: [{ name: 'Authorization', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n url: '/v1/spaces/{space_id}/asset_folders',\n ...options\n});\n\n/**\n * Create an Asset Folder\n *\n * An asset folder can be used to organize assets together. Each asset can belong to only one folder. Asset folders support hierarchical nesting via parent_id. This endpoint allows you to manage asset folders. You can use it to retrieve, create, update, or delete asset folders.\n */\nexport const create = <ThrowOnError extends boolean = false>(options: Options<CreateData, ThrowOnError>) => (options.client ?? client).post<CreateResponses, CreateErrors, ThrowOnError>({\n security: [{ name: 'Authorization', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n url: '/v1/spaces/{space_id}/asset_folders',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Delete an Asset Folder\n *\n * Operations for a specific asset folder\n */\nexport const delete_ = <ThrowOnError extends boolean = false>(options: Options<DeleteData, ThrowOnError>) => (options.client ?? client).delete<DeleteResponses, DeleteErrors, ThrowOnError>({\n security: [{ name: 'Authorization', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n url: '/v1/spaces/{space_id}/asset_folders/{asset_folder_id}',\n ...options\n});\n\n/**\n * Retrieve a Single Asset Folder\n *\n * Operations for a specific asset folder\n */\nexport const get = <ThrowOnError extends boolean = false>(options: Options<GetData, ThrowOnError>) => (options.client ?? client).get<GetResponses, GetErrors, ThrowOnError>({\n security: [{ name: 'Authorization', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n url: '/v1/spaces/{space_id}/asset_folders/{asset_folder_id}',\n ...options\n});\n\n/**\n * Update an Asset Folder\n *\n * Operations for a specific asset folder\n */\nexport const update = <ThrowOnError extends boolean = false>(options: Options<UpdateData, ThrowOnError>) => (options.client ?? client).put<UpdateResponses, UpdateErrors, ThrowOnError>({\n security: [{ name: 'Authorization', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n url: '/v1/spaces/{space_id}/asset_folders/{asset_folder_id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n"],"mappings":";;;;;;;;AAyBA,MAAa,QAA8C,aAA8C,QAAQ,UAAUA,2BAAQ,IAA6C;CAC5K,UAAU,CAAC;EAAE,MAAM;EAAiB,MAAM;EAAU,EAAE;EAAE,QAAQ;EAAU,MAAM;EAAQ,CAAC;CACzF,KAAK;CACL,GAAG;CACN,CAAC;;;;;;AAOF,MAAa,UAAgD,aAAgD,QAAQ,UAAUA,2BAAQ,KAAkD;CACrL,UAAU,CAAC;EAAE,MAAM;EAAiB,MAAM;EAAU,EAAE;EAAE,QAAQ;EAAU,MAAM;EAAQ,CAAC;CACzF,KAAK;CACL,GAAG;CACH,SAAS;EACL,gBAAgB;EAChB,GAAG,QAAQ;EACd;CACJ,CAAC;;;;;;AAOF,MAAa,WAAiD,aAAgD,QAAQ,UAAUA,2BAAQ,OAAoD;CACxL,UAAU,CAAC;EAAE,MAAM;EAAiB,MAAM;EAAU,EAAE;EAAE,QAAQ;EAAU,MAAM;EAAQ,CAAC;CACzF,KAAK;CACL,GAAG;CACN,CAAC;;;;;;AAOF,MAAa,OAA6C,aAA6C,QAAQ,UAAUA,2BAAQ,IAA2C;CACxK,UAAU,CAAC;EAAE,MAAM;EAAiB,MAAM;EAAU,EAAE;EAAE,QAAQ;EAAU,MAAM;EAAQ,CAAC;CACzF,KAAK;CACL,GAAG;CACN,CAAC;;;;;;AAOF,MAAa,UAAgD,aAAgD,QAAQ,UAAUA,2BAAQ,IAAiD;CACpL,UAAU,CAAC;EAAE,MAAM;EAAiB,MAAM;EAAU,EAAE;EAAE,QAAQ;EAAU,MAAM;EAAQ,CAAC;CACzF,KAAK;CACL,GAAG;CACH,SAAS;EACL,gBAAgB;EAChB,GAAG,QAAQ;EACd;CACJ,CAAC"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { client } from "./client.gen.mjs";
|
|
2
|
-
|
|
3
|
-
//#region src/generated/asset_folders/sdk.gen.ts
|
|
4
|
-
/**
|
|
5
|
-
* Retrieve Multiple Asset Folders
|
|
6
|
-
*
|
|
7
|
-
* An asset folder can be used to organize assets together. Each asset can belong to only one folder. Asset folders support hierarchical nesting via parent_id. This endpoint allows you to manage asset folders. You can use it to retrieve, create, update, or delete asset folders.
|
|
8
|
-
*/
|
|
9
|
-
const list = (options) => (options.client ?? client).get({
|
|
10
|
-
security: [{
|
|
11
|
-
name: "Authorization",
|
|
12
|
-
type: "apiKey"
|
|
13
|
-
}, {
|
|
14
|
-
scheme: "bearer",
|
|
15
|
-
type: "http"
|
|
16
|
-
}],
|
|
17
|
-
url: "/v1/spaces/{space_id}/asset_folders",
|
|
18
|
-
...options
|
|
19
|
-
});
|
|
20
|
-
/**
|
|
21
|
-
* Create an Asset Folder
|
|
22
|
-
*
|
|
23
|
-
* An asset folder can be used to organize assets together. Each asset can belong to only one folder. Asset folders support hierarchical nesting via parent_id. This endpoint allows you to manage asset folders. You can use it to retrieve, create, update, or delete asset folders.
|
|
24
|
-
*/
|
|
25
|
-
const create = (options) => (options.client ?? client).post({
|
|
26
|
-
security: [{
|
|
27
|
-
name: "Authorization",
|
|
28
|
-
type: "apiKey"
|
|
29
|
-
}, {
|
|
30
|
-
scheme: "bearer",
|
|
31
|
-
type: "http"
|
|
32
|
-
}],
|
|
33
|
-
url: "/v1/spaces/{space_id}/asset_folders",
|
|
34
|
-
...options,
|
|
35
|
-
headers: {
|
|
36
|
-
"Content-Type": "application/json",
|
|
37
|
-
...options.headers
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
/**
|
|
41
|
-
* Delete an Asset Folder
|
|
42
|
-
*
|
|
43
|
-
* Operations for a specific asset folder
|
|
44
|
-
*/
|
|
45
|
-
const delete_ = (options) => (options.client ?? client).delete({
|
|
46
|
-
security: [{
|
|
47
|
-
name: "Authorization",
|
|
48
|
-
type: "apiKey"
|
|
49
|
-
}, {
|
|
50
|
-
scheme: "bearer",
|
|
51
|
-
type: "http"
|
|
52
|
-
}],
|
|
53
|
-
url: "/v1/spaces/{space_id}/asset_folders/{asset_folder_id}",
|
|
54
|
-
...options
|
|
55
|
-
});
|
|
56
|
-
/**
|
|
57
|
-
* Retrieve a Single Asset Folder
|
|
58
|
-
*
|
|
59
|
-
* Operations for a specific asset folder
|
|
60
|
-
*/
|
|
61
|
-
const get = (options) => (options.client ?? client).get({
|
|
62
|
-
security: [{
|
|
63
|
-
name: "Authorization",
|
|
64
|
-
type: "apiKey"
|
|
65
|
-
}, {
|
|
66
|
-
scheme: "bearer",
|
|
67
|
-
type: "http"
|
|
68
|
-
}],
|
|
69
|
-
url: "/v1/spaces/{space_id}/asset_folders/{asset_folder_id}",
|
|
70
|
-
...options
|
|
71
|
-
});
|
|
72
|
-
/**
|
|
73
|
-
* Update an Asset Folder
|
|
74
|
-
*
|
|
75
|
-
* Operations for a specific asset folder
|
|
76
|
-
*/
|
|
77
|
-
const update = (options) => (options.client ?? client).put({
|
|
78
|
-
security: [{
|
|
79
|
-
name: "Authorization",
|
|
80
|
-
type: "apiKey"
|
|
81
|
-
}, {
|
|
82
|
-
scheme: "bearer",
|
|
83
|
-
type: "http"
|
|
84
|
-
}],
|
|
85
|
-
url: "/v1/spaces/{space_id}/asset_folders/{asset_folder_id}",
|
|
86
|
-
...options,
|
|
87
|
-
headers: {
|
|
88
|
-
"Content-Type": "application/json",
|
|
89
|
-
...options.headers
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
//#endregion
|
|
94
|
-
export { create, delete_, get, list, update };
|
|
95
|
-
//# sourceMappingURL=sdk.gen.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.gen.mjs","names":[],"sources":["../../../src/generated/asset_folders/sdk.gen.ts"],"sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Client, Options as Options2, TDataShape } from '../shared/client';\nimport { client } from './client.gen';\nimport type { CreateData, CreateErrors, CreateResponses, DeleteData, DeleteErrors, DeleteResponses, GetData, GetErrors, GetResponses, ListData, ListErrors, ListResponses, UpdateData, UpdateErrors, UpdateResponses } from './types.gen';\n\nexport type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = Options2<TData, ThrowOnError> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client?: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: Record<string, unknown>;\n};\n\n/**\n * Retrieve Multiple Asset Folders\n *\n * An asset folder can be used to organize assets together. Each asset can belong to only one folder. Asset folders support hierarchical nesting via parent_id. This endpoint allows you to manage asset folders. You can use it to retrieve, create, update, or delete asset folders.\n */\nexport const list = <ThrowOnError extends boolean = false>(options: Options<ListData, ThrowOnError>) => (options.client ?? client).get<ListResponses, ListErrors, ThrowOnError>({\n security: [{ name: 'Authorization', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n url: '/v1/spaces/{space_id}/asset_folders',\n ...options\n});\n\n/**\n * Create an Asset Folder\n *\n * An asset folder can be used to organize assets together. Each asset can belong to only one folder. Asset folders support hierarchical nesting via parent_id. This endpoint allows you to manage asset folders. You can use it to retrieve, create, update, or delete asset folders.\n */\nexport const create = <ThrowOnError extends boolean = false>(options: Options<CreateData, ThrowOnError>) => (options.client ?? client).post<CreateResponses, CreateErrors, ThrowOnError>({\n security: [{ name: 'Authorization', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n url: '/v1/spaces/{space_id}/asset_folders',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n\n/**\n * Delete an Asset Folder\n *\n * Operations for a specific asset folder\n */\nexport const delete_ = <ThrowOnError extends boolean = false>(options: Options<DeleteData, ThrowOnError>) => (options.client ?? client).delete<DeleteResponses, DeleteErrors, ThrowOnError>({\n security: [{ name: 'Authorization', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n url: '/v1/spaces/{space_id}/asset_folders/{asset_folder_id}',\n ...options\n});\n\n/**\n * Retrieve a Single Asset Folder\n *\n * Operations for a specific asset folder\n */\nexport const get = <ThrowOnError extends boolean = false>(options: Options<GetData, ThrowOnError>) => (options.client ?? client).get<GetResponses, GetErrors, ThrowOnError>({\n security: [{ name: 'Authorization', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n url: '/v1/spaces/{space_id}/asset_folders/{asset_folder_id}',\n ...options\n});\n\n/**\n * Update an Asset Folder\n *\n * Operations for a specific asset folder\n */\nexport const update = <ThrowOnError extends boolean = false>(options: Options<UpdateData, ThrowOnError>) => (options.client ?? client).put<UpdateResponses, UpdateErrors, ThrowOnError>({\n security: [{ name: 'Authorization', type: 'apiKey' }, { scheme: 'bearer', type: 'http' }],\n url: '/v1/spaces/{space_id}/asset_folders/{asset_folder_id}',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers\n }\n});\n"],"mappings":";;;;;;;;AAyBA,MAAa,QAA8C,aAA8C,QAAQ,UAAU,QAAQ,IAA6C;CAC5K,UAAU,CAAC;EAAE,MAAM;EAAiB,MAAM;EAAU,EAAE;EAAE,QAAQ;EAAU,MAAM;EAAQ,CAAC;CACzF,KAAK;CACL,GAAG;CACN,CAAC;;;;;;AAOF,MAAa,UAAgD,aAAgD,QAAQ,UAAU,QAAQ,KAAkD;CACrL,UAAU,CAAC;EAAE,MAAM;EAAiB,MAAM;EAAU,EAAE;EAAE,QAAQ;EAAU,MAAM;EAAQ,CAAC;CACzF,KAAK;CACL,GAAG;CACH,SAAS;EACL,gBAAgB;EAChB,GAAG,QAAQ;EACd;CACJ,CAAC;;;;;;AAOF,MAAa,WAAiD,aAAgD,QAAQ,UAAU,QAAQ,OAAoD;CACxL,UAAU,CAAC;EAAE,MAAM;EAAiB,MAAM;EAAU,EAAE;EAAE,QAAQ;EAAU,MAAM;EAAQ,CAAC;CACzF,KAAK;CACL,GAAG;CACN,CAAC;;;;;;AAOF,MAAa,OAA6C,aAA6C,QAAQ,UAAU,QAAQ,IAA2C;CACxK,UAAU,CAAC;EAAE,MAAM;EAAiB,MAAM;EAAU,EAAE;EAAE,QAAQ;EAAU,MAAM;EAAQ,CAAC;CACzF,KAAK;CACL,GAAG;CACN,CAAC;;;;;;AAOF,MAAa,UAAgD,aAAgD,QAAQ,UAAU,QAAQ,IAAiD;CACpL,UAAU,CAAC;EAAE,MAAM;EAAiB,MAAM;EAAU,EAAE;EAAE,QAAQ;EAAU,MAAM;EAAQ,CAAC;CACzF,KAAK;CACL,GAAG;CACH,SAAS;EACL,gBAAgB;EAChB,GAAG,QAAQ;EACd;CACJ,CAAC"}
|