dynim-react 1.0.68 → 1.0.71

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.
@@ -1 +1 @@
1
- {"version":3,"file":"DynimProvider.d.ts","sourceRoot":"","sources":["../src/DynimProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAc,EAQZ,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAKV,WAAW,EACX,UAAU,EACV,aAAa,EAGd,MAAM,YAAY,CAAC;AAgBpB,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC;IACzC,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,qBAAqB;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,yBAAyB;IACzB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,oCAAoC;IACpC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,6CAA6C;IAC7C,cAAc,EAAE,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5C,mEAAmE;IACnE,iBAAiB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IACpE,kDAAkD;IAClD,WAAW,EAAE,OAAO,CAAC;IACrB,yDAAyD;IACzD,WAAW,EAAE,WAAW,CAAC;IACzB,2CAA2C;IAC3C,cAAc,EAAE,OAAO,CAAC;IACxB,gCAAgC;IAChC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,MAAW,GACZ,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAgelC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAM5C"}
1
+ {"version":3,"file":"DynimProvider.d.ts","sourceRoot":"","sources":["../src/DynimProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAc,EASZ,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAKV,WAAW,EACX,UAAU,EACV,aAAa,EAGd,MAAM,YAAY,CAAC;AA2FpB,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC;IACzC,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,qBAAqB;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,yBAAyB;IACzB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,oCAAoC;IACpC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,6CAA6C;IAC7C,cAAc,EAAE,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5C,mEAAmE;IACnE,iBAAiB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IACpE,kDAAkD;IAClD,WAAW,EAAE,OAAO,CAAC;IACrB,yDAAyD;IACzD,WAAW,EAAE,WAAW,CAAC;IACzB,2CAA2C;IAC3C,cAAc,EAAE,OAAO,CAAC;IACxB,gCAAgC;IAChC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,MAAW,GACZ,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAuelC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAM5C"}
@@ -1,4 +1,4 @@
1
- import { jsxs as _jsxs, Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  /**
3
3
  * DynimProvider - Single provider for all Dynim functionality
4
4
  *
@@ -7,11 +7,48 @@ import { jsxs as _jsxs, Fragment as _Fragment, jsx as _jsx } from "react/jsx-run
7
7
  * - Visual builder UI (when user has edit permissions)
8
8
  * - Shared context for bundles to access React, packages, etc.
9
9
  */
10
- import React, { createContext, useContext, useEffect, useRef, useCallback, useMemo, useState, } from 'react';
10
+ import React, { createContext, useContext, useEffect, useRef, useCallback, useMemo, useState, Component, } from 'react';
11
11
  import ReactDOM from 'react-dom';
12
12
  import { createBuilderClient, createBuilder, createCodeClient, createBundleLoader, createCSSLoader, BundleNotFoundError, BundleAuthError, } from 'dynim-core';
13
13
  import { createSharedContext, updateSharedContext, isSharedContextReady } from './inference/sharedContext';
14
14
  import { generateThemeCSS } from './theme';
15
+ class BundleErrorBoundary extends Component {
16
+ constructor(props) {
17
+ super(props);
18
+ this.state = { hasError: false, error: null };
19
+ this.lastResetKey = props.resetKey;
20
+ }
21
+ static getDerivedStateFromError(error) {
22
+ return { hasError: true, error };
23
+ }
24
+ componentDidCatch(error, errorInfo) {
25
+ console.warn('[DynimProvider] Bundle render error (will retry on next bundle):', error.message);
26
+ this.props.onError?.(error, errorInfo);
27
+ }
28
+ componentDidUpdate(prevProps) {
29
+ // Reset error state when resetKey changes (new bundle ready)
30
+ if (this.props.resetKey !== this.lastResetKey) {
31
+ this.lastResetKey = this.props.resetKey;
32
+ if (this.state.hasError) {
33
+ this.setState({ hasError: false, error: null });
34
+ }
35
+ }
36
+ }
37
+ render() {
38
+ if (this.state.hasError) {
39
+ return this.props.fallback ?? (_jsxs("div", { style: {
40
+ display: 'flex',
41
+ alignItems: 'center',
42
+ justifyContent: 'center',
43
+ minHeight: '200px',
44
+ color: '#6b7280',
45
+ fontSize: '14px',
46
+ gap: '8px',
47
+ }, children: [_jsx("svg", { style: { width: '16px', height: '16px', animation: 'spin 1s linear infinite' }, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M12 2v4m0 12v4m-8-10h4m12 0h4m-5.66-5.66l-2.83 2.83m-5.02 5.02l-2.83 2.83m0-11.32l2.83 2.83m5.02 5.02l2.83 2.83" }) }), _jsx("span", { children: "Updating preview..." }), _jsx("style", { children: `@keyframes spin { to { transform: rotate(360deg); } }` })] }));
48
+ }
49
+ return this.props.children;
50
+ }
51
+ }
15
52
  /** Decode JWT payload to extract claims (no verification - just for reading IDs) */
16
53
  function decodeJwtPayload(token) {
17
54
  try {
@@ -378,18 +415,18 @@ export function DynimProvider({ children, config = {}, }) {
378
415
  const saveCode = useCallback(async () => {
379
416
  await codeClientRef.current?.saveCode();
380
417
  await loadSavedBundle();
381
- // Force reload CSS with cache bust since saved CSS has changed
418
+ // Invalidate browser cache and reload fresh CSS
382
419
  const cssUrl = buildCSSUrl(false);
383
420
  if (cssUrl)
384
- getCSSLoader().loadWithCacheBust(cssUrl);
421
+ await getCSSLoader().invalidateAndReload(cssUrl);
385
422
  }, [loadSavedBundle, getCSSLoader, buildCSSUrl]);
386
423
  const abandonCode = useCallback(async () => {
387
424
  await codeClientRef.current?.abandonCode();
388
425
  await loadSavedBundle();
389
- // Reload saved CSS (may have been showing temp CSS)
426
+ // Invalidate browser cache and reload saved CSS
390
427
  const cssUrl = buildCSSUrl(false);
391
428
  if (cssUrl)
392
- getCSSLoader().loadWithCacheBust(cssUrl);
429
+ await getCSSLoader().invalidateAndReload(cssUrl);
393
430
  }, [loadSavedBundle, getCSSLoader, buildCSSUrl]);
394
431
  const getCheckpoints = useCallback(async () => {
395
432
  return codeClientRef.current?.getCheckpoints() ?? [];
@@ -453,7 +490,7 @@ export function DynimProvider({ children, config = {}, }) {
453
490
  }, children: ["Bundle error: ", bundleError.message] }), children] }));
454
491
  }
455
492
  if (TenantApp) {
456
- return _jsx(TenantApp, {});
493
+ return (_jsx(BundleErrorBoundary, { resetKey: codeMessage.bundleSequence ?? 0, onError: (error) => configRef.current.onError?.(error), children: _jsx(TenantApp, {}) }));
457
494
  }
458
495
  return children;
459
496
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dynim-react",
3
- "version": "1.0.68",
3
+ "version": "1.0.71",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -27,7 +27,7 @@
27
27
  "dev": "tsc --watch"
28
28
  },
29
29
  "dependencies": {
30
- "dynim-core": "^1.0.42"
30
+ "dynim-core": "^1.0.45"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "react": ">=17.0.0",