odoro 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
- export { buildProject, reportBuild } from './chunk-FTMPTVGL.js';
2
+ export { buildProject, reportBuild } from './chunk-RSKKKNAM.js';
3
3
  import './chunk-G5QXVBYT.js';
4
4
  import './chunk-JMEHF3KN.js';
@@ -3,8 +3,10 @@ import { extractEntries, applyAlias, isBareSpecifier } from './chunk-G5QXVBYT.js
3
3
  import { info, colors, size, success, duration } from './chunk-JMEHF3KN.js';
4
4
  import { existsSync } from 'fs';
5
5
  import { readFile, rm, mkdir, writeFile, cp, stat } from 'fs/promises';
6
- import { join, basename, resolve, relative, sep } from 'path';
6
+ import { join, basename, resolve, relative, sep, dirname } from 'path';
7
7
  import { build } from 'esbuild';
8
+ import { createRequire } from 'module';
9
+ import { pathToFileURL } from 'url';
8
10
 
9
11
  // src/build/elaguer.ts
10
12
  var GROUPES = /* @__PURE__ */ new Set(["media", "supports", "layer", "container", "scope"]);
@@ -185,6 +187,28 @@ function decouperSelecteurs(selecteur) {
185
187
  parts.push(selecteur.slice(debut).trim());
186
188
  return parts.filter((p) => p.length > 0);
187
189
  }
190
+ var PAQUET = "@odoro-cli/libs";
191
+ var SOUS_CHEMIN = "./generateur";
192
+ function fichierDe(entree) {
193
+ if (entree === void 0) return void 0;
194
+ if (typeof entree === "string") return entree;
195
+ return entree.import ?? entree.default;
196
+ }
197
+ async function fournisseurDe(root) {
198
+ try {
199
+ const exiger = createRequire(join(root, "package.json"));
200
+ const manifeste = exiger.resolve(`${PAQUET}/package.json`);
201
+ const dossier = dirname(manifeste);
202
+ const contenu = JSON.parse(await readFile(manifeste, "utf8"));
203
+ const relatif = fichierDe(contenu.exports?.[SOUS_CHEMIN]);
204
+ if (relatif === void 0) return void 0;
205
+ const module_ = await import(pathToFileURL(resolve(dossier, relatif)).href);
206
+ if (typeof module_.renderUtilitairesPour !== "function") return void 0;
207
+ return { renderUtilitairesPour: module_.renderUtilitairesPour };
208
+ } catch {
209
+ return void 0;
210
+ }
211
+ }
188
212
 
189
213
  // src/build/build.ts
190
214
  function toPosix(path) {
@@ -215,7 +239,7 @@ function outputsForEntry(result, entry, outDir, root) {
215
239
  }
216
240
  return { script: void 0, styles: [] };
217
241
  }
218
- async function elaguerFeuilles(result, config, html) {
242
+ async function taillerFeuilles(result, config, html) {
219
243
  const produits = Object.keys(result.metafile.outputs).map((f) => resolve(config.root, f));
220
244
  const feuilles = produits.filter((f) => f.endsWith(".css"));
221
245
  if (feuilles.length === 0) return;
@@ -223,12 +247,31 @@ async function elaguerFeuilles(result, config, html) {
223
247
  for (const fichier of produits) {
224
248
  if (fichier.endsWith(".js")) sources.push(await readFile(fichier, "utf8"));
225
249
  }
250
+ const fournisseur = await fournisseurDe(config.root);
251
+ const employes = /* @__PURE__ */ new Set();
252
+ if (fournisseur !== void 0) {
253
+ for (const source of sources) for (const mot of motsDe(source)) employes.add(mot);
254
+ for (const garde of config.build.safelist) {
255
+ if (typeof garde === "string") employes.add(garde);
256
+ }
257
+ }
226
258
  for (const feuille of feuilles) {
227
259
  const avant = await readFile(feuille, "utf8");
228
- const rapport = elaguer(avant, sources, { sauvegarde: config.build.safelist });
229
- await writeFile(feuille, rapport.css, "utf8");
260
+ if (fournisseur === void 0) {
261
+ const rapport = elaguer(avant, sources, { sauvegarde: config.build.safelist });
262
+ await writeFile(feuille, rapport.css, "utf8");
263
+ info(
264
+ ` ${colors.dim("elagage")} ${basename(feuille)} ${size(rapport.octetsAvant)} \u2192 ${size(rapport.octetsApres)} ${colors.dim(`${String(rapport.gardees)} classes gardees`)}`
265
+ );
266
+ continue;
267
+ }
268
+ const socle = elaguer(avant, [], {}).css;
269
+ const utilitaires = fournisseur.renderUtilitairesPour(employes);
270
+ const apres = `${socle}
271
+ ${utilitaires}`;
272
+ await writeFile(feuille, apres, "utf8");
230
273
  info(
231
- ` ${colors.dim("elagage")} ${basename(feuille)} ${size(rapport.octetsAvant)} \u2192 ${size(rapport.octetsApres)} ${colors.dim(`${String(rapport.gardees)} classes gardees`)}`
274
+ ` ${colors.dim("generation")} ${basename(feuille)} ${size(Buffer.byteLength(avant))} \u2192 ${size(Buffer.byteLength(apres))}`
232
275
  );
233
276
  }
234
277
  }
@@ -305,7 +348,7 @@ async function buildProject(config) {
305
348
  }
306
349
  ]
307
350
  });
308
- if (config.build.elaguer) await elaguerFeuilles(result, config, html);
351
+ if (config.build.elaguer) await taillerFeuilles(result, config, html);
309
352
  let output = html;
310
353
  for (const entry of entries) {
311
354
  const { script, styles } = outputsForEntry(
package/dist/cli.js CHANGED
@@ -130,7 +130,7 @@ function rootFrom(flags, positional) {
130
130
  async function run(argv) {
131
131
  const { command, positional, flags } = parseArgs(argv);
132
132
  if (flags["version"] === true) {
133
- const manifest = await import('./package-AHYI62K6.js');
133
+ const manifest = await import('./package-N4PY2QRI.js');
134
134
  console.log(manifest.default.version);
135
135
  return 0;
136
136
  }
@@ -160,7 +160,7 @@ async function run(argv) {
160
160
  return new Promise(() => void 0);
161
161
  }
162
162
  case "build": {
163
- const { buildProject, reportBuild } = await import('./build-SQAC7ORR.js');
163
+ const { buildProject, reportBuild } = await import('./build-I27VUYCK.js');
164
164
  const config = await loadConfig(rootFrom(flags, positional), overridesFrom(flags));
165
165
  const output = await buildProject(config);
166
166
  reportBuild(output, process.cwd());
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  export { defineConfig, loadConfig } from './chunk-Q35CGY2Z.js';
3
3
  import './chunk-T6RLHSCW.js';
4
- export { buildProject, reportBuild } from './chunk-FTMPTVGL.js';
4
+ export { buildProject, reportBuild } from './chunk-RSKKKNAM.js';
5
5
  export { ModuleGraph, depFileName, detectSelfAccepting, optimizeDeps, scanDependencies, startDevServer } from './chunk-G5QXVBYT.js';
6
6
  export { startPreviewServer } from './chunk-2YDI5NKV.js';
7
7
  import './chunk-JMEHF3KN.js';
@@ -2,7 +2,7 @@
2
2
  // package.json
3
3
  var package_default = {
4
4
  name: "odoro",
5
- version: "0.1.3",
5
+ version: "0.1.5",
6
6
  type: "module",
7
7
  license: "UNLICENSED",
8
8
  author: "BouBouw",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "odoro",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "author": "BouBouw",
@@ -34,13 +34,12 @@ Toutes les valeurs visuelles passent par des variables CSS. Surcharger
34
34
  `--o-palette-brand-600` dans `src/styles.css` retheme l'application **et** les
35
35
  composants de la librairie, sans toucher a leur code.
36
36
 
37
- Deux feuilles de style sont disponibles :
37
+ Une seule feuille de style : `@odoro-cli/libs/styles.css`, a importer une fois
38
+ a la racine de l'application.
38
39
 
39
- - `@odoro-cli/libs/styles.css` structure et couleurs semantiques ;
40
- - `@odoro-cli/libs/styles.full.css` la meme, plus les utilitaires de couleur sur
41
- la palette complete.
42
-
43
- Importer l'une **ou** l'autre, jamais les deux.
40
+ Elle pese 1,7 Mo sur le disque, mais ce n'est pas ce que vos visiteurs
41
+ telechargent : la compilation n'en garde que les classes que votre code
42
+ emploie reellement — quelques dizaines de kilooctets en pratique.
44
43
 
45
44
  ## Rechargement a chaud
46
45