@nzz/q-cli 1.9.2 → 1.9.3

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 +4 -2
  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,304 +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
- // the normalized item is merged with the existing item. This is done because properties such as _id and _rev
257
- // defined in the existing item are removed during normalization, because they are not defined in the schema
258
- return deepmerge(existingItem, normalizedItem, options);
259
- } catch (error) {
260
- console.error(errorColor(error.message));
261
- process.exit(1);
262
- }
263
- }
264
-
265
- async function saveItem(
266
- qServer,
267
- environment,
268
- accessToken,
269
- cookie,
270
- updatedItem
271
- ) {
272
- try {
273
- delete updatedItem.updatedDate;
274
- console.log("updateItem")
275
- console.log(JSON.stringify(updateItem))
276
- const response = await fetch(`${qServer}item`, {
277
- method: "PUT",
278
- body: JSON.stringify(updatedItem),
279
- headers: {
280
- "user-agent": "Q Command-line Tool",
281
- Authorization: `Bearer ${accessToken}`,
282
- "Content-Type": "application/json",
283
- Cookie: cookie ? cookie : "",
284
- },
285
- });
286
- if (response.ok) {
287
- return await response.json();
288
- } else {
289
- throw new Error(
290
- `A problem occured while saving item with id ${environment.id} on ${environment.name} environment. Please check your connection and try again.`
291
- );
292
- }
293
- } catch (error) {
294
- console.error(errorColor(error.message));
295
- process.exit(1);
296
- }
297
- }
298
-
299
- module.exports = {
300
- createItem: createItem,
301
- getItem: getItem,
302
- getItems: getItems,
303
- updateItem: updateItem,
304
- };
@@ -1,306 +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(JSON.stringify(defaultItem))
206
- item = JSON.parse(JSON.stringify(item));
207
- console.log(JSON.stringify(item))
208
- item = await resourcesService.handleResources(
209
- qServer,
210
- accessToken,
211
- cookie,
212
- item,
213
- defaultItem,
214
- qConfigPath,
215
- environment
216
- );
217
-
218
- // Merge options:
219
- // File of files property will be updated (if file exists on destination)
220
- // If it doesn't exist it is appended to the files array
221
- // All other properties are overwritten from source config
222
- const options = {
223
- arrayMerge: (destArr, srcArr) => srcArr,
224
- customMerge: (key) => {
225
- if (key === "files") {
226
- return (destArr, srcArr) => {
227
- if (destArr.length <= 0) {
228
- return srcArr;
229
- }
230
-
231
- srcArr.forEach((fileObj) => {
232
- let destIndex = destArr.findIndex(
233
- (destFileObj) =>
234
- destFileObj.file.originalName === fileObj.file.originalName
235
- );
236
-
237
- if (destIndex !== -1) {
238
- destArr[destIndex] = fileObj;
239
- } else {
240
- destArr.push(fileObj);
241
- }
242
- });
243
- return destArr;
244
- };
245
- }
246
- },
247
- };
248
-
249
- // merges existing item with the item defined in q.config.json
250
- const updatedItem = deepmerge(existingItem, item, options);
251
- // normalizes the item which removes additional properties not defined in the schema
252
- // and validates the item against the schema
253
- const normalizedItem = schemaService.getNormalizedItem(
254
- toolSchema,
255
- updatedItem,
256
- environment
257
- );
258
- // the normalized item is merged with the existing item. This is done because properties such as _id and _rev
259
- // defined in the existing item are removed during normalization, because they are not defined in the schema
260
- return deepmerge(existingItem, normalizedItem, options);
261
- } catch (error) {
262
- console.error(errorColor(error.message));
263
- process.exit(1);
264
- }
265
- }
266
-
267
- async function saveItem(
268
- qServer,
269
- environment,
270
- accessToken,
271
- cookie,
272
- updatedItem
273
- ) {
274
- try {
275
- delete updatedItem.updatedDate;
276
- console.log("updateItem")
277
- console.log(JSON.stringify(updateItem))
278
- const response = await fetch(`${qServer}item`, {
279
- method: "PUT",
280
- body: JSON.stringify(updatedItem),
281
- headers: {
282
- "user-agent": "Q Command-line Tool",
283
- Authorization: `Bearer ${accessToken}`,
284
- "Content-Type": "application/json",
285
- Cookie: cookie ? cookie : "",
286
- },
287
- });
288
- if (response.ok) {
289
- return await response.json();
290
- } else {
291
- throw new Error(
292
- `A problem occured while saving item with id ${environment.id} on ${environment.name} environment. Please check your connection and try again.`
293
- );
294
- }
295
- } catch (error) {
296
- console.error(errorColor(error.message));
297
- process.exit(1);
298
- }
299
- }
300
-
301
- module.exports = {
302
- createItem: createItem,
303
- getItem: getItem,
304
- getItems: getItems,
305
- updateItem: updateItem,
306
- };