debut des details de la page. Vu que c'est le troisieme (euh quatrieme?) composant, c'etait un peu plus rapide, mais heureusement que claude est la pour repasser derriere mes erreurs prcq en solo je n'y arriverais pas du tout!

This commit is contained in:
camille
2026-03-27 17:49:26 +01:00
parent 24e85c4471
commit 43589e583e
92 changed files with 12959 additions and 0 deletions
+95
View File
@@ -0,0 +1,95 @@
'use strict';
var checks = require('./checks.cjs');
require('./constants.cjs');
/**
* Helper function to set an immutable property
* @param {object} source - object where the new property will be set
* @param {string} key - object key where the new property will be stored
* @param {*} value - value of the new property
* @param {object} options - set the property overriding the default options
* @returns {object} - the original object modified
*/
function defineProperty(source, key, value, options = {}) {
Object.defineProperty(source, key, {
value,
enumerable: false,
writable: false,
configurable: true,
...options,
});
return source
}
/**
* Define multiple properties on a target object
* @param {object} source - object where the new properties will be set
* @param {object} properties - object containing as key pair the key + value properties
* @param {object} options - set the property overriding the default options
* @returns {object} the original object modified
*/
function defineProperties(source, properties, options) {
Object.entries(properties).forEach(([key, value]) => {
defineProperty(source, key, value, options);
});
return source
}
/**
* Define default properties if they don't exist on the source object
* @param {object} source - object that will receive the default properties
* @param {object} defaults - object containing additional optional keys
* @returns {object} the original object received enhanced
*/
function defineDefaults(source, defaults) {
Object.entries(defaults).forEach(([key, value]) => {
if (!source[key]) source[key] = value;
});
return source
}
/**
* Simple clone deep function, do not use it for classes or recursive objects!
* @param {*} source - possibly an object to clone
* @returns {*} the object we wanted to clone
*/
function cloneDeep(source) {
return structuredClone(source)
}
/**
* Like Array.prototype.filter but for objects
* @param {object} source - target object
* @param {(key: unknown, value: unknown) => boolean} filter - filter function
* @returns {object} filtered source or the original source received
*/
function filter(source, filter) {
return checks.isObject(source)
? Object.fromEntries(
Object.entries(source).filter(([key, value]) => filter(key, value)),
)
: source
}
/**
* Generate a new object picking only the properties from a given array
* @param {object} source - target object
* @param {Array} keys - list of keys that we want to copy over to the new object
* @returns {object} a new object conaining only the keys that we have picked from the keys array list
*/
function pick(source, keys) {
return checks.isObject(source)
? Object.fromEntries(keys.map((key) => [key, source[key]]))
: source
}
exports.cloneDeep = cloneDeep;
exports.defineDefaults = defineDefaults;
exports.defineProperties = defineProperties;
exports.defineProperty = defineProperty;
exports.filter = filter;
exports.pick = pick;