@vlian/framework 1.2.63 → 2.0.1
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 +21 -141
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -9
- package/dist/index.js +1 -1
- package/dist/index.umd.js +10 -220
- package/dist/kernel/constants.cjs +1 -1
- package/dist/kernel/constants.d.ts +1 -3
- package/dist/kernel/constants.js +1 -1
- package/dist/kernel/custom-manager/i18n/constants.cjs +1 -0
- package/dist/kernel/custom-manager/i18n/constants.d.ts +4 -0
- package/dist/kernel/custom-manager/i18n/constants.js +1 -0
- package/dist/kernel/custom-manager/i18n/index.cjs +1 -0
- package/dist/kernel/custom-manager/i18n/index.d.ts +7 -0
- package/dist/kernel/custom-manager/i18n/index.js +1 -0
- package/dist/kernel/custom-manager/i18n/types.d.ts +10 -0
- package/dist/kernel/custom-manager/index.cjs +1 -0
- package/dist/kernel/custom-manager/index.d.ts +4 -0
- package/dist/kernel/custom-manager/index.js +1 -0
- package/dist/kernel/custom-manager/theme/constants.cjs +1 -0
- package/dist/kernel/custom-manager/theme/constants.d.ts +4 -0
- package/dist/kernel/custom-manager/theme/constants.js +1 -0
- package/dist/kernel/custom-manager/theme/index.cjs +1 -0
- package/dist/kernel/custom-manager/theme/index.d.ts +7 -0
- package/dist/kernel/custom-manager/theme/index.js +1 -0
- package/dist/kernel/custom-manager/theme/types.d.ts +14 -0
- package/dist/kernel/index.cjs +1 -1
- package/dist/kernel/index.d.ts +4 -2
- package/dist/kernel/index.js +1 -1
- package/dist/kernel/kernel.cjs +1 -1
- package/dist/kernel/kernel.d.ts +3 -7
- package/dist/kernel/kernel.js +1 -1
- package/dist/kernel/manager/i18n/I18nManager.cjs +1 -1
- package/dist/kernel/manager/i18n/I18nManager.d.ts +2 -1
- package/dist/kernel/manager/i18n/I18nManager.js +1 -1
- package/dist/kernel/manager/i18n/i18n.persistence.d.ts +2 -1
- package/dist/kernel/manager/i18n/i18n.runtime.cjs +1 -0
- package/dist/kernel/manager/i18n/i18n.runtime.d.ts +8 -0
- package/dist/kernel/manager/i18n/i18n.runtime.js +1 -0
- package/dist/kernel/manager/i18n/i18n.schema.d.ts +1 -1
- package/dist/kernel/manager/i18nManager.cjs +1 -1
- package/dist/kernel/manager/i18nManager.d.ts +1 -1
- package/dist/kernel/manager/i18nManager.js +1 -1
- package/dist/kernel/manager/index.cjs +1 -1
- package/dist/kernel/manager/index.d.ts +0 -2
- package/dist/kernel/manager/index.js +1 -1
- package/dist/kernel/manager/theme/ThemeManager.cjs +1 -1
- package/dist/kernel/manager/theme/ThemeManager.d.ts +8 -1
- package/dist/kernel/manager/theme/ThemeManager.js +1 -1
- package/dist/kernel/manager/theme/theme.dom.cjs +1 -1
- package/dist/kernel/manager/theme/theme.dom.d.ts +10 -3
- package/dist/kernel/manager/theme/theme.dom.js +1 -1
- package/dist/kernel/manager/theme/theme.persistence.d.ts +2 -1
- package/dist/kernel/manager/theme/theme.schema.cjs +1 -1
- package/dist/kernel/manager/theme/theme.schema.d.ts +3 -1
- package/dist/kernel/manager/theme/theme.schema.js +1 -1
- package/dist/kernel/manager/themeManager.cjs +1 -1
- package/dist/kernel/manager/themeManager.d.ts +1 -1
- package/dist/kernel/manager/themeManager.js +1 -1
- package/dist/kernel/types.d.ts +10 -39
- package/package.json +10 -133
- package/dist/analytics/index.cjs +0 -1
- package/dist/analytics/index.d.ts +0 -2
- package/dist/analytics/index.js +0 -1
- package/dist/analytics.umd.js +0 -19
- package/dist/components/index.cjs +0 -1
- package/dist/components/index.d.ts +0 -1
- package/dist/components/index.js +0 -1
- package/dist/components/persistence.cjs +0 -1
- package/dist/components/persistence.d.ts +0 -12
- package/dist/components/persistence.js +0 -1
- package/dist/library/index.cjs +0 -1
- package/dist/library/index.d.ts +0 -2
- package/dist/library/index.js +0 -1
- package/dist/library/locale/index.cjs +0 -1
- package/dist/library/locale/index.d.ts +0 -6
- package/dist/library/locale/index.js +0 -1
- package/dist/library/locale/langs/en-us/index.cjs +0 -1
- package/dist/library/locale/langs/en-us/index.d.ts +0 -3
- package/dist/library/locale/langs/en-us/index.js +0 -1
- package/dist/library/locale/langs/zh-cn/index.cjs +0 -1
- package/dist/library/locale/langs/zh-cn/index.d.ts +0 -3
- package/dist/library/locale/langs/zh-cn/index.js +0 -1
- package/dist/library/locale/types.d.ts +0 -38
- package/dist/library/storage/cache.cjs +0 -1
- package/dist/library/storage/cache.d.ts +0 -57
- package/dist/library/storage/cache.js +0 -1
- package/dist/library/storage/encryption.cjs +0 -1
- package/dist/library/storage/encryption.d.ts +0 -45
- package/dist/library/storage/encryption.js +0 -1
- package/dist/library/storage/index.cjs +0 -1
- package/dist/library/storage/index.d.ts +0 -62
- package/dist/library/storage/index.js +0 -1
- package/dist/state/StateManager.cjs +0 -1
- package/dist/state/StateManager.d.ts +0 -120
- package/dist/state/StateManager.js +0 -1
- package/dist/state/adapters/AdapterFactory.cjs +0 -1
- package/dist/state/adapters/AdapterFactory.d.ts +0 -51
- package/dist/state/adapters/AdapterFactory.js +0 -1
- package/dist/state/adapters/DefaultAdapter.cjs +0 -1
- package/dist/state/adapters/DefaultAdapter.d.ts +0 -38
- package/dist/state/adapters/DefaultAdapter.js +0 -1
- package/dist/state/adapters/ReduxAdapter.cjs +0 -1
- package/dist/state/adapters/ReduxAdapter.d.ts +0 -129
- package/dist/state/adapters/ReduxAdapter.js +0 -1
- package/dist/state/adapters/ZustandAdapter.cjs +0 -1
- package/dist/state/adapters/ZustandAdapter.d.ts +0 -46
- package/dist/state/adapters/ZustandAdapter.js +0 -1
- package/dist/state/adapters/index.cjs +0 -1
- package/dist/state/adapters/index.d.ts +0 -8
- package/dist/state/adapters/index.js +0 -1
- package/dist/state/adapters/types.cjs +0 -1
- package/dist/state/adapters/types.d.ts +0 -4
- package/dist/state/adapters/types.js +0 -1
- package/dist/state/core/DerivedStateInstance.cjs +0 -1
- package/dist/state/core/DerivedStateInstance.d.ts +0 -100
- package/dist/state/core/DerivedStateInstance.js +0 -1
- package/dist/state/core/StateInstance.cjs +0 -1
- package/dist/state/core/StateInstance.d.ts +0 -85
- package/dist/state/core/StateInstance.js +0 -1
- package/dist/state/core/StateRegistry.cjs +0 -1
- package/dist/state/core/StateRegistry.d.ts +0 -55
- package/dist/state/core/StateRegistry.js +0 -1
- package/dist/state/core/StateScope.cjs +0 -1
- package/dist/state/core/StateScope.d.ts +0 -71
- package/dist/state/core/StateScope.js +0 -1
- package/dist/state/core/index.cjs +0 -1
- package/dist/state/core/index.d.ts +0 -7
- package/dist/state/core/index.js +0 -1
- package/dist/state/index.cjs +0 -1
- package/dist/state/index.d.ts +0 -8
- package/dist/state/index.js +0 -1
- package/dist/state/types.d.ts +0 -230
- package/dist/state.umd.js +0 -41
- package/dist/types.cjs +0 -1
- package/dist/types.d.ts +0 -7
- package/dist/types.js +0 -1
- package/dist/utils/analytics.cjs +0 -1
- package/dist/utils/analytics.d.ts +0 -127
- package/dist/utils/analytics.js +0 -1
- package/dist/utils/configSecurity.cjs +0 -3
- package/dist/utils/configSecurity.d.ts +0 -100
- package/dist/utils/configSecurity.js +0 -3
- package/dist/utils/csrf.cjs +0 -1
- package/dist/utils/csrf.d.ts +0 -1
- package/dist/utils/csrf.js +0 -1
- package/dist/utils/errors/ErrorCodes.cjs +0 -1
- package/dist/utils/errors/ErrorCodes.d.ts +0 -1
- package/dist/utils/errors/ErrorCodes.js +0 -1
- package/dist/utils/errors.cjs +0 -1
- package/dist/utils/errors.d.ts +0 -30
- package/dist/utils/errors.js +0 -1
- package/dist/utils/index.cjs +0 -1
- package/dist/utils/index.d.ts +0 -39
- package/dist/utils/index.js +0 -1
- package/dist/utils/logger.cjs +0 -1
- package/dist/utils/logger.d.ts +0 -2
- package/dist/utils/logger.js +0 -1
- package/dist/utils/logger.types.cjs +0 -1
- package/dist/utils/logger.types.d.ts +0 -2
- package/dist/utils/logger.types.js +0 -1
- package/dist/utils/monitoring.cjs +0 -1
- package/dist/utils/monitoring.d.ts +0 -1
- package/dist/utils/monitoring.js +0 -1
- package/dist/utils/performance.cjs +0 -1
- package/dist/utils/performance.d.ts +0 -2
- package/dist/utils/performance.js +0 -1
- package/dist/utils/resourceLoader.cjs +0 -1
- package/dist/utils/resourceLoader.d.ts +0 -2
- package/dist/utils/resourceLoader.js +0 -1
- package/dist/utils/runtimeSecurity.cjs +0 -1
- package/dist/utils/runtimeSecurity.d.ts +0 -2
- package/dist/utils/runtimeSecurity.js +0 -1
- package/dist/utils/security.cjs +0 -1
- package/dist/utils/security.d.ts +0 -2
- package/dist/utils/security.js +0 -1
- package/dist/utils/traceId.cjs +0 -1
- package/dist/utils/traceId.d.ts +0 -1
- package/dist/utils/traceId.js +0 -1
- package/dist/utils/validation.cjs +0 -1
- package/dist/utils/validation.d.ts +0 -2
- package/dist/utils/validation.js +0 -1
- /package/dist/{library/locale → kernel/custom-manager/i18n}/types.cjs +0 -0
- /package/dist/{library/locale → kernel/custom-manager/i18n}/types.js +0 -0
- /package/dist/{state → kernel/custom-manager/theme}/types.cjs +0 -0
- /package/dist/{state → kernel/custom-manager/theme}/types.js +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Kernel } from '../../kernel';
|
|
2
|
+
import { I18nManager } from '../../manager/i18n/I18nManager';
|
|
3
|
+
import type { I18nManagerConfig } from './types';
|
|
4
|
+
export { I18nManager } from '../../manager/i18n/I18nManager';
|
|
5
|
+
export { DEFAULT_I18N, DEFAULT_I18N_MANAGER_CONFIG, I18N_MANAGER_NAME } from './constants';
|
|
6
|
+
export type { I18nManagerConfig, I18nSnapshot } from './types';
|
|
7
|
+
export declare function registerI18nManager(kernel: Kernel, config?: I18nManagerConfig): Promise<I18nManager>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{I18nManager}from"../../manager/i18n/I18nManager";import{DEFAULT_I18N_MANAGER_CONFIG,I18N_MANAGER_NAME}from"./constants";export{I18nManager}from"../../manager/i18n/I18nManager";export{DEFAULT_I18N,DEFAULT_I18N_MANAGER_CONFIG,I18N_MANAGER_NAME}from"./constants";export async function registerI18nManager(kernel,config=DEFAULT_I18N_MANAGER_CONFIG){const existing=kernel.getManager(I18N_MANAGER_NAME);if(existing instanceof I18nManager){kernel.setManagerConfig(I18N_MANAGER_NAME,config);await kernel.initializeManager(I18N_MANAGER_NAME);return existing}const manager=new I18nManager;kernel.setManagerConfig(I18N_MANAGER_NAME,config);kernel.registerManager(I18N_MANAGER_NAME,manager);await kernel.initializeManager(I18N_MANAGER_NAME);return manager}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Resource } from 'i18next';
|
|
2
|
+
import type { PersistenceOptions } from '../../types';
|
|
3
|
+
export interface I18nSnapshot {
|
|
4
|
+
locale: string;
|
|
5
|
+
resources?: Resource;
|
|
6
|
+
}
|
|
7
|
+
export interface I18nManagerConfig {
|
|
8
|
+
initial?: I18nSnapshot;
|
|
9
|
+
persistence?: PersistenceOptions;
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get DEFAULT_I18N(){return _i18n.DEFAULT_I18N},get DEFAULT_I18N_MANAGER_CONFIG(){return _i18n.DEFAULT_I18N_MANAGER_CONFIG},get DEFAULT_THEME(){return _theme.DEFAULT_THEME},get DEFAULT_THEME_MANAGER_CONFIG(){return _theme.DEFAULT_THEME_MANAGER_CONFIG},get I18N_MANAGER_NAME(){return _i18n.I18N_MANAGER_NAME},get I18nManager(){return _i18n.I18nManager},get THEME_MANAGER_NAME(){return _theme.THEME_MANAGER_NAME},get ThemeManager(){return _theme.ThemeManager},get registerI18nManager(){return _i18n.registerI18nManager},get registerThemeManager(){return _theme.registerThemeManager}});const _theme=require("./theme");const _i18n=require("./i18n");
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ThemeManager, DEFAULT_THEME, DEFAULT_THEME_MANAGER_CONFIG, THEME_MANAGER_NAME, registerThemeManager, } from './theme';
|
|
2
|
+
export { I18nManager, DEFAULT_I18N, DEFAULT_I18N_MANAGER_CONFIG, I18N_MANAGER_NAME, registerI18nManager, } from './i18n';
|
|
3
|
+
export type { ResolvedThemeMode, ResolvedThemeSnapshot, ThemeManagerConfig, ThemeSnapshot } from './theme';
|
|
4
|
+
export type { I18nManagerConfig, I18nSnapshot } from './i18n';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{ThemeManager,DEFAULT_THEME,DEFAULT_THEME_MANAGER_CONFIG,THEME_MANAGER_NAME,registerThemeManager}from"./theme";export{I18nManager,DEFAULT_I18N,DEFAULT_I18N_MANAGER_CONFIG,I18N_MANAGER_NAME,registerI18nManager}from"./i18n";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get DEFAULT_THEME(){return DEFAULT_THEME},get DEFAULT_THEME_MANAGER_CONFIG(){return DEFAULT_THEME_MANAGER_CONFIG},get THEME_MANAGER_NAME(){return THEME_MANAGER_NAME}});const THEME_MANAGER_NAME="theme";const DEFAULT_THEME={mode:"light"};const DEFAULT_THEME_MANAGER_CONFIG={initial:DEFAULT_THEME,persistence:{enabled:true,storage:"localStorage",key:"vlian:kernel:theme"}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const THEME_MANAGER_NAME="theme";export const DEFAULT_THEME={mode:"light"};export const DEFAULT_THEME_MANAGER_CONFIG={initial:DEFAULT_THEME,persistence:{enabled:true,storage:"localStorage",key:"vlian:kernel:theme"}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get DEFAULT_THEME(){return _constants.DEFAULT_THEME},get DEFAULT_THEME_MANAGER_CONFIG(){return _constants.DEFAULT_THEME_MANAGER_CONFIG},get THEME_MANAGER_NAME(){return _constants.THEME_MANAGER_NAME},get ThemeManager(){return _ThemeManager.ThemeManager},get registerThemeManager(){return registerThemeManager}});const _ThemeManager=require("../../manager/theme/ThemeManager");const _constants=require("./constants");async function registerThemeManager(kernel,config=_constants.DEFAULT_THEME_MANAGER_CONFIG){const existing=kernel.getManager(_constants.THEME_MANAGER_NAME);if(existing instanceof _ThemeManager.ThemeManager){kernel.setManagerConfig(_constants.THEME_MANAGER_NAME,config);await kernel.initializeManager(_constants.THEME_MANAGER_NAME);return existing}const manager=new _ThemeManager.ThemeManager;kernel.setManagerConfig(_constants.THEME_MANAGER_NAME,config);kernel.registerManager(_constants.THEME_MANAGER_NAME,manager);await kernel.initializeManager(_constants.THEME_MANAGER_NAME);return manager}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Kernel } from '../../kernel';
|
|
2
|
+
import { ThemeManager } from '../../manager/theme/ThemeManager';
|
|
3
|
+
import type { ThemeManagerConfig } from './types';
|
|
4
|
+
export { ThemeManager } from '../../manager/theme/ThemeManager';
|
|
5
|
+
export { DEFAULT_THEME, DEFAULT_THEME_MANAGER_CONFIG, THEME_MANAGER_NAME } from './constants';
|
|
6
|
+
export type { ResolvedThemeMode, ResolvedThemeSnapshot, ThemeManagerConfig, ThemeSnapshot } from './types';
|
|
7
|
+
export declare function registerThemeManager(kernel: Kernel, config?: ThemeManagerConfig): Promise<ThemeManager>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ThemeManager}from"../../manager/theme/ThemeManager";import{DEFAULT_THEME_MANAGER_CONFIG,THEME_MANAGER_NAME}from"./constants";export{ThemeManager}from"../../manager/theme/ThemeManager";export{DEFAULT_THEME,DEFAULT_THEME_MANAGER_CONFIG,THEME_MANAGER_NAME}from"./constants";export async function registerThemeManager(kernel,config=DEFAULT_THEME_MANAGER_CONFIG){const existing=kernel.getManager(THEME_MANAGER_NAME);if(existing instanceof ThemeManager){kernel.setManagerConfig(THEME_MANAGER_NAME,config);await kernel.initializeManager(THEME_MANAGER_NAME);return existing}const manager=new ThemeManager;kernel.setManagerConfig(THEME_MANAGER_NAME,config);kernel.registerManager(THEME_MANAGER_NAME,manager);await kernel.initializeManager(THEME_MANAGER_NAME);return manager}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PersistenceOptions } from '../../types';
|
|
2
|
+
export interface ThemeSnapshot {
|
|
3
|
+
mode: 'light' | 'dark' | 'system';
|
|
4
|
+
primaryColor?: string;
|
|
5
|
+
tokens?: Record<string, string | number>;
|
|
6
|
+
}
|
|
7
|
+
export type ResolvedThemeMode = Exclude<ThemeSnapshot['mode'], 'system'>;
|
|
8
|
+
export interface ResolvedThemeSnapshot extends ThemeSnapshot {
|
|
9
|
+
resolvedMode: ResolvedThemeMode;
|
|
10
|
+
}
|
|
11
|
+
export interface ThemeManagerConfig {
|
|
12
|
+
initial?: ThemeSnapshot;
|
|
13
|
+
persistence?: PersistenceOptions;
|
|
14
|
+
}
|
package/dist/kernel/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get CacheManager(){return _manager.CacheManager},get I18nManager(){return
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get CacheManager(){return _manager.CacheManager},get DEFAULT_I18N(){return _custommanager.DEFAULT_I18N},get DEFAULT_I18N_MANAGER_CONFIG(){return _custommanager.DEFAULT_I18N_MANAGER_CONFIG},get DEFAULT_THEME(){return _custommanager.DEFAULT_THEME},get DEFAULT_THEME_MANAGER_CONFIG(){return _custommanager.DEFAULT_THEME_MANAGER_CONFIG},get I18N_MANAGER_NAME(){return _custommanager.I18N_MANAGER_NAME},get I18nManager(){return _custommanager.I18nManager},get Kernel(){return _kernel.Kernel},get LoggerManager(){return _manager.LoggerManager},get THEME_MANAGER_NAME(){return _custommanager.THEME_MANAGER_NAME},get ThemeManager(){return _custommanager.ThemeManager},get getKernel(){return _kernel.getKernel},get kernelStartApp(){return _kernel.kernelStartApp},get registerI18nManager(){return _custommanager.registerI18nManager},get registerThemeManager(){return _custommanager.registerThemeManager},get startup(){return _kernel.startup}});const _kernel=require("./kernel");const _manager=require("./manager");const _custommanager=require("./custom-manager");
|
package/dist/kernel/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { Kernel, startup, getKernel, kernelStartApp } from './kernel';
|
|
2
|
-
export { LoggerManager, CacheManager
|
|
3
|
-
export
|
|
2
|
+
export { LoggerManager, CacheManager } from './manager';
|
|
3
|
+
export { ThemeManager, I18nManager, THEME_MANAGER_NAME, I18N_MANAGER_NAME, DEFAULT_THEME, DEFAULT_I18N, DEFAULT_THEME_MANAGER_CONFIG, DEFAULT_I18N_MANAGER_CONFIG, registerThemeManager, registerI18nManager, } from './custom-manager';
|
|
4
|
+
export type { KernelInstanceId, KernelStorageDriver, StorageOptions, PersistenceOptions, LoggerManagerConfig, CacheManagerConfig, KernelConfig, KernelTimingMetric, KernelManager, KernelManagerContext, KernelRenderContext, StartupHooks, StartOptions, KernelStartOptions, } from './types';
|
|
5
|
+
export type { ResolvedThemeMode, ResolvedThemeSnapshot, ThemeSnapshot, ThemeManagerConfig, I18nSnapshot, I18nManagerConfig, } from './custom-manager';
|
package/dist/kernel/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{Kernel,startup,getKernel,kernelStartApp}from"./kernel";export{LoggerManager,CacheManager
|
|
1
|
+
export{Kernel,startup,getKernel,kernelStartApp}from"./kernel";export{LoggerManager,CacheManager}from"./manager";export{ThemeManager,I18nManager,THEME_MANAGER_NAME,I18N_MANAGER_NAME,DEFAULT_THEME,DEFAULT_I18N,DEFAULT_THEME_MANAGER_CONFIG,DEFAULT_I18N_MANAGER_CONFIG,registerThemeManager,registerI18nManager}from"./custom-manager";
|
package/dist/kernel/kernel.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get Kernel(){return Kernel},get getKernel(){return getKernel},get kernelStartApp(){return kernelStartApp},get startup(){return startup}});const _constants=require("./constants");const _loggerManager=require("./manager/loggerManager");const _cacheManager=require("./manager/cacheManager");
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get Kernel(){return Kernel},get getKernel(){return getKernel},get kernelStartApp(){return kernelStartApp},get startup(){return startup}});const _constants=require("./constants");const _loggerManager=require("./manager/loggerManager");const _cacheManager=require("./manager/cacheManager");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function now(){return typeof performance!=="undefined"?performance.now():Date.now()}let Kernel=class Kernel{static getInstance(instanceId=_constants.DEFAULT_INSTANCE_ID){const existing=Kernel.instances.get(instanceId);if(existing){return existing}const created=new Kernel(instanceId);Kernel.instances.set(instanceId,created);return created}getId(){return this.instanceId}getConfig(){return this.config}getMetrics(){return[...this.metrics]}getLoggerManager(){return this.loggerManager}getCacheManager(){return this.cacheManager}getManager(name){return this.managers.get(name)}registerManager(name,manager){if(this.managers.has(name)){throw new Error(`Kernel manager "${name}" 已存在`)}this.managers.set(name,manager)}getManagerConfig(name){return this.config.managerConfigs[name]}setManagerConfig(name,config){this.config={...this.config,managerConfigs:{...this.config.managerConfigs,[name]:config}}}async startup(options={}){if(this.started){this.logDebug("kernel.startup.skip.already-started",{instanceId:this.instanceId});return this}if(this.startupPromise){return this.startupPromise}this.startupPromise=this.bootstrap(options).finally(()=>{this.startupPromise=null});return this.startupPromise}async bootstrap(options){await this.measurePhase("startup.begin",async()=>{this.logDebug("kernel.startup.begin",{instanceId:this.instanceId})});await this.measurePhase("config.load",async()=>{this.config=await this.resolveConfig(options)});await this.measurePhase("manager.register.custom",async()=>{if(options.customManagers){Object.entries(options.customManagers).forEach(([name,manager])=>{if(!this.managers.has(name)){this.managers.set(name,manager)}})}});await this.measurePhase("manager.initialize.default",async()=>{await this.initializeManager("cache");await this.initializeManager("logger")});await this.measurePhase("manager.initialize.custom",async()=>{const customManagerNames=[...this.managers.keys()].filter(name=>name!=="logger"&&name!=="cache");for(const name of customManagerNames){await this.initializeManager(name)}});await this.measurePhase("hooks.initialize",async()=>{await options.hooks?.initialize?.();await options.lifecycle?.initialization?.()});await this.measurePhase("render.custom",async()=>{if(options.render){await options.render({instanceId:this.instanceId,config:this.config})}});this.started=true;this.logDebug("kernel.startup.end",{instanceId:this.instanceId,metrics:this.metrics});return this}async resolveConfig(options){let loaded={};if(options.configLoader){const loaderResult=await options.configLoader();loaded=loaderResult||{}}return{logger:{..._constants.DEFAULT_CONFIG.logger,...loaded.logger,...options.config?.logger||{},level:options.loggerLevel??options.config?.logger?.level??loaded.logger?.level},cache:{..._constants.DEFAULT_CONFIG.cache,...loaded.cache,...options.config?.cache||{},storageOptions:{..._constants.DEFAULT_CONFIG.cache.storageOptions,...loaded.cache?.storageOptions||{},...options.config?.cache?.storageOptions||{},...options.storageOptions||{}}},managerConfigs:{..._constants.DEFAULT_CONFIG.managerConfigs,...loaded.managerConfigs||{},...options.config?.managerConfigs||{},...options.managerConfigs||{}}}}async initializeManager(name){if(this.initializedManagers.has(name)){return}const existingPromise=this.managerInitPromises.get(name);if(existingPromise){await existingPromise;return}const manager=this.managers.get(name);if(!manager){throw new Error(`Kernel manager "${name}" 不存在`)}if(name!=="cache"&&!this.initializedManagers.has("cache")){await this.initializeManager("cache")}const context={instanceId:this.instanceId,config:this.config,cacheManager:this.cacheManager.cache,getManagerConfig:managerName=>this.config.managerConfigs[managerName]};const initPromise=(async()=>{await manager.initialize(context);this.initializedManagers.add(name);this.logDebug("kernel.manager.initialized",{name,instanceId:this.instanceId})})();this.managerInitPromises.set(name,initPromise);try{await initPromise}finally{this.managerInitPromises.delete(name)}}async measurePhase(phase,task){const startTime=now();this.logDebug("kernel.phase.start",{phase,startTime,instanceId:this.instanceId});await task();const endTime=now();const metric={phase,startTime,endTime,duration:endTime-startTime};this.metrics.push(metric);this.logDebug("kernel.phase.end",metric)}logDebug(message,payload){this.loggerManager.debug(message,payload)}constructor(instanceId){_define_property(this,"instanceId",void 0);_define_property(this,"metrics",[]);_define_property(this,"managers",new Map);_define_property(this,"managerInitPromises",new Map);_define_property(this,"initializedManagers",new Set);_define_property(this,"loggerManager",new _loggerManager.LoggerManager);_define_property(this,"cacheManager",new _cacheManager.CacheManager);_define_property(this,"config",_constants.DEFAULT_CONFIG);_define_property(this,"startupPromise",null);_define_property(this,"started",false);this.instanceId=instanceId;this.managers.set("logger",this.loggerManager);this.managers.set("cache",this.cacheManager)}};_define_property(Kernel,"instances",new Map);async function startup(options={},instanceId=_constants.DEFAULT_INSTANCE_ID){const kernel=Kernel.getInstance(instanceId);return kernel.startup(options)}function getKernel(instanceId=_constants.DEFAULT_INSTANCE_ID){return Kernel.getInstance(instanceId)}async function kernelStartApp(options={},instanceId=_constants.DEFAULT_INSTANCE_ID){return startup(options,instanceId)}
|
package/dist/kernel/kernel.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { KernelConfig, KernelInstanceId, KernelManager, KernelTimingMetric, StartOptions } from './types';
|
|
2
2
|
import { LoggerManager } from './manager/loggerManager';
|
|
3
3
|
import { CacheManager } from './manager/cacheManager';
|
|
4
|
-
import { ThemeManager } from './manager/themeManager';
|
|
5
|
-
import { I18nManager } from './manager/i18nManager';
|
|
6
4
|
export declare class Kernel {
|
|
7
5
|
private static readonly instances;
|
|
8
6
|
static getInstance(instanceId?: KernelInstanceId): Kernel;
|
|
@@ -13,8 +11,6 @@ export declare class Kernel {
|
|
|
13
11
|
private readonly initializedManagers;
|
|
14
12
|
private readonly loggerManager;
|
|
15
13
|
private readonly cacheManager;
|
|
16
|
-
private readonly themeManager;
|
|
17
|
-
private readonly i18nManager;
|
|
18
14
|
private config;
|
|
19
15
|
private startupPromise;
|
|
20
16
|
private started;
|
|
@@ -24,14 +20,14 @@ export declare class Kernel {
|
|
|
24
20
|
getMetrics(): KernelTimingMetric[];
|
|
25
21
|
getLoggerManager(): LoggerManager;
|
|
26
22
|
getCacheManager(): CacheManager;
|
|
27
|
-
getThemeManager(): ThemeManager;
|
|
28
|
-
getI18nManager(): I18nManager;
|
|
29
23
|
getManager(name: string): KernelManager | undefined;
|
|
30
24
|
registerManager(name: string, manager: KernelManager): void;
|
|
25
|
+
getManagerConfig<TConfig = unknown>(name: string): TConfig | undefined;
|
|
26
|
+
setManagerConfig(name: string, config: unknown): void;
|
|
31
27
|
startup(options?: StartOptions): Promise<Kernel>;
|
|
32
28
|
private bootstrap;
|
|
33
29
|
private resolveConfig;
|
|
34
|
-
|
|
30
|
+
initializeManager(name: string): Promise<void>;
|
|
35
31
|
private measurePhase;
|
|
36
32
|
private logDebug;
|
|
37
33
|
}
|
package/dist/kernel/kernel.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{DEFAULT_CONFIG,
|
|
1
|
+
function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{DEFAULT_CONFIG,DEFAULT_INSTANCE_ID}from"./constants";import{LoggerManager}from"./manager/loggerManager";import{CacheManager}from"./manager/cacheManager";function now(){return typeof performance!=="undefined"?performance.now():Date.now()}export class Kernel{static getInstance(instanceId=DEFAULT_INSTANCE_ID){const existing=Kernel.instances.get(instanceId);if(existing){return existing}const created=new Kernel(instanceId);Kernel.instances.set(instanceId,created);return created}getId(){return this.instanceId}getConfig(){return this.config}getMetrics(){return[...this.metrics]}getLoggerManager(){return this.loggerManager}getCacheManager(){return this.cacheManager}getManager(name){return this.managers.get(name)}registerManager(name,manager){if(this.managers.has(name)){throw new Error(`Kernel manager "${name}" 已存在`)}this.managers.set(name,manager)}getManagerConfig(name){return this.config.managerConfigs[name]}setManagerConfig(name,config){this.config={...this.config,managerConfigs:{...this.config.managerConfigs,[name]:config}}}async startup(options={}){if(this.started){this.logDebug("kernel.startup.skip.already-started",{instanceId:this.instanceId});return this}if(this.startupPromise){return this.startupPromise}this.startupPromise=this.bootstrap(options).finally(()=>{this.startupPromise=null});return this.startupPromise}async bootstrap(options){await this.measurePhase("startup.begin",async()=>{this.logDebug("kernel.startup.begin",{instanceId:this.instanceId})});await this.measurePhase("config.load",async()=>{this.config=await this.resolveConfig(options)});await this.measurePhase("manager.register.custom",async()=>{if(options.customManagers){Object.entries(options.customManagers).forEach(([name,manager])=>{if(!this.managers.has(name)){this.managers.set(name,manager)}})}});await this.measurePhase("manager.initialize.default",async()=>{await this.initializeManager("cache");await this.initializeManager("logger")});await this.measurePhase("manager.initialize.custom",async()=>{const customManagerNames=[...this.managers.keys()].filter(name=>name!=="logger"&&name!=="cache");for(const name of customManagerNames){await this.initializeManager(name)}});await this.measurePhase("hooks.initialize",async()=>{await options.hooks?.initialize?.();await options.lifecycle?.initialization?.()});await this.measurePhase("render.custom",async()=>{if(options.render){await options.render({instanceId:this.instanceId,config:this.config})}});this.started=true;this.logDebug("kernel.startup.end",{instanceId:this.instanceId,metrics:this.metrics});return this}async resolveConfig(options){let loaded={};if(options.configLoader){const loaderResult=await options.configLoader();loaded=loaderResult||{}}return{logger:{...DEFAULT_CONFIG.logger,...loaded.logger,...options.config?.logger||{},level:options.loggerLevel??options.config?.logger?.level??loaded.logger?.level},cache:{...DEFAULT_CONFIG.cache,...loaded.cache,...options.config?.cache||{},storageOptions:{...DEFAULT_CONFIG.cache.storageOptions,...loaded.cache?.storageOptions||{},...options.config?.cache?.storageOptions||{},...options.storageOptions||{}}},managerConfigs:{...DEFAULT_CONFIG.managerConfigs,...loaded.managerConfigs||{},...options.config?.managerConfigs||{},...options.managerConfigs||{}}}}async initializeManager(name){if(this.initializedManagers.has(name)){return}const existingPromise=this.managerInitPromises.get(name);if(existingPromise){await existingPromise;return}const manager=this.managers.get(name);if(!manager){throw new Error(`Kernel manager "${name}" 不存在`)}if(name!=="cache"&&!this.initializedManagers.has("cache")){await this.initializeManager("cache")}const context={instanceId:this.instanceId,config:this.config,cacheManager:this.cacheManager.cache,getManagerConfig:managerName=>this.config.managerConfigs[managerName]};const initPromise=(async()=>{await manager.initialize(context);this.initializedManagers.add(name);this.logDebug("kernel.manager.initialized",{name,instanceId:this.instanceId})})();this.managerInitPromises.set(name,initPromise);try{await initPromise}finally{this.managerInitPromises.delete(name)}}async measurePhase(phase,task){const startTime=now();this.logDebug("kernel.phase.start",{phase,startTime,instanceId:this.instanceId});await task();const endTime=now();const metric={phase,startTime,endTime,duration:endTime-startTime};this.metrics.push(metric);this.logDebug("kernel.phase.end",metric)}logDebug(message,payload){this.loggerManager.debug(message,payload)}constructor(instanceId){_define_property(this,"instanceId",void 0);_define_property(this,"metrics",[]);_define_property(this,"managers",new Map);_define_property(this,"managerInitPromises",new Map);_define_property(this,"initializedManagers",new Set);_define_property(this,"loggerManager",new LoggerManager);_define_property(this,"cacheManager",new CacheManager);_define_property(this,"config",DEFAULT_CONFIG);_define_property(this,"startupPromise",null);_define_property(this,"started",false);this.instanceId=instanceId;this.managers.set("logger",this.loggerManager);this.managers.set("cache",this.cacheManager)}}_define_property(Kernel,"instances",new Map);export async function startup(options={},instanceId=DEFAULT_INSTANCE_ID){const kernel=Kernel.getInstance(instanceId);return kernel.startup(options)}export function getKernel(instanceId=DEFAULT_INSTANCE_ID){return Kernel.getInstance(instanceId)}export async function kernelStartApp(options={},instanceId=DEFAULT_INSTANCE_ID){return startup(options,instanceId)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"I18nManager",{enumerable:true,get:function(){return I18nManager}});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"I18nManager",{enumerable:true,get:function(){return I18nManager}});const _constants=require("../../custom-manager/i18n/constants");const _i18npersistence=require("./i18n.persistence");const _i18nruntime=require("./i18n.runtime");const _i18nschema=require("./i18n.schema");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let I18nManager=class I18nManager{async initialize(context){this.config=context.getManagerConfig(_constants.I18N_MANAGER_NAME)||_constants.DEFAULT_I18N_MANAGER_CONFIG;this.cacheManager=context.cacheManager;const initialSnapshot=(0,_i18nschema.normalizeI18nSnapshot)(this.config.initial||{},_constants.DEFAULT_I18N);this.snapshot=await (0,_i18npersistence.loadI18nFromCache)(this.cacheManager,this.config.persistence,initialSnapshot);await (0,_i18nruntime.initializeI18nRuntime)({locale:this.snapshot.locale||"zh-CN",resources:this.snapshot.resources});this.initialized=true}getSnapshot(){return(0,_i18nschema.cloneI18nSnapshot)(this.snapshot)}subscribe(listener){this.listeners.add(listener);return()=>{this.listeners.delete(listener)}}async setLocale(locale){this.ensureInitialized();const prevSnapshot=this.snapshot;const nextSnapshot=(0,_i18nschema.mergeI18nSnapshot)(prevSnapshot,{locale});if((0,_i18nschema.isI18nEqual)(prevSnapshot,nextSnapshot)){return}this.snapshot=nextSnapshot;await (0,_i18nruntime.switchI18nLocale)(this.snapshot.locale);if(this.cacheManager){await (0,_i18npersistence.saveI18nToCache)(this.cacheManager,this.config.persistence,this.snapshot)}this.emit(this.snapshot,prevSnapshot)}ensureInitialized(){if(!this.initialized){throw new Error("I18nManager must be initialized before use.")}}emit(next,prev){for(const listener of this.listeners){try{listener((0,_i18nschema.cloneI18nSnapshot)(next),(0,_i18nschema.cloneI18nSnapshot)(prev))}catch{}}}constructor(){_define_property(this,"snapshot",(0,_i18nschema.cloneI18nSnapshot)(_constants.DEFAULT_I18N));_define_property(this,"config",_constants.DEFAULT_I18N_MANAGER_CONFIG);_define_property(this,"listeners",new Set);_define_property(this,"cacheManager",null);_define_property(this,"initialized",false)}};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { KernelManager, KernelManagerContext } from '../../types';
|
|
2
|
+
import type { I18nSnapshot } from '../../custom-manager/i18n/types';
|
|
2
3
|
import { type I18nListener } from './i18n.schema';
|
|
3
4
|
export declare class I18nManager implements KernelManager<I18nSnapshot> {
|
|
4
5
|
private snapshot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{
|
|
1
|
+
function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{DEFAULT_I18N,DEFAULT_I18N_MANAGER_CONFIG,I18N_MANAGER_NAME}from"../../custom-manager/i18n/constants";import{loadI18nFromCache,saveI18nToCache}from"./i18n.persistence";import{initializeI18nRuntime,switchI18nLocale}from"./i18n.runtime";import{cloneI18nSnapshot,isI18nEqual,mergeI18nSnapshot,normalizeI18nSnapshot}from"./i18n.schema";export class I18nManager{async initialize(context){this.config=context.getManagerConfig(I18N_MANAGER_NAME)||DEFAULT_I18N_MANAGER_CONFIG;this.cacheManager=context.cacheManager;const initialSnapshot=normalizeI18nSnapshot(this.config.initial||{},DEFAULT_I18N);this.snapshot=await loadI18nFromCache(this.cacheManager,this.config.persistence,initialSnapshot);await initializeI18nRuntime({locale:this.snapshot.locale||"zh-CN",resources:this.snapshot.resources});this.initialized=true}getSnapshot(){return cloneI18nSnapshot(this.snapshot)}subscribe(listener){this.listeners.add(listener);return()=>{this.listeners.delete(listener)}}async setLocale(locale){this.ensureInitialized();const prevSnapshot=this.snapshot;const nextSnapshot=mergeI18nSnapshot(prevSnapshot,{locale});if(isI18nEqual(prevSnapshot,nextSnapshot)){return}this.snapshot=nextSnapshot;await switchI18nLocale(this.snapshot.locale);if(this.cacheManager){await saveI18nToCache(this.cacheManager,this.config.persistence,this.snapshot)}this.emit(this.snapshot,prevSnapshot)}ensureInitialized(){if(!this.initialized){throw new Error("I18nManager must be initialized before use.")}}emit(next,prev){for(const listener of this.listeners){try{listener(cloneI18nSnapshot(next),cloneI18nSnapshot(prev))}catch{}}}constructor(){_define_property(this,"snapshot",cloneI18nSnapshot(DEFAULT_I18N));_define_property(this,"config",DEFAULT_I18N_MANAGER_CONFIG);_define_property(this,"listeners",new Set);_define_property(this,"cacheManager",null);_define_property(this,"initialized",false)}}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { StorageInstance } from '@vlian/utils';
|
|
2
|
-
import type {
|
|
2
|
+
import type { PersistenceOptions } from '../../types';
|
|
3
|
+
import type { I18nSnapshot } from '../../custom-manager/i18n/types';
|
|
3
4
|
export declare const DEFAULT_I18N_CACHE_KEY = "vlian:kernel:i18n";
|
|
4
5
|
export declare function loadI18nFromCache(cacheManager: StorageInstance, persistence: PersistenceOptions | undefined, fallback: I18nSnapshot): Promise<I18nSnapshot>;
|
|
5
6
|
export declare function saveI18nToCache(cacheManager: StorageInstance, persistence: PersistenceOptions | undefined, snapshot: I18nSnapshot): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get initializeI18nRuntime(){return initializeI18nRuntime},get switchI18nLocale(){return switchI18nLocale}});const _i18next=/*#__PURE__*/_interop_require_default(require("i18next"));function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}let initPromise=null;async function initializeI18nRuntime(options){if(!initPromise){initPromise=(async()=>{await _i18next.default.init({interpolation:{escapeValue:false},lng:options.locale,resources:options.resources})})();await initPromise;return}await initPromise;if(options.resources){for(const[locale,resource]of Object.entries(options.resources)){_i18next.default.addResourceBundle(locale,"translation",resource.translation??resource,true,true)}}await _i18next.default.changeLanguage(options.locale)}async function switchI18nLocale(locale){await (initPromise??Promise.resolve());await _i18next.default.changeLanguage(locale)}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Resource } from 'i18next';
|
|
2
|
+
type I18nRuntimeOptions = {
|
|
3
|
+
locale: string;
|
|
4
|
+
resources?: Resource;
|
|
5
|
+
};
|
|
6
|
+
export declare function initializeI18nRuntime(options: I18nRuntimeOptions): Promise<void>;
|
|
7
|
+
export declare function switchI18nLocale(locale: string): Promise<void>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import i18n from"i18next";let initPromise=null;export async function initializeI18nRuntime(options){if(!initPromise){initPromise=(async()=>{await i18n.init({interpolation:{escapeValue:false},lng:options.locale,resources:options.resources})})();await initPromise;return}await initPromise;if(options.resources){for(const[locale,resource]of Object.entries(options.resources)){i18n.addResourceBundle(locale,"translation",resource.translation??resource,true,true)}}await i18n.changeLanguage(options.locale)}export async function switchI18nLocale(locale){await (initPromise??Promise.resolve());await i18n.changeLanguage(locale)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { I18nSnapshot } from '../../types';
|
|
1
|
+
import type { I18nSnapshot } from '../../custom-manager/i18n/types';
|
|
2
2
|
export type I18nListener = (next: I18nSnapshot, prev: I18nSnapshot) => void;
|
|
3
3
|
export declare function cloneI18nSnapshot(snapshot: I18nSnapshot): I18nSnapshot;
|
|
4
4
|
export declare function normalizeI18nSnapshot(value: unknown, fallback: I18nSnapshot): I18nSnapshot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"I18nManager",{enumerable:true,get:function(){return _i18n.I18nManager}});const _i18n=require("
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"I18nManager",{enumerable:true,get:function(){return _i18n.I18nManager}});const _i18n=require("../custom-manager/i18n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { I18nManager } from '
|
|
1
|
+
export { I18nManager } from '../custom-manager/i18n';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{I18nManager}from"
|
|
1
|
+
export{I18nManager}from"../custom-manager/i18n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get CacheManager(){return _cacheManager.CacheManager},get
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get CacheManager(){return _cacheManager.CacheManager},get LoggerManager(){return _loggerManager.LoggerManager}});const _loggerManager=require("./loggerManager");const _cacheManager=require("./cacheManager");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{LoggerManager}from"./loggerManager";export{CacheManager}from"./cacheManager";
|
|
1
|
+
export{LoggerManager}from"./loggerManager";export{CacheManager}from"./cacheManager";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ThemeManager",{enumerable:true,get:function(){return ThemeManager}});const _constants=require("../../constants");const _themedom=require("./theme.dom");const _themepersistence=require("./theme.persistence");const _themeschema=require("./theme.schema");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let ThemeManager=class ThemeManager{async initialize(context){this.config=context.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ThemeManager",{enumerable:true,get:function(){return ThemeManager}});const _constants=require("../../custom-manager/theme/constants");const _themedom=require("./theme.dom");const _themepersistence=require("./theme.persistence");const _themeschema=require("./theme.schema");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let ThemeManager=class ThemeManager{async initialize(context){this.config=context.getManagerConfig(_constants.THEME_MANAGER_NAME)||_constants.DEFAULT_THEME_MANAGER_CONFIG;this.cacheManager=context.cacheManager;const initialTheme=(0,_themeschema.normalizeTheme)(this.config.initial||{},_constants.DEFAULT_THEME);this.theme=await (0,_themepersistence.loadThemeFromCache)(this.cacheManager,this.config.persistence,initialTheme);this.resolvedMode=(0,_themedom.resolveThemeMode)(this.theme);(0,_themedom.applyThemeToDocument)(this.theme,{nextResolvedMode:this.resolvedMode});this.bindSystemThemeObserver();this.initialized=true}getTheme(){return(0,_themeschema.cloneTheme)(this.theme)}getSnapshot(){return this.getTheme()}getResolvedMode(){this.ensureInitialized();return this.resolvedMode}getResolvedTheme(){this.ensureInitialized();return(0,_themeschema.cloneResolvedTheme)({...this.getTheme(),resolvedMode:this.resolvedMode})}subscribe(listener){this.listeners.add(listener);return()=>{this.listeners.delete(listener)}}async setTheme(nextTheme){this.ensureInitialized();const prevTheme=this.theme;const prevResolvedMode=this.resolvedMode;const mergedTheme=(0,_themeschema.mergeTheme)(prevTheme,nextTheme);const nextResolvedMode=(0,_themedom.resolveThemeMode)(mergedTheme);if((0,_themeschema.isThemeEqual)(prevTheme,mergedTheme)&&(0,_themeschema.isResolvedThemeModeEqual)(prevResolvedMode,nextResolvedMode)){return}this.theme=mergedTheme;this.resolvedMode=nextResolvedMode;(0,_themedom.applyThemeToDocument)(this.theme,{prevTheme,prevResolvedMode,nextResolvedMode});if(this.cacheManager){await (0,_themepersistence.saveThemeToCache)(this.cacheManager,this.config.persistence,this.theme)}this.emit(this.theme,prevTheme)}ensureInitialized(){if(!this.initialized){throw new Error("ThemeManager must be initialized before use.")}}destroy(){this.stopSystemThemeObserver?.();this.stopSystemThemeObserver=null;this.listeners.clear();this.initialized=false}bindSystemThemeObserver(){this.stopSystemThemeObserver?.();this.stopSystemThemeObserver=(0,_themedom.observeSystemThemeChange)(nextResolvedMode=>{if(this.theme.mode!=="system"){return}const prevResolvedMode=this.resolvedMode;if((0,_themeschema.isResolvedThemeModeEqual)(prevResolvedMode,nextResolvedMode)){return}this.resolvedMode=nextResolvedMode;(0,_themedom.applyThemeToDocument)(this.theme,{prevTheme:this.theme,prevResolvedMode,nextResolvedMode});this.emit(this.theme,this.theme)})||null}emit(next,prev){for(const listener of this.listeners){try{listener((0,_themeschema.cloneTheme)(next),(0,_themeschema.cloneTheme)(prev))}catch{}}}constructor(){_define_property(this,"theme",(0,_themeschema.cloneTheme)(_constants.DEFAULT_THEME));_define_property(this,"resolvedMode",(0,_themedom.resolveThemeMode)(_constants.DEFAULT_THEME));_define_property(this,"config",_constants.DEFAULT_THEME_MANAGER_CONFIG);_define_property(this,"listeners",new Set);_define_property(this,"cacheManager",null);_define_property(this,"stopSystemThemeObserver",null);_define_property(this,"initialized",false)}};
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
-
import type { KernelManager, KernelManagerContext
|
|
1
|
+
import type { KernelManager, KernelManagerContext } from '../../types';
|
|
2
|
+
import type { ResolvedThemeMode, ResolvedThemeSnapshot, ThemeSnapshot } from '../../custom-manager/theme/types';
|
|
2
3
|
import { type ThemeListener } from './theme.schema';
|
|
3
4
|
export declare class ThemeManager implements KernelManager<ThemeSnapshot> {
|
|
4
5
|
private theme;
|
|
6
|
+
private resolvedMode;
|
|
5
7
|
private config;
|
|
6
8
|
private listeners;
|
|
7
9
|
private cacheManager;
|
|
10
|
+
private stopSystemThemeObserver;
|
|
8
11
|
private initialized;
|
|
9
12
|
initialize(context: KernelManagerContext): Promise<void>;
|
|
10
13
|
getTheme(): ThemeSnapshot;
|
|
11
14
|
getSnapshot(): ThemeSnapshot;
|
|
15
|
+
getResolvedMode(): ResolvedThemeMode;
|
|
16
|
+
getResolvedTheme(): ResolvedThemeSnapshot;
|
|
12
17
|
subscribe(listener: ThemeListener): () => void;
|
|
13
18
|
setTheme(nextTheme: ThemeSnapshot): Promise<void>;
|
|
14
19
|
private ensureInitialized;
|
|
20
|
+
destroy(): void;
|
|
21
|
+
private bindSystemThemeObserver;
|
|
15
22
|
private emit;
|
|
16
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{
|
|
1
|
+
function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{DEFAULT_THEME,DEFAULT_THEME_MANAGER_CONFIG,THEME_MANAGER_NAME}from"../../custom-manager/theme/constants";import{applyThemeToDocument,observeSystemThemeChange,resolveThemeMode}from"./theme.dom";import{loadThemeFromCache,saveThemeToCache}from"./theme.persistence";import{cloneResolvedTheme,cloneTheme,isResolvedThemeModeEqual,isThemeEqual,mergeTheme,normalizeTheme}from"./theme.schema";export class ThemeManager{async initialize(context){this.config=context.getManagerConfig(THEME_MANAGER_NAME)||DEFAULT_THEME_MANAGER_CONFIG;this.cacheManager=context.cacheManager;const initialTheme=normalizeTheme(this.config.initial||{},DEFAULT_THEME);this.theme=await loadThemeFromCache(this.cacheManager,this.config.persistence,initialTheme);this.resolvedMode=resolveThemeMode(this.theme);applyThemeToDocument(this.theme,{nextResolvedMode:this.resolvedMode});this.bindSystemThemeObserver();this.initialized=true}getTheme(){return cloneTheme(this.theme)}getSnapshot(){return this.getTheme()}getResolvedMode(){this.ensureInitialized();return this.resolvedMode}getResolvedTheme(){this.ensureInitialized();return cloneResolvedTheme({...this.getTheme(),resolvedMode:this.resolvedMode})}subscribe(listener){this.listeners.add(listener);return()=>{this.listeners.delete(listener)}}async setTheme(nextTheme){this.ensureInitialized();const prevTheme=this.theme;const prevResolvedMode=this.resolvedMode;const mergedTheme=mergeTheme(prevTheme,nextTheme);const nextResolvedMode=resolveThemeMode(mergedTheme);if(isThemeEqual(prevTheme,mergedTheme)&&isResolvedThemeModeEqual(prevResolvedMode,nextResolvedMode)){return}this.theme=mergedTheme;this.resolvedMode=nextResolvedMode;applyThemeToDocument(this.theme,{prevTheme,prevResolvedMode,nextResolvedMode});if(this.cacheManager){await saveThemeToCache(this.cacheManager,this.config.persistence,this.theme)}this.emit(this.theme,prevTheme)}ensureInitialized(){if(!this.initialized){throw new Error("ThemeManager must be initialized before use.")}}destroy(){this.stopSystemThemeObserver?.();this.stopSystemThemeObserver=null;this.listeners.clear();this.initialized=false}bindSystemThemeObserver(){this.stopSystemThemeObserver?.();this.stopSystemThemeObserver=observeSystemThemeChange(nextResolvedMode=>{if(this.theme.mode!=="system"){return}const prevResolvedMode=this.resolvedMode;if(isResolvedThemeModeEqual(prevResolvedMode,nextResolvedMode)){return}this.resolvedMode=nextResolvedMode;applyThemeToDocument(this.theme,{prevTheme:this.theme,prevResolvedMode,nextResolvedMode});this.emit(this.theme,this.theme)})||null}emit(next,prev){for(const listener of this.listeners){try{listener(cloneTheme(next),cloneTheme(prev))}catch{}}}constructor(){_define_property(this,"theme",cloneTheme(DEFAULT_THEME));_define_property(this,"resolvedMode",resolveThemeMode(DEFAULT_THEME));_define_property(this,"config",DEFAULT_THEME_MANAGER_CONFIG);_define_property(this,"listeners",new Set);_define_property(this,"cacheManager",null);_define_property(this,"stopSystemThemeObserver",null);_define_property(this,"initialized",false)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get applyThemeToDocument(){return applyThemeToDocument},get resolveThemeMode(){return resolveThemeMode}});function canUseDom(){return typeof document!=="undefined"}function resolveThemeMode(theme){if(theme.mode!=="system"){return theme.mode}if(
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get applyThemeToDocument(){return applyThemeToDocument},get observeSystemThemeChange(){return observeSystemThemeChange},get resolveThemeMode(){return resolveThemeMode}});function canUseDom(){return typeof document!=="undefined"}function canUseMatchMedia(){return typeof window!=="undefined"&&typeof window.matchMedia==="function"}function resolveThemeMode(theme){if(theme.mode!=="system"){return theme.mode}if(canUseMatchMedia()&&window.matchMedia("(prefers-color-scheme: dark)").matches){return"dark"}return"light"}function applyThemeToDocument(nextTheme,options={}){if(!canUseDom()){return}const root=document.documentElement;const nextMode=options.nextResolvedMode??resolveThemeMode(nextTheme);const prevTheme=options.prevTheme;const prevMode=options.prevResolvedMode??(prevTheme?resolveThemeMode(prevTheme):undefined);if(!prevMode||prevMode!==nextMode){root.classList.remove("light","dark");root.classList.add(nextMode)}if(!prevTheme||prevTheme.primaryColor!==nextTheme.primaryColor){if(nextTheme.primaryColor){root.style.setProperty("--app-primary-color",nextTheme.primaryColor)}else{root.style.removeProperty("--app-primary-color")}}const prevTokens=prevTheme?.tokens||{};const nextTokens=nextTheme.tokens||{};for(const token of Object.keys(prevTokens)){if(!(token in nextTokens)){root.style.removeProperty(`--${token}`)}}for(const[token,value]of Object.entries(nextTokens)){if(!prevTheme||prevTokens[token]!==value){root.style.setProperty(`--${token}`,String(value))}}}function observeSystemThemeChange(listener){if(!canUseMatchMedia()){return null}const mediaQuery=window.matchMedia("(prefers-color-scheme: dark)");const handleChange=()=>{listener(mediaQuery.matches?"dark":"light")};if(typeof mediaQuery.addEventListener==="function"){mediaQuery.addEventListener("change",handleChange);return()=>{mediaQuery.removeEventListener("change",handleChange)}}mediaQuery.addListener(handleChange);return()=>{mediaQuery.removeListener(handleChange)}}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
-
import type { ThemeSnapshot } from '../../types';
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type { ResolvedThemeMode, ThemeSnapshot } from '../../custom-manager/theme/types';
|
|
2
|
+
type ThemeDomApplyOptions = {
|
|
3
|
+
prevTheme?: ThemeSnapshot;
|
|
4
|
+
nextResolvedMode?: ResolvedThemeMode;
|
|
5
|
+
prevResolvedMode?: ResolvedThemeMode;
|
|
6
|
+
};
|
|
7
|
+
export declare function resolveThemeMode(theme: ThemeSnapshot): ResolvedThemeMode;
|
|
8
|
+
export declare function applyThemeToDocument(nextTheme: ThemeSnapshot, options?: ThemeDomApplyOptions): void;
|
|
9
|
+
export declare function observeSystemThemeChange(listener: (resolvedMode: ResolvedThemeMode) => void): (() => void) | null;
|
|
10
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function canUseDom(){return typeof document!=="undefined"}export function resolveThemeMode(theme){if(theme.mode!=="system"){return theme.mode}if(
|
|
1
|
+
function canUseDom(){return typeof document!=="undefined"}function canUseMatchMedia(){return typeof window!=="undefined"&&typeof window.matchMedia==="function"}export function resolveThemeMode(theme){if(theme.mode!=="system"){return theme.mode}if(canUseMatchMedia()&&window.matchMedia("(prefers-color-scheme: dark)").matches){return"dark"}return"light"}export function applyThemeToDocument(nextTheme,options={}){if(!canUseDom()){return}const root=document.documentElement;const nextMode=options.nextResolvedMode??resolveThemeMode(nextTheme);const prevTheme=options.prevTheme;const prevMode=options.prevResolvedMode??(prevTheme?resolveThemeMode(prevTheme):undefined);if(!prevMode||prevMode!==nextMode){root.classList.remove("light","dark");root.classList.add(nextMode)}if(!prevTheme||prevTheme.primaryColor!==nextTheme.primaryColor){if(nextTheme.primaryColor){root.style.setProperty("--app-primary-color",nextTheme.primaryColor)}else{root.style.removeProperty("--app-primary-color")}}const prevTokens=prevTheme?.tokens||{};const nextTokens=nextTheme.tokens||{};for(const token of Object.keys(prevTokens)){if(!(token in nextTokens)){root.style.removeProperty(`--${token}`)}}for(const[token,value]of Object.entries(nextTokens)){if(!prevTheme||prevTokens[token]!==value){root.style.setProperty(`--${token}`,String(value))}}}export function observeSystemThemeChange(listener){if(!canUseMatchMedia()){return null}const mediaQuery=window.matchMedia("(prefers-color-scheme: dark)");const handleChange=()=>{listener(mediaQuery.matches?"dark":"light")};if(typeof mediaQuery.addEventListener==="function"){mediaQuery.addEventListener("change",handleChange);return()=>{mediaQuery.removeEventListener("change",handleChange)}}mediaQuery.addListener(handleChange);return()=>{mediaQuery.removeListener(handleChange)}}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { StorageInstance } from '@vlian/utils';
|
|
2
|
-
import type { PersistenceOptions
|
|
2
|
+
import type { PersistenceOptions } from '../../types';
|
|
3
|
+
import type { ThemeSnapshot } from '../../custom-manager/theme/types';
|
|
3
4
|
export declare const DEFAULT_THEME_CACHE_KEY = "vlian:kernel:theme";
|
|
4
5
|
export declare function loadThemeFromCache(cacheManager: StorageInstance, persistence: PersistenceOptions | undefined, fallback: ThemeSnapshot): Promise<ThemeSnapshot>;
|
|
5
6
|
export declare function saveThemeToCache(cacheManager: StorageInstance, persistence: PersistenceOptions | undefined, theme: ThemeSnapshot): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get cloneTheme(){return cloneTheme},get isThemeEqual(){return isThemeEqual},get mergeTheme(){return mergeTheme},get normalizeTheme(){return normalizeTheme},get sanitizeTokens(){return sanitizeTokens}});const VALID_THEME_MODES=new Set(["light","dark","system"]);const TOKEN_NAME_PATTERN=/^[A-Za-z_][A-Za-z0-9_-]*$/;function isPlainObject(value){return Object.prototype.toString.call(value)==="[object Object]"}function hasOwnProperty(value,key){return Object.prototype.hasOwnProperty.call(value,key)}function cloneTheme(theme){return{...theme,...theme.tokens?{tokens:{...theme.tokens}}:{}}}function sanitizeTokens(tokens){if(!isPlainObject(tokens)){return undefined}const sanitizedTokens={};for(const[token,tokenValue]of Object.entries(tokens)){if(!TOKEN_NAME_PATTERN.test(token)){continue}if(typeof tokenValue==="string"||typeof tokenValue==="number"){sanitizedTokens[token]=tokenValue}}return Object.keys(sanitizedTokens).length>0?sanitizedTokens:undefined}function normalizeTheme(value,fallback){const source=isPlainObject(value)?value:{};const mode=VALID_THEME_MODES.has(source.mode)?source.mode:fallback.mode;const primaryColor=typeof source.primaryColor==="string"&&source.primaryColor.trim()?source.primaryColor:fallback.primaryColor;const fallbackTokens=sanitizeTokens(fallback.tokens);const incomingTokens=sanitizeTokens(source.tokens);return{mode,...primaryColor?{primaryColor}:{},...incomingTokens||fallbackTokens?{tokens:{...fallbackTokens||{},...incomingTokens||{}}}:{}}}function mergeTheme(current,next){const mergedTheme={mode:hasOwnProperty(next,"mode")&&VALID_THEME_MODES.has(next.mode)?next.mode:current.mode,...hasOwnProperty(next,"primaryColor")?typeof next.primaryColor==="string"&&next.primaryColor.trim()?{primaryColor:next.primaryColor}:{}:current.primaryColor?{primaryColor:current.primaryColor}:{},...hasOwnProperty(next,"tokens")?sanitizeTokens(next.tokens)?{tokens:sanitizeTokens(next.tokens)}:{}:current.tokens?{tokens:{...current.tokens}}:{}};return normalizeTheme(mergedTheme,DEFAULT_EMPTY_THEME)}const DEFAULT_EMPTY_THEME={mode:"light"};function isThemeEqual(left,right){if(left.mode!==right.mode||left.primaryColor!==right.primaryColor){return false}const leftTokens=left.tokens||{};const rightTokens=right.tokens||{};const leftKeys=Object.keys(leftTokens);const rightKeys=Object.keys(rightTokens);if(leftKeys.length!==rightKeys.length){return false}for(const key of leftKeys){if(leftTokens[key]!==rightTokens[key]){return false}}return true}
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get cloneResolvedTheme(){return cloneResolvedTheme},get cloneTheme(){return cloneTheme},get isResolvedThemeModeEqual(){return isResolvedThemeModeEqual},get isThemeEqual(){return isThemeEqual},get mergeTheme(){return mergeTheme},get normalizeTheme(){return normalizeTheme},get sanitizeTokens(){return sanitizeTokens}});const VALID_THEME_MODES=new Set(["light","dark","system"]);const TOKEN_NAME_PATTERN=/^[A-Za-z_][A-Za-z0-9_-]*$/;function isPlainObject(value){return Object.prototype.toString.call(value)==="[object Object]"}function hasOwnProperty(value,key){return Object.prototype.hasOwnProperty.call(value,key)}function cloneTheme(theme){return{...theme,...theme.tokens?{tokens:{...theme.tokens}}:{}}}function cloneResolvedTheme(theme){return{...cloneTheme(theme),resolvedMode:theme.resolvedMode}}function sanitizeTokens(tokens){if(!isPlainObject(tokens)){return undefined}const sanitizedTokens={};for(const[token,tokenValue]of Object.entries(tokens)){if(!TOKEN_NAME_PATTERN.test(token)){continue}if(typeof tokenValue==="string"||typeof tokenValue==="number"){sanitizedTokens[token]=tokenValue}}return Object.keys(sanitizedTokens).length>0?sanitizedTokens:undefined}function normalizeTheme(value,fallback){const source=isPlainObject(value)?value:{};const mode=VALID_THEME_MODES.has(source.mode)?source.mode:fallback.mode;const primaryColor=typeof source.primaryColor==="string"&&source.primaryColor.trim()?source.primaryColor:fallback.primaryColor;const fallbackTokens=sanitizeTokens(fallback.tokens);const incomingTokens=sanitizeTokens(source.tokens);return{mode,...primaryColor?{primaryColor}:{},...incomingTokens||fallbackTokens?{tokens:{...fallbackTokens||{},...incomingTokens||{}}}:{}}}function mergeTheme(current,next){const mergedTheme={mode:hasOwnProperty(next,"mode")&&VALID_THEME_MODES.has(next.mode)?next.mode:current.mode,...hasOwnProperty(next,"primaryColor")?typeof next.primaryColor==="string"&&next.primaryColor.trim()?{primaryColor:next.primaryColor}:{}:current.primaryColor?{primaryColor:current.primaryColor}:{},...hasOwnProperty(next,"tokens")?sanitizeTokens(next.tokens)?{tokens:sanitizeTokens(next.tokens)}:{}:current.tokens?{tokens:{...current.tokens}}:{}};return normalizeTheme(mergedTheme,DEFAULT_EMPTY_THEME)}const DEFAULT_EMPTY_THEME={mode:"light"};function isThemeEqual(left,right){if(left.mode!==right.mode||left.primaryColor!==right.primaryColor){return false}const leftTokens=left.tokens||{};const rightTokens=right.tokens||{};const leftKeys=Object.keys(leftTokens);const rightKeys=Object.keys(rightTokens);if(leftKeys.length!==rightKeys.length){return false}for(const key of leftKeys){if(leftTokens[key]!==rightTokens[key]){return false}}return true}function isResolvedThemeModeEqual(left,right){return left===right}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type { ThemeSnapshot } from '../../types';
|
|
1
|
+
import type { ResolvedThemeMode, ResolvedThemeSnapshot, ThemeSnapshot } from '../../custom-manager/theme/types';
|
|
2
2
|
export type ThemeListener = (next: ThemeSnapshot, prev: ThemeSnapshot) => void;
|
|
3
3
|
export declare function cloneTheme(theme: ThemeSnapshot): ThemeSnapshot;
|
|
4
|
+
export declare function cloneResolvedTheme(theme: ResolvedThemeSnapshot): ResolvedThemeSnapshot;
|
|
4
5
|
export declare function sanitizeTokens(tokens: unknown): ThemeSnapshot['tokens'];
|
|
5
6
|
export declare function normalizeTheme(value: unknown, fallback: ThemeSnapshot): ThemeSnapshot;
|
|
6
7
|
export declare function mergeTheme(current: ThemeSnapshot, next: Partial<ThemeSnapshot>): ThemeSnapshot;
|
|
7
8
|
export declare function isThemeEqual(left: ThemeSnapshot, right: ThemeSnapshot): boolean;
|
|
9
|
+
export declare function isResolvedThemeModeEqual(left: ResolvedThemeMode, right: ResolvedThemeMode): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const VALID_THEME_MODES=new Set(["light","dark","system"]);const TOKEN_NAME_PATTERN=/^[A-Za-z_][A-Za-z0-9_-]*$/;function isPlainObject(value){return Object.prototype.toString.call(value)==="[object Object]"}function hasOwnProperty(value,key){return Object.prototype.hasOwnProperty.call(value,key)}export function cloneTheme(theme){return{...theme,...theme.tokens?{tokens:{...theme.tokens}}:{}}}export function sanitizeTokens(tokens){if(!isPlainObject(tokens)){return undefined}const sanitizedTokens={};for(const[token,tokenValue]of Object.entries(tokens)){if(!TOKEN_NAME_PATTERN.test(token)){continue}if(typeof tokenValue==="string"||typeof tokenValue==="number"){sanitizedTokens[token]=tokenValue}}return Object.keys(sanitizedTokens).length>0?sanitizedTokens:undefined}export function normalizeTheme(value,fallback){const source=isPlainObject(value)?value:{};const mode=VALID_THEME_MODES.has(source.mode)?source.mode:fallback.mode;const primaryColor=typeof source.primaryColor==="string"&&source.primaryColor.trim()?source.primaryColor:fallback.primaryColor;const fallbackTokens=sanitizeTokens(fallback.tokens);const incomingTokens=sanitizeTokens(source.tokens);return{mode,...primaryColor?{primaryColor}:{},...incomingTokens||fallbackTokens?{tokens:{...fallbackTokens||{},...incomingTokens||{}}}:{}}}export function mergeTheme(current,next){const mergedTheme={mode:hasOwnProperty(next,"mode")&&VALID_THEME_MODES.has(next.mode)?next.mode:current.mode,...hasOwnProperty(next,"primaryColor")?typeof next.primaryColor==="string"&&next.primaryColor.trim()?{primaryColor:next.primaryColor}:{}:current.primaryColor?{primaryColor:current.primaryColor}:{},...hasOwnProperty(next,"tokens")?sanitizeTokens(next.tokens)?{tokens:sanitizeTokens(next.tokens)}:{}:current.tokens?{tokens:{...current.tokens}}:{}};return normalizeTheme(mergedTheme,DEFAULT_EMPTY_THEME)}const DEFAULT_EMPTY_THEME={mode:"light"};export function isThemeEqual(left,right){if(left.mode!==right.mode||left.primaryColor!==right.primaryColor){return false}const leftTokens=left.tokens||{};const rightTokens=right.tokens||{};const leftKeys=Object.keys(leftTokens);const rightKeys=Object.keys(rightTokens);if(leftKeys.length!==rightKeys.length){return false}for(const key of leftKeys){if(leftTokens[key]!==rightTokens[key]){return false}}return true}
|
|
1
|
+
const VALID_THEME_MODES=new Set(["light","dark","system"]);const TOKEN_NAME_PATTERN=/^[A-Za-z_][A-Za-z0-9_-]*$/;function isPlainObject(value){return Object.prototype.toString.call(value)==="[object Object]"}function hasOwnProperty(value,key){return Object.prototype.hasOwnProperty.call(value,key)}export function cloneTheme(theme){return{...theme,...theme.tokens?{tokens:{...theme.tokens}}:{}}}export function cloneResolvedTheme(theme){return{...cloneTheme(theme),resolvedMode:theme.resolvedMode}}export function sanitizeTokens(tokens){if(!isPlainObject(tokens)){return undefined}const sanitizedTokens={};for(const[token,tokenValue]of Object.entries(tokens)){if(!TOKEN_NAME_PATTERN.test(token)){continue}if(typeof tokenValue==="string"||typeof tokenValue==="number"){sanitizedTokens[token]=tokenValue}}return Object.keys(sanitizedTokens).length>0?sanitizedTokens:undefined}export function normalizeTheme(value,fallback){const source=isPlainObject(value)?value:{};const mode=VALID_THEME_MODES.has(source.mode)?source.mode:fallback.mode;const primaryColor=typeof source.primaryColor==="string"&&source.primaryColor.trim()?source.primaryColor:fallback.primaryColor;const fallbackTokens=sanitizeTokens(fallback.tokens);const incomingTokens=sanitizeTokens(source.tokens);return{mode,...primaryColor?{primaryColor}:{},...incomingTokens||fallbackTokens?{tokens:{...fallbackTokens||{},...incomingTokens||{}}}:{}}}export function mergeTheme(current,next){const mergedTheme={mode:hasOwnProperty(next,"mode")&&VALID_THEME_MODES.has(next.mode)?next.mode:current.mode,...hasOwnProperty(next,"primaryColor")?typeof next.primaryColor==="string"&&next.primaryColor.trim()?{primaryColor:next.primaryColor}:{}:current.primaryColor?{primaryColor:current.primaryColor}:{},...hasOwnProperty(next,"tokens")?sanitizeTokens(next.tokens)?{tokens:sanitizeTokens(next.tokens)}:{}:current.tokens?{tokens:{...current.tokens}}:{}};return normalizeTheme(mergedTheme,DEFAULT_EMPTY_THEME)}const DEFAULT_EMPTY_THEME={mode:"light"};export function isThemeEqual(left,right){if(left.mode!==right.mode||left.primaryColor!==right.primaryColor){return false}const leftTokens=left.tokens||{};const rightTokens=right.tokens||{};const leftKeys=Object.keys(leftTokens);const rightKeys=Object.keys(rightTokens);if(leftKeys.length!==rightKeys.length){return false}for(const key of leftKeys){if(leftTokens[key]!==rightTokens[key]){return false}}return true}export function isResolvedThemeModeEqual(left,right){return left===right}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ThemeManager",{enumerable:true,get:function(){return _theme.ThemeManager}});const _theme=require("
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ThemeManager",{enumerable:true,get:function(){return _theme.ThemeManager}});const _theme=require("../custom-manager/theme");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { ThemeManager } from '
|
|
1
|
+
export { ThemeManager } from '../custom-manager/theme';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{ThemeManager}from"
|
|
1
|
+
export{ThemeManager}from"../custom-manager/theme";
|
package/dist/kernel/types.d.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import type { LogLevel } from '@vlian/logger';
|
|
2
|
-
import type { StorageOptions } from '../types';
|
|
3
2
|
import type { StorageInstance } from '@vlian/utils';
|
|
4
|
-
import type {
|
|
3
|
+
import type { StorageType } from '@vlian/utils';
|
|
4
|
+
export type StorageOptions = {
|
|
5
|
+
prefix: string;
|
|
6
|
+
defaultExpire: number;
|
|
7
|
+
tableName?: string;
|
|
8
|
+
type?: StorageType;
|
|
9
|
+
};
|
|
5
10
|
/**
|
|
6
11
|
* 生命周期钩子函数类型
|
|
7
12
|
*/
|
|
@@ -23,40 +28,13 @@ export interface CoreStartOptions {
|
|
|
23
28
|
* 生命周期钩子
|
|
24
29
|
*/
|
|
25
30
|
lifecycle?: ManagerLifecycle;
|
|
26
|
-
/**
|
|
27
|
-
* 国际化
|
|
28
|
-
*/
|
|
29
|
-
locale?: I18nSnapshot['resources'];
|
|
30
31
|
/**
|
|
31
32
|
* 存储配置
|
|
32
33
|
*/
|
|
33
34
|
storageOptions?: StorageOptions;
|
|
34
|
-
/**
|
|
35
|
-
* 主题配置
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* ```typescript
|
|
39
|
-
* start({
|
|
40
|
-
* theme: {
|
|
41
|
-
* mode: 'dark',
|
|
42
|
-
* primaryColor: '#1890ff',
|
|
43
|
-
* },
|
|
44
|
-
* });
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
47
|
-
theme?: Partial<ThemeSnapshot>;
|
|
48
35
|
}
|
|
49
36
|
export type KernelInstanceId = string;
|
|
50
37
|
export type KernelStorageDriver = 'localStorage' | 'sessionStorage' | 'indexedDB' | 'none';
|
|
51
|
-
export interface ThemeSnapshot {
|
|
52
|
-
mode: 'light' | 'dark' | 'system';
|
|
53
|
-
primaryColor?: string;
|
|
54
|
-
tokens?: Record<string, string | number>;
|
|
55
|
-
}
|
|
56
|
-
export interface I18nSnapshot {
|
|
57
|
-
locale: string;
|
|
58
|
-
resources?: Resource;
|
|
59
|
-
}
|
|
60
38
|
export interface PersistenceOptions {
|
|
61
39
|
enabled?: boolean;
|
|
62
40
|
storage?: KernelStorageDriver;
|
|
@@ -70,19 +48,10 @@ export interface CacheManagerConfig {
|
|
|
70
48
|
enabled?: boolean;
|
|
71
49
|
storageOptions?: Partial<StorageOptions>;
|
|
72
50
|
}
|
|
73
|
-
export interface ThemeManagerConfig {
|
|
74
|
-
initial?: ThemeSnapshot;
|
|
75
|
-
persistence?: PersistenceOptions;
|
|
76
|
-
}
|
|
77
|
-
export interface I18nManagerConfig {
|
|
78
|
-
initial?: I18nSnapshot;
|
|
79
|
-
persistence?: PersistenceOptions;
|
|
80
|
-
}
|
|
81
51
|
export interface KernelConfig {
|
|
82
52
|
logger: LoggerManagerConfig;
|
|
83
53
|
cache: CacheManagerConfig;
|
|
84
|
-
|
|
85
|
-
i18n: I18nManagerConfig;
|
|
54
|
+
managerConfigs: Record<string, unknown>;
|
|
86
55
|
}
|
|
87
56
|
export interface KernelTimingMetric {
|
|
88
57
|
phase: string;
|
|
@@ -94,6 +63,7 @@ export interface KernelManagerContext {
|
|
|
94
63
|
instanceId: KernelInstanceId;
|
|
95
64
|
config: KernelConfig;
|
|
96
65
|
cacheManager: StorageInstance;
|
|
66
|
+
getManagerConfig: <TConfig = unknown>(name: string) => TConfig | undefined;
|
|
97
67
|
}
|
|
98
68
|
export interface KernelManager<TSnapshot = unknown> {
|
|
99
69
|
initialize: (context: KernelManagerContext) => Promise<void> | void;
|
|
@@ -112,6 +82,7 @@ export interface StartOptions extends CoreStartOptions {
|
|
|
112
82
|
configLoader?: () => Promise<Partial<KernelConfig> | void> | Partial<KernelConfig> | void;
|
|
113
83
|
render?: (context: KernelRenderContext) => Promise<void> | void;
|
|
114
84
|
customManagers?: Record<string, KernelManager>;
|
|
85
|
+
managerConfigs?: Record<string, unknown>;
|
|
115
86
|
hooks?: StartupHooks;
|
|
116
87
|
}
|
|
117
88
|
export type KernelStartOptions = StartOptions;
|