@use-voltra/ios-client 2.0.0 → 2.1.1
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.
- package/README.md +20 -1
- package/build/commonjs/index.js +8 -0
- package/build/commonjs/index.js.map +1 -1
- package/build/commonjs/utils/enableWidgetHotReload.js +39 -0
- package/build/commonjs/utils/enableWidgetHotReload.js.map +1 -0
- package/build/module/index.js +1 -0
- package/build/module/index.js.map +1 -1
- package/build/module/utils/enableWidgetHotReload.js +35 -0
- package/build/module/utils/enableWidgetHotReload.js.map +1 -0
- package/build/typescript/commonjs/index.d.ts +1 -0
- package/build/typescript/commonjs/index.d.ts.map +1 -1
- package/build/typescript/commonjs/utils/enableWidgetHotReload.d.ts +23 -0
- package/build/typescript/commonjs/utils/enableWidgetHotReload.d.ts.map +1 -0
- package/build/typescript/module/index.d.ts +1 -0
- package/build/typescript/module/index.d.ts.map +1 -1
- package/build/typescript/module/utils/enableWidgetHotReload.d.ts +23 -0
- package/build/typescript/module/utils/enableWidgetHotReload.d.ts.map +1 -0
- package/expo-plugin/build/cjs/index.js +2 -1
- package/expo-plugin/build/cjs/index.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/clientRendered.js +82 -0
- package/expo-plugin/build/cjs/ios-widget/clientRendered.js.map +1 -0
- package/expo-plugin/build/cjs/ios-widget/clientRenderedPrerender.js +118 -0
- package/expo-plugin/build/cjs/ios-widget/clientRenderedPrerender.js.map +1 -0
- package/expo-plugin/build/cjs/ios-widget/files/index.js +6 -0
- package/expo-plugin/build/cjs/ios-widget/files/index.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/files/manifest.js +67 -0
- package/expo-plugin/build/cjs/ios-widget/files/manifest.js.map +1 -0
- package/expo-plugin/build/cjs/ios-widget/files/swift.js +149 -12
- package/expo-plugin/build/cjs/ios-widget/files/swift.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/index.js +1 -1
- package/expo-plugin/build/cjs/ios-widget/index.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/widgetPlist.js +22 -0
- package/expo-plugin/build/cjs/ios-widget/widgetPlist.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js +88 -0
- package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js.map +1 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/index.js +12 -1
- package/expo-plugin/build/cjs/ios-widget/xcode/index.js.map +1 -1
- package/expo-plugin/build/cjs/validation.js +7 -4
- package/expo-plugin/build/cjs/validation.js.map +1 -1
- package/expo-plugin/build/esm/index.js +2 -1
- package/expo-plugin/build/esm/index.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/clientRendered.js +46 -0
- package/expo-plugin/build/esm/ios-widget/clientRendered.js.map +1 -0
- package/expo-plugin/build/esm/ios-widget/clientRenderedPrerender.js +82 -0
- package/expo-plugin/build/esm/ios-widget/clientRenderedPrerender.js.map +1 -0
- package/expo-plugin/build/esm/ios-widget/files/index.js +6 -0
- package/expo-plugin/build/esm/ios-widget/files/index.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/files/manifest.js +30 -0
- package/expo-plugin/build/esm/ios-widget/files/manifest.js.map +1 -0
- package/expo-plugin/build/esm/ios-widget/files/swift.js +149 -12
- package/expo-plugin/build/esm/ios-widget/files/swift.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/index.js +1 -1
- package/expo-plugin/build/esm/ios-widget/index.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/widgetPlist.js +22 -0
- package/expo-plugin/build/esm/ios-widget/widgetPlist.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js +87 -0
- package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js.map +1 -1
- package/expo-plugin/build/esm/ios-widget/xcode/index.js +13 -2
- package/expo-plugin/build/esm/ios-widget/xcode/index.js.map +1 -1
- package/expo-plugin/build/esm/validation.js +8 -5
- package/expo-plugin/build/esm/validation.js.map +1 -1
- package/expo-plugin/build/types/index.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/clientRendered.d.ts +24 -0
- package/expo-plugin/build/types/ios-widget/clientRendered.d.ts.map +1 -0
- package/expo-plugin/build/types/ios-widget/clientRenderedPrerender.d.ts +9 -0
- package/expo-plugin/build/types/ios-widget/clientRenderedPrerender.d.ts.map +1 -0
- package/expo-plugin/build/types/ios-widget/files/index.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/files/manifest.d.ts +9 -0
- package/expo-plugin/build/types/ios-widget/files/manifest.d.ts.map +1 -0
- package/expo-plugin/build/types/ios-widget/files/swift.d.ts +6 -0
- package/expo-plugin/build/types/ios-widget/files/swift.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/widgetPlist.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts +5 -0
- package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts.map +1 -1
- package/expo-plugin/build/types/ios-widget/xcode/index.d.ts +2 -0
- package/expo-plugin/build/types/ios-widget/xcode/index.d.ts.map +1 -1
- package/expo-plugin/build/types/types.d.ts +30 -2
- package/expo-plugin/build/types/types.d.ts.map +1 -1
- package/expo-plugin/build/types/validation.d.ts +2 -2
- package/expo-plugin/build/types/validation.d.ts.map +1 -1
- package/expo-plugin/src/index.ts +3 -2
- package/expo-plugin/src/ios-widget/clientRendered.ts +88 -0
- package/expo-plugin/src/ios-widget/clientRenderedPrerender.ts +103 -0
- package/expo-plugin/src/ios-widget/files/index.ts +7 -0
- package/expo-plugin/src/ios-widget/files/manifest.ts +47 -0
- package/expo-plugin/src/ios-widget/files/swift.ts +166 -15
- package/expo-plugin/src/ios-widget/index.ts +1 -1
- package/expo-plugin/src/ios-widget/widgetPlist.ts +22 -0
- package/expo-plugin/src/ios-widget/xcode/buildPhases.ts +93 -0
- package/expo-plugin/src/ios-widget/xcode/index.ts +19 -2
- package/expo-plugin/src/types.ts +32 -2
- package/expo-plugin/src/validation.ts +14 -5
- package/ios/app/VoltraModuleImpl.swift +26 -1
- package/ios/shared/VoltraConstants.swift +4 -0
- package/ios/shared/VoltraJSRenderer.swift +201 -0
- package/ios/shared/VoltraWidgetDefaults.swift +14 -0
- package/ios/target/VoltraClientWidgetRuntime.swift +379 -0
- package/package.json +5 -16
- package/src/index.ts +1 -0
- package/src/utils/enableWidgetHotReload.ts +39 -0
package/README.md
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
- **iOS Widgets**: Update, schedule, reload, and query widgets with `updateWidget`, `scheduleWidget`, `getActiveWidgets`, and more.
|
|
14
14
|
|
|
15
|
+
- **Client-rendered widgets** _(experimental)_: Declare a widget in app.json with an `id` and `entry`, default-export the widget module, and render it on-device with live env (family, color scheme, locale, configuration).
|
|
16
|
+
|
|
15
17
|
- **Fast Refresh**: Hooks and previews integrate with your React Native dev workflow.
|
|
16
18
|
|
|
17
19
|
- **Push & events**: Capture ActivityKit push tokens and component interactions via `addVoltraListener`.
|
|
@@ -20,6 +22,23 @@
|
|
|
20
22
|
|
|
21
23
|
- **Expo config plugin**: Add `"@use-voltra/ios-client"` to `app.json` to generate the Live Activity extension, widget targets, and entitlements.
|
|
22
24
|
|
|
25
|
+
## Client-rendered widgets (experimental)
|
|
26
|
+
|
|
27
|
+
> [!WARNING]
|
|
28
|
+
> Client-rendered widgets are **experimental** — usable in production at your own risk. The API may
|
|
29
|
+
> change between releases.
|
|
30
|
+
|
|
31
|
+
Declare the widget in app.json with a stable `id` and a project-relative `entry` path. The entry
|
|
32
|
+
module must default-export the widget function or component; the exported name does not need to
|
|
33
|
+
match the widget id. The widget renders on-device, so it can react to live environment values
|
|
34
|
+
(widget family, color scheme, locale, and user `configuration` from the native Edit Widget sheet).
|
|
35
|
+
|
|
36
|
+
Notes:
|
|
37
|
+
|
|
38
|
+
- iOS and Android widget declarations stay separate, and the same widget id can exist on both platforms as separate entries.
|
|
39
|
+
- Verify release rendering on a **real device** — the iOS Simulator is unreliable for widget
|
|
40
|
+
rendering.
|
|
41
|
+
|
|
23
42
|
## Documentation
|
|
24
43
|
|
|
25
44
|
The documentation is available at [use-voltra.dev](https://use-voltra.dev). Relevant topics for this package:
|
|
@@ -27,7 +46,7 @@ The documentation is available at [use-voltra.dev](https://use-voltra.dev). Rele
|
|
|
27
46
|
- [Installation](https://use-voltra.dev/getting-started/installation)
|
|
28
47
|
- [iOS Setup](https://use-voltra.dev/ios/setup)
|
|
29
48
|
- [Developing Live Activities](https://use-voltra.dev/ios/development/developing-live-activities)
|
|
30
|
-
- [Developing
|
|
49
|
+
- [Developing client-rendered widgets](https://use-voltra.dev/ios/development/dynamic-widgets)
|
|
31
50
|
- [Plugin Configuration](https://use-voltra.dev/ios/api/plugin-configuration)
|
|
32
51
|
- [API Reference](https://use-voltra.dev/ios/api/configuration)
|
|
33
52
|
|
package/build/commonjs/index.js
CHANGED
|
@@ -22,6 +22,7 @@ var _exportNames = {
|
|
|
22
22
|
preloadImages: true,
|
|
23
23
|
reloadLiveActivities: true,
|
|
24
24
|
assertRunningOnApple: true,
|
|
25
|
+
enableWidgetHotReload: true,
|
|
25
26
|
useUpdateOnHMR: true,
|
|
26
27
|
clearWidgetServerCredentials: true,
|
|
27
28
|
setWidgetServerCredentials: true,
|
|
@@ -86,6 +87,12 @@ Object.defineProperty(exports, "clearWidgetServerCredentials", {
|
|
|
86
87
|
return _serverCredentials.clearWidgetServerCredentials;
|
|
87
88
|
}
|
|
88
89
|
});
|
|
90
|
+
Object.defineProperty(exports, "enableWidgetHotReload", {
|
|
91
|
+
enumerable: true,
|
|
92
|
+
get: function () {
|
|
93
|
+
return _enableWidgetHotReload.enableWidgetHotReload;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
89
96
|
Object.defineProperty(exports, "endAllLiveActivities", {
|
|
90
97
|
enumerable: true,
|
|
91
98
|
get: function () {
|
|
@@ -215,6 +222,7 @@ var _logger = require("./logger.js");
|
|
|
215
222
|
var _api = require("./live-activity/api.js");
|
|
216
223
|
var _preload = require("./preload.js");
|
|
217
224
|
var _assertRunningOnApple = require("./utils/assertRunningOnApple.js");
|
|
225
|
+
var _enableWidgetHotReload = require("./utils/enableWidgetHotReload.js");
|
|
218
226
|
var _useUpdateOnHMR = require("./utils/useUpdateOnHMR.js");
|
|
219
227
|
var _helpers2 = require("./utils/helpers.js");
|
|
220
228
|
Object.keys(_helpers2).forEach(function (key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_ios","require","_VoltraLiveActivityPreview","_VoltraView","_VoltraWidgetPreview","_events","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_helpers","_logger","_api","_preload","_assertRunningOnApple","_useUpdateOnHMR","_helpers2","_serverCredentials","_widgetApi"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_ios","require","_VoltraLiveActivityPreview","_VoltraView","_VoltraWidgetPreview","_events","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_helpers","_logger","_api","_preload","_assertRunningOnApple","_enableWidgetHotReload","_useUpdateOnHMR","_helpers2","_serverCredentials","_widgetApi"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAD,OAAA;AAIA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAF,OAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,OAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,OAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,QAAA,GAAAjB,OAAA;AACA,IAAAkB,OAAA,GAAAlB,OAAA;AACA,IAAAmB,IAAA,GAAAnB,OAAA;AAeA,IAAAoB,QAAA,GAAApB,OAAA;AAOA,IAAAqB,qBAAA,GAAArB,OAAA;AACA,IAAAsB,sBAAA,GAAAtB,OAAA;AACA,IAAAuB,eAAA,GAAAvB,OAAA;AACA,IAAAwB,SAAA,GAAAxB,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAkB,SAAA,EAAAjB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAgB,SAAA,CAAAhB,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAQ,SAAA,CAAAhB,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAiB,kBAAA,GAAAzB,OAAA;AAMA,IAAA0B,UAAA,GAAA1B,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.enableWidgetHotReload = enableWidgetHotReload;
|
|
7
|
+
var _widgetApi = require("../widgets/widget-api.js");
|
|
8
|
+
/**
|
|
9
|
+
* Trigger `reloadWidgets()` on every Metro Fast Refresh patch (DEV only).
|
|
10
|
+
*
|
|
11
|
+
* Hooks the global `__accept` callback Metro fires when a Fast Refresh patch
|
|
12
|
+
* lands in the host app's JS runtime. When fired, calls
|
|
13
|
+
* `WidgetCenter.shared.reloadAllTimelines()` so WidgetKit re-invokes each widget
|
|
14
|
+
* Provider, which re-fetches the freshest bundle from Metro and renders the
|
|
15
|
+
* updated UI.
|
|
16
|
+
*
|
|
17
|
+
* Only effective while the host app's JS thread is alive — iOS suspends the
|
|
18
|
+
* RN runtime within ~5 seconds of backgrounding, so the "edit while staring at
|
|
19
|
+
* the home screen, never touch the host app" case is not covered. For that
|
|
20
|
+
* workflow the dev still relies on WidgetKit's natural lifecycle refresh on
|
|
21
|
+
* app foreground.
|
|
22
|
+
*
|
|
23
|
+
* Call once at app startup. Returns `dispose()` to restore the prior
|
|
24
|
+
* `__accept` (rarely needed in practice). No-op in release builds.
|
|
25
|
+
*/
|
|
26
|
+
function enableWidgetHotReload() {
|
|
27
|
+
if (!__DEV__) {
|
|
28
|
+
return () => {};
|
|
29
|
+
}
|
|
30
|
+
const oldAccept = global['__accept'];
|
|
31
|
+
global['__accept'] = (...args) => {
|
|
32
|
+
void (0, _widgetApi.reloadWidgets)();
|
|
33
|
+
oldAccept?.(...args);
|
|
34
|
+
};
|
|
35
|
+
return () => {
|
|
36
|
+
global['__accept'] = oldAccept;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=enableWidgetHotReload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_widgetApi","require","enableWidgetHotReload","__DEV__","oldAccept","global","args","reloadWidgets"],"sourceRoot":"../../../src","sources":["utils/enableWidgetHotReload.ts"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAAA,EAAe;EAClD,IAAI,CAACC,OAAO,EAAE;IACZ,OAAO,MAAM,CAAC,CAAC;EACjB;EAEA,MAAMC,SAAS,GAAGC,MAAM,CAAC,UAAU,CAAC;EACpCA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAGC,IAAI,KAAK;IAChC,KAAK,IAAAC,wBAAa,EAAC,CAAC;IACpBH,SAAS,GAAG,GAAGE,IAAI,CAAC;EACtB,CAAC;EAED,OAAO,MAAM;IACXD,MAAM,CAAC,UAAU,CAAC,GAAGD,SAAS;EAChC,CAAC;AACH","ignoreList":[]}
|
package/build/module/index.js
CHANGED
|
@@ -10,6 +10,7 @@ export { logger } from './logger.js';
|
|
|
10
10
|
export { endAllLiveActivities, isLiveActivityActive, startLiveActivity, stopLiveActivity, updateLiveActivity, useLiveActivity } from './live-activity/api.js';
|
|
11
11
|
export { clearPreloadedImages, preloadImages, reloadLiveActivities } from './preload.js';
|
|
12
12
|
export { assertRunningOnApple } from './utils/assertRunningOnApple.js';
|
|
13
|
+
export { enableWidgetHotReload } from './utils/enableWidgetHotReload.js';
|
|
13
14
|
export { useUpdateOnHMR } from './utils/useUpdateOnHMR.js';
|
|
14
15
|
export * from './utils/helpers.js';
|
|
15
16
|
export { clearWidgetServerCredentials, setWidgetServerCredentials } from './widgets/server-credentials.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Voltra","VoltraLiveActivityPreview","VoltraView","VoltraWidgetPreview","isGlassSupported","isHeadless","useIsHeadless","logger","endAllLiveActivities","isLiveActivityActive","startLiveActivity","stopLiveActivity","updateLiveActivity","useLiveActivity","clearPreloadedImages","preloadImages","reloadLiveActivities","assertRunningOnApple","useUpdateOnHMR","clearWidgetServerCredentials","setWidgetServerCredentials","clearAllWidgets","clearWidget","getActiveWidgets","reloadWidgets","scheduleWidget","updateWidget"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,iBAAiB;AACxC,SACEC,yBAAyB,QAEpB,2CAA2C;AAClD,SAASC,UAAU,QAA8B,4BAA4B;AAC7E,SAASC,mBAAmB,QAAuC,qCAAqC;AACxG,cAAc,aAAa;AAC3B,SAASC,gBAAgB,EAAEC,UAAU,EAAEC,aAAa,QAAQ,cAAc;AAC1E,SAASC,MAAM,QAA6B,aAAa;AACzD,SACEC,oBAAoB,EAEpBC,oBAAoB,EAEpBC,iBAAiB,EAEjBC,gBAAgB,EAChBC,kBAAkB,EAElBC,eAAe,QAGV,wBAAwB;AAE/B,SACEC,oBAAoB,EAEpBC,aAAa,EAEbC,oBAAoB,QACf,cAAc;AACrB,SAASC,oBAAoB,QAAQ,iCAAiC;AACtE,SAASC,cAAc,QAAQ,2BAA2B;AAC1D,cAAc,oBAAoB;AAElC,SACEC,4BAA4B,EAC5BC,0BAA0B,QAErB,iCAAiC;AAExC,SACEC,eAAe,EACfC,WAAW,EACXC,gBAAgB,EAChBC,aAAa,EAEbC,cAAc,EACdC,YAAY,QAEP,yBAAyB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Voltra","VoltraLiveActivityPreview","VoltraView","VoltraWidgetPreview","isGlassSupported","isHeadless","useIsHeadless","logger","endAllLiveActivities","isLiveActivityActive","startLiveActivity","stopLiveActivity","updateLiveActivity","useLiveActivity","clearPreloadedImages","preloadImages","reloadLiveActivities","assertRunningOnApple","enableWidgetHotReload","useUpdateOnHMR","clearWidgetServerCredentials","setWidgetServerCredentials","clearAllWidgets","clearWidget","getActiveWidgets","reloadWidgets","scheduleWidget","updateWidget"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,iBAAiB;AACxC,SACEC,yBAAyB,QAEpB,2CAA2C;AAClD,SAASC,UAAU,QAA8B,4BAA4B;AAC7E,SAASC,mBAAmB,QAAuC,qCAAqC;AACxG,cAAc,aAAa;AAC3B,SAASC,gBAAgB,EAAEC,UAAU,EAAEC,aAAa,QAAQ,cAAc;AAC1E,SAASC,MAAM,QAA6B,aAAa;AACzD,SACEC,oBAAoB,EAEpBC,oBAAoB,EAEpBC,iBAAiB,EAEjBC,gBAAgB,EAChBC,kBAAkB,EAElBC,eAAe,QAGV,wBAAwB;AAE/B,SACEC,oBAAoB,EAEpBC,aAAa,EAEbC,oBAAoB,QACf,cAAc;AACrB,SAASC,oBAAoB,QAAQ,iCAAiC;AACtE,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,cAAc,QAAQ,2BAA2B;AAC1D,cAAc,oBAAoB;AAElC,SACEC,4BAA4B,EAC5BC,0BAA0B,QAErB,iCAAiC;AAExC,SACEC,eAAe,EACfC,WAAW,EACXC,gBAAgB,EAChBC,aAAa,EAEbC,cAAc,EACdC,YAAY,QAEP,yBAAyB","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { reloadWidgets } from '../widgets/widget-api.js';
|
|
4
|
+
/**
|
|
5
|
+
* Trigger `reloadWidgets()` on every Metro Fast Refresh patch (DEV only).
|
|
6
|
+
*
|
|
7
|
+
* Hooks the global `__accept` callback Metro fires when a Fast Refresh patch
|
|
8
|
+
* lands in the host app's JS runtime. When fired, calls
|
|
9
|
+
* `WidgetCenter.shared.reloadAllTimelines()` so WidgetKit re-invokes each widget
|
|
10
|
+
* Provider, which re-fetches the freshest bundle from Metro and renders the
|
|
11
|
+
* updated UI.
|
|
12
|
+
*
|
|
13
|
+
* Only effective while the host app's JS thread is alive — iOS suspends the
|
|
14
|
+
* RN runtime within ~5 seconds of backgrounding, so the "edit while staring at
|
|
15
|
+
* the home screen, never touch the host app" case is not covered. For that
|
|
16
|
+
* workflow the dev still relies on WidgetKit's natural lifecycle refresh on
|
|
17
|
+
* app foreground.
|
|
18
|
+
*
|
|
19
|
+
* Call once at app startup. Returns `dispose()` to restore the prior
|
|
20
|
+
* `__accept` (rarely needed in practice). No-op in release builds.
|
|
21
|
+
*/
|
|
22
|
+
export function enableWidgetHotReload() {
|
|
23
|
+
if (!__DEV__) {
|
|
24
|
+
return () => {};
|
|
25
|
+
}
|
|
26
|
+
const oldAccept = global['__accept'];
|
|
27
|
+
global['__accept'] = (...args) => {
|
|
28
|
+
void reloadWidgets();
|
|
29
|
+
oldAccept?.(...args);
|
|
30
|
+
};
|
|
31
|
+
return () => {
|
|
32
|
+
global['__accept'] = oldAccept;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=enableWidgetHotReload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["reloadWidgets","enableWidgetHotReload","__DEV__","oldAccept","global","args"],"sourceRoot":"../../../src","sources":["utils/enableWidgetHotReload.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,0BAA0B;AAMxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CAAA,EAAe;EAClD,IAAI,CAACC,OAAO,EAAE;IACZ,OAAO,MAAM,CAAC,CAAC;EACjB;EAEA,MAAMC,SAAS,GAAGC,MAAM,CAAC,UAAU,CAAC;EACpCA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAGC,IAAI,KAAK;IAChC,KAAKL,aAAa,CAAC,CAAC;IACpBG,SAAS,GAAG,GAAGE,IAAI,CAAC;EACtB,CAAC;EAED,OAAO,MAAM;IACXD,MAAM,CAAC,UAAU,CAAC,GAAGD,SAAS;EAChC,CAAC;AACH","ignoreList":[]}
|
|
@@ -9,6 +9,7 @@ export { endAllLiveActivities, type EndLiveActivityOptions, isLiveActivityActive
|
|
|
9
9
|
export type { DismissalPolicy, LiveActivityVariants } from '@use-voltra/ios';
|
|
10
10
|
export { clearPreloadedImages, type PreloadImageOptions, preloadImages, type PreloadImagesResult, reloadLiveActivities, } from './preload.js';
|
|
11
11
|
export { assertRunningOnApple } from './utils/assertRunningOnApple.js';
|
|
12
|
+
export { enableWidgetHotReload } from './utils/enableWidgetHotReload.js';
|
|
12
13
|
export { useUpdateOnHMR } from './utils/useUpdateOnHMR.js';
|
|
13
14
|
export * from './utils/helpers.js';
|
|
14
15
|
export type { VoltraElementJson, VoltraNodeJson } from './types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,2CAA2C,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AACxG,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,aAAa,EACb,KAAK,mBAAmB,EACxB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,cAAc,oBAAoB,CAAA;AAClC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AACxC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EACL,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,oBAAoB,EACzB,cAAc,EACd,YAAY,EACZ,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,2CAA2C,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AACxG,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,aAAa,EACb,KAAK,mBAAmB,EACxB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,cAAc,oBAAoB,CAAA;AAClC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AACxC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EACL,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,oBAAoB,EACzB,cAAc,EACd,YAAY,EACZ,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
var __accept: (...args: unknown[]) => void;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Trigger `reloadWidgets()` on every Metro Fast Refresh patch (DEV only).
|
|
6
|
+
*
|
|
7
|
+
* Hooks the global `__accept` callback Metro fires when a Fast Refresh patch
|
|
8
|
+
* lands in the host app's JS runtime. When fired, calls
|
|
9
|
+
* `WidgetCenter.shared.reloadAllTimelines()` so WidgetKit re-invokes each widget
|
|
10
|
+
* Provider, which re-fetches the freshest bundle from Metro and renders the
|
|
11
|
+
* updated UI.
|
|
12
|
+
*
|
|
13
|
+
* Only effective while the host app's JS thread is alive — iOS suspends the
|
|
14
|
+
* RN runtime within ~5 seconds of backgrounding, so the "edit while staring at
|
|
15
|
+
* the home screen, never touch the host app" case is not covered. For that
|
|
16
|
+
* workflow the dev still relies on WidgetKit's natural lifecycle refresh on
|
|
17
|
+
* app foreground.
|
|
18
|
+
*
|
|
19
|
+
* Call once at app startup. Returns `dispose()` to restore the prior
|
|
20
|
+
* `__accept` (rarely needed in practice). No-op in release builds.
|
|
21
|
+
*/
|
|
22
|
+
export declare function enableWidgetHotReload(): () => void;
|
|
23
|
+
//# sourceMappingURL=enableWidgetHotReload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableWidgetHotReload.d.ts","sourceRoot":"","sources":["../../../../src/utils/enableWidgetHotReload.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CAC3C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,IAAI,CAclD"}
|
|
@@ -9,6 +9,7 @@ export { endAllLiveActivities, type EndLiveActivityOptions, isLiveActivityActive
|
|
|
9
9
|
export type { DismissalPolicy, LiveActivityVariants } from '@use-voltra/ios';
|
|
10
10
|
export { clearPreloadedImages, type PreloadImageOptions, preloadImages, type PreloadImagesResult, reloadLiveActivities, } from './preload.js';
|
|
11
11
|
export { assertRunningOnApple } from './utils/assertRunningOnApple.js';
|
|
12
|
+
export { enableWidgetHotReload } from './utils/enableWidgetHotReload.js';
|
|
12
13
|
export { useUpdateOnHMR } from './utils/useUpdateOnHMR.js';
|
|
13
14
|
export * from './utils/helpers.js';
|
|
14
15
|
export type { VoltraElementJson, VoltraNodeJson } from './types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,2CAA2C,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AACxG,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,aAAa,EACb,KAAK,mBAAmB,EACxB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,cAAc,oBAAoB,CAAA;AAClC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AACxC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EACL,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,oBAAoB,EACzB,cAAc,EACd,YAAY,EACZ,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,2CAA2C,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AACxG,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,aAAa,EACb,KAAK,mBAAmB,EACxB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,cAAc,oBAAoB,CAAA;AAClC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AACxC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EACL,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,oBAAoB,EACzB,cAAc,EACd,YAAY,EACZ,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
var __accept: (...args: unknown[]) => void;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Trigger `reloadWidgets()` on every Metro Fast Refresh patch (DEV only).
|
|
6
|
+
*
|
|
7
|
+
* Hooks the global `__accept` callback Metro fires when a Fast Refresh patch
|
|
8
|
+
* lands in the host app's JS runtime. When fired, calls
|
|
9
|
+
* `WidgetCenter.shared.reloadAllTimelines()` so WidgetKit re-invokes each widget
|
|
10
|
+
* Provider, which re-fetches the freshest bundle from Metro and renders the
|
|
11
|
+
* updated UI.
|
|
12
|
+
*
|
|
13
|
+
* Only effective while the host app's JS thread is alive — iOS suspends the
|
|
14
|
+
* RN runtime within ~5 seconds of backgrounding, so the "edit while staring at
|
|
15
|
+
* the home screen, never touch the host app" case is not covered. For that
|
|
16
|
+
* workflow the dev still relies on WidgetKit's natural lifecycle refresh on
|
|
17
|
+
* app foreground.
|
|
18
|
+
*
|
|
19
|
+
* Call once at app startup. Returns `dispose()` to restore the prior
|
|
20
|
+
* `__accept` (rarely needed in practice). No-op in release builds.
|
|
21
|
+
*/
|
|
22
|
+
export declare function enableWidgetHotReload(): () => void;
|
|
23
|
+
//# sourceMappingURL=enableWidgetHotReload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableWidgetHotReload.d.ts","sourceRoot":"","sources":["../../../../src/utils/enableWidgetHotReload.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CAC3C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,IAAI,CAclD"}
|
|
@@ -12,7 +12,8 @@ const validation_1 = require("./validation");
|
|
|
12
12
|
* Configures Live Activities, the widget extension, and optional push-to-start support.
|
|
13
13
|
*/
|
|
14
14
|
const withVoltraIos = (config, props = {}) => {
|
|
15
|
-
|
|
15
|
+
const projectRoot = config.modRequest?.projectRoot;
|
|
16
|
+
(0, validation_1.validateIOSConfigPluginProps)(props, projectRoot);
|
|
16
17
|
const iosBundleIdentifier = config.ios?.bundleIdentifier;
|
|
17
18
|
if (!iosBundleIdentifier) {
|
|
18
19
|
return config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,wDAA+C;AAE/C,2CAAiC;AACjC,+BAAsD;AACtD,6CAAuD;AAEvD,iDAAmD;AACnD,6CAA2D;AAE3D;;;;GAIG;AACH,MAAM,aAAa,GAA0B,CAAC,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE;IAClE,IAAA,yCAA4B,EAAC,KAAK,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,wDAA+C;AAE/C,2CAAiC;AACjC,+BAAsD;AACtD,6CAAuD;AAEvD,iDAAmD;AACnD,6CAA2D;AAE3D;;;;GAIG;AACH,MAAM,aAAa,GAA0B,CAAC,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE;IAClE,MAAM,WAAW,GAAI,MAAoD,CAAC,UAAU,EAAE,WAAW,CAAA;IACjG,IAAA,yCAA4B,EAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAEhD,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAA;IACxD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,eAAG,CAAC,iBAAiB,CAAA;IACxE,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,0BAAS,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAA;IACvG,MAAM,gBAAgB,GAAG,GAAG,mBAAmB,IAAI,UAAU,EAAE,CAAA;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,CAAA;IACzC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,EAAE,WAAW,IAAI,GAAG,CAAA;IAElD,MAAM,GAAG,IAAA,2BAAe,EAAC,MAAM,CAAC,CAAA;IAEhC,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,KAAK,CAAA;IAClF,MAAM,aAAa,GACjB,KAAK,CAAC,aAAa,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,yBAAyB,mBAAmB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAE9G,MAAM,GAAG,IAAA,aAAO,EAAC,MAAM,EAAE;QACvB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,SAAS,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QACjG,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,aAAa;KACd,CAAC,CAAA;IAEF,MAAM,GAAG,IAAA,oBAAa,EAAC,MAAM,EAAE;QAC7B,UAAU;QACV,gBAAgB;QAChB,gBAAgB;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO;QACP,WAAW;QACX,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/C,CAAC,CAAA;IAEF,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAClC,MAAM,GAAG,IAAA,2BAAqB,EAAC,MAAM,CAAC,CAAA;IACxC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,kBAAe,aAAa,CAAA"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.detectClientRenderedWidgets = detectClientRenderedWidgets;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const expo_plugin_1 = require("@use-voltra/expo-plugin");
|
|
40
|
+
// Emit the experimental notice at most once per prebuild process (detection runs from several
|
|
41
|
+
// plugin steps).
|
|
42
|
+
let hasWarnedExperimental = false;
|
|
43
|
+
/** Inspect every widget once and tag entry-backed widgets as Dynamic Widgets. */
|
|
44
|
+
function detectClientRenderedWidgets(widgets, projectRoot) {
|
|
45
|
+
const detected = widgets.map((widget) => detectSingleWidget(widget, projectRoot));
|
|
46
|
+
if (!hasWarnedExperimental) {
|
|
47
|
+
const clientWidgetIds = detected.filter((widget) => widget.clientRendered).map((widget) => widget.id);
|
|
48
|
+
if (clientWidgetIds.length > 0) {
|
|
49
|
+
hasWarnedExperimental = true;
|
|
50
|
+
console.warn(`[voltra] Dynamic Widgets are EXPERIMENTAL (${clientWidgetIds.join(', ')}). ` +
|
|
51
|
+
'The widget JSX runs on-device in a separate JS engine; the API and build output may change, ' +
|
|
52
|
+
'and production rendering should be verified on a real device. Use at your own risk.');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return detected;
|
|
56
|
+
}
|
|
57
|
+
function detectSingleWidget(widget, projectRoot) {
|
|
58
|
+
if (widget.entry === undefined) {
|
|
59
|
+
return {
|
|
60
|
+
...widget,
|
|
61
|
+
clientRendered: false,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const sourcePath = resolveWidgetEntryPath(widget.entry, projectRoot);
|
|
65
|
+
if (!sourcePath || !fs.existsSync(sourcePath)) {
|
|
66
|
+
throw new Error(`[voltra] Dynamic Widget "${widget.id}" entry not found at ${path.relative(projectRoot, sourcePath ?? widget.entry)}`);
|
|
67
|
+
}
|
|
68
|
+
const widgetModule = (0, expo_plugin_1.evaluateWidgetModuleExports)(projectRoot, sourcePath);
|
|
69
|
+
const widgetFn = widgetModule?.default ?? widgetModule;
|
|
70
|
+
if (typeof widgetFn !== 'function') {
|
|
71
|
+
throw new Error(`[voltra] Dynamic Widget "${widget.id}" at ${path.relative(projectRoot, sourcePath)} must default-export a function or component.`);
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
...widget,
|
|
75
|
+
clientRendered: true,
|
|
76
|
+
clientSourcePath: sourcePath,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function resolveWidgetEntryPath(entry, projectRoot) {
|
|
80
|
+
return path.resolve(projectRoot, entry);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=clientRendered.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientRendered.js","sourceRoot":"","sources":["../../../src/ios-widget/clientRendered.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,kEAgBC;AA/CD,uCAAwB;AACxB,2CAA4B;AAE5B,yDAAqE;AAuBrE,8FAA8F;AAC9F,iBAAiB;AACjB,IAAI,qBAAqB,GAAG,KAAK,CAAA;AAEjC,iFAAiF;AACjF,SAAgB,2BAA2B,CAAC,OAA0B,EAAE,WAAmB;IACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;IAEjF,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACrG,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,qBAAqB,GAAG,IAAI,CAAA;YAC5B,OAAO,CAAC,IAAI,CACV,8CAA8C,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;gBAC3E,8FAA8F;gBAC9F,qFAAqF,CACxF,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAuB,EAAE,WAAmB;IACtE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,GAAG,MAAM;YACT,cAAc,EAAE,KAAK;SACtB,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IACpE,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,EAAE,wBAAwB,IAAI,CAAC,QAAQ,CACxE,WAAW,EACX,UAAU,IAAI,MAAM,CAAC,KAAK,CAC3B,EAAE,CACJ,CAAA;IACH,CAAC;IAED,MAAM,YAAY,GAAG,IAAA,yCAA2B,EAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACzE,MAAM,QAAQ,GAAG,YAAY,EAAE,OAAO,IAAI,YAAY,CAAA;IACtD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,EAAE,QAAQ,IAAI,CAAC,QAAQ,CACxD,WAAW,EACX,UAAU,CACX,+CAA+C,CACjD,CAAA;IACH,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,UAAU;KAC7B,CAAA;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa,EAAE,WAAmB;IAChE,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AACzC,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.prerenderClientRenderedWidgets = prerenderClientRenderedWidgets;
|
|
37
|
+
const expo_plugin_1 = require("@use-voltra/expo-plugin");
|
|
38
|
+
/**
|
|
39
|
+
* Initial-state prerender for Dynamic Widgets.
|
|
40
|
+
*
|
|
41
|
+
* For widgets with `initialStatePath`, the existing `prerenderWidgetState` in
|
|
42
|
+
* @use-voltra/expo-plugin loads the file and reads `exports.default` (a `WidgetVariants`
|
|
43
|
+
* object), then runs it through the multi-family `renderWidgetToString` to produce a
|
|
44
|
+
* per-family JSON payload that the runtime's `selectContentForFamily` will pick from.
|
|
45
|
+
*
|
|
46
|
+
* Dynamic Widgets work differently: the module referenced by `entry` default-exports a
|
|
47
|
+
* function or component, and the runtime calls it per-render with real env values. For the
|
|
48
|
+
* WidgetKit placeholder (`Provider.placeholder` and the widget gallery preview) ONE
|
|
49
|
+
* pre-rendered JSON entry is needed to display before any Metro fetch completes. That's
|
|
50
|
+
* generated here by calling the entry default export at prebuild with empty props + a
|
|
51
|
+
* minimal env, storing the compact `{t, c, p}` JSON in the existing `voltra_initial_states.json`.
|
|
52
|
+
*
|
|
53
|
+
* The placeholder's env values are fixed (`widgetFamily: 'systemMedium'`,
|
|
54
|
+
* `colorScheme: 'light'`, etc.) and may not match what the user actually sees the moment
|
|
55
|
+
* they add the widget — but the first real timeline tick replaces this entry within
|
|
56
|
+
* milliseconds, so the brief mismatch is invisible in practice.
|
|
57
|
+
*/
|
|
58
|
+
/** Locale key used for non-localized prerendered states (mirrors prerender.ts behavior). */
|
|
59
|
+
const SINGLE_LOCALE_KEY = '__default';
|
|
60
|
+
/**
|
|
61
|
+
* Default env passed to Dynamic Widgets at prebuild for the placeholder render. Fields
|
|
62
|
+
* mirror `WidgetEnvironment` from packages/core/src/widget-environment.ts so the widget
|
|
63
|
+
* function sees the same shape it gets at runtime.
|
|
64
|
+
*/
|
|
65
|
+
function buildPlaceholderEnv() {
|
|
66
|
+
return {
|
|
67
|
+
date: Date.now(),
|
|
68
|
+
widgetFamily: 'systemMedium',
|
|
69
|
+
colorScheme: 'light',
|
|
70
|
+
locale: 'en-US',
|
|
71
|
+
widgetRenderingMode: 'fullColor',
|
|
72
|
+
showsWidgetContainerBackground: true,
|
|
73
|
+
configuration: undefined,
|
|
74
|
+
build: {
|
|
75
|
+
isDev: false,
|
|
76
|
+
metroUrl: null,
|
|
77
|
+
appVersion: 'unknown',
|
|
78
|
+
voltraVersion: '1.4.1',
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Prerender placeholder JSON for every Dynamic Widget. Returns a map shaped
|
|
84
|
+
* identically to `prerenderWidgetState`'s output so the two can be merged before
|
|
85
|
+
* generating `VoltraWidgetInitialStates.swift`.
|
|
86
|
+
*/
|
|
87
|
+
async function prerenderClientRenderedWidgets(widgets, projectRoot) {
|
|
88
|
+
const results = new Map();
|
|
89
|
+
const clientWidgets = widgets.filter((w) => w.clientRendered);
|
|
90
|
+
if (clientWidgets.length === 0) {
|
|
91
|
+
return results;
|
|
92
|
+
}
|
|
93
|
+
// Lazy-loaded so server-only projects never pull in @use-voltra/ios. The renderer
|
|
94
|
+
// is iOS-specific by design — the Android counterpart will use the same shape via
|
|
95
|
+
// @use-voltra/android in a future phase.
|
|
96
|
+
const iosModuleId = '@use-voltra/ios';
|
|
97
|
+
const { renderVoltraVariantToJson } = (await Promise.resolve(`${iosModuleId}`).then(s => __importStar(require(s))));
|
|
98
|
+
const placeholderEnv = buildPlaceholderEnv();
|
|
99
|
+
for (const widget of clientWidgets) {
|
|
100
|
+
try {
|
|
101
|
+
const widgetModule = (0, expo_plugin_1.evaluateWidgetModuleExports)(projectRoot, widget.clientSourcePath);
|
|
102
|
+
const widgetFn = widgetModule?.default ?? widgetModule;
|
|
103
|
+
if (typeof widgetFn !== 'function') {
|
|
104
|
+
throw new Error(`Expected the entry module at ${widget.clientSourcePath} to default-export a function or component.`);
|
|
105
|
+
}
|
|
106
|
+
const element = widgetFn({}, placeholderEnv);
|
|
107
|
+
const json = renderVoltraVariantToJson(element);
|
|
108
|
+
const jsonString = JSON.stringify(json);
|
|
109
|
+
results.set(widget.id, new Map([[SINGLE_LOCALE_KEY, jsonString]]));
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
throw new Error(`Failed to prerender Dynamic Widget "${widget.id}": ${error instanceof Error ? error.message : String(error)}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
expo_plugin_1.logger.info(`Prerendered ${clientWidgets.length} Dynamic Widget placeholder(s)`);
|
|
116
|
+
return results;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=clientRenderedPrerender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientRenderedPrerender.js","sourceRoot":"","sources":["../../../src/ios-widget/clientRenderedPrerender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,wEA8CC;AAtGD,yDAA2G;AAI3G;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,4FAA4F;AAC5F,MAAM,iBAAiB,GAAG,WAAW,CAAA;AAErC;;;;GAIG;AACH,SAAS,mBAAmB;IAC1B,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;QAChB,YAAY,EAAE,cAAc;QAC5B,WAAW,EAAE,OAAO;QACpB,MAAM,EAAE,OAAO;QACf,mBAAmB,EAAE,WAAW;QAChC,8BAA8B,EAAE,IAAI;QACpC,aAAa,EAAE,SAAS;QACxB,KAAK,EAAE;YACL,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,SAAS;YACrB,aAAa,EAAE,OAAO;SACvB;KACF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,8BAA8B,CAClD,OAA4B,EAC5B,WAAmB;IAEnB,MAAM,OAAO,GAA4B,IAAI,GAAG,EAAE,CAAA;IAElD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAClC,CAAC,CAAC,EAA6D,EAAE,CAAC,CAAC,CAAC,cAAc,CACnF,CAAA;IACD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,kFAAkF;IAClF,kFAAkF;IAClF,yCAAyC;IACzC,MAAM,WAAW,GAAG,iBAAiB,CAAA;IACrC,MAAM,EAAE,yBAAyB,EAAE,GAAG,CAAC,yBAAa,WAAW,uCAAC,CAE/D,CAAA;IAED,MAAM,cAAc,GAAG,mBAAmB,EAAE,CAAA;IAE5C,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,yCAA2B,EAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;YACtF,MAAM,QAAQ,GAAG,YAAY,EAAE,OAAO,IAAI,YAAY,CAAA;YACtD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,gCAAgC,MAAM,CAAC,gBAAgB,6CAA6C,CACrG,CAAA;YACH,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;YAC5C,MAAM,IAAI,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAA;YAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,uCAAuC,MAAM,CAAC,EAAE,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/G,CAAA;QACH,CAAC;IACH,CAAC;IAED,oBAAM,CAAC,IAAI,CAAC,eAAe,aAAa,CAAC,MAAM,gCAAgC,CAAC,CAAA;IAChF,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -40,6 +40,7 @@ const path = __importStar(require("path"));
|
|
|
40
40
|
const assets_1 = require("./assets");
|
|
41
41
|
const entitlements_1 = require("./entitlements");
|
|
42
42
|
const infoPlist_1 = require("./infoPlist");
|
|
43
|
+
const manifest_1 = require("./manifest");
|
|
43
44
|
const swift_1 = require("./swift");
|
|
44
45
|
/**
|
|
45
46
|
* Plugin step that generates all widget extension files.
|
|
@@ -77,6 +78,11 @@ const generateWidgetExtensionFiles = (config, props) => {
|
|
|
77
78
|
projectRoot,
|
|
78
79
|
widgets,
|
|
79
80
|
});
|
|
81
|
+
// Write the iOS-owned Dynamic Widgets manifest for Metro to consume later.
|
|
82
|
+
(0, manifest_1.generateIOSDynamicWidgetsManifest)({
|
|
83
|
+
projectRoot,
|
|
84
|
+
widgets,
|
|
85
|
+
});
|
|
80
86
|
// Generate entitlements file (may be empty if no groupIdentifier or keychainGroup)
|
|
81
87
|
(0, entitlements_1.generateEntitlements)({
|
|
82
88
|
targetPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAqE;AACrE,uCAAwB;AACxB,2CAA4B;AAG5B,qCAAyC;AACzC,iDAAqD;AACrD,2CAA+C;AAC/C,mCAA4C;AAW5C;;;;;;;;;;;GAWG;AACI,MAAM,4BAA4B,GAAoD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IAC7G,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAE3F,OAAO,IAAA,iCAAgB,EAAC,MAAM,EAAE;QAC9B,KAAK;QACL,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBACjC,OAAO,MAAM,CAAA;YACf,CAAC;YAED,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,CAAA;YAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;YAE7D,iCAAiC;YACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,CAAC;YAED,sBAAsB;YACtB,IAAA,6BAAiB,EAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;YAE/D,gDAAgD;YAChD,IAAA,uBAAc,EAAC,EAAE,UAAU,EAAE,CAAC,CAAA;YAE9B,uDAAuD;YACvD,MAAM,IAAA,0BAAkB,EAAC;gBACvB,UAAU;gBACV,WAAW;gBACX,OAAO;aACR,CAAC,CAAA;YAEF,mFAAmF;YACnF,IAAA,mCAAoB,EAAC;gBACnB,UAAU;gBACV,UAAU;gBACV,eAAe;gBACf,aAAa;aACd,CAAC,CAAA;YAEF,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAqE;AACrE,uCAAwB;AACxB,2CAA4B;AAG5B,qCAAyC;AACzC,iDAAqD;AACrD,2CAA+C;AAC/C,yCAA8D;AAC9D,mCAA4C;AAW5C;;;;;;;;;;;GAWG;AACI,MAAM,4BAA4B,GAAoD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IAC7G,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAE3F,OAAO,IAAA,iCAAgB,EAAC,MAAM,EAAE;QAC9B,KAAK;QACL,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBACjC,OAAO,MAAM,CAAA;YACf,CAAC;YAED,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,CAAA;YAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;YAE7D,iCAAiC;YACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,CAAC;YAED,sBAAsB;YACtB,IAAA,6BAAiB,EAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;YAE/D,gDAAgD;YAChD,IAAA,uBAAc,EAAC,EAAE,UAAU,EAAE,CAAC,CAAA;YAE9B,uDAAuD;YACvD,MAAM,IAAA,0BAAkB,EAAC;gBACvB,UAAU;gBACV,WAAW;gBACX,OAAO;aACR,CAAC,CAAA;YAEF,2EAA2E;YAC3E,IAAA,4CAAiC,EAAC;gBAChC,WAAW;gBACX,OAAO;aACR,CAAC,CAAA;YAEF,mFAAmF;YACnF,IAAA,mCAAoB,EAAC;gBACnB,UAAU;gBACV,UAAU;gBACV,eAAe;gBACf,aAAa;aACd,CAAC,CAAA;YAEF,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAhDY,QAAA,4BAA4B,gCAgDxC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.createIOSDynamicWidgetsManifest = createIOSDynamicWidgetsManifest;
|
|
37
|
+
exports.generateIOSDynamicWidgetsManifest = generateIOSDynamicWidgetsManifest;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const expo_plugin_1 = require("@use-voltra/expo-plugin");
|
|
41
|
+
const MANIFEST_PATH = path.join('.voltra', 'manifest.ios.json');
|
|
42
|
+
function createIOSDynamicWidgetsManifest(projectRoot, widgets) {
|
|
43
|
+
const manifestWidgets = [];
|
|
44
|
+
for (const widget of widgets) {
|
|
45
|
+
if (widget.entry === undefined) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
manifestWidgets.push({
|
|
49
|
+
id: widget.id,
|
|
50
|
+
entry: (0, expo_plugin_1.validateWidgetEntry)(widget.entry, widget.id, projectRoot),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
version: 1,
|
|
55
|
+
platform: 'ios',
|
|
56
|
+
widgets: manifestWidgets,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function generateIOSDynamicWidgetsManifest(options) {
|
|
60
|
+
const { projectRoot, widgets } = options;
|
|
61
|
+
const manifestPath = path.join(projectRoot, MANIFEST_PATH);
|
|
62
|
+
const manifest = createIOSDynamicWidgetsManifest(projectRoot, widgets ?? []);
|
|
63
|
+
fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
|
|
64
|
+
fs.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
|
|
65
|
+
expo_plugin_1.logger.info(`Generated ${MANIFEST_PATH}`);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/manifest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,0EAsBC;AAED,8EAQC;AA9CD,uCAAwB;AACxB,2CAA4B;AAE5B,yDAAiG;AAIjG,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;AAO/D,SAAgB,+BAA+B,CAC7C,WAAmB,EACnB,OAA0B;IAE1B,MAAM,eAAe,GAAqC,EAAE,CAAA;IAE5D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAQ;QACV,CAAC;QAED,eAAe,CAAC,IAAI,CAAC;YACnB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,KAAK,EAAE,IAAA,iCAAmB,EAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC;SACjE,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,eAAe;KACzB,CAAA;AACH,CAAC;AAED,SAAgB,iCAAiC,CAAC,OAAiD;IACjG,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IACxC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;IAC1D,MAAM,QAAQ,GAAG,+BAA+B,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE,CAAC,CAAA;IAE5E,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;IACxE,oBAAM,CAAC,IAAI,CAAC,aAAa,aAAa,EAAE,CAAC,CAAA;AAC3C,CAAC"}
|