Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
f9c9df3
new diff stash
neSpecc Dec 8, 2024
209f052
merge main
neSpecc Jan 3, 2025
66047f0
save delta
neSpecc Jan 22, 2025
bb3bec7
rm redundant code
neSpecc Jan 25, 2025
78f9204
Update index.ts
neSpecc Jan 25, 2025
00088be
rm old diff
neSpecc Jan 25, 2025
439461f
Merge branch 'master' of github.com:codex-team/hawk.workers into new-…
slaveeks Jan 31, 2025
6fbd392
Merge branch 'master' of github.com:codex-team/hawk.workers into new-…
slaveeks Feb 1, 2025
d63ae79
Merge branch 'master' of github.com:codex-team/hawk.workers into new-…
slaveeks Feb 5, 2025
7dc142c
feat: separate original and repetition in encode and decode methods
slaveeks Feb 22, 2025
eb33aa6
Merge branch 'master' of github.com:codex-team/hawk.workers into new-…
slaveeks Feb 22, 2025
13057d6
fixed libs, save stringified json
slaveeks Mar 15, 2025
9c1f6e7
Merge branch 'master' of github.com:codex-team/hawk.workers into new-…
slaveeks Mar 15, 2025
5043a4e
rem payload
slaveeks Mar 15, 2025
c582f4e
returned repetition payload
slaveeks Mar 15, 2025
eb76467
removed payload from repetition
slaveeks Mar 16, 2025
82140a7
Merge branch 'master' of github.com:codex-team/hawk.workers into new-…
slaveeks Apr 28, 2025
8473866
fixed some test, added tests for diff
slaveeks May 1, 2025
986b183
fix types
slaveeks May 1, 2025
9388c8c
Merge branch 'master' of github.com:codex-team/hawk.workers into new-…
slaveeks May 1, 2025
2ac596b
yarn
slaveeks May 1, 2025
d460f67
rm test from utils
slaveeks May 1, 2025
22aeb78
yarn fix
slaveeks May 1, 2025
87ee9c9
lnt fixes
slaveeks May 1, 2025
162ca35
rm log
slaveeks May 5, 2025
bf6c340
rm log
slaveeks May 5, 2025
fadeaed
improved doc
slaveeks May 5, 2025
8f1c827
rm redundant dep
slaveeks May 5, 2025
ca92e03
added jsdoc return type
slaveeks May 5, 2025
be91d2f
Merge branch 'master' of github.com:codex-team/hawk.workers into new-…
slaveeks May 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
154 changes: 0 additions & 154 deletions lib/utils.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const _ = require('lodash');
const https = require('https');

/**
Expand All @@ -9,159 +8,6 @@ const https = require('https');
*/
module.exports.sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));

/**
* Make `deepDiff` exportable
* return {object}
*/
module.exports.deepDiff = deepDiff;

/**
* Make `deepMerge` exportable
* return {object}
*/
module.exports.deepMerge = deepMerge;

/**
* Recursively scans two variables and returns another object with diffs
*
* @param {object|Array} source - source object
* @param {object|Array} target - target object
* @returns {object}
*/
function deepDiff(source, target) {
const sourceType = typeOf(source);
const targetType = typeOf(target);

/**
* If we'll compare NOTHING with SOMETHING, the diff will be SOMETHING
*/
if (source === undefined) {
return target;
}

/**
* If we'll compare SOMETHING with NOTHING, the diff will be NOTHING
*/
if (targetType === undefined) {
return undefined;
}

/**
* We CAN'T compare apples with dogs
*/
if (sourceType !== targetType) {
return undefined;
}

if (targetType === 'array') {
return arrayDiff(source, target);
} else if (targetType === 'object') {
return objectDiff(source, target);
} else if (source !== target) {
return target;
} else {
return source;
}
}

/**
* Returns two arrays difference as an new array
*
* @param {Array} source - source object
* @param {Array} target - target object
* @returns {Array}
*/
function arrayDiff(source, target) {
const diffArray = [];

for (let i = 0; i < target.length; i++) {
diffArray[i] = deepDiff(source[i], target[i]);
}

return diffArray;
}

/**
* Returns two objects difference as new object
*
* @param {object} objectA - first object for comparing
* @param {object} objectB - second object for comparing
*
* @returns {object}
*/
function objectDiff(objectA, objectB) {
const diffObject = {};

/**
* objectA is a subject,
* we compare objectB patches
*
* For that we enumerate objectB props and assume that
* target object has any changes
*
* But target object might have additional patches that might not be in subject
* This corner case says us that whole property is a patch
*/
if (!objectA) {
return objectB;
}

Object.keys(objectB).forEach((prop) => {
const objectAItem = objectA[prop];
const objectBItem = objectB[prop];

if (objectAItem === undefined) {
diffObject[prop] = objectBItem;

return;
}

if (objectAItem === objectBItem) {
return;
}

diffObject[prop] = deepDiff(objectAItem, objectBItem);
});

return diffObject;
}

/**
* Merge to objects recursively
*
* @param {object} target - target object
* @param {object[]} sources - sources for mering
* @returns {object}
*/
function deepMerge(target, ...sources) {
const isObject = (item) => item && typeOf(item) === 'object';

return _.mergeWith({}, target, ...sources, function (_subject, _target) {
if (_.isArray(_subject) && _.isArray(_target)) {
const biggerArray = _subject.length > _target.length ? _subject : _target;
const lesser = _subject.length > _target.length ? _target : _subject;

return biggerArray.map((el, i) => {
if (isObject(el) && isObject(lesser[i])) {
return _.mergeWith({}, el, lesser[i]);
} else {
return el;
}
});
}
});
}

/**
* Returns real type of passed variable
*
* @param {*} obj - value to check
* @returns {string}
*/
function typeOf(obj) {
return Object.prototype.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
}

/**
* Sends alert to the Slack/Telegram
*
Expand Down
Loading
Loading