@shelf/jest-dynamodb
Version:
Run your tests using Jest & DynamoDB local
66 lines (65 loc) • 2.5 kB
JavaScript
;
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)));
}