nukak-express
Advanced tools
Comparing version 0.3.2 to 0.4.1
@@ -7,2 +7,10 @@ # Changelog | ||
## [0.4.0] - 2023-11-06 | ||
- move project inside query parameter [#63](https://github.com/rogerpadilla/nukak/pull/63) | ||
## [0.3.3] - 2023-10-25 | ||
- Update usage example in the README.md. | ||
## [0.3.2] - 2023-10-24 | ||
@@ -9,0 +17,0 @@ |
@@ -6,3 +6,3 @@ { | ||
"license": "MIT", | ||
"version": "0.3.2", | ||
"version": "0.4.1", | ||
"type": "module", | ||
@@ -20,3 +20,3 @@ "main": "./index.js", | ||
"express": "^4.18.2", | ||
"nukak": "^0.2.0" | ||
"nukak": "^0.3.4" | ||
}, | ||
@@ -63,3 +63,3 @@ "devDependencies": { | ||
}, | ||
"gitHead": "9b67d4c713b755788a5e708a4cd400ab9e30fbaa" | ||
"gitHead": "a7803699d777d6d74e4f8e6b1136467978938fb1" | ||
} |
@@ -31,6 +31,6 @@ import { Router as expressRouter } from 'express'; | ||
router.get('/one', async (req, res, next) => { | ||
const { $project: project, ...qm } = req.query; | ||
const q = req.query; | ||
const querier = await getQuerier(); | ||
try { | ||
const data = await querier.findOne(entity, qm, project); | ||
const data = await querier.findOne(entity, q); | ||
res.json({ data, count: data ? 1 : 0 }); | ||
@@ -46,7 +46,13 @@ } | ||
router.get('/:id', async (req, res, next) => { | ||
const { $project: project, ...qm } = req.query; | ||
req.query.$filter[meta.id] = req.params.id; | ||
const q = req.query; | ||
q.$filter ??= {}; | ||
if (Array.isArray(q.$filter)) { | ||
q.$filter.push(req.params.id); | ||
} | ||
else { | ||
q.$filter[meta.id] = req.params.id; | ||
} | ||
const querier = await getQuerier(); | ||
try { | ||
const data = await querier.findOne(entity, qm, project); | ||
const data = await querier.findOne(entity, q); | ||
res.json({ data, count: data ? 1 : 0 }); | ||
@@ -62,7 +68,7 @@ } | ||
router.get('/', async (req, res, next) => { | ||
const { $project: project, ...qm } = req.query; | ||
const q = req.query; | ||
const querier = await getQuerier(); | ||
try { | ||
const findManyPromise = querier.findMany(entity, qm, project); | ||
const countPromise = req.query.count ? querier.count(entity, qm) : undefined; | ||
const findManyPromise = querier.findMany(entity, q); | ||
const countPromise = req.query.count ? querier.count(entity, q) : undefined; | ||
const [data, count] = await Promise.all([findManyPromise, countPromise]); | ||
@@ -79,5 +85,6 @@ res.json({ data, count }); | ||
router.get('/count', async (req, res, next) => { | ||
const q = req.query; | ||
const querier = await getQuerier(); | ||
try { | ||
const count = await querier.count(entity, req.query); | ||
const count = await querier.count(entity, q); | ||
res.json({ data: count, count }); | ||
@@ -93,6 +100,7 @@ } | ||
router.post('/', async (req, res, next) => { | ||
const payload = req.body; | ||
const querier = await getQuerier(); | ||
try { | ||
await querier.beginTransaction(); | ||
const id = await querier.insertOne(entity, req.body); | ||
const id = await querier.insertOne(entity, payload); | ||
await querier.commitTransaction(); | ||
@@ -110,7 +118,15 @@ res.json({ data: id, count: id ? 1 : 0 }); | ||
router.patch('/:id', async (req, res, next) => { | ||
req.query.$filter[meta.id] = req.params.id; | ||
const payload = req.body; | ||
const q = req.query; | ||
q.$filter ??= {}; | ||
if (Array.isArray(q.$filter)) { | ||
q.$filter.push(req.params.id); | ||
} | ||
else { | ||
q.$filter[meta.id] = req.params.id; | ||
} | ||
const querier = await getQuerier(); | ||
try { | ||
await querier.beginTransaction(); | ||
const count = await querier.updateMany(entity, req.query, req.body); | ||
const count = await querier.updateMany(entity, q, payload); | ||
await querier.commitTransaction(); | ||
@@ -128,7 +144,14 @@ res.json({ data: req.params.id, count }); | ||
router.delete('/:id', async (req, res, next) => { | ||
req.query.$filter[meta.id] = req.params.id; | ||
const q = req.query; | ||
q.$filter ??= {}; | ||
if (Array.isArray(q.$filter)) { | ||
q.$filter.push(req.params.id); | ||
} | ||
else { | ||
q.$filter[meta.id] = req.params.id; | ||
} | ||
const querier = await getQuerier(); | ||
try { | ||
await querier.beginTransaction(); | ||
const count = await querier.deleteMany(entity, req.query, { | ||
const count = await querier.deleteMany(entity, q, { | ||
softDelete: !!req.query.softDelete, | ||
@@ -148,2 +171,3 @@ }); | ||
router.delete('/', async (req, res, next) => { | ||
const q = req.query; | ||
const querier = await getQuerier(); | ||
@@ -154,3 +178,3 @@ let ids = []; | ||
await querier.beginTransaction(); | ||
const founds = await querier.findMany(entity, req.query, [meta.id]); | ||
const founds = await querier.findMany(entity, q); | ||
if (founds.length) { | ||
@@ -184,2 +208,2 @@ ids = founds.map((found) => found[meta.id]); | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllck1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVlcmllck1pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQWdCLE1BQU0sU0FBUyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQTBCLEVBQUU7SUFDNUQsTUFBTSxNQUFNLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFFL0IsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFNUMsSUFBSSxRQUFRLEdBQUcsT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBRXhDLElBQUksT0FBTyxFQUFFO1FBQ1gsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUN4RTtJQUVELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1FBQ3BCLE1BQU0sSUFBSSxTQUFTLENBQUMsOENBQThDLENBQUMsQ0FBQztLQUNyRTtJQUVELEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxFQUFFO1FBQzdCLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtB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QUFHLENBQUMsQ0FBQztTQUNYO2dCQUFTO1lBQ1IsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxHQUFHLENBQUMsR0FBWSxFQUFFLElBQXFCLEVBQUUsS0FBbUI7SUFDbkUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUMxQixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QixJQUFJLE1BQU0sS0FBSyxNQUFNLElBQUksTUFBTSxLQUFLLE9BQU8sSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO1FBQy9ELEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDNUI7U0FBTSxJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUNsRCxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzlCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlciBhcyBleHByZXNzUm91dGVyLCB0eXBlIFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGdldFF1ZXJpZXIgfSBmcm9tICdudWthayc7XG5pbXBvcnQgeyBnZXRFbnRpdGllcywgZ2V0TWV0YSB9IGZyb20gJ251a2FrL2VudGl0eSc7XG5pbXBvcnQgdHlwZSB7IEVudGl0eU1ldGEsIElkVmFsdWUsIFF1ZXJ5LCBUeXBlIH0gZnJvbSAnbnVrYWsvdHlwZSc7XG5pbXBvcnQgeyBrZWJhYkNhc2UgfSBmcm9tICdudWthay91dGlsJztcbmltcG9ydCB7IHBhcnNlUXVlcnkgfSBmcm9tICcuL3F1ZXJ5LnV0aWwuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcXVlcmllck1pZGRsZXdhcmUob3B0czogTWlkZGxld2FyZU9wdGlvbnMgPSB7fSkge1xuICBjb25zdCByb3V0ZXIgPSBleHByZXNzUm91dGVyKCk7XG5cbiAgY29uc3QgeyBpbmNsdWRlLCBleGNsdWRlLCAuLi5leHRyYSB9ID0gb3B0cztcblxuICBsZXQgZW50aXRpZXMgPSBpbmNsdWRlID8/IGdldEVudGl0aWVzKCk7XG5cbiAgaWYgKGV4Y2x1ZGUpIHtcbiAgICBlbnRpdGllcyA9IGVudGl0aWVzLmZpbHRlcigoZW50aXR5KSA9PiAhb3B0cy5leGNsdWRlLmluY2x1ZGVzKGVudGl0eSkpO1xuICB9XG5cbiAgaWYgKCFlbnRpdGllcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdubyBlbnRpdGllcyBmb3IgdGhlIG51a2FrIGV4cHJlc3MgbWlkZGxld2FyZScpO1xuICB9XG5cbiAgZm9yIChjb25zdCBlbnRpdHkgb2YgZW50aXRpZXMpIHtcbiAgICBjb25zdCBwYXRoID0ga2ViYWJDYXNlKGVudGl0eS5uYW1lKTtcbiAgICBjb25zdCBzdWJSb3V0ZXIgPSBidWlsZFF1ZXJpZXJSb3V0ZXIoZW50aXR5LCBleHRyYSk7XG4gICAgcm91dGVyLnVzZSgnLycgKyBwYXRoLCBzdWJSb3V0ZXIpO1xuICB9XG5cbiAgcmV0dXJuIHJvdXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUXVlcmllclJvdXRlcjxFPihlbnRpdHk6IFR5cGU8RT4sIG9wdHM6IEV4dHJhT3B0aW9ucykge1xuICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuXG4gIGNvbnN0IHJvdXRlciA9IGV4cHJlc3NSb3V0ZXIoKTtcblxuICByb3V0ZXIudXNlKChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIHByZShyZXEsIG1ldGEsIG9wdHMpO1xuICAgIG5leHQoKTtcbiAgfSk7XG5cbiAgcm91dGVyLmdldCgnL29uZScsIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHsgJHByb2plY3Q6IHByb2plY3QsIC4uLnFtIH0gPSByZXEucXVlcnkgYXMgUXVlcnk8RT47XG4gICAgY29uc3QgcXVlcmllciA9IGF3YWl0IGdldFF1ZXJpZXIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHF1ZXJpZXIuZmluZE9uZShlbnRpdHksIHFtLCBwcm9qZWN0KTtcbiAgICAgIHJlcy5qc29uKHsgZGF0YSwgY291bnQ6IGRhdGEgPyAxIDogMCB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyaWVyLnJlbGVhc2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJvdXRlci5nZXQoJy86aWQnLCBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCB7ICRwcm9qZWN0OiBwcm9qZWN0LCAuLi5xbSB9ID0gcmVxLnF1ZXJ5IGFzIFF1ZXJ5PEU+O1xuICAgIHJlcS5xdWVyeS4kZmlsdGVyW21ldGEuaWQgYXMgc3RyaW5nXSA9IHJlcS5wYXJhbXMuaWQ7XG4gICAgY29uc3QgcXVlcmllciA9IGF3YWl0IGdldFF1ZXJpZXIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHF1ZXJpZXIuZmluZE9uZShlbnRpdHksIHFtLCBwcm9qZWN0KTtcbiAgICAgIHJlcy5qc29uKHsgZGF0YSwgY291bnQ6IGRhdGEgPyAxIDogMCB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyaWVyLnJlbGVhc2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJvdXRlci5nZXQoJy8nLCBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCB7ICRwcm9qZWN0OiBwcm9qZWN0LCAuLi5xbSB9ID0gcmVxLnF1ZXJ5IGFzIFF1ZXJ5PEU+O1xuICAgIGNvbnN0IHF1ZXJpZXIgPSBhd2FpdCBnZXRRdWVyaWVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbmRNYW55UHJvbWlzZSA9IHF1ZXJpZXIuZmluZE1hbnkoZW50aXR5LCBxbSwgcHJvamVjdCk7XG4gICAgICBjb25zdCBjb3VudFByb21pc2UgPSByZXEucXVlcnkuY291bnQgPyBxdWVyaWVyLmNvdW50KGVudGl0eSwgcW0pIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgW2RhdGEsIGNvdW50XSA9IGF3YWl0IFByb21pc2UuYWxsKFtmaW5kTWFueVByb21pc2UsIGNvdW50UHJvbWlzZV0pO1xuICAgICAgcmVzLmpzb24oeyBkYXRhLCBjb3VudCB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyaWVyLnJlbGVhc2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJvdXRlci5nZXQoJy9jb3VudCcsIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJpZXIgPSBhd2FpdCBnZXRRdWVyaWVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvdW50ID0gYXdhaXQgcXVlcmllci5jb3VudChlbnRpdHksIHJlcS5xdWVyeSk7XG4gICAgICByZXMuanNvbih7IGRhdGE6IGNvdW50LCBjb3VudCB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyaWVyLnJlbGVhc2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJvdXRlci5wb3N0KCcvJywgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgcXVlcmllciA9IGF3YWl0IGdldFF1ZXJpZXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcXVlcmllci5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCBpZCA9IGF3YWl0IHF1ZXJpZXIuaW5zZXJ0T25lKGVudGl0eSwgcmVxLmJvZHkpO1xuICAgICAgYXdhaXQgcXVlcmllci5jb21taXRUcmFuc2FjdGlvbigpO1xuICAgICAgcmVzLmpzb24oeyBkYXRhOiBpZCwgY291bnQ6IGlkID8gMSA6IDAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGF3YWl0IHF1ZXJpZXIucm9sbGJhY2tUcmFuc2FjdGlvbigpO1xuICAgICAgbmV4dChlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyaWVyLnJlbGVhc2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJvdXRlci5wYXRjaCgnLzppZCcsIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIHJlcS5xdWVyeS4kZmlsdGVyW21ldGEuaWQgYXMgc3RyaW5nXSA9IHJlcS5wYXJhbXMuaWQ7XG4gICAgY29uc3QgcXVlcmllciA9IGF3YWl0IGdldFF1ZXJpZXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcXVlcmllci5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCBjb3VudCA9IGF3YWl0IHF1ZXJpZXIudXBkYXRlTWFueShlbnRpdHksIHJlcS5xdWVyeSwgcmVxLmJvZHkpO1xuICAgICAgYXdhaXQgcXVlcmllci5jb21taXRUcmFuc2FjdGlvbigpO1xuICAgICAgcmVzLmpzb24oeyBkYXRhOiByZXEucGFyYW1zLmlkLCBjb3VudCB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgYXdhaXQgcXVlcmllci5yb2xsYmFja1RyYW5zYWN0aW9uKCk7XG4gICAgICBuZXh0KGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHF1ZXJpZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLmRlbGV0ZSgnLzppZCcsIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIHJlcS5xdWVyeS4kZmlsdGVyW21ldGEuaWQgYXMgc3RyaW5nXSA9IHJlcS5wYXJhbXMuaWQ7XG4gICAgY29uc3QgcXVlcmllciA9IGF3YWl0IGdldFF1ZXJpZXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcXVlcmllci5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCBjb3VudCA9IGF3YWl0IHF1ZXJpZXIuZGVsZXRlTWFueShlbnRpdHksIHJlcS5xdWVyeSwge1xuICAgICAgICBzb2Z0RGVsZXRlOiAhIXJlcS5xdWVyeS5zb2Z0RGVsZXRlLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBxdWVyaWVyLmNvbW1pdFRyYW5zYWN0aW9uKCk7XG4gICAgICByZXMuanNvbih7IGRhdGE6IHJlcS5wYXJhbXMuaWQsIGNvdW50IH0pO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBhd2FpdCBxdWVyaWVyLnJvbGxiYWNrVHJhbnNhY3Rpb24oKTtcbiAgICAgIG5leHQoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcmllci5yZWxlYXNlKCk7XG4gICAgfVxuICB9KTtcblxuICByb3V0ZXIuZGVsZXRlKCcvJywgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgcXVlcmllciA9IGF3YWl0IGdldFF1ZXJpZXIoKTtcbiAgICBsZXQgaWRzOiBJZFZhbHVlPEU+W10gPSBbXTtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBxdWVyaWVyLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IGZvdW5kcyA9IGF3YWl0IHF1ZXJpZXIuZmluZE1hbnkoZW50aXR5LCByZXEucXVlcnksIFttZXRhLmlkXSk7XG4gICAgICBpZiAoZm91bmRzLmxlbmd0aCkge1xuICAgICAgICBpZHMgPSBmb3VuZHMubWFwKChmb3VuZCkgPT4gZm91bmRbbWV0YS5pZF0pO1xuICAgICAgICBjb3VudCA9IGF3YWl0IHF1ZXJpZXIuZGVsZXRlTWFueShlbnRpdHksIHsgJGZpbHRlcjogaWRzIH0sIHsgc29mdERlbGV0ZTogISFyZXEucXVlcnkuc29mdERlbGV0ZSB9KTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHF1ZXJpZXIuY29tbWl0VHJhbnNhY3Rpb24oKTtcbiAgICAgIHJlcy5qc29uKHsgZGF0YTogaWRzLCBjb3VudCB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgYXdhaXQgcXVlcmllci5yb2xsYmFja1RyYW5zYWN0aW9uKCk7XG4gICAgICBuZXh0KGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHF1ZXJpZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJvdXRlcjtcbn1cblxuZnVuY3Rpb24gcHJlKHJlcTogUmVxdWVzdCwgbWV0YTogRW50aXR5TWV0YTxhbnk+LCBleHRyYTogRXh0cmFPcHRpb25zKSB7XG4gIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2Q7XG4gIHBhcnNlUXVlcnkocmVxKTtcbiAgZXh0cmEucHJlPy4ocmVxLCBtZXRhKTtcbiAgaWYgKG1ldGhvZCA9PT0gJ1BPU1QnIHx8IG1ldGhvZCA9PT0gJ1BBVENIJyB8fCBtZXRob2QgPT09ICdQVVQnKSB7XG4gICAgZXh0cmEucHJlU2F2ZT8uKHJlcSwgbWV0YSk7XG4gIH0gZWxzZSBpZiAobWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdERUxFVEUnKSB7XG4gICAgZXh0cmEucHJlRmlsdGVyPy4ocmVxLCBtZXRhKTtcbiAgfVxufVxuXG50eXBlIEV4dHJhT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIEFsbG93IGF1Z21lbnQgYW55IGtpbmQgb2YgcmVxdWVzdCBiZWZvcmUgaXQgcnVuc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJlPzogUHJlO1xuICAvKipcbiAgICogQWxsb3cgYXVnbWVudCBhIHNhdmluZyByZXF1ZXN0IChQT1NULCBQQVRDSCwgUFVUKSBiZWZvcmUgaXQgcnVuc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJlU2F2ZT86IFByZVNhdmU7XG4gIC8qKlxuICAgKiBBbGxvdyBhdWdtZW50IGEgZmlsdGVyaW5nIHJlcXVlc3QgKEdFVCwgREVMRVRFKSBiZWZvcmUgaXQgcnVuc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJlRmlsdGVyPzogUHJlRmlsdGVyO1xufTtcblxudHlwZSBNaWRkbGV3YXJlT3B0aW9ucyA9IHtcbiAgcmVhZG9ubHkgaW5jbHVkZT86IFR5cGU8YW55PltdO1xuICByZWFkb25seSBleGNsdWRlPzogVHlwZTxhbnk+W107XG59ICYgRXh0cmFPcHRpb25zO1xuXG50eXBlIFByZSA9IDxFID0gYW55PihyZXE6IFJlcXVlc3QsIG1ldGE6IEVudGl0eU1ldGE8RT4pID0+IHZvaWQ7XG50eXBlIFByZVNhdmUgPSA8RSA9IGFueT4ocmVxOiBSZXF1ZXN0LCBtZXRhOiBFbnRpdHlNZXRhPEU+KSA9PiB2b2lkO1xudHlwZSBQcmVGaWx0ZXIgPSA8RSA9IGFueT4ocmVxOiBSZXF1ZXN0LCBtZXRhOiBFbnRpdHlNZXRhPEU+KSA9PiB2b2lkO1xuIl19 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllck1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcXVlcmllck1pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQWdCLE1BQU0sU0FBUyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQTBCLEVBQUU7SUFDNUQsTUFBTSxNQUFNLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFFL0IsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFNUMsSUFBSSxRQUFRLEdBQUcsT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBRXhDLElBQUksT0FBTyxFQUFFO1FBQ1gsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUN4RTtJQUVELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1FBQ3BCLE1BQU0sSUFBSSxTQUFTLENBQUMsOENBQThDLENBQUMsQ0FBQztLQUNyRTtJQUVELEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxFQUFFO1FBQzdCLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtB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QUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCO1NBQU0sSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDbEQsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM5QjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXIgYXMgZXhwcmVzc1JvdXRlciwgdHlwZSBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBnZXRRdWVyaWVyIH0gZnJvbSAnbnVrYWsnO1xuaW1wb3J0IHsgZ2V0RW50aXRpZXMsIGdldE1ldGEgfSBmcm9tICdudWthay9lbnRpdHknO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlNZXRhLCBJZFZhbHVlLCBRdWVyeSwgVHlwZSB9IGZyb20gJ251a2FrL3R5cGUnO1xuaW1wb3J0IHsga2ViYWJDYXNlIH0gZnJvbSAnbnVrYWsvdXRpbCc7XG5pbXBvcnQgeyBwYXJzZVF1ZXJ5IH0gZnJvbSAnLi9xdWVyeS51dGlsLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJpZXJNaWRkbGV3YXJlKG9wdHM6IE1pZGRsZXdhcmVPcHRpb25zID0ge30pIHtcbiAgY29uc3Qgcm91dGVyID0gZXhwcmVzc1JvdXRlcigpO1xuXG4gIGNvbnN0IHsgaW5jbHVkZSwgZXhjbHVkZSwgLi4uZXh0cmEgfSA9IG9wdHM7XG5cbiAgbGV0IGVudGl0aWVzID0gaW5jbHVkZSA/PyBnZXRFbnRpdGllcygpO1xuXG4gIGlmIChleGNsdWRlKSB7XG4gICAgZW50aXRpZXMgPSBlbnRpdGllcy5maWx0ZXIoKGVudGl0eSkgPT4gIW9wdHMuZXhjbHVkZS5pbmNsdWRlcyhlbnRpdHkpKTtcbiAgfVxuXG4gIGlmICghZW50aXRpZXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm8gZW50aXRpZXMgZm9yIHRoZSBudWthayBleHByZXNzIG1pZGRsZXdhcmUnKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZW50aXR5IG9mIGVudGl0aWVzKSB7XG4gICAgY29uc3QgcGF0aCA9IGtlYmFiQ2FzZShlbnRpdHkubmFtZSk7XG4gICAgY29uc3Qgc3ViUm91dGVyID0gYnVpbGRRdWVyaWVyUm91dGVyKGVudGl0eSwgZXh0cmEpO1xuICAgIHJvdXRlci51c2UoJy8nICsgcGF0aCwgc3ViUm91dGVyKTtcbiAgfVxuXG4gIHJldHVybiByb3V0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFF1ZXJpZXJSb3V0ZXI8RT4oZW50aXR5OiBUeXBlPEU+LCBvcHRzOiBFeHRyYU9wdGlvbnMpIHtcbiAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgY29uc3Qgcm91dGVyID0gZXhwcmVzc1JvdXRlcigpO1xuXG4gIHJvdXRlci51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgcHJlKHJlcSwgbWV0YSwgb3B0cyk7XG4gICAgbmV4dCgpO1xuICB9KTtcblxuICByb3V0ZXIuZ2V0KCcvb25lJywgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgcSA9IHJlcS5xdWVyeSBhcyBRdWVyeTxFPjtcbiAgICBjb25zdCBxdWVyaWVyID0gYXdhaXQgZ2V0UXVlcmllcigpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcXVlcmllci5maW5kT25lKGVudGl0eSwgcSk7XG4gICAgICByZXMuanNvbih7IGRhdGEsIGNvdW50OiBkYXRhID8gMSA6IDAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIG5leHQoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgcXVlcmllci5yZWxlYXNlKCk7XG4gICAgfVxuICB9KTtcblxuICByb3V0ZXIuZ2V0KCcvOmlkJywgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgcSA9IHJlcS5xdWVyeSBhcyBRdWVyeTxFPjtcbiAgICBxLiRmaWx0ZXIgPz89IHt9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHEuJGZpbHRlcikpIHtcbiAgICAgIHEuJGZpbHRlci5wdXNoKHJlcS5wYXJhbXMuaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBxLiRmaWx0ZXJbbWV0YS5pZCBhcyBzdHJpbmddID0gcmVxLnBhcmFtcy5pZDtcbiAgICB9XG4gICAgY29uc3QgcXVlcmllciA9IGF3YWl0IGdldFF1ZXJpZXIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHF1ZXJpZXIuZmluZE9uZShlbnRpdHksIHEpO1xuICAgICAgcmVzLmpzb24oeyBkYXRhLCBjb3VudDogZGF0YSA/IDEgOiAwIH0pO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHF1ZXJpZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLmdldCgnLycsIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHEgPSByZXEucXVlcnkgYXMgUXVlcnk8RT47XG4gICAgY29uc3QgcXVlcmllciA9IGF3YWl0IGdldFF1ZXJpZXIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmluZE1hbnlQcm9taXNlID0gcXVlcmllci5maW5kTWFueShlbnRpdHksIHEpO1xuICAgICAgY29uc3QgY291bnRQcm9taXNlID0gcmVxLnF1ZXJ5LmNvdW50ID8gcXVlcmllci5jb3VudChlbnRpdHksIHEpIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgW2RhdGEsIGNvdW50XSA9IGF3YWl0IFByb21pc2UuYWxsKFtmaW5kTWFueVByb21pc2UsIGNvdW50UHJvbWlzZV0pO1xuICAgICAgcmVzLmpzb24oeyBkYXRhLCBjb3VudCB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyaWVyLnJlbGVhc2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJvdXRlci5nZXQoJy9jb3VudCcsIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHEgPSByZXEucXVlcnkgYXMgUXVlcnk8RT47XG4gICAgY29uc3QgcXVlcmllciA9IGF3YWl0IGdldFF1ZXJpZXIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY291bnQgPSBhd2FpdCBxdWVyaWVyLmNvdW50KGVudGl0eSwgcSk7XG4gICAgICByZXMuanNvbih7IGRhdGE6IGNvdW50LCBjb3VudCB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyaWVyLnJlbGVhc2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJvdXRlci5wb3N0KCcvJywgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHJlcS5ib2R5IGFzIEU7XG4gICAgY29uc3QgcXVlcmllciA9IGF3YWl0IGdldFF1ZXJpZXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcXVlcmllci5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCBpZCA9IGF3YWl0IHF1ZXJpZXIuaW5zZXJ0T25lKGVudGl0eSwgcGF5bG9hZCk7XG4gICAgICBhd2FpdCBxdWVyaWVyLmNvbW1pdFRyYW5zYWN0aW9uKCk7XG4gICAgICByZXMuanNvbih7IGRhdGE6IGlkLCBjb3VudDogaWQgPyAxIDogMCB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgYXdhaXQgcXVlcmllci5yb2xsYmFja1RyYW5zYWN0aW9uKCk7XG4gICAgICBuZXh0KGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHF1ZXJpZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLnBhdGNoKCcvOmlkJywgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHJlcS5ib2R5IGFzIEU7XG4gICAgY29uc3QgcSA9IHJlcS5xdWVyeSBhcyBRdWVyeTxFPjtcbiAgICBxLiRmaWx0ZXIgPz89IHt9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHEuJGZpbHRlcikpIHtcbiAgICAgIHEuJGZpbHRlci5wdXNoKHJlcS5wYXJhbXMuaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBxLiRmaWx0ZXJbbWV0YS5pZCBhcyBzdHJpbmddID0gcmVxLnBhcmFtcy5pZDtcbiAgICB9XG4gICAgY29uc3QgcXVlcmllciA9IGF3YWl0IGdldFF1ZXJpZXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcXVlcmllci5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCBjb3VudCA9IGF3YWl0IHF1ZXJpZXIudXBkYXRlTWFueShlbnRpdHksIHEsIHBheWxvYWQpO1xuICAgICAgYXdhaXQgcXVlcmllci5jb21taXRUcmFuc2FjdGlvbigpO1xuICAgICAgcmVzLmpzb24oeyBkYXRhOiByZXEucGFyYW1zLmlkLCBjb3VudCB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgYXdhaXQgcXVlcmllci5yb2xsYmFja1RyYW5zYWN0aW9uKCk7XG4gICAgICBuZXh0KGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHF1ZXJpZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLmRlbGV0ZSgnLzppZCcsIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHEgPSByZXEucXVlcnkgYXMgUXVlcnk8RT47XG4gICAgcS4kZmlsdGVyID8/PSB7fTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShxLiRmaWx0ZXIpKSB7XG4gICAgICBxLiRmaWx0ZXIucHVzaChyZXEucGFyYW1zLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcS4kZmlsdGVyW21ldGEuaWQgYXMgc3RyaW5nXSA9IHJlcS5wYXJhbXMuaWQ7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJpZXIgPSBhd2FpdCBnZXRRdWVyaWVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHF1ZXJpZXIuYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgY29uc3QgY291bnQgPSBhd2FpdCBxdWVyaWVyLmRlbGV0ZU1hbnkoZW50aXR5LCBxLCB7XG4gICAgICAgIHNvZnREZWxldGU6ICEhcmVxLnF1ZXJ5LnNvZnREZWxldGUsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHF1ZXJpZXIuY29tbWl0VHJhbnNhY3Rpb24oKTtcbiAgICAgIHJlcy5qc29uKHsgZGF0YTogcmVxLnBhcmFtcy5pZCwgY291bnQgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGF3YWl0IHF1ZXJpZXIucm9sbGJhY2tUcmFuc2FjdGlvbigpO1xuICAgICAgbmV4dChlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBxdWVyaWVyLnJlbGVhc2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJvdXRlci5kZWxldGUoJy8nLCBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCBxID0gcmVxLnF1ZXJ5IGFzIFF1ZXJ5PEU+O1xuICAgIGNvbnN0IHF1ZXJpZXIgPSBhd2FpdCBnZXRRdWVyaWVyKCk7XG4gICAgbGV0IGlkczogSWRWYWx1ZTxFPltdID0gW107XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcXVlcmllci5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCBmb3VuZHMgPSBhd2FpdCBxdWVyaWVyLmZpbmRNYW55KGVudGl0eSwgcSk7XG4gICAgICBpZiAoZm91bmRzLmxlbmd0aCkge1xuICAgICAgICBpZHMgPSBmb3VuZHMubWFwKChmb3VuZCkgPT4gZm91bmRbbWV0YS5pZF0pO1xuICAgICAgICBjb3VudCA9IGF3YWl0IHF1ZXJpZXIuZGVsZXRlTWFueShlbnRpdHksIHsgJGZpbHRlcjogaWRzIH0sIHsgc29mdERlbGV0ZTogISFyZXEucXVlcnkuc29mdERlbGV0ZSB9KTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHF1ZXJpZXIuY29tbWl0VHJhbnNhY3Rpb24oKTtcbiAgICAgIHJlcy5qc29uKHsgZGF0YTogaWRzLCBjb3VudCB9KTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgYXdhaXQgcXVlcmllci5yb2xsYmFja1RyYW5zYWN0aW9uKCk7XG4gICAgICBuZXh0KGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHF1ZXJpZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJvdXRlcjtcbn1cblxuZnVuY3Rpb24gcHJlKHJlcTogUmVxdWVzdCwgbWV0YTogRW50aXR5TWV0YTxhbnk+LCBleHRyYTogRXh0cmFPcHRpb25zKSB7XG4gIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2Q7XG4gIHBhcnNlUXVlcnkocmVxKTtcbiAgZXh0cmEucHJlPy4ocmVxLCBtZXRhKTtcbiAgaWYgKG1ldGhvZCA9PT0gJ1BPU1QnIHx8IG1ldGhvZCA9PT0gJ1BBVENIJyB8fCBtZXRob2QgPT09ICdQVVQnKSB7XG4gICAgZXh0cmEucHJlU2F2ZT8uKHJlcSwgbWV0YSk7XG4gIH0gZWxzZSBpZiAobWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdERUxFVEUnKSB7XG4gICAgZXh0cmEucHJlRmlsdGVyPy4ocmVxLCBtZXRhKTtcbiAgfVxufVxuXG50eXBlIEV4dHJhT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIEFsbG93IGF1Z21lbnQgYW55IGtpbmQgb2YgcmVxdWVzdCBiZWZvcmUgaXQgcnVuc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJlPzogUHJlO1xuICAvKipcbiAgICogQWxsb3cgYXVnbWVudCBhIHNhdmluZyByZXF1ZXN0IChQT1NULCBQQVRDSCwgUFVUKSBiZWZvcmUgaXQgcnVuc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJlU2F2ZT86IFByZVNhdmU7XG4gIC8qKlxuICAgKiBBbGxvdyBhdWdtZW50IGEgZmlsdGVyaW5nIHJlcXVlc3QgKEdFVCwgREVMRVRFKSBiZWZvcmUgaXQgcnVuc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJlRmlsdGVyPzogUHJlRmlsdGVyO1xufTtcblxudHlwZSBNaWRkbGV3YXJlT3B0aW9ucyA9IHtcbiAgcmVhZG9ubHkgaW5jbHVkZT86IFR5cGU8YW55PltdO1xuICByZWFkb25seSBleGNsdWRlPzogVHlwZTxhbnk+W107XG59ICYgRXh0cmFPcHRpb25zO1xuXG50eXBlIFByZSA9IDxFID0gYW55PihyZXE6IFJlcXVlc3QsIG1ldGE6IEVudGl0eU1ldGE8RT4pID0+IHZvaWQ7XG50eXBlIFByZVNhdmUgPSA8RSA9IGFueT4ocmVxOiBSZXF1ZXN0LCBtZXRhOiBFbnRpdHlNZXRhPEU+KSA9PiB2b2lkO1xudHlwZSBQcmVGaWx0ZXIgPSA8RSA9IGFueT4ocmVxOiBSZXF1ZXN0LCBtZXRhOiBFbnRpdHlNZXRhPEU+KSA9PiB2b2lkO1xuIl19 |
@@ -5,5 +5,5 @@ <!-- ![code](/assets/code.webp 'code') --> | ||
[nukak](https://nukak.org) is the smartest [ORM](https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping) for [TypeScript](http://www.typescriptlang.org), it is designed to be fast, safe, and easy to integrate into any application. It takes inspiration from [Mongo queries](https://www.mongodb.com/docs/drivers/node/current/fundamentals/crud/query-document/). | ||
[nukak](https://nukak.org) is the [smartest ORM](https://medium.com/@rogerpadillac/in-search-of-the-perfect-orm-e01fcc9bce3d) for TypeScript, it is designed to be fast, safe, and easy to integrate into any application. It takes inspiration from [mongo queries](https://www.mongodb.com/docs/drivers/node/current/fundamentals/crud/query-document/). | ||
[nukak](https://nukak.org) can run in Node.js, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, and Electron platforms. | ||
[nukak](https://nukak.org) can run in Node.js, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, Electron, Bun and Deno. | ||
@@ -14,6 +14,19 @@ [nukak](https://nukak.org) has a consistent API for distinct databases, including PostgreSQL, MySQL, SQLite, MariaDB, and MongoDB. | ||
![Sample code](./assets/code-s.jpg?raw=true 'Same code') | ||
```ts | ||
const companyUsers = await userRepository.findMany({ | ||
$project: { email: true, profile: ['picture'] }, | ||
$filter: { email: { $endsWith: '@domain.com' } }, | ||
$sort: { createdAt: 'desc' }, | ||
$limit: 100, | ||
}); | ||
``` | ||
| ||
## Why nukak? | ||
See [this article](https://medium.com/@rogerpadillac/in-search-of-the-perfect-orm-e01fcc9bce3d) in medium.com. | ||
| ||
## Features | ||
@@ -145,10 +158,7 @@ | ||
const querier = await getQuerier(); | ||
const users = await querier.findMany( | ||
User, | ||
{ | ||
$sort: { createdAt: 'desc' }, | ||
$limit: limit, | ||
}, | ||
{ id: true, name: true, email: true }, | ||
); | ||
const users = await querier.findMany(User, { | ||
$project: { id: true, name: true, email: true }, | ||
$sort: { createdAt: 'desc' }, | ||
$limit: limit, | ||
}); | ||
await querier.release(); | ||
@@ -158,5 +168,5 @@ return users; | ||
async function createUser(body: User) { | ||
async function createUser(data: User) { | ||
const querier = await getQuerier(); | ||
const id = await querier.insertOne(User, body); | ||
const id = await querier.insertOne(User, data); | ||
await querier.release(); | ||
@@ -163,0 +173,0 @@ return id; |
39447
248
176