zova-module-a-ssr 5.1.18 → 5.1.20
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/index.js +34 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/ssr.d.ts +4 -0
- package/dist/lib/ssr.d.ts.map +1 -1
- package/dist/lib/ssrMetaStore.d.ts.map +1 -1
- package/dist/monkey.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/lib/ssr.ts +36 -1
- package/src/lib/ssrMetaStore.ts +8 -2
- package/src/monkey.ts +3 -0
package/dist/index.js
CHANGED
|
@@ -92,6 +92,7 @@ function useMeta(ctx, metaOptions) {
|
|
|
92
92
|
var Monkey = class extends BeanSimple {
|
|
93
93
|
appContextInitialize(ctx) {
|
|
94
94
|
ctx.meta.$ssr = ctx.app.ctx.meta.$ssr;
|
|
95
|
+
if (process.env.SERVER) ctx.meta.$ssr._registerServerContext(ctx);
|
|
95
96
|
}
|
|
96
97
|
async appInitialize() {
|
|
97
98
|
if (process.env.SERVER) this._ssrErrorHandler();
|
|
@@ -179,13 +180,17 @@ var CtxSSRMetaStore = class extends BeanSimple {
|
|
|
179
180
|
}
|
|
180
181
|
}
|
|
181
182
|
_onRenderedLast(err) {
|
|
182
|
-
|
|
183
|
+
const app = this.app;
|
|
184
|
+
try {
|
|
185
|
+
if (err) return;
|
|
183
186
|
const ssrContext = this.ctx.meta.$ssr.context;
|
|
184
187
|
this._injectContextState(ssrContext);
|
|
185
188
|
this._injectContextStateDefer(ssrContext);
|
|
186
189
|
this._injectServerMeta(ssrContext);
|
|
190
|
+
} finally {
|
|
191
|
+
this.ctx.meta.$ssr._disposeServerContexts();
|
|
192
|
+
app?.close();
|
|
187
193
|
}
|
|
188
|
-
this.app.close();
|
|
189
194
|
}
|
|
190
195
|
addMetaOptions(metaOptionsWrapper) {
|
|
191
196
|
this._clientList.push(metaOptionsWrapper);
|
|
@@ -447,6 +452,7 @@ var SymbolOnHydrateds = Symbol("SymbolOnHydrateds");
|
|
|
447
452
|
var SymbolOnHydratePropHasMismatches = Symbol("SymbolOnHydratePropHasMismatches");
|
|
448
453
|
var SymbolInstanceUpdates = Symbol("SymbolInstanceUpdates");
|
|
449
454
|
var SymbolHydratingCounter = Symbol("SymbolHydratingCounter");
|
|
455
|
+
var SymbolServerContexts = Symbol("SymbolServerContexts");
|
|
450
456
|
var CtxSSR = class extends BeanSimple {
|
|
451
457
|
constructor(...args) {
|
|
452
458
|
super(...args);
|
|
@@ -457,10 +463,12 @@ var CtxSSR = class extends BeanSimple {
|
|
|
457
463
|
this[SymbolOnHydratePropHasMismatches] = [];
|
|
458
464
|
this[SymbolInstanceUpdates] = [];
|
|
459
465
|
this[SymbolHydratingCounter] = 0;
|
|
466
|
+
this[SymbolServerContexts] = /* @__PURE__ */ new Set();
|
|
460
467
|
this.metaStore = void 0;
|
|
461
468
|
}
|
|
462
469
|
/** @internal */
|
|
463
470
|
initialize() {
|
|
471
|
+
if (process.env.SERVER) this._serverContextRegister();
|
|
464
472
|
this[SymbolSSRState] = this.sys.bean._getBeanSyncOnly("a-ssr.sys.ssrState");
|
|
465
473
|
if (process.env.SERVER) this[SymbolIsRuntimeSsrPreHydration].value = true;
|
|
466
474
|
else if (process.env.CLIENT && document.body.getAttribute("data-server-rendered") !== null) this[SymbolIsRuntimeSsrPreHydration].value = true;
|
|
@@ -472,6 +480,22 @@ var CtxSSR = class extends BeanSimple {
|
|
|
472
480
|
document.querySelectorAll("style[vite-css-module-id]").forEach((node) => node.remove());
|
|
473
481
|
});
|
|
474
482
|
}
|
|
483
|
+
_serverContextRegister(currentContext = this.ctx) {
|
|
484
|
+
const serverContexts = this[SymbolServerContexts];
|
|
485
|
+
serverContexts.add(currentContext);
|
|
486
|
+
this.context.onRendered(() => {
|
|
487
|
+
serverContexts.delete(currentContext);
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
_serverContextsDispose() {
|
|
491
|
+
const serverContexts = this[SymbolServerContexts];
|
|
492
|
+
for (const serverContext of serverContexts) {
|
|
493
|
+
if (serverContext.disposed) continue;
|
|
494
|
+
if (serverContext.bean && serverContext.bean !== serverContext.app?.bean) serverContext.bean.dispose();
|
|
495
|
+
serverContext.dispose();
|
|
496
|
+
}
|
|
497
|
+
serverContexts.clear();
|
|
498
|
+
}
|
|
475
499
|
get isRuntimeSsrPreHydration() {
|
|
476
500
|
return this[SymbolIsRuntimeSsrPreHydration].value;
|
|
477
501
|
}
|
|
@@ -618,6 +642,14 @@ var CtxSSR = class extends BeanSimple {
|
|
|
618
642
|
}
|
|
619
643
|
return false;
|
|
620
644
|
}
|
|
645
|
+
/** @internal */
|
|
646
|
+
_registerServerContext(currentContext) {
|
|
647
|
+
this._serverContextRegister(currentContext);
|
|
648
|
+
}
|
|
649
|
+
/** @internal */
|
|
650
|
+
_disposeServerContexts() {
|
|
651
|
+
this._serverContextsDispose();
|
|
652
|
+
}
|
|
621
653
|
};
|
|
622
654
|
//#endregion
|
|
623
655
|
//#region src/monkeySys.ts
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/bean/sys.ssrState.ts","../src/config/config.ts","../src/lib/useMeta.ts","../src/monkey.ts","../src/lib/utils.ts","../src/lib/ssrMetaStore.ts","../src/lib/ssr.ts","../src/monkeySys.ts","../src/.metadata/index.ts"],"sourcesContent":["import { BeanBase, cast } from 'zova';\nimport { Sys } from 'zova-module-a-bean';\n\nimport { SSRContextState, SSRContextStateDefer } from '../types/ssr.js';\n\nconst SymbolSSRState = Symbol('SymbolSSRState');\nconst SymbolSSRStateDefer = Symbol('SymbolSSRStateDefer');\n\n@Sys()\nexport class SysSsrState extends BeanBase {\n protected [SymbolSSRState]: SSRContextState;\n protected [SymbolSSRStateDefer]: SSRContextStateDefer;\n\n protected async __init__() {\n if (process.env.CLIENT) {\n if (cast(window).__INITIAL_STATE__) {\n this[SymbolSSRState] = cast(window).__INITIAL_STATE__;\n delete cast(window).__INITIAL_STATE__;\n document.getElementById('ssr-state-init')?.remove();\n } else {\n this[SymbolSSRState] = {};\n }\n if (cast(window).__INITIAL_STATE_DEFER__) {\n this[SymbolSSRStateDefer] = cast(window).__INITIAL_STATE_DEFER__;\n delete cast(window).__INITIAL_STATE_DEFER__;\n document.getElementById('ssr-state-defer-init')?.remove();\n } else {\n this[SymbolSSRStateDefer] = {} as any;\n }\n }\n }\n\n get state() {\n return this[SymbolSSRState];\n }\n\n get stateDefer() {\n return this[SymbolSSRStateDefer];\n }\n}\n","import type { StringValue } from 'ms';\nimport type { ZovaSys } from 'zova';\n\nimport { ISsrConfig } from '../types/config.js';\n\nexport const config = (sys: ZovaSys) => {\n const ssrConfig: ISsrConfig = {\n cookieThemeDarkDefault: sys.env.SSR_COOKIE_THEMEDARK_DEFAULT === 'true',\n optimization: {\n bodyReadyObserver: sys.env.SSR_BODYREADYOBSERVER === 'true',\n },\n transferCache:\n sys.env.SSR_TRANSFERCACHE === 'false'\n ? false\n : {\n expires: _normalizeExpires(sys.env.SSR_TRANSFERCACHE_EXPIRES),\n },\n };\n return ssrConfig;\n};\n\nfunction _normalizeExpires(expires: string | undefined): StringValue | number {\n if (!expires) return 0;\n if (!Number.isNaN(Number(expires))) return Number(expires);\n return expires as StringValue;\n}\n","import type { ZovaContext } from 'zova';\n\n// from: quasar/ui/src/composables/use-meta.js\nimport { computed, onActivated, onDeactivated, onUnmounted, watch } from 'vue';\n\nimport type { SSRMetaOptions, SSRMetaOptionsWrapper } from '../types/ssr.js';\n\nexport function useMeta(ctx: ZovaContext, metaOptions) {\n if (process.env.SERVER) {\n ctx.meta.$ssr.context.__qMetaList.push(\n typeof metaOptions === 'function' ? metaOptions() : metaOptions,\n );\n } else {\n const meta: SSRMetaOptionsWrapper = { active: true };\n\n if (typeof metaOptions === 'function') {\n const content = computed<SSRMetaOptions>(metaOptions);\n meta.val = content.value;\n\n watch(content, val => {\n meta.val = val;\n meta.active === true && ctx.meta.$ssr.metaStore.planClientUpdate();\n });\n } else {\n meta.val = metaOptions;\n }\n\n ctx.meta.$ssr.metaStore.addMetaOptions(meta);\n ctx.meta.$ssr.metaStore.planClientUpdate();\n\n onActivated(() => {\n try {\n meta.active = true;\n ctx.meta.$ssr.metaStore.planClientUpdate();\n } catch (_err) {}\n });\n\n onDeactivated(() => {\n try {\n meta.active = false;\n ctx.meta.$ssr.metaStore.planClientUpdate();\n } catch (_err) {}\n });\n\n onUnmounted(() => {\n try {\n ctx.meta.$ssr.metaStore.removeMetaOptions(meta);\n ctx.meta.$ssr.metaStore.planClientUpdate();\n } catch (_err) {}\n });\n }\n}\n","import type { IModule } from '@cabloy/module-info';\nimport type {\n BeanBase,\n BeanContainer,\n IMonkeyAppContextInitialize,\n IMonkeyAppInitialize,\n IMonkeyBeanInit,\n IMonkeyModule,\n ZovaContext,\n} from 'zova';\n\nimport { isNavigationFailure } from '@cabloy/vue-router';\nimport { BeanSimple, cast } from 'zova';\n\nimport type { SSRMetaOptions } from './types/ssr.js';\n\nimport { useMeta } from './lib/useMeta.js';\n\nexport class Monkey\n extends BeanSimple\n implements IMonkeyAppContextInitialize, IMonkeyAppInitialize, IMonkeyBeanInit, IMonkeyModule\n{\n appContextInitialize(ctx: ZovaContext): void {\n ctx.meta.$ssr = ctx.app.ctx.meta.$ssr;\n }\n\n async appInitialize() {\n // ssr errorHandler\n if (process.env.SERVER) {\n this._ssrErrorHandler();\n }\n }\n\n async moduleLoading(_module: IModule) {}\n async moduleLoaded(module: IModule) {\n // ssrContext.modules\n if (process.env.SERVER && process.env.PROD) {\n if (!this.ctx.meta.$ssr.context.modules) this.ctx.meta.$ssr.context.modules = new Set();\n this.ctx.meta.$ssr.context.modules.add(`@@${module.info.relativeName}`);\n }\n }\n\n async beanInit(bean: BeanContainer, beanInstance: BeanBase) {\n const self = this;\n // $ssr\n bean.defineProperty(beanInstance, '$ssr', {\n enumerable: false,\n configurable: true,\n get() {\n return self.app.ctx.meta.$ssr;\n },\n });\n // $useMeta\n bean.defineProperty(beanInstance, '$useMeta', {\n enumerable: false,\n configurable: true,\n get() {\n return function (this: BeanBase, options: SSRMetaOptions | (() => SSRMetaOptions)) {\n const ctx: ZovaContext = cast(this).ctx;\n ctx.util.instanceScope(() => {\n useMeta(ctx, options);\n });\n };\n },\n });\n }\n\n private _ssrErrorHandler() {\n if (!process.env.SERVER) return;\n const _eventErrorHandler = this.app.meta.event.on('app:errorHandler', (_data, next) => {\n const err = next();\n if (!err || !(err instanceof Error)) return err;\n return this._errorHandlerDefaultServer(err);\n });\n this.ctx.meta.$ssr.context.onRendered((_err?: Error) => {\n _eventErrorHandler();\n });\n }\n\n private _errorHandlerDefaultServer(err: Error) {\n if (!process.env.SERVER) return err;\n if (isNavigationFailure(err)) {\n if (!this.ctx.meta.$ssr.renderSSRError) {\n this.ctx.meta.$ssr.renderSSRError = err;\n }\n return undefined;\n } else if (err.code === 401) {\n try {\n this.app.$gotoLogin();\n } catch (err: any) {\n this.ctx.meta.$ssr.renderSSRError = err;\n }\n } else {\n this.ctx.meta.$ssr.renderSSRError = err;\n }\n return undefined;\n }\n}\n","import * as devalue from 'devalue';\n\nexport function unevalPatch(value: any) {\n return devalue.uneval(value);\n // return devalue.uneval(value, value => {\n // if (value && typeof value === 'object' && value.toJSON) {\n // return value.toJSON();\n // }\n // });\n}\n","// from: quasar/ui/src/plugins/Meta.js\nimport { extend } from '@cabloy/extend';\nimport { BeanSimple, cast } from 'zova';\n\nimport type { SSRContext, SSRMetaOptions, SSRMetaOptionsWrapper } from '../types/ssr.js';\n\nimport { unevalPatch } from './utils.js';\n\nexport class CtxSSRMetaStore extends BeanSimple {\n private _updateId: number = 0;\n private _currentClientMeta?: SSRMetaOptions;\n private _clientList: SSRMetaOptionsWrapper[] = [];\n\n protected __init__() {\n if (process.env.SERVER) {\n const ssrContext = this.ctx.meta.$ssr.context;\n ssrContext.__qMetaList = [];\n if (this.sys.env.SSR_BODYREADYOBSERVER === 'true') {\n ssrContext.__qMetaList.push({\n bodyStyle: { display: 'none' },\n });\n }\n ssrContext.rendered = () => {\n this._onRenderedLast();\n ssrContext.rendered = () => {};\n };\n }\n if (process.env.CLIENT && this.ctx.meta.$ssr.isRuntimeSsrPreHydration) {\n this._currentClientMeta = cast(window).__Q_META__;\n document.getElementById('ssr-meta-init')?.remove();\n }\n }\n\n private _onRenderedLast(err?: Error) {\n if (!err) {\n const ssrContext = this.ctx.meta.$ssr.context;\n this._injectContextState(ssrContext);\n this._injectContextStateDefer(ssrContext);\n this._injectServerMeta(ssrContext);\n }\n this.app.close();\n }\n\n addMetaOptions(metaOptionsWrapper: SSRMetaOptionsWrapper) {\n this._clientList.push(metaOptionsWrapper);\n }\n\n removeMetaOptions(metaOptionsWrapper: SSRMetaOptionsWrapper) {\n this._clientList.splice(this._clientList.indexOf(metaOptionsWrapper), 1);\n }\n\n planClientUpdate() {\n if (this._updateId !== 0) {\n clearTimeout(this._updateId);\n }\n this._updateId = window.setTimeout(() => {\n this._updateId = 0;\n this._updateClientMeta();\n }, 50);\n }\n\n private _updateClientMeta() {\n const data: SSRMetaOptions = {\n title: '',\n titleTemplate: undefined,\n meta: {},\n link: {},\n script: {},\n htmlAttr: {},\n bodyAttr: {},\n };\n\n for (let i = 0; i < this._clientList.length; i++) {\n const { active, val } = this._clientList[i];\n\n if (active === true) {\n extend(true, data, val);\n }\n }\n\n normalize(data);\n\n apply(diff(this._currentClientMeta, data));\n this._currentClientMeta = data;\n }\n\n private _injectServerMeta(ssrContext: SSRContext) {\n const data: SSRMetaOptions = {\n title: '',\n titleTemplate: undefined,\n meta: {},\n link: {},\n htmlAttr: {},\n bodyAttr: {},\n bodyStyle: {},\n bodyClass: {},\n noscript: {},\n };\n\n const list = ssrContext.__qMetaList;\n\n for (let i = 0; i < list.length; i++) {\n extend(true, data, list[i]);\n }\n\n normalize(data);\n\n const nonce = ssrContext.nonce !== void 0 ? ` nonce=\"${ssrContext.nonce}\"` : '';\n\n const ctx = ssrContext._meta;\n\n const htmlAttr = Object.keys(data.htmlAttr!).filter(htmlFilter);\n\n if (htmlAttr.length !== 0) {\n ctx.htmlAttrs +=\n (ctx.htmlAttrs.length !== 0 ? ' ' : '') + htmlAttr.map(getAttr(data.htmlAttr)).join(' ');\n }\n\n ctx.headTags += getHead(data);\n\n const bodyAttr = Object.keys(data.bodyAttr!).filter(bodyFilter);\n\n if (bodyAttr.length !== 0) {\n ctx.bodyAttrs +=\n (ctx.bodyAttrs.length !== 0 ? ' ' : '') + bodyAttr.map(getAttr(data.bodyAttr)).join(' ');\n }\n\n const bodyStyle = Object.keys(data.bodyStyle!)\n .filter(name => !!data.bodyStyle![name])\n .map(name => `${name}:${data.bodyStyle![name]};`)\n .join('');\n if (bodyStyle) {\n ctx.bodyAttrs += `${ctx.bodyAttrs.length !== 0 ? ' ' : ''}style=\"${bodyStyle}\"`;\n }\n\n const _bodyClass = ctx.bodyClasses.split(' ').filter(item => !!item);\n const bodyClass = {};\n _bodyClass.forEach(item => (bodyClass[item] = true));\n extend(true, bodyClass, data.bodyClass);\n ctx.bodyClasses = Object.keys(bodyClass)\n .filter(name => bodyClass[name])\n .map(name => name)\n .join(' ');\n\n data.title = '\\'\"`';\n\n ctx.endingHeadTags += `${Object.keys(data.noscript!)\n .map(name => `<noscript data-qmeta=\"${name}\">${data.noscript![name]}</noscript>`)\n .join(\n '',\n )}<script${nonce} id=\"ssr-meta-init\">window.__Q_META__=${delete data.bodyStyle && delete data.bodyClass && delete data.noscript && unevalPatch(data)}</script>`;\n\n let ssr_local_themedark = this.sys.config.ssr.cookie\n ? `let ssr_cookie_themedark=document.cookie.split('; ')?.find(item=>item.indexOf('themedark=')>-1)?.split('=')[1];\n ssr_cookie_themedark=ssr_cookie_themedark==='true'?true:ssr_cookie_themedark==='false'?false:${this.sys.env.SSR_COOKIE_THEMEDARK_DEFAULT};\n window.ssr_themedark=window.ssr_cookie_themedark=ssr_cookie_themedark;`\n : `let ssr_local_themedark=window.ssr_load_local('themedark');\n if(ssr_local_themedark===undefined || ssr_local_themedark==='auto'){\n ssr_local_themedark=window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n window.ssr_themedark=window.ssr_local_themedark=ssr_local_themedark;`;\n ssr_local_themedark += `Object.defineProperty(window, 'ssr_themedark_data', {\n get: () => {\n let _data=document.body.getAttribute('data-ssr-theme-dark-'+window.ssr_themedark);\n if(_data===undefined || _data===null){\n _data=window.__INITIAL_STATE__ && window.__INITIAL_STATE__['data-ssr-theme-dark-'+window.ssr_themedark];\n }\n return _data;\n },\n });`;\n const ssr_local_themename = this.sys.config.ssr.cookie\n ? ''\n : \"window.ssr_local_themename=window.ssr_load_local('themename');\";\n ctx.endingHeadTags += `<script id=\"ssr-prefers-color-schema-dark\">\n window.ssr_load_local=function(key){\n const __ssr_local=localStorage.getItem(key);\n return __ssr_local?JSON.parse(__ssr_local):undefined;\n };\n ${ssr_local_themedark}\n ${ssr_local_themename}\n document.querySelector('#ssr-prefers-color-schema-dark').remove();\n </script>`.replaceAll('\\n', '');\n\n if (this.sys.env.SSR_BODYREADYOBSERVER === 'true') {\n ctx.bodyTags += `<script id=\"ssr-body-ready-observer\">\n window.ssr_bodyReadyObserverClear=()=>{\n if(window.ssr_bodyReadyObserver){\n window.ssr_body_ready_condition=undefined;\n window.ssr_body_ready_callback=undefined;\n window.ssr_bodyReadyObserver.disconnect();\n window.ssr_bodyReadyObserver=undefined;\n document.body.style.display='block';\n document.querySelector('#ssr-body-ready-observer').remove();\n }\n };\n window.ssr_bodyReadyObserver = new MutationObserver(() => {\n if(window.ssr_body_ready_condition && window.ssr_body_ready_condition()){\n window.ssr_body_ready_callback();\n window.ssr_bodyReadyObserverClear();\n }\n });\n window.ssr_bodyReadyObserver.observe(document.body, {\n subtree: true,\n childList: true,\n });\n document.addEventListener(\"DOMContentLoaded\", () => {\n window.ssr_bodyReadyObserverClear();\n });\n </script>`.replaceAll('\\n', '');\n }\n }\n\n private _injectContextState(ssrContext: SSRContext) {\n const ctx = ssrContext._meta;\n\n const nonce = ssrContext.nonce !== void 0 ? ` nonce=\"${ssrContext.nonce}\"` : '';\n\n ctx.endingHeadTags += `<script${nonce} id=\"ssr-state-init\">window.__INITIAL_STATE__=${unevalPatch(ssrContext.state)}</script>`;\n }\n\n private _injectContextStateDefer(ssrContext: SSRContext) {\n const ctx = ssrContext._meta;\n\n const nonce = ssrContext.nonce !== void 0 ? ` nonce=\"${ssrContext.nonce}\"` : '';\n\n ctx.endingBodyTags += `<script${nonce} id=\"ssr-state-defer-init\">window.__INITIAL_STATE_DEFER__=${unevalPatch(ssrContext.stateDefer)}</script>`;\n }\n}\n\nfunction normalize(meta) {\n if (meta.title) {\n meta.title = meta.titleTemplate ? meta.titleTemplate(meta.title) : meta.title;\n delete meta.titleTemplate;\n }\n\n [\n ['meta', 'content'],\n ['link', 'href'],\n ].forEach(type => {\n const metaType = meta[type[0]];\n const metaProp = type[1];\n\n for (const name in metaType) {\n const metaLink = metaType[name];\n\n if (metaLink.template) {\n if (Object.keys(metaLink).length === 1) {\n delete metaType[name];\n } else {\n metaLink[metaProp] = metaLink.template(metaLink[metaProp] || '');\n delete metaLink.template;\n }\n }\n }\n });\n}\n\nfunction changed(old, def) {\n if (Object.keys(old).length !== Object.keys(def).length) {\n return true;\n }\n for (const key in old) {\n if (old[key] !== def[key]) {\n return true;\n }\n }\n}\n\nfunction bodyFilter(name) {\n return ['class', 'style'].includes(name) === false;\n}\n\nfunction htmlFilter(_name) {\n return true;\n // return ['lang', 'dir'].includes(name) === false;\n}\n\nfunction diff(meta, other) {\n const add: any = {};\n const remove: any = {};\n\n if (meta === void 0) {\n return { add: other, remove };\n }\n\n if (meta.title !== other.title) {\n add.title = other.title;\n }\n\n ['meta', 'link', 'script', 'htmlAttr', 'bodyAttr'].forEach(type => {\n const old = meta[type];\n const cur = other[type];\n remove[type] = [];\n\n if (old === void 0 || old === null) {\n add[type] = cur;\n return;\n }\n\n add[type] = {};\n\n for (const key in old) {\n if (Object.prototype.hasOwnProperty.call(cur, key) === false) {\n remove[type].push(key);\n }\n }\n for (const key in cur) {\n if (Object.prototype.hasOwnProperty.call(old, key) === false) {\n add[type][key] = cur[key];\n } else if (changed(old[key], cur[key]) === true) {\n remove[type].push(key);\n add[type][key] = cur[key];\n }\n }\n });\n\n return { add, remove };\n}\n\nfunction apply({ add, remove }) {\n if (add.title) {\n document.title = add.title;\n }\n\n if (Object.keys(remove).length !== 0) {\n ['meta', 'link', 'script'].forEach(type => {\n remove[type].forEach(name => {\n document.head.querySelector(`${type}[data-qmeta=\"${name}\"]`)?.remove();\n });\n });\n remove.htmlAttr.filter(htmlFilter).forEach(name => {\n document.documentElement.removeAttribute(name);\n });\n remove.bodyAttr.filter(bodyFilter).forEach(name => {\n document.body.removeAttribute(name);\n });\n }\n\n ['meta', 'link', 'script'].forEach(type => {\n const metaType = add[type];\n\n for (const name in metaType) {\n const tag = document.createElement(type);\n for (const att in metaType[name]) {\n if (att !== 'innerHTML') {\n tag.setAttribute(att, metaType[name][att]);\n }\n }\n tag.setAttribute('data-qmeta', name);\n if (type === 'script') {\n tag.innerHTML = metaType[name].innerHTML || '';\n }\n document.head.appendChild(tag);\n }\n });\n Object.keys(add.htmlAttr)\n .filter(htmlFilter)\n .forEach(name => {\n document.documentElement.setAttribute(name, add.htmlAttr[name] || '');\n });\n Object.keys(add.bodyAttr)\n .filter(bodyFilter)\n .forEach(name => {\n document.body.setAttribute(name, add.bodyAttr[name] || '');\n });\n}\n\nfunction getAttr(seed) {\n return att => {\n const val = seed[att];\n return att + (val !== true && val !== void 0 ? `=\"${val}\"` : '');\n };\n}\n\nfunction getHead(meta) {\n let output = '';\n if (meta.title) {\n output += `<title>${meta.title}</title>`;\n }\n ['meta', 'link', 'script'].forEach(type => {\n const metaType = meta[type];\n\n for (const att in metaType) {\n const attrs = Object.keys(metaType[att])\n .filter(att => att !== 'innerHTML')\n .map(getAttr(metaType[att]));\n\n output += `<${type} ${attrs.join(' ')} data-qmeta=\"${att}\">`;\n if (type === 'script') {\n output += `${metaType[att].innerHTML || ''}</script>`;\n }\n }\n });\n return output;\n}\n","import type { ComponentInternalInstance, Ref, VNode } from 'vue';\nimport type { Functionable } from 'zova';\n\nimport { includeBooleanAttr, isBooleanAttr, isString, stringifyStyle } from '@vue/shared';\nimport { defu } from 'defu';\nimport { normalizeClass, normalizeStyle, ref, useSSRContext } from 'vue';\nimport { BeanSimple } from 'zova';\n\nimport type { SysSsrState } from '../bean/sys.ssrState.js';\nimport type {\n OnHydratePropHasMismatch,\n OnHydratePropHasMismatchResult,\n SSRContext,\n TypeSsrSitePerformAction,\n} from '../types/ssr.js';\n\nimport { CtxSSRMetaStore } from './ssrMetaStore.js';\n\nconst SymbolIsRuntimeSsrPreHydration = Symbol('SymbolIsRuntimeSsrPreHydration');\nconst SymbolSSRContext = Symbol('SymbolSSRContext');\nconst SymbolSSRState = Symbol('SymbolSSRState');\nconst SymbolOnHydrateds = Symbol('SymbolOnHydrateds');\nconst SymbolOnHydratePropHasMismatches = Symbol('SymbolOnHydratePropHasMismatches');\nconst SymbolInstanceUpdates = Symbol('SymbolInstanceUpdates');\nconst SymbolHydratingCounter = Symbol('SymbolHydratingCounter');\n\nexport class CtxSSR extends BeanSimple {\n private [SymbolIsRuntimeSsrPreHydration]: Ref<boolean> = ref(false);\n private [SymbolSSRContext]: SSRContext;\n private [SymbolSSRState]: SysSsrState;\n private [SymbolOnHydrateds]: Functionable[] = [];\n private [SymbolOnHydratePropHasMismatches]: OnHydratePropHasMismatch[] = [];\n private [SymbolInstanceUpdates]: ComponentInternalInstance[] = [];\n\n private [SymbolHydratingCounter]: number = 0;\n\n public metaStore: CtxSSRMetaStore;\n\n /** @internal */\n public initialize() {\n // ssr state\n this[SymbolSSRState] = this.sys.bean._getBeanSyncOnly('a-ssr.sys.ssrState');\n // SymbolIsRuntimeSsrPreHydration\n if (process.env.SERVER) {\n this[SymbolIsRuntimeSsrPreHydration].value = true;\n } else if (process.env.CLIENT && document.body.getAttribute('data-server-rendered') !== null) {\n this[SymbolIsRuntimeSsrPreHydration].value = true;\n }\n // onHydratePropHasMismatch\n if (process.env.CLIENT && this.isRuntimeSsrPreHydration) {\n this.onHydratePropHasMismatch((el, key, clientValue, vnode, instance) => {\n return this._onHydratePropHasMismatchDefault(el, key, clientValue, vnode, instance);\n });\n }\n // metaStore\n this.metaStore = this.bean._newBeanSimple(CtxSSRMetaStore, false);\n // fix: flash on page load\n // need not check process.env.DEV, because maybe need remove vite-css-module-id on prod\n if (process.env.CLIENT && this.isRuntimeSsrPreHydration) {\n this.onHydrated(() => {\n document.querySelectorAll('style[vite-css-module-id]').forEach(node => node.remove());\n });\n }\n }\n\n get isRuntimeSsrPreHydration() {\n return this[SymbolIsRuntimeSsrPreHydration].value;\n }\n\n set isRuntimeSsrPreHydration(value) {\n this[SymbolIsRuntimeSsrPreHydration].value = value;\n }\n\n get context() {\n if (process.env.CLIENT) throw new Error('cannot called in client');\n if (!this[SymbolSSRContext]) {\n this.ctx.util.instanceScope(() => {\n this[SymbolSSRContext] = useSSRContext()!;\n this._initContext();\n });\n }\n return this[SymbolSSRContext];\n }\n\n get state() {\n if (process.env.SERVER) {\n return this.context.state;\n } else {\n return this[SymbolSSRState].state;\n }\n }\n\n get stateDefer() {\n if (process.env.SERVER) {\n return this.context.stateDefer;\n } else {\n return this[SymbolSSRState].stateDefer;\n }\n }\n\n get renderSSRError() {\n return this.context._meta.renderError;\n }\n\n set renderSSRError(err: any) {\n this.context._meta.renderError = err;\n }\n\n getPerformAction(baseURL?: string): TypeSsrSitePerformAction | undefined {\n if (process.env.SERVER && baseURL === this.sys.env.SSR_API_BASE_URL)\n return this.context.performAction;\n return undefined;\n }\n\n private _initContext() {\n const ssrContext = this[SymbolSSRContext];\n ssrContext._meta = defu(ssrContext._meta, {\n htmlAttrs: '',\n headTags: '',\n endingHeadTags: '',\n bodyClasses: '',\n bodyAttrs: 'data-server-rendered',\n bodyTags: '',\n endingBodyTags: '',\n baseUrl: this.sys.util.getAbsoluteUrlFromPagePath(undefined, false, true), // not include publicPath\n });\n ssrContext.state = ssrContext.state || {};\n ssrContext.stateDefer = ssrContext.stateDefer || {};\n }\n\n onHydrated(fn: Functionable) {\n this[SymbolOnHydrateds].push(fn);\n }\n\n onHydratePropHasMismatch(fn: OnHydratePropHasMismatch) {\n this[SymbolOnHydratePropHasMismatches].push(fn);\n }\n\n handleDirectOrOnHydrated(fn: Functionable) {\n if (process.env.CLIENT && this.isRuntimeSsrPreHydration) {\n this.onHydrated(fn);\n } else {\n return fn();\n }\n }\n\n private _onHydratePropHasMismatchDefault(\n el: Element,\n key: string,\n clientValue: any,\n _vnode: VNode,\n _instance: ComponentInternalInstance | null,\n ): OnHydratePropHasMismatchResult {\n // expected\n let ignore = false;\n let expected: string | undefined;\n if (key === 'class') {\n ignore = true;\n if (clientValue !== undefined) {\n expected = normalizeClass(clientValue);\n el.setAttribute(key, expected as string);\n }\n } else if (key === 'style') {\n ignore = true;\n if (clientValue !== undefined) {\n expected = isString(clientValue)\n ? clientValue\n : stringifyStyle(normalizeStyle(clientValue));\n el.setAttribute(key, expected as string);\n }\n } else if (['id', 'name', 'for', 'd'].includes(key)) {\n ignore = true;\n if (clientValue !== undefined) {\n expected = String(clientValue);\n el.setAttribute(key, expected as string);\n }\n } else if (key === 'value') {\n ignore = true;\n if (clientValue !== undefined) {\n expected = String(clientValue);\n if (el.tagName === 'TEXTAREA') {\n (<any>el).value = expected;\n } else {\n el.setAttribute(key, expected as string);\n }\n }\n } else if (isBooleanAttr(key)) {\n ignore = true;\n if (clientValue !== undefined) {\n const expected = includeBooleanAttr(clientValue);\n if (expected) {\n el.setAttribute(key, '');\n } else {\n el.removeAttribute(key);\n }\n }\n } else if (el.getAttribute(`data-hydrate-ignore-${key}`) !== null) {\n ignore = true;\n if (clientValue !== undefined) {\n expected = String(clientValue);\n el.setAttribute(key, expected as string);\n }\n }\n if (!ignore) return { clientValue };\n return { ignore: true };\n }\n\n private _hydrated() {\n if (!this.isRuntimeSsrPreHydration) return;\n // should be first\n this.isRuntimeSsrPreHydration = false;\n //\n this[SymbolInstanceUpdates].forEach(instance => {\n if (!instance.isUnmounted && instance.zova) {\n try {\n instance.update();\n } catch (err: any) {\n if (!err.message.includes(\"'insertBefore'\")) {\n throw err;\n }\n }\n }\n });\n this[SymbolInstanceUpdates] = [];\n //\n this[SymbolOnHydrateds].forEach(fn => fn());\n this[SymbolOnHydrateds] = [];\n //\n this[SymbolOnHydratePropHasMismatches] = [];\n }\n\n /** @internal */\n public _hydratePropHasMismatch(\n el: Element,\n key: string,\n clientValue: any,\n vnode: VNode,\n instance: ComponentInternalInstance | null,\n ): OnHydratePropHasMismatchResult {\n for (const fn of this[SymbolOnHydratePropHasMismatches]) {\n const res = fn(el, key, clientValue, vnode, instance);\n if (res.ignore) return res;\n clientValue = res.clientValue;\n }\n return { ignore: false, clientValue };\n }\n\n /** @internal */\n public _hydratingInc() {\n ++this[SymbolHydratingCounter];\n }\n\n /** @internal */\n public _hydratingDec() {\n if (--this[SymbolHydratingCounter] === 0) {\n this._hydrated();\n }\n }\n\n /** @internal */\n public _hydratingInstanceRecord(instance: ComponentInternalInstance) {\n if (!this[SymbolInstanceUpdates].includes(instance)) {\n this[SymbolInstanceUpdates].push(instance);\n return true;\n }\n return false;\n }\n}\n","import type { IModule } from '@cabloy/module-info';\nimport type { IMonkeyModuleSys, IMonkeySysContextInitialize, ZovaContext } from 'zova';\n\nimport { BeanSimple } from 'zova';\n\nimport type { SysSsrState } from './bean/sys.ssrState.js';\n\nimport { CtxSSR } from './lib/ssr.js';\n\nexport class MonkeySys extends BeanSimple implements IMonkeyModuleSys, IMonkeySysContextInitialize {\n private _moduleSelf: IModule;\n private _sysSsrState: SysSsrState;\n\n constructor(moduleSelf: IModule) {\n super();\n this._moduleSelf = moduleSelf;\n }\n\n async getSysSsrState() {\n if (!this._sysSsrState) {\n this._sysSsrState = (await this.bean._getBean('a-ssr.sys.ssrState', false)) as SysSsrState;\n }\n return this._sysSsrState;\n }\n\n async moduleLoading(module: IModule) {\n if (this._moduleSelf === module) return;\n await this.getSysSsrState();\n }\n\n async moduleLoaded(_module: IModule) {}\n async configLoaded(_module: IModule, _config) {}\n\n sysContextInitialize(ctx: ZovaContext): void {\n ctx.meta.$ssr = ctx.bean._newBeanSimple(CtxSSR, false);\n ctx.meta.$ssr.initialize();\n }\n}\n","// eslint-disable\n/** sys: begin */\nexport * from '../bean/sys.ssrState.js';\n\nimport 'zova';\ndeclare module 'zova' {\n \n \n}\ndeclare module 'zova-module-a-ssr' {\n \n export interface SysSsrState {\n /** @internal */\n get scope(): ScopeModuleASsr;\n }\n\n export interface SysSsrState {\n get $beanFullName(): 'a-ssr.sys.ssrState';\n get $onionName(): 'a-ssr:ssrState';\n \n } \n}\n/** sys: end */\n/** sys: begin */\nimport { SysSsrState } from '../bean/sys.ssrState.js';\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanRecordGeneral {\n 'a-ssr.sys.ssrState': SysSsrState;\n }\n}\n/** sys: end */\n/** config: begin */\nexport * from '../config/config.js';\nimport { config } from '../config/config.js';\n/** config: end */\n/** monkey: begin */\nexport * from '../monkey.js';\n/** monkey: end */\n/** monkeySys: begin */\nexport * from '../monkeySys.js';\n/** monkeySys: end */\n/** scope: begin */\nimport { BeanScopeBase, type BeanScopeUtil, TypeModuleConfig } from 'zova';\nimport { Scope } from 'zova-module-a-bean';\n\n@Scope()\nexport class ScopeModuleASsr extends BeanScopeBase {}\n\nexport interface ScopeModuleASsr {\n util: BeanScopeUtil;\nconfig: TypeModuleConfig<typeof config>;\n}\n\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanScopeRecord {\n 'a-ssr': ScopeModuleASsr;\n }\n \n export interface IBeanScopeConfig {\n 'a-ssr': ReturnType<typeof config>;\n }\n\n \n\n \n}\n \n/** scope: end */\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/bean/sys.ssrState.ts","../src/config/config.ts","../src/lib/useMeta.ts","../src/monkey.ts","../src/lib/utils.ts","../src/lib/ssrMetaStore.ts","../src/lib/ssr.ts","../src/monkeySys.ts","../src/.metadata/index.ts"],"sourcesContent":["import { BeanBase, cast } from 'zova';\nimport { Sys } from 'zova-module-a-bean';\n\nimport { SSRContextState, SSRContextStateDefer } from '../types/ssr.js';\n\nconst SymbolSSRState = Symbol('SymbolSSRState');\nconst SymbolSSRStateDefer = Symbol('SymbolSSRStateDefer');\n\n@Sys()\nexport class SysSsrState extends BeanBase {\n protected [SymbolSSRState]: SSRContextState;\n protected [SymbolSSRStateDefer]: SSRContextStateDefer;\n\n protected async __init__() {\n if (process.env.CLIENT) {\n if (cast(window).__INITIAL_STATE__) {\n this[SymbolSSRState] = cast(window).__INITIAL_STATE__;\n delete cast(window).__INITIAL_STATE__;\n document.getElementById('ssr-state-init')?.remove();\n } else {\n this[SymbolSSRState] = {};\n }\n if (cast(window).__INITIAL_STATE_DEFER__) {\n this[SymbolSSRStateDefer] = cast(window).__INITIAL_STATE_DEFER__;\n delete cast(window).__INITIAL_STATE_DEFER__;\n document.getElementById('ssr-state-defer-init')?.remove();\n } else {\n this[SymbolSSRStateDefer] = {} as any;\n }\n }\n }\n\n get state() {\n return this[SymbolSSRState];\n }\n\n get stateDefer() {\n return this[SymbolSSRStateDefer];\n }\n}\n","import type { StringValue } from 'ms';\nimport type { ZovaSys } from 'zova';\n\nimport { ISsrConfig } from '../types/config.js';\n\nexport const config = (sys: ZovaSys) => {\n const ssrConfig: ISsrConfig = {\n cookieThemeDarkDefault: sys.env.SSR_COOKIE_THEMEDARK_DEFAULT === 'true',\n optimization: {\n bodyReadyObserver: sys.env.SSR_BODYREADYOBSERVER === 'true',\n },\n transferCache:\n sys.env.SSR_TRANSFERCACHE === 'false'\n ? false\n : {\n expires: _normalizeExpires(sys.env.SSR_TRANSFERCACHE_EXPIRES),\n },\n };\n return ssrConfig;\n};\n\nfunction _normalizeExpires(expires: string | undefined): StringValue | number {\n if (!expires) return 0;\n if (!Number.isNaN(Number(expires))) return Number(expires);\n return expires as StringValue;\n}\n","import type { ZovaContext } from 'zova';\n\n// from: quasar/ui/src/composables/use-meta.js\nimport { computed, onActivated, onDeactivated, onUnmounted, watch } from 'vue';\n\nimport type { SSRMetaOptions, SSRMetaOptionsWrapper } from '../types/ssr.js';\n\nexport function useMeta(ctx: ZovaContext, metaOptions) {\n if (process.env.SERVER) {\n ctx.meta.$ssr.context.__qMetaList.push(\n typeof metaOptions === 'function' ? metaOptions() : metaOptions,\n );\n } else {\n const meta: SSRMetaOptionsWrapper = { active: true };\n\n if (typeof metaOptions === 'function') {\n const content = computed<SSRMetaOptions>(metaOptions);\n meta.val = content.value;\n\n watch(content, val => {\n meta.val = val;\n meta.active === true && ctx.meta.$ssr.metaStore.planClientUpdate();\n });\n } else {\n meta.val = metaOptions;\n }\n\n ctx.meta.$ssr.metaStore.addMetaOptions(meta);\n ctx.meta.$ssr.metaStore.planClientUpdate();\n\n onActivated(() => {\n try {\n meta.active = true;\n ctx.meta.$ssr.metaStore.planClientUpdate();\n } catch (_err) {}\n });\n\n onDeactivated(() => {\n try {\n meta.active = false;\n ctx.meta.$ssr.metaStore.planClientUpdate();\n } catch (_err) {}\n });\n\n onUnmounted(() => {\n try {\n ctx.meta.$ssr.metaStore.removeMetaOptions(meta);\n ctx.meta.$ssr.metaStore.planClientUpdate();\n } catch (_err) {}\n });\n }\n}\n","import type { IModule } from '@cabloy/module-info';\nimport type {\n BeanBase,\n BeanContainer,\n IMonkeyAppContextInitialize,\n IMonkeyAppInitialize,\n IMonkeyBeanInit,\n IMonkeyModule,\n ZovaContext,\n} from 'zova';\n\nimport { isNavigationFailure } from '@cabloy/vue-router';\nimport { BeanSimple, cast } from 'zova';\n\nimport type { SSRMetaOptions } from './types/ssr.js';\n\nimport { useMeta } from './lib/useMeta.js';\n\nexport class Monkey\n extends BeanSimple\n implements IMonkeyAppContextInitialize, IMonkeyAppInitialize, IMonkeyBeanInit, IMonkeyModule\n{\n appContextInitialize(ctx: ZovaContext): void {\n ctx.meta.$ssr = ctx.app.ctx.meta.$ssr;\n if (process.env.SERVER) {\n ctx.meta.$ssr._registerServerContext(ctx);\n }\n }\n\n async appInitialize() {\n // ssr errorHandler\n if (process.env.SERVER) {\n this._ssrErrorHandler();\n }\n }\n\n async moduleLoading(_module: IModule) {}\n async moduleLoaded(module: IModule) {\n // ssrContext.modules\n if (process.env.SERVER && process.env.PROD) {\n if (!this.ctx.meta.$ssr.context.modules) this.ctx.meta.$ssr.context.modules = new Set();\n this.ctx.meta.$ssr.context.modules.add(`@@${module.info.relativeName}`);\n }\n }\n\n async beanInit(bean: BeanContainer, beanInstance: BeanBase) {\n const self = this;\n // $ssr\n bean.defineProperty(beanInstance, '$ssr', {\n enumerable: false,\n configurable: true,\n get() {\n return self.app.ctx.meta.$ssr;\n },\n });\n // $useMeta\n bean.defineProperty(beanInstance, '$useMeta', {\n enumerable: false,\n configurable: true,\n get() {\n return function (this: BeanBase, options: SSRMetaOptions | (() => SSRMetaOptions)) {\n const ctx: ZovaContext = cast(this).ctx;\n ctx.util.instanceScope(() => {\n useMeta(ctx, options);\n });\n };\n },\n });\n }\n\n private _ssrErrorHandler() {\n if (!process.env.SERVER) return;\n const _eventErrorHandler = this.app.meta.event.on('app:errorHandler', (_data, next) => {\n const err = next();\n if (!err || !(err instanceof Error)) return err;\n return this._errorHandlerDefaultServer(err);\n });\n this.ctx.meta.$ssr.context.onRendered((_err?: Error) => {\n _eventErrorHandler();\n });\n }\n\n private _errorHandlerDefaultServer(err: Error) {\n if (!process.env.SERVER) return err;\n if (isNavigationFailure(err)) {\n if (!this.ctx.meta.$ssr.renderSSRError) {\n this.ctx.meta.$ssr.renderSSRError = err;\n }\n return undefined;\n } else if (err.code === 401) {\n try {\n this.app.$gotoLogin();\n } catch (err: any) {\n this.ctx.meta.$ssr.renderSSRError = err;\n }\n } else {\n this.ctx.meta.$ssr.renderSSRError = err;\n }\n return undefined;\n }\n}\n","import * as devalue from 'devalue';\n\nexport function unevalPatch(value: any) {\n return devalue.uneval(value);\n // return devalue.uneval(value, value => {\n // if (value && typeof value === 'object' && value.toJSON) {\n // return value.toJSON();\n // }\n // });\n}\n","// from: quasar/ui/src/plugins/Meta.js\nimport { extend } from '@cabloy/extend';\nimport { BeanSimple, cast } from 'zova';\n\nimport type { SSRContext, SSRMetaOptions, SSRMetaOptionsWrapper } from '../types/ssr.js';\n\nimport { unevalPatch } from './utils.js';\n\nexport class CtxSSRMetaStore extends BeanSimple {\n private _updateId: number = 0;\n private _currentClientMeta?: SSRMetaOptions;\n private _clientList: SSRMetaOptionsWrapper[] = [];\n\n protected __init__() {\n if (process.env.SERVER) {\n const ssrContext = this.ctx.meta.$ssr.context;\n ssrContext.__qMetaList = [];\n if (this.sys.env.SSR_BODYREADYOBSERVER === 'true') {\n ssrContext.__qMetaList.push({\n bodyStyle: { display: 'none' },\n });\n }\n ssrContext.rendered = () => {\n this._onRenderedLast();\n ssrContext.rendered = () => {};\n };\n }\n if (process.env.CLIENT && this.ctx.meta.$ssr.isRuntimeSsrPreHydration) {\n this._currentClientMeta = cast(window).__Q_META__;\n document.getElementById('ssr-meta-init')?.remove();\n }\n }\n\n private _onRenderedLast(err?: Error) {\n const app = this.app;\n try {\n if (err) return;\n\n const ssrContext = this.ctx.meta.$ssr.context;\n this._injectContextState(ssrContext);\n this._injectContextStateDefer(ssrContext);\n this._injectServerMeta(ssrContext);\n } finally {\n this.ctx.meta.$ssr._disposeServerContexts();\n app?.close();\n }\n }\n\n addMetaOptions(metaOptionsWrapper: SSRMetaOptionsWrapper) {\n this._clientList.push(metaOptionsWrapper);\n }\n\n removeMetaOptions(metaOptionsWrapper: SSRMetaOptionsWrapper) {\n this._clientList.splice(this._clientList.indexOf(metaOptionsWrapper), 1);\n }\n\n planClientUpdate() {\n if (this._updateId !== 0) {\n clearTimeout(this._updateId);\n }\n this._updateId = window.setTimeout(() => {\n this._updateId = 0;\n this._updateClientMeta();\n }, 50);\n }\n\n private _updateClientMeta() {\n const data: SSRMetaOptions = {\n title: '',\n titleTemplate: undefined,\n meta: {},\n link: {},\n script: {},\n htmlAttr: {},\n bodyAttr: {},\n };\n\n for (let i = 0; i < this._clientList.length; i++) {\n const { active, val } = this._clientList[i];\n\n if (active === true) {\n extend(true, data, val);\n }\n }\n\n normalize(data);\n\n apply(diff(this._currentClientMeta, data));\n this._currentClientMeta = data;\n }\n\n private _injectServerMeta(ssrContext: SSRContext) {\n const data: SSRMetaOptions = {\n title: '',\n titleTemplate: undefined,\n meta: {},\n link: {},\n htmlAttr: {},\n bodyAttr: {},\n bodyStyle: {},\n bodyClass: {},\n noscript: {},\n };\n\n const list = ssrContext.__qMetaList;\n\n for (let i = 0; i < list.length; i++) {\n extend(true, data, list[i]);\n }\n\n normalize(data);\n\n const nonce = ssrContext.nonce !== void 0 ? ` nonce=\"${ssrContext.nonce}\"` : '';\n\n const ctx = ssrContext._meta;\n\n const htmlAttr = Object.keys(data.htmlAttr!).filter(htmlFilter);\n\n if (htmlAttr.length !== 0) {\n ctx.htmlAttrs +=\n (ctx.htmlAttrs.length !== 0 ? ' ' : '') + htmlAttr.map(getAttr(data.htmlAttr)).join(' ');\n }\n\n ctx.headTags += getHead(data);\n\n const bodyAttr = Object.keys(data.bodyAttr!).filter(bodyFilter);\n\n if (bodyAttr.length !== 0) {\n ctx.bodyAttrs +=\n (ctx.bodyAttrs.length !== 0 ? ' ' : '') + bodyAttr.map(getAttr(data.bodyAttr)).join(' ');\n }\n\n const bodyStyle = Object.keys(data.bodyStyle!)\n .filter(name => !!data.bodyStyle![name])\n .map(name => `${name}:${data.bodyStyle![name]};`)\n .join('');\n if (bodyStyle) {\n ctx.bodyAttrs += `${ctx.bodyAttrs.length !== 0 ? ' ' : ''}style=\"${bodyStyle}\"`;\n }\n\n const _bodyClass = ctx.bodyClasses.split(' ').filter(item => !!item);\n const bodyClass = {};\n _bodyClass.forEach(item => (bodyClass[item] = true));\n extend(true, bodyClass, data.bodyClass);\n ctx.bodyClasses = Object.keys(bodyClass)\n .filter(name => bodyClass[name])\n .map(name => name)\n .join(' ');\n\n data.title = '\\'\"`';\n\n ctx.endingHeadTags += `${Object.keys(data.noscript!)\n .map(name => `<noscript data-qmeta=\"${name}\">${data.noscript![name]}</noscript>`)\n .join(\n '',\n )}<script${nonce} id=\"ssr-meta-init\">window.__Q_META__=${delete data.bodyStyle && delete data.bodyClass && delete data.noscript && unevalPatch(data)}</script>`;\n\n let ssr_local_themedark = this.sys.config.ssr.cookie\n ? `let ssr_cookie_themedark=document.cookie.split('; ')?.find(item=>item.indexOf('themedark=')>-1)?.split('=')[1];\n ssr_cookie_themedark=ssr_cookie_themedark==='true'?true:ssr_cookie_themedark==='false'?false:${this.sys.env.SSR_COOKIE_THEMEDARK_DEFAULT};\n window.ssr_themedark=window.ssr_cookie_themedark=ssr_cookie_themedark;`\n : `let ssr_local_themedark=window.ssr_load_local('themedark');\n if(ssr_local_themedark===undefined || ssr_local_themedark==='auto'){\n ssr_local_themedark=window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n window.ssr_themedark=window.ssr_local_themedark=ssr_local_themedark;`;\n // Resolve the final browser theme from the SSR dual markers emitted before page render.\n ssr_local_themedark += `Object.defineProperty(window, 'ssr_themedark_data', {\n get: () => {\n let _data=document.body.getAttribute('data-ssr-theme-dark-'+window.ssr_themedark);\n if(_data===undefined || _data===null){\n _data=window.__INITIAL_STATE__ && window.__INITIAL_STATE__['data-ssr-theme-dark-'+window.ssr_themedark];\n }\n return _data;\n },\n });`;\n const ssr_local_themename = this.sys.config.ssr.cookie\n ? ''\n : \"window.ssr_local_themename=window.ssr_load_local('themename');\";\n ctx.endingHeadTags += `<script id=\"ssr-prefers-color-schema-dark\">\n window.ssr_load_local=function(key){\n const __ssr_local=localStorage.getItem(key);\n return __ssr_local?JSON.parse(__ssr_local):undefined;\n };\n ${ssr_local_themedark}\n ${ssr_local_themename}\n document.querySelector('#ssr-prefers-color-schema-dark').remove();\n </script>`.replaceAll('\\n', '');\n\n if (this.sys.env.SSR_BODYREADYOBSERVER === 'true') {\n ctx.bodyTags += `<script id=\"ssr-body-ready-observer\">\n window.ssr_bodyReadyObserverClear=()=>{\n if(window.ssr_bodyReadyObserver){\n window.ssr_body_ready_condition=undefined;\n window.ssr_body_ready_callback=undefined;\n window.ssr_bodyReadyObserver.disconnect();\n window.ssr_bodyReadyObserver=undefined;\n document.body.style.display='block';\n document.querySelector('#ssr-body-ready-observer').remove();\n }\n };\n window.ssr_bodyReadyObserver = new MutationObserver(() => {\n if(window.ssr_body_ready_condition && window.ssr_body_ready_condition()){\n window.ssr_body_ready_callback();\n window.ssr_bodyReadyObserverClear();\n }\n });\n window.ssr_bodyReadyObserver.observe(document.body, {\n subtree: true,\n childList: true,\n });\n document.addEventListener(\"DOMContentLoaded\", () => {\n window.ssr_bodyReadyObserverClear();\n });\n </script>`.replaceAll('\\n', '');\n }\n }\n\n private _injectContextState(ssrContext: SSRContext) {\n const ctx = ssrContext._meta;\n\n const nonce = ssrContext.nonce !== void 0 ? ` nonce=\"${ssrContext.nonce}\"` : '';\n\n ctx.endingHeadTags += `<script${nonce} id=\"ssr-state-init\">window.__INITIAL_STATE__=${unevalPatch(ssrContext.state)}</script>`;\n }\n\n private _injectContextStateDefer(ssrContext: SSRContext) {\n const ctx = ssrContext._meta;\n\n const nonce = ssrContext.nonce !== void 0 ? ` nonce=\"${ssrContext.nonce}\"` : '';\n\n ctx.endingBodyTags += `<script${nonce} id=\"ssr-state-defer-init\">window.__INITIAL_STATE_DEFER__=${unevalPatch(ssrContext.stateDefer)}</script>`;\n }\n}\n\nfunction normalize(meta) {\n if (meta.title) {\n meta.title = meta.titleTemplate ? meta.titleTemplate(meta.title) : meta.title;\n delete meta.titleTemplate;\n }\n\n [\n ['meta', 'content'],\n ['link', 'href'],\n ].forEach(type => {\n const metaType = meta[type[0]];\n const metaProp = type[1];\n\n for (const name in metaType) {\n const metaLink = metaType[name];\n\n if (metaLink.template) {\n if (Object.keys(metaLink).length === 1) {\n delete metaType[name];\n } else {\n metaLink[metaProp] = metaLink.template(metaLink[metaProp] || '');\n delete metaLink.template;\n }\n }\n }\n });\n}\n\nfunction changed(old, def) {\n if (Object.keys(old).length !== Object.keys(def).length) {\n return true;\n }\n for (const key in old) {\n if (old[key] !== def[key]) {\n return true;\n }\n }\n}\n\nfunction bodyFilter(name) {\n return ['class', 'style'].includes(name) === false;\n}\n\nfunction htmlFilter(_name) {\n return true;\n // return ['lang', 'dir'].includes(name) === false;\n}\n\nfunction diff(meta, other) {\n const add: any = {};\n const remove: any = {};\n\n if (meta === void 0) {\n return { add: other, remove };\n }\n\n if (meta.title !== other.title) {\n add.title = other.title;\n }\n\n ['meta', 'link', 'script', 'htmlAttr', 'bodyAttr'].forEach(type => {\n const old = meta[type];\n const cur = other[type];\n remove[type] = [];\n\n if (old === void 0 || old === null) {\n add[type] = cur;\n return;\n }\n\n add[type] = {};\n\n for (const key in old) {\n if (Object.prototype.hasOwnProperty.call(cur, key) === false) {\n remove[type].push(key);\n }\n }\n for (const key in cur) {\n if (Object.prototype.hasOwnProperty.call(old, key) === false) {\n add[type][key] = cur[key];\n } else if (changed(old[key], cur[key]) === true) {\n remove[type].push(key);\n add[type][key] = cur[key];\n }\n }\n });\n\n return { add, remove };\n}\n\nfunction apply({ add, remove }) {\n if (add.title) {\n document.title = add.title;\n }\n\n if (Object.keys(remove).length !== 0) {\n ['meta', 'link', 'script'].forEach(type => {\n remove[type].forEach(name => {\n document.head.querySelector(`${type}[data-qmeta=\"${name}\"]`)?.remove();\n });\n });\n remove.htmlAttr.filter(htmlFilter).forEach(name => {\n document.documentElement.removeAttribute(name);\n });\n remove.bodyAttr.filter(bodyFilter).forEach(name => {\n document.body.removeAttribute(name);\n });\n }\n\n ['meta', 'link', 'script'].forEach(type => {\n const metaType = add[type];\n\n for (const name in metaType) {\n const tag = document.createElement(type);\n for (const att in metaType[name]) {\n if (att !== 'innerHTML') {\n tag.setAttribute(att, metaType[name][att]);\n }\n }\n tag.setAttribute('data-qmeta', name);\n if (type === 'script') {\n tag.innerHTML = metaType[name].innerHTML || '';\n }\n document.head.appendChild(tag);\n }\n });\n Object.keys(add.htmlAttr)\n .filter(htmlFilter)\n .forEach(name => {\n document.documentElement.setAttribute(name, add.htmlAttr[name] || '');\n });\n Object.keys(add.bodyAttr)\n .filter(bodyFilter)\n .forEach(name => {\n document.body.setAttribute(name, add.bodyAttr[name] || '');\n });\n}\n\nfunction getAttr(seed) {\n return att => {\n const val = seed[att];\n return att + (val !== true && val !== void 0 ? `=\"${val}\"` : '');\n };\n}\n\nfunction getHead(meta) {\n let output = '';\n if (meta.title) {\n output += `<title>${meta.title}</title>`;\n }\n ['meta', 'link', 'script'].forEach(type => {\n const metaType = meta[type];\n\n for (const att in metaType) {\n const attrs = Object.keys(metaType[att])\n .filter(att => att !== 'innerHTML')\n .map(getAttr(metaType[att]));\n\n output += `<${type} ${attrs.join(' ')} data-qmeta=\"${att}\">`;\n if (type === 'script') {\n output += `${metaType[att].innerHTML || ''}</script>`;\n }\n }\n });\n return output;\n}\n","import type { ComponentInternalInstance, Ref, VNode } from 'vue';\nimport type { Functionable, ZovaContext } from 'zova';\n\nimport { includeBooleanAttr, isBooleanAttr, isString, stringifyStyle } from '@vue/shared';\nimport { defu } from 'defu';\nimport { normalizeClass, normalizeStyle, ref, useSSRContext } from 'vue';\nimport { BeanSimple } from 'zova';\n\nimport type { SysSsrState } from '../bean/sys.ssrState.js';\nimport type {\n OnHydratePropHasMismatch,\n OnHydratePropHasMismatchResult,\n SSRContext,\n TypeSsrSitePerformAction,\n} from '../types/ssr.js';\n\nimport { CtxSSRMetaStore } from './ssrMetaStore.js';\n\nconst SymbolIsRuntimeSsrPreHydration = Symbol('SymbolIsRuntimeSsrPreHydration');\nconst SymbolSSRContext = Symbol('SymbolSSRContext');\nconst SymbolSSRState = Symbol('SymbolSSRState');\nconst SymbolOnHydrateds = Symbol('SymbolOnHydrateds');\nconst SymbolOnHydratePropHasMismatches = Symbol('SymbolOnHydratePropHasMismatches');\nconst SymbolInstanceUpdates = Symbol('SymbolInstanceUpdates');\nconst SymbolHydratingCounter = Symbol('SymbolHydratingCounter');\nconst SymbolServerContexts = Symbol('SymbolServerContexts');\n\nexport class CtxSSR extends BeanSimple {\n private [SymbolIsRuntimeSsrPreHydration]: Ref<boolean> = ref(false);\n private [SymbolSSRContext]: SSRContext;\n private [SymbolSSRState]: SysSsrState;\n private [SymbolOnHydrateds]: Functionable[] = [];\n private [SymbolOnHydratePropHasMismatches]: OnHydratePropHasMismatch[] = [];\n private [SymbolInstanceUpdates]: ComponentInternalInstance[] = [];\n\n private [SymbolHydratingCounter]: number = 0;\n private [SymbolServerContexts]: Set<ZovaContext> = new Set();\n\n public metaStore: CtxSSRMetaStore;\n\n /** @internal */\n public initialize() {\n if (process.env.SERVER) {\n this._serverContextRegister();\n }\n // ssr state\n this[SymbolSSRState] = this.sys.bean._getBeanSyncOnly('a-ssr.sys.ssrState');\n // SymbolIsRuntimeSsrPreHydration\n if (process.env.SERVER) {\n this[SymbolIsRuntimeSsrPreHydration].value = true;\n } else if (process.env.CLIENT && document.body.getAttribute('data-server-rendered') !== null) {\n this[SymbolIsRuntimeSsrPreHydration].value = true;\n }\n // onHydratePropHasMismatch\n if (process.env.CLIENT && this.isRuntimeSsrPreHydration) {\n this.onHydratePropHasMismatch((el, key, clientValue, vnode, instance) => {\n return this._onHydratePropHasMismatchDefault(el, key, clientValue, vnode, instance);\n });\n }\n // metaStore\n this.metaStore = this.bean._newBeanSimple(CtxSSRMetaStore, false);\n // fix: flash on page load\n // need not check process.env.DEV, because maybe need remove vite-css-module-id on prod\n if (process.env.CLIENT && this.isRuntimeSsrPreHydration) {\n this.onHydrated(() => {\n document.querySelectorAll('style[vite-css-module-id]').forEach(node => node.remove());\n });\n }\n }\n\n private _serverContextRegister(currentContext: ZovaContext = this.ctx) {\n const serverContexts = this[SymbolServerContexts];\n serverContexts.add(currentContext);\n this.context.onRendered(() => {\n serverContexts.delete(currentContext);\n });\n }\n\n private _serverContextsDispose() {\n const serverContexts = this[SymbolServerContexts];\n for (const serverContext of serverContexts) {\n if (serverContext.disposed) continue;\n if (serverContext.bean && serverContext.bean !== serverContext.app?.bean) {\n serverContext.bean.dispose();\n }\n serverContext.dispose();\n }\n serverContexts.clear();\n }\n\n get isRuntimeSsrPreHydration() {\n return this[SymbolIsRuntimeSsrPreHydration].value;\n }\n\n set isRuntimeSsrPreHydration(value) {\n this[SymbolIsRuntimeSsrPreHydration].value = value;\n }\n\n get context() {\n if (process.env.CLIENT) throw new Error('cannot called in client');\n if (!this[SymbolSSRContext]) {\n this.ctx.util.instanceScope(() => {\n this[SymbolSSRContext] = useSSRContext()!;\n this._initContext();\n });\n }\n return this[SymbolSSRContext];\n }\n\n get state() {\n if (process.env.SERVER) {\n return this.context.state;\n } else {\n return this[SymbolSSRState].state;\n }\n }\n\n get stateDefer() {\n if (process.env.SERVER) {\n return this.context.stateDefer;\n } else {\n return this[SymbolSSRState].stateDefer;\n }\n }\n\n get renderSSRError() {\n return this.context._meta.renderError;\n }\n\n set renderSSRError(err: any) {\n this.context._meta.renderError = err;\n }\n\n getPerformAction(baseURL?: string): TypeSsrSitePerformAction | undefined {\n if (process.env.SERVER && baseURL === this.sys.env.SSR_API_BASE_URL)\n return this.context.performAction;\n return undefined;\n }\n\n private _initContext() {\n const ssrContext = this[SymbolSSRContext];\n ssrContext._meta = defu(ssrContext._meta, {\n htmlAttrs: '',\n headTags: '',\n endingHeadTags: '',\n bodyClasses: '',\n bodyAttrs: 'data-server-rendered',\n bodyTags: '',\n endingBodyTags: '',\n baseUrl: this.sys.util.getAbsoluteUrlFromPagePath(undefined, false, true), // not include publicPath\n });\n ssrContext.state = ssrContext.state || {};\n ssrContext.stateDefer = ssrContext.stateDefer || {};\n }\n\n onHydrated(fn: Functionable) {\n this[SymbolOnHydrateds].push(fn);\n }\n\n onHydratePropHasMismatch(fn: OnHydratePropHasMismatch) {\n this[SymbolOnHydratePropHasMismatches].push(fn);\n }\n\n handleDirectOrOnHydrated(fn: Functionable) {\n if (process.env.CLIENT && this.isRuntimeSsrPreHydration) {\n this.onHydrated(fn);\n } else {\n return fn();\n }\n }\n\n private _onHydratePropHasMismatchDefault(\n el: Element,\n key: string,\n clientValue: any,\n _vnode: VNode,\n _instance: ComponentInternalInstance | null,\n ): OnHydratePropHasMismatchResult {\n // expected\n let ignore = false;\n let expected: string | undefined;\n if (key === 'class') {\n ignore = true;\n if (clientValue !== undefined) {\n expected = normalizeClass(clientValue);\n el.setAttribute(key, expected as string);\n }\n } else if (key === 'style') {\n ignore = true;\n if (clientValue !== undefined) {\n expected = isString(clientValue)\n ? clientValue\n : stringifyStyle(normalizeStyle(clientValue));\n el.setAttribute(key, expected as string);\n }\n } else if (['id', 'name', 'for', 'd'].includes(key)) {\n ignore = true;\n if (clientValue !== undefined) {\n expected = String(clientValue);\n el.setAttribute(key, expected as string);\n }\n } else if (key === 'value') {\n ignore = true;\n if (clientValue !== undefined) {\n expected = String(clientValue);\n if (el.tagName === 'TEXTAREA') {\n (<any>el).value = expected;\n } else {\n el.setAttribute(key, expected as string);\n }\n }\n } else if (isBooleanAttr(key)) {\n ignore = true;\n if (clientValue !== undefined) {\n const expected = includeBooleanAttr(clientValue);\n if (expected) {\n el.setAttribute(key, '');\n } else {\n el.removeAttribute(key);\n }\n }\n } else if (el.getAttribute(`data-hydrate-ignore-${key}`) !== null) {\n ignore = true;\n if (clientValue !== undefined) {\n expected = String(clientValue);\n el.setAttribute(key, expected as string);\n }\n }\n if (!ignore) return { clientValue };\n return { ignore: true };\n }\n\n private _hydrated() {\n if (!this.isRuntimeSsrPreHydration) return;\n // should be first\n this.isRuntimeSsrPreHydration = false;\n //\n this[SymbolInstanceUpdates].forEach(instance => {\n if (!instance.isUnmounted && instance.zova) {\n try {\n instance.update();\n } catch (err: any) {\n if (!err.message.includes(\"'insertBefore'\")) {\n throw err;\n }\n }\n }\n });\n this[SymbolInstanceUpdates] = [];\n //\n this[SymbolOnHydrateds].forEach(fn => fn());\n this[SymbolOnHydrateds] = [];\n //\n this[SymbolOnHydratePropHasMismatches] = [];\n }\n\n /** @internal */\n public _hydratePropHasMismatch(\n el: Element,\n key: string,\n clientValue: any,\n vnode: VNode,\n instance: ComponentInternalInstance | null,\n ): OnHydratePropHasMismatchResult {\n for (const fn of this[SymbolOnHydratePropHasMismatches]) {\n const res = fn(el, key, clientValue, vnode, instance);\n if (res.ignore) return res;\n clientValue = res.clientValue;\n }\n return { ignore: false, clientValue };\n }\n\n /** @internal */\n public _hydratingInc() {\n ++this[SymbolHydratingCounter];\n }\n\n /** @internal */\n public _hydratingDec() {\n if (--this[SymbolHydratingCounter] === 0) {\n this._hydrated();\n }\n }\n\n /** @internal */\n public _hydratingInstanceRecord(instance: ComponentInternalInstance) {\n if (!this[SymbolInstanceUpdates].includes(instance)) {\n this[SymbolInstanceUpdates].push(instance);\n return true;\n }\n return false;\n }\n\n /** @internal */\n public _registerServerContext(currentContext: ZovaContext) {\n this._serverContextRegister(currentContext);\n }\n\n /** @internal */\n public _disposeServerContexts() {\n this._serverContextsDispose();\n }\n}\n","import type { IModule } from '@cabloy/module-info';\nimport type { IMonkeyModuleSys, IMonkeySysContextInitialize, ZovaContext } from 'zova';\n\nimport { BeanSimple } from 'zova';\n\nimport type { SysSsrState } from './bean/sys.ssrState.js';\n\nimport { CtxSSR } from './lib/ssr.js';\n\nexport class MonkeySys extends BeanSimple implements IMonkeyModuleSys, IMonkeySysContextInitialize {\n private _moduleSelf: IModule;\n private _sysSsrState: SysSsrState;\n\n constructor(moduleSelf: IModule) {\n super();\n this._moduleSelf = moduleSelf;\n }\n\n async getSysSsrState() {\n if (!this._sysSsrState) {\n this._sysSsrState = (await this.bean._getBean('a-ssr.sys.ssrState', false)) as SysSsrState;\n }\n return this._sysSsrState;\n }\n\n async moduleLoading(module: IModule) {\n if (this._moduleSelf === module) return;\n await this.getSysSsrState();\n }\n\n async moduleLoaded(_module: IModule) {}\n async configLoaded(_module: IModule, _config) {}\n\n sysContextInitialize(ctx: ZovaContext): void {\n ctx.meta.$ssr = ctx.bean._newBeanSimple(CtxSSR, false);\n ctx.meta.$ssr.initialize();\n }\n}\n","// eslint-disable\n/** sys: begin */\nexport * from '../bean/sys.ssrState.js';\n\nimport 'zova';\ndeclare module 'zova' {\n \n \n}\ndeclare module 'zova-module-a-ssr' {\n \n export interface SysSsrState {\n /** @internal */\n get scope(): ScopeModuleASsr;\n }\n\n export interface SysSsrState {\n get $beanFullName(): 'a-ssr.sys.ssrState';\n get $onionName(): 'a-ssr:ssrState';\n \n } \n}\n/** sys: end */\n/** sys: begin */\nimport { SysSsrState } from '../bean/sys.ssrState.js';\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanRecordGeneral {\n 'a-ssr.sys.ssrState': SysSsrState;\n }\n}\n/** sys: end */\n/** config: begin */\nexport * from '../config/config.js';\nimport { config } from '../config/config.js';\n/** config: end */\n/** monkey: begin */\nexport * from '../monkey.js';\n/** monkey: end */\n/** monkeySys: begin */\nexport * from '../monkeySys.js';\n/** monkeySys: end */\n/** scope: begin */\nimport { BeanScopeBase, type BeanScopeUtil, TypeModuleConfig } from 'zova';\nimport { Scope } from 'zova-module-a-bean';\n\n@Scope()\nexport class ScopeModuleASsr extends BeanScopeBase {}\n\nexport interface ScopeModuleASsr {\n util: BeanScopeUtil;\nconfig: TypeModuleConfig<typeof config>;\n}\n\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanScopeRecord {\n 'a-ssr': ScopeModuleASsr;\n }\n \n export interface IBeanScopeConfig {\n 'a-ssr': ReturnType<typeof config>;\n }\n\n \n\n \n}\n \n/** scope: end */\n"],"mappings":"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"}
|
package/dist/lib/ssr.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ declare const SymbolOnHydrateds: unique symbol;
|
|
|
9
9
|
declare const SymbolOnHydratePropHasMismatches: unique symbol;
|
|
10
10
|
declare const SymbolInstanceUpdates: unique symbol;
|
|
11
11
|
declare const SymbolHydratingCounter: unique symbol;
|
|
12
|
+
declare const SymbolServerContexts: unique symbol;
|
|
12
13
|
export declare class CtxSSR extends BeanSimple {
|
|
13
14
|
private [SymbolIsRuntimeSsrPreHydration];
|
|
14
15
|
private [SymbolSSRContext];
|
|
@@ -17,7 +18,10 @@ export declare class CtxSSR extends BeanSimple {
|
|
|
17
18
|
private [SymbolOnHydratePropHasMismatches];
|
|
18
19
|
private [SymbolInstanceUpdates];
|
|
19
20
|
private [SymbolHydratingCounter];
|
|
21
|
+
private [SymbolServerContexts];
|
|
20
22
|
metaStore: CtxSSRMetaStore;
|
|
23
|
+
private _serverContextRegister;
|
|
24
|
+
private _serverContextsDispose;
|
|
21
25
|
get isRuntimeSsrPreHydration(): boolean;
|
|
22
26
|
set isRuntimeSsrPreHydration(value: boolean);
|
|
23
27
|
get context(): SSRContext;
|
package/dist/lib/ssr.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssr.d.ts","sourceRoot":"","sources":["../../src/lib/ssr.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"ssr.d.ts","sourceRoot":"","sources":["../../src/lib/ssr.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,MAAM,CAAC;AAKtD,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAGlC,OAAO,KAAK,EACV,wBAAwB,EAExB,UAAU,EACV,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,QAAA,MAAM,8BAA8B,eAA2C,CAAC;AAChF,QAAA,MAAM,gBAAgB,eAA6B,CAAC;AACpD,QAAA,MAAM,cAAc,eAA2B,CAAC;AAChD,QAAA,MAAM,iBAAiB,eAA8B,CAAC;AACtD,QAAA,MAAM,gCAAgC,eAA6C,CAAC;AACpF,QAAA,MAAM,qBAAqB,eAAkC,CAAC;AAC9D,QAAA,MAAM,sBAAsB,eAAmC,CAAC;AAChE,QAAA,MAAM,oBAAoB,eAAiC,CAAC;AAE5D,qBAAa,MAAO,SAAQ,UAAU;IACpC,OAAO,CAAC,CAAC,8BAA8B,CAAC,CAA4B;IACpE,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAa;IACvC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAc;IACtC,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAsB;IACjD,OAAO,CAAC,CAAC,gCAAgC,CAAC,CAAkC;IAC5E,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAmC;IAElE,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAa;IAC7C,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAA+B;IAEtD,SAAS,EAAE,eAAe,CAAC;IAgClC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,sBAAsB;IAY9B,IAAI,wBAAwB,YAE3B;IAED,IAAI,wBAAwB,CAAC,KAAK,SAAA,EAEjC;IAED,IAAI,OAAO,eASV;IAED,IAAI,KAAK,gDAMR;IAED,IAAI,UAAU,qDAMb;IAED,IAAI,cAAc,IAIM,GAAG,CAF1B;IAED,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,EAE1B;IAED,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS;IAMxE,OAAO,CAAC,YAAY;IAgBpB,UAAU,CAAC,EAAE,EAAE,YAAY;IAI3B,wBAAwB,CAAC,EAAE,EAAE,wBAAwB;IAIrD,wBAAwB,CAAC,EAAE,EAAE,YAAY;IAQzC,OAAO,CAAC,gCAAgC;IA6DxC,OAAO,CAAC,SAAS;CAsElB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssrMetaStore.d.ts","sourceRoot":"","sources":["../../src/lib/ssrMetaStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAQ,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,EAA8B,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAIzF,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,kBAAkB,CAAC,CAAiB;IAC5C,OAAO,CAAC,WAAW,CAA+B;IAElD,SAAS,CAAC,QAAQ;IAoBlB,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"ssrMetaStore.d.ts","sourceRoot":"","sources":["../../src/lib/ssrMetaStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAQ,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,EAA8B,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAIzF,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,kBAAkB,CAAC,CAAiB;IAC5C,OAAO,CAAC,WAAW,CAA+B;IAElD,SAAS,CAAC,QAAQ;IAoBlB,OAAO,CAAC,eAAe;IAevB,cAAc,CAAC,kBAAkB,EAAE,qBAAqB;IAIxD,iBAAiB,CAAC,kBAAkB,EAAE,qBAAqB;IAI3D,gBAAgB;IAUhB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,iBAAiB;IA+HzB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,wBAAwB;CAOjC"}
|
package/dist/monkey.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monkey.d.ts","sourceRoot":"","sources":["../src/monkey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,2BAA2B,EAC3B,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACZ,MAAM,MAAM,CAAC;AAGd,OAAO,EAAE,UAAU,EAAQ,MAAM,MAAM,CAAC;AAMxC,qBAAa,MACX,SAAQ,UACR,YAAW,2BAA2B,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa;IAE5F,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"monkey.d.ts","sourceRoot":"","sources":["../src/monkey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,2BAA2B,EAC3B,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACZ,MAAM,MAAM,CAAC;AAGd,OAAO,EAAE,UAAU,EAAQ,MAAM,MAAM,CAAC;AAMxC,qBAAa,MACX,SAAQ,UACR,YAAW,2BAA2B,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa;IAE5F,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAOtC,aAAa;IAOb,aAAa,CAAC,OAAO,EAAE,OAAO;IAC9B,YAAY,CAAC,MAAM,EAAE,OAAO;IAQ5B,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ;IAyB1D,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,0BAA0B;CAkBnC"}
|
package/package.json
CHANGED
package/src/lib/ssr.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ComponentInternalInstance, Ref, VNode } from 'vue';
|
|
2
|
-
import type { Functionable } from 'zova';
|
|
2
|
+
import type { Functionable, ZovaContext } from 'zova';
|
|
3
3
|
|
|
4
4
|
import { includeBooleanAttr, isBooleanAttr, isString, stringifyStyle } from '@vue/shared';
|
|
5
5
|
import { defu } from 'defu';
|
|
@@ -23,6 +23,7 @@ const SymbolOnHydrateds = Symbol('SymbolOnHydrateds');
|
|
|
23
23
|
const SymbolOnHydratePropHasMismatches = Symbol('SymbolOnHydratePropHasMismatches');
|
|
24
24
|
const SymbolInstanceUpdates = Symbol('SymbolInstanceUpdates');
|
|
25
25
|
const SymbolHydratingCounter = Symbol('SymbolHydratingCounter');
|
|
26
|
+
const SymbolServerContexts = Symbol('SymbolServerContexts');
|
|
26
27
|
|
|
27
28
|
export class CtxSSR extends BeanSimple {
|
|
28
29
|
private [SymbolIsRuntimeSsrPreHydration]: Ref<boolean> = ref(false);
|
|
@@ -33,11 +34,15 @@ export class CtxSSR extends BeanSimple {
|
|
|
33
34
|
private [SymbolInstanceUpdates]: ComponentInternalInstance[] = [];
|
|
34
35
|
|
|
35
36
|
private [SymbolHydratingCounter]: number = 0;
|
|
37
|
+
private [SymbolServerContexts]: Set<ZovaContext> = new Set();
|
|
36
38
|
|
|
37
39
|
public metaStore: CtxSSRMetaStore;
|
|
38
40
|
|
|
39
41
|
/** @internal */
|
|
40
42
|
public initialize() {
|
|
43
|
+
if (process.env.SERVER) {
|
|
44
|
+
this._serverContextRegister();
|
|
45
|
+
}
|
|
41
46
|
// ssr state
|
|
42
47
|
this[SymbolSSRState] = this.sys.bean._getBeanSyncOnly('a-ssr.sys.ssrState');
|
|
43
48
|
// SymbolIsRuntimeSsrPreHydration
|
|
@@ -63,6 +68,26 @@ export class CtxSSR extends BeanSimple {
|
|
|
63
68
|
}
|
|
64
69
|
}
|
|
65
70
|
|
|
71
|
+
private _serverContextRegister(currentContext: ZovaContext = this.ctx) {
|
|
72
|
+
const serverContexts = this[SymbolServerContexts];
|
|
73
|
+
serverContexts.add(currentContext);
|
|
74
|
+
this.context.onRendered(() => {
|
|
75
|
+
serverContexts.delete(currentContext);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
private _serverContextsDispose() {
|
|
80
|
+
const serverContexts = this[SymbolServerContexts];
|
|
81
|
+
for (const serverContext of serverContexts) {
|
|
82
|
+
if (serverContext.disposed) continue;
|
|
83
|
+
if (serverContext.bean && serverContext.bean !== serverContext.app?.bean) {
|
|
84
|
+
serverContext.bean.dispose();
|
|
85
|
+
}
|
|
86
|
+
serverContext.dispose();
|
|
87
|
+
}
|
|
88
|
+
serverContexts.clear();
|
|
89
|
+
}
|
|
90
|
+
|
|
66
91
|
get isRuntimeSsrPreHydration() {
|
|
67
92
|
return this[SymbolIsRuntimeSsrPreHydration].value;
|
|
68
93
|
}
|
|
@@ -265,4 +290,14 @@ export class CtxSSR extends BeanSimple {
|
|
|
265
290
|
}
|
|
266
291
|
return false;
|
|
267
292
|
}
|
|
293
|
+
|
|
294
|
+
/** @internal */
|
|
295
|
+
public _registerServerContext(currentContext: ZovaContext) {
|
|
296
|
+
this._serverContextRegister(currentContext);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/** @internal */
|
|
300
|
+
public _disposeServerContexts() {
|
|
301
|
+
this._serverContextsDispose();
|
|
302
|
+
}
|
|
268
303
|
}
|
package/src/lib/ssrMetaStore.ts
CHANGED
|
@@ -32,13 +32,18 @@ export class CtxSSRMetaStore extends BeanSimple {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
private _onRenderedLast(err?: Error) {
|
|
35
|
-
|
|
35
|
+
const app = this.app;
|
|
36
|
+
try {
|
|
37
|
+
if (err) return;
|
|
38
|
+
|
|
36
39
|
const ssrContext = this.ctx.meta.$ssr.context;
|
|
37
40
|
this._injectContextState(ssrContext);
|
|
38
41
|
this._injectContextStateDefer(ssrContext);
|
|
39
42
|
this._injectServerMeta(ssrContext);
|
|
43
|
+
} finally {
|
|
44
|
+
this.ctx.meta.$ssr._disposeServerContexts();
|
|
45
|
+
app?.close();
|
|
40
46
|
}
|
|
41
|
-
this.app.close();
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
addMetaOptions(metaOptionsWrapper: SSRMetaOptionsWrapper) {
|
|
@@ -159,6 +164,7 @@ export class CtxSSRMetaStore extends BeanSimple {
|
|
|
159
164
|
ssr_local_themedark=window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
160
165
|
}
|
|
161
166
|
window.ssr_themedark=window.ssr_local_themedark=ssr_local_themedark;`;
|
|
167
|
+
// Resolve the final browser theme from the SSR dual markers emitted before page render.
|
|
162
168
|
ssr_local_themedark += `Object.defineProperty(window, 'ssr_themedark_data', {
|
|
163
169
|
get: () => {
|
|
164
170
|
let _data=document.body.getAttribute('data-ssr-theme-dark-'+window.ssr_themedark);
|
package/src/monkey.ts
CHANGED