diff --git a/404.html b/404.html new file mode 100644 index 00000000..54546f34 --- /dev/null +++ b/404.html @@ -0,0 +1,17 @@ + + + + + + + + + 404 - Gez + + + +

404

PAGE NOT FOUND

+
+ + + diff --git a/api/core/app.html b/api/core/app.html new file mode 100644 index 00000000..90842916 --- /dev/null +++ b/api/core/app.html @@ -0,0 +1,40 @@ + + + + + + + + + App - Gez + + + +

App

+

App

+
export interface App {
+    /**
+     * 中间件列表
+     */
+    middleware: Middleware;
+    /**
+     * 渲染函数
+     * @param options 透传给 RenderContextOptions
+     * @returns
+     */
+    render: (options?: RenderContextOptions) => Promise<RenderContext>;
+    /**
+     * 执行构建
+     */
+    build?: () => Promise<boolean>;
+    /**
+     * 销毁实例,释放内存
+     */
+    destroy?: () => Promise<boolean>;
+}
+

createApp()

+
export declare function createApp(gez: Gez): Promise<App>;
ON THIS PAGE
+
+ + + diff --git a/api/core/gez.html b/api/core/gez.html new file mode 100644 index 00000000..b2d0ff57 --- /dev/null +++ b/api/core/gez.html @@ -0,0 +1,149 @@ + + + + + + + + + Gez - Gez + + + +

Gez

+
WARNING

标记为不推荐,是不希望你配置它或者调用它。 +

+

GezOptions

+
export interface GezOptions {
+    /**
+     * 项目根目录,默认为当前执行命令的目录。
+     */
+    root?: string;
+    /**
+     * 是否是生产环境。
+     */
+    isProd?: boolean;
+    /**
+     * 动态路径的变量占位符。
+     */
+    basePathPlaceholder?: string | false;
+    /**
+     * 模块链接配置。
+     */
+    modules?: ModuleConfig;
+    /**
+     * 是否启用归档,等同于 npm pack。
+     */
+    packs?: PackConfig;
+    /**
+     * 创建开发应用,在执行 dev、build、preview 命令时调用。
+     */
+    createDevApp?: (gez: Gez) => Promise<App>;
+    /**
+     * 创建服务器,执行 dev、build、preview 命令时调用。
+     */
+    createServer?: (gez: Gez) => Promise<void>;
+    /**
+     * gez build 构建完成后,以生产模式执行的钩子。
+     */
+    postCompileProdHook?: (gez: Gez) => Promise<void>;
+}
+

使用方式:

+
src/entry.node.ts
import type { GezOptions } from '@gez/core';
+
+export default {
+    // 配置选项
+} satisfies GezOptions;
+

class Gez

+
export declare class Gez {
+    private readonly _options;
+    private _app;
+    private _command;
+    /**
+     * 根据传入的 modules 选项解析出来的对象。
+     */
+    readonly moduleConfig: ParsedModuleConfig;
+    readonly packConfig: ParsedPackConfig;
+    constructor(options?: GezOptions);
+    /**
+     * 服务名称,来源于 package.json 文件的 name 字段。
+     */
+    get name(): string;
+    /**
+     * 根据 name 生成的 JS 变量名称。
+     */
+    get varName(): string;
+    /**
+     * 项目根目录。
+     */
+    get root(): string;
+    /**
+     * 是否是生产环境。
+     */
+    get isProd(): boolean;
+    /**
+     * 根据服务名称生成的静态资源基本路径。
+     */
+    get basePath(): string;
+    /**
+     * 动态的 base 地址占位符。
+     */
+    get basePathPlaceholder(): string;
+    /**
+     * 当前执行的命令。
+     */
+    get command(): COMMAND;
+    /**
+     * 全部命令的枚举对象。
+     */
+    get COMMAND(): typeof COMMAND;
+    private get app();
+    get _createServer(): typeof noon;
+    get _postCompileProdHook(): ((gez: Gez) => Promise<void>) | undefined;
+    /**
+     * 初始化实例。
+     */
+    init(command: COMMAND): Promise<void>;
+    /**
+     * 销毁实例,释放内存。
+     */
+    destroy(): Promise<boolean>;
+    /**
+     * 构建生产代码。
+     */
+    build(): Promise<boolean>;
+    /**
+     * 中间件。
+     */
+    get middleware(): import("./middleware").Middleware;
+    /**
+     * 调用 entry.server.ts 导出的渲染函数。
+     */
+    get render(): (options?: import("./render-context").RenderContextOptions) => Promise<import("./render-context").RenderContext>;
+    /**
+     * 解析项目路径。
+     */
+    resolvePath(projectPath: ProjectPath, ...args: string[]): string;
+    /**
+     * 同步写入一个文件。
+     */
+    writeSync(filepath: string, data: any): void;
+    /**
+     * 异步的读取一个 JSON 文件。
+     */
+    readJsonSync(filename: string): any;
+    /**
+     * 获取全部服务的清单文件。
+     */
+    getManifestList(target: 'client' | 'server'): ManifestJson[];
+    /**
+     * 获取服务端的 importmap 映射文件。
+     */
+    getServerImportMap(): ImportMap;
+}
+

使用方式:

+
src/entry.node.ts
import type { Gez } from '@gez/core';
+
+ + + diff --git a/api/core/manifest-json.html b/api/core/manifest-json.html new file mode 100644 index 00000000..8da1325b --- /dev/null +++ b/api/core/manifest-json.html @@ -0,0 +1,74 @@ + + + + + + + + + ManifestJson - Gez + + + +

ManifestJson

+

ManifestJsonChunkSizes

+
export interface ManifestJsonChunkSizes {
+    js: number;
+    css: number;
+    resource: number;
+}
+

ManifestJsonChunks

+
export interface ManifestJsonChunks {
+    /**
+     * 当前编译的 JS 文件。
+     */
+    js: string;
+    /**
+     * 当前编译的 CSS 文件。
+     */
+    css: string[];
+    /**
+     * 其它的资源文件。
+     */
+    resources: string[];
+    /**
+     * 构建产物的大小。
+     */
+    sizes: ManifestJsonChunkSizes;
+}
+

ManifestJson

+
export interface ManifestJson {
+    /**
+     * 服务名字,来自于:GezOptions.name
+     */
+    name: string;
+    /**
+     * 版本号,默认为 1.0.0
+     */
+    version: string;
+    /**
+     * 构建的版本号
+     */
+    hash: string;
+    /**
+     * 模块系统
+     */
+    type: 'module';
+    /**
+     * 对外导出的文件
+     */
+    exports: Record<string, string>;
+    /**
+     * 构建的全部文件清单
+     */
+    buildFiles: string[];
+    /**
+     * 编译的文件信息
+     * 类型:Record<源文件, 编译信息>
+     */
+    chunks: Record<string, ManifestJsonChunks>;
+}
+
+ + + diff --git a/api/core/middleware.html b/api/core/middleware.html new file mode 100644 index 00000000..4d9c573d --- /dev/null +++ b/api/core/middleware.html @@ -0,0 +1,28 @@ + + + + + + + + + Middleware - Gez + + + +

Middleware

+

Middleware

+
export type Middleware = (req: IncomingMessage, res: ServerResponse, next: Function) => void;
+

createMiddleware()

+
export declare function createMiddleware(gez: Gez): Middleware;
+

mergeMiddlewares()

+
/**
+ * 将多个中间件,合并成一个中间件执行
+ * @param middlewares 中间件列表
+ * @returns
+ */
+export declare function mergeMiddlewares(middlewares: Middleware[]): Middleware;
+
+ + + diff --git a/api/core/module-config.html b/api/core/module-config.html new file mode 100644 index 00000000..b8feaad2 --- /dev/null +++ b/api/core/module-config.html @@ -0,0 +1,126 @@ + + + + + + + + + ModuleConfig - Gez + + + +

ModuleConfig

+

PathType

+

根据模块导出的前缀来识别为不同的导出类型。

+
export declare enum PathType {
+    npm = "npm:",
+    root = "root:"
+}
+

ModuleConfig

+
export interface ModuleConfig {
+    /**
+     * 对外导出的文件
+     * 必须以 npm: 或 root: 开头
+     * npm:开头代表 node_modules 的依赖
+     * root:开头代表项目内root目录下的文件
+     * 例如:
+     *   npm:vue
+     *   root:src/routes
+     *   root:src/[filename]
+     */
+    exports?: string[];
+    /**
+     * 导入的模块基本配置
+     */
+    imports?: Record<string, string>;
+    /**
+     * 设置项目的外部依赖
+     * 例如:
+     * {
+     *  "vue": "ssr-npm/vue"
+     * }
+     */
+    externals?: Record<string, string>;
+}
+

ParsedModuleConfig

+
export interface ParsedModuleConfig {
+    /**
+     * 当前的服务名字
+     */
+    name: string;
+    /**
+     * 当前服务运行的根目录
+     */
+    root: string;
+    /**
+     * 对外导出的文件
+     */
+    exports: {
+        /**
+         * npm:*
+         * root:src/*
+         * root:src/routes/index.ts
+         */
+        name: string;
+        /**
+         * 路径的类型
+         */
+        type: PathType;
+        /**
+         * ssr-demo/npm/vue
+         * ssr-demo/src/routes
+         * ssr-demo/src/routes/index
+         */
+        importName: string;
+        /**
+         * ./npm/vue
+         * ./src/routes
+         */
+        exportName: string;
+        /**
+         * vue
+         * ./src/routes.ts
+         */
+        exportPath: string;
+        /**
+         * vue
+         * ssr-demo/src/routes/index
+         */
+        externalName: string;
+    }[];
+    /**
+     * 导入的外部服务
+     */
+    imports: {
+        /**
+         * 外部服务名称
+         */
+        name: string;
+        /**
+         * 本地路径
+         * 用于读取依赖 和 存放远程下载的依赖
+         */
+        localPath: string;
+    }[];
+    /**
+     * 外部依赖
+     */
+    externals: Record<string, {
+        match: RegExp;
+        import?: string;
+    }>;
+}
+

parseModuleConfig()

+
/**
+ * 解析模块配置
+ * @param name 当前运行服务的名字
+ * @param root 当前运行服务的根路径
+ * @param config 模块的配置
+ * @returns
+ */
+export declare function parseModuleConfig(name: string, root: string, config?: ModuleConfig): ParsedModuleConfig;
+
+ + + diff --git a/api/core/pack-config.html b/api/core/pack-config.html new file mode 100644 index 00000000..6058e0f3 --- /dev/null +++ b/api/core/pack-config.html @@ -0,0 +1,46 @@ + + + + + + + + + PackConfig - Gez + + + +

PackConfig

+

PackConfig

+
export interface PackConfig {
+    /**
+     * 是否启用归档
+     */
+    enable?: boolean;
+    /**
+     * 输出的文件
+     */
+    outputs?: string | string[] | boolean;
+    /**
+     * 发布的类型
+     * 环境变量设置:process.env.RELEASE_TYPE
+     */
+    releaseType?: 'major' | 'premajor' | 'minor' | 'preminor' | 'patch' | 'prepatch' | 'prerelease';
+    packageJson?: (gez: Gez, pkgJson: Record<string, any>) => Promise<Record<string, any>>;
+    onBefore?: (gez: Gez, pkgJson: Record<string, any>) => Promise<void>;
+    onAfter?: (gez: Gez, pkgJson: Record<string, any>, file: Buffer) => Promise<void>;
+}
+

ParsedPackConfig

+
export interface ParsedPackConfig {
+    enable: boolean;
+    outputs: string[];
+    packageJson: (gez: Gez, pkgJson: Record<string, any>) => Promise<Record<string, any>>;
+    onBefore: (gez: Gez, pkgJson: Record<string, any>) => Promise<void>;
+    onAfter: (gez: Gez, pkgJson: Record<string, any>, file: Buffer) => Promise<void>;
+}
+

parsePackConfig()

+
export declare function parsePackConfig(config?: PackConfig): ParsedPackConfig;
+
+ + + diff --git a/api/core/render-context.html b/api/core/render-context.html new file mode 100644 index 00000000..abec7652 --- /dev/null +++ b/api/core/render-context.html @@ -0,0 +1,143 @@ + + + + + + + + + RenderContext - Gez + + + +

RenderContext

+

RenderContextOptions

+
/**
+ * 渲染的参数
+ */
+export interface RenderContextOptions {
+    /**
+     * 静态资产的公共路径,可以根据业务的上下文来动态设置不同的路径。
+     */
+    base?: string;
+    /**
+     * gez.render() 函数执行时,会调用 entry.server.ts 文件导出的名称。
+     */
+    entryName?: string;
+    /**
+     * 传递给 RenderContext 对象的 params 字段。
+     */
+    params?: Record<string, any>;
+}
+

ServerRenderHandle

+
/**
+ * 服务端渲染处理函数。
+ */
+export type ServerRenderHandle = (render: RenderContext) => Promise<void>;
+

RenderFiles

+
/**
+ * 当前页面渲染的文件
+ */
+export interface RenderFiles {
+    /**
+     * CSS 文件列表。
+     */
+    css: string[];
+    /**
+     * ESM 模块列表。
+     */
+    modulepreload: string[];
+    /**
+     * importmap.js 文件列表。
+     */
+    importmap: string[];
+    /**
+     * 全部的 JS 文件列表,包含 modulepreload 和 importmap。
+     */
+    js: string[];
+    /**
+     * 除了 JS 和 CSS 之外的其它文件列表。
+     */
+    resources: string[];
+}
+

class RenderContext

+
/**
+ * 渲染上下文
+ */
+export declare class RenderContext {
+    /**
+     * Gez 的实例。
+     */
+    gez: Gez;
+    /**
+     * 重定向地址。
+     */
+    redirect: string | null;
+    /**
+     * 响应的状态码。
+     */
+    status: number | null;
+    private _html;
+    /**
+     * 参数传入的 base。
+     */
+    readonly base: string;
+    /**
+     * 参数传入的 params。
+     */
+    readonly params: Record<string, any>;
+    /**
+     * 参数传入的 entryName。
+     */
+    readonly entryName: string;
+    /**
+     * 服务端渲染过程中,收集模块执行过程中的 import.meta 对象。
+     */
+    importMetaSet: Set<ImportMeta>;
+    /**
+     * importMetaSet 收集完成后,调用 rc.commit() 函数时,会更新这个对象的信息。
+     */
+    files: RenderFiles;
+    constructor(gez: Gez, options?: RenderContextOptions);
+    /**
+     * 响应的 html 内容。
+     */
+    get html(): string;
+    set html(html: string);
+    /**
+     * 透传 https://github.com/yahoo/serialize-javascript
+     */
+    serialize(input: any, options?: serialize.SerializeJSOptions): any;
+    /**
+     * 在 window 对象,注入一个 JS 变量对象,data 必须是可以被序列化的。
+     */
+    state(varName: string, data: Record<string, any>): string;
+    /**
+     * 同构应用渲染完成后,提交模块依赖更新 files 对象。
+     */
+    commit(): Promise<void>;
+    /**
+     * 根据 files 生成 JS 和 CSS 文件的预加载代码。
+     */
+    preload(): string;
+    /**
+     * 根据 files 生成服务端首屏加载的 CSS。
+     */
+    css(): string;
+    /**
+     * 根据 files 生成 importmap 相关代码。
+     */
+    importmap(): string;
+    /**
+     * 根据 files 生成模块入口执行代码。
+     */
+    moduleEntry(): string;
+    /**
+     * 根据 files 生成 ESM 模块预加载代码。
+     */
+    modulePreload(): string;
+}
+
+ + + diff --git a/api/index.html b/api/index.html new file mode 100644 index 00000000..40b90d42 --- /dev/null +++ b/api/index.html @@ -0,0 +1,17 @@ + + + + + + + + + Overview - Gez + + + +
+
+ + + diff --git a/guide/essentials/alias.html b/guide/essentials/alias.html new file mode 100644 index 00000000..ac90bcac --- /dev/null +++ b/guide/essentials/alias.html @@ -0,0 +1,65 @@ + + + + + + + + + 路径别名 - Gez + + + +

路径别名

+

路径别名允许开发者为模块定义别名,以便于在代码中更方便的引用它们。当你想要使用一个简短、易于记忆的名称来代替冗长复杂的路径时,这将非常有用。

+

默认别名

+

在 Gez 中,默认使用服务名来作为别名,这样有两个好处。

+
    +
  • 在调用其它服务时保持命名风格的统一
  • +
  • 执行 npm run build:dts 命令,生成的类型可以被其它服务使用。
  • +
+

entry.node.ts

+
import type { GezOptions } from '@gez/core';
+
+export default {
+    name: 'ssr-module-auth'
+} satisfies GezOptions;
+

程序会读取这里的 name 配置,设置别名为 ssr-module-auth

+

tsconfig.json

+

同时还需要在 tsconfig.json 配置别名。

+
{
+    "compilerOptions": {
+        "paths": {
+            "ssr-module-auth/src/*": [
+                "./src/*"
+            ],
+            "ssr-module-auth/*": [
+                "./*"
+            ]
+        }
+    }
+}
+
TIP

如果你想了解多服务类型如何工作的,可以了解一下 gez release 命令的说明。 +

+

自定义别名

+

业务模块,你应该总是使用默认的别名,但是一些第三方包有时需要设置别名,你可以这样做。

+
export default {
+    async createDevApp(gez) {
+        return import('@gez/rspack').then((m) =>
+            m.createApp(gez, (buildContext) => {
+                buildContext.config.resolve = {
+                    ...buildContext.config.resolve,
+                    alias: {
+                        ...buildContext.config.resolve?.alias,
+                        vue$: 'vue/dist/vue.esm.js',
+                    }
+                }
+            })
+        );
+    }
+} satisfies GezOptions;
+
WARNING

业务模块对外导出时,程序会做一些打包的优化。如果你自定义了业务模块的别名,可能会导致打包出来的内容不正确。

+
+ + + diff --git a/guide/essentials/base-path.html b/guide/essentials/base-path.html new file mode 100644 index 00000000..d5c8eec3 --- /dev/null +++ b/guide/essentials/base-path.html @@ -0,0 +1,50 @@ + + + + + + + + + 基本路径 - Gez + + + +

基本路径

+

默认路径

+

静态资产的文件路径,总是使用 name 来生成固定的路径:/${name}/

+

src/entry.node.ts

+
import http from 'node:http';
+import type { GezOptions } from '@gez/core';
+import { name } from '../package.json';
+
+export default {
+    name,
+} satisfies GezOptions;
+

动态路径

+

有时,我们将一套代码部署在不同的国家或地区的集群中,允许独立域名访问和二级目录访问。

+

二级目录

+
    +
  • 主域名.com -> 默认主站
  • +
  • 主域名.com/cn/ -> 中文站点
  • +
  • 主域名.com/en/ -> 英文站点
  • +
+
+
+

独立站点

+
    +
  • 主域名.com -> 默认主站
  • +
  • cn.域名.com -> 中文站点
  • +
  • en.域名.com -> 英文站点
  • +
+

动态传参

+

你可以根据请求上下文,在给渲染函数传入不同的基本 URL。

+
const render = await gez.render({
+    base: '/gez'
+});
+
实现原理

在服务端,静态资产文件的编译路径为 [[[___GEZ_DYNAMIC_BASE___]]]/${name}/,程序会将你返回的 html 中的 [[[___GEZ_DYNAMIC_BASE___]]] 占位符替换成你传入的 base。 +

+
+ + + diff --git a/guide/essentials/command.html b/guide/essentials/command.html new file mode 100644 index 00000000..8f11bf70 --- /dev/null +++ b/guide/essentials/command.html @@ -0,0 +1,80 @@ + + + + + + + + + 内置命令 - Gez + + + +

内置命令

+

一个典型的命令配置。

+
{
+    "scripts": {
+        "dev": "gez dev",
+        "build": "npm run build:ssr && npm run build:dts && npm run release",
+        "build:ssr": "gez build",
+        "build:dts": "tsc --noEmit --outDir dist/src",
+        "release": "gez release",
+        "preview": "gez preview",
+        "start": "gez start",
+        "postinstall": "gez install"
+    }
+}
+
TIP

你需要手动配置 tsconfig.json 文件,否则执行 build:dts 命令会报错。 +

+

gez dev

+

本地开发时启动。

+
TIP

如果链接的服务是一个本地的目录,你也可以把该服务跑起来快速的开发调试。

+
export default {
+    name: 'ssr-module-auth',
+    modules: {
+        imports: {
+            'ssr-core': 'root:../ssr-core/dist'
+        }
+    }
+} satisfies GezOptions;
+

gez build

+

构建生产代码

+
TIP

有三个产物,分别是 client、server、node。

+

gez release

+

当前服务如果有对外导出模块时使用。

+
    +
  • 执行 gez build 命令,构建生产产物。
  • +
  • 执行 npm run build:dts 命令,将类型输出到 dist/server/ 目录,本地开发时,可以得到类型提示。
  • +
  • 执行 gez release 命令,将 dist/clientdist/server 目录生成 zip 压缩文件,放到 dist/client/versions 目录中。
  • +
  • dist 目录的代码,部署到生产环境中。
  • +
  • 其它服务调用 +
      +
    • entry.node.ts 配置 +
      export default {
      +    name: 'ssr-module-auth',
      +    modules: {
      +        imports: {
      +            'ssr-core': ['root:../ssr-core/dist', 'https://<hostname>/ssr-core/versions/latest.json']
      +        }
      +    }
      +} satisfies GezOptions;
      +
    • +
    • 执行 npm install 命令,触发 postinstall 钩子,再执行 gez install 命令下载
    • +
    +
  • +
+
TIP

可以封装一个 build 命令,将多个命令封装到一起。 +

+

gez preview

+

等同于执行 gez build && gez start

+

gez start

+

运行生产环境代码

+
TIP

开发环境中,所依赖的外部服务代码变更,总是会获得热更新,但是在生产环境中是没有热更新的。

如果依赖的服务发布更新了,你需要手动重启一下服务,或者编写一个脚本,监听版本发布来重启服务。

+

gez install

+

安装远程依赖到本地

+
TIP

postinstall 钩子中,执行 npm install --production 安装生产依赖无效。 +

+
+ + + diff --git a/guide/essentials/config.html b/guide/essentials/config.html new file mode 100644 index 00000000..d9eedfa4 --- /dev/null +++ b/guide/essentials/config.html @@ -0,0 +1,213 @@ + + + + + + + + + 基础配置 - Gez + + + +

基础配置

+

Gez 作为基础设施,它的配置总是非常简单的。

+

使用

+
src/entry.node.ts
import type { GezOptions } from '@gez/core';
+
+export default {
+    // 配置选项
+} satisfies GezOptions;
+

选项

+

name v3.0.0

+
    +
  • 类型:string
  • +
  • 默认值:gez
  • +
  • 描述: 服务的名称,全局唯一。
  • +
+
src/entry.node.ts
import type { GezOptions } from '@gez/core';
+import { name } from '../package.json';
+
+export default {
+    name,
+} satisfies GezOptions;
+
TIP

如果你的网站,同一个域名下,使用 Gez 打包了多个项目,那么你需要配置一个 name 来区分不同的项目。 +

+

root v3.0.0

+
    +
  • +

    类型:string

    +
  • +
  • +

    默认值:cwd()

    +
  • +
  • +

    描述: 项目根目录,默认为当前执行命令的目录。

    +
  • +
+
WARNING

如果你没有充足的理由,你都不应该配置它。

+
+

isProd v3.0.0

+
    +
  • 类型:boolean
  • +
  • 默认值: process.env.NODE_ENV === 'production'
  • +
  • 描述: 是否是生产环境。
  • +
+
WARNING

如果你没有充足的理由,你都不应该配置它。

+

isInstall v3.0.0

+
    +
  • 类型:boolean
  • +
  • 默认值: process.env.npm_config_production !== 'true'
  • +
  • 描述: 安装生产依赖时,是否安装远程依赖。
  • +
+
WARNING

如果你没有充足的理由,你都不应该配置它。

+

basePathPlaceholder v3.0.0

+
    +
  • 类型:string | false
  • +
  • 默认值: [[[___GEZ_DYNAMIC_BASE___]]]
  • +
  • 描述: 动态路径的变量占位符,深入了解请看基本路径说明。
  • +
+
WARNING

如果你的业务上,没有出现用户的内容被误替换,你都不应该配置它。

+

模块链接

+

这是 Gez 的核心功能,点击这里深入了解

+

modules.exports v3.0.0

+
    +
  • 类型:string[]
  • +
  • 默认值: []
  • +
  • 描述: 对外模块导出。
  • +
+
src/entry.node.ts
export default {
+    modules: {
+        exports: [
+            'root:src/components/layout.vue',
+            'root:src/utils/index.ts',
+            'npm:vue',
+            'npm:vue-router'
+        ]
+    }
+} satisfies GezOptions;
+
TIP

你可以将当前项目的模块或者当前项目的第三方依赖,对外导出,这样其它服务就可以使用了。

+

modules.imports v3.0.0

+
    +
  • 类型:Record<string, string | [string, string]>
  • +
  • 默认值: {}
  • +
  • 描述: 配置远程依赖。
  • +
+
src/entry.node.ts
export default {
+    modules: {
+        imports: {
+            'ssr-base': ['root:../ssr-base/dist', 'https://<hostname>/ssr-base/versions/latest.json']
+        }
+    }
+} satisfies GezOptions;
+
TIP
+
    +
  • 第一个参数为本地的存储路径
  • +
  • 第二个参数是远程依赖的地址
  • +
  • 执行 gez install 命令可以下载远程依赖到本地的地址。
  • +
+
+

你也可以直接配置本地地址。

+
src/entry.node.ts
export default {
+    modules: {
+        imports: {
+            'ssr-base': 'root:../ssr-base/dist'
+        }
+    }
+} satisfies GezOptions;
+

modules.externals v3.0.0

+
    +
  • 类型:Record<string, string>
  • +
  • 默认值: {}
  • +
  • 描述: 外部依赖设置,你可以将当前服务的依赖,指向到其它导出的服务。
  • +
+
src/entry.node.ts
export default {
+    name: 'ssr-main',
+    modules: {
+        externals: {
+            vue: 'ssr-base/npm/vue',
+            'vue-router': 'ssr-base/npm/vue-router'
+        }
+    }
+} satisfies GezOptions;
+
WARNING

需要先配置对应服务的 modules.imports,否则运行起来会报错,提示找不到模块。 +

+

钩子

+

createDevApp() v3.0.0

+
    +
  • 类型:(gez: Gez) => Promise<App>
  • +
  • 默认值: isProd = false
  • +
  • 描述: 创建开发应用,在执行 devbuildpreview 命令时调用。
  • +
+
src/entry.node.ts
export default {
+    async createDevApp(gez) {
+        return import('@gez/rspack').then((m) =>
+            m.createRspackHtmlApp(gez, {
+                config(context) {
+                    // 可以在这里修改 Rspack 编译的配置
+                }
+            })
+        );
+    }
+} satisfies GezOptions;
+
TIP
+ +
+

createServer() v3.0.0

+
    +
  • 类型:(gez: Gez) => Promise<void>
  • +
  • 默认值: undefined
  • +
  • 描述: 创建服务器,执行 devbuildpreview 命令时调用。
  • +
+
src/entry.node.ts
import http from 'node:http';
+
+export default {
+    async createServer(gez) {
+        const server = http.createServer((req, res) => {
+            // 静态文件处理
+            gez.middleware(req, res, async () => {
+                // 传入渲染的参数
+                const render = await gez.render({
+                    params: {
+                        url: req.url
+                    }
+                });
+                // 响应 HTML 内容
+                res.end(render.html);
+            });
+        });
+        // 监听端口
+        server.listen(3000, () => {
+            console.log('http://localhost:3000');
+        });
+    },
+} satisfies GezOptions;
+
TIP

你也可以使用其它的框架来创建服务器,例如:Express。 +

+

postCompileProdHook() v3.0.0

+
    +
  • 类型:(gez: Gez) => Promise<void>
  • +
  • 默认值: undefined
  • +
  • 描述: gez build 构建完成后,以生产模式执行的钩子。
  • +
+
src/entry.node.ts
import path from 'node:path';
+
+export default {
+    async postCompileProdHook(gez) {
+        const render = await gez.render({
+            base: '/gez',
+            params: { url: '/' }
+        });
+        gez.writeSync(
+            gez.resolvePath('dist/client', url.substring(1), 'index.html'),
+            rc.html
+        );
+    }
+} satisfies GezOptions;
+
TIP

你可以使用这个钩子来生成静态网站。

+
+ + + diff --git a/guide/essentials/csr.html b/guide/essentials/csr.html new file mode 100644 index 00000000..f3134509 --- /dev/null +++ b/guide/essentials/csr.html @@ -0,0 +1,69 @@ + + + + + + + + + 客户端渲染 - Gez + + + +

客户端渲染

+

如果在生产环境,无法部署一个 Node 实例,可以在构建阶段就生成客户端渲染的 index.html 文件。

+

客户端模板

+

在服务渲染时,返回一个通用的模板即可。

+
src/entry.server.ts
import type { RenderContext } from '@gez/core';
+
+export default async (rc: RenderContext) => {
+    // 提交依赖收集
+    await rc.commit();
+    // 响应 HTML
+    rc.html = `
+<!DOCTYPE html>
+<html>
+<head>
+    ${rc.preload()}
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Gez</title>
+    ${rc.css()}
+</head>
+<body>
+    <div id="app"></div>
+    ${rc.importmap()}
+    ${rc.moduleEntry()}
+    ${rc.modulePreload()}
+</body>
+</html>
+`;
+};
+

构建时生成 index.html

+
    +
  • postCompileProdHook 钩子中,手动执行一次 SSR 渲染,将生成的 HTML 写入到 dist/client/index.html 文件中。
  • +
  • dist/client/ 目录复制到你的服务器上。
  • +
+
src/entry.node.ts
import path from 'node:path';
+import type { GezOptions } from '@gez/core';
+
+export default {
+    // ... 其它选项
+    async postCompileProdHook(gez) {
+        const render = await gez.render({
+            params: {
+                url: '/'
+            }
+        });
+        gez.writeSync(
+            gez.resolvePath('dist/client', url.substring(1), 'index.html'),
+            rc.html
+        );
+    }
+} satisfies GezOptions;
+
TIP

postCompileProdHook 钩子会在构建完成后,以生产模式执行构建出来的代码。如果你要生成一个完全静态的网站,也可以在这里实现。

+
+
+ + + diff --git a/guide/essentials/module-link.html b/guide/essentials/module-link.html new file mode 100644 index 00000000..bcb3117b --- /dev/null +++ b/guide/essentials/module-link.html @@ -0,0 +1,212 @@ + + + + + + + + + 模块链接 - Gez + + + +

模块链接

+

一个大型项目,总是会拆分成组件库、工具库、业务模块等。它们总是会写在不同的地方,以独立的仓库、monorepo 包等形式存在,但最终都需要系统的主程序来链接这些模块。Gez 的核心功能就是帮你把这些不同地方的模块,快速的链接到一起。实现一个服务发布,其它服务同时更新。

+
TIP

Gez 默认支持 SSR,你也可以把它当成 CSR 来使用。 +

+

设计理念

+
    +
  • 我们应该设计一个基础服务,由基础服务提供所有的第三方依赖。
  • +
  • 基础服务统一维护第三方依赖更新,一次发布,所有业务系统生效。
  • +
  • 业务服务仅构建业务代码,所有的第三方依赖,应指向到基础服务中。
  • +
+
TIP

由于第三方依赖,都被指向到了基础服务,不再需要重复打包,这会让 Rspack 的编译速度,再提升一个台阶。

+

构建

+

传统的 SSR 程序在构建目标为 node 时,会将 node_modules 的模块设置为外部依赖,但是 Gez 会把全部代码都打包成 ESM 模块来进行链接。所以在使用一些第三方依赖的时候,尽可能的选择支持 ESM 的包,否则你可能会遇到一些问题。 +构建完成后,通常你可以看到这样的目录结构。

+
- dist/ # 构建输出目录 + - client/ # 客户端构建输出 + - chunks/ # 当前服务抽离的公共代码 + - [name].[contenthash].final.js + - npm/ # 对外导出的 node_modules 包 + - [name].[contenthash].final.js + - src/ # 对外导出的 src 目录下的文件 + - [name].[contenthash].final.js + - versions/ # 执行 gez release 命令,会将 client 和 server 的代码打包到这里 + - [contenthash].zip # 压缩文件 + - [contenthash].json # 当前压缩的版本号 + - latest.json # 最新的版本号 + - entry.[contenthash].final.js # 入口文件 + - importmap.js # 不可缓存文件,执行后往 globalThis 注入 __importmap__ + - importmap.[contenthash].final.js # 可缓存文件,执行后往 globalThis 注入 __importmap__ + - package.json # 声明模块的基本导出信息 + - server/ # 服务端构建输出 + - ... # 除了缺少 versions 目录,其它和 client 目录一致 +
+
TIP

文件名携带 .final.拓展名 时,程序会认为这是一个基于 [contenthash] 构建出来的URL,gez.middleware 将会在请求头设置强缓存。 +

+

客户端链接

+

在服务渲染时注入所有服务的 /[服务名]/importmap.[contenthash].js 文件,将模块的哈希映射信息写入到 globalThis.__importmap__ 对象中,最终将该变量值写入到 <script type="importmap"></script> 标签中。

+
src/entry.server.ts
import type { RenderContext } from '@gez/core';
+
+export default async (rc: RenderContext) => {
+    const script = await rc.script();
+    rc.html = `
+<!DOCTYPE html>
+<html>
+<head>
+    <title>Gez</title>
+</head>
+<body>
+    ${script}
+</body>
+</html>
+`;
+};
+

服务端链接

+
    +
  • 在开发阶段时,我们可以设置一个远程的依赖地址。
  • +
  • 程序会根据你配置的本地路径,计算出一个所有服务可以共同访问的 node_modules 路径,并自动创建软链接。
  • +
+
src/entry.node.ts
export default {
+    name: 'ssr-module-auth',
+    modules: {
+        imports: {
+            'ssr-base': ['root:../ssr-base/dist', 'https://<hostname>/ssr-base/versions/latest.json']
+        }
+    }
+} satisfies GezOptions;
+
WARNING

在生产环境中,你应该使用本地链接,而不是远程链接,这样能提高应用程序的启动速度。如果你使用 Docker,可以通过使用持久卷,将不同服务的产物组织到一个目录中。 +

+

远程依赖安装

+

配置 postinstall 钩子执行 gez install 命令。在安装开发依赖时,就会将远程依赖下载到你配置的 'root:../ssr-base/dist' 目录中。

+
package.json
"scripts": {
+    "postinstall": "gez install"
+}
+
WARNING

这个需要在构建时,提供对应的版本才能下载。更多请查看 gez release 命令说明。 +

+

示例

+

ssr-base

+

基础服务,提供了所有的第三方依赖和基础组件。

+

src/entry.node.ts

+
export default {
+    name: 'ssr-base',
+    modules: {
+        exports: [
+            'root:src/components/layout.vue',
+            'root:src/utils/index.ts',
+            'npm:vue',
+            'npm:vue-router'
+        ]
+    }
+} satisfies GezOptions;
+
WARNING

如果一个依赖包,只在 SSR 中使用,那么你应该总是将它放到开发依赖中,这样能显著减少安装生产依赖的大小。

+

导出类型

+
    +
  • 使用方式 +
      +
    • 在其它的服务的 src/entry.node.ts 文件中的 modules.imports 配置添加 ssr-base
    • +
    +
  • +
  • root: +
      +
    • 配置项目文件路径,通常是 src 目录的。
    • +
    • 例如: +
        +
      • import Layout from 'ssr-base/src/components/layout.vue'
      • +
      • import utils from 'ssr-base/utils/index'
      • +
      +
    • +
    +
  • +
  • npm: +
      +
    • 指向的是当前项目的依赖包,通常是 package.json 字段中 devDependencies 配置的依赖名。
    • +
    • 需要配置 modules.externals,将对应的依赖名,指向到 ssr-base/npm/包名
    • +
    +
  • +
+

多版本依赖共存

+

package.json 中配置别名。

+
{
+    "dependencies": {
+        "query-string5": "npm:query-string@^5.1.1",
+        "query-string6": "npm:query-string@^6.11.1"
+    }
+}
+

src/entry.node.ts 文件中配置对外导出。

+
export default {
+    name: 'ssr-base',
+    modules: {
+        exports: [
+            // ...
+            'npm:query-string5', // 模块链接:ssr-base/npm/query-string5
+            'npm:query-string6'  // 模块链接:ssr-base/npm/query-string6
+        ]
+    }
+} satisfies GezOptions;
+

在对应的服务将 query-string 模块链接到你需要的版本。

+

ssr-module-auth

+

将登录、注册、验证码、修改密码、找回密码等用户信息认证的业务单独在一个服务中实现,对外导出相关的页面路由地址。

+

src/entry.node.ts

+
export default {
+    name: 'ssr-module-auth',
+    modules: {
+        // 其它服务使用:import routes from 'ssr-module-auth/src/routes
+        exports: ['root:src/routes.ts'],
+        // 总是需要配置依赖服务的地址
+        imports: {
+            'ssr-base': 'root:../ssr-base/dist'
+        },
+        // 这里只配置链接的第三方依赖,实现依赖共享
+        externals: {
+            vue: 'ssr-base/npm/vue',
+            'vue-router': 'ssr-base/npm/vue-router'
+        }
+    }
+} satisfies GezOptions;
+
TIP
+
    +
  • 当我们开发一个很大的系统时,可以按照业务模块来划分不同的服务,明确每个服务的职责。
  • +
  • 当你将第三方依赖全部指向到 ssr-base 服务时,项目构建速度总是会非常快,基本上都能在瞬间完成。
  • +
+
+

ssr-main

+

系统的主程序,负责将不同的业务服务,链接到一起。

+

src/entry.node.ts

+
export default {
+    name: 'ssr-main',
+    modules: {
+        imports: {
+            'ssr-base': 'root:../ssr-base/dist',
+            'ssr-module-auth': 'root:../ssr-module-auth/dist'
+        },
+        externals: {
+            vue: 'ssr-base/npm/vue',
+            'vue-router': 'ssr-base/npm/vue-router'
+        }
+    }
+} satisfies GezOptions;
+

使用方式

+
    +
  • import Layout from 'ssr-base/src/components/layout.vue' +
      +
    • 调用 ssr-base 服务的路由配置文件
    • +
    +
  • +
  • import routes from 'ssr-module-auth/src/routes +
      +
    • 调用 ssr-module-auth 服务的路由配置文件
    • +
    +
  • +
  • import Vue from 'vue' +
      +
    • 构建工具会替换为 import Vue from 'ssr-base/npm/vue'
    • +
    • 其它依赖举一反三
    • +
    +
  • +
+
+ + + diff --git a/guide/essentials/render-context.html b/guide/essentials/render-context.html new file mode 100644 index 00000000..5fdded11 --- /dev/null +++ b/guide/essentials/render-context.html @@ -0,0 +1,91 @@ + + + + + + + + + 渲染上下文 - Gez + + + +

渲染上下文

+

我们有 entry.node.tsentry.server.ts 两个入口文件,entry.node.ts 负责创建服务器,来调用 entry.server.ts 生成 HTML。为了简化 CSS 和 JS 的注入,于是提供了一个 RenderContext 对象。

+

基本传参

+

entry.node.ts 通常可以看到这样的代码,调用一个渲染函数,然后服务响应 HTML。

+
entry.node.ts
const rc = await gez.render({
+    // 传入渲染的参数
+    params: {
+        url: req.url
+    }
+});
+// 响应 HTML 内容
+res.end(rc.html);
+

entry.server.ts 接收到传入的参数,并且根据传入的参数来响应内容。

+
entry.server.ts
import type { RenderContext } from '@gez/core';
+
+export default async (rc: RenderContext) => {
+    // 传入的参数
+    console.log(rc.params);
+    // 提交模块依赖收集
+    await rc.commit();
+    // 响应内容
+    rc.html = `你好世界!`;
+}
+

模块依赖收集

+

在 SSR 应用程序中,要处理注入渲染页面的 CSS 和 JS 文件,并不是一件简单的事情,当需要考虑多服务提供的模块时,这个问题将会变得更难。庆幸的是,Gez 提供了一个标准的实现方案,并且在 Vue 中提供了完整的实现。

+

在构建阶段,Gez 会给服务端生成的每一个 JS 文件头部注入一个 import.meta.chunkName 字段,该字段提供了一个 chunk 文件打包的入口源文件。

+
[chunk].js
import.meta.chunkName="ssr-vue2-remote@src/entry.ts";
+

ssr-vue2-remote 是我们的服务名,src/entry.ts 是这个文件打包的第一个文件。

+

例如:

+
import('ssr-vue2-remote/src/app.ts');
+

上述代码,就会生成

+
import.meta.chunkName="ssr-vue2-remote@src/app.ts";
+

Vue2 例子

+

将渲染上下文的 importMetaSet 对象传递给 Vue SSR 渲染的上下文对象中。

+
entry.server.ts
export default async (rc: RenderContext) => {
+    const { app } = createApp();
+
+    const html = await renderer.renderToString(app, {
+        importMetaSet: rc.importMetaSet
+    });
+    // ......
+};
+

在 Vue 组件中,收集上下文依赖。

+
App.vue
export default {
+    serverPrefetch () {
+        this.$ssrContext?.importMetaSet.add(import.meta);
+    }
+}
+
TIP

在实际的操作中,@gez/rspack-vue 已经在编译 .vue 组件时,已经将这段代码注入,你不需要手动调用。 +

+

等 Vue 组件渲染完成后,调用 await rc.commit() 函数来提交模块上下文的依赖收集, rc.preload()rc.css()rc.importmap()rc.modulePreload() 才能正确的注入客户端所需的依赖。

+
entry.server.ts
export default async (rc: RenderContext) => {
+    // ......
+    await rc.commit();
+
+    rc.html = `
+<!DOCTYPE html>
+<html>
+<head>
+    ${rc.preload()}
+    <title>Gez</title>
+    ${rc.css()}
+</head>
+<body>
+    ${html}
+    ${rc.importmap()}
+    ${rc.moduleEntry()}
+    ${rc.modulePreload()}
+</body>
+</html>
+`;
+};
+

深入了解

+
TIP

如果你想更加深入了解模块依赖收集,可以看下 ssr-html 这个例子,它是通过编码的形式来实现模块的依赖收集。 +

+
+ + + diff --git a/guide/essentials/rspack.html b/guide/essentials/rspack.html new file mode 100644 index 00000000..4ff1f041 --- /dev/null +++ b/guide/essentials/rspack.html @@ -0,0 +1,180 @@ + + + + + + + + + Rspack - Gez + + + +

Rspack

+

Gez 是基于 Rspack 构建应用程序,同时也就继承了 Rspack 的全部优势。Gez 提供了一些 Rspack 的配置,你可以根据自己的情况来选择使用哪个。

+
TIP

你可以基于 @gez/rspackcreateRspackHtmlApp 函数构建自己的 VueReactPreactSolidSvelte 等不同框架的配置。 +

+

@gez/rspack

+

提供了 Rspack 的基本配置。

+

安装依赖

+

如果你没有 @gez/rspack 的依赖,那么你可以通过如下命令安装。

+
npm
yarn
pnpm
bun
npm install @gez/rspack -D
+

No Loader

+

createRspackApp 提供了 Gez 的必要配置,默认情况下不提供任何 loader 相关的配置,你还需要配置一些 loader 才能将项目跑起来。

+
DANGER

Gez 的默认配置不可修改,否则 Gez 无法正常工作,点击这里 了解默认配置。 +

+

选项

+

config() v3.0.0

+
    +
  • 类型: config?: (context: RspackAppConfigContext) => void;
  • +
  • 默认值: undefined
  • +
  • 描述: 自定义 Rspack 配置。
  • +
+

例子

+
src/entry.node.ts
import type { GezOptions } from '@gez/core';
+
+export default {
+    async createDevApp(gez) {
+        return import('@gez/rspack').then((m) =>
+            m.createRspackApp(gez, {
+                config({ config }) {
+                    config.module = {
+                        ...config.module,
+                        rules: [
+                            {
+                                test: /\.ts$/,
+                                exclude: [/node_modules/],
+                                loader: 'builtin:swc-loader',
+                                options: {
+                                  jsc: {
+                                    parser: {
+                                      syntax: 'typescript',
+                                    },
+                                  },
+                                },
+                                type: 'javascript/auto',
+                              }
+                        ]
+                    }
+                }
+            })
+        );
+    }
+} satisfies GezOptions;
+

Html

+

createRspackHtmlApp 提供了一些开箱即用的配置,支持 Typescript、Worker、JSON、CSS、Less、Video、Image、Font 的相关文件。

+

选项

+

css v3.0.0

+
    +
  • 类型: boolean
  • +
  • 默认值: true
  • +
  • 描述: 是否启用默认的 CSS 配置。
  • +
+
TIP

如果你要自定义 CSS loader,可以设置为 false。 +

+

swcLoader v3.0.0

+
    +
  • 类型: SwcLoaderOptions
  • +
  • 默认值: undefined
  • +
  • 描述: 透传 builtin-swc-loader
  • +
+

lessLoader v3.0.0

+
    +
  • 类型: Record<string, any>;
  • +
  • 默认值: undefined
  • +
  • 描述: 透传 less-loader
  • +
+

styleResourcesLoader v3.0.0

+ +

definePlugin v3.0.0

+
    +
  • 类型: Record<string, any>;
  • +
  • 默认值: undefined
  • +
  • 描述: 透传 DefinePlugin
  • +
+

target.web v3.0.0

+
    +
  • 类型: string[]
  • +
  • 默认值: ['chrome>=87', 'firefox>=78', 'safari>=14', 'edge>=88']
  • +
  • 描述: 浏览器的构建目标。
  • +
+
WARNING

构建目标小于默认配置,Gez 可能无法正常工作。

+

target.node v3.0.0

+
    +
  • 类型: string[]
  • +
  • 默认值: ['node>=20']
  • +
  • 描述: Node.js 的构建目标。
  • +
+
WARNING

构建目标小于默认配置,无法保证兼容性,请认真考虑后设置。

+

例子

+
src/entry.node.ts
import type { GezOptions } from '@gez/core';
+
+export default {
+    async createDevApp(gez) {
+        return import('@gez/rspack').then((m) =>
+            m.createRspackHtmlApp(gez, {
+                // 自定义选项
+                config({ config }) {
+                    // 自定义 Rspack 的配置
+                }
+            })
+        );
+    },
+} satisfies GezOptions;
+

@gez/rspack-vue

+

提供了 Rspack vue 的基本配置。

+

安装

+

如果你没有 @gez/rspack-vue 的依赖,那么你可以通过如下命令安装。

+
npm
yarn
pnpm
bun
npm install @gez/rspack-vue -D
+
TIP

该软件包同时支持 Vue2Vue3。 +

+

选项

+

选项继承于 createRspackHtmlApp

+

vueLoader v3.0.0

+
    +
  • 类型: Record<string, any>
  • +
  • 默认值: undefined
  • +
  • 描述: 透传 vue-loader
  • +
+
WARNING

experimentalInlineMatchResourceoptimizeSSR 由程序自动设置,你传入也无效。 +

+

Vue2

+

createRspackVue2App 提供了 Vue2 的 .vue 文件支持。

+
src/entry.node.ts
import type { GezOptions } from '@gez/core';
+
+export default {
+    async createDevApp(gez) {
+        return import('@gez/rspack-vue').then((m) =>
+            m.createRspackVue2App(gez, {
+                config ({ config }) {
+                    // 自定义 Rspack 配置
+                }
+            })
+        );
+    }
+} satisfies GezOptions;
+

Vue3

+

createRspackVue3App 提供了 Vue3 的 .vue 文件的支持

+
src/entry.node.ts
import type { GezOptions } from '@gez/core';
+
+export default {
+    async createDevApp(gez) {
+        return import('@gez/rspack-vue').then((m) =>
+            m.createRspackVue3App(gez, {
+                config ({ config }) {
+                    // 自定义 Rspack 配置
+                }
+            })
+        );
+    }
+} satisfies GezOptions;
+

JSX/TSX

+

目前暂不支持 JSX/TSX ,如果你想要支持它。需要自行添加相关的 Rspack 配置。点击这里了解 Vue 的相关配置。

+
+ + + diff --git a/guide/framework/html.html b/guide/framework/html.html new file mode 100644 index 00000000..c92901b5 --- /dev/null +++ b/guide/framework/html.html @@ -0,0 +1,18 @@ + + + + + + + + + HTML - Gez + + + +

HTML

+

在开发一些简单的页面时,使用 HTML 是一个不错的选择。我们提供了一个 HTML 的完整例子,包含了服务端请求数据、客户端水合。

+
+ + + diff --git a/guide/framework/preact.html b/guide/framework/preact.html new file mode 100644 index 00000000..0c1918c8 --- /dev/null +++ b/guide/framework/preact.html @@ -0,0 +1,19 @@ + + + + + + + + + Preact - Gez + + + +

Preact

+

@gez/rspack 包的基础上,你可以编写 Preact 相关的 Rspack 配置。

+
TIP

欢迎提交 PR 来实现 Preact。

+
+ + + diff --git a/guide/framework/react.html b/guide/framework/react.html new file mode 100644 index 00000000..724d50a5 --- /dev/null +++ b/guide/framework/react.html @@ -0,0 +1,19 @@ + + + + + + + + + React - Gez + + + +

React

+

@gez/rspack 包的基础上,你可以编写 React 相关的 Rspack 配置。

+
TIP

欢迎提交 PR 来实现 React。

+
+ + + diff --git a/guide/framework/solid.html b/guide/framework/solid.html new file mode 100644 index 00000000..1915690b --- /dev/null +++ b/guide/framework/solid.html @@ -0,0 +1,19 @@ + + + + + + + + + Solid - Gez + + + +

Solid

+

@gez/rspack 包的基础上,你可以编写 Solid 相关的 Rspack 配置。

+
TIP

欢迎提交 PR 来实现 Solid。

+
+ + + diff --git a/guide/framework/svelte.html b/guide/framework/svelte.html new file mode 100644 index 00000000..e77fae35 --- /dev/null +++ b/guide/framework/svelte.html @@ -0,0 +1,19 @@ + + + + + + + + + Svelte - Gez + + + +

Svelte

+

@gez/rspack 包的基础上,你可以编写 Svelte 相关的 Rspack 配置。

+
TIP

欢迎提交 PR 来实现 Svelte。

+
+ + + diff --git a/guide/framework/vue.html b/guide/framework/vue.html new file mode 100644 index 00000000..c8ee27e4 --- /dev/null +++ b/guide/framework/vue.html @@ -0,0 +1,107 @@ + + + + + + + + + Vue - Gez + + + +

Vue

+

Gez 提供了 Vue 开箱即用的支持。

+

例子

+ +
TIP

自定义实现,需要基于 @gez/rspack 来实现,Vue 相关的配置,可以在这里了解。 +

+

安装依赖

+

Vue2

+
npm
yarn
pnpm
bun
npm install @gez/rspack-vue vue@2.7.16 vue-tsc vue-server-renderer@2.7.16 -D
+

entry.node.ts

+
import type { GezOptions } from '@gez/core';
+
+export default {
+    // ...... 省略若干配置
+    async createDevApp(gez) {
+        return import('@gez/rspack-vue').then((m) => m.createVue2App(gez));
+    }
+} satisfies GezOptions;
+

entry.server.ts

+
import type { RenderContext } from '@gez/core';
+import { createRenderer } from 'vue-server-renderer';
+import { createApp } from './create-app';
+
+const renderer = createRenderer();
+
+export default async (rc: RenderContext) => {
+    const script = await rc.script();
+
+    const { app } = createApp();
+    const vueCtx = {
+        renderStyles: () => ''
+    };
+    const html = await renderer.renderToString(app, vueCtx);
+
+    rc.html = `
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Gez</title>
+    ${vueCtx.renderStyles()}
+</head>
+<body>
+    ${html}
+    ${script}
+</body>
+</html>
+`;
+};
+
TIP

内部系统,还在大量使用 Vue2,未来 5 年还好持续维护。

+

Vue3

+
npm
yarn
pnpm
bun
npm install @gez/rspack-vue vue -D
+

entry.node.ts

+
import type { GezOptions } from '@gez/core';
+
+export default {
+    // ...... 省略若干配置
+    async createDevApp(gez) {
+        return import('@gez/rspack-vue').then((m) => m.createVue3App(gez));
+    }
+} satisfies GezOptions;
+

entry.server.ts

+
import type { RenderContext } from '@gez/core';
+import { renderToString } from 'vue/server-renderer';
+
+import { createApp } from './create-app';
+
+export default async (rc: RenderContext) => {
+    const { app } = createApp('server');
+    const script = await rc.script();
+    const body = await renderToString(app, {});
+    rc.html = `
+  <!DOCTYPE html>
+  <html>
+  <head>
+      <meta charset="UTF-8">
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <title>Gez</title>
+  </head>
+  <body>
+      ${body}
+      ${script}
+  </body>
+  </html>
+  `;
+};
+
TIP

例子不够完整,欢迎提交 PR 补充完整例子。

+
+ + + diff --git a/guide/start/getting-started.html b/guide/start/getting-started.html new file mode 100644 index 00000000..89f4fe49 --- /dev/null +++ b/guide/start/getting-started.html @@ -0,0 +1,145 @@ + + + + + + + + + 快速开始 - Gez + + + +

快速开始

+

这是一个与框架无关的例子,采用原生的 HTML 来开发项目

+
TIP

Gez 默认支持 SSR,但是你可以当成 CSR 来使用。 +

+

创建项目

+
cd 项目目录
+npm init
+

设置 ESM

+
package.json
{
+    "type": "module"
+}
+

安装依赖

+

安装生产依赖

+
npm
yarn
pnpm
bun
npm install @gez/core
+

安装开发依赖

+
npm
yarn
pnpm
bun
npm install @gez/rspack typescript @types/node -D
+
TIP

总是应该将生产依赖和开发依赖区分,会使 node_modules 在生产环境中更小。 +

+

添加脚本

+
package.json
{
+    "scripts": {
+        "dev": "gez dev",
+        "build": "npm run build:ssr && npm run build:dts && npm run release",
+        "build:ssr": "gez build",
+        "build:dts": "tsc --noEmit --outDir dist/src",
+        "release": "gez release",
+        "preview": "gez preview",
+        "start": "gez start",
+        "postinstall": "gez install"
+    }
+}
+
TIP

你需要手动配置 tsconfig.json 文件,否则执行 build:dts 命令会报错。 +

+

基本例子

+

基本结构

+
- src/ + - entry.client.ts # 客户端渲染入口 + - entry.server.ts # 服务端渲染入口 + - entry.node.ts # 创建服务器 +
+

客户端渲染

+

更新当前时间

+
src/entry.client.ts
const time = document.querySelector('time');
+setInterval(() => {
+    time?.setHTMLUnsafe(new Date().toISOString());
+}, 1000);
+

服务端渲染

+

模拟框架的 SSR API,渲染出 HTML 内容返回

+
src/entry.server.ts
import type { RenderContext } from '@gez/core';
+
+export default async (rc: RenderContext) => {
+    // 提交依赖收集
+    await rc.commit();
+    // 响应 HTML
+    const time = new Date().toISOString();
+    rc.html = `
+<!DOCTYPE html>
+<html>
+<head>
+    ${rc.preload()}
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Gez</title>
+    ${rc.css()}
+</head>
+<body>
+    <h1>Gez</h1>
+    <h2>Hello world!</h2>
+    <p>URL: ${rc.params.url}</p>
+    <time>${time}</time>
+    ${rc.importmap()}
+    ${rc.moduleEntry()}
+    ${rc.modulePreload()}
+</body>
+</html>
+`;
+};
+

创建服务器

+

创建一个 web 服务器,来处理客户请求

+
src/entry.node.ts
import http from 'node:http';
+import type { GezOptions } from '@gez/core';
+import { name } from '../package.json';
+
+export default {
+    // 设置应用的唯一名字,如果有多个项目,则名字不能重复
+    name,
+    // 本地执行 dev 和 build 时会使用
+    async createDevApp(gez) {
+        return import('@gez/rspack').then((m) =>
+            m.createRspackHtmlApp(gez, {
+                config(context) {
+                    // 可以在这里修改 Rspack 编译的配置
+                }
+            })
+        );
+    },
+    async createServer(gez) {
+        const server = http.createServer((req, res) => {
+            // 静态文件处理
+            gez.middleware(req, res, async () => {
+                // 传入渲染的参数
+                const rc = await gez.render({
+                    params: {
+                        url: req.url
+                    }
+                });
+                // 响应 HTML 内容
+                res.end(rc.html);
+            });
+        });
+        // 监听端口
+        server.listen(3000, () => {
+            console.log('http://localhost:3000');
+        });
+    }
+} satisfies GezOptions;
+

启动项目

+
npm run dev
+
+

浏览器打开:http://localhost:3000

+
+

更多例子

+ +
TIP

如果你使用了 Gez,欢迎提交 PR,在这里提供更多的例子。

+
+ + + diff --git a/guide/start/introduction.html b/guide/start/introduction.html new file mode 100644 index 00000000..eaadcc84 --- /dev/null +++ b/guide/start/introduction.html @@ -0,0 +1,47 @@ + + + + + + + + + 介绍 - Gez + + + +

介绍

+

Gez 是 Genesis 迭代的第三个大版本,v1.0 是基于 HTTP 请求来实现的远程组件,v2.0 是基于 Module Federation v1.0 +实现的远程组件。随着主流浏览器都已经支持 ESM,这使得设计一款基于 ESM 的模块链接变成了可能。随着 Rspack v1.0 的发布,提供了对 ESM 更加友好的支持,这使得我们可以将可能变成了现实。于是,我们将 v3.0 版本重命名为 Gez

+

为什么选 Gez

+

目前社区类微服务的解决方案基本可以分为 iframemicro-app +Module Federation 三种代表。其中 iframe 和 micro-app 这种模式只适合对已有的老项目进行缝合,是以降低程序运行效率所做的一种妥协,而 Module Federation 的接入成本较高,里面又是一个黑盒子,一旦出了问题,都十分难以排查。

+

Gez 完全是基于 ESM 模块系统进行设计,默认支持 SSR,每个服务都可以对外导出模块,也可以使用外部模块,整个过程简单透明,能够精准的控制依赖管理。通过 importmap 将多服务的模块映射到具有强缓存,基于内容哈希的 URL 中。

+
TIP

Gez 诞生的初衷,就是为了实现一个支持 SSR 的微服务架构,去构建一个高性能、大型的 web 应用程序。

+

调研

+
    +
  • 参考了 Vite 对现代 JavaScript 支持的定义,以浏览器支持 ESM dynamic importimport.meta 作为基准。 +
      +
    • Chrome >=87
    • +
    • Firefox >=78
    • +
    • Safari >=14
    • +
    • Edge >=88
    • +
    • node >=20
    • +
    +
  • +
  • 构建出具有内容哈希的产物,使用 importmapimport vue from 'vue' 替换成 ssr-npm/npm/vue.[contenthash].js,这样静态文件就可以设置为强缓存了。对于不支持 importmap 的浏览器,es-module-shims 提供了降级的方案
  • +
  • Rspack 的 externalsType 支持使用 module-import,来设置 ESM 模块的外部依赖。
  • +
  • 在 Node 上实现 ESM 模块热更新不是一件容易的事情,庆幸的是可以通过启用 node --experimental-vm-modules --experimental-import-meta-resolve 来实现它。
  • +
  • 最终确定使用 Rspack 和 Node20 来实现 v3.0 版本。
  • +
+
TIP

从最早的构思,到调研 Vite、farmfe、Rspack的调研,中间经历了一年多的时间,庆幸的是这条路最终走通了,并且达到了生产可用。

+

定位

+

Gez 的定位并不是成为 Next.jsNuxt.js 那样大而全的框架,而是成为一个具有 Typescript、ESM、SSR、模块链接等特性的基础设施,你可以在这个基础上来构建属于你自己的 Next.js。如果你需要定制化实现,它会很适合你。

+

兼容性

+

所有的主流浏览器都已经支持,针对一些低版本的浏览器,可以提供一个升级的页面来引导用户升级它的浏览器。

+

可靠性

+

v1.0v2.0 到现在的 v3.0,已经走过了将近 5 年的时光,支持起了公司内部数十个业务的项目,并且不断地推动业务项目的升级。

+
+ + + diff --git a/index.html b/index.html new file mode 100644 index 00000000..78be1a81 --- /dev/null +++ b/index.html @@ -0,0 +1,17 @@ + + + + + + + + + Gez + + + +

Gez

基于 ESM 的模块链接。

👍

技术创新

首个基于 ESM 构建的 SSR 多服务模块链接。

🚀

项目构建

基于 Rspack 实现,构建速度极快,带给你极致的开发体验。

🎯

依赖管理

一次构建,一次发布,多服务生效。

☁️

同构渲染

支持 Vue2、Vue3、React 等不同框架实现 SSR。

😎

基准支持

Node20 和支持 ESM dynamic import 和 import.meta 的浏览器。

👏

长久维护

Genesis 从 2020 年迭代至今,现更名为 Gez。

+
+ + + diff --git a/logo.svg b/logo.svg new file mode 100644 index 00000000..fef098a6 --- /dev/null +++ b/logo.svg @@ -0,0 +1,3 @@ + + Gez + \ No newline at end of file diff --git a/ssr-html/about/index.html b/ssr-html/about/index.html new file mode 100644 index 00000000..d7936679 --- /dev/null +++ b/ssr-html/about/index.html @@ -0,0 +1,32 @@ + + + + + + + + Gez + + + +
+ +
+

Gez

+ +
+ Gez 是一个基于 Rspack 构建的模块链接(Module Link) 解决方案,通过 importmap 将多服务的模块映射到具有强缓存,基于内容哈希的 URL 中。 +
+
+ +
+ + + + + + + diff --git a/ssr-html/chunks/222.584a2be3.final.css b/ssr-html/chunks/222.584a2be3.final.css new file mode 100644 index 00000000..9b19013a --- /dev/null +++ b/ssr-html/chunks/222.584a2be3.final.css @@ -0,0 +1 @@ +.layout{padding:10px}head{--webpack-__ssr_html__-222:&_992} \ No newline at end of file diff --git a/ssr-html/chunks/222.81e62fc0.final.js b/ssr-html/chunks/222.81e62fc0.final.js new file mode 100644 index 00000000..a1f10479 --- /dev/null +++ b/ssr-html/chunks/222.81e62fc0.final.js @@ -0,0 +1,35 @@ +export const ids=["222"];export const modules={878:function(e,t,r){function i(e){return` +
+

Gez

+ +
+ ${e} +
+
+`}r.d(t,{b:function(){return i}}),r(992)},286:function(e,t,r){function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}r.d(t,{T:function(){return n}});class n{get props(){if(null===this._props)throw Error("props is null");return this._props}set props(e){this._props=e}render(){return""}onCreated(){}onClient(){}async onServer(){this.importMetaSet.add(import.meta)}constructor(){i(this,"importMetaSet",new Set),i(this,"_props",null),i(this,"state",{})}}},421:function(e,t,r){r.r(t),r.d(t,{default:()=>c});var i=r("878");let n=r.p+"images/cat.ed79ef6b.final.jpeg",s=r.p+"images/loading.6e6b1b2e.final.gif",a=r.p+"images/logo.310683d2.final.svg",o=r.p+"images/starry.d914a632.final.jpg",l=r.p+"images/sun.429a7bc5.final.png";var u=r("286");class c extends u.T{render(){let{url:e}=this.props,{count:t}=this.state;return(0,i.b)(` +

计数器

+
${t}
+

请求地址

+
${e}
+

图片

+ +`)}onClient(){setInterval(()=>{this.state.count++;let e=document.querySelector("#count");e instanceof HTMLDivElement&&(e.innerText=String(this.state.count))},1e3)}async onServer(){this.importMetaSet.add(import.meta),super.onServer(),this.state.count=1}constructor(...e){var t,r,i;super(...e),t=this,i={count:0},(r="state")in t?Object.defineProperty(t,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[r]=i}}}}; \ No newline at end of file diff --git a/ssr-html/chunks/473.31938102.final.js b/ssr-html/chunks/473.31938102.final.js new file mode 100644 index 00000000..9cb51e5f --- /dev/null +++ b/ssr-html/chunks/473.31938102.final.js @@ -0,0 +1,12 @@ +export const ids=["473"];export const modules={878:function(t,e,r){function n(t){return` +
+

Gez

+ +
+ ${t} +
+
+`}r.d(e,{b:function(){return n}}),r(992)},286:function(t,e,r){function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}r.d(e,{T:function(){return i}});class i{get props(){if(null===this._props)throw Error("props is null");return this._props}set props(t){this._props=t}render(){return""}onCreated(){}onClient(){}async onServer(){this.importMetaSet.add(import.meta)}constructor(){n(this,"importMetaSet",new Set),n(this,"_props",null),n(this,"state",{})}}},896:function(t,e,r){r.r(e),r.d(e,{default:function(){return o}});var n=r(878),i=r(286);class o extends i.T{render(){return(0,n.b)(`Gez 是一个基于 Rspack 构建的模块链接(Module Link) 解决方案,通过 importmap 将多服务的模块映射到具有强缓存,基于内容哈希的 URL 中。`)}async onServer(){this.importMetaSet.add(import.meta),super.onServer(),this.state.time=new Date().toISOString()}constructor(...t){var e,r,n;super(...t),e=this,n={time:""},(r="state")in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n}}}}; \ No newline at end of file diff --git a/ssr-html/chunks/473.584a2be3.final.css b/ssr-html/chunks/473.584a2be3.final.css new file mode 100644 index 00000000..fd550132 --- /dev/null +++ b/ssr-html/chunks/473.584a2be3.final.css @@ -0,0 +1 @@ +.layout{padding:10px}head{--webpack-__ssr_html__-473:&_992} \ No newline at end of file diff --git a/ssr-html/chunks/830.584a2be3.final.css b/ssr-html/chunks/830.584a2be3.final.css new file mode 100644 index 00000000..99934719 --- /dev/null +++ b/ssr-html/chunks/830.584a2be3.final.css @@ -0,0 +1 @@ +.layout{padding:10px}head{--webpack-__ssr_html__-830:&_992} \ No newline at end of file diff --git a/ssr-html/chunks/830.da02209d.final.js b/ssr-html/chunks/830.da02209d.final.js new file mode 100644 index 00000000..abf71449 --- /dev/null +++ b/ssr-html/chunks/830.da02209d.final.js @@ -0,0 +1,12 @@ +export const ids=["830"];export const modules={878:function(t,r,e){function n(t){return` +
+

Gez

+ +
+ ${t} +
+
+`}e.d(r,{b:function(){return n}}),e(992)},286:function(t,r,e){function n(t,r,e){return r in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}e.d(r,{T:function(){return o}});class o{get props(){if(null===this._props)throw Error("props is null");return this._props}set props(t){this._props=t}render(){return""}onCreated(){}onClient(){}async onServer(){this.importMetaSet.add(import.meta)}constructor(){n(this,"importMetaSet",new Set),n(this,"_props",null),n(this,"state",{})}}},654:function(t,r,e){e.r(r),e.d(r,{default:function(){return i}});var n=e(878),o=e(286);class i extends o.T{render(){return(0,n.b)("

Not Found

")}async onServer(){this.importMetaSet.add(import.meta),super.onServer()}}}}; \ No newline at end of file diff --git a/ssr-html/images/cat.ed79ef6b.final.jpeg b/ssr-html/images/cat.ed79ef6b.final.jpeg new file mode 100644 index 00000000..29e4dab9 Binary files /dev/null and b/ssr-html/images/cat.ed79ef6b.final.jpeg differ diff --git a/ssr-html/images/loading.6e6b1b2e.final.gif b/ssr-html/images/loading.6e6b1b2e.final.gif new file mode 100644 index 00000000..0613ccb0 Binary files /dev/null and b/ssr-html/images/loading.6e6b1b2e.final.gif differ diff --git a/ssr-html/images/logo.310683d2.final.svg b/ssr-html/images/logo.310683d2.final.svg new file mode 100644 index 00000000..fef098a6 --- /dev/null +++ b/ssr-html/images/logo.310683d2.final.svg @@ -0,0 +1,3 @@ + + Gez + \ No newline at end of file diff --git a/ssr-html/images/starry.d914a632.final.jpg b/ssr-html/images/starry.d914a632.final.jpg new file mode 100644 index 00000000..1d0c3b0a Binary files /dev/null and b/ssr-html/images/starry.d914a632.final.jpg differ diff --git a/ssr-html/images/sun.429a7bc5.final.png b/ssr-html/images/sun.429a7bc5.final.png new file mode 100644 index 00000000..fedb581d Binary files /dev/null and b/ssr-html/images/sun.429a7bc5.final.png differ diff --git a/ssr-html/importmap.24d223d14d7f44f5.final.js b/ssr-html/importmap.24d223d14d7f44f5.final.js new file mode 100644 index 00000000..df0d0cf2 --- /dev/null +++ b/ssr-html/importmap.24d223d14d7f44f5.final.js @@ -0,0 +1 @@ +(t=>{let r="ssr-html",e="__importmap__",s=t[e]=t[e]||{},i=s.imports=s.imports||{},n=new URL(document.currentScript.src).pathname.split("/"+r+"/"),c=t=>r+t.substring(1);Object.entries({"./src/entry.client":"./src/entry.client.25759c49.final.js"}).forEach(([t,r])=>{i[c(t)]=n[0]+"/"+c(r)})})(globalThis); \ No newline at end of file diff --git a/ssr-html/importmap.js b/ssr-html/importmap.js new file mode 100644 index 00000000..df0d0cf2 --- /dev/null +++ b/ssr-html/importmap.js @@ -0,0 +1 @@ +(t=>{let r="ssr-html",e="__importmap__",s=t[e]=t[e]||{},i=s.imports=s.imports||{},n=new URL(document.currentScript.src).pathname.split("/"+r+"/"),c=t=>r+t.substring(1);Object.entries({"./src/entry.client":"./src/entry.client.25759c49.final.js"}).forEach(([t,r])=>{i[c(t)]=n[0]+"/"+c(r)})})(globalThis); \ No newline at end of file diff --git a/ssr-html/index.html b/ssr-html/index.html new file mode 100644 index 00000000..eb03c6e7 --- /dev/null +++ b/ssr-html/index.html @@ -0,0 +1,55 @@ + + + + + + + + Gez + + + +
+ +
+

Gez

+ +
+ +

计数器

+
1
+

请求地址

+
/
+

图片

+
    +
  • /gez/ssr-html/images/logo.310683d2.final.svg
    + +
  • +
  • /gez/ssr-html/images/starry.d914a632.final.jpg
    + +
  • +
  • /gez/ssr-html/images/cat.ed79ef6b.final.jpeg
    + +
  • +
  • /gez/ssr-html/images/loading.6e6b1b2e.final.gif
    + +
  • +
  • /gez/ssr-html/images/sun.429a7bc5.final.png
    + +
  • +
+ +
+
+ +
+ + + + + + + diff --git a/ssr-html/manifest.json b/ssr-html/manifest.json new file mode 100644 index 00000000..126a28c8 --- /dev/null +++ b/ssr-html/manifest.json @@ -0,0 +1,82 @@ +{ + "name": "ssr-html", + "version": "1.0.0", + "hash": "24d223d14d7f44f5", + "type": "module", + "exports": { + "./src/entry.client": "./src/entry.client.25759c49.final.js" + }, + "buildFiles": [ + "images/logo.310683d2.final.svg", + "src/entry.client.25759c49.final.js", + "chunks/473.584a2be3.final.css", + "images/cat.ed79ef6b.final.jpeg", + "images/sun.429a7bc5.final.png", + "importmap.24d223d14d7f44f5.final.js", + "chunks/222.584a2be3.final.css", + "chunks/222.81e62fc0.final.js", + "importmap.js", + "chunks/830.584a2be3.final.css", + "chunks/473.31938102.final.js", + "images/starry.d914a632.final.jpg", + "chunks/830.da02209d.final.js", + "src/entry.client.ab81ae40.final.css", + "images/loading.6e6b1b2e.final.gif" + ], + "chunks": { + "ssr-html@src/views/home.ts": { + "js": "chunks/222.81e62fc0.final.js", + "css": [ + "chunks/222.584a2be3.final.css" + ], + "resources": [ + "images/cat.ed79ef6b.final.jpeg", + "images/loading.6e6b1b2e.final.gif", + "images/logo.310683d2.final.svg", + "images/starry.d914a632.final.jpg", + "images/sun.429a7bc5.final.png" + ], + "sizes": { + "js": 3911, + "css": 30, + "resource": 187219 + } + }, + "ssr-html@src/views/about.ts": { + "js": "chunks/473.31938102.final.js", + "css": [ + "chunks/473.584a2be3.final.css" + ], + "resources": [], + "sizes": { + "js": 2360, + "css": 30, + "resource": 0 + } + }, + "ssr-html@src/views/not-found.ts": { + "js": "chunks/830.da02209d.final.js", + "css": [ + "chunks/830.584a2be3.final.css" + ], + "resources": [], + "sizes": { + "js": 1687, + "css": 30, + "resource": 0 + } + }, + "ssr-html@src/entry.client.ts": { + "js": "./src/entry.client.25759c49.final.js", + "css": [ + "./src/entry.client.ab81ae40.final.css" + ], + "resources": [], + "sizes": { + "js": 11760, + "css": 44, + "resource": 0 + } + } + } +} \ No newline at end of file diff --git a/ssr-html/src/entry.client.25759c49.final.js b/ssr-html/src/entry.client.25759c49.final.js new file mode 100644 index 00000000..41394306 --- /dev/null +++ b/ssr-html/src/entry.client.25759c49.final.js @@ -0,0 +1 @@ +var e,t,r,n,o,i,a,u={},l={};function c(e){var t=l[e];if(void 0!==t)return t.exports;var r=l[e]={exports:{}};return u[e](r,r.exports,c),r.exports}async function s(e){let t=[{path:"/",page:()=>c.e("222").then(c.bind(c,421)).then(e=>e.default)},{path:"/about",page:()=>c.e("473").then(c.bind(c,896)).then(e=>e.default)}].find(t=>t.path===e);return t?t.page():c.e("830").then(c.bind(c,654)).then(e=>e.default)}c.m=u,c.d=function(e,t){for(var r in t)c.o(t,r)&&!c.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},c.f={},c.e=function(e){return Promise.all(Object.keys(c.f).reduce(function(t,r){return c.f[r](e,t),t},[]))},c.k=function(e){return"chunks/"+e+"."+({222:"584a2be3",473:"584a2be3",830:"584a2be3"})[e]+".final.css"},c.u=function(e){return"chunks/"+e+"."+({222:"81e62fc0",473:"31938102",830:"da02209d"})[e]+".final.js"},c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),c.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},c.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.rv=function(){return"1.1.0"},(()=>{var e;if("string"==typeof import.meta.url&&(e=import.meta.url),!e)throw Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),c.p=e+"../"})(),e={},t="__ssr_html__",r=(r,n,i)=>{var a,u,l="",s="",f="",d={},p="--webpack-"+t+"-"+i,h=1,b={};try{!n&&(n=o(i));for(var m=n.sheet.cssRules||n.sheet.rules,v=m.length-1;v>-1&&!a;){var g=m[v--].style;if(!!g)a=g.getPropertyValue(p)}}catch(e){}if(!a&&(a=getComputedStyle(document.head).getPropertyValue(p)),!a)return[];var y,w={},_=a[0],k=_,A=_,P=256;for(u=1;u65535&&(P=256,w={}),k=y;for(u=0,a=A;h;u++)58==(h=a.charCodeAt(u))?(s=l,l=""):47==h?(l=l.replace(/^_/,""),s=s.replace(/^_/,""),f?b.push(s,f,l):d[s]=void 0===d[s]?l:d[s]+" "+l,l="",s="",f=""):38==h?c.r(d):h&&44!=h?92==h?l+=a[++u]:64==h?(f=l,l=""):l+=a[u]:(r[l=l.replace(/^_/,"")]=((e,t,r)=>{!function(e,t){for(var r=0;r{let r="ssr-preact-htm",e="__importmap__",s=t[e]=t[e]||{},c=s.imports=s.imports||{},i=new URL(document.currentScript.src).pathname.split("/"+r+"/"),n=t=>r+t.substring(1);Object.entries({"./src/entry.client":"./src/entry.client.9b6dc184.final.js"}).forEach(([t,r])=>{c[n(t)]=i[0]+"/"+n(r)})})(globalThis); \ No newline at end of file diff --git a/ssr-preact-htm/importmap.js b/ssr-preact-htm/importmap.js new file mode 100644 index 00000000..ca3b38af --- /dev/null +++ b/ssr-preact-htm/importmap.js @@ -0,0 +1 @@ +(t=>{let r="ssr-preact-htm",e="__importmap__",s=t[e]=t[e]||{},c=s.imports=s.imports||{},i=new URL(document.currentScript.src).pathname.split("/"+r+"/"),n=t=>r+t.substring(1);Object.entries({"./src/entry.client":"./src/entry.client.9b6dc184.final.js"}).forEach(([t,r])=>{c[n(t)]=i[0]+"/"+n(r)})})(globalThis); \ No newline at end of file diff --git a/ssr-preact-htm/index.html b/ssr-preact-htm/index.html new file mode 100644 index 00000000..a4803f48 --- /dev/null +++ b/ssr-preact-htm/index.html @@ -0,0 +1,19 @@ + + + + + + + + Gez + + + +
+

Preact

你好,世界!

+
+ + + + + diff --git a/ssr-preact-htm/manifest.json b/ssr-preact-htm/manifest.json new file mode 100644 index 00000000..df262a3c --- /dev/null +++ b/ssr-preact-htm/manifest.json @@ -0,0 +1,29 @@ +{ + "name": "ssr-preact-htm", + "version": "1.0.0", + "hash": "7b073355c5c2f9d5", + "type": "module", + "exports": { + "./src/entry.client": "./src/entry.client.9b6dc184.final.js" + }, + "buildFiles": [ + "importmap.js", + "src/entry.client.9b6dc184.final.js", + "src/entry.client.191feabb.final.css", + "importmap.7b073355c5c2f9d5.final.js" + ], + "chunks": { + "ssr-preact-htm@src/entry.client.ts": { + "js": "./src/entry.client.9b6dc184.final.js", + "css": [ + "./src/entry.client.191feabb.final.css" + ], + "resources": [], + "sizes": { + "js": 19003, + "css": 39, + "resource": 0 + } + } + } +} \ No newline at end of file diff --git a/ssr-preact-htm/src/entry.client.191feabb.final.css b/ssr-preact-htm/src/entry.client.191feabb.final.css new file mode 100644 index 00000000..98522cfe --- /dev/null +++ b/ssr-preact-htm/src/entry.client.191feabb.final.css @@ -0,0 +1 @@ +body{margin:0;padding:0}head{--webpack-__ssr_preact_htm__-891:&_142} \ No newline at end of file diff --git a/ssr-preact-htm/src/entry.client.9b6dc184.final.js b/ssr-preact-htm/src/entry.client.9b6dc184.final.js new file mode 100644 index 00000000..d6e294eb --- /dev/null +++ b/ssr-preact-htm/src/entry.client.9b6dc184.final.js @@ -0,0 +1,4 @@ +var e={},t={};function n(_){var r=t[_];if(void 0!==r)return r.exports;var o=t[_]={exports:{}};return e[_](o,o.exports,n),o.exports}n.m=e,n.k=function(e){return""+e+".css"},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.rv=function(){return"1.1.0"},(()=>{var e;if("string"==typeof import.meta.url&&(e=import.meta.url),!e)throw Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e+"../"})(),_={},r="__ssr_preact_htm__",o="data-webpack-loading",l=function(e,t,_,l,u){var i,s,c="chunk-"+e;if(!l){for(var p=document.getElementsByTagName("link"),f=0;f{var u,i,s="",c="",p="",f={},a="--webpack-"+r+"-"+o,h=1,d={};try{!t&&(t=l(o));for(var v=t.sheet.cssRules||t.sheet.rules,y=v.length-1;y>-1&&!u;){var g=v[y--].style;if(!!g)u=g.getPropertyValue(a)}}catch(e){}if(!u&&(u=getComputedStyle(document.head).getPropertyValue(a)),!u)return;var m,b={},k=u[0],w=k,x=k,P=256;for(i=1;i65535&&(P=256,b={}),w=m;for(i=0,u=x;h;i++)58==(h=u.charCodeAt(i))?(c=s,s=""):47==h?(s=s.replace(/^_/,""),c=c.replace(/^_/,""),p?d.push(c,p,s):f[c]=void 0===f[c]?s:f[c]+" "+s,s="",c="",p=""):38==h?n.r(f):h&&44!=h?92==h?s+=u[++i]:64==h?(p=s,s=""):s+=u[i]:(e[s=s.replace(/^_/,"")]=((e,t,_)=>{!function(e,t){for(var _=0;_2&&(l.children=arguments.length>3?u.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(o in e.defaultProps)void 0===l[o]&&(l[o]=e.defaultProps[o]);return P(e,l,_,r,null)}function P(e,t,n,_,r){var o={type:e,props:t,key:n,ref:_,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++s:r,__i:-1,__u:0};return null==r&&null!=i.vnode&&i.vnode(o),o}function S(e){return e.children}function C(e,t){this.props=e,this.context=t}function T(e,t){if(null==t)return e.__?T(e.__,e.__i+1):null;for(var n;tt&&c.sort(a));M.__r=0}function U(e,t,n,_,r,o,l,u,s,c,p){var f,a,h,d,v,m=_&&_.__k||g,k=t.length;for(n.__d=s,function(e,t,n){var _,r,o,l,u,s=t.length,c=n.length,p=c,f=0;for(e.__k=[],_=0;_0?P(r.type,r.props,r.key,r.ref?r.ref:null,r.__v):r).__=e,r.__b=e.__b+1,o=null,-1!==(u=r.__i=function(e,t,n,_){var r=e.key,o=e.type,l=n-1,u=n+1,i=t[n];if(null===i||i&&r==i.key&&o===i.type&&0==(131072&i.__u))return n;if(_>(null!=i&&0==(131072&i.__u)?1:0))for(;l>=0||u=0){if((i=t[l])&&0==(131072&i.__u)&&r==i.key&&o===i.type)return l;l--}if(ul?f--:f++,r.__u|=65536))):r=e.__k[_]=null;if(p)for(_=0;_=5&&((r||!e&&5===_)&&(l.push(_,0,r,n),_=6),e&&(l.push(_,e,0,n),_=6)),r=""},i=0;i"===t?(_=1,r=""):r=t+r[0]:o?t===o?o="":r+=t:'"'===t||"'"===t?o=t:">"===t?(u(),_=1):_&&("="===t?(_=5,n=r,r=""):"/"===t&&(_<5||">"===e[i][s+1])?(u(),3===_&&(l=l[0]),_=l,(l=l[0]).push(2,0,_),_=0):" "===t||" "===t||"\n"===t||"\r"===t?(u(),_=2):r+=t),3===_&&"!--"===r&&(_=4,l=l[0])}return u(),l}(e)),t),arguments,[])).length>1?t:t[0]}).bind(x);!function e(t,n){var _,r,o,l,s,c,p;_=t,r=n,o=e,i.__&&i.__(_,r),s=(l="function"==typeof o)?null:o&&o.__k||r.__k,c=[],p=[],L(r,_=(!l&&o||r).__k=x(S,null,[_]),s||y,y,r.namespaceURI,!l&&o?[o]:s?null:r.firstChild?u.call(r.childNodes):null,c,!l&&o?o:s?s.__e:r.firstChild,l,p),N(c,_,p)}(I`
+

Preact

+

你好,世界!

+
`,document.getElementById("app")); \ No newline at end of file diff --git a/ssr-vue2-host/chunks/324.0d155c87.final.css b/ssr-vue2-host/chunks/324.0d155c87.final.css new file mode 100644 index 00000000..2b0a72b2 --- /dev/null +++ b/ssr-vue2-host/chunks/324.0d155c87.final.css @@ -0,0 +1 @@ +button[data-v-c46f67c8]{border-radius:5px;margin:0;padding:5px 10px}.tip[data-v-418edb39]{background:#efe;margin:0;padding:10px}div,body,html,h2{margin:0;padding:0}head{--webpack-__ssr_vue__host__-324:&_920,Ā52ą_11ĄĆ9ĉ78ďĀ142} \ No newline at end of file diff --git a/ssr-vue2-host/chunks/324.456d5722.final.js b/ssr-vue2-host/chunks/324.456d5722.final.js new file mode 100644 index 00000000..92ac8146 --- /dev/null +++ b/ssr-vue2-host/chunks/324.456d5722.final.js @@ -0,0 +1 @@ +export const ids=["324"];export const modules={796:function(t,e,n){n.r(e),n.d(e,{default:()=>l});var s=n("946"),o=n("527");function r(t,e,n,s,o,r,i,a){var l,_="function"==typeof t?t.options:t;if(e&&(_.render=e,_.staticRenderFns=n,_._compiled=!0),s&&(_.functional=!0),r&&(_._scopeId="data-v-"+r),i?(l=function(t){!(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)&&"undefined"!=typeof __VUE_SSR_CONTEXT__&&(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(i)},_._ssrRegister=l):o&&(l=a?function(){o.call(this,(_.functional?this.parent:this).$root.$options.shadowRoot)}:o),l){if(_.functional){_._injectStyles=l;var u=_.render;_.render=function(t,e){return l.call(e),u(t,e)}}else{var c=_.beforeCreate;_.beforeCreate=c?[].concat(c,l):[l]}}return{exports:t,options:_}}n("52");let i=r({},function(){return(0,this._self._c)("button",[this._v("这是自己服务的组件")])},[],!1,null,"c46f67c8",null).exports,a=(0,s.defineComponent)({__name:"app",setup:t=>({__sfc:!0,layout:o.default,Next:i})});n("59"),n("142");let l=r(a,function(){var t=this._self._c,e=this._self._setupProxy;return t("div",{staticClass:"box"},[t(e.layout,[this._v("\n Hello world!\n\n "),t("br"),this._v(" "),t(e.Next),this._v(" "),t("p",{staticClass:"tip"},[this._v("\n 我的 "),t("a",{attrs:{href:"https://github.com/dp-os/gez/blob/master/examples/ssr-vue2-host/src/entry.node.ts",rel:"noopener",target:"_blank"}},[this._v("Vue")]),this._v(" 实例,被指向到了 ssr-vue2-remote/vue\n ")])],1)],1)},[],!1,null,"418edb39",null).exports}}; \ No newline at end of file diff --git a/ssr-vue2-host/importmap.e001fcacb2721197.final.js b/ssr-vue2-host/importmap.e001fcacb2721197.final.js new file mode 100644 index 00000000..a285e47d --- /dev/null +++ b/ssr-vue2-host/importmap.e001fcacb2721197.final.js @@ -0,0 +1 @@ +(t=>{let r="ssr-vue2-host",s="__importmap__",e=t[s]=t[s]||{},c=e.imports=e.imports||{},i=new URL(document.currentScript.src).pathname.split("/"+r+"/"),n=t=>r+t.substring(1);Object.entries({"./src/entry.client":"./src/entry.client.9cab921e.final.js"}).forEach(([t,r])=>{c[n(t)]=i[0]+"/"+n(r)})})(globalThis); \ No newline at end of file diff --git a/ssr-vue2-host/importmap.js b/ssr-vue2-host/importmap.js new file mode 100644 index 00000000..a285e47d --- /dev/null +++ b/ssr-vue2-host/importmap.js @@ -0,0 +1 @@ +(t=>{let r="ssr-vue2-host",s="__importmap__",e=t[s]=t[s]||{},c=e.imports=e.imports||{},i=new URL(document.currentScript.src).pathname.split("/"+r+"/"),n=t=>r+t.substring(1);Object.entries({"./src/entry.client":"./src/entry.client.9cab921e.final.js"}).forEach(([t,r])=>{c[n(t)]=i[0]+"/"+n(r)})})(globalThis); \ No newline at end of file diff --git a/ssr-vue2-host/index.html b/ssr-vue2-host/index.html new file mode 100644 index 00000000..4fd51c3a --- /dev/null +++ b/ssr-vue2-host/index.html @@ -0,0 +1,24 @@ + + + + + + + + Gez + + + +
+ 我是一个来自于 ssr-vue2-remote 服务的组件。 +
+ Hello world! + +

+ 我的 Vue 实例,被指向到了 ssr-vue2-remote/vue +

+ + + + + diff --git a/ssr-vue2-host/manifest.json b/ssr-vue2-host/manifest.json new file mode 100644 index 00000000..e8e10002 --- /dev/null +++ b/ssr-vue2-host/manifest.json @@ -0,0 +1,40 @@ +{ + "name": "ssr-vue2-host", + "version": "1.0.0", + "hash": "e001fcacb2721197", + "type": "module", + "exports": { + "./src/entry.client": "./src/entry.client.9cab921e.final.js" + }, + "buildFiles": [ + "importmap.js", + "chunks/324.456d5722.final.js", + "src/entry.client.9cab921e.final.js", + "chunks/324.0d155c87.final.css", + "importmap.e001fcacb2721197.final.js" + ], + "chunks": { + "ssr-vue2-host@src/app.vue": { + "js": "chunks/324.456d5722.final.js", + "css": [ + "chunks/324.0d155c87.final.css" + ], + "resources": [], + "sizes": { + "js": 7903, + "css": 2809, + "resource": 0 + } + }, + "ssr-vue2-host@src/entry.client.ts": { + "js": "./src/entry.client.9cab921e.final.js", + "css": [], + "resources": [], + "sizes": { + "js": 11168, + "css": 0, + "resource": 0 + } + } + } +} \ No newline at end of file diff --git a/ssr-vue2-host/src/entry.client.9cab921e.final.js b/ssr-vue2-host/src/entry.client.9cab921e.final.js new file mode 100644 index 00000000..ce7e7a4d --- /dev/null +++ b/ssr-vue2-host/src/entry.client.9cab921e.final.js @@ -0,0 +1 @@ +import*as e from"ssr-vue2-remote/npm/vue";import*as t from"ssr-vue2-remote/src/components/layout.vue";var r,o,n,i,a,u,s,c={946:function(t){t.exports=e},527:function(e){e.exports=t}},l={};function f(e){var t=l[e];if(void 0!==t)return t.exports;var r=l[e]={exports:{}};return c[e](r,r.exports,f),r.exports}f.m=c,f.d=function(e,t){for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=function(e){return Promise.all(Object.keys(f.f).reduce(function(t,r){return f.f[r](e,t),t},[]))},f.k=function(e){return"chunks/"+e+".0d155c87.final.css"},f.u=function(e){return"chunks/"+e+".456d5722.final.js"},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.rv=function(){return"1.1.0"},(()=>{var e;if("string"==typeof import.meta.url&&(e=import.meta.url),!e)throw Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),f.p=e+"../"})(),r={891:0},o="__ssr_vue__host__",n=(e,t,n)=>{var i,u,s="",c="",l="",p={},d="--webpack-"+o+"-"+n,h=1,m={};try{!t&&(t=a(n));for(var v=t.sheet.cssRules||t.sheet.rules,b=v.length-1;b>-1&&!i;){var y=v[b--].style;if(!!y)i=y.getPropertyValue(d)}}catch(e){}if(!i&&(i=getComputedStyle(document.head).getPropertyValue(d)),!i)return[];var g,k={},w=i[0],A=w,_=w,P=256;for(u=1;u65535&&(P=256,k={}),A=g;for(u=0,i=_;h;u++)58==(h=i.charCodeAt(u))?(c=s,s=""):47==h?(s=s.replace(/^_/,""),c=c.replace(/^_/,""),l?m.push(c,l,s):p[c]=void 0===p[c]?s:p[c]+" "+s,s="",c="",l=""):38==h?f.r(p):h&&44!=h?92==h?s+=i[++u]:64==h?(l=s,s=""):s+=i[u]:(e[s=s.replace(/^_/,"")]=((e,t,r)=>{!function(e,t){for(var r=0;rf.e("324").then(f.bind(f,796)));({app:new p.default({render:e=>e(d)})}).app.$mount('[data-server-rendered="true"]'); \ No newline at end of file diff --git a/ssr-vue2-remote/chunks/44.74223083.final.js b/ssr-vue2-remote/chunks/44.74223083.final.js new file mode 100644 index 00000000..67ddb536 --- /dev/null +++ b/ssr-vue2-remote/chunks/44.74223083.final.js @@ -0,0 +1 @@ +export const ids=["44"];export const modules={92:function(t,e,s){s.d(e,{Z:function(){return n}});function n(t,e,s,n,i,o,r,a){var l,u="function"==typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=s,u._compiled=!0),n&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),r?(l=function(t){!(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)&&"undefined"!=typeof __VUE_SSR_CONTEXT__&&(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(r)},u._ssrRegister=l):i&&(l=a?function(){i.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:i),l){if(u.functional){u._injectStyles=l;var _=u.render;u.render=function(t,e){return l.call(e),_(t,e)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,l):[l]}}return{exports:t,options:u}}},69:function(t,e,s){t.exports=s.p+"images/logo.310683d2.final.svg"},166:function(t,e,s){s.r(e),s.d(e,{default:()=>u});var n=s("946"),i=s("910");let o=(0,n.defineComponent)({__name:"logo",props:{width:null,height:null},setup:t=>({__sfc:!0})});s("205");var r=s("92");let a=(0,r.Z)(o,function(){var t=this._self._c;return this._self._setupProxy,t("div",{staticClass:"logo"},[t("img",{attrs:{width:this.width,height:this.height,src:s(69)}})])},[],!1,null,"0e165eca",null).exports,l=(0,n.defineComponent)({__name:"app",setup(t){let e=(0,n.ref)(new Date().toISOString());return(0,n.onMounted)(()=>{let t=setInterval(()=>{e.value=new Date().toISOString()},1e3);(0,n.onBeforeUnmount)(()=>{clearInterval(t)})}),{__sfc:!0,time:e,layout:i.Z,Logo:a}}});s("282");let u=(0,r.Z)(l,function(){var t=this._self._c,e=this._self._setupProxy;return t(e.layout,[t(e.Logo,{attrs:{width:120,height:60}}),this._v(" "),t("p",[this._v("\n Time: "+this._s(e.time)+"\n ")])],1)},[],!1,null,null,null).exports},910:function(t,e,s){s.d(e,{Z:()=>i});let n=(0,s("946").defineComponent)({__name:"layout",setup:t=>({__sfc:!0})});s("490");let i=(0,s("92").Z)(n,function(){var t=this._self._c;return this._self._setupProxy,t("div",{staticClass:"layout"},[this._m(0),this._v(" "),this._m(1),this._v(" "),t("main",[this._t("default")],2)])},[function(){var t=this._self._c;return this._self._setupProxy,t("div",{staticClass:"tip"},[this._v("\n 我是一个来自于 "),t("a",{staticClass:"menu-list-item-link",attrs:{href:"https://github.com/dp-os/gez/blob/master/examples/ssr-vue2-remote/src/components/layout.vue",rel:"noopener",target:"_blank"}},[this._v("ssr-vue2-remote")]),this._v(" 服务的组件。\n ")])},function(){var t=this._self._c;return this._self._setupProxy,t("header",{staticClass:"menu-list"},[t("div",{staticClass:"menu-list-item"},[t("a",{staticClass:"menu-list-item-link",attrs:{href:"https://github.com/dp-os/gez",target:"_blank"}},[this._v("github")])]),this._v(" "),t("div",{staticClass:"menu-list-item"},[t("a",{staticClass:"menu-list-item-link",attrs:{href:"https://www.npmjs.com/package/@gez/core",target:"_blank"}},[this._v("npm")])])])}],!1,null,"b2ae6f88",null).exports}}; \ No newline at end of file diff --git a/ssr-vue2-remote/chunks/44.8b723d12.final.css b/ssr-vue2-remote/chunks/44.8b723d12.final.css new file mode 100644 index 00000000..cfdfb4b3 --- /dev/null +++ b/ssr-vue2-remote/chunks/44.8b723d12.final.css @@ -0,0 +1 @@ +.tip[data-v-b2ae6f88]{background:#efefef;padding:10px}.tip a[data-v-b2ae6f88]{color:#00f}.menu-list[data-v-b2ae6f88]{display:flex}.menu-list-item[data-v-b2ae6f88]{background:#efefef;border-radius:5px;margin:5px;padding:10px}.menu-list-item[data-v-b2ae6f88]:hover{background:#00f}.menu-list-item:hover a[data-v-b2ae6f88]{color:#fff}.menu-list-item-link[data-v-b2ae6f88]{color:#000;text-decoration:none}.logo[data-v-0e165eca]{border:1px solid red;padding:5px}div,body,html,h2{margin:0;padding:0}head{--webpack-__ssr_vue__remote__-44:&_192,Ā490ą_Ĉ3Ċ205Ď6ĉĀ282} \ No newline at end of file diff --git a/ssr-vue2-remote/images/logo.310683d2.final.svg b/ssr-vue2-remote/images/logo.310683d2.final.svg new file mode 100644 index 00000000..fef098a6 --- /dev/null +++ b/ssr-vue2-remote/images/logo.310683d2.final.svg @@ -0,0 +1,3 @@ + + Gez + \ No newline at end of file diff --git a/ssr-vue2-remote/importmap.c32d2b54c2994661.final.js b/ssr-vue2-remote/importmap.c32d2b54c2994661.final.js new file mode 100644 index 00000000..8f3db112 --- /dev/null +++ b/ssr-vue2-remote/importmap.c32d2b54c2994661.final.js @@ -0,0 +1 @@ +(e=>{let t="ssr-vue2-remote",n="__importmap__",s=e[n]=e[n]||{},c=s.imports=s.imports||{},r=new URL(document.currentScript.src).pathname.split("/"+t+"/"),a=e=>t+e.substring(1);Object.entries({"./src/entry.client":"./src/entry.client.78e281fd.final.js","./src/components/layout.vue":"./src/components/layout.vue.782be1f1.final.js","./npm/vue":"./npm/vue.d7ca5d88.final.js"}).forEach(([e,t])=>{c[a(e)]=r[0]+"/"+a(t)})})(globalThis); \ No newline at end of file diff --git a/ssr-vue2-remote/importmap.js b/ssr-vue2-remote/importmap.js new file mode 100644 index 00000000..8f3db112 --- /dev/null +++ b/ssr-vue2-remote/importmap.js @@ -0,0 +1 @@ +(e=>{let t="ssr-vue2-remote",n="__importmap__",s=e[n]=e[n]||{},c=s.imports=s.imports||{},r=new URL(document.currentScript.src).pathname.split("/"+t+"/"),a=e=>t+e.substring(1);Object.entries({"./src/entry.client":"./src/entry.client.78e281fd.final.js","./src/components/layout.vue":"./src/components/layout.vue.782be1f1.final.js","./npm/vue":"./npm/vue.d7ca5d88.final.js"}).forEach(([e,t])=>{c[a(e)]=r[0]+"/"+a(t)})})(globalThis); \ No newline at end of file diff --git a/ssr-vue2-remote/index.html b/ssr-vue2-remote/index.html new file mode 100644 index 00000000..4d3f462f --- /dev/null +++ b/ssr-vue2-remote/index.html @@ -0,0 +1,21 @@ + + + + + + + + Gez + + + +
+ 我是一个来自于 ssr-vue2-remote 服务的组件。 +

+ Time: 2024-11-17T14:40:58.777Z +

+ + + + + diff --git a/ssr-vue2-remote/manifest.json b/ssr-vue2-remote/manifest.json new file mode 100644 index 00000000..9d06d9d1 --- /dev/null +++ b/ssr-vue2-remote/manifest.json @@ -0,0 +1,73 @@ +{ + "name": "ssr-vue2-remote", + "version": "1.0.0", + "hash": "c32d2b54c2994661", + "type": "module", + "exports": { + "./src/entry.client": "./src/entry.client.78e281fd.final.js", + "./src/components/layout.vue": "./src/components/layout.vue.782be1f1.final.js", + "./npm/vue": "./npm/vue.d7ca5d88.final.js" + }, + "buildFiles": [ + "images/logo.310683d2.final.svg", + "npm/vue.d7ca5d88.final.js", + "importmap.c32d2b54c2994661.final.js", + "src/components/layout.vue.782be1f1.final.js", + "chunks/44.74223083.final.js", + "importmap.js", + "src/components/layout.vue.16eacfd2.final.css", + "chunks/44.8b723d12.final.css", + "src/entry.client.ee65e65a.final.css", + "src/entry.client.78e281fd.final.js" + ], + "chunks": { + "ssr-vue2-remote@src/app.vue": { + "js": "chunks/44.74223083.final.js", + "css": [ + "chunks/44.8b723d12.final.css" + ], + "resources": [ + "images/logo.310683d2.final.svg" + ], + "sizes": { + "js": 13854, + "css": 3223, + "resource": 188 + } + }, + "ssr-vue2-remote@src/components/layout.vue": { + "js": "./src/components/layout.vue.782be1f1.final.js", + "css": [ + "./src/components/layout.vue.16eacfd2.final.css" + ], + "resources": [], + "sizes": { + "js": 12960, + "css": 1368, + "resource": 0 + } + }, + "ssr-vue2-remote@src/entry.client.ts": { + "js": "./src/entry.client.78e281fd.final.js", + "css": [ + "./src/entry.client.ee65e65a.final.css" + ], + "resources": [], + "sizes": { + "js": 11173, + "css": 63, + "resource": 0 + } + }, + "ssr-vue2-remote@../../node_modules/.pnpm/vue@2.7.16/node_modules/vue/dist/vue.esm.js": { + "js": "./npm/vue.d7ca5d88.final.js", + "css": [], + "resources": [], + "sizes": { + "js": 419844, + "css": 0, + "resource": 0 + } + } + } +} \ No newline at end of file diff --git a/ssr-vue2-remote/npm/vue.d7ca5d88.final.js b/ssr-vue2-remote/npm/vue.d7ca5d88.final.js new file mode 100644 index 00000000..0c4dc6de --- /dev/null +++ b/ssr-vue2-remote/npm/vue.d7ca5d88.final.js @@ -0,0 +1 @@ +var t,e,n,r,o,i,a,s,c,u,l,f,p,d,v,h,_,m,g,y,b,w,x,$,k,C,S,O,T,A,j,E,P,R,N={},D={};function M(t){var e=D[t];if(void 0!==e)return e.exports;var n=D[t]={exports:{}};return N[t](n,n.exports,M),n.exports}M.d=function(t,e){for(var n in e)M.o(e,n)&&!M.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},M.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(t){if("object"==typeof window)return window}}(),M.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},M.rv=function(){return"1.1.0"},M.ruid="bundler=rspack@1.1.0";var I={};M.d(I,{$y:function(){return ep},Ah:function(){return re},B:function(){return nu},BK:function(){return eC},Bj:function(){return nc},EB:function(){return nf},FN:function(){return tK},Fl:function(){return ej},HA:function(){return e7},IU:function(){return function t(e){var n=e&&e.__v_raw;return n?t(n):e}},IV:function(){return ea},JJ:function(){return nF},Jd:function(){return rt},OT:function(){return eO},Ob:function(){return nD},PG:function(){return el},RC:function(){return n9},Rh:function(){return nN},Rr:function(){return e8},SU:function(){return ew},Um:function(){return ec},Vh:function(){return eS},WL:function(){return ex},X3:function(){return ed},XI:function(){return eg},Xl:function(){return ev},Xn:function(){return n7},Y3:function(){return n1},YP:function(){return nI},YS:function(){return eA},Yq:function(){return ra},ZM:function(){return ek},ZP:function(){return rJ},aZ:function(){return rl},bT:function(){return ri},bv:function(){return n6},d1:function(){return rc},dl:function(){return rn},dq:function(){return e_},f3:function(){return nU},fb:function(){return n2},h:function(){return nH},i8:function(){return ru},iH:function(){return em},ic:function(){return n5},l1:function(){return e6},m0:function(){return nR},nZ:function(){return nl},oR:function(){return eb},qj:function(){return es},se:function(){return rr},sj:function(){return n3},t8:function(){return ei},u_:function(){return nt},vl:function(){return ro},wF:function(){return n8},yT:function(){return ef}});var L=Object.freeze({}),F=Array.isArray;function B(t){return null==t}function U(t){return null!=t}function H(t){return!0===t}function V(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function z(t){return"function"==typeof t}function J(t){return null!==t&&"object"==typeof t}var K=Object.prototype.toString;function q(t){return"[object Object]"===K.call(t)}function Z(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function W(t){return U(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function X(t){return null==t?"":Array.isArray(t)||q(t)&&t.toString===K?JSON.stringify(t,Y,2):String(t)}function Y(t,e){return e&&e.__v_isRef?e.value:e}function G(t){var e=parseFloat(t);return isNaN(e)?t:e}function Q(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(r,1)}}var tr=Object.prototype.hasOwnProperty;function to(t,e){return tr.call(t,e)}function ti(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var ta=/-(\w)/g,ts=ti(function(t){return t.replace(ta,function(t,e){return e?e.toUpperCase():""})}),tc=ti(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),tu=/\B([A-Z])/g,tl=ti(function(t){return t.replace(tu,"-$1").toLowerCase()}),tf=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function tp(t,e){e=e||0;for(var n=t.length-e,r=Array(n);n--;)r[n]=t[n+e];return r}function td(t,e){for(var n in e)t[n]=e[n];return t}function tv(t){for(var e={},n=0;n0,tD=tP&&tP.indexOf("edge/")>0;tP&&tP.indexOf("android");var tM=tP&&/iphone|ipad|ipod|ios/.test(tP);tP&&/chrome\/\d+/.test(tP),tP&&/phantomjs/.test(tP);var tI=tP&&tP.match(/firefox\/(\d+)/),tL={}.watch,tF=!1;if(tE)try{var tB={};Object.defineProperty(tB,"passive",{get:function(){tF=!0}}),window.addEventListener("test-passive",null,tB)}catch(t){}var tU=function(){return void 0===c&&(c=!tE&&void 0!==M.g&&M.g.process&&"server"===M.g.process.env.VUE_ENV),c},tH=tE&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function tV(t){return"function"==typeof t&&/native code/.test(t.toString())}var tz="undefined"!=typeof Symbol&&tV(Symbol)&&"undefined"!=typeof Reflect&&tV(Reflect.ownKeys);u="undefined"!=typeof Set&&tV(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var tJ=null;function tK(){return tJ&&{proxy:tJ}}function tq(t){void 0===t&&(t=null),!t&&tJ&&tJ._scope.off(),tJ=t,t&&t._scope.on()}var tZ=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),tW=function(t){void 0===t&&(t="");var e=new tZ;return e.text=t,e.isComment=!0,e};function tX(t){return new tZ(void 0,void 0,void 0,String(t))}function tY(t){var e=new tZ(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}"function"==typeof SuppressedError&&SuppressedError;var tG=0,tQ=[],t0=function(){for(var t=0;t0&&(eI((o=t(o,"".concat(n||"","_").concat(r)))[0])&&eI(a)&&(s[i]=tX(a.text+o[0].text),o.shift()),s.push.apply(s,o)):V(o)?eI(a)?s[i]=tX(a.text+o):""!==o&&s.push(tX(o)):eI(o)&&eI(a)?s[i]=tX(a.text+o.text):(H(e._isVList)&&U(o.tag)&&B(o.key)&&U(n)&&(o.key="__vlist".concat(n,"_").concat(r,"__")),s.push(o)));return s}(t):void 0}function eI(t){return U(t)&&U(t.text)&&!1===t.isComment}function eL(t,e,n,r,o,i){return(F(n)||V(n))&&(o=r,r=n,n=void 0),H(i)&&(o=2),function(t,e,n,r,o){if(U(n)&&U(n.__ob__))return tW();if(U(n)&&U(n.is)&&(e=n.is),!e)return tW();if(F(r)&&z(r[0])&&((n=n||{}).scopedSlots={default:r[0]},r.length=0),2===o?r=eM(r):1===o&&(r=function(t){for(var e=0;e0,a=e?!!e.$stable:!i,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;else if(a&&r&&r!==L&&s===r.$key&&!i&&!r.$hasNormal)return r;else for(var c in o={},e)e[c]&&"$"!==c[0]&&(o[c]=function(t,e,n,r){var o=function(){var e=tJ;tq(t);var n=arguments.length?r.apply(null,arguments):r({}),o=(n=n&&"object"==typeof n&&!F(n)?[n]:eM(n))&&n[0];return tq(e),n&&(!o||1===n.length&&o.isComment&&!e1(o))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:o,enumerable:!0,configurable:!0}),o}(t,n,c,e[c]))}else o={};for(var u in n)!(u in o)&&(o[u]=function(t,e){return function(){return t[e]}}(n,u));return e&&Object.isExtensible(e)&&(e._normalized=o),tT(o,"$stable",a),tT(o,"$key",s),tT(o,"$hasNormal",i),o}function e3(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};tT(e,"_v_attr_proxy",!0),e9(e,t.$attrs,L,t,"$attrs")}return t._attrsProxy},get listeners(){return!t._listenersProxy&&e9(t._listenersProxy={},t.$listeners,L,t,"$listeners"),t._listenersProxy},get slots(){return function(t){return!t._slotsProxy&&e4(t._slotsProxy={},t.$scopedSlots),t._slotsProxy}(t)},emit:tf(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach(function(n){return e$(t,e,n)})}}}function e9(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,function(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}(t,a,r,o));for(var a in t)!(a in e)&&(i=!0,delete t[a]);return i}function e4(t,e){for(var n in e)t[n]=e[n];for(var n in t)!(n in e)&&delete t[n]}function e8(){return e5().slots}function e6(){return e5().attrs}function e7(){return e5().listeners}function e5(){var t=tJ;return t._setupContext||(t._setupContext=e3(t))}function nt(t,e){var n=F(t)?t.reduce(function(t,e){return t[e]={},t},{}):t;for(var r in e){var o=n[r];o?F(o)||z(o)?n[r]={type:o,default:e[r]}:o.default=e[r]:null===o&&(n[r]={default:e[r]})}return n}var ne=null;function nn(t,e){return(t.__esModule||tz&&"Module"===t[Symbol.toStringTag])&&(t=t.default),J(t)?e.extend(t):t}function nr(t){if(F(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(nk=function(){return nC.now()})}var nS=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return -1;return t.id-e.id};function nO(){for(n$=nk(),nw=!0,nm.sort(nS),nx=0;nxnx&&nm[n].id>t.id;)n--;nm.splice(n+1,0,t)}else nm.push(t);if(!nb){nb=!0;n1(nO)}}}var nA="watcher",nj="".concat(nA," callback"),nE="".concat(nA," getter"),nP="".concat(nA," cleanup");function nR(t,e){return nL(t,null,e)}function nN(t,e){return nL(t,null,{flush:"post"})}function nD(t,e){return nL(t,null,{flush:"sync"})}var nM={};function nI(t,e,n){return nL(t,e,n)}function nL(t,e,n){var r,o,i=void 0===n?L:n,a=i.immediate,s=i.deep,c=i.flush,u=void 0===c?"pre":c;i.onTrack,i.onTrigger;var l=tJ,f=function(t,e,n){void 0===n&&(n=null);var r=nz(t,null,n,l,e);return s&&r&&r.__ob__&&r.__ob__.dep.depend(),r},p=!1,d=!1;if(e_(t)?(r=function(){return t.value},p=ef(t)):el(t)?(r=function(){return t.__ob__.dep.depend(),t},s=!0):F(t)?(d=!0,p=t.some(function(t){return el(t)||ef(t)}),r=function(){return t.map(function(t){if(e_(t))return t.value;if(el(t))return t.__ob__.dep.depend(),rp(t);if(z(t))return f(t,nE)})}):r=z(t)?e?function(){return f(t,nE)}:function(){if(!l||!l._isDestroyed)return o&&o(),f(t,nA,[h])}:th,e&&s){var v=r;r=function(){return rp(v())}}var h=function(t){o=_.onStop=function(){f(t,nP)}};if(tU())return h=th,e?a&&f(e,nj,[r(),d?[]:void 0,h]):r(),th;var _=new rv(tJ,r,th,{lazy:!0});_.noRecurse=!e;var m=d?[]:nM;return _.run=function(){if(!!_.active)if(e){var t=_.get();(s||p||(d?t.some(function(t,e){return tw(t,m[e])}):tw(t,m)))&&(o&&o(),f(e,nj,[t,m===nM?void 0:m,h]),m=t)}else _.get()},"sync"===u?_.update=_.run:"post"===u?(_.post=!0,_.update=function(){return nT(_)}):_.update=function(){if(l&&l===tJ&&!l._isMounted){var t=l._preWatchers||(l._preWatchers=[]);0>t.indexOf(_)&&t.push(_)}else nT(_)},e?a?_.run():m=_.get():"post"===u&&l?l.$once("hook:mounted",function(){return _.get()}):_.get(),function(){_.teardown()}}function nF(t,e){if(tJ)nB(tJ)[t]=e}function nB(t){var e=t._provided,n=t.$parent&&t.$parent._provided;return n===e?t._provided=Object.create(n):e}function nU(t,e,n){void 0===n&&(n=!1);var r=tJ;if(r){var o=r.$parent&&r.$parent._provided;if(o&&t in o)return o[t];if(arguments.length>1)return n&&z(e)?e.call(r):e}}function nH(t,e,n){return eL(tJ,t,e,n,2,!0)}function nV(t,e,n){t3();try{if(e){for(var r=e;r=r.$parent;){var o=r.$options.errorCaptured;if(o)for(var i=0;i-1){if(i&&!to(o,"default"))a=!1;else if(""===a||a===tl(t)){var c=rz(String,o.type);(c<0||s1?tp(e):e;for(var n=tp(arguments,1),r='event handler for "'.concat(t,'"'),o=0,i=e.length;o-1;if("string"==typeof t)return t.split(",").indexOf(e)>-1;if(n=t,"[object RegExp]"===K.call(n))return t.test(e);return!1}function rZ(t,e){var n=t.cache,r=t.keys,o=t._vnode,i=t.$vnode;for(var a in n){var s=n[a];if(s){var c=s.name;c&&!e(c)&&rW(n,a,r,o)}}i.componentOptions.children=void 0}function rW(t,e,n,r){var o=t[e];o&&(!r||o.tag!==r.tag)&&o.componentInstance.$destroy(),t[e]=null,tn(n,e)}var rX=[String,RegExp,Array],rY={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:rX,exclude:rX,max:[String,Number]},methods:{cacheVNode:function(){var t=this.cache,e=this.keys,n=this.vnodeToCache,r=this.keyToCache;if(n){var o=n.tag,i=n.componentInstance,a=n.componentOptions;t[r]={name:rK(a),tag:o,componentInstance:i},e.push(r),this.max&&e.length>parseInt(this.max)&&rW(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)rW(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",function(e){rZ(t,function(t){return rq(e,t)})}),this.$watch("exclude",function(e){rZ(t,function(t){return!rq(e,t)})})},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=nr(t),n=e&&e.componentOptions;if(n){var r=rK(n),o=this.include,i=this.exclude;if(o&&(!r||!rq(o,r))||i&&r&&rq(i,r))return e;var a=this.cache,s=this.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[c]?(e.componentInstance=a[c].componentInstance,tn(s,c),s.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e,n,r,o={};o.get=function(){return tC};Object.defineProperty(t,"config",o),t.util={warn:th,extend:td,mergeOptions:rL,defineReactive:eo},t.set=ei,t.delete=ea,t.nextTick=n1,t.observable=function(t){return er(t),t},t.options=Object.create(null),t$.forEach(function(e){t.options[e+"s"]=Object.create(null)}),t.options._base=t,td(t.options.components,rY),t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=tp(arguments,1);return n.unshift(this),z(t.install)?t.install.apply(t,n):z(t)&&t.apply(null,n),e.push(t),this},t.mixin=function(t){return this.options=rL(this.options,t),this},(e=t).cid=0,n=1,e.extend=function(t){t=t||{};var e=this,r=e.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=rT(t)||rT(e.options),a=function(t){this._init(t)};return a.prototype=Object.create(e.prototype),a.prototype.constructor=a,a.cid=n++,a.options=rL(e.options,t),a.super=e,a.options.props&&function(t){var e=t.options.props;for(var n in e)r_(t.prototype,"_props",n)}(a),a.options.computed&&function(t){var e=t.options.computed;for(var n in e)rg(t.prototype,n,e[n])}(a),a.extend=e.extend,a.mixin=e.mixin,a.use=e.use,t$.forEach(function(t){a[t]=e[t]}),i&&(a.options.components[i]=a),a.superOptions=e.options,a.extendOptions=t,a.sealedOptions=td({},a.options),o[r]=a,a},r=t,t$.forEach(function(t){r[t]=function(e,n){return n?("component"===t&&q(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&z(n)&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}(rJ),Object.defineProperty(rJ.prototype,"$isServer",{get:tU}),Object.defineProperty(rJ.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(rJ,"FunctionalRenderContext",{value:rC}),rJ.version=ru;var rG=Q("style,class"),rQ=Q("input,textarea,option,select,progress"),r0=function(t,e,n){return"value"===n&&rQ(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},r1=Q("contenteditable,draggable,spellcheck"),r2=Q("events,caret,typing,plaintext-only"),r3=Q("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),r9="http://www.w3.org/1999/xlink",r4=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},r8=function(t){return r4(t)?t.slice(6,t.length):""},r6=function(t){return null==t||!1===t};function r7(t,e){return{staticClass:r5(t.staticClass,e.staticClass),class:U(t.class)?[t.class,e.class]:e.class}}function r5(t,e){return t?e?t+" "+e:t:e||""}function ot(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1)ox(t,e,n);else if(r3(e))r6(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n));else if(r1(e)){var o,i;t.setAttribute(e,(o=e,r6(i=n)||"false"===i?"false":"contenteditable"===o&&r2(i)?i:"true"))}else r4(e)?r6(n)?t.removeAttributeNS(r9,r8(e)):t.setAttributeNS(r9,e,n):ox(t,e,n)}function ox(t,e,n){if(r6(n))t.removeAttribute(e);else{if(tR&&!tN&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}function o$(t,e){var n=e.elm,r=e.data,o=t.data;if(!(B(r.staticClass)&&B(r.class)&&(B(o)||B(o.staticClass)&&B(o.class)))){var i=function(t){for(var e=t.data,n=t,r=t;U(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=r7(r.data,e));for(;U(n=n.parent);)n&&n.data&&(e=r7(e,n.data));return function(t,e){return U(t)||U(e)?r5(t,ot(e)):""}(e.staticClass,e.class)}(e),a=n._transitionClasses;U(a)&&(i=r5(i,ot(a))),i!==n._prevClass&&(n.setAttribute("class",i),n._prevClass=i)}}var ok=/[\w).+\-_$\]]/;function oC(t){var e,n,r,o,i,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r=0&&" "===(h=t.charAt(v));v--);(!h||!ok.test(h))&&(u=!0)}}else void 0===o?(d=r+1,o=t.slice(0,r).trim()):_();function _(){(i||(i=[])).push(t.slice(d,r).trim()),d=r+1}if(void 0===o?o=t.slice(0,r).trim():0!==d&&_(),i)for(r=0;rt.indexOf("[")||t.lastIndexOf("]")-1?{exp:t.slice(0,_),key:'"'+t.slice(_+1)+'"'}:{exp:t,key:null};for(v=t,_=m=g=0;!oB();)oU(h=oF())?oH(h):91===h&&function(t){var e=1;for(m=_;!(_>=d);){if(oU(t=oF())){oH(t);continue}if(91===t&&e++,93===t&&e--,0===e){g=_;break}}}(h);return{exp:t.slice(0,m),key:t.slice(m+1,g)}}(t);return null===n.key?"".concat(t,"=").concat(e):"$set(".concat(n.exp,", ").concat(n.key,", ").concat(e,")")}function oF(){return v.charCodeAt(++_)}function oB(){return _>=d}function oU(t){return 34===t||39===t}function oH(t){for(var e=t;!(_>=d)&&(t=oF())!==e;);}function oV(t,e,n){var r=y;return function o(){var i=e.apply(null,arguments);null!==i&&oK(t,o,n,r)}}var oz=nq&&!(tI&&53>=Number(tI[1]));function oJ(t,e,n,r){if(oz){var o=n$,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}y.addEventListener(t,e,tF?{capture:n,passive:r}:n)}function oK(t,e,n,r){(r||y).removeEventListener(t,e._wrapper||e,n)}function oq(t,e){if(!(B(t.data.on)&&B(e.data.on))){var n=e.data.on||{},r=t.data.on||{};y=e.elm||t.elm,!function(t){if(U(t.__r)){var e=tR?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}U(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),eR(n,r,oJ,oK,oV,e.context),y=void 0}}function oZ(t,e){if(!(B(t.data.domProps)&&B(e.data.domProps))){var n,r,o=e.elm,i=t.data.domProps||{},a=e.data.domProps||{};for(n in(U(a.__ob__)||H(a._v_attr_proxy))&&(a=e.data.domProps=td({},a)),i)!(n in a)&&(o[n]="");for(n in a){if(r=a[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===i[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var s=B(r)?"":String(r);(function(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(U(r)){if(r.number)return G(n)!==G(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))})(o,s)&&(o.value=s)}else if("innerHTML"===n&&or(o.tagName)&&B(o.innerHTML)){(b=b||document.createElement("div")).innerHTML="".concat(r,"");for(var c=b.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;c.firstChild;)o.appendChild(c.firstChild)}else if(r!==i[n])try{o[n]=r}catch(t){}}}}var oW=ti(function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach(function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}}),e});function oX(t){var e=oY(t.style);return t.staticStyle?td(t.staticStyle,e):e}function oY(t){return Array.isArray(t)?tv(t):"string"==typeof t?oW(t):t}var oG=/^--/,oQ=/\s*!important$/,o0=function(t,e,n){if(oG.test(e))t.style.setProperty(e,n);else if(oQ.test(n))t.style.setProperty(tl(e),n.replace(oQ,""),"important");else{var r=o2(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(o9).forEach(function(e){return t.classList.add(e)}):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");0>n.indexOf(" "+e+" ")&&t.setAttribute("class",(n+e).trim())}}function o8(t,e){if(!!e&&!!(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(o9).forEach(function(e){return t.classList.remove(e)}):t.classList.remove(e),!t.classList.length&&t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function o6(t){if(!!t){if("object"==typeof t){var e={};return!1!==t.css&&td(e,o7(t.name||"v")),td(e,t),e}if("string"==typeof t)return o7(t)}}var o7=ti(function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}}),o5=tE&&!tN,it="transition",ie="animation",ir="transition",io="transitionend",ii="animation",ia="animationend";o5&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ir="WebkitTransition",io="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(ii="WebkitAnimation",ia="webkitAnimationEnd"));var is=tE?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function ic(t){is(function(){is(t)})}function iu(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);0>n.indexOf(e)&&(n.push(e),o4(t,e))}function il(t,e){t._transitionClasses&&tn(t._transitionClasses,e),o8(t,e)}function ip(t,e,n){var r=iv(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===it?io:ia,c=0,u=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++c>=a&&u()};setTimeout(function(){c0&&(n=it,l=a,f=i.length):e===ie?u>0&&(n=ie,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?it:ie:null)?n===it?i.length:c.length:0;var p=n===it&&id.test(r[ir+"Property"]);return{type:n,timeout:l,propCount:f,hasTransform:p}}function ih(t,e){for(;t.length1}function iw(t,e){!0!==e.data.show&&im(e)}var ix=function(t){var e,n,r={},o=t.modules,i=t.nodeOps;for(e=0;ep?v(t,B(n[g+1])?null:n[g+1].elm,n,f,g,r):f>g&&_(e,l,p)}(l,d,h,n,c):U(h)?(U(t.text)&&i.setTextContent(l,""),v(l,null,h,0,h.length-1,n)):U(d)?_(d,0,d.length-1):U(t.text)&&i.setTextContent(l,""):t.text!==e.text&&i.setTextContent(l,e.text),U(p)&&U(u=p.hook)&&U(u=u.postpatch)&&u(t,e)}}function g(t,e,n){if(H(n)&&U(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,o.selected!==r&&(o.selected=r);else if(tg(iO(o),i)){t.selectedIndex!==s&&(t.selectedIndex=s);return}!a&&(t.selectedIndex=-1)}}function iS(t,e){return e.every(function(e){return!tg(e,t)})}function iO(t){return"_value"in t?t._value:t.value}function iT(t){t.target.composing=!0}function iA(t){t.target.composing&&(t.target.composing=!1,ij(t.target,"input"))}function ij(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function iE(t){return!t.componentInstance||t.data&&t.data.transition?t:iE(t.componentInstance._vnode)}var iP={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function iR(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?iR(nr(e.children)):t}function iN(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[ts(r)]=o[r];return e}function iD(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var iM=function(t){return t.tag||e1(t)},iI=function(t){return"show"===t.name},iL=td({tag:String,moveClass:String},iP);delete iL.mode;function iF(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function iB(t){t.data.newPos=t.elm.getBoundingClientRect()}function iU(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}rJ.config.mustUseProp=r0,rJ.config.isReservedTag=oo,rJ.config.isReservedAttr=rG,rJ.config.getTagNamespace=oi,rJ.config.isUnknownElement=function(t){if(!tE)return!0;if(oo(t))return!1;if(null!=oa[t=t.toLowerCase()])return oa[t];var e=document.createElement(t);return t.indexOf("-")>-1?oa[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:oa[t]=/HTMLUnknownElement/.test(e.toString())},td(rJ.options.directives,{model:i$,show:{bind:function(t,e,n){var r=e.value,o=(n=iE(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,im(n,function(){t.style.display=i})):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=iE(n)).data&&n.data.transition?(n.data.show=!0,r?im(n,function(){t.style.display=t.__vOriginalDisplay}):ig(n,function(){t.style.display="none"})):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){!o&&(t.style.display=t.__vOriginalDisplay)}}}),td(rJ.options.components,{Transition:{name:"transition",props:iP,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(!!n&&!!(n=n.filter(iM)).length){var r=this.mode,o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=iR(o);if(!i)return o;if(this._leaving)return iD(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:V(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=iN(this),c=this._vnode,u=iR(c);if(i.data.directives&&i.data.directives.some(iI)&&(i.data.show=!0),u&&u.data&&(f=i,(p=u).key!==f.key||p.tag!==f.tag)&&!e1(u)&&!(u.componentInstance&&u.componentInstance._vnode.isComment)){var l=u.data.transition=td({},s);if("out-in"===r)return this._leaving=!0,eN(l,"afterLeave",function(){e._leaving=!1,e.$forceUpdate()}),iD(t,o);if("in-out"===r){if(e1(i))return c;var f,p,d,v=function(){d()};eN(s,"afterEnter",v),eN(s,"enterCancelled",v),eN(l,"delayLeave",function(t){d=t})}}return o}}},TransitionGroup:{props:iL,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=nd(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=iN(this),s=0;s\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,iW=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,iX="[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(tS.source,"]*"),iY="((?:".concat(iX,"\\:)?").concat(iX,")"),iG=new RegExp("^<".concat(iY)),iQ=/^\s*(\/?)>/,i0=new RegExp("^<\\/".concat(iY,"[^>]*>")),i1=/^]+>/i,i2=/^",""":'"',"&":"&"," ":"\n"," ":" ","'":"'"},i6=/&(?:lt|gt|quot|amp|#39);/g,i7=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,i5=Q("pre,textarea",!0),at=function(t,e){return t&&i5(t)&&"\n"===e[0]},ae=/^@|^v-on:/,an=/^v-|^@|^:|^#/,ar=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,ao=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,ai=/^\(|\)$/g,aa=/^\[.*\]$/,as=/:(.*)$/,ac=/^:|^\.|^v-bind:/,au=/\.[^.\]]+(?=[^\]]*$)/g,al=/^v-slot(:|$)|^#/,af=/[\r\n]/,ap=/[ \f\t\r\n]+/g,ad=ti(function(t){return(x=x||document.createElement("div")).innerHTML=t,x.textContent}),av="_empty_";function ah(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:function(t){for(var e={},n=0,r=t.length;n-1")+("true"===i?":(".concat(e,")"):":_q(".concat(e,",").concat(i,")"))),oP(t,"change","var $$a=".concat(e,",")+"$$el=$event.target,"+"$$c=$$el.checked?(".concat(i,"):(").concat(a,");")+"if(Array.isArray($$a)){"+"var $$v=".concat(r?"_n("+o+")":o,",")+"$$i=_i($$a,$$v);"+"if($$el.checked){$$i<0&&(".concat(oL(e,"$$a.concat([$$v])"),")}")+"else{$$i>-1&&(".concat(oL(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))"),")}")+"}else{".concat(oL(e,"$$c"),"}"),null,!0)})(t,r,o);else if("input"===i&&"radio"===a)(function(t,e,n){var r=n&&n.number,o=oR(t,"value")||"null";o=r?"_n(".concat(o,")"):o,oT(t,"checked","_q(".concat(e,",").concat(o,")")),oP(t,"change",oL(e,o),null,!0)})(t,r,o);else if("input"===i||"textarea"===i)(function(t,e,n){var r=t.attrsMap.type,o=n||{},i=o.lazy,a=o.number,s=o.trim,c="$event.target.value";s&&(c="$event.target.value.trim()"),a&&(c="_n(".concat(c,")"));var u=oL(e,c);!i&&"range"!==r&&(u="if($event.target.composing)return;".concat(u)),oT(t,"value","(".concat(e,")")),oP(t,i?"change":"range"===r?"__r":"input",u,null,!0),(s||a)&&oP(t,"blur","$forceUpdate()")})(t,r,o);else if(!tC.isReservedTag(i))return oI(t,r,o),!1;return!0},text:function(t,e){e.value&&oT(t,"textContent","_s(".concat(e.value,")"),e)},html:function(t,e){e.value&&oT(t,"innerHTML","_s(".concat(e.value,")"),e)}},isPreTag:function(t){return"pre"===t},isUnaryTag:iJ,mustUseProp:r0,canBeLeftOpenTag:iK,isReservedTag:oo,getTagNamespace:oi,staticKeys:a$.reduce(function(t,e){return t.concat(e.staticKeys||[])},[]).join(",")},aC=ti(function(t){return Q("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))}),aS=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,aO=/\([^)]*?\);*$/,aT=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,aA={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},aj={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},aE=function(t){return"if(".concat(t,")return null;")},aP={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:aE("$event.target !== $event.currentTarget"),ctrl:aE("!$event.ctrlKey"),shift:aE("!$event.shiftKey"),alt:aE("!$event.altKey"),meta:aE("!$event.metaKey"),left:aE("'button' in $event && $event.button !== 0"),middle:aE("'button' in $event && $event.button !== 1"),right:aE("'button' in $event && $event.button !== 2")};function aR(t,e){var n=e?"nativeOn:":"on:",r="",o="";for(var i in t){var a=function t(e){if(!e)return"function(){}";if(Array.isArray(e))return"[".concat(e.map(function(e){return t(e)}).join(","),"]");var n=aT.test(e.value),r=aS.test(e.value),o=aT.test(e.value.replace(aO,""));if(e.modifiers){var i="",a="",s=[];for(var c in e.modifiers)!function(t){if(aP[t])a+=aP[t],aA[t]&&s.push(t);else if("exact"===t){var n=e.modifiers;a+=aE(["ctrl","shift","alt","meta"].filter(function(t){return!n[t]}).map(function(t){return"$event.".concat(t,"Key")}).join("||"))}else s.push(t)}(c);s.length&&(i+=function(t){return"if(!$event.type.indexOf('key')&&"+"".concat(t.map(aN).join("&&"),")return null;")}(s)),a&&(i+=a);var u=n?"return ".concat(e.value,".apply(null, arguments)"):r?"return (".concat(e.value,").apply(null, arguments)"):o?"return ".concat(e.value):e.value;return"function($event){".concat(i).concat(u,"}")}return n||r?e.value:"function($event){".concat(o?"return ".concat(e.value):e.value,"}")}(t[i]);t[i]&&t[i].dynamic?o+="".concat(i,",").concat(a,","):r+='"'.concat(i,'":').concat(a,",")}return(r="{".concat(r.slice(0,-1),"}"),o)?n+"_d(".concat(r,",[").concat(o.slice(0,-1),"])"):n+r}function aN(t){var e=parseInt(t,10);if(e)return"$event.keyCode!==".concat(e);var n=aA[t],r=aj[t];return"_k($event.keyCode,"+"".concat(JSON.stringify(t),",")+"".concat(JSON.stringify(n),",")+"$event.key,"+"".concat(JSON.stringify(r))+")"}var aD={on:function(t,e){t.wrapListeners=function(t){return"_g(".concat(t,",").concat(e.value,")")}},bind:function(t,e){t.wrapData=function(n){return"_b(".concat(n,",'").concat(t.tag,"',").concat(e.value,",").concat(e.modifiers&&e.modifiers.prop?"true":"false").concat(e.modifiers&&e.modifiers.sync?",true":"",")")}},cloak:th},aM=function(t){this.options=t,this.warn=t.warn||oS,this.transforms=oO(t.modules,"transformCode"),this.dataGenFns=oO(t.modules,"genData"),this.directives=td(td({},aD),t.directives);var e=t.isReservedTag||t_;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function aI(t,e){var n=new aM(e),r=t?"script"===t.tag?"null":aL(t,n):'_c("div")';return{render:"with(this){return ".concat(r,"}"),staticRenderFns:n.staticRenderFns}}function aL(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return aF(t,e);if(t.once&&!t.onceProcessed)return aB(t,e);if(t.for&&!t.forProcessed)return aH(t,e);else{if(t.if&&!t.ifProcessed)return aU(t,e);if("template"===t.tag&&!t.slotTarget&&!e.pre)return az(t,e)||"void 0";if("slot"===t.tag)return function(t,e){var n=t.slotName||'"default"',r=az(t,e),o="_t(".concat(n).concat(r?",function(){return ".concat(r,"}"):""),i=t.attrs||t.dynamicAttrs?aq((t.attrs||[]).concat(t.dynamicAttrs||[]).map(function(t){return{name:ts(t.name),value:t.value,dynamic:t.dynamic}})):null,a=t.attrsMap["v-bind"];return(i||a)&&!r&&(o+=",null"),i&&(o+=",".concat(i)),a&&(o+="".concat(i?"":",null",",").concat(a)),o+")"}(t,e);var n=void 0;if(t.component)n=function(t,e,n){var r=e.inlineTemplate?null:az(e,n,!0);return"_c(".concat(t,",").concat(aV(e,n)).concat(r?",".concat(r):"",")")}(t.component,t,e);else{var r=void 0,o=e.maybeComponent(t);(!t.plain||t.pre&&o)&&(r=aV(t,e));var i=void 0,a=e.options.bindings;o&&a&&!1!==a.__isScriptSetup&&(i=function(t,e){var n=ts(e),r=tc(n),o=function(o){return t[e]===o?e:t[n]===o?n:t[r]===o?r:void 0},i=o("setup-const")||o("setup-reactive-const");if(i)return i;var a=o("setup-let")||o("setup-ref")||o("setup-maybe-ref");if(a)return a}(a,t.tag)),!i&&(i="'".concat(t.tag,"'"));var s=t.inlineTemplate?null:az(t,e,!0);n="_c(".concat(i).concat(r?",".concat(r):"").concat(s?",".concat(s):"",")")}for(var c=0;c>>0}(a)):"",")")}(t,t.scopedSlots,e),",")),t.model&&(n+="model:{value:".concat(t.model.value,",callback:").concat(t.model.callback,",expression:").concat(t.model.expression,"},")),t.inlineTemplate){var i=function(t,e){var n=t.children[0];if(n&&1===n.type){var r=aI(n,e.options);return"inlineTemplate:{render:function(){".concat(r.render,"},staticRenderFns:[").concat(r.staticRenderFns.map(function(t){return"function(){".concat(t,"}")}).join(","),"]}")}}(t,e);i&&(n+="".concat(i,","))}return n=n.replace(/,$/,"")+"}",t.dynamicAttrs&&(n="_b(".concat(n,',"').concat(t.tag,'",').concat(aq(t.dynamicAttrs),")")),t.wrapData&&(n=t.wrapData(n)),t.wrapListeners&&(n=t.wrapListeners(n)),n}function az(t,e,n,r,o){var i=t.children;if(i.length){var a=i[0];if(1===i.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?e.maybeComponent(a)?",1":",0":"";return"".concat((r||aL)(a,e)).concat(s)}var c=n?function(t,e){for(var n=0,r=0;r]*>)","i")),v=t.replace(d,function(t,n,r){return f=r.length,!i9(p)&&"noscript"!==p&&(n=n.replace(//g,"$1").replace(//g,"$1")),at(p,n)&&(n=n.slice(1)),e.chars&&e.chars(n),""});c+=t.length-v.length,t=v,l(p,c-f,c)}else{var h=t.indexOf("<");if(0===h){if(i2.test(t)){var _=t.indexOf("--\x3e");if(_>=0)return e.shouldKeepComment&&e.comment&&e.comment(t.substring(4,_),c,c+_+3),u(_+3),"continue"}if(i3.test(t)){var m=t.indexOf("]>");if(m>=0)return u(m+2),"continue"}var g=t.match(i1);if(g)return u(g[0].length),"continue";var y=t.match(i0);if(y){var b=c;return u(y[0].length),l(y[1],b,c),"continue"}var w=function(){var e=t.match(iG);if(e){var n={tagName:e[1],attrs:[],start:c};u(e[0].length);for(var r=void 0,o=void 0;!(r=t.match(iQ))&&(o=t.match(iW)||t.match(iZ));)o.start=c,u(o[0].length),o.end=c,n.attrs.push(o);if(r)return n.unarySlash=r[1],u(r[0].length),n.end=c,n}}();if(w)return function(t){var n=t.tagName,c=t.unarySlash;i&&("p"===r&&iq(n)&&l(r),s(n)&&r===n&&l(n));for(var u=a(n)||!!c,f=t.attrs.length,p=Array(f),d=0;d=0){for(v=t.slice(h);!i0.test(v)&&!iG.test(v)&&!i2.test(v)&&!i3.test(v)&&!(($=v.indexOf("<",1))<0);){;h+=$,v=t.slice(h)}x=t.substring(0,h)}h<0&&(x=t),x&&u(x.length),e.chars&&x&&e.chars(x,c-x.length,c)}if(t===n)return e.chars&&e.chars(t),"break"}(););function u(e){c+=e,t=t.substring(e)}l();function l(t,n,i){var a,s;if(null==n&&(n=c),null==i&&(i=c),t)for(s=t.toLowerCase(),a=o.length-1;a>=0&&o[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=o.length-1;u>=a;u--)e.end&&e.end(o[u].tag,n,i);o.length=a,r=a&&o[a-1].tag}else"br"===s?e.start&&e.start(t,[],!0,n,i):"p"===s&&(e.start&&e.start(t,[],!1,n,i),e.end&&e.end(t,n,i))}}(t,{warn:$,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,outputSourceRange:e.outputSourceRange,start:function(t,i,a,l,f){var p=r&&r.ns||j(t);tR&&"svg"===p&&(i=function(t){for(var e=[],n=0;nc&&(s.push(o=t.slice(c,r)),a.push(JSON.stringify(o)));var u=oC(n[1].trim());a.push("_s(".concat(u,")")),s.push({"@binding":u}),c=r+n[0].length}return c':'
',R.innerHTML.indexOf(" ")>0}var aG=!!tE&&aY(!1),aQ=!!tE&&aY(!0),a0=ti(function(t){var e=oc(t);return e&&e.innerHTML}),a1=rJ.prototype.$mount;rJ.prototype.$mount=function(t,e){if((t=t&&oc(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r){if("string"==typeof r)"#"===r.charAt(0)&&(r=a0(r));else{if(!r.nodeType)return this;r=r.innerHTML}}else t&&(r=function(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}(t));if(r){var o=aX(r,{outputSourceRange:!1,shouldDecodeNewlines:aG,shouldDecodeNewlinesForHref:aQ,delimiters:n.delimiters,comments:n.comments},this),i=o.render,a=o.staticRenderFns;n.render=i,n.staticRenderFns=a}}return a1.call(this,t,e)};rJ.compile=aX;var a2=I.Bj,a3=I.Fl,a9=I.ZM,a4=I.ZP,a8=I.RC,a6=I.aZ,a7=I.IV,a5=I.B,st=I.FN,se=I.nZ,sn=I.h,sr=I.f3,so=I.X3,si=I.PG,sa=I.$y,ss=I.dq,sc=I.yT,su=I.Xl,sl=I.u_,sf=I.Y3,sp=I.dl,sd=I.wF,sv=I.Jd,sh=I.Xn,s_=I.se,sm=I.d1,sg=I.bv,sy=I.bT,sb=I.Yq,sw=I.EB,sx=I.vl,s$=I.Ah,sk=I.ic,sC=I.JJ,sS=I.WL,sO=I.qj,sT=I.OT,sA=I.iH,sj=I.t8,sE=I.Um,sP=I.YS,sR=I.XI,sN=I.IU,sD=I.Vh,sM=I.BK,sI=I.oR,sL=I.SU,sF=I.l1,sB=I.fb,sU=I.sj,sH=I.HA,sV=I.Rr,sz=I.i8,sJ=I.YP,sK=I.m0,sq=I.Rh,sZ=I.Ob;export{a2 as EffectScope,a3 as computed,a9 as customRef,a4 as default,a8 as defineAsyncComponent,a6 as defineComponent,a7 as del,a5 as effectScope,st as getCurrentInstance,se as getCurrentScope,sn as h,sr as inject,so as isProxy,si as isReactive,sa as isReadonly,ss as isRef,sc as isShallow,su as markRaw,sl as mergeDefaults,sf as nextTick,sp as onActivated,sd as onBeforeMount,sv as onBeforeUnmount,sh as onBeforeUpdate,s_ as onDeactivated,sm as onErrorCaptured,sg as onMounted,sy as onRenderTracked,sb as onRenderTriggered,sw as onScopeDispose,sx as onServerPrefetch,s$ as onUnmounted,sk as onUpdated,sC as provide,sS as proxyRefs,sO as reactive,sT as readonly,sA as ref,sj as set,sE as shallowReactive,sP as shallowReadonly,sR as shallowRef,sN as toRaw,sD as toRef,sM as toRefs,sI as triggerRef,sL as unref,sF as useAttrs,sB as useCssModule,sU as useCssVars,sH as useListeners,sV as useSlots,sz as version,sJ as watch,sK as watchEffect,sq as watchPostEffect,sZ as watchSyncEffect}; \ No newline at end of file diff --git a/ssr-vue2-remote/src/components/layout.vue.16eacfd2.final.css b/ssr-vue2-remote/src/components/layout.vue.16eacfd2.final.css new file mode 100644 index 00000000..6f9ac913 --- /dev/null +++ b/ssr-vue2-remote/src/components/layout.vue.16eacfd2.final.css @@ -0,0 +1 @@ +.tip[data-v-b2ae6f88]{background:#efefef;padding:10px}.tip a[data-v-b2ae6f88]{color:#00f}.menu-list[data-v-b2ae6f88]{display:flex}.menu-list-item[data-v-b2ae6f88]{background:#efefef;border-radius:5px;margin:5px;padding:10px}.menu-list-item[data-v-b2ae6f88]:hover{background:#00f}.menu-list-item:hover a[data-v-b2ae6f88]{color:#fff}.menu-list-item-link[data-v-b2ae6f88]{color:#000;text-decoration:none}head{--webpack-__ssr_vue__remote__-706:&_192,Ā490} \ No newline at end of file diff --git a/ssr-vue2-remote/src/components/layout.vue.782be1f1.final.js b/ssr-vue2-remote/src/components/layout.vue.782be1f1.final.js new file mode 100644 index 00000000..5682e9e1 --- /dev/null +++ b/ssr-vue2-remote/src/components/layout.vue.782be1f1.final.js @@ -0,0 +1 @@ +import*as t from"ssr-vue2-remote/npm/vue";var e,r,n,o,i={92:function(t,e,r){r.d(e,{Z:function(){return n}});function n(t,e,r,n,o,i,s,a){var l,u="function"==typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=r,u._compiled=!0),n&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),s?(l=function(t){!(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)&&"undefined"!=typeof __VUE_SSR_CONTEXT__&&(t=__VUE_SSR_CONTEXT__),o&&o.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},u._ssrRegister=l):o&&(l=a?function(){o.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:o),l){if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(t,e){return l.call(e),c(t,e)}}else{var p=u.beforeCreate;u.beforeCreate=p?[].concat(p,l):[l]}}return{exports:t,options:u}}},946:function(e){e.exports=t}},s={};function a(t){var e=s[t];if(void 0!==e)return e.exports;var r=s[t]={exports:{}};return i[t](r,r.exports,a),r.exports}a.m=i,a.d=function(t,e){for(var r in e)a.o(e,r)&&!a.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},a.k=function(t){return""+t+".css"},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.rv=function(){return"1.1.0"},(()=>{var t;if("string"==typeof import.meta.url&&(t=import.meta.url),!t)throw Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t+"../../"})(),e={},r="__ssr_vue__remote__",n="data-webpack-loading",o=function(t,e,o,i,s){var l,u,c="chunk-"+t;if(!i){for(var p=document.getElementsByTagName("link"),f=0;f{var s,l,u="",c="",p="",f={},d="--webpack-"+r+"-706",h=1,_={};try{!n&&(n=o(i));for(var m=n.sheet.cssRules||n.sheet.rules,v=m.length-1;v>-1&&!s;){var b=m[v--].style;if(!!b)s=b.getPropertyValue(d)}}catch(t){}if(!s&&(s=getComputedStyle(document.head).getPropertyValue(d)),!s)return;var g,y={},C=s[0],k=C,w=C,x=256;for(l=1;l65535&&(x=256,y={}),k=g;for(l=0,s=w;h;l++)58==(h=s.charCodeAt(l))?(c=u,u=""):47==h?(u=u.replace(/^_/,""),c=c.replace(/^_/,""),p?_.push(c,p,u):f[c]=void 0===f[c]?u:f[c]+" "+u,u="",c="",p=""):38==h?a.r(f):h&&44!=h?92==h?u+=s[++l]:64==h?(p=u,u=""):u+=s[l]:(t[u=u.replace(/^_/,"")]=((t,e,r)=>{!function(t,e){for(var r=0;rc});let u=(0,a("946").defineComponent)({__name:"layout",setup:t=>({__sfc:!0})});a("490");let c=(0,a("92").Z)(u,function(){var t=this._self._c;return this._self._setupProxy,t("div",{staticClass:"layout"},[this._m(0),this._v(" "),this._m(1),this._v(" "),t("main",[this._t("default")],2)])},[function(){var t=this._self._c;return this._self._setupProxy,t("div",{staticClass:"tip"},[this._v("\n 我是一个来自于 "),t("a",{staticClass:"menu-list-item-link",attrs:{href:"https://github.com/dp-os/gez/blob/master/examples/ssr-vue2-remote/src/components/layout.vue",rel:"noopener",target:"_blank"}},[this._v("ssr-vue2-remote")]),this._v(" 服务的组件。\n ")])},function(){var t=this._self._c;return this._self._setupProxy,t("header",{staticClass:"menu-list"},[t("div",{staticClass:"menu-list-item"},[t("a",{staticClass:"menu-list-item-link",attrs:{href:"https://github.com/dp-os/gez",target:"_blank"}},[this._v("github")])]),this._v(" "),t("div",{staticClass:"menu-list-item"},[t("a",{staticClass:"menu-list-item-link",attrs:{href:"https://www.npmjs.com/package/@gez/core",target:"_blank"}},[this._v("npm")])])])}],!1,null,"b2ae6f88",null).exports;var p=l.Z;export{p as default}; \ No newline at end of file diff --git a/ssr-vue2-remote/src/entry.client.78e281fd.final.js b/ssr-vue2-remote/src/entry.client.78e281fd.final.js new file mode 100644 index 00000000..107d1e61 --- /dev/null +++ b/ssr-vue2-remote/src/entry.client.78e281fd.final.js @@ -0,0 +1 @@ +import*as e from"ssr-vue2-remote/npm/vue";var t,r,n,o,i,a,u,s={946:function(t){t.exports=e}},c={};function l(e){var t=c[e];if(void 0!==t)return t.exports;var r=c[e]={exports:{}};return s[e](r,r.exports,l),r.exports}l.m=s,l.d=function(e,t){for(var r in t)l.o(t,r)&&!l.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},l.f={},l.e=function(e){return Promise.all(Object.keys(l.f).reduce(function(t,r){return l.f[r](e,t),t},[]))},l.k=function(e){return"chunks/"+e+".8b723d12.final.css"},l.u=function(e){return"chunks/"+e+".74223083.final.js"},l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.rv=function(){return"1.1.0"},(()=>{var e;if("string"==typeof import.meta.url&&(e=import.meta.url),!e)throw Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),l.p=e+"../"})(),t={},r="__ssr_vue__remote__",n=(e,n,o)=>{var a,u,s="",c="",f="",d={},p="--webpack-"+r+"-"+o,h=1,m={};try{!n&&(n=i(o));for(var v=n.sheet.cssRules||n.sheet.rules,b=v.length-1;b>-1&&!a;){var y=v[b--].style;if(!!y)a=y.getPropertyValue(p)}}catch(e){}if(!a&&(a=getComputedStyle(document.head).getPropertyValue(p)),!a)return[];var g,k={},w=a[0],A=w,_=w,P=256;for(u=1;u65535&&(P=256,k={}),A=g;for(u=0,a=_;h;u++)58==(h=a.charCodeAt(u))?(c=s,s=""):47==h?(s=s.replace(/^_/,""),c=c.replace(/^_/,""),f?m.push(c,f,s):d[c]=void 0===d[c]?s:d[c]+" "+s,s="",c="",f=""):38==h?l.r(d):h&&44!=h?92==h?s+=a[++u]:64==h?(f=s,s=""):s+=a[u]:(e[s=s.replace(/^_/,"")]=((e,t,r)=>{!function(e,t){for(var r=0;rl.e("44").then(l.bind(l,166)));({app:new f.default({render:e=>e(d)})}).app.$mount('[data-server-rendered="true"]'); \ No newline at end of file diff --git a/ssr-vue2-remote/src/entry.client.ee65e65a.final.css b/ssr-vue2-remote/src/entry.client.ee65e65a.final.css new file mode 100644 index 00000000..3f1ba50b --- /dev/null +++ b/ssr-vue2-remote/src/entry.client.ee65e65a.final.css @@ -0,0 +1 @@ +html,body{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:0;padding:0}head{--webpack-__ssr_vue__remote__-891:&_605} \ No newline at end of file diff --git a/ssr-vue3/importmap.01318e694d673e9e.final.js b/ssr-vue3/importmap.01318e694d673e9e.final.js new file mode 100644 index 00000000..fcc56ec2 --- /dev/null +++ b/ssr-vue3/importmap.01318e694d673e9e.final.js @@ -0,0 +1 @@ +(t=>{let r="ssr-vue3",e="__importmap__",c=t[e]=t[e]||{},s=c.imports=c.imports||{},i=new URL(document.currentScript.src).pathname.split("/"+r+"/"),n=t=>r+t.substring(1);Object.entries({"./src/entry.client":"./src/entry.client.b6883e8d.final.js"}).forEach(([t,r])=>{s[n(t)]=i[0]+"/"+n(r)})})(globalThis); \ No newline at end of file diff --git a/ssr-vue3/importmap.js b/ssr-vue3/importmap.js new file mode 100644 index 00000000..fcc56ec2 --- /dev/null +++ b/ssr-vue3/importmap.js @@ -0,0 +1 @@ +(t=>{let r="ssr-vue3",e="__importmap__",c=t[e]=t[e]||{},s=c.imports=c.imports||{},i=new URL(document.currentScript.src).pathname.split("/"+r+"/"),n=t=>r+t.substring(1);Object.entries({"./src/entry.client":"./src/entry.client.b6883e8d.final.js"}).forEach(([t,r])=>{s[n(t)]=i[0]+"/"+n(r)})})(globalThis); \ No newline at end of file diff --git a/ssr-vue3/index.html b/ssr-vue3/index.html new file mode 100644 index 00000000..d5b48905 --- /dev/null +++ b/ssr-vue3/index.html @@ -0,0 +1,17 @@ + + + + + + + + Gez + + + +

rspack + vue3

Count value: 1
+ + + + + diff --git a/ssr-vue3/manifest.json b/ssr-vue3/manifest.json new file mode 100644 index 00000000..4fd15170 --- /dev/null +++ b/ssr-vue3/manifest.json @@ -0,0 +1,29 @@ +{ + "name": "ssr-vue3", + "version": "1.0.0", + "hash": "01318e694d673e9e", + "type": "module", + "exports": { + "./src/entry.client": "./src/entry.client.b6883e8d.final.js" + }, + "buildFiles": [ + "importmap.js", + "importmap.01318e694d673e9e.final.js", + "src/entry.client.c3405dab.final.css", + "src/entry.client.b6883e8d.final.js" + ], + "chunks": { + "ssr-vue3@src/entry.client.ts": { + "js": "./src/entry.client.b6883e8d.final.js", + "css": [ + "./src/entry.client.c3405dab.final.css" + ], + "resources": [], + "sizes": { + "js": 371917, + "css": 665, + "resource": 0 + } + } + } +} \ No newline at end of file diff --git a/ssr-vue3/src/entry.client.b6883e8d.final.js b/ssr-vue3/src/entry.client.b6883e8d.final.js new file mode 100644 index 00000000..3ec81a5d --- /dev/null +++ b/ssr-vue3/src/entry.client.b6883e8d.final.js @@ -0,0 +1,23 @@ +let e,t,n,r,i,o,l,s,a,u,c,p,d,f,h,m;var g,y,b,_,w,x,k={},S={};function C(e){var t=S[e];if(void 0!==t)return t.exports;var n=S[e]={exports:{}};return k[e](n,n.exports,C),n.exports}function $(e){let t=Object.create(null);for(let n of e.split(","))t[n]=1;return e=>e in t}C.m=k,C.k=function(e){return""+e+".css"},C.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),C.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},C.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},C.rv=function(){return"1.1.0"},(()=>{var e;if("string"==typeof import.meta.url&&(e=import.meta.url),!e)throw Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),C.p=e+"../"})(),g={},y="__ssr_vue___",b="data-webpack-loading",_=function(e,t,n,r,i){var o,l,s="chunk-"+e;if(!r){for(var a=document.getElementsByTagName("link"),u=0;u{var r,i,o="",l="",s="",a={},u="--webpack-"+y+"-"+n,c=1,p={};try{!t&&(t=_(n));for(var d=t.sheet.cssRules||t.sheet.rules,f=d.length-1;f>-1&&!r;){var h=d[f--].style;if(!!h)r=h.getPropertyValue(u)}}catch(e){}if(!r&&(r=getComputedStyle(document.head).getPropertyValue(u)),!r)return;var m,b={},w=r[0],x=w,k=w,S=256;for(i=1;i65535&&(S=256,b={}),x=m;for(i=0,r=k;c;i++)58==(c=r.charCodeAt(i))?(l=o,o=""):47==c?(o=o.replace(/^_/,""),l=l.replace(/^_/,""),s?p.push(l,s,o):a[l]=void 0===a[l]?o:a[l]+" "+o,o="",l="",s=""):38==c?C.r(a):c&&44!=c?92==c?o+=r[++i]:64==c?(s=o,o=""):o+=r[i]:(e[o=o.replace(/^_/,"")]=((e,t,n)=>{!function(e,t){for(var n=0;n{},j=()=>!1,E=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&(e.charCodeAt(2)>122||97>e.charCodeAt(2)),M=e=>e.startsWith("onUpdate:"),P=Object.assign,R=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},N=Object.prototype.hasOwnProperty,F=(e,t)=>N.call(e,t),I=Array.isArray,L=e=>"[object Map]"===J(e),V=e=>"[object Set]"===J(e),D=e=>"[object RegExp]"===J(e),U=e=>"function"==typeof e,H=e=>"string"==typeof e,B=e=>"symbol"==typeof e,W=e=>null!==e&&"object"==typeof e,z=e=>(W(e)||U(e))&&U(e.then)&&U(e.catch),q=Object.prototype.toString,J=e=>q.call(e),K=e=>J(e).slice(8,-1),G=e=>"[object Object]"===J(e),Y=e=>H(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,X=$(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Z=$("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),Q=e=>{let t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ee=/-(\w)/g,et=Q(e=>e.replace(ee,(e,t)=>t?t.toUpperCase():"")),en=/\B([A-Z])/g,er=Q(e=>e.replace(en,"-$1").toLowerCase()),ei=Q(e=>e.charAt(0).toUpperCase()+e.slice(1)),eo=Q(e=>e?`on${ei(e)}`:""),el=(e,t)=>!Object.is(e,t),es=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},eu=e=>{let t=parseFloat(e);return isNaN(t)?e:t},ec=e=>{let t=H(e)?Number(e):NaN;return isNaN(t)?e:t},ep=()=>e||(e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==C.g?C.g:{});function ed(e){if(I(e)){let t={};for(let n=0;n{if(e){let n=e.split(eh);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}(r):ed(r);if(i)for(let e in i)t[e]=i[e]}return t}if(H(e)||W(e))return e}const ef=/;(?![^(]*\))/g,eh=/:([^]+)/,em=/\/\*[^]*?\*\//g;function eg(e){let t="";if(H(e))t=e;else if(I(e))for(let n=0;n?@[\\\]^`{|}~]/g,eO=e=>!!(e&&!0===e.__v_isRef),eT=e=>H(e)?e:null==e?"":I(e)||W(e)&&(e.toString===q||!U(e.toString))?eO(e)?eT(e.value):JSON.stringify(e,eA,2):String(e),eA=(e,t)=>{if(eO(t))return eA(e,t.value);if(L(t))return{[`Map(${t.size})`]:[...t.entries()].reduce((e,[t,n],r)=>(e[ej(t,r)+" =>"]=n,e),{})};if(V(t))return{[`Set(${t.size})`]:[...t.values()].map(e=>ej(e))};else if(B(t))return ej(t);else if(W(t)&&!I(t)&&!G(t))return String(t);return t},ej=(e,t="")=>{var n;return B(e)?`Symbol(${null!=(n=e.description)?n:t})`:e};function eE(e,...t){console.warn(`[Vue warn] ${e}`,...t)}class eM{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=t,!e&&t&&(this.index=(t.scopes||(t.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){let e,t;if(this._isPaused=!0,this.scopes)for(e=0,t=this.scopes.length;e0)){if(i){let e=i;for(i=void 0;e;){let t=e.next;e.next=void 0,e.flags&=-9,e=t}}for(;r;){let t=r;for(r=void 0;t;){let n=t.next;if(t.next=void 0,t.flags&=-9,1&t.flags)try{t.trigger()}catch(t){!e&&(e=t)}t=n}}if(e)throw e}}function eV(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function eD(e){let t;let n=e.depsTail,r=n;for(;r;){let e=r.prevDep;-1===r.version?(r===n&&(n=e),eB(r),function(e){let{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=e}e.deps=t,e.depsTail=n}function eU(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(eH(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty||!1}function eH(e){if(4&e.flags&&!(16&e.flags))return;if(e.flags&=-17,e.globalVersion===eG)return;e.globalVersion=eG;let t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!eU(e)){e.flags&=-3;return}let r=n,i=eW;n=e,eW=!0;try{eV(e);let n=e.fn(e._value);(0===t.version||el(n,e._value))&&(e._value=n,t.version++)}catch(e){throw t.version++,e}finally{n=r,eW=i,eD(e),e.flags&=-3}}function eB(e,t=!1){let{dep:n,prevSub:r,nextSub:i}=e;if(r&&(r.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=r,e.nextSub=void 0),n.subsHead===e&&(n.subsHead=i),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let e=n.computed.deps;e;e=e.nextDep)eB(e,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}let eW=!0;const ez=[];function eq(){ez.push(eW),eW=!1}function eJ(){let e=ez.pop();eW=void 0===e||e}function eK(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let e=n;n=void 0;try{t()}finally{n=e}}}let eG=0;class eY{constructor(e,t){this.sub=e,this.dep=t,this.version=t.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class eX{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.subsHead=void 0}track(e){if(!n||!eW||n===this.computed)return;let t=this.activeLink;if(void 0===t||t.sub!==n)t=this.activeLink=new eY(n,this),n.deps?(t.prevDep=n.depsTail,n.depsTail.nextDep=t,n.depsTail=t):n.deps=n.depsTail=t,function e(t){if(t.dep.sc++,4&t.sub.flags){let n=t.dep.computed;if(n&&!t.dep.subs){n.flags|=20;for(let t=n.deps;t;t=t.nextDep)e(t)}let r=t.dep.subs;r!==t&&(t.prevSub=r,r&&(r.nextSub=t)),void 0===t.dep.subsHead&&(t.dep.subsHead=t),t.dep.subs=t}}(t);else if(-1===t.version&&(t.version=this.version,t.nextDep)){let e=t.nextDep;e.prevDep=t.prevDep,t.prevDep&&(t.prevDep.nextDep=e),t.prevDep=n.depsTail,t.nextDep=void 0,n.depsTail.nextDep=t,n.depsTail=t,n.deps===t&&(n.deps=e)}return n.onTrack&&n.onTrack(P({effect:n},e)),t}trigger(e){this.version++,eG++,this.notify(e)}notify(e){eN++;try{for(let t=this.subsHead;t;t=t.nextSub)t.sub.onTrigger&&!(8&t.sub.flags)&&t.sub.onTrigger(P({effect:t.sub},e));for(let e=this.subs;e;e=e.prevSub)e.sub.notify()&&e.sub.dep.notify()}finally{eL()}}}const eZ=new WeakMap,eQ=Symbol("Object iterate"),e0=Symbol("Map keys iterate"),e1=Symbol("Array iterate");function e2(e,t,r){if(eW&&n){let n=eZ.get(e);!n&&eZ.set(e,n=new Map);let i=n.get(r);!i&&(n.set(r,i=new eX),i.map=n,i.key=r),i.track({target:e,type:t,key:r})}}function e6(e,t,n,r,i,o){let l=eZ.get(e);if(!l){eG++;return}let s=l=>{l&&l.trigger({target:e,type:t,key:n,newValue:r,oldValue:i,oldTarget:o})};if(eN++,"clear"===t)l.forEach(s);else{let i=I(e),o=i&&Y(n);if(i&&"length"===n){let e=Number(r);l.forEach((t,n)=>{("length"===n||n===e1||!B(n)&&n>=e)&&s(t)})}else switch((void 0!==n||l.has(void 0))&&s(l.get(n)),o&&s(l.get(e1)),t){case"add":i?o&&s(l.get("length")):(s(l.get(eQ)),L(e)&&s(l.get(e0)));break;case"delete":!i&&(s(l.get(eQ)),L(e)&&s(l.get(e0)));break;case"set":L(e)&&s(l.get(eQ))}}eL()}function e4(e){let t=tR(e);return t===e?t:(e2(t,"iterate",e1),tM(e)?t:t.map(tN))}function e3(e){return e2(e=tR(e),"iterate",e1),e}const e8={__proto__:null,[Symbol.iterator](){return e5(this,Symbol.iterator,tN)},concat(...e){return e4(this).concat(...e.map(e=>I(e)?e4(e):e))},entries(){return e5(this,"entries",e=>(e[1]=tN(e[1]),e))},every(e,t){return e9(this,"every",e,t,void 0,arguments)},filter(e,t){return e9(this,"filter",e,t,e=>e.map(tN),arguments)},find(e,t){return e9(this,"find",e,t,tN,arguments)},findIndex(e,t){return e9(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return e9(this,"findLast",e,t,tN,arguments)},findLastIndex(e,t){return e9(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return e9(this,"forEach",e,t,void 0,arguments)},includes(...e){return tt(this,"includes",e)},indexOf(...e){return tt(this,"indexOf",e)},join(e){return e4(this).join(e)},lastIndexOf(...e){return tt(this,"lastIndexOf",e)},map(e,t){return e9(this,"map",e,t,void 0,arguments)},pop(){return tn(this,"pop")},push(...e){return tn(this,"push",e)},reduce(e,...t){return te(this,"reduce",e,t)},reduceRight(e,...t){return te(this,"reduceRight",e,t)},shift(){return tn(this,"shift")},some(e,t){return e9(this,"some",e,t,void 0,arguments)},splice(...e){return tn(this,"splice",e)},toReversed(){return e4(this).toReversed()},toSorted(e){return e4(this).toSorted(e)},toSpliced(...e){return e4(this).toSpliced(...e)},unshift(...e){return tn(this,"unshift",e)},values(){return e5(this,"values",tN)}};function e5(e,t,n){let r=e3(e),i=r[t]();return r!==e&&!tM(e)&&(i._next=i.next,i.next=()=>{let e=i._next();return e.value&&(e.value=n(e.value)),e}),i}const e7=Array.prototype;function e9(e,t,n,r,i,o){let l=e3(e),s=l!==e&&!tM(e),a=l[t];if(a!==e7[t]){let t=a.apply(e,o);return s?tN(t):t}let u=n;l!==e&&(s?u=function(t,r){return n.call(this,tN(t),r,e)}:n.length>2&&(u=function(t,r){return n.call(this,t,r,e)}));let c=a.call(l,u,r);return s&&i?i(c):c}function te(e,t,n,r){let i=e3(e),o=n;return i!==e&&(tM(e)?n.length>3&&(o=function(t,r,i){return n.call(this,t,r,i,e)}):o=function(t,r,i){return n.call(this,t,tN(r),i,e)}),i[t](o,...r)}function tt(e,t,n){let r=tR(e);e2(r,"iterate",e1);let i=r[t](...n);return(-1===i||!1===i)&&tP(n[0])?(n[0]=tR(n[0]),r[t](...n)):i}function tn(e,t,n=[]){eq(),eN++;let r=tR(e)[t].apply(e,n);return eL(),eJ(),r}const tr=$("__proto__,__v_isRef,__isVue"),ti=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>"arguments"!==e&&"caller"!==e).map(e=>Symbol[e]).filter(B));function to(e){!B(e)&&(e=String(e));let t=tR(this);return e2(t,"has",e),t.hasOwnProperty(e)}class tl{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){let r=this._isReadonly,i=this._isShallow;if("__v_isReactive"===t)return!r;if("__v_isReadonly"===t)return r;if("__v_isShallow"===t)return i;else if("__v_raw"===t)return n===(r?i?tC:tS:i?tk:tx).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;let o=I(e);if(!r){let e;if(o&&(e=e8[t]))return e;if("hasOwnProperty"===t)return to}let l=Reflect.get(e,t,tI(e)?e:n);return(B(t)?ti.has(t):tr(t))?l:(!r&&e2(e,"get",t),i)?l:tI(l)?o&&Y(t)?l:l.value:W(l)?r?tO(l):t$(l):l}}class ts extends tl{constructor(e=!1){super(!1,e)}set(e,t,n,r){let i=e[t];if(!this._isShallow){let t=tE(i);if(!tM(n)&&!tE(n)&&(i=tR(i),n=tR(n)),!I(e)&&tI(i)&&!tI(n))return!t&&(i.value=n,!0)}let o=I(e)&&Y(t)?Number(t)e,th=e=>Reflect.getPrototypeOf(e);function tm(e){return function(...t){{let n=t[0]?`on key "${t[0]}" `:"";eE(`${ei(e)} operation ${n}failed: target is readonly.`,tR(this))}return"delete"!==e&&("clear"===e?void 0:this)}}function tg(e,t){let n=function(e,t){let n={get(n){let r=this.__v_raw,i=tR(r),o=tR(n);!e&&(el(n,o)&&e2(i,"get",n),e2(i,"get",o));let{has:l}=th(i),s=t?tf:e?tF:tN;return l.call(i,n)?s(r.get(n)):l.call(i,o)?s(r.get(o)):void(r!==i&&r.get(n))},get size(){let t=this.__v_raw;return e||e2(tR(t),"iterate",eQ),Reflect.get(t,"size",t)},has(t){let n=this.__v_raw,r=tR(n),i=tR(t);return!e&&(el(t,i)&&e2(r,"has",t),e2(r,"has",i)),t===i?n.has(t):n.has(t)||n.has(i)},forEach(n,r){let i=this,o=i.__v_raw,l=tR(o),s=t?tf:e?tF:tN;return e||e2(l,"iterate",eQ),o.forEach((e,t)=>n.call(r,s(e),s(t),i))}};return P(n,e?{add:tm("add"),set:tm("set"),delete:tm("delete"),clear:tm("clear")}:{add(e){!t&&!tM(e)&&!tE(e)&&(e=tR(e));let n=tR(this);return!th(n).has.call(n,e)&&(n.add(e),e6(n,"add",e,e)),this},set(e,n){!t&&!tM(n)&&!tE(n)&&(n=tR(n));let r=tR(this),{has:i,get:o}=th(r),l=i.call(r,e);l?tw(r,i,e):(e=tR(e),l=i.call(r,e));let s=o.call(r,e);return r.set(e,n),l?el(n,s)&&e6(r,"set",e,n,s):e6(r,"add",e,n),this},delete(e){let t=tR(this),{has:n,get:r}=th(t),i=n.call(t,e);i?tw(t,n,e):(e=tR(e),i=n.call(t,e));let o=r?r.call(t,e):void 0,l=t.delete(e);return i&&e6(t,"delete",e,void 0,o),l},clear(){let e=tR(this),t=0!==e.size,n=L(e)?new Map(e):new Set(e),r=e.clear();return t&&e6(e,"clear",void 0,void 0,n),r}}),["keys","values","entries",Symbol.iterator].forEach(r=>{var i,o,l;n[r]=(i=r,o=e,l=t,function(...e){let t=this.__v_raw,n=tR(t),r=L(n),s="entries"===i||i===Symbol.iterator&&r,a=t[i](...e),u=l?tf:o?tF:tN;return o||e2(n,"iterate","keys"===i&&r?e0:eQ),{next(){let{value:e,done:t}=a.next();return t?{value:e,done:t}:{value:s?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}})}),n}(e,t);return(t,r,i)=>{if("__v_isReactive"===r)return!e;if("__v_isReadonly"===r)return e;if("__v_raw"===r)return t;return Reflect.get(F(n,r)&&r in t?n:t,r,i)}}const tv={get:tg(!1,!1)},ty={get:tg(!1,!0)},tb={get:tg(!0,!1)},t_={get:tg(!0,!0)};function tw(e,t,n){let r=tR(n);if(r!==n&&t.call(e,r)){let t=K(e);eE(`Reactive ${t} contains both the raw and reactive versions of the same object${"Map"===t?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}const tx=new WeakMap,tk=new WeakMap,tS=new WeakMap,tC=new WeakMap;function t$(e){return tE(e)?e:tA(e,!1,tu,tv,tx)}function tO(e){return tA(e,!0,tc,tb,tS)}function tT(e){return tA(e,!0,td,t_,tC)}function tA(e,t,n,r,i){var o;if(!W(e))return eE(`value cannot be made ${t?"readonly":"reactive"}: ${String(e)}`),e;if(e.__v_raw&&!(t&&e.__v_isReactive))return e;let l=i.get(e);if(l)return l;let s=(o=e).__v_skip||!Object.isExtensible(o)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}(K(o));if(0===s)return e;let a=new Proxy(e,2===s?r:n);return i.set(e,a),a}function tj(e){return tE(e)?tj(e.__v_raw):!!(e&&e.__v_isReactive)}function tE(e){return!!(e&&e.__v_isReadonly)}function tM(e){return!!(e&&e.__v_isShallow)}function tP(e){return!!e&&!!e.__v_raw}function tR(e){let t=e&&e.__v_raw;return t?tR(t):e}const tN=e=>W(e)?t$(e):e,tF=e=>W(e)?tO(e):e;function tI(e){return!!e&&!0===e.__v_isRef}class tL{constructor(e,t){this.dep=new eX,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=t?e:tR(e),this._value=t?e:tN(e),this.__v_isShallow=t}get value(){return this.dep.track({target:this,type:"get",key:"value"}),this._value}set value(e){let t=this._rawValue,n=this.__v_isShallow||tM(e)||tE(e);el(e=n?e:tR(e),t)&&(this._rawValue=e,this._value=n?e:tN(e),this.dep.trigger({target:this,type:"set",key:"value",newValue:e,oldValue:t}))}}const tV={get:(e,t,n)=>{var r;return"__v_raw"===t?e:tI(r=Reflect.get(e,t,n))?r.value:r},set:(e,t,n,r)=>{let i=e[t];return tI(i)&&!tI(n)?(i.value=n,!0):Reflect.set(e,t,n,r)}};function tD(e){return tj(e)?e:new Proxy(e,tV)}class tU{constructor(e,t,n){this.fn=e,this.setter=t,this._value=void 0,this.dep=new eX(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=eG-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!t,this.isSSR=n}notify(){if(this.flags|=16,!(8&this.flags)&&n!==this)return eF(this,!0),!0}get value(){let e=this.dep.track({target:this,type:"get",key:"value"});return eH(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter?this.setter(e):eE("Write operation failed: computed value is readonly")}}const tH={},tB=new WeakMap;function tW(e,t=1/0,n){if(t<=0||!W(e)||e.__v_skip||(n=n||new Set).has(e))return e;if(n.add(e),t--,tI(e))tW(e.value,t,n);else if(I(e))for(let r=0;r{tW(e,t,n)});else if(G(e)){for(let r in e)tW(e[r],t,n);for(let r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&tW(e[r],t,n)}return e}const tz=[];function tq(e){tz.push(e)}function tJ(){tz.pop()}let tK=!1;function tG(e,...t){if(tK)return;tK=!0,eq();let n=tz.length?tz[tz.length-1].component:null,r=n&&n.appContext.config.warnHandler,i=function(){let e=tz[tz.length-1];if(!e)return[];let t=[];for(;e;){let n=t[0];n&&n.vnode===e?n.recurseCount++:t.push({vnode:e,recurseCount:0});let r=e.component&&e.component.parent;e=r&&r.vnode}return t}();if(r)tX(r,n,11,[e+t.map(e=>{var t,n;return null!=(n=null==(t=e.toString)?void 0:t.call(e))?n:JSON.stringify(e)}).join(""),n&&n.proxy,i.map(({vnode:e})=>`at <${i2(n,e.type)}>`).join("\n"),i]);else{let n=[`[Vue warn]: ${e}`,...t];i.length&&n.push(` +`,...function(e){let t=[];return e.forEach((e,n)=>{t.push(...0===n?[]:[` +`],...function({vnode:e,recurseCount:t}){let n=t>0?`... (${t} recursive calls)`:"",r=!!e.component&&null==e.component.parent,i=` at <${i2(e.component,e.type,r)}`,o=">"+n;return e.props?[i,...function(e){let t=[],n=Object.keys(e);return n.slice(0,3).forEach(n=>{t.push(...function e(t,n,r){if(H(n))return n=JSON.stringify(n),r?n:[`${t}=${n}`];if("number"==typeof n||"boolean"==typeof n||null==n)return r?n:[`${t}=${n}`];if(tI(n))return n=e(t,tR(n.value),!0),r?n:[`${t}=Ref<`,n,">"];else if(U(n))return[`${t}=fn${n.name?`<${n.name}>`:""}`];else return n=tR(n),r?n:[`${t}=`,n]}(n,e[n]))}),n.length>3&&t.push(" ..."),t}(e.props),o]:[i+o]}(e))}),t}(i)),console.warn(...n)}eJ(),tK=!1}const tY={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function tX(e,t,n,r){try{return r?e(...r):e()}catch(e){tQ(e,t,n)}}function tZ(e,t,n,r){if(U(e)){let i=tX(e,t,n,r);return i&&z(i)&&i.catch(e=>{tQ(e,t,n)}),i}if(I(e)){let i=[];for(let o=0;o=nr(n)?t0.push(e):t0.splice(function(e){let t=t1+1,n=t0.length;for(;t>>1,i=t0[r],o=nr(i);oni(t,e);try{for(t1=0;t1nr(e)-nr(t));if(t2.length=0,t6){t6.push(...t);return}for(t4=0,t6=t,e=e||new Map;t4null==e.id?2&e.flags?-1:1/0:e.id;function ni(e,t){let n=e.get(t)||0;if(n>100){let e=t.i,n=e&&i1(e.type);return tQ(`Maximum recursive updates exceeded${n?` in component <${n}>`:""}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,null,10),!0}return e.set(t,n+1),!1}let no=!1;const nl=new Map;ep().__VUE_HMR_RUNTIME__={createRecord:np(na),rerender:np(function(e,t){let n=ns.get(e);if(!!n)n.initialDef.render=t,[...n.instances].forEach(e=>{t&&(e.render=t,nu(e.type).render=t),e.renderCache=[],no=!0,e.update(),no=!1})}),reload:np(function(e,t){let n=ns.get(e);if(!n)return;t=nu(t),nc(n.initialDef,t);let r=[...n.instances];for(let e=0;e{no=!0,i.parent.update(),no=!1,l.delete(i)}):i.appContext.reload?i.appContext.reload():"undefined"!=typeof window?window.location.reload():console.warn("[HMR] Root or manually mounted instance modified. Full reload required."),i.root.ce&&i!==i.root&&i.root.ce._removeChildStyle(o)}ne(()=>{nl.clear()})})};const ns=new Map;function na(e,t){return!ns.has(e)&&(ns.set(e,{initialDef:nu(t),instances:new Set}),!0)}function nu(e){return i6(e)?e.__vccOpts:e}function nc(e,t){for(let n in P(e,t),e)"__file"!==n&&!(n in t)&&delete e[n]}function np(e){return(t,n)=>{try{return e(t,n)}catch(e){console.error(e),console.warn("[HMR] Something went wrong during Vue component hot-reload. Full reload required.")}}}let nd=[],nf=!1;function nh(e,...t){o?o.emit(e,...t):!nf&&nd.push({event:e,args:t})}const nm=nb("component:added"),ng=nb("component:updated"),nv=nb("component:removed"),ny=e=>{o&&"function"==typeof o.cleanupBuffer&&!o.cleanupBuffer(e)&&nv(e)};function nb(e){return t=>{nh(e,t.appContext.app,t.uid,t.parent?t.parent.uid:void 0,t)}}const n_=nx("perf:start"),nw=nx("perf:end");function nx(e){return(t,n,r)=>{nh(e,t.appContext.app,t.uid,t,n,r)}}let nk=null,nS=null;function nC(e){let t=nk;return nk=e,nS=e&&e.type.__scopeId||null,t}function n$(e){Z(e)&&tG("Do not use built-in directive ids as custom directive id: "+e)}function nO(e,t,n,r){let i=e.dirs,o=t&&t.dirs;for(let l=0;le.__isTeleport,nj=Symbol("_leaveCb"),nE=Symbol("_enterCb"),nM=[Function,Array],nP={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:nM,onEnter:nM,onAfterEnter:nM,onEnterCancelled:nM,onBeforeLeave:nM,onLeave:nM,onAfterLeave:nM,onLeaveCancelled:nM,onBeforeAppear:nM,onAppear:nM,onAfterAppear:nM,onAppearCancelled:nM},nR=e=>{let t=e.subTree;return t.component?nR(t.component):t};function nN(e){let t=e[0];if(e.length>1){let n=!1;for(let r of e)if(r.type!==ib){if(n){tG(" can only be used on a single element or component. Use for lists.");break}t=r,n=!0}}return t}function nF(e,t){let{leavingVNodes:n}=e,r=n.get(t.type);return!r&&(r=Object.create(null),n.set(t.type,r)),r}function nI(e,t,n,r,i){let{appear:o,mode:l,persisted:s=!1,onBeforeEnter:a,onEnter:u,onAfterEnter:c,onEnterCancelled:p,onBeforeLeave:d,onLeave:f,onAfterLeave:h,onLeaveCancelled:m,onBeforeAppear:g,onAppear:y,onAfterAppear:b,onAppearCancelled:_}=t,w=String(e.key),x=nF(n,e),k=(e,t)=>{e&&tZ(e,r,9,t)},S=(e,t)=>{let n=t[1];k(e,t),I(e)?e.every(e=>e.length<=1)&&n():e.length<=1&&n()},C={mode:l,persisted:s,beforeEnter(t){let r=a;if(!n.isMounted){if(!o)return;r=g||a}t[nj]&&t[nj](!0);let i=x[w];i&&i$(e,i)&&i.el[nj]&&i.el[nj](),k(r,[t])},enter(e){let t=u,r=c,i=p;if(!n.isMounted){if(!o)return;t=y||u,r=b||c,i=_||p}let l=!1,s=e[nE]=t=>{!l&&(l=!0,t?k(i,[e]):k(r,[e]),C.delayedLeave&&C.delayedLeave(),e[nE]=void 0)};t?S(t,[e,s]):s()},leave(t,r){let i=String(e.key);if(t[nE]&&t[nE](!0),n.isUnmounting)return r();k(d,[t]);let o=!1,l=t[nj]=n=>{!o&&(o=!0,r(),n?k(m,[t]):k(h,[t]),t[nj]=void 0,x[i]===e&&delete x[i])};x[i]=e,f?S(f,[t,l]):l()},clone(e){let o=nI(e,t,n,r,i);return i&&i(o),o}};return C}function nL(e){if(n6(e))return(e=iE(e)).children=null,e}function nV(e){if(!n6(e))return nA(e.type)&&e.children?nN(e.children):e;if(e.component)return e.component.subTree;let{shapeFlag:t,children:n}=e;if(n){if(16&t)return n[0];if(32&t&&U(n.default))return n.default()}}function nD(e,t){6&e.shapeFlag&&e.component?(e.transition=t,nD(e.component.subTree,t)):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function nU(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}const nH=new WeakSet;function nB(e,t,n,r,i=!1){if(I(e)){e.forEach((e,o)=>nB(e,t&&(I(t)?t[o]:t),n,r,i));return}if(n2(r)&&!i)return;let o=4&r.shapeFlag?iZ(r.component):r.el,l=i?null:o,{i:s,r:a}=e;if(!s){tG("Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.");return}let u=t&&t.r,c=s.refs===O?s.refs={}:s.refs,p=s.setupState,d=tR(p),f=p===O?()=>!1:e=>(F(d,e)&&!tI(d[e])&&tG(`Template ref "${e}" used on a non-ref value. It will not work in the production build.`),!nH.has(d[e])&&F(d,e));if(null!=u&&u!==a&&(H(u)?(c[u]=null,f(u)&&(p[u]=null)):tI(u)&&(u.value=null)),U(a))tX(a,s,12,[l,c]);else{let t=H(a),r=tI(a);if(t||r){let s=()=>{if(e.f){let n=t?f(a)?p[a]:c[a]:a.value;i?I(n)&&R(n,o):I(n)?!n.includes(o)&&n.push(o):t?(c[a]=[o],f(a)&&(p[a]=c[a])):(a.value=[o],e.k&&(c[e.k]=a.value))}else t?(c[a]=l,f(a)&&(p[a]=l)):r?(a.value=l,e.k&&(c[e.k]=l)):tG("Invalid template ref type:",a,`(${typeof a})`)};l?(s.id=-1,rZ(s,n)):s()}else tG("Invalid template ref type:",a,`(${typeof a})`)}}let nW=!1;const nz=()=>{if(!nW)console.error("Hydration completed but contains mismatches."),nW=!0},nq=e=>e.namespaceURI.includes("svg")&&"foreignObject"!==e.tagName,nJ=e=>e.namespaceURI.includes("MathML"),nK=e=>{if(1===e.nodeType){if(nq(e))return"svg";if(nJ(e))return"mathml"}},nG=e=>8===e.nodeType;function nY(e){let{mt:t,p:n,o:{patchProp:r,createText:i,nextSibling:o,parentNode:l,remove:s,insert:a,createComment:u}}=e,c=(n,r,s,u,b,_=!1)=>{_=_||!!r.dynamicChildren;let w=nG(n)&&"["===n.data,x=()=>h(n,r,s,u,b,w),{type:k,ref:S,shapeFlag:C,patchFlag:$}=r,O=n.nodeType;r.el=n,ea(n,"__vnode",r,!0),ea(n,"__vueParentComponent",s,!0),-2===$&&(_=!1,r.dynamicChildren=null);let T=null;switch(k){case iy:3!==O?""===r.children?(a(r.el=i(""),l(n),n),T=n):T=x():(n.data!==r.children&&(tG("Hydration text mismatch in",n.parentNode,` + - rendered on server: ${JSON.stringify(n.data)} + - expected on client: ${JSON.stringify(r.children)}`),nz(),n.data=r.children),T=o(n));break;case ib:y(n)?(T=o(n),g(r.el=n.content.firstChild,n,s)):T=8!==O||w?x():o(n);break;case i_:if(w&&(O=(n=o(n)).nodeType),1===O||3===O){T=n;let e=!r.children.length;for(let t=0;t{l=l||!!t.dynamicChildren;let{type:a,props:u,patchFlag:c,shapeFlag:p,dirs:f,transition:h}=t,m="input"===a||"option"===a;{let a;f&&nO(t,null,n,"created");let c=!1;if(y(e)){c=r2(null,h)&&n&&n.vnode.props&&n.vnode.props.appear;let r=e.content.firstChild;c&&h.beforeEnter(r),g(r,e,n),t.el=e=r}if(16&p&&!(u&&(u.innerHTML||u.textContent))){let r=d(e.firstChild,t,e,n,i,o,l),a=!1;for(;r;){!n1(e,1)&&(!a&&(tG("Hydration children mismatch on",e,` +Server rendered element contains more child nodes than client vdom.`),a=!0),nz());let t=r;r=r.nextSibling,s(t)}}else if(8&p){let n=t.children;"\n"===n[0]&&("PRE"===e.tagName||"TEXTAREA"===e.tagName)&&(n=n.slice(1)),e.textContent!==n&&(!n1(e,0)&&(tG("Hydration text content mismatch on",e,` + - rendered on server: ${e.textContent} + - expected on client: ${t.children}`),nz()),e.textContent=t.children)}if(u){let i=e.tagName.includes("-");for(let o in u)!(f&&f.some(e=>e.dir.created))&&function(e,t,n,r,i){let o,l,s,a;if("class"===t)s=e.getAttribute("class"),a=eg(n),!function(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}(nX(s||""),nX(a))&&(o=2,l="class");else if("style"===t){s=e.getAttribute("style")||"",a=H(n)?n:function(e){let t="";if(!e||H(e))return t;for(let n in e){let r=e[n];if(H(r)||"number"==typeof r){let e=n.startsWith("--")?n:er(n);t+=`${e}:${r};`}}return t}(ed(n));let t=nZ(s),u=nZ(a);if(r.dirs)for(let{dir:e,value:t}of r.dirs)"show"===e.name&&!t&&u.set("display","none");i&&function e(t,n,r){let i=t.subTree;if(t.getCssVars&&(n===i||i&&i.type===iv&&i.children.includes(n))){let e=t.getCssVars();for(let t in e){var o=void 0;r.set(`--${t.replace(e$,e=>`\\${e}`)}`,String(e[t]))}}n===i&&t.parent&&e(t.parent,t.vnode,r)}(i,r,u),!function(e,t){if(e.size!==t.size)return!1;for(let[n,r]of e)if(r!==t.get(n))return!1;return!0}(t,u)&&(o=3,l="style")}else(e instanceof SVGElement&&eC(t)||e instanceof HTMLElement&&(ex(t)||eS(t)))&&(ex(t)?(s=e.hasAttribute(t),a=ek(n)):null==n?(s=e.hasAttribute(t),a=!1):(s=e.hasAttribute(t)?e.getAttribute(t):"value"===t&&"TEXTAREA"===e.tagName&&e.value,a=!!function(e){if(null==e)return!1;let t=typeof e;return"string"===t||"number"===t||"boolean"===t}(n)&&String(n)),s!==a&&(o=4,l=t));if(null!=o&&!n1(e,o)){let t=e=>!1===e?"(not rendered)":`${l}="${e}"`,n=`Hydration ${n0[o]} mismatch on`;return tG(n,e,` + - rendered on server: ${t(s)} + - expected on client: ${t(a)} + Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead. + You should fix the source of the mismatch.`),!0}return!1}(e,o,u[o],t,n)&&nz(),(m&&(o.endsWith("value")||"indeterminate"===o)||E(o)&&!X(o)||"."===o[0]||i)&&r(e,o,null,u[o],void 0,n)}(a=u&&u.onVnodeBeforeMount)&&iI(a,n,t),f&&nO(t,null,n,"beforeMount"),((a=u&&u.onVnodeMounted)||f||c)&&ig(()=>{a&&iI(a,n,t),c&&h.enter(e),f&&nO(t,null,n,"mounted")},i)}return e.nextSibling},d=(e,t,r,l,s,u,p)=>{p=p||!!t.dynamicChildren;let d=t.children,f=d.length,h=!1;for(let t=0;t{let{slotScopeIds:c}=t;c&&(i=i?i.concat(c):c);let p=l(e),f=d(o(e),t,p,n,r,i,s);return f&&nG(f)&&"]"===f.data?o(t.anchor=f):(nz(),a(t.anchor=u("]"),p,f),f)},h=(e,t,r,i,a,u)=>{if(!n1(e.parentElement,1)&&(tG(`Hydration node mismatch: +- rendered on server:`,e,3===e.nodeType?"(text)":nG(e)&&"["===e.data?"(start of fragment)":"",` +- expected on client:`,t.type),nz()),t.el=null,u){let t=m(e);for(;;){let n=o(e);if(n&&n!==t)s(n);else break}}let c=o(e),p=l(e);return s(e),n(null,t,p,c,r,i,nK(p),a),c},m=(e,t="[",n="]")=>{let r=0;for(;e;)if((e=o(e))&&nG(e)&&(e.data===t&&r++,e.data===n)){if(0===r)return o(e);r--}return e},g=(e,t,n)=>{let r=t.parentNode;r&&r.replaceChild(e,t);let i=n;for(;i;)i.vnode.el===t&&(i.vnode.el=i.subTree.el=e),i=i.parent},y=e=>1===e.nodeType&&"TEMPLATE"===e.tagName;return[(e,t)=>{if(!t.hasChildNodes()){tG("Attempting to hydrate existing markup but container is empty. Performing full mount instead."),n(null,e,t),nn(),t._vnode=e;return}c(t.firstChild,e,null,null,null),nn(),t._vnode=e},c]}function nX(e){return new Set(e.trim().split(/\s+/))}function nZ(e){let t=new Map;for(let n of e.split(";")){let[e,r]=n.split(":");e=e.trim(),r=r&&r.trim(),e&&r&&t.set(e,r)}return t}const nQ="data-allow-mismatch",n0={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function n1(e,t){if(0===t||1===t)for(;e&&!e.hasAttribute(nQ);)e=e.parentElement;let n=e&&e.getAttribute(nQ);if(null==n)return!1;if(""===n)return!0;{let e=n.split(",");return!!(0===t&&e.includes("children"))||n.split(",").includes(n0[t])}}ep().requestIdleCallback||(e=>setTimeout(e,1)),ep().cancelIdleCallback||(e=>clearTimeout(e));const n2=e=>!!e.type.__asyncLoader,n6=e=>e.type.__isKeepAlive;function n4(e,t){n8(e,"a",t)}function n3(e,t){n8(e,"da",t)}function n8(e,t,n=iD){let r=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(n5(t,r,n),n){let e=n.parent;for(;e&&e.parent;)n6(e.parent.vnode)&&function(e,t,n,r){let i=n5(t,e,r,!0);ri(()=>{R(r[t],i)},n)}(r,t,n,e),e=e.parent}}function n5(e,t,n=iD,r=!1){if(n){let i=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...r)=>{eq();let i=iH(n),o=tZ(t,n,e,r);return i(),eJ(),o});return r?i.unshift(o):i.push(o),o}{let t=eo(tY[e].replace(/ hook$/,""));tG(`${t} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.`)}}const n7=e=>(t,n=iD)=>{(!iJ||"sp"===e)&&n5(e,(...e)=>t(...e),n)},n9=n7("bm"),re=n7("m"),rt=n7("bu"),rn=n7("u"),rr=n7("bum"),ri=n7("um"),ro=n7("sp"),rl=n7("rtg"),rs=n7("rtc");function ra(e,t=iD){n5("ec",e,t)}const ru=Symbol.for("v-ndc"),rc=e=>e?iq(e)?iZ(e):rc(e.parent):null,rp=P(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>tT(e.props),$attrs:e=>tT(e.attrs),$slots:e=>tT(e.slots),$refs:e=>tT(e.refs),$parent:e=>rc(e.parent),$root:e=>rc(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ry(e),$forceUpdate:e=>e.f||(e.f=()=>{t7(e.update)}),$nextTick:e=>e.n||(e.n=t5.bind(e.proxy)),$watch:e=>r9.bind(e)}),rd=e=>"_"===e||"$"===e,rf=(e,t)=>e!==O&&!e.__isScriptSetup&&F(e,t),rh={get({_:e},t){let n,r,i;if("__v_skip"===t)return!0;let{ctx:o,setupState:l,data:s,props:a,accessCache:u,type:c,appContext:p}=e;if("__isVue"===t)return!0;if("$"!==t[0]){let r=u[t];if(void 0!==r)switch(r){case 1:return l[t];case 2:return s[t];case 4:return o[t];case 3:return a[t]}else{if(rf(l,t))return u[t]=1,l[t];if(s!==O&&F(s,t))return u[t]=2,s[t];if((n=e.propsOptions[0])&&F(n,t))return u[t]=3,a[t];if(o!==O&&F(o,t))return u[t]=4,o[t];rg&&(u[t]=0)}}let d=rp[t];if(d)return"$attrs"===t?(e2(e.attrs,"get",""),function(){io=!0}()):"$slots"===t&&e2(e,"get",t),d(e);if((r=c.__cssModules)&&(r=r[t]))return r;if(o!==O&&F(o,t))return u[t]=4,o[t];else{if(F(i=p.config.globalProperties,t))return i[t];nk&&(!H(t)||0!==t.indexOf("__v"))&&(s!==O&&rd(t[0])&&F(s,t)?tG(`Property ${JSON.stringify(t)} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`):e===nk&&tG(`Property ${JSON.stringify(t)} was accessed during render but is not defined on instance.`))}},set({_:e},t,n){let{data:r,setupState:i,ctx:o}=e;if(rf(i,t))return i[t]=n,!0;if(i.__isScriptSetup&&F(i,t))return tG(`Cannot mutate