UNPKG

xcraft-core-utils

Version:
409 lines (258 loc) ‱ 15.5 kB
# 📘 xcraft-core-utils ## Aperçu Le module `xcraft-core-utils` est une bibliothĂšque utilitaire centrale du framework Xcraft qui fournit un ensemble complet d'outils et de classes pour diverses opĂ©rations courantes. Il regroupe des utilitaires pour la manipulation de donnĂ©es, la cryptographie, la gestion de fichiers, les opĂ©rations asynchrones, la mise en cache, et bien plus encore. ## Sommaire - [Structure du module](#structure-du-module) - [Fonctionnement global](#fonctionnement-global) - [Exemples d'utilisation](#exemples-dutilisation) - [Interactions avec d'autres modules](#interactions-avec-dautres-modules) - [Variables d'environnement](#variables-denvironnement) - [DĂ©tails des sources](#dĂ©tails-des-sources) ## Structure du module Le module expose une collection d'utilitaires organisĂ©s par domaine fonctionnel : - **Collecteurs et agrĂ©gateurs** : `ArrayCollector`, `MapAggregator`, `EventDebouncer` - **Traitement par lots** : `batch`, `Batcher`, `JobQueue` - **Cryptographie et hachage** : `crypto`, `fileCrypto`, `hash` - **Manipulation de fichiers** : `files`, `json`, `yaml`, `zippy` - **Utilitaires systĂšme** : `os`, `modules`, `whereIs` - **Programmation** : `js`, `reflect`, `propTypes` - **RĂ©seau** : `RestAPI` - **Concurrence** : `locks`, `CursorPump` - **Cache et performance** : `RankedCache` - **Manipulation de chaĂźnes** : `string`, `regex` - **Logging** : `log` - **OpĂ©rations asynchrones** : `async` ## Fonctionnement global Ce module agit comme une boĂźte Ă  outils centralisĂ©e pour l'Ă©cosystĂšme Xcraft. Chaque utilitaire est conçu pour ĂȘtre autonome tout en s'intĂ©grant parfaitement avec les autres composants du framework. Les utilitaires supportent les patterns asynchrones avec `gigawatts` et sont optimisĂ©s pour les performances dans un environnement distribuĂ©. ## Exemples d'utilisation ### Collecte de donnĂ©es avec ArrayCollector ```javascript const {ArrayCollector} = require('xcraft-core-utils'); const collector = new ArrayCollector(resp, 100, (entries, resp) => { // Traitement des donnĂ©es collectĂ©es console.log('DonnĂ©es collectĂ©es:', entries); }); // Ajout de donnĂ©es collector.grab('key1', ['data1', 'data2']); collector.grab('key2', ['data3']); ``` ### Gestion de files d'attente avec JobQueue ```javascript const {JobQueue} = require('xcraft-core-utils'); const runner = function* (job, next) { console.log(`Traitement du job ${job.id}`); yield setTimeout(next, 1000); }; const queue = new JobQueue('processing', runner, 3); queue.push({id: 1, data: 'example'}); ``` ### Cryptographie et hachage ```javascript const {crypto, hash} = require('xcraft-core-utils'); // GĂ©nĂ©ration de mots de passe const password = crypto.randomPassword(16); // Hachage d'objets const objectHash = hash.computeHash({user: 'john', role: 'admin'}); ``` ### API REST ```javascript const {RestAPI} = require('xcraft-core-utils'); const api = new RestAPI(30000); const data = await api._get('https://api.example.com/users'); ``` ### Synchronisation avec locks ```javascript const {locks} = require('xcraft-core-utils'); const mutex = new locks.Mutex(); await mutex.lock(); try { // Section critique } finally { mutex.unlock(); } ``` ### OpĂ©rations asynchrones avec mapReduce ```javascript const {async} = require('xcraft-core-utils'); const data = ['item1', 'item2', 'item3']; const result = yield async.mapReduce( item => item.id, item => processItem(item), data ); ``` ## Interactions avec d'autres modules - **[xcraft-core-log]** : UtilisĂ© pour le logging avancĂ© dans plusieurs utilitaires - **[xcraft-core-fs]** : IntĂ©grĂ© pour les opĂ©rations sur le systĂšme de fichiers - **[xcraft-core-busclient]** : UtilisĂ© par JobQueue pour les notifications d'Ă©vĂ©nements - **[xcraft-traverse]** : UtilisĂ© pour la traversĂ©e d'objets complexes - **[gigawatts]** : Support des gĂ©nĂ©rateurs et fonctions asynchrones ### Variables d'environnement | Variable | Description | Exemple | Valeur par dĂ©faut | | --------- | ------------------------------------------------------------------- | ------------------------------- | ----------------- | | `PATH` | Chemin systĂšme utilisĂ© par `whereIs` pour localiser les exĂ©cutables | `/usr/bin:/bin` | Variable systĂšme | | `APPDATA` | RĂ©pertoire de donnĂ©es d'application sur Windows | `C:\Users\User\AppData\Roaming` | Variable systĂšme | ## DĂ©tails des sources ### `arrayCollector.js` Classe pour collecter des donnĂ©es par clĂ©s avec un mĂ©canisme de throttling. Permet d'accumuler des donnĂ©es et de les traiter par lots Ă  intervalles rĂ©guliers. Supporte les modes synchrone et asynchrone. #### MĂ©thodes publiques - **`grab(key, data)`** — Ajoute des donnĂ©es Ă  la collection sous une clĂ© spĂ©cifique et dĂ©clenche le traitement si nĂ©cessaire. - **`cancel()`** — Annule le traitement en attente. ### `async.js` Classe utilitaire pour les opĂ©rations asynchrones avancĂ©es qui Ă©vitent de bloquer la boucle d'Ă©vĂ©nements principale. #### MĂ©thodes publiques - **`mapReduce(keyFunc, valueFunc, list)`** — RĂ©duit un tableau en map avec itĂ©ration asynchrone pour Ă©viter de bloquer la boucle d'Ă©vĂ©nements sur de gros volumes de donnĂ©es. ### `batch.js` Fonction utilitaire pour exĂ©cuter une action sur tous les fichiers d'un rĂ©pertoire de maniĂšre rĂ©cursive. #### MĂ©thodes publiques - **`run(filter, location, callbackAction)`** — Parcourt rĂ©cursivement un rĂ©pertoire et exĂ©cute une action sur les fichiers correspondant au filtre. ### `batcher.js` Gestionnaire de traitement par lots avec support de timeout et de seuils de dĂ©clenchement. IdĂ©al pour optimiser les opĂ©rations de base de donnĂ©es ou les Ă©critures sur disque. #### MĂ©thodes publiques - **`start()`** — DĂ©marre une nouvelle session de traitement par lots. - **`bump()`** — IncrĂ©mente le compteur et dĂ©clenche le commit si le seuil est atteint. - **`pump()`** — Force le commit si le timeout est atteint. - **`stop()`** — Termine la session et exĂ©cute le commit final. - **`dispose()`** — Marque le batcher pour destruction. ### `crypto.js` Utilitaires cryptographiques pour le hachage, la gĂ©nĂ©ration de tokens et de mots de passe sĂ©curisĂ©s. #### MĂ©thodes publiques - **`md5(data)`** — Calcule le hash MD5 des donnĂ©es. - **`sha256(data)`** — Calcule le hash SHA256 des donnĂ©es. - **`genToken()`** — GĂ©nĂšre un token UUID sans tirets. - **`randomInt(min, max)`** — GĂ©nĂšre un entier alĂ©atoire cryptographiquement sĂ»r dans la plage spĂ©cifiĂ©e. - **`randomChar(chars)`** — GĂ©nĂšre un caractĂšre alĂ©atoire Ă  partir d'un ensemble de caractĂšres. - **`randomPassword(length=12, chars)`** — GĂ©nĂšre un mot de passe alĂ©atoire sĂ©curisĂ©. ### `cursorPump.js` Wrapper pour les curseurs de base de donnĂ©es permettant de pomper les donnĂ©es de maniĂšre asynchrone. #### MĂ©thodes publiques - **`toArray()`** — Convertit toutes les donnĂ©es du curseur en tableau. - **`pump()`** — RĂ©cupĂšre le prochain Ă©lĂ©ment du curseur. ### `eventDebouncer.js` Classe pour dĂ©bouncer l'envoi d'Ă©vĂ©nements, Ă©vitant les envois trop frĂ©quents du mĂȘme type d'Ă©vĂ©nement. #### MĂ©thodes publiques - **`publish(topic, data)`** — Publie un Ă©vĂ©nement avec debouncing automatique. ### `file-crypto.js` Utilitaires cryptographiques pour les fichiers. #### MĂ©thodes publiques - **`fileChecksum(filePath, options)`** — Calcule la somme de contrĂŽle d'un fichier avec l'algorithme spĂ©cifiĂ©. ### `files.js` Utilitaires pour la dĂ©tection de types de fichiers et l'analyse MIME avec une base de donnĂ©es complĂšte d'extensions. #### MĂ©thodes publiques - **`getFileFilter(filePath)`** — Retourne le filtre de fichier basĂ© sur l'extension. - **`getMimeType(filePath)`** — DĂ©tecte le type MIME et l'encodage d'un fichier en utilisant libmagic. ### `hash.js` Calcul de hash SHA256 pour des objets JavaScript complexes avec traversĂ©e rĂ©cursive. #### MĂ©thodes publiques - **`computeHash(payload)`** — Calcule un hash dĂ©terministe d'un objet JavaScript en traversant rĂ©cursivement ses propriĂ©tĂ©s. ### `jobQueue.js` SystĂšme de files d'attente avancĂ© avec support de prioritĂ©s, limitations de parallĂ©lisme, gestion des dĂ©pendances entre groupes et mĂ©canismes de retry. #### MĂ©thodes publiques - **`push(job)`** — Ajoute un job Ă  la file d'attente. - **`dispose()`** — Nettoie la file d'attente et envoie les Ă©vĂ©nements de fin. ### `js.js` Utilitaires pour l'introspection de fonctions JavaScript. #### MĂ©thodes publiques - **`isFunction(fn)`** — VĂ©rifie si l'argument est une fonction. - **`isGenerator(fn)`** — VĂ©rifie si l'argument est une fonction gĂ©nĂ©rateur. - **`isAsync(fn)`** — VĂ©rifie si l'argument est une fonction async. ### `json.js` Utilitaires pour la manipulation de fichiers JSON et la transformation de structures de donnĂ©es. #### MĂ©thodes publiques - **`fromFile(jsonFile)`** — ⚠ DĂ©prĂ©ciĂ© : utiliser `fse.readJSONSync` Ă  la place. - **`toFile(json, destFile)`** — ⚠ DĂ©prĂ©ciĂ© : utiliser `fse.writeJSONSync` Ă  la place. - **`dotKeysToObject(json)`** — Convertit les clĂ©s avec points en objets imbriquĂ©s. ### `locks.js` ImplĂ©mentations de primitives de synchronisation : mutex, sĂ©maphores et mutex rĂ©cursifs avec support des gĂ©nĂ©rateurs. #### Classes et mĂ©thodes - **`Mutex`** — Mutex simple avec mĂ©thodes `lock()` et `unlock()`. - **`RecursiveMutex`** — Mutex rĂ©cursif supportant les verrous imbriquĂ©s par le mĂȘme propriĂ©taire. - **`Semaphore`** — SĂ©maphore avec mĂ©thodes `wait()` et `signal()`. - **`getMutex`** — Gestionnaire global de mutex par clĂ© avec mĂ©thodes `lock(key)` et `unlock(key)`. ### `log.js` Utilitaires de formatage et de dĂ©coration pour les logs avec support des couleurs, de l'indentation et de la dĂ©tection de logs imbriquĂ©s. #### MĂ©thodes publiques - **`decorate(mode, prefix, mod, log, maxWidth, stripBegin)`** — Formate un message de log avec couleurs et indentation intelligente. - **`graffiti(text, callback)`** — GĂ©nĂšre du texte ASCII art avec la police Graffiti et colorisation. - **`getIndent()`** — Retourne l'indentation actuelle. - **`computeIndent(prefix, mod)`** — Calcule l'indentation nĂ©cessaire pour un prĂ©fixe et module donnĂ©s. ### `mapAggregator.js` Classe pour agrĂ©ger des donnĂ©es dans une structure de map avec throttling. #### MĂ©thodes publiques - **`put(keys, data)`** — Ajoute des donnĂ©es Ă  la map en utilisant un chemin de clĂ©s. - **`release()`** — Force la libĂ©ration immĂ©diate des donnĂ©es agrĂ©gĂ©es. ### `modules.js` Utilitaires pour la gestion des modules et configurations d'applications Xcraft avec support des variantes et surcharges. #### MĂ©thodes publiques - **`extractForEtc(appDir, appId, variantId)`** — Extrait la configuration pour xcraft-core-etc. - **`loadAppConfig(appId, appDir, configJson, variantId)`** — Charge la configuration d'une application avec ses dĂ©pendances. - **`extractAllDeps(appId, libDir, configJson)`** — Extrait toutes les dĂ©pendances d'une application rĂ©cursivement. - **`extractAllJs(libDir, modules)`** — Extrait tous les fichiers JavaScript des modules spĂ©cifiĂ©s. ### `os.js` Utilitaires pour les opĂ©rations systĂšme multi-plateformes. #### MĂ©thodes publiques - **`getAppData()`** — Retourne le rĂ©pertoire de donnĂ©es d'application appropriĂ© selon la plateforme. ### `prop-types.js` GĂ©nĂ©rateurs de PropTypes pour les composants React avec support des types Ă©tendus Xcraft. #### MĂ©thodes publiques - **`makePropTypes(props)`** — GĂ©nĂšre un objet PropTypes Ă  partir d'une dĂ©finition de propriĂ©tĂ©s. - **`makeDefaultProps(props)`** — GĂ©nĂšre un objet de propriĂ©tĂ©s par dĂ©faut. ### `rankedCache.js` Cache LRU (Least Recently Used) basĂ© sur une liste chaĂźnĂ©e avec Ă©mission d'Ă©vĂ©nements lors de l'Ă©viction. #### MĂ©thodes publiques - **`rank(item)`** — Ajoute ou met Ă  jour un Ă©lĂ©ment dans le cache avec promotion automatique. - **`clear()`** — Vide complĂštement le cache en Ă©mettant des Ă©vĂ©nements 'out'. ### `reflect.js` Utilitaires de rĂ©flexion pour l'introspection de fonctions JavaScript. #### MĂ©thodes publiques - **`funcParams(func)`** — Extrait les noms des paramĂštres d'une fonction en gĂ©rant les valeurs par dĂ©faut et les commentaires. ### `regex.js` Utilitaires pour la manipulation d'expressions rĂ©guliĂšres. #### MĂ©thodes publiques - **`toRegexp(value)`** — Convertit une valeur en expression rĂ©guliĂšre. - **`toAxonRegExpStr(str)`** — Convertit une chaĂźne avec wildcards en pattern regex pour Axon. - **`toXcraftRegExpStr(str)`** — Convertit une chaĂźne avec wildcards en pattern regex pour Xcraft. ### `rest.js` Client REST avancĂ© avec support des streams, retry automatique, gestion d'erreurs enrichie et throttling des requĂȘtes. #### MĂ©thodes publiques - **`_get(query)`** — Effectue une requĂȘte GET et retourne le body. - **`_getWithHeaders(query)`** — Effectue une requĂȘte GET et retourne body et headers. - **`_post(query, payload, options)`** — Effectue une requĂȘte POST avec payload JSON. - **`_delete(query)`** — Effectue une requĂȘte DELETE. - **`_patch(query, payload)`** — Effectue une requĂȘte PATCH. - **`_putForm(query, formData)`** — Effectue une requĂȘte PUT avec donnĂ©es de formulaire. - **`_getStream(query, json=true)`** — Retourne un stream pour une requĂȘte GET. - **`_postStream(query, payload, json=true)`** — Retourne un stream pour une requĂȘte POST. - **`_streamPostStream(query, stream, json=true)`** — Envoie un stream et retourne un stream. ### `runnerInstance.js` Singleton global pour la gestion des files d'attente de jobs avec support des prioritĂ©s et dĂ©pendances. #### FonctionnalitĂ©s - Gestion centralisĂ©e de l'exĂ©cution des jobs - Support des groupes de prioritĂ© - Gestion des dĂ©pendances entre groupes - Limitation du parallĂ©lisme par queue ### `string.js` Utilitaires de manipulation de chaĂźnes de caractĂšres. #### MĂ©thodes publiques - **`camelcasify(str)`** — Convertit les points en camelCase. - **`capitalize(str)`** — Met en forme la premiĂšre lettre en majuscule. - **`jsify(str)`** — Convertit les tirets en camelCase. ### `whereIs.js` Utilitaire pour localiser des exĂ©cutables dans le PATH systĂšme. #### MĂ©thodes publiques - **`whereIs(bin)`** — Recherche un exĂ©cutable dans le PATH et retourne son chemin complet. ### `yaml.js` Utilitaires pour la manipulation de fichiers YAML. #### MĂ©thodes publiques - **`fromFile(yamlFile)`** — Charge et parse un fichier YAML. ### `zippy.js` Utilitaire pour crĂ©er des archives ZIP avec support du chiffrement. #### MĂ©thodes publiques - **`zippy(files, outputStream, options)`** — CrĂ©e une archive ZIP Ă  partir d'une liste de fichiers vers un stream de sortie avec support optionnel du chiffrement par mot de passe. --- _Ce document a Ă©tĂ© mis Ă  jour pour reflĂ©ter l'Ă©tat actuel du code source._ [xcraft-core-log]: https://github.com/Xcraft-Inc/xcraft-core-log [xcraft-core-fs]: https://github.com/Xcraft-Inc/xcraft-core-fs [xcraft-core-busclient]: https://github.com/Xcraft-Inc/xcraft-core-busclient [xcraft-traverse]: https://github.com/Xcraft-Inc/xcraft-traverse [gigawatts]: https://github.com/Xcraft-Inc/gigawatts