zova-module-a-ssrserver 5.1.8 → 5.1.9

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.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/service/ssrHandler.ts","../src/monkeySys.ts","../src/.metadata/index.ts"],"sourcesContent":["import { catchError } from '@cabloy/utils';\nimport { RouteLocationResolvedGeneric } from '@cabloy/vue-router';\nimport fse from 'fs-extra';\nimport ms from 'ms';\nimport path, { basename } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { BeanBase, cast, Use, UseScope } from 'zova';\nimport { Service } from 'zova-module-a-bean';\nimport { SysRouter } from 'zova-module-a-router';\nimport { ScopeModuleASsr } from 'zova-module-a-ssr';\n\nimport { ISsrHandlerRenderOptionsInner, TypeEventResolvePathResult } from '../types/ssr.js';\n\nconst jsRE = /\\.js$/;\nconst cssRE = /\\.css$/;\nconst woffRE = /\\.woff$/;\nconst woff2RE = /\\.woff2$/;\nconst gifRE = /\\.gif$/;\nconst jpgRE = /\\.jpe?g$/;\nconst pngRE = /\\.png$/;\n\n@Service()\nexport class ServiceSsrHandler extends BeanBase {\n private _siteAssetDir: string;\n private _handlerPromise: Promise<any>;\n private _handlerInstance: any;\n private _clientManifest: any;\n private _ssrModulesZovaCache: any = {};\n\n @Use()\n $$sysRouter: SysRouter;\n\n @UseScope()\n $$scopeSsr: ScopeModuleASsr;\n\n protected __init__(siteAssetDir: string) {\n this._siteAssetDir = siteAssetDir;\n }\n\n protected __dispose__() {\n this.dispose();\n }\n\n public dispose() {\n this.sys.close();\n this._handlerInstance = undefined;\n }\n\n async resolvePath(filename: string): Promise<TypeEventResolvePathResult> {\n if (filename === '') filename = 'index.html';\n // assets\n const fileAsset = path.join(this._siteAssetDir, 'client', filename);\n if (await fse.exists(fileAsset)) return fileAsset;\n // not found\n return undefined;\n }\n\n public async render(options: ISsrHandlerRenderOptionsInner) {\n // resolve route\n const pagePathFull = options.state?.pagePathFull ?? this.sys.util.getPagePathFromAbsoluteUrl(options.req.url!);\n const route = await this.$$sysRouter.resolveRoute(pagePathFull, true, false);\n if (!route) return;\n // handler\n const { serverEntry, renderToString, renderTemplate } = this._handlerInstance;\n // ssrContext\n const onRenderedList: Function[] = [];\n const ssrContext = {\n ...options,\n _meta: {} as any,\n onRendered: fn => {\n onRenderedList.push(fn);\n },\n };\n // render\n const renderFn = await serverEntry(ssrContext);\n const [runtimePageContent, err] = await catchError(() => {\n return renderToString(renderFn, ssrContext);\n });\n\n const error = ssrContext._meta.renderError ?? err;\n onRenderedList.forEach(fn => {\n fn(error);\n });\n cast(ssrContext).rendered(error);\n if (error) {\n if (error instanceof Error) throw error;\n return error;\n }\n\n ssrContext._meta.runtimePageContent = runtimePageContent;\n\n // @vitejs/plugin-vue injects code into a component's setup() that registers\n // itself on ctx.modules. After the render, ctx.modules would contain all the\n // components that have been instantiated during this render call.\n ssrContext._meta.endingHeadTags += this._renderModulesPreload_zova(cast(ssrContext).modules, { ssrContext });\n ssrContext._meta.endingHeadTags += this._renderModulesPreload(cast(ssrContext).modules, { ssrContext });\n\n const html = renderTemplate(ssrContext);\n\n // transferCache\n await this._renderTransferCache(options, route);\n\n // todo: ssg\n\n return html;\n }\n\n public async ensureReady(handlerNonce: number) {\n if (!this._handlerInstance) {\n if (!this._handlerPromise) {\n this._handlerPromise = this._prepareHandler(handlerNonce);\n }\n this._handlerInstance = await this._handlerPromise;\n }\n return this._handlerInstance;\n }\n\n private async _prepareHandler(handlerNonce: number) {\n // handler\n const fileHandler = path.join(this._siteAssetDir, 'handler.js');\n const fileUrl = `${pathToHref(fileHandler)}?${handlerNonce}`;\n const handlerInstance = await import(/* @vite-ignore */ fileUrl);\n // clientManifest\n const fileManifest = path.join(this._siteAssetDir, 'quasar.manifest.json');\n const contentManifest = await fse.readFile(fileManifest, { encoding: 'utf-8' });\n this._clientManifest = JSON.parse(contentManifest);\n // ok\n return handlerInstance;\n }\n\n private _renderModulesPreload(modules, opts) {\n let links = '';\n const seen = new Set();\n\n modules.forEach(id => {\n const files = this._clientManifest[id];\n if (files === void 0) return;\n\n files.forEach(file => {\n if (seen.has(file) === true) return;\n\n seen.add(file);\n const filename = basename(file);\n\n if (this._clientManifest[filename] !== void 0) {\n for (const depFile of this._clientManifest[filename]) {\n if (seen.has(depFile) === false) {\n links += this._renderPreloadTag(depFile, opts);\n seen.add(depFile);\n }\n }\n }\n\n links += this._renderPreloadTag(file, opts);\n });\n });\n\n return links;\n }\n\n private _renderModulesPreload_zova(modules2, opts) {\n let links = '';\n const seen = /* @__PURE__ */ new Set();\n modules2.forEach(id => {\n if (!id.startsWith('@@')) return;\n if (seen.has(id) === true) return;\n let cache = this._ssrModulesZovaCache[id];\n if (!cache) {\n for (const key in this._clientManifest) {\n const prefix = `${id.substring(2)}-`;\n const postfix = '.js';\n if (key.startsWith(prefix) && key.endsWith(postfix)) {\n cache = this._resolveUrlPath(`/assets/${key}`);\n break;\n }\n }\n this._ssrModulesZovaCache[id] = cache;\n }\n links += this._renderPreloadTag(cache, opts);\n seen.add(id);\n });\n return links;\n }\n\n private _resolveUrlPath(url: string) {\n let publicPath = this.sys.env.APP_PUBLIC_PATH;\n if (publicPath) publicPath = `/${publicPath}`;\n return publicPath + url;\n }\n\n private _renderPreloadTag(file: string, _opts) {\n file = this.sys.util.getAbsoluteUrlFromPagePath(file, false, true);\n if (jsRE.test(file) === true) {\n return `<link rel=\"modulepreload\" href=\"${file}\" crossorigin>`;\n }\n\n if (cssRE.test(file) === true) {\n return `<link rel=\"stylesheet\" href=\"${file}\" crossorigin>`;\n }\n\n if (woffRE.test(file) === true) {\n return `<link rel=\"preload\" href=\"${file}\" as=\"font\" type=\"font/woff\" crossorigin>`;\n }\n\n if (woff2RE.test(file) === true) {\n return `<link rel=\"preload\" href=\"${file}\" as=\"font\" type=\"font/woff2\" crossorigin>`;\n }\n\n if (gifRE.test(file) === true) {\n return `<link rel=\"preload\" href=\"${file}\" as=\"image\" type=\"image/gif\" crossorigin>`;\n }\n\n if (jpgRE.test(file) === true) {\n return `<link rel=\"preload\" href=\"${file}\" as=\"image\" type=\"image/jpeg\" crossorigin>`;\n }\n\n if (pngRE.test(file) === true) {\n return `<link rel=\"preload\" href=\"${file}\" as=\"image\" type=\"image/png\" crossorigin>`;\n }\n\n return '';\n }\n\n private async _renderTransferCache(options: ISsrHandlerRenderOptionsInner, route: RouteLocationResolvedGeneric) {\n const { res } = options;\n const transferCache = route.meta.transferCache ?? this.$$scopeSsr.config.transferCache;\n if (transferCache === false) return;\n // expires\n const transferCacheExpires = transferCache.expires ?? 0;\n const expires = typeof transferCacheExpires === 'string' ? ms(transferCacheExpires) / 1000 : transferCacheExpires;\n if (expires === 0) {\n res.appendHeader('cache-control', 'no-cache, no-store, must-revalidate');\n } else {\n res.appendHeader('cache-control', `public, max-age=${expires}`);\n }\n }\n}\n\nexport function pathToHref(fileName: string): string {\n return pathToFileURL(fileName).href;\n // return Path.sep === '\\\\' ? pathToFileURL(fileName).href : fileName;\n}\n","import type { IMonkeySysInitialize } from 'zova';\n\nimport { BeanSimple } from 'zova';\n\nimport { ServiceSsrHandler } from './service/ssrHandler.js';\n\nexport class MonkeySys extends BeanSimple implements IMonkeySysInitialize {\n async sysInitialize() {\n this.sys.meta.$getSsrHandler = async (siteAssetDir: string): Promise<ServiceSsrHandler> => {\n return await this.sys.bean._getBean(ServiceSsrHandler, false, siteAssetDir);\n };\n }\n}\n","// eslint-disable\n/** service: begin */\nexport * from '../service/ssrHandler.js';\n\nimport 'zova-module-a-bean';\ndeclare module 'zova-module-a-bean' {\n \n export interface IServiceRecord {\n 'a-ssrserver:ssrHandler': never;\n }\n\n \n}\ndeclare module 'zova-module-a-ssrserver' {\n \n export interface ServiceSsrHandler {\n /** @internal */\n get scope(): ScopeModuleASsrserver;\n }\n\n export interface ServiceSsrHandler {\n get $beanFullName(): 'a-ssrserver.service.ssrHandler';\n get $onionName(): 'a-ssrserver:ssrHandler';\n \n } \n}\n/** service: end */\n/** service: begin */\nimport { ServiceSsrHandler } from '../service/ssrHandler.js';\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanRecordGeneral {\n 'a-ssrserver.service.ssrHandler': ServiceSsrHandler;\n }\n}\n/** service: end */\n/** monkeySys: begin */\nexport * from '../monkeySys.js';\n/** monkeySys: end */\n/** scope: begin */\nimport { BeanScopeBase, type BeanScopeUtil } from 'zova';\nimport { Scope } from 'zova-module-a-bean';\n\n@Scope()\nexport class ScopeModuleASsrserver extends BeanScopeBase {}\n\nexport interface ScopeModuleASsrserver {\n util: BeanScopeUtil;\n}\n\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanScopeRecord {\n 'a-ssrserver': ScopeModuleASsrserver;\n }\n \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/service/ssrHandler.ts","../src/monkeySys.ts","../src/.metadata/index.ts"],"sourcesContent":["import { catchError } from '@cabloy/utils';\nimport { RouteLocationResolvedGeneric } from '@cabloy/vue-router';\nimport fse from 'fs-extra';\nimport ms from 'ms';\nimport path, { basename } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { BeanBase, cast, Use, UseScope } from 'zova';\nimport { Service } from 'zova-module-a-bean';\nimport { SysRouter } from 'zova-module-a-router';\nimport { ScopeModuleASsr } from 'zova-module-a-ssr';\n\nimport { ISsrHandlerRenderOptionsInner, TypeEventResolvePathResult } from '../types/ssr.js';\n\nconst jsRE = /\\.js$/;\nconst cssRE = /\\.css$/;\nconst woffRE = /\\.woff$/;\nconst woff2RE = /\\.woff2$/;\nconst gifRE = /\\.gif$/;\nconst jpgRE = /\\.jpe?g$/;\nconst pngRE = /\\.png$/;\n\n@Service()\nexport class ServiceSsrHandler extends BeanBase {\n private _siteAssetDir: string;\n private _handlerPromise: Promise<any>;\n private _handlerInstance: any;\n private _clientManifest: any;\n private _ssrModulesZovaCache: any = {};\n\n @Use()\n $$sysRouter: SysRouter;\n\n @UseScope()\n $$scopeSsr: ScopeModuleASsr;\n\n protected __init__(siteAssetDir: string) {\n this._siteAssetDir = siteAssetDir;\n }\n\n protected __dispose__() {\n this.dispose();\n }\n\n public dispose() {\n this.sys.close();\n this._handlerInstance = undefined;\n }\n\n async resolvePath(filename: string): Promise<TypeEventResolvePathResult> {\n if (filename === '') filename = 'index.html';\n // assets\n const fileAsset = path.join(this._siteAssetDir, 'client', filename);\n if (await fse.exists(fileAsset)) return fileAsset;\n // not found\n return undefined;\n }\n\n public async render(options: ISsrHandlerRenderOptionsInner) {\n // resolve route\n const pagePathFull =\n options.state?.pagePathFull ?? this.sys.util.getPagePathFromAbsoluteUrl(options.req.url!);\n const route = await this.$$sysRouter.resolveRoute(pagePathFull, true, false);\n if (!route) return;\n // handler\n const { serverEntry, renderToString, renderTemplate } = this._handlerInstance;\n // ssrContext\n const onRenderedList: Function[] = [];\n const ssrContext = {\n ...options,\n _meta: {} as any,\n onRendered: fn => {\n onRenderedList.push(fn);\n },\n };\n // render\n const renderFn = await serverEntry(ssrContext);\n const [runtimePageContent, err] = await catchError(() => {\n return renderToString(renderFn, ssrContext);\n });\n\n const error = ssrContext._meta.renderError ?? err;\n onRenderedList.forEach(fn => {\n fn(error);\n });\n cast(ssrContext).rendered(error);\n if (error) {\n if (error instanceof Error) throw error;\n return error;\n }\n\n ssrContext._meta.runtimePageContent = runtimePageContent;\n\n // @vitejs/plugin-vue injects code into a component's setup() that registers\n // itself on ctx.modules. After the render, ctx.modules would contain all the\n // components that have been instantiated during this render call.\n ssrContext._meta.endingHeadTags += this._renderModulesPreload_zova(cast(ssrContext).modules, {\n ssrContext,\n });\n ssrContext._meta.endingHeadTags += this._renderModulesPreload(cast(ssrContext).modules, {\n ssrContext,\n });\n\n const html = renderTemplate(ssrContext);\n\n // transferCache\n await this._renderTransferCache(options, route);\n\n // todo: ssg\n\n return html;\n }\n\n public async ensureReady(handlerNonce: number) {\n if (!this._handlerInstance) {\n if (!this._handlerPromise) {\n this._handlerPromise = this._prepareHandler(handlerNonce);\n }\n this._handlerInstance = await this._handlerPromise;\n }\n return this._handlerInstance;\n }\n\n private async _prepareHandler(handlerNonce: number) {\n // handler\n const fileHandler = path.join(this._siteAssetDir, 'handler.js');\n const fileUrl = `${pathToHref(fileHandler)}?${handlerNonce}`;\n const handlerInstance = await import(/* @vite-ignore */ fileUrl);\n // clientManifest\n const fileManifest = path.join(this._siteAssetDir, 'quasar.manifest.json');\n const contentManifest = await fse.readFile(fileManifest, { encoding: 'utf-8' });\n this._clientManifest = JSON.parse(contentManifest);\n // ok\n return handlerInstance;\n }\n\n private _renderModulesPreload(modules, opts) {\n let links = '';\n const seen = new Set();\n\n modules.forEach(id => {\n const files = this._clientManifest[id];\n if (files === void 0) return;\n\n files.forEach(file => {\n if (seen.has(file) === true) return;\n\n seen.add(file);\n const filename = basename(file);\n\n if (this._clientManifest[filename] !== void 0) {\n for (const depFile of this._clientManifest[filename]) {\n if (seen.has(depFile) === false) {\n links += this._renderPreloadTag(depFile, opts);\n seen.add(depFile);\n }\n }\n }\n\n links += this._renderPreloadTag(file, opts);\n });\n });\n\n return links;\n }\n\n private _renderModulesPreload_zova(modules2, opts) {\n let links = '';\n const seen = /* @__PURE__ */ new Set();\n modules2.forEach(id => {\n if (!id.startsWith('@@')) return;\n if (seen.has(id) === true) return;\n let cache = this._ssrModulesZovaCache[id];\n if (!cache) {\n for (const key in this._clientManifest) {\n const prefix = `${id.substring(2)}-`;\n const postfix = '.js';\n if (key.startsWith(prefix) && key.endsWith(postfix)) {\n cache = this._resolveUrlPath(`/assets/${key}`);\n break;\n }\n }\n this._ssrModulesZovaCache[id] = cache;\n }\n links += this._renderPreloadTag(cache, opts);\n seen.add(id);\n });\n return links;\n }\n\n private _resolveUrlPath(url: string) {\n let publicPath = this.sys.env.APP_PUBLIC_PATH;\n if (publicPath) publicPath = `/${publicPath}`;\n return publicPath + url;\n }\n\n private _renderPreloadTag(file: string, _opts) {\n file = this.sys.util.getAbsoluteUrlFromPagePath(file, false, true);\n if (jsRE.test(file) === true) {\n return `<link rel=\"modulepreload\" href=\"${file}\" crossorigin>`;\n }\n\n if (cssRE.test(file) === true) {\n return `<link rel=\"stylesheet\" href=\"${file}\" crossorigin>`;\n }\n\n if (woffRE.test(file) === true) {\n return `<link rel=\"preload\" href=\"${file}\" as=\"font\" type=\"font/woff\" crossorigin>`;\n }\n\n if (woff2RE.test(file) === true) {\n return `<link rel=\"preload\" href=\"${file}\" as=\"font\" type=\"font/woff2\" crossorigin>`;\n }\n\n if (gifRE.test(file) === true) {\n return `<link rel=\"preload\" href=\"${file}\" as=\"image\" type=\"image/gif\" crossorigin>`;\n }\n\n if (jpgRE.test(file) === true) {\n return `<link rel=\"preload\" href=\"${file}\" as=\"image\" type=\"image/jpeg\" crossorigin>`;\n }\n\n if (pngRE.test(file) === true) {\n return `<link rel=\"preload\" href=\"${file}\" as=\"image\" type=\"image/png\" crossorigin>`;\n }\n\n return '';\n }\n\n private async _renderTransferCache(\n options: ISsrHandlerRenderOptionsInner,\n route: RouteLocationResolvedGeneric,\n ) {\n const { res } = options;\n const transferCache = route.meta.transferCache ?? this.$$scopeSsr.config.transferCache;\n if (transferCache === false) return;\n // expires\n const transferCacheExpires = transferCache.expires ?? 0;\n const expires =\n typeof transferCacheExpires === 'string'\n ? ms(transferCacheExpires) / 1000\n : transferCacheExpires;\n if (expires === 0) {\n res.appendHeader('cache-control', 'no-cache, no-store, must-revalidate');\n } else {\n res.appendHeader('cache-control', `public, max-age=${expires}`);\n }\n }\n}\n\nexport function pathToHref(fileName: string): string {\n return pathToFileURL(fileName).href;\n // return Path.sep === '\\\\' ? pathToFileURL(fileName).href : fileName;\n}\n","import type { IMonkeySysInitialize } from 'zova';\n\nimport { BeanSimple } from 'zova';\n\nimport { ServiceSsrHandler } from './service/ssrHandler.js';\n\nexport class MonkeySys extends BeanSimple implements IMonkeySysInitialize {\n async sysInitialize() {\n this.sys.meta.$getSsrHandler = async (siteAssetDir: string): Promise<ServiceSsrHandler> => {\n return await this.sys.bean._getBean(ServiceSsrHandler, false, siteAssetDir);\n };\n }\n}\n","// eslint-disable\n/** service: begin */\nexport * from '../service/ssrHandler.js';\n\nimport 'zova-module-a-bean';\ndeclare module 'zova-module-a-bean' {\n \n export interface IServiceRecord {\n 'a-ssrserver:ssrHandler': never;\n }\n\n \n}\ndeclare module 'zova-module-a-ssrserver' {\n \n export interface ServiceSsrHandler {\n /** @internal */\n get scope(): ScopeModuleASsrserver;\n }\n\n export interface ServiceSsrHandler {\n get $beanFullName(): 'a-ssrserver.service.ssrHandler';\n get $onionName(): 'a-ssrserver:ssrHandler';\n \n } \n}\n/** service: end */\n/** service: begin */\nimport { ServiceSsrHandler } from '../service/ssrHandler.js';\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanRecordGeneral {\n 'a-ssrserver.service.ssrHandler': ServiceSsrHandler;\n }\n}\n/** service: end */\n/** monkeySys: begin */\nexport * from '../monkeySys.js';\n/** monkeySys: end */\n/** scope: begin */\nimport { BeanScopeBase, type BeanScopeUtil } from 'zova';\nimport { Scope } from 'zova-module-a-bean';\n\n@Scope()\nexport class ScopeModuleASsrserver extends BeanScopeBase {}\n\nexport interface ScopeModuleASsrserver {\n util: BeanScopeUtil;\n}\n\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanScopeRecord {\n 'a-ssrserver': ScopeModuleASsrserver;\n }\n \n \n\n \n\n \n}\n \n/** scope: end */\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ssrHandler.d.ts","sourceRoot":"","sources":["../../src/service/ssrHandler.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAuB,MAAM,MAAM,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAU5F,qBACa,iBAAkB,SAAQ,QAAQ;IAC7C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,oBAAoB,CAAW;IAGvC,WAAW,EAAE,SAAS,CAAC;IAGvB,UAAU,EAAE,eAAe,CAAC;IAE5B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM;IAIvC,SAAS,CAAC,WAAW;IAId,OAAO;IAKR,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAS3D,MAAM,CAAC,OAAO,EAAE,6BAA6B;IAkD7C,WAAW,CAAC,YAAY,EAAE,MAAM;YAU/B,eAAe;IAa7B,OAAO,CAAC,qBAAqB;IA8B7B,OAAO,CAAC,0BAA0B;IAwBlC,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,iBAAiB;YAiCX,oBAAoB;CAanC;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGnD"}
1
+ {"version":3,"file":"ssrHandler.d.ts","sourceRoot":"","sources":["../../src/service/ssrHandler.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAuB,MAAM,MAAM,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAU5F,qBACa,iBAAkB,SAAQ,QAAQ;IAC7C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,oBAAoB,CAAW;IAGvC,WAAW,EAAE,SAAS,CAAC;IAGvB,UAAU,EAAE,eAAe,CAAC;IAE5B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM;IAIvC,SAAS,CAAC,WAAW;IAId,OAAO;IAKR,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAS3D,MAAM,CAAC,OAAO,EAAE,6BAA6B;IAuD7C,WAAW,CAAC,YAAY,EAAE,MAAM;YAU/B,eAAe;IAa7B,OAAO,CAAC,qBAAqB;IA8B7B,OAAO,CAAC,0BAA0B;IAwBlC,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,iBAAiB;YAiCX,oBAAoB;CAmBnC;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGnD"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "zova-module-a-ssrserver",
3
- "version": "5.1.8",
4
- "gitHead": "4574f3873b1ad25eb6cdc8c44757a6c14dfc950d",
3
+ "version": "5.1.9",
4
+ "gitHead": "a247f88a55c663d313296039f874560ee5a13e01",
5
5
  "description": "",
6
6
  "keywords": [
7
7
  "Zova Module"
@@ -57,7 +57,8 @@ export class ServiceSsrHandler extends BeanBase {
57
57
 
58
58
  public async render(options: ISsrHandlerRenderOptionsInner) {
59
59
  // resolve route
60
- const pagePathFull = options.state?.pagePathFull ?? this.sys.util.getPagePathFromAbsoluteUrl(options.req.url!);
60
+ const pagePathFull =
61
+ options.state?.pagePathFull ?? this.sys.util.getPagePathFromAbsoluteUrl(options.req.url!);
61
62
  const route = await this.$$sysRouter.resolveRoute(pagePathFull, true, false);
62
63
  if (!route) return;
63
64
  // handler
@@ -92,8 +93,12 @@ export class ServiceSsrHandler extends BeanBase {
92
93
  // @vitejs/plugin-vue injects code into a component's setup() that registers
93
94
  // itself on ctx.modules. After the render, ctx.modules would contain all the
94
95
  // components that have been instantiated during this render call.
95
- ssrContext._meta.endingHeadTags += this._renderModulesPreload_zova(cast(ssrContext).modules, { ssrContext });
96
- ssrContext._meta.endingHeadTags += this._renderModulesPreload(cast(ssrContext).modules, { ssrContext });
96
+ ssrContext._meta.endingHeadTags += this._renderModulesPreload_zova(cast(ssrContext).modules, {
97
+ ssrContext,
98
+ });
99
+ ssrContext._meta.endingHeadTags += this._renderModulesPreload(cast(ssrContext).modules, {
100
+ ssrContext,
101
+ });
97
102
 
98
103
  const html = renderTemplate(ssrContext);
99
104
 
@@ -221,13 +226,19 @@ export class ServiceSsrHandler extends BeanBase {
221
226
  return '';
222
227
  }
223
228
 
224
- private async _renderTransferCache(options: ISsrHandlerRenderOptionsInner, route: RouteLocationResolvedGeneric) {
229
+ private async _renderTransferCache(
230
+ options: ISsrHandlerRenderOptionsInner,
231
+ route: RouteLocationResolvedGeneric,
232
+ ) {
225
233
  const { res } = options;
226
234
  const transferCache = route.meta.transferCache ?? this.$$scopeSsr.config.transferCache;
227
235
  if (transferCache === false) return;
228
236
  // expires
229
237
  const transferCacheExpires = transferCache.expires ?? 0;
230
- const expires = typeof transferCacheExpires === 'string' ? ms(transferCacheExpires) / 1000 : transferCacheExpires;
238
+ const expires =
239
+ typeof transferCacheExpires === 'string'
240
+ ? ms(transferCacheExpires) / 1000
241
+ : transferCacheExpires;
231
242
  if (expires === 0) {
232
243
  res.appendHeader('cache-control', 'no-cache, no-store, must-revalidate');
233
244
  } else {