From ab0db709d3da07b9fffff04d18c75a5dd610d933 Mon Sep 17 00:00:00 2001 From: LBU Date: Mon, 17 Aug 2026 17:50:03 +0200 Subject: [PATCH] FSHSP-121 refactor(schematics): reduce the copied-file header to one line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit L'en-tête reprenait la catégorie, le nom du composant et le chemin du fichier — trois informations que le fichier copié porte déjà dans son emplacement, plus une commande que le README et ui-kit.json donnent déjà. Ne restent que la version d'origine et la mention de licence, sur une seule ligne. HEADER_STYLE se simplifie au passage : le map/join et le bloc multi-lignes n'existaient que pour porter deux lignes. --- CHANGELOG.md | 8 +++++- projects/ui-kit-schematics/src/utils/copy.ts | 30 +++++++++----------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55390e9..2775c09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,7 +54,13 @@ Le format suit [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/) et le pr Les bases partagées atterrissaient dans `components/ui/{catégorie}/_shared/`, c'est-à-dire des services (`theme.service`) et des utilitaires (`mask-engine`) rangés sous `components/`. Elles vivent maintenant dans `ui-core/`, en conservant leur regroupement par domaine. Les fichiers propres à un composant (`date-utils`, `ui-alert.types`, `ui-toast.service`…) restent à côté de lui : ils ne servent qu'à lui. **Mise à jour non triviale** pour un projet déjà installé en `0.2.0` : les chemins des fichiers copiés changent tous, donc `update` ne reconnaîtra pas les anciens. Déplacer les fichiers existants avant de lancer la commande, ou repartir d'un `add` propre. -- **L'en-tête de traçabilité des fichiers copiés par `ng generate @4sh/ui-kit:add` porte la mention de licence** (`Apache-2.0 — Copyright 2026 4SH.`) en plus de son origine et de sa version. Une fois copié, le fichier vit dans le dépôt du consommateur, où plus rien n'indiquait sous quels termes il est fourni. Conséquence attendue : le premier `ng generate @4sh/ui-kit:update` suivant cette version affiche un diff d'une ligne en tête de chaque fichier installé. +- **L'en-tête de traçabilité des fichiers copiés tient sur une ligne et porte la mention de licence** : + + ```ts + // @4sh/ui-kit@0.2.0 — Apache-2.0 — Copyright 2026 4SH. + ``` + + Il reprenait la catégorie, le nom du composant et le chemin du fichier — trois informations que le fichier copié porte déjà dans son emplacement. Ne reste que la version d'origine, et la licence : une fois copié, le fichier vit dans le dépôt du consommateur, où plus rien n'indiquait sous quels termes il est fourni. Conséquence attendue : le premier `ng generate @4sh/ui-kit-schematics:update` suivant cette version affiche un diff d'une ligne en tête de chaque fichier installé. ## [0.2.0] - 2026-08-14 diff --git a/projects/ui-kit-schematics/src/utils/copy.ts b/projects/ui-kit-schematics/src/utils/copy.ts index 9312e0d..98e789a 100644 --- a/projects/ui-kit-schematics/src/utils/copy.ts +++ b/projects/ui-kit-schematics/src/utils/copy.ts @@ -1,7 +1,7 @@ /** * copy — recopie une unité (`AssetUnit`) dans l'arbre du projet consommateur, * aplatie (FSHSP-121), imports réadressés vers les copies voisines (FSHSP-119), - * avec en-tête de traçabilité (origine + version + licence) sur chaque fichier. + * avec en-tête de traçabilité (version + licence) sur chaque fichier. */ import type { Tree } from '@angular-devkit/schematics'; import { SchematicsException } from '@angular-devkit/schematics'; @@ -12,24 +12,22 @@ import { flattenedRelPath, unitSourceFiles } from './component-registry'; import { BARREL_FILENAME } from './export-map'; import { rewriteKitImports } from './rewrite-imports'; -const HEADER_STYLE: Record string> = { - '.ts': (lines) => lines.map((l) => `// ${l}`).join('\n') + '\n', - '.scss': (lines) => lines.map((l) => `// ${l}`).join('\n') + '\n', - '.html': (lines) => `\n`, +const HEADER_STYLE: Record string> = { + '.ts': (line) => `// ${line}\n`, + '.scss': (line) => `// ${line}\n`, + '.html': (line) => `\n`, }; -function traceabilityHeader(unit: AssetUnit, relPath: string, kitVersion: string, ext: string): string { +// Une ligne, et rien de déductible : ni l'origine ni le chemin, que le fichier +// copié porte déjà dans son emplacement (`ui/{catégorie}/{ui-nom}/`, +// `ui-core/{domaine}/`). Restent la version, et la mention de licence — le +// fichier quitte le package pour vivre dans le dépôt du consommateur, où plus +// rien d'autre n'y rattache les termes sous lesquels il est fourni +// (Apache-2.0 §4b — conserver les mentions dans les copies). +function traceabilityHeader(kitVersion: string, ext: string): string { const make = HEADER_STYLE[ext]; if (!make) return ''; - const origin = unit.kind === 'component' ? `${unit.category}/${unit.name}` : `base partagée ${unit.name}`; - return make([ - `Copié depuis @4sh/ui-kit@${kitVersion} (${origin}, ${relPath}). ` + - `Géré par ui-kit.json — voir \`ng generate @4sh/ui-kit-schematics:update\`.`, - // Le fichier quitte le package pour vivre dans le dépôt du consommateur : - // sans cette ligne, plus rien n'y rattache les termes sous lesquels il est - // fourni (Apache-2.0 §4b — conserver les mentions dans les copies). - `Apache-2.0 — Copyright 2026 4SH.`, - ]); + return make(`@4sh/ui-kit@${kitVersion} — Apache-2.0 — Copyright 2026 4SH.`); } export interface RenderedFile { @@ -76,7 +74,7 @@ export function renderUnitFiles(unit: AssetUnit, kitVersion: string): RenderedFi unresolved.push(...result.unresolved.map((item) => `${relPath} → ${item}`)); } - files.push({ targetPath, content: traceabilityHeader(unit, relPath, kitVersion, ext) + source }); + files.push({ targetPath, content: traceabilityHeader(kitVersion, ext) + source }); } if (unresolved.length) {