@commercelayer/cli-plugin-provisioning 2.0.0-oclif3.8 → 2.0.0-rc.1

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.
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const base_1 = tslib_1.__importStar(require("../../base"));
5
5
  const cli_core_1 = require("@commercelayer/cli-core");
6
+ const lang_1 = require("../../lang");
6
7
  const OPERATION = 'update';
7
8
  class ProvisioningUpdate extends base_1.default {
8
9
  static description = 'update an existing resource';
@@ -65,7 +66,7 @@ class ProvisioningUpdate extends base_1.default {
65
66
  // Raw request
66
67
  if (flags.data) {
67
68
  try {
68
- const baseUrl = cli_core_1.clApi.baseURL(undefined, flags.domain, true);
69
+ const baseUrl = cli_core_1.clApi.baseURL('provisioning', undefined, flags.domain);
69
70
  const accessToken = flags.accessToken;
70
71
  const rawRes = await cli_core_1.clApi.request.raw({ operation: cli_core_1.clApi.Operation.Update, baseUrl, accessToken, resource: resource.api }, cli_core_1.clApi.request.readDataFile(flags.data), id);
71
72
  const out = flags.raw ? rawRes : cli_core_1.clApi.response.denormalize(rawRes);
@@ -113,7 +114,7 @@ class ProvisioningUpdate extends base_1.default {
113
114
  // Fields flags
114
115
  const fields = this.fieldsFlag(flags.fields, resource.api);
115
116
  const rawReader = flags.raw ? cl.addRawResponseReader({ headers: showHeaders }) : undefined;
116
- // const reqReader = flags.doc ? addRequestReader(cl) : undefined
117
+ const reqReader = flags.doc ? (0, lang_1.addRequestReader)(cl) : undefined;
117
118
  const params = {};
118
119
  try {
119
120
  const resSdk = cl[resource.api];
@@ -146,11 +147,12 @@ class ProvisioningUpdate extends base_1.default {
146
147
  return out;
147
148
  }
148
149
  catch (error) {
149
- /*
150
- if (isRequestInterrupted(error) && reqReader) {
151
- await this.showLiveDocumentation(reqReader.request, undefined, flags)
152
- cl.removeInterceptor('request', reqReader.id)
153
- } else */ this.printError(error, flags, args);
150
+ if ((0, lang_1.isRequestInterrupted)(error) && reqReader) {
151
+ await this.showLiveDocumentation(reqReader.request, undefined, flags);
152
+ cl.removeInterceptor('request', reqReader.id);
153
+ }
154
+ else
155
+ this.printError(error, flags, args);
154
156
  }
155
157
  }
156
158
  }
@@ -0,0 +1,4 @@
1
+ import type { QueryParams } from '@commercelayer/provisioning-sdk';
2
+ import { type RequestData } from './request';
3
+ declare const buildCurl: (request: RequestData, _params?: QueryParams) => string;
4
+ export { buildCurl };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildCurl = void 0;
4
+ const _1 = require(".");
5
+ const request_1 = require("./request");
6
+ const headers = (request) => {
7
+ return Object.entries((0, request_1.getHeaders)(request)).map(([h, v]) => {
8
+ return `-H '${h}: ${v}'`;
9
+ }).join(' \\\n ');
10
+ };
11
+ const buildCurl = (request, _params) => {
12
+ let cmd = `curl -g -X ${(0, request_1.getMethod)(request)} \\\n '${(0, _1.getFullUrl)(request)}' \\\n ${headers(request)}`;
13
+ if (request.data)
14
+ cmd += ` \\\n-d '${JSON.stringify(request.data)}'`;
15
+ return cmd;
16
+ };
17
+ exports.buildCurl = buildCurl;
@@ -0,0 +1,19 @@
1
+ import type { QueryParams } from '@commercelayer/provisioning-sdk';
2
+ import type { RequestData } from './request';
3
+ export { isRequestInterrupted } from './request';
4
+ export * from './request';
5
+ export declare const availableLanguages: string[];
6
+ export declare const languageInfo: {
7
+ curl: {
8
+ name: string;
9
+ label: string;
10
+ };
11
+ node: {
12
+ name: string;
13
+ label: string;
14
+ };
15
+ };
16
+ declare const buildCommand: (lang: string, request: RequestData, params?: QueryParams, flags?: any) => string;
17
+ declare const getLanguageArg: (flags: any) => string;
18
+ declare const promptLanguage: () => Promise<string>;
19
+ export { getLanguageArg, buildCommand, promptLanguage };
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.promptLanguage = exports.buildCommand = exports.getLanguageArg = exports.languageInfo = exports.availableLanguages = exports.isRequestInterrupted = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const curl_1 = require("./curl");
6
+ const ruby_1 = require("./ruby");
7
+ const node_1 = require("./node");
8
+ const inquirer_1 = tslib_1.__importDefault(require("inquirer"));
9
+ var request_1 = require("./request");
10
+ Object.defineProperty(exports, "isRequestInterrupted", { enumerable: true, get: function () { return request_1.isRequestInterrupted; } });
11
+ tslib_1.__exportStar(require("./request"), exports);
12
+ exports.availableLanguages = ['curl', 'node'];
13
+ exports.languageInfo = {
14
+ curl: { name: 'cURL', label: 'cURL command' },
15
+ node: { name: 'Node', label: 'Node SDK source code' },
16
+ };
17
+ const buildCommand = (lang, request, params, flags) => {
18
+ if (lang)
19
+ switch (lang.toLowerCase()) {
20
+ case 'curl': return (0, curl_1.buildCurl)(request, params);
21
+ case 'node': return (0, node_1.buildTypescript)(request, params, flags);
22
+ case 'ruby': return (0, ruby_1.buildRuby)(request, params);
23
+ default: return '';
24
+ }
25
+ else
26
+ return '';
27
+ };
28
+ exports.buildCommand = buildCommand;
29
+ const getLanguageArg = (flags) => {
30
+ let lang = flags.lang;
31
+ for (const l of exports.availableLanguages) {
32
+ if (flags[l]) {
33
+ lang = l;
34
+ break;
35
+ }
36
+ }
37
+ return lang;
38
+ };
39
+ exports.getLanguageArg = getLanguageArg;
40
+ const promptLanguage = async () => {
41
+ return await inquirer_1.default.prompt([{
42
+ type: 'list',
43
+ name: 'language',
44
+ message: 'Select a format to show the command live documentation:',
45
+ choices: exports.availableLanguages.map(l => {
46
+ const info = exports.languageInfo[l];
47
+ return { name: info.label, value: l, short: info.name };
48
+ }),
49
+ }]).then(answers => answers.language);
50
+ };
51
+ exports.promptLanguage = promptLanguage;
@@ -0,0 +1,4 @@
1
+ import type { QueryParams } from '@commercelayer/provisioning-sdk';
2
+ import type { RequestData } from './request';
3
+ declare const buildTypescript: (request: RequestData, params?: QueryParams, flags?: any) => string;
4
+ export { buildTypescript };
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildTypescript = void 0;
4
+ const _1 = require(".");
5
+ const cli_core_1 = require("@commercelayer/cli-core");
6
+ const buildTypescript = (request, params, flags) => {
7
+ const hasParams = params && (Object.keys(params).length > 0);
8
+ const operation = (0, _1.getOperation)(request);
9
+ const qpSuffix = (operation.name === 'list') ? 'List' : 'Retrieve';
10
+ const paramsImport = hasParams ? `, { QueryParams${qpSuffix} }` : '';
11
+ let ts = `import commercelayer${paramsImport} from '@commercelayer/provisioning-sdk'`;
12
+ ts += `\nconst accessToken = '${flags.accessToken}'`;
13
+ if (flags.domain)
14
+ ts += `\nconst domain = '${flags.domain}'`;
15
+ ts += `\n\nconst cl = commercelayer({ accessToken${flags.domain ? ', domain' : ''} })`;
16
+ if (hasParams)
17
+ ts += `\n\nconst params: QueryParams${qpSuffix} = ${cli_core_1.clOutput.printObject(params, { color: false })}`;
18
+ const args = [];
19
+ if (operation.id)
20
+ args.push(`'${operation.id}'`);
21
+ if (hasParams)
22
+ args.push('params');
23
+ ts += `\n\ncl.${operation.resource}.${operation.name}(${args.join(', ')}).then(console.log)`;
24
+ return ts;
25
+ };
26
+ exports.buildTypescript = buildTypescript;
@@ -0,0 +1,32 @@
1
+ import { type CommerceLayerProvisioningClient } from '@commercelayer/provisioning-sdk';
2
+ import { type KeyValString } from '@commercelayer/cli-core';
3
+ type RequestData = {
4
+ baseUrl: string;
5
+ path: string;
6
+ method: string;
7
+ headers: any;
8
+ params?: any;
9
+ data?: any;
10
+ };
11
+ type OperationData = {
12
+ name: string;
13
+ id?: string;
14
+ resource: string;
15
+ relationship?: string;
16
+ oneToMany?: boolean;
17
+ method: string;
18
+ };
19
+ type RequestReader = {
20
+ id: number;
21
+ request: RequestData;
22
+ };
23
+ declare const addRequestReader: (cl: CommerceLayerProvisioningClient, interrupt?: boolean) => RequestReader;
24
+ declare const isRequestInterrupted: (error: unknown) => boolean;
25
+ export { addRequestReader, isRequestInterrupted };
26
+ export type { RequestReader, RequestData, OperationData };
27
+ export declare const getMethod: (request: RequestData) => string;
28
+ export declare const getFullUrl: (request: RequestData) => string;
29
+ export declare const getResource: (request: RequestData) => string;
30
+ export declare const getRelationship: (request: RequestData) => string | undefined;
31
+ export declare const getHeaders: (request: RequestData) => KeyValString;
32
+ export declare const getOperation: (request: RequestData) => OperationData;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOperation = exports.getHeaders = exports.getRelationship = exports.getResource = exports.getFullUrl = exports.getMethod = exports.isRequestInterrupted = exports.addRequestReader = void 0;
4
+ const provisioning_sdk_1 = require("@commercelayer/provisioning-sdk");
5
+ const cli_core_1 = require("@commercelayer/cli-core");
6
+ class RequestInterrupted extends Error {
7
+ requestInterrupted = true;
8
+ constructor() {
9
+ super('REQUEST_INTERRUPT');
10
+ }
11
+ }
12
+ const addRequestReader = (cl, interrupt = true) => {
13
+ const reader = {
14
+ id: -1,
15
+ request: { baseUrl: '', path: '/', method: 'get', headers: {} },
16
+ };
17
+ function requestInterceptor(request) {
18
+ const c = request;
19
+ const x = reader.request;
20
+ x.path = c.url.pathname;
21
+ x.method = c.options.method || 'GET';
22
+ x.headers = c.options.headers;
23
+ x.params = c.url.searchParams;
24
+ x.baseUrl = `${c.url.protocol}//${c.url.hostname}`;
25
+ x.data = c.options.body;
26
+ if (interrupt)
27
+ throw new RequestInterrupted();
28
+ return request;
29
+ }
30
+ /* const interceptor = */ cl.addRequestInterceptor(requestInterceptor);
31
+ reader.id = 1; // interceptor
32
+ return reader;
33
+ };
34
+ exports.addRequestReader = addRequestReader;
35
+ const isRequestInterrupted = (error) => {
36
+ return (provisioning_sdk_1.CommerceLayerProvisioningStatic.isSdkError(error) && (error.source instanceof RequestInterrupted) && error.source.requestInterrupted);
37
+ };
38
+ exports.isRequestInterrupted = isRequestInterrupted;
39
+ const getMethod = (request) => {
40
+ return request.method?.toUpperCase();
41
+ };
42
+ exports.getMethod = getMethod;
43
+ const getFullUrl = (request) => {
44
+ let fullUrl = `${request.baseUrl}${request.path}`;
45
+ if (request.params && (Object.keys(request.params).length > 0)) {
46
+ const qs = Object.entries(request.params).map(([k, v]) => `${k}=${v}`).join('&');
47
+ fullUrl += `?${qs}`;
48
+ }
49
+ return fullUrl;
50
+ };
51
+ exports.getFullUrl = getFullUrl;
52
+ const getResource = (request) => {
53
+ const slashIdx = request.path.indexOf('/');
54
+ if (slashIdx < 0)
55
+ return request.path;
56
+ return request.path.substring(0, slashIdx);
57
+ };
58
+ exports.getResource = getResource;
59
+ const getRelationship = (request) => {
60
+ const i1 = request.path.indexOf('/');
61
+ const il = request.path.lastIndexOf('/');
62
+ return (i1 === il) ? undefined : request.path.substring(il + 1);
63
+ };
64
+ exports.getRelationship = getRelationship;
65
+ const getHeaders = (request) => {
66
+ /*
67
+ const headers = { ...request.headers }
68
+ for (const h of Object.keys(headers))
69
+ if (['User-Agent', 'Content-Length'].includes(h)) delete headers[h]
70
+ return headers
71
+ */
72
+ return {
73
+ Accept: request.headers.Accept,
74
+ 'Content-Type': request.headers['Content-Type'],
75
+ Authorization: request.headers.Authorization,
76
+ };
77
+ };
78
+ exports.getHeaders = getHeaders;
79
+ const getOperation = (request) => {
80
+ const res = (0, exports.getResource)(request);
81
+ const rel = (0, exports.getRelationship)(request);
82
+ const id = request.path.replace(res, '').replace(rel || '', '').replace(/\//g, '');
83
+ const method = request.method.toLowerCase();
84
+ const singleton = ['application', 'organization'].includes(res);
85
+ const op = {
86
+ method,
87
+ name: 'retrieve',
88
+ resource: res,
89
+ relationship: rel,
90
+ id,
91
+ };
92
+ if (op.relationship)
93
+ op.oneToMany = (cli_core_1.clText.pluralize(op.relationship) === op.relationship);
94
+ if (op.method === 'get') {
95
+ if (singleton || (op.id && !op.relationship))
96
+ op.name = 'retrieve';
97
+ else
98
+ op.name = rel || 'list';
99
+ }
100
+ else if (method === 'patch')
101
+ op.name = 'update';
102
+ else if (method === 'post')
103
+ op.name = 'create';
104
+ else if (method === 'delete')
105
+ op.name = 'delete';
106
+ return op;
107
+ };
108
+ exports.getOperation = getOperation;
@@ -0,0 +1,4 @@
1
+ import type { QueryParams } from '@commercelayer/provisioning-sdk';
2
+ import type { RequestData } from './request';
3
+ declare const buildRuby: (_request: RequestData, _params?: QueryParams) => string;
4
+ export { buildRuby };
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildRuby = void 0;
4
+ const buildRuby = (_request, _params) => {
5
+ return 'ruby';
6
+ };
7
+ exports.buildRuby = buildRuby;
@@ -1,4 +1,4 @@
1
- import type { ResourceTypeLock } from '@commercelayer/provisioning-sdk/lib/cjs/api';
1
+ import type { ResourceTypeLock } from '@commercelayer/provisioning-sdk';
2
2
  interface Resource {
3
3
  name: string;
4
4
  api: ResourceTypeLock;