UNPKG

lemon-core

Version:
129 lines 4.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.strToBin = exports.omitPrimaryKeys = exports.paginatedRequest = exports.mergeResults = exports.omitNulls = void 0; // origin from: https://github.com/baseprime/dynamodb @20191106 // Copyright (c) 2016 Ryan Fitzgerald /** * `utils.ts` * - utils * * * @author Steve Jung <steve@lemoncloud.io> * @date 2019-11-20 refactoring to ts via origin * * @copyright (C) lemoncloud.io 2019 - All Rights Reserved. */ const lodash_1 = __importDefault(require("lodash")); const async_1 = __importDefault(require("async")); // eslint-disable-next-line @typescript-eslint/no-var-requires // const AWSUtil = require('aws-sdk/lib/util'); const omitNulls = (data) => { return lodash_1.default.omitBy(data, function (value) { return (lodash_1.default.isNull(value) || lodash_1.default.isUndefined(value) || (lodash_1.default.isArray(value) && lodash_1.default.isEmpty(value)) || (lodash_1.default.isString(value) && lodash_1.default.isEmpty(value))); }); }; exports.omitNulls = omitNulls; const mergeResults = (responses, tableName) => { const result = { Items: [], ConsumedCapacity: { CapacityUnits: 0, TableName: tableName, }, Count: 0, ScannedCount: 0, }; const merged = lodash_1.default.reduce(responses, (memo, resp) => { if (!resp) { return memo; } memo.Count += resp.Count || 0; memo.ScannedCount += resp.ScannedCount || 0; if (resp.ConsumedCapacity) { memo.ConsumedCapacity.CapacityUnits += resp.ConsumedCapacity.CapacityUnits || 0; } if (resp.Items) { memo.Items = memo.Items.concat(resp.Items); } if (resp.LastEvaluatedKey) { memo.LastEvaluatedKey = resp.LastEvaluatedKey; } return memo; }, result); if (merged.ConsumedCapacity.CapacityUnits === 0) { delete merged.ConsumedCapacity; } if (merged.ScannedCount === 0) { delete merged.ScannedCount; } return merged; }; exports.mergeResults = mergeResults; const paginatedRequest = (self, runRequestFunc, callback) => { // if callback isn't passed switch to stream if (!callback) { throw new Error('@callback is required'); } let lastEvaluatedKey = null; const responses = []; let retry = false; const doFunc = function (callback) { if (lastEvaluatedKey) { self.startKey(lastEvaluatedKey); } runRequestFunc(self.buildRequest(), function (err, resp) { if (err && err.retryable) { retry = true; return setImmediate(callback); } else if (err) { retry = false; return setImmediate(callback, err); } retry = false; lastEvaluatedKey = resp.LastEvaluatedKey; responses.push(resp); return setImmediate(callback); }); }; const testFunc = function () { return (self.options.loadAll && lastEvaluatedKey) || retry; }; const resulsFunc = function (err) { if (err) { return callback(err); } return callback(null, (0, exports.mergeResults)(responses, self.table.tableName())); }; async_1.default.doWhilst(doFunc, testFunc, resulsFunc); }; exports.paginatedRequest = paginatedRequest; const omitPrimaryKeys = function (schema, params) { return lodash_1.default.omit(params, schema.hashKey, schema.rangeKey); }; exports.omitPrimaryKeys = omitPrimaryKeys; const strToBin = function (value) { if (typeof value !== 'string') { const StrConversionError = 'Need to pass in string primitive to be converted to binary.'; throw new Error(StrConversionError); } // if (AWSUtil.isBrowser()) { // const len = value.length; // const bin = new Uint8Array(new ArrayBuffer(len)); // for (let i = 0; i < len; i++) { // bin[i] = value.charCodeAt(i); // } // return bin; // } else { // return AWSUtil.Buffer(value); // } return Buffer.from(value); }; exports.strToBin = strToBin; //# sourceMappingURL=utils.js.map