@lystech/sections 0.2.0 → 0.4.0

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.
@@ -0,0 +1,71 @@
1
+ function y(t, o) {
2
+ const e = t.split("."), r = {};
3
+ let n = r;
4
+ for (let s = 0; s < e.length - 1; s++) {
5
+ const c = e[s];
6
+ n[c] = {}, n = n[c];
7
+ }
8
+ return n[e[e.length - 1]] = o, r;
9
+ }
10
+ function l(t, o = "", e = {}) {
11
+ if (!t || typeof t != "object") return e;
12
+ for (const [r, n] of Object.entries(t)) {
13
+ const s = o ? o + "." + r : r;
14
+ typeof n == "string" ? e[s] = n : n && typeof n == "object" && !Array.isArray(n) && l(n, s, e);
15
+ }
16
+ return e;
17
+ }
18
+ function h(t) {
19
+ return {
20
+ langues: () => {
21
+ const o = t?.options?.supportedLngs, e = Array.isArray(o) ? o.filter((r) => r !== "cimode") : [];
22
+ return e.length ? e : [t?.language ?? "fr"];
23
+ },
24
+ langueCourante: () => String(t?.language ?? "fr").slice(0, 2),
25
+ dictionnaire: (o) => {
26
+ const e = Array.isArray(t?.options?.ns) ? t.options.ns : [t?.options?.defaultNS ?? "translation"], r = {};
27
+ for (const n of e) {
28
+ const s = t?.getResourceBundle?.(o, n);
29
+ s && (r[n] = l(s));
30
+ }
31
+ return r;
32
+ },
33
+ poser: (o, e, r, n) => {
34
+ t?.addResourceBundle?.(
35
+ o,
36
+ e,
37
+ y(r, n),
38
+ !0,
39
+ !0
40
+ );
41
+ }
42
+ };
43
+ }
44
+ const d = /^i18n:([^:]+):(.*)$/;
45
+ function A(t, o) {
46
+ if (typeof t == "string") return t;
47
+ if (!t || typeof t != "object" || Array.isArray(t)) return null;
48
+ const e = t, r = o.slice(0, 2), n = e[o] ?? e[r];
49
+ return typeof n == "string" ? n : null;
50
+ }
51
+ function j(t, o) {
52
+ const e = o.langues();
53
+ let r = 0;
54
+ for (const n of t ?? []) {
55
+ const s = d.exec(n.blockType ?? "");
56
+ if (!s || !n.data) continue;
57
+ const c = s[1], u = s[2];
58
+ for (const [a, p] of Object.entries(n.data)) {
59
+ const g = u ? u + "." + a : a;
60
+ for (const f of e) {
61
+ const i = A(p, f);
62
+ i === null || i === "" || (o.poser(f, c, g, i), r++);
63
+ }
64
+ }
65
+ }
66
+ return r;
67
+ }
68
+ export {
69
+ h as adaptateurI18next,
70
+ j as appliquerAuxTextes
71
+ };
@@ -0,0 +1,34 @@
1
+ /** Un dictionnaire aplati : espace de noms → chemin pointé → texte. */
2
+ export type Dictionnaire = Record<string, Record<string, string>>;
3
+ export type SourceTexte = {
4
+ /** Les langues que le site sait rendre. */
5
+ langues: () => string[];
6
+ /** Celle qu'il affiche en ce moment. */
7
+ langueCourante: () => string;
8
+ /** Tout ce que le site sait dire, dans une langue. */
9
+ dictionnaire: (langue: string) => Dictionnaire;
10
+ /** Remplacer un texte. Le site doit se redessiner ensuite. */
11
+ poser: (langue: string, espace: string, chemin: string, valeur: string) => void;
12
+ };
13
+ /**
14
+ * Branche une instance i18next.
15
+ *
16
+ * `bindI18nStore: "added"` doit être actif dans la configuration du site,
17
+ * sinon React ne se redessine pas quand on remplace un texte — la
18
+ * modification serait enregistrée mais invisible, ce qui est la pire des
19
+ * deux issues : la personne réécrit, republie, et finit par croire que rien
20
+ * ne fonctionne.
21
+ */
22
+ export declare function adaptateurI18next(i18n: any): SourceTexte;
23
+ /**
24
+ * Applique des sections publiées à la source de textes du site.
25
+ *
26
+ * Utilisée à deux moments, et c'est ce qui rend le référencement juste :
27
+ * pendant le PRÉ-RENDU, pour que le HTML livré porte le bon texte et les
28
+ * bonnes balises ; puis dans le NAVIGATEUR, pour rattraper ce qui aurait été
29
+ * publié depuis la dernière reconstruction.
30
+ */
31
+ export declare function appliquerAuxTextes(sections: Array<{
32
+ blockType: string;
33
+ data: Record<string, unknown> | null;
34
+ }>, source: SourceTexte): number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lystech/sections",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Contenu de site editable par le client — lecture legere, edition chargee a la demande.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -17,7 +17,9 @@
17
17
  }
18
18
  },
19
19
  "sideEffects": false,
20
- "files": ["dist"],
20
+ "files": [
21
+ "dist"
22
+ ],
21
23
  "scripts": {
22
24
  "build": "tsc -b && vite build",
23
25
  "dev": "vite build --watch"
@@ -35,5 +37,10 @@
35
37
  "vite": "^7.0.0",
36
38
  "vite-plugin-dts": "^4.5.4"
37
39
  },
38
- "publishConfig": { "access": "public" }
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "dependencies": {
44
+ "firebase": "^12.19.0"
45
+ }
39
46
  }