@h-ai/core 0.1.0-alpha5

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.
@@ -0,0 +1,115 @@
1
+ import { createCore } from './chunk-2GTCDC56.js';
2
+ export { CoreConfigSchema, EnvSchema, HaiCommonError, HaiConfigError, IdConfigSchema, LogFormatSchema, LogLevelSchema, LoggingConfigSchema, err, ok } from './chunk-2GTCDC56.js';
3
+ import log from 'loglevel';
4
+
5
+ var globalLevel = "info";
6
+ var globalContext = {};
7
+ var defaultLogger = null;
8
+ var LEVEL_MAP = {
9
+ trace: "trace",
10
+ debug: "debug",
11
+ info: "info",
12
+ warn: "warn",
13
+ error: "error",
14
+ fatal: "error"
15
+ // loglevel 没有 fatal
16
+ };
17
+ function configureLogger(config) {
18
+ if (config.level) {
19
+ globalLevel = config.level;
20
+ log.setLevel(LEVEL_MAP[config.level]);
21
+ }
22
+ if (config.context) {
23
+ globalContext = { ...globalContext, ...config.context };
24
+ }
25
+ defaultLogger = null;
26
+ }
27
+ function setLogLevel(level) {
28
+ globalLevel = level;
29
+ log.setLevel(LEVEL_MAP[level]);
30
+ }
31
+ function getLogLevel() {
32
+ return globalLevel;
33
+ }
34
+ function formatMessage(message, context) {
35
+ if (!context || Object.keys(context).length === 0) {
36
+ return message;
37
+ }
38
+ return `${message} ${JSON.stringify(context)}`;
39
+ }
40
+ function wrapLoglevel(loggerInstance, baseContext) {
41
+ return {
42
+ trace(message, ctx) {
43
+ loggerInstance.trace(formatMessage(message, { ...baseContext, ...ctx }));
44
+ },
45
+ debug(message, ctx) {
46
+ loggerInstance.debug(formatMessage(message, { ...baseContext, ...ctx }));
47
+ },
48
+ info(message, ctx) {
49
+ loggerInstance.info(formatMessage(message, { ...baseContext, ...ctx }));
50
+ },
51
+ warn(message, ctx) {
52
+ loggerInstance.warn(formatMessage(message, { ...baseContext, ...ctx }));
53
+ },
54
+ error(message, ctx) {
55
+ loggerInstance.error(formatMessage(message, { ...baseContext, ...ctx }));
56
+ },
57
+ fatal(message, ctx) {
58
+ loggerInstance.error(`[FATAL] ${formatMessage(message, { ...baseContext, ...ctx })}`);
59
+ },
60
+ child(childContext) {
61
+ return wrapLoglevel(loggerInstance, { ...baseContext, ...childContext });
62
+ }
63
+ };
64
+ }
65
+ function createLogger(options = {}) {
66
+ const { name, level, context } = options;
67
+ const loggerInstance = name ? log.getLogger(name) : log;
68
+ const effectiveLevel = level ?? globalLevel;
69
+ loggerInstance.setLevel(LEVEL_MAP[effectiveLevel]);
70
+ return wrapLoglevel(loggerInstance, { ...globalContext, ...context });
71
+ }
72
+ function getLogger() {
73
+ if (!defaultLogger) {
74
+ defaultLogger = createLogger();
75
+ }
76
+ return defaultLogger;
77
+ }
78
+ var logger = {
79
+ configureLogger,
80
+ setLogLevel,
81
+ getLogLevel,
82
+ createLogger,
83
+ getLogger
84
+ };
85
+
86
+ // src/core-main.browser.ts
87
+ function createBrowserCore() {
88
+ const baseCore = createCore({
89
+ createLogger: logger.createLogger,
90
+ getLogger: logger.getLogger,
91
+ configureLogger: logger.configureLogger,
92
+ setLogLevel: logger.setLogLevel,
93
+ getLogLevel: logger.getLogLevel
94
+ });
95
+ return {
96
+ ...baseCore,
97
+ /** 初始化 Core */
98
+ init: initCore
99
+ };
100
+ }
101
+ var core = createBrowserCore();
102
+ function initCore(options = {}) {
103
+ const logger2 = core.logger;
104
+ if (options.logging) {
105
+ core.logger.configure(options.logging);
106
+ }
107
+ if (options.watchConfig) {
108
+ logger2.warn("[core] Browser does not support watchConfig option");
109
+ }
110
+ logger2.info("[core] Initialized (browser mode)");
111
+ }
112
+
113
+ export { core };
114
+ //# sourceMappingURL=browser.js.map
115
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/functions/core-function-logger.browser.ts","../src/core-main.browser.ts"],"names":["logger"],"mappings":";;;;AAcA,IAAI,WAAA,GAAwB,MAAA;AAG5B,IAAI,gBAAyC,EAAC;AAG9C,IAAI,aAAA,GAA+B,IAAA;AAOnC,IAAM,SAAA,GAAgD;AAAA,EACpD,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO;AAAA;AACT,CAAA;AAYA,SAAS,gBAAgB,MAAA,EAAsC;AAC7D,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,WAAA,GAAc,MAAA,CAAO,KAAA;AACrB,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA,CAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACtC;AACA,EAAA,IAAI,OAAO,OAAA,EAAS;AAClB,IAAA,aAAA,GAAgB,EAAE,GAAG,aAAA,EAAe,GAAG,OAAO,OAAA,EAAQ;AAAA,EACxD;AAEA,EAAA,aAAA,GAAgB,IAAA;AAClB;AAYA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,WAAA,GAAc,KAAA;AACd,EAAA,GAAA,CAAI,QAAA,CAAS,SAAA,CAAU,KAAK,CAAC,CAAA;AAC/B;AAUA,SAAS,WAAA,GAAwB;AAC/B,EAAA,OAAO,WAAA;AACT;AAaA,SAAS,aAAA,CAAc,SAAiB,OAAA,EAA8B;AACpE,EAAA,IAAI,CAAC,OAAA,IAAW,MAAA,CAAO,KAAK,OAAO,CAAA,CAAE,WAAW,CAAA,EAAG;AACjD,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAG,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,CAAA;AAC9C;AAWA,SAAS,YAAA,CAAa,gBAA4B,WAAA,EAA8C;AAC9F,EAAA,OAAO;AAAA,IACL,KAAA,CAAM,SAAiB,GAAA,EAAkB;AACvC,MAAA,cAAA,CAAe,KAAA,CAAM,cAAc,OAAA,EAAS,EAAE,GAAG,WAAA,EAAa,GAAG,GAAA,EAAK,CAAC,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,KAAA,CAAM,SAAiB,GAAA,EAAkB;AACvC,MAAA,cAAA,CAAe,KAAA,CAAM,cAAc,OAAA,EAAS,EAAE,GAAG,WAAA,EAAa,GAAG,GAAA,EAAK,CAAC,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,IAAA,CAAK,SAAiB,GAAA,EAAkB;AACtC,MAAA,cAAA,CAAe,IAAA,CAAK,cAAc,OAAA,EAAS,EAAE,GAAG,WAAA,EAAa,GAAG,GAAA,EAAK,CAAC,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,IAAA,CAAK,SAAiB,GAAA,EAAkB;AACtC,MAAA,cAAA,CAAe,IAAA,CAAK,cAAc,OAAA,EAAS,EAAE,GAAG,WAAA,EAAa,GAAG,GAAA,EAAK,CAAC,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,KAAA,CAAM,SAAiB,GAAA,EAAkB;AACvC,MAAA,cAAA,CAAe,KAAA,CAAM,cAAc,OAAA,EAAS,EAAE,GAAG,WAAA,EAAa,GAAG,GAAA,EAAK,CAAC,CAAA;AAAA,IACzE,CAAA;AAAA,IACA,KAAA,CAAM,SAAiB,GAAA,EAAkB;AACvC,MAAA,cAAA,CAAe,KAAA,CAAM,CAAA,QAAA,EAAW,aAAA,CAAc,OAAA,EAAS,EAAE,GAAG,WAAA,EAAa,GAAG,GAAA,EAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IACtF,CAAA;AAAA,IACA,MAAM,YAAA,EAA+C;AACnD,MAAA,OAAO,aAAa,cAAA,EAAgB,EAAE,GAAG,WAAA,EAAa,GAAG,cAAc,CAAA;AAAA,IACzE;AAAA,GACF;AACF;AAcA,SAAS,YAAA,CAAa,OAAA,GAAyB,EAAC,EAAW;AACzD,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,EAAQ,GAAI,OAAA;AAGjC,EAAA,MAAM,cAAA,GAAiB,IAAA,GAAO,GAAA,CAAI,SAAA,CAAU,IAAI,CAAA,GAAI,GAAA;AAGpD,EAAA,MAAM,iBAAiB,KAAA,IAAS,WAAA;AAChC,EAAA,cAAA,CAAe,QAAA,CAAS,SAAA,CAAU,cAAc,CAAC,CAAA;AAEjD,EAAA,OAAO,aAAa,cAAA,EAAgB,EAAE,GAAG,aAAA,EAAe,GAAG,SAAS,CAAA;AACtE;AAYA,SAAS,SAAA,GAAoB;AAC3B,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,aAAA,GAAgB,YAAA,EAAa;AAAA,EAC/B;AACA,EAAA,OAAO,aAAA;AACT;AAYO,IAAM,MAAA,GAA0B;AAAA,EACrC,eAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;;;AC9KA,SAAS,iBAAA,GAAoB;AAC3B,EAAA,MAAM,WAAW,UAAA,CAAW;AAAA,IAC1B,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,iBAAiB,MAAA,CAAO,eAAA;AAAA,IACxB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,aAAa,MAAA,CAAO;AAAA,GACrB,CAAA;AAGD,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA;AAAA,IAEH,IAAA,EAAM;AAAA,GACR;AACF;AAWO,IAAM,OAAO,iBAAA;AAcpB,SAAS,QAAA,CAAS,OAAA,GAAuB,EAAC,EAAS;AACjD,EAAA,MAAMA,UAAS,IAAA,CAAK,MAAA;AAGpB,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,OAAA,CAAQ,OAAO,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAAA,OAAAA,CAAO,KAAK,oDAAoD,CAAA;AAAA,EAClE;AAEA,EAAAA,OAAAA,CAAO,KAAK,mCAAmC,CAAA;AACjD","file":"browser.js","sourcesContent":["/**\n * @h-ai/core — Logger(浏览器版本,基于 loglevel)\n *\n * 提供统一的日志接口,浏览器环境使用 loglevel 实现。\n * @module core-function-logger.browser\n */\n\nimport type { LoggingConfig, LogLevel } from '../core-config.js'\nimport type { LogContext, Logger, LoggerFunctions, LoggerOptions } from '../core-types.js'\nimport log from 'loglevel'\n\n// ─── 全局配置 ───\n\n/** 全局日志级别(默认 'info') */\nlet globalLevel: LogLevel = 'info'\n\n/** 全局默认上下文(每条日志自动附带) */\nlet globalContext: Record<string, unknown> = {}\n\n/** 默认 Logger 单例缓存 */\nlet defaultLogger: Logger | null = null\n\n/**\n * LogLevel 到 loglevel 库级别的映射。\n *\n * loglevel 不支持 fatal,映射为 error。\n */\nconst LEVEL_MAP: Record<LogLevel, log.LogLevelDesc> = {\n trace: 'trace',\n debug: 'debug',\n info: 'info',\n warn: 'warn',\n error: 'error',\n fatal: 'error', // loglevel 没有 fatal\n}\n\n/**\n * 配置全局 Logger 选项。\n *\n * @param config - 日志配置\n *\n * @example\n * ```ts\n * logger.configureLogger({ level: 'debug' })\n * ```\n */\nfunction configureLogger(config: Partial<LoggingConfig>): void {\n if (config.level) {\n globalLevel = config.level\n log.setLevel(LEVEL_MAP[config.level])\n }\n if (config.context) {\n globalContext = { ...globalContext, ...config.context }\n }\n // 重置默认 logger 缓存,使下次 getLogger() 返回新配置的实例\n defaultLogger = null\n}\n\n/**\n * 设置全局日志级别。\n *\n * @param level - 日志级别\n *\n * @example\n * ```ts\n * logger.setLogLevel('warn')\n * ```\n */\nfunction setLogLevel(level: LogLevel): void {\n globalLevel = level\n log.setLevel(LEVEL_MAP[level])\n}\n\n/**\n * 获取当前全局日志级别。\n *\n * @example\n * ```ts\n * const level = logger.getLogLevel()\n * ```\n */\nfunction getLogLevel(): LogLevel {\n return globalLevel\n}\n\n// ─── Logger 实现 ───\n\n/**\n * 格式化日志消息。\n *\n * 将消息文本与上下文拼接为单行输出(上下文序列化为 JSON)。\n *\n * @param message - 日志文本\n * @param context - 日志上下文(空对象时不输出)\n * @returns 格式化后的字符串\n */\nfunction formatMessage(message: string, context?: LogContext): string {\n if (!context || Object.keys(context).length === 0) {\n return message\n }\n return `${message} ${JSON.stringify(context)}`\n}\n\n/**\n * 创建 Logger 包装。\n *\n * 将 loglevel 实例包装为统一 Logger 接口,自动合并基础上下文。\n *\n * @param loggerInstance - loglevel 实例\n * @param baseContext - 基础上下文(会与每次调用时的 ctx 合并)\n * @returns 统一 Logger 实例\n */\nfunction wrapLoglevel(loggerInstance: log.Logger, baseContext: Record<string, unknown>): Logger {\n return {\n trace(message: string, ctx?: LogContext) {\n loggerInstance.trace(formatMessage(message, { ...baseContext, ...ctx }))\n },\n debug(message: string, ctx?: LogContext) {\n loggerInstance.debug(formatMessage(message, { ...baseContext, ...ctx }))\n },\n info(message: string, ctx?: LogContext) {\n loggerInstance.info(formatMessage(message, { ...baseContext, ...ctx }))\n },\n warn(message: string, ctx?: LogContext) {\n loggerInstance.warn(formatMessage(message, { ...baseContext, ...ctx }))\n },\n error(message: string, ctx?: LogContext) {\n loggerInstance.error(formatMessage(message, { ...baseContext, ...ctx }))\n },\n fatal(message: string, ctx?: LogContext) {\n loggerInstance.error(`[FATAL] ${formatMessage(message, { ...baseContext, ...ctx })}`)\n },\n child(childContext: Record<string, unknown>): Logger {\n return wrapLoglevel(loggerInstance, { ...baseContext, ...childContext })\n },\n }\n}\n\n/**\n * 创建 Logger 实例。\n *\n * @param options - Logger 选项\n * @returns Logger 实例\n *\n * @example\n * ```ts\n * const appLogger = logger.createLogger({ name: 'web' })\n * appLogger.info('ready')\n * ```\n */\nfunction createLogger(options: LoggerOptions = {}): Logger {\n const { name, level, context } = options\n\n // 创建或获取 logger 实例\n const loggerInstance = name ? log.getLogger(name) : log\n\n // 设置级别\n const effectiveLevel = level ?? globalLevel\n loggerInstance.setLevel(LEVEL_MAP[effectiveLevel])\n\n return wrapLoglevel(loggerInstance, { ...globalContext, ...context })\n}\n\n// ─── 默认 Logger 实例 ───\n\n/**\n * 获取默认 Logger 实例(单例)。\n *\n * @example\n * ```ts\n * const defaultLogger = logger.getLogger()\n * ```\n */\nfunction getLogger(): Logger {\n if (!defaultLogger) {\n defaultLogger = createLogger()\n }\n return defaultLogger\n}\n\n// ─── 对外出口 ───\n\n/**\n * 浏览器 Logger 函数集合。\n *\n * @example\n * ```ts\n * logger.createLogger({ name: 'ui' }).info('boot')\n * ```\n */\nexport const logger: LoggerFunctions = {\n configureLogger,\n setLogLevel,\n getLogLevel,\n createLogger,\n getLogger,\n}\n","/**\n * @h-ai/core — Core 服务聚合(浏览器)\n *\n * 提供浏览器环境的 core 对象,聚合常用功能。 所有功能统一通过 core 对象访问(不含 config 能力)。\n * @module core-main.browser\n */\n\nimport type { CoreOptions } from './core-types.js'\nimport { createCore } from './core-main.js'\nimport { logger } from './functions/core-function-logger.browser.js'\n\n// ─── Core 实例 ───\n\n/**\n * 创建 Browser 版本的 core 对象。\n *\n * @example\n * ```ts\n * import { core } from '@h-ai/core'\n * core.logger.info('ready')\n * ```\n */\nfunction createBrowserCore() {\n const baseCore = createCore({\n createLogger: logger.createLogger,\n getLogger: logger.getLogger,\n configureLogger: logger.configureLogger,\n setLogLevel: logger.setLogLevel,\n getLogLevel: logger.getLogLevel,\n })\n\n // 扩展 config 和 init 功能\n return {\n ...baseCore,\n /** 初始化 Core */\n init: initCore,\n }\n}\n\n/**\n * Core 服务对象 - 聚合常用功能(浏览器)。\n *\n * @example\n * ```ts\n * import { core } from '@h-ai/core'\n * core.logger.info('browser ready')\n * ```\n */\nexport const core = createBrowserCore()\n\n/**\n * 初始化 Core(内部实现,通过 core.init() 调用)。\n * 注意:浏览器环境不支持 config 和 watchConfig 选项。\n *\n * @param options - 初始化选项\n *\n * @example\n * ```ts\n * import { core } from '@h-ai/core'\n * core.init({ logging: { level: 'debug' } })\n * ```\n */\nfunction initCore(options: CoreOptions = {}): void {\n const logger = core.logger\n\n // 配置日志\n if (options.logging) {\n core.logger.configure(options.logging)\n }\n\n if (options.watchConfig) {\n logger.warn('[core] Browser does not support watchConfig option')\n }\n\n logger.info('[core] Initialized (browser mode)')\n}\n"]}