rethinkdb-elasticsearch-stream
Advanced tools
Comparing version 2.1.0 to 2.2.0
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,17 +6,10 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.default = void 0; | ||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; | ||
var _through = require("through2"); | ||
var _through = require('through2'); | ||
var _saveDocument = _interopRequireDefault(require("./save-document")); | ||
var _saveDocument = require('./save-document'); | ||
var _saveDocument2 = _interopRequireDefault(_saveDocument); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } | ||
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } | ||
/** | ||
@@ -29,36 +22,37 @@ * Fill an Elasticsearch type with the contents of a RethinkDB table | ||
*/ | ||
function backfillTable(r, _ref) { | ||
let { db, esType, table } = _ref, | ||
properties = _objectWithoutProperties(_ref, ['db', 'esType', 'table']); | ||
function backfillTable(r, { | ||
db, | ||
esType, | ||
table, | ||
...properties | ||
}) { | ||
return new Promise((resolve, reject) => { | ||
const dataStream = r.db(db).table(table).toStream(); | ||
dataStream.pipe((0, _through.obj)(async (chunk, enc, cb) => { | ||
try { | ||
await (0, _saveDocument.default)({ | ||
db, | ||
document: chunk, | ||
table: esType || table, | ||
...properties | ||
}); | ||
} catch (e) { | ||
const { | ||
request, | ||
response | ||
} = e; | ||
dataStream.pipe((0, _through.obj)((() => { | ||
var _ref2 = _asyncToGenerator(function* (chunk, enc, cb) { | ||
try { | ||
yield (0, _saveDocument2.default)(_extends({ | ||
db, | ||
document: chunk, | ||
table: esType || table | ||
}, properties)); | ||
} catch (e) { | ||
const { request, response } = e; | ||
if (request && response && request.path) { | ||
console.log(`ES error for ${request.path} [${response.status}]`); | ||
} else { | ||
console.log('ES error', e); | ||
} | ||
if (request && response && request.path) { | ||
console.log(`ES error for ${request.path} [${response.status}]`); | ||
} else { | ||
console.log('ES error', e); | ||
} | ||
} | ||
cb(); | ||
}); | ||
return function (_x, _x2, _x3) { | ||
return _ref2.apply(this, arguments); | ||
}; | ||
})())).on('error', reject).on('finish', resolve); | ||
cb(); | ||
})).on('error', reject).on('finish', resolve); | ||
}); | ||
} | ||
exports.default = backfillTable; | ||
var _default = backfillTable; | ||
exports.default = _default; |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,6 +6,6 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.default = { | ||
exports.default = void 0; | ||
var _default = { | ||
// If the Elasticsearch instance should be populated with existing RethinkDB data | ||
backfill: true, | ||
// Connection details for an Elasticsearch instance | ||
@@ -16,3 +16,2 @@ elasticsearch: { | ||
}, | ||
// Connection details for the RethinkDB instance to be copied | ||
@@ -24,8 +23,7 @@ // See [rethinkdbdash](https://github.com/neumino/rethinkdbdash) for all possible options. | ||
}, | ||
// Tables to duplicate and watch for changes | ||
tables: [], | ||
// If the Elasticsearch instance should be updated when RethinkDB emits a changefeed event | ||
watch: true | ||
}; | ||
}; | ||
exports.default = _default; |
@@ -6,2 +6,4 @@ "use strict"; | ||
}); | ||
exports.default = void 0; | ||
function delay(ms) { | ||
@@ -11,2 +13,3 @@ return new Promise(resolve => setTimeout(resolve, ms)); | ||
exports.default = delay; | ||
var _default = delay; | ||
exports.default = _default; |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,2 +6,4 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.default = void 0; | ||
/** | ||
@@ -13,3 +15,7 @@ * Utility to get the path Elasticsearch should work with | ||
*/ | ||
function elasticsearchPath({ db = '', id = '', table = '' } = {}) { | ||
function elasticsearchPath({ | ||
db = '', | ||
id = '', | ||
table = '' | ||
} = {}) { | ||
// If `db` or `table` are not strings, that's probably a mistake | ||
@@ -28,4 +34,5 @@ if (typeof db !== 'string') { | ||
return '/'; | ||
} | ||
// Given table but no db is probably incorrect | ||
} // Given table but no db is probably incorrect | ||
throw new Error('Table provided but not database.'); | ||
@@ -45,2 +52,3 @@ } | ||
exports.default = elasticsearchPath; | ||
var _default = elasticsearchPath; | ||
exports.default = _default; |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,52 +6,39 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.default = void 0; | ||
var _tableExists = _interopRequireDefault(require("./table-exists")); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
const getTableExists = async (r, { | ||
db, | ||
table | ||
}) => ({ | ||
exists: await (0, _tableExists.default)({ | ||
db, | ||
r, | ||
table | ||
}), | ||
name: `${db}:${table}` | ||
}); | ||
/** | ||
* Make sure table options are in the correct format | ||
*/ | ||
let ensureTables = (() => { | ||
var _ref2 = _asyncToGenerator(function* (r, tables) { | ||
if (!Array.isArray(tables)) { | ||
throw new TypeError('`tables` must be an array of objects.'); | ||
} | ||
const existingTables = yield Promise.all(tables.map(function (table) { | ||
return getTableExists(r, table); | ||
})); | ||
const missingTables = existingTables.filter(function (table) { | ||
return !table.exists; | ||
}); | ||
async function ensureTables(r, tables) { | ||
if (!Array.isArray(tables)) { | ||
throw new TypeError('`tables` must be an array of objects.'); | ||
} | ||
if (missingTables.length !== 0) { | ||
const missingTableNames = missingTables.map(function (t) { | ||
return t.name; | ||
}).join(', '); | ||
throw new Error(`Table(s) ${missingTableNames} could not be found.`); | ||
} | ||
}); | ||
const existingTables = await Promise.all(tables.map(table => getTableExists(r, table))); | ||
const missingTables = existingTables.filter(table => !table.exists); | ||
return function ensureTables(_x3, _x4) { | ||
return _ref2.apply(this, arguments); | ||
}; | ||
})(); | ||
if (missingTables.length !== 0) { | ||
const missingTableNames = missingTables.map(t => t.name).join(', '); | ||
throw new Error(`Table(s) ${missingTableNames} could not be found.`); | ||
} | ||
} | ||
var _tableExists = require('./table-exists'); | ||
var _tableExists2 = _interopRequireDefault(_tableExists); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } | ||
const getTableExists = (() => { | ||
var _ref = _asyncToGenerator(function* (r, { db, table }) { | ||
return { | ||
exists: yield (0, _tableExists2.default)({ db, r, table }), | ||
name: `${db}:${table}` | ||
}; | ||
}); | ||
return function getTableExists(_x, _x2) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
})();exports.default = ensureTables; | ||
var _default = ensureTables; | ||
exports.default = _default; |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,119 +6,80 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports._delete = undefined; | ||
exports._delete = exports.default = void 0; | ||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; | ||
var _axios = _interopRequireDefault(require("axios")); | ||
let init = (() => { | ||
var _ref = _asyncToGenerator(function* (extraOptions) { | ||
const options = _extends({}, _defaultOptions2.default, extraOptions); | ||
var _rethinkdbdash = _interopRequireDefault(require("rethinkdbdash")); | ||
elasticsearchBaseUrl = (0, _urlString2.default)(options.elasticsearch); | ||
r = (0, _rethinkdbdash2.default)(options.rethinkdb); | ||
var _backfillTable = _interopRequireDefault(require("./backfill-table")); | ||
// If an error is thrown, try to cleanup connection pool before throwing error to handler | ||
try { | ||
yield ensureConnections(options.elasticsearch); | ||
yield (0, _ensureTables2.default)(r, options.tables); | ||
} catch (e) { | ||
yield cleanup(); | ||
throw e; | ||
} | ||
var _defaultOptions = _interopRequireDefault(require("./defaultOptions")); | ||
if (options.watch) { | ||
options.tables.forEach(function (tableDetails) { | ||
return (0, _watchTable2.default)(r, _extends({ baseURL: elasticsearchBaseUrl }, tableDetails)); | ||
}); | ||
} | ||
var _ensureTables = _interopRequireDefault(require("./ensure-tables")); | ||
if (options.backfill) { | ||
const backfillPromises = options.tables.map(function (tableDetails) { | ||
return (0, _backfillTable2.default)(r, _extends({ | ||
baseURL: elasticsearchBaseUrl | ||
}, tableDetails)); | ||
}); | ||
var _urlString = _interopRequireDefault(require("./url-string")); | ||
yield Promise.all(backfillPromises); | ||
} | ||
var _watchTable = _interopRequireDefault(require("./watch-table")); | ||
// If nothing is to be done, cleanup connections and exit | ||
if (!options.watch) { | ||
cleanup(); | ||
} | ||
}); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
return function init(_x) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
})(); | ||
// The base URL for the Elasticsearch server | ||
let elasticsearchBaseUrl; // A handle to the RethinkDB driver instance | ||
let cleanup = (() => { | ||
var _ref2 = _asyncToGenerator(function* () { | ||
return r.getPoolMaster().drain(); | ||
}); | ||
let r; | ||
return function cleanup() { | ||
return _ref2.apply(this, arguments); | ||
async function init(extraOptions) { | ||
const options = { ..._defaultOptions.default, | ||
...extraOptions | ||
}; | ||
})(); | ||
elasticsearchBaseUrl = (0, _urlString.default)(options.elasticsearch); | ||
r = (0, _rethinkdbdash.default)(options.rethinkdb); // If an error is thrown, try to cleanup connection pool before throwing error to handler | ||
/** | ||
* Make sure a connection can be made to the services needed. | ||
*/ | ||
try { | ||
await ensureConnections(options.elasticsearch); | ||
await (0, _ensureTables.default)(r, options.tables); | ||
} catch (e) { | ||
await cleanup(); | ||
throw e; | ||
} | ||
if (options.watch) { | ||
options.tables.forEach(tableDetails => (0, _watchTable.default)(r, { | ||
baseURL: elasticsearchBaseUrl, | ||
...tableDetails | ||
})); | ||
} | ||
let ensureConnections = (() => { | ||
var _ref3 = _asyncToGenerator(function* () { | ||
// `rethinkdbdash` hanldes RethinkDB's connection pools, so we're ignoring that for now | ||
const elasticsearchResponse = yield _axios2.default.get(elasticsearchBaseUrl); | ||
const elasticsearchHealthy = typeof elasticsearchResponse.data.cluster_uuid === 'string'; | ||
if (options.backfill) { | ||
const backfillPromises = options.tables.map(tableDetails => (0, _backfillTable.default)(r, { | ||
baseURL: elasticsearchBaseUrl, | ||
...tableDetails | ||
})); | ||
await Promise.all(backfillPromises); | ||
} // If nothing is to be done, cleanup connections and exit | ||
if (!elasticsearchHealthy) { | ||
throw new Error('Could not connect to Elasticsearch server'); | ||
} | ||
}); | ||
return function ensureConnections() { | ||
return _ref3.apply(this, arguments); | ||
}; | ||
})(); | ||
if (!options.watch) { | ||
cleanup(); | ||
} | ||
} | ||
var _axios = require('axios'); | ||
async function cleanup() { | ||
return r.getPoolMaster().drain(); | ||
} | ||
/** | ||
* Make sure a connection can be made to the services needed. | ||
*/ | ||
var _axios2 = _interopRequireDefault(_axios); | ||
var _rethinkdbdash = require('rethinkdbdash'); | ||
async function ensureConnections() { | ||
// `rethinkdbdash` hanldes RethinkDB's connection pools, so we're ignoring that for now | ||
const elasticsearchResponse = await _axios.default.get(elasticsearchBaseUrl); | ||
const elasticsearchHealthy = typeof elasticsearchResponse.data.cluster_uuid === 'string'; | ||
var _rethinkdbdash2 = _interopRequireDefault(_rethinkdbdash); | ||
if (!elasticsearchHealthy) { | ||
throw new Error('Could not connect to Elasticsearch server'); | ||
} | ||
} | ||
var _backfillTable = require('./backfill-table'); | ||
var _backfillTable2 = _interopRequireDefault(_backfillTable); | ||
var _defaultOptions = require('./defaultOptions'); | ||
var _defaultOptions2 = _interopRequireDefault(_defaultOptions); | ||
var _ensureTables = require('./ensure-tables'); | ||
var _ensureTables2 = _interopRequireDefault(_ensureTables); | ||
var _urlString = require('./url-string'); | ||
var _urlString2 = _interopRequireDefault(_urlString); | ||
var _watchTable = require('./watch-table'); | ||
var _watchTable2 = _interopRequireDefault(_watchTable); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } | ||
// The base URL for the Elasticsearch server | ||
let elasticsearchBaseUrl; | ||
// A handle to the RethinkDB driver instance | ||
let r; | ||
exports.default = init; | ||
var _default = init; | ||
/** | ||
@@ -129,2 +90,6 @@ * This can be imported and used in a transform to indicate that the document | ||
const _delete = exports._delete = Symbol('delete'); | ||
exports.default = _default; | ||
const _delete = Symbol('delete'); | ||
exports._delete = _delete; |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,5 +6,12 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.default = void 0; | ||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; | ||
var _axios = _interopRequireDefault(require("axios")); | ||
var _elasticsearchPath = _interopRequireDefault(require("./elasticsearch-path")); | ||
var _ = require("."); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
/** | ||
@@ -18,60 +25,46 @@ * Replicate a document in Elasticsearch | ||
*/ | ||
let saveDocument = (() => { | ||
var _ref = _asyncToGenerator(function* ({ | ||
baseURL, | ||
db, | ||
deleteTransform, | ||
document, | ||
esType, | ||
idKey, | ||
oldDocument, | ||
table, | ||
transform | ||
}) { | ||
let documentToSave; | ||
async function saveDocument({ | ||
baseURL, | ||
db, | ||
deleteTransform, | ||
document, | ||
esType, | ||
idKey, | ||
oldDocument, | ||
table, | ||
transform | ||
}) { | ||
let documentToSave; // document will be null if the doc was deleted in Rethink | ||
// document will be null if the doc was deleted in Rethink | ||
if (document === null) { | ||
documentToSave = deleteTransform != null ? yield deleteTransform({ db, document, oldDocument, table }) | ||
// if a deleteTransform isn't provided, the default behavior is to just | ||
// delete the document from elastic search | ||
: _extends({}, oldDocument, { | ||
_delete: _._delete | ||
}); | ||
} else { | ||
documentToSave = transform != null ? yield transform({ db, document, oldDocument, table }) : document; | ||
} | ||
if (document === null) { | ||
documentToSave = deleteTransform != null ? await deleteTransform({ | ||
db, | ||
document, | ||
oldDocument, | ||
table | ||
}) // if a deleteTransform isn't provided, the default behavior is to just | ||
// delete the document from elastic search | ||
: { ...oldDocument, | ||
_delete: _._delete | ||
}; | ||
} else { | ||
documentToSave = transform != null ? await transform({ | ||
db, | ||
document, | ||
oldDocument, | ||
table | ||
}) : document; | ||
} | ||
if (Array.isArray(documentToSave)) { | ||
return Promise.all(documentToSave.map(function (d) { | ||
return pushDocument(baseURL, db, d, idKey, esType || table); | ||
})); | ||
} | ||
return pushDocument(baseURL, db, documentToSave, idKey, esType || table); | ||
}); | ||
if (Array.isArray(documentToSave)) { | ||
return Promise.all(documentToSave.map(d => pushDocument(baseURL, db, d, idKey, esType || table))); | ||
} | ||
return function saveDocument(_x) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
})(); | ||
return pushDocument(baseURL, db, documentToSave, idKey, esType || table); | ||
} | ||
var _axios = require('axios'); | ||
var _axios2 = _interopRequireDefault(_axios); | ||
var _elasticsearchPath = require('./elasticsearch-path'); | ||
var _elasticsearchPath2 = _interopRequireDefault(_elasticsearchPath); | ||
var _ = require('.'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } | ||
function pushDocument(baseURL, db, doc, idKey, table) { | ||
if (doc == null) return; | ||
if (Object.keys(doc).length === 0) return; | ||
const path = (0, _elasticsearchPath2.default)({ | ||
const path = (0, _elasticsearchPath.default)({ | ||
db, | ||
@@ -83,12 +76,19 @@ id: idKey ? doc[idKey] : null, | ||
if (doc._delete === _._delete) { | ||
return _axios2.default.delete(path, { baseURL }); | ||
return _axios.default.delete(path, { | ||
baseURL | ||
}); | ||
} | ||
if (idKey) { | ||
return _axios2.default.put(path, doc, { baseURL }); | ||
return _axios.default.put(path, doc, { | ||
baseURL | ||
}); | ||
} | ||
return _axios2.default.post(path, doc, { baseURL }); | ||
return _axios.default.post(path, doc, { | ||
baseURL | ||
}); | ||
} | ||
exports.default = saveDocument; | ||
var _default = saveDocument; | ||
exports.default = _default; |
@@ -6,2 +6,3 @@ "use strict"; | ||
}); | ||
exports.default = void 0; | ||
@@ -14,20 +15,17 @@ /** | ||
*/ | ||
let tableExists = (() => { | ||
var _ref = _asyncToGenerator(function* ({ r, db, table }) { | ||
const hasDB = yield r.dbList().contains(db); | ||
async function tableExists({ | ||
r, | ||
db, | ||
table | ||
}) { | ||
const hasDB = await r.dbList().contains(db); | ||
if (hasDB) { | ||
return r.db(db).tableList().contains(table); | ||
} | ||
if (hasDB) { | ||
return r.db(db).tableList().contains(table); | ||
} | ||
return false; | ||
}); | ||
return false; | ||
} | ||
return function tableExists(_x) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
})(); | ||
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } | ||
exports.default = tableExists; | ||
var _default = tableExists; | ||
exports.default = _default; |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,9 +6,16 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.default = void 0; | ||
/** | ||
* Utility to create a URL string from an object representing parts of a URL | ||
*/ | ||
function urlString({ host = '127.0.0.1', port, protocol = 'http' }) { | ||
function urlString({ | ||
host = '127.0.0.1', | ||
port, | ||
protocol = 'http' | ||
}) { | ||
return `${protocol}://${host}:${port}`; | ||
} | ||
exports.default = urlString; | ||
var _default = urlString; | ||
exports.default = _default; |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,17 +6,10 @@ Object.defineProperty(exports, "__esModule", { | ||
}); | ||
exports.default = void 0; | ||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; | ||
var _rethinkdbChangefeedReconnect = _interopRequireDefault(require("rethinkdb-changefeed-reconnect")); | ||
var _rethinkdbChangefeedReconnect = require('rethinkdb-changefeed-reconnect'); | ||
var _saveDocument = _interopRequireDefault(require("./save-document")); | ||
var _rethinkdbChangefeedReconnect2 = _interopRequireDefault(_rethinkdbChangefeedReconnect); | ||
var _saveDocument = require('./save-document'); | ||
var _saveDocument2 = _interopRequireDefault(_saveDocument); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } | ||
/** | ||
@@ -28,9 +21,24 @@ * Stream changes from a RethinkDB table into Elasticsearch | ||
*/ | ||
function watchTable(r, _ref) { | ||
let { db, table } = _ref, | ||
properties = _objectWithoutProperties(_ref, ['db', 'table']); | ||
(0, _rethinkdbChangefeedReconnect2.default)(() => r.db(db).table(table).changes(), ({ new_val: document, old_val: oldDocument }) => (0, _saveDocument2.default)(_extends({ db, document, oldDocument, table }, properties)), err => console.error(err.stack), { attemptDelay: 60000, maxAttempts: Infinity, silent: true }); | ||
function watchTable(r, { | ||
db, | ||
table, | ||
...properties | ||
}) { | ||
(0, _rethinkdbChangefeedReconnect.default)(() => r.db(db).table(table).changes(), ({ | ||
new_val: document, | ||
old_val: oldDocument | ||
}) => (0, _saveDocument.default)({ | ||
db, | ||
document, | ||
oldDocument, | ||
table, | ||
...properties | ||
}), err => console.error(err.stack), { | ||
attemptDelay: 60000, | ||
maxAttempts: Infinity, | ||
silent: true | ||
}); | ||
} | ||
exports.default = watchTable; | ||
var _default = watchTable; | ||
exports.default = _default; |
{ | ||
"name": "rethinkdb-elasticsearch-stream", | ||
"version": "2.1.0", | ||
"version": "2.2.0", | ||
"main": "build/index.js", | ||
@@ -9,5 +9,7 @@ "repository": "https://github.com/gsandf/rethinkdb-elasticsearch-stream", | ||
"ava": { | ||
"babel": "inherit", | ||
"require": [ | ||
"babel-register" | ||
"@babel/register" | ||
], | ||
"sources": [ | ||
"src/**/*.test.js" | ||
] | ||
@@ -18,3 +20,3 @@ }, | ||
[ | ||
"env", | ||
"@babel/preset-env", | ||
{ | ||
@@ -25,4 +27,31 @@ "targets": { | ||
} | ||
] | ||
], | ||
"plugins": [ | ||
"@babel/plugin-syntax-dynamic-import", | ||
"@babel/plugin-syntax-import-meta", | ||
"@babel/plugin-proposal-class-properties", | ||
"@babel/plugin-proposal-json-strings", | ||
[ | ||
"@babel/plugin-proposal-decorators", | ||
{ | ||
"legacy": true | ||
} | ||
], | ||
"stage-0" | ||
"@babel/plugin-proposal-function-sent", | ||
"@babel/plugin-proposal-export-namespace-from", | ||
"@babel/plugin-proposal-numeric-separator", | ||
"@babel/plugin-proposal-throw-expressions", | ||
"@babel/plugin-proposal-export-default-from", | ||
"@babel/plugin-proposal-logical-assignment-operators", | ||
"@babel/plugin-proposal-optional-chaining", | ||
[ | ||
"@babel/plugin-proposal-pipeline-operator", | ||
{ | ||
"proposal": "minimal" | ||
} | ||
], | ||
"@babel/plugin-proposal-nullish-coalescing-operator", | ||
"@babel/plugin-proposal-do-expressions", | ||
"@babel/plugin-proposal-function-bind" | ||
] | ||
@@ -34,3 +63,3 @@ }, | ||
"scripts": { | ||
"build": "babel src --out-dir build --ignore *.test.js,test-helpers", | ||
"build": "babel src --out-dir build --ignore src/*.test.js,src/test-helpers", | ||
"container": "docker-compose run app", | ||
@@ -43,24 +72,41 @@ "coverage": "nyc ava", | ||
"start": "node .", | ||
"test": "ava src/**/*.test.js", | ||
"test:container": "docker-compose build && docker-compose run app yarn test -- -v; docker-compose down" | ||
"test": "ava", | ||
"test:container": "docker-compose build && docker-compose run app yarn test -v; docker-compose down" | ||
}, | ||
"devDependencies": { | ||
"ava": "^0.24.0", | ||
"babel-cli": "^6.26.0", | ||
"babel-preset-env": "^1.6.0", | ||
"babel-preset-stage-0": "^6.24.1", | ||
"eslint": "^4.5.0", | ||
"eslint-config-gsandf": "^1.0.0", | ||
"nock": "^9.2.3", | ||
"nyc": "^11.1.0", | ||
"p-retry": "^1.0.0", | ||
"prettier-eslint-cli": "^4.2.1" | ||
"@babel/cli": "^7.0.0", | ||
"@babel/core": "^7.0.0", | ||
"@babel/plugin-proposal-class-properties": "^7.0.0", | ||
"@babel/plugin-proposal-decorators": "^7.0.0", | ||
"@babel/plugin-proposal-do-expressions": "^7.0.0", | ||
"@babel/plugin-proposal-export-default-from": "^7.0.0", | ||
"@babel/plugin-proposal-export-namespace-from": "^7.0.0", | ||
"@babel/plugin-proposal-function-bind": "^7.0.0", | ||
"@babel/plugin-proposal-function-sent": "^7.0.0", | ||
"@babel/plugin-proposal-json-strings": "^7.0.0", | ||
"@babel/plugin-proposal-logical-assignment-operators": "^7.0.0", | ||
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", | ||
"@babel/plugin-proposal-numeric-separator": "^7.0.0", | ||
"@babel/plugin-proposal-optional-chaining": "^7.0.0", | ||
"@babel/plugin-proposal-pipeline-operator": "^7.0.0", | ||
"@babel/plugin-proposal-throw-expressions": "^7.0.0", | ||
"@babel/plugin-syntax-dynamic-import": "^7.0.0", | ||
"@babel/plugin-syntax-import-meta": "^7.0.0", | ||
"@babel/preset-env": "^7.0.0", | ||
"@babel/register": "^7.4.4", | ||
"ava": "^2.2.0", | ||
"eslint": "^6.0.1", | ||
"eslint-config-gsandf": "^1.0.1", | ||
"nock": "^10.0.6", | ||
"nyc": "^14.1.1", | ||
"p-retry": "^4.1.0", | ||
"prettier-eslint-cli": "^5.0.0" | ||
}, | ||
"dependencies": { | ||
"axios": "^0.17.0", | ||
"axios": "^0.19.0", | ||
"rethinkdb": "^2.3.3", | ||
"rethinkdb-changefeed-reconnect": "^0.3.2", | ||
"rethinkdbdash": "^2.3.31", | ||
"through2": "^2.0.3" | ||
"through2": "^3.0.1" | ||
} | ||
} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
19887
27
12
369
2
+ Addedaxios@0.19.2(transitive)
+ Addedfollow-redirects@1.5.10(transitive)
+ Addedreadable-stream@3.6.2(transitive)
+ Addedsafe-buffer@5.2.1(transitive)
+ Addedstring_decoder@1.3.0(transitive)
+ Addedthrough2@3.0.2(transitive)
- Removedaxios@0.17.1(transitive)
- Removedcore-util-is@1.0.3(transitive)
- Removedfollow-redirects@1.15.9(transitive)
- Removedis-buffer@1.1.6(transitive)
- Removedisarray@1.0.0(transitive)
- Removedprocess-nextick-args@2.0.1(transitive)
- Removedreadable-stream@2.3.8(transitive)
- Removedsafe-buffer@5.1.2(transitive)
- Removedstring_decoder@1.1.1(transitive)
- Removedthrough2@2.0.5(transitive)
- Removedxtend@4.0.2(transitive)
Updatedaxios@^0.19.0
Updatedthrough2@^3.0.1