@cldmv/slothlet 3.2.3 → 3.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -9
- package/REFERENCE.md +23 -0
- package/dist/lib/builders/api-assignment.mjs +1 -589
- package/dist/lib/builders/api_builder.mjs +1 -1155
- package/dist/lib/builders/builder.mjs +1 -78
- package/dist/lib/builders/modes-processor.mjs +1 -1800
- package/dist/lib/errors.mjs +9 -211
- package/dist/lib/factories/component-base.mjs +1 -80
- package/dist/lib/factories/context.mjs +1 -22
- package/dist/lib/handlers/api-cache-manager.mjs +1 -200
- package/dist/lib/handlers/api-manager.mjs +1 -2513
- package/dist/lib/handlers/context-async.mjs +1 -168
- package/dist/lib/handlers/context-live.mjs +1 -168
- package/dist/lib/handlers/hook-manager.mjs +1 -773
- package/dist/lib/handlers/lifecycle-token.mjs +1 -28
- package/dist/lib/handlers/lifecycle.mjs +1 -115
- package/dist/lib/handlers/materialize-manager.mjs +1 -48
- package/dist/lib/handlers/metadata.mjs +1 -501
- package/dist/lib/handlers/ownership.mjs +1 -322
- package/dist/lib/handlers/permission-manager.mjs +17 -0
- package/dist/lib/handlers/unified-wrapper.mjs +1 -3042
- package/dist/lib/handlers/version-manager.mjs +1 -885
- package/dist/lib/helpers/class-instance-wrapper.mjs +1 -109
- package/dist/lib/helpers/config.mjs +1 -355
- package/dist/lib/helpers/eventemitter-context.mjs +1 -349
- package/dist/lib/helpers/hint-detector.mjs +1 -47
- package/dist/lib/helpers/modes-utils.mjs +1 -37
- package/dist/lib/helpers/pattern-matcher.mjs +17 -0
- package/dist/lib/helpers/resolve-from-caller.mjs +1 -169
- package/dist/lib/helpers/sanitize.mjs +1 -340
- package/dist/lib/helpers/utilities.mjs +1 -70
- package/dist/lib/i18n/languages/de-de.json +21 -1
- package/dist/lib/i18n/languages/en-gb.json +21 -1
- package/dist/lib/i18n/languages/en-us.json +21 -1
- package/dist/lib/i18n/languages/es-mx.json +21 -1
- package/dist/lib/i18n/languages/fr-fr.json +21 -1
- package/dist/lib/i18n/languages/hi-in.json +21 -1
- package/dist/lib/i18n/languages/ja-jp.json +21 -1
- package/dist/lib/i18n/languages/ko-kr.json +21 -1
- package/dist/lib/i18n/languages/pt-br.json +21 -1
- package/dist/lib/i18n/languages/ru-ru.json +21 -1
- package/dist/lib/i18n/languages/zh-cn.json +21 -1
- package/dist/lib/i18n/translations.mjs +1 -126
- package/dist/lib/modes/eager.mjs +1 -59
- package/dist/lib/modes/lazy.mjs +1 -81
- package/dist/lib/processors/flatten.mjs +1 -437
- package/dist/lib/processors/loader.mjs +1 -339
- package/dist/lib/processors/type-generator.mjs +1 -275
- package/dist/lib/processors/typescript.mjs +1 -172
- package/dist/lib/runtime/runtime-asynclocalstorage.mjs +1 -113
- package/dist/lib/runtime/runtime-livebindings.mjs +1 -78
- package/dist/lib/runtime/runtime.mjs +1 -102
- package/dist/slothlet.mjs +1 -808
- package/package.json +37 -31
- package/types/dist/lib/builders/api-assignment.d.mts +3 -92
- package/types/dist/lib/builders/api-assignment.d.mts.map +1 -1
- package/types/dist/lib/builders/api_builder.d.mts +102 -91
- package/types/dist/lib/builders/api_builder.d.mts.map +1 -1
- package/types/dist/lib/builders/builder.d.mts +1 -55
- package/types/dist/lib/builders/builder.d.mts.map +1 -1
- package/types/dist/lib/builders/modes-processor.d.mts +3 -27
- package/types/dist/lib/builders/modes-processor.d.mts.map +1 -1
- package/types/dist/lib/errors.d.mts +19 -109
- package/types/dist/lib/errors.d.mts.map +1 -1
- package/types/dist/lib/factories/component-base.d.mts +7 -177
- package/types/dist/lib/factories/component-base.d.mts.map +1 -1
- package/types/dist/lib/factories/context.d.mts +4 -22
- package/types/dist/lib/factories/context.d.mts.map +1 -1
- package/types/dist/lib/handlers/api-cache-manager.d.mts +20 -203
- package/types/dist/lib/handlers/api-cache-manager.d.mts.map +1 -1
- package/types/dist/lib/handlers/api-manager.d.mts +33 -408
- package/types/dist/lib/handlers/api-manager.d.mts.map +1 -1
- package/types/dist/lib/handlers/context-async.d.mts +23 -61
- package/types/dist/lib/handlers/context-async.d.mts.map +1 -1
- package/types/dist/lib/handlers/context-live.d.mts +22 -59
- package/types/dist/lib/handlers/context-live.d.mts.map +1 -1
- package/types/dist/lib/handlers/hook-manager.d.mts +46 -185
- package/types/dist/lib/handlers/hook-manager.d.mts.map +1 -1
- package/types/dist/lib/handlers/lifecycle-token.d.mts +3 -48
- package/types/dist/lib/handlers/lifecycle-token.d.mts.map +1 -1
- package/types/dist/lib/handlers/lifecycle.d.mts +5 -82
- package/types/dist/lib/handlers/lifecycle.d.mts.map +1 -1
- package/types/dist/lib/handlers/materialize-manager.d.mts +8 -70
- package/types/dist/lib/handlers/materialize-manager.d.mts.map +1 -1
- package/types/dist/lib/handlers/metadata.d.mts +17 -221
- package/types/dist/lib/handlers/metadata.d.mts.map +1 -1
- package/types/dist/lib/handlers/ownership.d.mts +44 -160
- package/types/dist/lib/handlers/ownership.d.mts.map +1 -1
- package/types/dist/lib/handlers/permission-manager.d.mts +47 -0
- package/types/dist/lib/handlers/permission-manager.d.mts.map +1 -0
- package/types/dist/lib/handlers/unified-wrapper.d.mts +26 -239
- package/types/dist/lib/handlers/unified-wrapper.d.mts.map +1 -1
- package/types/dist/lib/handlers/version-manager.d.mts +28 -225
- package/types/dist/lib/handlers/version-manager.d.mts.map +1 -1
- package/types/dist/lib/helpers/class-instance-wrapper.d.mts +2 -52
- package/types/dist/lib/helpers/class-instance-wrapper.d.mts.map +1 -1
- package/types/dist/lib/helpers/config.d.mts +125 -123
- package/types/dist/lib/helpers/config.d.mts.map +1 -1
- package/types/dist/lib/helpers/eventemitter-context.d.mts +3 -29
- package/types/dist/lib/helpers/eventemitter-context.d.mts.map +1 -1
- package/types/dist/lib/helpers/hint-detector.d.mts +2 -15
- package/types/dist/lib/helpers/hint-detector.d.mts.map +1 -1
- package/types/dist/lib/helpers/modes-utils.d.mts +3 -30
- package/types/dist/lib/helpers/modes-utils.d.mts.map +1 -1
- package/types/dist/lib/helpers/pattern-matcher.d.mts +4 -0
- package/types/dist/lib/helpers/pattern-matcher.d.mts.map +1 -0
- package/types/dist/lib/helpers/resolve-from-caller.d.mts +3 -27
- package/types/dist/lib/helpers/resolve-from-caller.d.mts.map +1 -1
- package/types/dist/lib/helpers/sanitize.d.mts +4 -92
- package/types/dist/lib/helpers/sanitize.d.mts.map +1 -1
- package/types/dist/lib/helpers/utilities.d.mts +4 -52
- package/types/dist/lib/helpers/utilities.d.mts.map +1 -1
- package/types/dist/lib/i18n/translations.d.mts +4 -37
- package/types/dist/lib/i18n/translations.d.mts.map +1 -1
- package/types/dist/lib/modes/eager.d.mts +8 -30
- package/types/dist/lib/modes/eager.d.mts.map +1 -1
- package/types/dist/lib/modes/lazy.d.mts +10 -43
- package/types/dist/lib/modes/lazy.d.mts.map +1 -1
- package/types/dist/lib/processors/flatten.d.mts +56 -107
- package/types/dist/lib/processors/flatten.d.mts.map +1 -1
- package/types/dist/lib/processors/loader.d.mts +6 -41
- package/types/dist/lib/processors/loader.d.mts.map +1 -1
- package/types/dist/lib/processors/type-generator.d.mts +2 -16
- package/types/dist/lib/processors/type-generator.d.mts.map +1 -1
- package/types/dist/lib/processors/typescript.d.mts +6 -53
- package/types/dist/lib/processors/typescript.d.mts.map +1 -1
- package/types/dist/lib/runtime/runtime-asynclocalstorage.d.mts +3 -71
- package/types/dist/lib/runtime/runtime-asynclocalstorage.d.mts.map +1 -1
- package/types/dist/lib/runtime/runtime-livebindings.d.mts +2 -37
- package/types/dist/lib/runtime/runtime-livebindings.d.mts.map +1 -1
- package/types/dist/lib/runtime/runtime.d.mts +3 -39
- package/types/dist/lib/runtime/runtime.d.mts.map +1 -1
- package/types/dist/slothlet.d.mts +3 -249
- package/types/dist/slothlet.d.mts.map +1 -1
- package/types/index.d.mts +36 -16
- package/types/index.d.mts.map +1 -0
- package/AGENT-USAGE.md +0 -736
- package/docs/API-RULES.md +0 -712
|
@@ -381,7 +381,27 @@
|
|
|
381
381
|
"DEBUG_VERSION_RESOLVED": "버전 해석됨: {version}, 경로: {apiPath} (호출자: {callerModule})",
|
|
382
382
|
"DEBUG_VERSION_DEFAULT_USED": "경로 {apiPath}에 대한 Discriminator 일치 없음; 기본 버전 {version}을(를) 사용합니다.",
|
|
383
383
|
"DEBUG_VERSION_REGISTERED": "버전 {version}이(가) {logicalPath}에 등록됨 (moduleID: {moduleID})",
|
|
384
|
-
"DEBUG_VERSION_UNREGISTERED": "버전 {version}이(가) {logicalPath}에서 등록 취소됨"
|
|
384
|
+
"DEBUG_VERSION_UNREGISTERED": "버전 {version}이(가) {logicalPath}에서 등록 취소됨",
|
|
385
|
+
|
|
386
|
+
"PERMISSION_DENIED": "접근 거부: 호출자 '{caller}'은(는) '{target}'에 접근할 권한이 없습니다",
|
|
387
|
+
"HINT_PERMISSION_DENIED": "이 호출자/대상 쌍의 권한 규칙을 확인하세요. api.slothlet.permissions.global.rulesForPath('{target}')를 사용하여 활성 규칙을 검사할 수 있습니다.",
|
|
388
|
+
"PERMISSION_SELF_MODIFY": "모듈 '{moduleID}'은(는) 자신의 권한 규칙 '{ruleId}'을(를) 제거할 수 없습니다",
|
|
389
|
+
"HINT_PERMISSION_SELF_MODIFY": "권한 규칙은 소유 모듈에 대해 불변입니다. 다른 모듈이 이 규칙을 제거해야 합니다.",
|
|
390
|
+
"INVALID_PERMISSION_RULE": "잘못된 권한 규칙: {reason} (수신됨: {received})",
|
|
391
|
+
"HINT_INVALID_PERMISSION_RULE": "권한 규칙에는 caller (string glob), target (string glob), effect ('allow' 또는 'deny')가 필요합니다.",
|
|
392
|
+
"DEBUG_PERMISSION_DENIED": "권한 거부: 호출자 '{caller}' -> 대상 '{target}'",
|
|
393
|
+
"DEBUG_PERMISSION_ALLOWED": "권한 허용: 호출자 '{caller}' -> 대상 '{target}'",
|
|
394
|
+
"DEBUG_PERMISSION_SELF_BYPASS": "권한 셀프 바이패스: 호출자와 대상이 moduleID '{moduleID}'을(를) 공유합니다",
|
|
395
|
+
"DEBUG_PERMISSION_DEFAULT": "기본 권한 정책 적용: 호출자 '{caller}' -> 대상 '{target}' -> {effect}",
|
|
396
|
+
"DEBUG_PERMISSION_RULE_ADDED": "권한 규칙 추가됨: {ruleId} ({caller} -> {target}: {effect}, 소유자: {ownerModuleID})",
|
|
397
|
+
"DEBUG_PERMISSION_RULE_REMOVED": "권한 규칙 제거됨: {ruleId} ({caller} -> {target}: {effect})",
|
|
398
|
+
"PERM_RULE_NOT_OBJECT": "규칙은 널이 아닌 객체여야 합니다",
|
|
399
|
+
"PERM_RULE_CALLER_REQUIRED": "rule.caller는 비어 있지 않은 문자열이어야 합니다",
|
|
400
|
+
"PERM_RULE_TARGET_REQUIRED": "rule.target은 비어 있지 않은 문자열이어야 합니다",
|
|
401
|
+
"PERM_RULE_EFFECT_INVALID": "rule.effect는 'allow' 또는 'deny'여야 합니다",
|
|
402
|
+
"BRACE_EXPANSION_MAX_DEPTH": "중괄호 확장이 최대 깊이 {maxDepth}을(를) 초과했습니다",
|
|
403
|
+
"HINT_BRACE_EXPANSION_MAX_DEPTH": "중괄호 패턴의 중첩을 줄이거나 maxDepth 옵션을 늘리세요.",
|
|
404
|
+
"PERMISSION_MANAGER_NOT_AVAILABLE": "권한 관리자가 이 Slothlet 인스턴스에서 사용할 수 없습니다"
|
|
385
405
|
},
|
|
386
406
|
"metadata": {
|
|
387
407
|
"code": "ko-kr",
|
|
@@ -381,7 +381,27 @@
|
|
|
381
381
|
"DEBUG_VERSION_RESOLVED": "Versão resolvida: {version} para o caminho {apiPath} (chamador: {callerModule})",
|
|
382
382
|
"DEBUG_VERSION_DEFAULT_USED": "Nenhuma correspondência de discriminador para o caminho {apiPath}; usando versão padrão {version}.",
|
|
383
383
|
"DEBUG_VERSION_REGISTERED": "Versão {version} registrada em {logicalPath} (moduleID: {moduleID})",
|
|
384
|
-
"DEBUG_VERSION_UNREGISTERED": "Versão {version} removida de {logicalPath}"
|
|
384
|
+
"DEBUG_VERSION_UNREGISTERED": "Versão {version} removida de {logicalPath}",
|
|
385
|
+
|
|
386
|
+
"PERMISSION_DENIED": "Acesso negado: o chamador '{caller}' não tem permissão para acessar '{target}'",
|
|
387
|
+
"HINT_PERMISSION_DENIED": "Verifique as regras de permissão para este par chamador/alvo. Use api.slothlet.permissions.global.rulesForPath('{target}') para inspecionar as regras ativas.",
|
|
388
|
+
"PERMISSION_SELF_MODIFY": "O módulo '{moduleID}' não pode remover sua própria regra de permissão '{ruleId}'",
|
|
389
|
+
"HINT_PERMISSION_SELF_MODIFY": "Regras de permissão são imutáveis para o módulo proprietário. Outro módulo deve remover esta regra.",
|
|
390
|
+
"INVALID_PERMISSION_RULE": "Regra de permissão inválida: {reason} (recebido: {received})",
|
|
391
|
+
"HINT_INVALID_PERMISSION_RULE": "Regras de permissão requerem: caller (string glob), target (string glob) e effect ('allow' ou 'deny').",
|
|
392
|
+
"DEBUG_PERMISSION_DENIED": "Permissão negada: chamador '{caller}' -> alvo '{target}'",
|
|
393
|
+
"DEBUG_PERMISSION_ALLOWED": "Permissão concedida: chamador '{caller}' -> alvo '{target}'",
|
|
394
|
+
"DEBUG_PERMISSION_SELF_BYPASS": "Auto-bypass de permissão: chamador e alvo compartilham moduleID '{moduleID}'",
|
|
395
|
+
"DEBUG_PERMISSION_DEFAULT": "Política de permissão padrão aplicada: chamador '{caller}' -> alvo '{target}' -> {effect}",
|
|
396
|
+
"DEBUG_PERMISSION_RULE_ADDED": "Regra de permissão adicionada: {ruleId} ({caller} -> {target}: {effect}, proprietário: {ownerModuleID})",
|
|
397
|
+
"DEBUG_PERMISSION_RULE_REMOVED": "Regra de permissão removida: {ruleId} ({caller} -> {target}: {effect})",
|
|
398
|
+
"PERM_RULE_NOT_OBJECT": "a regra deve ser um objeto não nulo",
|
|
399
|
+
"PERM_RULE_CALLER_REQUIRED": "rule.caller deve ser uma string não vazia",
|
|
400
|
+
"PERM_RULE_TARGET_REQUIRED": "rule.target deve ser uma string não vazia",
|
|
401
|
+
"PERM_RULE_EFFECT_INVALID": "rule.effect deve ser 'allow' ou 'deny'",
|
|
402
|
+
"BRACE_EXPANSION_MAX_DEPTH": "Expansão de chaves excedeu a profundidade máxima de {maxDepth}",
|
|
403
|
+
"HINT_BRACE_EXPANSION_MAX_DEPTH": "Reduza o aninhamento em seus padrões de chaves ou aumente a opção maxDepth.",
|
|
404
|
+
"PERMISSION_MANAGER_NOT_AVAILABLE": "Gerenciador de permissões não está disponível nesta instância do Slothlet"
|
|
385
405
|
},
|
|
386
406
|
"metadata": {
|
|
387
407
|
"code": "pt-br",
|
|
@@ -381,7 +381,27 @@
|
|
|
381
381
|
"DEBUG_VERSION_RESOLVED": "Версия определена: {version} для пути {apiPath} (вызывающий: {callerModule})",
|
|
382
382
|
"DEBUG_VERSION_DEFAULT_USED": "Нет совпадения дискриминатора для пути {apiPath}; используется версия по умолчанию {version}.",
|
|
383
383
|
"DEBUG_VERSION_REGISTERED": "Версия {version} зарегистрирована в {logicalPath} (moduleID: {moduleID})",
|
|
384
|
-
"DEBUG_VERSION_UNREGISTERED": "Версия {version} удалена из {logicalPath}"
|
|
384
|
+
"DEBUG_VERSION_UNREGISTERED": "Версия {version} удалена из {logicalPath}",
|
|
385
|
+
|
|
386
|
+
"PERMISSION_DENIED": "Доступ запрещён: вызывающий '{caller}' не имеет права доступа к '{target}'",
|
|
387
|
+
"HINT_PERMISSION_DENIED": "Проверьте правила разрешений для этой пары вызывающий/цель. Используйте api.slothlet.permissions.global.rulesForPath('{target}') для просмотра активных правил.",
|
|
388
|
+
"PERMISSION_SELF_MODIFY": "Модуль '{moduleID}' не может удалить собственное правило разрешений '{ruleId}'",
|
|
389
|
+
"HINT_PERMISSION_SELF_MODIFY": "Правила разрешений неизменяемы для модуля-владельца. Другой модуль должен удалить это правило.",
|
|
390
|
+
"INVALID_PERMISSION_RULE": "Недопустимое правило разрешений: {reason} (получено: {received})",
|
|
391
|
+
"HINT_INVALID_PERMISSION_RULE": "Правила разрешений требуют: caller (string glob), target (string glob) и effect ('allow' или 'deny').",
|
|
392
|
+
"DEBUG_PERMISSION_DENIED": "Разрешение отклонено: вызывающий '{caller}' -> цель '{target}'",
|
|
393
|
+
"DEBUG_PERMISSION_ALLOWED": "Разрешение предоставлено: вызывающий '{caller}' -> цель '{target}'",
|
|
394
|
+
"DEBUG_PERMISSION_SELF_BYPASS": "Самообход разрешений: вызывающий и цель имеют общий moduleID '{moduleID}'",
|
|
395
|
+
"DEBUG_PERMISSION_DEFAULT": "Применена политика разрешений по умолчанию: вызывающий '{caller}' -> цель '{target}' -> {effect}",
|
|
396
|
+
"DEBUG_PERMISSION_RULE_ADDED": "Правило разрешений добавлено: {ruleId} ({caller} -> {target}: {effect}, владелец: {ownerModuleID})",
|
|
397
|
+
"DEBUG_PERMISSION_RULE_REMOVED": "Правило разрешений удалено: {ruleId} ({caller} -> {target}: {effect})",
|
|
398
|
+
"PERM_RULE_NOT_OBJECT": "правило должно быть ненулевым объектом",
|
|
399
|
+
"PERM_RULE_CALLER_REQUIRED": "rule.caller должно быть непустой строкой",
|
|
400
|
+
"PERM_RULE_TARGET_REQUIRED": "rule.target должно быть непустой строкой",
|
|
401
|
+
"PERM_RULE_EFFECT_INVALID": "rule.effect должно быть 'allow' или 'deny'",
|
|
402
|
+
"BRACE_EXPANSION_MAX_DEPTH": "Расширение фигурных скобок превысило максимальную глубину {maxDepth}",
|
|
403
|
+
"HINT_BRACE_EXPANSION_MAX_DEPTH": "Уменьшите вложенность в ваших шаблонах скобок или увеличьте параметр maxDepth.",
|
|
404
|
+
"PERMISSION_MANAGER_NOT_AVAILABLE": "Менеджер разрешений недоступен в этом экземпляре Slothlet"
|
|
385
405
|
},
|
|
386
406
|
"metadata": {
|
|
387
407
|
"code": "ru-ru",
|
|
@@ -381,7 +381,27 @@
|
|
|
381
381
|
"DEBUG_VERSION_RESOLVED": "已解析版本:{version},路径:{apiPath}(调用方:{callerModule})",
|
|
382
382
|
"DEBUG_VERSION_DEFAULT_USED": "路径 {apiPath} 无匹配判别器;使用默认版本 {version}。",
|
|
383
383
|
"DEBUG_VERSION_REGISTERED": "版本 {version} 已在 {logicalPath} 注册(moduleID:{moduleID})",
|
|
384
|
-
"DEBUG_VERSION_UNREGISTERED": "版本 {version} 已从 {logicalPath} 注销"
|
|
384
|
+
"DEBUG_VERSION_UNREGISTERED": "版本 {version} 已从 {logicalPath} 注销",
|
|
385
|
+
|
|
386
|
+
"PERMISSION_DENIED": "访问被拒绝:调用方 '{caller}' 无权访问 '{target}'",
|
|
387
|
+
"HINT_PERMISSION_DENIED": "请检查此调用方/目标对的权限规则。使用 api.slothlet.permissions.global.rulesForPath('{target}') 检查活动规则。",
|
|
388
|
+
"PERMISSION_SELF_MODIFY": "模块 '{moduleID}' 无法移除自身的权限规则 '{ruleId}'",
|
|
389
|
+
"HINT_PERMISSION_SELF_MODIFY": "权限规则对所属模块是不可变的。必须由另一个模块移除此规则。",
|
|
390
|
+
"INVALID_PERMISSION_RULE": "无效的权限规则:{reason}(收到:{received})",
|
|
391
|
+
"HINT_INVALID_PERMISSION_RULE": "权限规则要求:caller(string glob)、target(string glob)和 effect('allow' 或 'deny')。",
|
|
392
|
+
"DEBUG_PERMISSION_DENIED": "权限被拒绝:调用方 '{caller}' -> 目标 '{target}'",
|
|
393
|
+
"DEBUG_PERMISSION_ALLOWED": "权限已允许:调用方 '{caller}' -> 目标 '{target}'",
|
|
394
|
+
"DEBUG_PERMISSION_SELF_BYPASS": "权限自绕过:调用方和目标共享 moduleID '{moduleID}'",
|
|
395
|
+
"DEBUG_PERMISSION_DEFAULT": "默认权限策略已应用:调用方 '{caller}' -> 目标 '{target}' -> {effect}",
|
|
396
|
+
"DEBUG_PERMISSION_RULE_ADDED": "权限规则已添加:{ruleId}({caller} -> {target}:{effect},所有者:{ownerModuleID})",
|
|
397
|
+
"DEBUG_PERMISSION_RULE_REMOVED": "权限规则已移除:{ruleId}({caller} -> {target}:{effect})",
|
|
398
|
+
"PERM_RULE_NOT_OBJECT": "规则必须是非空对象",
|
|
399
|
+
"PERM_RULE_CALLER_REQUIRED": "rule.caller 必须是非空字符串",
|
|
400
|
+
"PERM_RULE_TARGET_REQUIRED": "rule.target 必须是非空字符串",
|
|
401
|
+
"PERM_RULE_EFFECT_INVALID": "rule.effect 必须是 'allow' 或 'deny'",
|
|
402
|
+
"BRACE_EXPANSION_MAX_DEPTH": "花括号展开超过了最大深度 {maxDepth}",
|
|
403
|
+
"HINT_BRACE_EXPANSION_MAX_DEPTH": "减少括号模式中的嵌套层数或增加 maxDepth 选项。",
|
|
404
|
+
"PERMISSION_MANAGER_NOT_AVAILABLE": "权限管理器在此 Slothlet 实例中不可用"
|
|
385
405
|
},
|
|
386
406
|
"metadata": {
|
|
387
407
|
"code": "zh-cn",
|
|
@@ -14,129 +14,4 @@
|
|
|
14
14
|
limitations under the License.
|
|
15
15
|
*/
|
|
16
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
|
-
|
|
46
|
-
if (lang === "c" || lang === "posix") return "en-us";
|
|
47
|
-
if (lang === "es") return "es-mx";
|
|
48
|
-
return lang;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return "en-us";
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
function i18n_loadLanguageSync(lang) {
|
|
57
|
-
try {
|
|
58
|
-
|
|
59
|
-
const langFilePath = join(translations_dirname, "languages", `${lang}.json`);
|
|
60
|
-
const langData = JSON.parse(readFileSync(langFilePath, "utf-8"));
|
|
61
|
-
return langData.translations;
|
|
62
|
-
} catch (___error) {
|
|
63
|
-
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
export function setLanguage(lang) {
|
|
70
|
-
|
|
71
|
-
currentTranslations = { ...defaultTranslations.translations };
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (lang !== "en-us") {
|
|
75
|
-
const langTranslations = i18n_loadLanguageSync(lang);
|
|
76
|
-
if (langTranslations) {
|
|
77
|
-
|
|
78
|
-
currentTranslations = { ...currentTranslations, ...langTranslations };
|
|
79
|
-
currentLanguage = lang;
|
|
80
|
-
} else {
|
|
81
|
-
|
|
82
|
-
console.warn(`Failed to load language '${lang}', falling back to English.`);
|
|
83
|
-
currentLanguage = "en-us";
|
|
84
|
-
}
|
|
85
|
-
} else {
|
|
86
|
-
currentLanguage = "en-us";
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
export function getLanguage() {
|
|
92
|
-
return currentLanguage;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
export function translate(errorCode, params = {}) {
|
|
97
|
-
|
|
98
|
-
let template = currentTranslations[errorCode];
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (!template && errorCode.startsWith("INVALID_CONFIG_")) {
|
|
102
|
-
template = currentTranslations.INVALID_CONFIG_generic;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
let message = template || `Error: ${errorCode}`;
|
|
107
|
-
for (const [key, value] of Object.entries(params)) {
|
|
108
|
-
message = message.replace(new RegExp(`\\{${key}\\}`, "g"), value !== undefined ? String(value) : "");
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
message = message
|
|
113
|
-
.replace(/\{\w+\}/g, "")
|
|
114
|
-
.replace(/\s+/g, " ")
|
|
115
|
-
.trim();
|
|
116
|
-
|
|
117
|
-
return message;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
export function initI18n(options = {}) {
|
|
122
|
-
try {
|
|
123
|
-
if (options.language) {
|
|
124
|
-
setLanguage(options.language);
|
|
125
|
-
} else {
|
|
126
|
-
|
|
127
|
-
const detected = i18n_detectLanguage();
|
|
128
|
-
setLanguage(detected);
|
|
129
|
-
}
|
|
130
|
-
} catch (___error) {
|
|
131
|
-
|
|
132
|
-
console.warn("i18n initialization failed, using English:", ___error.message);
|
|
133
|
-
currentLanguage = "en-us";
|
|
134
|
-
currentTranslations = defaultTranslations.translations;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
initI18n();
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
export const t = translate;
|
|
17
|
+
import{readFileSync}from"fs";import{fileURLToPath}from"url";import{dirname,join}from"path";const translations_dirname=dirname(fileURLToPath(import.meta.url));const defaultTranslations=JSON.parse(readFileSync(join(translations_dirname,"languages","en-us.json"),"utf-8"));let currentTranslations=defaultTranslations.translations;let currentLanguage="en-us";function i18n_detectLanguage(){const envLang=process.env.LANG||process.env.LANGUAGE||process.env.LC_ALL;if(envLang){const lang=envLang.split(".")[0].split("_")[0].toLowerCase();if(lang==="en")return"en-us";if(lang==="c"||lang==="posix")return"en-us";if(lang==="es")return"es-mx";return lang}return"en-us"}function i18n_loadLanguageSync(lang){try{const langFilePath=join(translations_dirname,"languages",`${lang}.json`);const langData=JSON.parse(readFileSync(langFilePath,"utf-8"));return langData.translations}catch(___error){return null}}function setLanguage(lang){currentTranslations={...defaultTranslations.translations};if(lang!=="en-us"){const langTranslations=i18n_loadLanguageSync(lang);if(langTranslations){currentTranslations={...currentTranslations,...langTranslations};currentLanguage=lang}else{console.warn(`Failed to load language '${lang}', falling back to English.`);currentLanguage="en-us"}}else{currentLanguage="en-us"}}function getLanguage(){return currentLanguage}function translate(errorCode,params={}){let template=currentTranslations[errorCode];if(!template&&errorCode.startsWith("INVALID_CONFIG_")){template=currentTranslations.INVALID_CONFIG_generic}let message=template||`Error: ${errorCode}`;for(const[key,value]of Object.entries(params)){message=message.replace(new RegExp(`\\{${key}\\}`,"g"),value!==void 0?String(value):"")}message=message.replace(/\{\w+\}/g,"").replace(/\s+/g," ").trim();return message}function initI18n(options={}){try{if(options.language){setLanguage(options.language)}else{const detected=i18n_detectLanguage();setLanguage(detected)}}catch(___error){console.warn("i18n initialization failed, using English:",___error.message);currentLanguage="en-us";currentTranslations=defaultTranslations.translations}}initI18n();const t=translate;export{getLanguage,initI18n,setLanguage,t,translate};
|
package/dist/lib/modes/eager.mjs
CHANGED
|
@@ -14,62 +14,4 @@
|
|
|
14
14
|
limitations under the License.
|
|
15
15
|
*/
|
|
16
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
|
-
}
|
|
17
|
+
import{ComponentBase}from"@cldmv/slothlet/factories/component-base";class EagerMode extends ComponentBase{static slothletProperty="eager";constructor(slothlet){super(slothlet)}async buildAPI({dir,apiPathPrefix="",collisionContext="initial",moduleID,apiDepth=Infinity,cacheBust=null,fileFilter=null}){const api={};const{modesProcessor}=this.slothlet.builders;const{loader}=this.slothlet.processors;const structure=await loader.scanDirectory(dir,{maxDepth:apiDepth,fileFilter});const rootDirectory={name:".",path:dir,children:{files:structure.files,directories:structure.directories}};const rootDefaultFunction=await modesProcessor.processFiles(api,structure.files,rootDirectory,0,"eager",true,true,false,apiPathPrefix,collisionContext,moduleID,dir,cacheBust);return modesProcessor.applyRootContributor(api,rootDefaultFunction,"eager")}}export{EagerMode};
|
package/dist/lib/modes/lazy.mjs
CHANGED
|
@@ -14,84 +14,4 @@
|
|
|
14
14
|
limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
import { ComponentBase } from "@cldmv/slothlet/factories/component-base";
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export class LazyMode extends ComponentBase {
|
|
24
|
-
static slothletProperty = "lazy";
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
constructor(slothlet) {
|
|
28
|
-
super(slothlet);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
createNamedMaterializeFunc(apiPath, handler) {
|
|
33
|
-
const safePath = String(apiPath || "api")
|
|
34
|
-
.replace(/\./g, "__")
|
|
35
|
-
.replace(/[^A-Za-z0-9_$]/g, "_");
|
|
36
|
-
const normalized = /^[A-Za-z_$]/.test(safePath[0]) ? safePath : `_${safePath}`;
|
|
37
|
-
const funcName = `${normalized}__lazy_materializeFunc`;
|
|
38
|
-
return {
|
|
39
|
-
[funcName]: async function (...args) {
|
|
40
|
-
return handler(...args);
|
|
41
|
-
}
|
|
42
|
-
}[funcName];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
async buildAPI({
|
|
47
|
-
dir,
|
|
48
|
-
apiPathPrefix = "",
|
|
49
|
-
collisionContext = "initial",
|
|
50
|
-
collisionMode = null,
|
|
51
|
-
moduleID,
|
|
52
|
-
apiDepth = Infinity,
|
|
53
|
-
cacheBust = null,
|
|
54
|
-
fileFilter = null
|
|
55
|
-
}) {
|
|
56
|
-
this.slothlet.debug("modes", {
|
|
57
|
-
key: "DEBUG_MODE_BUILD_LAZY_API_CALLED",
|
|
58
|
-
apiPathPrefix,
|
|
59
|
-
collisionMode,
|
|
60
|
-
collisionContext
|
|
61
|
-
});
|
|
62
|
-
const api = {};
|
|
63
|
-
|
|
64
|
-
const { modesProcessor } = this.slothlet.builders;
|
|
65
|
-
const { loader } = this.slothlet.processors;
|
|
66
|
-
|
|
67
|
-
const structure = await loader.scanDirectory(dir, { maxDepth: apiDepth, fileFilter });
|
|
68
|
-
|
|
69
|
-
const rootDirectory = {
|
|
70
|
-
name: ".",
|
|
71
|
-
path: dir,
|
|
72
|
-
children: {
|
|
73
|
-
files: structure.files,
|
|
74
|
-
directories: structure.directories
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const rootDefaultFunction = await modesProcessor.processFiles(
|
|
79
|
-
api,
|
|
80
|
-
structure.files,
|
|
81
|
-
rootDirectory,
|
|
82
|
-
0,
|
|
83
|
-
"lazy",
|
|
84
|
-
true,
|
|
85
|
-
false,
|
|
86
|
-
false,
|
|
87
|
-
apiPathPrefix,
|
|
88
|
-
collisionContext,
|
|
89
|
-
moduleID,
|
|
90
|
-
dir,
|
|
91
|
-
cacheBust,
|
|
92
|
-
collisionMode
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
return modesProcessor.applyRootContributor(api, rootDefaultFunction, "lazy");
|
|
96
|
-
}
|
|
97
|
-
}
|
|
17
|
+
import{ComponentBase}from"@cldmv/slothlet/factories/component-base";class LazyMode extends ComponentBase{static slothletProperty="lazy";constructor(slothlet){super(slothlet)}createNamedMaterializeFunc(apiPath,handler){const safePath=String(apiPath||"api").replace(/\./g,"__").replace(/[^A-Za-z0-9_$]/g,"_");const normalized=/^[A-Za-z_$]/.test(safePath[0])?safePath:`_${safePath}`;const funcName=`${normalized}__lazy_materializeFunc`;return{[funcName]:async function(...args){return handler(...args)}}[funcName]}async buildAPI({dir,apiPathPrefix="",collisionContext="initial",collisionMode=null,moduleID,apiDepth=Infinity,cacheBust=null,fileFilter=null}){this.slothlet.debug("modes",{key:"DEBUG_MODE_BUILD_LAZY_API_CALLED",apiPathPrefix,collisionMode,collisionContext});const api={};const{modesProcessor}=this.slothlet.builders;const{loader}=this.slothlet.processors;const structure=await loader.scanDirectory(dir,{maxDepth:apiDepth,fileFilter});const rootDirectory={name:".",path:dir,children:{files:structure.files,directories:structure.directories}};const rootDefaultFunction=await modesProcessor.processFiles(api,structure.files,rootDirectory,0,"lazy",true,false,false,apiPathPrefix,collisionContext,moduleID,dir,cacheBust,collisionMode);return modesProcessor.applyRootContributor(api,rootDefaultFunction,"lazy")}}export{LazyMode};
|