@vielzeug/ripple 2.3.0 → 3.0.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 (51) hide show
  1. package/README.md +10 -32
  2. package/dist/_async.cjs +1 -1
  3. package/dist/_async.cjs.map +1 -1
  4. package/dist/_async.d.ts.map +1 -1
  5. package/dist/_async.js +33 -30
  6. package/dist/_async.js.map +1 -1
  7. package/dist/_default.cjs +1 -1
  8. package/dist/_default.cjs.map +1 -1
  9. package/dist/_default.d.ts +18 -5
  10. package/dist/_default.d.ts.map +1 -1
  11. package/dist/_default.js +20 -17
  12. package/dist/_default.js.map +1 -1
  13. package/dist/_subscribable.cjs +2 -0
  14. package/dist/_subscribable.cjs.map +1 -0
  15. package/dist/_subscribable.d.ts +17 -0
  16. package/dist/_subscribable.d.ts.map +1 -0
  17. package/dist/_subscribable.js +46 -0
  18. package/dist/_subscribable.js.map +1 -0
  19. package/dist/_watch.cjs +1 -1
  20. package/dist/_watch.cjs.map +1 -1
  21. package/dist/_watch.d.ts +1 -0
  22. package/dist/_watch.d.ts.map +1 -1
  23. package/dist/_watch.js +14 -5
  24. package/dist/_watch.js.map +1 -1
  25. package/dist/errors.cjs +1 -1
  26. package/dist/errors.cjs.map +1 -1
  27. package/dist/errors.d.ts +8 -0
  28. package/dist/errors.d.ts.map +1 -1
  29. package/dist/errors.js +14 -3
  30. package/dist/errors.js.map +1 -1
  31. package/dist/index.cjs +1 -1
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.d.ts +4 -2
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +5 -5
  36. package/dist/index.js.map +1 -1
  37. package/dist/ripple.cjs +1 -1
  38. package/dist/ripple.cjs.map +1 -1
  39. package/dist/ripple.iife.js +1 -1
  40. package/dist/ripple.iife.js.map +1 -1
  41. package/dist/ripple.js +1 -1
  42. package/dist/ripple.js.map +1 -1
  43. package/dist/runtime.cjs +1 -1
  44. package/dist/runtime.cjs.map +1 -1
  45. package/dist/runtime.d.ts +18 -7
  46. package/dist/runtime.d.ts.map +1 -1
  47. package/dist/runtime.js +76 -45
  48. package/dist/runtime.js.map +1 -1
  49. package/dist/types.d.ts +34 -13
  50. package/dist/types.d.ts.map +1 -1
  51. package/package.json +9 -8
package/dist/types.d.ts CHANGED
@@ -33,29 +33,50 @@ export type EffectHandle = Disposable;
33
33
  export interface Scope extends Disposable {
34
34
  run<T>(fn: () => T): T;
35
35
  }
36
- export type ReactiveEvent = {
37
- readonly kind: 'compute';
36
+ /**
37
+ * Structural contract for external state sources that expose a snapshot and a
38
+ * subscription pair — the same shape React's `useSyncExternalStore` consumes.
39
+ * Packages can implement this without importing Ripple; `fromSubscribable()`
40
+ * bridges them into a reactive graph.
41
+ */
42
+ export interface Subscribable<T> {
43
+ getSnapshot(): T;
44
+ subscribe(listener: () => void): Unsubscribe;
45
+ }
46
+ export type RippleErrorContext = {
47
+ readonly kind: 'cleanup' | 'computed' | 'effect' | 'listener';
48
+ readonly name?: string;
49
+ };
50
+ export type RippleEvent = {
51
+ readonly type: 'compute';
38
52
  readonly name?: string;
39
53
  } | {
40
- readonly kind: 'effect';
54
+ readonly type: 'effect';
41
55
  readonly name?: string;
42
56
  } | {
43
- readonly kind: 'write';
57
+ readonly type: 'write';
44
58
  readonly name?: string;
45
59
  readonly next: unknown;
46
60
  readonly previous: unknown;
47
61
  } | {
48
- readonly kind: 'dispose';
49
- readonly name?: string;
50
- readonly node: 'effect' | 'scope';
51
- };
52
- export type ReactiveObserver = (event: ReactiveEvent) => void;
53
- export type ReactiveErrorContext = {
54
- readonly kind: 'cleanup' | 'effect' | 'listener' | 'observer';
62
+ readonly type: 'dispose';
55
63
  readonly name?: string;
64
+ readonly node: 'effect' | 'graph' | 'scope';
65
+ } | {
66
+ readonly type: 'error';
67
+ readonly error: unknown;
68
+ readonly context: RippleErrorContext;
56
69
  };
70
+ /**
71
+ * Deterministic error policy for runtime callback, cleanup, and listener
72
+ * failures. Error events are always emitted through `tap()` regardless of
73
+ * policy — this controls only whether failures also rethrow.
74
+ *
75
+ * - `'throw'` (default): rethrows the error asynchronously via `queueMicrotask`.
76
+ * - `'swallow'`: silences rethrow; observe failures only through `tap()`.
77
+ */
78
+ export type RippleErrorPolicy = 'throw' | 'swallow';
57
79
  export type RippleOptions = {
58
- observer?: ReactiveObserver;
59
- onError?: (error: unknown, context: ReactiveErrorContext) => void;
80
+ errorPolicy?: RippleErrorPolicy;
60
81
  };
61
82
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC;AACjC,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;AAC5D,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAC7B,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,IAAI,CAAC,CAAC;IACV,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,MAAM,CAAC,CAAC,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC;CACV;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;CAC1B;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC;AAEtC,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,WAAW,IAAI,CAAC,CAAC;IACjB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC;CAC9C;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACtG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;CAAE,GACjG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAE9F;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vielzeug/ripple",
3
- "version": "2.3.0",
4
- "description": "Fine-grained reactive runtime — signals, derived values, effects, scopes, and optional state tools",
3
+ "version": "3.0.0",
4
+ "description": "Fine-grained reactive graphs with signals, effects, resources, scopes, and structural bridges",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/helmuthdu/vielzeug",
@@ -30,19 +30,20 @@
30
30
  "registry": "https://registry.npmjs.org/"
31
31
  },
32
32
  "scripts": {
33
- "build": "vite build && pnpm run build:bundle && pnpm run build:types",
33
+ "build": "vite build && pnpm --silent run build:bundle && pnpm --silent run build:types && pnpm --silent run verify:exports",
34
34
  "build:bundle": "vite build --config vite.bundle.config.ts",
35
35
  "build:types": "tsc -p tsconfig.declarations.json",
36
36
  "fix": "biome check --write src",
37
37
  "lint": "biome ci src",
38
- "prepublishOnly": "pnpm run build",
38
+ "prepublishOnly": "pnpm --silent run build",
39
39
  "preview": "vite preview",
40
- "test": "vitest"
40
+ "test": "vitest",
41
+ "verify:exports": "node verify-exports.mjs"
41
42
  },
42
43
  "devDependencies": {
43
- "@types/node": "^26.2.0",
44
+ "@types/node": "^26.4.1",
44
45
  "typescript": "^6.0.3",
45
- "vite": "^8.2.1",
46
- "vitest": "^4.1.10"
46
+ "vite": "^8.2.2",
47
+ "vitest": "^5.0.0"
47
48
  }
48
49
  }