fibrae 0.1.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 (70) hide show
  1. package/dist/components.d.ts +40 -0
  2. package/dist/components.js +63 -0
  3. package/dist/components.js.map +1 -0
  4. package/dist/core.d.ts +25 -0
  5. package/dist/core.js +46 -0
  6. package/dist/core.js.map +1 -0
  7. package/dist/dom.d.ts +16 -0
  8. package/dist/dom.js +67 -0
  9. package/dist/dom.js.map +1 -0
  10. package/dist/fiber-render.d.ts +33 -0
  11. package/dist/fiber-render.js +1069 -0
  12. package/dist/fiber-render.js.map +1 -0
  13. package/dist/h.d.ts +19 -0
  14. package/dist/h.js +26 -0
  15. package/dist/h.js.map +1 -0
  16. package/dist/hydration.d.ts +30 -0
  17. package/dist/hydration.js +375 -0
  18. package/dist/hydration.js.map +1 -0
  19. package/dist/index.d.ts +26 -0
  20. package/dist/index.js +28 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/jsx-runtime/index.d.ts +29 -0
  23. package/dist/jsx-runtime/index.js +61 -0
  24. package/dist/jsx-runtime/index.js.map +1 -0
  25. package/dist/render.d.ts +19 -0
  26. package/dist/render.js +325 -0
  27. package/dist/render.js.map +1 -0
  28. package/dist/router/History.d.ts +129 -0
  29. package/dist/router/History.js +241 -0
  30. package/dist/router/History.js.map +1 -0
  31. package/dist/router/Link.d.ts +52 -0
  32. package/dist/router/Link.js +131 -0
  33. package/dist/router/Link.js.map +1 -0
  34. package/dist/router/Navigator.d.ts +108 -0
  35. package/dist/router/Navigator.js +225 -0
  36. package/dist/router/Navigator.js.map +1 -0
  37. package/dist/router/Route.d.ts +65 -0
  38. package/dist/router/Route.js +143 -0
  39. package/dist/router/Route.js.map +1 -0
  40. package/dist/router/Router.d.ts +167 -0
  41. package/dist/router/Router.js +328 -0
  42. package/dist/router/Router.js.map +1 -0
  43. package/dist/router/RouterBuilder.d.ts +128 -0
  44. package/dist/router/RouterBuilder.js +112 -0
  45. package/dist/router/RouterBuilder.js.map +1 -0
  46. package/dist/router/RouterOutlet.d.ts +57 -0
  47. package/dist/router/RouterOutlet.js +132 -0
  48. package/dist/router/RouterOutlet.js.map +1 -0
  49. package/dist/router/RouterState.d.ts +102 -0
  50. package/dist/router/RouterState.js +94 -0
  51. package/dist/router/RouterState.js.map +1 -0
  52. package/dist/router/index.d.ts +28 -0
  53. package/dist/router/index.js +31 -0
  54. package/dist/router/index.js.map +1 -0
  55. package/dist/runtime.d.ts +55 -0
  56. package/dist/runtime.js +68 -0
  57. package/dist/runtime.js.map +1 -0
  58. package/dist/scope-utils.d.ts +14 -0
  59. package/dist/scope-utils.js +29 -0
  60. package/dist/scope-utils.js.map +1 -0
  61. package/dist/server.d.ts +112 -0
  62. package/dist/server.js +313 -0
  63. package/dist/server.js.map +1 -0
  64. package/dist/shared.d.ts +136 -0
  65. package/dist/shared.js +53 -0
  66. package/dist/shared.js.map +1 -0
  67. package/dist/tracking.d.ts +23 -0
  68. package/dist/tracking.js +53 -0
  69. package/dist/tracking.js.map +1 -0
  70. package/package.json +62 -0
@@ -0,0 +1,53 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Stream from "effect/Stream";
3
+ import * as Scope from "effect/Scope";
4
+ import { Atom, Registry as AtomRegistry } from "@effect-atom/atom";
5
+ import { isStream } from "./shared.js";
6
+ import { FibraeRuntime } from "./runtime.js";
7
+ // =============================================================================
8
+ // Stream Normalization
9
+ // =============================================================================
10
+ /**
11
+ * Normalize component output to a Stream.
12
+ * Components can return VElement, Effect<VElement, E>, or Stream<VElement, E>.
13
+ * Error type is preserved through the conversion.
14
+ */
15
+ export const normalizeToStream = (value) => {
16
+ if (isStream(value))
17
+ return value;
18
+ if (Effect.isEffect(value))
19
+ return Stream.fromEffect(value);
20
+ return Stream.succeed(value);
21
+ };
22
+ // =============================================================================
23
+ // Atom Tracking
24
+ // =============================================================================
25
+ /**
26
+ * Create a tracking registry that records which atoms are accessed
27
+ */
28
+ export const makeTrackingRegistry = (realRegistry, accessedAtoms) => {
29
+ return new Proxy(realRegistry, {
30
+ get(target, prop, receiver) {
31
+ if (prop === "get") {
32
+ return (atom) => {
33
+ accessedAtoms.add(atom);
34
+ return realRegistry.get(atom);
35
+ };
36
+ }
37
+ return Reflect.get(target, prop, receiver);
38
+ }
39
+ });
40
+ };
41
+ /**
42
+ * Subscribe to atom changes for reactivity.
43
+ * Uses registry.subscribe directly (like atom-react) instead of streams.
44
+ * This is simpler and more efficient - subscriptions are synchronous
45
+ * and cleanup is handled via scope finalizers.
46
+ */
47
+ export const subscribeToAtoms = (atoms, onUpdate, runtime, scope) => Effect.forEach(atoms, (atom) => Effect.gen(function* () {
48
+ // Subscribe immediately - returns unsubscribe function
49
+ const unsubscribe = runtime.registry.subscribe(atom, onUpdate);
50
+ // Register unsubscribe to run when scope closes
51
+ yield* Scope.addFinalizer(scope, Effect.sync(unsubscribe));
52
+ }), { discard: true });
53
+ //# sourceMappingURL=tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../src/tracking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,IAAI,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAiB,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,KAAuF,EACpD,EAAE;IACrC,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,YAAmC,EACnC,aAAsC,EACf,EAAE;IACzB,OAAO,IAAI,KAAK,CAAC,YAAsB,EAAE;QACvC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAwB,EAAE,EAAE;oBAClC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACxB,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;KACF,CAA0B,CAAC;AAC9B,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,KAA8B,EAC9B,QAAoB,EACpB,OAAsB,EACtB,KAA4B,EACO,EAAE,CACrC,MAAM,CAAC,OAAO,CACZ,KAAK,EACL,CAAC,IAAI,EAAE,EAAE,CACP,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,uDAAuD;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/D,gDAAgD;IAChD,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC,EACJ,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "fibrae",
3
+ "version": "0.1.0",
4
+ "description": "Effect-first JSX renderer with automatic reactivity",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/DanielFGray/lumon"
8
+ },
9
+ "license": "MIT",
10
+ "type": "module",
11
+ "main": "./dist/index.js",
12
+ "module": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "exports": {
18
+ ".": {
19
+ "import": "./dist/index.js",
20
+ "types": "./dist/index.d.ts"
21
+ },
22
+ "./jsx-runtime": {
23
+ "import": "./dist/jsx-runtime/index.js",
24
+ "types": "./dist/jsx-runtime/index.d.ts"
25
+ },
26
+ "./jsx-dev-runtime": {
27
+ "import": "./dist/jsx-runtime/index.js",
28
+ "types": "./dist/jsx-runtime/index.d.ts"
29
+ },
30
+ "./server": {
31
+ "import": "./dist/server.js",
32
+ "types": "./dist/server.d.ts"
33
+ },
34
+ "./shared": {
35
+ "import": "./dist/shared.js",
36
+ "types": "./dist/shared.d.ts"
37
+ }
38
+ },
39
+ "scripts": {
40
+ "dev:server": "vite dev",
41
+ "build:watch": "tsc --watch -p .",
42
+ "build": "tsc -p .",
43
+ "types:watch": "tsc -p . --noEmit --watch",
44
+ "types:check": "tsc -p . --noEmit"
45
+ },
46
+ "optionalDependencies": {
47
+ "@effect/platform-browser": "catalog:",
48
+ "@effect/platform-bun": "catalog:",
49
+ "@effect/platform-node": "catalog:"
50
+ },
51
+ "peerDependencies": {
52
+ "@effect-atom/atom": "catalog:",
53
+ "effect": "catalog:"
54
+ },
55
+ "devDependencies": {
56
+ "@effect/language-service": "catalog:",
57
+ "typescript": "catalog:"
58
+ },
59
+ "overrides": {
60
+ "effect": "catalog:"
61
+ }
62
+ }