libpiggy
Version:
Use a PostgreSQL database like a JSON document store.
133 lines (102 loc) • 3.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _defaultsDeep = require('lodash/defaultsDeep');
var _defaultsDeep2 = _interopRequireDefault(_defaultsDeep);
var _createClient = require('./create-client');
var _createClient2 = _interopRequireDefault(_createClient);
var _createTable = require('./create-table');
var _createTable2 = _interopRequireDefault(_createTable);
var _createWatchedTable = require('./create-watched-table');
var _createWatchedTable2 = _interopRequireDefault(_createWatchedTable);
var _tableExists = require('./table-exists');
var _tableExists2 = _interopRequireDefault(_tableExists);
var _createStoreIndexes = require('./create-store-indexes');
var _createStoreIndexes2 = _interopRequireDefault(_createStoreIndexes);
var _constants = require('./constants');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const defaults = {
checkExists: false,
watch: false,
watchWhen: false,
indexes: false,
columnNames: {
key: 'key',
val: 'val',
createdAt: 'created_at',
updatedAt: 'updated_at'
}
};
const createStore = (() => {
var _ref = (0, _asyncToGenerator3.default)(function* ({ client, table, index, options }, globals) {
let clientCreated = false;
const settings = (0, _defaultsDeep2.default)({}, options, defaults);
const {
watch,
watchWhen,
checkExists,
indexes,
columnNames
} = settings;
const columns = `"${columnNames.key}" text primary key, "${columnNames.val}" jsonb, "${columnNames.createdAt}" timestamp with time zone, "${columnNames.updatedAt}" timestamp with time zone`;
try {
if (!client) {
client = yield (0, _createClient2.default)(options, globals);
clientCreated = true;
}
let results;
let code;
let exists = false;
if (checkExists) {
const existsResults = yield (0, _tableExists2.default)({ client, table });
exists = existsResults.exists;
}
if (exists) {
code = _constants.EXISTS;
} else {
if (watch) {
results = yield (0, _createWatchedTable2.default)({
client,
table,
columns,
when: watchWhen,
key: columnNames.key
});
} else {
results = yield (0, _createTable2.default)({ client, table, columns });
}
const checkResults = yield (0, _tableExists2.default)({ client, table });
if (checkResults.results) {
code = _constants.CREATED;
} else {
throw new Error('created table does not exist');
}
}
if (index) {
yield (0, _createStoreIndexes2.default)({ client, table, indexes, columnNames });
}
return {
settings,
columns,
client,
table,
results,
code
};
} catch (error) {
error.code = _constants.ERROR;
throw error;
} finally {
if (clientCreated) {
client.close();
}
}
});
return function createStore(_x, _x2) {
return _ref.apply(this, arguments);
};
})();
exports.default = createStore;