New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

nukak-express

Package Overview
Dependencies
Maintainers
1
Versions
84
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

nukak-express - npm Package Compare versions

Comparing version 0.3.2 to 0.4.1

8

CHANGELOG.md

@@ -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

package.json

@@ -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,
});
```
&nbsp;
## Why nukak?
See [this article](https://medium.com/@rogerpadillac/in-search-of-the-perfect-orm-e01fcc9bce3d) in medium.com.
&nbsp;
## 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;

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc