@fullcalendar/angular
Version:
The official Angular component for FullCalendar
40 lines • 4.24 kB
JavaScript
const hasOwnProperty = Object.prototype.hasOwnProperty;
/*
Really simple clone utility. Only copies plain arrays, objects, and Dates. Transfers everything else as-is.
Wanted to use a third-party lib, but none did exactly this.
*/
export function deepCopy(input) {
if (Array.isArray(input)) {
return input.map(deepCopy);
}
else if (input instanceof Date) {
return new Date(input.valueOf());
}
else if (typeof input === 'object' && input) { // non-null object
return mapHash(input, deepCopy);
}
else { // everything else (null, function, etc)
return input;
}
}
export function shallowCopy(val) {
if (typeof val === 'object') {
if (Array.isArray(val)) {
val = Array.prototype.slice.call(val);
}
else if (val) { // non-null
val = { ...val };
}
}
return val;
}
export function mapHash(input, func) {
const output = {};
for (const key in input) {
if (hasOwnProperty.call(input, key)) {
output[key] = func(input[key], key);
}
}
return output;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3NyYy91dGlscy9vYmoudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFFdkQ7OztFQUdFO0FBQ0YsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFVO0lBRWpDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN4QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7S0FFNUI7U0FBTSxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUU7UUFDaEMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUVsQztTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssRUFBRSxFQUFFLGtCQUFrQjtRQUNqRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FFakM7U0FBTSxFQUFFLHdDQUF3QztRQUMvQyxPQUFPLEtBQUssQ0FBQztLQUNkO0FBQ0gsQ0FBQztBQUdELE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBUTtJQUNsQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUMzQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdEIsR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN2QzthQUFNLElBQUksR0FBRyxFQUFFLEVBQUUsV0FBVztZQUMzQixHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO1NBQ2xCO0tBQ0Y7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFHRCxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQVUsRUFBRSxJQUFTO0lBQzNDLE1BQU0sTUFBTSxHQUEyQixFQUFFLENBQUM7SUFFMUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUU7UUFDdkIsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNyQztLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKlxuUmVhbGx5IHNpbXBsZSBjbG9uZSB1dGlsaXR5LiBPbmx5IGNvcGllcyBwbGFpbiBhcnJheXMsIG9iamVjdHMsIGFuZCBEYXRlcy4gVHJhbnNmZXJzIGV2ZXJ5dGhpbmcgZWxzZSBhcy1pcy5cbldhbnRlZCB0byB1c2UgYSB0aGlyZC1wYXJ0eSBsaWIsIGJ1dCBub25lIGRpZCBleGFjdGx5IHRoaXMuXG4qL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDb3B5KGlucHV0OiBhbnkpOiBhbnkge1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dC5tYXAoZGVlcENvcHkpO1xuXG4gIH0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGlucHV0LnZhbHVlT2YoKSk7XG5cbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0KSB7IC8vIG5vbi1udWxsIG9iamVjdFxuICAgIHJldHVybiBtYXBIYXNoKGlucHV0LCBkZWVwQ29weSk7XG5cbiAgfSBlbHNlIHsgLy8gZXZlcnl0aGluZyBlbHNlIChudWxsLCBmdW5jdGlvbiwgZXRjKVxuICAgIHJldHVybiBpbnB1dDtcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93Q29weSh2YWw6IGFueSk6IGFueSB7XG4gIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHZhbCA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHZhbCk7XG4gICAgfSBlbHNlIGlmICh2YWwpIHsgLy8gbm9uLW51bGxcbiAgICAgIHZhbCA9IHsgLi4udmFsIH07XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWw7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcEhhc2goaW5wdXQ6IGFueSwgZnVuYzogYW55KTogYW55IHtcbiAgY29uc3Qgb3V0cHV0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChpbnB1dCwga2V5KSkge1xuICAgICAgb3V0cHV0W2tleV0gPSBmdW5jKGlucHV0W2tleV0sIGtleSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cbiJdfQ==