@fluenti/vite-plugin 0.1.2 → 0.2.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.
Files changed (67) hide show
  1. package/README.md +51 -117
  2. package/dist/build-transform.d.ts.map +1 -0
  3. package/dist/dev-runner.d.ts +28 -0
  4. package/dist/dev-runner.d.ts.map +1 -0
  5. package/dist/index.cjs +10 -10
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.ts +11 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +371 -491
  10. package/dist/index.js.map +1 -1
  11. package/dist/mode-detect.d.ts.map +1 -0
  12. package/dist/route-resolve.d.ts.map +1 -0
  13. package/dist/scope-transform.d.ts.map +1 -0
  14. package/dist/sfc-transform.cjs +2 -0
  15. package/dist/sfc-transform.cjs.map +1 -0
  16. package/dist/sfc-transform.d.ts.map +1 -0
  17. package/dist/sfc-transform.js +195 -0
  18. package/dist/sfc-transform.js.map +1 -0
  19. package/dist/trans-transform.d.ts.map +1 -0
  20. package/dist/types.d.ts +55 -0
  21. package/dist/types.d.ts.map +1 -0
  22. package/dist/virtual-modules.d.ts +16 -0
  23. package/dist/virtual-modules.d.ts.map +1 -0
  24. package/dist/vt-transform.d.ts.map +1 -0
  25. package/package.json +12 -2
  26. package/dist/src/build-transform.d.ts.map +0 -1
  27. package/dist/src/framework-detect.d.ts +0 -2
  28. package/dist/src/framework-detect.d.ts.map +0 -1
  29. package/dist/src/index.d.ts +0 -6
  30. package/dist/src/index.d.ts.map +0 -1
  31. package/dist/src/mode-detect.d.ts.map +0 -1
  32. package/dist/src/route-resolve.d.ts.map +0 -1
  33. package/dist/src/scope-transform.d.ts.map +0 -1
  34. package/dist/src/sfc-transform.d.ts.map +0 -1
  35. package/dist/src/solid-jsx-transform.d.ts +0 -6
  36. package/dist/src/solid-jsx-transform.d.ts.map +0 -1
  37. package/dist/src/trans-transform.d.ts.map +0 -1
  38. package/dist/src/types.d.ts +0 -15
  39. package/dist/src/types.d.ts.map +0 -1
  40. package/dist/src/virtual-modules.d.ts +0 -33
  41. package/dist/src/virtual-modules.d.ts.map +0 -1
  42. package/dist/src/vt-transform.d.ts.map +0 -1
  43. package/dist/tests/build-transform.test.d.ts +0 -2
  44. package/dist/tests/build-transform.test.d.ts.map +0 -1
  45. package/dist/tests/mode-detect.test.d.ts +0 -2
  46. package/dist/tests/mode-detect.test.d.ts.map +0 -1
  47. package/dist/tests/per-route-splitting.test.d.ts +0 -2
  48. package/dist/tests/per-route-splitting.test.d.ts.map +0 -1
  49. package/dist/tests/route-resolve.test.d.ts +0 -2
  50. package/dist/tests/route-resolve.test.d.ts.map +0 -1
  51. package/dist/tests/scope-transform.test.d.ts +0 -2
  52. package/dist/tests/scope-transform.test.d.ts.map +0 -1
  53. package/dist/tests/trans-transform.test.d.ts +0 -2
  54. package/dist/tests/trans-transform.test.d.ts.map +0 -1
  55. package/dist/tests/virtual-modules.test.d.ts +0 -2
  56. package/dist/tests/virtual-modules.test.d.ts.map +0 -1
  57. package/dist/tests/vite-plugin.test.d.ts +0 -2
  58. package/dist/tests/vite-plugin.test.d.ts.map +0 -1
  59. package/dist/vite.config.d.ts +0 -3
  60. package/dist/vite.config.d.ts.map +0 -1
  61. /package/dist/{src/build-transform.d.ts → build-transform.d.ts} +0 -0
  62. /package/dist/{src/mode-detect.d.ts → mode-detect.d.ts} +0 -0
  63. /package/dist/{src/route-resolve.d.ts → route-resolve.d.ts} +0 -0
  64. /package/dist/{src/scope-transform.d.ts → scope-transform.d.ts} +0 -0
  65. /package/dist/{src/sfc-transform.d.ts → sfc-transform.d.ts} +0 -0
  66. /package/dist/{src/trans-transform.d.ts → trans-transform.d.ts} +0 -0
  67. /package/dist/{src/vt-transform.d.ts → vt-transform.d.ts} +0 -0
package/dist/index.js CHANGED
@@ -1,95 +1,158 @@
1
- import { resolve as e } from "node:path";
2
- import { hashMessage as t } from "@fluenti/core";
3
- import { parseSourceModule as n, scopeTransform as r, transformTransComponents as i, walkSourceAst as a } from "@fluenti/core/internal";
4
- import { readFileSync as o } from "node:fs";
1
+ import { dirname as e, join as t, resolve as n } from "node:path";
2
+ import { exec as r } from "node:child_process";
3
+ import { existsSync as i, readFileSync as a } from "node:fs";
4
+ import { createRequire as o } from "node:module";
5
+ import { hashMessage as s, validateLocale as c } from "@fluenti/core";
6
+ import { parseSourceModule as l, scopeTransform as u, transformTransComponents as ee, walkSourceAst as d } from "@fluenti/core/internal";
5
7
  //#region src/mode-detect.ts
6
- var s = "dev";
7
- function c(e) {
8
- s = e === "build" ? "build" : "dev";
8
+ var f = "dev";
9
+ function p(e) {
10
+ f = e === "build" ? "build" : "dev";
11
+ }
12
+ function m(e) {
13
+ return e?.mode === "build" || f === "build" || process.env.NODE_ENV === "production";
14
+ }
15
+ //#endregion
16
+ //#region src/dev-runner.ts
17
+ function h(t) {
18
+ let r = t;
19
+ for (;;) {
20
+ let t = n(r, "node_modules/.bin/fluenti");
21
+ if (i(t)) return t;
22
+ let a = e(r);
23
+ if (a === r) break;
24
+ r = a;
25
+ }
26
+ return null;
9
27
  }
10
- function l(e) {
11
- return e?.mode === "build" || s === "build" || process.env.NODE_ENV === "production";
28
+ async function g(e) {
29
+ if (e.compileOnly) try {
30
+ let { runCompile: n } = o(t(e.cwd, "package.json"))("@fluenti/cli");
31
+ await n(e.cwd), console.log("[fluenti] Compiling... done"), e.onSuccess?.();
32
+ return;
33
+ } catch (t) {
34
+ let n = t instanceof Error ? t : Error(String(t));
35
+ if (e.throwOnError) throw n;
36
+ console.warn("[fluenti] Compile failed:", n.message), e.onError?.(n);
37
+ return;
38
+ }
39
+ let n = h(e.cwd);
40
+ if (!n) {
41
+ let t = "[fluenti] CLI not found — skipping auto-compile. Install @fluenti/cli as a devDependency.";
42
+ return e.throwOnError ? Promise.reject(Error(t)) : (console.warn(t), Promise.resolve());
43
+ }
44
+ let i = `${n} extract && ${n} compile`;
45
+ return new Promise((t, n) => {
46
+ r(i, { cwd: e.cwd }, (r, i, a) => {
47
+ if (r) {
48
+ let t = Error(a || r.message);
49
+ if (e.throwOnError) {
50
+ n(t);
51
+ return;
52
+ }
53
+ console.warn("[fluenti] Extract/compile failed:", t.message), e.onError?.(t);
54
+ } else console.log("[fluenti] Extracting and compiling... done"), e.onSuccess?.();
55
+ t();
56
+ });
57
+ });
58
+ }
59
+ function te(e, t = 300) {
60
+ let n = null, r = !1, i = !1;
61
+ async function a() {
62
+ r = !0;
63
+ try {
64
+ await g(e);
65
+ } finally {
66
+ r = !1, i && (i = !1, o());
67
+ }
68
+ }
69
+ function o() {
70
+ n !== null && clearTimeout(n), n = setTimeout(() => {
71
+ n = null, r ? i = !0 : a();
72
+ }, t);
73
+ }
74
+ return o;
12
75
  }
13
76
  //#endregion
14
77
  //#region src/build-transform.ts
15
- function u(e) {
16
- return f(e, "dynamic");
78
+ function ne(e) {
79
+ return _(e, "dynamic");
17
80
  }
18
- function d(e) {
19
- return f(e, "static");
81
+ function re(e) {
82
+ return _(e, "static");
20
83
  }
21
- function f(e, t) {
22
- let r = n(e);
23
- if (!r || r.type !== "Program") return {
84
+ function _(e, t) {
85
+ let n = l(e);
86
+ if (!n || n.type !== "Program") return {
24
87
  code: e,
25
88
  needsCatalogImport: !1,
26
89
  usedHashes: /* @__PURE__ */ new Set()
27
90
  };
28
- let i = p(r), o = [], s = /* @__PURE__ */ new Set();
29
- if (a(r, (n) => {
30
- let r = h(e, n, i, t, s);
31
- if (r) {
32
- o.push(r);
91
+ let r = v(n), i = [], a = /* @__PURE__ */ new Set();
92
+ if (d(n, (n) => {
93
+ let o = b(e, n, r, t, a);
94
+ if (o) {
95
+ i.push(o);
33
96
  return;
34
97
  }
35
- v(n, s);
36
- }), o.length === 0) return {
98
+ ie(n, a);
99
+ }), i.length === 0) return {
37
100
  code: e,
38
101
  needsCatalogImport: !1,
39
- usedHashes: s
102
+ usedHashes: a
40
103
  };
41
- let c = e;
42
- for (let e = o.length - 1; e >= 0; e--) {
43
- let { start: t, end: n, replacement: r } = o[e];
44
- c = c.slice(0, t) + r + c.slice(n);
104
+ let o = e;
105
+ for (let e = i.length - 1; e >= 0; e--) {
106
+ let { start: t, end: n, replacement: r } = i[e];
107
+ o = o.slice(0, t) + r + o.slice(n);
45
108
  }
46
109
  return {
47
- code: c,
110
+ code: o,
48
111
  needsCatalogImport: !0,
49
- usedHashes: s
112
+ usedHashes: a
50
113
  };
51
114
  }
52
- function p(e) {
115
+ function v(e) {
53
116
  let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set();
54
- for (let t of e.body) if (O(t)) for (let e of t.specifiers) {
55
- if (!re(e)) continue;
56
- let t = I(e);
117
+ for (let t of e.body) if (se(t)) for (let e of t.specifiers) {
118
+ if (!ce(e)) continue;
119
+ let t = H(e);
57
120
  t && (t === "useI18n" && n.add(e.local.name), t === "getI18n" && r.add(e.local.name), t === "unref" && i.add(e.local.name));
58
121
  }
59
- return a(e, (e) => {
60
- if (!ie(e) || !e.init || !ae(e.id)) return;
61
- if (j(e.init) && N(e.init.callee) && n.has(e.init.callee.name)) {
62
- m(e.id, t);
122
+ return d(e, (e) => {
123
+ if (!N(e) || !e.init || !P(e.id)) return;
124
+ if (L(e.init) && z(e.init.callee) && n.has(e.init.callee.name)) {
125
+ y(e.id, t);
63
126
  return;
64
127
  }
65
128
  let i = e.init.type === "AwaitExpression" ? e.init.argument : null;
66
- i && j(i) && N(i.callee) && r.has(i.callee.name) && m(e.id, t);
129
+ i && L(i) && z(i.callee) && r.has(i.callee.name) && y(e.id, t);
67
130
  }), {
68
131
  tracked: t,
69
132
  unref: i
70
133
  };
71
134
  }
72
- function m(e, t) {
73
- for (let n of e.properties) !A(n) || n.computed || !N(n.key) || n.key.name !== "t" || N(n.value) && t.add(n.value.name);
135
+ function y(e, t) {
136
+ for (let n of e.properties) !I(n) || n.computed || !z(n.key) || n.key.name !== "t" || z(n.value) && t.add(n.value.name);
74
137
  }
75
- function h(e, n, r, i, a) {
76
- if (!j(n) || n.start == null || n.end == null) return;
77
- let o = g(e, n, r);
78
- if (!o) return;
79
- let { catalogId: s } = o;
80
- a.add(s);
81
- let c = t(s), l = i === "dynamic" ? `__catalog[${JSON.stringify(s)}]` : `_${c}`, u = o.valuesSource ? `${l}(${o.valuesSource})` : l;
138
+ function b(e, t, n, r, i) {
139
+ if (!L(t) || t.start == null || t.end == null) return;
140
+ let a = x(e, t, n);
141
+ if (!a) return;
142
+ let { catalogId: o } = a;
143
+ i.add(o);
144
+ let c = s(o), l = r === "dynamic" ? `__catalog[${JSON.stringify(o)}]` : `_${c}`, u = a.valuesSource ? `${l}(${a.valuesSource})` : l;
82
145
  return {
83
- start: n.start,
84
- end: n.end,
146
+ start: t.start,
147
+ end: t.end,
85
148
  replacement: u
86
149
  };
87
150
  }
88
- function g(e, t, n) {
151
+ function x(e, t, n) {
89
152
  if (t.arguments.length === 0) return;
90
- let r = t.callee, i = N(r) && (n.tracked.has(r.name) || r.name === "$t"), a = M(r) && !r.computed && N(r.property) && (r.property.name === "$t" || r.property.name === "t" && N(r.object) && (r.object.name === "_ctx" || r.object.name === "$setup")), o = j(r) && N(r.callee) && n.unref.has(r.callee.name) && r.arguments.length === 1 && N(r.arguments[0]) && n.tracked.has(r.arguments[0].name);
153
+ let r = t.callee, i = z(r) && (n.tracked.has(r.name) || r.name === "$t"), a = R(r) && !r.computed && z(r.property) && (r.property.name === "$t" || r.property.name === "t" && z(r.object) && (r.object.name === "_ctx" || r.object.name === "$setup")), o = L(r) && z(r.callee) && n.unref.has(r.callee.name) && r.arguments.length === 1 && z(r.arguments[0]) && n.tracked.has(r.arguments[0].name);
91
154
  if (!i && !a && !o) return;
92
- let s = _(t.arguments[0]);
155
+ let s = S(t.arguments[0]);
93
156
  if (!s) return;
94
157
  let c = t.arguments[1] && t.arguments[1].start != null && t.arguments[1].end != null ? e.slice(t.arguments[1].start, t.arguments[1].end) : void 0;
95
158
  return c === void 0 ? { catalogId: s } : {
@@ -97,69 +160,69 @@ function g(e, t, n) {
97
160
  valuesSource: c
98
161
  };
99
162
  }
100
- function _(e) {
101
- let n = E(e);
102
- if (n !== void 0) return t(n);
103
- if (!k(e)) return;
104
- let r, i, a;
163
+ function S(e) {
164
+ let t = j(e);
165
+ if (t !== void 0) return s(t);
166
+ if (!F(e)) return;
167
+ let n, r, i;
105
168
  for (let t of e.properties) {
106
- if (!A(t) || t.computed) continue;
107
- let e = D(t.key);
169
+ if (!I(t) || t.computed) continue;
170
+ let e = M(t.key);
108
171
  if (!e) continue;
109
- let n = E(t.value);
110
- n !== void 0 && (e === "id" && (r = n), e === "message" && (i = n), e === "context" && (a = n));
172
+ let a = j(t.value);
173
+ a !== void 0 && (e === "id" && (n = a), e === "message" && (r = a), e === "context" && (i = a));
111
174
  }
112
- if (r) return r;
113
- if (i) return t(i, a);
114
- }
115
- function v(e, n) {
116
- if (!P(e)) return;
117
- let r = T(e.openingElement.name);
118
- if (r) {
119
- if (r === "Trans") {
120
- let r = S(e.openingElement, "__id") ?? S(e.openingElement, "id");
121
- if (r) {
122
- n.add(r);
175
+ if (n) return n;
176
+ if (r) return s(r, i);
177
+ }
178
+ function ie(e, t) {
179
+ if (!B(e)) return;
180
+ let n = oe(e.openingElement.name);
181
+ if (n) {
182
+ if (n === "Trans") {
183
+ let n = O(e.openingElement, "__id") ?? O(e.openingElement, "id");
184
+ if (n) {
185
+ t.add(n);
123
186
  return;
124
187
  }
125
- let i = S(e.openingElement, "__message"), a = S(e.openingElement, "context");
126
- i && n.add(t(i, a));
188
+ let r = O(e.openingElement, "__message"), i = O(e.openingElement, "context");
189
+ r && t.add(s(r, i));
127
190
  return;
128
191
  }
129
- if (r === "Plural") {
130
- let t = ee(e.openingElement);
131
- t && n.add(t);
192
+ if (n === "Plural") {
193
+ let n = C(e.openingElement);
194
+ n && t.add(n);
132
195
  return;
133
196
  }
134
- if (r === "Select") {
135
- let t = te(e.openingElement);
136
- t && n.add(t);
197
+ if (n === "Select") {
198
+ let n = w(e.openingElement);
199
+ n && t.add(n);
137
200
  }
138
201
  }
139
202
  }
140
- function ee(e) {
141
- let n = S(e, "id");
142
- if (n) return n;
143
- let r = S(e, "context"), i = ne(e, "offset"), a = [
144
- S(e, "zero") === void 0 ? void 0 : `=0 {${S(e, "zero")}}`,
145
- S(e, "one") === void 0 ? void 0 : `one {${S(e, "one")}}`,
146
- S(e, "two") === void 0 ? void 0 : `two {${S(e, "two")}}`,
147
- S(e, "few") === void 0 ? void 0 : `few {${S(e, "few")}}`,
148
- S(e, "many") === void 0 ? void 0 : `many {${S(e, "many")}}`,
149
- S(e, "other") === void 0 ? void 0 : `other {${S(e, "other")}}`
203
+ function C(e) {
204
+ let t = O(e, "id");
205
+ if (t) return t;
206
+ let n = O(e, "context"), r = ae(e, "offset"), i = [
207
+ O(e, "zero") === void 0 ? void 0 : `=0 {${O(e, "zero")}}`,
208
+ O(e, "one") === void 0 ? void 0 : `one {${O(e, "one")}}`,
209
+ O(e, "two") === void 0 ? void 0 : `two {${O(e, "two")}}`,
210
+ O(e, "few") === void 0 ? void 0 : `few {${O(e, "few")}}`,
211
+ O(e, "many") === void 0 ? void 0 : `many {${O(e, "many")}}`,
212
+ O(e, "other") === void 0 ? void 0 : `other {${O(e, "other")}}`
150
213
  ].filter(Boolean);
151
- if (a.length !== 0) return t(`{count, plural,${typeof i == "number" ? ` offset:${i}` : ""} ${a.join(" ")}}`, r);
214
+ if (i.length !== 0) return s(`{count, plural,${typeof r == "number" ? ` offset:${r}` : ""} ${i.join(" ")}}`, n);
152
215
  }
153
- function te(e) {
154
- let n = S(e, "id");
155
- if (n) return n;
156
- let r = S(e, "context"), i = y(e);
157
- if (!(!i || i.other === void 0)) return t(`{value, select, ${[...Object.keys(i).filter((e) => e !== "other").sort(), "other"].map((e) => `${e} {${i[e]}}`).join(" ")}}`, r);
216
+ function w(e) {
217
+ let t = O(e, "id");
218
+ if (t) return t;
219
+ let n = O(e, "context"), r = T(e);
220
+ if (!(!r || r.other === void 0)) return s(`{value, select, ${[...Object.keys(r).filter((e) => e !== "other").sort(), "other"].map((e) => `${e} {${r[e]}}`).join(" ")}}`, n);
158
221
  }
159
- function y(e) {
160
- let t = x(e, "options");
222
+ function T(e) {
223
+ let t = D(e, "options");
161
224
  if (t) {
162
- let n = S(e, "other");
225
+ let n = O(e, "other");
163
226
  return {
164
227
  ...t,
165
228
  ...n === void 0 ? {} : { other: n }
@@ -167,7 +230,7 @@ function y(e) {
167
230
  }
168
231
  let n = {};
169
232
  for (let t of e.attributes) {
170
- if (!F(t)) continue;
233
+ if (!V(t)) continue;
171
234
  let e = t.name.name;
172
235
  if ([
173
236
  "value",
@@ -176,114 +239,137 @@ function y(e) {
176
239
  "comment",
177
240
  "options"
178
241
  ].includes(e)) continue;
179
- let r = w(t);
242
+ let r = A(t);
180
243
  r !== void 0 && (n[e] = r);
181
244
  }
182
245
  return Object.keys(n).length > 0 ? n : void 0;
183
246
  }
184
- function b(e) {
185
- if (!k(e)) return;
247
+ function E(e) {
248
+ if (!F(e)) return;
186
249
  let t = {};
187
250
  for (let n of e.properties) {
188
- if (!A(n) || n.computed) return;
189
- let e = D(n.key), r = E(n.value);
251
+ if (!I(n) || n.computed) return;
252
+ let e = M(n.key), r = j(n.value);
190
253
  if (!e || r === void 0) return;
191
254
  t[e] = r;
192
255
  }
193
256
  return t;
194
257
  }
195
- function x(e, t) {
196
- let n = C(e, t);
197
- if (n?.value && n.value.type === "JSXExpressionContainer") return b(n.value.expression);
258
+ function D(e, t) {
259
+ let n = k(e, t);
260
+ if (n?.value && n.value.type === "JSXExpressionContainer") return E(n.value.expression);
198
261
  }
199
- function S(e, t) {
200
- return w(C(e, t));
262
+ function O(e, t) {
263
+ return A(k(e, t));
201
264
  }
202
- function ne(e, t) {
203
- let n = C(e, t);
265
+ function ae(e, t) {
266
+ let n = k(e, t);
204
267
  if (!n?.value || n.value.type !== "JSXExpressionContainer") return;
205
268
  let r = n.value.expression;
206
269
  return r.type === "NumericLiteral" ? r.value : void 0;
207
270
  }
208
- function C(e, t) {
209
- return e.attributes.find((e) => F(e) && e.name.name === t);
271
+ function k(e, t) {
272
+ return e.attributes.find((e) => V(e) && e.name.name === t);
210
273
  }
211
- function w(e) {
274
+ function A(e) {
212
275
  if (e?.value) {
213
276
  if (e.value.type === "StringLiteral") return e.value.value;
214
- if (e.value.type === "JSXExpressionContainer") return E(e.value.expression);
277
+ if (e.value.type === "JSXExpressionContainer") return j(e.value.expression);
215
278
  }
216
279
  }
217
- function T(e) {
280
+ function oe(e) {
218
281
  return e.type === "JSXIdentifier" ? e.name : void 0;
219
282
  }
220
- function E(e) {
283
+ function j(e) {
221
284
  if (e.type === "StringLiteral") return e.value;
222
285
  if (e.type === "TemplateLiteral") {
223
286
  let t = e;
224
287
  if (t.expressions.length === 0 && t.quasis.length === 1) return t.quasis[0].value.cooked ?? t.quasis[0].value.raw;
225
288
  }
226
289
  }
227
- function D(e) {
228
- if (N(e)) return e.name;
290
+ function M(e) {
291
+ if (z(e)) return e.name;
229
292
  if (e.type === "StringLiteral") return e.value;
230
293
  }
231
- function O(e) {
294
+ function se(e) {
232
295
  return e.type === "ImportDeclaration";
233
296
  }
234
- function re(e) {
297
+ function ce(e) {
235
298
  return e.type === "ImportSpecifier";
236
299
  }
237
- function ie(e) {
300
+ function N(e) {
238
301
  return e.type === "VariableDeclarator";
239
302
  }
240
- function ae(e) {
303
+ function P(e) {
241
304
  return e.type === "ObjectPattern";
242
305
  }
243
- function k(e) {
306
+ function F(e) {
244
307
  return e.type === "ObjectExpression";
245
308
  }
246
- function A(e) {
309
+ function I(e) {
247
310
  return e.type === "ObjectProperty";
248
311
  }
249
- function j(e) {
312
+ function L(e) {
250
313
  return e.type === "CallExpression";
251
314
  }
252
- function M(e) {
315
+ function R(e) {
253
316
  return e.type === "MemberExpression";
254
317
  }
255
- function N(e) {
318
+ function z(e) {
256
319
  return e?.type === "Identifier";
257
320
  }
258
- function P(e) {
321
+ function B(e) {
259
322
  return e.type === "JSXElement";
260
323
  }
261
- function F(e) {
324
+ function V(e) {
262
325
  return e.type === "JSXAttribute";
263
326
  }
264
- function I(e) {
327
+ function H(e) {
265
328
  let t = e.imported;
266
329
  if (t.type === "Identifier") return t.name;
267
330
  if (t.type === "StringLiteral") return t.value;
268
331
  }
269
- function L(e, n, r) {
270
- return n === "dynamic" ? `import { __catalog } from 'virtual:fluenti/runtime';\n${e}` : n === "per-route" ? `import { __catalog } from 'virtual:fluenti/route-runtime';\n${e}` : `import { ${[...r].map((e) => `_${t(e)}`).join(", ")} } from 'virtual:fluenti/messages';\n${e}`;
332
+ function U(e, t, n) {
333
+ return t === "dynamic" ? `import { __catalog } from 'virtual:fluenti/runtime';\n${e}` : t === "per-route" ? `import { __catalog } from 'virtual:fluenti/route-runtime';\n${e}` : `import { ${[...n].map((e) => `_${s(e)}`).join(", ")} } from 'virtual:fluenti/messages';\n${e}`;
271
334
  }
272
335
  //#endregion
273
336
  //#region src/virtual-modules.ts
274
- var R = "virtual:fluenti/runtime", z = "virtual:fluenti/messages", B = "virtual:fluenti/route-runtime", V = "\0virtual:fluenti/runtime", H = "\0virtual:fluenti/messages", U = "\0virtual:fluenti/route-runtime";
275
- function W(e) {
276
- if (e === R) return V;
277
- if (e === z) return H;
278
- if (e === B) return U;
279
- }
280
- function G(e, t) {
281
- if (e === V) return K(t);
282
- if (e === H) return q(t);
283
- if (e === U) return oe(t);
284
- }
285
- function K(t) {
286
- let { catalogDir: n, locales: r, sourceLocale: i, defaultBuildLocale: a, framework: o } = t, s = a || i, c = e(process.cwd(), n), l = `fluenti.runtime.${o}`, u = r.filter((e) => e !== s);
337
+ var W = "virtual:fluenti/runtime", G = "virtual:fluenti/messages", le = "virtual:fluenti/route-runtime", K = "\0virtual:fluenti/runtime", q = "\0virtual:fluenti/messages", J = "\0virtual:fluenti/route-runtime";
338
+ function Y(e) {
339
+ if (e === W) return K;
340
+ if (e === G) return q;
341
+ if (e === le) return J;
342
+ }
343
+ function X(e, t) {
344
+ if (e === K) return ue(t);
345
+ if (e === q) return de(t);
346
+ if (e === J) return fe(t);
347
+ }
348
+ function ue(e) {
349
+ let { locales: t, runtimeGenerator: n } = e;
350
+ for (let e of t) c(e, "vite-plugin");
351
+ return n ? n.generateRuntime(Z(e)) : pe(e);
352
+ }
353
+ function de(e) {
354
+ let { catalogDir: t, defaultBuildLocale: r, sourceLocale: i } = e, a = r || i;
355
+ return `export * from '${n(process.cwd(), t)}/${a}.js'\n`;
356
+ }
357
+ function fe(e) {
358
+ let { locales: t, runtimeGenerator: n } = e;
359
+ for (let e of t) c(e, "vite-plugin");
360
+ return n ? n.generateRouteRuntime(Z(e)) : me(e);
361
+ }
362
+ function Z(e) {
363
+ let { catalogDir: t, locales: n, sourceLocale: r, defaultBuildLocale: i } = e;
364
+ return {
365
+ catalogDir: t,
366
+ locales: n,
367
+ sourceLocale: r,
368
+ defaultBuildLocale: i
369
+ };
370
+ }
371
+ function pe(e) {
372
+ let { catalogDir: t, locales: r, sourceLocale: i, defaultBuildLocale: a, framework: o } = e, s = a || i, c = n(process.cwd(), t), l = `fluenti.runtime.${o}`, u = r.filter((e) => e !== s);
287
373
  return o === "react" ? `
288
374
  import __defaultMsgs from '${c}/${s}.js'
289
375
 
@@ -322,7 +408,7 @@ async function __preloadLocale(locale) {
322
408
  const mod = __normalizeMessages(await __loaders[locale]())
323
409
  __cache.set(locale, mod)
324
410
  __loadedLocales.add(locale)
325
- } catch {}
411
+ } catch (e) { console.warn('[fluenti] preload failed:', locale, e) }
326
412
  }
327
413
 
328
414
  globalThis[Symbol.for('${l}')] = { __switchLocale, __preloadLocale }
@@ -367,7 +453,7 @@ async function __preloadLocale(locale) {
367
453
  const mod = __normalizeMessages(await __loaders[locale]())
368
454
  __cache.set(locale, mod)
369
455
  __loadedLocales.add(locale)
370
- } catch {}
456
+ } catch (e) { console.warn('[fluenti] preload failed:', locale, e) }
371
457
  }
372
458
 
373
459
  globalThis[Symbol.for('${l}')] = { __switchLocale, __preloadLocale }
@@ -413,7 +499,7 @@ async function __preloadLocale(locale) {
413
499
  const mod = __normalizeMessages(await __loaders[locale]())
414
500
  __cache.set(locale, mod)
415
501
  __loadedLocales.add(locale)
416
- } catch {}
502
+ } catch (e) { console.warn('[fluenti] preload failed:', locale, e) }
417
503
  }
418
504
 
419
505
  globalThis[Symbol.for('${l}')] = { __switchLocale, __preloadLocale }
@@ -421,12 +507,8 @@ globalThis[Symbol.for('${l}')] = { __switchLocale, __preloadLocale }
421
507
  export { __catalog, __switchLocale, __preloadLocale, __currentLocale, __loading, __loadedLocales }
422
508
  `;
423
509
  }
424
- function q(t) {
425
- let { catalogDir: n, defaultBuildLocale: r, sourceLocale: i } = t, a = r || i;
426
- return `export * from '${e(process.cwd(), n)}/${a}.js'\n`;
427
- }
428
- function oe(t) {
429
- let { catalogDir: n, locales: r, sourceLocale: i, defaultBuildLocale: a, framework: o } = t, s = a || i, c = e(process.cwd(), n), l = `fluenti.runtime.${o}`, u = r.filter((e) => e !== s);
510
+ function me(e) {
511
+ let { catalogDir: t, locales: r, sourceLocale: i, defaultBuildLocale: a, framework: o } = e, s = a || i, c = n(process.cwd(), t), l = `fluenti.runtime.${o}`, u = r.filter((e) => e !== s);
430
512
  return o === "vue" ? `
431
513
  import { shallowReactive, ref } from 'vue'
432
514
  import __defaultMsgs from '${c}/${s}.js'
@@ -484,7 +566,7 @@ async function __preloadLocale(locale) {
484
566
  const mod = __normalizeMessages(await __loaders[locale]())
485
567
  __cache.set(locale, mod)
486
568
  __loadedLocales.add(locale)
487
- } catch {}
569
+ } catch (e) { console.warn('[fluenti] preload failed:', locale, e) }
488
570
  }
489
571
 
490
572
  globalThis[Symbol.for('${l}')] = { __switchLocale, __preloadLocale }
@@ -548,7 +630,7 @@ async function __preloadLocale(locale) {
548
630
  const mod = __normalizeMessages(await __loaders[locale]())
549
631
  __cache.set(locale, mod)
550
632
  __loadedLocales.add(locale)
551
- } catch {}
633
+ } catch (e) { console.warn('[fluenti] preload failed:', locale, e) }
552
634
  }
553
635
 
554
636
  globalThis[Symbol.for('${l}')] = { __switchLocale, __preloadLocale }
@@ -558,11 +640,11 @@ export { __catalog, __switchLocale, __preloadLocale, __loadRoute, __registerRout
558
640
  }
559
641
  //#endregion
560
642
  //#region src/route-resolve.ts
561
- function se(e) {
643
+ function Q(e) {
562
644
  let t = (e.includes("/") ? e.slice(e.lastIndexOf("/") + 1) : e).replace(/\.[^.]+$/, "");
563
645
  return t.replace(/-[a-zA-Z0-9]{4,}$/, "") || t;
564
646
  }
565
- function ce(e) {
647
+ function he(e) {
566
648
  let t = /* @__PURE__ */ new Map(), n = e.split("\n");
567
649
  for (let e = 0; e < n.length; e++) {
568
650
  let r = n[e], i = r.match(/^(?:\/\*.*?\*\/\s*)?export\s+const\s+_([a-z0-9]+)\s*=\s*/);
@@ -579,387 +661,185 @@ function ce(e) {
579
661
  }
580
662
  return t;
581
663
  }
582
- function J(e, n) {
583
- let r = [], i = [];
584
- for (let a of e) {
585
- let e = t(a), o = n.get(e);
586
- o && (r.push(o), i.push(` '${ue(a)}': _${e},`));
664
+ function $(e, t) {
665
+ let n = [], r = [];
666
+ for (let i of e) {
667
+ let e = s(i), a = t.get(e);
668
+ a && (n.push(a), r.push(` '${_e(i)}': _${e},`));
587
669
  }
588
- return i.length > 0 && r.push("", "export default {", ...i, "}"), r.join("\n") + "\n";
670
+ return r.length > 0 && n.push("", "export default {", ...r, "}"), n.join("\n") + "\n";
589
671
  }
590
- function le(t, n) {
672
+ function ge(e, t) {
591
673
  try {
592
- return o(e(t, `${n}.js`), "utf-8");
674
+ return a(n(e, `${t}.js`), "utf-8");
593
675
  } catch {
594
676
  return;
595
677
  }
596
678
  }
597
- function ue(e) {
679
+ function _e(e) {
598
680
  return e.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/\r/g, "\\r").replace(/\n/g, "\\n");
599
681
  }
600
682
  //#endregion
601
- //#region src/framework-detect.ts
602
- function Y(e, t) {
603
- return e.endsWith(".vue") ? "vue" : t.includes("@fluenti/solid") || t.includes("solid-js") || t.includes("createSignal") || t.includes("createMemo") ? "solid" : t.includes("@fluenti/react") || t.includes("react") || t.includes("useState") || t.includes("useEffect") || t.includes("jsx") ? "react" : "vue";
604
- }
605
- //#endregion
606
- //#region src/sfc-transform.ts
607
- function X(e) {
608
- return e.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
609
- }
610
- function Z(e, n) {
611
- return `{ id: '${X(n?.id ?? t(e, n?.context))}', message: '${X(e)}' }`;
612
- }
613
- function de(e) {
614
- let t = e.match(/<template(\s[^>]*)?>/);
615
- if (!t) return e;
616
- let n = t.index + t[0].length, r = e.lastIndexOf("</template>");
617
- if (r < 0) return e;
618
- let i = e.slice(0, n), a = e.slice(n, r), o = e.slice(r), s = /\bv-t\b/.test(a), c = /<Trans[\s>]/.test(a), l = /<Plural[\s/>]/.test(a);
619
- return !s && !c && !l ? e : (s && (a = fe(a), a = me(a)), c && (a = Q(a)), l && (a = he(a)), i + a + o);
620
- }
621
- function fe(e) {
622
- return e.replace(/<(\w+)(\s[^>]*?)\bv-t\.(\w+)\b([^>]*?)>/g, (e, t, n, r, i) => {
623
- if (r === "plural") return e;
624
- let a = n + i, o = RegExp(`\\b${r}="([^"]*)"`), s = a.match(o);
625
- if (!s) return e;
626
- let c = s[1], l = Z(c), u = n.replace(/\s*\bv-t\.\w+\b/, ""), d = i.replace(/\s*\bv-t\.\w+\b/, ""), f = RegExp(`\\s*\\b${r}="[^"]*"`);
627
- return u = u.replace(f, ""), d = d.replace(f, ""), `<${t}${u} :${r}="$t(${l})"${d}>`;
628
- });
629
- }
630
- function pe(e) {
631
- let t = [];
632
- return {
633
- message: e.replace(/\{\{\s*([^}]+?)\s*\}\}/g, (e, n) => {
634
- let r = n.trim(), i;
635
- if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(r)) i = r;
636
- else if (/^[a-zA-Z_$][a-zA-Z0-9_$.]*$/.test(r) && !r.endsWith(".")) {
637
- let e = r.split(".");
638
- i = e[e.length - 1];
639
- } else i = String(t.length);
640
- return t.push(`${i}: ${r}`), `{${i}}`;
641
- }),
642
- vars: t
643
- };
644
- }
645
- function me(e) {
646
- return e.replace(/<(\w+)(\s[^>]*?)\bv-t(?::([a-zA-Z0-9_.]+))?(?:\.plural)?(?:="([^"]*)")?\b([^>]*)>([\s\S]*?)<\/\1>/g, (e, t, n, r, i, a, o) => {
647
- let s = e.includes("v-t.plural"), c = n.replace(/\s*\bv-t(?::[a-zA-Z0-9_.]+)?(?:\.plural)?(?:="[^"]*")?\b/, ""), l = a.replace(/\s*\bv-t(?::[a-zA-Z0-9_.]+)?(?:\.plural)?(?:="[^"]*")?\b/, "");
648
- if (s && i) {
649
- let e = o.trim().split("|").map((e) => e.trim());
650
- return `<${t}${c}${l}>{{ $t(${Z(`{${i}, plural, ${(e.length === 2 ? ["one", "other"] : [
651
- "one",
652
- "other",
653
- "zero",
654
- "few",
655
- "many"
656
- ].slice(0, e.length)).map((t, n) => `${t} {${e[n] ?? ""}}`).join(" ")}}`, { id: r })}, { ${i} }) }}</${t}>`;
657
- }
658
- let u = o.trim();
659
- if (/<(\w+)(\s[^>]*)?>[\s\S]*?<\/\1>/g.test(u)) {
660
- let e = [], n = 0;
661
- return `<${t}${c}${l} v-html="$vtRich(${Z(u.replace(/<(\w+)((?:\s[^>]*)?)>([\s\S]*?)<\/\1>/g, (t, r, i, a) => {
662
- let o = n++, s = {}, c = /(\w+)="([^"]*)"/g, l;
663
- for (; (l = c.exec(i)) !== null;) s[l[1]] = l[2];
664
- return e.push({
665
- tag: r,
666
- attrs: s
667
- }), `<${o}>${a}</${o}>`;
668
- }), { id: r })}, ${`[${e.map((e) => {
669
- let t = Object.entries(e.attrs).map(([e, t]) => `${e}: '${X(t)}'`).join(", ");
670
- return `{ tag: '${e.tag}', attrs: { ${t} } }`;
671
- }).join(", ")}]`})"></${t}>`;
672
- }
673
- let { message: d, vars: f } = pe(u), p = Z(d, { id: r });
674
- return f.length > 0 ? `<${t}${c}${l}>{{ $t(${p}, { ${f.join(", ")} }) }}</${t}>` : `<${t}${c}${l}>{{ $t(${p}) }}</${t}>`;
675
- });
676
- }
677
- function Q(e) {
678
- return e.replace(/<Trans(\s[^>]*)?>(?!\s*$)([\s\S]*?)<\/Trans>/g, (e, t, n) => {
679
- let r = t ?? "";
680
- if (/\bmessage\s*=/.test(r)) return e;
681
- let i = $(r, "id");
682
- if (i.kind === "dynamic") return e;
683
- let a = $(r, "context");
684
- if (!i.value && a.kind === "dynamic") return e;
685
- let o = r.match(/\btag\s*=\s*"([^"]*)"/)?.[1] ?? "span", s = r.replace(/\s*\btag\s*=\s*"[^"]*"/, "").replace(/\s*\bid\s*=\s*"[^"]*"/, "").replace(/\s*:id\s*=\s*"[^"]*"/, "").replace(/\s*\bcontext\s*=\s*"[^"]*"/, "").replace(/\s*:context\s*=\s*"[^"]*"/, "").replace(/\s*\bcomment\s*=\s*"[^"]*"/, "").replace(/\s*:comment\s*=\s*"[^"]*"/, ""), c = n.trim();
686
- if (/<(\w+)(\s[^>]*)?>[\s\S]*?<\/\1>/g.test(c)) {
687
- let e = [], t = 0;
688
- return `<${o}${s} v-html="$vtRich(${Z(c.replace(/<(\w+)((?:\s[^>]*)?)>([\s\S]*?)<\/\1>/g, (n, r, i, a) => {
689
- let o = t++, s = {}, c = /(\w[\w-]*)="([^"]*)"/g, l;
690
- for (; (l = c.exec(i)) !== null;) s[l[1]] = l[2];
691
- return e.push({
692
- tag: r,
693
- attrs: s
694
- }), `<${o}>${a}</${o}>`;
695
- }), {
696
- id: i.value,
697
- context: a.value
698
- })}, ${`[${e.map((e) => {
699
- let t = Object.entries(e.attrs).map(([e, t]) => `${e}: '${X(t)}'`).join(", ");
700
- return `{ tag: '${e.tag}', attrs: { ${t} } }`;
701
- }).join(", ")}]`})"></${o}>`;
702
- }
703
- return `<${o}${s}>{{ $t(${Z(c, {
704
- id: i.value,
705
- context: a.value
706
- })}) }}</${o}>`;
707
- });
708
- }
709
- function he(e) {
710
- return e = e.replace(/<Plural(\s[^>]*?)>([\s\S]*?)<\/Plural>/g, (e, t, n) => {
711
- let r = t ?? "", i = $(r, "id"), a = $(r, "context");
712
- if (i.kind === "dynamic" || !i.value && a.kind === "dynamic") return e;
713
- let o = /<template\s+#(\w+)\s*>([\s\S]*?)<\/template>/g, s = [], c;
714
- for (; (c = o.exec(n)) !== null;) s.push({
715
- cat: c[1],
716
- content: c[2].trim()
717
- });
718
- if (s.length === 0) return e;
719
- let l = r.match(/:value\s*=\s*"([^"]*)"/);
720
- if (!l) return e;
721
- let u = l[1], d = r.match(/\btag\s*=\s*"([^"]*)"/)?.[1] ?? "span", f = [
722
- "zero",
723
- "one",
724
- "two",
725
- "few",
726
- "many",
727
- "other"
728
- ], p = [], m = [];
729
- for (let e of f) {
730
- let t = s.find((t) => t.cat === e);
731
- if (!t) continue;
732
- let n = t.content, r = /<(\w+)((?:\s[^>]*)?)>([\s\S]*?)<\/\1>/g, i = n;
733
- if (r.test(n)) {
734
- let e = p.length, t = 0;
735
- i = n.replace(/<(\w+)((?:\s[^>]*)?)>([\s\S]*?)<\/\1>/g, (n, r, i, a) => {
736
- let o = e + t++, s = {}, c = /(\w[\w-]*)="([^"]*)"/g, l;
737
- for (; (l = c.exec(i)) !== null;) s[l[1]] = l[2];
738
- return p.push({
739
- tag: r,
740
- attrs: s
741
- }), `<${o}>${a}</${o}>`;
742
- });
743
- }
744
- let a = e === "zero" ? "=0" : e;
745
- m.push(`${a} {${i}}`);
746
- }
747
- if (m.length === 0) return e;
748
- let h = Z(`{count, plural, ${m.join(" ")}}`, {
749
- id: i.value,
750
- context: a.value
751
- }), g = r;
752
- g = g.replace(/:value\s*=\s*"[^"]*"/, ""), g = g.replace(/\btag\s*=\s*"[^"]*"/, ""), g = g.replace(/\s*\bid\s*=\s*"[^"]*"/, ""), g = g.replace(/\s*:id\s*=\s*"[^"]*"/, ""), g = g.replace(/\s*\bcontext\s*=\s*"[^"]*"/, ""), g = g.replace(/\s*:context\s*=\s*"[^"]*"/, ""), g = g.replace(/\s*\bcomment\s*=\s*"[^"]*"/, ""), g = g.replace(/\s*:comment\s*=\s*"[^"]*"/, ""), g = g.replace(/\s+/g, " ").trim();
753
- let _ = g ? ` ${g}` : "";
754
- return p.length > 0 ? `<${d}${_} v-html="$vtRich(${h}, ${`[${p.map((e) => {
755
- let t = Object.entries(e.attrs).map(([e, t]) => `${e}: '${X(t)}'`).join(", ");
756
- return `{ tag: '${e.tag}', attrs: { ${t} } }`;
757
- }).join(", ")}]`}, { count: ${u} })"></${d}>` : `<${d}${_} v-text="$t(${h}, { count: ${u} })"></${d}>`;
758
- }), e.replace(/<Plural(\s[^>]*?)\/?>(?:<\/Plural>)?/g, (e, t) => {
759
- let n = t ?? "", r = $(n, "id"), i = $(n, "context");
760
- if (r.kind === "dynamic" || !r.value && i.kind === "dynamic") return e;
761
- let a = n.match(/:value\s*=\s*"([^"]*)"/);
762
- if (!a) return e;
763
- let o = a[1], s = n.match(/\btag\s*=\s*"([^"]*)"/)?.[1] ?? "span", c = [
764
- "zero",
765
- "one",
766
- "two",
767
- "few",
768
- "many",
769
- "other"
770
- ], l = [];
771
- for (let e of c) {
772
- let t = RegExp(`(?<!:)\\b${e}\\s*=\\s*"([^"]*)"`), r = n.match(t);
773
- if (r) {
774
- let t = e === "zero" ? "=0" : e;
775
- l.push(`${t} {${r[1]}}`);
776
- }
777
- }
778
- if (l.length === 0) return e;
779
- let u = Z(`{count, plural, ${l.join(" ")}}`, {
780
- id: r.value,
781
- context: i.value
782
- }), d = n;
783
- d = d.replace(/:value\s*=\s*"[^"]*"/, ""), d = d.replace(/\btag\s*=\s*"[^"]*"/, ""), d = d.replace(/\s*\bid\s*=\s*"[^"]*"/, ""), d = d.replace(/\s*:id\s*=\s*"[^"]*"/, ""), d = d.replace(/\s*\bcontext\s*=\s*"[^"]*"/, ""), d = d.replace(/\s*:context\s*=\s*"[^"]*"/, ""), d = d.replace(/\s*\bcomment\s*=\s*"[^"]*"/, ""), d = d.replace(/\s*:comment\s*=\s*"[^"]*"/, "");
784
- for (let e of c) d = d.replace(RegExp(`(?<!:)\\b${e}\\s*=\\s*"[^"]*"`), "");
785
- return d = d.replace(/\s+/g, " ").trim(), `<${s}${d ? ` ${d}` : ""} v-text="$t(${u}, { count: ${o} })"></${s}>`;
786
- });
787
- }
788
- function $(e, t) {
789
- if (RegExp(`(?:^|\\s):${t}\\s*=`).test(e)) return { kind: "dynamic" };
790
- let n = e.match(RegExp(`\\b${t}\\s*=\\s*"([^"]*)"`));
791
- return n ? {
792
- kind: "static",
793
- value: n[1] ?? ""
794
- } : { kind: "missing" };
795
- }
796
- //#endregion
797
- //#region src/solid-jsx-transform.ts
798
- function ge(e) {
799
- return {
800
- code: e,
801
- changed: !1
802
- };
803
- }
804
- //#endregion
805
683
  //#region src/index.ts
806
- var _e = "virtual:fluenti/messages/", ve = "\0virtual:fluenti/messages/";
807
- function ye(t) {
808
- let n = t?.catalogDir ?? "src/locales/compiled", a = t?.framework ?? "auto", o = t?.splitting ?? !1, s = t?.sourceLocale ?? "en", f = t?.locales ?? [s], p = t?.defaultBuildLocale ?? s, m = "vue", h = {
684
+ var ve = "virtual:fluenti/messages/", ye = "\0virtual:fluenti/messages/";
685
+ function be(e, t, r) {
686
+ let i = e.catalogDir ?? "src/locales/compiled", a = e.framework, o = e.splitting ?? !1, s = e.sourceLocale ?? "en", c = e.locales ?? [s], l = e.defaultBuildLocale ?? s, d = {
809
687
  name: "fluenti:virtual",
810
688
  configResolved(e) {
811
- c(e.command);
689
+ p(e.command);
812
690
  },
813
691
  resolveId(e) {
814
- if (e.startsWith(_e)) return "\0" + e;
692
+ if (e.startsWith(ve)) return "\0" + e;
815
693
  if (o) {
816
- let t = W(e);
694
+ let t = Y(e);
817
695
  if (t) return t;
818
696
  }
819
697
  },
820
698
  load(e) {
821
- if (e.startsWith(ve)) return `export { default } from '${`${n}/${e.slice(26)}.js`}'`;
699
+ if (e.startsWith(ye)) return `export { default } from '${`${i}/${e.slice(26)}.js`}'`;
822
700
  if (o) {
823
- let t = G(e, {
824
- catalogDir: n,
825
- locales: f,
701
+ let t = X(e, {
702
+ catalogDir: i,
703
+ locales: c,
826
704
  sourceLocale: s,
827
- defaultBuildLocale: p,
828
- framework: m
705
+ defaultBuildLocale: l,
706
+ framework: a,
707
+ runtimeGenerator: r
829
708
  });
830
709
  if (t) return t;
831
710
  }
832
711
  }
833
- }, g = {
834
- name: "fluenti:vue-template",
835
- enforce: "pre",
836
- transform(e, t) {
837
- if (!t.endsWith(".vue") || !/\bv-t\b/.test(e) && !/<Trans[\s>]/.test(e) && !/<Plural[\s/>]/.test(e)) return;
838
- let n = de(e);
839
- if (n !== e) return {
840
- code: n,
841
- map: null
842
- };
843
- }
844
- }, _ = {
712
+ }, f = {
845
713
  name: "fluenti:script-transform",
846
714
  enforce: "pre",
847
715
  transform(e, t) {
848
716
  if (t.includes("node_modules") || !t.match(/\.(vue|tsx|jsx|ts|js)(\?|$)/) || t.includes(".vue") && !t.includes("type=script")) return;
849
- let n = e, o = !1;
717
+ let n = e, r = !1;
850
718
  if (t.match(/\.[jt]sx(\?|$)/) && /<Trans[\s>]/.test(n)) {
851
- let e = i(n);
852
- e.transformed && (n = e.code, o = !0);
719
+ let e = ee(n);
720
+ e.transformed && (n = e.code, r = !0);
853
721
  }
854
- if (be(n)) {
855
- let e = a === "auto" ? Y(t, n) : a, i = r(n, {
856
- framework: e,
857
- allowTopLevelImportedT: e === "vue" && t.includes(".vue")
722
+ if (Se(n)) {
723
+ let e = u(n, {
724
+ framework: a,
725
+ allowTopLevelImportedT: a === "vue" && t.includes(".vue")
858
726
  });
859
- if (i.transformed) return {
860
- code: i.code,
727
+ if (e.transformed) return {
728
+ code: e.code,
861
729
  map: null
862
730
  };
863
731
  }
864
- return o ? {
732
+ return r ? {
865
733
  code: n,
866
734
  map: null
867
735
  } : void 0;
868
736
  }
869
- }, v = /* @__PURE__ */ new Map();
870
- return [
871
- h,
872
- g,
873
- {
874
- name: "fluenti:solid-jsx",
875
- enforce: "pre",
876
- transform(e, t) {
877
- if (!t.match(/\.[tj]sx(\?|$)/) || t.includes("node_modules") || !/<Trans[\s>]/.test(e) && !/<Plural[\s/>]/.test(e) || (a === "auto" ? Y(t, e) : a) !== "solid") return;
878
- let n = ge(e);
879
- if (n.changed) return {
880
- code: n.code,
881
- map: null
882
- };
883
- }
737
+ }, h = /* @__PURE__ */ new Map(), _ = {
738
+ name: "fluenti:build-split",
739
+ transform(e, t) {
740
+ if (!o || !m(this.environment) || t.includes("node_modules") || !t.match(/\.(vue|tsx|jsx|ts|js)(\?|$)/)) return;
741
+ let n = o === "static" ? "static" : "dynamic", r = n === "static" ? re(e) : ne(e);
742
+ if (o === "per-route" && r.usedHashes.size > 0 && h.set(t, r.usedHashes), !r.needsCatalogImport) return;
743
+ let i = o === "per-route" ? "per-route" : n;
744
+ return {
745
+ code: U(r.code, i, r.usedHashes),
746
+ map: null
747
+ };
884
748
  },
885
- _,
886
- {
887
- name: "fluenti:build-split",
888
- transform(e, t) {
889
- if (!o || !l(this.environment) || t.includes("node_modules") || !t.match(/\.(vue|tsx|jsx|ts|js)(\?|$)/)) return;
890
- m = a === "auto" ? Y(t, e) : a;
891
- let n = o === "static" ? "static" : "dynamic", r = n === "static" ? d(e) : u(e);
892
- if (o === "per-route" && r.usedHashes.size > 0 && v.set(t, r.usedHashes), !r.needsCatalogImport) return;
893
- let i = o === "per-route" ? "per-route" : n;
894
- return {
895
- code: L(r.code, i, r.usedHashes),
896
- map: null
897
- };
898
- },
899
- generateBundle(t, r) {
900
- if (o !== "per-route" || v.size === 0) return;
901
- let i = /* @__PURE__ */ new Map();
902
- for (let [e, t] of Object.entries(r)) {
903
- if (t.type !== "chunk") continue;
904
- let n = /* @__PURE__ */ new Set();
905
- for (let e of Object.keys(t.modules)) {
906
- let t = v.get(e);
907
- if (t) for (let e of t) n.add(e);
908
- }
909
- n.size > 0 && i.set(e, n);
749
+ generateBundle(e, t) {
750
+ if (o !== "per-route" || h.size === 0) return;
751
+ let r = /* @__PURE__ */ new Map();
752
+ for (let [e, n] of Object.entries(t)) {
753
+ if (n.type !== "chunk") continue;
754
+ let t = /* @__PURE__ */ new Set();
755
+ for (let e of Object.keys(n.modules)) {
756
+ let n = h.get(e);
757
+ if (n) for (let e of n) t.add(e);
910
758
  }
911
- if (i.size === 0) return;
912
- let a = /* @__PURE__ */ new Map();
913
- for (let [e, t] of i) for (let n of t) {
914
- let t = a.get(n) ?? [];
915
- t.push(e), a.set(n, t);
916
- }
917
- let s = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Map();
918
- for (let [e, t] of a) if (t.length > 1) s.add(e);
919
- else {
920
- let n = se(t[0]), r = c.get(n) ?? /* @__PURE__ */ new Set();
921
- r.add(e), c.set(n, r);
759
+ t.size > 0 && r.set(e, t);
760
+ }
761
+ if (r.size === 0) return;
762
+ let a = /* @__PURE__ */ new Map();
763
+ for (let [e, t] of r) for (let n of t) {
764
+ let t = a.get(n) ?? [];
765
+ t.push(e), a.set(n, t);
766
+ }
767
+ let s = /* @__PURE__ */ new Set(), l = /* @__PURE__ */ new Map();
768
+ for (let [e, t] of a) if (t.length > 1) s.add(e);
769
+ else {
770
+ let n = Q(t[0]), r = l.get(n) ?? /* @__PURE__ */ new Set();
771
+ r.add(e), l.set(n, r);
772
+ }
773
+ let u = n(process.cwd(), i);
774
+ for (let e of c) {
775
+ let t = ge(u, e);
776
+ if (!t) continue;
777
+ let n = he(t);
778
+ if (s.size > 0) {
779
+ let t = $(s, n);
780
+ this.emitFile({
781
+ type: "asset",
782
+ fileName: `_fluenti/shared-${e}.js`,
783
+ source: t
784
+ });
922
785
  }
923
- let l = e(process.cwd(), n);
924
- for (let e of f) {
925
- let t = le(l, e);
926
- if (!t) continue;
927
- let n = ce(t);
928
- if (s.size > 0) {
929
- let t = J(s, n);
930
- this.emitFile({
931
- type: "asset",
932
- fileName: `_fluenti/shared-${e}.js`,
933
- source: t
934
- });
935
- }
936
- for (let [t, r] of c) {
937
- let i = J(r, n);
938
- this.emitFile({
939
- type: "asset",
940
- fileName: `_fluenti/${t}-${e}.js`,
941
- source: i
942
- });
943
- }
786
+ for (let [t, r] of l) {
787
+ let i = $(r, n);
788
+ this.emitFile({
789
+ type: "asset",
790
+ fileName: `_fluenti/${t}-${e}.js`,
791
+ source: i
792
+ });
944
793
  }
945
794
  }
795
+ }
796
+ }, v = e.buildAutoCompile ?? !0, y = {
797
+ name: "fluenti:build-compile",
798
+ async buildStart() {
799
+ !m(this.environment) || !v || await g({
800
+ cwd: process.cwd(),
801
+ throwOnError: !0,
802
+ compileOnly: !0
803
+ });
804
+ }
805
+ }, b = e.devAutoCompile ?? !0, x = e.include ?? ["src/**/*.{vue,tsx,jsx,ts,js}"], S = {
806
+ name: "fluenti:dev",
807
+ configureServer(e) {
808
+ if (!b) return;
809
+ let t = te({
810
+ cwd: e.config.root,
811
+ onSuccess: () => {}
812
+ });
813
+ t(), e.watcher.on("change", (e) => {
814
+ xe(e, x) && !e.includes(i) && t();
815
+ });
946
816
  },
947
- {
948
- name: "fluenti:dev",
949
- configureServer(e) {},
950
- hotUpdate({ file: e }) {
951
- if (e.includes(n)) {
952
- let e = [...this.environment.moduleGraph.urlToModuleMap.entries()].filter(([e]) => e.includes("virtual:fluenti")).map(([, e]) => e);
953
- if (e.length > 0) return e;
954
- }
817
+ hotUpdate({ file: e }) {
818
+ if (e.includes(i)) {
819
+ let e = [...this.environment.moduleGraph.urlToModuleMap.entries()].filter(([e]) => e.includes("virtual:fluenti")).map(([, e]) => e);
820
+ if (e.length > 0) return e;
955
821
  }
956
822
  }
823
+ };
824
+ return [
825
+ d,
826
+ ...t,
827
+ f,
828
+ y,
829
+ _,
830
+ S
957
831
  ];
958
832
  }
959
- function be(e) {
960
- return /(?<![.\w$])t\(\s*['"]/.test(e) || /[A-Za-z_$][\w$]*\(\s*\{/.test(e) || /[A-Za-z_$][\w$]*`/.test(e) && (e.includes("useI18n") || e.includes("getI18n")) ? !0 : /import\s*\{[^}]*\bt(?:\s+as\s+[A-Za-z_$][\w$]*)?\b[^}]*\}/.test(e) && /@fluenti\/(react|vue|solid|next\/__generated)/.test(e);
833
+ function xe(e, t) {
834
+ return !/\.(vue|tsx|jsx|ts|js)$/.test(e) || e.includes("node_modules") ? !1 : t.some((t) => {
835
+ let n = t.split("*")[0] ?? "";
836
+ return n === "" || e.includes(n.replace("./", ""));
837
+ });
838
+ }
839
+ function Se(e) {
840
+ return /(?<![.\w$])t\(\s*['"]/.test(e) || /[A-Za-z_$][\w$]*\(\s*\{/.test(e) || /[A-Za-z_$][\w$]*`/.test(e) && (e.includes("useI18n") || e.includes("getI18n")) ? !0 : /import\s*\{[^}]*\bt(?:\s+as\s+[A-Za-z_$][\w$]*)?\b[^}]*\}/.test(e) && /@fluenti\/(react|vue|solid|next)/.test(e);
961
841
  }
962
842
  //#endregion
963
- export { ye as default };
843
+ export { be as createFluentiPlugins, m as isBuildMode, X as loadVirtualSplitModule, Y as resolveVirtualSplitId, p as setResolvedMode };
964
844
 
965
845
  //# sourceMappingURL=index.js.map