sb-mig 5.0.8-beta.1 → 5.0.8-beta.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.
- package/dist/api/assets/assets.js +10 -10
- package/dist/api/assets/assets.types.d.ts +3 -0
- package/dist/api/data-migration/component-data-migration.js +5 -5
- package/dist/api/datasources/datasources.d.ts +1 -3
- package/dist/api/datasources/datasources.js +0 -36
- package/dist/api/datasources/index.d.ts +1 -1
- package/dist/api/datasources/index.js +1 -1
- package/dist/api/managementApi.d.ts +0 -4
- package/dist/api/migrate.js +4 -4
- package/dist/api/migrate.types.d.ts +1 -1
- package/dist/api/presets/componentPresets.js +4 -7
- package/dist/api/presets/presets.js +1 -2
- package/dist/api/roles/index.d.ts +1 -1
- package/dist/api/roles/index.js +1 -1
- package/dist/api/roles/roles.d.ts +1 -3
- package/dist/api/roles/roles.js +0 -41
- package/dist/api/roles/roles.types.d.ts +1 -1
- package/dist/api/stories/backup.js +2 -2
- package/dist/api/stories/stories.js +4 -6
- package/dist/api/testApi.d.ts +70 -0
- package/dist/api/testApi.js +20 -0
- package/dist/api/utils/request.d.ts +2 -4
- package/dist/cli/api-config.js +1 -0
- package/dist/cli/commands/backup.js +14 -14
- package/dist/cli/commands/discover.js +3 -2
- package/dist/cli/commands/migrate.js +7 -6
- package/dist/cli/commands/migrations.js +1 -1
- package/dist/cli/commands/revert.js +5 -4
- package/dist/cli/commands/sync.js +10 -7
- package/dist/cli/datasources/sync.d.ts +3 -0
- package/dist/cli/datasources/sync.js +37 -0
- package/dist/cli/helpers.d.ts +1 -0
- package/dist/cli/helpers.js +36 -0
- package/dist/cli/roles/sync.d.ts +3 -0
- package/dist/cli/roles/sync.js +42 -0
- package/dist/{utils → cli/utils}/discover.js +3 -3
- package/dist/config/config.d.ts +3 -5
- package/dist/config/config.js +2 -5
- package/dist/config/constants.d.ts +4 -0
- package/dist/config/constants.js +4 -0
- package/dist/config/defaultConfig.d.ts +2 -0
- package/dist/config/defaultConfig.js +51 -0
- package/dist/config/helper.d.ts +2 -2
- package/dist/config/helper.js +2 -51
- package/dist/utils/files.d.ts +5 -4
- package/dist/utils/files.js +10 -9
- package/dist/utils/others.d.ts +3 -3
- package/dist/utils/others.js +2 -39
- package/package.json +1 -1
- /package/dist/{utils → cli/utils}/discover.d.ts +0 -0
|
@@ -2,11 +2,11 @@ import fs from "fs";
|
|
|
2
2
|
import https from "https";
|
|
3
3
|
import path from "path";
|
|
4
4
|
import FormData from "form-data";
|
|
5
|
-
import storyblokConfig from "../../config/config.js";
|
|
6
5
|
import { createDir, isDirectoryExists } from "../../utils/files.js";
|
|
7
6
|
import Logger from "../../utils/logger.js";
|
|
8
7
|
// GET
|
|
9
|
-
export const getAllAssets = async (
|
|
8
|
+
export const getAllAssets = async (args, config) => {
|
|
9
|
+
const { spaceId, search } = args;
|
|
10
10
|
const { sbApi } = config;
|
|
11
11
|
return sbApi
|
|
12
12
|
.get(`spaces/${spaceId}/assets/`, {
|
|
@@ -36,7 +36,7 @@ export const getAssetByName = async ({ spaceId, fileName }, config) => {
|
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
38
|
const requestSignedUploadUrl = ({ spaceId, payload }, config) => {
|
|
39
|
-
const { sbApi } = config;
|
|
39
|
+
const { sbApi, debug } = config;
|
|
40
40
|
const { filename: _1, asset_folder_id, ext_id, space_id, ...restPayload } = payload;
|
|
41
41
|
const filename = getFileName(payload.filename);
|
|
42
42
|
const size = getSizeFromURL(payload.filename);
|
|
@@ -47,7 +47,7 @@ const requestSignedUploadUrl = ({ spaceId, payload }, config) => {
|
|
|
47
47
|
...restPayload,
|
|
48
48
|
})
|
|
49
49
|
.then((signedResponseObject) => {
|
|
50
|
-
if (
|
|
50
|
+
if (debug) {
|
|
51
51
|
Logger.log(`Signed upload URL has been requested for ${filename}.`);
|
|
52
52
|
}
|
|
53
53
|
return signedResponseObject.data; // this is very bad... but storyblok-js-client types are pretty broken
|
|
@@ -91,13 +91,13 @@ const getSizeFromURL = (fileUrl) => {
|
|
|
91
91
|
const sizePos = data.length - 3;
|
|
92
92
|
return data[sizePos];
|
|
93
93
|
};
|
|
94
|
-
const downloadAsset = async (
|
|
94
|
+
const downloadAsset = async (args, config) => {
|
|
95
|
+
const { debug, sbmigWorkingDirectory } = config;
|
|
96
|
+
const { payload } = args;
|
|
95
97
|
const fileName = getFileName(payload.filename);
|
|
96
98
|
const fileUrl = payload.filename;
|
|
97
|
-
const downloadedAssetsFolder = path.join(
|
|
98
|
-
Logger.log(`Downloading ${fileName} asset ${
|
|
99
|
-
? `from ${fileUrl} to ${downloadedAssetsFolder}`
|
|
100
|
-
: ""}`);
|
|
99
|
+
const downloadedAssetsFolder = path.join(sbmigWorkingDirectory, "downloadedAssets");
|
|
100
|
+
Logger.log(`Downloading ${fileName} asset ${debug ? `from ${fileUrl} to ${downloadedAssetsFolder}` : ""}`);
|
|
101
101
|
if (!isDirectoryExists(downloadedAssetsFolder)) {
|
|
102
102
|
await createDir(downloadedAssetsFolder);
|
|
103
103
|
}
|
|
@@ -119,7 +119,7 @@ const downloadAsset = async ({ payload }) => {
|
|
|
119
119
|
});
|
|
120
120
|
};
|
|
121
121
|
export const migrateAsset = async ({ migrateTo, payload, syncDirection }, config) => {
|
|
122
|
-
const pathToFile = await downloadAsset({ payload });
|
|
122
|
+
const pathToFile = await downloadAsset({ payload }, config);
|
|
123
123
|
if (syncDirection === "fromSpaceToSpace") {
|
|
124
124
|
const signedResponseObject = await requestSignedUploadUrl({
|
|
125
125
|
spaceId: migrateTo,
|
|
@@ -63,3 +63,6 @@ export type RequestSignedUploadUrl = ({ spaceId, payload, }: {
|
|
|
63
63
|
spaceId: string;
|
|
64
64
|
payload: AssetPayload;
|
|
65
65
|
}, config: RequestBaseConfig) => Promise<any>;
|
|
66
|
+
export type DownloadAsset = (args: {
|
|
67
|
+
payload: AssetPayload;
|
|
68
|
+
}, config: RequestBaseConfig) => Promise<string>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from "path";
|
|
2
2
|
import chalk from "chalk";
|
|
3
|
+
import { discoverMigrationConfig, discoverStories, LOOKUP_TYPE, SCOPE, } from "../../cli/utils/discover.js";
|
|
3
4
|
import storyblokConfig from "../../config/config.js";
|
|
4
|
-
import { discoverMigrationConfig, discoverStories, LOOKUP_TYPE, SCOPE, } from "../../utils/discover.js";
|
|
5
5
|
import { createAndSaveToFile } from "../../utils/files.js";
|
|
6
6
|
import Logger from "../../utils/logger.js";
|
|
7
7
|
import { getFilesContentWithRequire, isObjectEmpty } from "../../utils/main.js";
|
|
@@ -193,7 +193,7 @@ export const doTheMigration = async ({ itemType = "story", from, itemsToMigrate,
|
|
|
193
193
|
filename: `${from}---${itemType}-to-migrate`,
|
|
194
194
|
folder: "migrations",
|
|
195
195
|
res: notNullMigratedItems,
|
|
196
|
-
});
|
|
196
|
+
}, config);
|
|
197
197
|
await modifyOrCreateAppliedMigrationsFile(migrationConfig, itemType);
|
|
198
198
|
if (itemType === "story") {
|
|
199
199
|
await managementApi.stories.updateStories({
|
|
@@ -210,7 +210,7 @@ export const doTheMigration = async ({ itemType = "story", from, itemsToMigrate,
|
|
|
210
210
|
}, config);
|
|
211
211
|
}
|
|
212
212
|
};
|
|
213
|
-
const saveBackupToFile = async ({ itemType, res, folder, filename,
|
|
213
|
+
const saveBackupToFile = async ({ itemType, res, folder, filename }, config) => {
|
|
214
214
|
await createAndSaveToFile({
|
|
215
215
|
ext: "json",
|
|
216
216
|
datestamp: true,
|
|
@@ -218,7 +218,7 @@ const saveBackupToFile = async ({ itemType, res, folder, filename, }) => {
|
|
|
218
218
|
filename,
|
|
219
219
|
folder,
|
|
220
220
|
res: res,
|
|
221
|
-
});
|
|
221
|
+
}, config);
|
|
222
222
|
};
|
|
223
223
|
export const migrateProvidedComponentsDataInStories = async ({ itemType, migrationConfig, migrateFrom, from, to, componentsToMigrate, }, config) => {
|
|
224
224
|
const migrationConfigFileContent = prepareMigrationConfig({
|
|
@@ -257,7 +257,7 @@ export const migrateProvidedComponentsDataInStories = async ({ itemType, migrati
|
|
|
257
257
|
filename: `before__${migrationConfig}__${from}`,
|
|
258
258
|
folder: backupFolder,
|
|
259
259
|
res: itemsToMigrate,
|
|
260
|
-
});
|
|
260
|
+
}, config);
|
|
261
261
|
await doTheMigration({
|
|
262
262
|
itemType,
|
|
263
263
|
itemsToMigrate,
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import type { CreateDatasource, GetAllDatasources, GetDatasource,
|
|
1
|
+
import type { CreateDatasource, GetAllDatasources, GetDatasource, SyncDatasources, UpdateDatasource } from "./datasources.types.js";
|
|
2
2
|
export declare const getAllDatasources: GetAllDatasources;
|
|
3
3
|
export declare const getDatasource: GetDatasource;
|
|
4
4
|
export declare const createDatasource: CreateDatasource;
|
|
5
5
|
export declare const updateDatasource: UpdateDatasource;
|
|
6
6
|
export declare const syncDatasources: SyncDatasources;
|
|
7
|
-
export declare const syncProvidedDatasources: SyncProvidedDatasources;
|
|
8
|
-
export declare const syncAllDatasources: SyncAllDatasources;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { discoverDatasources, discoverManyDatasources, LOOKUP_TYPE, SCOPE, } from "../../utils/discover.js";
|
|
2
1
|
import Logger from "../../utils/logger.js";
|
|
3
2
|
import { getFilesContentWithRequire } from "../../utils/main.js";
|
|
4
3
|
import { getAllItemsWithPagination } from "../utils/request.js";
|
|
@@ -142,38 +141,3 @@ export const syncDatasources = async (args, config) => {
|
|
|
142
141
|
return false;
|
|
143
142
|
});
|
|
144
143
|
};
|
|
145
|
-
export const syncProvidedDatasources = async (args, config) => {
|
|
146
|
-
const { datasources } = args;
|
|
147
|
-
const allLocalDatasources = await discoverManyDatasources({
|
|
148
|
-
scope: SCOPE.local,
|
|
149
|
-
type: LOOKUP_TYPE.fileName,
|
|
150
|
-
fileNames: datasources,
|
|
151
|
-
});
|
|
152
|
-
const allExternalDatasources = await discoverManyDatasources({
|
|
153
|
-
scope: SCOPE.external,
|
|
154
|
-
type: LOOKUP_TYPE.fileName,
|
|
155
|
-
fileNames: datasources,
|
|
156
|
-
});
|
|
157
|
-
syncDatasources({
|
|
158
|
-
providedDatasources: [
|
|
159
|
-
...allLocalDatasources,
|
|
160
|
-
...allExternalDatasources,
|
|
161
|
-
],
|
|
162
|
-
}, config);
|
|
163
|
-
};
|
|
164
|
-
export const syncAllDatasources = (config) => {
|
|
165
|
-
const allLocalDatasources = discoverDatasources({
|
|
166
|
-
scope: SCOPE.local,
|
|
167
|
-
type: LOOKUP_TYPE.fileName,
|
|
168
|
-
});
|
|
169
|
-
const allExternalDatasources = discoverDatasources({
|
|
170
|
-
scope: SCOPE.external,
|
|
171
|
-
type: LOOKUP_TYPE.fileName,
|
|
172
|
-
});
|
|
173
|
-
syncDatasources({
|
|
174
|
-
providedDatasources: [
|
|
175
|
-
...allLocalDatasources,
|
|
176
|
-
...allExternalDatasources,
|
|
177
|
-
],
|
|
178
|
-
}, config);
|
|
179
|
-
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { createDatasource, getDatasource, getAllDatasources,
|
|
1
|
+
export { createDatasource, getDatasource, getAllDatasources, syncDatasources, updateDatasource, } from "./datasources.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { createDatasource, getDatasource, getAllDatasources,
|
|
1
|
+
export { createDatasource, getDatasource, getAllDatasources, syncDatasources, updateDatasource, } from "./datasources.js";
|
|
@@ -25,9 +25,7 @@ export declare const managementApi: {
|
|
|
25
25
|
createDatasource: import("./datasources/datasources.types.js").CreateDatasource;
|
|
26
26
|
getDatasource: import("./datasources/datasources.types.js").GetDatasource;
|
|
27
27
|
getAllDatasources: import("./datasources/datasources.types.js").GetAllDatasources;
|
|
28
|
-
syncAllDatasources: import("./datasources/datasources.types.js").SyncAllDatasources;
|
|
29
28
|
syncDatasources: import("./datasources/datasources.types.js").SyncDatasources;
|
|
30
|
-
syncProvidedDatasources: import("./datasources/datasources.types.js").SyncProvidedDatasources;
|
|
31
29
|
updateDatasource: import("./datasources/datasources.types.js").UpdateDatasource;
|
|
32
30
|
};
|
|
33
31
|
plugins: {
|
|
@@ -50,8 +48,6 @@ export declare const managementApi: {
|
|
|
50
48
|
createRole: import("./roles/roles.types.js").CreateRole;
|
|
51
49
|
getRole: import("./roles/roles.types.js").GetRole;
|
|
52
50
|
getAllRoles: import("./roles/roles.types.js").GetAllRoles;
|
|
53
|
-
syncAllRoles: import("./roles/roles.types.js").SyncAllRoles;
|
|
54
|
-
syncProvidedRoles: import("./roles/roles.types.js").SyncProvidedRoles;
|
|
55
51
|
syncRoles: import("./roles/roles.types.js").SyncRoles;
|
|
56
52
|
updateRole: import("./roles/roles.types.js").UpdateRole;
|
|
57
53
|
};
|
package/dist/api/migrate.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { apiConfig } from "../cli/api-config.js";
|
|
2
|
-
import
|
|
3
|
-
import { compare, discover, discoverMany, discoverManyByPackageName, discoverStories, LOOKUP_TYPE, SCOPE, } from "../utils/discover.js";
|
|
2
|
+
import { compare, discover, discoverMany, discoverManyByPackageName, discoverStories, LOOKUP_TYPE, SCOPE, } from "../cli/utils/discover.js";
|
|
4
3
|
import { dumpToFile } from "../utils/files.js";
|
|
5
4
|
import Logger from "../utils/logger.js";
|
|
6
5
|
import { getFileContentWithRequire, getFilesContentWithRequire, isObjectEmpty, } from "../utils/main.js";
|
|
@@ -188,12 +187,12 @@ const syncStories = async ({ transmission: { from, to }, stories, toSpaceId }, c
|
|
|
188
187
|
.map((item) => item.parent_id === 0 ? { ...item, parent_id: null } : item);
|
|
189
188
|
Logger.warning(`Amount of all stories to migrate: ${storiesToPass.length}`);
|
|
190
189
|
const storiesToPassJson = JSON.stringify(storiesToPass, null, 2);
|
|
191
|
-
if (
|
|
190
|
+
if (config.debug) {
|
|
192
191
|
dumpToFile("storiesToPass.json", storiesToPassJson);
|
|
193
192
|
}
|
|
194
193
|
const tree = createTree(storiesToPass);
|
|
195
194
|
const jsonString = JSON.stringify(tree, null, 2);
|
|
196
|
-
if (
|
|
195
|
+
if (config.debug) {
|
|
197
196
|
dumpToFile("tree.json", jsonString);
|
|
198
197
|
}
|
|
199
198
|
await traverseAndCreate({ tree, realParentId: null, spaceId: toSpaceId }, config);
|
|
@@ -209,6 +208,7 @@ export const syncContent = async ({ type, transmission, syncDirection, filename
|
|
|
209
208
|
}
|
|
210
209
|
if (syncDirection === "fromSpaceToSpace") {
|
|
211
210
|
const stories = await getAllStories({
|
|
211
|
+
...config,
|
|
212
212
|
spaceId: transmission.from,
|
|
213
213
|
sbApi: config.sbApi,
|
|
214
214
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RequestBaseConfig } from "./utils/request.js";
|
|
2
2
|
import type { SyncDirection } from "../cli/sync.types.js";
|
|
3
|
-
import type { OneComponent } from "../utils/discover.js";
|
|
3
|
+
import type { OneComponent } from "../cli/utils/discover.js";
|
|
4
4
|
export type SyncComponents = (specifiedComponents: OneComponent[], presets: boolean, config: RequestBaseConfig) => Promise<any>;
|
|
5
5
|
export type SyncAllComponents = (presets: boolean, config: RequestBaseConfig) => Promise<any>;
|
|
6
6
|
export type SyncProvidedComponents = (presets: boolean, components: string[], packageName: boolean, config: RequestBaseConfig) => Promise<any>;
|
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
import Logger from "../../utils/logger.js";
|
|
2
|
-
import {
|
|
2
|
+
import { getAllComponents } from "../components/components.js";
|
|
3
|
+
import { getPreset } from "./presets.js";
|
|
3
4
|
export const getComponentPresets = (componentName, config) => {
|
|
4
5
|
Logger.log(`Trying to get all '${componentName}' presets.`);
|
|
5
|
-
return
|
|
6
|
-
.getAllComponents(config)
|
|
7
|
-
.then(async (res) => {
|
|
6
|
+
return getAllComponents(config).then(async (res) => {
|
|
8
7
|
const componentPresets = res.filter((component) => component.name === componentName);
|
|
9
8
|
if (componentPresets.length > 0) {
|
|
10
9
|
if (componentPresets[0].all_presets.length === 0) {
|
|
11
10
|
Logger.warning(`There is no presets for: '${componentName}' component`);
|
|
12
11
|
return false;
|
|
13
12
|
}
|
|
14
|
-
return Promise.all(componentPresets[0].all_presets.map((preset) =>
|
|
15
|
-
.getPreset({ presetId: preset.id }, config)
|
|
16
|
-
.catch((err) => Logger.error(err))));
|
|
13
|
+
return Promise.all(componentPresets[0].all_presets.map((preset) => getPreset({ presetId: preset.id }, config).catch((err) => Logger.error(err))));
|
|
17
14
|
}
|
|
18
15
|
Logger.warning(`There is no '${componentName}' component`);
|
|
19
16
|
return false;
|
|
@@ -70,13 +70,12 @@ export const updatePreset = (args, config) => {
|
|
|
70
70
|
});
|
|
71
71
|
};
|
|
72
72
|
export const updatePresets = (args, config) => {
|
|
73
|
-
const { sbApi } = config;
|
|
74
73
|
const { presets, spaceId } = args;
|
|
75
74
|
return Promise.allSettled(presets.map(async (item) => {
|
|
76
75
|
return updatePreset({
|
|
77
76
|
p: {
|
|
78
77
|
preset: item,
|
|
79
78
|
},
|
|
80
|
-
}, {
|
|
79
|
+
}, { ...config, spaceId });
|
|
81
80
|
}));
|
|
82
81
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { createRole, getRole, getAllRoles,
|
|
1
|
+
export { createRole, getRole, getAllRoles, syncRoles, updateRole, } from "./roles.js";
|
package/dist/api/roles/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { createRole, getRole, getAllRoles,
|
|
1
|
+
export { createRole, getRole, getAllRoles, syncRoles, updateRole, } from "./roles.js";
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import type { CreateRole, GetAllRoles, GetRole,
|
|
1
|
+
import type { CreateRole, GetAllRoles, GetRole, SyncRoles, UpdateRole } from "./roles.types.js";
|
|
2
2
|
export declare const createRole: CreateRole;
|
|
3
3
|
export declare const updateRole: UpdateRole;
|
|
4
4
|
export declare const getAllRoles: GetAllRoles;
|
|
5
5
|
export declare const getRole: GetRole;
|
|
6
6
|
export declare const syncRoles: SyncRoles;
|
|
7
|
-
export declare const syncAllRoles: SyncAllRoles;
|
|
8
|
-
export declare const syncProvidedRoles: SyncProvidedRoles;
|
package/dist/api/roles/roles.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { LOOKUP_TYPE, SCOPE, compare, discoverRoles, discoverManyRoles, } from "../../utils/discover.js";
|
|
2
1
|
import Logger from "../../utils/logger.js";
|
|
3
2
|
import { getFileContentWithRequire } from "../../utils/main.js";
|
|
4
3
|
import { getAllItemsWithPagination } from "../utils/request.js";
|
|
@@ -96,43 +95,3 @@ export const syncRoles = async ({ specifiedRoles }, config) => {
|
|
|
96
95
|
await createRole(role, config);
|
|
97
96
|
});
|
|
98
97
|
};
|
|
99
|
-
export const syncAllRoles = async (config) => {
|
|
100
|
-
// #1: discover all external .roles.sb.js files
|
|
101
|
-
const allLocalSbComponentsSchemaFiles = discoverRoles({
|
|
102
|
-
scope: SCOPE.local,
|
|
103
|
-
type: LOOKUP_TYPE.fileName,
|
|
104
|
-
});
|
|
105
|
-
// #2: discover all local .roles.sb.js files
|
|
106
|
-
const allExternalSbComponentsSchemaFiles = discoverRoles({
|
|
107
|
-
scope: SCOPE.external,
|
|
108
|
-
type: LOOKUP_TYPE.fileName,
|
|
109
|
-
});
|
|
110
|
-
// #3: compare results, prefare local ones (so we have to create final external paths array and local array of things to sync from where)
|
|
111
|
-
const { local, external } = compare({
|
|
112
|
-
local: allLocalSbComponentsSchemaFiles,
|
|
113
|
-
external: allExternalSbComponentsSchemaFiles,
|
|
114
|
-
});
|
|
115
|
-
// #4: sync - do all stuff already done (groups resolving, and so on)
|
|
116
|
-
await syncRoles({ specifiedRoles: [...local, ...external] }, config);
|
|
117
|
-
};
|
|
118
|
-
export const syncProvidedRoles = async ({ roles }, config) => {
|
|
119
|
-
// #1: discover all external .sb.js files
|
|
120
|
-
const allLocalSbComponentsSchemaFiles = await discoverManyRoles({
|
|
121
|
-
scope: SCOPE.local,
|
|
122
|
-
type: LOOKUP_TYPE.fileName,
|
|
123
|
-
fileNames: roles,
|
|
124
|
-
});
|
|
125
|
-
// #2: discover all local .sb.js files
|
|
126
|
-
const allExternalSbComponentsSchemaFiles = await discoverManyRoles({
|
|
127
|
-
scope: SCOPE.external,
|
|
128
|
-
type: LOOKUP_TYPE.fileName,
|
|
129
|
-
fileNames: roles,
|
|
130
|
-
});
|
|
131
|
-
// #3: compare results, prefer local ones (so we have to create final external paths array and local array of things to sync from where)
|
|
132
|
-
const { local, external } = compare({
|
|
133
|
-
local: allLocalSbComponentsSchemaFiles,
|
|
134
|
-
external: allExternalSbComponentsSchemaFiles,
|
|
135
|
-
});
|
|
136
|
-
// #4: sync - do all stuff already done (groups resolving, and so on)
|
|
137
|
-
await syncRoles({ specifiedRoles: [...local, ...external] }, config);
|
|
138
|
-
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { OneComponent } from "../../utils/discover.js";
|
|
1
|
+
import type { OneComponent } from "../../cli/utils/discover.js";
|
|
2
2
|
import type { RequestBaseConfig } from "../utils/request.js";
|
|
3
3
|
export type GetRole = (roleName: string | undefined, config: RequestBaseConfig) => Promise<void>;
|
|
4
4
|
export type GetAllRoles = (config: RequestBaseConfig) => Promise<any>;
|
|
@@ -3,7 +3,7 @@ import Logger from "../../utils/logger.js";
|
|
|
3
3
|
import { getAllStories } from "./stories.js";
|
|
4
4
|
export const backupStories = async ({ suffix, spaceId, filename }, config) => {
|
|
5
5
|
Logger.log(`Making backup of your stories.`);
|
|
6
|
-
await getAllStories({
|
|
6
|
+
await getAllStories({ ...config, spaceId })
|
|
7
7
|
.then(async (res) => {
|
|
8
8
|
await createAndSaveToFile({
|
|
9
9
|
ext: "json",
|
|
@@ -12,7 +12,7 @@ export const backupStories = async ({ suffix, spaceId, filename }, config) => {
|
|
|
12
12
|
suffix,
|
|
13
13
|
folder: "stories",
|
|
14
14
|
res,
|
|
15
|
-
});
|
|
15
|
+
}, config);
|
|
16
16
|
})
|
|
17
17
|
.catch((err) => {
|
|
18
18
|
Logger.error(err);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import storyblokConfig from "../../config/config.js";
|
|
3
2
|
import Logger from "../../utils/logger.js";
|
|
4
3
|
import { getAllItemsWithPagination } from "../utils/request.js";
|
|
5
4
|
export const removeStory = (args, config) => {
|
|
@@ -55,14 +54,14 @@ export const getAllStories = async (config) => {
|
|
|
55
54
|
};
|
|
56
55
|
// GET
|
|
57
56
|
export const getStoryById = (storyId, config) => {
|
|
58
|
-
const { spaceId, sbApi } = config;
|
|
59
|
-
if (
|
|
57
|
+
const { spaceId, sbApi, debug } = config;
|
|
58
|
+
if (debug) {
|
|
60
59
|
console.log(`Trying to get Story with id: ${storyId} from space: ${spaceId}, to fill content field.`);
|
|
61
60
|
}
|
|
62
61
|
return sbApi
|
|
63
62
|
.get(`spaces/${spaceId}/stories/${storyId}`)
|
|
64
63
|
.then((res) => {
|
|
65
|
-
if (
|
|
64
|
+
if (debug) {
|
|
66
65
|
Logger.success(`Successfuly fetched story with content, with id: ${storyId} from space: ${spaceId}.`);
|
|
67
66
|
}
|
|
68
67
|
return res.data;
|
|
@@ -111,11 +110,10 @@ export const updateStory = (content, storyId, options, config) => {
|
|
|
111
110
|
.catch((err) => console.error(err));
|
|
112
111
|
};
|
|
113
112
|
export const updateStories = (args, config) => {
|
|
114
|
-
const { sbApi } = config;
|
|
115
113
|
const { stories, options, spaceId } = args;
|
|
116
114
|
return Promise.allSettled(
|
|
117
115
|
// Run through stories, and update the space with migrated version of stories
|
|
118
116
|
stories.map(async (stories) => {
|
|
119
|
-
return updateStory(stories.story, stories.story.id, { publish: options.publish }, {
|
|
117
|
+
return updateStory(stories.story, stories.story.id, { publish: options.publish }, { ...config, spaceId });
|
|
120
118
|
}));
|
|
121
119
|
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export declare const testApi: {
|
|
2
|
+
assets: {
|
|
3
|
+
getAllAssets: import("./assets/assets.types.js").GetAllAssets;
|
|
4
|
+
migrateAsset: import("./assets/assets.types.js").MigrateAsset;
|
|
5
|
+
getAsset: (assetName: string | undefined) => Promise<void>;
|
|
6
|
+
getAssetById: import("./assets/assets.types.js").GetAssetById;
|
|
7
|
+
getAssetByName: import("./assets/assets.types.js").GetAssetByName;
|
|
8
|
+
};
|
|
9
|
+
auth: {
|
|
10
|
+
getCurrentUser: import("./auth/auth.types.js").GetCurrentUser;
|
|
11
|
+
hasAccessToSpace: import("./auth/auth.types.js").HasAccessToSpace;
|
|
12
|
+
};
|
|
13
|
+
components: {
|
|
14
|
+
getAllComponents: import("./components/components.types.js").GetAllComponents;
|
|
15
|
+
getComponent: import("./components/components.types.js").GetComponent;
|
|
16
|
+
getAllComponentsGroups: import("./components/components.types.js").GetAllComponentsGroups;
|
|
17
|
+
createComponentsGroup: import("./components/components.types.js").CreateComponentsGroup;
|
|
18
|
+
getComponentsGroup: import("./components/components.types.js").GetComponentsGroup;
|
|
19
|
+
removeComponentGroup: import("./components/components.types.js").RemoveComponentGroup;
|
|
20
|
+
removeComponent: import("./components/components.types.js").RemoveComponent;
|
|
21
|
+
updateComponent: import("./components/components.types.js").UpdateComponent;
|
|
22
|
+
createComponent: import("./components/components.types.js").CreateComponent;
|
|
23
|
+
};
|
|
24
|
+
datasources: {
|
|
25
|
+
createDatasource: import("./datasources/datasources.types.js").CreateDatasource;
|
|
26
|
+
getDatasource: import("./datasources/datasources.types.js").GetDatasource;
|
|
27
|
+
getAllDatasources: import("./datasources/datasources.types.js").GetAllDatasources;
|
|
28
|
+
syncDatasources: import("./datasources/datasources.types.js").SyncDatasources;
|
|
29
|
+
updateDatasource: import("./datasources/datasources.types.js").UpdateDatasource;
|
|
30
|
+
};
|
|
31
|
+
plugins: {
|
|
32
|
+
getAllPlugins: import("./plugins/plugins.types.js").GetAllPlugins;
|
|
33
|
+
getPlugin: import("./plugins/plugins.types.js").GetPlugin;
|
|
34
|
+
updatePlugin: import("./plugins/plugins.types.js").UpdatePlugin;
|
|
35
|
+
createPlugin: import("./plugins/plugins.types.js").CreatePlugin;
|
|
36
|
+
getPluginDetails: import("./plugins/plugins.types.js").GetPluginDetails;
|
|
37
|
+
syncProvidedPlugins: import("./plugins/plugins.types.js").SyncProvidedPlugins;
|
|
38
|
+
};
|
|
39
|
+
presets: {
|
|
40
|
+
getComponentPresets: (componentName: string | undefined, config: import("./utils/request.js").RequestBaseConfig) => Promise<false | any[]>;
|
|
41
|
+
getPreset: import("./presets/presets.types.js").GetPresetById;
|
|
42
|
+
createPreset: (p: any, config: import("./utils/request.js").RequestBaseConfig) => Promise<any>;
|
|
43
|
+
getAllPresets: (config: import("./utils/request.js").RequestBaseConfig) => Promise<any[]>;
|
|
44
|
+
updatePreset: import("./presets/presets.types.js").UpdatePreset;
|
|
45
|
+
updatePresets: import("./presets/presets.types.js").UpdatePresets;
|
|
46
|
+
};
|
|
47
|
+
roles: {
|
|
48
|
+
createRole: import("./roles/roles.types.js").CreateRole;
|
|
49
|
+
getRole: import("./roles/roles.types.js").GetRole;
|
|
50
|
+
getAllRoles: import("./roles/roles.types.js").GetAllRoles;
|
|
51
|
+
syncRoles: import("./roles/roles.types.js").SyncRoles;
|
|
52
|
+
updateRole: import("./roles/roles.types.js").UpdateRole;
|
|
53
|
+
};
|
|
54
|
+
stories: {
|
|
55
|
+
createStory: import("./stories/stories.types.js").CreateStory;
|
|
56
|
+
updateStory: import("./stories/stories.types.js").UpdateStory;
|
|
57
|
+
getStoryById: import("./stories/stories.types.js").GetStoryById;
|
|
58
|
+
removeStory: import("./stories/stories.types.js").RemoveStory;
|
|
59
|
+
getStoryBySlug: import("./stories/stories.types.js").GetStoryBySlug;
|
|
60
|
+
updateStories: import("./stories/stories.types.js").UpdateStories;
|
|
61
|
+
getAllStories: import("./stories/stories.types.js").GetAllStories;
|
|
62
|
+
removeAllStories: import("./stories/stories.types.js").RemoveAllStories;
|
|
63
|
+
backupStories: import("./stories/stories.types.js").BackupStories;
|
|
64
|
+
};
|
|
65
|
+
spaces: {
|
|
66
|
+
getAllSpaces: import("./spaces/spaces.types.js").GetAllSpaces;
|
|
67
|
+
getSpace: import("./spaces/spaces.types.js").GetSpace;
|
|
68
|
+
updateSpace: import("./spaces/spaces.types.js").UpdateSpace;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as assets from "./assets/index.js";
|
|
2
|
+
import * as auth from "./auth/index.js";
|
|
3
|
+
import * as components from "./components/index.js";
|
|
4
|
+
import * as datasources from "./datasources/index.js";
|
|
5
|
+
import * as plugins from "./plugins/index.js";
|
|
6
|
+
import * as presets from "./presets/index.js";
|
|
7
|
+
import * as roles from "./roles/index.js";
|
|
8
|
+
import * as spaces from "./spaces/index.js";
|
|
9
|
+
import * as stories from "./stories/index.js";
|
|
10
|
+
export const testApi = {
|
|
11
|
+
assets: { ...assets },
|
|
12
|
+
auth: { ...auth },
|
|
13
|
+
components: { ...components },
|
|
14
|
+
datasources: { ...datasources },
|
|
15
|
+
plugins: { ...plugins },
|
|
16
|
+
presets: { ...presets },
|
|
17
|
+
roles: { ...roles },
|
|
18
|
+
stories: { ...stories },
|
|
19
|
+
spaces: { ...spaces },
|
|
20
|
+
};
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
+
import type { IStoryblokConfig } from "../../config/config.js";
|
|
1
2
|
import type StoryblokClient from "storyblok-js-client";
|
|
2
|
-
export interface RequestBaseConfig {
|
|
3
|
+
export interface RequestBaseConfig extends Omit<IStoryblokConfig, "sbApi"> {
|
|
3
4
|
spaceId: string;
|
|
4
5
|
sbApi: StoryblokClient;
|
|
5
|
-
debug?: boolean;
|
|
6
|
-
contentHubOriginUrl?: string;
|
|
7
|
-
contentHubAuthorizationToken?: string;
|
|
8
6
|
}
|
|
9
7
|
interface GetAllItemsWithPagination {
|
|
10
8
|
apiFn: (...args: any) => any;
|
package/dist/cli/api-config.js
CHANGED
|
@@ -13,6 +13,7 @@ const globalSbapi = new StoryblokClient({
|
|
|
13
13
|
const generateApi = (custom) => custom;
|
|
14
14
|
export const sbApi = generateApi(storyblokConfig.sbApi ? storyblokConfig.sbApi() : globalSbapi);
|
|
15
15
|
export const apiConfig = {
|
|
16
|
+
...storyblokConfig,
|
|
16
17
|
spaceId: storyblokConfig.spaceId,
|
|
17
18
|
sbApi: sbApi,
|
|
18
19
|
};
|
|
@@ -44,7 +44,7 @@ export const backup = async (props) => {
|
|
|
44
44
|
datestamp: true,
|
|
45
45
|
res,
|
|
46
46
|
folder: "components",
|
|
47
|
-
});
|
|
47
|
+
}, apiConfig);
|
|
48
48
|
})
|
|
49
49
|
.catch((err) => {
|
|
50
50
|
console.log(err);
|
|
@@ -64,7 +64,7 @@ export const backup = async (props) => {
|
|
|
64
64
|
datestamp: true,
|
|
65
65
|
res,
|
|
66
66
|
folder: "components",
|
|
67
|
-
});
|
|
67
|
+
}, apiConfig);
|
|
68
68
|
}
|
|
69
69
|
})
|
|
70
70
|
.catch((err) => {
|
|
@@ -94,7 +94,7 @@ export const backup = async (props) => {
|
|
|
94
94
|
datestamp: true,
|
|
95
95
|
res,
|
|
96
96
|
folder: "component-groups",
|
|
97
|
-
});
|
|
97
|
+
}, apiConfig);
|
|
98
98
|
})
|
|
99
99
|
.catch((err) => {
|
|
100
100
|
console.log(err);
|
|
@@ -113,7 +113,7 @@ export const backup = async (props) => {
|
|
|
113
113
|
filename: componentGroupToBackup,
|
|
114
114
|
res,
|
|
115
115
|
folder: "component-groups",
|
|
116
|
-
});
|
|
116
|
+
}, apiConfig);
|
|
117
117
|
})
|
|
118
118
|
.catch((err) => {
|
|
119
119
|
console.log(err);
|
|
@@ -132,7 +132,7 @@ export const backup = async (props) => {
|
|
|
132
132
|
datestamp: true,
|
|
133
133
|
res,
|
|
134
134
|
folder: "datasources",
|
|
135
|
-
});
|
|
135
|
+
}, apiConfig);
|
|
136
136
|
})
|
|
137
137
|
.catch((err) => {
|
|
138
138
|
console.log(err);
|
|
@@ -152,7 +152,7 @@ export const backup = async (props) => {
|
|
|
152
152
|
datestamp: true,
|
|
153
153
|
res,
|
|
154
154
|
folder: "datasources",
|
|
155
|
-
});
|
|
155
|
+
}, apiConfig);
|
|
156
156
|
}
|
|
157
157
|
})
|
|
158
158
|
.catch((err) => {
|
|
@@ -172,7 +172,7 @@ export const backup = async (props) => {
|
|
|
172
172
|
datestamp: true,
|
|
173
173
|
res,
|
|
174
174
|
folder: "roles",
|
|
175
|
-
});
|
|
175
|
+
}, apiConfig);
|
|
176
176
|
})
|
|
177
177
|
.catch((err) => {
|
|
178
178
|
console.log(err);
|
|
@@ -192,7 +192,7 @@ export const backup = async (props) => {
|
|
|
192
192
|
datestamp: true,
|
|
193
193
|
res,
|
|
194
194
|
folder: "roles",
|
|
195
|
-
});
|
|
195
|
+
}, apiConfig);
|
|
196
196
|
}
|
|
197
197
|
})
|
|
198
198
|
.catch((err) => {
|
|
@@ -212,7 +212,7 @@ export const backup = async (props) => {
|
|
|
212
212
|
datestamp: true,
|
|
213
213
|
res,
|
|
214
214
|
folder: "presets",
|
|
215
|
-
});
|
|
215
|
+
}, apiConfig);
|
|
216
216
|
})
|
|
217
217
|
.catch((err) => {
|
|
218
218
|
console.log(err);
|
|
@@ -231,7 +231,7 @@ export const backup = async (props) => {
|
|
|
231
231
|
datestamp: true,
|
|
232
232
|
res,
|
|
233
233
|
folder: "presets",
|
|
234
|
-
});
|
|
234
|
+
}, apiConfig);
|
|
235
235
|
})
|
|
236
236
|
.catch((err) => {
|
|
237
237
|
console.log(err);
|
|
@@ -250,7 +250,7 @@ export const backup = async (props) => {
|
|
|
250
250
|
filename: `${componentPresetToBackup}.presets.sb.json`,
|
|
251
251
|
res,
|
|
252
252
|
folder: storyblokConfig.presetsBackupDirectory,
|
|
253
|
-
});
|
|
253
|
+
}, apiConfig);
|
|
254
254
|
})
|
|
255
255
|
.catch((err) => {
|
|
256
256
|
console.log(err);
|
|
@@ -276,7 +276,7 @@ export const backup = async (props) => {
|
|
|
276
276
|
filename: `${component.name}.presets.sb.json`,
|
|
277
277
|
res: { allPresets: res, ...metadata },
|
|
278
278
|
folder: storyblokConfig.presetsBackupDirectory,
|
|
279
|
-
});
|
|
279
|
+
}, apiConfig);
|
|
280
280
|
}
|
|
281
281
|
})
|
|
282
282
|
.catch((err) => {
|
|
@@ -300,7 +300,7 @@ export const backup = async (props) => {
|
|
|
300
300
|
datestamp: true,
|
|
301
301
|
res,
|
|
302
302
|
folder: "plugins",
|
|
303
|
-
});
|
|
303
|
+
}, apiConfig);
|
|
304
304
|
}
|
|
305
305
|
})
|
|
306
306
|
.catch((err) => {
|
|
@@ -319,7 +319,7 @@ export const backup = async (props) => {
|
|
|
319
319
|
datestamp: true,
|
|
320
320
|
res,
|
|
321
321
|
folder: "plugins",
|
|
322
|
-
});
|
|
322
|
+
}, apiConfig);
|
|
323
323
|
})
|
|
324
324
|
.catch((err) => {
|
|
325
325
|
console.log(err);
|