Skip to content

Commit

Permalink
rewrite the build logic, integrate rollup and create bundles for diff…
Browse files Browse the repository at this point in the history
…erent consumers
  • Loading branch information
AlexanderMac committed Oct 6, 2023
1 parent f0ce82f commit 1ddbdc7
Show file tree
Hide file tree
Showing 12 changed files with 694 additions and 272 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,6 @@ jobs:
- name: Run tests
run: npm test
- name: Code coverage
run: pnpm coverage-gh
run: pnpm coverage:codecov
- name: Upload coverage reports
uses: codecov/codecov-action@v3
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ coverage
.nyc_output

# Compiled
build/Release
build

# Dependency directory
node_modules
Expand Down
100 changes: 100 additions & 0 deletions dist/index.cjs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
'use strict';

var __createBinding = (undefined && undefined.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (undefined && undefined.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (undefined && undefined.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.omitPaths = exports.getPaths = exports.revert = exports.diffPaths = exports.diffValues = exports.diff = void 0;
const _ = __importStar(require("lodash"));
const utils_1 = require("./utils");
function diff(original, current) {
const { addedAndChanged, deletedAndChanged } = _getPaths(original, current);
return {
left: (0, utils_1.compact)(deletedAndChanged.values),
right: (0, utils_1.compact)(addedAndChanged.values),
};
}
exports.diff = diff;
function diffValues(original, current) {
const { changedPaths, addedPaths, deletedPaths } = _getPaths(original, current);
return {
changed: (0, utils_1.getObjectValues)(current, changedPaths),
added: (0, utils_1.getObjectValues)(current, addedPaths),
deleted: (0, utils_1.getObjectValues)(original, deletedPaths),
};
}
exports.diffValues = diffValues;
function diffPaths(original, current) {
const { changedPaths, addedPaths, deletedPaths } = _getPaths(original, current);
return {
changed: changedPaths,
added: addedPaths,
deleted: deletedPaths,
};
}
exports.diffPaths = diffPaths;
function revert(dest, src, customizer) {
const srcPaths = (0, utils_1.getObjectPaths)(src, '', _.isArray(src));
return srcPaths.reduce((result, path) => {
const destValue = _.get(dest, path);
const srcValue = _.get(src, path);
const value = customizer(destValue, srcValue);
_.set(result, path, value);
return result;
}, {});
}
exports.revert = revert;
function getPaths(obj) {
return (0, utils_1.getObjectPaths)(obj, '', _.isArray(obj));
}
exports.getPaths = getPaths;
function omitPaths(obj, excludedPaths) {
const includedPaths = getPaths(obj).filter((path) => {
const isIgnored = excludedPaths.some((ignoredPath) => {
if (_.startsWith(ignoredPath, '*.')) {
return _.endsWith(path, _.trimStart(ignoredPath, '*.'));
}
if (_.endsWith(ignoredPath, '.*')) {
return _.startsWith(path, _.trimEnd(ignoredPath, '.*'));
}
return ignoredPath === path;
});
return !isIgnored;
});
return (0, utils_1.getObjectValues)(obj, includedPaths);
}
exports.omitPaths = omitPaths;
function _getPaths(original, current) {
const addedAndChanged = (0, utils_1.getObjectsDiff)(current, original);
const deletedAndChanged = (0, utils_1.getObjectsDiff)(original, current);
const changedPaths = _.intersection(addedAndChanged.paths, deletedAndChanged.paths);
const addedPaths = _.difference(addedAndChanged.paths, changedPaths);
const deletedPaths = _.difference(deletedAndChanged.paths, changedPaths);
return {
addedAndChanged,
deletedAndChanged,
changedPaths,
addedPaths,
deletedPaths,
};
}
7 changes: 3 additions & 4 deletions dist/index.js → dist/index.esm.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
var __createBinding = (undefined && undefined.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
Expand All @@ -10,12 +9,12 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
var __setModuleDefault = (undefined && undefined.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
var __importStar = (undefined && undefined.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
Expand Down
234 changes: 234 additions & 0 deletions dist/index.umd.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,234 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('lodash')) :
typeof define === 'function' && define.amd ? define(['exports', 'lodash'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.o2diff = {}, global._));
})(this, (function (exports, require$$0) { 'use strict';

var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};

var build = {};

var utils = {};

var __createBinding$1 = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault$1 = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar$1 = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding$1(result, mod, k);
__setModuleDefault$1(result, mod);
return result;
};
Object.defineProperty(utils, "__esModule", { value: true });
utils.compact = utils.convertSpecial = utils.isSimplePrimitive = utils.getObjectValues = utils.getObjectsDiff = utils.getObjectPaths = void 0;
const _$1 = __importStar$1(require$$0);
function getObjectPaths(obj, curPath = '', isArray = false) {
let paths = [];
_$1.each(obj, (val, key) => {
val = convertSpecial(val);
const newPath = isArray ? `${curPath}[${key}]` : `${curPath}.${key}`;
if (isSimplePrimitive(val)) {
paths.push(newPath);
}
else if (_$1.isArray(val)) {
paths = paths.concat(getObjectPaths(val, newPath, true));
}
else {
paths = paths.concat(getObjectPaths(val, newPath));
}
});
if (!curPath) {
paths = paths.map((path) => _$1.trimStart(path, '.'));
}
return paths;
}
utils.getObjectPaths = getObjectPaths;
function getObjectsDiff(left, right) {
const leftPaths = getObjectPaths(left);
const reducer = {
values: {},
paths: [],
};
return leftPaths.reduce((result, path) => {
const leftVal = convertSpecial(_$1.get(left, path));
const rightVal = convertSpecial(_$1.get(right, path));
if (!_$1.isEqual(leftVal, rightVal)) {
_$1.set(result.values, path, leftVal);
result.paths.push(path);
}
return result;
}, reducer);
}
utils.getObjectsDiff = getObjectsDiff;
function getObjectValues(obj, paths) {
const values = paths.reduce((result, path) => {
const val = convertSpecial(_$1.get(obj, path));
_$1.set(result, path, val);
return result;
}, {});
return compact(values);
}
utils.getObjectValues = getObjectValues;
function isSimplePrimitive(val) {
return (_$1.isNil(val) ||
_$1.isBoolean(val) ||
_$1.isNumber(val) ||
_$1.isString(val) ||
_$1.isDate(val) ||
_$1.isSymbol(val) ||
_$1.isRegExp(val));
}
utils.isSimplePrimitive = isSimplePrimitive;
function convertSpecial(val) {
if (val && val.constructor.name === 'ObjectID') {
return val.toString();
}
return val;
}
utils.convertSpecial = convertSpecial;
function compact(obj) {
obj = convertSpecial(obj);
if (isSimplePrimitive(obj)) {
return obj;
}
if (_$1.isArray(obj)) {
return _$1.compact(obj);
}
const result = {};
_$1.each(obj, (objItem, objKey) => {
objItem = convertSpecial(objItem);
if (isSimplePrimitive(objItem)) {
result[objKey] = objItem;
}
else if (_$1.isArray(objItem)) {
result[objKey] = _$1.filter(objItem, (v) => !_$1.isNil(v));
_$1.each(result[objKey], (arrItem, arrIndex) => {
result[objKey][arrIndex] = compact(arrItem);
});
}
else {
result[objKey] = compact(objItem);
}
});
return result;
}
utils.compact = compact;

var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(build, "__esModule", { value: true });
exports.omitPaths = build.omitPaths = exports.getPaths = build.getPaths = exports.revert = build.revert = exports.diffPaths = build.diffPaths = exports.diffValues = build.diffValues = exports.diff = build.diff = void 0;
const _ = __importStar(require$$0);
const utils_1 = utils;
function diff(original, current) {
const { addedAndChanged, deletedAndChanged } = _getPaths(original, current);
return {
left: (0, utils_1.compact)(deletedAndChanged.values),
right: (0, utils_1.compact)(addedAndChanged.values),
};
}
exports.diff = build.diff = diff;
function diffValues(original, current) {
const { changedPaths, addedPaths, deletedPaths } = _getPaths(original, current);
return {
changed: (0, utils_1.getObjectValues)(current, changedPaths),
added: (0, utils_1.getObjectValues)(current, addedPaths),
deleted: (0, utils_1.getObjectValues)(original, deletedPaths),
};
}
exports.diffValues = build.diffValues = diffValues;
function diffPaths(original, current) {
const { changedPaths, addedPaths, deletedPaths } = _getPaths(original, current);
return {
changed: changedPaths,
added: addedPaths,
deleted: deletedPaths,
};
}
exports.diffPaths = build.diffPaths = diffPaths;
function revert(dest, src, customizer) {
const srcPaths = (0, utils_1.getObjectPaths)(src, '', _.isArray(src));
return srcPaths.reduce((result, path) => {
const destValue = _.get(dest, path);
const srcValue = _.get(src, path);
const value = customizer(destValue, srcValue);
_.set(result, path, value);
return result;
}, {});
}
exports.revert = build.revert = revert;
function getPaths(obj) {
return (0, utils_1.getObjectPaths)(obj, '', _.isArray(obj));
}
exports.getPaths = build.getPaths = getPaths;
function omitPaths(obj, excludedPaths) {
const includedPaths = getPaths(obj).filter((path) => {
const isIgnored = excludedPaths.some((ignoredPath) => {
if (_.startsWith(ignoredPath, '*.')) {
return _.endsWith(path, _.trimStart(ignoredPath, '*.'));
}
if (_.endsWith(ignoredPath, '.*')) {
return _.startsWith(path, _.trimEnd(ignoredPath, '.*'));
}
return ignoredPath === path;
});
return !isIgnored;
});
return (0, utils_1.getObjectValues)(obj, includedPaths);
}
exports.omitPaths = build.omitPaths = omitPaths;
function _getPaths(original, current) {
const addedAndChanged = (0, utils_1.getObjectsDiff)(current, original);
const deletedAndChanged = (0, utils_1.getObjectsDiff)(original, current);
const changedPaths = _.intersection(addedAndChanged.paths, deletedAndChanged.paths);
const addedPaths = _.difference(addedAndChanged.paths, changedPaths);
const deletedPaths = _.difference(deletedAndChanged.paths, changedPaths);
return {
addedAndChanged,
deletedAndChanged,
changedPaths,
addedPaths,
deletedPaths,
};
}

exports.default = build;

Object.defineProperty(exports, '__esModule', { value: true });

}));
Loading

0 comments on commit 1ddbdc7

Please sign in to comment.