@cldmv/slothlet 2.11.0 → 3.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.
Files changed (189) hide show
  1. package/AGENT-USAGE.md +355 -325
  2. package/README.md +554 -238
  3. package/dist/lib/builders/api-assignment.mjs +605 -0
  4. package/dist/lib/builders/api_builder.mjs +1073 -0
  5. package/dist/lib/builders/builder.mjs +94 -0
  6. package/dist/lib/builders/modes-processor.mjs +1816 -0
  7. package/dist/lib/errors.mjs +227 -0
  8. package/dist/lib/factories/component-base.mjs +96 -0
  9. package/dist/lib/factories/context.mjs +38 -0
  10. package/dist/lib/handlers/api-cache-manager.mjs +216 -0
  11. package/dist/lib/handlers/api-manager.mjs +2364 -0
  12. package/dist/lib/handlers/context-async.mjs +184 -0
  13. package/dist/lib/handlers/context-live.mjs +184 -0
  14. package/dist/lib/handlers/hook-manager.mjs +789 -0
  15. package/dist/lib/handlers/lifecycle-token.mjs +44 -0
  16. package/dist/lib/handlers/lifecycle.mjs +131 -0
  17. package/dist/lib/handlers/materialize-manager.mjs +64 -0
  18. package/dist/lib/handlers/metadata.mjs +500 -0
  19. package/dist/lib/handlers/ownership.mjs +338 -0
  20. package/dist/lib/handlers/unified-wrapper.mjs +3031 -0
  21. package/dist/lib/helpers/class-instance-wrapper.mjs +125 -0
  22. package/dist/lib/helpers/config.mjs +343 -0
  23. package/dist/lib/helpers/eventemitter-context.mjs +365 -0
  24. package/dist/lib/helpers/hint-detector.mjs +63 -0
  25. package/dist/lib/helpers/modes-utils.mjs +53 -0
  26. package/dist/lib/helpers/resolve-from-caller.mjs +123 -117
  27. package/dist/lib/helpers/sanitize.mjs +247 -168
  28. package/dist/lib/helpers/utilities.mjs +46 -81
  29. package/dist/lib/i18n/languages/de-de.json +377 -0
  30. package/dist/lib/i18n/languages/en-gb.json +377 -0
  31. package/dist/lib/i18n/languages/en-us.json +377 -0
  32. package/dist/lib/i18n/languages/es-mx.json +377 -0
  33. package/dist/lib/i18n/languages/fr-fr.json +377 -0
  34. package/dist/lib/i18n/languages/hi-in.json +377 -0
  35. package/dist/lib/i18n/languages/ja-jp.json +377 -0
  36. package/dist/lib/i18n/languages/ko-kr.json +377 -0
  37. package/dist/lib/i18n/languages/pt-br.json +377 -0
  38. package/dist/lib/i18n/languages/ru-ru.json +377 -0
  39. package/dist/lib/i18n/languages/zh-cn.json +377 -0
  40. package/dist/lib/i18n/translations.mjs +140 -0
  41. package/dist/lib/modes/eager.mjs +75 -0
  42. package/dist/lib/modes/lazy.mjs +97 -0
  43. package/dist/lib/processors/flatten.mjs +453 -0
  44. package/dist/lib/processors/loader.mjs +355 -0
  45. package/dist/lib/processors/type-generator.mjs +291 -0
  46. package/dist/lib/processors/typescript.mjs +188 -0
  47. package/dist/lib/runtime/runtime-asynclocalstorage.mjs +80 -522
  48. package/dist/lib/runtime/runtime-livebindings.mjs +45 -390
  49. package/dist/lib/runtime/runtime.mjs +39 -159
  50. package/dist/slothlet.mjs +525 -744
  51. package/docs/API-RULES.md +338 -486
  52. package/index.cjs +4 -4
  53. package/index.mjs +82 -45
  54. package/package.json +143 -30
  55. package/types/dist/lib/builders/api-assignment.d.mts +97 -0
  56. package/types/dist/lib/builders/api-assignment.d.mts.map +1 -0
  57. package/types/dist/lib/builders/api_builder.d.mts +96 -0
  58. package/types/dist/lib/builders/api_builder.d.mts.map +1 -0
  59. package/types/dist/lib/builders/builder.d.mts +60 -0
  60. package/types/dist/lib/builders/builder.d.mts.map +1 -0
  61. package/types/dist/lib/builders/modes-processor.d.mts +32 -0
  62. package/types/dist/lib/builders/modes-processor.d.mts.map +1 -0
  63. package/types/dist/lib/errors.d.mts +118 -0
  64. package/types/dist/lib/errors.d.mts.map +1 -0
  65. package/types/dist/lib/factories/component-base.d.mts +182 -0
  66. package/types/dist/lib/factories/component-base.d.mts.map +1 -0
  67. package/types/dist/lib/factories/context.d.mts +26 -0
  68. package/types/dist/lib/factories/context.d.mts.map +1 -0
  69. package/types/dist/lib/handlers/api-cache-manager.d.mts +208 -0
  70. package/types/dist/lib/handlers/api-cache-manager.d.mts.map +1 -0
  71. package/types/dist/lib/handlers/api-manager.d.mts +392 -0
  72. package/types/dist/lib/handlers/api-manager.d.mts.map +1 -0
  73. package/types/dist/lib/handlers/context-async.d.mts +66 -0
  74. package/types/dist/lib/handlers/context-async.d.mts.map +1 -0
  75. package/types/dist/lib/handlers/context-live.d.mts +65 -0
  76. package/types/dist/lib/handlers/context-live.d.mts.map +1 -0
  77. package/types/dist/lib/handlers/hook-manager.d.mts +199 -0
  78. package/types/dist/lib/handlers/hook-manager.d.mts.map +1 -0
  79. package/types/dist/lib/handlers/lifecycle-token.d.mts +49 -0
  80. package/types/dist/lib/handlers/lifecycle-token.d.mts.map +1 -0
  81. package/types/dist/lib/handlers/lifecycle.d.mts +90 -0
  82. package/types/dist/lib/handlers/lifecycle.d.mts.map +1 -0
  83. package/types/dist/lib/handlers/materialize-manager.d.mts +75 -0
  84. package/types/dist/lib/handlers/materialize-manager.d.mts.map +1 -0
  85. package/types/dist/lib/handlers/metadata.d.mts +215 -0
  86. package/types/dist/lib/handlers/metadata.d.mts.map +1 -0
  87. package/types/dist/lib/handlers/ownership.d.mts +170 -0
  88. package/types/dist/lib/handlers/ownership.d.mts.map +1 -0
  89. package/types/dist/lib/handlers/unified-wrapper.d.mts +250 -0
  90. package/types/dist/lib/handlers/unified-wrapper.d.mts.map +1 -0
  91. package/types/dist/lib/helpers/class-instance-wrapper.d.mts +54 -0
  92. package/types/dist/lib/helpers/class-instance-wrapper.d.mts.map +1 -0
  93. package/types/dist/lib/helpers/config.d.mts +96 -0
  94. package/types/dist/lib/helpers/config.d.mts.map +1 -0
  95. package/types/dist/lib/helpers/eventemitter-context.d.mts +31 -0
  96. package/types/dist/lib/helpers/eventemitter-context.d.mts.map +1 -0
  97. package/types/dist/lib/helpers/hint-detector.d.mts +20 -0
  98. package/types/dist/lib/helpers/hint-detector.d.mts.map +1 -0
  99. package/types/dist/lib/helpers/modes-utils.d.mts +35 -0
  100. package/types/dist/lib/helpers/modes-utils.d.mts.map +1 -0
  101. package/types/dist/lib/helpers/resolve-from-caller.d.mts +29 -145
  102. package/types/dist/lib/helpers/resolve-from-caller.d.mts.map +1 -1
  103. package/types/dist/lib/helpers/sanitize.d.mts +95 -94
  104. package/types/dist/lib/helpers/sanitize.d.mts.map +1 -1
  105. package/types/dist/lib/helpers/utilities.d.mts +53 -116
  106. package/types/dist/lib/helpers/utilities.d.mts.map +1 -1
  107. package/types/dist/lib/i18n/translations.d.mts +39 -0
  108. package/types/dist/lib/i18n/translations.d.mts.map +1 -0
  109. package/types/dist/lib/modes/eager.d.mts +36 -0
  110. package/types/dist/lib/modes/eager.d.mts.map +1 -0
  111. package/types/dist/lib/modes/lazy.d.mts +49 -0
  112. package/types/dist/lib/modes/lazy.d.mts.map +1 -0
  113. package/types/dist/lib/processors/flatten.d.mts +114 -0
  114. package/types/dist/lib/processors/flatten.d.mts.map +1 -0
  115. package/types/dist/lib/processors/loader.d.mts +47 -0
  116. package/types/dist/lib/processors/loader.d.mts.map +1 -0
  117. package/types/dist/lib/processors/type-generator.d.mts +19 -0
  118. package/types/dist/lib/processors/type-generator.d.mts.map +1 -0
  119. package/types/dist/lib/processors/typescript.d.mts +55 -0
  120. package/types/dist/lib/processors/typescript.d.mts.map +1 -0
  121. package/types/dist/lib/runtime/runtime-asynclocalstorage.d.mts +47 -42
  122. package/types/dist/lib/runtime/runtime-asynclocalstorage.d.mts.map +1 -1
  123. package/types/dist/lib/runtime/runtime-livebindings.d.mts +34 -65
  124. package/types/dist/lib/runtime/runtime-livebindings.d.mts.map +1 -1
  125. package/types/dist/lib/runtime/runtime.d.mts +39 -9
  126. package/types/dist/lib/runtime/runtime.d.mts.map +1 -1
  127. package/types/dist/slothlet.d.mts +184 -111
  128. package/types/dist/slothlet.d.mts.map +1 -1
  129. package/types/index.d.mts +1 -3
  130. package/dist/lib/engine/README.md +0 -21
  131. package/dist/lib/engine/slothlet_child.mjs +0 -59
  132. package/dist/lib/engine/slothlet_engine.mjs +0 -372
  133. package/dist/lib/engine/slothlet_esm.mjs +0 -230
  134. package/dist/lib/engine/slothlet_helpers.mjs +0 -455
  135. package/dist/lib/engine/slothlet_worker.mjs +0 -149
  136. package/dist/lib/helpers/als-eventemitter.mjs +0 -256
  137. package/dist/lib/helpers/api_builder/add_api.mjs +0 -553
  138. package/dist/lib/helpers/api_builder/analysis.mjs +0 -532
  139. package/dist/lib/helpers/api_builder/construction.mjs +0 -495
  140. package/dist/lib/helpers/api_builder/decisions.mjs +0 -748
  141. package/dist/lib/helpers/api_builder/metadata.mjs +0 -248
  142. package/dist/lib/helpers/api_builder.mjs +0 -41
  143. package/dist/lib/helpers/auto-wrap.mjs +0 -62
  144. package/dist/lib/helpers/hooks.mjs +0 -389
  145. package/dist/lib/helpers/instance-manager.mjs +0 -111
  146. package/dist/lib/helpers/metadata-api.mjs +0 -201
  147. package/dist/lib/helpers/multidefault.mjs +0 -216
  148. package/dist/lib/modes/slothlet_eager.mjs +0 -154
  149. package/dist/lib/modes/slothlet_lazy.mjs +0 -594
  150. package/docs/API-RULES-CONDITIONS.md +0 -712
  151. package/types/dist/lib/engine/slothlet_child.d.mts +0 -2
  152. package/types/dist/lib/engine/slothlet_child.d.mts.map +0 -1
  153. package/types/dist/lib/engine/slothlet_engine.d.mts +0 -31
  154. package/types/dist/lib/engine/slothlet_engine.d.mts.map +0 -1
  155. package/types/dist/lib/engine/slothlet_esm.d.mts +0 -19
  156. package/types/dist/lib/engine/slothlet_esm.d.mts.map +0 -1
  157. package/types/dist/lib/engine/slothlet_helpers.d.mts +0 -25
  158. package/types/dist/lib/engine/slothlet_helpers.d.mts.map +0 -1
  159. package/types/dist/lib/engine/slothlet_worker.d.mts +0 -2
  160. package/types/dist/lib/engine/slothlet_worker.d.mts.map +0 -1
  161. package/types/dist/lib/helpers/als-eventemitter.d.mts +0 -56
  162. package/types/dist/lib/helpers/als-eventemitter.d.mts.map +0 -1
  163. package/types/dist/lib/helpers/api_builder/add_api.d.mts +0 -102
  164. package/types/dist/lib/helpers/api_builder/add_api.d.mts.map +0 -1
  165. package/types/dist/lib/helpers/api_builder/analysis.d.mts +0 -189
  166. package/types/dist/lib/helpers/api_builder/analysis.d.mts.map +0 -1
  167. package/types/dist/lib/helpers/api_builder/construction.d.mts +0 -107
  168. package/types/dist/lib/helpers/api_builder/construction.d.mts.map +0 -1
  169. package/types/dist/lib/helpers/api_builder/decisions.d.mts +0 -213
  170. package/types/dist/lib/helpers/api_builder/decisions.d.mts.map +0 -1
  171. package/types/dist/lib/helpers/api_builder/metadata.d.mts +0 -99
  172. package/types/dist/lib/helpers/api_builder/metadata.d.mts.map +0 -1
  173. package/types/dist/lib/helpers/api_builder.d.mts +0 -6
  174. package/types/dist/lib/helpers/api_builder.d.mts.map +0 -1
  175. package/types/dist/lib/helpers/auto-wrap.d.mts +0 -49
  176. package/types/dist/lib/helpers/auto-wrap.d.mts.map +0 -1
  177. package/types/dist/lib/helpers/hooks.d.mts +0 -342
  178. package/types/dist/lib/helpers/hooks.d.mts.map +0 -1
  179. package/types/dist/lib/helpers/instance-manager.d.mts +0 -41
  180. package/types/dist/lib/helpers/instance-manager.d.mts.map +0 -1
  181. package/types/dist/lib/helpers/metadata-api.d.mts +0 -132
  182. package/types/dist/lib/helpers/metadata-api.d.mts.map +0 -1
  183. package/types/dist/lib/helpers/multidefault.d.mts +0 -90
  184. package/types/dist/lib/helpers/multidefault.d.mts.map +0 -1
  185. package/types/dist/lib/modes/slothlet_eager.d.mts +0 -65
  186. package/types/dist/lib/modes/slothlet_eager.d.mts.map +0 -1
  187. package/types/dist/lib/modes/slothlet_lazy.d.mts +0 -31
  188. package/types/dist/lib/modes/slothlet_lazy.d.mts.map +0 -1
  189. package/types/index.d.mts.map +0 -1
@@ -0,0 +1,377 @@
1
+ {
2
+ "translations": {
3
+ "INVALID_CONFIG": "配置错误:{option} 为 {value},预期为 {expected}。{hint}",
4
+ "INVALID_CONFIG_DIR_MISSING": "配置错误:必须提供 'dir' 选项。请指定加载 API 的目录路径。",
5
+ "INVALID_CONFIG_DIR_INVALID": "配置错误:'dir' 必须是非空字符串路径。接收到:{dir}",
6
+ "INVALID_CONFIG_MODE_INVALID": "配置错误:'mode' 必须是 'eager' 或 'lazy'。接收到:{value}",
7
+ "INVALID_CONFIG_NOT_LOADED": "无法执行操作 '{operation}' - 实例未加载。请先调用 load()。",
8
+ "INVALID_CONFIG_LAZY_MATERIALIZATION_FAILED": "无法实例化 '{apiPath}' 的延迟代理。请检查模块是否正确加载。",
9
+ "INVALID_CONFIG_NOT_A_FUNCTION": "无法调用 '{apiPath}' - 不是函数(得到 {actualType})。请检查模块是否导出了可调用的函数。",
10
+ "INVALID_CONFIG_API_PATH_INVALID": "无效的 API 路径 '{apiPath}':{reason}。API 路径必须是非空、格式正确的点分写法字符串,且不能与保留名称冲突。索引 {index} 处的片段:'{segment}'。",
11
+ "INVALID_CONFIG_FORCE_OVERWRITE_REQUIRES_MODULE_ID": "配置错误:forceOverwrite/allowOverwrite 需要提供 moduleID。在使用路径 '{apiPath}' 的覆盖选项时,请提供唯一的 moduleID。",
12
+ "INVALID_METADATA_TARGET": "无效的元数据目标:预期为 {expected},接收到 {target}。元数据操作需要函数或对象引用。",
13
+ "METADATA_NO_MODULE_ID": "无法设置用户元数据:系统元数据中未找到 moduleID。请确保目标函数/对象是通过 Slothlet 加载的。",
14
+ "METADATA_LIFECYCLE_BYPASS": "tagSystemMetadata() 必须通过生命周期系统调用。请使用 lifecycle.emit('impl:created') 或 lifecycle.emit('impl:changed'),而不是直接调用。",
15
+ "INVALID_METADATA_KEY": "无效的元数据键:预期为 {expected},键 '{key}' 接收到类型 {type}。元数据键必须格式正确。",
16
+ "WARNING_METADATA_MISMATCH": "安全警告:'{apiPath}' 的元数据文件路径不匹配。堆栈跟踪显示为 '{stackFile}',但元数据记录为 '{metadataFile}'。这可能表明存在热重载或篡改。",
17
+ "COLLISION_ERROR": "冲突错误 at '{key}' (context: {collisionContext}, mode: {collisionMode})。请将冲突模式设置为 'merge'、'replace'、'warn' 或 'skip' 以处理冲突。",
18
+ "COLLISION_DEFAULT_EXPORT_ERROR": "检测到冲突:属性 '{key}' 已存在于 '{apiPath}' 的默认导出中。当前冲突模式为 'error'。",
19
+ "INVALID_ARGUMENT": "无效参数 '{argument}':预期为 {expected},接收到 {received}。",
20
+ "RUNTIME_NO_ACTIVE_CONTEXT": "未找到活动上下文。此操作需要在 slothlet API 函数内部调用。",
21
+ "INVALID_CONFIG_MUTATIONS_DISABLED": "无法执行 '{operation}' - 变动功能已禁用。请设置 allowMutation: true 以启用 API 修改操作(add/remove/reload)。",
22
+ "CACHE_MODULEID_MISMATCH": "缓存条目 moduleID 不匹配:预期为 '{cacheKey}',但条目中为 '{entryModuleID}'。这表明内部缓存不一致。",
23
+ "CACHE_NOT_FOUND": "在执行 '{operation}' 操作期间未找到 moduleID 为 '{moduleID}' 的缓存条目。模块可能未加载或缓存已被清除。",
24
+ "CACHE_MANAGER_NOT_AVAILABLE": "缓存管理器不可用。无法执行 '{operation}' 操作。请确保缓存管理器已初始化。",
25
+ "MODULE_LOAD_FAILED": "加载模块 '{modulePath}'(ID: {moduleID})失败:{error}",
26
+ "MODULE_NOT_FOUND": "未找到模块:{modulePath}。{hint}",
27
+ "MODULE_IMPORT_FAILED": "导入模块 '{modulePath}' 失败:{error}。请检查文件是否存在且语法正确。",
28
+ "CONTEXT_ALREADY_EXISTS": "实例 '{instanceID}' 的上下文已存在。不能初始化两次。",
29
+ "CONTEXT_NOT_FOUND": "未找到实例 '{instanceID}' 的上下文。实例可能已关闭。可用实例:{availableInstances}",
30
+ "CONTEXT_EXECUTION_FAILED": "在实例 '{instanceID}' 的上下文中执行失败:{error}",
31
+ "NO_ACTIVE_CONTEXT_LIVE": "没有活动上下文 - 当前没有实例处于 live 绑定模式。",
32
+ "NO_ACTIVE_CONTEXT_ASYNC": "没有活动上下文 - 必须在 slothlet API 上下文中调用函数。",
33
+ "RUNTIME_NO_ACTIVE_CONTEXT_SELF": "没有活动上下文 - 无法访问 'self'。请确保您在 Slothlet API 函数内部进行调用。",
34
+ "RUNTIME_NO_ACTIVE_CONTEXT_CONTEXT": "没有活动上下文 - 'context' 只能在 slothlet API 调用中修改。",
35
+ "OWNERSHIP_INVALID_MODULE_ID": "无效的所有权注册:moduleID '{moduleID}' 无效。",
36
+ "OWNERSHIP_INVALID_API_PATH": "无效的所有权注册:apiPath '{apiPath}' 无效。",
37
+ "OWNERSHIP_CONFLICT": "所有权冲突:路径 '{apiPath}' 已被模块 '{existingModuleId}' 拥有,无法分配给 '{newModuleId}'。请使用 forceOverwrite: true 或先调用 removeApi。",
38
+ "INVALID_DIRECTORY": "无效目录 '{dir}':{error}。请确保目录存在且可访问。",
39
+ "WARN_DIRECTORY_EMPTY": "目录 '{dir}'(解析路径:'{resolvedPath}')为空或不包含可加载模块(.mjs, .cjs, .js 文件)。这在 add-api 工作流程中是有效的,但可能表明路径配置有误。",
40
+ "INTERNAL_HOOK_STATE_CORRUPT": "[内部错误] HookManager 状态损坏:钩子 \"{hookId}\" ({type}/{subset}/{pattern}) — {detail}。这是一个 Slothlet 的 bug — 请报告它。",
41
+ "WARNING_RESERVED_PROPERTY_CONFLICT": "用户 API 与保留属性冲突:{properties}",
42
+ "WARNING_LANGUAGE_LOAD_FAILED": "加载语言 '{lang}' 失败,正在回退到英语。",
43
+ "WARNING_LANGUAGE_UNAVAILABLE": "语言 '{lang}' 不可用,正在使用英语。",
44
+ "WARNING_OWNERSHIP_CONFLICT": "'{apiPath}'处的所有权冲突:已被 '{existingModuleId}' 拥有,无法注册 '{newModuleId}'。保留现有所有权。",
45
+ "WARNING_HOT_RELOAD_PATH_COLLISION": "{apiPath} 处的路径冲突 - 保留现有值(冲突模式:warn)。",
46
+ "WARNING_HOT_RELOAD_MERGE_PRIMITIVES": "无法合并 {apiPath} 处的原始值 - 保留现有值。请使用冲突模式 'replace' 来覆盖,或确保两个值都是对象。",
47
+ "WARNING_COLLISION_FILE_FOLDER_MERGE": "在 '{key}' 处检测到冲突 - 正在合并文件和文件夹导出(冲突模式:'warn')。",
48
+ "HINT_WARNING_COLLISION_FILE_FOLDER_MERGE": "在 '{key}' 处,一个文件和一个文件夹共享相同的名称。它们的导出正在合并。请重命名其中一个以避免歧义,或者如果不打算合并,请将 collisionMode 设置为 'replace' 或 'error' 中的一个。",
49
+ "WARNING_COLLISION_DEFAULT_EXPORT_OVERWRITE": "冲突警告:属性 '{key}' 已存在于 {apiPath} 的默认导出函数上。具名导出将覆盖它。",
50
+ "HINT_WARNING_COLLISION_DEFAULT_EXPORT_OVERWRITE": "'{apiPath}' 处的具名导出 '{key}' 正在覆盖默认导出函数上的现有属性。请重命名导出或使用不同的 apiPath 以避免冲突。",
51
+ "WARNING_COLLISION_TRIGGER_MATERIALIZE_ERROR": "无法为 '{apiPath}' 处的延迟文件夹执行早期实例化。冲突替换可能不完整。",
52
+ "HINT_WARNING_COLLISION_TRIGGER_MATERIALIZE_ERROR": "这是冲突处理过程中的非关键后台错误。给定路径处的延迟文件夹初始化失败。请检查该路径处的模块是否有效且可加载。",
53
+ "WARNING_LIFECYCLE_HANDLER_ERROR": "生命周期事件处理程序为事件 '{event}' 抛出错误。该事件的其他处理程序继续执行。",
54
+ "HINT_WARNING_LIFECYCLE_HANDLER_ERROR": "为 '{event}' 事件注册的生命周期处理程序抛出错误。请检查您的 lifecycle.on('{event}', ...) 处理程序是否存在错误。同一事件中的其他处理程序不受影响。",
55
+ "WARNING_MULTIPLE_ROOT_CONTRIBUTORS": "检测到多个根级默认函数导出:{rootContributors}。每个导出已通过文件名(例如 api.{firstContributor}())进行命名空间划分。请考虑使用单个根级默认导出或将文件移动到子目录中。",
56
+ "V2_CONFIG_UNSUPPORTED": "v2 中的配置选项 '{option}' 在 v3 中不受支持。{hint} 请改为使用 '{replacement}'。",
57
+ "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] 检测到根贡献者:{functionName}",
58
+ "DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] 应用了根贡献者模式 - 具有 {properties} 个附加属性的函数 API",
59
+ "DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] 正在处理目录:{categoryName}(深度 {currentDepth})",
60
+ "DEBUG_MODE_MODULE_DECISION": "[{mode}] 模块 {moduleName}:{reason}",
61
+ "DEBUG_MODE_FLATTENING": "[{mode}] 正在扁平化 {moduleName}:{flattenType}",
62
+ "DEBUG_MODE_ASSIGN_TO_API": "分配-到-API",
63
+ "DEBUG_MODE_COLLISION_CHECK": "冲突-检查",
64
+ "DEBUG_MODE_COLLISION_DETECT": "冲突-检测",
65
+ "DEBUG_MODE_COLLISION_WRAPPER_DETECTION": "冲突:包装器检测",
66
+ "DEBUG_MODE_COLLISION_LAZY_DETECTION": "冲突:延迟检测",
67
+ "DEBUG_MODE_COLLISION_SET_MODE_EXISTING_WRAPPER": "冲突:在现有包装器上设置冲突模式",
68
+ "DEBUG_MODE_COLLISION_VERIFIED_EXISTING_WRAPPER_MODE": "冲突:已验证现有包装器的冲突模式",
69
+ "DEBUG_MODE_COLLISION_SET_MODE_VALUE_WRAPPER": "冲突:在值包装器上设置冲突模式",
70
+ "DEBUG_MODE_COLLISION_VERIFIED_VALUE_WRAPPER_MODE": "冲突:已验证值包装器的冲突模式",
71
+ "DEBUG_MODE_COLLISION_REPLACE_MATERIALIZE": "冲突-替换-实例化:正在触发立即实例化",
72
+ "DEBUG_MODE_COLLISION_REPLACE_NO_COPY": "冲突-替换:不复制文件属性 - 替换模式将在实例化时清除所有内容",
73
+ "DEBUG_MODE_COLLISION_REPLACE_BEFORE": "冲突-替换:分配前",
74
+ "DEBUG_MODE_COLLISION_ASSIGN_REPLACING_WITH_LAZY": "冲突-分配:正在将现有的替换为延迟文件夹",
75
+ "DEBUG_MODE_COLLISION_REPLACE_AFTER": "冲突-替换:分配后",
76
+ "DEBUG_MODE_COLLISION_REPLACE_VERIFY": "冲突-替换:验证",
77
+ "DEBUG_MODE_COLLISION_COPY_CHILD_KEYS": "冲突-复制:正在复制现有的子键",
78
+ "DEBUG_MODE_COLLISION_COPY_INDIVIDUAL_KEY": "冲突-复制:正在复制单个键",
79
+ "DEBUG_MODE_COLLISION_TRIGGER_EARLY_MAT": "冲突-触发-实例化:正在触发早期实例化(即发即弃)",
80
+ "DEBUG_MODE_MERGE_API_OBJECTS_ENTRY": "mergeApiObjects 入口",
81
+ "DEBUG_MODE_MERGE_API_OBJECTS_SOURCE_KEYS": "mergeApiObjects sourceApi 键",
82
+ "DEBUG_MODE_MERGE_API_OBJECTS_EXIT_INVALID_SOURCE": "mergeApiObjects 退出 - sourceApi 不是对象/函数",
83
+ "DEBUG_MODE_MERGE_API_OBJECTS_PROCESSING_KEY": "mergeApiObjects 处理键",
84
+ "DEBUG_MODE_MERGE_API_OBJECTS_RECURSING": "mergeApiObjects - 两者都是普通对象,正在递归",
85
+ "DEBUG_MODE_MERGE_API_OBJECTS_CALLING_ASSIGN": "mergeApiObjects 正在调用 assignToApiPath",
86
+ "DEBUG_MODE_BUILD_FINAL_API_CALLED": "buildFinalAPI 已调用",
87
+ "DEBUG_MODE_SLOTHLET_NAMESPACE_CREATED": "Slothlet 命名空间已创建",
88
+ "DEBUG_MODE_BUILT_INS_ATTACHED": "内建功能已附加",
89
+ "DEBUG_MODE_CATEGORY_REUSE_EXISTING_WRAPPER": "类别重用 - 正在使用现有包装器",
90
+ "DEBUG_MODE_CATEGORY_WRAPPER_CREATED": "类别包装器已创建",
91
+ "DEBUG_MODE_CATEGORY_WRAPPER_ASSIGNED": "类别包装器已分配给 API",
92
+ "DEBUG_MODE_CATEGORY_CREATED": "类别已创建",
93
+ "DEBUG_MODE_CATEGORY_TARGET_API_STATUS": "类别 targetApi 状态",
94
+ "DEBUG_MODE_PROCESSING_FILE": "正在处理文件",
95
+ "DEBUG_MODE_PROCESSING_MODULE": "正在处理模块",
96
+ "DEBUG_MODE_FILE_PROCESSING": "文件处理",
97
+ "DEBUG_MODE_SINGLE_FILE_FOLDER_DETECTED": "检测到单文件文件夹",
98
+ "DEBUG_MODE_SINGLE_FILE_FOLDER_WRAPPED": "单文件文件夹设置为包装属性",
99
+ "DEBUG_MODE_FLATTEN_MULTI_EXPORT_FILE": "扁平化多导出文件",
100
+ "DEBUG_MODE_FLATTEN_MULTI_EXPORT_TARGET_STATUS": "多导出 targetApi 状态",
101
+ "DEBUG_MODE_FLATTEN_MULTI_EXPORT_ASSIGNING": "多导出分配键",
102
+ "DEBUG_MODE_FLATTEN_MULTI_EXPORT_ASSIGNED": "多导出键分配成功",
103
+ "DEBUG_MODE_FLATTEN_MULTI_EXPORT_BLOCKED": "多导出键被 safeAssign 阻塞",
104
+ "DEBUG_MODE_FILE_WRAPPER_ASSIGNMENT": "文件包装器分配",
105
+ "DEBUG_MODE_AFTER_ASSIGNMENT_STATUS": "分配后的状态",
106
+ "DEBUG_MODE_SUBDIRECTORY_CHECK": "子目录检查",
107
+ "DEBUG_MODE_DIRECTORY_CHECK": "目录检查",
108
+ "DEBUG_MODE_DIRECTORY_CHECK_PASSED": "目录检查通过",
109
+ "DEBUG_MODE_SUBDIRECTORIES_FOUND": "找到子目录",
110
+ "DEBUG_MODE_SUBDIRECTORY_LOOP_START": "子目录循环开始",
111
+ "DEBUG_MODE_PROCESSING_SUBDIRECTORY": "正在处理子目录",
112
+ "DEBUG_MODE_FOLDER_LEVEL_FLATTEN_CHECK": "文件夹级扁平化检查",
113
+ "DEBUG_MODE_FOLDER_LEVEL_FLATTEN_SKIP_RECURSION": "文件夹级扁平化 - 跳过递归",
114
+ "DEBUG_MODE_FILE_FOLDER_COLLISION_MERGED": "文件-文件夹冲突:将文件导出合并到文件夹实现中",
115
+ "DEBUG_MODE_CREATING_LAZY_SUBDIRECTORY": "正在创建延迟子目录",
116
+ "DEBUG_MODE_MATERIALIZE_FUNCTION_STARTING": "实例化函数启动中",
117
+ "DEBUG_MODE_MATERIALIZE_FUNCTION_RETURNING_IMPL": "实例化函数返回实现(impl)",
118
+ "DEBUG_MODE_FOLDER_PATTERN_MATCH": "文件夹模式匹配",
119
+ "DEBUG_MODE_FOLDER_PATTERN_ATTACH_PROPERTY": "文件夹模式附加属性",
120
+ "DEBUG_MODE_FOLDER_PATTERN_RETURN": "文件夹模式返回",
121
+ "DEBUG_MODE_CACHE_ENTRY_STORED": "缓存条目已存储",
122
+ "DEBUG_MODE_CACHE_ENTRY_DELETED": "缓存条目已删除",
123
+ "DEBUG_MODE_ALL_CACHES_CLEARED": "所有缓存已清除",
124
+ "DEBUG_MODE_REBUILDING_CACHE_FROM_DISK": "正在从磁盘重建缓存",
125
+ "DEBUG_MODE_CACHE_REBUILT_SUCCESSFULLY": "缓存重建成功",
126
+ "DEBUG_MODE_SYNC_WRAPPER_ENTRY_EXISTING": "syncWrapper 入口 - existingProxy",
127
+ "DEBUG_MODE_SYNC_WRAPPER_ENTRY_NEXT": "syncWrapper 入口 - nextProxy",
128
+ "DEBUG_MODE_SYNC_WRAPPER_EXISTING": "syncWrapper 现有包装器",
129
+ "DEBUG_MODE_SYNC_WRAPPER_NEXT": "syncWrapper 下一个包装器",
130
+ "DEBUG_MODE_SYNC_WRAPPER_BEFORE_MERGE": "syncWrapper 合并前",
131
+ "DEBUG_MODE_SYNC_WRAPPER_NEXT_IMPL_KEYS": "syncWrapper 下一个包装器实现(impl)键",
132
+ "DEBUG_MODE_SYNC_WRAPPER_NEXT_CHILDCACHE_KEYS": "syncWrapper 下一个包装器子缓存(childCache)键",
133
+ "DEBUG_MODE_MUTATE_API_VALUE_CALLED": "mutateApiValue 已调用",
134
+ "DEBUG_MODE_MUTATE_API_VALUE_WRAPPER_STATUS": "mutateApiValue 包装器状态",
135
+ "DEBUG_MODE_MUTATE_API_VALUE_NEXT_VALUE": "mutateApiValue 下一个值(nextValue)",
136
+ "DEBUG_MODE_MUTATE_API_VALUE_NEXT_VALUE_KEYS": "mutateApiValue 下一个值的键",
137
+ "DEBUG_MODE_MUTATE_API_VALUE_SYNC_WRAPPERS": "mutateApiValue - 两者都是包装器,正在调用 syncWrapper",
138
+ "DEBUG_MODE_MUTATE_API_VALUE_MERGE_INTO_WRAPPER": "mutateApiValue - 正在将属性合并到现有包装器中",
139
+ "DEBUG_MODE_MUTATE_API_VALUE_MERGE_KEYS": "mutateApiValue 要合并的下一个值键",
140
+ "DEBUG_MODE_MUTATE_API_VALUE_SETIMPL_FALLBACK": "mutateApiValue - 使用 ___setImpl 备用方案",
141
+ "DEBUG_MODE_SET_VALUE_AT_PATH": "在路径上设置值",
142
+ "DEBUG_MODE_SET_VALUE_AT_PATH_SKIP_COLLISION": "setValueAtPath - 跳过冲突",
143
+ "DEBUG_MODE_SET_VALUE_AT_PATH_REPLACE_MERGE": "setValueAtPath - 以合并方式替换(保留包装器)",
144
+ "DEBUG_MODE_SET_VALUE_AT_PATH_MERGE_PROPS": "setValueAtPath - 正在合并属性",
145
+ "DEBUG_MODE_SET_VALUE_AT_PATH_ASSIGN": "setValueAtPath - 无冲突,分配中",
146
+ "DEBUG_MODE_ADD_API_COMPONENT_BUILD_RETURN": "addApiComponent buildAPI 返回结构",
147
+ "DEBUG_MODE_RULE_13_DEDUP_HOISTED_KEY": "规则 13 C34: AddApi 路径去重 - 提升了重复键",
148
+ "DEBUG_MODE_ADD_API_COMPONENT_MERGE_KEYS": "addApiComponent apiToMerge 键",
149
+ "DEBUG_MODE_AWAITING_PENDING_MATERIALIZATIONS": "在完成添加前,正在等待 {count} 个待处理的实例化",
150
+ "DEBUG_MODE_CACHE_DELETED_MODULE_REMOVED": "已为删除的模块删除缓存",
151
+ "DEBUG_MODE_RELOADING_MODULE_BY_ID": "正在按 ID 重载模块",
152
+ "DEBUG_MODE_FRESH_API_KEYS_BEFORE_RESTORE": "还原前的全新 API 键",
153
+ "DEBUG_MODE_FRESH_API_KEYS_AFTER_RESTORE": "还原后的全新 API 键",
154
+ "DEBUG_MODE_MODULE_RELOAD_COMPLETE": "模块重载完成",
155
+ "DEBUG_MODE_RELOADING_BY_API_PATH": "正在按 API 路径重载",
156
+ "DEBUG_MODE_NO_CACHES_ATTEMPTING_RESTORE": "未找到路径的缓存,正在尝试基本还原",
157
+ "DEBUG_MODE_API_PATH_RELOAD_COMPLETE": "API 路径重载完成",
158
+ "DEBUG_MODE_RESTORE_ROOT_KEY_INSPECT": "还原-根-键-检查",
159
+ "DEBUG_MODE_ROOT_KEY_RESET_LAZY": "根键已通过 ___resetLazy 重置为延迟模式",
160
+ "DEBUG_MODE_ROOT_KEY_UPDATED_SETIMPL": "根键已通过 ___setImpl 更新",
161
+ "DEBUG_MODE_RESTORE_NESTED_PATH": "还原:嵌套路径",
162
+ "DEBUG_MODE_RESTORE_FORCING_REPLACE": "还原:强制使用替换(replace)模式",
163
+ "DEBUG_MODE_UPDATED_WRAPPER_IMPL": "已更新现有包装器实现",
164
+ "DEBUG_MODE_CREATED_NEW_WRAPPER_UNEXPECTED": "创建了新的包装器(在重载中是意料之外的)",
165
+ "DEBUG_MODE_LIFECYCLE_EVENT": "事件:{event}",
166
+ "DEBUG_MODE_WRAPPER_CONSTRUCTOR_IMPL_KEYS": "UnifiedWrapper 构造函数 - 实现(impl)键",
167
+ "DEBUG_MODE_WRAPPER_CONSTRUCTOR_AFTER_ADOPT": "UnifiedWrapper 构造函数 - 采纳(adopt)后",
168
+ "DEBUG_MODE_BACKGROUND_MATERIALIZE_ERROR": "后台实例化错误",
169
+ "DEBUG_MODE_APPLY_IMPL_UPDATE_PATH": "APPLY-IMPL-UPDATE-PATH:从 null 更新了 filePath",
170
+ "DEBUG_MODE_SETIMPL_CALLED": "___setImpl 已调用",
171
+ "DEBUG_MODE_RESETLAZY_CALLED": "___resetLazy 已调用",
172
+ "DEBUG_MODE_RESETLAZY_COMPLETE": "___resetLazy 完成 - 包装器现在处于未实例化(un-materialized)状态",
173
+ "DEBUG_MODE_MATERIALIZE_AWAIT": "实例化-等待:正在等待现有的实例化 promise",
174
+ "DEBUG_MODE_MATERIALIZE_START": "_materialize 启动",
175
+ "DEBUG_MODE_MATERIALIZE_CALLING_FUNC": "_materialize 正在调用 materializeFunc",
176
+ "DEBUG_MODE_MATERIALIZE_COMPLETE": "_materialize 完成",
177
+ "DEBUG_MODE_MATERIALIZE_ERROR": "_materialize 错误",
178
+ "DEBUG_MODE_ADOPT_START": "采纳-开始",
179
+ "DEBUG_MODE_ADOPT": "采纳(ADOPT)",
180
+ "DEBUG_MODE_ADOPT_REPLACE_CLEARING": "采纳:替换模式 - 正在清除现有属性",
181
+ "DEBUG_MODE_ADOPT_PROCESS": "采纳-过程",
182
+ "DEBUG_MODE_ADOPT_CHECK": "采纳-检查",
183
+ "DEBUG_MODE_ADOPT_SKIP_COLLISION_MERGED": "采纳-跳过:冲突已合并,保留文件版本",
184
+ "DEBUG_MODE_ADOPT_SKIP_NON_CONFIGURABLE": "采纳-跳过:属性不可配置(继承所得)",
185
+ "DEBUG_MODE_ADOPT_SKIP_SAME_WRAPPER": "采纳-跳过:属性已存在且具有相同的包装器",
186
+ "DEBUG_MODE_ADOPT_ALLOW_NOT_COLLISION_MERGED": "采纳-允许:未发生冲突合并,允许通过",
187
+ "DEBUG_MODE_ADOPT_REUSE_CHILD_WRAPPER": "采纳-重用:已重用现有的子包装器",
188
+ "DEBUG_MODE_ADOPT_WRAP": "采纳-包装",
189
+ "DEBUG_MODE_ADOPT_DEFINE": "采纳-定义:正在包装器上定义",
190
+ "DEBUG_MODE_ADOPT_DEFINED": "采纳-定义成功:已成功在包装器上定义",
191
+ "DEBUG_MODE_WRAP_CHILD_PATH_CHECK": "子-包装-路径:正在检查子文件路径",
192
+ "DEBUG_MODE_WRAP_CHILD_PATH_AVAILABLE": "子-包装-路径:__childFilePaths 可用",
193
+ "DEBUG_MODE_WRAP_CHILD_PATH_USING": "子-包装-路径:正在使用 __childFilePaths",
194
+ "DEBUG_MODE_WRAP_CHILD_PATH_PRE_MAT": "子-包装-路径:正在使用 __childFilePathsPreMaterialize",
195
+ "DEBUG_MODE_WRAP_CHILD_PATH_FALLBACK": "子-包装-路径:正在使用备用的 parentMetadata?.filePath",
196
+ "DEBUG_MODE_WAITING_TYPE": "等待-类型(WAITING-TYPE)",
197
+ "DEBUG_MODE_WAITING_TYPE_WALK_WRAPPER": "等待-类型-遍历:在包装器中找到",
198
+ "DEBUG_MODE_WAITING_TYPE_WALK_IMPL": "等待-类型-遍历:在 _impl 中找到",
199
+ "DEBUG_MODE_WAITING_TYPE_WALK_DIRECT": "等待-类型-遍历:直接访问",
200
+ "DEBUG_MODE_WAITING_TYPE_RESOLVED": "等待-类型-已解析",
201
+ "DEBUG_MODE_WAITING_TYPE_INFLIGHT": "等待-类型-进行中:返回 IN_FLIGHT",
202
+ "DEBUG_MODE_WAITING_GET_PREMATURE": "等待-获取-过早:在实例化前的包装器中找到",
203
+ "DEBUG_MODE_WAITING_GET_IMMEDIATE_MAT": "等待-获取-立即实例化:为冲突合并后的文件夹触发立即实例化",
204
+ "DEBUG_MODE_WAITING_GET_IMMEDIATE_MAT_ERROR": "等待-获取-立即实例化-错误:实例化失败",
205
+ "DEBUG_MODE_WAITING_GET_IMMEDIATE_MAT_SUCCESS": "等待-获取-立即实例化-成功:现已在包装器中可用",
206
+ "DEBUG_MODE_WAITING_APPLY_ENTRY": "等待-应用-入口",
207
+ "DEBUG_MODE_WAITING_APPLY_MATERIALIZE": "等待-应用-实例化:正在触发实例化",
208
+ "DEBUG_MODE_WAITING_APPLY_MATERIALIZED": "等待-应用-实例化成功:实例化完成",
209
+ "DEBUG_MODE_WAITING_APPLY_START_WALK": "等待-应用-开始遍历:开始遍历 propChain",
210
+ "DEBUG_MODE_WAITING_APPLY_WALK": "等待-应用-遍历",
211
+ "DEBUG_MODE_WAITING_APPLY": "等待-应用",
212
+ "DEBUG_MODE_GET_START": "获取-开始",
213
+ "DEBUG_MODE_INSPECT_LAZY_UNMATERIALIZED": "util.inspect.custom:延迟模式未实例化",
214
+ "DEBUG_MODE_GET_CACHED_REPLACE": "获取-缓存-替换",
215
+ "DEBUG_MODE_GET_CACHED": "获取-缓存",
216
+ "DEBUG_MODE_GET_PROXYGET_ACCESSING": "获取-代理获取:访问中",
217
+ "DEBUG_MODE_GET_PROXYGET_FOUND": "获取-代理获取:在包装器中找到",
218
+ "DEBUG_MODE_LAZY_GET_CREATE_WAITING_PROXY": "延迟-获取:将创建等待代理",
219
+ "DEBUG_MODE_BUILD_LAZY_API_CALLED": "buildLazyAPI 已调用",
220
+ "DEBUG_MODE_COMPONENT_INITIALIZED": "组件已初始化:{component} → this.{category}.{propertyName}",
221
+ "DEBUG_MODE_LAZY_WRAPPER_REGISTERED": "延迟包装器已注册",
222
+ "DEBUG_MODE_LAZY_WRAPPER_MATERIALIZED": "延迟包装器已实例化",
223
+ "DEBUG_MODE_ALL_LAZY_WRAPPERS_MATERIALIZED": "所有延迟包装器均已实例化",
224
+ "HINT_REFERENCE_REMOVED": "'reference' 导出已从 '@cldmv/slothlet/runtime' 中移除。引用对象现在直接合并到 API 中。请通过 'self.*'(例如 'self.myRefProperty')访问它们。",
225
+ "HINT_MODULE_NOT_FOUND": "请确保模块存在且路径正确。检查导入语句中是否存在拼写错误。",
226
+ "HINT_SYNTAX_ERROR": "请检查模块文件的语法错误。常见问题:缺少括号、字符串未闭合或 JavaScript 语法无效。",
227
+ "HINT_CONTEXT_NOT_FOUND": "请确保 slothlet 实例已初始化,且在访问前已创建上下文。检查是否使用了正确的实例 ID。",
228
+ "HINT_CONTEXT_ALREADY_EXISTS": "此上下文已存在。请检查是否尝试初始化同一实例两次。",
229
+ "HINT_CONTEXT_EXECUTION_FAILED": "执行函数时出错。请查看错误详情以获取更多信息。",
230
+ "HINT_NO_ACTIVE_CONTEXT": "未找到活动上下文。请确保您在 slothlet 上下文(async 或 live 模式)下调用此函数。",
231
+ "HINT_NO_ACTIVE_CONTEXT_ASYNC": "未找到活动上下文。请确保您在 slothlet 异步上下文(async context)下调用此函数。",
232
+ "HINT_NO_ACTIVE_CONTEXT_LIVE": "未找到活动上下文。请确保您在 slothlet 实时上下文(live context)下调用此函数。",
233
+ "HINT_OWNERSHIP_INVALID_MODULE_ID": "模块 ID 无效。请确保模块加载正确且 ID 准确。",
234
+ "HINT_OWNERSHIP_INVALID_API_PATH": "API 路径无效。请确保路径格式正确。",
235
+ "HINT_OWNERSHIP_CONFLICT": "路径已被另一个模块拥有。选项:(1) 在 api.add() 选项中使用 forceOverwrite: true;(2) 将冲突配置设置为 'merge' 或 'replace';(3) 先调用 api.slothlet.api.remove() 清除路径。",
236
+ "HINT_INVALID_CONFIG": "请检查配置值,并确保其符合预期的类型 and 格式。",
237
+ "HINT_INVALID_CONFIG_DIR_INVALID": "请确保目录路径是有效的字符串,并指向一个现有的目录。",
238
+ "HINT_INVALID_CONFIG_FORCE_OVERWRITE_REQUIRES_MODULE_ID": "使用 forceOverwrite 或 allowOverwrite 时,必须提供唯一的 moduleID 以跟踪被覆盖路径的所有权。",
239
+ "HINT_COLLISION_ERROR": "冲突模式设置为 'error',会阻止任何覆盖。请改用 'merge'(合并属性)、'replace'(完全覆盖)、'warn'(警告但保留现有)或 'skip'(默默忽略)。",
240
+ "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "具名导出与此路径下默认导出对象上已存在属性冲突。请将冲突模式更改为 'merge'、'replace'、'warn' 或 'skip',或者重命名冲突的属性。",
241
+ "HINT_INVALID_ARGUMENT": "路径必须是点分写法字符串(例如 'math.add')。",
242
+ "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() 必须在 slothlet API 函数内部调用。",
243
+ "HINT_INVALID_CONFIG_MODE_INVALID": "模式必须是 'eager' 或 'lazy' 之一。",
244
+ "HINT_INVALID_CONFIG_MODE_UNKNOWN": "指定了未知的模式。请使用 'eager' 或 'lazy'。",
245
+ "HINT_INVALID_CONFIG_DIR_MISSING": "必须提供目录路径,但当前未提供。",
246
+ "HINT_INVALID_CONFIG_API_PATH_INVALID": "请确保 API 路径是一个有效的点分写法字符串(例如 'plugins.tools'),其中不包含空片段或保留名称(slothlet, shutdown, destroy)。",
247
+ "HINT_INVALID_CONFIG_MUTATIONS_DISABLED": "API 变动操作要求在配置中设置 allowMutation: true。请通过 diagnostics: true 访问这些方法以进行测试,而无需实际启用变动。",
248
+ "HINT_CACHE_MODULEID_MISMATCH": "这是一个由于缓存损坏导致的内部错误。请报告此问题并提供复现步骤。",
249
+ "HINT_CACHE_NOT_FOUND": "请确保在尝试重载或重建缓存前已加载模块。检查 moduleID 是否正确。",
250
+ "HINT_CACHE_MANAGER_NOT_AVAILABLE": "缓存管理器应自动初始化。如果您看到此错误,可能表明内部初始化存在问题。",
251
+ "HINT_INVALID_METADATA_TARGET": "目标必须是通过 Slothlet 加载的函数或对象。请传递实际的函数/对象引用,而不是字符串或原始值。",
252
+ "HINT_METADATA_NO_MODULE_ID": "请确保函数/对象是通过 Slothlet 的模块系统加载的。只有 Slothlet 管理的函数才具有相关的元数据。",
253
+ "HINT_METADATA_LIFECYCLE_BYPASS": "切勿直接调用 tagSystemMetadata()。请改用 'impl:created' 或 'impl:changed' 生命周期函数,它们会通过正确渠道调用 tagSystemMetadata()。",
254
+ "HINT_INVALID_METADATA_KEY": "元数据键必须是字符串、字符串数组或带有数组值的对象。请检查键格式是否符合这几种类型之一。",
255
+ "HINT_WARNING_METADATA_MISMATCH": "此警告表示函数的执行位置与其注册的元数据路径不符。这可能发生在热重载期间,或者函数被篡改时。在大多数启用了热重载的开发环境下,这是正常现象。",
256
+ "HINT_WARNING_INIT_COMPONENT_SKIPPED": "导入失败的组件文件将被跳过。对于可选组件而言,这是正常的。如果确需加载该组件,请查看错误详情。",
257
+ "HINT_WARNING_MULTIPLE_ROOT_CONTRIBUTORS": "在根层级检测到多个文件导出默认函数。每个导出已被划分至对应的命名空间(例如 api.filename())。请考虑将它们整合为单个根导出,或将文件移动到子目录中以方便管理。",
258
+ "HINT_WARNING_HOT_RELOAD_PATH_COLLISION": "热重载期间在指定路径发生冲突。正在保留现有值。若要强制替换,请将冲突模式设置为 'replace' 而非 'warn'。",
259
+ "HINT_WARNING_HOT_RELOAD_MERGE_PRIMITIVES": "无法合并原始值(字符串、数字、布尔值)。若要替换该值,请使用冲突模式 'replace';若要保留现有值,请继续使用 'warn' 模式。",
260
+ "HINT_WARNING_OWNERSHIP_CONFLICT": "路径已被另一个模块拥有。若要强制覆盖,请在 api.add() 选项中使用 forceOverwrite: true,或先调用 api.slothlet.api.remove() 清除路径。",
261
+ "HINT_V2_CONFIG_UNSUPPORTED": "v2 中的此配置选项在 v3 中不受支持。请更新您的配置以使用 v3 的对应项,从而获得更好的控制权和清晰度。",
262
+ "HINT_MODULE_LOAD_FAILED": "请检查模块文件是否存在错误。确保其具有有效的 JavaScript 语法和导出。",
263
+ "HINT_MODULE_IMPORT_FAILED": "请确保模块文件存在且可导入。检查语法错误或缺失的依赖项。",
264
+ "HINT_MODULE_NO_EXPORTS": "模块必须导出一个或多个函数或对象。",
265
+ "HINT_INVALID_DIRECTORY": "请确保目录路径正确,且目录存在且可访问。",
266
+ "HINT_WARN_DIRECTORY_EMPTY": "请检查目录路径是否正确。在模块动态加载的 add-api 工作流中,空目录是合法的。",
267
+ "HINT_INVALID_CONFIG_LAZY_NOT_READY": "在延迟(lazy)模式下,请在调用函数前通过访问属性来触发实例化。",
268
+ "HINT_INTERNAL_INVALID_STATE": "发生内部状态错误。这很可能是一个 bug — 请提供详细信息以便报告。",
269
+ "HINT_INTERNAL_HOOK_STATE_CORRUPT": "HookManager 内部状态不一致。这在正常使用中不应发生 — 请提交 bug 报告,并说明您是如何调用 hook.on() 和 hook.remove() 的。",
270
+ "HINT_INVALID_CONFIG_LAZY_ASYNC_REQUIRED": "延迟模式需要异步操作。请使用立即(eager)模式或实现适当的异步模式。",
271
+ "HINT_RUNTIME_NO_ACTIVE_CONTEXT_SELF": "无法在 slothlet API 函数上下文之外访问 'self'。",
272
+ "HINT_RUNTIME_NO_ACTIVE_CONTEXT_CONTEXT": "无法在 slothlet API 函数外部访问 'context'。上下文只能在 slothlet API 调用内部修改。",
273
+ "HINT_INVALID_CONFIG_NOT_LOADED": "在执行此操作前必须加载实例。请先调用 load()。",
274
+ "HINT_INVALID_CONFIG_RELOAD_NOT_IMPL": "提示:重载功能尚未实现,计划在未来的版本中添加。",
275
+ "HINT_WARNING_RESERVED_PROPERTY_CONFLICT": "'slothlet' 属性名称已保留供内建 API 方法使用。请重命名您的 API 模块或属性,以避免与 slothlet.shutdown()、slothlet.api.* 等发生冲突。",
276
+ "HINT_DEPRECATED_CONFIG_OPTION": "此配置选项已弃用,并将在未来版本中移除。请更新您的配置以使用推荐的替代项。",
277
+ "HINT_ERROR_RUNTIME_IMPORT_FAILED": "无法加载运行时模块。如果 @cldmv/slothlet/runtime 导出不可用或存在循环依赖,则可能会出现此问题。某些需要运行时访问的功能可能会受到限制。",
278
+ "INVALID_HOOK_TYPE": "无效的钩子类型 \"{type}\"。必须是以下之一:{validTypes}。",
279
+ "INVALID_HOOK_HANDLER": "钩子处理程序必须是一个函数。接收到的类型:{receivedType}。",
280
+ "DUPLICATE_HOOK_ID": "ID 为 \"{id}\" 的钩子已存在。请使用唯一的 ID,或省略 id 选项以自动生成一个。",
281
+ "INVALID_HOOK_SUBSET": "无效的钩子子集 \"{subset}\"。必须是 \"before\"、\"primary\" 或 \"after\"。有效的子集:{validSubsets}。",
282
+ "INVALID_TYPE_PATTERN": "无效的类型模式 \"{typePattern}\"。{expected}",
283
+ "HINT_INVALID_HOOK_TYPE": "请使用有效的钩子类型:before、after、always 或 error。",
284
+ "HINT_INVALID_HOOK_HANDLER": "请提供一个函数作为钩子处理程序,而不是字符串或其他类型。",
285
+ "HINT_DUPLICATE_HOOK_ID": "请使用不同的 id 值,或者移除 id 选项以便让 Slothlet 自动生成唯一的 ID。",
286
+ "HINT_INVALID_HOOK_SUBSET": "子集控制着执行顺序。前置处理请用 'before',主要钩子请用 'primary'(默认),后置处理请用 'after'。",
287
+ "HINT_INVALID_TYPE_PATTERN": "类型模式必须采用 'type:pattern' 格式,例如 'before:math.*' 或 'error:**'。",
288
+ "HOOK_BEFORE_RETURNED_PROMISE": "路径 '{path}' 的前置钩子 '{id}' 返回了一个 Promise。前置钩子必须是同步的。",
289
+ "HINT_HOOK_BEFORE_RETURNED_PROMISE": "前置钩子在 API 调用前同步执行。请从此钩子中移除 async/await 或 Promise 的使用,如果需要异步处理,请改用 'after' 钩子。",
290
+ "HOOK_BRACE_EXPANSION_MAX_DEPTH": "钩子模式中的大括号扩展超过了最大嵌套深度 {maxDepth}。",
291
+ "HINT_HOOK_BRACE_EXPANSION_MAX_DEPTH": "请简化钩子路径模式以减少大括号嵌套。最大允许深度为 {maxDepth} 层。",
292
+ "SCOPE_DISABLED": "每请求上下文隔离已禁用。请在 slothlet 配置中设置 'scope: {}' 以启用该功能。",
293
+ "HINT_SCOPE_DISABLED": "请在您的 slothlet 选项中添加 'scope: {}'(或一个 scope 配置对象),以通过 api.slothlet.run() and api.slothlet.scope() 启用每请求上下文隔离。",
294
+ "SCOPE_INVALID_CONTEXT": "上下文 data 必须是一个普通对象。接收到:{received}。",
295
+ "HINT_SCOPE_INVALID_CONTEXT": "请将一个普通对象作为第一个参数传递给 run(),例如 api.slothlet.run({ userId: 1 }, callback)。",
296
+ "SCOPE_INVALID_CALLBACK": "回调必须是一个函数。接收到:{received}。",
297
+ "HINT_SCOPE_INVALID_CALLBACK": "请将一个函数作为第二个参数传递给 run(),例如 api.slothlet.run(context, async () => { ... })。",
298
+ "SCOPE_INVALID_OPTIONS": "选项必须是一个普通对象。接收到:{received}。",
299
+ "HINT_SCOPE_INVALID_OPTIONS": "请将一个普通的选项对象传递给 scope(),例如 api.slothlet.scope({ fn: myFunc, context: {} })。",
300
+ "SCOPE_INVALID_FN": "'fn' 必须是一个函数。接收到:{received}。",
301
+ "HINT_SCOPE_INVALID_FN": "请将 options.fn 设置为您想要在隔离上下文中执行的函数。",
302
+ "SCOPE_INVALID_CONTEXT_OBJECT": "'context' 必须是一个普通对象。接收到:{received}。",
303
+ "HINT_SCOPE_INVALID_CONTEXT_OBJECT": "将 options.context 设置为包含每次请求注入数据的普通对象。",
304
+ "SCOPE_INVALID_MERGE_STRATEGY": "无效的合并策略 '{merge}'。必须是 'shallow' 或 'deep'。",
305
+ "HINT_SCOPE_INVALID_MERGE_STRATEGY": "对于上下文对象的顶层合并使用 merge: 'shallow'(默认),对于递归合并使用 merge: 'deep'。",
306
+ "SCOPE_INVALID_ISOLATION_MODE": "无效的隔离模式 '{isolationMode}'。必须是 'partial' 或 'full'。",
307
+ "HINT_SCOPE_INVALID_ISOLATION_MODE": "使用 isolation: 'partial'(默认)以继承父级上下文并覆盖新值,或使用 isolation: 'full' 来开始一个全新的上下文。",
308
+ "CHAIN_ACCESS_UNDEFINED": "在遍历 '{apiPath}.{chainLabel}' 时,无法在 undefined 上访问 '{prop}'。",
309
+ "HINT_CHAIN_ACCESS_UNDEFINED": "方法链中的某个属性在到达目标前解析为 undefined。检查链中每个中间属性是否为有效的 API 路径。",
310
+ "CHAIN_MATERIALIZE_FAILED": "在遍历 '{apiPath}.{chainLabel}' 时无法 materialize '{prop}'。",
311
+ "HINT_CHAIN_MATERIALIZE_FAILED": "此路径的 lazy API 模块加载失败。检查模块文件是否存在并导出有效的值。",
312
+ "CHAIN_NOT_CALLABLE": "'{apiPath}.{chainLabel}' 不是可调用的或不存在。",
313
+ "HINT_CHAIN_NOT_CALLABLE": "链式属性解析为非函数值。确保 API 路径指向函数,或检查模块是否导出了期望的函数。",
314
+ "TYPESCRIPT_ESBUILD_NOT_INSTALLED": "TypeScript {mode} 模式需要安装 'esbuild'。",
315
+ "HINT_TYPESCRIPT_ESBUILD_NOT_INSTALLED": "请安装:npm install esbuild",
316
+ "TYPESCRIPT_TSC_NOT_INSTALLED": "TypeScript {mode} 模式需要安装 'typescript'。",
317
+ "HINT_TYPESCRIPT_TSC_NOT_INSTALLED": "请安装:npm install typescript",
318
+ "TYPESCRIPT_NOT_INSTALLED": "类型生成({feature})需要安装 'typescript'。",
319
+ "HINT_TYPESCRIPT_NOT_INSTALLED": "提示:要生成类型,请安装:npm install typescript",
320
+ "TS_STRICT_REQUIRES_OUTPUT": "TypeScript 严格模式要求在您的 TypeScript 配置中配置 'types.output'。",
321
+ "HINT_TS_STRICT_REQUIRES_OUTPUT": "在您的 TypeScript 配置中添加 'types: { output: './types/api.d.ts', interfaceName: 'MyAPI' }'。",
322
+ "TS_STRICT_REQUIRES_INTERFACE_NAME": "TypeScript 严格模式要求在您的 TypeScript 配置中配置 'types.interfaceName'。",
323
+ "HINT_TS_STRICT_REQUIRES_INTERFACE_NAME": "在 'types' 配置中添加 'interfaceName',例如:types: { output: './types/api.d.ts', interfaceName: 'MyAPI' }。",
324
+ "TS_TYPE_GENERATION_FAILED": "类型生成失败:{error}",
325
+ "HINT_TS_TYPE_GENERATION_FAILED": "生成 TypeScript 声明的子进程遇到错误。请检查错误信息并确保 TypeScript 源文件有效。",
326
+ "TS_TYPE_GENERATION_FORK_FAILED": "无法派生类型生成进程:{error}",
327
+ "HINT_TS_TYPE_GENERATION_FORK_FAILED": "类型生成工作进程无法启动。请确保 Node.js 有权限派生子进程,并且存在 tools/build/generate-types-worker.mjs 脚本。",
328
+ "TS_TYPE_GENERATION_PROCESS_EXITED": "类型生成进程以代码 {code} 退出:{output}",
329
+ "HINT_TS_TYPE_GENERATION_PROCESS_EXITED": "类型生成子进程以非零代码退出。检查输出中的编译器错误并验证 TypeScript 源是否有效。",
330
+ "TS_TYPE_CHECK_ERRORS": "在 '{filePath}' 中发现 TypeScript 类型错误:\n{errors}",
331
+ "HINT_TS_TYPE_CHECK_ERRORS": "修复源文件中列出的 TypeScript 类型错误,或将 typescript.strict 设置为 false 以跳过类型检查。",
332
+ "FLATTEN_REASON_MULTI_DEFAULT_WITH_DEFAULT": "Multi-default context with default export",
333
+ "FLATTEN_REASON_MULTI_DEFAULT_WITHOUT_DEFAULT": "Multi-default context without default export",
334
+ "FLATTEN_REASON_ADDAPI_METADATA_DEFAULT": "AddApi special file pattern with metadata default",
335
+ "FLATTEN_REASON_ADDAPI_SPECIAL_FILE": "AddApi special file pattern - always flatten",
336
+ "FLATTEN_REASON_ADDAPI_SPECIAL_FILE_PARENT": "AddApi special file pattern with metadata default - flatten named exports to parent",
337
+ "FLATTEN_REASON_SELF_REFERENTIAL": "检测到自引用导出",
338
+ "FLATTEN_REASON_SINGLE_EXPORT_MATCHES_FILENAME": "具名导出与文件名匹配",
339
+ "FLATTEN_REASON_FILENAME_MATCHES_CATEGORY": "文件名与类别名匹配",
340
+ "FLATTEN_REASON_PRESERVING_FUNCTION_NAME": "保留函数名优先于文件名",
341
+ "FLATTEN_REASON_DEFAULT_PRESERVE_NAMESPACE": "默认行为 — 保持命名空间",
342
+ "FLATTEN_REASON_NO_CONDITIONS_MET": "未满足任何扁平化条件",
343
+ "FLATTEN_REASON_FUNCTION_FOLDER_MATCH": "函数名与文件夹名匹配",
344
+ "FLATTEN_REASON_DEFAULT_OBJECT_EXPORT_FLATTEN": "默认对象导出与文件夹名匹配",
345
+ "FLATTEN_REASON_BASENAME_MATCHES_CATEGORY": "文件基名与类别名匹配",
346
+ "FLATTEN_REASON_GENERIC_FILENAME_SINGLE_EXPORT": "通用文件名且仅包含单个导出",
347
+ "FLATTEN_REASON_DEFAULT_FUNCTION_EXPORT": "默认函数导出",
348
+ "FLATTEN_REASON_SINGLE_EXPORT_MATCHES_MODULE": "具名导出与模块名匹配(最终检查)",
349
+ "INVALID_CONFIG_PATH_TYPE": "路径必须是目录或受支持的文件类型(.mjs、.cjs、.js)。收到:{path}",
350
+ "HINT_INVALID_CONFIG_PATH_TYPE": "确保路径指向目录或后缀为 .mjs、.cjs 或 .js 的 JavaScript 模块文件。",
351
+ "INVALID_CONFIG_FILE_TYPE": "文件必须具有 .mjs、.cjs 或 .js 扩展名。路径 {path} 的扩展名为 {extension}",
352
+ "HINT_INVALID_CONFIG_FILE_TYPE": "将文件重命名为受支持的扩展名(.mjs 用于 ES 模块,.cjs 用于 CommonJS,.js 可用于任意)。",
353
+ "API_PATH_REASON_ARRAY_ELEMENTS": "数组元素必须为字符串",
354
+ "API_PATH_REASON_ARRAY_EMPTY_SEGMENTS": "数组包含空字符串片段",
355
+ "API_PATH_REASON_RESERVED_NAME": "与保留名称冲突(slothlet、shutdown、destroy)",
356
+ "API_PATH_REASON_INVALID_TYPE": "必须是字符串、字符串数组、空字符串(根)或 null/undefined(根)",
357
+ "API_PATH_REASON_EMPTY_SEGMENTS": "包含空的路径段",
358
+ "API_PATH_REASON_COLLISION_ERROR": "路径已存在且冲突模式为 'error'",
359
+ "API_PATH_REASON_NOT_TRAVERSABLE": "路径段不存在或不可遍历",
360
+ "API_PATH_REASON_REQUIRED": "removeApi 操作需要指定 apiPath",
361
+ "INVALID_API_PATH": "无效的 API 路径:'{apiPath}' 在已加载的 API 中不存在。",
362
+ "HINT_INVALID_API_PATH": "在使用前确保 API 路径存在。使用点分写法(例如 'math.add')指向当前已加载的模块。",
363
+ "HOOKS_NOT_INITIALIZED": "无法访问钩子功能:钩子管理器未初始化。",
364
+ "HINT_HOOKS_NOT_INITIALIZED": "钩子支持需要在 slothlet 配置中启用 'hooks: true'。",
365
+ "METADATA_NOT_AVAILABLE": "无法访问元数据功能:元数据处理程序未初始化。可用的处理程序:{handlersKeys}。这是一个内部错误 - 请报告。",
366
+ "HINT_METADATA_NOT_AVAILABLE": "元数据支持是内置的。如果元数据处理程序缺失,说明 slothlet 初始化出现内部问题。",
367
+ "NO_CONTEXT_MANAGER": "此 slothlet 实例未配置上下文管理器。",
368
+ "HINT_NO_CONTEXT_MANAGER": "上下文操作需要上下文管理器。在配置中初始化 slothlet,例如 'contextManager: new AsyncContextManager()' 或 'contextManager: new LiveContextManager()'。",
369
+ "UNSUPPORTED_CONTEXT_MANAGER": "不支持的上下文管理器:'{manager}'。仅支持 AsyncContextManager 和 LiveContextManager。",
370
+ "HINT_UNSUPPORTED_CONTEXT_MANAGER": "对异步/ALS 上下文隔离使用 AsyncContextManager,对同步实时绑定上下文使用 LiveContextManager。"
371
+ },
372
+ "metadata": {
373
+ "code": "zh-cn",
374
+ "name": "Chinese (Simplified)",
375
+ "nativeName": "中文(简体)"
376
+ }
377
+ }
@@ -0,0 +1,140 @@
1
+ /*
2
+ Copyright 2026 CLDMV/Shinrai
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+
18
+
19
+
20
+
21
+ import { readFileSync } from "fs";
22
+ import { fileURLToPath } from "url";
23
+ import { dirname, join } from "path";
24
+
25
+
26
+ const translations_dirname = dirname(fileURLToPath(import.meta.url));
27
+
28
+
29
+ const defaultTranslations = JSON.parse(readFileSync(join(translations_dirname, "languages", "en-us.json"), "utf-8"));
30
+
31
+
32
+ let currentTranslations = defaultTranslations.translations;
33
+
34
+
35
+ let currentLanguage = "en-us";
36
+
37
+
38
+ function i18n_detectLanguage() {
39
+
40
+ const envLang = process.env.LANG || process.env.LANGUAGE || process.env.LC_ALL;
41
+ if (envLang) {
42
+ const lang = envLang.split(".")[0].split("_")[0].toLowerCase();
43
+
44
+ if (lang === "en") return "en-us";
45
+ if (lang === "es") return "es-mx";
46
+ return lang;
47
+ }
48
+
49
+
50
+ return "en-us";
51
+ }
52
+
53
+
54
+ function i18n_loadLanguageSync(lang) {
55
+ try {
56
+
57
+ const langFilePath = join(translations_dirname, "languages", `${lang}.json`);
58
+ const langData = JSON.parse(readFileSync(langFilePath, "utf-8"));
59
+ return langData.translations;
60
+ } catch (___error) {
61
+
62
+ return null;
63
+ }
64
+ }
65
+
66
+
67
+ export function setLanguage(lang) {
68
+
69
+ currentTranslations = { ...defaultTranslations.translations };
70
+
71
+
72
+ if (lang !== "en-us") {
73
+ const langTranslations = i18n_loadLanguageSync(lang);
74
+ if (langTranslations) {
75
+
76
+ currentTranslations = { ...currentTranslations, ...langTranslations };
77
+ currentLanguage = lang;
78
+ } else {
79
+
80
+ console.warn(`Failed to load language '${lang}', falling back to English.`);
81
+ currentLanguage = "en-us";
82
+ }
83
+ } else {
84
+ currentLanguage = "en-us";
85
+ }
86
+ }
87
+
88
+
89
+ export function getLanguage() {
90
+ return currentLanguage;
91
+ }
92
+
93
+
94
+ export function translate(errorCode, params = {}) {
95
+
96
+ let template = currentTranslations[errorCode];
97
+
98
+
99
+ if (!template && errorCode.startsWith("INVALID_CONFIG_")) {
100
+ template = currentTranslations.INVALID_CONFIG_generic;
101
+ }
102
+
103
+
104
+ let message = template || `Error: ${errorCode}`;
105
+ for (const [key, value] of Object.entries(params)) {
106
+ message = message.replace(new RegExp(`\\{${key}\\}`, "g"), value !== undefined ? String(value) : "");
107
+ }
108
+
109
+
110
+ message = message
111
+ .replace(/\{\w+\}/g, "")
112
+ .replace(/\s+/g, " ")
113
+ .trim();
114
+
115
+ return message;
116
+ }
117
+
118
+
119
+ export function initI18n(options = {}) {
120
+ try {
121
+ if (options.language) {
122
+ setLanguage(options.language);
123
+ } else {
124
+
125
+ const detected = i18n_detectLanguage();
126
+ setLanguage(detected);
127
+ }
128
+ } catch (___error) {
129
+
130
+ console.warn("i18n initialization failed, using English:", ___error.message);
131
+ currentLanguage = "en-us";
132
+ currentTranslations = defaultTranslations.translations;
133
+ }
134
+ }
135
+
136
+
137
+ initI18n();
138
+
139
+
140
+ export const t = translate;
@@ -0,0 +1,75 @@
1
+ /*
2
+ Copyright 2026 CLDMV/Shinrai
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+
18
+
19
+
20
+ import { ComponentBase } from "@cldmv/slothlet/factories/component-base";
21
+
22
+
23
+ export class EagerMode extends ComponentBase {
24
+ static slothletProperty = "eager";
25
+
26
+
27
+ constructor(slothlet) {
28
+ super(slothlet);
29
+ }
30
+
31
+
32
+ async buildAPI({
33
+ dir,
34
+ apiPathPrefix = "",
35
+ collisionContext = "initial",
36
+ moduleID,
37
+ apiDepth = Infinity,
38
+ cacheBust = null,
39
+ fileFilter = null
40
+ }) {
41
+ const api = {};
42
+
43
+ const { modesProcessor } = this.slothlet.builders;
44
+ const { loader } = this.slothlet.processors;
45
+
46
+ const structure = await loader.scanDirectory(dir, { maxDepth: apiDepth, fileFilter });
47
+
48
+ const rootDirectory = {
49
+ name: ".",
50
+ path: dir,
51
+ children: {
52
+ files: structure.files,
53
+ directories: structure.directories
54
+ }
55
+ };
56
+
57
+ const rootDefaultFunction = await modesProcessor.processFiles(
58
+ api,
59
+ structure.files,
60
+ rootDirectory,
61
+ 0,
62
+ "eager",
63
+ true,
64
+ true,
65
+ false,
66
+ apiPathPrefix,
67
+ collisionContext,
68
+ moduleID,
69
+ dir,
70
+ cacheBust
71
+ );
72
+
73
+ return modesProcessor.applyRootContributor(api, rootDefaultFunction, "eager");
74
+ }
75
+ }