gemi 0.109.0 → 0.110.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/ai/index.js +2 -2
- package/dist/ai/index.js.map +1 -1
- package/dist/app/index.js +2 -2
- package/dist/app/index.js.map +1 -1
- package/dist/bin/gemi.js +485 -63
- package/dist/bin/gemi.js.map +12 -8
- package/dist/bun/plugin.js +2 -2
- package/dist/bun/plugin.js.map +1 -1
- package/dist/bun/preload.js +2 -2
- package/dist/bun/preload.js.map +1 -1
- package/dist/{chunk-hgz8sx40.js → chunk-09ypnhjv.js} +3 -3
- package/dist/{chunk-hgz8sx40.js.map → chunk-09ypnhjv.js.map} +1 -1
- package/dist/{chunk-qnq110tw.js → chunk-0d9qsmx2.js} +3 -3
- package/dist/{chunk-qnq110tw.js.map → chunk-0d9qsmx2.js.map} +1 -1
- package/dist/{chunk-m9609t1y.js → chunk-0sjh5v1n.js} +1 -1
- package/dist/{chunk-g5a3ptsa.js → chunk-11fsn5mr.js} +3 -3
- package/dist/{chunk-g5a3ptsa.js.map → chunk-11fsn5mr.js.map} +1 -1
- package/dist/{chunk-whe0x70j.js → chunk-1c1d0e60.js} +3 -3
- package/dist/{chunk-whe0x70j.js.map → chunk-1c1d0e60.js.map} +1 -1
- package/dist/{chunk-rgfzqwpg.js → chunk-1kr25rcg.js} +3 -3
- package/dist/{chunk-rgfzqwpg.js.map → chunk-1kr25rcg.js.map} +1 -1
- package/dist/{chunk-vee4j6ft.js → chunk-1pem26zc.js} +3 -3
- package/dist/{chunk-vee4j6ft.js.map → chunk-1pem26zc.js.map} +1 -1
- package/dist/{chunk-nxxx0m1a.js → chunk-1va15sfq.js} +2 -2
- package/dist/{chunk-nxxx0m1a.js.map → chunk-1va15sfq.js.map} +2 -2
- package/dist/{chunk-wvwee7dn.js → chunk-1yx2e0bh.js} +2 -2
- package/dist/{chunk-wvwee7dn.js.map → chunk-1yx2e0bh.js.map} +1 -1
- package/dist/{chunk-9r3znmqq.js → chunk-303mprnv.js} +2 -2
- package/dist/{chunk-9r3znmqq.js.map → chunk-303mprnv.js.map} +1 -1
- package/dist/{chunk-grs8dnkd.js → chunk-30xjcyzh.js} +2 -2
- package/dist/{chunk-grs8dnkd.js.map → chunk-30xjcyzh.js.map} +1 -1
- package/dist/{chunk-h15eae7g.js → chunk-358sdcx9.js} +3 -3
- package/dist/{chunk-h15eae7g.js.map → chunk-358sdcx9.js.map} +1 -1
- package/dist/{chunk-367kyrdx.js → chunk-3cg7y62b.js} +2 -2
- package/dist/{chunk-367kyrdx.js.map → chunk-3cg7y62b.js.map} +1 -1
- package/dist/{chunk-t26n9vzw.js → chunk-3y8q8x11.js} +2 -2
- package/dist/{chunk-t26n9vzw.js.map → chunk-3y8q8x11.js.map} +1 -1
- package/dist/chunk-4mfrgd5m.js +34 -0
- package/dist/chunk-4mfrgd5m.js.map +10 -0
- package/dist/chunk-5cygrbxv.js +4 -0
- package/dist/{chunk-9qw9fa6z.js.map → chunk-5cygrbxv.js.map} +2 -2
- package/dist/{chunk-tvy2fqza.js → chunk-5stgtwqw.js} +2 -2
- package/dist/{chunk-tvy2fqza.js.map → chunk-5stgtwqw.js.map} +1 -1
- package/dist/chunk-61f4m5px.js +6 -0
- package/dist/{chunk-fe1pcnw6.js.map → chunk-61f4m5px.js.map} +5 -4
- package/dist/chunk-6chz1ktz.js +9 -0
- package/dist/chunk-6chz1ktz.js.map +13 -0
- package/dist/{chunk-wqsdjweb.js → chunk-6vr7f5fq.js} +4 -4
- package/dist/{chunk-wqsdjweb.js.map → chunk-6vr7f5fq.js.map} +1 -1
- package/dist/{chunk-g74qwhvf.js → chunk-7tx5y712.js} +2 -2
- package/dist/{chunk-g74qwhvf.js.map → chunk-7tx5y712.js.map} +1 -1
- package/dist/{chunk-g7fr2cy2.js → chunk-8afxrmdc.js} +3 -3
- package/dist/{chunk-g7fr2cy2.js.map → chunk-8afxrmdc.js.map} +1 -1
- package/dist/{chunk-vwkdfngg.js → chunk-8b2tw2yp.js} +1 -1
- package/dist/{chunk-t3qw9syt.js → chunk-9rchedr4.js} +2 -2
- package/dist/{chunk-t3qw9syt.js.map → chunk-9rchedr4.js.map} +1 -1
- package/dist/{chunk-jm4jn28j.js → chunk-9s851qz8.js} +2 -2
- package/dist/{chunk-jm4jn28j.js.map → chunk-9s851qz8.js.map} +1 -1
- package/dist/{chunk-jc4j61xb.js → chunk-a6453d9s.js} +3 -3
- package/dist/{chunk-jc4j61xb.js.map → chunk-a6453d9s.js.map} +1 -1
- package/dist/{chunk-9m18pknp.js → chunk-bn5yn731.js} +2 -2
- package/dist/{chunk-9m18pknp.js.map → chunk-bn5yn731.js.map} +1 -1
- package/dist/{chunk-t85rca2p.js → chunk-c098fzvk.js} +2 -2
- package/dist/{chunk-t85rca2p.js.map → chunk-c098fzvk.js.map} +1 -1
- package/dist/{chunk-mp5krm14.js → chunk-cttmy1jp.js} +4 -4
- package/dist/{chunk-mp5krm14.js.map → chunk-cttmy1jp.js.map} +2 -2
- package/dist/{chunk-eyg88bgv.js → chunk-cy5qp6mz.js} +3 -3
- package/dist/{chunk-eyg88bgv.js.map → chunk-cy5qp6mz.js.map} +1 -1
- package/dist/{chunk-zys7kecf.js → chunk-ddr4qvvt.js} +3 -3
- package/dist/{chunk-zys7kecf.js.map → chunk-ddr4qvvt.js.map} +1 -1
- package/dist/chunk-e1n8zs3h.js +58 -0
- package/dist/chunk-e1n8zs3h.js.map +14 -0
- package/dist/{chunk-r9gzbjc5.js → chunk-et4pv1b1.js} +1 -1
- package/dist/{chunk-a1g0bahx.js → chunk-frerzsxq.js} +2 -2
- package/dist/{chunk-a1g0bahx.js.map → chunk-frerzsxq.js.map} +1 -1
- package/dist/{chunk-qz9aaw5x.js → chunk-gb37722w.js} +3 -3
- package/dist/{chunk-qz9aaw5x.js.map → chunk-gb37722w.js.map} +1 -1
- package/dist/chunk-h3864a8z.js +17 -0
- package/dist/{chunk-s5aa4hty.js.map → chunk-h3864a8z.js.map} +13 -12
- package/dist/{chunk-zhm3qvrc.js → chunk-h4sw6nt3.js} +3 -3
- package/dist/{chunk-zhm3qvrc.js.map → chunk-h4sw6nt3.js.map} +1 -1
- package/dist/{chunk-5d6eaxab.js → chunk-he7z7y9j.js} +2 -2
- package/dist/{chunk-5d6eaxab.js.map → chunk-he7z7y9j.js.map} +1 -1
- package/dist/{chunk-d2tngs73.js → chunk-hf7a51s3.js} +2 -2
- package/dist/{chunk-d2tngs73.js.map → chunk-hf7a51s3.js.map} +1 -1
- package/dist/chunk-hn67spz6.js +5 -0
- package/dist/{chunk-z9x8x3wq.js.map → chunk-hn67spz6.js.map} +1 -1
- package/dist/{chunk-f7jhkg8x.js → chunk-jbrwt3cs.js} +4 -4
- package/dist/{chunk-f7jhkg8x.js.map → chunk-jbrwt3cs.js.map} +1 -1
- package/dist/{chunk-k1ezptt8.js → chunk-k1vw22t2.js} +2 -2
- package/dist/{chunk-k1ezptt8.js.map → chunk-k1vw22t2.js.map} +1 -1
- package/dist/chunk-k1xt2tw7.js +4 -0
- package/dist/{chunk-rjcsdazt.js.map → chunk-k1xt2tw7.js.map} +2 -2
- package/dist/chunk-k9wgtrc5.js +24 -0
- package/dist/{chunk-w3j53r0a.js.map → chunk-k9wgtrc5.js.map} +4 -4
- package/dist/{chunk-7mc5e61r.js → chunk-kf71mjxa.js} +3 -3
- package/dist/{chunk-7mc5e61r.js.map → chunk-kf71mjxa.js.map} +1 -1
- package/dist/{chunk-vna85rdq.js → chunk-m6ystvtk.js} +2 -2
- package/dist/{chunk-vna85rdq.js.map → chunk-m6ystvtk.js.map} +1 -1
- package/dist/{chunk-qyyxzy04.js → chunk-mb7q7s0a.js} +3 -3
- package/dist/{chunk-qyyxzy04.js.map → chunk-mb7q7s0a.js.map} +1 -1
- package/dist/{chunk-sp2v357a.js → chunk-mn5xw79b.js} +3 -3
- package/dist/{chunk-sp2v357a.js.map → chunk-mn5xw79b.js.map} +1 -1
- package/dist/{chunk-q8k7f11z.js → chunk-mwqg079k.js} +2 -2
- package/dist/{chunk-q8k7f11z.js.map → chunk-mwqg079k.js.map} +1 -1
- package/dist/{chunk-ga533cpz.js → chunk-nncz308h.js} +3 -3
- package/dist/{chunk-ga533cpz.js.map → chunk-nncz308h.js.map} +1 -1
- package/dist/{chunk-hf32yq23.js → chunk-nsvktvp4.js} +2 -2
- package/dist/{chunk-hf32yq23.js.map → chunk-nsvktvp4.js.map} +1 -1
- package/dist/{chunk-3x86bhfn.js → chunk-nvv9wej6.js} +3 -3
- package/dist/{chunk-3x86bhfn.js.map → chunk-nvv9wej6.js.map} +1 -1
- package/dist/chunk-p1aqq0ga.js +16 -0
- package/dist/{chunk-d5sbnzng.js.map → chunk-p1aqq0ga.js.map} +5 -9
- package/dist/chunk-p7r2w4qw.js +5 -0
- package/dist/{chunk-ehasw3qm.js.map → chunk-p7r2w4qw.js.map} +2 -2
- package/dist/{chunk-zz7h6tdr.js → chunk-pwmgqq7z.js} +2 -2
- package/dist/{chunk-zz7h6tdr.js.map → chunk-pwmgqq7z.js.map} +1 -1
- package/dist/chunk-pyj7cd9t.js +4 -0
- package/dist/{chunk-gdsby5jh.js.map → chunk-pyj7cd9t.js.map} +2 -2
- package/dist/{chunk-h6g9g8qc.js → chunk-q9s7kwgt.js} +3 -3
- package/dist/{chunk-h6g9g8qc.js.map → chunk-q9s7kwgt.js.map} +1 -1
- package/dist/{chunk-9hbwvcxn.js → chunk-qd2v93y4.js} +2 -2
- package/dist/{chunk-9hbwvcxn.js.map → chunk-qd2v93y4.js.map} +1 -1
- package/dist/{chunk-tr9mxdth.js → chunk-rfcygmf5.js} +3 -3
- package/dist/{chunk-tr9mxdth.js.map → chunk-rfcygmf5.js.map} +1 -1
- package/dist/{chunk-vsnmdtrs.js → chunk-s6jjy4y9.js} +2 -2
- package/dist/{chunk-vsnmdtrs.js.map → chunk-s6jjy4y9.js.map} +1 -1
- package/dist/{chunk-6zekebzt.js → chunk-sq2wkynk.js} +2 -2
- package/dist/{chunk-6zekebzt.js.map → chunk-sq2wkynk.js.map} +1 -1
- package/dist/{chunk-52vsdnny.js → chunk-td8tha3j.js} +3 -3
- package/dist/{chunk-52vsdnny.js.map → chunk-td8tha3j.js.map} +1 -1
- package/dist/{chunk-t0bp8nrc.js → chunk-tk5q8hkv.js} +4 -4
- package/dist/{chunk-t0bp8nrc.js.map → chunk-tk5q8hkv.js.map} +2 -2
- package/dist/{chunk-dpy08xw4.js → chunk-tq85n8zh.js} +2 -2
- package/dist/{chunk-dpy08xw4.js.map → chunk-tq85n8zh.js.map} +1 -1
- package/dist/{chunk-wdpdqjr1.js → chunk-twnn7r66.js} +2 -2
- package/dist/{chunk-wdpdqjr1.js.map → chunk-twnn7r66.js.map} +1 -1
- package/dist/chunk-w7jsh3xd.js +5 -0
- package/dist/{chunk-1es50p4k.js.map → chunk-w7jsh3xd.js.map} +2 -2
- package/dist/{chunk-zh1t33nq.js → chunk-wsttx9rg.js} +2 -2
- package/dist/{chunk-zh1t33nq.js.map → chunk-wsttx9rg.js.map} +1 -1
- package/dist/{chunk-7ssjzp87.js → chunk-wvsv1jgg.js} +2 -2
- package/dist/{chunk-7ssjzp87.js.map → chunk-wvsv1jgg.js.map} +1 -1
- package/dist/chunk-x78jrs4y.js +4 -0
- package/dist/{chunk-y66ntxbg.js.map → chunk-x78jrs4y.js.map} +2 -2
- package/dist/chunk-xk930yaw.js +5 -0
- package/dist/{chunk-pa3khk46.js.map → chunk-xk930yaw.js.map} +2 -2
- package/dist/chunk-xkc7ftnq.js +9 -0
- package/dist/chunk-xkc7ftnq.js.map +10 -0
- package/dist/{chunk-564zfdd1.js → chunk-yer1r3t3.js} +2 -2
- package/dist/{chunk-564zfdd1.js.map → chunk-yer1r3t3.js.map} +1 -1
- package/dist/{chunk-c8dhvdrs.js → chunk-yqavgpwd.js} +3 -3
- package/dist/{chunk-c8dhvdrs.js.map → chunk-yqavgpwd.js.map} +1 -1
- package/dist/{chunk-hyfzw1fk.js → chunk-z10cas5r.js} +2 -2
- package/dist/{chunk-hyfzw1fk.js.map → chunk-z10cas5r.js.map} +1 -1
- package/dist/{chunk-jgtean4t.js → chunk-zhs1r1z0.js} +3 -3
- package/dist/{chunk-jgtean4t.js.map → chunk-zhs1r1z0.js.map} +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +106 -52
- package/dist/client/index.js.map +1 -1
- package/dist/client/islands.d.ts +99 -56
- package/dist/client/islands.d.ts.map +1 -1
- package/dist/config/index.d.ts +8 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +2 -2
- package/dist/console/run.js +2 -2
- package/dist/console/run.js.map +1 -1
- package/dist/container/index.js +2 -2
- package/dist/container/index.js.map +1 -1
- package/dist/database/index.js +2 -2
- package/dist/database/index.js.map +1 -1
- package/dist/email/index.js +2 -2
- package/dist/email/index.js.map +1 -1
- package/dist/facades/Lang.d.ts +7 -1
- package/dist/facades/Lang.d.ts.map +1 -1
- package/dist/facades/index.js +2 -2
- package/dist/facades/index.js.map +1 -1
- package/dist/foundation/index.js +2 -2
- package/dist/foundation/index.js.map +1 -1
- package/dist/http/CorsMiddleware.d.ts +13 -0
- package/dist/http/CorsMiddleware.d.ts.map +1 -1
- package/dist/http/Middleware.d.ts +11 -0
- package/dist/http/Middleware.d.ts.map +1 -1
- package/dist/http/ViewRouter.d.ts +29 -0
- package/dist/http/ViewRouter.d.ts.map +1 -1
- package/dist/http/index.js +2 -2
- package/dist/http/index.js.map +1 -1
- package/dist/i18n/dictionaryRuntime.js +2 -2
- package/dist/i18n/dictionaryRuntime.js.map +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/index.js.map +1 -1
- package/dist/internal/islandRuntime.d.ts +45 -0
- package/dist/internal/islandRuntime.d.ts.map +1 -0
- package/dist/kernel/index.js +2 -2
- package/dist/kernel/index.js.map +1 -1
- package/dist/orm/context.d.ts +24 -0
- package/dist/orm/context.d.ts.map +1 -1
- package/dist/orm/index.d.ts +1 -1
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +3 -3
- package/dist/orm/index.js.map +2 -2
- package/dist/server/devFetch.d.ts.map +1 -1
- package/dist/server/httpDev.d.ts.map +1 -1
- package/dist/server/httpProd.d.ts.map +1 -1
- package/dist/server/idleTimeout.d.ts +24 -0
- package/dist/server/idleTimeout.d.ts.map +1 -0
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/modulePreloads.d.ts +7 -6
- package/dist/server/modulePreloads.d.ts.map +1 -1
- package/dist/services/index.js +2 -2
- package/dist/services/index.js.map +1 -1
- package/dist/services/middleware/MiddlewareRegistry.d.ts +13 -2
- package/dist/services/middleware/MiddlewareRegistry.d.ts.map +1 -1
- package/dist/services/queue/work.js +2 -2
- package/dist/services/queue/work.js.map +1 -1
- package/dist/services/router/DomainRouter.d.ts +10 -0
- package/dist/services/router/DomainRouter.d.ts.map +1 -1
- package/dist/services/router/ViewRouteDispatcher.d.ts +3 -1
- package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
- package/dist/services/router/staticCache.d.ts +23 -0
- package/dist/services/router/staticCache.d.ts.map +1 -0
- package/dist/services/router/staticDocument.d.ts +39 -17
- package/dist/services/router/staticDocument.d.ts.map +1 -1
- package/dist/stats/bundleStats.d.ts +104 -0
- package/dist/stats/bundleStats.d.ts.map +1 -0
- package/dist/stats/route-table.d.ts +2 -0
- package/dist/stats/route-table.d.ts.map +1 -0
- package/dist/stats/route-table.js +4 -0
- package/dist/stats/route-table.js.map +11 -0
- package/dist/stats/routeTable.d.ts +25 -0
- package/dist/stats/routeTable.d.ts.map +1 -0
- package/dist/stats/run.d.ts +43 -0
- package/dist/stats/run.d.ts.map +1 -0
- package/dist/support/index.js +2 -2
- package/dist/support/index.js.map +1 -1
- package/dist/vite/index.mjs +125 -23
- package/dist/vitest/index.d.ts +18 -0
- package/dist/vitest/index.d.ts.map +1 -1
- package/dist/vitest/index.js +2 -2
- package/dist/vitest/index.js.map +3 -3
- package/package.json +2 -1
- package/dist/chunk-1es50p4k.js +0 -5
- package/dist/chunk-9qw9fa6z.js +0 -4
- package/dist/chunk-d5sbnzng.js +0 -18
- package/dist/chunk-ehasw3qm.js +0 -5
- package/dist/chunk-fe1pcnw6.js +0 -6
- package/dist/chunk-fj6yftm7.js +0 -58
- package/dist/chunk-fj6yftm7.js.map +0 -14
- package/dist/chunk-gdsby5jh.js +0 -4
- package/dist/chunk-ngw4xzrt.js +0 -9
- package/dist/chunk-ngw4xzrt.js.map +0 -10
- package/dist/chunk-pa3khk46.js +0 -5
- package/dist/chunk-rjcsdazt.js +0 -4
- package/dist/chunk-s5aa4hty.js +0 -17
- package/dist/chunk-w3j53r0a.js +0 -24
- package/dist/chunk-y66ntxbg.js +0 -4
- package/dist/chunk-z9x8x3wq.js +0 -5
- /package/dist/{chunk-m9609t1y.js.map → chunk-0sjh5v1n.js.map} +0 -0
- /package/dist/{chunk-vwkdfngg.js.map → chunk-8b2tw2yp.js.map} +0 -0
- /package/dist/{chunk-r9gzbjc5.js.map → chunk-et4pv1b1.js.map} +0 -0
package/dist/client/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { A as useLocation, B as QueryManagerProvider, C as useRoute, D as I18nProvider, E as I18nContext, G as retryDelayFor, H as pickDefined, I as toVariantKey, J as Subject, K as shouldRetryQuery, L as applyParams$1, M as isAbsoluteUrl, O as ServerDataContext, P as Action, R as QueryConfigContext, S as routeDataUrl, T as useNavigate, U as DEFAULT_STALE_TIME, V as USER_QUERY_CONFIG_KEYS, W as isRetryableQueryError, _ as loadDictionary, a as useRouteTransition, b as setActiveLocale, c as ComponentsContext, d as loadViewModule, f as subscribeViewModules, g as recoverFromChunkLoadError, h as isChunkLoadError, i as RouteTransitionProvider, j as domainUrl, k as ServerDataProvider, l as ComponentsProvider, m as configureChunkLoadRecovery, n as useTheme, o as ClientRouterContext, p as CHUNK_RELOAD_MARKER, q as QueryError, r as m, s as ClientRouterProvider, t as ThemeProvider, u as initialViewModulesReady, v as loadDictionaryForRender, w as useSearchParams, x as readRoutePayload, y as registerDictionary, z as QueryManagerContext } from "../chunks/ThemeProvider-BgLyzzOL.js";
|
|
2
2
|
import { n as RouteStateContext, r as RouteStateProvider, t as useParams } from "../chunks/useParams-BN3XXfmG.js";
|
|
3
|
-
import { Fragment, StrictMode, Suspense, createContext, createElement, isValidElement, memo, use, useCallback, useContext, useDeferredValue, useEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
|
|
3
|
+
import { Fragment, StrictMode, Suspense, createContext, createElement, isValidElement, lazy, memo, use, useCallback, useContext, useDeferredValue, useEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
|
|
4
4
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { createRoot as createRoot$1, hydrateRoot } from "react-dom/client";
|
|
6
6
|
//#region client/ServerQueryContext.tsx
|
|
@@ -2645,71 +2645,125 @@ function useAppIdMissmatch() {
|
|
|
2645
2645
|
}
|
|
2646
2646
|
//#endregion
|
|
2647
2647
|
//#region client/islands.tsx
|
|
2648
|
+
/** @internal The element an island's static children land in. */
|
|
2649
|
+
var ISLAND_SLOT_TAG = "gemi-slot";
|
|
2650
|
+
/** @internal On the empty slot an island's own render leaves for its children. */
|
|
2651
|
+
var ISLAND_SLOT_ATTRIBUTE = "data-slot";
|
|
2652
|
+
/** @internal On the template holding the children the page tree rendered. */
|
|
2653
|
+
var ISLAND_SLOT_TEMPLATE_ATTRIBUTE = "data-gemi-slot";
|
|
2648
2654
|
/** The property gemi's Vite plugin attaches to an island's loader. */
|
|
2649
2655
|
var ISLAND_MODULE_KEY = "gemiIsland";
|
|
2650
2656
|
var CONTEXT_KEY = Symbol.for("gemi.staticRender");
|
|
2651
2657
|
/**
|
|
2652
|
-
* @internal
|
|
2653
|
-
*
|
|
2654
|
-
*
|
|
2655
|
-
* On `globalThis` rather than a module-level `createContext`: the published
|
|
2656
|
-
* package bundles `gemi/client` and the server side separately, so a plain
|
|
2657
|
-
* module singleton would give the provider and the islands two different
|
|
2658
|
+
* @internal On `globalThis` rather than a module-level `createContext`: the
|
|
2659
|
+
* published package bundles `gemi/client` and the server side separately, so a
|
|
2660
|
+
* plain module singleton would give the provider and the islands two different
|
|
2658
2661
|
* context objects.
|
|
2659
2662
|
*/
|
|
2660
2663
|
var StaticRenderContext = globalThis[CONTEXT_KEY] ??= createContext(null);
|
|
2661
|
-
|
|
2662
|
-
if (!option) return;
|
|
2663
|
-
let value;
|
|
2664
|
-
if (option === true) {
|
|
2665
|
-
const { children: _children, ...rest } = props ?? {};
|
|
2666
|
-
value = rest;
|
|
2667
|
-
} else value = option(props);
|
|
2668
|
-
return JSON.stringify(value);
|
|
2669
|
-
}
|
|
2664
|
+
var isProduction = () => typeof process !== "undefined" && process.env.NODE_ENV === "production";
|
|
2670
2665
|
/**
|
|
2671
|
-
*
|
|
2672
|
-
*
|
|
2673
|
-
*
|
|
2674
|
-
*
|
|
2675
|
-
* ```
|
|
2676
|
-
*
|
|
2677
|
-
* - In a **static** view (`this.view(...).static()`), it server-renders
|
|
2678
|
-
* `Component` inside a `<gemi-island name="nav-menu">` marker and records
|
|
2679
|
-
* that the page uses it. The document then carries a tiny loader plus the
|
|
2680
|
-
* island's own module — and only for islands that rendered. The module's
|
|
2681
|
-
* default export (`IslandMount`) is called once per marker.
|
|
2682
|
-
* - In a **hydrated** view, it renders `Component` as an ordinary component and
|
|
2683
|
-
* loads nothing: the same component works in both kinds of page.
|
|
2684
|
-
*
|
|
2685
|
-
* The client module must be a file named `*.island.ts` (or `.tsx`/`.js`)
|
|
2686
|
-
* under `app/`, imported exactly as `() => import("./path.island")`: gemi's
|
|
2687
|
-
* Vite plugin finds that call, builds the file as its own entry, and tells the
|
|
2688
|
-
* server which built file it is.
|
|
2689
|
-
*
|
|
2690
|
-
* `name` identifies the island in the markup and must be unique per module.
|
|
2666
|
+
* Throws when `value` would not survive `JSON.stringify` and `JSON.parse`
|
|
2667
|
+
* unchanged, naming the prop. An island's props cross from the server to the
|
|
2668
|
+
* browser as JSON: a function would vanish and a `Date` would arrive as a
|
|
2669
|
+
* string, so the island would hydrate with other props than it rendered with.
|
|
2691
2670
|
*/
|
|
2692
|
-
function
|
|
2693
|
-
|
|
2671
|
+
function assertSerialisableProps(value, island) {
|
|
2672
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2673
|
+
const fail = (path, what) => {
|
|
2674
|
+
throw new Error(`${island}: the prop \`${path}\` is ${what}. An island's props are sent to the browser as JSON, so they must be plain data: strings, finite numbers, booleans, null, arrays and plain objects. Pass static markup as children instead.`);
|
|
2675
|
+
};
|
|
2676
|
+
const walk = (v, path, inArray) => {
|
|
2677
|
+
switch (typeof v) {
|
|
2678
|
+
case "string":
|
|
2679
|
+
case "boolean": return;
|
|
2680
|
+
case "number":
|
|
2681
|
+
if (!Number.isFinite(v)) fail(path, String(v));
|
|
2682
|
+
return;
|
|
2683
|
+
case "undefined":
|
|
2684
|
+
if (inArray) fail(path, "undefined (it would arrive as null)");
|
|
2685
|
+
return;
|
|
2686
|
+
case "function":
|
|
2687
|
+
fail(path, "a function");
|
|
2688
|
+
return;
|
|
2689
|
+
case "symbol":
|
|
2690
|
+
case "bigint":
|
|
2691
|
+
fail(path, `a ${typeof v}`);
|
|
2692
|
+
return;
|
|
2693
|
+
}
|
|
2694
|
+
if (v === null) return;
|
|
2695
|
+
const object = v;
|
|
2696
|
+
if (seen.has(object)) fail(path, "a circular reference");
|
|
2697
|
+
if ("$$typeof" in object) fail(path, "a React element");
|
|
2698
|
+
seen.add(object);
|
|
2699
|
+
if (Array.isArray(object)) object.forEach((item, i) => walk(item, `${path}[${i}]`, true));
|
|
2700
|
+
else {
|
|
2701
|
+
const proto = Object.getPrototypeOf(object);
|
|
2702
|
+
if (proto !== Object.prototype && proto !== null) fail(path, `an instance of ${proto?.constructor?.name || "a class"}`);
|
|
2703
|
+
for (const [key, item] of Object.entries(object)) walk(item, path ? `${path}.${key}` : key, false);
|
|
2704
|
+
}
|
|
2705
|
+
seen.delete(object);
|
|
2706
|
+
};
|
|
2707
|
+
walk(value, "", false);
|
|
2708
|
+
}
|
|
2709
|
+
var hasChildren = (children) => children !== void 0 && children !== null && typeof children !== "boolean";
|
|
2710
|
+
function island(loader, options = {}) {
|
|
2711
|
+
if (typeof loader !== "function") throw new Error("island() takes `() => import(\"./Component\")` and options since gemi 0.110. The island(\"name\", Component, () => import(\"./x.island\")) form was removed: see UPGRADE.md.");
|
|
2712
|
+
const exportName = options.export ?? "default";
|
|
2694
2713
|
const load = options.load ?? "eager";
|
|
2714
|
+
const key = loader[ISLAND_MODULE_KEY];
|
|
2715
|
+
const label = `island(${key ?? "() => import(…)"}${exportName === "default" ? "" : `#${exportName}`})`;
|
|
2716
|
+
const pick = (mod) => {
|
|
2717
|
+
const component = mod?.[exportName];
|
|
2718
|
+
if (typeof component !== "function" && (typeof component !== "object" || component === null)) throw new Error(`${label}: the module has no component export \`${exportName}\`.`);
|
|
2719
|
+
return component;
|
|
2720
|
+
};
|
|
2721
|
+
let inline;
|
|
2722
|
+
const inlineComponent = () => inline ??= loader.gemiModule ? pick(loader.gemiModule) : lazy(() => loader().then((mod) => ({ default: pick(mod) })));
|
|
2723
|
+
const register = (collector) => {
|
|
2724
|
+
const known = collector.islands.findIndex((entry) => key !== void 0 && entry.module === key && entry.export === exportName && entry.load === load);
|
|
2725
|
+
return known !== -1 ? known : collector.islands.push({
|
|
2726
|
+
module: key,
|
|
2727
|
+
export: exportName,
|
|
2728
|
+
load
|
|
2729
|
+
}) - 1;
|
|
2730
|
+
};
|
|
2731
|
+
const start = (collector, props) => {
|
|
2732
|
+
const { children, ...rest } = props;
|
|
2733
|
+
if (!isProduction()) assertSerialisableProps(rest, label);
|
|
2734
|
+
const uid = `i${collector.count++}-`;
|
|
2735
|
+
const html = (loader.gemiModule ? Promise.resolve(pick(loader.gemiModule)) : loader().then(pick)).then((Component) => collector.render(createElement(StaticRenderContext.Provider, { value: null }, hasChildren(children) ? createElement(Component, rest, createElement(ISLAND_SLOT_TAG, {
|
|
2736
|
+
[ISLAND_SLOT_ATTRIBUTE]: uid,
|
|
2737
|
+
style: { display: "contents" }
|
|
2738
|
+
})) : createElement(Component, rest)), uid));
|
|
2739
|
+
html.catch(() => {});
|
|
2740
|
+
const json = JSON.stringify(rest);
|
|
2741
|
+
return {
|
|
2742
|
+
html,
|
|
2743
|
+
index: register(collector),
|
|
2744
|
+
uid,
|
|
2745
|
+
props: json === "{}" ? void 0 : json
|
|
2746
|
+
};
|
|
2747
|
+
};
|
|
2695
2748
|
function Island(props) {
|
|
2696
2749
|
const collector = useContext(StaticRenderContext);
|
|
2697
|
-
if (!collector) return createElement(
|
|
2698
|
-
|
|
2699
|
-
if (
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2750
|
+
if (!collector) return createElement(inlineComponent(), props);
|
|
2751
|
+
let instance = collector.instances.get(props);
|
|
2752
|
+
if (!instance) {
|
|
2753
|
+
instance = start(collector, props);
|
|
2754
|
+
collector.instances.set(props, instance);
|
|
2755
|
+
}
|
|
2756
|
+
const marker = createElement("gemi-island", {
|
|
2757
|
+
"data-island": instance.index,
|
|
2758
|
+
"data-uid": instance.uid,
|
|
2759
|
+
"data-props": instance.props,
|
|
2760
|
+
style: { display: "contents" },
|
|
2761
|
+
dangerouslySetInnerHTML: { __html: use(instance.html) }
|
|
2705
2762
|
});
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
"data-props": serialiseProps(props, options.props),
|
|
2709
|
-
style: { display: "contents" }
|
|
2710
|
-
}, createElement(Component, props));
|
|
2763
|
+
if (!hasChildren(props.children)) return marker;
|
|
2764
|
+
return createElement(Fragment, null, marker, createElement("template", { [ISLAND_SLOT_TEMPLATE_ATTRIBUTE]: instance.uid }, props.children));
|
|
2711
2765
|
}
|
|
2712
|
-
Island.displayName =
|
|
2766
|
+
Island.displayName = label;
|
|
2713
2767
|
return Island;
|
|
2714
2768
|
}
|
|
2715
2769
|
//#endregion
|