@multiplatform.one/core 7.83.1 → 7.84.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/app/CreateApp.cjs +233 -0
- package/dist/cjs/app/CreateApp.native.js +253 -0
- package/dist/cjs/app/CreateApp.native.js.map +1 -0
- package/dist/cjs/app/CreateRootLayout.cjs +181 -0
- package/dist/cjs/app/CreateRootLayout.native.js +115 -0
- package/dist/cjs/app/CreateRootLayout.native.js.map +1 -0
- package/dist/cjs/app/RuntimePublicConfigScript.cjs +40 -0
- package/dist/cjs/app/RuntimePublicConfigScript.native.js +48 -0
- package/dist/cjs/app/RuntimePublicConfigScript.native.js.map +1 -0
- package/dist/cjs/app/TanstackDevtools.cjs +145 -0
- package/dist/cjs/app/TanstackDevtools.native.js +163 -0
- package/dist/cjs/app/TanstackDevtools.native.js.map +1 -0
- package/dist/cjs/app/TanstackProvider.cjs +81 -0
- package/dist/cjs/app/TanstackProvider.native.js +56 -0
- package/dist/cjs/app/TanstackProvider.native.js.map +1 -0
- package/dist/cjs/app/deepLinkPath.cjs +41 -0
- package/dist/cjs/app/deepLinkPath.native.js +46 -0
- package/dist/cjs/app/deepLinkPath.native.js.map +1 -0
- package/dist/cjs/app/devtoolsTrigger.cjs +281 -0
- package/dist/cjs/app/devtoolsTrigger.native.js +338 -0
- package/dist/cjs/app/devtoolsTrigger.native.js.map +1 -0
- package/dist/cjs/app/frappeSocketPort.cjs +40 -0
- package/dist/cjs/app/frappeSocketPort.native.js +45 -0
- package/dist/cjs/app/frappeSocketPort.native.js.map +1 -0
- package/dist/cjs/app/frappeSyncOptions.cjs +43 -0
- package/dist/cjs/app/frappeSyncOptions.native.js +46 -0
- package/dist/cjs/app/frappeSyncOptions.native.js.map +1 -0
- package/dist/cjs/app/index.cjs +22 -0
- package/dist/cjs/app/index.native.js +25 -0
- package/dist/cjs/app/index.native.js.map +1 -0
- package/dist/cjs/app/loadWalletProvider.cjs +32 -0
- package/dist/cjs/app/loadWalletProvider.native.js +44 -0
- package/dist/cjs/app/loadWalletProvider.native.js.map +1 -0
- package/dist/cjs/app/oneFrappeNavigation.cjs +45 -0
- package/dist/cjs/app/oneFrappeNavigation.native.js +52 -0
- package/dist/cjs/app/oneFrappeNavigation.native.js.map +1 -0
- package/dist/cjs/app/rootLayoutShared.cjs +18 -0
- package/dist/cjs/app/rootLayoutShared.native.js +21 -0
- package/dist/cjs/app/rootLayoutShared.native.js.map +1 -0
- package/dist/cjs/app/runtimePublicConfigMiddleware.cjs +50 -0
- package/dist/cjs/app/runtimePublicConfigMiddleware.native.js +55 -0
- package/dist/cjs/app/runtimePublicConfigMiddleware.native.js.map +1 -0
- package/dist/cjs/app/useNativeDeepLinks.cjs +28 -0
- package/dist/cjs/app/useNativeDeepLinks.native.js +56 -0
- package/dist/cjs/app/useNativeDeepLinks.native.js.map +1 -0
- package/dist/cjs/healthz.cjs +32 -0
- package/dist/cjs/healthz.native.js +35 -0
- package/dist/cjs/healthz.native.js.map +1 -0
- package/dist/cjs/index.cjs +21 -0
- package/dist/cjs/index.native.js +24 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/cjs/layouts/CreateDefaultLayout.cjs +99 -0
- package/dist/cjs/layouts/CreateDefaultLayout.native.js +105 -0
- package/dist/cjs/layouts/CreateDefaultLayout.native.js.map +1 -0
- package/dist/cjs/layouts/index.cjs +28 -0
- package/dist/cjs/layouts/index.native.js +31 -0
- package/dist/cjs/layouts/index.native.js.map +1 -0
- package/dist/esm/app/CreateApp.mjs +196 -0
- package/dist/esm/app/CreateApp.mjs.map +1 -0
- package/dist/esm/app/CreateApp.native.js +213 -0
- package/dist/esm/app/CreateApp.native.js.map +1 -0
- package/dist/esm/app/CreateRootLayout.mjs +145 -0
- package/dist/esm/app/CreateRootLayout.mjs.map +1 -0
- package/dist/esm/app/CreateRootLayout.native.js +76 -0
- package/dist/esm/app/CreateRootLayout.native.js.map +1 -0
- package/dist/esm/app/RuntimePublicConfigScript.mjs +15 -0
- package/dist/esm/app/RuntimePublicConfigScript.mjs.map +1 -0
- package/dist/esm/app/RuntimePublicConfigScript.native.js +20 -0
- package/dist/esm/app/RuntimePublicConfigScript.native.js.map +1 -0
- package/dist/esm/app/TanstackDevtools.mjs +109 -0
- package/dist/esm/app/TanstackDevtools.mjs.map +1 -0
- package/dist/esm/app/TanstackDevtools.native.js +124 -0
- package/dist/esm/app/TanstackDevtools.native.js.map +1 -0
- package/dist/esm/app/TanstackProvider.mjs +45 -0
- package/dist/esm/app/TanstackProvider.mjs.map +1 -0
- package/dist/esm/app/TanstackProvider.native.js +28 -0
- package/dist/esm/app/TanstackProvider.native.js.map +1 -0
- package/dist/esm/app/deepLinkPath.mjs +16 -0
- package/dist/esm/app/deepLinkPath.mjs.map +1 -0
- package/dist/esm/app/deepLinkPath.native.js +18 -0
- package/dist/esm/app/deepLinkPath.native.js.map +1 -0
- package/dist/esm/app/devtoolsTrigger.mjs +238 -0
- package/dist/esm/app/devtoolsTrigger.mjs.map +1 -0
- package/dist/esm/app/devtoolsTrigger.native.js +292 -0
- package/dist/esm/app/devtoolsTrigger.native.js.map +1 -0
- package/dist/esm/app/frappeSocketPort.mjs +15 -0
- package/dist/esm/app/frappeSocketPort.mjs.map +1 -0
- package/dist/esm/app/frappeSocketPort.native.js +17 -0
- package/dist/esm/app/frappeSocketPort.native.js.map +1 -0
- package/dist/esm/app/frappeSyncOptions.mjs +18 -0
- package/dist/esm/app/frappeSyncOptions.mjs.map +1 -0
- package/dist/esm/app/frappeSyncOptions.native.js +18 -0
- package/dist/esm/app/frappeSyncOptions.native.js.map +1 -0
- package/dist/esm/app/index.mjs +4 -0
- package/dist/esm/app/index.mjs.map +1 -0
- package/dist/esm/app/index.native.js +4 -0
- package/dist/esm/app/index.native.js.map +1 -0
- package/dist/esm/app/loadWalletProvider.mjs +7 -0
- package/dist/esm/app/loadWalletProvider.mjs.map +1 -0
- package/dist/esm/app/loadWalletProvider.native.js +16 -0
- package/dist/esm/app/loadWalletProvider.native.js.map +1 -0
- package/dist/esm/app/oneFrappeNavigation.mjs +20 -0
- package/dist/esm/app/oneFrappeNavigation.mjs.map +1 -0
- package/dist/esm/app/oneFrappeNavigation.native.js +24 -0
- package/dist/esm/app/oneFrappeNavigation.native.js.map +1 -0
- package/dist/esm/app/rootLayoutShared.mjs +2 -0
- package/dist/esm/app/rootLayoutShared.mjs.map +1 -0
- package/dist/esm/app/rootLayoutShared.native.js +2 -0
- package/dist/esm/app/rootLayoutShared.native.js.map +1 -0
- package/dist/esm/app/runtimePublicConfigMiddleware.mjs +25 -0
- package/dist/esm/app/runtimePublicConfigMiddleware.mjs.map +1 -0
- package/dist/esm/app/runtimePublicConfigMiddleware.native.js +27 -0
- package/dist/esm/app/runtimePublicConfigMiddleware.native.js.map +1 -0
- package/dist/esm/app/useNativeDeepLinks.mjs +3 -0
- package/dist/esm/app/useNativeDeepLinks.mjs.map +1 -0
- package/dist/esm/app/useNativeDeepLinks.native.js +28 -0
- package/dist/esm/app/useNativeDeepLinks.native.js.map +1 -0
- package/dist/esm/healthz.mjs +7 -0
- package/dist/esm/healthz.mjs.map +1 -0
- package/dist/esm/healthz.native.js +7 -0
- package/dist/esm/healthz.native.js.map +1 -0
- package/dist/esm/index.mjs +3 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +3 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/layouts/CreateDefaultLayout.mjs +74 -0
- package/dist/esm/layouts/CreateDefaultLayout.mjs.map +1 -0
- package/dist/esm/layouts/CreateDefaultLayout.native.js +77 -0
- package/dist/esm/layouts/CreateDefaultLayout.native.js.map +1 -0
- package/dist/esm/layouts/index.mjs +3 -0
- package/dist/esm/layouts/index.mjs.map +1 -0
- package/dist/esm/layouts/index.native.js +3 -0
- package/dist/esm/layouts/index.native.js.map +1 -0
- package/package.json +32 -16
- package/src/app/CreateApp.frappeAuth.spec.tsx +73 -0
- package/src/app/CreateApp.tsx +23 -23
- package/src/app/CreateRootLayout.web.spec.tsx +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["GET","_request","Response","JSON","stringify","status"],"sources":["../../src/healthz.ts"],"sourcesContent":[null],"mappings":"AACA,eAAsBA,IAAIC,QAAA,EAAmB;EAC3C,OAAO,IAAIC,QAAA,CAASC,IAAA,CAAKC,SAAA,CAAU;IAAEC,MAAA,EAAQ;EAAK,CAAC,CAAC;AACtD","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["GET","_request","Response","JSON","stringify","status"],"sources":["../../src/healthz.ts"],"sourcesContent":[null],"mappings":"AACA,eAAsBA,IAAIC,QAAA,EAAmB;EAC3C,OAAO,IAAIC,QAAA,CAASC,IAAA,CAAKC,SAAA,CAAU;IACrCC,MAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { YStack } from "tamagui";
|
|
2
|
+
import { config } from "@multiplatform.one/platform";
|
|
3
|
+
import { createWithLayout } from "@multiplatform.one/platform";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
function createDefaultLayout(options = {}) {
|
|
6
|
+
const {
|
|
7
|
+
SafeAreaWrapper,
|
|
8
|
+
safeAreaEdges = ["top", "left", "right"],
|
|
9
|
+
safeAreaBackground = "$background",
|
|
10
|
+
KeyboardAvoidingWrapper,
|
|
11
|
+
background = "$background",
|
|
12
|
+
Toast,
|
|
13
|
+
debug = false,
|
|
14
|
+
extraLayouts = []
|
|
15
|
+
} = options;
|
|
16
|
+
function DefaultLayout({
|
|
17
|
+
children
|
|
18
|
+
}) {
|
|
19
|
+
let content = /* @__PURE__ */jsxs(YStack, {
|
|
20
|
+
position: "absolute",
|
|
21
|
+
top: 0,
|
|
22
|
+
right: 0,
|
|
23
|
+
bottom: 0,
|
|
24
|
+
left: 0,
|
|
25
|
+
backgroundColor: background,
|
|
26
|
+
children: [children, Toast && /* @__PURE__ */jsx(Toast, {})]
|
|
27
|
+
});
|
|
28
|
+
if (KeyboardAvoidingWrapper) {
|
|
29
|
+
content = /* @__PURE__ */jsx(KeyboardAvoidingWrapper, {
|
|
30
|
+
flex: 1,
|
|
31
|
+
children: content
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
if (SafeAreaWrapper) {
|
|
35
|
+
content = /* @__PURE__ */jsx(SafeAreaWrapper, {
|
|
36
|
+
edges: safeAreaEdges,
|
|
37
|
+
bg: safeAreaBackground,
|
|
38
|
+
children: content
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return content;
|
|
42
|
+
}
|
|
43
|
+
const allExtraLayouts = [...extraLayouts];
|
|
44
|
+
if (debug) {
|
|
45
|
+
const DebugView = typeof debug === "function" ? debug : void 0;
|
|
46
|
+
const withDebug = createWithLayout(({
|
|
47
|
+
children
|
|
48
|
+
}) => {
|
|
49
|
+
if (config.get("DEBUG") !== "1") return /* @__PURE__ */jsx(Fragment, {
|
|
50
|
+
children
|
|
51
|
+
});
|
|
52
|
+
return /* @__PURE__ */jsxs(YStack, {
|
|
53
|
+
position: "absolute",
|
|
54
|
+
top: 0,
|
|
55
|
+
right: 0,
|
|
56
|
+
bottom: 0,
|
|
57
|
+
left: 0,
|
|
58
|
+
children: [children, DebugView && /* @__PURE__ */jsx(YStack, {
|
|
59
|
+
position: "absolute",
|
|
60
|
+
pointerEvents: "box-none",
|
|
61
|
+
children: /* @__PURE__ */jsx(DebugView, {})
|
|
62
|
+
})]
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
allExtraLayouts.push(withDebug);
|
|
66
|
+
}
|
|
67
|
+
const withDefaultLayout = createWithLayout(DefaultLayout, allExtraLayouts);
|
|
68
|
+
return {
|
|
69
|
+
DefaultLayout,
|
|
70
|
+
withDefaultLayout
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export { createDefaultLayout };
|
|
74
|
+
//# sourceMappingURL=CreateDefaultLayout.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["YStack","config","createWithLayout","Fragment","jsx","jsxs","createDefaultLayout","options","SafeAreaWrapper","safeAreaEdges","safeAreaBackground","KeyboardAvoidingWrapper","background","Toast","debug","extraLayouts","DefaultLayout","children","content","position","top","right","bottom","left","backgroundColor","flex","edges","bg","allExtraLayouts","DebugView","withDebug","get","pointerEvents","push","withDefaultLayout"],"sources":["../../../src/layouts/CreateDefaultLayout.tsx"],"sourcesContent":[null],"mappings":"AACA,SAASA,MAAA,QAAc;AACvB,SAASC,MAAA,QAAc;AACvB,SAASC,gBAAA,QAAyC;AA4E5C,SA6BwCC,QAAA,EApB5BC,GAAA,EATZC,IAAA;AAdC,SAASC,oBAAoBC,OAAA,GAAsC,CAAC,GAAG;EAC5E,MAAM;IACJC,eAAA;IACAC,aAAA,GAAgB,CAAC,OAAO,QAAQ,OAAO;IACvCC,kBAAA,GAAqB;IACrBC,uBAAA;IACAC,UAAA,GAAa;IACbC,KAAA;IACAC,KAAA,GAAQ;IACRC,YAAA,GAAe;EACjB,IAAIR,OAAA;EAEJ,SAASS,cAAc;IAAEC;EAAS,GAAuB;IACvD,IAAIC,OAAA,GACF,eAAAb,IAAA,CAACL,MAAA;MACCmB,QAAA,EAAS;MACTC,GAAA,EAAK;MACLC,KAAA,EAAO;MACPC,MAAA,EAAQ;MACRC,IAAA,EAAM;MACNC,eAAA,EAAiBZ,UAAA;MAEhBK,QAAA,GAAAA,QAAA,EACAJ,KAAA,IAAS,eAAAT,GAAA,CAACS,KAAA,IAAM;IAAA,CACnB;IAEF,IAAIF,uBAAA,EAAyB;MAC3BO,OAAA,GAAU,eAAAd,GAAA,CAACO,uBAAA;QAAwBc,IAAA,EAAM;QAAIR,QAAA,EAAAC;MAAA,CAAQ;IACvD;IACA,IAAIV,eAAA,EAAiB;MACnBU,OAAA,GACE,eAAAd,GAAA,CAACI,eAAA;QAAgBkB,KAAA,EAAOjB,aAAA;QAAekB,EAAA,EAAIjB,kBAAA;QACxCO,QAAA,EAAAC;MAAA,CACH;IAEJ;IACA,OAAOA,OAAA;EACT;EAEA,MAAMU,eAAA,GAAkB,CAAC,GAAGb,YAAY;EACxC,IAAID,KAAA,EAAO;IACT,MAAMe,SAAA,GAAY,OAAOf,KAAA,KAAU,aAAaA,KAAA,GAAQ;IACxD,MAAMgB,SAAA,GAAY5B,gBAAA,CAAiB,CAAC;MAAEe;IAAS,MAA+B;MAC5E,IAAIhB,MAAA,CAAO8B,GAAA,CAAI,OAAO,MAAM,KAAK,OAAO,eAAA3B,GAAA,CAAAD,QAAA;QAAGc;MAAA,CAAS;MACpD,OACE,eAAAZ,IAAA,CAACL,MAAA;QAAOmB,QAAA,EAAS;QAAWC,GAAA,EAAK;QAAGC,KAAA,EAAO;QAAGC,MAAA,EAAQ;QAAGC,IAAA,EAAM;QAC5DN,QAAA,GAAAA,QAAA,EACAY,SAAA,IACC,eAAAzB,GAAA,CAACJ,MAAA;UAAOmB,QAAA,EAAS;UAAWa,aAAA,EAAc;UACxCf,QAAA,iBAAAb,GAAA,CAACyB,SAAA,IAAU;QAAA,CACb;MAAA,CAEJ;IAEJ,CAAC;IACDD,eAAA,CAAgBK,IAAA,CAAKH,SAAS;EAChC;EAEA,MAAMI,iBAAA,GAAoBhC,gBAAA,CAAiBc,aAAA,EAAeY,eAAe;EAEzE,OAAO;IAAEZ,aAAA;IAAekB;EAAkB;AAC5C","ignoreList":[]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { YStack } from "tamagui";
|
|
3
|
+
import { config } from "@multiplatform.one/platform";
|
|
4
|
+
import { createWithLayout } from "@multiplatform.one/platform";
|
|
5
|
+
function createDefaultLayout() {
|
|
6
|
+
var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
7
|
+
var {
|
|
8
|
+
SafeAreaWrapper,
|
|
9
|
+
safeAreaEdges = ["top", "left", "right"],
|
|
10
|
+
safeAreaBackground = "$background",
|
|
11
|
+
KeyboardAvoidingWrapper,
|
|
12
|
+
background = "$background",
|
|
13
|
+
Toast,
|
|
14
|
+
debug = false,
|
|
15
|
+
extraLayouts = []
|
|
16
|
+
} = options;
|
|
17
|
+
function DefaultLayout(param) {
|
|
18
|
+
var {
|
|
19
|
+
children
|
|
20
|
+
} = param;
|
|
21
|
+
var content = /* @__PURE__ */_jsxs(YStack, {
|
|
22
|
+
position: "absolute",
|
|
23
|
+
top: 0,
|
|
24
|
+
right: 0,
|
|
25
|
+
bottom: 0,
|
|
26
|
+
left: 0,
|
|
27
|
+
backgroundColor: background,
|
|
28
|
+
children: [children, Toast && /* @__PURE__ */_jsx(Toast, {})]
|
|
29
|
+
});
|
|
30
|
+
if (KeyboardAvoidingWrapper) {
|
|
31
|
+
content = /* @__PURE__ */_jsx(KeyboardAvoidingWrapper, {
|
|
32
|
+
flex: 1,
|
|
33
|
+
children: content
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (SafeAreaWrapper) {
|
|
37
|
+
content = /* @__PURE__ */_jsx(SafeAreaWrapper, {
|
|
38
|
+
edges: safeAreaEdges,
|
|
39
|
+
bg: safeAreaBackground,
|
|
40
|
+
children: content
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return content;
|
|
44
|
+
}
|
|
45
|
+
var allExtraLayouts = [...extraLayouts];
|
|
46
|
+
if (debug) {
|
|
47
|
+
var DebugView = typeof debug === "function" ? debug : void 0;
|
|
48
|
+
var withDebug = createWithLayout(function (param) {
|
|
49
|
+
var {
|
|
50
|
+
children
|
|
51
|
+
} = param;
|
|
52
|
+
if (config.get("DEBUG") !== "1") return /* @__PURE__ */_jsx(_Fragment, {
|
|
53
|
+
children
|
|
54
|
+
});
|
|
55
|
+
return /* @__PURE__ */_jsxs(YStack, {
|
|
56
|
+
position: "absolute",
|
|
57
|
+
top: 0,
|
|
58
|
+
right: 0,
|
|
59
|
+
bottom: 0,
|
|
60
|
+
left: 0,
|
|
61
|
+
children: [children, DebugView && /* @__PURE__ */_jsx(YStack, {
|
|
62
|
+
position: "absolute",
|
|
63
|
+
pointerEvents: "box-none",
|
|
64
|
+
children: /* @__PURE__ */_jsx(DebugView, {})
|
|
65
|
+
})]
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
allExtraLayouts.push(withDebug);
|
|
69
|
+
}
|
|
70
|
+
var withDefaultLayout = createWithLayout(DefaultLayout, allExtraLayouts);
|
|
71
|
+
return {
|
|
72
|
+
DefaultLayout,
|
|
73
|
+
withDefaultLayout
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export { createDefaultLayout };
|
|
77
|
+
//# sourceMappingURL=CreateDefaultLayout.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","YStack","config","createWithLayout","createDefaultLayout","options","arguments","length","SafeAreaWrapper","safeAreaEdges","safeAreaBackground","KeyboardAvoidingWrapper","background","Toast","debug","extraLayouts","DefaultLayout","param","children","content","position","top","right","bottom","left","backgroundColor","flex","edges","bg","allExtraLayouts","DebugView","withDebug","get"],"sources":["../../../src/layouts/CreateDefaultLayout.tsx"],"sourcesContent":[null],"mappings":"AACA,SAASA,GAAA,IAAAC,IAAA,EAAAC,IAAc,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AACvB,SAASC,MAAA,QAAc;AACvB,SAASC,MAAA,qCAAyC;AA4E5C,SA6BwCC,gBA7BxC;AAdC,SAASC,oBAAA,EAAoB;EAClC,IAAAC,OAAM,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA;EAAA,IACJ;IAAAE,eAAA;IAAAC,aAAA,IACA,OACA,QACA;IACAC,kBAAa;IAAAC,uBAAA;IAAAC,UAAA;IAAAC,KAAA;IAAAC,KAAA;IAAAC,YAAA;EAAA,IAAAV,OAAA;EAAA,SACbW,cAAAC,KAAA;IACA;MAAAC;IAAQ,IAAAD,KAAA;IACR,IAAAE,OAAA,kBAAgBrB,KAAA,CAAAG,MAAA;MACdmB,QAAA;MAEJC,GAAA,EAAS;MACPC,KAAI;MACDC,MAAA;MAAAC,IAAA;MAAAC,eACU,EAAAb,UAAA;MAAAM,QACJ,GACLA,QAAO,EACPL,KAAA,IAAQ,eAAAjB,IAAA,CAAAiB,KAAA;IACF;IACW,IAEhBF,uBAAA;MAAAQ,OAAA,kBAAAvB,IAAA,CAAAe,uBAAA;QAAAe,IACA;QAAgBR,QAAA,EAAAC;MAAA;IACnB;IAEF,IAAIX,eAAA;MACFW,OAAA,GAAU,eAAAvB,IAAC,CAAAY,eAAA;QACbmB,KAAA,EAAAlB,aAAA;QACImB,EAAA,EAAAlB,kBAAiB;QACnBQ,QACE,EAAAC;MAIJ;IACA;IACF,OAAAA,OAAA;EAEA;EACA,IAAIU,eAAO,IACT,GAAAd,YAAM,CACN;EACE,IAAAD,KAAI;IACJ,IAAAgB,SACE,UAAAhB,KAAA,KAAC,UAAO,GAAAA,KAAS;IACd,IAAAiB,SAAA,GAAA5B,gBAAA,WAAAc,KAAA;MAAA,IACA;QAAAC;MACC,IAAAD,KAAA;MAEA,IAEJf,MAAA,CAAA8B,GAAA,yCAAApC,IAAA,CAAAI,SAAA;QAEHkB;MACD;MACF,sBAAApB,KAAA,CAAAG,MAAA;QAEMmB,QAAA,YAAoB;QAE1BC,GAAS;QACXC,KAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createDefaultLayout"],"sources":["../../../src/layouts/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,mBAAA,QAA2B","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createDefaultLayout"],"sources":["../../../src/layouts/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,mBAAA,QAA2B","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplatform.one/core",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.84.0",
|
|
4
4
|
"description": "Core framework shell, provider composition, and layout factories for multiplatform.one",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"app",
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"source": "src/index.ts",
|
|
18
18
|
"files": [
|
|
19
|
+
"dist",
|
|
19
20
|
"src",
|
|
20
21
|
"types",
|
|
21
22
|
"!types/.tsbuildinfo"
|
|
@@ -27,25 +28,39 @@
|
|
|
27
28
|
"exports": {
|
|
28
29
|
"./package.json": "./package.json",
|
|
29
30
|
"./healthz": {
|
|
30
|
-
"types": "./types/healthz.d.ts",
|
|
31
31
|
"source": "./src/healthz.ts",
|
|
32
|
-
"
|
|
32
|
+
"types": "./types/healthz.d.ts",
|
|
33
|
+
"react-native": {
|
|
34
|
+
"types": "./types/healthz.d.ts",
|
|
35
|
+
"import": "./dist/esm/healthz.native.js",
|
|
36
|
+
"require": "./dist/cjs/healthz.native.js"
|
|
37
|
+
},
|
|
38
|
+
"import": "./dist/esm/healthz.mjs",
|
|
39
|
+
"require": "./dist/cjs/healthz.cjs",
|
|
40
|
+
"default": "./dist/esm/healthz.mjs"
|
|
33
41
|
},
|
|
34
42
|
".": {
|
|
35
43
|
"source": "./src/index.ts",
|
|
36
44
|
"types": "./types/index.d.ts",
|
|
37
|
-
"
|
|
45
|
+
"react-native": {
|
|
46
|
+
"types": "./types/index.d.ts",
|
|
47
|
+
"import": "./dist/esm/index.native.js",
|
|
48
|
+
"require": "./dist/cjs/index.native.js"
|
|
49
|
+
},
|
|
50
|
+
"import": "./dist/esm/index.mjs",
|
|
51
|
+
"require": "./dist/cjs/index.cjs",
|
|
52
|
+
"default": "./dist/esm/index.mjs"
|
|
38
53
|
}
|
|
39
54
|
},
|
|
40
55
|
"publishConfig": {
|
|
41
56
|
"access": "public"
|
|
42
57
|
},
|
|
43
58
|
"dependencies": {
|
|
44
|
-
"@multiplatform.one/i18n": "^7.
|
|
45
|
-
"@multiplatform.one/logger": "^7.
|
|
46
|
-
"@multiplatform.one/platform": "^7.
|
|
47
|
-
"@multiplatform.one/store": "^7.
|
|
48
|
-
"@multiplatform.one/theme": "^7.
|
|
59
|
+
"@multiplatform.one/i18n": "^7.84.0",
|
|
60
|
+
"@multiplatform.one/logger": "^7.84.0",
|
|
61
|
+
"@multiplatform.one/platform": "^7.84.0",
|
|
62
|
+
"@multiplatform.one/store": "^7.84.0",
|
|
63
|
+
"@multiplatform.one/theme": "^7.84.0",
|
|
49
64
|
"@tanstack/devtools-utils": "^0.4.0",
|
|
50
65
|
"@tanstack/pacer-devtools": "1.6.0",
|
|
51
66
|
"@tanstack/react-devtools": "0.10.13",
|
|
@@ -53,9 +68,10 @@
|
|
|
53
68
|
"react-cookie": "^8.1.2"
|
|
54
69
|
},
|
|
55
70
|
"devDependencies": {
|
|
56
|
-
"@multiplatform.one/frappe": "7.
|
|
57
|
-
"@multiplatform.one/web3": "7.
|
|
71
|
+
"@multiplatform.one/frappe": "7.84.0",
|
|
72
|
+
"@multiplatform.one/web3": "7.84.0",
|
|
58
73
|
"@sentry/react": "^10.51.0",
|
|
74
|
+
"@tamagui/build": "2.7.6",
|
|
59
75
|
"@tanstack/react-query": "^5.104.3",
|
|
60
76
|
"@tanstack/react-query-devtools": "^5.104.3",
|
|
61
77
|
"@vxrn/color-scheme": "~1.16.5",
|
|
@@ -72,10 +88,10 @@
|
|
|
72
88
|
"vitest": "^4.1.5"
|
|
73
89
|
},
|
|
74
90
|
"peerDependencies": {
|
|
75
|
-
"@multiplatform.one/frappe": "^7.
|
|
76
|
-
"@multiplatform.one/frappe-ui": "^7.
|
|
77
|
-
"@multiplatform.one/keycloak": "^7.
|
|
78
|
-
"@multiplatform.one/web3": "^7.
|
|
91
|
+
"@multiplatform.one/frappe": "^7.84.0",
|
|
92
|
+
"@multiplatform.one/frappe-ui": "^7.84.0",
|
|
93
|
+
"@multiplatform.one/keycloak": "^7.84.0",
|
|
94
|
+
"@multiplatform.one/web3": "^7.84.0",
|
|
79
95
|
"@sentry/react": "^9.0.0 || ^10.0.0",
|
|
80
96
|
"@tanstack/react-query": "^5.0.0",
|
|
81
97
|
"@tanstack/react-query-devtools": "^5.0.0",
|
|
@@ -114,7 +130,7 @@
|
|
|
114
130
|
},
|
|
115
131
|
"scripts": {
|
|
116
132
|
"typecheck": "tsgo --noEmit",
|
|
117
|
-
"build": "rm -rf types 2>/dev/null &&
|
|
133
|
+
"build": "rm -rf dist types 2>/dev/null && tamagui-build --ts-project ./tsconfig.build.json --exclude '\\.spec\\.|\\.test\\.|\\.stories\\.'",
|
|
118
134
|
"test": "vitest run"
|
|
119
135
|
}
|
|
120
136
|
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
import { act, cleanup, render, screen } from "@testing-library/react";
|
|
3
|
+
import type { PropsWithChildren } from "react";
|
|
4
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
5
|
+
import { createApp } from "./CreateApp";
|
|
6
|
+
|
|
7
|
+
const { env, provided } = vi.hoisted(() => ({
|
|
8
|
+
env: {} as Record<string, string>,
|
|
9
|
+
provided: { auths: [] as unknown[] },
|
|
10
|
+
}));
|
|
11
|
+
vi.mock("@multiplatform.one/platform", () => ({
|
|
12
|
+
config: { get: (key: string) => env[key] },
|
|
13
|
+
isDev: false,
|
|
14
|
+
isWeb: true,
|
|
15
|
+
}));
|
|
16
|
+
vi.mock("@multiplatform.one/theme", () => ({
|
|
17
|
+
ThemeProvider: ({ children }: PropsWithChildren) => children,
|
|
18
|
+
}));
|
|
19
|
+
vi.mock("@multiplatform.one/frappe-ui", () => ({
|
|
20
|
+
FrappeProvider: ({ children, auth }: PropsWithChildren<{ auth?: unknown }>) => {
|
|
21
|
+
provided.auths.push(auth);
|
|
22
|
+
return children;
|
|
23
|
+
},
|
|
24
|
+
}));
|
|
25
|
+
vi.mock("./TanstackProvider", () => ({ createTanstackProvider: vi.fn() }));
|
|
26
|
+
vi.mock("./loadWalletProvider", () => ({ default: () => null }));
|
|
27
|
+
vi.mock("one", () => ({ usePathname: () => "/", useRouter: () => ({ push: vi.fn() }) }));
|
|
28
|
+
vi.mock("@multiplatform.one/keycloak", () => ({
|
|
29
|
+
getKeycloakBearerToken: async () => undefined,
|
|
30
|
+
KeycloakProvider: ({ children }: PropsWithChildren) => (
|
|
31
|
+
<>
|
|
32
|
+
<span data-testid="keycloak">keycloak</span>
|
|
33
|
+
{children}
|
|
34
|
+
</>
|
|
35
|
+
),
|
|
36
|
+
}));
|
|
37
|
+
|
|
38
|
+
afterEach(() => {
|
|
39
|
+
cleanup();
|
|
40
|
+
provided.auths = [];
|
|
41
|
+
for (const key of Object.keys(env)) delete env[key];
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
describe("createApp frappe auth (FZ-7374)", () => {
|
|
45
|
+
it("hands FrappeProvider the same auth on every re-render, so its config holds", async () => {
|
|
46
|
+
env.BASE_URL = "https://app.test";
|
|
47
|
+
const { AppProvider } = createApp({
|
|
48
|
+
keycloak: { enabled: true },
|
|
49
|
+
frappe: { enabled: true, baseURL: "https://bench.test", realtime: false },
|
|
50
|
+
});
|
|
51
|
+
let view: ReturnType<typeof render> | undefined;
|
|
52
|
+
await act(async () => {
|
|
53
|
+
view = render(
|
|
54
|
+
<AppProvider>
|
|
55
|
+
<span>0</span>
|
|
56
|
+
</AppProvider>,
|
|
57
|
+
);
|
|
58
|
+
});
|
|
59
|
+
await screen.findByTestId("keycloak");
|
|
60
|
+
for (const pass of [1, 2]) {
|
|
61
|
+
await act(async () => {
|
|
62
|
+
view?.rerender(
|
|
63
|
+
<AppProvider>
|
|
64
|
+
<span>{pass}</span>
|
|
65
|
+
</AppProvider>,
|
|
66
|
+
);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
expect(provided.auths.length).toBeGreaterThanOrEqual(3);
|
|
70
|
+
expect(provided.auths[0]).toBeTruthy();
|
|
71
|
+
expect(new Set(provided.auths).size).toBe(1);
|
|
72
|
+
});
|
|
73
|
+
});
|
package/src/app/CreateApp.tsx
CHANGED
|
@@ -400,6 +400,29 @@ export function createApp(appConfig: CreateAppConfig) {
|
|
|
400
400
|
if (appConfig.frappe) {
|
|
401
401
|
const cfg: FrappeConfig = appConfig.frappe === true ? {} : appConfig.frappe;
|
|
402
402
|
|
|
403
|
+
// Keycloak auth uses ONE transport on every platform: the HttpClient
|
|
404
|
+
// and the Socket.IO handshake send `Authorization: Bearer <keycloak
|
|
405
|
+
// access token>`, fetched lazily from better-auth's /get-access-token
|
|
406
|
+
// (which refreshes server-side; SecureStore jar on native, session
|
|
407
|
+
// cookie on web). The bench's frappe_keycloak auth hook validates the
|
|
408
|
+
// JWT. Cookies alone can't cover realtime: frappe's socketio middleware
|
|
409
|
+
// only accepts a frappe `sid` cookie or an Authorization header, so the
|
|
410
|
+
// better-auth account cookie never authenticated the socket on web.
|
|
411
|
+
// When signed out the getter resolves undefined and requests fall back
|
|
412
|
+
// to guest.
|
|
413
|
+
const auth =
|
|
414
|
+
cfg.auth ??
|
|
415
|
+
(appConfig.keycloak
|
|
416
|
+
? {
|
|
417
|
+
useToken: true,
|
|
418
|
+
type: "Bearer",
|
|
419
|
+
token: async () => {
|
|
420
|
+
const mod = await import("@multiplatform.one/keycloak");
|
|
421
|
+
return (await mod.getKeycloakBearerToken()) || "";
|
|
422
|
+
},
|
|
423
|
+
}
|
|
424
|
+
: undefined);
|
|
425
|
+
|
|
403
426
|
function FrappeProviderWrapper({ children }: PropsWithChildren) {
|
|
404
427
|
const configuredCatchUp = config.get("FRAPPE_CATCH_UP_STRATEGY");
|
|
405
428
|
const configuredWrite = config.get("FRAPPE_WRITE_STRATEGY");
|
|
@@ -424,29 +447,6 @@ export function createApp(appConfig: CreateAppConfig) {
|
|
|
424
447
|
const socketPort =
|
|
425
448
|
cfg.socketPort ?? frappeSocketPort(config.get("FRAPPE_SOCKETIO_PORT"), baseURL);
|
|
426
449
|
|
|
427
|
-
// Keycloak auth uses ONE transport on every platform: the HttpClient
|
|
428
|
-
// and the Socket.IO handshake send `Authorization: Bearer <keycloak
|
|
429
|
-
// access token>`, fetched lazily from better-auth's /get-access-token
|
|
430
|
-
// (which refreshes server-side; SecureStore jar on native, session
|
|
431
|
-
// cookie on web). The bench's frappe_keycloak auth hook validates the
|
|
432
|
-
// JWT. Cookies alone can't cover realtime: frappe's socketio middleware
|
|
433
|
-
// only accepts a frappe `sid` cookie or an Authorization header, so the
|
|
434
|
-
// better-auth account cookie never authenticated the socket on web.
|
|
435
|
-
// When signed out the getter resolves undefined and requests fall back
|
|
436
|
-
// to guest.
|
|
437
|
-
const auth =
|
|
438
|
-
cfg.auth ??
|
|
439
|
-
(appConfig.keycloak
|
|
440
|
-
? {
|
|
441
|
-
useToken: true,
|
|
442
|
-
type: "Bearer",
|
|
443
|
-
token: async () => {
|
|
444
|
-
const mod = await import("@multiplatform.one/keycloak");
|
|
445
|
-
return (await mod.getKeycloakBearerToken()) || "";
|
|
446
|
-
},
|
|
447
|
-
}
|
|
448
|
-
: undefined);
|
|
449
|
-
|
|
450
450
|
return (
|
|
451
451
|
<FrappeProvider
|
|
452
452
|
baseURL={baseURL}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { interFaceNames } from "@multiplatform.one/theme/src/fonts/interFaces";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { resolve } from "node:path";
|
|
1
4
|
import { renderToStaticMarkup } from "react-dom/server";
|
|
2
5
|
import { describe, expect, it, vi } from "vitest";
|
|
3
6
|
import type { ReactNode } from "react";
|
|
@@ -117,6 +120,18 @@ describe("web root Inter faces (FZ-7158 WP-b3)", () => {
|
|
|
117
120
|
}
|
|
118
121
|
});
|
|
119
122
|
|
|
123
|
+
it("declares a face for every native face-map weight, and the One app serves each file (FZ-8572)", () => {
|
|
124
|
+
const html = renderRoot({ interFonts: true });
|
|
125
|
+
for (const weight of Object.keys(interFaceNames)) {
|
|
126
|
+
expect(html).toContain(
|
|
127
|
+
`font-weight:${weight};font-display:optional;src:url("/fonts/inter-${weight}.woff2")`,
|
|
128
|
+
);
|
|
129
|
+
expect(
|
|
130
|
+
existsSync(resolve(__dirname, `../../../../apps/one/public/fonts/inter-${weight}.woff2`)),
|
|
131
|
+
).toBe(true);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
|
|
120
135
|
it("renders no Inter declarations or preloads when disabled", () => {
|
|
121
136
|
const html = renderRoot({ interFonts: false });
|
|
122
137
|
expect(html).not.toContain("@font-face");
|