@nzz/q-cli 1.9.2 → 1.9.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. package/package.json +9 -5
  2. package/skeletons/custom-code-skeleton/package.json +6 -3
  3. package/skeletons/custom-code-skeleton/rollup.config.js +59 -52
  4. package/skeletons/custom-code-skeleton/src/enums.ts +0 -0
  5. package/skeletons/custom-code-skeleton/src/main-prod.ts +2 -2
  6. package/skeletons/custom-code-skeleton/src/main.scss +1 -1
  7. package/skeletons/custom-code-skeleton/src/main.ts +6 -6
  8. package/skeletons/custom-code-skeleton/tsconfig.json +2 -1
  9. package/.history/bin/commands/qItem/itemService_20220627113036.js +0 -302
  10. package/.history/bin/commands/qItem/itemService_20221105174223.js +0 -304
  11. package/.history/bin/commands/qItem/itemService_20221105174236.js +0 -304
  12. package/.history/bin/commands/qItem/itemService_20221105174311.js +0 -304
  13. package/.history/bin/commands/qItem/itemService_20221105174605.js +0 -306
  14. package/.history/bin/commands/qItem/itemService_20221105174809.js +0 -309
  15. package/.history/bin/commands/qItem/itemService_20221107071956.js +0 -317
  16. package/.history/bin/commands/qItem/itemService_20221107072130.js +0 -310
  17. package/.history/bin/commands/qItem/itemService_20221107072222.js +0 -312
  18. package/.history/bin/commands/qItem/itemService_20221107072621.js +0 -316
  19. package/.history/bin/commands/qItem/itemService_20221107072850.js +0 -315
  20. package/.history/bin/commands/qItem/itemService_20221107073051.js +0 -315
  21. package/.history/bin/commands/qItem/itemService_20221107073244.js +0 -315
  22. package/.history/bin/commands/qItem/itemService_20221107075352.js +0 -323
  23. package/.history/bin/commands/qItem/itemService_20221107075536.js +0 -316
  24. package/.history/bin/commands/qItem/itemService_20221107075700.js +0 -312
  25. package/.history/bin/commands/qItem/itemService_20221107111951.js +0 -312
  26. package/.history/bin/commands/qItem/itemService_20221107113745.js +0 -310
  27. package/.history/bin/commands/qItem/itemService_20221107113901.js +0 -310
  28. package/.history/bin/commands/qItem/updateItem/updateItem_20220627113036.js +0 -64
  29. package/.history/bin/commands/qItem/updateItem/updateItem_20221105173137.js +0 -66
  30. package/.history/bin/commands/qItem/updateItem/updateItem_20221105173239.js +0 -68
  31. package/.history/bin/commands/qItem/updateItem/updateItem_20221105173610.js +0 -69
  32. package/.history/bin/commands/qItem/updateItem/updateItem_20221105173646.js +0 -74
  33. package/.history/bin/commands/qItem/updateItem/updateItem_20221105174010.js +0 -74
  34. package/.history/bin/commands/qItem/updateItem/updateItem_20221105174054.js +0 -75
  35. package/.history/package_20220808135115.json +0 -43
  36. package/.history/package_20221105171707.json +0 -43
  37. package/.history/package_20221105173355.json +0 -43
  38. package/.history/package_20221107112303.json +0 -43
@@ -1,310 +0,0 @@
1
- const resourcesService = require("./resourcesService.js");
2
- const schemaService = require("./schemaService.js");
3
- const deepmerge = require("deepmerge");
4
- const fetch = require("node-fetch");
5
- const chalk = require("chalk");
6
- const errorColor = chalk.red;
7
-
8
- async function createItem(item, environment, config) {
9
- const qServer = config.get(`${environment.name}.qServer`);
10
- const accessToken = config.get(`${environment.name}.accessToken`);
11
- const cookie = config.get(`${environment.name}.cookie`);
12
-
13
- try {
14
- const response = await fetch(`${qServer}item`, {
15
- method: "POST",
16
- body: JSON.stringify(item),
17
- headers: {
18
- "user-agent": "Q Command-line Tool",
19
- Authorization: `Bearer ${accessToken}`,
20
- "Content-Type": "application/json",
21
- Cookie: cookie ? cookie : "",
22
- },
23
- });
24
- if (response.ok) {
25
- return await response.json();
26
- } else {
27
- throw new Error(
28
- `A problem occured while creating item on ${environment.name} environment. Please check your connection and try again.`
29
- );
30
- }
31
- } catch (error) {
32
- console.error(errorColor(error.message));
33
- process.exit(1);
34
- }
35
- }
36
-
37
- async function getItem(qServer, environment, accessToken, cookie) {
38
- try {
39
- const response = await fetch(`${qServer}item/${environment.id}`, {
40
- headers: {
41
- "user-agent": "Q Command-line Tool",
42
- Authorization: `Bearer ${accessToken}`,
43
- Cookie: cookie ? cookie : "",
44
- },
45
- });
46
- if (response.ok) {
47
- return await response.json();
48
- } else {
49
- throw new Error(
50
- `A problem occured while getting item with id ${environment.id} on ${environment.name} environment. Please make sure that the id is correct, you have an internet connection and try again.`
51
- );
52
- }
53
- } catch (error) {
54
- console.error(errorColor(error.message));
55
- process.exit(1);
56
- }
57
- }
58
-
59
- function getItems(qConfig, environmentFilter) {
60
- const items = qConfig.items
61
- .filter((item) => {
62
- if (environmentFilter) {
63
- return item.environments.some(
64
- (environment) => environment.name === environmentFilter
65
- );
66
- }
67
-
68
- return true;
69
- })
70
- .map((item) => {
71
- if (environmentFilter) {
72
- item.environments = item.environments.filter(
73
- (environment) => environment.name === environmentFilter
74
- );
75
- }
76
-
77
- return item;
78
- });
79
-
80
- return items;
81
- }
82
-
83
- function getDefaultOrNull(schema) {
84
- if (schema.hasOwnProperty("default")) {
85
- if (typeof schema.default === "object") {
86
- return JSON.parse(JSON.stringify(schema.default));
87
- }
88
- return schema.default;
89
- }
90
- return null;
91
- }
92
-
93
- // Returns a default item based on the tool schema
94
- // The default item is used to derive the file properties of a certain file type
95
- // These file properties are specified by the tool and are specific to the file type
96
- // For example an image file has height/width file properties
97
- function getDefaultItem(schema) {
98
- schema = JSON.parse(JSON.stringify(schema));
99
- if (schema.type === "array") {
100
- let array = [];
101
- schema.minItems = 1;
102
- for (let i = 0; i < schema.minItems; i++) {
103
- let value = getDefaultItem(schema.items);
104
- if (value) {
105
- if (
106
- schema["Q:type"] &&
107
- schema["Q:type"] === "files" &&
108
- schema["Q:options"] &&
109
- schema["Q:options"].fileProperties
110
- ) {
111
- array.push(Object.assign(value, schema["Q:options"].fileProperties));
112
- } else {
113
- array.push(value);
114
- }
115
- }
116
- }
117
-
118
- const defaultValue = getDefaultOrNull(schema);
119
- if (array === null && defaultValue !== null) {
120
- array = defaultValue;
121
- }
122
- return array;
123
- } else if (schema.type === "object") {
124
- const defaultValue = getDefaultOrNull(schema);
125
- if (defaultValue !== null) {
126
- return defaultValue;
127
- }
128
-
129
- if (
130
- schema["Q:type"] &&
131
- schema["Q:type"] === "files" &&
132
- schema["Q:options"] &&
133
- schema["Q:options"].fileProperties
134
- ) {
135
- return schema["Q:options"].fileProperties;
136
- }
137
-
138
- if (!schema.hasOwnProperty("properties")) {
139
- return undefined;
140
- }
141
- let object = {};
142
- Object.keys(schema.properties).forEach((propertyName) => {
143
- const property = schema.properties[propertyName];
144
- let value = getDefaultItem(property);
145
- if (value !== undefined) {
146
- object[propertyName] = value;
147
- } else if (
148
- property["Q:type"] &&
149
- property["Q:type"] === "files" &&
150
- property["Q:options"] &&
151
- property["Q:options"].fileProperties
152
- ) {
153
- object[propertyName] = property["Q:options"].fileProperties;
154
- }
155
- });
156
- return object;
157
- }
158
-
159
- // if this is not an array or object, we just get the default if any
160
- const defaultValue = getDefaultOrNull(schema);
161
- if (defaultValue !== null) {
162
- return defaultValue;
163
- }
164
- return undefined;
165
- }
166
-
167
- async function updateItem(item, environment, config, qConfigPath) {
168
- const qServer = config.get(`${environment.name}.qServer`);
169
- const accessToken = config.get(`${environment.name}.accessToken`);
170
- const cookie = config.get(`${environment.name}.cookie`);
171
- const existingItem = await getItem(qServer, environment, accessToken, cookie);
172
- const updatedItem = await getUpdatedItem(
173
- qServer,
174
- accessToken,
175
- cookie,
176
- existingItem,
177
- item,
178
- environment,
179
- qConfigPath
180
- );
181
- return await saveItem(qServer, environment, accessToken, cookie, updatedItem);
182
- }
183
-
184
- async function getUpdatedItem(
185
- qServer,
186
- accessToken,
187
- cookie,
188
- existingItem,
189
- item,
190
- environment,
191
- qConfigPath
192
- ) {
193
- try {
194
- const toolSchema = await schemaService.getToolSchema(
195
- qServer,
196
- existingItem.tool
197
- );
198
- // Removes additional properties not defined in the schema on the top level object of the item
199
- toolSchema.additionalProperties = false;
200
- // If options object is available additional properties not defined in the schema are removed
201
- if (toolSchema.properties && toolSchema.properties.options) {
202
- toolSchema.properties.options.additionalProperties = false;
203
- }
204
- const defaultItem = getDefaultItem(toolSchema);
205
- console.log("-----default-----")
206
- console.log(JSON.stringify(defaultItem))
207
- item = JSON.parse(JSON.stringify(item));
208
- console.log("-----item-----")
209
- console.log(JSON.stringify(item))
210
- console.log("-----item-----")
211
- item = await resourcesService.handleResources(
212
- qServer,
213
- accessToken,
214
- cookie,
215
- item,
216
- defaultItem,
217
- qConfigPath,
218
- environment
219
- );
220
-
221
-
222
- // Merge options:
223
- // File of files property will be updated (if file exists on destination)
224
- // If it doesn't exist it is appended to the files array
225
- // All other properties are overwritten from source config
226
- const options = {
227
- arrayMerge: (destArr, srcArr) => srcArr,
228
- customMerge: (key) => {
229
- if (key === "files") {
230
- return (destArr, srcArr) => {
231
- if (destArr.length <= 0) {
232
- return srcArr;
233
- }
234
-
235
- srcArr.forEach((fileObj) => {
236
- let destIndex = destArr.findIndex(
237
- (destFileObj) =>
238
- destFileObj.file.originalName === fileObj.file.originalName
239
- );
240
-
241
- if (destIndex !== -1) {
242
- destArr[destIndex] = fileObj;
243
- } else {
244
- destArr.push(fileObj);
245
- }
246
- });
247
- return destArr;
248
- };
249
- }
250
- },
251
- };
252
-
253
- // merges existing item with the item defined in q.config.json
254
- const updatedItem = deepmerge(existingItem, item, options);
255
- // normalizes the item which removes additional properties not defined in the schema
256
- // and validates the item against the schema
257
- const normalizedItem = schemaService.getNormalizedItem(
258
- toolSchema,
259
- updatedItem,
260
- environment
261
- );
262
- // the normalized item is merged with the existing item. This is done because properties such as _id and _rev
263
- // defined in the existing item are removed during normalization, because they are not defined in the schema
264
- return deepmerge(existingItem, normalizedItem, options);
265
- } catch (error) {
266
- console.error(errorColor(error.message));
267
- process.exit(1);
268
- }
269
- }
270
-
271
- async function saveItem(
272
- qServer,
273
- environment,
274
- accessToken,
275
- cookie,
276
- updatedItem
277
- ) {
278
- try {
279
- delete updatedItem.updatedDate;
280
- console.log("updateItem")
281
- console.log(JSON.stringify(updateItem))
282
- const response = await fetch(`${qServer}item`, {
283
- method: "PUT",
284
- body: JSON.stringify(updatedItem),
285
- headers: {
286
- "user-agent": "Q Command-line Tool",
287
- Authorization: `Bearer ${accessToken}`,
288
- "Content-Type": "application/json",
289
- Cookie: cookie ? cookie : "",
290
- },
291
- });
292
- if (response.ok) {
293
- return await response.json();
294
- } else {
295
- throw new Error(
296
- `A problem occured while saving item with id ${environment.id} on ${environment.name} environment. Please check your connection and try again.`
297
- );
298
- }
299
- } catch (error) {
300
- console.error(errorColor(error.message));
301
- process.exit(1);
302
- }
303
- }
304
-
305
- module.exports = {
306
- createItem: createItem,
307
- getItem: getItem,
308
- getItems: getItems,
309
- updateItem: updateItem,
310
- };
@@ -1,312 +0,0 @@
1
- const resourcesService = require("./resourcesService.js");
2
- const schemaService = require("./schemaService.js");
3
- const deepmerge = require("deepmerge");
4
- const fetch = require("node-fetch");
5
- const chalk = require("chalk");
6
- const errorColor = chalk.red;
7
-
8
- async function createItem(item, environment, config) {
9
- const qServer = config.get(`${environment.name}.qServer`);
10
- const accessToken = config.get(`${environment.name}.accessToken`);
11
- const cookie = config.get(`${environment.name}.cookie`);
12
-
13
- try {
14
- const response = await fetch(`${qServer}item`, {
15
- method: "POST",
16
- body: JSON.stringify(item),
17
- headers: {
18
- "user-agent": "Q Command-line Tool",
19
- Authorization: `Bearer ${accessToken}`,
20
- "Content-Type": "application/json",
21
- Cookie: cookie ? cookie : "",
22
- },
23
- });
24
- if (response.ok) {
25
- return await response.json();
26
- } else {
27
- throw new Error(
28
- `A problem occured while creating item on ${environment.name} environment. Please check your connection and try again.`
29
- );
30
- }
31
- } catch (error) {
32
- console.error(errorColor(error.message));
33
- process.exit(1);
34
- }
35
- }
36
-
37
- async function getItem(qServer, environment, accessToken, cookie) {
38
- try {
39
- const response = await fetch(`${qServer}item/${environment.id}`, {
40
- headers: {
41
- "user-agent": "Q Command-line Tool",
42
- Authorization: `Bearer ${accessToken}`,
43
- Cookie: cookie ? cookie : "",
44
- },
45
- });
46
- if (response.ok) {
47
- return await response.json();
48
- } else {
49
- throw new Error(
50
- `A problem occured while getting item with id ${environment.id} on ${environment.name} environment. Please make sure that the id is correct, you have an internet connection and try again.`
51
- );
52
- }
53
- } catch (error) {
54
- console.error(errorColor(error.message));
55
- process.exit(1);
56
- }
57
- }
58
-
59
- function getItems(qConfig, environmentFilter) {
60
- const items = qConfig.items
61
- .filter((item) => {
62
- if (environmentFilter) {
63
- return item.environments.some(
64
- (environment) => environment.name === environmentFilter
65
- );
66
- }
67
-
68
- return true;
69
- })
70
- .map((item) => {
71
- if (environmentFilter) {
72
- item.environments = item.environments.filter(
73
- (environment) => environment.name === environmentFilter
74
- );
75
- }
76
-
77
- return item;
78
- });
79
-
80
- return items;
81
- }
82
-
83
- function getDefaultOrNull(schema) {
84
- if (schema.hasOwnProperty("default")) {
85
- if (typeof schema.default === "object") {
86
- return JSON.parse(JSON.stringify(schema.default));
87
- }
88
- return schema.default;
89
- }
90
- return null;
91
- }
92
-
93
- // Returns a default item based on the tool schema
94
- // The default item is used to derive the file properties of a certain file type
95
- // These file properties are specified by the tool and are specific to the file type
96
- // For example an image file has height/width file properties
97
- function getDefaultItem(schema) {
98
- schema = JSON.parse(JSON.stringify(schema));
99
- if (schema.type === "array") {
100
- let array = [];
101
- schema.minItems = 1;
102
- for (let i = 0; i < schema.minItems; i++) {
103
- let value = getDefaultItem(schema.items);
104
- if (value) {
105
- if (
106
- schema["Q:type"] &&
107
- schema["Q:type"] === "files" &&
108
- schema["Q:options"] &&
109
- schema["Q:options"].fileProperties
110
- ) {
111
- array.push(Object.assign(value, schema["Q:options"].fileProperties));
112
- } else {
113
- array.push(value);
114
- }
115
- }
116
- }
117
-
118
- const defaultValue = getDefaultOrNull(schema);
119
- if (array === null && defaultValue !== null) {
120
- array = defaultValue;
121
- }
122
- return array;
123
- } else if (schema.type === "object") {
124
- const defaultValue = getDefaultOrNull(schema);
125
- if (defaultValue !== null) {
126
- return defaultValue;
127
- }
128
-
129
- if (
130
- schema["Q:type"] &&
131
- schema["Q:type"] === "files" &&
132
- schema["Q:options"] &&
133
- schema["Q:options"].fileProperties
134
- ) {
135
- return schema["Q:options"].fileProperties;
136
- }
137
-
138
- if (!schema.hasOwnProperty("properties")) {
139
- return undefined;
140
- }
141
- let object = {};
142
- Object.keys(schema.properties).forEach((propertyName) => {
143
- const property = schema.properties[propertyName];
144
- let value = getDefaultItem(property);
145
- if (value !== undefined) {
146
- object[propertyName] = value;
147
- } else if (
148
- property["Q:type"] &&
149
- property["Q:type"] === "files" &&
150
- property["Q:options"] &&
151
- property["Q:options"].fileProperties
152
- ) {
153
- object[propertyName] = property["Q:options"].fileProperties;
154
- }
155
- });
156
- return object;
157
- }
158
-
159
- // if this is not an array or object, we just get the default if any
160
- const defaultValue = getDefaultOrNull(schema);
161
- if (defaultValue !== null) {
162
- return defaultValue;
163
- }
164
- return undefined;
165
- }
166
-
167
- async function updateItem(item, environment, config, qConfigPath) {
168
- const qServer = config.get(`${environment.name}.qServer`);
169
- const accessToken = config.get(`${environment.name}.accessToken`);
170
- const cookie = config.get(`${environment.name}.cookie`);
171
- const existingItem = await getItem(qServer, environment, accessToken, cookie);
172
- const updatedItem = await getUpdatedItem(
173
- qServer,
174
- accessToken,
175
- cookie,
176
- existingItem,
177
- item,
178
- environment,
179
- qConfigPath
180
- );
181
- return await saveItem(qServer, environment, accessToken, cookie, updatedItem);
182
- }
183
-
184
- async function getUpdatedItem(
185
- qServer,
186
- accessToken,
187
- cookie,
188
- existingItem,
189
- item,
190
- environment,
191
- qConfigPath
192
- ) {
193
- try {
194
- const toolSchema = await schemaService.getToolSchema(
195
- qServer,
196
- existingItem.tool
197
- );
198
- // Removes additional properties not defined in the schema on the top level object of the item
199
- toolSchema.additionalProperties = false;
200
- // If options object is available additional properties not defined in the schema are removed
201
- if (toolSchema.properties && toolSchema.properties.options) {
202
- toolSchema.properties.options.additionalProperties = false;
203
- }
204
- const defaultItem = getDefaultItem(toolSchema);
205
- item = JSON.parse(JSON.stringify(item));
206
- item = await resourcesService.handleResources(
207
- qServer,
208
- accessToken,
209
- cookie,
210
- item,
211
- defaultItem,
212
- qConfigPath,
213
- environment
214
- );
215
-
216
- // Merge options:
217
- // File of files property will be updated (if file exists on destination)
218
- // If it doesn't exist it is appended to the files array
219
- // All other properties are overwritten from source config
220
- const options = {
221
- arrayMerge: (destArr, srcArr) => srcArr,
222
- customMerge: (key) => {
223
- if (key === "files") {
224
- return (destArr, srcArr) => {
225
- if (destArr.length <= 0) {
226
- return srcArr;
227
- }
228
-
229
- srcArr.forEach((fileObj) => {
230
- let destIndex = destArr.findIndex(
231
- (destFileObj) =>
232
- destFileObj.file.originalName === fileObj.file.originalName
233
- );
234
-
235
- if (destIndex !== -1) {
236
- destArr[destIndex] = fileObj;
237
- } else {
238
- destArr.push(fileObj);
239
- }
240
- });
241
- return destArr;
242
- };
243
- }
244
- },
245
- };
246
-
247
- // merges existing item with the item defined in q.config.json
248
- const updatedItem = deepmerge(existingItem, item, options);
249
- // normalizes the item which removes additional properties not defined in the schema
250
- // and validates the item against the schema
251
- const normalizedItem = schemaService.getNormalizedItem(
252
- toolSchema,
253
- updatedItem,
254
- environment
255
- );
256
-
257
- console.log("-----existingItem-----")
258
- console.log(JSON.stringify(existingItem))
259
- console.log("-----/existingItem-----")
260
-
261
- console.log("-----normalizedItem-----")
262
- console.log(JSON.stringify(normalizedItem))
263
- console.log("-----/normalizedItem-----")
264
- // the normalized item is merged with the existing item. This is done because properties such as _id and _rev
265
- // defined in the existing item are removed during normalization, because they are not defined in the schema
266
- return deepmerge(existingItem, normalizedItem, options);
267
- } catch (error) {
268
- console.error(errorColor(error.message));
269
- process.exit(1);
270
- }
271
- }
272
-
273
- async function saveItem(
274
- qServer,
275
- environment,
276
- accessToken,
277
- cookie,
278
- updatedItem
279
- ) {
280
- try {
281
- delete updatedItem.updatedDate;
282
- console.log("updateItem")
283
- console.log(JSON.stringify(updateItem))
284
- const response = await fetch(`${qServer}item`, {
285
- method: "PUT",
286
- body: JSON.stringify(updatedItem),
287
- headers: {
288
- "user-agent": "Q Command-line Tool",
289
- Authorization: `Bearer ${accessToken}`,
290
- "Content-Type": "application/json",
291
- Cookie: cookie ? cookie : "",
292
- },
293
- });
294
- if (response.ok) {
295
- return await response.json();
296
- } else {
297
- throw new Error(
298
- `A problem occured while saving item with id ${environment.id} on ${environment.name} environment. Please check your connection and try again.`
299
- );
300
- }
301
- } catch (error) {
302
- console.error(errorColor(error.message));
303
- process.exit(1);
304
- }
305
- }
306
-
307
- module.exports = {
308
- createItem: createItem,
309
- getItem: getItem,
310
- getItems: getItems,
311
- updateItem: updateItem,
312
- };