UNPKG

@shelf/jest-dynamodb

Version:

Run your tests using Jest & DynamoDB local

66 lines (65 loc) 2.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _default; var _dynamodbLocal = _interopRequireDefault(require("dynamodb-local")); var _clientDynamodb = require("@aws-sdk/client-dynamodb"); var _getConfig = _interopRequireDefault(require("./utils/get-config")); var _deleteTables = _interopRequireDefault(require("./utils/delete-tables")); var _waitForLocalhost = _interopRequireDefault(require("./utils/wait-for-localhost")); var _getRelevantTables = _interopRequireDefault(require("./utils/get-relevant-tables")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const debug = require('debug')('jest-dynamodb'); const DEFAULT_PORT = 8000; const DEFAULT_HOST = 'localhost'; const DEFAULT_OPTIONS = ['-sharedDb']; async function _default() { const { tables: newTables, clientConfig, installerConfig, port = DEFAULT_PORT, hostname = DEFAULT_HOST, options = DEFAULT_OPTIONS } = await (0, _getConfig.default)(debug); const dynamoDB = new _clientDynamodb.DynamoDB({ endpoint: `http://${hostname}:${port}`, tls: false, region: 'local-env', credentials: { accessKeyId: 'fakeMyKeyId', secretAccessKey: 'fakeSecretAccessKey' }, ...clientConfig }); global.__DYNAMODB_CLIENT__ = dynamoDB; try { const promises = [dynamoDB.listTables({})]; if (!global.__DYNAMODB__) { promises.push((0, _waitForLocalhost.default)(port, hostname)); } const [TablesList] = await Promise.all(promises); const tableNames = TablesList === null || TablesList === void 0 ? void 0 : TablesList.TableNames; if (tableNames) { await (0, _deleteTables.default)(dynamoDB, (0, _getRelevantTables.default)(tableNames, newTables)); } } catch (err) { // eslint-disable-next-line no-console debug(`fallback to launch DB due to ${err}`); if (installerConfig) { _dynamodbLocal.default.configureInstaller(installerConfig); } if (!global.__DYNAMODB__) { debug('spinning up a local ddb instance'); global.__DYNAMODB__ = await _dynamodbLocal.default.launch(port, null, options); debug(`dynamodb-local started on port ${port}`); await (0, _waitForLocalhost.default)(port, hostname); } } debug(`dynamodb-local is ready on port ${port}`); await createTables(dynamoDB, newTables); } function createTables(dynamoDB, tables) { return Promise.all(tables.map(table => dynamoDB.createTable(table))); }