rqlite-js 2.5.6 → 2.6.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.
Files changed (86) hide show
  1. package/README.md +174 -155
  2. package/lib/api/backup/index.js +47 -47
  3. package/lib/api/backup/index.js.map +1 -1
  4. package/lib/api/backup/test.unit.js +45 -0
  5. package/lib/api/backup/test.unit.js.map +1 -0
  6. package/lib/api/backup-formats.js +16 -0
  7. package/lib/api/backup-formats.js.map +1 -0
  8. package/lib/api/client/index.js +63 -42
  9. package/lib/api/client/index.js.map +1 -1
  10. package/lib/api/client/test.unit.js +53 -0
  11. package/lib/api/client/test.unit.js.map +1 -0
  12. package/lib/api/consistency-levels.js +30 -0
  13. package/lib/api/consistency-levels.js.map +1 -0
  14. package/lib/api/data/index.js +53 -69
  15. package/lib/api/data/index.js.map +1 -1
  16. package/lib/api/data/test.unit.js +98 -0
  17. package/lib/api/data/test.unit.js.map +1 -0
  18. package/lib/api/paths.js +33 -0
  19. package/lib/api/paths.js.map +1 -0
  20. package/lib/api/query-params.js +43 -0
  21. package/lib/api/query-params.js.map +1 -0
  22. package/lib/api/results/data-result-error.js +39 -10
  23. package/lib/api/results/data-result-error.js.map +1 -1
  24. package/lib/api/results/data-result.js +57 -51
  25. package/lib/api/results/data-result.js.map +1 -1
  26. package/lib/api/results/data-results.js +50 -30
  27. package/lib/api/results/data-results.js.map +1 -1
  28. package/lib/api/results/index.js +1 -1
  29. package/lib/api/results/index.js.map +1 -1
  30. package/lib/api/results/result-fields.js +47 -0
  31. package/lib/api/results/result-fields.js.map +1 -0
  32. package/lib/api/results/test.unit.js +238 -0
  33. package/lib/api/results/test.unit.js.map +1 -0
  34. package/lib/api/status/index.js +40 -28
  35. package/lib/api/status/index.js.map +1 -1
  36. package/lib/api/status/test.unit.js +57 -0
  37. package/lib/api/status/test.unit.js.map +1 -0
  38. package/lib/http-request/auth-keys.js +15 -0
  39. package/lib/http-request/auth-keys.js.map +1 -0
  40. package/lib/http-request/content-types.js +4 -4
  41. package/lib/http-request/content-types.js.map +1 -1
  42. package/lib/http-request/errors.js.map +1 -1
  43. package/lib/http-request/http-headers.js +20 -0
  44. package/lib/http-request/http-headers.js.map +1 -0
  45. package/lib/http-request/http-methods.js +13 -13
  46. package/lib/http-request/http-methods.js.map +1 -1
  47. package/lib/http-request/index.js +295 -275
  48. package/lib/http-request/index.js.map +1 -1
  49. package/lib/http-request/retryable.js +6 -6
  50. package/lib/http-request/retryable.js.map +1 -1
  51. package/lib/http-request/test.unit.js +560 -0
  52. package/lib/http-request/test.unit.js.map +1 -0
  53. package/lib/index.js +31 -6
  54. package/lib/index.js.map +1 -1
  55. package/lib/test/api-data-execute-nock.js +142 -0
  56. package/lib/test/api-data-execute-nock.js.map +1 -0
  57. package/lib/test/api-data-query-nock.js +210 -0
  58. package/lib/test/api-data-query-nock.js.map +1 -0
  59. package/lib/test/backups/backup-nock.js +29 -0
  60. package/lib/test/backups/backup-nock.js.map +1 -0
  61. package/lib/test/backups/restore-nock.js +30 -0
  62. package/lib/test/backups/restore-nock.js.map +1 -0
  63. package/lib/test/env.js +15 -0
  64. package/lib/test/env.js.map +1 -0
  65. package/lib/test/unit/index.unit.js +27 -0
  66. package/lib/test/unit/index.unit.js.map +1 -0
  67. package/lib/test.integration.js +238 -0
  68. package/lib/test.integration.js.map +1 -0
  69. package/package.json +39 -27
  70. package/.eslintrc +0 -20
  71. package/.travis.yml +0 -24
  72. package/es6/api/backup/index.js +0 -71
  73. package/es6/api/client/index.js +0 -83
  74. package/es6/api/data/index.js +0 -123
  75. package/es6/api/results/data-result-error.js +0 -32
  76. package/es6/api/results/data-result.js +0 -134
  77. package/es6/api/results/data-results.js +0 -121
  78. package/es6/api/results/index.js +0 -7
  79. package/es6/api/status/index.js +0 -54
  80. package/es6/http-request/content-types.js +0 -4
  81. package/es6/http-request/errors.js +0 -16
  82. package/es6/http-request/http-methods.js +0 -39
  83. package/es6/http-request/index.js +0 -743
  84. package/es6/http-request/retryable.js +0 -41
  85. package/es6/index.js +0 -13
  86. package/jsconfig.json +0 -18
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.unit.js","names":["_chai","require","_http","_https","_apiDataQueryNock","_apiDataExecuteNock","_contentTypes","_retryable","_","_interopRequireWildcard","cache","e","t","__esModule","r","c","a","Object","defineProperty","n","__proto__","default","WeakMap","has","get","set","hasOwnProperty","call","getOwnPropertyDescriptor","username","password","auth","freeze","user","pass","handleRequestStreamAsPromise","request","Promise","resolve","reject","json","Buffer","from","on","data","concat","JSON","parse","ERROR_CODE_NOT_RETRYABLE","HTTP_STATUS_CODE_NOT_RETRYABLE","describe","it","assert","throws","HttpRequest","host1","host2","deepEqual","getHosts","CONTENT_TYPE_APPLICATION_JSON","Accept","createDefaultHeaders","equal","getWaitTimeExponential","url","httpRequest","before","RETRYABLE_HTTP_METHODS","forEach","httpMethod","RETRYABLE_STATUS_CODES","statusCode","isTrue","requestIsRetryable","RETRYABLE_ERROR_CODES","errorCode","isFalse","httpAgent","HttpAgent","getHttpAgent","httpsAgent","HttpsAgent","getHttpsAgent","path","scope","querySuccess","query","res","uri","isDone","QUERY_SUCCESS_RESPONSE","body","exponentailBackoffBase","exponentailBackoffExponent","scopeFailure","queryFailureHttpStatusCode","scopeSuccess","scopes","isRejected","i","queryFailureErrorCode","test","urlRedirectDestination","scopeRedirect","queryRedirectSuccess","redirectLocation","authentication","stream","result","executeSuccess","post","EXECUTE_SUCCESS_RESPONSE","executeFailureHttpStatusCode","executeFailureErrorCode","executeRedirectSuccess","useLeader","getLeaderHostIndex"],"sources":["../../es6/http-request/test.unit.js"],"sourcesContent":["import { assert } from 'chai'\nimport { Agent as HttpAgent } from 'http'\nimport { Agent as HttpsAgent } from 'https'\nimport {\n querySuccess,\n queryFailureHttpStatusCode,\n queryFailureErrorCode,\n queryRedirectSuccess,\n QUERY_SUCCESS_RESPONSE,\n} from '../test/api-data-query-nock'\nimport {\n executeSuccess,\n executeFailureHttpStatusCode,\n executeFailureErrorCode,\n executeRedirectSuccess,\n EXECUTE_SUCCESS_RESPONSE,\n} from '../test/api-data-execute-nock'\nimport { CONTENT_TYPE_APPLICATION_JSON } from './content-types'\nimport {\n RETRYABLE_ERROR_CODES,\n RETRYABLE_HTTP_METHODS,\n RETRYABLE_STATUS_CODES,\n} from './retryable'\nimport HttpRequest, { createDefaultHeaders, getWaitTimeExponential } from '.'\n\nconst username = 'TestUsername'\nconst password = 'TestPassword'\nconst auth = Object.freeze({\n user: username,\n pass: password,\n})\n\n/**\n * Capture the stream data and resolve a promise with the parsed JSON\n */\nfunction handleRequestStreamAsPromise (request) {\n return new Promise((resolve, reject) => {\n let json = Buffer.from('')\n request\n .on('data', (data) => {\n json = Buffer.concat([json, data])\n })\n .on('end', () => resolve(JSON.parse(json)))\n .on('error', reject)\n })\n}\nconst ERROR_CODE_NOT_RETRYABLE = 'UNKNOWN'\nconst HTTP_STATUS_CODE_NOT_RETRYABLE = 418 // I am little tea pot\n\ndescribe('http-request', () => {\n describe('construtor()', () => {\n it('should throw an error if no hosts are provided', () => {\n assert.throws(() => new HttpRequest(''), 'At least one host must be provided')\n })\n it('should set the hosts when provided as a string', () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const request = new HttpRequest(`${host1}, ${host2}`)\n assert.deepEqual(request.getHosts(), [host1, host2])\n })\n it('should set the hosts provided as an array', () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const request = new HttpRequest([host1, host2])\n assert.deepEqual(request.getHosts(), [host1, host2])\n })\n })\n describe('Function: createDefaultHeaders()', () => {\n it(`should add the Accept header with a value of ${CONTENT_TYPE_APPLICATION_JSON}`, () => {\n assert.deepEqual({ Accept: CONTENT_TYPE_APPLICATION_JSON }, createDefaultHeaders())\n })\n })\n describe('Function: getWaitTimeExponential()', () => {\n it('should get the exponential value for attempt 0', () => {\n assert.equal(getWaitTimeExponential(0, 100, 2), 0)\n })\n it('should get the exponential value for attempt 1', () => {\n assert.equal(getWaitTimeExponential(1, 100, 2), 200)\n })\n it('should get the exponential value for attempt 2', () => {\n assert.equal(getWaitTimeExponential(2, 100, 2), 400)\n })\n })\n describe('Method: HttpRequest.requestIsRetryable()', () => {\n const url = 'http://www.rqlite.com:4001'\n let httpRequest\n before('create http request instance', () => {\n httpRequest = new HttpRequest(url)\n })\n RETRYABLE_HTTP_METHODS.forEach((httpMethod) => {\n RETRYABLE_STATUS_CODES.forEach((statusCode) => {\n it(`should return true for HTTP method ${httpMethod} and status code ${statusCode}`, () => {\n assert.isTrue(httpRequest.requestIsRetryable({\n statusCode,\n httpMethod,\n }))\n })\n })\n RETRYABLE_ERROR_CODES.forEach((errorCode) => {\n it(`should return true for HTTP method ${httpMethod} error code ${errorCode}`, () => {\n assert.isTrue(httpRequest.requestIsRetryable({\n httpMethod,\n statusCode: HTTP_STATUS_CODE_NOT_RETRYABLE,\n errorCode,\n }))\n })\n })\n it(`should return false for HTTP method ${httpMethod} and status code ${HTTP_STATUS_CODE_NOT_RETRYABLE}`, () => {\n assert.isFalse(httpRequest.requestIsRetryable({\n httpMethod,\n statusCode: HTTP_STATUS_CODE_NOT_RETRYABLE,\n }))\n })\n it(`should return false for HTTP method ${httpMethod} and error code ${ERROR_CODE_NOT_RETRYABLE}`, () => {\n assert.isFalse(httpRequest.requestIsRetryable({\n httpMethod,\n statusCode: HTTP_STATUS_CODE_NOT_RETRYABLE,\n errorCode: ERROR_CODE_NOT_RETRYABLE,\n }))\n })\n })\n it('should return false for HTTP method UNKNOWN', () => {\n assert.isFalse(httpRequest.requestIsRetryable({\n httpMethod: 'UNKNOWN',\n }))\n })\n })\n describe('Method: HttpRequest.get()', () => {\n it('should set and get an http agent', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpAgent = new HttpAgent()\n const httpRequest = new HttpRequest(url, { httpAgent })\n assert.equal(httpRequest.getHttpAgent(), httpAgent, 'http agent is set on http request')\n })\n it('should set and get an https agent', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpsAgent = new HttpsAgent()\n const httpRequest = new HttpRequest(url, { httpsAgent })\n assert.equal(httpRequest.getHttpsAgent(), httpsAgent, 'https agent is set on http request')\n })\n it('should perform a HTTP GET request', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const scope = querySuccess({ url, path, query: {} })\n const res = await httpRequest.get({ uri: path })\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(QUERY_SUCCESS_RESPONSE, res.body)\n })\n RETRYABLE_STATUS_CODES.forEach((statusCode) => {\n it(`should perform a HTTP GET request and retry using the next host on retryable http status code ${statusCode}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const scopeFailure = queryFailureHttpStatusCode({ url: host1, path, statusCode })\n const scopeSuccess = querySuccess({ url: host2, path })\n const res = await httpRequest.get({ uri: path })\n assert.isTrue(scopeSuccess.isDone(), 'http success request captured by nock')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n assert.deepEqual(QUERY_SUCCESS_RESPONSE, res.body)\n })\n it(`should perform a HTTP GET request, retry using the next host on retryable http status code ${statusCode} and reject on max retries`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const scopes = [\n queryFailureHttpStatusCode({ url: host1, path, statusCode }),\n queryFailureHttpStatusCode({ url: host2, path, statusCode }),\n queryFailureHttpStatusCode({ url: host1, path, statusCode }),\n queryFailureHttpStatusCode({ url: host2, path, statusCode }),\n queryFailureHttpStatusCode({ url: host1, path, statusCode }),\n queryFailureHttpStatusCode({ url: host2, path, statusCode }),\n // Circles back to original host on last retry\n queryFailureHttpStatusCode({ url: host1, path, statusCode }),\n ]\n await assert.isRejected(httpRequest.get({ uri: path }), `Request failed with status code ${statusCode}`)\n scopes.forEach((scope, i) => {\n assert.isTrue(scope.isDone(), `http failure request attempt ${i} captured by nock`)\n })\n })\n })\n it(`should perform a HTTP GET request and not retry on http status code ${HTTP_STATUS_CODE_NOT_RETRYABLE}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const scopeFailure = queryFailureHttpStatusCode({\n url: host1, path, statusCode: HTTP_STATUS_CODE_NOT_RETRYABLE,\n })\n const scopeSuccess = querySuccess({ url: host2, path })\n await assert.isRejected(httpRequest.get({ uri: path }), `Request failed with status code ${HTTP_STATUS_CODE_NOT_RETRYABLE}`)\n assert.isFalse(scopeSuccess.isDone(), 'http success request captured by nock, but not performed')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n })\n RETRYABLE_ERROR_CODES.forEach((errorCode) => {\n it(`should perform a HTTP GET request and retry using the next host on retryable error code ${errorCode}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const scopeFailure = queryFailureErrorCode({ url: host1, path, errorCode })\n const scopeSuccess = querySuccess({ url: host2, path })\n const res = await httpRequest.get({ uri: path })\n assert.isTrue(scopeSuccess.isDone(), 'http success request captured by nock')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n assert.deepEqual(QUERY_SUCCESS_RESPONSE, res.body)\n })\n it(`should perform a HTTP GET request, retry using the next host on retryable error code ${errorCode} and reject on max retries`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const scopes = [\n queryFailureErrorCode({ url: host1, path, errorCode }),\n queryFailureErrorCode({ url: host2, path, errorCode }),\n queryFailureErrorCode({ url: host1, path, errorCode }),\n queryFailureErrorCode({ url: host2, path, errorCode }),\n queryFailureErrorCode({ url: host1, path, errorCode }),\n queryFailureErrorCode({ url: host2, path, errorCode }),\n // Circles back to original host on last retry\n queryFailureErrorCode({ url: host1, path, errorCode }),\n ]\n await assert.isRejected(httpRequest.get({ uri: path }), errorCode)\n scopes.forEach((scope, i) => {\n assert.isTrue(scope.isDone(), `http failure request attempt ${i} captured by nock`)\n })\n })\n })\n it(`should perform a HTTP GET request and not retry on error code ${ERROR_CODE_NOT_RETRYABLE}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const scopeFailure = queryFailureErrorCode({\n url: host1, path, errorCode: ERROR_CODE_NOT_RETRYABLE,\n })\n const scopeSuccess = querySuccess({ url: host2, path })\n await assert.isRejected(httpRequest.get({ uri: path }), ERROR_CODE_NOT_RETRYABLE)\n assert.isFalse(scopeSuccess.isDone(), 'http success request captured by nock, but not performed')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n })\n it('should perform a HTTP GET request with a query', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const query = { test: '123' }\n const scope = querySuccess({ url, path, query })\n const res = await httpRequest.get({ uri: path, query })\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(QUERY_SUCCESS_RESPONSE, res.body)\n })\n it('should perform a HTTP GET request with a query and follow redirects', async () => {\n const url = 'http://www.rqlite.com:4001'\n const urlRedirectDestination = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const query = { test: '123' }\n const scopeRedirect = queryRedirectSuccess({\n url,\n path,\n query,\n redirectLocation: `${urlRedirectDestination}${path}`,\n })\n const scope = querySuccess({ url: urlRedirectDestination, path, query })\n const res = await httpRequest.get({ uri: path, query })\n assert.isTrue(scopeRedirect.isDone(), 'http redirect request captured by nock')\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(QUERY_SUCCESS_RESPONSE, res.body)\n })\n it('should perform a HTTP GET request with basic authentication', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url, {\n authentication: {\n username,\n password,\n },\n })\n const path = '/test'\n const query = { test: '123' }\n const scope = querySuccess({ url, path, auth, query })\n const res = await httpRequest.get({ uri: path, query })\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(QUERY_SUCCESS_RESPONSE, res.body)\n })\n it('should perform a HTTP GET request with a query when the stream option is true', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const query = { test: '123' }\n const scope = querySuccess({ url, path, query })\n const request = await httpRequest.get({ uri: path, query, stream: true })\n const result = await handleRequestStreamAsPromise(request)\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(result, QUERY_SUCCESS_RESPONSE)\n })\n it('should perform a HTTP GET request with a query when the stream option is true and follow redirects', async () => {\n const url = 'http://www.rqlite.com:4001'\n const urlRedirectDestination = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const query = { test: '123' }\n const scopeRedirect = queryRedirectSuccess({\n url,\n path,\n query,\n redirectLocation: `${urlRedirectDestination}${path}`,\n })\n const scope = querySuccess({ url: urlRedirectDestination, path, query })\n const request = await httpRequest.get({ uri: path, query, stream: true })\n const result = await handleRequestStreamAsPromise(request)\n assert.isTrue(scopeRedirect.isDone(), 'http redirect request captured by nock')\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(result, QUERY_SUCCESS_RESPONSE)\n })\n it('should perform a HTTP GET request with basic authentication when the stream option is true', async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url, {\n authentication: {\n username,\n password,\n },\n })\n const path = '/test'\n const query = { test: '123' }\n const scope = querySuccess({ url, path, auth, query })\n const request = await httpRequest.get({ uri: path, query, stream: true })\n const result = await handleRequestStreamAsPromise(request)\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(result, QUERY_SUCCESS_RESPONSE)\n })\n })\n describe('Method: HttpRequest.post()', () => {\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scope = executeSuccess({ url, path, body })\n const res = await httpRequest.post({ uri: path, body })\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n })\n RETRYABLE_STATUS_CODES.forEach((statusCode) => {\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and retry using the next host on retryable http status code ${statusCode}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeFailure = executeFailureHttpStatusCode({ url: host1, path, body, statusCode })\n const scopeSuccess = executeSuccess({ url: host2, path, body })\n const res = await httpRequest.post({ uri: path, body })\n assert.isTrue(scopeSuccess.isDone(), 'http success request captured by nock')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and retry using the next host on retryable http status code ${statusCode} and reject on max retries`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopes = [\n executeFailureHttpStatusCode({ url: host1, path, body, statusCode }),\n executeFailureHttpStatusCode({ url: host2, path, body, statusCode }),\n executeFailureHttpStatusCode({ url: host1, path, body, statusCode }),\n executeFailureHttpStatusCode({ url: host2, path, body, statusCode }),\n executeFailureHttpStatusCode({ url: host1, path, body, statusCode }),\n executeFailureHttpStatusCode({ url: host2, path, body, statusCode }),\n // Circles back to original host on last retry\n executeFailureHttpStatusCode({ url: host1, path, body, statusCode }),\n ]\n await assert.isRejected(httpRequest.post({ uri: path, body }), `Request failed with status code ${statusCode}`)\n scopes.forEach((scope, i) => {\n assert.isTrue(scope.isDone(), `http failure request attempt ${i} captured by nock`)\n })\n })\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and not retry on http status code ${HTTP_STATUS_CODE_NOT_RETRYABLE}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeFailure = executeFailureHttpStatusCode({\n url: host1, path, body, statusCode: HTTP_STATUS_CODE_NOT_RETRYABLE,\n })\n const scopeSuccess = executeSuccess({ url: host2, path, body })\n await assert.isRejected(httpRequest.post({ uri: path, body }), `Request failed with status code ${HTTP_STATUS_CODE_NOT_RETRYABLE}`)\n assert.isFalse(scopeSuccess.isDone(), 'http success request captured by nock, but not called')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n })\n RETRYABLE_ERROR_CODES.forEach((errorCode) => {\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and retry using the next host on retryable error code ${errorCode}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeFailure = executeFailureErrorCode({ url: host1, path, body, errorCode })\n const scopeSuccess = executeSuccess({ url: host2, path, body })\n const res = await httpRequest.post({ uri: path, body })\n assert.isTrue(scopeSuccess.isDone(), 'http success request captured by nock')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and retry using the next host on retryable error code ${errorCode} and reject on max retries`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopes = [\n executeFailureErrorCode({ url: host1, path, body, errorCode }),\n executeFailureErrorCode({ url: host2, path, body, errorCode }),\n executeFailureErrorCode({ url: host1, path, body, errorCode }),\n executeFailureErrorCode({ url: host2, path, body, errorCode }),\n executeFailureErrorCode({ url: host1, path, body, errorCode }),\n executeFailureErrorCode({ url: host2, path, body, errorCode }),\n // Circles back to original host on last retry\n executeFailureErrorCode({ url: host1, path, body, errorCode }),\n ]\n await assert.isRejected(httpRequest.post({ uri: path, body }), errorCode)\n scopes.forEach((scope, i) => {\n assert.isTrue(scope.isDone(), `http failure request attempt ${i} captured by nock`)\n })\n })\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and not retry on error code ${ERROR_CODE_NOT_RETRYABLE}`, async () => {\n const host1 = 'http://www.rqlite.com:4001'\n const host2 = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(`${host1},${host2}`, { exponentailBackoffBase: 0, exponentailBackoffExponent: 0 })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeFailure = executeFailureErrorCode({\n url: host1, path, body, errorCode: ERROR_CODE_NOT_RETRYABLE,\n })\n const scopeSuccess = executeSuccess({ url: host2, path, body })\n await assert.isRejected(httpRequest.post({ uri: path, body }), ERROR_CODE_NOT_RETRYABLE)\n assert.isFalse(scopeSuccess.isDone(), 'http success request captured by nock, but not called')\n assert.isTrue(scopeFailure.isDone(), 'http failure request captured by nock')\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and follow redirects`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const urlRedirectDestination = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeRedirect = executeRedirectSuccess({\n url,\n path,\n redirectLocation: `${urlRedirectDestination}${path}`,\n body,\n })\n const scope = executeSuccess({ url: urlRedirectDestination, path })\n const res = await httpRequest.post({ uri: path, body })\n assert.isTrue(scopeRedirect.isDone(), 'http redirect request captured by nock')\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and follow redirects when useLeader is true plus redirect host is not in host list`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const urlRedirectDestination = 'http://www.rqlite.com:4002'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeRedirect = executeRedirectSuccess({\n url,\n path,\n redirectLocation: `${urlRedirectDestination}${path}`,\n body,\n })\n const scope = executeSuccess({ url: urlRedirectDestination, path })\n const res = await httpRequest.post({ uri: path, body, useLeader: true })\n assert.isTrue(scopeRedirect.isDone(), 'http redirect request captured by nock')\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body and follow redirects when useLeader is true plus redirect host is in host list`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const urlRedirectDestination = 'http://www.rqlite.com:4002'\n const path = '/test'\n const httpRequest = new HttpRequest(`${url},${urlRedirectDestination}${path}`)\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scopeRedirect = executeRedirectSuccess({\n url,\n path,\n redirectLocation: `${urlRedirectDestination}${path}`,\n body,\n })\n const scope = executeSuccess({ url: urlRedirectDestination, path })\n const res = await httpRequest.post({ uri: path, body, useLeader: true })\n assert.isTrue(scopeRedirect.isDone(), 'http redirect request captured by nock')\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n assert.equal(httpRequest.getLeaderHostIndex(), 1, 'leader host index matches redirect')\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body with basic auth`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url, {\n authentication: {\n username,\n password,\n },\n })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scope = executeSuccess({ url, path, auth })\n const res = await httpRequest.post({ uri: path, body })\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(res.body, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body when the stream option is true`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url)\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scope = executeSuccess({ url, path })\n const request = await httpRequest.post({ uri: path, body, stream: true })\n const result = await handleRequestStreamAsPromise(request)\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(result, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body with basic auth when the stream option is true`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url, {\n authentication: {\n username,\n password,\n },\n })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scope = executeSuccess({ url, path, auth })\n const request = await httpRequest.post({ uri: path, body, stream: true })\n const result = await handleRequestStreamAsPromise(request)\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(result, EXECUTE_SUCCESS_RESPONSE)\n })\n it(`should send a HTTP POST request including ${CONTENT_TYPE_APPLICATION_JSON} body with basic auth used in constructor when the stream option is true`, async () => {\n const url = 'http://www.rqlite.com:4001'\n const httpRequest = new HttpRequest(url, {\n authentication: {\n username,\n password,\n },\n })\n const path = '/test'\n const body = ['INSERT INTO foo(name) VALUES(\"fiona\")']\n const scope = executeSuccess({ url, path, auth })\n const request = await httpRequest.post({ uri: path, body, stream: true })\n const result = await handleRequestStreamAsPromise(request)\n assert.isTrue(scope.isDone(), 'http request captured by nock')\n assert.deepEqual(result, EXECUTE_SUCCESS_RESPONSE)\n })\n })\n})\n"],"mappings":"aAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;;;;;;;AAOA,IAAAI,mBAAA,GAAAJ,OAAA;;;;;;;AAOA,IAAAK,aAAA,GAAAL,OAAA;AACA,IAAAM,UAAA,GAAAN,OAAA;;;;;AAKA,IAAAO,CAAA,GAAAC,uBAAA,CAAAR,OAAA,OAA6E,IAAAS,KAAA,UAAAD,wBAAAE,CAAA,EAAAC,CAAA,QAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAE,UAAA,SAAAF,CAAA,KAAAG,CAAA,CAAAC,CAAA,CAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,CAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,OAAAM,MAAA,CAAAN,CAAA,MAAAA,CAAA,SAAAQ,CAAA,KAAAT,KAAA,yBAAAY,OAAA,KAAAZ,KAAA,OAAAY,OAAA,KAAAZ,KAAA,OAAAA,KAAA,CAAAa,GAAA,CAAAZ,CAAA,UAAAD,KAAA,CAAAc,GAAA,CAAAb,CAAA,CAAAD,CAAA,MAAAe,GAAA,CAAAd,CAAA,EAAAQ,CAAA,QAAAJ,CAAA,IAAAJ,CAAA,gBAAAI,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAI,CAAA,OAAAD,CAAA,GAAAE,CAAA,IAAAC,MAAA,CAAAW,wBAAA,CAAAjB,CAAA,EAAAI,CAAA,OAAAD,CAAA,CAAAU,GAAA,IAAAV,CAAA,CAAAW,GAAA,IAAAT,CAAA,CAAAG,CAAA,EAAAJ,CAAA,EAAAD,CAAA,IAAAK,CAAA,CAAAJ,CAAA,IAAAJ,CAAA,CAAAI,CAAA,UAAAI,CAAA;;AAE7E,MAAMU,QAAQ,GAAG,cAAc;AAC/B,MAAMC,QAAQ,GAAG,cAAc;AAC/B,MAAMC,IAAI,GAAGd,MAAM,CAACe,MAAM,CAAC;EACzBC,IAAI,EAAEJ,QAAQ;EACdK,IAAI,EAAEJ;AACR,CAAC,CAAC;;AAEF;AACA;AACA;AACA,SAASK,4BAA4BA,CAAEC,OAAO,EAAE;EAC9C,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAIC,IAAI,GAAGC,MAAM,CAACC,IAAI,CAAC,EAAE,CAAC;IAC1BN,OAAO;IACJO,EAAE,CAAC,MAAM,EAAE,CAACC,IAAI,KAAK;MACpBJ,IAAI,GAAGC,MAAM,CAACI,MAAM,CAAC,CAACL,IAAI,EAAEI,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC;IACDD,EAAE,CAAC,KAAK,EAAE,MAAML,OAAO,CAACQ,IAAI,CAACC,KAAK,CAACP,IAAI,CAAC,CAAC,CAAC;IAC1CG,EAAE,CAAC,OAAO,EAAEJ,MAAM,CAAC;EACxB,CAAC,CAAC;AACJ;AACA,MAAMS,wBAAwB,GAAG,SAAS;AAC1C,MAAMC,8BAA8B,GAAG,GAAG,EAAC;;AAE3CC,QAAQ,CAAC,cAAc,EAAE,MAAM;EAC7BA,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC7BC,EAAE,CAAC,gDAAgD,EAAE,MAAM;MACzDC,YAAM,CAACC,MAAM,CAAC,MAAM,IAAIC,SAAW,CAAC,EAAE,CAAC,EAAE,oCAAoC,CAAC;IAChF,CAAC,CAAC;IACFH,EAAE,CAAC,gDAAgD,EAAE,MAAM;MACzD,MAAMI,KAAK,GAAG,4BAA4B;MAC1C,MAAMC,KAAK,GAAG,4BAA4B;MAC1C,MAAMpB,OAAO,GAAG,IAAIkB,SAAW,CAAC,GAAGC,KAAK,KAAKC,KAAK,EAAE,CAAC;MACrDJ,YAAM,CAACK,SAAS,CAACrB,OAAO,CAACsB,QAAQ,CAAC,CAAC,EAAE,CAACH,KAAK,EAAEC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC;IACFL,EAAE,CAAC,2CAA2C,EAAE,MAAM;MACpD,MAAMI,KAAK,GAAG,4BAA4B;MAC1C,MAAMC,KAAK,GAAG,4BAA4B;MAC1C,MAAMpB,OAAO,GAAG,IAAIkB,SAAW,CAAC,CAACC,KAAK,EAAEC,KAAK,CAAC,CAAC;MAC/CJ,YAAM,CAACK,SAAS,CAACrB,OAAO,CAACsB,QAAQ,CAAC,CAAC,EAAE,CAACH,KAAK,EAAEC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC;EACJ,CAAC,CAAC;EACFN,QAAQ,CAAC,kCAAkC,EAAE,MAAM;IACjDC,EAAE,CAAC,gDAAgDQ,2CAA6B,EAAE,EAAE,MAAM;MACxFP,YAAM,CAACK,SAAS,CAAC,EAAEG,MAAM,EAAED,2CAA6B,CAAC,CAAC,EAAE,IAAAE,sBAAoB,EAAC,CAAC,CAAC;IACrF,CAAC,CAAC;EACJ,CAAC,CAAC;EACFX,QAAQ,CAAC,oCAAoC,EAAE,MAAM;IACnDC,EAAE,CAAC,gDAAgD,EAAE,MAAM;MACzDC,YAAM,CAACU,KAAK,CAAC,IAAAC,wBAAsB,EAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC;IACFZ,EAAE,CAAC,gDAAgD,EAAE,MAAM;MACzDC,YAAM,CAACU,KAAK,CAAC,IAAAC,wBAAsB,EAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC;IACtD,CAAC,CAAC;IACFZ,EAAE,CAAC,gDAAgD,EAAE,MAAM;MACzDC,YAAM,CAACU,KAAK,CAAC,IAAAC,wBAAsB,EAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC;IACtD,CAAC,CAAC;EACJ,CAAC,CAAC;EACFb,QAAQ,CAAC,0CAA0C,EAAE,MAAM;IACzD,MAAMc,GAAG,GAAG,4BAA4B;IACxC,IAAIC,WAAW;IACfC,MAAM,CAAC,8BAA8B,EAAE,MAAM;MAC3CD,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,CAAC;IACpC,CAAC,CAAC;IACFG,iCAAsB,CAACC,OAAO,CAAC,CAACC,UAAU,KAAK;MAC7CC,iCAAsB,CAACF,OAAO,CAAC,CAACG,UAAU,KAAK;QAC7CpB,EAAE,CAAC,sCAAsCkB,UAAU,oBAAoBE,UAAU,EAAE,EAAE,MAAM;UACzFnB,YAAM,CAACoB,MAAM,CAACP,WAAW,CAACQ,kBAAkB,CAAC;YAC3CF,UAAU;YACVF;UACF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;MACJ,CAAC,CAAC;MACFK,gCAAqB,CAACN,OAAO,CAAC,CAACO,SAAS,KAAK;QAC3CxB,EAAE,CAAC,sCAAsCkB,UAAU,eAAeM,SAAS,EAAE,EAAE,MAAM;UACnFvB,YAAM,CAACoB,MAAM,CAACP,WAAW,CAACQ,kBAAkB,CAAC;YAC3CJ,UAAU;YACVE,UAAU,EAAEtB,8BAA8B;YAC1C0B;UACF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;MACJ,CAAC,CAAC;MACFxB,EAAE,CAAC,uCAAuCkB,UAAU,oBAAoBpB,8BAA8B,EAAE,EAAE,MAAM;QAC9GG,YAAM,CAACwB,OAAO,CAACX,WAAW,CAACQ,kBAAkB,CAAC;UAC5CJ,UAAU;UACVE,UAAU,EAAEtB;QACd,CAAC,CAAC,CAAC;MACL,CAAC,CAAC;MACFE,EAAE,CAAC,uCAAuCkB,UAAU,mBAAmBrB,wBAAwB,EAAE,EAAE,MAAM;QACvGI,YAAM,CAACwB,OAAO,CAACX,WAAW,CAACQ,kBAAkB,CAAC;UAC5CJ,UAAU;UACVE,UAAU,EAAEtB,8BAA8B;UAC1C0B,SAAS,EAAE3B;QACb,CAAC,CAAC,CAAC;MACL,CAAC,CAAC;IACJ,CAAC,CAAC;IACFG,EAAE,CAAC,6CAA6C,EAAE,MAAM;MACtDC,YAAM,CAACwB,OAAO,CAACX,WAAW,CAACQ,kBAAkB,CAAC;QAC5CJ,UAAU,EAAE;MACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACJ,CAAC,CAAC;EACFnB,QAAQ,CAAC,2BAA2B,EAAE,MAAM;IAC1CC,EAAE,CAAC,kCAAkC,EAAE,YAAY;MACjD,MAAMa,GAAG,GAAG,4BAA4B;MACxC,MAAMa,SAAS,GAAG,IAAIC,WAAS,CAAC,CAAC;MACjC,MAAMb,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,EAAE,EAAEa,SAAS,CAAC,CAAC,CAAC;MACvDzB,YAAM,CAACU,KAAK,CAACG,WAAW,CAACc,YAAY,CAAC,CAAC,EAAEF,SAAS,EAAE,mCAAmC,CAAC;IAC1F,CAAC,CAAC;IACF1B,EAAE,CAAC,mCAAmC,EAAE,YAAY;MAClD,MAAMa,GAAG,GAAG,4BAA4B;MACxC,MAAMgB,UAAU,GAAG,IAAIC,YAAU,CAAC,CAAC;MACnC,MAAMhB,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,EAAE,EAAEgB,UAAU,CAAC,CAAC,CAAC;MACxD5B,YAAM,CAACU,KAAK,CAACG,WAAW,CAACiB,aAAa,CAAC,CAAC,EAAEF,UAAU,EAAE,oCAAoC,CAAC;IAC7F,CAAC,CAAC;IACF7B,EAAE,CAAC,mCAAmC,EAAE,YAAY;MAClD,MAAMa,GAAG,GAAG,4BAA4B;MACxC,MAAMC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,CAAC;MACxC,MAAMmB,IAAI,GAAG,OAAO;MACpB,MAAMC,KAAK,GAAG,IAAAC,8BAAY,EAAC,EAAErB,GAAG,EAAEmB,IAAI,EAAEG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;MACpD,MAAMC,GAAG,GAAG,MAAMtB,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,CAAC,CAAC,CAAC;MAChD/B,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAACiC,wCAAsB,EAAEH,GAAG,CAACI,IAAI,CAAC;IACpD,CAAC,CAAC;IACFrB,iCAAsB,CAACF,OAAO,CAAC,CAACG,UAAU,KAAK;MAC7CpB,EAAE,CAAC,iGAAiGoB,UAAU,EAAE,EAAE,YAAY;QAC5H,MAAMhB,KAAK,GAAG,4BAA4B;QAC1C,MAAMC,KAAK,GAAG,4BAA4B;QAC1C,MAAMS,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGC,KAAK,IAAIC,KAAK,EAAE,EAAE,EAAEoC,sBAAsB,EAAE,CAAC,EAAEC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;QACtH,MAAMV,IAAI,GAAG,OAAO;QACpB,MAAMW,YAAY,GAAG,IAAAC,4CAA0B,EAAC,EAAE/B,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEZ,UAAU,CAAC,CAAC,CAAC;QACjF,MAAMyB,YAAY,GAAG,IAAAX,8BAAY,EAAC,EAAErB,GAAG,EAAER,KAAK,EAAE2B,IAAI,CAAC,CAAC,CAAC;QACvD,MAAMI,GAAG,GAAG,MAAMtB,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,CAAC,CAAC,CAAC;QAChD/B,YAAM,CAACoB,MAAM,CAACwB,YAAY,CAACP,MAAM,CAAC,CAAC,EAAE,uCAAuC,CAAC;QAC7ErC,YAAM,CAACoB,MAAM,CAACsB,YAAY,CAACL,MAAM,CAAC,CAAC,EAAE,uCAAuC,CAAC;QAC7ErC,YAAM,CAACK,SAAS,CAACiC,wCAAsB,EAAEH,GAAG,CAACI,IAAI,CAAC;MACpD,CAAC,CAAC;MACFxC,EAAE,CAAC,8FAA8FoB,UAAU,4BAA4B,EAAE,YAAY;QACnJ,MAAMhB,KAAK,GAAG,4BAA4B;QAC1C,MAAMC,KAAK,GAAG,4BAA4B;QAC1C,MAAMS,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGC,KAAK,IAAIC,KAAK,EAAE,EAAE,EAAEoC,sBAAsB,EAAE,CAAC,EAAEC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;QACtH,MAAMV,IAAI,GAAG,OAAO;QACpB,MAAMc,MAAM,GAAG;QACb,IAAAF,4CAA0B,EAAC,EAAE/B,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEZ,UAAU,CAAC,CAAC,CAAC;QAC5D,IAAAwB,4CAA0B,EAAC,EAAE/B,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEZ,UAAU,CAAC,CAAC,CAAC;QAC5D,IAAAwB,4CAA0B,EAAC,EAAE/B,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEZ,UAAU,CAAC,CAAC,CAAC;QAC5D,IAAAwB,4CAA0B,EAAC,EAAE/B,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEZ,UAAU,CAAC,CAAC,CAAC;QAC5D,IAAAwB,4CAA0B,EAAC,EAAE/B,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEZ,UAAU,CAAC,CAAC,CAAC;QAC5D,IAAAwB,4CAA0B,EAAC,EAAE/B,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEZ,UAAU,CAAC,CAAC,CAAC;QAC5D;QACA,IAAAwB,4CAA0B,EAAC,EAAE/B,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEZ,UAAU,CAAC,CAAC,CAAC,CAC7D;;QACD,MAAMnB,YAAM,CAAC8C,UAAU,CAACjC,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,CAAC,CAAC,CAAC,EAAE,mCAAmCZ,UAAU,EAAE,CAAC;QACxG0B,MAAM,CAAC7B,OAAO,CAAC,CAACgB,KAAK,EAAEe,CAAC,KAAK;UAC3B/C,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,gCAAgCU,CAAC,mBAAmB,CAAC;QACrF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IACFhD,EAAE,CAAC,uEAAuEF,8BAA8B,EAAE,EAAE,YAAY;MACtH,MAAMM,KAAK,GAAG,4BAA4B;MAC1C,MAAMC,KAAK,GAAG,4BAA4B;MAC1C,MAAMS,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGC,KAAK,IAAIC,KAAK,EAAE,EAAE,EAAEoC,sBAAsB,EAAE,CAAC,EAAEC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;MACtH,MAAMV,IAAI,GAAG,OAAO;MACpB,MAAMW,YAAY,GAAG,IAAAC,4CAA0B,EAAC;QAC9C/B,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEZ,UAAU,EAAEtB;MAChC,CAAC,CAAC;MACF,MAAM+C,YAAY,GAAG,IAAAX,8BAAY,EAAC,EAAErB,GAAG,EAAER,KAAK,EAAE2B,IAAI,CAAC,CAAC,CAAC;MACvD,MAAM/B,YAAM,CAAC8C,UAAU,CAACjC,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,CAAC,CAAC,CAAC,EAAE,mCAAmClC,8BAA8B,EAAE,CAAC;MAC5HG,YAAM,CAACwB,OAAO,CAACoB,YAAY,CAACP,MAAM,CAAC,CAAC,EAAE,0DAA0D,CAAC;MACjGrC,YAAM,CAACoB,MAAM,CAACsB,YAAY,CAACL,MAAM,CAAC,CAAC,EAAE,uCAAuC,CAAC;IAC/E,CAAC,CAAC;IACFf,gCAAqB,CAACN,OAAO,CAAC,CAACO,SAAS,KAAK;MAC3CxB,EAAE,CAAC,2FAA2FwB,SAAS,EAAE,EAAE,YAAY;QACrH,MAAMpB,KAAK,GAAG,4BAA4B;QAC1C,MAAMC,KAAK,GAAG,4BAA4B;QAC1C,MAAMS,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGC,KAAK,IAAIC,KAAK,EAAE,EAAE,EAAEoC,sBAAsB,EAAE,CAAC,EAAEC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;QACtH,MAAMV,IAAI,GAAG,OAAO;QACpB,MAAMW,YAAY,GAAG,IAAAM,uCAAqB,EAAC,EAAEpC,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAER,SAAS,CAAC,CAAC,CAAC;QAC3E,MAAMqB,YAAY,GAAG,IAAAX,8BAAY,EAAC,EAAErB,GAAG,EAAER,KAAK,EAAE2B,IAAI,CAAC,CAAC,CAAC;QACvD,MAAMI,GAAG,GAAG,MAAMtB,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,CAAC,CAAC,CAAC;QAChD/B,YAAM,CAACoB,MAAM,CAACwB,YAAY,CAACP,MAAM,CAAC,CAAC,EAAE,uCAAuC,CAAC;QAC7ErC,YAAM,CAACoB,MAAM,CAACsB,YAAY,CAACL,MAAM,CAAC,CAAC,EAAE,uCAAuC,CAAC;QAC7ErC,YAAM,CAACK,SAAS,CAACiC,wCAAsB,EAAEH,GAAG,CAACI,IAAI,CAAC;MACpD,CAAC,CAAC;MACFxC,EAAE,CAAC,wFAAwFwB,SAAS,4BAA4B,EAAE,YAAY;QAC5I,MAAMpB,KAAK,GAAG,4BAA4B;QAC1C,MAAMC,KAAK,GAAG,4BAA4B;QAC1C,MAAMS,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGC,KAAK,IAAIC,KAAK,EAAE,EAAE,EAAEoC,sBAAsB,EAAE,CAAC,EAAEC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;QACtH,MAAMV,IAAI,GAAG,OAAO;QACpB,MAAMc,MAAM,GAAG;QACb,IAAAG,uCAAqB,EAAC,EAAEpC,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAER,SAAS,CAAC,CAAC,CAAC;QACtD,IAAAyB,uCAAqB,EAAC,EAAEpC,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAER,SAAS,CAAC,CAAC,CAAC;QACtD,IAAAyB,uCAAqB,EAAC,EAAEpC,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAER,SAAS,CAAC,CAAC,CAAC;QACtD,IAAAyB,uCAAqB,EAAC,EAAEpC,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAER,SAAS,CAAC,CAAC,CAAC;QACtD,IAAAyB,uCAAqB,EAAC,EAAEpC,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAER,SAAS,CAAC,CAAC,CAAC;QACtD,IAAAyB,uCAAqB,EAAC,EAAEpC,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAER,SAAS,CAAC,CAAC,CAAC;QACtD;QACA,IAAAyB,uCAAqB,EAAC,EAAEpC,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAER,SAAS,CAAC,CAAC,CAAC,CACvD;;QACD,MAAMvB,YAAM,CAAC8C,UAAU,CAACjC,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,CAAC,CAAC,CAAC,EAAER,SAAS,CAAC;QAClEsB,MAAM,CAAC7B,OAAO,CAAC,CAACgB,KAAK,EAAEe,CAAC,KAAK;UAC3B/C,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,gCAAgCU,CAAC,mBAAmB,CAAC;QACrF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IACFhD,EAAE,CAAC,iEAAiEH,wBAAwB,EAAE,EAAE,YAAY;MAC1G,MAAMO,KAAK,GAAG,4BAA4B;MAC1C,MAAMC,KAAK,GAAG,4BAA4B;MAC1C,MAAMS,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGC,KAAK,IAAIC,KAAK,EAAE,EAAE,EAAEoC,sBAAsB,EAAE,CAAC,EAAEC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;MACtH,MAAMV,IAAI,GAAG,OAAO;MACpB,MAAMW,YAAY,GAAG,IAAAM,uCAAqB,EAAC;QACzCpC,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAER,SAAS,EAAE3B;MAC/B,CAAC,CAAC;MACF,MAAMgD,YAAY,GAAG,IAAAX,8BAAY,EAAC,EAAErB,GAAG,EAAER,KAAK,EAAE2B,IAAI,CAAC,CAAC,CAAC;MACvD,MAAM/B,YAAM,CAAC8C,UAAU,CAACjC,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,CAAC,CAAC,CAAC,EAAEnC,wBAAwB,CAAC;MACjFI,YAAM,CAACwB,OAAO,CAACoB,YAAY,CAACP,MAAM,CAAC,CAAC,EAAE,0DAA0D,CAAC;MACjGrC,YAAM,CAACoB,MAAM,CAACsB,YAAY,CAACL,MAAM,CAAC,CAAC,EAAE,uCAAuC,CAAC;IAC/E,CAAC,CAAC;IACFtC,EAAE,CAAC,gDAAgD,EAAE,YAAY;MAC/D,MAAMa,GAAG,GAAG,4BAA4B;MACxC,MAAMC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,CAAC;MACxC,MAAMmB,IAAI,GAAG,OAAO;MACpB,MAAMG,KAAK,GAAG,EAAEe,IAAI,EAAE,KAAK,CAAC,CAAC;MAC7B,MAAMjB,KAAK,GAAG,IAAAC,8BAAY,EAAC,EAAErB,GAAG,EAAEmB,IAAI,EAAEG,KAAK,CAAC,CAAC,CAAC;MAChD,MAAMC,GAAG,GAAG,MAAMtB,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,EAAEG,KAAK,CAAC,CAAC,CAAC;MACvDlC,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAACiC,wCAAsB,EAAEH,GAAG,CAACI,IAAI,CAAC;IACpD,CAAC,CAAC;IACFxC,EAAE,CAAC,qEAAqE,EAAE,YAAY;MACpF,MAAMa,GAAG,GAAG,4BAA4B;MACxC,MAAMsC,sBAAsB,GAAG,4BAA4B;MAC3D,MAAMrC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,CAAC;MACxC,MAAMmB,IAAI,GAAG,OAAO;MACpB,MAAMG,KAAK,GAAG,EAAEe,IAAI,EAAE,KAAK,CAAC,CAAC;MAC7B,MAAME,aAAa,GAAG,IAAAC,sCAAoB,EAAC;QACzCxC,GAAG;QACHmB,IAAI;QACJG,KAAK;QACLmB,gBAAgB,EAAE,GAAGH,sBAAsB,GAAGnB,IAAI;MACpD,CAAC,CAAC;MACF,MAAMC,KAAK,GAAG,IAAAC,8BAAY,EAAC,EAAErB,GAAG,EAAEsC,sBAAsB,EAAEnB,IAAI,EAAEG,KAAK,CAAC,CAAC,CAAC;MACxE,MAAMC,GAAG,GAAG,MAAMtB,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,EAAEG,KAAK,CAAC,CAAC,CAAC;MACvDlC,YAAM,CAACoB,MAAM,CAAC+B,aAAa,CAACd,MAAM,CAAC,CAAC,EAAE,wCAAwC,CAAC;MAC/ErC,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAACiC,wCAAsB,EAAEH,GAAG,CAACI,IAAI,CAAC;IACpD,CAAC,CAAC;IACFxC,EAAE,CAAC,6DAA6D,EAAE,YAAY;MAC5E,MAAMa,GAAG,GAAG,4BAA4B;MACxC,MAAMC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,EAAE;QACvC0C,cAAc,EAAE;UACd7E,QAAQ;UACRC;QACF;MACF,CAAC,CAAC;MACF,MAAMqD,IAAI,GAAG,OAAO;MACpB,MAAMG,KAAK,GAAG,EAAEe,IAAI,EAAE,KAAK,CAAC,CAAC;MAC7B,MAAMjB,KAAK,GAAG,IAAAC,8BAAY,EAAC,EAAErB,GAAG,EAAEmB,IAAI,EAAEpD,IAAI,EAAEuD,KAAK,CAAC,CAAC,CAAC;MACtD,MAAMC,GAAG,GAAG,MAAMtB,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,EAAEG,KAAK,CAAC,CAAC,CAAC;MACvDlC,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAACiC,wCAAsB,EAAEH,GAAG,CAACI,IAAI,CAAC;IACpD,CAAC,CAAC;IACFxC,EAAE,CAAC,+EAA+E,EAAE,YAAY;MAC9F,MAAMa,GAAG,GAAG,4BAA4B;MACxC,MAAMC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,CAAC;MACxC,MAAMmB,IAAI,GAAG,OAAO;MACpB,MAAMG,KAAK,GAAG,EAAEe,IAAI,EAAE,KAAK,CAAC,CAAC;MAC7B,MAAMjB,KAAK,GAAG,IAAAC,8BAAY,EAAC,EAAErB,GAAG,EAAEmB,IAAI,EAAEG,KAAK,CAAC,CAAC,CAAC;MAChD,MAAMlD,OAAO,GAAG,MAAM6B,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,EAAEG,KAAK,EAAEqB,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;MACzE,MAAMC,MAAM,GAAG,MAAMzE,4BAA4B,CAACC,OAAO,CAAC;MAC1DgB,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAACmD,MAAM,EAAElB,wCAAsB,CAAC;IAClD,CAAC,CAAC;IACFvC,EAAE,CAAC,oGAAoG,EAAE,YAAY;MACnH,MAAMa,GAAG,GAAG,4BAA4B;MACxC,MAAMsC,sBAAsB,GAAG,4BAA4B;MAC3D,MAAMrC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,CAAC;MACxC,MAAMmB,IAAI,GAAG,OAAO;MACpB,MAAMG,KAAK,GAAG,EAAEe,IAAI,EAAE,KAAK,CAAC,CAAC;MAC7B,MAAME,aAAa,GAAG,IAAAC,sCAAoB,EAAC;QACzCxC,GAAG;QACHmB,IAAI;QACJG,KAAK;QACLmB,gBAAgB,EAAE,GAAGH,sBAAsB,GAAGnB,IAAI;MACpD,CAAC,CAAC;MACF,MAAMC,KAAK,GAAG,IAAAC,8BAAY,EAAC,EAAErB,GAAG,EAAEsC,sBAAsB,EAAEnB,IAAI,EAAEG,KAAK,CAAC,CAAC,CAAC;MACxE,MAAMlD,OAAO,GAAG,MAAM6B,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,EAAEG,KAAK,EAAEqB,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;MACzE,MAAMC,MAAM,GAAG,MAAMzE,4BAA4B,CAACC,OAAO,CAAC;MAC1DgB,YAAM,CAACoB,MAAM,CAAC+B,aAAa,CAACd,MAAM,CAAC,CAAC,EAAE,wCAAwC,CAAC;MAC/ErC,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAACmD,MAAM,EAAElB,wCAAsB,CAAC;IAClD,CAAC,CAAC;IACFvC,EAAE,CAAC,4FAA4F,EAAE,YAAY;MAC3G,MAAMa,GAAG,GAAG,4BAA4B;MACxC,MAAMC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,EAAE;QACvC0C,cAAc,EAAE;UACd7E,QAAQ;UACRC;QACF;MACF,CAAC,CAAC;MACF,MAAMqD,IAAI,GAAG,OAAO;MACpB,MAAMG,KAAK,GAAG,EAAEe,IAAI,EAAE,KAAK,CAAC,CAAC;MAC7B,MAAMjB,KAAK,GAAG,IAAAC,8BAAY,EAAC,EAAErB,GAAG,EAAEmB,IAAI,EAAEpD,IAAI,EAAEuD,KAAK,CAAC,CAAC,CAAC;MACtD,MAAMlD,OAAO,GAAG,MAAM6B,WAAW,CAACzC,GAAG,CAAC,EAAEgE,GAAG,EAAEL,IAAI,EAAEG,KAAK,EAAEqB,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;MACzE,MAAMC,MAAM,GAAG,MAAMzE,4BAA4B,CAACC,OAAO,CAAC;MAC1DgB,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAACmD,MAAM,EAAElB,wCAAsB,CAAC;IAClD,CAAC,CAAC;EACJ,CAAC,CAAC;EACFxC,QAAQ,CAAC,4BAA4B,EAAE,MAAM;IAC3CC,EAAE,CAAC,6CAA6CQ,2CAA6B,OAAO,EAAE,YAAY;MAChG,MAAMK,GAAG,GAAG,4BAA4B;MACxC,MAAMC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,CAAC;MACxC,MAAMmB,IAAI,GAAG,OAAO;MACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;MACtD,MAAMP,KAAK,GAAG,IAAAyB,kCAAc,EAAC,EAAE7C,GAAG,EAAEmB,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC;MACjD,MAAMJ,GAAG,GAAG,MAAMtB,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC;MACvDvC,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAAC8B,GAAG,CAACI,IAAI,EAAEoB,4CAAwB,CAAC;IACtD,CAAC,CAAC;IACFzC,iCAAsB,CAACF,OAAO,CAAC,CAACG,UAAU,KAAK;MAC7CpB,EAAE,CAAC,6CAA6CQ,2CAA6B,qEAAqEY,UAAU,EAAE,EAAE,YAAY;QAC1K,MAAMhB,KAAK,GAAG,4BAA4B;QAC1C,MAAMC,KAAK,GAAG,4BAA4B;QAC1C,MAAMS,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGC,KAAK,IAAIC,KAAK,EAAE,EAAE,EAAEoC,sBAAsB,EAAE,CAAC,EAAEC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;QACtH,MAAMV,IAAI,GAAG,OAAO;QACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;QACtD,MAAMG,YAAY,GAAG,IAAAkB,gDAA4B,EAAC,EAAEhD,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEQ,IAAI,EAAEpB,UAAU,CAAC,CAAC,CAAC;QACzF,MAAMyB,YAAY,GAAG,IAAAa,kCAAc,EAAC,EAAE7C,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC;QAC/D,MAAMJ,GAAG,GAAG,MAAMtB,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC;QACvDvC,YAAM,CAACoB,MAAM,CAACwB,YAAY,CAACP,MAAM,CAAC,CAAC,EAAE,uCAAuC,CAAC;QAC7ErC,YAAM,CAACoB,MAAM,CAACsB,YAAY,CAACL,MAAM,CAAC,CAAC,EAAE,uCAAuC,CAAC;QAC7ErC,YAAM,CAACK,SAAS,CAAC8B,GAAG,CAACI,IAAI,EAAEoB,4CAAwB,CAAC;MACtD,CAAC,CAAC;MACF5D,EAAE,CAAC,6CAA6CQ,2CAA6B,qEAAqEY,UAAU,4BAA4B,EAAE,YAAY;QACpM,MAAMhB,KAAK,GAAG,4BAA4B;QAC1C,MAAMC,KAAK,GAAG,4BAA4B;QAC1C,MAAMS,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGC,KAAK,IAAIC,KAAK,EAAE,EAAE,EAAEoC,sBAAsB,EAAE,CAAC,EAAEC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;QACtH,MAAMV,IAAI,GAAG,OAAO;QACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;QACtD,MAAMM,MAAM,GAAG;QACb,IAAAe,gDAA4B,EAAC,EAAEhD,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEQ,IAAI,EAAEpB,UAAU,CAAC,CAAC,CAAC;QACpE,IAAAyC,gDAA4B,EAAC,EAAEhD,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEQ,IAAI,EAAEpB,UAAU,CAAC,CAAC,CAAC;QACpE,IAAAyC,gDAA4B,EAAC,EAAEhD,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEQ,IAAI,EAAEpB,UAAU,CAAC,CAAC,CAAC;QACpE,IAAAyC,gDAA4B,EAAC,EAAEhD,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEQ,IAAI,EAAEpB,UAAU,CAAC,CAAC,CAAC;QACpE,IAAAyC,gDAA4B,EAAC,EAAEhD,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEQ,IAAI,EAAEpB,UAAU,CAAC,CAAC,CAAC;QACpE,IAAAyC,gDAA4B,EAAC,EAAEhD,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEQ,IAAI,EAAEpB,UAAU,CAAC,CAAC,CAAC;QACpE;QACA,IAAAyC,gDAA4B,EAAC,EAAEhD,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEQ,IAAI,EAAEpB,UAAU,CAAC,CAAC,CAAC,CACrE;;QACD,MAAMnB,YAAM,CAAC8C,UAAU,CAACjC,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC,EAAE,mCAAmCpB,UAAU,EAAE,CAAC;QAC/G0B,MAAM,CAAC7B,OAAO,CAAC,CAACgB,KAAK,EAAEe,CAAC,KAAK;UAC3B/C,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,gCAAgCU,CAAC,mBAAmB,CAAC;QACrF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IACFhD,EAAE,CAAC,6CAA6CQ,2CAA6B,2CAA2CV,8BAA8B,EAAE,EAAE,YAAY;MACpK,MAAMM,KAAK,GAAG,4BAA4B;MAC1C,MAAMC,KAAK,GAAG,4BAA4B;MAC1C,MAAMS,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGC,KAAK,IAAIC,KAAK,EAAE,EAAE,EAAEoC,sBAAsB,EAAE,CAAC,EAAEC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;MACtH,MAAMV,IAAI,GAAG,OAAO;MACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;MACtD,MAAMG,YAAY,GAAG,IAAAkB,gDAA4B,EAAC;QAChDhD,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEQ,IAAI,EAAEpB,UAAU,EAAEtB;MACtC,CAAC,CAAC;MACF,MAAM+C,YAAY,GAAG,IAAAa,kCAAc,EAAC,EAAE7C,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC;MAC/D,MAAMvC,YAAM,CAAC8C,UAAU,CAACjC,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC,EAAE,mCAAmC1C,8BAA8B,EAAE,CAAC;MACnIG,YAAM,CAACwB,OAAO,CAACoB,YAAY,CAACP,MAAM,CAAC,CAAC,EAAE,uDAAuD,CAAC;MAC9FrC,YAAM,CAACoB,MAAM,CAACsB,YAAY,CAACL,MAAM,CAAC,CAAC,EAAE,uCAAuC,CAAC;IAC/E,CAAC,CAAC;IACFf,gCAAqB,CAACN,OAAO,CAAC,CAACO,SAAS,KAAK;MAC3CxB,EAAE,CAAC,6CAA6CQ,2CAA6B,+DAA+DgB,SAAS,EAAE,EAAE,YAAY;QACnK,MAAMpB,KAAK,GAAG,4BAA4B;QAC1C,MAAMC,KAAK,GAAG,4BAA4B;QAC1C,MAAMS,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGC,KAAK,IAAIC,KAAK,EAAE,EAAE,EAAEoC,sBAAsB,EAAE,CAAC,EAAEC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;QACtH,MAAMV,IAAI,GAAG,OAAO;QACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;QACtD,MAAMG,YAAY,GAAG,IAAAmB,2CAAuB,EAAC,EAAEjD,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEQ,IAAI,EAAEhB,SAAS,CAAC,CAAC,CAAC;QACnF,MAAMqB,YAAY,GAAG,IAAAa,kCAAc,EAAC,EAAE7C,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC;QAC/D,MAAMJ,GAAG,GAAG,MAAMtB,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC;QACvDvC,YAAM,CAACoB,MAAM,CAACwB,YAAY,CAACP,MAAM,CAAC,CAAC,EAAE,uCAAuC,CAAC;QAC7ErC,YAAM,CAACoB,MAAM,CAACsB,YAAY,CAACL,MAAM,CAAC,CAAC,EAAE,uCAAuC,CAAC;QAC7ErC,YAAM,CAACK,SAAS,CAAC8B,GAAG,CAACI,IAAI,EAAEoB,4CAAwB,CAAC;MACtD,CAAC,CAAC;MACF5D,EAAE,CAAC,6CAA6CQ,2CAA6B,+DAA+DgB,SAAS,4BAA4B,EAAE,YAAY;QAC7L,MAAMpB,KAAK,GAAG,4BAA4B;QAC1C,MAAMC,KAAK,GAAG,4BAA4B;QAC1C,MAAMS,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGC,KAAK,IAAIC,KAAK,EAAE,EAAE,EAAEoC,sBAAsB,EAAE,CAAC,EAAEC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;QACtH,MAAMV,IAAI,GAAG,OAAO;QACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;QACtD,MAAMM,MAAM,GAAG;QACb,IAAAgB,2CAAuB,EAAC,EAAEjD,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEQ,IAAI,EAAEhB,SAAS,CAAC,CAAC,CAAC;QAC9D,IAAAsC,2CAAuB,EAAC,EAAEjD,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEQ,IAAI,EAAEhB,SAAS,CAAC,CAAC,CAAC;QAC9D,IAAAsC,2CAAuB,EAAC,EAAEjD,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEQ,IAAI,EAAEhB,SAAS,CAAC,CAAC,CAAC;QAC9D,IAAAsC,2CAAuB,EAAC,EAAEjD,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEQ,IAAI,EAAEhB,SAAS,CAAC,CAAC,CAAC;QAC9D,IAAAsC,2CAAuB,EAAC,EAAEjD,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEQ,IAAI,EAAEhB,SAAS,CAAC,CAAC,CAAC;QAC9D,IAAAsC,2CAAuB,EAAC,EAAEjD,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEQ,IAAI,EAAEhB,SAAS,CAAC,CAAC,CAAC;QAC9D;QACA,IAAAsC,2CAAuB,EAAC,EAAEjD,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEQ,IAAI,EAAEhB,SAAS,CAAC,CAAC,CAAC,CAC/D;;QACD,MAAMvB,YAAM,CAAC8C,UAAU,CAACjC,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC,EAAEhB,SAAS,CAAC;QACzEsB,MAAM,CAAC7B,OAAO,CAAC,CAACgB,KAAK,EAAEe,CAAC,KAAK;UAC3B/C,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,gCAAgCU,CAAC,mBAAmB,CAAC;QACrF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IACFhD,EAAE,CAAC,6CAA6CQ,2CAA6B,qCAAqCX,wBAAwB,EAAE,EAAE,YAAY;MACxJ,MAAMO,KAAK,GAAG,4BAA4B;MAC1C,MAAMC,KAAK,GAAG,4BAA4B;MAC1C,MAAMS,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGC,KAAK,IAAIC,KAAK,EAAE,EAAE,EAAEoC,sBAAsB,EAAE,CAAC,EAAEC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;MACtH,MAAMV,IAAI,GAAG,OAAO;MACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;MACtD,MAAMG,YAAY,GAAG,IAAAmB,2CAAuB,EAAC;QAC3CjD,GAAG,EAAET,KAAK,EAAE4B,IAAI,EAAEQ,IAAI,EAAEhB,SAAS,EAAE3B;MACrC,CAAC,CAAC;MACF,MAAMgD,YAAY,GAAG,IAAAa,kCAAc,EAAC,EAAE7C,GAAG,EAAER,KAAK,EAAE2B,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC;MAC/D,MAAMvC,YAAM,CAAC8C,UAAU,CAACjC,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC,EAAE3C,wBAAwB,CAAC;MACxFI,YAAM,CAACwB,OAAO,CAACoB,YAAY,CAACP,MAAM,CAAC,CAAC,EAAE,uDAAuD,CAAC;MAC9FrC,YAAM,CAACoB,MAAM,CAACsB,YAAY,CAACL,MAAM,CAAC,CAAC,EAAE,uCAAuC,CAAC;IAC/E,CAAC,CAAC;IACFtC,EAAE,CAAC,6CAA6CQ,2CAA6B,4BAA4B,EAAE,YAAY;MACrH,MAAMK,GAAG,GAAG,4BAA4B;MACxC,MAAMsC,sBAAsB,GAAG,4BAA4B;MAC3D,MAAMrC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,CAAC;MACxC,MAAMmB,IAAI,GAAG,OAAO;MACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;MACtD,MAAMY,aAAa,GAAG,IAAAW,0CAAsB,EAAC;QAC3ClD,GAAG;QACHmB,IAAI;QACJsB,gBAAgB,EAAE,GAAGH,sBAAsB,GAAGnB,IAAI,EAAE;QACpDQ;MACF,CAAC,CAAC;MACF,MAAMP,KAAK,GAAG,IAAAyB,kCAAc,EAAC,EAAE7C,GAAG,EAAEsC,sBAAsB,EAAEnB,IAAI,CAAC,CAAC,CAAC;MACnE,MAAMI,GAAG,GAAG,MAAMtB,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC;MACvDvC,YAAM,CAACoB,MAAM,CAAC+B,aAAa,CAACd,MAAM,CAAC,CAAC,EAAE,wCAAwC,CAAC;MAC/ErC,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAAC8B,GAAG,CAACI,IAAI,EAAEoB,4CAAwB,CAAC;IACtD,CAAC,CAAC;IACF5D,EAAE,CAAC,6CAA6CQ,2CAA6B,0FAA0F,EAAE,YAAY;MACnL,MAAMK,GAAG,GAAG,4BAA4B;MACxC,MAAMsC,sBAAsB,GAAG,4BAA4B;MAC3D,MAAMrC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,CAAC;MACxC,MAAMmB,IAAI,GAAG,OAAO;MACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;MACtD,MAAMY,aAAa,GAAG,IAAAW,0CAAsB,EAAC;QAC3ClD,GAAG;QACHmB,IAAI;QACJsB,gBAAgB,EAAE,GAAGH,sBAAsB,GAAGnB,IAAI,EAAE;QACpDQ;MACF,CAAC,CAAC;MACF,MAAMP,KAAK,GAAG,IAAAyB,kCAAc,EAAC,EAAE7C,GAAG,EAAEsC,sBAAsB,EAAEnB,IAAI,CAAC,CAAC,CAAC;MACnE,MAAMI,GAAG,GAAG,MAAMtB,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,EAAEwB,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;MACxE/D,YAAM,CAACoB,MAAM,CAAC+B,aAAa,CAACd,MAAM,CAAC,CAAC,EAAE,wCAAwC,CAAC;MAC/ErC,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAAC8B,GAAG,CAACI,IAAI,EAAEoB,4CAAwB,CAAC;IACtD,CAAC,CAAC;IACF5D,EAAE,CAAC,6CAA6CQ,2CAA6B,sFAAsF,EAAE,YAAY;MAC/K,MAAMK,GAAG,GAAG,4BAA4B;MACxC,MAAMsC,sBAAsB,GAAG,4BAA4B;MAC3D,MAAMnB,IAAI,GAAG,OAAO;MACpB,MAAMlB,WAAW,GAAG,IAAIX,SAAW,CAAC,GAAGU,GAAG,IAAIsC,sBAAsB,GAAGnB,IAAI,EAAE,CAAC;MAC9E,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;MACtD,MAAMY,aAAa,GAAG,IAAAW,0CAAsB,EAAC;QAC3ClD,GAAG;QACHmB,IAAI;QACJsB,gBAAgB,EAAE,GAAGH,sBAAsB,GAAGnB,IAAI,EAAE;QACpDQ;MACF,CAAC,CAAC;MACF,MAAMP,KAAK,GAAG,IAAAyB,kCAAc,EAAC,EAAE7C,GAAG,EAAEsC,sBAAsB,EAAEnB,IAAI,CAAC,CAAC,CAAC;MACnE,MAAMI,GAAG,GAAG,MAAMtB,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,EAAEwB,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;MACxE/D,YAAM,CAACoB,MAAM,CAAC+B,aAAa,CAACd,MAAM,CAAC,CAAC,EAAE,wCAAwC,CAAC;MAC/ErC,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAAC8B,GAAG,CAACI,IAAI,EAAEoB,4CAAwB,CAAC;MACpD3D,YAAM,CAACU,KAAK,CAACG,WAAW,CAACmD,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,oCAAoC,CAAC;IACzF,CAAC,CAAC;IACFjE,EAAE,CAAC,6CAA6CQ,2CAA6B,uBAAuB,EAAE,YAAY;MAChH,MAAMK,GAAG,GAAG,4BAA4B;MACxC,MAAMC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,EAAE;QACvC0C,cAAc,EAAE;UACd7E,QAAQ;UACRC;QACF;MACF,CAAC,CAAC;MACF,MAAMqD,IAAI,GAAG,OAAO;MACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;MACtD,MAAMP,KAAK,GAAG,IAAAyB,kCAAc,EAAC,EAAE7C,GAAG,EAAEmB,IAAI,EAAEpD,IAAI,CAAC,CAAC,CAAC;MACjD,MAAMwD,GAAG,GAAG,MAAMtB,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,CAAC,CAAC,CAAC;MACvDvC,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAAC8B,GAAG,CAACI,IAAI,EAAEoB,4CAAwB,CAAC;IACtD,CAAC,CAAC;IACF5D,EAAE,CAAC,6CAA6CQ,2CAA6B,sCAAsC,EAAE,YAAY;MAC/H,MAAMK,GAAG,GAAG,4BAA4B;MACxC,MAAMC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,CAAC;MACxC,MAAMmB,IAAI,GAAG,OAAO;MACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;MACtD,MAAMP,KAAK,GAAG,IAAAyB,kCAAc,EAAC,EAAE7C,GAAG,EAAEmB,IAAI,CAAC,CAAC,CAAC;MAC3C,MAAM/C,OAAO,GAAG,MAAM6B,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,EAAEgB,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;MACzE,MAAMC,MAAM,GAAG,MAAMzE,4BAA4B,CAACC,OAAO,CAAC;MAC1DgB,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAACmD,MAAM,EAAEG,4CAAwB,CAAC;IACpD,CAAC,CAAC;IACF5D,EAAE,CAAC,6CAA6CQ,2CAA6B,sDAAsD,EAAE,YAAY;MAC/I,MAAMK,GAAG,GAAG,4BAA4B;MACxC,MAAMC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,EAAE;QACvC0C,cAAc,EAAE;UACd7E,QAAQ;UACRC;QACF;MACF,CAAC,CAAC;MACF,MAAMqD,IAAI,GAAG,OAAO;MACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;MACtD,MAAMP,KAAK,GAAG,IAAAyB,kCAAc,EAAC,EAAE7C,GAAG,EAAEmB,IAAI,EAAEpD,IAAI,CAAC,CAAC,CAAC;MACjD,MAAMK,OAAO,GAAG,MAAM6B,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,EAAEgB,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;MACzE,MAAMC,MAAM,GAAG,MAAMzE,4BAA4B,CAACC,OAAO,CAAC;MAC1DgB,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAACmD,MAAM,EAAEG,4CAAwB,CAAC;IACpD,CAAC,CAAC;IACF5D,EAAE,CAAC,6CAA6CQ,2CAA6B,0EAA0E,EAAE,YAAY;MACnK,MAAMK,GAAG,GAAG,4BAA4B;MACxC,MAAMC,WAAW,GAAG,IAAIX,SAAW,CAACU,GAAG,EAAE;QACvC0C,cAAc,EAAE;UACd7E,QAAQ;UACRC;QACF;MACF,CAAC,CAAC;MACF,MAAMqD,IAAI,GAAG,OAAO;MACpB,MAAMQ,IAAI,GAAG,CAAC,uCAAuC,CAAC;MACtD,MAAMP,KAAK,GAAG,IAAAyB,kCAAc,EAAC,EAAE7C,GAAG,EAAEmB,IAAI,EAAEpD,IAAI,CAAC,CAAC,CAAC;MACjD,MAAMK,OAAO,GAAG,MAAM6B,WAAW,CAAC6C,IAAI,CAAC,EAAEtB,GAAG,EAAEL,IAAI,EAAEQ,IAAI,EAAEgB,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;MACzE,MAAMC,MAAM,GAAG,MAAMzE,4BAA4B,CAACC,OAAO,CAAC;MAC1DgB,YAAM,CAACoB,MAAM,CAACY,KAAK,CAACK,MAAM,CAAC,CAAC,EAAE,+BAA+B,CAAC;MAC9DrC,YAAM,CAACK,SAAS,CAACmD,MAAM,EAAEG,4CAAwB,CAAC;IACpD,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
package/lib/index.js CHANGED
@@ -1,14 +1,39 @@
1
- "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;
1
+ "use strict";Object.defineProperty(exports, "__esModule", { value: true });Object.defineProperty(exports, "BACKUP_DATA_FORMAT_DUMP", { enumerable: true, get: function () {return _backup.BACKUP_DATA_FORMAT_DUMP;} });Object.defineProperty(exports, "BACKUP_DATA_FORMAT_SQL", { enumerable: true, get: function () {return _backup.BACKUP_DATA_FORMAT_SQL;} });Object.defineProperty(exports, "BackupApiClient", { enumerable: true, get: function () {return _backup.default;} });Object.defineProperty(exports, "CONSISTENCY_LEVEL_LINEARIZABLE", { enumerable: true, get: function () {return _data.CONSISTENCY_LEVEL_LINEARIZABLE;} });Object.defineProperty(exports, "CONSISTENCY_LEVEL_NONE", { enumerable: true, get: function () {return _data.CONSISTENCY_LEVEL_NONE;} });Object.defineProperty(exports, "CONSISTENCY_LEVEL_STRONG", { enumerable: true, get: function () {return _data.CONSISTENCY_LEVEL_STRONG;} });Object.defineProperty(exports, "CONSISTENCY_LEVEL_WEAK", { enumerable: true, get: function () {return _data.CONSISTENCY_LEVEL_WEAK;} });Object.defineProperty(exports, "DataApiClient", { enumerable: true, get: function () {return _data.default;} });Object.defineProperty(exports, "PATH_BACKUP", { enumerable: true, get: function () {return _backup.PATH_BACKUP;} });Object.defineProperty(exports, "PATH_EXECUTE", { enumerable: true, get: function () {return _data.PATH_EXECUTE;} });Object.defineProperty(exports, "PATH_LOAD", { enumerable: true, get: function () {return _backup.PATH_LOAD;} });Object.defineProperty(exports, "PATH_QUERY", { enumerable: true, get: function () {return _data.PATH_QUERY;} });Object.defineProperty(exports, "PATH_STATUS", { enumerable: true, get: function () {return _status.PATH_STATUS;} });Object.defineProperty(exports, "StatusApiClient", { enumerable: true, get: function () {return _status.default;} });exports.default = void 0;
2
2
 
3
3
 
4
4
 
5
- var _data = _interopRequireDefault(require("./api/data"));
6
- var _backup = _interopRequireDefault(require("./api/backup"));
7
- var _status = _interopRequireDefault(require("./api/status")); /**
5
+
6
+ var _data = _interopRequireWildcard(require("./api/data"));
7
+ var _backup = _interopRequireWildcard(require("./api/backup"));
8
+ var _status = _interopRequireWildcard(require("./api/status"));var cache;function _interopRequireWildcard(e, t) {if (!t && e && e.__esModule) return e;var r,c,a = Object.defineProperty,n = { __proto__: null, default: e };if (Object(e) !== e) return n;if (cache || "function" != typeof WeakMap || (cache = new WeakMap()), cache) {if (cache.has(e)) return cache.get(e);cache.set(e, n);}for (c in e) "default" !== c && {}.hasOwnProperty.call(e, c) && ((r = a && Object.getOwnPropertyDescriptor(e, c)) && (r.get || r.set) ? a(n, c, r) : n[c] = e[c]);return n;} /**
8
9
  * RQLite JS client which export all of the api clients
9
10
  * @module rqlite-js
10
- */var _default = { DataApiClient: _data.default,
11
+ * @see https://rqlite.io/docs/api/api/
12
+ */var _default = exports.default =
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+ {
35
+ DataApiClient: _data.default,
11
36
  BackupApiClient: _backup.default,
12
37
  StatusApiClient: _status.default
13
- };exports.default = _default;module.exports = exports.default;
38
+ };
14
39
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_data","_interopRequireDefault","require","_backup","_status","_default","DataApiClient","BackupApiClient","StatusApiClient","exports","default","module"],"sources":["../es6/index.js"],"sourcesContent":["/**\n * RQLite JS client which export all of the api clients\n * @module rqlite-js\n */\nimport DataApiClient from './api/data'\nimport BackupApiClient from './api/backup'\nimport StatusApiClient from './api/status'\n\nexport default {\n DataApiClient,\n BackupApiClient,\n StatusApiClient,\n}\n"],"mappings":";;;;AAIA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA,kBAA0C,CAN1C;AACA;AACA;AACA,GAHA,IAAAG,QAAA,GAQe,EACbC,aAAa,EAAbA,aAAa;EACbC,eAAe,EAAfA,eAAe;EACfC,eAAe,EAAfA;AACF,CAAC,CAAAC,OAAA,CAAAC,OAAA,GAAAL,QAAA,CAAAM,MAAA,CAAAF,OAAA,GAAAA,OAAA,CAAAC,OAAA"}
1
+ {"version":3,"file":"index.js","names":["_data","_interopRequireWildcard","require","_backup","_status","cache","e","t","__esModule","r","c","a","Object","defineProperty","n","__proto__","default","WeakMap","has","get","set","hasOwnProperty","call","getOwnPropertyDescriptor","_default","exports","DataApiClient","BackupApiClient","StatusApiClient"],"sources":["../es6/index.js"],"sourcesContent":["/**\n * RQLite JS client which export all of the api clients\n * @module rqlite-js\n * @see https://rqlite.io/docs/api/api/\n */\nimport DataApiClient from './api/data'\nimport BackupApiClient from './api/backup'\nimport StatusApiClient from './api/status'\n\nexport {\n DataApiClient,\n BackupApiClient,\n StatusApiClient,\n}\n\nexport {\n PATH_QUERY,\n PATH_EXECUTE,\n CONSISTENCY_LEVEL_NONE,\n CONSISTENCY_LEVEL_STRONG,\n CONSISTENCY_LEVEL_LINEARIZABLE,\n CONSISTENCY_LEVEL_WEAK,\n} from './api/data'\n\nexport {\n PATH_BACKUP,\n PATH_LOAD,\n BACKUP_DATA_FORMAT_SQL,\n BACKUP_DATA_FORMAT_DUMP,\n} from './api/backup'\n\nexport { PATH_STATUS } from './api/status'\n\nexport default {\n DataApiClient,\n BackupApiClient,\n StatusApiClient,\n}\n"],"mappings":";;;;;AAKA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,uBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAH,uBAAA,CAAAC,OAAA,kBAA0C,IAAAG,KAAA,UAAAJ,wBAAAK,CAAA,EAAAC,CAAA,QAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAE,UAAA,SAAAF,CAAA,KAAAG,CAAA,CAAAC,CAAA,CAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,CAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,OAAAM,MAAA,CAAAN,CAAA,MAAAA,CAAA,SAAAQ,CAAA,KAAAT,KAAA,yBAAAY,OAAA,KAAAZ,KAAA,OAAAY,OAAA,KAAAZ,KAAA,OAAAA,KAAA,CAAAa,GAAA,CAAAZ,CAAA,UAAAD,KAAA,CAAAc,GAAA,CAAAb,CAAA,CAAAD,CAAA,MAAAe,GAAA,CAAAd,CAAA,EAAAQ,CAAA,QAAAJ,CAAA,IAAAJ,CAAA,gBAAAI,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAI,CAAA,OAAAD,CAAA,GAAAE,CAAA,IAAAC,MAAA,CAAAW,wBAAA,CAAAjB,CAAA,EAAAI,CAAA,OAAAD,CAAA,CAAAU,GAAA,IAAAV,CAAA,CAAAW,GAAA,IAAAT,CAAA,CAAAG,CAAA,EAAAJ,CAAA,EAAAD,CAAA,IAAAK,CAAA,CAAAJ,CAAA,IAAAJ,CAAA,CAAAI,CAAA,UAAAI,CAAA,GAP1C;AACA;AACA;AACA;AACA,GAJA,IAAAU,QAAA,GAAAC,OAAA,CAAAT,OAAA;;;;;;;;;;;;;;;;;;;;;;AAiCe;EACbU,aAAa,EAAbA,aAAa;EACbC,eAAe,EAAfA,eAAe;EACfC,eAAe,EAAfA;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1,142 @@
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.EXECUTE_SUCCESS_RESPONSE = void 0;exports.executeFailureErrorCode = executeFailureErrorCode;exports.executeFailureHttpStatusCode = executeFailureHttpStatusCode;exports.executeRedirectSuccess = executeRedirectSuccess;exports.executeSuccess = executeSuccess;
2
+
3
+
4
+
5
+ var _nock = _interopRequireDefault(require("nock"));
6
+ var _contentTypes = require("../http-request/content-types");
7
+ var _httpHeaders = require("../http-request/http-headers"); /**
8
+ * RQLite API execute nock HTTP Mocks
9
+ * @module test/api-data-execute-nock
10
+ */ /**
11
+ * A nock HTTP request mock
12
+ * @typedef {import('nock')} Nock
13
+ */
14
+ /**
15
+ * Execute success response body
16
+ */
17
+ const EXECUTE_SUCCESS_RESPONSE = exports.EXECUTE_SUCCESS_RESPONSE = {
18
+ results: [
19
+ {
20
+ last_insert_id: 1,
21
+ rows_affected: 1
22
+ }]
23
+
24
+ };
25
+
26
+ /**
27
+ * Creates a nock that represents a successful call to execute endpoint
28
+ * @param {Object} [options={}] The options
29
+ * @param {Object} [options.auth] Optional object for auth
30
+ * @param {String} [options.path] The path of the request
31
+ * @param {Object} [options.response=EXECUTE_SUCCESS_RESPONSE] The response body
32
+ * @param {String} [options.url] The url for the request
33
+ * @returns {Nock} A query api success mock
34
+ */
35
+ function executeSuccess(options = {}) {
36
+ const {
37
+ auth,
38
+ body,
39
+ path,
40
+ response = EXECUTE_SUCCESS_RESPONSE,
41
+ url
42
+ } = options;
43
+ const scope = (0, _nock.default)(url).
44
+ matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
45
+ matchHeader(_httpHeaders.HTTP_HEADER_CONTENT_TYPE, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
46
+ post(path, body);
47
+ if (auth) {
48
+ scope.basicAuth(auth);
49
+ }
50
+ return scope.reply(200, response);
51
+ }
52
+
53
+ /**
54
+ * Creates a nock that represents a failed call to execute endpoint based on status code
55
+ * @param {Object} [options={}] The options
56
+ * @param {Object} [options.auth] Optional object for auth
57
+ * @param {String} [options.path] The path of the request
58
+ * @param {Object} [options.response={}] The response body
59
+ * @param {Number} [options.statusCode] The http status code
60
+ * @param {String} [options.url] The url for the request
61
+ * @returns {Nock} A query api success mock
62
+ */
63
+ function executeFailureHttpStatusCode(options = {}) {
64
+ const {
65
+ auth,
66
+ body,
67
+ path,
68
+ response = {},
69
+ statusCode,
70
+ url
71
+ } = options;
72
+ const scope = (0, _nock.default)(url).
73
+ matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
74
+ matchHeader(_httpHeaders.HTTP_HEADER_CONTENT_TYPE, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
75
+ post(path, body);
76
+ if (auth) {
77
+ scope.basicAuth(auth);
78
+ }
79
+ return scope.reply(statusCode, response);
80
+ }
81
+
82
+ /**
83
+ * Creates a nock that represents a failed call to execute endpoint based on error code
84
+ * @param {Object} [options={}] The options
85
+ * @param {Object} [options.auth] Optional object for auth
86
+ * @param {String} [options.path] The path of the request
87
+ * @param {String} [options.errorCode] The error code
88
+ * @param {String} [options.url] The url for the request
89
+ * @returns {Nock} A query api success mock
90
+ */
91
+ function executeFailureErrorCode(options = {}) {
92
+ const {
93
+ auth,
94
+ body,
95
+ path,
96
+ errorCode,
97
+ url
98
+ } = options;
99
+ const scope = (0, _nock.default)(url).
100
+ matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
101
+ matchHeader(_httpHeaders.HTTP_HEADER_CONTENT_TYPE, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
102
+ post(path, body);
103
+ if (auth) {
104
+ scope.basicAuth(auth);
105
+ }
106
+ return scope.replyWithError({
107
+ message: errorCode,
108
+ code: errorCode
109
+ });
110
+ }
111
+
112
+ /**
113
+ * Creates a nock that represents a successful call to execute endpoint
114
+ * @param {Object} [options={}] The options
115
+ * @param {Object} [options.auth] Optional object for auth
116
+ * @param {String} [options.path] The path of the request
117
+ * @param {String} [options.redirectLocation] The uri for the location header
118
+ * @param {Number} [options.statusCode=301] The redirect status code
119
+ * @param {String} [options.url] The url for the request
120
+ * @returns {Nock} A query api success mock
121
+ */
122
+ function executeRedirectSuccess(options = {}) {
123
+ const {
124
+ auth,
125
+ body,
126
+ path,
127
+ redirectLocation,
128
+ statusCode = 301,
129
+ url
130
+ } = options;
131
+ const scope = (0, _nock.default)(url).
132
+ matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
133
+ matchHeader(_httpHeaders.HTTP_HEADER_CONTENT_TYPE, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
134
+ post(path, body);
135
+ if (auth) {
136
+ scope.basicAuth(auth);
137
+ }
138
+ return scope.reply(statusCode, { Location: redirectLocation }, {
139
+ Location: redirectLocation
140
+ });
141
+ }
142
+ //# sourceMappingURL=api-data-execute-nock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-data-execute-nock.js","names":["_nock","_interopRequireDefault","require","_contentTypes","_httpHeaders","EXECUTE_SUCCESS_RESPONSE","exports","results","last_insert_id","rows_affected","executeSuccess","options","auth","body","path","response","url","scope","nock","matchHeader","HTTP_HEADER_ACCEPT","CONTENT_TYPE_APPLICATION_JSON","HTTP_HEADER_CONTENT_TYPE","post","basicAuth","reply","executeFailureHttpStatusCode","statusCode","executeFailureErrorCode","errorCode","replyWithError","message","code","executeRedirectSuccess","redirectLocation","Location"],"sources":["../../es6/test/api-data-execute-nock.js"],"sourcesContent":["/**\n * RQLite API execute nock HTTP Mocks\n * @module test/api-data-execute-nock\n */\nimport nock from 'nock'\nimport { CONTENT_TYPE_APPLICATION_JSON } from '../http-request/content-types'\nimport { HTTP_HEADER_ACCEPT, HTTP_HEADER_CONTENT_TYPE } from '../http-request/http-headers'\n\n/**\n * A nock HTTP request mock\n * @typedef {import('nock')} Nock\n */\n\n/**\n * Execute success response body\n */\nexport const EXECUTE_SUCCESS_RESPONSE = {\n results: [\n {\n last_insert_id: 1,\n rows_affected: 1,\n },\n ],\n}\n\n/**\n * Creates a nock that represents a successful call to execute endpoint\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.response=EXECUTE_SUCCESS_RESPONSE] The response body\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A query api success mock\n */\nexport function executeSuccess (options = {}) {\n const {\n auth,\n body,\n path,\n response = EXECUTE_SUCCESS_RESPONSE,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .matchHeader(HTTP_HEADER_CONTENT_TYPE, CONTENT_TYPE_APPLICATION_JSON)\n .post(path, body)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(200, response)\n}\n\n/**\n * Creates a nock that represents a failed call to execute endpoint based on status code\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.response={}] The response body\n * @param {Number} [options.statusCode] The http status code\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A query api success mock\n */\nexport function executeFailureHttpStatusCode (options = {}) {\n const {\n auth,\n body,\n path,\n response = {},\n statusCode,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .matchHeader(HTTP_HEADER_CONTENT_TYPE, CONTENT_TYPE_APPLICATION_JSON)\n .post(path, body)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(statusCode, response)\n}\n\n/**\n * Creates a nock that represents a failed call to execute endpoint based on error code\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {String} [options.errorCode] The error code\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A query api success mock\n */\nexport function executeFailureErrorCode (options = {}) {\n const {\n auth,\n body,\n path,\n errorCode,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .matchHeader(HTTP_HEADER_CONTENT_TYPE, CONTENT_TYPE_APPLICATION_JSON)\n .post(path, body)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.replyWithError({\n message: errorCode,\n code: errorCode,\n })\n}\n\n/**\n * Creates a nock that represents a successful call to execute endpoint\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {String} [options.redirectLocation] The uri for the location header\n * @param {Number} [options.statusCode=301] The redirect status code\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A query api success mock\n */\nexport function executeRedirectSuccess (options = {}) {\n const {\n auth,\n body,\n path,\n redirectLocation,\n statusCode = 301,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .matchHeader(HTTP_HEADER_CONTENT_TYPE, CONTENT_TYPE_APPLICATION_JSON)\n .post(path, body)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(statusCode, { Location: redirectLocation }, {\n Location: redirectLocation,\n })\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,210 @@
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.QUERY_SUCCESS_RESPONSE = exports.QUERY_MULTIPLE_SUCCESS_RESPONSE = void 0;exports.queryFailureErrorCode = queryFailureErrorCode;exports.queryFailureHttpStatusCode = queryFailureHttpStatusCode;exports.queryMultipleSuccess = queryMultipleSuccess;exports.queryRedirectSuccess = queryRedirectSuccess;exports.querySuccess = querySuccess;
2
+
3
+
4
+
5
+ var _nock = _interopRequireDefault(require("nock"));
6
+ var _contentTypes = require("../http-request/content-types");
7
+ var _httpHeaders = require("../http-request/http-headers"); /**
8
+ * RQLite API execute nock HTTP Mocks
9
+ * @module test/api-data-query-nock
10
+ */ /**
11
+ * A nock HTTP request mock
12
+ * @typedef {import('nock')} Nock
13
+ */
14
+ /**
15
+ * Single query success response body
16
+ */
17
+ const QUERY_SUCCESS_RESPONSE = exports.QUERY_SUCCESS_RESPONSE = {
18
+ results: [
19
+ {
20
+ columns: ['id', 'name'],
21
+ types: ['integer', 'text'],
22
+ values: [[1, 'fiona']]
23
+ }]
24
+
25
+ };
26
+
27
+ /**
28
+ * Multiple query success response body
29
+ */
30
+ const QUERY_MULTIPLE_SUCCESS_RESPONSE = exports.QUERY_MULTIPLE_SUCCESS_RESPONSE = {
31
+ results: [
32
+ {
33
+ columns: ['id', 'name'],
34
+ types: ['integer', 'text'],
35
+ values: [[1, 'fiona']]
36
+ },
37
+ {
38
+ columns: ['id', 'value'],
39
+ types: ['integer', 'text'],
40
+ values: [[1, 'test']]
41
+ }]
42
+
43
+ };
44
+
45
+ /**
46
+ * Nock function to all queries
47
+ * @returns {Boolean} Return the value true
48
+ */
49
+ function queryAllowAll() {
50
+ return true;
51
+ }
52
+
53
+ /**
54
+ * Creates a nock that represents a successful call to data query endpoint
55
+ * @param {Object} [options={}] The options
56
+ * @param {Object} [options.auth] Optional object for auth
57
+ * @param {String} [options.path] The path of the request
58
+ * @param {Object} [options.query] The query which allows all by default
59
+ * @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body
60
+ * @param {String} [options.url] The url for the request
61
+ * @returns {Nock} A query api success mock
62
+ */
63
+ function querySuccess(options = {}) {
64
+ const {
65
+ auth,
66
+ path,
67
+ query = queryAllowAll,
68
+ response = QUERY_SUCCESS_RESPONSE,
69
+ url
70
+ } = options;
71
+ const scope = (0, _nock.default)(url).
72
+ matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
73
+ get(path).
74
+ query(query);
75
+ if (auth) {
76
+ scope.basicAuth(auth);
77
+ }
78
+ return scope.reply(200, response);
79
+ }
80
+
81
+ /**
82
+ * Creates a nock that represents a failed call to data query endpoint based on status code
83
+ * @param {Object} [options={}] The options
84
+ * @param {Object} [options.auth] Optional object for auth
85
+ * @param {String} [options.path] The path of the request
86
+ * @param {Object} [options.query] The query which allows all by default
87
+ * @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body
88
+ * @param {String} [options.url] The url for the request
89
+ * @param {Number} [options.statusCode] The statusCode for the response
90
+ * @param {Number} [options.times] The number of times the request should repeat
91
+ * @returns {Nock} A query api success mock
92
+ */
93
+ function queryFailureHttpStatusCode(options = {}) {
94
+ const {
95
+ auth,
96
+ path,
97
+ query = queryAllowAll,
98
+ response = {},
99
+ url,
100
+ statusCode,
101
+ times
102
+ } = options;
103
+ const scope = (0, _nock.default)(url).
104
+ matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
105
+ get(path).
106
+ query(query);
107
+ if (auth) {
108
+ scope.basicAuth(auth);
109
+ }
110
+ if (times) {
111
+ scope.times(times);
112
+ }
113
+ return scope.reply(statusCode, response);
114
+ }
115
+
116
+ /**
117
+ * Creates a nock that represents a failed call to data query endpoint based on error code
118
+ * @param {Object} [options={}] The options
119
+ * @param {Object} [options.auth] Optional object for auth
120
+ * @param {String} [options.path] The path of the request
121
+ * @param {Object} [options.query] The query which allows all by default
122
+ * @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body
123
+ * @param {String} [options.url] The url for the request
124
+ * @param {String} [options.errorCode] The error code for the response
125
+ * @returns {Nock} A query api success mock
126
+ */
127
+ function queryFailureErrorCode(options = {}) {
128
+ const {
129
+ auth,
130
+ path,
131
+ query = queryAllowAll,
132
+ errorCode,
133
+ url
134
+ } = options;
135
+ const scope = (0, _nock.default)(url).
136
+ matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
137
+ get(path).
138
+ query(query);
139
+ if (auth) {
140
+ scope.basicAuth(auth);
141
+ }
142
+ return scope.replyWithError({
143
+ message: errorCode,
144
+ code: errorCode
145
+ });
146
+ }
147
+
148
+ /**
149
+ * Creates a nock that represents a successful HTTP request to the query endpoint
150
+ * that responds with a statusCode (301 by default) redirect
151
+ * @param {Object} [options={}] The options
152
+ * @param {Object} [options.auth] Optional object for auth
153
+ * @param {String} [options.path] The path of the request
154
+ * @param {Object} [options.query] The query which allows all by default
155
+ * @param {String} [options.redirectLocation] The uri for the location header
156
+ * @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body
157
+ * @param {Number} [options.statusCode=301] The redirect status code
158
+ * @param {String} [options.url] The url for the request
159
+ * @returns {Nock} A query api redirect success mock
160
+ */
161
+ function queryRedirectSuccess(options = {}) {
162
+ const {
163
+ auth,
164
+ path,
165
+ query = queryAllowAll,
166
+ redirectLocation,
167
+ statusCode = 301,
168
+ url
169
+ } = options;
170
+ const scope = (0, _nock.default)(url).
171
+ matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
172
+ get(path).
173
+ query(query);
174
+ if (auth) {
175
+ scope.basicAuth(auth);
176
+ }
177
+ return scope.reply(statusCode, { [_httpHeaders.HTTP_HEADER_LOCATION]: redirectLocation }, {
178
+ [_httpHeaders.HTTP_HEADER_LOCATION]: redirectLocation
179
+ });
180
+ }
181
+
182
+ /**
183
+ * Creates a nock that represents a successful HTTP POST request to the mutliple query endpoint
184
+ * @param {Object} [options={}] The options
185
+ * @param {Object} [options.auth] Optional object for auth
186
+ * @param {String} [options.path] The path of the request
187
+ * @param {Object} [options.query] The query which allows all by default
188
+ * @param {Object} [options.response=QUERY_MULTIPLE_SUCCESS_RESPONSE] The response body
189
+ * @param {String} [options.url] The url for the request
190
+ * @returns {Nock} A multiple query api success mock
191
+ */
192
+ function queryMultipleSuccess(options = {}) {
193
+ const {
194
+ auth,
195
+ body,
196
+ path,
197
+ query = queryAllowAll,
198
+ response = QUERY_MULTIPLE_SUCCESS_RESPONSE,
199
+ url
200
+ } = options;
201
+ const scope = (0, _nock.default)(url).
202
+ matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_JSON).
203
+ post(path, body).
204
+ query(query);
205
+ if (auth) {
206
+ scope.basicAuth(auth);
207
+ }
208
+ return scope.reply(200, response);
209
+ }
210
+ //# sourceMappingURL=api-data-query-nock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-data-query-nock.js","names":["_nock","_interopRequireDefault","require","_contentTypes","_httpHeaders","QUERY_SUCCESS_RESPONSE","exports","results","columns","types","values","QUERY_MULTIPLE_SUCCESS_RESPONSE","queryAllowAll","querySuccess","options","auth","path","query","response","url","scope","nock","matchHeader","HTTP_HEADER_ACCEPT","CONTENT_TYPE_APPLICATION_JSON","get","basicAuth","reply","queryFailureHttpStatusCode","statusCode","times","queryFailureErrorCode","errorCode","replyWithError","message","code","queryRedirectSuccess","redirectLocation","HTTP_HEADER_LOCATION","queryMultipleSuccess","body","post"],"sources":["../../es6/test/api-data-query-nock.js"],"sourcesContent":["/**\n * RQLite API execute nock HTTP Mocks\n * @module test/api-data-query-nock\n */\nimport nock from 'nock'\nimport { CONTENT_TYPE_APPLICATION_JSON } from '../http-request/content-types'\nimport { HTTP_HEADER_ACCEPT, HTTP_HEADER_LOCATION } from '../http-request/http-headers'\n\n/**\n * A nock HTTP request mock\n * @typedef {import('nock')} Nock\n */\n\n/**\n * Single query success response body\n */\nexport const QUERY_SUCCESS_RESPONSE = {\n results: [\n {\n columns: ['id', 'name'],\n types: ['integer', 'text'],\n values: [[1, 'fiona']],\n },\n ],\n}\n\n/**\n * Multiple query success response body\n */\nexport const QUERY_MULTIPLE_SUCCESS_RESPONSE = {\n results: [\n {\n columns: ['id', 'name'],\n types: ['integer', 'text'],\n values: [[1, 'fiona']],\n },\n {\n columns: ['id', 'value'],\n types: ['integer', 'text'],\n values: [[1, 'test']],\n },\n ],\n}\n\n/**\n * Nock function to all queries\n * @returns {Boolean} Return the value true\n */\nfunction queryAllowAll () {\n return true\n}\n\n/**\n * Creates a nock that represents a successful call to data query endpoint\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.query] The query which allows all by default\n * @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A query api success mock\n */\nexport function querySuccess (options = {}) {\n const {\n auth,\n path,\n query = queryAllowAll,\n response = QUERY_SUCCESS_RESPONSE,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .get(path)\n .query(query)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(200, response)\n}\n\n/**\n * Creates a nock that represents a failed call to data query endpoint based on status code\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.query] The query which allows all by default\n * @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body\n * @param {String} [options.url] The url for the request\n * @param {Number} [options.statusCode] The statusCode for the response\n * @param {Number} [options.times] The number of times the request should repeat\n * @returns {Nock} A query api success mock\n */\nexport function queryFailureHttpStatusCode (options = {}) {\n const {\n auth,\n path,\n query = queryAllowAll,\n response = {},\n url,\n statusCode,\n times,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .get(path)\n .query(query)\n if (auth) {\n scope.basicAuth(auth)\n }\n if (times) {\n scope.times(times)\n }\n return scope.reply(statusCode, response)\n}\n\n/**\n * Creates a nock that represents a failed call to data query endpoint based on error code\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.query] The query which allows all by default\n * @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body\n * @param {String} [options.url] The url for the request\n * @param {String} [options.errorCode] The error code for the response\n * @returns {Nock} A query api success mock\n */\nexport function queryFailureErrorCode (options = {}) {\n const {\n auth,\n path,\n query = queryAllowAll,\n errorCode,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .get(path)\n .query(query)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.replyWithError({\n message: errorCode,\n code: errorCode,\n })\n}\n\n/**\n * Creates a nock that represents a successful HTTP request to the query endpoint\n * that responds with a statusCode (301 by default) redirect\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.query] The query which allows all by default\n * @param {String} [options.redirectLocation] The uri for the location header\n * @param {Object} [options.response=QUERY_SUCCESS_RESPONSE] The response body\n * @param {Number} [options.statusCode=301] The redirect status code\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A query api redirect success mock\n */\nexport function queryRedirectSuccess (options = {}) {\n const {\n auth,\n path,\n query = queryAllowAll,\n redirectLocation,\n statusCode = 301,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .get(path)\n .query(query)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(statusCode, { [HTTP_HEADER_LOCATION]: redirectLocation }, {\n [HTTP_HEADER_LOCATION]: redirectLocation,\n })\n}\n\n/**\n * Creates a nock that represents a successful HTTP POST request to the mutliple query endpoint\n * @param {Object} [options={}] The options\n * @param {Object} [options.auth] Optional object for auth\n * @param {String} [options.path] The path of the request\n * @param {Object} [options.query] The query which allows all by default\n * @param {Object} [options.response=QUERY_MULTIPLE_SUCCESS_RESPONSE] The response body\n * @param {String} [options.url] The url for the request\n * @returns {Nock} A multiple query api success mock\n */\nexport function queryMultipleSuccess (options = {}) {\n const {\n auth,\n body,\n path,\n query = queryAllowAll,\n response = QUERY_MULTIPLE_SUCCESS_RESPONSE,\n url,\n } = options\n const scope = nock(url)\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON)\n .post(path, body)\n .query(query)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(200, response)\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.BACKUP_SUCCESS_RESPONSE = void 0;exports.backupSuccess = backupSuccess;var _nock = _interopRequireDefault(require("nock"));
2
+ var _contentTypes = require("../../http-request/content-types");
3
+ var _httpHeaders = require("../../http-request/http-headers");
4
+
5
+ const BACKUP_SUCCESS_RESPONSE = exports.BACKUP_SUCCESS_RESPONSE = [
6
+ 'CREATE TABLE foo (id integer not null primary key, name text);',
7
+ 'INSERT INTO foo(name) VALUES("fiona");',
8
+ 'INSERT INTO foo(name) VALUES("justin");'].
9
+ join('');
10
+
11
+ /**
12
+ * Creates a nock that represents a successful call to data query endpoint.
13
+ */
14
+ function backupSuccess(options) {
15
+ const {
16
+ url, path, auth, response = BACKUP_SUCCESS_RESPONSE
17
+ } = options;
18
+ const scope = (0, _nock.default)(url).
19
+ defaultReplyHeaders({
20
+ [_httpHeaders.HTTP_HEADER_CONTENT_TYPE]: _contentTypes.CONTENT_TYPE_APPLICATION_OCTET_STREAM
21
+ }).
22
+ matchHeader(_httpHeaders.HTTP_HEADER_ACCEPT, _contentTypes.CONTENT_TYPE_APPLICATION_OCTET_STREAM).
23
+ get(path);
24
+ if (auth) {
25
+ scope.basicAuth(auth);
26
+ }
27
+ return scope.reply(200, response);
28
+ }
29
+ //# sourceMappingURL=backup-nock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup-nock.js","names":["_nock","_interopRequireDefault","require","_contentTypes","_httpHeaders","BACKUP_SUCCESS_RESPONSE","exports","join","backupSuccess","options","url","path","auth","response","scope","nock","defaultReplyHeaders","HTTP_HEADER_CONTENT_TYPE","CONTENT_TYPE_APPLICATION_OCTET_STREAM","matchHeader","HTTP_HEADER_ACCEPT","get","basicAuth","reply"],"sources":["../../../es6/test/backups/backup-nock.js"],"sourcesContent":["import nock from 'nock'\nimport { CONTENT_TYPE_APPLICATION_OCTET_STREAM } from '../../http-request/content-types'\nimport { HTTP_HEADER_ACCEPT, HTTP_HEADER_CONTENT_TYPE } from '../../http-request/http-headers'\n\nexport const BACKUP_SUCCESS_RESPONSE = [\n 'CREATE TABLE foo (id integer not null primary key, name text);',\n 'INSERT INTO foo(name) VALUES(\"fiona\");',\n 'INSERT INTO foo(name) VALUES(\"justin\");',\n].join('')\n\n/**\n * Creates a nock that represents a successful call to data query endpoint.\n */\nexport function backupSuccess (options) {\n const {\n url, path, auth, response = BACKUP_SUCCESS_RESPONSE,\n } = options\n const scope = nock(url)\n .defaultReplyHeaders({\n [HTTP_HEADER_CONTENT_TYPE]: CONTENT_TYPE_APPLICATION_OCTET_STREAM,\n })\n .matchHeader(HTTP_HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_OCTET_STREAM)\n .get(path)\n if (auth) {\n scope.basicAuth(auth)\n }\n return scope.reply(200, response)\n}\n"],"mappings":"+OAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;;AAEO,MAAMG,uBAAuB,GAAAC,OAAA,CAAAD,uBAAA,GAAG;AACrC,gEAAgE;AAChE,wCAAwC;AACxC,yCAAyC,CAC1C;AAACE,IAAI,CAAC,EAAE,CAAC;;AAEV;AACA;AACA;AACO,SAASC,aAAaA,CAAEC,OAAO,EAAE;EACtC,MAAM;IACJC,GAAG,EAAEC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,GAAGR;EAC9B,CAAC,GAAGI,OAAO;EACX,MAAMK,KAAK,GAAG,IAAAC,aAAI,EAACL,GAAG,CAAC;EACpBM,mBAAmB,CAAC;IACnB,CAACC,qCAAwB,GAAGC;EAC9B,CAAC,CAAC;EACDC,WAAW,CAACC,+BAAkB,EAAEF,mDAAqC,CAAC;EACtEG,GAAG,CAACV,IAAI,CAAC;EACZ,IAAIC,IAAI,EAAE;IACRE,KAAK,CAACQ,SAAS,CAACV,IAAI,CAAC;EACvB;EACA,OAAOE,KAAK,CAACS,KAAK,CAAC,GAAG,EAAEV,QAAQ,CAAC;AACnC","ignoreList":[]}