@pushframe/sdk 0.1.4 → 0.1.8
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/lib/commonjs/PushframeProvider.js +69 -0
- package/lib/commonjs/PushframeProvider.js.map +1 -0
- package/lib/commonjs/PushframeScreen.js +69 -0
- package/lib/commonjs/PushframeScreen.js.map +1 -0
- package/lib/commonjs/bindings.js +73 -0
- package/lib/commonjs/bindings.js.map +1 -0
- package/lib/commonjs/components/ButtonComponent.js +72 -0
- package/lib/commonjs/components/ButtonComponent.js.map +1 -0
- package/lib/commonjs/components/FlatListComponent.js +73 -0
- package/lib/commonjs/components/FlatListComponent.js.map +1 -0
- package/lib/commonjs/components/ImageComponent.js +67 -0
- package/lib/commonjs/components/ImageComponent.js.map +1 -0
- package/lib/commonjs/components/PushFrameComponent.js +179 -0
- package/lib/commonjs/components/PushFrameComponent.js.map +1 -0
- package/lib/commonjs/components/PushFrameProvider.js +115 -0
- package/lib/commonjs/components/PushFrameProvider.js.map +1 -0
- package/lib/commonjs/components/PushFrameScreen.js +39 -0
- package/lib/commonjs/components/PushFrameScreen.js.map +1 -0
- package/lib/commonjs/components/ScrollViewComponent.js +64 -0
- package/lib/commonjs/components/ScrollViewComponent.js.map +1 -0
- package/lib/commonjs/components/StackComponent.js +61 -0
- package/lib/commonjs/components/StackComponent.js.map +1 -0
- package/lib/commonjs/components/TextComponent.js +62 -0
- package/lib/commonjs/components/TextComponent.js.map +1 -0
- package/lib/commonjs/conditions.js +44 -0
- package/lib/commonjs/conditions.js.map +1 -0
- package/lib/commonjs/context/PushFrameContext.js +33 -0
- package/lib/commonjs/context/PushFrameContext.js.map +1 -0
- package/lib/commonjs/index.js +200 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/overlays/BottomSheetHost.js +144 -0
- package/lib/commonjs/overlays/BottomSheetHost.js.map +1 -0
- package/lib/commonjs/overlays/ToastHost.js +135 -0
- package/lib/commonjs/overlays/ToastHost.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/primitives/ActivityIndicator.js +24 -0
- package/lib/commonjs/primitives/ActivityIndicator.js.map +1 -0
- package/lib/commonjs/primitives/FlatList.js +34 -0
- package/lib/commonjs/primitives/FlatList.js.map +1 -0
- package/lib/commonjs/primitives/Image.js +33 -0
- package/lib/commonjs/primitives/Image.js.map +1 -0
- package/lib/commonjs/primitives/KeyboardAvoidingView.js +24 -0
- package/lib/commonjs/primitives/KeyboardAvoidingView.js.map +1 -0
- package/lib/commonjs/primitives/Modal.js +24 -0
- package/lib/commonjs/primitives/Modal.js.map +1 -0
- package/lib/commonjs/primitives/Pressable.js +26 -0
- package/lib/commonjs/primitives/Pressable.js.map +1 -0
- package/lib/commonjs/primitives/SafeAreaView.js +38 -0
- package/lib/commonjs/primitives/SafeAreaView.js.map +1 -0
- package/lib/commonjs/primitives/ScrollView.js +26 -0
- package/lib/commonjs/primitives/ScrollView.js.map +1 -0
- package/lib/commonjs/primitives/StatusBar.js +24 -0
- package/lib/commonjs/primitives/StatusBar.js.map +1 -0
- package/lib/commonjs/primitives/Switch.js +28 -0
- package/lib/commonjs/primitives/Switch.js.map +1 -0
- package/lib/commonjs/primitives/Text.js +37 -0
- package/lib/commonjs/primitives/Text.js.map +1 -0
- package/lib/commonjs/primitives/TextInput.js +31 -0
- package/lib/commonjs/primitives/TextInput.js.map +1 -0
- package/lib/commonjs/primitives/View.js +24 -0
- package/lib/commonjs/primitives/View.js.map +1 -0
- package/lib/commonjs/primitives/index.js +97 -0
- package/lib/commonjs/primitives/index.js.map +1 -0
- package/lib/commonjs/registry/ComponentRegistry.js +70 -0
- package/lib/commonjs/registry/ComponentRegistry.js.map +1 -0
- package/lib/commonjs/registry.js +94 -0
- package/lib/commonjs/registry.js.map +1 -0
- package/lib/commonjs/renderer/RecursiveRenderer.js +202 -0
- package/lib/commonjs/renderer/RecursiveRenderer.js.map +1 -0
- package/lib/commonjs/renderer/bindingResolver.js +98 -0
- package/lib/commonjs/renderer/bindingResolver.js.map +1 -0
- package/lib/commonjs/renderer/conditionalEvaluator.js +31 -0
- package/lib/commonjs/renderer/conditionalEvaluator.js.map +1 -0
- package/lib/commonjs/renderer.js +107 -0
- package/lib/commonjs/renderer.js.map +1 -0
- package/lib/commonjs/schema.js +79 -0
- package/lib/commonjs/schema.js.map +1 -0
- package/lib/commonjs/transformer/index.js +1055 -0
- package/lib/commonjs/transformer/index.js.map +1 -0
- package/lib/commonjs/transport.js +86 -0
- package/lib/commonjs/transport.js.map +1 -0
- package/lib/module/PushframeProvider.js +62 -0
- package/lib/module/PushframeProvider.js.map +1 -0
- package/lib/module/PushframeScreen.js +65 -0
- package/lib/module/PushframeScreen.js.map +1 -0
- package/lib/module/bindings.js +68 -0
- package/lib/module/bindings.js.map +1 -0
- package/lib/module/components/ButtonComponent.js +67 -0
- package/lib/module/components/ButtonComponent.js.map +1 -0
- package/lib/module/components/FlatListComponent.js +68 -0
- package/lib/module/components/FlatListComponent.js.map +1 -0
- package/lib/module/components/ImageComponent.js +62 -0
- package/lib/module/components/ImageComponent.js.map +1 -0
- package/lib/module/components/PushFrameComponent.js +174 -0
- package/lib/module/components/PushFrameComponent.js.map +1 -0
- package/lib/module/components/PushFrameProvider.js +110 -0
- package/lib/module/components/PushFrameProvider.js.map +1 -0
- package/lib/module/components/PushFrameScreen.js +34 -0
- package/lib/module/components/PushFrameScreen.js.map +1 -0
- package/lib/module/components/ScrollViewComponent.js +59 -0
- package/lib/module/components/ScrollViewComponent.js.map +1 -0
- package/lib/module/components/StackComponent.js +56 -0
- package/lib/module/components/StackComponent.js.map +1 -0
- package/lib/module/components/TextComponent.js +57 -0
- package/lib/module/components/TextComponent.js.map +1 -0
- package/lib/module/conditions.js +40 -0
- package/lib/module/conditions.js.map +1 -0
- package/lib/module/context/PushFrameContext.js +29 -0
- package/lib/module/context/PushFrameContext.js.map +1 -0
- package/lib/module/index.js +99 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/overlays/BottomSheetHost.js +139 -0
- package/lib/module/overlays/BottomSheetHost.js.map +1 -0
- package/lib/module/overlays/ToastHost.js +130 -0
- package/lib/module/overlays/ToastHost.js.map +1 -0
- package/lib/module/primitives/ActivityIndicator.js +19 -0
- package/lib/module/primitives/ActivityIndicator.js.map +1 -0
- package/lib/module/primitives/FlatList.js +29 -0
- package/lib/module/primitives/FlatList.js.map +1 -0
- package/lib/module/primitives/Image.js +28 -0
- package/lib/module/primitives/Image.js.map +1 -0
- package/lib/module/primitives/KeyboardAvoidingView.js +19 -0
- package/lib/module/primitives/KeyboardAvoidingView.js.map +1 -0
- package/lib/module/primitives/Modal.js +19 -0
- package/lib/module/primitives/Modal.js.map +1 -0
- package/lib/module/primitives/Pressable.js +21 -0
- package/lib/module/primitives/Pressable.js.map +1 -0
- package/lib/module/primitives/SafeAreaView.js +33 -0
- package/lib/module/primitives/SafeAreaView.js.map +1 -0
- package/lib/module/primitives/ScrollView.js +21 -0
- package/lib/module/primitives/ScrollView.js.map +1 -0
- package/lib/module/primitives/StatusBar.js +19 -0
- package/lib/module/primitives/StatusBar.js.map +1 -0
- package/lib/module/primitives/Switch.js +23 -0
- package/lib/module/primitives/Switch.js.map +1 -0
- package/lib/module/primitives/Text.js +32 -0
- package/lib/module/primitives/Text.js.map +1 -0
- package/lib/module/primitives/TextInput.js +26 -0
- package/lib/module/primitives/TextInput.js.map +1 -0
- package/lib/module/primitives/View.js +19 -0
- package/lib/module/primitives/View.js.map +1 -0
- package/lib/module/primitives/index.js +16 -0
- package/lib/module/primitives/index.js.map +1 -0
- package/lib/module/registry/ComponentRegistry.js +66 -0
- package/lib/module/registry/ComponentRegistry.js.map +1 -0
- package/lib/module/registry.js +88 -0
- package/lib/module/registry.js.map +1 -0
- package/lib/module/renderer/RecursiveRenderer.js +197 -0
- package/lib/module/renderer/RecursiveRenderer.js.map +1 -0
- package/lib/module/renderer/bindingResolver.js +92 -0
- package/lib/module/renderer/bindingResolver.js.map +1 -0
- package/lib/module/renderer/conditionalEvaluator.js +28 -0
- package/lib/module/renderer/conditionalEvaluator.js.map +1 -0
- package/lib/module/renderer.js +103 -0
- package/lib/module/renderer.js.map +1 -0
- package/lib/module/schema.js +74 -0
- package/lib/module/schema.js.map +1 -0
- package/lib/module/transformer/index.js +1051 -0
- package/lib/module/transformer/index.js.map +1 -0
- package/lib/module/transport.js +82 -0
- package/lib/module/transport.js.map +1 -0
- package/lib/typescript/PushframeProvider.d.ts +58 -0
- package/lib/typescript/PushframeProvider.d.ts.map +1 -0
- package/lib/typescript/PushframeScreen.d.ts +36 -0
- package/lib/typescript/PushframeScreen.d.ts.map +1 -0
- package/lib/typescript/bindings.d.ts +29 -0
- package/lib/typescript/bindings.d.ts.map +1 -0
- package/lib/typescript/components/ButtonComponent.d.ts +11 -0
- package/lib/typescript/components/ButtonComponent.d.ts.map +1 -0
- package/lib/typescript/components/FlatListComponent.d.ts +28 -0
- package/lib/typescript/components/FlatListComponent.d.ts.map +1 -0
- package/lib/typescript/components/ImageComponent.d.ts +12 -0
- package/lib/typescript/components/ImageComponent.d.ts.map +1 -0
- package/lib/typescript/components/PushFrameComponent.d.ts +48 -0
- package/lib/typescript/components/PushFrameComponent.d.ts.map +1 -0
- package/lib/typescript/components/PushFrameProvider.d.ts +51 -0
- package/lib/typescript/components/PushFrameProvider.d.ts.map +1 -0
- package/lib/typescript/components/PushFrameScreen.d.ts +15 -0
- package/lib/typescript/components/PushFrameScreen.d.ts.map +1 -0
- package/lib/typescript/components/ScrollViewComponent.d.ts +19 -0
- package/lib/typescript/components/ScrollViewComponent.d.ts.map +1 -0
- package/lib/typescript/components/StackComponent.d.ts +16 -0
- package/lib/typescript/components/StackComponent.d.ts.map +1 -0
- package/lib/typescript/components/TextComponent.d.ts +13 -0
- package/lib/typescript/components/TextComponent.d.ts.map +1 -0
- package/lib/typescript/conditions.d.ts +12 -0
- package/lib/typescript/conditions.d.ts.map +1 -0
- package/lib/typescript/context/PushFrameContext.d.ts +57 -0
- package/lib/typescript/context/PushFrameContext.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +74 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/overlays/BottomSheetHost.d.ts +21 -0
- package/lib/typescript/overlays/BottomSheetHost.d.ts.map +1 -0
- package/lib/typescript/overlays/ToastHost.d.ts +12 -0
- package/lib/typescript/overlays/ToastHost.d.ts.map +1 -0
- package/lib/typescript/primitives/ActivityIndicator.d.ts +12 -0
- package/lib/typescript/primitives/ActivityIndicator.d.ts.map +1 -0
- package/lib/typescript/primitives/FlatList.d.ts +29 -0
- package/lib/typescript/primitives/FlatList.d.ts.map +1 -0
- package/lib/typescript/primitives/Image.d.ts +20 -0
- package/lib/typescript/primitives/Image.d.ts.map +1 -0
- package/lib/typescript/primitives/KeyboardAvoidingView.d.ts +12 -0
- package/lib/typescript/primitives/KeyboardAvoidingView.d.ts.map +1 -0
- package/lib/typescript/primitives/Modal.d.ts +12 -0
- package/lib/typescript/primitives/Modal.d.ts.map +1 -0
- package/lib/typescript/primitives/Pressable.d.ts +14 -0
- package/lib/typescript/primitives/Pressable.d.ts.map +1 -0
- package/lib/typescript/primitives/SafeAreaView.d.ts +20 -0
- package/lib/typescript/primitives/SafeAreaView.d.ts.map +1 -0
- package/lib/typescript/primitives/ScrollView.d.ts +15 -0
- package/lib/typescript/primitives/ScrollView.d.ts.map +1 -0
- package/lib/typescript/primitives/StatusBar.d.ts +12 -0
- package/lib/typescript/primitives/StatusBar.d.ts.map +1 -0
- package/lib/typescript/primitives/Switch.d.ts +19 -0
- package/lib/typescript/primitives/Switch.d.ts.map +1 -0
- package/lib/typescript/primitives/Text.d.ts +25 -0
- package/lib/typescript/primitives/Text.d.ts.map +1 -0
- package/lib/typescript/primitives/TextInput.d.ts +25 -0
- package/lib/typescript/primitives/TextInput.d.ts.map +1 -0
- package/lib/typescript/primitives/View.d.ts +12 -0
- package/lib/typescript/primitives/View.d.ts.map +1 -0
- package/lib/typescript/primitives/index.d.ts +27 -0
- package/lib/typescript/primitives/index.d.ts.map +1 -0
- package/lib/typescript/registry/ComponentRegistry.d.ts +21 -0
- package/lib/typescript/registry/ComponentRegistry.d.ts.map +1 -0
- package/lib/typescript/registry.d.ts +57 -0
- package/lib/typescript/registry.d.ts.map +1 -0
- package/lib/typescript/renderer/RecursiveRenderer.d.ts +32 -0
- package/lib/typescript/renderer/RecursiveRenderer.d.ts.map +1 -0
- package/lib/typescript/renderer/bindingResolver.d.ts +26 -0
- package/lib/typescript/renderer/bindingResolver.d.ts.map +1 -0
- package/lib/typescript/renderer/conditionalEvaluator.d.ts +15 -0
- package/lib/typescript/renderer/conditionalEvaluator.d.ts.map +1 -0
- package/lib/typescript/renderer.d.ts +29 -0
- package/lib/typescript/renderer.d.ts.map +1 -0
- package/lib/typescript/schema.d.ts +84 -0
- package/lib/typescript/schema.d.ts.map +1 -0
- package/lib/typescript/transformer/index.d.ts +49 -0
- package/lib/typescript/transformer/index.d.ts.map +1 -0
- package/lib/typescript/transport.d.ts +19 -0
- package/lib/typescript/transport.d.ts.map +1 -0
- package/package.json +20 -18
- package/src/PushframeProvider.tsx +119 -0
- package/src/PushframeScreen.tsx +107 -0
- package/src/bindings.ts +72 -0
- package/src/components/ButtonComponent.tsx +87 -0
- package/src/components/FlatListComponent.tsx +86 -0
- package/src/components/ImageComponent.tsx +70 -0
- package/src/components/PushFrameComponent.tsx +221 -0
- package/src/components/PushFrameProvider.tsx +177 -0
- package/src/components/PushFrameScreen.tsx +30 -0
- package/src/components/ScrollViewComponent.tsx +65 -0
- package/src/components/StackComponent.tsx +69 -0
- package/src/components/TextComponent.tsx +60 -0
- package/src/conditions.ts +46 -0
- package/src/context/PushFrameContext.ts +89 -0
- package/src/index.ts +119 -0
- package/src/overlays/BottomSheetHost.tsx +175 -0
- package/src/overlays/ToastHost.tsx +147 -0
- package/src/primitives/ActivityIndicator.tsx +21 -0
- package/src/primitives/FlatList.tsx +49 -0
- package/src/primitives/Image.tsx +26 -0
- package/src/primitives/KeyboardAvoidingView.tsx +21 -0
- package/src/primitives/Modal.tsx +17 -0
- package/src/primitives/Pressable.tsx +19 -0
- package/src/primitives/SafeAreaView.tsx +42 -0
- package/src/primitives/ScrollView.tsx +21 -0
- package/src/primitives/StatusBar.tsx +17 -0
- package/src/primitives/Switch.tsx +24 -0
- package/src/primitives/Text.tsx +43 -0
- package/src/primitives/TextInput.tsx +42 -0
- package/src/primitives/View.tsx +17 -0
- package/src/primitives/index.ts +38 -0
- package/src/registry/ComponentRegistry.ts +99 -0
- package/src/registry.ts +99 -0
- package/src/renderer/RecursiveRenderer.tsx +242 -0
- package/src/renderer/bindingResolver.ts +94 -0
- package/src/renderer/conditionalEvaluator.ts +29 -0
- package/src/renderer.tsx +124 -0
- package/src/schema.ts +132 -0
- package/src/transformer/index.ts +1016 -0
- package/src/transport.ts +104 -0
- package/dist/index.d.mts +0 -534
- package/dist/index.d.ts +0 -534
- package/dist/index.js +0 -1572
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -1541
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.resolveDeep = resolveDeep;
|
|
7
|
+
exports.resolveProps = resolveProps;
|
|
8
|
+
exports.resolveValue = resolveValue;
|
|
9
|
+
/**
|
|
10
|
+
* Binding resolver for PushFrame {{expression}} syntax.
|
|
11
|
+
*
|
|
12
|
+
* Rules:
|
|
13
|
+
* - A value that is entirely "{{expr}}" resolves to the bound value (any type)
|
|
14
|
+
* - A value with inline bindings "Hello {{user.name}}" resolves to a string
|
|
15
|
+
* - Unresolved paths return undefined — never throws
|
|
16
|
+
* - Non-string values are returned as-is
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const FULL_BINDING_RE = /^\{\{(.+)\}\}$/;
|
|
20
|
+
const INLINE_BINDING_RE = /\{\{([^}]+)\}\}/g;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Evaluate a binding expression string against the provided context.
|
|
24
|
+
* Uses Function constructor for safe, sandboxed expression evaluation.
|
|
25
|
+
* Returns undefined on any error.
|
|
26
|
+
*/
|
|
27
|
+
function evaluateExpression(expr, context) {
|
|
28
|
+
try {
|
|
29
|
+
const keys = Object.keys(context);
|
|
30
|
+
const values = keys.map(k => context[k]);
|
|
31
|
+
// eslint-disable-next-line no-new-func
|
|
32
|
+
const fn = new Function(...keys, `"use strict"; try { return (${expr}); } catch(e) { return undefined; }`);
|
|
33
|
+
return fn(...values);
|
|
34
|
+
} catch {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Resolve a single prop value against context.
|
|
41
|
+
*
|
|
42
|
+
* - String values: check for full binding "{{expr}}" or inline bindings "Hello {{name}}"
|
|
43
|
+
* - Non-string values: returned as-is
|
|
44
|
+
*/
|
|
45
|
+
function resolveValue(value, context) {
|
|
46
|
+
if (typeof value !== 'string') {
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Full binding: entire string is "{{expr}}" — return the actual resolved value
|
|
51
|
+
const fullMatch = FULL_BINDING_RE.exec(value);
|
|
52
|
+
if (fullMatch?.[1] !== undefined) {
|
|
53
|
+
return evaluateExpression(fullMatch[1].trim(), context);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Inline binding: replace each "{{expr}}" occurrence within the string
|
|
57
|
+
if (INLINE_BINDING_RE.test(value)) {
|
|
58
|
+
INLINE_BINDING_RE.lastIndex = 0;
|
|
59
|
+
return value.replace(INLINE_BINDING_RE, (_, expr) => {
|
|
60
|
+
const resolved = evaluateExpression(expr.trim(), context);
|
|
61
|
+
return resolved !== undefined && resolved !== null ? String(resolved) : '';
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// No bindings — return as-is
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Resolve all values in a props map against the context.
|
|
71
|
+
* Recursively resolves nested objects and arrays.
|
|
72
|
+
*/
|
|
73
|
+
function resolveProps(props, context) {
|
|
74
|
+
if (!props) return {};
|
|
75
|
+
const resolved = {};
|
|
76
|
+
for (const [key, value] of Object.entries(props)) {
|
|
77
|
+
resolved[key] = resolveDeep(value, context);
|
|
78
|
+
}
|
|
79
|
+
return resolved;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Recursively resolve binding expressions in a value (including nested objects/arrays).
|
|
84
|
+
*/
|
|
85
|
+
function resolveDeep(value, context) {
|
|
86
|
+
if (Array.isArray(value)) {
|
|
87
|
+
return value.map(item => resolveDeep(item, context));
|
|
88
|
+
}
|
|
89
|
+
if (typeof value === 'object' && value !== null) {
|
|
90
|
+
const result = {};
|
|
91
|
+
for (const [k, v] of Object.entries(value)) {
|
|
92
|
+
result[k] = resolveDeep(v, context);
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
return resolveValue(value, context);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=bindingResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FULL_BINDING_RE","INLINE_BINDING_RE","evaluateExpression","expr","context","keys","Object","values","map","k","fn","Function","undefined","resolveValue","value","fullMatch","exec","trim","test","lastIndex","replace","_","resolved","String","resolveProps","props","key","entries","resolveDeep","Array","isArray","item","result","v"],"sourceRoot":"../../../src","sources":["renderer/bindingResolver.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.evaluateIf = evaluateIf;
|
|
7
|
+
var _bindingResolver = require("./bindingResolver");
|
|
8
|
+
/**
|
|
9
|
+
* Evaluate the `if` expression of a SchemaNode against the current context.
|
|
10
|
+
*
|
|
11
|
+
* Returns true → node should render
|
|
12
|
+
* Returns false → node (and its entire subtree) should be skipped
|
|
13
|
+
*
|
|
14
|
+
* Falsy values: false, null, undefined, 0, "" all hide the node.
|
|
15
|
+
* When `ifExpr` is undefined/null the node always renders.
|
|
16
|
+
*
|
|
17
|
+
* Accepts `unknown` to match the transformer's `if?: unknown` output:
|
|
18
|
+
* - String values are resolved as {{}} binding expressions
|
|
19
|
+
* - Non-string values (boolean, number, null) are coerced directly
|
|
20
|
+
*/
|
|
21
|
+
function evaluateIf(ifExpr, context) {
|
|
22
|
+
if (ifExpr === undefined || ifExpr === null) return true;
|
|
23
|
+
|
|
24
|
+
// Non-string: treat the value itself as the condition (e.g. `if: false`)
|
|
25
|
+
if (typeof ifExpr !== 'string') return Boolean(ifExpr);
|
|
26
|
+
const resolved = (0, _bindingResolver.resolveValue)(ifExpr, context);
|
|
27
|
+
|
|
28
|
+
// Standard falsy check — any falsy value hides the node
|
|
29
|
+
return Boolean(resolved);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=conditionalEvaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_bindingResolver","require","evaluateIf","ifExpr","context","undefined","Boolean","resolved","resolveValue"],"sourceRoot":"../../../src","sources":["renderer/conditionalEvaluator.ts"],"mappings":";;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CACxBC,MAAe,EACfC,OAAgC,EACvB;EACT,IAAID,MAAM,KAAKE,SAAS,IAAIF,MAAM,KAAK,IAAI,EAAE,OAAO,IAAI;;EAExD;EACA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE,OAAOG,OAAO,CAACH,MAAM,CAAC;EAEtD,MAAMI,QAAQ,GAAG,IAAAC,6BAAY,EAACL,MAAM,EAAEC,OAAO,CAAC;;EAE9C;EACA,OAAOE,OAAO,CAACC,QAAQ,CAAC;AAC1B","ignoreList":[]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.renderNode = renderNode;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _bindings = require("./bindings");
|
|
9
|
+
var _conditions = require("./conditions");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
/**
|
|
12
|
+
* Called by the host app whenever an action is triggered.
|
|
13
|
+
* `eventName` is the prop key (e.g. "onPress").
|
|
14
|
+
* `action` is the resolved action descriptor from the schema.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Recursively render a single PushframeNode.
|
|
19
|
+
*
|
|
20
|
+
* Returns null when:
|
|
21
|
+
* - The node's condition evaluates to false
|
|
22
|
+
* - The node's type is not found in the registry
|
|
23
|
+
*/
|
|
24
|
+
function renderNode({
|
|
25
|
+
node,
|
|
26
|
+
context,
|
|
27
|
+
registry,
|
|
28
|
+
onAction,
|
|
29
|
+
key
|
|
30
|
+
}) {
|
|
31
|
+
// 1. Evaluate conditions — skip if false.
|
|
32
|
+
if (!(0, _conditions.evaluateCondition)(node.conditions, context)) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// 2. Look up the component.
|
|
37
|
+
const Component = registry.get(node.type);
|
|
38
|
+
if (!Component) {
|
|
39
|
+
console.warn(`[Pushframe] No component registered for type "${node.type}". ` + `Registered types: ${registry.types().join(', ')}`);
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// 3. Resolve props.
|
|
44
|
+
const resolvedProps = (0, _bindings.resolveProps)(node.props, context);
|
|
45
|
+
|
|
46
|
+
// 4. Build action callbacks and merge into props.
|
|
47
|
+
if (node.actions) {
|
|
48
|
+
mergeActionCallbacks(resolvedProps, node.actions, onAction);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// 5. Render children recursively.
|
|
52
|
+
const childOptions = onAction ? {
|
|
53
|
+
context,
|
|
54
|
+
registry,
|
|
55
|
+
onAction
|
|
56
|
+
} : {
|
|
57
|
+
context,
|
|
58
|
+
registry
|
|
59
|
+
};
|
|
60
|
+
const children = node.children && node.children.length > 0 ? node.children.map((child, index) => renderNode({
|
|
61
|
+
node: child,
|
|
62
|
+
key: `${child.type}-${index}`,
|
|
63
|
+
...childOptions
|
|
64
|
+
})) : undefined;
|
|
65
|
+
|
|
66
|
+
// Helper for data-driven components (e.g. FlatList) to render a template
|
|
67
|
+
// node multiple times with different context (e.g. one render per list item).
|
|
68
|
+
const renderChild = (childNode, contextOverride) => renderNode({
|
|
69
|
+
node: childNode,
|
|
70
|
+
context: contextOverride ? {
|
|
71
|
+
...context,
|
|
72
|
+
...contextOverride
|
|
73
|
+
} : context,
|
|
74
|
+
registry,
|
|
75
|
+
onAction
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// 6. Build component props — only include onAction when defined
|
|
79
|
+
// (required by exactOptionalPropertyTypes).
|
|
80
|
+
const componentProps = {
|
|
81
|
+
props: resolvedProps,
|
|
82
|
+
children,
|
|
83
|
+
rawChildren: node.children,
|
|
84
|
+
renderChild
|
|
85
|
+
};
|
|
86
|
+
return /*#__PURE__*/_react.default.createElement(Component, {
|
|
87
|
+
key,
|
|
88
|
+
...componentProps
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* For each entry in the actions map, inject a callback function into resolvedProps
|
|
94
|
+
* so the component can call e.g. `props.onPress()` without coupling to the schema.
|
|
95
|
+
*/
|
|
96
|
+
function mergeActionCallbacks(resolvedProps, actions, onAction) {
|
|
97
|
+
for (const [eventName, action] of Object.entries(actions)) {
|
|
98
|
+
resolvedProps[eventName] = () => {
|
|
99
|
+
if (onAction) {
|
|
100
|
+
onAction(eventName, action);
|
|
101
|
+
} else {
|
|
102
|
+
console.warn(`[Pushframe] Action "${eventName}" fired but no onAction handler was provided.`);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_bindings","_conditions","e","__esModule","default","renderNode","node","context","registry","onAction","key","evaluateCondition","conditions","Component","get","type","console","warn","types","join","resolvedProps","resolveProps","props","actions","mergeActionCallbacks","childOptions","children","length","map","child","index","undefined","renderChild","childNode","contextOverride","componentProps","rawChildren","React","createElement","eventName","action","Object","entries"],"sourceRoot":"../../src","sources":["renderer.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SCHEMA_VERSION = void 0;
|
|
7
|
+
exports.isBinding = isBinding;
|
|
8
|
+
/**
|
|
9
|
+
* Pushframe Schema — typed definitions for screen definitions.
|
|
10
|
+
*
|
|
11
|
+
* A screen is described as a tree of PushframeNode objects.
|
|
12
|
+
* Props can be static values OR data-bindings via { "$bind": "path.to.value" }.
|
|
13
|
+
* Conditions gate whether a node renders at all.
|
|
14
|
+
* Actions declare event handlers; the host app is responsible for handling them.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Primitive schema version
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
|
|
21
|
+
const SCHEMA_VERSION = exports.SCHEMA_VERSION = '1.0';
|
|
22
|
+
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Data binding
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* A binding reference to a value in the runtime context.
|
|
29
|
+
* e.g. { "$bind": "user.firstName" }
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
function isBinding(value) {
|
|
33
|
+
return typeof value === 'object' && value !== null && '$bind' in value && typeof value['$bind'] === 'string';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A prop value is either a static primitive / object, or a binding.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Conditions
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* A condition gates whether a node should render.
|
|
46
|
+
*
|
|
47
|
+
* Supported operators:
|
|
48
|
+
* equals — strict equality (===)
|
|
49
|
+
* notEquals — strict inequality (!==)
|
|
50
|
+
* truthy — if the resolved value is truthy (no `value` needed)
|
|
51
|
+
* falsy — if the resolved value is falsy (no `value` needed)
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Actions
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
|
|
58
|
+
/** Navigate to another screen by ID. */
|
|
59
|
+
|
|
60
|
+
/** Emit a named custom event. The host app decides what to do with it. */
|
|
61
|
+
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Node
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* A single node in the UI tree.
|
|
68
|
+
*
|
|
69
|
+
* `type` maps to a registered component (e.g. "stack", "text", "button", "image").
|
|
70
|
+
* `props` are passed (after binding resolution) directly to the component.
|
|
71
|
+
* `children` are rendered recursively.
|
|
72
|
+
* `conditions` — when present, node is skipped if the condition evaluates to false.
|
|
73
|
+
* `actions` — event handler definitions; passed to the component as resolved callbacks.
|
|
74
|
+
*/
|
|
75
|
+
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// Screen definition
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SCHEMA_VERSION","exports","isBinding","value"],"sourceRoot":"../../src","sources":["schema.ts"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEO,MAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,KAAc;;AAG5C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAKO,SAASE,SAASA,CAACC,KAAc,EAAoB;EAC1D,OACE,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,KAAK,IAAI,IACd,OAAO,IAAIA,KAAK,IAChB,OAAQA,KAAK,CAA6B,OAAO,CAAC,KAAK,QAAQ;AAEnE;;AAEA;AACA;AACA;;AAYA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAeA;AACA;AACA;;AAEA;;AAOA;;AAWA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;AACA;AACA","ignoreList":[]}
|