@gitbeaker/requester-utils 34.6.0 → 34.7.0

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/index.es.js CHANGED
@@ -60,10 +60,14 @@ function __read(o, n) {
60
60
  return ar;
61
61
  }
62
62
 
63
- function __spreadArray(to, from) {
64
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
65
- to[j] = from[i];
66
- return to;
63
+ function __spreadArray(to, from, pack) {
64
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
65
+ if (ar || !(i in from)) {
66
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
67
+ ar[i] = from[i];
68
+ }
69
+ }
70
+ return to.concat(ar || Array.prototype.slice.call(from));
67
71
  }
68
72
 
69
73
  // Utility methods
@@ -119,7 +123,7 @@ function extendClass(Base, customConfig) {
119
123
  }
120
124
  var _this = this;
121
125
  var _a = __read(options), config = _a[0], opts = _a.slice(1);
122
- _this = _super.apply(this, __spreadArray([__assign(__assign({}, customConfig), config)], __read(opts))) || this;
126
+ _this = _super.apply(this, __spreadArray([__assign(__assign({}, customConfig), config)], __read(opts), false)) || this;
123
127
  return _this;
124
128
  }
125
129
  return class_1;
@@ -145,7 +149,7 @@ var BaseResource = /** @class */ (function () {
145
149
  var _b = _a === void 0 ? {} : _a, token = _b.token, jobToken = _b.jobToken, oauthToken = _b.oauthToken, sudo = _b.sudo, profileToken = _b.profileToken, requesterFn = _b.requesterFn, camelize = _b.camelize, _c = _b.profileMode, profileMode = _c === void 0 ? 'execution' : _c, _d = _b.host, host = _d === void 0 ? 'https://gitlab.com' : _d, _e = _b.prefixUrl, prefixUrl = _e === void 0 ? '' : _e, _f = _b.version, version = _f === void 0 ? 4 : _f, _g = _b.rejectUnauthorized, rejectUnauthorized = _g === void 0 ? true : _g, _h = _b.requestTimeout, requestTimeout = _h === void 0 ? 300000 : _h;
146
150
  if (!requesterFn)
147
151
  throw new ReferenceError('requesterFn must be passed');
148
- this.url = [host, 'api', "v" + version, prefixUrl].join('/');
152
+ this.url = [host, 'api', "v".concat(version), prefixUrl].join('/');
149
153
  this.headers = {
150
154
  'user-agent': 'gitbeaker',
151
155
  };
@@ -154,7 +158,7 @@ var BaseResource = /** @class */ (function () {
154
158
  this.requestTimeout = requestTimeout;
155
159
  // Handle auth tokens
156
160
  if (oauthToken)
157
- this.headers.authorization = "Bearer " + oauthToken;
161
+ this.headers.authorization = "Bearer ".concat(oauthToken);
158
162
  else if (jobToken)
159
163
  this.headers['job-token'] = jobToken;
160
164
  else if (token)
@@ -166,7 +170,7 @@ var BaseResource = /** @class */ (function () {
166
170
  }
167
171
  // Set sudo
168
172
  if (sudo)
169
- this.headers.Sudo = "" + sudo;
173
+ this.headers.Sudo = "".concat(sudo);
170
174
  // Set requester instance using this information
171
175
  this.requester = requesterFn(__assign({}, this));
172
176
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/RequesterUtils.ts","../src/BaseResource.ts"],"sourcesContent":["import { decamelizeKeys } from 'xcase';\nimport FormData from 'form-data';\nimport { stringify } from 'qs';\n\n// Types\nexport interface Constructable<T = any> {\n new (...args: any[]): T;\n}\n\nexport interface RequesterType {\n get(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n post(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n put(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n delete(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n stream?(endpoint: string, options?: Record<string, unknown>): NodeJS.ReadableStream;\n}\n\nexport type DefaultResourceOptions = {\n headers: { [header: string]: string };\n requestTimeout: number;\n url: string;\n rejectUnauthorized: boolean;\n};\n\nexport type DefaultRequestOptions = {\n body?: FormData | Record<string, unknown>;\n query?: Record<string, unknown>;\n sudo?: string;\n method?: string;\n};\n\nexport type DefaultRequestReturn = {\n headers: Record<string, string> | Headers;\n timeout?: number;\n method: string;\n searchParams?: string;\n prefixUrl?: string;\n body?: string | FormData;\n};\n\n// Utility methods\nexport function formatQuery(params: Record<string, unknown> = {}): string {\n const decamelized = decamelizeKeys(params);\n\n return stringify(decamelized, { arrayFormat: 'brackets' });\n}\n\nexport type OptionsHandlerFn = (\n serviceOptions: DefaultResourceOptions,\n requestOptions: DefaultRequestOptions,\n) => DefaultRequestReturn;\nexport function defaultOptionsHandler(\n resourceOptions: DefaultResourceOptions,\n { body, query, sudo, method = 'get' }: DefaultRequestOptions = {},\n): DefaultRequestReturn {\n const { headers: preconfiguredHeaders, requestTimeout, url } = resourceOptions;\n const headers = { ...preconfiguredHeaders };\n let bod: FormData | string;\n\n if (sudo) headers.sudo = sudo;\n\n // FIXME: Not the best comparison, but...it will have to do for now.\n if (typeof body === 'object' && body.constructor.name !== 'FormData') {\n bod = JSON.stringify(decamelizeKeys(body));\n headers['content-type'] = 'application/json';\n } else {\n bod = body as FormData;\n }\n\n return {\n headers,\n timeout: requestTimeout,\n method,\n searchParams: formatQuery(query),\n prefixUrl: url,\n body: bod,\n };\n}\n\nexport type RequestHandlerFn = (\n endpoint: string,\n options?: Record<string, unknown>,\n) =>\n | any\n | Promise<{\n body: Record<string, unknown> | Record<string, unknown>[];\n headers: Record<string, unknown> | Headers;\n status: number;\n }>;\n\nexport function createRequesterFn(\n optionsHandler: OptionsHandlerFn,\n requestHandler: RequestHandlerFn,\n): (serviceOptions: DefaultResourceOptions) => RequesterType {\n const methods = ['get', 'post', 'put', 'delete', 'stream'];\n\n return (serviceOptions) => {\n const requester: RequesterType = {} as RequesterType;\n\n methods.forEach((m) => {\n requester[m] = (endpoint: string, options: Record<string, unknown>) => {\n const requestOptions = optionsHandler(serviceOptions, { ...options, method: m });\n\n return requestHandler(endpoint, requestOptions);\n };\n });\n\n return requester;\n };\n}\n\nfunction extendClass<T extends Constructable>(Base: T, customConfig: Record<string, unknown>): T {\n return class extends Base {\n constructor(...options: any[]) {\n const [config, ...opts] = options;\n\n super({ ...customConfig, ...config }, ...opts);\n }\n };\n}\n\nexport function presetResourceArguments<T>(\n resources: T,\n customConfig: Record<string, unknown> = {},\n) {\n const updated = {};\n\n Object.entries(resources)\n .filter(([, s]) => typeof s === 'function') // FIXME: Odd default artifact included in this list during testing\n .forEach(([k, r]) => {\n updated[k] = extendClass(r, customConfig);\n });\n\n return updated as T;\n}\n","import { RequesterType, DefaultResourceOptions } from './RequesterUtils';\n\nexport interface BaseResourceOptions<C> {\n oauthToken?: string;\n token?: string;\n jobToken?: string;\n host?: string;\n prefixUrl?: string;\n version?: 3 | 4;\n rejectUnauthorized?: boolean;\n camelize?: C;\n requesterFn?: (resourceOptions: DefaultResourceOptions) => RequesterType;\n requestTimeout?: number;\n profileToken?: string;\n sudo?: string | number;\n profileMode?: 'execution' | 'memory';\n}\n\nexport class BaseResource<C extends boolean = false> {\n public readonly url: string;\n\n public readonly requester: RequesterType;\n\n public readonly requestTimeout: number;\n\n public readonly headers: { [header: string]: string };\n\n public readonly camelize: C | undefined;\n\n public readonly rejectUnauthorized: boolean;\n\n constructor({\n token,\n jobToken,\n oauthToken,\n sudo,\n profileToken,\n requesterFn,\n camelize,\n profileMode = 'execution',\n host = 'https://gitlab.com',\n prefixUrl = '',\n version = 4,\n rejectUnauthorized = true,\n requestTimeout = 300000,\n }: BaseResourceOptions<C> = {}) {\n if (!requesterFn) throw new ReferenceError('requesterFn must be passed');\n\n this.url = [host, 'api', `v${version}`, prefixUrl].join('/');\n\n this.headers = {\n 'user-agent': 'gitbeaker',\n };\n this.rejectUnauthorized = rejectUnauthorized;\n this.camelize = camelize;\n this.requestTimeout = requestTimeout;\n\n // Handle auth tokens\n if (oauthToken) this.headers.authorization = `Bearer ${oauthToken}`;\n else if (jobToken) this.headers['job-token'] = jobToken;\n else if (token) this.headers['private-token'] = token;\n\n // Profiling\n if (profileToken) {\n this.headers['X-Profile-Token'] = profileToken;\n this.headers['X-Profile-Mode'] = profileMode;\n }\n\n // Set sudo\n if (sudo) this.headers.Sudo = `${sudo}`;\n\n // Set requester instance using this information\n this.requester = requesterFn({ ...this });\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/RequesterUtils.ts","../src/BaseResource.ts"],"sourcesContent":["import { decamelizeKeys } from 'xcase';\nimport FormData from 'form-data';\nimport { stringify } from 'qs';\n\n// Types\nexport interface Constructable<T = any> {\n new (...args: any[]): T;\n}\n\nexport interface RequesterType {\n get(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n post(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n put(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n delete(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n stream?(endpoint: string, options?: Record<string, unknown>): NodeJS.ReadableStream;\n}\n\nexport type DefaultResourceOptions = {\n headers: { [header: string]: string };\n requestTimeout: number;\n url: string;\n rejectUnauthorized: boolean;\n};\n\nexport type DefaultRequestOptions = {\n body?: FormData | Record<string, unknown>;\n query?: Record<string, unknown>;\n sudo?: string;\n method?: string;\n};\n\nexport type DefaultRequestReturn = {\n headers: Record<string, string> | Headers;\n timeout?: number;\n method: string;\n searchParams?: string;\n prefixUrl?: string;\n body?: string | FormData;\n};\n\n// Utility methods\nexport function formatQuery(params: Record<string, unknown> = {}): string {\n const decamelized = decamelizeKeys(params);\n\n return stringify(decamelized, { arrayFormat: 'brackets' });\n}\n\nexport type OptionsHandlerFn = (\n serviceOptions: DefaultResourceOptions,\n requestOptions: DefaultRequestOptions,\n) => DefaultRequestReturn;\nexport function defaultOptionsHandler(\n resourceOptions: DefaultResourceOptions,\n { body, query, sudo, method = 'get' }: DefaultRequestOptions = {},\n): DefaultRequestReturn {\n const { headers: preconfiguredHeaders, requestTimeout, url } = resourceOptions;\n const headers = { ...preconfiguredHeaders };\n let bod: FormData | string;\n\n if (sudo) headers.sudo = sudo;\n\n // FIXME: Not the best comparison, but...it will have to do for now.\n if (typeof body === 'object' && body.constructor.name !== 'FormData') {\n bod = JSON.stringify(decamelizeKeys(body));\n headers['content-type'] = 'application/json';\n } else {\n bod = body as FormData;\n }\n\n return {\n headers,\n timeout: requestTimeout,\n method,\n searchParams: formatQuery(query),\n prefixUrl: url,\n body: bod,\n };\n}\n\nexport type RequestHandlerFn = (\n endpoint: string,\n options?: Record<string, unknown>,\n) =>\n | any\n | Promise<{\n body: Record<string, unknown> | Record<string, unknown>[];\n headers: Record<string, unknown> | Headers;\n status: number;\n }>;\n\nexport function createRequesterFn(\n optionsHandler: OptionsHandlerFn,\n requestHandler: RequestHandlerFn,\n): (serviceOptions: DefaultResourceOptions) => RequesterType {\n const methods = ['get', 'post', 'put', 'delete', 'stream'];\n\n return (serviceOptions) => {\n const requester: RequesterType = {} as RequesterType;\n\n methods.forEach((m) => {\n requester[m] = (endpoint: string, options: Record<string, unknown>) => {\n const requestOptions = optionsHandler(serviceOptions, { ...options, method: m });\n\n return requestHandler(endpoint, requestOptions);\n };\n });\n\n return requester;\n };\n}\n\nfunction extendClass<T extends Constructable>(Base: T, customConfig: Record<string, unknown>): T {\n return class extends Base {\n constructor(...options: any[]) {\n const [config, ...opts] = options;\n\n super({ ...customConfig, ...config }, ...opts);\n }\n };\n}\n\nexport function presetResourceArguments<T>(\n resources: T,\n customConfig: Record<string, unknown> = {},\n) {\n const updated = {};\n\n Object.entries(resources)\n .filter(([, s]) => typeof s === 'function') // FIXME: Odd default artifact included in this list during testing\n .forEach(([k, r]) => {\n updated[k] = extendClass(r, customConfig);\n });\n\n return updated as T;\n}\n","import { RequesterType, DefaultResourceOptions } from './RequesterUtils';\n\nexport interface BaseResourceOptions<C> {\n oauthToken?: string;\n token?: string;\n jobToken?: string;\n host?: string;\n prefixUrl?: string;\n version?: 3 | 4;\n rejectUnauthorized?: boolean;\n camelize?: C;\n requesterFn?: (resourceOptions: DefaultResourceOptions) => RequesterType;\n requestTimeout?: number;\n profileToken?: string;\n sudo?: string | number;\n profileMode?: 'execution' | 'memory';\n}\n\nexport class BaseResource<C extends boolean = false> {\n public readonly url: string;\n\n public readonly requester: RequesterType;\n\n public readonly requestTimeout: number;\n\n public readonly headers: { [header: string]: string };\n\n public readonly camelize: C | undefined;\n\n public readonly rejectUnauthorized: boolean;\n\n constructor({\n token,\n jobToken,\n oauthToken,\n sudo,\n profileToken,\n requesterFn,\n camelize,\n profileMode = 'execution',\n host = 'https://gitlab.com',\n prefixUrl = '',\n version = 4,\n rejectUnauthorized = true,\n requestTimeout = 300000,\n }: BaseResourceOptions<C> = {}) {\n if (!requesterFn) throw new ReferenceError('requesterFn must be passed');\n\n this.url = [host, 'api', `v${version}`, prefixUrl].join('/');\n\n this.headers = {\n 'user-agent': 'gitbeaker',\n };\n this.rejectUnauthorized = rejectUnauthorized;\n this.camelize = camelize;\n this.requestTimeout = requestTimeout;\n\n // Handle auth tokens\n if (oauthToken) this.headers.authorization = `Bearer ${oauthToken}`;\n else if (jobToken) this.headers['job-token'] = jobToken;\n else if (token) this.headers['private-token'] = token;\n\n // Profiling\n if (profileToken) {\n this.headers['X-Profile-Token'] = profileToken;\n this.headers['X-Profile-Mode'] = profileMode;\n }\n\n // Set sudo\n if (sudo) this.headers.Sudo = `${sudo}`;\n\n // Set requester instance using this information\n this.requester = requesterFn({ ...this });\n }\n}\n"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -64,10 +64,14 @@ function __read(o, n) {
64
64
  return ar;
65
65
  }
66
66
 
67
- function __spreadArray(to, from) {
68
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
69
- to[j] = from[i];
70
- return to;
67
+ function __spreadArray(to, from, pack) {
68
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
69
+ if (ar || !(i in from)) {
70
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
71
+ ar[i] = from[i];
72
+ }
73
+ }
74
+ return to.concat(ar || Array.prototype.slice.call(from));
71
75
  }
72
76
 
73
77
  // Utility methods
@@ -123,7 +127,7 @@ function extendClass(Base, customConfig) {
123
127
  }
124
128
  var _this = this;
125
129
  var _a = __read(options), config = _a[0], opts = _a.slice(1);
126
- _this = _super.apply(this, __spreadArray([__assign(__assign({}, customConfig), config)], __read(opts))) || this;
130
+ _this = _super.apply(this, __spreadArray([__assign(__assign({}, customConfig), config)], __read(opts), false)) || this;
127
131
  return _this;
128
132
  }
129
133
  return class_1;
@@ -149,7 +153,7 @@ var BaseResource = /** @class */ (function () {
149
153
  var _b = _a === void 0 ? {} : _a, token = _b.token, jobToken = _b.jobToken, oauthToken = _b.oauthToken, sudo = _b.sudo, profileToken = _b.profileToken, requesterFn = _b.requesterFn, camelize = _b.camelize, _c = _b.profileMode, profileMode = _c === void 0 ? 'execution' : _c, _d = _b.host, host = _d === void 0 ? 'https://gitlab.com' : _d, _e = _b.prefixUrl, prefixUrl = _e === void 0 ? '' : _e, _f = _b.version, version = _f === void 0 ? 4 : _f, _g = _b.rejectUnauthorized, rejectUnauthorized = _g === void 0 ? true : _g, _h = _b.requestTimeout, requestTimeout = _h === void 0 ? 300000 : _h;
150
154
  if (!requesterFn)
151
155
  throw new ReferenceError('requesterFn must be passed');
152
- this.url = [host, 'api', "v" + version, prefixUrl].join('/');
156
+ this.url = [host, 'api', "v".concat(version), prefixUrl].join('/');
153
157
  this.headers = {
154
158
  'user-agent': 'gitbeaker',
155
159
  };
@@ -158,7 +162,7 @@ var BaseResource = /** @class */ (function () {
158
162
  this.requestTimeout = requestTimeout;
159
163
  // Handle auth tokens
160
164
  if (oauthToken)
161
- this.headers.authorization = "Bearer " + oauthToken;
165
+ this.headers.authorization = "Bearer ".concat(oauthToken);
162
166
  else if (jobToken)
163
167
  this.headers['job-token'] = jobToken;
164
168
  else if (token)
@@ -170,7 +174,7 @@ var BaseResource = /** @class */ (function () {
170
174
  }
171
175
  // Set sudo
172
176
  if (sudo)
173
- this.headers.Sudo = "" + sudo;
177
+ this.headers.Sudo = "".concat(sudo);
174
178
  // Set requester instance using this information
175
179
  this.requester = requesterFn(__assign({}, this));
176
180
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/RequesterUtils.ts","../src/BaseResource.ts"],"sourcesContent":["import { decamelizeKeys } from 'xcase';\nimport FormData from 'form-data';\nimport { stringify } from 'qs';\n\n// Types\nexport interface Constructable<T = any> {\n new (...args: any[]): T;\n}\n\nexport interface RequesterType {\n get(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n post(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n put(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n delete(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n stream?(endpoint: string, options?: Record<string, unknown>): NodeJS.ReadableStream;\n}\n\nexport type DefaultResourceOptions = {\n headers: { [header: string]: string };\n requestTimeout: number;\n url: string;\n rejectUnauthorized: boolean;\n};\n\nexport type DefaultRequestOptions = {\n body?: FormData | Record<string, unknown>;\n query?: Record<string, unknown>;\n sudo?: string;\n method?: string;\n};\n\nexport type DefaultRequestReturn = {\n headers: Record<string, string> | Headers;\n timeout?: number;\n method: string;\n searchParams?: string;\n prefixUrl?: string;\n body?: string | FormData;\n};\n\n// Utility methods\nexport function formatQuery(params: Record<string, unknown> = {}): string {\n const decamelized = decamelizeKeys(params);\n\n return stringify(decamelized, { arrayFormat: 'brackets' });\n}\n\nexport type OptionsHandlerFn = (\n serviceOptions: DefaultResourceOptions,\n requestOptions: DefaultRequestOptions,\n) => DefaultRequestReturn;\nexport function defaultOptionsHandler(\n resourceOptions: DefaultResourceOptions,\n { body, query, sudo, method = 'get' }: DefaultRequestOptions = {},\n): DefaultRequestReturn {\n const { headers: preconfiguredHeaders, requestTimeout, url } = resourceOptions;\n const headers = { ...preconfiguredHeaders };\n let bod: FormData | string;\n\n if (sudo) headers.sudo = sudo;\n\n // FIXME: Not the best comparison, but...it will have to do for now.\n if (typeof body === 'object' && body.constructor.name !== 'FormData') {\n bod = JSON.stringify(decamelizeKeys(body));\n headers['content-type'] = 'application/json';\n } else {\n bod = body as FormData;\n }\n\n return {\n headers,\n timeout: requestTimeout,\n method,\n searchParams: formatQuery(query),\n prefixUrl: url,\n body: bod,\n };\n}\n\nexport type RequestHandlerFn = (\n endpoint: string,\n options?: Record<string, unknown>,\n) =>\n | any\n | Promise<{\n body: Record<string, unknown> | Record<string, unknown>[];\n headers: Record<string, unknown> | Headers;\n status: number;\n }>;\n\nexport function createRequesterFn(\n optionsHandler: OptionsHandlerFn,\n requestHandler: RequestHandlerFn,\n): (serviceOptions: DefaultResourceOptions) => RequesterType {\n const methods = ['get', 'post', 'put', 'delete', 'stream'];\n\n return (serviceOptions) => {\n const requester: RequesterType = {} as RequesterType;\n\n methods.forEach((m) => {\n requester[m] = (endpoint: string, options: Record<string, unknown>) => {\n const requestOptions = optionsHandler(serviceOptions, { ...options, method: m });\n\n return requestHandler(endpoint, requestOptions);\n };\n });\n\n return requester;\n };\n}\n\nfunction extendClass<T extends Constructable>(Base: T, customConfig: Record<string, unknown>): T {\n return class extends Base {\n constructor(...options: any[]) {\n const [config, ...opts] = options;\n\n super({ ...customConfig, ...config }, ...opts);\n }\n };\n}\n\nexport function presetResourceArguments<T>(\n resources: T,\n customConfig: Record<string, unknown> = {},\n) {\n const updated = {};\n\n Object.entries(resources)\n .filter(([, s]) => typeof s === 'function') // FIXME: Odd default artifact included in this list during testing\n .forEach(([k, r]) => {\n updated[k] = extendClass(r, customConfig);\n });\n\n return updated as T;\n}\n","import { RequesterType, DefaultResourceOptions } from './RequesterUtils';\n\nexport interface BaseResourceOptions<C> {\n oauthToken?: string;\n token?: string;\n jobToken?: string;\n host?: string;\n prefixUrl?: string;\n version?: 3 | 4;\n rejectUnauthorized?: boolean;\n camelize?: C;\n requesterFn?: (resourceOptions: DefaultResourceOptions) => RequesterType;\n requestTimeout?: number;\n profileToken?: string;\n sudo?: string | number;\n profileMode?: 'execution' | 'memory';\n}\n\nexport class BaseResource<C extends boolean = false> {\n public readonly url: string;\n\n public readonly requester: RequesterType;\n\n public readonly requestTimeout: number;\n\n public readonly headers: { [header: string]: string };\n\n public readonly camelize: C | undefined;\n\n public readonly rejectUnauthorized: boolean;\n\n constructor({\n token,\n jobToken,\n oauthToken,\n sudo,\n profileToken,\n requesterFn,\n camelize,\n profileMode = 'execution',\n host = 'https://gitlab.com',\n prefixUrl = '',\n version = 4,\n rejectUnauthorized = true,\n requestTimeout = 300000,\n }: BaseResourceOptions<C> = {}) {\n if (!requesterFn) throw new ReferenceError('requesterFn must be passed');\n\n this.url = [host, 'api', `v${version}`, prefixUrl].join('/');\n\n this.headers = {\n 'user-agent': 'gitbeaker',\n };\n this.rejectUnauthorized = rejectUnauthorized;\n this.camelize = camelize;\n this.requestTimeout = requestTimeout;\n\n // Handle auth tokens\n if (oauthToken) this.headers.authorization = `Bearer ${oauthToken}`;\n else if (jobToken) this.headers['job-token'] = jobToken;\n else if (token) this.headers['private-token'] = token;\n\n // Profiling\n if (profileToken) {\n this.headers['X-Profile-Token'] = profileToken;\n this.headers['X-Profile-Mode'] = profileMode;\n }\n\n // Set sudo\n if (sudo) this.headers.Sudo = `${sudo}`;\n\n // Set requester instance using this information\n this.requester = requesterFn({ ...this });\n }\n}\n"],"names":["decamelizeKeys","stringify"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/RequesterUtils.ts","../src/BaseResource.ts"],"sourcesContent":["import { decamelizeKeys } from 'xcase';\nimport FormData from 'form-data';\nimport { stringify } from 'qs';\n\n// Types\nexport interface Constructable<T = any> {\n new (...args: any[]): T;\n}\n\nexport interface RequesterType {\n get(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n post(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n put(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n delete(endpoint: string, options?: Record<string, unknown>): Promise<any>;\n stream?(endpoint: string, options?: Record<string, unknown>): NodeJS.ReadableStream;\n}\n\nexport type DefaultResourceOptions = {\n headers: { [header: string]: string };\n requestTimeout: number;\n url: string;\n rejectUnauthorized: boolean;\n};\n\nexport type DefaultRequestOptions = {\n body?: FormData | Record<string, unknown>;\n query?: Record<string, unknown>;\n sudo?: string;\n method?: string;\n};\n\nexport type DefaultRequestReturn = {\n headers: Record<string, string> | Headers;\n timeout?: number;\n method: string;\n searchParams?: string;\n prefixUrl?: string;\n body?: string | FormData;\n};\n\n// Utility methods\nexport function formatQuery(params: Record<string, unknown> = {}): string {\n const decamelized = decamelizeKeys(params);\n\n return stringify(decamelized, { arrayFormat: 'brackets' });\n}\n\nexport type OptionsHandlerFn = (\n serviceOptions: DefaultResourceOptions,\n requestOptions: DefaultRequestOptions,\n) => DefaultRequestReturn;\nexport function defaultOptionsHandler(\n resourceOptions: DefaultResourceOptions,\n { body, query, sudo, method = 'get' }: DefaultRequestOptions = {},\n): DefaultRequestReturn {\n const { headers: preconfiguredHeaders, requestTimeout, url } = resourceOptions;\n const headers = { ...preconfiguredHeaders };\n let bod: FormData | string;\n\n if (sudo) headers.sudo = sudo;\n\n // FIXME: Not the best comparison, but...it will have to do for now.\n if (typeof body === 'object' && body.constructor.name !== 'FormData') {\n bod = JSON.stringify(decamelizeKeys(body));\n headers['content-type'] = 'application/json';\n } else {\n bod = body as FormData;\n }\n\n return {\n headers,\n timeout: requestTimeout,\n method,\n searchParams: formatQuery(query),\n prefixUrl: url,\n body: bod,\n };\n}\n\nexport type RequestHandlerFn = (\n endpoint: string,\n options?: Record<string, unknown>,\n) =>\n | any\n | Promise<{\n body: Record<string, unknown> | Record<string, unknown>[];\n headers: Record<string, unknown> | Headers;\n status: number;\n }>;\n\nexport function createRequesterFn(\n optionsHandler: OptionsHandlerFn,\n requestHandler: RequestHandlerFn,\n): (serviceOptions: DefaultResourceOptions) => RequesterType {\n const methods = ['get', 'post', 'put', 'delete', 'stream'];\n\n return (serviceOptions) => {\n const requester: RequesterType = {} as RequesterType;\n\n methods.forEach((m) => {\n requester[m] = (endpoint: string, options: Record<string, unknown>) => {\n const requestOptions = optionsHandler(serviceOptions, { ...options, method: m });\n\n return requestHandler(endpoint, requestOptions);\n };\n });\n\n return requester;\n };\n}\n\nfunction extendClass<T extends Constructable>(Base: T, customConfig: Record<string, unknown>): T {\n return class extends Base {\n constructor(...options: any[]) {\n const [config, ...opts] = options;\n\n super({ ...customConfig, ...config }, ...opts);\n }\n };\n}\n\nexport function presetResourceArguments<T>(\n resources: T,\n customConfig: Record<string, unknown> = {},\n) {\n const updated = {};\n\n Object.entries(resources)\n .filter(([, s]) => typeof s === 'function') // FIXME: Odd default artifact included in this list during testing\n .forEach(([k, r]) => {\n updated[k] = extendClass(r, customConfig);\n });\n\n return updated as T;\n}\n","import { RequesterType, DefaultResourceOptions } from './RequesterUtils';\n\nexport interface BaseResourceOptions<C> {\n oauthToken?: string;\n token?: string;\n jobToken?: string;\n host?: string;\n prefixUrl?: string;\n version?: 3 | 4;\n rejectUnauthorized?: boolean;\n camelize?: C;\n requesterFn?: (resourceOptions: DefaultResourceOptions) => RequesterType;\n requestTimeout?: number;\n profileToken?: string;\n sudo?: string | number;\n profileMode?: 'execution' | 'memory';\n}\n\nexport class BaseResource<C extends boolean = false> {\n public readonly url: string;\n\n public readonly requester: RequesterType;\n\n public readonly requestTimeout: number;\n\n public readonly headers: { [header: string]: string };\n\n public readonly camelize: C | undefined;\n\n public readonly rejectUnauthorized: boolean;\n\n constructor({\n token,\n jobToken,\n oauthToken,\n sudo,\n profileToken,\n requesterFn,\n camelize,\n profileMode = 'execution',\n host = 'https://gitlab.com',\n prefixUrl = '',\n version = 4,\n rejectUnauthorized = true,\n requestTimeout = 300000,\n }: BaseResourceOptions<C> = {}) {\n if (!requesterFn) throw new ReferenceError('requesterFn must be passed');\n\n this.url = [host, 'api', `v${version}`, prefixUrl].join('/');\n\n this.headers = {\n 'user-agent': 'gitbeaker',\n };\n this.rejectUnauthorized = rejectUnauthorized;\n this.camelize = camelize;\n this.requestTimeout = requestTimeout;\n\n // Handle auth tokens\n if (oauthToken) this.headers.authorization = `Bearer ${oauthToken}`;\n else if (jobToken) this.headers['job-token'] = jobToken;\n else if (token) this.headers['private-token'] = token;\n\n // Profiling\n if (profileToken) {\n this.headers['X-Profile-Token'] = profileToken;\n this.headers['X-Profile-Mode'] = profileMode;\n }\n\n // Set sudo\n if (sudo) this.headers.Sudo = `${sudo}`;\n\n // Set requester instance using this information\n this.requester = requesterFn({ ...this });\n }\n}\n"],"names":["decamelizeKeys","stringify"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gitbeaker/requester-utils",
3
3
  "description": "Utility functions for requester implementatons used in @gitbeaker",
4
- "version": "34.6.0",
4
+ "version": "34.7.0",
5
5
  "author": {
6
6
  "name": "Justin Dalrymple"
7
7
  },
@@ -18,7 +18,7 @@
18
18
  "@types/qs": "^6.9.7",
19
19
  "jest-extended": "^1.0.0",
20
20
  "rollup": "^2.47.0",
21
- "rollup-plugin-typescript2": "^0.30.0",
21
+ "rollup-plugin-typescript2": "^0.31.1",
22
22
  "tslib": "^2.3.1",
23
23
  "typescript": "^4.2.4"
24
24
  },
@@ -47,5 +47,5 @@
47
47
  "test:integration": "node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage test/integration",
48
48
  "test:unit": "node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage test/unit"
49
49
  },
50
- "gitHead": "acd6e1ea1c05076621b8be1163a6d120067fd029"
50
+ "gitHead": "ee20704d421838fb50f868112d7a367c8591984f"
51
51
  }