@vlian/framework 1.2.50 → 1.2.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analytics.umd.js +1 -1
- package/dist/index.umd.js +29 -24
- package/dist/index.umd.js.map +1 -1
- package/dist/kernel/kernel.cjs +2 -1
- package/dist/kernel/kernel.cjs.map +1 -1
- package/dist/kernel/kernel.js +2 -1
- package/dist/kernel/kernel.js.map +1 -1
- package/dist/kernel/manager/cacheManager.cjs +8 -6
- package/dist/kernel/manager/cacheManager.cjs.map +1 -1
- package/dist/kernel/manager/cacheManager.d.ts +3 -0
- package/dist/kernel/manager/cacheManager.js +8 -6
- package/dist/kernel/manager/cacheManager.js.map +1 -1
- package/dist/kernel/manager/persistence.cjs +3 -1
- package/dist/kernel/manager/persistence.cjs.map +1 -1
- package/dist/kernel/manager/persistence.js +3 -1
- package/dist/kernel/manager/persistence.js.map +1 -1
- package/dist/kernel/manager/themeManager.cjs +13 -13
- package/dist/kernel/manager/themeManager.cjs.map +1 -1
- package/dist/kernel/manager/themeManager.d.ts +1 -0
- package/dist/kernel/manager/themeManager.js +13 -13
- package/dist/kernel/manager/themeManager.js.map +1 -1
- package/dist/kernel/types.d.ts +2 -0
- package/dist/kernel/types.js.map +1 -1
- package/dist/state.umd.js +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/kernel/kernel.cjs
CHANGED
|
@@ -223,7 +223,8 @@ let Kernel = class Kernel {
|
|
|
223
223
|
}
|
|
224
224
|
const context = {
|
|
225
225
|
instanceId: this.instanceId,
|
|
226
|
-
config: this.config
|
|
226
|
+
config: this.config,
|
|
227
|
+
cacheManager: this.cacheManager.cache
|
|
227
228
|
};
|
|
228
229
|
const initPromise = (async ()=>{
|
|
229
230
|
await manager.initialize(context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/kernel/kernel.tsx"],"sourcesContent":["import type {\n I18nSnapshot,\n KernelConfig,\n KernelInstanceId,\n KernelManager,\n KernelManagerContext,\n KernelTimingMetric,\n StartOptions,\n ThemeSnapshot,\n} from './types';\nimport { DEFAULT_CONFIG, DEFAULT_I18N, DEFAULT_INSTANCE_ID, DEFAULT_THEME } from './constants';\nimport { LoggerManager } from './manager/loggerManager';\nimport { CacheManager } from './manager/cacheManager';\nimport { ThemeManager } from './manager/themeManager';\nimport { I18nManager } from './manager/i18nManager';\n\nfunction now(): number {\n return typeof performance !== 'undefined' ? performance.now() : Date.now();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport class Kernel {\n private static readonly instances = new Map<KernelInstanceId, Kernel>();\n\n public static getInstance(instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID): Kernel {\n const existing = Kernel.instances.get(instanceId);\n if (existing) {\n return existing;\n }\n const created = new Kernel(instanceId);\n Kernel.instances.set(instanceId, created);\n return created;\n }\n\n private readonly instanceId: KernelInstanceId;\n private readonly metrics: KernelTimingMetric[] = [];\n private readonly managers = new Map<string, KernelManager>();\n private readonly managerInitPromises = new Map<string, Promise<void>>();\n private readonly initializedManagers = new Set<string>();\n private readonly loggerManager = new LoggerManager();\n private readonly cacheManager = new CacheManager();\n private readonly themeManager = new ThemeManager();\n private readonly i18nManager = new I18nManager();\n private config: KernelConfig = DEFAULT_CONFIG;\n private startupPromise: Promise<Kernel> | null = null;\n private started = false;\n\n private constructor(instanceId: KernelInstanceId) {\n this.instanceId = instanceId;\n this.managers.set('logger', this.loggerManager);\n this.managers.set('cache', this.cacheManager);\n this.managers.set('theme', this.themeManager);\n this.managers.set('i18n', this.i18nManager);\n }\n\n public getId(): string {\n return this.instanceId;\n }\n\n public getConfig(): KernelConfig {\n return this.config;\n }\n\n public getMetrics(): KernelTimingMetric[] {\n return [...this.metrics];\n }\n\n public getLoggerManager(): LoggerManager {\n return this.loggerManager;\n }\n\n public getCacheManager(): CacheManager {\n return this.cacheManager;\n }\n\n public getThemeManager(): ThemeManager {\n return this.themeManager;\n }\n\n public getI18nManager(): I18nManager {\n return this.i18nManager;\n }\n\n public getManager(name: string): KernelManager | undefined {\n return this.managers.get(name);\n }\n\n public registerManager(name: string, manager: KernelManager): void {\n if (this.managers.has(name)) {\n throw new Error(`Kernel manager \"${name}\" 已存在`);\n }\n this.managers.set(name, manager);\n }\n\n public async startup(options: StartOptions = {}): Promise<Kernel> {\n if (this.started) {\n this.logDebug('kernel.startup.skip.already-started', { instanceId: this.instanceId });\n return this;\n }\n\n if (this.startupPromise) {\n return this.startupPromise;\n }\n\n this.startupPromise = this.bootstrap(options).finally(() => {\n this.startupPromise = null;\n });\n return this.startupPromise;\n }\n\n private async bootstrap(options: StartOptions): Promise<Kernel> {\n await this.measurePhase('startup.begin', async () => {\n this.logDebug('kernel.startup.begin', { instanceId: this.instanceId });\n });\n\n await this.measurePhase('config.load', async () => {\n this.config = await this.resolveConfig(options);\n });\n\n await this.measurePhase('manager.register.custom', async () => {\n if (options.customManagers) {\n Object.entries(options.customManagers).forEach(([name, manager]) => {\n if (!this.managers.has(name)) {\n this.managers.set(name, manager);\n }\n });\n }\n });\n\n await this.measurePhase('manager.initialize.default', async () => {\n await this.initializeManager('cache');\n await Promise.all([\n this.initializeManager('logger'),\n this.initializeManager('theme'),\n this.initializeManager('i18n'),\n ]);\n });\n\n await this.measurePhase('manager.initialize.custom', async () => {\n const customManagerNames = [...this.managers.keys()].filter(\n (name) => name !== 'logger' && name !== 'cache' && name !== 'theme' && name !== 'i18n'\n );\n for (const name of customManagerNames) {\n await this.initializeManager(name);\n }\n });\n\n await this.measurePhase('hooks.initialize', async () => {\n await options.hooks?.initialize?.();\n await options.lifecycle?.initialization?.();\n });\n\n await this.measurePhase('render.custom', async () => {\n if (options.render) {\n await options.render({\n instanceId: this.instanceId,\n config: this.config,\n });\n }\n });\n\n this.started = true;\n this.logDebug('kernel.startup.end', { instanceId: this.instanceId, metrics: this.metrics });\n return this;\n }\n\n private async resolveConfig(options: StartOptions): Promise<KernelConfig> {\n let loaded: Partial<KernelConfig> = {};\n if (options.configLoader) {\n const loaderResult = await options.configLoader();\n loaded = loaderResult || {};\n }\n\n const loadedThemeInitial: Partial<ThemeSnapshot> = loaded.theme?.initial || {};\n const loadedI18nInitial: Partial<I18nSnapshot> = loaded.i18n?.initial || {};\n const optionTheme = options.theme || {};\n const optionLocale = options.locale;\n\n return {\n logger: {\n ...DEFAULT_CONFIG.logger,\n ...loaded.logger,\n ...(options.config?.logger || {}),\n level:\n options.loggerLevel ??\n options.config?.logger?.level ??\n loaded.logger?.level,\n },\n cache: {\n ...DEFAULT_CONFIG.cache,\n ...loaded.cache,\n ...(options.config?.cache || {}),\n storageOptions: {\n ...DEFAULT_CONFIG.cache.storageOptions,\n ...(loaded.cache?.storageOptions || {}),\n ...(options.config?.cache?.storageOptions || {}),\n ...(options.storageOptions || {}),\n },\n },\n theme: {\n ...DEFAULT_CONFIG.theme,\n ...loaded.theme,\n ...(options.config?.theme || {}),\n initial: {\n ...DEFAULT_THEME,\n ...loadedThemeInitial,\n ...(options.config?.theme?.initial || {}),\n ...(isRecord(optionTheme) ? optionTheme : {}),\n },\n },\n i18n: {\n ...DEFAULT_CONFIG.i18n,\n ...loaded.i18n,\n ...(options.config?.i18n || {}),\n initial: {\n ...DEFAULT_I18N,\n ...loadedI18nInitial,\n ...(options.config?.i18n?.initial || {}),\n resources: isRecord(optionLocale)\n ? (optionLocale as I18nSnapshot['resources'])\n : loadedI18nInitial.resources,\n },\n },\n };\n }\n\n private async initializeManager(name: string): Promise<void> {\n if (this.initializedManagers.has(name)) {\n return;\n }\n\n const existingPromise = this.managerInitPromises.get(name);\n if (existingPromise) {\n await existingPromise;\n return;\n }\n\n const manager = this.managers.get(name);\n if (!manager) {\n throw new Error(`Kernel manager \"${name}\" 不存在`);\n }\n\n const context: KernelManagerContext = {\n instanceId: this.instanceId,\n config: this.config,\n };\n\n const initPromise = (async () => {\n await manager.initialize(context);\n this.initializedManagers.add(name);\n this.logDebug('kernel.manager.initialized', { name, instanceId: this.instanceId });\n })();\n\n this.managerInitPromises.set(name, initPromise);\n try {\n await initPromise;\n } finally {\n this.managerInitPromises.delete(name);\n }\n }\n\n private async measurePhase(phase: string, task: () => Promise<void>): Promise<void> {\n const startTime = now();\n this.logDebug('kernel.phase.start', { phase, startTime, instanceId: this.instanceId });\n await task();\n const endTime = now();\n const metric: KernelTimingMetric = {\n phase,\n startTime,\n endTime,\n duration: endTime - startTime,\n };\n this.metrics.push(metric);\n this.logDebug('kernel.phase.end', metric);\n }\n\n private logDebug(message: string, payload?: unknown): void {\n this.loggerManager.debug(message, payload);\n }\n}\n\nexport async function startup(\n options: StartOptions = {},\n instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID\n): Promise<Kernel> {\n const kernel = Kernel.getInstance(instanceId);\n return kernel.startup(options);\n}\n\nexport function getKernel(instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID): Kernel {\n return Kernel.getInstance(instanceId);\n}\n\nexport async function kernelStartApp(\n options: StartOptions = {},\n instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID\n): Promise<Kernel> {\n return startup(options, instanceId);\n}\n"],"names":["Kernel","getKernel","kernelStartApp","startup","now","performance","Date","isRecord","value","getInstance","instanceId","DEFAULT_INSTANCE_ID","existing","instances","get","created","set","getId","getConfig","config","getMetrics","metrics","getLoggerManager","loggerManager","getCacheManager","cacheManager","getThemeManager","themeManager","getI18nManager","i18nManager","getManager","name","managers","registerManager","manager","has","Error","options","started","logDebug","startupPromise","bootstrap","finally","measurePhase","resolveConfig","customManagers","Object","entries","forEach","initializeManager","Promise","all","customManagerNames","keys","filter","hooks","initialize","lifecycle","initialization","render","loaded","configLoader","loaderResult","loadedThemeInitial","theme","initial","loadedI18nInitial","i18n","optionTheme","optionLocale","locale","logger","DEFAULT_CONFIG","level","loggerLevel","cache","storageOptions","DEFAULT_THEME","DEFAULT_I18N","resources","initializedManagers","existingPromise","managerInitPromises","context","initPromise","add","delete","phase","task","startTime","endTime","metric","duration","push","message","payload","debug","Map","Set","LoggerManager","CacheManager","ThemeManager","I18nManager","kernel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/kernel/kernel.tsx"],"sourcesContent":["import type {\n I18nSnapshot,\n KernelConfig,\n KernelInstanceId,\n KernelManager,\n KernelManagerContext,\n KernelTimingMetric,\n StartOptions,\n ThemeSnapshot,\n} from './types';\nimport { DEFAULT_CONFIG, DEFAULT_I18N, DEFAULT_INSTANCE_ID, DEFAULT_THEME } from './constants';\nimport { LoggerManager } from './manager/loggerManager';\nimport { CacheManager } from './manager/cacheManager';\nimport { ThemeManager } from './manager/themeManager';\nimport { I18nManager } from './manager/i18nManager';\n\nfunction now(): number {\n return typeof performance !== 'undefined' ? performance.now() : Date.now();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport class Kernel {\n private static readonly instances = new Map<KernelInstanceId, Kernel>();\n\n public static getInstance(instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID): Kernel {\n const existing = Kernel.instances.get(instanceId);\n if (existing) {\n return existing;\n }\n const created = new Kernel(instanceId);\n Kernel.instances.set(instanceId, created);\n return created;\n }\n\n private readonly instanceId: KernelInstanceId;\n private readonly metrics: KernelTimingMetric[] = [];\n private readonly managers = new Map<string, KernelManager>();\n private readonly managerInitPromises = new Map<string, Promise<void>>();\n private readonly initializedManagers = new Set<string>();\n private readonly loggerManager = new LoggerManager();\n private readonly cacheManager = new CacheManager();\n private readonly themeManager = new ThemeManager();\n private readonly i18nManager = new I18nManager();\n private config: KernelConfig = DEFAULT_CONFIG;\n private startupPromise: Promise<Kernel> | null = null;\n private started = false;\n\n private constructor(instanceId: KernelInstanceId) {\n this.instanceId = instanceId;\n this.managers.set('logger', this.loggerManager);\n this.managers.set('cache', this.cacheManager);\n this.managers.set('theme', this.themeManager);\n this.managers.set('i18n', this.i18nManager);\n }\n\n public getId(): string {\n return this.instanceId;\n }\n\n public getConfig(): KernelConfig {\n return this.config;\n }\n\n public getMetrics(): KernelTimingMetric[] {\n return [...this.metrics];\n }\n\n public getLoggerManager(): LoggerManager {\n return this.loggerManager;\n }\n\n public getCacheManager(): CacheManager {\n return this.cacheManager;\n }\n\n public getThemeManager(): ThemeManager {\n return this.themeManager;\n }\n\n public getI18nManager(): I18nManager {\n return this.i18nManager;\n }\n\n public getManager(name: string): KernelManager | undefined {\n return this.managers.get(name);\n }\n\n public registerManager(name: string, manager: KernelManager): void {\n if (this.managers.has(name)) {\n throw new Error(`Kernel manager \"${name}\" 已存在`);\n }\n this.managers.set(name, manager);\n }\n\n public async startup(options: StartOptions = {}): Promise<Kernel> {\n if (this.started) {\n this.logDebug('kernel.startup.skip.already-started', { instanceId: this.instanceId });\n return this;\n }\n\n if (this.startupPromise) {\n return this.startupPromise;\n }\n\n this.startupPromise = this.bootstrap(options).finally(() => {\n this.startupPromise = null;\n });\n return this.startupPromise;\n }\n\n private async bootstrap(options: StartOptions): Promise<Kernel> {\n await this.measurePhase('startup.begin', async () => {\n this.logDebug('kernel.startup.begin', { instanceId: this.instanceId });\n });\n\n await this.measurePhase('config.load', async () => {\n this.config = await this.resolveConfig(options);\n });\n\n await this.measurePhase('manager.register.custom', async () => {\n if (options.customManagers) {\n Object.entries(options.customManagers).forEach(([name, manager]) => {\n if (!this.managers.has(name)) {\n this.managers.set(name, manager);\n }\n });\n }\n });\n\n await this.measurePhase('manager.initialize.default', async () => {\n await this.initializeManager('cache');\n await Promise.all([\n this.initializeManager('logger'),\n this.initializeManager('theme'),\n this.initializeManager('i18n'),\n ]);\n });\n\n await this.measurePhase('manager.initialize.custom', async () => {\n const customManagerNames = [...this.managers.keys()].filter(\n (name) => name !== 'logger' && name !== 'cache' && name !== 'theme' && name !== 'i18n'\n );\n for (const name of customManagerNames) {\n await this.initializeManager(name);\n }\n });\n\n await this.measurePhase('hooks.initialize', async () => {\n await options.hooks?.initialize?.();\n await options.lifecycle?.initialization?.();\n });\n\n await this.measurePhase('render.custom', async () => {\n if (options.render) {\n await options.render({\n instanceId: this.instanceId,\n config: this.config,\n });\n }\n });\n\n this.started = true;\n this.logDebug('kernel.startup.end', { instanceId: this.instanceId, metrics: this.metrics });\n return this;\n }\n\n private async resolveConfig(options: StartOptions): Promise<KernelConfig> {\n let loaded: Partial<KernelConfig> = {};\n if (options.configLoader) {\n const loaderResult = await options.configLoader();\n loaded = loaderResult || {};\n }\n\n const loadedThemeInitial: Partial<ThemeSnapshot> = loaded.theme?.initial || {};\n const loadedI18nInitial: Partial<I18nSnapshot> = loaded.i18n?.initial || {};\n const optionTheme = options.theme || {};\n const optionLocale = options.locale;\n\n return {\n logger: {\n ...DEFAULT_CONFIG.logger,\n ...loaded.logger,\n ...(options.config?.logger || {}),\n level:\n options.loggerLevel ??\n options.config?.logger?.level ??\n loaded.logger?.level,\n },\n cache: {\n ...DEFAULT_CONFIG.cache,\n ...loaded.cache,\n ...(options.config?.cache || {}),\n storageOptions: {\n ...DEFAULT_CONFIG.cache.storageOptions,\n ...(loaded.cache?.storageOptions || {}),\n ...(options.config?.cache?.storageOptions || {}),\n ...(options.storageOptions || {}),\n },\n },\n theme: {\n ...DEFAULT_CONFIG.theme,\n ...loaded.theme,\n ...(options.config?.theme || {}),\n initial: {\n ...DEFAULT_THEME,\n ...loadedThemeInitial,\n ...(options.config?.theme?.initial || {}),\n ...(isRecord(optionTheme) ? optionTheme : {}),\n },\n },\n i18n: {\n ...DEFAULT_CONFIG.i18n,\n ...loaded.i18n,\n ...(options.config?.i18n || {}),\n initial: {\n ...DEFAULT_I18N,\n ...loadedI18nInitial,\n ...(options.config?.i18n?.initial || {}),\n resources: isRecord(optionLocale)\n ? (optionLocale as I18nSnapshot['resources'])\n : loadedI18nInitial.resources,\n },\n },\n };\n }\n\n private async initializeManager(name: string): Promise<void> {\n if (this.initializedManagers.has(name)) {\n return;\n }\n\n const existingPromise = this.managerInitPromises.get(name);\n if (existingPromise) {\n await existingPromise;\n return;\n }\n\n const manager = this.managers.get(name);\n if (!manager) {\n throw new Error(`Kernel manager \"${name}\" 不存在`);\n }\n\n const context: KernelManagerContext = {\n instanceId: this.instanceId,\n config: this.config,\n cacheManager: this.cacheManager.cache!,\n };\n\n const initPromise = (async () => {\n await manager.initialize(context);\n this.initializedManagers.add(name);\n this.logDebug('kernel.manager.initialized', { name, instanceId: this.instanceId });\n })();\n\n this.managerInitPromises.set(name, initPromise);\n try {\n await initPromise;\n } finally {\n this.managerInitPromises.delete(name);\n }\n }\n\n private async measurePhase(phase: string, task: () => Promise<void>): Promise<void> {\n const startTime = now();\n this.logDebug('kernel.phase.start', { phase, startTime, instanceId: this.instanceId });\n await task();\n const endTime = now();\n const metric: KernelTimingMetric = {\n phase,\n startTime,\n endTime,\n duration: endTime - startTime,\n };\n this.metrics.push(metric);\n this.logDebug('kernel.phase.end', metric);\n }\n\n private logDebug(message: string, payload?: unknown): void {\n this.loggerManager.debug(message, payload);\n }\n}\n\nexport async function startup(\n options: StartOptions = {},\n instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID\n): Promise<Kernel> {\n const kernel = Kernel.getInstance(instanceId);\n return kernel.startup(options);\n}\n\nexport function getKernel(instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID): Kernel {\n return Kernel.getInstance(instanceId);\n}\n\nexport async function kernelStartApp(\n options: StartOptions = {},\n instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID\n): Promise<Kernel> {\n return startup(options, instanceId);\n}\n"],"names":["Kernel","getKernel","kernelStartApp","startup","now","performance","Date","isRecord","value","getInstance","instanceId","DEFAULT_INSTANCE_ID","existing","instances","get","created","set","getId","getConfig","config","getMetrics","metrics","getLoggerManager","loggerManager","getCacheManager","cacheManager","getThemeManager","themeManager","getI18nManager","i18nManager","getManager","name","managers","registerManager","manager","has","Error","options","started","logDebug","startupPromise","bootstrap","finally","measurePhase","resolveConfig","customManagers","Object","entries","forEach","initializeManager","Promise","all","customManagerNames","keys","filter","hooks","initialize","lifecycle","initialization","render","loaded","configLoader","loaderResult","loadedThemeInitial","theme","initial","loadedI18nInitial","i18n","optionTheme","optionLocale","locale","logger","DEFAULT_CONFIG","level","loggerLevel","cache","storageOptions","DEFAULT_THEME","DEFAULT_I18N","resources","initializedManagers","existingPromise","managerInitPromises","context","initPromise","add","delete","phase","task","startTime","endTime","metric","duration","push","message","payload","debug","Map","Set","LoggerManager","CacheManager","ThemeManager","I18nManager","kernel"],"mappings":"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"}
|
package/dist/kernel/kernel.js
CHANGED
|
@@ -199,7 +199,8 @@ export class Kernel {
|
|
|
199
199
|
}
|
|
200
200
|
const context = {
|
|
201
201
|
instanceId: this.instanceId,
|
|
202
|
-
config: this.config
|
|
202
|
+
config: this.config,
|
|
203
|
+
cacheManager: this.cacheManager.cache
|
|
203
204
|
};
|
|
204
205
|
const initPromise = (async ()=>{
|
|
205
206
|
await manager.initialize(context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/kernel/kernel.tsx"],"sourcesContent":["import type {\n I18nSnapshot,\n KernelConfig,\n KernelInstanceId,\n KernelManager,\n KernelManagerContext,\n KernelTimingMetric,\n StartOptions,\n ThemeSnapshot,\n} from './types';\nimport { DEFAULT_CONFIG, DEFAULT_I18N, DEFAULT_INSTANCE_ID, DEFAULT_THEME } from './constants';\nimport { LoggerManager } from './manager/loggerManager';\nimport { CacheManager } from './manager/cacheManager';\nimport { ThemeManager } from './manager/themeManager';\nimport { I18nManager } from './manager/i18nManager';\n\nfunction now(): number {\n return typeof performance !== 'undefined' ? performance.now() : Date.now();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport class Kernel {\n private static readonly instances = new Map<KernelInstanceId, Kernel>();\n\n public static getInstance(instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID): Kernel {\n const existing = Kernel.instances.get(instanceId);\n if (existing) {\n return existing;\n }\n const created = new Kernel(instanceId);\n Kernel.instances.set(instanceId, created);\n return created;\n }\n\n private readonly instanceId: KernelInstanceId;\n private readonly metrics: KernelTimingMetric[] = [];\n private readonly managers = new Map<string, KernelManager>();\n private readonly managerInitPromises = new Map<string, Promise<void>>();\n private readonly initializedManagers = new Set<string>();\n private readonly loggerManager = new LoggerManager();\n private readonly cacheManager = new CacheManager();\n private readonly themeManager = new ThemeManager();\n private readonly i18nManager = new I18nManager();\n private config: KernelConfig = DEFAULT_CONFIG;\n private startupPromise: Promise<Kernel> | null = null;\n private started = false;\n\n private constructor(instanceId: KernelInstanceId) {\n this.instanceId = instanceId;\n this.managers.set('logger', this.loggerManager);\n this.managers.set('cache', this.cacheManager);\n this.managers.set('theme', this.themeManager);\n this.managers.set('i18n', this.i18nManager);\n }\n\n public getId(): string {\n return this.instanceId;\n }\n\n public getConfig(): KernelConfig {\n return this.config;\n }\n\n public getMetrics(): KernelTimingMetric[] {\n return [...this.metrics];\n }\n\n public getLoggerManager(): LoggerManager {\n return this.loggerManager;\n }\n\n public getCacheManager(): CacheManager {\n return this.cacheManager;\n }\n\n public getThemeManager(): ThemeManager {\n return this.themeManager;\n }\n\n public getI18nManager(): I18nManager {\n return this.i18nManager;\n }\n\n public getManager(name: string): KernelManager | undefined {\n return this.managers.get(name);\n }\n\n public registerManager(name: string, manager: KernelManager): void {\n if (this.managers.has(name)) {\n throw new Error(`Kernel manager \"${name}\" 已存在`);\n }\n this.managers.set(name, manager);\n }\n\n public async startup(options: StartOptions = {}): Promise<Kernel> {\n if (this.started) {\n this.logDebug('kernel.startup.skip.already-started', { instanceId: this.instanceId });\n return this;\n }\n\n if (this.startupPromise) {\n return this.startupPromise;\n }\n\n this.startupPromise = this.bootstrap(options).finally(() => {\n this.startupPromise = null;\n });\n return this.startupPromise;\n }\n\n private async bootstrap(options: StartOptions): Promise<Kernel> {\n await this.measurePhase('startup.begin', async () => {\n this.logDebug('kernel.startup.begin', { instanceId: this.instanceId });\n });\n\n await this.measurePhase('config.load', async () => {\n this.config = await this.resolveConfig(options);\n });\n\n await this.measurePhase('manager.register.custom', async () => {\n if (options.customManagers) {\n Object.entries(options.customManagers).forEach(([name, manager]) => {\n if (!this.managers.has(name)) {\n this.managers.set(name, manager);\n }\n });\n }\n });\n\n await this.measurePhase('manager.initialize.default', async () => {\n await this.initializeManager('cache');\n await Promise.all([\n this.initializeManager('logger'),\n this.initializeManager('theme'),\n this.initializeManager('i18n'),\n ]);\n });\n\n await this.measurePhase('manager.initialize.custom', async () => {\n const customManagerNames = [...this.managers.keys()].filter(\n (name) => name !== 'logger' && name !== 'cache' && name !== 'theme' && name !== 'i18n'\n );\n for (const name of customManagerNames) {\n await this.initializeManager(name);\n }\n });\n\n await this.measurePhase('hooks.initialize', async () => {\n await options.hooks?.initialize?.();\n await options.lifecycle?.initialization?.();\n });\n\n await this.measurePhase('render.custom', async () => {\n if (options.render) {\n await options.render({\n instanceId: this.instanceId,\n config: this.config,\n });\n }\n });\n\n this.started = true;\n this.logDebug('kernel.startup.end', { instanceId: this.instanceId, metrics: this.metrics });\n return this;\n }\n\n private async resolveConfig(options: StartOptions): Promise<KernelConfig> {\n let loaded: Partial<KernelConfig> = {};\n if (options.configLoader) {\n const loaderResult = await options.configLoader();\n loaded = loaderResult || {};\n }\n\n const loadedThemeInitial: Partial<ThemeSnapshot> = loaded.theme?.initial || {};\n const loadedI18nInitial: Partial<I18nSnapshot> = loaded.i18n?.initial || {};\n const optionTheme = options.theme || {};\n const optionLocale = options.locale;\n\n return {\n logger: {\n ...DEFAULT_CONFIG.logger,\n ...loaded.logger,\n ...(options.config?.logger || {}),\n level:\n options.loggerLevel ??\n options.config?.logger?.level ??\n loaded.logger?.level,\n },\n cache: {\n ...DEFAULT_CONFIG.cache,\n ...loaded.cache,\n ...(options.config?.cache || {}),\n storageOptions: {\n ...DEFAULT_CONFIG.cache.storageOptions,\n ...(loaded.cache?.storageOptions || {}),\n ...(options.config?.cache?.storageOptions || {}),\n ...(options.storageOptions || {}),\n },\n },\n theme: {\n ...DEFAULT_CONFIG.theme,\n ...loaded.theme,\n ...(options.config?.theme || {}),\n initial: {\n ...DEFAULT_THEME,\n ...loadedThemeInitial,\n ...(options.config?.theme?.initial || {}),\n ...(isRecord(optionTheme) ? optionTheme : {}),\n },\n },\n i18n: {\n ...DEFAULT_CONFIG.i18n,\n ...loaded.i18n,\n ...(options.config?.i18n || {}),\n initial: {\n ...DEFAULT_I18N,\n ...loadedI18nInitial,\n ...(options.config?.i18n?.initial || {}),\n resources: isRecord(optionLocale)\n ? (optionLocale as I18nSnapshot['resources'])\n : loadedI18nInitial.resources,\n },\n },\n };\n }\n\n private async initializeManager(name: string): Promise<void> {\n if (this.initializedManagers.has(name)) {\n return;\n }\n\n const existingPromise = this.managerInitPromises.get(name);\n if (existingPromise) {\n await existingPromise;\n return;\n }\n\n const manager = this.managers.get(name);\n if (!manager) {\n throw new Error(`Kernel manager \"${name}\" 不存在`);\n }\n\n const context: KernelManagerContext = {\n instanceId: this.instanceId,\n config: this.config,\n };\n\n const initPromise = (async () => {\n await manager.initialize(context);\n this.initializedManagers.add(name);\n this.logDebug('kernel.manager.initialized', { name, instanceId: this.instanceId });\n })();\n\n this.managerInitPromises.set(name, initPromise);\n try {\n await initPromise;\n } finally {\n this.managerInitPromises.delete(name);\n }\n }\n\n private async measurePhase(phase: string, task: () => Promise<void>): Promise<void> {\n const startTime = now();\n this.logDebug('kernel.phase.start', { phase, startTime, instanceId: this.instanceId });\n await task();\n const endTime = now();\n const metric: KernelTimingMetric = {\n phase,\n startTime,\n endTime,\n duration: endTime - startTime,\n };\n this.metrics.push(metric);\n this.logDebug('kernel.phase.end', metric);\n }\n\n private logDebug(message: string, payload?: unknown): void {\n this.loggerManager.debug(message, payload);\n }\n}\n\nexport async function startup(\n options: StartOptions = {},\n instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID\n): Promise<Kernel> {\n const kernel = Kernel.getInstance(instanceId);\n return kernel.startup(options);\n}\n\nexport function getKernel(instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID): Kernel {\n return Kernel.getInstance(instanceId);\n}\n\nexport async function kernelStartApp(\n options: StartOptions = {},\n instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID\n): Promise<Kernel> {\n return startup(options, instanceId);\n}\n"],"names":["DEFAULT_CONFIG","DEFAULT_I18N","DEFAULT_INSTANCE_ID","DEFAULT_THEME","LoggerManager","CacheManager","ThemeManager","I18nManager","now","performance","Date","isRecord","value","Kernel","getInstance","instanceId","existing","instances","get","created","set","getId","getConfig","config","getMetrics","metrics","getLoggerManager","loggerManager","getCacheManager","cacheManager","getThemeManager","themeManager","getI18nManager","i18nManager","getManager","name","managers","registerManager","manager","has","Error","startup","options","started","logDebug","startupPromise","bootstrap","finally","measurePhase","resolveConfig","customManagers","Object","entries","forEach","initializeManager","Promise","all","customManagerNames","keys","filter","hooks","initialize","lifecycle","initialization","render","loaded","configLoader","loaderResult","loadedThemeInitial","theme","initial","loadedI18nInitial","i18n","optionTheme","optionLocale","locale","logger","level","loggerLevel","cache","storageOptions","resources","initializedManagers","existingPromise","managerInitPromises","context","initPromise","add","delete","phase","task","startTime","endTime","metric","duration","push","message","payload","debug","Map","Set","kernel","getKernel","kernelStartApp"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/kernel/kernel.tsx"],"sourcesContent":["import type {\n I18nSnapshot,\n KernelConfig,\n KernelInstanceId,\n KernelManager,\n KernelManagerContext,\n KernelTimingMetric,\n StartOptions,\n ThemeSnapshot,\n} from './types';\nimport { DEFAULT_CONFIG, DEFAULT_I18N, DEFAULT_INSTANCE_ID, DEFAULT_THEME } from './constants';\nimport { LoggerManager } from './manager/loggerManager';\nimport { CacheManager } from './manager/cacheManager';\nimport { ThemeManager } from './manager/themeManager';\nimport { I18nManager } from './manager/i18nManager';\n\nfunction now(): number {\n return typeof performance !== 'undefined' ? performance.now() : Date.now();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport class Kernel {\n private static readonly instances = new Map<KernelInstanceId, Kernel>();\n\n public static getInstance(instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID): Kernel {\n const existing = Kernel.instances.get(instanceId);\n if (existing) {\n return existing;\n }\n const created = new Kernel(instanceId);\n Kernel.instances.set(instanceId, created);\n return created;\n }\n\n private readonly instanceId: KernelInstanceId;\n private readonly metrics: KernelTimingMetric[] = [];\n private readonly managers = new Map<string, KernelManager>();\n private readonly managerInitPromises = new Map<string, Promise<void>>();\n private readonly initializedManagers = new Set<string>();\n private readonly loggerManager = new LoggerManager();\n private readonly cacheManager = new CacheManager();\n private readonly themeManager = new ThemeManager();\n private readonly i18nManager = new I18nManager();\n private config: KernelConfig = DEFAULT_CONFIG;\n private startupPromise: Promise<Kernel> | null = null;\n private started = false;\n\n private constructor(instanceId: KernelInstanceId) {\n this.instanceId = instanceId;\n this.managers.set('logger', this.loggerManager);\n this.managers.set('cache', this.cacheManager);\n this.managers.set('theme', this.themeManager);\n this.managers.set('i18n', this.i18nManager);\n }\n\n public getId(): string {\n return this.instanceId;\n }\n\n public getConfig(): KernelConfig {\n return this.config;\n }\n\n public getMetrics(): KernelTimingMetric[] {\n return [...this.metrics];\n }\n\n public getLoggerManager(): LoggerManager {\n return this.loggerManager;\n }\n\n public getCacheManager(): CacheManager {\n return this.cacheManager;\n }\n\n public getThemeManager(): ThemeManager {\n return this.themeManager;\n }\n\n public getI18nManager(): I18nManager {\n return this.i18nManager;\n }\n\n public getManager(name: string): KernelManager | undefined {\n return this.managers.get(name);\n }\n\n public registerManager(name: string, manager: KernelManager): void {\n if (this.managers.has(name)) {\n throw new Error(`Kernel manager \"${name}\" 已存在`);\n }\n this.managers.set(name, manager);\n }\n\n public async startup(options: StartOptions = {}): Promise<Kernel> {\n if (this.started) {\n this.logDebug('kernel.startup.skip.already-started', { instanceId: this.instanceId });\n return this;\n }\n\n if (this.startupPromise) {\n return this.startupPromise;\n }\n\n this.startupPromise = this.bootstrap(options).finally(() => {\n this.startupPromise = null;\n });\n return this.startupPromise;\n }\n\n private async bootstrap(options: StartOptions): Promise<Kernel> {\n await this.measurePhase('startup.begin', async () => {\n this.logDebug('kernel.startup.begin', { instanceId: this.instanceId });\n });\n\n await this.measurePhase('config.load', async () => {\n this.config = await this.resolveConfig(options);\n });\n\n await this.measurePhase('manager.register.custom', async () => {\n if (options.customManagers) {\n Object.entries(options.customManagers).forEach(([name, manager]) => {\n if (!this.managers.has(name)) {\n this.managers.set(name, manager);\n }\n });\n }\n });\n\n await this.measurePhase('manager.initialize.default', async () => {\n await this.initializeManager('cache');\n await Promise.all([\n this.initializeManager('logger'),\n this.initializeManager('theme'),\n this.initializeManager('i18n'),\n ]);\n });\n\n await this.measurePhase('manager.initialize.custom', async () => {\n const customManagerNames = [...this.managers.keys()].filter(\n (name) => name !== 'logger' && name !== 'cache' && name !== 'theme' && name !== 'i18n'\n );\n for (const name of customManagerNames) {\n await this.initializeManager(name);\n }\n });\n\n await this.measurePhase('hooks.initialize', async () => {\n await options.hooks?.initialize?.();\n await options.lifecycle?.initialization?.();\n });\n\n await this.measurePhase('render.custom', async () => {\n if (options.render) {\n await options.render({\n instanceId: this.instanceId,\n config: this.config,\n });\n }\n });\n\n this.started = true;\n this.logDebug('kernel.startup.end', { instanceId: this.instanceId, metrics: this.metrics });\n return this;\n }\n\n private async resolveConfig(options: StartOptions): Promise<KernelConfig> {\n let loaded: Partial<KernelConfig> = {};\n if (options.configLoader) {\n const loaderResult = await options.configLoader();\n loaded = loaderResult || {};\n }\n\n const loadedThemeInitial: Partial<ThemeSnapshot> = loaded.theme?.initial || {};\n const loadedI18nInitial: Partial<I18nSnapshot> = loaded.i18n?.initial || {};\n const optionTheme = options.theme || {};\n const optionLocale = options.locale;\n\n return {\n logger: {\n ...DEFAULT_CONFIG.logger,\n ...loaded.logger,\n ...(options.config?.logger || {}),\n level:\n options.loggerLevel ??\n options.config?.logger?.level ??\n loaded.logger?.level,\n },\n cache: {\n ...DEFAULT_CONFIG.cache,\n ...loaded.cache,\n ...(options.config?.cache || {}),\n storageOptions: {\n ...DEFAULT_CONFIG.cache.storageOptions,\n ...(loaded.cache?.storageOptions || {}),\n ...(options.config?.cache?.storageOptions || {}),\n ...(options.storageOptions || {}),\n },\n },\n theme: {\n ...DEFAULT_CONFIG.theme,\n ...loaded.theme,\n ...(options.config?.theme || {}),\n initial: {\n ...DEFAULT_THEME,\n ...loadedThemeInitial,\n ...(options.config?.theme?.initial || {}),\n ...(isRecord(optionTheme) ? optionTheme : {}),\n },\n },\n i18n: {\n ...DEFAULT_CONFIG.i18n,\n ...loaded.i18n,\n ...(options.config?.i18n || {}),\n initial: {\n ...DEFAULT_I18N,\n ...loadedI18nInitial,\n ...(options.config?.i18n?.initial || {}),\n resources: isRecord(optionLocale)\n ? (optionLocale as I18nSnapshot['resources'])\n : loadedI18nInitial.resources,\n },\n },\n };\n }\n\n private async initializeManager(name: string): Promise<void> {\n if (this.initializedManagers.has(name)) {\n return;\n }\n\n const existingPromise = this.managerInitPromises.get(name);\n if (existingPromise) {\n await existingPromise;\n return;\n }\n\n const manager = this.managers.get(name);\n if (!manager) {\n throw new Error(`Kernel manager \"${name}\" 不存在`);\n }\n\n const context: KernelManagerContext = {\n instanceId: this.instanceId,\n config: this.config,\n cacheManager: this.cacheManager.cache!,\n };\n\n const initPromise = (async () => {\n await manager.initialize(context);\n this.initializedManagers.add(name);\n this.logDebug('kernel.manager.initialized', { name, instanceId: this.instanceId });\n })();\n\n this.managerInitPromises.set(name, initPromise);\n try {\n await initPromise;\n } finally {\n this.managerInitPromises.delete(name);\n }\n }\n\n private async measurePhase(phase: string, task: () => Promise<void>): Promise<void> {\n const startTime = now();\n this.logDebug('kernel.phase.start', { phase, startTime, instanceId: this.instanceId });\n await task();\n const endTime = now();\n const metric: KernelTimingMetric = {\n phase,\n startTime,\n endTime,\n duration: endTime - startTime,\n };\n this.metrics.push(metric);\n this.logDebug('kernel.phase.end', metric);\n }\n\n private logDebug(message: string, payload?: unknown): void {\n this.loggerManager.debug(message, payload);\n }\n}\n\nexport async function startup(\n options: StartOptions = {},\n instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID\n): Promise<Kernel> {\n const kernel = Kernel.getInstance(instanceId);\n return kernel.startup(options);\n}\n\nexport function getKernel(instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID): Kernel {\n return Kernel.getInstance(instanceId);\n}\n\nexport async function kernelStartApp(\n options: StartOptions = {},\n instanceId: KernelInstanceId = DEFAULT_INSTANCE_ID\n): Promise<Kernel> {\n return startup(options, instanceId);\n}\n"],"names":["DEFAULT_CONFIG","DEFAULT_I18N","DEFAULT_INSTANCE_ID","DEFAULT_THEME","LoggerManager","CacheManager","ThemeManager","I18nManager","now","performance","Date","isRecord","value","Kernel","getInstance","instanceId","existing","instances","get","created","set","getId","getConfig","config","getMetrics","metrics","getLoggerManager","loggerManager","getCacheManager","cacheManager","getThemeManager","themeManager","getI18nManager","i18nManager","getManager","name","managers","registerManager","manager","has","Error","startup","options","started","logDebug","startupPromise","bootstrap","finally","measurePhase","resolveConfig","customManagers","Object","entries","forEach","initializeManager","Promise","all","customManagerNames","keys","filter","hooks","initialize","lifecycle","initialization","render","loaded","configLoader","loaderResult","loadedThemeInitial","theme","initial","loadedI18nInitial","i18n","optionTheme","optionLocale","locale","logger","level","loggerLevel","cache","storageOptions","resources","initializedManagers","existingPromise","managerInitPromises","context","initPromise","add","delete","phase","task","startTime","endTime","metric","duration","push","message","payload","debug","Map","Set","kernel","getKernel","kernelStartApp"],"mappings":"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"}
|
|
@@ -8,8 +8,8 @@ Object.defineProperty(exports, "CacheManager", {
|
|
|
8
8
|
return CacheManager;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
const _library = require("../../library");
|
|
12
11
|
const _constants = require("../constants");
|
|
12
|
+
const _utils = require("@vlian/utils");
|
|
13
13
|
function _define_property(obj, key, value) {
|
|
14
14
|
if (key in obj) {
|
|
15
15
|
Object.defineProperty(obj, key, {
|
|
@@ -26,20 +26,22 @@ function _define_property(obj, key, value) {
|
|
|
26
26
|
let CacheManager = class CacheManager {
|
|
27
27
|
initialize(context) {
|
|
28
28
|
this.snapshot = context.config.cache;
|
|
29
|
-
|
|
29
|
+
this.cacheIn = (0, _utils.createStorage)({
|
|
30
|
+
type: this.snapshot.storageOptions?.type || 'local',
|
|
30
31
|
prefix: this.snapshot.storageOptions?.prefix || 'vlian',
|
|
31
32
|
defaultExpire: this.snapshot.storageOptions?.defaultExpire || 24 * 60 * 60 * 1000,
|
|
32
|
-
|
|
33
|
-
cache: {
|
|
34
|
-
enabled: this.snapshot.enabled
|
|
35
|
-
}
|
|
33
|
+
dbName: this.snapshot.storageOptions?.tableName
|
|
36
34
|
});
|
|
37
35
|
}
|
|
36
|
+
get cache() {
|
|
37
|
+
return this.cacheIn;
|
|
38
|
+
}
|
|
38
39
|
getSnapshot() {
|
|
39
40
|
return this.snapshot;
|
|
40
41
|
}
|
|
41
42
|
constructor(){
|
|
42
43
|
_define_property(this, "snapshot", _constants.DEFAULT_CONFIG.cache);
|
|
44
|
+
_define_property(this, "cacheIn", void 0);
|
|
43
45
|
}
|
|
44
46
|
};
|
|
45
47
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/kernel/manager/cacheManager.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../../src/kernel/manager/cacheManager.ts"],"sourcesContent":["import type {KernelConfig, KernelManager, KernelManagerContext} from '../types';\nimport {DEFAULT_CONFIG} from '../constants';\nimport type {StorageInstance} from \"@vlian/utils\";\nimport {createStorage} from \"@vlian/utils\";\n\nexport class CacheManager implements KernelManager<KernelConfig['cache']> {\n private snapshot: KernelConfig['cache'] = DEFAULT_CONFIG.cache;\n private cacheIn: StorageInstance | undefined;\n\n public initialize(context: KernelManagerContext): void {\n this.snapshot = context.config.cache;\n\n this.cacheIn = createStorage({\n type: this.snapshot.storageOptions?.type || 'local',\n prefix: this.snapshot.storageOptions?.prefix || 'vlian',\n defaultExpire: this.snapshot.storageOptions?.defaultExpire || 24 * 60 * 60 * 1000,\n dbName: this.snapshot.storageOptions?.tableName,\n });\n }\n\n get cache() {\n return this.cacheIn;\n }\n\n public getSnapshot(): KernelConfig['cache'] {\n return this.snapshot;\n }\n}\n"],"names":["CacheManager","initialize","context","snapshot","config","cache","cacheIn","createStorage","type","storageOptions","prefix","defaultExpire","dbName","tableName","getSnapshot","DEFAULT_CONFIG"],"mappings":";;;;+BAKaA;;;eAAAA;;;2BAJgB;uBAED;;;;;;;;;;;;;;AAErB,IAAA,AAAMA,eAAN,MAAMA;IAIFC,WAAWC,OAA6B,EAAQ;QACnD,IAAI,CAACC,QAAQ,GAAGD,QAAQE,MAAM,CAACC,KAAK;QAEpC,IAAI,CAACC,OAAO,GAAGC,IAAAA,oBAAa,EAAC;YACzBC,MAAM,IAAI,CAACL,QAAQ,CAACM,cAAc,EAAED,QAAQ;YAC5CE,QAAQ,IAAI,CAACP,QAAQ,CAACM,cAAc,EAAEC,UAAU;YAChDC,eAAe,IAAI,CAACR,QAAQ,CAACM,cAAc,EAAEE,iBAAiB,KAAK,KAAK,KAAK;YAC7EC,QAAQ,IAAI,CAACT,QAAQ,CAACM,cAAc,EAAEI;QAC1C;IACJ;IAEA,IAAIR,QAAQ;QACR,OAAO,IAAI,CAACC,OAAO;IACvB;IAEOQ,cAAqC;QACxC,OAAO,IAAI,CAACX,QAAQ;IACxB;;QApBA,uBAAQA,YAAkCY,yBAAc,CAACV,KAAK;QAC9D,uBAAQC,WAAR,KAAA;;AAoBJ"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { KernelConfig, KernelManager, KernelManagerContext } from '../types';
|
|
2
|
+
import type { StorageInstance } from "@vlian/utils";
|
|
2
3
|
export declare class CacheManager implements KernelManager<KernelConfig['cache']> {
|
|
3
4
|
private snapshot;
|
|
5
|
+
private cacheIn;
|
|
4
6
|
initialize(context: KernelManagerContext): void;
|
|
7
|
+
get cache(): StorageInstance | undefined;
|
|
5
8
|
getSnapshot(): KernelConfig['cache'];
|
|
6
9
|
}
|
|
@@ -11,25 +11,27 @@ function _define_property(obj, key, value) {
|
|
|
11
11
|
}
|
|
12
12
|
return obj;
|
|
13
13
|
}
|
|
14
|
-
import { storage } from "../../library";
|
|
15
14
|
import { DEFAULT_CONFIG } from "../constants";
|
|
15
|
+
import { createStorage } from "@vlian/utils";
|
|
16
16
|
export class CacheManager {
|
|
17
17
|
initialize(context) {
|
|
18
18
|
this.snapshot = context.config.cache;
|
|
19
|
-
|
|
19
|
+
this.cacheIn = createStorage({
|
|
20
|
+
type: this.snapshot.storageOptions?.type || 'local',
|
|
20
21
|
prefix: this.snapshot.storageOptions?.prefix || 'vlian',
|
|
21
22
|
defaultExpire: this.snapshot.storageOptions?.defaultExpire || 24 * 60 * 60 * 1000,
|
|
22
|
-
|
|
23
|
-
cache: {
|
|
24
|
-
enabled: this.snapshot.enabled
|
|
25
|
-
}
|
|
23
|
+
dbName: this.snapshot.storageOptions?.tableName
|
|
26
24
|
});
|
|
27
25
|
}
|
|
26
|
+
get cache() {
|
|
27
|
+
return this.cacheIn;
|
|
28
|
+
}
|
|
28
29
|
getSnapshot() {
|
|
29
30
|
return this.snapshot;
|
|
30
31
|
}
|
|
31
32
|
constructor(){
|
|
32
33
|
_define_property(this, "snapshot", DEFAULT_CONFIG.cache);
|
|
34
|
+
_define_property(this, "cacheIn", void 0);
|
|
33
35
|
}
|
|
34
36
|
}
|
|
35
37
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/kernel/manager/cacheManager.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../../src/kernel/manager/cacheManager.ts"],"sourcesContent":["import type {KernelConfig, KernelManager, KernelManagerContext} from '../types';\nimport {DEFAULT_CONFIG} from '../constants';\nimport type {StorageInstance} from \"@vlian/utils\";\nimport {createStorage} from \"@vlian/utils\";\n\nexport class CacheManager implements KernelManager<KernelConfig['cache']> {\n private snapshot: KernelConfig['cache'] = DEFAULT_CONFIG.cache;\n private cacheIn: StorageInstance | undefined;\n\n public initialize(context: KernelManagerContext): void {\n this.snapshot = context.config.cache;\n\n this.cacheIn = createStorage({\n type: this.snapshot.storageOptions?.type || 'local',\n prefix: this.snapshot.storageOptions?.prefix || 'vlian',\n defaultExpire: this.snapshot.storageOptions?.defaultExpire || 24 * 60 * 60 * 1000,\n dbName: this.snapshot.storageOptions?.tableName,\n });\n }\n\n get cache() {\n return this.cacheIn;\n }\n\n public getSnapshot(): KernelConfig['cache'] {\n return this.snapshot;\n }\n}\n"],"names":["DEFAULT_CONFIG","createStorage","CacheManager","initialize","context","snapshot","config","cache","cacheIn","type","storageOptions","prefix","defaultExpire","dbName","tableName","getSnapshot"],"mappings":";;;;;;;;;;;;;AACA,SAAQA,cAAc,QAAO,eAAe;AAE5C,SAAQC,aAAa,QAAO,eAAe;AAE3C,OAAO,MAAMC;IAIFC,WAAWC,OAA6B,EAAQ;QACnD,IAAI,CAACC,QAAQ,GAAGD,QAAQE,MAAM,CAACC,KAAK;QAEpC,IAAI,CAACC,OAAO,GAAGP,cAAc;YACzBQ,MAAM,IAAI,CAACJ,QAAQ,CAACK,cAAc,EAAED,QAAQ;YAC5CE,QAAQ,IAAI,CAACN,QAAQ,CAACK,cAAc,EAAEC,UAAU;YAChDC,eAAe,IAAI,CAACP,QAAQ,CAACK,cAAc,EAAEE,iBAAiB,KAAK,KAAK,KAAK;YAC7EC,QAAQ,IAAI,CAACR,QAAQ,CAACK,cAAc,EAAEI;QAC1C;IACJ;IAEA,IAAIP,QAAQ;QACR,OAAO,IAAI,CAACC,OAAO;IACvB;IAEOO,cAAqC;QACxC,OAAO,IAAI,CAACV,QAAQ;IACxB;;QApBA,uBAAQA,YAAkCL,eAAeO,KAAK;QAC9D,uBAAQC,WAAR,KAAA;;AAoBJ"}
|
|
@@ -17,6 +17,7 @@ _export(exports, {
|
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
19
|
const _library = require("../../library");
|
|
20
|
+
const _utils = require("@/utils");
|
|
20
21
|
function resolveStorageInstance(driver) {
|
|
21
22
|
if (driver === 'none' || typeof window === 'undefined') {
|
|
22
23
|
return null;
|
|
@@ -68,7 +69,8 @@ async function writePersistedValue(persistence, value) {
|
|
|
68
69
|
}
|
|
69
70
|
try {
|
|
70
71
|
await targetStorage.set(key, value);
|
|
71
|
-
} catch
|
|
72
|
+
} catch (e) {
|
|
73
|
+
_utils.logger.error(e);
|
|
72
74
|
// ignore persistence errors
|
|
73
75
|
}
|
|
74
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/kernel/manager/persistence.ts"],"sourcesContent":["import { storage } from '../../library';\nimport type { KernelStorageDriver, PersistenceOptions } from '../types';\n\ntype StorageLike = {\n get: (key: string) => Promise<unknown>;\n set: (key: string, value: unknown) => Promise<void>;\n};\n\nfunction resolveStorageInstance(driver: KernelStorageDriver): StorageLike | null {\n if (driver === 'none' || typeof window === 'undefined') {\n return null;\n }\n\n const instance = driver === 'localStorage'\n ? storage.local\n : driver === 'sessionStorage'\n ? storage.session\n : storage.indexedDB;\n\n if (!instance || typeof (instance as any).get !== 'function' || typeof (instance as any).set !== 'function') {\n return null;\n }\n\n return instance as unknown as StorageLike;\n}\n\nexport async function readPersistedValue(\n persistence: PersistenceOptions | undefined\n): Promise<string | null> {\n if (!persistence || persistence.enabled === false) {\n return null;\n }\n\n const driver = persistence.storage ?? 'localStorage';\n const key = persistence.key;\n if (!key) {\n return null;\n }\n\n const targetStorage = resolveStorageInstance(driver);\n if (!targetStorage) {\n return null;\n }\n\n try {\n const value = await targetStorage.get(key);\n if (value === null || value === undefined) {\n return null;\n }\n if (typeof value === 'string') {\n return value;\n }\n return JSON.stringify(value);\n } catch {\n return null;\n }\n}\n\nexport async function writePersistedValue(\n persistence: PersistenceOptions | undefined,\n value: string\n): Promise<void> {\n if (!persistence || persistence.enabled === false) {\n return;\n }\n\n const driver = persistence.storage ?? 'localStorage';\n const key = persistence.key;\n if (!key) {\n return;\n }\n\n const targetStorage = resolveStorageInstance(driver);\n if (!targetStorage) {\n return;\n }\n\n try {\n await targetStorage.set(key, value);\n } catch {\n // ignore persistence errors\n }\n}\n"],"names":["readPersistedValue","writePersistedValue","resolveStorageInstance","driver","window","instance","storage","local","session","indexedDB","get","set","persistence","enabled","key","targetStorage","value","undefined","JSON","stringify"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../../src/kernel/manager/persistence.ts"],"sourcesContent":["import { storage } from '../../library';\nimport type { KernelStorageDriver, PersistenceOptions } from '../types';\nimport {logger} from \"@/utils\";\n\ntype StorageLike = {\n get: (key: string) => Promise<unknown>;\n set: (key: string, value: unknown) => Promise<void>;\n};\n\nfunction resolveStorageInstance(driver: KernelStorageDriver): StorageLike | null {\n if (driver === 'none' || typeof window === 'undefined') {\n return null;\n }\n\n const instance = driver === 'localStorage'\n ? storage.local\n : driver === 'sessionStorage'\n ? storage.session\n : storage.indexedDB;\n\n if (!instance || typeof (instance as any).get !== 'function' || typeof (instance as any).set !== 'function') {\n return null;\n }\n\n return instance as unknown as StorageLike;\n}\n\nexport async function readPersistedValue(\n persistence: PersistenceOptions | undefined\n): Promise<string | null> {\n if (!persistence || persistence.enabled === false) {\n return null;\n }\n\n const driver = persistence.storage ?? 'localStorage';\n const key = persistence.key;\n if (!key) {\n return null;\n }\n\n const targetStorage = resolveStorageInstance(driver);\n if (!targetStorage) {\n return null;\n }\n\n try {\n const value = await targetStorage.get(key);\n if (value === null || value === undefined) {\n return null;\n }\n if (typeof value === 'string') {\n return value;\n }\n return JSON.stringify(value);\n } catch {\n return null;\n }\n}\n\nexport async function writePersistedValue(\n persistence: PersistenceOptions | undefined,\n value: string\n): Promise<void> {\n if (!persistence || persistence.enabled === false) {\n return;\n }\n\n const driver = persistence.storage ?? 'localStorage';\n const key = persistence.key;\n if (!key) {\n return;\n }\n\n const targetStorage = resolveStorageInstance(driver);\n if (!targetStorage) {\n return;\n }\n\n try {\n await targetStorage.set(key, value);\n } catch(e) {\n logger.error(e);\n // ignore persistence errors\n }\n}\n"],"names":["readPersistedValue","writePersistedValue","resolveStorageInstance","driver","window","instance","storage","local","session","indexedDB","get","set","persistence","enabled","key","targetStorage","value","undefined","JSON","stringify","e","logger","error"],"mappings":";;;;;;;;;;;QA2BsBA;eAAAA;;QAgCAC;eAAAA;;;yBA3DE;uBAEH;AAOrB,SAASC,uBAAuBC,MAA2B;IACzD,IAAIA,WAAW,UAAU,OAAOC,WAAW,aAAa;QACtD,OAAO;IACT;IAEA,MAAMC,WAAWF,WAAW,iBACxBG,gBAAO,CAACC,KAAK,GACbJ,WAAW,mBACTG,gBAAO,CAACE,OAAO,GACfF,gBAAO,CAACG,SAAS;IAEvB,IAAI,CAACJ,YAAY,OAAO,AAACA,SAAiBK,GAAG,KAAK,cAAc,OAAO,AAACL,SAAiBM,GAAG,KAAK,YAAY;QAC3G,OAAO;IACT;IAEA,OAAON;AACT;AAEO,eAAeL,mBACpBY,WAA2C;IAE3C,IAAI,CAACA,eAAeA,YAAYC,OAAO,KAAK,OAAO;QACjD,OAAO;IACT;IAEA,MAAMV,SAASS,YAAYN,OAAO,IAAI;IACtC,MAAMQ,MAAMF,YAAYE,GAAG;IAC3B,IAAI,CAACA,KAAK;QACR,OAAO;IACT;IAEA,MAAMC,gBAAgBb,uBAAuBC;IAC7C,IAAI,CAACY,eAAe;QAClB,OAAO;IACT;IAEA,IAAI;QACF,MAAMC,QAAQ,MAAMD,cAAcL,GAAG,CAACI;QACtC,IAAIE,UAAU,QAAQA,UAAUC,WAAW;YACzC,OAAO;QACT;QACA,IAAI,OAAOD,UAAU,UAAU;YAC7B,OAAOA;QACT;QACA,OAAOE,KAAKC,SAAS,CAACH;IACxB,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEO,eAAef,oBACpBW,WAA2C,EAC3CI,KAAa;IAEb,IAAI,CAACJ,eAAeA,YAAYC,OAAO,KAAK,OAAO;QACjD;IACF;IAEA,MAAMV,SAASS,YAAYN,OAAO,IAAI;IACtC,MAAMQ,MAAMF,YAAYE,GAAG;IAC3B,IAAI,CAACA,KAAK;QACR;IACF;IAEA,MAAMC,gBAAgBb,uBAAuBC;IAC7C,IAAI,CAACY,eAAe;QAClB;IACF;IAEA,IAAI;QACF,MAAMA,cAAcJ,GAAG,CAACG,KAAKE;IAC/B,EAAE,OAAMI,GAAG;QACTC,aAAM,CAACC,KAAK,CAACF;IACb,4BAA4B;IAC9B;AACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { storage } from "../../library";
|
|
2
|
+
import { logger } from "@/utils";
|
|
2
3
|
function resolveStorageInstance(driver) {
|
|
3
4
|
if (driver === 'none' || typeof window === 'undefined') {
|
|
4
5
|
return null;
|
|
@@ -50,7 +51,8 @@ export async function writePersistedValue(persistence, value) {
|
|
|
50
51
|
}
|
|
51
52
|
try {
|
|
52
53
|
await targetStorage.set(key, value);
|
|
53
|
-
} catch
|
|
54
|
+
} catch (e) {
|
|
55
|
+
logger.error(e);
|
|
54
56
|
// ignore persistence errors
|
|
55
57
|
}
|
|
56
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/kernel/manager/persistence.ts"],"sourcesContent":["import { storage } from '../../library';\nimport type { KernelStorageDriver, PersistenceOptions } from '../types';\n\ntype StorageLike = {\n get: (key: string) => Promise<unknown>;\n set: (key: string, value: unknown) => Promise<void>;\n};\n\nfunction resolveStorageInstance(driver: KernelStorageDriver): StorageLike | null {\n if (driver === 'none' || typeof window === 'undefined') {\n return null;\n }\n\n const instance = driver === 'localStorage'\n ? storage.local\n : driver === 'sessionStorage'\n ? storage.session\n : storage.indexedDB;\n\n if (!instance || typeof (instance as any).get !== 'function' || typeof (instance as any).set !== 'function') {\n return null;\n }\n\n return instance as unknown as StorageLike;\n}\n\nexport async function readPersistedValue(\n persistence: PersistenceOptions | undefined\n): Promise<string | null> {\n if (!persistence || persistence.enabled === false) {\n return null;\n }\n\n const driver = persistence.storage ?? 'localStorage';\n const key = persistence.key;\n if (!key) {\n return null;\n }\n\n const targetStorage = resolveStorageInstance(driver);\n if (!targetStorage) {\n return null;\n }\n\n try {\n const value = await targetStorage.get(key);\n if (value === null || value === undefined) {\n return null;\n }\n if (typeof value === 'string') {\n return value;\n }\n return JSON.stringify(value);\n } catch {\n return null;\n }\n}\n\nexport async function writePersistedValue(\n persistence: PersistenceOptions | undefined,\n value: string\n): Promise<void> {\n if (!persistence || persistence.enabled === false) {\n return;\n }\n\n const driver = persistence.storage ?? 'localStorage';\n const key = persistence.key;\n if (!key) {\n return;\n }\n\n const targetStorage = resolveStorageInstance(driver);\n if (!targetStorage) {\n return;\n }\n\n try {\n await targetStorage.set(key, value);\n } catch {\n // ignore persistence errors\n }\n}\n"],"names":["storage","resolveStorageInstance","driver","window","instance","local","session","indexedDB","get","set","readPersistedValue","persistence","enabled","key","targetStorage","value","undefined","JSON","stringify","writePersistedValue"],"mappings":"AAAA,SAASA,OAAO,QAAQ,gBAAgB;
|
|
1
|
+
{"version":3,"sources":["../../../src/kernel/manager/persistence.ts"],"sourcesContent":["import { storage } from '../../library';\nimport type { KernelStorageDriver, PersistenceOptions } from '../types';\nimport {logger} from \"@/utils\";\n\ntype StorageLike = {\n get: (key: string) => Promise<unknown>;\n set: (key: string, value: unknown) => Promise<void>;\n};\n\nfunction resolveStorageInstance(driver: KernelStorageDriver): StorageLike | null {\n if (driver === 'none' || typeof window === 'undefined') {\n return null;\n }\n\n const instance = driver === 'localStorage'\n ? storage.local\n : driver === 'sessionStorage'\n ? storage.session\n : storage.indexedDB;\n\n if (!instance || typeof (instance as any).get !== 'function' || typeof (instance as any).set !== 'function') {\n return null;\n }\n\n return instance as unknown as StorageLike;\n}\n\nexport async function readPersistedValue(\n persistence: PersistenceOptions | undefined\n): Promise<string | null> {\n if (!persistence || persistence.enabled === false) {\n return null;\n }\n\n const driver = persistence.storage ?? 'localStorage';\n const key = persistence.key;\n if (!key) {\n return null;\n }\n\n const targetStorage = resolveStorageInstance(driver);\n if (!targetStorage) {\n return null;\n }\n\n try {\n const value = await targetStorage.get(key);\n if (value === null || value === undefined) {\n return null;\n }\n if (typeof value === 'string') {\n return value;\n }\n return JSON.stringify(value);\n } catch {\n return null;\n }\n}\n\nexport async function writePersistedValue(\n persistence: PersistenceOptions | undefined,\n value: string\n): Promise<void> {\n if (!persistence || persistence.enabled === false) {\n return;\n }\n\n const driver = persistence.storage ?? 'localStorage';\n const key = persistence.key;\n if (!key) {\n return;\n }\n\n const targetStorage = resolveStorageInstance(driver);\n if (!targetStorage) {\n return;\n }\n\n try {\n await targetStorage.set(key, value);\n } catch(e) {\n logger.error(e);\n // ignore persistence errors\n }\n}\n"],"names":["storage","logger","resolveStorageInstance","driver","window","instance","local","session","indexedDB","get","set","readPersistedValue","persistence","enabled","key","targetStorage","value","undefined","JSON","stringify","writePersistedValue","e","error"],"mappings":"AAAA,SAASA,OAAO,QAAQ,gBAAgB;AAExC,SAAQC,MAAM,QAAO,UAAU;AAO/B,SAASC,uBAAuBC,MAA2B;IACzD,IAAIA,WAAW,UAAU,OAAOC,WAAW,aAAa;QACtD,OAAO;IACT;IAEA,MAAMC,WAAWF,WAAW,iBACxBH,QAAQM,KAAK,GACbH,WAAW,mBACTH,QAAQO,OAAO,GACfP,QAAQQ,SAAS;IAEvB,IAAI,CAACH,YAAY,OAAO,AAACA,SAAiBI,GAAG,KAAK,cAAc,OAAO,AAACJ,SAAiBK,GAAG,KAAK,YAAY;QAC3G,OAAO;IACT;IAEA,OAAOL;AACT;AAEA,OAAO,eAAeM,mBACpBC,WAA2C;IAE3C,IAAI,CAACA,eAAeA,YAAYC,OAAO,KAAK,OAAO;QACjD,OAAO;IACT;IAEA,MAAMV,SAASS,YAAYZ,OAAO,IAAI;IACtC,MAAMc,MAAMF,YAAYE,GAAG;IAC3B,IAAI,CAACA,KAAK;QACR,OAAO;IACT;IAEA,MAAMC,gBAAgBb,uBAAuBC;IAC7C,IAAI,CAACY,eAAe;QAClB,OAAO;IACT;IAEA,IAAI;QACF,MAAMC,QAAQ,MAAMD,cAAcN,GAAG,CAACK;QACtC,IAAIE,UAAU,QAAQA,UAAUC,WAAW;YACzC,OAAO;QACT;QACA,IAAI,OAAOD,UAAU,UAAU;YAC7B,OAAOA;QACT;QACA,OAAOE,KAAKC,SAAS,CAACH;IACxB,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEA,OAAO,eAAeI,oBACpBR,WAA2C,EAC3CI,KAAa;IAEb,IAAI,CAACJ,eAAeA,YAAYC,OAAO,KAAK,OAAO;QACjD;IACF;IAEA,MAAMV,SAASS,YAAYZ,OAAO,IAAI;IACtC,MAAMc,MAAMF,YAAYE,GAAG;IAC3B,IAAI,CAACA,KAAK;QACR;IACF;IAEA,MAAMC,gBAAgBb,uBAAuBC;IAC7C,IAAI,CAACY,eAAe;QAClB;IACF;IAEA,IAAI;QACF,MAAMA,cAAcL,GAAG,CAACI,KAAKE;IAC/B,EAAE,OAAMK,GAAG;QACTpB,OAAOqB,KAAK,CAACD;IACb,4BAA4B;IAC9B;AACF"}
|
|
@@ -9,7 +9,6 @@ Object.defineProperty(exports, "ThemeManager", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
const _constants = require("../constants");
|
|
12
|
-
const _persistence = require("./persistence");
|
|
13
12
|
function _define_property(obj, key, value) {
|
|
14
13
|
if (key in obj) {
|
|
15
14
|
Object.defineProperty(obj, key, {
|
|
@@ -47,19 +46,18 @@ let ThemeManager = class ThemeManager {
|
|
|
47
46
|
..._constants.DEFAULT_THEME,
|
|
48
47
|
...this.config.initial || {}
|
|
49
48
|
};
|
|
50
|
-
|
|
49
|
+
this.cache = context.cacheManager;
|
|
50
|
+
const { key = "vlian:kernel:theme" } = this.config.persistence || {};
|
|
51
|
+
const persisted = await this.cache.get(key, {
|
|
52
|
+
defaultValue: this.theme
|
|
53
|
+
});
|
|
51
54
|
if (persisted !== null) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
...parsed
|
|
57
|
-
};
|
|
58
|
-
} catch {
|
|
59
|
-
// ignore parse errors
|
|
60
|
-
}
|
|
55
|
+
this.theme = {
|
|
56
|
+
...this.theme,
|
|
57
|
+
...persisted
|
|
58
|
+
};
|
|
61
59
|
} else {
|
|
62
|
-
await
|
|
60
|
+
await this.cache.set(key, persisted);
|
|
63
61
|
}
|
|
64
62
|
applyThemeToDocument(this.theme);
|
|
65
63
|
}
|
|
@@ -90,7 +88,8 @@ let ThemeManager = class ThemeManager {
|
|
|
90
88
|
...nextTheme
|
|
91
89
|
};
|
|
92
90
|
applyThemeToDocument(this.theme);
|
|
93
|
-
|
|
91
|
+
const { key = "vlian:kernel:theme" } = this.config.persistence || {};
|
|
92
|
+
await this.cache?.set(key, this.theme);
|
|
94
93
|
this.emit(this.theme, prev);
|
|
95
94
|
}
|
|
96
95
|
getSnapshot() {
|
|
@@ -100,6 +99,7 @@ let ThemeManager = class ThemeManager {
|
|
|
100
99
|
_define_property(this, "theme", _constants.DEFAULT_THEME);
|
|
101
100
|
_define_property(this, "config", _constants.DEFAULT_CONFIG.theme);
|
|
102
101
|
_define_property(this, "listeners", new Set());
|
|
102
|
+
_define_property(this, "cache", undefined);
|
|
103
103
|
}
|
|
104
104
|
};
|
|
105
105
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/kernel/manager/themeManager.ts"],"sourcesContent":["import type { KernelConfig, KernelManager, KernelManagerContext, ThemeSnapshot } from '../types';\nimport { DEFAULT_CONFIG, DEFAULT_THEME } from '../constants';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/kernel/manager/themeManager.ts"],"sourcesContent":["import type { KernelConfig, KernelManager, KernelManagerContext, ThemeSnapshot } from '../types';\nimport { DEFAULT_CONFIG, DEFAULT_THEME } from '../constants';\nimport type{StorageInstance} from \"@vlian/utils\";\n\ntype ThemeListener = (next: ThemeSnapshot, prev: ThemeSnapshot) => void;\n\nfunction applyThemeToDocument(theme: ThemeSnapshot): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n const root = document.documentElement;\n root.classList.remove('light', 'dark');\n\n const resolvedMode = theme.mode === 'system'\n ? (typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light')\n : theme.mode;\n\n root.classList.add(resolvedMode);\n\n if (theme.primaryColor) {\n root.style.setProperty('--app-primary-color', theme.primaryColor);\n }\n\n if (theme.tokens) {\n Object.entries(theme.tokens).forEach(([token, tokenValue]) => {\n root.style.setProperty(`--${token}`, String(tokenValue));\n });\n }\n}\n\nexport class ThemeManager implements KernelManager<ThemeSnapshot> {\n private theme: ThemeSnapshot = DEFAULT_THEME;\n private config: KernelConfig['theme'] = DEFAULT_CONFIG.theme;\n private listeners = new Set<ThemeListener>();\n private cache: StorageInstance|undefined = undefined;\n\n public async initialize(context: KernelManagerContext): Promise<void> {\n this.config = context.config.theme;\n this.theme = { ...DEFAULT_THEME, ...(this.config.initial || {}) };\n\n this.cache = context.cacheManager;\n\n const { key = \"vlian:kernel:theme\" } = this.config.persistence || {};\n\n const persisted = await this.cache.get<ThemeSnapshot>(key, {\n defaultValue: this.theme\n })\n\n if (persisted !== null) {\n this.theme = { ...this.theme, ...persisted };\n } else {\n await this.cache.set(key, persisted);\n }\n\n applyThemeToDocument(this.theme);\n }\n\n public getTheme(): ThemeSnapshot {\n return { ...this.theme };\n }\n\n public subscribe(listener: ThemeListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private emit(next: ThemeSnapshot, prev: ThemeSnapshot): void {\n this.listeners.forEach((listener) => {\n listener({ ...next }, { ...prev });\n });\n }\n\n public async setTheme(nextTheme: ThemeSnapshot): Promise<void> {\n const prev = this.theme;\n this.theme = { ...this.theme, ...nextTheme };\n applyThemeToDocument(this.theme);\n\n const { key = \"vlian:kernel:theme\" } = this.config.persistence || {};\n\n await this.cache?.set(key, this.theme)\n\n this.emit(this.theme, prev);\n }\n\n public getSnapshot(): ThemeSnapshot {\n return this.getTheme();\n }\n}\n"],"names":["ThemeManager","applyThemeToDocument","theme","document","root","documentElement","classList","remove","resolvedMode","mode","window","matchMedia","matches","add","primaryColor","style","setProperty","tokens","Object","entries","forEach","token","tokenValue","String","initialize","context","config","DEFAULT_THEME","initial","cache","cacheManager","key","persistence","persisted","get","defaultValue","set","getTheme","subscribe","listener","listeners","delete","emit","next","prev","setTheme","nextTheme","getSnapshot","DEFAULT_CONFIG","Set","undefined"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ export declare class ThemeManager implements KernelManager<ThemeSnapshot> {
|
|
|
4
4
|
private theme;
|
|
5
5
|
private config;
|
|
6
6
|
private listeners;
|
|
7
|
+
private cache;
|
|
7
8
|
initialize(context: KernelManagerContext): Promise<void>;
|
|
8
9
|
getTheme(): ThemeSnapshot;
|
|
9
10
|
subscribe(listener: ThemeListener): () => void;
|
|
@@ -12,7 +12,6 @@ function _define_property(obj, key, value) {
|
|
|
12
12
|
return obj;
|
|
13
13
|
}
|
|
14
14
|
import { DEFAULT_CONFIG, DEFAULT_THEME } from "../constants";
|
|
15
|
-
import { readPersistedValue, writePersistedValue } from "./persistence";
|
|
16
15
|
function applyThemeToDocument(theme) {
|
|
17
16
|
if (typeof document === 'undefined') {
|
|
18
17
|
return;
|
|
@@ -37,19 +36,18 @@ export class ThemeManager {
|
|
|
37
36
|
...DEFAULT_THEME,
|
|
38
37
|
...this.config.initial || {}
|
|
39
38
|
};
|
|
40
|
-
|
|
39
|
+
this.cache = context.cacheManager;
|
|
40
|
+
const { key = "vlian:kernel:theme" } = this.config.persistence || {};
|
|
41
|
+
const persisted = await this.cache.get(key, {
|
|
42
|
+
defaultValue: this.theme
|
|
43
|
+
});
|
|
41
44
|
if (persisted !== null) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
...parsed
|
|
47
|
-
};
|
|
48
|
-
} catch {
|
|
49
|
-
// ignore parse errors
|
|
50
|
-
}
|
|
45
|
+
this.theme = {
|
|
46
|
+
...this.theme,
|
|
47
|
+
...persisted
|
|
48
|
+
};
|
|
51
49
|
} else {
|
|
52
|
-
await
|
|
50
|
+
await this.cache.set(key, persisted);
|
|
53
51
|
}
|
|
54
52
|
applyThemeToDocument(this.theme);
|
|
55
53
|
}
|
|
@@ -80,7 +78,8 @@ export class ThemeManager {
|
|
|
80
78
|
...nextTheme
|
|
81
79
|
};
|
|
82
80
|
applyThemeToDocument(this.theme);
|
|
83
|
-
|
|
81
|
+
const { key = "vlian:kernel:theme" } = this.config.persistence || {};
|
|
82
|
+
await this.cache?.set(key, this.theme);
|
|
84
83
|
this.emit(this.theme, prev);
|
|
85
84
|
}
|
|
86
85
|
getSnapshot() {
|
|
@@ -90,6 +89,7 @@ export class ThemeManager {
|
|
|
90
89
|
_define_property(this, "theme", DEFAULT_THEME);
|
|
91
90
|
_define_property(this, "config", DEFAULT_CONFIG.theme);
|
|
92
91
|
_define_property(this, "listeners", new Set());
|
|
92
|
+
_define_property(this, "cache", undefined);
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/kernel/manager/themeManager.ts"],"sourcesContent":["import type { KernelConfig, KernelManager, KernelManagerContext, ThemeSnapshot } from '../types';\nimport { DEFAULT_CONFIG, DEFAULT_THEME } from '../constants';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/kernel/manager/themeManager.ts"],"sourcesContent":["import type { KernelConfig, KernelManager, KernelManagerContext, ThemeSnapshot } from '../types';\nimport { DEFAULT_CONFIG, DEFAULT_THEME } from '../constants';\nimport type{StorageInstance} from \"@vlian/utils\";\n\ntype ThemeListener = (next: ThemeSnapshot, prev: ThemeSnapshot) => void;\n\nfunction applyThemeToDocument(theme: ThemeSnapshot): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n const root = document.documentElement;\n root.classList.remove('light', 'dark');\n\n const resolvedMode = theme.mode === 'system'\n ? (typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light')\n : theme.mode;\n\n root.classList.add(resolvedMode);\n\n if (theme.primaryColor) {\n root.style.setProperty('--app-primary-color', theme.primaryColor);\n }\n\n if (theme.tokens) {\n Object.entries(theme.tokens).forEach(([token, tokenValue]) => {\n root.style.setProperty(`--${token}`, String(tokenValue));\n });\n }\n}\n\nexport class ThemeManager implements KernelManager<ThemeSnapshot> {\n private theme: ThemeSnapshot = DEFAULT_THEME;\n private config: KernelConfig['theme'] = DEFAULT_CONFIG.theme;\n private listeners = new Set<ThemeListener>();\n private cache: StorageInstance|undefined = undefined;\n\n public async initialize(context: KernelManagerContext): Promise<void> {\n this.config = context.config.theme;\n this.theme = { ...DEFAULT_THEME, ...(this.config.initial || {}) };\n\n this.cache = context.cacheManager;\n\n const { key = \"vlian:kernel:theme\" } = this.config.persistence || {};\n\n const persisted = await this.cache.get<ThemeSnapshot>(key, {\n defaultValue: this.theme\n })\n\n if (persisted !== null) {\n this.theme = { ...this.theme, ...persisted };\n } else {\n await this.cache.set(key, persisted);\n }\n\n applyThemeToDocument(this.theme);\n }\n\n public getTheme(): ThemeSnapshot {\n return { ...this.theme };\n }\n\n public subscribe(listener: ThemeListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private emit(next: ThemeSnapshot, prev: ThemeSnapshot): void {\n this.listeners.forEach((listener) => {\n listener({ ...next }, { ...prev });\n });\n }\n\n public async setTheme(nextTheme: ThemeSnapshot): Promise<void> {\n const prev = this.theme;\n this.theme = { ...this.theme, ...nextTheme };\n applyThemeToDocument(this.theme);\n\n const { key = \"vlian:kernel:theme\" } = this.config.persistence || {};\n\n await this.cache?.set(key, this.theme)\n\n this.emit(this.theme, prev);\n }\n\n public getSnapshot(): ThemeSnapshot {\n return this.getTheme();\n }\n}\n"],"names":["DEFAULT_CONFIG","DEFAULT_THEME","applyThemeToDocument","theme","document","root","documentElement","classList","remove","resolvedMode","mode","window","matchMedia","matches","add","primaryColor","style","setProperty","tokens","Object","entries","forEach","token","tokenValue","String","ThemeManager","initialize","context","config","initial","cache","cacheManager","key","persistence","persisted","get","defaultValue","set","getTheme","subscribe","listener","listeners","delete","emit","next","prev","setTheme","nextTheme","getSnapshot","Set","undefined"],"mappings":"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"}
|
package/dist/kernel/types.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { LogLevel } from '@vlian/logger';
|
|
|
2
2
|
import type { LangType } from '../library/locale/types';
|
|
3
3
|
import type { StartOptions as CoreStartOptions } from '../core/types';
|
|
4
4
|
import type { StorageOptions } from '../types';
|
|
5
|
+
import type { StorageInstance } from "@vlian/utils";
|
|
5
6
|
export type KernelInstanceId = string;
|
|
6
7
|
export type KernelStorageDriver = 'localStorage' | 'sessionStorage' | 'indexedDB' | 'none';
|
|
7
8
|
export interface ThemeSnapshot {
|
|
@@ -49,6 +50,7 @@ export interface KernelTimingMetric {
|
|
|
49
50
|
export interface KernelManagerContext {
|
|
50
51
|
instanceId: KernelInstanceId;
|
|
51
52
|
config: KernelConfig;
|
|
53
|
+
cacheManager: StorageInstance;
|
|
52
54
|
}
|
|
53
55
|
export interface KernelManager<TSnapshot = unknown> {
|
|
54
56
|
initialize: (context: KernelManagerContext) => Promise<void> | void;
|