@fluixi/compiler 1.0.0-alpha.90 → 1.0.0-alpha.92

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/dist/analyze/intrinsics.cjs +3 -1
  2. package/dist/analyze/intrinsics.d.ts.map +1 -1
  3. package/dist/analyze/intrinsics.js +2 -0
  4. package/dist/analyze/intrinsics.mjs +3 -1
  5. package/dist/analyze/reactive-bindings.cjs +3 -1
  6. package/dist/analyze/reactive-bindings.mjs +3 -1
  7. package/dist/analyze/static-graph.cjs +4 -2
  8. package/dist/analyze/static-graph.mjs +4 -2
  9. package/dist/{babel-DP7TXPOQ.mjs → babel-GI375YZ2.mjs} +4 -4
  10. package/dist/{chunk-RZ3JE33I.mjs → chunk-DWNWN5RH.mjs} +1 -1
  11. package/dist/{chunk-RCOCGLLD.mjs → chunk-QZ4CJPYP.mjs} +1 -1
  12. package/dist/{chunk-USZWARUE.mjs → chunk-VC6X44FS.mjs} +2 -2
  13. package/dist/{chunk-XTMCL6V7.mjs → chunk-VOUI6XPV.mjs} +1 -1
  14. package/dist/{chunk-VR2UFMLQ.mjs → chunk-XJ5H2MXY.mjs} +4 -2
  15. package/dist/codegen/backends/imperative.cjs +3 -1
  16. package/dist/codegen/backends/imperative.mjs +3 -1
  17. package/dist/frontend/babel/build-ir-lit.cjs +3 -1
  18. package/dist/frontend/babel/build-ir-lit.mjs +3 -1
  19. package/dist/frontend/babel/build-ir.cjs +3 -1
  20. package/dist/frontend/babel/build-ir.mjs +3 -1
  21. package/dist/frontend/babel/index.cjs +4 -2
  22. package/dist/frontend/babel/index.mjs +4 -2
  23. package/dist/frontend/babel/lower-template.cjs +3 -1
  24. package/dist/frontend/babel/lower-template.mjs +3 -1
  25. package/dist/frontend/babel/plugin.cjs +3 -1
  26. package/dist/frontend/babel/plugin.mjs +3 -1
  27. package/dist/index.cjs +46 -9
  28. package/dist/index.mjs +48 -11
  29. package/dist/integrations.cjs +71 -10
  30. package/dist/integrations.mjs +53 -19
  31. package/dist/lower/compile-template.cjs +4 -2
  32. package/dist/lower/compile-template.mjs +4 -2
  33. package/dist/lower/template.cjs +3 -1
  34. package/dist/lower/template.mjs +3 -1
  35. package/dist/resolve/builtins.cjs +1 -1
  36. package/dist/resolve/builtins.mjs +1 -1
  37. package/dist/resolve/component-globals.cjs +19 -8
  38. package/dist/resolve/component-globals.d.cts +8 -0
  39. package/dist/resolve/component-globals.d.ts +8 -0
  40. package/dist/resolve/component-globals.d.ts.map +1 -1
  41. package/dist/resolve/component-globals.js +21 -12
  42. package/dist/resolve/component-globals.mjs +19 -8
  43. package/dist/resolve/write-globals.cjs +45 -8
  44. package/dist/resolve/write-globals.d.cts +6 -0
  45. package/dist/resolve/write-globals.d.ts +6 -0
  46. package/dist/resolve/write-globals.d.ts.map +1 -1
  47. package/dist/resolve/write-globals.js +35 -2
  48. package/dist/resolve/write-globals.mjs +47 -10
  49. package/dist/{server-fns-DHOJLQKS.mjs → server-fns-BBZRZUPP.mjs} +4 -4
  50. package/dist/{server-functions-KSH5BDVT.mjs → server-functions-VEGLIFCE.mjs} +3 -3
  51. package/dist/transform/index.cjs +30 -3
  52. package/dist/transform/index.mjs +30 -3
  53. package/dist/transform/intrinsics.cjs +29 -2
  54. package/dist/transform/intrinsics.d.cts +12 -0
  55. package/dist/transform/intrinsics.d.ts +12 -0
  56. package/dist/transform/intrinsics.d.ts.map +1 -1
  57. package/dist/transform/intrinsics.js +43 -1
  58. package/dist/transform/intrinsics.mjs +29 -2
  59. package/dist/transform/source-locations.cjs +3 -1
  60. package/dist/transform/source-locations.mjs +3 -1
  61. package/dist/transform/templates.cjs +29 -2
  62. package/dist/transform/templates.d.ts.map +1 -1
  63. package/dist/transform/templates.js +3 -1
  64. package/dist/transform/templates.mjs +29 -2
  65. package/dist/{transform-2RU4ODF3.mjs → transform-UWZ7ZGJ2.mjs} +31 -6
  66. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  67. package/package.json +3 -3
@@ -45,7 +45,9 @@ var INTRINSICS = {
45
45
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
46
46
  // dependency analysis must not guess at.
47
47
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
48
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
48
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
49
+ // An environment variable, public or server-only; the browser build refuses a secret.
50
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
49
51
  };
50
52
  var RUNTIME_PRIMITIVES = {
51
53
  signal: "signal-handle",
@@ -1 +1 @@
1
- {"version":3,"file":"intrinsics.d.ts","sourceRoot":"","sources":["../../src/analyze/intrinsics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GACpB,OAAO;AACT,6EAA6E;GAC3E,eAAe;AACjB,+CAA+C;GAC7C,aAAa;AACf,+DAA+D;GAC7D,cAAc;AAChB,oFAAoF;GAClF,iBAAiB;AACnB,8EAA8E;GAC5E,iBAAiB,GACjB,eAAe,GACf,eAAe,GACf,QAAQ,GACR,iBAAiB,CAAC;AAEtB,MAAM,WAAW,SAAS;IACxB,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,CAAC;CACjD;AAED,0FAA0F;AAC1F,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAmB1D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAc7E,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAK9C,CAAC;AAQF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD"}
1
+ {"version":3,"file":"intrinsics.d.ts","sourceRoot":"","sources":["../../src/analyze/intrinsics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GACpB,OAAO;AACT,6EAA6E;GAC3E,eAAe;AACjB,+CAA+C;GAC7C,aAAa;AACf,+DAA+D;GAC7D,cAAc;AAChB,oFAAoF;GAClF,iBAAiB;AACnB,8EAA8E;GAC5E,iBAAiB,GACjB,eAAe,GACf,eAAe,GACf,QAAQ,GACR,iBAAiB,CAAC;AAEtB,MAAM,WAAW,SAAS;IACxB,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,CAAC;CACjD;AAED,0FAA0F;AAC1F,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAsB1D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAc7E,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAK9C,CAAC;AAQF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD"}
@@ -44,6 +44,8 @@ export const INTRINSICS = {
44
44
  // dependency analysis must not guess at.
45
45
  $untrack: { export: 'untrack', module: REACTIVE_MODULE, returns: 'plain' },
46
46
  $untrackStore: { export: 'untrackStore', module: '@fluixi/reactive/store', returns: 'plain' },
47
+ // An environment variable, public or server-only; the browser build refuses a secret.
48
+ $env: { export: 'env', module: '@fluixi/start/env', returns: 'plain' },
47
49
  };
48
50
  /**
49
51
  * The runtime names, for the other direction: source that imports `createSignal` gets
@@ -15,7 +15,9 @@ var INTRINSICS = {
15
15
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
16
16
  // dependency analysis must not guess at.
17
17
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
18
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
18
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
19
+ // An environment variable, public or server-only; the browser build refuses a secret.
20
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
19
21
  };
20
22
  var RUNTIME_PRIMITIVES = {
21
23
  signal: "signal-handle",
@@ -42,7 +42,9 @@ var INTRINSICS = {
42
42
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
43
43
  // dependency analysis must not guess at.
44
44
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
45
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
45
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
46
+ // An environment variable, public or server-only; the browser build refuses a secret.
47
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
46
48
  };
47
49
  var RUNTIME_PRIMITIVES = {
48
50
  signal: "signal-handle",
@@ -15,7 +15,9 @@ var INTRINSICS = {
15
15
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
16
16
  // dependency analysis must not guess at.
17
17
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
18
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
18
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
19
+ // An environment variable, public or server-only; the browser build refuses a secret.
20
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
19
21
  };
20
22
  var RUNTIME_PRIMITIVES = {
21
23
  signal: "signal-handle",
@@ -1,4 +1,4 @@
1
- /*! @fluixi/compiler v1.0.0-alpha.90 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/compiler v1.0.0-alpha.92 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -44,7 +44,9 @@ var INTRINSICS = {
44
44
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
45
45
  // dependency analysis must not guess at.
46
46
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
47
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
47
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
48
+ // An environment variable, public or server-only; the browser build refuses a secret.
49
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
48
50
  };
49
51
  var RUNTIME_PRIMITIVES = {
50
52
  signal: "signal-handle",
@@ -1,4 +1,4 @@
1
- /*! @fluixi/compiler v1.0.0-alpha.90 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/compiler v1.0.0-alpha.92 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
 
3
3
  // src/analyze/static-graph.ts
4
4
  import { parse } from "@babel/parser";
@@ -23,7 +23,9 @@ var INTRINSICS = {
23
23
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
24
24
  // dependency analysis must not guess at.
25
25
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
26
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
26
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
27
+ // An environment variable, public or server-only; the browser build refuses a secret.
28
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
27
29
  };
28
30
  var RUNTIME_PRIMITIVES = {
29
31
  signal: "signal-handle",
@@ -1,4 +1,4 @@
1
- /*! @fluixi/compiler v1.0.0-alpha.90 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/compiler v1.0.0-alpha.92 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  import {
3
3
  analyzeStatic,
4
4
  buildJsxIR,
@@ -10,13 +10,13 @@ import {
10
10
  lowerTemplate,
11
11
  resolveComponentSources,
12
12
  shapeOf
13
- } from "./chunk-USZWARUE.mjs";
13
+ } from "./chunk-VC6X44FS.mjs";
14
14
  import {
15
15
  CORE_CONTROL_FLOW,
16
16
  ROUTER_COMPONENTS,
17
17
  createComponentResolver
18
- } from "./chunk-VR2UFMLQ.mjs";
19
- import "./chunk-XTMCL6V7.mjs";
18
+ } from "./chunk-XJ5H2MXY.mjs";
19
+ import "./chunk-VOUI6XPV.mjs";
20
20
 
21
21
  // src/frontend/babel/plugin.ts
22
22
  import { declare } from "@babel/helper-plugin-utils";
@@ -1,4 +1,4 @@
1
- /*! @fluixi/compiler v1.0.0-alpha.90 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/compiler v1.0.0-alpha.92 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
 
3
3
  // ../../node_modules/.pnpm/@jridgewell+sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs
4
4
  var comma = ",".charCodeAt(0);
@@ -1,4 +1,4 @@
1
- /*! @fluixi/compiler v1.0.0-alpha.90 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/compiler v1.0.0-alpha.92 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
 
3
3
  // src/transform/server-fn-id.ts
4
4
  function hash(s) {
@@ -1,4 +1,4 @@
1
- /*! @fluixi/compiler v1.0.0-alpha.90 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/compiler v1.0.0-alpha.92 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  import {
3
3
  INTRINSICS,
4
4
  RESERVED_COMPONENTS,
@@ -7,7 +7,7 @@ import {
7
7
  builtinComponentMap,
8
8
  isIntrinsicName,
9
9
  isPrimitiveModule
10
- } from "./chunk-VR2UFMLQ.mjs";
10
+ } from "./chunk-XJ5H2MXY.mjs";
11
11
 
12
12
  // src/analyze/expr-shape.ts
13
13
  var CALL = /* @__PURE__ */ new Set(["CallExpression", "OptionalCallExpression"]);
@@ -1,4 +1,4 @@
1
- /*! @fluixi/compiler v1.0.0-alpha.90 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/compiler v1.0.0-alpha.92 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
3
3
  get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
4
4
  }) : x)(function(x) {
@@ -1,4 +1,4 @@
1
- /*! @fluixi/compiler v1.0.0-alpha.90 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/compiler v1.0.0-alpha.92 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
 
3
3
  // src/resolve/component-resolver.ts
4
4
  var isMapRule = (rule) => "components" in rule;
@@ -109,7 +109,9 @@ var INTRINSICS = {
109
109
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
110
110
  // dependency analysis must not guess at.
111
111
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
112
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
112
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
113
+ // An environment variable, public or server-only; the browser build refuses a secret.
114
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
113
115
  };
114
116
  var RUNTIME_PRIMITIVES = {
115
117
  signal: "signal-handle",
@@ -246,7 +246,9 @@ var INTRINSICS = {
246
246
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
247
247
  // dependency analysis must not guess at.
248
248
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
249
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
249
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
250
+ // An environment variable, public or server-only; the browser build refuses a secret.
251
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
250
252
  };
251
253
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
252
254
 
@@ -219,7 +219,9 @@ var INTRINSICS = {
219
219
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
220
220
  // dependency analysis must not guess at.
221
221
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
222
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
222
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
223
+ // An environment variable, public or server-only; the browser build refuses a secret.
224
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
223
225
  };
224
226
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
225
227
 
@@ -311,7 +311,9 @@ var INTRINSICS = {
311
311
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
312
312
  // dependency analysis must not guess at.
313
313
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
314
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
314
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
315
+ // An environment variable, public or server-only; the browser build refuses a secret.
316
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
315
317
  };
316
318
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
317
319
 
@@ -277,7 +277,9 @@ var INTRINSICS = {
277
277
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
278
278
  // dependency analysis must not guess at.
279
279
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
280
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
280
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
281
+ // An environment variable, public or server-only; the browser build refuses a secret.
282
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
281
283
  };
282
284
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
283
285
 
@@ -260,7 +260,9 @@ var INTRINSICS = {
260
260
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
261
261
  // dependency analysis must not guess at.
262
262
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
263
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
263
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
264
+ // An environment variable, public or server-only; the browser build refuses a secret.
265
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
264
266
  };
265
267
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
266
268
 
@@ -223,7 +223,9 @@ var INTRINSICS = {
223
223
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
224
224
  // dependency analysis must not guess at.
225
225
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
226
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
226
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
227
+ // An environment variable, public or server-only; the browser build refuses a secret.
228
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
227
229
  };
228
230
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
229
231
 
@@ -1,4 +1,4 @@
1
- /*! @fluixi/compiler v1.0.0-alpha.90 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/compiler v1.0.0-alpha.92 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  "use strict";
3
3
  var __create = Object.create;
4
4
  var __defProp = Object.defineProperty;
@@ -485,7 +485,9 @@ var INTRINSICS = {
485
485
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
486
486
  // dependency analysis must not guess at.
487
487
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
488
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
488
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
489
+ // An environment variable, public or server-only; the browser build refuses a secret.
490
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
489
491
  };
490
492
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
491
493
 
@@ -1,4 +1,4 @@
1
- /*! @fluixi/compiler v1.0.0-alpha.90 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/compiler v1.0.0-alpha.92 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
 
3
3
  // src/frontend/babel/plugin.ts
4
4
  import { declare } from "@babel/helper-plugin-utils";
@@ -446,7 +446,9 @@ var INTRINSICS = {
446
446
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
447
447
  // dependency analysis must not guess at.
448
448
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
449
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
449
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
450
+ // An environment variable, public or server-only; the browser build refuses a secret.
451
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
450
452
  };
451
453
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
452
454
 
@@ -309,7 +309,9 @@ var INTRINSICS = {
309
309
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
310
310
  // dependency analysis must not guess at.
311
311
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
312
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
312
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
313
+ // An environment variable, public or server-only; the browser build refuses a secret.
314
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
313
315
  };
314
316
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
315
317
 
@@ -277,7 +277,9 @@ var INTRINSICS = {
277
277
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
278
278
  // dependency analysis must not guess at.
279
279
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
280
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
280
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
281
+ // An environment variable, public or server-only; the browser build refuses a secret.
282
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
281
283
  };
282
284
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
283
285
 
@@ -478,7 +478,9 @@ var INTRINSICS = {
478
478
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
479
479
  // dependency analysis must not guess at.
480
480
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
481
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
481
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
482
+ // An environment variable, public or server-only; the browser build refuses a secret.
483
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
482
484
  };
483
485
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
484
486
 
@@ -444,7 +444,9 @@ var INTRINSICS = {
444
444
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
445
445
  // dependency analysis must not guess at.
446
446
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
447
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
447
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
448
+ // An environment variable, public or server-only; the browser build refuses a secret.
449
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
448
450
  };
449
451
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
450
452
 
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! @fluixi/compiler v1.0.0-alpha.90 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/compiler v1.0.0-alpha.92 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
  "use strict";
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -41,6 +41,7 @@ __export(index_exports, {
41
41
  imperativeBackend: () => imperativeBackend,
42
42
  isReactiveShape: () => isReactiveShape,
43
43
  lowerTemplate: () => lowerTemplate,
44
+ patternCandidates: () => patternCandidates,
44
45
  resolveComponentSources: () => resolveComponentSources,
45
46
  routerComponents: () => routerComponents,
46
47
  walk: () => walk,
@@ -336,7 +337,9 @@ var INTRINSICS = {
336
337
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
337
338
  // dependency analysis must not guess at.
338
339
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
339
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
340
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
341
+ // An environment variable, public or server-only; the browser build refuses a secret.
342
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
340
343
  };
341
344
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
342
345
 
@@ -1440,7 +1443,8 @@ function componentGlobals(rules, options = {}) {
1440
1443
  builtins = true,
1441
1444
  intrinsics = true,
1442
1445
  generator = "@fluixi/compiler",
1443
- specifier = (module2) => module2
1446
+ specifier = (module2) => module2,
1447
+ candidates = []
1444
1448
  } = options;
1445
1449
  const all = [...rules];
1446
1450
  if (builtins) {
@@ -1452,7 +1456,8 @@ function componentGlobals(rules, options = {}) {
1452
1456
  const shadowedByDom = [];
1453
1457
  const unavailable = [];
1454
1458
  const resolved = /* @__PURE__ */ new Map();
1455
- for (const name of [...resolver.names()].sort()) {
1459
+ const names = /* @__PURE__ */ new Set([...resolver.names(), ...[...candidates].filter((n) => /^[A-Za-z_$][\w$]*$/.test(n))]);
1460
+ for (const name of [...names].sort()) {
1456
1461
  const target = resolver.resolve(name);
1457
1462
  if (!target) continue;
1458
1463
  const pkg = packageOf(target.module);
@@ -1463,7 +1468,11 @@ function componentGlobals(rules, options = {}) {
1463
1468
  resolved.set(name, target);
1464
1469
  }
1465
1470
  }
1466
- const intrinsicModules = intrinsics ? [...new Set(Object.values(INTRINSICS).map((i) => i.module))] : [];
1471
+ const usableIntrinsics = intrinsics ? Object.entries(INTRINSICS).filter(([, i]) => {
1472
+ const pkg = packageOf(i.module);
1473
+ return !available || !pkg || available.has(pkg);
1474
+ }) : [];
1475
+ const intrinsicModules = [...new Set(usableIntrinsics.map(([, i]) => i.module))];
1467
1476
  const modules = [
1468
1477
  .../* @__PURE__ */ new Set([...declared.map((name) => resolved.get(name).module), ...intrinsicModules])
1469
1478
  ].sort();
@@ -1483,15 +1492,18 @@ function componentGlobals(rules, options = {}) {
1483
1492
  return `// import { ${n} } from '${module2 ? specifier(module2) : ""}';
1484
1493
  `;
1485
1494
  }).join("") : "";
1486
- const intrinsicLines = intrinsics ? Object.entries(INTRINSICS).map(
1495
+ const intrinsicLines = usableIntrinsics.map(
1487
1496
  ([name, intrinsic]) => ` const ${name}: typeof ${namespaceAlias(intrinsic.module)}.${intrinsic.export};`
1488
- ) : [];
1497
+ );
1489
1498
  const patternRules = rules.filter((rule) => "match" in rule).length;
1490
- const patternNote = patternRules > 0 ? `//
1499
+ const patternNote = patternRules === 0 ? "" : options.candidates ? `//
1500
+ // ${patternRules} pattern rule${patternRules === 1 ? "" : "s"}: declared for the files the module path
1501
+ // points at. A name with no such file still resolves at build time; declare it by hand.
1502
+ ` : `//
1491
1503
  // ${patternRules} pattern rule${patternRules === 1 ? "" : "s"} cannot be declared:
1492
1504
  // a pattern matches unboundedly many names, so there is no list to emit. Those
1493
1505
  // tags still resolve at build time; declare them by hand if the editor needs them.
1494
- ` : "";
1506
+ `;
1495
1507
  const source = `// GENERATED by ${generator}, do not edit.
1496
1508
  //
1497
1509
  // The components \`resolve\` supplies without an import. This describes what the
@@ -1550,6 +1562,30 @@ function projectDependencies(root) {
1550
1562
  return void 0;
1551
1563
  }
1552
1564
  }
1565
+ function patternCandidates(rules, root) {
1566
+ const out = [];
1567
+ for (const rule of rules) {
1568
+ if (!("match" in rule) || !rule.module.startsWith("/")) continue;
1569
+ const dir = (0, import_node_path.dirname)(rule.module);
1570
+ const file = (0, import_node_path.basename)(rule.module);
1571
+ const group = file.match(/\$\d+/);
1572
+ if (dir.includes("$") || !group || file.indexOf("$", group.index + 1) !== -1) continue;
1573
+ const before = file.slice(0, group.index);
1574
+ const after = file.slice(group.index + group[0].length);
1575
+ let entries;
1576
+ try {
1577
+ entries = (0, import_node_fs.readdirSync)((0, import_node_path.resolve)(root, dir.slice(1)));
1578
+ } catch {
1579
+ continue;
1580
+ }
1581
+ for (const entry of entries) {
1582
+ if (entry.length > before.length + after.length && entry.startsWith(before) && entry.endsWith(after)) {
1583
+ out.push(entry.slice(before.length, entry.length - after.length));
1584
+ }
1585
+ }
1586
+ }
1587
+ return out;
1588
+ }
1553
1589
  function writeComponentGlobals(options, root) {
1554
1590
  if (options.globals === false) return { status: "skipped", reason: "disabled" };
1555
1591
  const rules = options.resolve ?? [];
@@ -1565,6 +1601,7 @@ function writeComponentGlobals(options, root) {
1565
1601
  }
1566
1602
  const { source, declared } = componentGlobals(rules, {
1567
1603
  available: projectDependencies(root),
1604
+ candidates: patternCandidates(rules, root),
1568
1605
  specifier: (module2) => forTypeScript(module2, (0, import_node_path.dirname)(target), root)
1569
1606
  });
1570
1607
  if (existing === source) {
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! @fluixi/compiler v1.0.0-alpha.90 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
1
+ /*! @fluixi/compiler v1.0.0-alpha.92 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
2
 
3
3
  // src/analyze/reactive-expr.ts
4
4
  var STABLE_MEMBER = "children";
@@ -290,7 +290,9 @@ var INTRINSICS = {
290
290
  // does. `untrack` suppresses dependency collection, which is exactly the kind of thing
291
291
  // dependency analysis must not guess at.
292
292
  $untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
293
- $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
293
+ $untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" },
294
+ // An environment variable, public or server-only; the browser build refuses a secret.
295
+ $env: { export: "env", module: "@fluixi/start/env", returns: "plain" }
294
296
  };
295
297
  var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
296
298
 
@@ -1394,7 +1396,8 @@ function componentGlobals(rules, options = {}) {
1394
1396
  builtins = true,
1395
1397
  intrinsics = true,
1396
1398
  generator = "@fluixi/compiler",
1397
- specifier = (module) => module
1399
+ specifier = (module) => module,
1400
+ candidates = []
1398
1401
  } = options;
1399
1402
  const all = [...rules];
1400
1403
  if (builtins) {
@@ -1406,7 +1409,8 @@ function componentGlobals(rules, options = {}) {
1406
1409
  const shadowedByDom = [];
1407
1410
  const unavailable = [];
1408
1411
  const resolved = /* @__PURE__ */ new Map();
1409
- for (const name of [...resolver.names()].sort()) {
1412
+ const names = /* @__PURE__ */ new Set([...resolver.names(), ...[...candidates].filter((n) => /^[A-Za-z_$][\w$]*$/.test(n))]);
1413
+ for (const name of [...names].sort()) {
1410
1414
  const target = resolver.resolve(name);
1411
1415
  if (!target) continue;
1412
1416
  const pkg = packageOf(target.module);
@@ -1417,7 +1421,11 @@ function componentGlobals(rules, options = {}) {
1417
1421
  resolved.set(name, target);
1418
1422
  }
1419
1423
  }
1420
- const intrinsicModules = intrinsics ? [...new Set(Object.values(INTRINSICS).map((i) => i.module))] : [];
1424
+ const usableIntrinsics = intrinsics ? Object.entries(INTRINSICS).filter(([, i]) => {
1425
+ const pkg = packageOf(i.module);
1426
+ return !available || !pkg || available.has(pkg);
1427
+ }) : [];
1428
+ const intrinsicModules = [...new Set(usableIntrinsics.map(([, i]) => i.module))];
1421
1429
  const modules = [
1422
1430
  .../* @__PURE__ */ new Set([...declared.map((name) => resolved.get(name).module), ...intrinsicModules])
1423
1431
  ].sort();
@@ -1437,15 +1445,18 @@ function componentGlobals(rules, options = {}) {
1437
1445
  return `// import { ${n} } from '${module ? specifier(module) : ""}';
1438
1446
  `;
1439
1447
  }).join("") : "";
1440
- const intrinsicLines = intrinsics ? Object.entries(INTRINSICS).map(
1448
+ const intrinsicLines = usableIntrinsics.map(
1441
1449
  ([name, intrinsic]) => ` const ${name}: typeof ${namespaceAlias(intrinsic.module)}.${intrinsic.export};`
1442
- ) : [];
1450
+ );
1443
1451
  const patternRules = rules.filter((rule) => "match" in rule).length;
1444
- const patternNote = patternRules > 0 ? `//
1452
+ const patternNote = patternRules === 0 ? "" : options.candidates ? `//
1453
+ // ${patternRules} pattern rule${patternRules === 1 ? "" : "s"}: declared for the files the module path
1454
+ // points at. A name with no such file still resolves at build time; declare it by hand.
1455
+ ` : `//
1445
1456
  // ${patternRules} pattern rule${patternRules === 1 ? "" : "s"} cannot be declared:
1446
1457
  // a pattern matches unboundedly many names, so there is no list to emit. Those
1447
1458
  // tags still resolve at build time; declare them by hand if the editor needs them.
1448
- ` : "";
1459
+ `;
1449
1460
  const source = `// GENERATED by ${generator}, do not edit.
1450
1461
  //
1451
1462
  // The components \`resolve\` supplies without an import. This describes what the
@@ -1461,8 +1472,8 @@ ${[...lines, ...intrinsicLines].join("\n")}
1461
1472
  }
1462
1473
 
1463
1474
  // src/resolve/write-globals.ts
1464
- import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
1465
- import { dirname, relative, sep, resolve as resolvePath } from "node:path";
1475
+ import { mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
1476
+ import { basename, dirname, relative, sep, resolve as resolvePath } from "node:path";
1466
1477
  var GENERATED_MARKER = "GENERATED by @fluixi/compiler";
1467
1478
  var DEFAULT_GLOBALS_PATH = "fluixi.d.ts";
1468
1479
  function coveredByInclude(root, target) {
@@ -1504,6 +1515,30 @@ function projectDependencies(root) {
1504
1515
  return void 0;
1505
1516
  }
1506
1517
  }
1518
+ function patternCandidates(rules, root) {
1519
+ const out = [];
1520
+ for (const rule of rules) {
1521
+ if (!("match" in rule) || !rule.module.startsWith("/")) continue;
1522
+ const dir = dirname(rule.module);
1523
+ const file = basename(rule.module);
1524
+ const group = file.match(/\$\d+/);
1525
+ if (dir.includes("$") || !group || file.indexOf("$", group.index + 1) !== -1) continue;
1526
+ const before = file.slice(0, group.index);
1527
+ const after = file.slice(group.index + group[0].length);
1528
+ let entries;
1529
+ try {
1530
+ entries = readdirSync(resolvePath(root, dir.slice(1)));
1531
+ } catch {
1532
+ continue;
1533
+ }
1534
+ for (const entry of entries) {
1535
+ if (entry.length > before.length + after.length && entry.startsWith(before) && entry.endsWith(after)) {
1536
+ out.push(entry.slice(before.length, entry.length - after.length));
1537
+ }
1538
+ }
1539
+ }
1540
+ return out;
1541
+ }
1507
1542
  function writeComponentGlobals(options, root) {
1508
1543
  if (options.globals === false) return { status: "skipped", reason: "disabled" };
1509
1544
  const rules = options.resolve ?? [];
@@ -1519,6 +1554,7 @@ function writeComponentGlobals(options, root) {
1519
1554
  }
1520
1555
  const { source, declared } = componentGlobals(rules, {
1521
1556
  available: projectDependencies(root),
1557
+ candidates: patternCandidates(rules, root),
1522
1558
  specifier: (module) => forTypeScript(module, dirname(target), root)
1523
1559
  });
1524
1560
  if (existing === source) {
@@ -1579,6 +1615,7 @@ export {
1579
1615
  imperativeBackend,
1580
1616
  isReactiveShape,
1581
1617
  lowerTemplate,
1618
+ patternCandidates,
1582
1619
  resolveComponentSources,
1583
1620
  routerComponents,
1584
1621
  walk,