@inpageedit/core 0.14.0 → 0.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -8
- package/dist/{BasePlugin-CU8beLYu.js → BasePlugin-YOi2_vUo.js} +2 -2
- package/dist/{BasePlugin-CU8beLYu.js.map → BasePlugin-YOi2_vUo.js.map} +1 -1
- package/dist/{PluginPrefSync-B-gPsC2n.js → PluginPrefSync-jTNlRQE-.js} +3 -3
- package/dist/{PluginPrefSync-B-gPsC2n.js.map → PluginPrefSync-jTNlRQE-.js.map} +1 -1
- package/dist/{PluginStoreApp-CDteVCBG.js → PluginStoreApp-CGNxKXAN.js} +2 -2
- package/dist/{PluginStoreApp-CDteVCBG.js.map → PluginStoreApp-CGNxKXAN.js.map} +1 -1
- package/dist/{Preferences-85Q9FAmb.js → Preferences-BF2fcXrn.js} +140 -132
- package/dist/Preferences-BF2fcXrn.js.map +1 -0
- package/dist/{index-DjPpAyfE.js → index-3NZkG2a3.js} +3 -3
- package/dist/{index-DjPpAyfE.js.map → index-3NZkG2a3.js.map} +1 -1
- package/dist/{index-DGtq21uW.js → index-BBNseJXG.js} +3 -3
- package/dist/{index-DGtq21uW.js.map → index-BBNseJXG.js.map} +1 -1
- package/dist/{index-Ci82vLXg.js → index-BrYKe18j.js} +4 -4
- package/dist/index-BrYKe18j.js.map +1 -0
- package/dist/{index-19CgGBI0.js → index-C3m6ng6b.js} +234 -231
- package/dist/index-C3m6ng6b.js.map +1 -0
- package/dist/index-D-fW3ESK.js +195 -0
- package/dist/index-D-fW3ESK.js.map +1 -0
- package/dist/{index-CQr1DJ8n.js → index-D6zFqL2u.js} +4 -4
- package/dist/index-D6zFqL2u.js.map +1 -0
- package/dist/{index-BrtFJ-M0.js → index-D97lUU3h.js} +3 -3
- package/dist/{index-BrtFJ-M0.js.map → index-D97lUU3h.js.map} +1 -1
- package/dist/{index-BKIf3i0I.js → index-DELHsLHS.js} +5 -5
- package/dist/{index-BKIf3i0I.js.map → index-DELHsLHS.js.map} +1 -1
- package/dist/{index-CVTBg5O9.js → index-Dclp60EO.js} +21 -17
- package/dist/index-Dclp60EO.js.map +1 -0
- package/dist/{index-DXL7teb0.js → index-DmLoihN1.js} +4 -4
- package/dist/{index-DXL7teb0.js.map → index-DmLoihN1.js.map} +1 -1
- package/dist/{index-D3iZhRMJ.js → index-QtEF2mzS.js} +156 -127
- package/dist/index-QtEF2mzS.js.map +1 -0
- package/dist/index.d.ts +73 -22
- package/dist/index.js +5 -5
- package/dist/plugins/index.js +10 -10
- package/dist/services/index.js +1 -1
- package/lib/index.umd.js +10 -10
- package/lib/index.umd.js.map +1 -1
- package/package.json +5 -5
- package/dist/Preferences-85Q9FAmb.js.map +0 -1
- package/dist/index-19CgGBI0.js.map +0 -1
- package/dist/index-CQr1DJ8n.js.map +0 -1
- package/dist/index-CVTBg5O9.js.map +0 -1
- package/dist/index-Ci82vLXg.js.map +0 -1
- package/dist/index-D3iZhRMJ.js.map +0 -1
- package/dist/index-rpiO9fpc.js +0 -145
- package/dist/index-rpiO9fpc.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-QtEF2mzS.js","sources":["../src/plugins/plugin-store/schema.ts","../src/plugins/plugin-store/index.tsx"],"sourcesContent":["import Schema from 'schemastery'\n\nexport const PLUGIN_STORE_REGISTRY_MANIFEST_VERSION = 1\n\nexport interface PluginStoreRegistry {\n manifest_version: number\n name: string\n base_url: string\n homepage?: string\n maintainers?: PluginStoreRegistryMaintainer[]\n repository?: PluginStoreRegistryRepository\n packages: PluginStorePackage[]\n}\n\nexport interface PluginStoreRegistryMaintainer {\n name: string\n email?: string\n}\n\nexport interface PluginStoreRegistryRepository {\n type: string\n url: string\n}\n\nexport interface PluginStorePackage {\n id: string\n name: string\n version: string\n description?: string\n author?: string\n license?: string\n loader: PluginStorePackageLoader\n}\n\nexport interface PluginStorePackageLoader {\n kind: 'autoload' | 'module' | 'umd' | 'styles'\n entry?: string\n styles?: string[]\n main_export?: string\n}\n\nexport namespace PluginStoreSchemas {\n export const PackageLoader = new Schema<PluginStorePackageLoader>(\n Schema.object({\n kind: Schema.union(['autoload', 'module', 'umd', 'styles']).required().default('autoload'),\n entry: Schema.string(),\n styles: Schema.array(Schema.string()),\n main_export: Schema.string(),\n })\n )\n\n export const Package = new Schema<PluginStorePackage>(\n Schema.object({\n id: Schema.string().required(),\n name: Schema.string().required(),\n version: Schema.string().required(),\n description: Schema.string(),\n author: Schema.string(),\n license: Schema.string(),\n loader: PackageLoader.required(),\n })\n )\n\n export const RegistryMaintainer = new Schema<PluginStoreRegistryMaintainer>(\n Schema.object({\n name: Schema.string().required(),\n email: Schema.string(),\n })\n )\n\n export const RegistryRepository = new Schema<PluginStoreRegistryRepository>(\n Schema.object({\n type: Schema.string().required(),\n url: Schema.string().required(),\n })\n )\n\n export const Registry = new Schema<PluginStoreRegistry>(\n Schema.object({\n manifest_version: Schema.number().min(PLUGIN_STORE_REGISTRY_MANIFEST_VERSION).required(),\n name: Schema.string().required(),\n base_url: Schema.string().required(),\n homepage: Schema.string(),\n maintainers: Schema.array(RegistryMaintainer),\n repository: RegistryRepository,\n packages: Schema.array(Package).required(),\n })\n )\n}\n","import { InPageEdit, Schema } from '@/InPageEdit'\nimport { ForkScope, Inject } from '@cordisjs/core'\nimport { defineAsyncComponent, type App as VueApp } from 'vue'\nimport { PluginStoreRegistry, PluginStoreSchemas } from './schema'\nimport { AbstractIPEStorageManager } from '@/services/storage/index.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n store: PluginPluginStore\n }\n interface PreferencesMap {\n 'pluginStore.registries': string[]\n 'pluginStore.plugins': { source?: 'online_manifest' | 'npm'; registry: string; id: string }[]\n 'pluginStore.cdnForNpm': string\n }\n interface Events {\n 'plugin-store/registry-fetched'(payload: {\n ctx: InPageEdit\n registry: PluginStoreRegistry\n }): void\n 'plugin-store/registry-not-found'(payload: { ctx: InPageEdit; registryUrl: string }): void\n 'plugin-store/registry-removed'(payload: { ctx: InPageEdit; registryUrl: string }): void\n 'plugin-store/plugin-installed'(payload: {\n ctx: InPageEdit\n registry: PluginStoreRegistry\n id: string\n // 新安装 or 通过用户配置加载\n by: 'new-added' | 'user-preference'\n }): void\n 'plugin-store/plugin-uninstalled'(payload: {\n ctx: InPageEdit\n registry: PluginStoreRegistry\n id: string\n }): void\n }\n}\n\nexport type PluginStoreRegistrySource = 'online_manifest' | 'npm'\n\nconst tryGetGlobalPlugin = (main_export: string) => {\n if (!main_export) return null\n try {\n return main_export\n .split('.')\n .reduce<any>((acc, key) => (acc == null ? acc : acc[key]), globalThis as any)\n } catch {\n return null\n }\n}\n\n/**\n * 解析资源URL\n * @param resourcePath - entry或style路径,可能是相对路径或完整URL\n * @param baseUrl - registry中的base_url,可能是完整URL或相对路径\n * @param registryUrl - registry的URL(必须是绝对URL,作为相对baseUrl时的基准)\n * @returns 解析后的完整URL\n */\nconst resolveResourceUrl = (resourcePath: string, baseUrl: string, registryUrl: string): string => {\n // 完整URL:直接返回\n if (/^https?:\\/\\//i.test(resourcePath)) return resourcePath\n\n // 兜底:规范化一个“带尾斜杠”的 helper\n const ensureSlash = (s: string) => (s.endsWith('/') ? s : s + '/')\n\n // 如果 baseUrl 是完整URL:直接用它当基准(并确保目录语义)\n if (/^https?:\\/\\//i.test(baseUrl)) {\n const normalizedBase = ensureSlash(baseUrl)\n return new URL(resourcePath, normalizedBase).href\n }\n\n // baseUrl 是相对路径(如 './' 或 '/plugins')\n // 先把 baseUrl 相对于 registryUrl 解析成绝对URL\n // 注意:当 baseUrl 是 '/plugins' 这种根相对路径时,new URL 会以 registryUrl 的 origin 作为根。\n const registryAbs = (() => {\n try {\n return new URL(registryUrl).href\n } catch {\n // 极端情况(开发环境传了相对 registry),用页面 origin 兜底\n return new URL(registryUrl, location.origin).href\n }\n })()\n\n const resolvedBaseUrl = new URL(ensureSlash(baseUrl), registryAbs).href\n return new URL(resourcePath, resolvedBaseUrl).href\n}\n\n@Inject(['storage', 'preferences', 'resourceLoader', '$'])\nexport class PluginPluginStore extends BasePlugin {\n // re-export for external usage\n static readonly PluginStoreSchemas = PluginStoreSchemas\n static REGISTRY_INFO_CACHE_TTL = 1000 * 60 * 60 * 24 // 1 day\n static REGISTRY_INFO_STORAGE_NAME = 'plugin-store-registry'\n static REGISTRY_ETAG_STORAGE_NAME = 'psreg-etag'\n private regInfoDB: AbstractIPEStorageManager<PluginStoreRegistry>\n\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'plugin-store')\n ctx.set('store', this)\n this.regInfoDB = ctx.storage.createDatabase<PluginStoreRegistry>(\n PluginPluginStore.REGISTRY_INFO_STORAGE_NAME,\n PluginPluginStore.REGISTRY_INFO_CACHE_TTL,\n 1,\n 'indexedDB'\n )\n }\n\n protected async start() {\n this._installUserPlugins()\n this._injectPreferenceUI()\n }\n\n private async _installUserPlugins() {\n const prefs = await this.ctx.preferences.get('pluginStore.plugins', [])\n if (!prefs?.length) {\n return\n }\n for (const pref of prefs) {\n this.install(pref.registry, pref.id, pref.source, 'user-preference')\n }\n }\n\n private async _createManagementApp() {\n const ctx = await this.ctx.withInject(['store'])\n const PluginStoreApp = defineAsyncComponent(() => import('./components/PluginStoreApp.vue'))\n const app = createVueAppWithIPE(ctx, PluginStoreApp)\n return app\n }\n\n private async _injectPreferenceUI() {\n const ctx = this.ctx\n const $ = ctx.$\n\n ctx.preferences.defineCategory({\n name: 'plugin-store',\n label: $`Plugin Store`,\n description: $`Plugin Store`,\n index: 90,\n autoGenerateForm: false,\n customRenderer: async ({ onUnmount }) => {\n const container = <div id=\"ipe-plugin-store-preferences-vue\"></div>\n const app = await this._createManagementApp()\n app.mount(container)\n\n onUnmount(() => {\n app.unmount()\n this.ctx.logger.debug('Plugin Store preferences app unmounted')\n })\n\n return (\n <section>\n {container}\n {/* <div className=\"theme-ipe-prose\">\n <hr />\n <div style={{ textAlign: 'center', marginBottom: '1em', fontSize: '0.8em' }}>\n 🚫 DO NOT edit fields below manually 🚫\n </div>\n </div> */}\n </section>\n )\n },\n })\n\n ctx.preferences.registerCustomConfig(\n 'plugin-store',\n Schema.object({\n 'pluginStore.registries': Schema.array(Schema.string())\n .default([\n import.meta.env.PROD\n ? Endpoints.PLUGIN_REGISTRY_URL\n : import.meta.resolve('/src/__mock__/plugin-registry/index.json'),\n ])\n .description($`Registry URLs`)\n .hidden(),\n 'pluginStore.cdnForNpm': Schema.string()\n .description($`CDN to install packages from npm`)\n .default('https://cdn.jsdelivr.net/npm/{{ package }}{{ version ? \"@\" + version : \"\" }}')\n .hidden(),\n 'pluginStore.plugins': Schema.array(\n Schema.object({\n source: Schema.union(['online_manifest', 'npm']).default('online_manifest'),\n registry: Schema.string().required(),\n id: Schema.string().required(),\n })\n )\n .description($`Installed plugins`)\n .default([])\n .hidden(),\n }),\n 'plugin-store'\n )\n }\n\n async showModal() {\n const modal = this.ctx.modal.show({\n title: $`Plugin Store`,\n sizeClass: 'small',\n })\n const container = <section id=\"ipe-plugin-store-vue\"></section>\n modal.setContent(container)\n const app = await this._createManagementApp()\n app.mount(container)\n modal.on(modal.Event.Close, () => {\n app.unmount()\n })\n return modal\n }\n\n private _installedPlugins = new Map<string, Promise<ForkScope<InPageEdit> | null>>()\n async install(\n registry: string,\n id: string,\n source: PluginStoreRegistrySource = 'online_manifest',\n _by: 'new-added' | 'user-preference' = 'new-added'\n ): Promise<ForkScope<InPageEdit> | null> {\n const registryInfo = await this.getRegistryInfo(registry, source)\n if (!registryInfo) {\n this.ctx.logger.warn(`Registry ${registry} not found`)\n return null\n }\n const key = `${registry}#${id}`\n if (this._installedPlugins.has(key)) {\n return (await this._installedPlugins.get(key)) ?? null\n }\n // 2) 把 registry 原始 URL 传进去,供 URL 解析使用\n const scope = this._installOneByRegistryInfo(registry, registryInfo, id)\n this._installedPlugins.set(key, scope)\n const fork = await scope\n if (fork) {\n this.ctx.emit('plugin-store/plugin-installed', {\n ctx: this.ctx,\n registry: registryInfo,\n id,\n by: _by,\n })\n }\n return fork\n }\n async uninstall(registry: string, id: string): Promise<boolean> {\n const promise = this._installedPlugins.get(`${registry}#${id}`)\n if (promise === void 0) {\n return true // not installed or already uninstalled\n }\n this._installedPlugins.delete(`${registry}#${id}`)\n const scope = await promise\n if (scope) {\n const disposed = scope.dispose?.() ?? true // disposed successfully\n try {\n const registryInfo =\n (await this.getRegistryCache(registry)) ||\n (await this.getRegistryInfo(registry).catch(() => null))\n if (registryInfo) {\n this.ctx.emit('plugin-store/plugin-uninstalled', {\n ctx: this.ctx,\n registry: registryInfo,\n id,\n })\n }\n } catch {}\n return disposed\n }\n return true // not a plugin, just removed from the list\n }\n\n async addToPreferences(registry: string, id: string) {\n let prefs =\n (await this.ctx.preferences.get<{ registry: string; id: string }[]>('pluginStore.plugins')) ||\n []\n const existed = prefs.some((p) => p.registry === registry && p.id === id)\n if (existed) {\n return true\n }\n prefs.push({ registry, id })\n await this.ctx.preferences.set('pluginStore.plugins', prefs)\n return true\n }\n async removeFromPreferences(registry: string, id: string) {\n let prefs =\n (await this.ctx.preferences.get<{ registry: string; id: string }[]>('pluginStore.plugins')) ||\n []\n prefs = prefs.filter((p) => p.registry !== registry || p.id !== id)\n await this.ctx.preferences.set('pluginStore.plugins', prefs)\n return true\n }\n\n async installAndSetPreference(registry: string, id: string) {\n await this.addToPreferences(registry, id)\n return this.install(registry, id, 'online_manifest', 'new-added')\n }\n async uninstallAndRemovePreference(registry: string, id: string) {\n await this.removeFromPreferences(registry, id)\n return this.uninstall(registry, id)\n }\n\n // 3) 增加 registryUrl 参数\n private async _installOneByRegistryInfo(\n registryUrl: string,\n registryInfo: PluginStoreRegistry,\n id: string\n ): Promise<ForkScope<InPageEdit> | null> {\n const baseUrl = registryInfo.base_url\n const pkg = registryInfo.packages.find((p) => p.id === id)\n if (!pkg) {\n this.ctx.logger.warn(`Package ${id} not found in registry ${registryUrl}`)\n return null\n }\n\n const loader = pkg.loader\n const { kind, entry = 'index.js', styles = [], main_export = null } = loader\n\n // 4) 统一用 resolveResourceUrl 解析入口\n let entryUrl: string | null = null\n if (kind !== 'styles') {\n if (!entry) {\n this.ctx.logger.warn(`Entry url missing for ${id}`, loader)\n return null\n }\n try {\n entryUrl = resolveResourceUrl(entry, baseUrl, registryUrl)\n } catch (e) {\n this.ctx.logger.warn(\n `Failed to resolve entry \"${entry}\" with base \"${baseUrl}\" and registry \"${registryUrl}\"`,\n e\n )\n return null\n }\n }\n\n const datasets = {\n 'data-plugin-registry': registryUrl,\n 'data-plugin-id': id,\n }\n\n let fork: ForkScope<InPageEdit> | null = null\n\n switch (kind) {\n case 'autoload': {\n fork = this.ctx.plugin({\n inject: ['resourceLoader'],\n name: `plugin-store-${registryUrl}-${id}`,\n apply: (ctx) => {\n if (!entryUrl) return\n ctx.resourceLoader.loadScript(entryUrl, { ...datasets })\n },\n })\n break\n }\n case 'module': {\n if (!entryUrl) {\n this.ctx.logger.warn(`Entry url missing for module kind, package ${id}`)\n return null\n }\n const apply = await import(/* @vite-ignore */ entryUrl).then(\n (m) => (main_export ? m[main_export] : m.default) ?? m\n )\n if (!apply) {\n this.ctx.logger.warn(`Main export ${main_export} not found in module ${entryUrl}`)\n return null\n }\n fork = this.ctx.plugin(apply)\n break\n }\n case 'umd': {\n let apply = tryGetGlobalPlugin(main_export!)\n if (!apply) {\n if (!entryUrl) {\n this.ctx.logger.warn(`Entry url missing for umd kind, package ${id}`)\n return null\n }\n await this.ctx.resourceLoader.loadScript(entryUrl, { ...datasets })\n apply = tryGetGlobalPlugin(main_export!)\n }\n if (!apply) {\n this.ctx.logger.warn(\n `Main export ${main_export} not found on globalThis after loading ${entryUrl}`\n )\n return null\n }\n fork = this.ctx.plugin(apply)\n break\n }\n case 'styles': {\n // 没有脚本,仅样式。下面统一样式注入逻辑会覆盖\n break\n }\n }\n\n // 5) 统一解析并注入样式(兼容绝对URL与相对 + base_url 的组合)\n if (styles && styles.length > 0) {\n let urls: string[] = []\n try {\n urls = styles.map((u) => resolveResourceUrl(u, baseUrl, registryUrl)).filter(Boolean)\n } catch (e) {\n this.ctx.logger.warn(`Failed to resolve styles for ${id}`, styles, e)\n }\n\n // 确保存在父 fork\n fork ||= this.ctx.plugin({ name: `plugin-store-${registryUrl}-${id}`, apply() {} })\n\n // 在子插件里加载样式,并在卸载时清理\n fork.ctx.plugin({\n inject: ['resourceLoader'],\n name: `plugin-store-${registryUrl}-${id}-styles`,\n apply: (ctx) => {\n urls.forEach((u) => ctx.resourceLoader.loadStyle(u, { ...datasets }))\n ctx.on('dispose', () => {\n try {\n urls.forEach((u) => ctx.resourceLoader.removeStyle(u))\n } catch (e) {\n console.info('styles cleanup failed', e)\n }\n })\n },\n })\n }\n\n return fork\n }\n\n validateRegistry(data: any): PluginStoreRegistry {\n return PluginStoreSchemas.Registry(data)\n }\n\n async getRegistryInfo(\n registry: string,\n source: PluginStoreRegistrySource = 'online_manifest',\n noCache = false\n ): Promise<PluginStoreRegistry> {\n try {\n let info: PluginStoreRegistry\n switch (source) {\n case 'online_manifest': {\n info = await this._fetchOnlineRegistryInfo(registry, noCache)\n this.logger.debug('Fetched registry info from online manifest', info)\n this.setRegistryCache(registry, info)\n break\n }\n default: {\n throw new Error(`Unsupported registry source: ${source}`)\n }\n }\n\n return info\n } catch (e) {\n this.ctx.logger.warn('Failed to fetch registry info', e)\n }\n\n const info = await this.getRegistryCache(registry)\n if (!info) {\n this.ctx.emit('plugin-store/registry-not-found', {\n ctx: this.ctx,\n registryUrl: registry,\n })\n throw new Error(`Failed to fetch registry info: ${registry}`)\n }\n return info\n }\n\n private _onlineRegistryQueries = new Map<string, Promise<PluginStoreRegistry>>()\n private async _fetchOnlineRegistryInfo(\n registry: string,\n noCache = false\n ): Promise<PluginStoreRegistry> {\n if (!noCache && this._onlineRegistryQueries.has(registry)) {\n return await this._onlineRegistryQueries.get(registry)!\n }\n const task = async () => {\n const payload: RequestInit = {\n method: 'GET',\n }\n if (noCache) {\n payload.cache = 'no-store'\n }\n const response = await fetch(registry, payload)\n const data = await response.json()\n const validated = this.validateRegistry(data)\n // 成功在线获取并校验后触发事件\n this.ctx.emit('plugin-store/registry-fetched', {\n ctx: this.ctx,\n registry: validated,\n })\n return validated\n }\n const promise = task()\n this._onlineRegistryQueries.set(registry, promise)\n return await promise\n }\n\n private async getRegistryCache(registry: string) {\n const data = await this.regInfoDB.get(registry)\n if (data) {\n try {\n const validated = this.validateRegistry(data)\n return validated\n } catch (e) {\n this.ctx.logger.warn('Invalid cached registry', e, data)\n this.regInfoDB.delete(registry)\n }\n }\n return null\n }\n private async setRegistryCache(registry: string, data: PluginStoreRegistry) {\n return this.regInfoDB.set(registry, data)\n }\n private async deleteRegistryCache(registry: string) {\n await this.regInfoDB.delete(registry)\n this.ctx.emit('plugin-store/registry-removed', {\n ctx: this.ctx,\n registryUrl: registry,\n })\n }\n async clearAllRegistryCaches() {\n await this.regInfoDB.clear()\n this.ctx.logger.debug('All registry caches cleared')\n }\n\n /**\n * 刷新指定 registry 的缓存(重新从网络获取)\n */\n async refreshRegistryCache(registry: string): Promise<PluginStoreRegistry> {\n const data = await this.getRegistryInfo(registry, 'online_manifest', true)\n if (!data) {\n throw new Error(`Failed to refresh registry cache: ${registry}`)\n }\n this.ctx.logger.debug('Registry cache refreshed:', registry)\n return data\n }\n\n /**\n * 刷新所有已配置的 registry 缓存\n */\n async refreshAllRegistryCaches(): Promise<Record<string, PluginStoreRegistry | null>> {\n const registryUrls = (await this.ctx.preferences.get('pluginStore.registries')) || []\n const responses = await Promise.allSettled(\n registryUrls.map((url) => this.refreshRegistryCache(url))\n )\n const results: Record<string, PluginStoreRegistry | null> = {}\n for (const [index, response] of responses.entries()) {\n if (response.status === 'fulfilled') {\n results[registryUrls[index]] = response.value\n } else {\n results[registryUrls[index]] = null\n }\n }\n return results\n }\n}\n"],"names":["PLUGIN_STORE_REGISTRY_MANIFEST_VERSION","PluginStoreSchemas","Schema","_PluginPluginStore_decorators","_init","_a","tryGetGlobalPlugin","main_export","acc","key","resolveResourceUrl","resourcePath","baseUrl","registryUrl","ensureSlash","s","normalizedBase","registryAbs","resolvedBaseUrl","Inject","_PluginPluginStore","BasePlugin","ctx","prefs","pref","PluginStoreApp","defineAsyncComponent","createVueAppWithIPE","$","onUnmount","container","jsx","app","Endpoints","modal","registry","id","source","_by","registryInfo","scope","fork","promise","disposed","p","pkg","loader","kind","entry","styles","entryUrl","e","datasets","apply","m","urls","u","data","noCache","info","payload","validated","registryUrls","responses","url","results","index","response","__decoratorStart","__decorateElement","__runInitializers","PluginPluginStore"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Context, CordisError, EffectScope, Events as Events$1, ForkScope, ForkScope as ForkScope$1, Inject, Inject as Inject$1, Lifecycle, MainScope, Plugin, Registry, ScopeStatus, Service, symbols as CordisSymbols } from "@cordisjs/core";
|
|
2
2
|
import * as _inpageedit_logger0 from "@inpageedit/logger";
|
|
3
3
|
import { Logger } from "@inpageedit/logger";
|
|
4
|
-
import * as
|
|
4
|
+
import * as wiki_saikou3 from "wiki-saikou";
|
|
5
5
|
import { FexiosConfigs, MwApiParams } from "wiki-saikou";
|
|
6
6
|
import { FexiosFinalContext, MediaWikiApi, MwApi, MwApiParams as MwApiParams$1, MwApiResponse } from "wiki-saikou/browser";
|
|
7
7
|
import { IPEModal, IPEModalEvent, IPEModalOptions } from "@inpageedit/modal";
|
|
@@ -437,6 +437,13 @@ declare module '.' {
|
|
|
437
437
|
getSciprtUrl: WikiMetadataService['getSciprtUrl'];
|
|
438
438
|
getMainpageUrl: WikiMetadataService['getMainpageUrl'];
|
|
439
439
|
}
|
|
440
|
+
interface Events {
|
|
441
|
+
/**
|
|
442
|
+
* Application requires to clear caches and reload the page
|
|
443
|
+
* If returns true, the page will not be reloaded
|
|
444
|
+
*/
|
|
445
|
+
'clear-cache'(): AwaitAble<boolean | void>;
|
|
446
|
+
}
|
|
440
447
|
}
|
|
441
448
|
interface WikiMetadataKindMap {
|
|
442
449
|
siteinfo: WikiSiteInfo;
|
|
@@ -464,6 +471,7 @@ declare class WikiMetadataService extends Service {
|
|
|
464
471
|
fetchFromCache<T extends keyof WikiMetadataKindMap>(kind: T): Promise<WikiMetadataKindMap[T] | null>;
|
|
465
472
|
saveToCache<T extends keyof WikiMetadataKindMap>(kind: T, data: WikiMetadataKindMap[T]): Promise<TypedStorageEntry<WikiSiteInfo | WikiUserInfo>>;
|
|
466
473
|
invalidateCache<T extends keyof WikiMetadataKindMap>(kind: T): Promise<void>;
|
|
474
|
+
private onClearCache;
|
|
467
475
|
get _raw(): WikiMetadataKindMap;
|
|
468
476
|
get siteInfo(): WikiSiteInfo;
|
|
469
477
|
get general(): WikiSiteGeneralInfo;
|
|
@@ -789,6 +797,7 @@ declare class WikiTitleService extends Service {
|
|
|
789
797
|
//#endregion
|
|
790
798
|
//#region src/utils/computeable.d.ts
|
|
791
799
|
type ComputeAble<T> = (() => T | Promise<T>) | T;
|
|
800
|
+
type ComputeAbleSync<T> = (() => T) | T;
|
|
792
801
|
//#endregion
|
|
793
802
|
//#region src/services/PreferencesService.d.ts
|
|
794
803
|
// ↓ '@/InPageEdit'
|
|
@@ -1054,8 +1063,13 @@ interface I18nIndexV1 {
|
|
|
1054
1063
|
}
|
|
1055
1064
|
interface I18nIndexLanguage {
|
|
1056
1065
|
file: string;
|
|
1066
|
+
iso_name?: string;
|
|
1067
|
+
endonym?: string;
|
|
1057
1068
|
fallback?: string;
|
|
1058
|
-
data?:
|
|
1069
|
+
data?: I18nStringRecord;
|
|
1070
|
+
}
|
|
1071
|
+
interface I18nStringRecord {
|
|
1072
|
+
[key: string]: string | I18nStringRecord;
|
|
1059
1073
|
}
|
|
1060
1074
|
// ↓ '@/InPageEdit'
|
|
1061
1075
|
declare module '.' {
|
|
@@ -1155,7 +1169,9 @@ declare class I18nService extends Service {
|
|
|
1155
1169
|
/**
|
|
1156
1170
|
* 列出可用语言与文件(来源于 index.json)
|
|
1157
1171
|
*/
|
|
1158
|
-
getAvailableLanguageCodes():
|
|
1172
|
+
getAvailableLanguageCodes(): (I18nIndexLanguage & {
|
|
1173
|
+
code: string;
|
|
1174
|
+
})[];
|
|
1159
1175
|
private findLanguageMeta;
|
|
1160
1176
|
getI18nIndex(url: string, noCache?: boolean): Promise<I18nIndexV1>;
|
|
1161
1177
|
private fetchI18nIndex;
|
|
@@ -1172,6 +1188,7 @@ declare class I18nService extends Service {
|
|
|
1172
1188
|
* 清空缺失键记录
|
|
1173
1189
|
*/
|
|
1174
1190
|
clearMissingReport(): void;
|
|
1191
|
+
private onClearCache;
|
|
1175
1192
|
}
|
|
1176
1193
|
//#endregion
|
|
1177
1194
|
//#region src/InPageEdit.d.ts
|
|
@@ -1514,7 +1531,7 @@ interface PluginStoreRegistryMaintainer {
|
|
|
1514
1531
|
email?: string;
|
|
1515
1532
|
}
|
|
1516
1533
|
interface PluginStoreRegistryRepository {
|
|
1517
|
-
type:
|
|
1534
|
+
type: string;
|
|
1518
1535
|
url: string;
|
|
1519
1536
|
}
|
|
1520
1537
|
interface PluginStorePackage {
|
|
@@ -1555,6 +1572,31 @@ declare module '.' {
|
|
|
1555
1572
|
}[];
|
|
1556
1573
|
'pluginStore.cdnForNpm': string;
|
|
1557
1574
|
}
|
|
1575
|
+
interface Events {
|
|
1576
|
+
'plugin-store/registry-fetched'(payload: {
|
|
1577
|
+
ctx: InPageEdit;
|
|
1578
|
+
registry: PluginStoreRegistry;
|
|
1579
|
+
}): void;
|
|
1580
|
+
'plugin-store/registry-not-found'(payload: {
|
|
1581
|
+
ctx: InPageEdit;
|
|
1582
|
+
registryUrl: string;
|
|
1583
|
+
}): void;
|
|
1584
|
+
'plugin-store/registry-removed'(payload: {
|
|
1585
|
+
ctx: InPageEdit;
|
|
1586
|
+
registryUrl: string;
|
|
1587
|
+
}): void;
|
|
1588
|
+
'plugin-store/plugin-installed'(payload: {
|
|
1589
|
+
ctx: InPageEdit;
|
|
1590
|
+
registry: PluginStoreRegistry;
|
|
1591
|
+
id: string;
|
|
1592
|
+
by: 'new-added' | 'user-preference';
|
|
1593
|
+
}): void;
|
|
1594
|
+
'plugin-store/plugin-uninstalled'(payload: {
|
|
1595
|
+
ctx: InPageEdit;
|
|
1596
|
+
registry: PluginStoreRegistry;
|
|
1597
|
+
id: string;
|
|
1598
|
+
}): void;
|
|
1599
|
+
}
|
|
1558
1600
|
}
|
|
1559
1601
|
type PluginStoreRegistrySource = 'online_manifest' | 'npm';
|
|
1560
1602
|
declare class PluginPluginStore extends BasePlugin {
|
|
@@ -1571,7 +1613,7 @@ declare class PluginPluginStore extends BasePlugin {
|
|
|
1571
1613
|
private _injectPreferenceUI;
|
|
1572
1614
|
showModal(): Promise<CustomIPEModal>;
|
|
1573
1615
|
private _installedPlugins;
|
|
1574
|
-
install(registry: string, id: string, source?: PluginStoreRegistrySource): Promise<ForkScope$1<InPageEdit> | null>;
|
|
1616
|
+
install(registry: string, id: string, source?: PluginStoreRegistrySource, _by?: 'new-added' | 'user-preference'): Promise<ForkScope$1<InPageEdit> | null>;
|
|
1575
1617
|
uninstall(registry: string, id: string): Promise<boolean>;
|
|
1576
1618
|
addToPreferences(registry: string, id: string): Promise<boolean>;
|
|
1577
1619
|
removeFromPreferences(registry: string, id: string): Promise<boolean>;
|
|
@@ -1800,7 +1842,7 @@ declare class PluginQuickEdit extends BasePlugin {
|
|
|
1800
1842
|
constructor(ctx: InPageEdit);
|
|
1801
1843
|
protected start(): Promise<void> | void;
|
|
1802
1844
|
showModal(payload?: string | Partial<QuickEditOptions>): Promise<void>;
|
|
1803
|
-
handleSubmit(payload: QuickEditSubmitPayload): Promise<Required<
|
|
1845
|
+
handleSubmit(payload: QuickEditSubmitPayload): Promise<Required<wiki_saikou3.FexiosContext<wiki_saikou3.MwApiResponse<{
|
|
1804
1846
|
success: boolean;
|
|
1805
1847
|
}>>>>;
|
|
1806
1848
|
static readonly BUILT_IN_FONT_OPTIONS: string[];
|
|
@@ -1856,7 +1898,7 @@ declare class PluginQuickMove extends BasePlugin {
|
|
|
1856
1898
|
protected start(): Promise<void> | void;
|
|
1857
1899
|
private injectToolbox;
|
|
1858
1900
|
showModal(options?: Partial<QuickMoveOptions>): Promise<CustomIPEModal>;
|
|
1859
|
-
movePage(options: MovePageOptions): Promise<Required<
|
|
1901
|
+
movePage(options: MovePageOptions): Promise<Required<wiki_saikou3.FexiosContext<wiki_saikou3.MwApiResponse<{
|
|
1860
1902
|
success: boolean;
|
|
1861
1903
|
}>>>>;
|
|
1862
1904
|
}
|
|
@@ -1937,7 +1979,7 @@ declare class PluginQuickRedirect extends BasePlugin {
|
|
|
1937
1979
|
protected start(): Promise<void> | void;
|
|
1938
1980
|
protected stop(): Promise<void> | void;
|
|
1939
1981
|
showModal(options?: Partial<QuickRedirectOptions>): Promise<CustomIPEModal>;
|
|
1940
|
-
redirectPage(options: RedirectPageOptions): Promise<Required<
|
|
1982
|
+
redirectPage(options: RedirectPageOptions): Promise<Required<wiki_saikou3.FexiosContext<wiki_saikou3.MwApiResponse<{
|
|
1941
1983
|
success: boolean;
|
|
1942
1984
|
}>>>>;
|
|
1943
1985
|
}
|
|
@@ -1951,16 +1993,16 @@ declare module '.' {
|
|
|
1951
1993
|
interface Events {
|
|
1952
1994
|
'toolbox/button-added'(payload: {
|
|
1953
1995
|
ctx: InPageEdit;
|
|
1954
|
-
|
|
1996
|
+
payload: ToolboxButton;
|
|
1955
1997
|
}): void;
|
|
1956
1998
|
'toolbox/button-removed'(payload: {
|
|
1957
1999
|
ctx: InPageEdit;
|
|
1958
|
-
|
|
2000
|
+
payload: ToolboxButton;
|
|
1959
2001
|
}): void;
|
|
1960
2002
|
'toolbox/button-clicked'(payload: {
|
|
1961
2003
|
ctx: InPageEdit;
|
|
1962
|
-
|
|
1963
|
-
|
|
2004
|
+
event: MouseEvent;
|
|
2005
|
+
payload: ToolboxButton;
|
|
1964
2006
|
}): void;
|
|
1965
2007
|
'toolbox/toggle'(payload: {
|
|
1966
2008
|
ctx: InPageEdit;
|
|
@@ -1971,9 +2013,22 @@ declare module '.' {
|
|
|
1971
2013
|
toolboxAlwaysShow: boolean;
|
|
1972
2014
|
}
|
|
1973
2015
|
}
|
|
2016
|
+
interface ToolboxButton {
|
|
2017
|
+
id: string;
|
|
2018
|
+
group?: 'auto' | 'group1' | 'group2';
|
|
2019
|
+
icon: ComputeAbleSync<string | HTMLElement | SVGElement | ReactElement>;
|
|
2020
|
+
tooltip?: ComputeAbleSync<string | HTMLElement>;
|
|
2021
|
+
itemProps?: JSX.IntrinsicElements['li'];
|
|
2022
|
+
buttonProps?: JSX.IntrinsicElements['button'];
|
|
2023
|
+
onClick?: (event: MouseEvent) => void;
|
|
2024
|
+
index?: number;
|
|
2025
|
+
}
|
|
1974
2026
|
declare class PluginToolbox extends Service {
|
|
1975
2027
|
ctx: InPageEdit;
|
|
1976
2028
|
container: HTMLElement;
|
|
2029
|
+
private buttons;
|
|
2030
|
+
private seqCounter;
|
|
2031
|
+
private seqMap;
|
|
1977
2032
|
constructor(ctx: InPageEdit);
|
|
1978
2033
|
protected start(): Promise<void>;
|
|
1979
2034
|
protected stop(): void | Promise<void>;
|
|
@@ -1992,17 +2047,13 @@ declare class PluginToolbox extends Service {
|
|
|
1992
2047
|
private updateButtonDelays;
|
|
1993
2048
|
private createToolbox;
|
|
1994
2049
|
private normalizeButtonId;
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
tooltip?: string | HTMLElement;
|
|
2000
|
-
itemProps?: JSX.IntrinsicElements['li'];
|
|
2001
|
-
buttonProps?: JSX.IntrinsicElements['button'];
|
|
2002
|
-
onClick?: (event: MouseEvent) => void;
|
|
2003
|
-
index?: number;
|
|
2004
|
-
}): HTMLElement;
|
|
2050
|
+
private chooseAutoGroup;
|
|
2051
|
+
private orderKey;
|
|
2052
|
+
private compareButtons;
|
|
2053
|
+
addButton(payload: ToolboxButton): void;
|
|
2005
2054
|
removeButton(id: string): void;
|
|
2055
|
+
private renderButton;
|
|
2056
|
+
private renderAll;
|
|
2006
2057
|
getContainer(): HTMLElement;
|
|
2007
2058
|
get isOpened(): boolean;
|
|
2008
2059
|
toggle(force?: boolean): void;
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { I as s } from "./index-
|
|
2
|
-
import { m as l, $ as g, S as m } from "./index-
|
|
3
|
-
import { E as r } from "./Preferences-
|
|
4
|
-
import { C as S, s as I, a as P, F as y, I as U, e as M, M as h, R, S as O, b as D, c as b } from "./Preferences-
|
|
5
|
-
import { B as A } from "./BasePlugin-
|
|
1
|
+
import { I as s } from "./index-C3m6ng6b.js";
|
|
2
|
+
import { m as l, $ as g, S as m } from "./index-C3m6ng6b.js";
|
|
3
|
+
import { E as r } from "./Preferences-BF2fcXrn.js";
|
|
4
|
+
import { C as S, s as I, a as P, F as y, I as U, e as M, M as h, R, S as O, b as D, c as b } from "./Preferences-BF2fcXrn.js";
|
|
5
|
+
import { B as A } from "./BasePlugin-YOi2_vUo.js";
|
|
6
6
|
window.RLQ ||= [];
|
|
7
7
|
window.__IPE_MODULES__ ||= [];
|
|
8
8
|
w("InPageEdit#autoload", () => {
|
package/dist/plugins/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { PluginAnalytics as i } from "../index-
|
|
2
|
-
import { PluginInArticleLinks as u } from "../index-
|
|
3
|
-
import { PluginPluginStore as t } from "../index-
|
|
4
|
-
import { PluginPreferencesUI as f } from "../index-
|
|
5
|
-
import { PluginQuickDiff as g } from "../index-
|
|
6
|
-
import { PluginQuickEdit as m } from "../index-
|
|
7
|
-
import { PluginQuickMove as c } from "../index-
|
|
8
|
-
import { PluginQuickPreview as Q } from "../index-
|
|
9
|
-
import { PluginQuickRedirect as d } from "../index-
|
|
10
|
-
import { PluginToolbox as A } from "../index-
|
|
1
|
+
import { PluginAnalytics as i } from "../index-Dclp60EO.js";
|
|
2
|
+
import { PluginInArticleLinks as u } from "../index-BBNseJXG.js";
|
|
3
|
+
import { PluginPluginStore as t } from "../index-QtEF2mzS.js";
|
|
4
|
+
import { PluginPreferencesUI as f } from "../index-DELHsLHS.js";
|
|
5
|
+
import { PluginQuickDiff as g } from "../index-D97lUU3h.js";
|
|
6
|
+
import { PluginQuickEdit as m } from "../index-DmLoihN1.js";
|
|
7
|
+
import { PluginQuickMove as c } from "../index-BrYKe18j.js";
|
|
8
|
+
import { PluginQuickPreview as Q } from "../index-3NZkG2a3.js";
|
|
9
|
+
import { PluginQuickRedirect as d } from "../index-D6zFqL2u.js";
|
|
10
|
+
import { PluginToolbox as A } from "../index-D-fW3ESK.js";
|
|
11
11
|
export {
|
|
12
12
|
i as PluginAnalytics,
|
|
13
13
|
u as PluginInArticleLinks,
|
package/dist/services/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as r, C as i, b as s, N as c, P as o, M as v, c as S, R as t, a as d, W as P, d as M, e as l } from "../index-
|
|
1
|
+
import { A as r, C as i, b as s, N as c, P as o, M as v, c as S, R as t, a as d, W as P, d as M, e as l } from "../index-C3m6ng6b.js";
|
|
2
2
|
export {
|
|
3
3
|
r as ApiService,
|
|
4
4
|
i as CurrentPageService,
|