@cldmv/slothlet 3.2.3 → 3.3.0

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 (36) hide show
  1. package/README.md +20 -5
  2. package/dist/lib/builders/api_builder.mjs +233 -3
  3. package/dist/lib/handlers/api-manager.mjs +23 -0
  4. package/dist/lib/handlers/context-async.mjs +4 -0
  5. package/dist/lib/handlers/context-live.mjs +5 -0
  6. package/dist/lib/handlers/hook-manager.mjs +5 -111
  7. package/dist/lib/handlers/permission-manager.mjs +408 -0
  8. package/dist/lib/handlers/unified-wrapper.mjs +90 -22
  9. package/dist/lib/helpers/config.mjs +91 -7
  10. package/dist/lib/helpers/pattern-matcher.mjs +141 -0
  11. package/dist/lib/i18n/languages/de-de.json +21 -1
  12. package/dist/lib/i18n/languages/en-gb.json +21 -1
  13. package/dist/lib/i18n/languages/en-us.json +21 -1
  14. package/dist/lib/i18n/languages/es-mx.json +21 -1
  15. package/dist/lib/i18n/languages/fr-fr.json +21 -1
  16. package/dist/lib/i18n/languages/hi-in.json +21 -1
  17. package/dist/lib/i18n/languages/ja-jp.json +21 -1
  18. package/dist/lib/i18n/languages/ko-kr.json +21 -1
  19. package/dist/lib/i18n/languages/pt-br.json +21 -1
  20. package/dist/lib/i18n/languages/ru-ru.json +21 -1
  21. package/dist/lib/i18n/languages/zh-cn.json +21 -1
  22. package/dist/slothlet.mjs +11 -2
  23. package/package.json +4 -1
  24. package/types/dist/lib/builders/api_builder.d.mts.map +1 -1
  25. package/types/dist/lib/handlers/api-manager.d.mts.map +1 -1
  26. package/types/dist/lib/handlers/context-async.d.mts.map +1 -1
  27. package/types/dist/lib/handlers/context-live.d.mts.map +1 -1
  28. package/types/dist/lib/handlers/hook-manager.d.mts.map +1 -1
  29. package/types/dist/lib/handlers/permission-manager.d.mts +151 -0
  30. package/types/dist/lib/handlers/permission-manager.d.mts.map +1 -0
  31. package/types/dist/lib/handlers/unified-wrapper.d.mts.map +1 -1
  32. package/types/dist/lib/helpers/config.d.mts +16 -0
  33. package/types/dist/lib/helpers/config.d.mts.map +1 -1
  34. package/types/dist/lib/helpers/pattern-matcher.d.mts +44 -0
  35. package/types/dist/lib/helpers/pattern-matcher.d.mts.map +1 -0
  36. package/types/dist/slothlet.d.mts.map +1 -1
@@ -0,0 +1,141 @@
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 { SlothletError } from "@cldmv/slothlet/errors";
22
+
23
+
24
+ export function compilePattern(pattern, options = {}) {
25
+
26
+ const isNegation = pattern.startsWith("!");
27
+ if (isNegation) {
28
+ pattern = pattern.slice(1);
29
+ const matcher = compilePattern(pattern, options);
30
+ return (path) => !matcher(path);
31
+ }
32
+
33
+
34
+ const expanded = expandBraces(pattern, 0, 10, options);
35
+ if (expanded.length > 1) {
36
+
37
+ const matchers = expanded.map((p) => compilePattern(p, options));
38
+ return (path) => matchers.some((m) => m(path));
39
+ }
40
+
41
+
42
+ pattern = expanded[0];
43
+
44
+
45
+ let regexPattern = pattern
46
+ .replace(/[.+^$()|[\]\\]/g, "\\$&")
47
+ .replace(/\*\*/g, "__DOUBLESTAR__")
48
+ .replace(/\*/g, "[^.]*")
49
+ .replace(/__DOUBLESTAR__/g, ".*")
50
+ .replace(/\?/g, ".");
51
+
52
+ regexPattern = `^${regexPattern}$`;
53
+ const regex = new RegExp(regexPattern);
54
+
55
+ return (path) => regex.test(path);
56
+ }
57
+
58
+
59
+ export function expandBraces(pattern, depth = 0, maxDepth = 10, options = {}) {
60
+
61
+ if (depth >= maxDepth) {
62
+ if (options.onMaxDepth) {
63
+ options.onMaxDepth(maxDepth);
64
+ }
65
+
66
+ throw new SlothletError("BRACE_EXPANSION_MAX_DEPTH", { maxDepth, validationError: true });
67
+ }
68
+
69
+
70
+ const braceStart = pattern.indexOf("{");
71
+ if (braceStart === -1) {
72
+ return [pattern];
73
+ }
74
+
75
+
76
+ let braceEnd = -1;
77
+ let depthCount = 1;
78
+ for (let i = braceStart + 1; i < pattern.length; i++) {
79
+ if (pattern[i] === "{") depthCount++;
80
+ if (pattern[i] === "}") {
81
+ depthCount--;
82
+ if (depthCount === 0) {
83
+ braceEnd = i;
84
+ break;
85
+ }
86
+ }
87
+ }
88
+
89
+ if (braceEnd === -1) {
90
+ return [pattern];
91
+ }
92
+
93
+
94
+ const prefix = pattern.slice(0, braceStart);
95
+ const braceContent = pattern.slice(braceStart + 1, braceEnd);
96
+ const suffix = pattern.slice(braceEnd + 1);
97
+
98
+
99
+ const alternatives = splitBraceAlternatives(braceContent);
100
+
101
+
102
+ const expanded = [];
103
+ for (const alt of alternatives) {
104
+ const combined = prefix + alt + suffix;
105
+
106
+ const recursiveExpanded = expandBraces(combined, depth + 1, maxDepth, options);
107
+ expanded.push(...recursiveExpanded);
108
+ }
109
+
110
+ return expanded;
111
+ }
112
+
113
+
114
+ export function splitBraceAlternatives(content) {
115
+ const alternatives = [];
116
+ let current = "";
117
+ let depth = 0;
118
+
119
+ for (let i = 0; i < content.length; i++) {
120
+ const char = content[i];
121
+
122
+ if (char === "{") {
123
+ depth++;
124
+ current += char;
125
+ } else if (char === "}") {
126
+ depth--;
127
+ current += char;
128
+ } else if (char === "," && depth === 0) {
129
+ alternatives.push(current);
130
+ current = "";
131
+ } else {
132
+ current += char;
133
+ }
134
+ }
135
+
136
+ if (current) {
137
+ alternatives.push(current);
138
+ }
139
+
140
+ return alternatives;
141
+ }
@@ -381,7 +381,27 @@
381
381
  "DEBUG_VERSION_RESOLVED": "Version aufgelöst: {version} für Pfad {apiPath} (Aufrufer: {callerModule})",
382
382
  "DEBUG_VERSION_DEFAULT_USED": "Keine Discriminator-Übereinstimmung für Pfad {apiPath}; Standardversion {version} wird verwendet.",
383
383
  "DEBUG_VERSION_REGISTERED": "Version {version} unter {logicalPath} registriert (moduleID: {moduleID})",
384
- "DEBUG_VERSION_UNREGISTERED": "Version {version} von {logicalPath} abgemeldet"
384
+ "DEBUG_VERSION_UNREGISTERED": "Version {version} von {logicalPath} abgemeldet",
385
+
386
+ "PERMISSION_DENIED": "Zugriff verweigert: Aufrufer '{caller}' darf nicht auf '{target}' zugreifen",
387
+ "HINT_PERMISSION_DENIED": "Prüfen Sie die Berechtigungsregeln für dieses Aufrufer/Ziel-Paar. Verwenden Sie api.slothlet.permissions.global.rulesForPath('{target}'), um die aktiven Regeln einzusehen.",
388
+ "PERMISSION_SELF_MODIFY": "Modul '{moduleID}' kann seine eigene Berechtigungsregel '{ruleId}' nicht entfernen",
389
+ "HINT_PERMISSION_SELF_MODIFY": "Berechtigungsregeln sind für das besitzende Modul unveränderlich. Ein anderes Modul muss diese Regel entfernen.",
390
+ "INVALID_PERMISSION_RULE": "Ungültige Berechtigungsregel: {reason} (erhalten: {received})",
391
+ "HINT_INVALID_PERMISSION_RULE": "Berechtigungsregeln erfordern: caller (String-Glob), target (String-Glob) und effect ('allow' oder 'deny').",
392
+ "DEBUG_PERMISSION_DENIED": "Berechtigung verweigert: Aufrufer '{caller}' -> Ziel '{target}'",
393
+ "DEBUG_PERMISSION_ALLOWED": "Berechtigung erteilt: Aufrufer '{caller}' -> Ziel '{target}'",
394
+ "DEBUG_PERMISSION_SELF_BYPASS": "Berechtigungs-Self-Bypass: Aufrufer und Ziel teilen sich moduleID '{moduleID}'",
395
+ "DEBUG_PERMISSION_DEFAULT": "Standard-Berechtigungsrichtlinie angewendet: Aufrufer '{caller}' -> Ziel '{target}' -> {effect}",
396
+ "DEBUG_PERMISSION_RULE_ADDED": "Berechtigungsregel hinzugefügt: {ruleId} ({caller} -> {target}: {effect}, Besitzer: {ownerModuleID})",
397
+ "DEBUG_PERMISSION_RULE_REMOVED": "Berechtigungsregel entfernt: {ruleId} ({caller} -> {target}: {effect})",
398
+ "PERM_RULE_NOT_OBJECT": "Regel muss ein nicht-leeres Objekt sein",
399
+ "PERM_RULE_CALLER_REQUIRED": "rule.caller muss eine nicht-leere Zeichenkette sein",
400
+ "PERM_RULE_TARGET_REQUIRED": "rule.target muss eine nicht-leere Zeichenkette sein",
401
+ "PERM_RULE_EFFECT_INVALID": "rule.effect muss 'allow' oder 'deny' sein",
402
+ "BRACE_EXPANSION_MAX_DEPTH": "Klammerauflösung hat die maximale Tiefe von {maxDepth} überschritten",
403
+ "HINT_BRACE_EXPANSION_MAX_DEPTH": "Verringern Sie die Verschachtelung in Ihren Klammermustern oder erhöhen Sie die maxDepth-Option.",
404
+ "PERMISSION_MANAGER_NOT_AVAILABLE": "Berechtigungsmanager ist nicht in dieser Slothlet-Instanz verfügbar"
385
405
  },
386
406
  "metadata": {
387
407
  "code": "de-de",
@@ -381,7 +381,27 @@
381
381
  "DEBUG_VERSION_RESOLVED": "Version resolved: {version} for path {apiPath} (caller: {callerModule})",
382
382
  "DEBUG_VERSION_DEFAULT_USED": "No discriminator match for path {apiPath}; using default version {version}",
383
383
  "DEBUG_VERSION_REGISTERED": "Version {version} registered at {logicalPath} (moduleID: {moduleID})",
384
- "DEBUG_VERSION_UNREGISTERED": "Version {version} unregistered from {logicalPath}"
384
+ "DEBUG_VERSION_UNREGISTERED": "Version {version} unregistered from {logicalPath}",
385
+
386
+ "PERMISSION_DENIED": "Access denied: caller '{caller}' is not permitted to access '{target}'",
387
+ "HINT_PERMISSION_DENIED": "Check permission rules for this caller/target pair. Use api.slothlet.permissions.global.rulesForPath('{target}') to inspect active rules.",
388
+ "PERMISSION_SELF_MODIFY": "Module '{moduleID}' cannot remove its own permission rule '{ruleId}'",
389
+ "HINT_PERMISSION_SELF_MODIFY": "Permission rules are immutable for the owning module. Another module must remove this rule.",
390
+ "INVALID_PERMISSION_RULE": "Invalid permission rule: {reason} (received: {received})",
391
+ "HINT_INVALID_PERMISSION_RULE": "Permission rules require: caller (string glob), target (string glob), and effect ('allow' or 'deny').",
392
+ "DEBUG_PERMISSION_DENIED": "Permission denied: caller '{caller}' -> target '{target}'",
393
+ "DEBUG_PERMISSION_ALLOWED": "Permission allowed: caller '{caller}' -> target '{target}'",
394
+ "DEBUG_PERMISSION_SELF_BYPASS": "Permission self-bypass: caller and target share moduleID '{moduleID}'",
395
+ "DEBUG_PERMISSION_DEFAULT": "Permission default policy applied: caller '{caller}' -> target '{target}' -> {effect}",
396
+ "DEBUG_PERMISSION_RULE_ADDED": "Permission rule added: {ruleId} ({caller} -> {target}: {effect}, owner: {ownerModuleID})",
397
+ "DEBUG_PERMISSION_RULE_REMOVED": "Permission rule removed: {ruleId} ({caller} -> {target}: {effect})",
398
+ "PERM_RULE_NOT_OBJECT": "rule must be a non-null object",
399
+ "PERM_RULE_CALLER_REQUIRED": "rule.caller must be a non-empty string",
400
+ "PERM_RULE_TARGET_REQUIRED": "rule.target must be a non-empty string",
401
+ "PERM_RULE_EFFECT_INVALID": "rule.effect must be 'allow' or 'deny'",
402
+ "BRACE_EXPANSION_MAX_DEPTH": "Brace expansion exceeded maximum depth of {maxDepth}",
403
+ "HINT_BRACE_EXPANSION_MAX_DEPTH": "Reduce nesting in your brace patterns or increase the maxDepth option.",
404
+ "PERMISSION_MANAGER_NOT_AVAILABLE": "Permission manager is not available in this Slothlet instance"
385
405
  },
386
406
  "metadata": {
387
407
  "code": "en-gb",
@@ -381,7 +381,27 @@
381
381
  "DEBUG_VERSION_RESOLVED": "Version resolved: {version} for path {apiPath} (caller: {callerModule})",
382
382
  "DEBUG_VERSION_DEFAULT_USED": "No discriminator match for path {apiPath}; using default version {version}",
383
383
  "DEBUG_VERSION_REGISTERED": "Version {version} registered at {logicalPath} (moduleID: {moduleID})",
384
- "DEBUG_VERSION_UNREGISTERED": "Version {version} unregistered from {logicalPath}"
384
+ "DEBUG_VERSION_UNREGISTERED": "Version {version} unregistered from {logicalPath}",
385
+
386
+ "PERMISSION_DENIED": "Access denied: caller '{caller}' is not permitted to access '{target}'",
387
+ "HINT_PERMISSION_DENIED": "Check permission rules for this caller/target pair. Use api.slothlet.permissions.global.rulesForPath('{target}') to inspect active rules.",
388
+ "PERMISSION_SELF_MODIFY": "Module '{moduleID}' cannot remove its own permission rule '{ruleId}'",
389
+ "HINT_PERMISSION_SELF_MODIFY": "Permission rules are immutable for the owning module. Another module must remove this rule.",
390
+ "INVALID_PERMISSION_RULE": "Invalid permission rule: {reason} (received: {received})",
391
+ "HINT_INVALID_PERMISSION_RULE": "Permission rules require: caller (string glob), target (string glob), and effect ('allow' or 'deny').",
392
+ "DEBUG_PERMISSION_DENIED": "Permission denied: caller '{caller}' -> target '{target}'",
393
+ "DEBUG_PERMISSION_ALLOWED": "Permission allowed: caller '{caller}' -> target '{target}'",
394
+ "DEBUG_PERMISSION_SELF_BYPASS": "Permission self-bypass: caller and target share moduleID '{moduleID}'",
395
+ "DEBUG_PERMISSION_DEFAULT": "Permission default policy applied: caller '{caller}' -> target '{target}' -> {effect}",
396
+ "DEBUG_PERMISSION_RULE_ADDED": "Permission rule added: {ruleId} ({caller} -> {target}: {effect}, owner: {ownerModuleID})",
397
+ "DEBUG_PERMISSION_RULE_REMOVED": "Permission rule removed: {ruleId} ({caller} -> {target}: {effect})",
398
+ "PERM_RULE_NOT_OBJECT": "rule must be a non-null object",
399
+ "PERM_RULE_CALLER_REQUIRED": "rule.caller must be a non-empty string",
400
+ "PERM_RULE_TARGET_REQUIRED": "rule.target must be a non-empty string",
401
+ "PERM_RULE_EFFECT_INVALID": "rule.effect must be 'allow' or 'deny'",
402
+ "BRACE_EXPANSION_MAX_DEPTH": "Brace expansion exceeded maximum depth of {maxDepth}",
403
+ "HINT_BRACE_EXPANSION_MAX_DEPTH": "Reduce nesting in your brace patterns or increase the maxDepth option.",
404
+ "PERMISSION_MANAGER_NOT_AVAILABLE": "Permission manager is not available in this Slothlet instance"
385
405
  },
386
406
  "metadata": {
387
407
  "code": "en-us",
@@ -381,7 +381,27 @@
381
381
  "DEBUG_VERSION_RESOLVED": "Versión resuelta: {version} para la ruta {apiPath} (llamador: {callerModule})",
382
382
  "DEBUG_VERSION_DEFAULT_USED": "Sin coincidencia del discriminador para la ruta {apiPath}; se usa la versión predeterminada {version}.",
383
383
  "DEBUG_VERSION_REGISTERED": "Versión {version} registrada en {logicalPath} (moduleID: {moduleID})",
384
- "DEBUG_VERSION_UNREGISTERED": "Versión {version} dada de baja de {logicalPath}"
384
+ "DEBUG_VERSION_UNREGISTERED": "Versión {version} dada de baja de {logicalPath}",
385
+
386
+ "PERMISSION_DENIED": "Acceso denegado: el llamador '{caller}' no tiene permiso para acceder a '{target}'",
387
+ "HINT_PERMISSION_DENIED": "Verifique las reglas de permisos para este par llamador/objetivo. Use api.slothlet.permissions.global.rulesForPath('{target}') para inspeccionar las reglas activas.",
388
+ "PERMISSION_SELF_MODIFY": "El módulo '{moduleID}' no puede eliminar su propia regla de permiso '{ruleId}'",
389
+ "HINT_PERMISSION_SELF_MODIFY": "Las reglas de permisos son inmutables para el módulo propietario. Otro módulo debe eliminar esta regla.",
390
+ "INVALID_PERMISSION_RULE": "Regla de permiso inválida: {reason} (recibido: {received})",
391
+ "HINT_INVALID_PERMISSION_RULE": "Las reglas de permisos requieren: caller (string glob), target (string glob) y effect ('allow' o 'deny').",
392
+ "DEBUG_PERMISSION_DENIED": "Permiso denegado: llamador '{caller}' -> objetivo '{target}'",
393
+ "DEBUG_PERMISSION_ALLOWED": "Permiso concedido: llamador '{caller}' -> objetivo '{target}'",
394
+ "DEBUG_PERMISSION_SELF_BYPASS": "Auto-bypass de permisos: llamador y objetivo comparten moduleID '{moduleID}'",
395
+ "DEBUG_PERMISSION_DEFAULT": "Política de permisos predeterminada aplicada: llamador '{caller}' -> objetivo '{target}' -> {effect}",
396
+ "DEBUG_PERMISSION_RULE_ADDED": "Regla de permiso agregada: {ruleId} ({caller} -> {target}: {effect}, propietario: {ownerModuleID})",
397
+ "DEBUG_PERMISSION_RULE_REMOVED": "Regla de permiso eliminada: {ruleId} ({caller} -> {target}: {effect})",
398
+ "PERM_RULE_NOT_OBJECT": "la regla debe ser un objeto no nulo",
399
+ "PERM_RULE_CALLER_REQUIRED": "rule.caller debe ser una cadena no vacía",
400
+ "PERM_RULE_TARGET_REQUIRED": "rule.target debe ser una cadena no vacía",
401
+ "PERM_RULE_EFFECT_INVALID": "rule.effect debe ser 'allow' o 'deny'",
402
+ "BRACE_EXPANSION_MAX_DEPTH": "La expansión de llaves superó la profundidad máxima de {maxDepth}",
403
+ "HINT_BRACE_EXPANSION_MAX_DEPTH": "Reduce el anidamiento en tus patrones de llaves o aumenta la opción maxDepth.",
404
+ "PERMISSION_MANAGER_NOT_AVAILABLE": "El administrador de permisos no está disponible en esta instancia de Slothlet"
385
405
  },
386
406
  "metadata": {
387
407
  "code": "es-mx",
@@ -381,7 +381,27 @@
381
381
  "DEBUG_VERSION_RESOLVED": "Version résolue : {version} pour le chemin {apiPath} (appelant : {callerModule})",
382
382
  "DEBUG_VERSION_DEFAULT_USED": "Aucune correspondance de discriminateur pour le chemin {apiPath} ; utilisation de la version par défaut {version}.",
383
383
  "DEBUG_VERSION_REGISTERED": "Version {version} enregistrée à {logicalPath} (moduleID : {moduleID})",
384
- "DEBUG_VERSION_UNREGISTERED": "Version {version} désinscrite de {logicalPath}"
384
+ "DEBUG_VERSION_UNREGISTERED": "Version {version} désinscrite de {logicalPath}",
385
+
386
+ "PERMISSION_DENIED": "Accès refusé : l'appelant '{caller}' n'est pas autorisé à accéder à '{target}'",
387
+ "HINT_PERMISSION_DENIED": "Vérifiez les règles d'autorisation pour ce couple appelant/cible. Utilisez api.slothlet.permissions.global.rulesForPath('{target}') pour inspecter les règles actives.",
388
+ "PERMISSION_SELF_MODIFY": "Le module '{moduleID}' ne peut pas supprimer sa propre règle d'autorisation '{ruleId}'",
389
+ "HINT_PERMISSION_SELF_MODIFY": "Les règles d'autorisation sont immuables pour le module propriétaire. Un autre module doit supprimer cette règle.",
390
+ "INVALID_PERMISSION_RULE": "Règle d'autorisation invalide : {reason} (reçu : {received})",
391
+ "HINT_INVALID_PERMISSION_RULE": "Les règles d'autorisation nécessitent : caller (string glob), target (string glob) et effect ('allow' ou 'deny').",
392
+ "DEBUG_PERMISSION_DENIED": "Autorisation refusée : appelant '{caller}' -> cible '{target}'",
393
+ "DEBUG_PERMISSION_ALLOWED": "Autorisation accordée : appelant '{caller}' -> cible '{target}'",
394
+ "DEBUG_PERMISSION_SELF_BYPASS": "Auto-bypass d'autorisation : l'appelant et la cible partagent le moduleID '{moduleID}'",
395
+ "DEBUG_PERMISSION_DEFAULT": "Politique d'autorisation par défaut appliquée : appelant '{caller}' -> cible '{target}' -> {effect}",
396
+ "DEBUG_PERMISSION_RULE_ADDED": "Règle d'autorisation ajoutée : {ruleId} ({caller} -> {target} : {effect}, propriétaire : {ownerModuleID})",
397
+ "DEBUG_PERMISSION_RULE_REMOVED": "Règle d'autorisation supprimée : {ruleId} ({caller} -> {target} : {effect})",
398
+ "PERM_RULE_NOT_OBJECT": "la règle doit être un objet non nul",
399
+ "PERM_RULE_CALLER_REQUIRED": "rule.caller doit être une chaîne non vide",
400
+ "PERM_RULE_TARGET_REQUIRED": "rule.target doit être une chaîne non vide",
401
+ "PERM_RULE_EFFECT_INVALID": "rule.effect doit être 'allow' ou 'deny'",
402
+ "BRACE_EXPANSION_MAX_DEPTH": "L'expansion des accolades a dépassé la profondeur maximale de {maxDepth}",
403
+ "HINT_BRACE_EXPANSION_MAX_DEPTH": "Réduisez le niveau d'imbrication dans vos motifs d'accolades ou augmentez l'option maxDepth.",
404
+ "PERMISSION_MANAGER_NOT_AVAILABLE": "Le gestionnaire de permissions n'est pas disponible dans cette instance Slothlet"
385
405
  },
386
406
  "metadata": {
387
407
  "code": "fr-fr",
@@ -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": "hi-in",
@@ -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": "ja-jp",
@@ -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",
package/dist/slothlet.mjs CHANGED
@@ -600,8 +600,6 @@ class Slothlet {
600
600
  moduleID: `replay_${this.helpers.utilities.generateId().substring(0, 8)}`,
601
601
  versionConfig: operation.versionConfig || null
602
602
  });
603
-
604
-
605
603
  } else if (operation.type === "remove") {
606
604
 
607
605
 
@@ -614,6 +612,14 @@ class Slothlet {
614
612
  const rootSegment = operation.apiPath.split(".")[0];
615
613
  this.handlers.metadata.removeUserMetadataByApiPath(rootSegment);
616
614
  }
615
+ } else if (operation.type === "addPermissionRule") {
616
+ if (this.handlers.permissionManager) {
617
+ this.handlers.permissionManager.addRule(operation.rule, operation.ownerModuleID, operation.ruleId);
618
+ }
619
+ } else if (operation.type === "removePermissionRule") {
620
+ if (this.handlers.permissionManager) {
621
+ this.handlers.permissionManager.removeRule(operation.ruleId, operation.callerModuleID);
622
+ }
617
623
  }
618
624
  }
619
625
 
@@ -753,6 +759,9 @@ class Slothlet {
753
759
  this.handlers.versionManager?.shutdown();
754
760
 
755
761
 
762
+ await this.handlers.permissionManager?.shutdown();
763
+
764
+
756
765
 
757
766
  this.isLoaded = false;
758
767
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cldmv/slothlet",
3
- "version": "3.2.3",
3
+ "version": "3.3.0",
4
4
  "moduleVersions": {
5
5
  "lazy": "3.0.0",
6
6
  "eager": "3.0.0",
@@ -126,6 +126,7 @@
126
126
  "baseline": "npm run vitest -- --baseline",
127
127
  "coverage": "npm run vitest -- --coverage-quiet",
128
128
  "ci:coverage": "npm run coverage",
129
+ "coverage:analyze": "node tools/coverage/analyze-coverage.mjs",
129
130
  "test": "npm run test:pre-build",
130
131
  "test:pre-build": "node tests/test-conditional.mjs",
131
132
  "test:post-build": "npm run test:types",
@@ -269,11 +270,13 @@
269
270
  "@html-eslint/parser": "^0.45.0",
270
271
  "@types/node": "^24.9.1",
271
272
  "@vitest/coverage-v8": "^4.0.18",
273
+ "acorn": "^8.16.0",
272
274
  "chalk": "^5.6.0",
273
275
  "chokidar": "^5.0.0",
274
276
  "dmd": "^7.1.1",
275
277
  "esbuild": "^0.27.3",
276
278
  "eslint": "^10.0.2",
279
+ "estree-walker": "^3.0.3",
277
280
  "globals": "^17.4.0",
278
281
  "jsdoc": "^4.0.4",
279
282
  "jsdoc-to-markdown": "^9.1.2",
@@ -1 +1 @@
1
- {"version":3,"file":"api_builder.d.mts","sourceRoot":"","sources":["../../../../dist/lib/builders/api_builder.mjs"],"names":[],"mappings":"AAyEA;;;;;;;;;;;;;GAaG;AACH;IACC,gCAAuC;IAcvC;;;;;OAKG;IACH,oCAHa,OAAO,KAAQ,CAiG3B;IAED;;;;;;;;;;;OAWG;IACH,gCAyuCC;IAED;;;;OAIG;IACH,+BAYC;IAED;;;;OAIG;IACH,0BAgCC;IAED;;;;OAIG;IACH,4BAoMC;IAED;;;;;OAKG;IACH,8BAyCC;IAED;;;;;OAKG;IACH,uBAgCC;CACD;;;;;;;;;;;;;;;;;;;;;;;;;;8BArwD6B,0CAA0C"}
1
+ {"version":3,"file":"api_builder.d.mts","sourceRoot":"","sources":["../../../../dist/lib/builders/api_builder.mjs"],"names":[],"mappings":"AAyEA;;;;;;;;;;;;;GAaG;AACH;IACC,gCAAuC;IAcvC;;;;;OAKG;IACH,oCAHa,OAAO,KAAQ,CAiG3B;IAED;;;;;;;;;;;OAWG;IACH,gCA0iDC;IAED;;;;OAIG;IACH,+BAYC;IAED;;;;OAIG;IACH,0BAgCC;IAED;;;;OAIG;IACH,4BAoMC;IAED;;;;;OAKG;IACH,8BAyCC;IAED;;;;;OAKG;IACH,uBAgCC;CACD;;;;;;;;;;;;;;;;;;;;;;;;;;8BAtkE6B,0CAA0C"}
@@ -1 +1 @@
1
- {"version":3,"file":"api-manager.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/api-manager.mjs"],"names":[],"mappings":"AAmDA;;;;;;;;;;;;;;GAcG;AACH;IACC,gCAAuC;IAgBtC;;;;MAMC;IAGF;;;;;;;;;;;;;;;;;;OAkBG;IACH,yBAuFC;IAED;;;;;;;;;;;;;;OAcG;IACH,oBA+BC;IAED;;;;;;;;;;;;;;OAcG;IACH,0BA4BC;IAED;;;;;;;;;;;;OAYG;IACH,6BAIC;IAED;;;;;;;;;;;;OAYG;IACH,uBASC;IAED;;;;;;;;;;;;;OAaG;IACH,yBAkCC;IAED;;;;;;;;;;;;;OAaG;IACH,uBAEC;IAED;;;;;;;;;;;;;;OAcG;IACH,oBAmNC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,uBAkGC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,uBA8GC;IAED;;;;;;;;;;;;OAYG;IACH,mBAmGC;IACD;;;;;;;;;;;;OAYG;IACH,uBAwEC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6CG;IACH,wBA3CG;QAAuB,OAAO,EAAtB,MAAM;QACkB,UAAU,EAAlC,MAAM,GAAC,MAAM,EAAE;QACkB,OAAO,GAAxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;KAC/B,GAAU,OAAO,CAAC,MAAM,GAAC,MAAM,EAAE,CAAC,CAijBpC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,yEATG;QAAqB,QAAQ,EAArB,MAAM;QACO,aAAa,EAA1B,MAAM;QACO,cAAc,EAA3B,MAAM;KACd,GAAU,OAAO,CAAC,IAAI,CAAC,CAuCzB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,mCAfW,MAAM,iBACJ,OAAO,CAAC,IAAI,CAAC,CA2ZzB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,2BAdG;QAAwB,OAAO,EAAtB,MAAM,OAAA;QACS,QAAQ,EAAvB,MAAM,OAAA;KACf,GAAU,OAAO,CAAC,IAAI,CAAC,CAuCzB;IAED;;;;;;;;;;OAUG;IACH,0BAsEC;IAED;;;;;;;;;;;;;;OAcG;IACH,yBAsFC;IAED;;;;;;;;;;;;;OAaG;IACH,4BA0FC;IAED;;;;;;;;OAQG;IACH,iCAuDC;IAED;;;;;OAKG;IACH,iCAeC;IAED;;;;;;;;;;;;;OAaG;IACH,wBAwVC;CACD;8BAvzF6B,0CAA0C"}
1
+ {"version":3,"file":"api-manager.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/api-manager.mjs"],"names":[],"mappings":"AAmDA;;;;;;;;;;;;;;GAcG;AACH;IACC,gCAAuC;IAgBtC;;;;MAMC;IAGF;;;;;;;;;;;;;;;;;;OAkBG;IACH,yBAuFC;IAED;;;;;;;;;;;;;;OAcG;IACH,oBA+BC;IAED;;;;;;;;;;;;;;OAcG;IACH,0BA4BC;IAED;;;;;;;;;;;;OAYG;IACH,6BAIC;IAED;;;;;;;;;;;;OAYG;IACH,uBASC;IAED;;;;;;;;;;;;;OAaG;IACH,yBAkCC;IAED;;;;;;;;;;;;;OAaG;IACH,uBAEC;IAED;;;;;;;;;;;;;;OAcG;IACH,oBAmNC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,uBAkGC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,uBA8GC;IAED;;;;;;;;;;;;OAYG;IACH,mBAmGC;IACD;;;;;;;;;;;;OAYG;IACH,uBAwEC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6CG;IACH,wBA3CG;QAAuB,OAAO,EAAtB,MAAM;QACkB,UAAU,EAAlC,MAAM,GAAC,MAAM,EAAE;QACkB,OAAO,GAAxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;KAC/B,GAAU,OAAO,CAAC,MAAM,GAAC,MAAM,EAAE,CAAC,CAwkBpC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,yEATG;QAAqB,QAAQ,EAArB,MAAM;QACO,aAAa,EAA1B,MAAM;QACO,cAAc,EAA3B,MAAM;KACd,GAAU,OAAO,CAAC,IAAI,CAAC,CAuCzB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,mCAfW,MAAM,iBACJ,OAAO,CAAC,IAAI,CAAC,CA2ZzB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,2BAdG;QAAwB,OAAO,EAAtB,MAAM,OAAA;QACS,QAAQ,EAAvB,MAAM,OAAA;KACf,GAAU,OAAO,CAAC,IAAI,CAAC,CAuCzB;IAED;;;;;;;;;;OAUG;IACH,0BAsEC;IAED;;;;;;;;;;;;;;OAcG;IACH,yBAsFC;IAED;;;;;;;;;;;;;OAaG;IACH,4BA0FC;IAED;;;;;;;;OAQG;IACH,iCAuDC;IAED;;;;;OAKG;IACH,iCAeC;IAED;;;;;;;;;;;;;OAaG;IACH,wBAwVC;CACD;8BA90F6B,0CAA0C"}
@@ -1 +1 @@
1
- {"version":3,"file":"context-async.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/context-async.mjs"],"names":[],"mappings":"AAuBA;;;;GAIG;AACH;IAEE,4BAAkC;IAClC,yBAA0B;IAG3B;;;;OAIG;IACH,kDAKC;IAED;;;;;;OAMG;IACH,8BALW,MAAM,qBAoBhB;IAED;;;;;;;;;OASG;IACH,gCARW,MAAM,yBAEN,GAAC,sCAGC,GAAC,CA4Eb;IAED;;;;;OAKG;IACH,yBAMC;IAED;;;;OAIG;IACH,wBAHa,MAAO,SAAS,CAK5B;IAED;;;;OAIG;IACH,2BAHW,MAAM,QAoBhB;IAED;;;;OAIG;IACH,6BAWC;CACD;AAED;;;GAGG;AACH,sDAA6D;kCA/M3B,kBAAkB"}
1
+ {"version":3,"file":"context-async.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/context-async.mjs"],"names":[],"mappings":"AAuBA;;;;GAIG;AACH;IAEE,4BAAkC;IAClC,yBAA0B;IAG3B;;;;OAIG;IACH,kDAKC;IAED;;;;;;OAMG;IACH,8BALW,MAAM,qBAoBhB;IAED;;;;;;;;;OASG;IACH,gCARW,MAAM,yBAEN,GAAC,sCAGC,GAAC,CAgFb;IAED;;;;;OAKG;IACH,yBAMC;IAED;;;;OAIG;IACH,wBAHa,MAAO,SAAS,CAK5B;IAED;;;;OAIG;IACH,2BAHW,MAAM,QAoBhB;IAED;;;;OAIG;IACH,6BAWC;CACD;AAED;;;GAGG;AACH,sDAA6D;kCAnN3B,kBAAkB"}
@@ -1 +1 @@
1
- {"version":3,"file":"context-live.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/context-live.mjs"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH;IAEE,yBAA0B;IAC1B,uBAA6B;IAG9B;;;;OAIG;IACH,kDAIC;IAED;;;;;;OAMG;IACH,8BALW,MAAM,qBA0BhB;IAED;;;;;;;;;OASG;IACH,gCARW,MAAM,yBAEN,GAAC,sCAGC,GAAC,CAoDb;IAED;;;;;OAKG;IACH,yBAmBC;IAED;;;;OAIG;IACH,wBAHa,MAAO,SAAS,CAQ5B;IAED;;;;OAIG;IACH,2BAHW,MAAM,QAyBhB;IAED;;;;OAIG;IACH,6BAWC;CACD;AAED;;;GAGG;AACH,oDAA2D"}
1
+ {"version":3,"file":"context-live.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/context-live.mjs"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH;IAEE,yBAA0B;IAC1B,uBAA6B;IAG9B;;;;OAIG;IACH,kDAIC;IAED;;;;;;OAMG;IACH,8BALW,MAAM,qBA0BhB;IAED;;;;;;;;;OASG;IACH,gCARW,MAAM,yBAEN,GAAC,sCAGC,GAAC,CAyDb;IAED;;;;;OAKG;IACH,yBAmBC;IAED;;;;OAIG;IACH,wBAHa,MAAO,SAAS,CAQ5B;IAED;;;;OAIG;IACH,2BAHW,MAAM,QAyBhB;IAED;;;;OAIG;IACH,6BAWC;CACD;AAED;;;GAGG;AACH,oDAA2D"}
@@ -1 +1 @@
1
- {"version":3,"file":"hook-manager.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/hook-manager.mjs"],"names":[],"mappings":"AAkCA;;;;;;GAMG;AACH;IACC;;;;OAIG;IACH,yBAHU,MAAM,CAGwB;IAoDvC,aAAiC;IACjC,oBAAgD;IAChD,oBAAwD;IACxD,0BAAgC;IAChC,6BAAgC;IAEhC,qBAAsB;IACtB,0BAA0B;IAC1B,gCAAmC;IAGpC;;;;;;;;;;;;;;;;;OAiBG;IACH,uBAfW,MAAM,+BAGd;QAAyB,EAAE,GAAnB,MAAM;QACW,QAAQ,GAAzB,MAAM;QACW,MAAM,GAAvB,MAAM;KACd,GAAU,MAAM,CA+ElB;IAED;;;;;;;;;OASG;IACH,uBANG;QAAwB,EAAE,GAAlB,MAAM;QACU,IAAI,GAApB,MAAM;QACU,OAAO,GAAvB,MAAM;KACd,GAAU,MAAM,CA8ClB;IAED;;;;;;;;;OASG;IACH,uBAPW,MAAM,GAAC,MAAM,GAIX,MAAM,CAalB;IAED;;;;;;;;;OASG;IACH,wBAPW,MAAM,GAAC,MAAM,GAIX,MAAM,CAclB;IAED;;;;;;;;;;OAUG;IACH,qBARW,MAAM,GAAC,MAAM,GAKX,MAAM,CA8DlB;IAED;;;;;;;;OAQG;IACH,6BALW,MAAM,WACN,MAAM,GACJ,KAAK,CAAC,MAAM,CAAC,CAqDzB;IAED;;;;;;;;;OASG;IACH,gCAPW,MAAM,oBAEN,MAAM,OACN,MAAM,GACJ,MAAM,CA6ClB;IAED;;;;;;;;;;OAUG;IACH,+BARW,MAAM,UACN,GAAC,oBAED,MAAM,OACN,MAAM,GACJ,mBAAmB,CA+C/B;IAED;;;;;;;;;;;OAWG;IACH,gCATW,MAAM,8BAEN,GAAC,YACD,OAAO,UACP,KAAK,CAAC,KAAK,CAAC,OACZ,MAAM,OACN,MAAM,QA8BhB;IAED;;;;;;;;;;OAUG;IACH,+BARW,MAAM,SACN,KAAK,UACL,MAAM,oBAEN,MAAM,OACN,MAAM,QA4BhB;IAkLD;;;;;;OAMG;IACH,4CAEC;IA6ID;;;;;;OAMG;IACH,sBAHa,KAAK,CAAC,MAAM,CAAC,CAkBzB;IAED;;;;;;;OAOG;IACH,kCAJW,KAAK,CAAC,MAAM,CAAC,GACX,IAAI,CAWhB;IAED;;;OAGG;IACH,iCAUC;;CACD;;;;;;;;cAt9Ba,OAAO;;;;aACP,GAAC;;8BANe,0CAA0C"}
1
+ {"version":3,"file":"hook-manager.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/hook-manager.mjs"],"names":[],"mappings":"AAmCA;;;;;;GAMG;AACH;IACC;;;;OAIG;IACH,yBAHU,MAAM,CAGwB;IAoDvC,aAAiC;IACjC,oBAAgD;IAChD,oBAAwD;IACxD,0BAAgC;IAChC,6BAAgC;IAEhC,qBAAsB;IACtB,0BAA0B;IAC1B,gCAAmC;IAGpC;;;;;;;;;;;;;;;;;OAiBG;IACH,uBAfW,MAAM,+BAGd;QAAyB,EAAE,GAAnB,MAAM;QACW,QAAQ,GAAzB,MAAM;QACW,MAAM,GAAvB,MAAM;KACd,GAAU,MAAM,CA+ElB;IAED;;;;;;;;;OASG;IACH,uBANG;QAAwB,EAAE,GAAlB,MAAM;QACU,IAAI,GAApB,MAAM;QACU,OAAO,GAAvB,MAAM;KACd,GAAU,MAAM,CA8ClB;IAED;;;;;;;;;OASG;IACH,uBAPW,MAAM,GAAC,MAAM,GAIX,MAAM,CAalB;IAED;;;;;;;;;OASG;IACH,wBAPW,MAAM,GAAC,MAAM,GAIX,MAAM,CAclB;IAED;;;;;;;;;;OAUG;IACH,qBARW,MAAM,GAAC,MAAM,GAKX,MAAM,CA8DlB;IAED;;;;;;;;OAQG;IACH,6BALW,MAAM,WACN,MAAM,GACJ,KAAK,CAAC,MAAM,CAAC,CAqDzB;IAED;;;;;;;;;OASG;IACH,gCAPW,MAAM,oBAEN,MAAM,OACN,MAAM,GACJ,MAAM,CA6ClB;IAED;;;;;;;;;;OAUG;IACH,+BARW,MAAM,UACN,GAAC,oBAED,MAAM,OACN,MAAM,GACJ,mBAAmB,CA+C/B;IAED;;;;;;;;;;;OAWG;IACH,gCATW,MAAM,8BAEN,GAAC,YACD,OAAO,UACP,KAAK,CAAC,KAAK,CAAC,OACZ,MAAM,OACN,MAAM,QA8BhB;IAED;;;;;;;;;;OAUG;IACH,+BARW,MAAM,SACN,KAAK,UACL,MAAM,oBAEN,MAAM,OACN,MAAM,QA4BhB;IAuDD;;;;;;OAMG;IACH,4CAEC;IA6ID;;;;;;OAMG;IACH,sBAHa,KAAK,CAAC,MAAM,CAAC,CAkBzB;IAED;;;;;;;OAOG;IACH,kCAJW,KAAK,CAAC,MAAM,CAAC,GACX,IAAI,CAWhB;IAED;;;OAGG;IACH,iCAUC;;CACD;;;;;;;;cA31Ba,OAAO;;;;aACP,GAAC;;8BAPe,0CAA0C"}