sb-mig 5.7.0-beta.3 → 5.7.0-beta.4

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.
@@ -1,7 +1,9 @@
1
1
  import chalk from "chalk";
2
2
  import Logger from "../../utils/logger.js";
3
3
  import { isObjectEmpty } from "../../utils/object-utils.js";
4
+ import { getAllItemsWithPagination } from "../utils/request.js";
4
5
  import { getDatasource } from "./datasources.js";
6
+ import { formatDatasourceApiError } from "./error-formatting.js";
5
7
  const _decorateWithDimensions = async (args, config) => {
6
8
  const { currentDatasource, dimensionsData, _callback } = args;
7
9
  const { spaceId, sbApi } = config;
@@ -35,17 +37,19 @@ export const getDatasourceEntries = async (args, config) => {
35
37
  Logger.log(`Trying to get '${datasourceName}' datasource entries.`);
36
38
  const data = await getDatasource({ datasourceName }, config); // TODO: maybe this step is not needed, i think we can retrieve entries directly using slug (but using delivery api, not management)
37
39
  if (data) {
38
- return sbApi
39
- .get(`spaces/${spaceId}/datasource_entries/`, {
40
- datasource_id: data[0].id,
41
- })
42
- .then(async (response) => {
43
- Logger.success(`Datasource Entries for '${datasourceName}' datasource successfully retrieved.`);
44
- const { data } = response;
45
- return data;
46
- })
47
- .catch((err) => Logger.error(err));
40
+ const datasourceEntries = await getAllItemsWithPagination({
41
+ apiFn: ({ per_page, page }) => sbApi.get(`spaces/${spaceId}/datasource_entries/`, {
42
+ datasource_id: data[0].id,
43
+ per_page,
44
+ page,
45
+ }),
46
+ params: {},
47
+ itemsKey: "datasource_entries",
48
+ });
49
+ Logger.success(`Datasource Entries for '${datasourceName}' datasource successfully retrieved.`);
50
+ return { datasource_entries: datasourceEntries };
48
51
  }
52
+ return { datasource_entries: [] };
49
53
  };
50
54
  export const createDatasourceEntries = (args, config) => {
51
55
  const { datasource_entries, remoteDatasourceEntries, data, dryRun } = args;
@@ -96,7 +100,7 @@ const _createDatasourceEntry = (args, config) => {
96
100
  console.log("Full Create error: ");
97
101
  console.log(err);
98
102
  }
99
- Logger.error(`Unable to create datasource entry in ${currentDatasource.datasource.name} datasource.`);
103
+ Logger.error(`Unable to create datasource entry '${finalDatasource_entry.name}' in ${currentDatasource.datasource.name} datasource. Value: '${finalDatasource_entry.value}'. ${formatDatasourceApiError(err)}`);
100
104
  });
101
105
  };
102
106
  export const createDatasourceEntry = (args, config) => {
@@ -137,7 +141,7 @@ const _updateDatasourceEntry = (args, config) => {
137
141
  console.log("Full update error: ");
138
142
  console.log(err);
139
143
  }
140
- Logger.error(`Unable to update datasource entry in ${currentDatasource.datasource.name} datasource.`);
144
+ Logger.error(`Unable to update datasource entry '${finalDatasource_entry.name}' in ${currentDatasource.datasource.name} datasource. Value: '${finalDatasource_entry.value}'. ${formatDatasourceApiError(err)}`);
141
145
  });
142
146
  };
143
147
  export const updateDatasourceEntry = (args, config) => {
@@ -1,6 +1,7 @@
1
1
  import Logger from "../../utils/logger.js";
2
2
  import { getAllItemsWithPagination } from "../utils/request.js";
3
3
  import { createDatasourceEntries, getDatasourceEntries, } from "./datasource-entries.js";
4
+ import { formatDatasourceApiError } from "./error-formatting.js";
4
5
  // GET
5
6
  export const getAllDatasources = (config) => {
6
7
  const { sbApi, spaceId } = config;
@@ -75,7 +76,7 @@ export const createDatasource = (args, config) => {
75
76
  datasource_entries: datasource.datasource_entries,
76
77
  };
77
78
  })
78
- .catch((err) => Logger.error(err));
79
+ .catch((err) => Logger.error(`Unable to create datasource '${datasource.name}' with slug '${datasource.slug}'. ${formatDatasourceApiError(err)}`));
79
80
  };
80
81
  export const updateDatasource = (args, config) => {
81
82
  const { datasource, datasourceToBeUpdated } = args;
@@ -107,7 +108,7 @@ export const updateDatasource = (args, config) => {
107
108
  datasource_entries: datasource.datasource_entries,
108
109
  };
109
110
  })
110
- .catch((err) => Logger.error(err));
111
+ .catch((err) => Logger.error(`Unable to update datasource '${datasource.name}' with id '${datasourceToBeUpdated.id}'. ${formatDatasourceApiError(err)}`));
111
112
  };
112
113
  // File-based sync wrapper lives in `datasources.sync.ts` to keep this module CJS-safe.
113
114
  export const syncDatasourcesData = async ({ datasources, dryRun }, config) => {
@@ -0,0 +1 @@
1
+ export declare const formatDatasourceApiError: (err: any) => string;
@@ -0,0 +1,24 @@
1
+ export const formatDatasourceApiError = (err) => {
2
+ const details = [];
3
+ const status = err?.response?.status;
4
+ const statusText = err?.response?.statusText;
5
+ const responseData = err?.response?.data;
6
+ if (status || statusText) {
7
+ details.push(`status: ${[status, statusText].filter(Boolean).join(" ")}`);
8
+ }
9
+ if (responseData?.message) {
10
+ details.push(`message: ${responseData.message}`);
11
+ }
12
+ if (responseData?.error) {
13
+ details.push(`error: ${responseData.error}`);
14
+ }
15
+ if (responseData?.errors) {
16
+ details.push(`errors: ${typeof responseData.errors === "string"
17
+ ? responseData.errors
18
+ : JSON.stringify(responseData.errors)}`);
19
+ }
20
+ if (!details.length && err?.message) {
21
+ details.push(`message: ${err.message}`);
22
+ }
23
+ return details.length ? details.join("; ") : String(err);
24
+ };
@@ -7,7 +7,9 @@ exports.updateDatasourceEntry = exports.createDatasourceEntry = exports.createDa
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
8
  const logger_js_1 = __importDefault(require("../../utils/logger.js"));
9
9
  const object_utils_js_1 = require("../../utils/object-utils.js");
10
+ const request_js_1 = require("../utils/request.js");
10
11
  const datasources_js_1 = require("./datasources.js");
12
+ const error_formatting_js_1 = require("./error-formatting.js");
11
13
  const _decorateWithDimensions = async (args, config) => {
12
14
  const { currentDatasource, dimensionsData, _callback } = args;
13
15
  const { spaceId, sbApi } = config;
@@ -41,17 +43,19 @@ const getDatasourceEntries = async (args, config) => {
41
43
  logger_js_1.default.log(`Trying to get '${datasourceName}' datasource entries.`);
42
44
  const data = await (0, datasources_js_1.getDatasource)({ datasourceName }, config); // TODO: maybe this step is not needed, i think we can retrieve entries directly using slug (but using delivery api, not management)
43
45
  if (data) {
44
- return sbApi
45
- .get(`spaces/${spaceId}/datasource_entries/`, {
46
- datasource_id: data[0].id,
47
- })
48
- .then(async (response) => {
49
- logger_js_1.default.success(`Datasource Entries for '${datasourceName}' datasource successfully retrieved.`);
50
- const { data } = response;
51
- return data;
52
- })
53
- .catch((err) => logger_js_1.default.error(err));
46
+ const datasourceEntries = await (0, request_js_1.getAllItemsWithPagination)({
47
+ apiFn: ({ per_page, page }) => sbApi.get(`spaces/${spaceId}/datasource_entries/`, {
48
+ datasource_id: data[0].id,
49
+ per_page,
50
+ page,
51
+ }),
52
+ params: {},
53
+ itemsKey: "datasource_entries",
54
+ });
55
+ logger_js_1.default.success(`Datasource Entries for '${datasourceName}' datasource successfully retrieved.`);
56
+ return { datasource_entries: datasourceEntries };
54
57
  }
58
+ return { datasource_entries: [] };
55
59
  };
56
60
  exports.getDatasourceEntries = getDatasourceEntries;
57
61
  const createDatasourceEntries = (args, config) => {
@@ -104,7 +108,7 @@ const _createDatasourceEntry = (args, config) => {
104
108
  console.log("Full Create error: ");
105
109
  console.log(err);
106
110
  }
107
- logger_js_1.default.error(`Unable to create datasource entry in ${currentDatasource.datasource.name} datasource.`);
111
+ logger_js_1.default.error(`Unable to create datasource entry '${finalDatasource_entry.name}' in ${currentDatasource.datasource.name} datasource. Value: '${finalDatasource_entry.value}'. ${(0, error_formatting_js_1.formatDatasourceApiError)(err)}`);
108
112
  });
109
113
  };
110
114
  const createDatasourceEntry = (args, config) => {
@@ -146,7 +150,7 @@ const _updateDatasourceEntry = (args, config) => {
146
150
  console.log("Full update error: ");
147
151
  console.log(err);
148
152
  }
149
- logger_js_1.default.error(`Unable to update datasource entry in ${currentDatasource.datasource.name} datasource.`);
153
+ logger_js_1.default.error(`Unable to update datasource entry '${finalDatasource_entry.name}' in ${currentDatasource.datasource.name} datasource. Value: '${finalDatasource_entry.value}'. ${(0, error_formatting_js_1.formatDatasourceApiError)(err)}`);
150
154
  });
151
155
  };
152
156
  const updateDatasourceEntry = (args, config) => {
@@ -7,6 +7,7 @@ exports.syncDatasourcesData = exports.updateDatasource = exports.createDatasourc
7
7
  const logger_js_1 = __importDefault(require("../../utils/logger.js"));
8
8
  const request_js_1 = require("../utils/request.js");
9
9
  const datasource_entries_js_1 = require("./datasource-entries.js");
10
+ const error_formatting_js_1 = require("./error-formatting.js");
10
11
  // GET
11
12
  const getAllDatasources = (config) => {
12
13
  const { sbApi, spaceId } = config;
@@ -83,7 +84,7 @@ const createDatasource = (args, config) => {
83
84
  datasource_entries: datasource.datasource_entries,
84
85
  };
85
86
  })
86
- .catch((err) => logger_js_1.default.error(err));
87
+ .catch((err) => logger_js_1.default.error(`Unable to create datasource '${datasource.name}' with slug '${datasource.slug}'. ${(0, error_formatting_js_1.formatDatasourceApiError)(err)}`));
87
88
  };
88
89
  exports.createDatasource = createDatasource;
89
90
  const updateDatasource = (args, config) => {
@@ -116,7 +117,7 @@ const updateDatasource = (args, config) => {
116
117
  datasource_entries: datasource.datasource_entries,
117
118
  };
118
119
  })
119
- .catch((err) => logger_js_1.default.error(err));
120
+ .catch((err) => logger_js_1.default.error(`Unable to update datasource '${datasource.name}' with id '${datasourceToBeUpdated.id}'. ${(0, error_formatting_js_1.formatDatasourceApiError)(err)}`));
120
121
  };
121
122
  exports.updateDatasource = updateDatasource;
122
123
  // File-based sync wrapper lives in `datasources.sync.ts` to keep this module CJS-safe.
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatDatasourceApiError = void 0;
4
+ const formatDatasourceApiError = (err) => {
5
+ const details = [];
6
+ const status = err?.response?.status;
7
+ const statusText = err?.response?.statusText;
8
+ const responseData = err?.response?.data;
9
+ if (status || statusText) {
10
+ details.push(`status: ${[status, statusText].filter(Boolean).join(" ")}`);
11
+ }
12
+ if (responseData?.message) {
13
+ details.push(`message: ${responseData.message}`);
14
+ }
15
+ if (responseData?.error) {
16
+ details.push(`error: ${responseData.error}`);
17
+ }
18
+ if (responseData?.errors) {
19
+ details.push(`errors: ${typeof responseData.errors === "string"
20
+ ? responseData.errors
21
+ : JSON.stringify(responseData.errors)}`);
22
+ }
23
+ if (!details.length && err?.message) {
24
+ details.push(`message: ${err.message}`);
25
+ }
26
+ return details.length ? details.join("; ") : String(err);
27
+ };
28
+ exports.formatDatasourceApiError = formatDatasourceApiError;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sb-mig",
3
- "version": "5.7.0-beta.3",
3
+ "version": "5.7.0-beta.4",
4
4
  "description": "CLI to rule the world. (and handle stuff related to Storyblok CMS)",
5
5
  "author": "Marcin Krawczyk <marckraw@icloud.com>",
6
6
  "license": "MIT",