@cldmv/slothlet 3.9.2 → 3.10.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.
- package/README.md +16 -16
- package/REFERENCE.md +19 -19
- package/dist/lib/builders/api_builder.mjs +1 -1
- package/dist/lib/builders/builder.mjs +1 -1
- package/dist/lib/builders/modes-processor.mjs +1 -1
- package/dist/lib/handlers/api-cache-manager.mjs +1 -1
- package/dist/lib/handlers/api-manager.mjs +1 -1
- package/dist/lib/handlers/hook-manager.mjs +1 -1
- package/dist/lib/handlers/permission-manager.mjs +1 -1
- package/dist/lib/helpers/config.mjs +1 -1
- package/dist/lib/helpers/generate-manifest.mjs +1 -1
- package/dist/lib/helpers/module-discovery.mjs +1 -1
- package/dist/lib/helpers/module-manifest-validator.mjs +1 -1
- package/dist/lib/i18n/languages/de-de.json +90 -64
- package/dist/lib/i18n/languages/en-gb.json +90 -64
- package/dist/lib/i18n/languages/en-us.json +90 -64
- package/dist/lib/i18n/languages/es-es.json +90 -64
- package/dist/lib/i18n/languages/es-mx.json +90 -64
- package/dist/lib/i18n/languages/fr-fr.json +90 -64
- package/dist/lib/i18n/languages/hi-in.json +90 -64
- package/dist/lib/i18n/languages/ja-jp.json +90 -64
- package/dist/lib/i18n/languages/ko-kr.json +90 -64
- package/dist/lib/i18n/languages/pt-br.json +90 -64
- package/dist/lib/i18n/languages/ru-ru.json +92 -66
- package/dist/lib/i18n/languages/zh-cn.json +90 -64
- package/dist/lib/modes/eager.mjs +1 -1
- package/dist/lib/modes/lazy.mjs +1 -1
- package/package.json +7 -4
- package/types/dist/lib/builders/api_builder.d.mts.map +1 -1
- package/types/dist/lib/builders/builder.d.mts.map +1 -1
- package/types/dist/lib/builders/modes-processor.d.mts.map +1 -1
- package/types/dist/lib/handlers/api-cache-manager.d.mts.map +1 -1
- package/types/dist/lib/handlers/api-manager.d.mts.map +1 -1
- package/types/dist/lib/handlers/hook-manager.d.mts +4 -0
- package/types/dist/lib/handlers/hook-manager.d.mts.map +1 -1
- package/types/dist/lib/handlers/permission-manager.d.mts +2 -0
- package/types/dist/lib/handlers/permission-manager.d.mts.map +1 -1
- package/types/dist/lib/helpers/config.d.mts +3 -0
- package/types/dist/lib/helpers/config.d.mts.map +1 -1
- package/types/dist/lib/helpers/generate-manifest.d.mts +1 -0
- package/types/dist/lib/helpers/generate-manifest.d.mts.map +1 -1
- package/types/dist/lib/helpers/module-discovery.d.mts.map +1 -1
- package/types/dist/lib/helpers/module-manifest-validator.d.mts.map +1 -1
- package/types/dist/lib/modes/eager.d.mts +2 -1
- package/types/dist/lib/modes/eager.d.mts.map +1 -1
- package/types/dist/lib/modes/lazy.d.mts +2 -1
- package/types/dist/lib/modes/lazy.d.mts.map +1 -1
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import{SlothletError}from"@cldmv/slothlet/errors";import{path}from"@cldmv/slothlet/helpers/platform";const RESERVED_MOUNTPATH_ROOTS=Object.freeze(new Set(["slothlet","shutdown","destroy"]));const ALLOWED_TOP_LEVEL_FIELDS=Object.freeze(new Set(["schemaVersion","name","version","description","mountPath","apiDir","kind","priority","dependencies","permissions","metadata"]));const PERMISSION_EFFECT_VALUES=Object.freeze(new Set(["allow","deny"]));function validateModuleManifest(manifest,packageContext){if(!manifest||typeof manifest!=="object"||Array.isArray(manifest)){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName:packageContext?.packageName??"<unknown>",manifestPath:packageContext?.manifestPath??"<unknown>",reason:"
|
|
17
|
+
import{SlothletError}from"@cldmv/slothlet/errors";import{t}from"@cldmv/slothlet/i18n";import{path}from"@cldmv/slothlet/helpers/platform";const RESERVED_MOUNTPATH_ROOTS=Object.freeze(new Set(["slothlet","shutdown","destroy"]));const ALLOWED_TOP_LEVEL_FIELDS=Object.freeze(new Set(["schemaVersion","name","version","description","mountPath","apiDir","kind","priority","dependencies","permissions","metadata"]));const PERMISSION_EFFECT_VALUES=Object.freeze(new Set(["allow","deny"]));function validateModuleManifest(manifest,packageContext){if(!manifest||typeof manifest!=="object"||Array.isArray(manifest)){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName:packageContext?.packageName??"<unknown>",manifestPath:packageContext?.manifestPath??"<unknown>",reason:t("MODULE_MANIFEST_REASON_NOT_OBJECT")},null,{validationError:true})}const{packageName,packageVersion,packageDescription,packageRoot,manifestPath}=packageContext;for(const key of Object.keys(manifest)){if(!ALLOWED_TOP_LEVEL_FIELDS.has(key)){throw new SlothletError("MODULE_MANIFEST_UNKNOWN_FIELD",{packageName,manifestPath,field:key},null,{validationError:true})}}if(manifest.schemaVersion===void 0){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_MISSING_FIELD",{field:"schemaVersion"})},null,{validationError:true})}if(manifest.schemaVersion!==1){throw new SlothletError("MODULE_VERSION_UNSUPPORTED",{packageName,schemaVersion:String(manifest.schemaVersion)},null,{validationError:true})}if(manifest.mountPath===void 0){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_MISSING_FIELD",{field:"mountPath"})},null,{validationError:true})}const mountPathSegments=normalizeMountPath(manifest.mountPath,packageName,manifestPath);if(RESERVED_MOUNTPATH_ROOTS.has(mountPathSegments[0])){throw new SlothletError("MODULE_RESERVED_MOUNTPATH",{packageName,mountPathRoot:mountPathSegments[0],mountPath:mountPathSegments.join(".")},null,{validationError:true})}if(manifest.apiDir===void 0){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_MISSING_FIELD",{field:"apiDir"})},null,{validationError:true})}if(typeof manifest.apiDir!=="string"||manifest.apiDir.length===0){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_FIELD_TYPE",{field:"apiDir",expected:t("EXPECTED_NON_EMPTY_STRING")})},null,{validationError:true})}validateApiDirContainment(manifest.apiDir,packageRoot,packageName);if(manifest.name!==void 0){if(typeof manifest.name!=="string"){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_FIELD_TYPE",{field:"name",expected:t("EXPECTED_STRING")})},null,{validationError:true})}if(manifest.name!==packageName){throw new SlothletError("MODULE_MANIFEST_NAME_MISMATCH",{packageName,manifestName:manifest.name},null,{validationError:true})}}if(manifest.version!==void 0){if(typeof manifest.version!=="string"){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_FIELD_TYPE",{field:"version",expected:t("EXPECTED_STRING")})},null,{validationError:true})}if(manifest.version!==packageVersion){throw new SlothletError("MODULE_MANIFEST_VERSION_MISMATCH",{packageName,manifestVersion:manifest.version,packageVersion},null,{validationError:true})}}if(manifest.description!==void 0&&typeof manifest.description!=="string"){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_FIELD_TYPE",{field:"description",expected:t("EXPECTED_STRING")})},null,{validationError:true})}if(manifest.kind!==void 0&&typeof manifest.kind!=="string"){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_FIELD_TYPE",{field:"kind",expected:t("EXPECTED_STRING")})},null,{validationError:true})}if(manifest.priority!==void 0&&(typeof manifest.priority!=="number"||!Number.isFinite(manifest.priority))){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_FIELD_TYPE",{field:"priority",expected:t("EXPECTED_FINITE_NUMBER")})},null,{validationError:true})}if(manifest.dependencies!==void 0){if(typeof manifest.dependencies!=="object"||manifest.dependencies===null||Array.isArray(manifest.dependencies)){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_FIELD_TYPE",{field:"dependencies",expected:t("EXPECTED_PLAIN_OBJECT")})},null,{validationError:true})}for(const[depName,depValue]of Object.entries(manifest.dependencies)){if(typeof depValue!=="string"){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_DEPENDENCY_TYPE",{dependency:depName})},null,{validationError:true})}}}if(manifest.permissions!==void 0){validatePermissions(manifest.permissions,packageName,manifestPath)}if(manifest.metadata!==void 0){if(typeof manifest.metadata!=="object"||manifest.metadata===null||Array.isArray(manifest.metadata)){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_FIELD_TYPE",{field:"metadata",expected:t("EXPECTED_PLAIN_OBJECT")})},null,{validationError:true})}}return{schemaVersion:1,name:packageName,version:packageVersion,description:manifest.description??packageDescription,mountPath:mountPathSegments,apiDir:manifest.apiDir,kind:manifest.kind,priority:manifest.priority??0,dependencies:manifest.dependencies,permissions:manifest.permissions,metadata:manifest.metadata}}function normalizeMountPath(mountPath,packageName,manifestPath){if(typeof mountPath==="string"){if(mountPath.length===0){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_MOUNTPATH_SHAPE")},null,{validationError:true})}return mountPath.split(".")}if(Array.isArray(mountPath)){if(mountPath.length===0){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_MOUNTPATH_SHAPE")},null,{validationError:true})}for(const segment of mountPath){if(typeof segment!=="string"||segment.length===0){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_MOUNTPATH_ENTRIES")},null,{validationError:true})}}return mountPath.slice()}throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_MOUNTPATH_SHAPE")},null,{validationError:true})}function validateApiDirContainment(apiDir,packageRoot,packageName){const resolved=path.resolve(packageRoot,apiDir);const rootWithSep=packageRoot.endsWith(path.sep)?packageRoot:packageRoot+path.sep;if(resolved!==packageRoot&&!resolved.startsWith(rootWithSep)){throw new SlothletError("MODULE_PATH_TRAVERSAL",{packageName,apiDir,resolvedPath:resolved,packageRoot},null,{validationError:true})}}function validatePermissions(permissions,packageName,manifestPath){if(!Array.isArray(permissions)){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_FIELD_TYPE",{field:"permissions",expected:t("EXPECTED_ARRAY_OF_RULE_OBJECTS")})},null,{validationError:true})}for(let i=0;i<permissions.length;i++){const rule=permissions[i];if(!rule||typeof rule!=="object"||Array.isArray(rule)){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_PERMISSION_RULE",{index:i})},null,{validationError:true})}if(typeof rule.caller!=="string"||rule.caller.length===0){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_PERMISSION_CALLER",{index:i})},null,{validationError:true})}if(typeof rule.target!=="string"||rule.target.length===0){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_PERMISSION_TARGET",{index:i})},null,{validationError:true})}if(!PERMISSION_EFFECT_VALUES.has(rule.effect)){throw new SlothletError("MODULE_MANIFEST_INVALID",{packageName,manifestPath,reason:t("MODULE_MANIFEST_REASON_PERMISSION_EFFECT",{index:i})},null,{validationError:true})}}}export{validateModuleManifest};
|
|
@@ -1,54 +1,110 @@
|
|
|
1
1
|
{
|
|
2
2
|
"translations": {
|
|
3
3
|
"INVALID_CONFIG": "Ungültige Konfiguration: {option} ist {value}, erwartet wurde {expected}. {hint}",
|
|
4
|
+
"HINT_INVALID_CONFIG": "Überprüfen Sie den Konfigurationswert und stellen Sie sicher, dass er den erwarteten Typ und das Format erfüllt.",
|
|
5
|
+
"INVALID_CONFIG_SYNTHETIC_EXPORTS_SHAPE": "Konfigurationsfehler: Inline-exports müssen ein einfaches Objekt der Form { default?, ...named } sein, erhalten: {received}.",
|
|
6
|
+
"HINT_INVALID_CONFIG_SYNTHETIC_EXPORTS_SHAPE": "Übergeben Sie exports als einfaches Objekt, z.B. { default: fn } oder { name: fn } — oder einen { exports: { default?, ...named } } Wrapper, oder eine bloße Funktion.",
|
|
7
|
+
"INVALID_CONFIG_SYNTHETIC_INPUT": "Konfigurationsfehler: Inline-Inhalt muss ein einfaches Objekt aus { default?, ...named } exports, ein { exports: … } Wrapper oder eine bloße Funktion sein, erhalten: {received}.",
|
|
8
|
+
"HINT_INVALID_CONFIG_SYNTHETIC_INPUT": "Übergeben Sie Inline-exports als einfaches Objekt oder bloße Funktion; ein Dateisystem-Mount benötigt einen String-Pfad.",
|
|
9
|
+
"INVALID_CONFIG_SYNTHETIC_NAME": "Konfigurationsfehler: syntheticName muss ein nicht leerer String sein, erhalten: {received}.",
|
|
10
|
+
"HINT_INVALID_CONFIG_SYNTHETIC_NAME": "Geben Sie einen String-Schlüsselnamen für den synthetischen Build an, z.B. \"synthetic\".",
|
|
11
|
+
"INVALID_CONFIG_PRELOADED_STRUCTURE": "Konfigurationsfehler: preloadedStructure muss ein einfaches Objekt mit files- und directories-Arrays sein, erhalten {received}.",
|
|
12
|
+
"HINT_INVALID_CONFIG_PRELOADED_STRUCTURE": "preloadedStructure wird intern erstellt; übergeben Sie ein Objekt mit files- und directories-Arrays oder lassen Sie es weg, um ein Verzeichnis zu scannen.",
|
|
4
13
|
"INVALID_CONFIG_DIR_MISSING": "Konfigurationsfehler: Die Option 'dir' ist erforderlich. Geben Sie einen Verzeichnispfad an, aus dem die API geladen werden soll.",
|
|
14
|
+
"HINT_INVALID_CONFIG_DIR_MISSING": "Der Verzeichnispfad ist erforderlich, wurde aber nicht angegeben.",
|
|
5
15
|
"INVALID_CONFIG_BROWSER_REQUIRES_MANIFEST": "Konfigurationsfehler: 'manifest' ist erforderlich, wenn env auf 'browser' gesetzt ist. Stellen Sie ein vorgeneriertes Manifest-Objekt mit den Arrays 'files' und 'directories' bereit.",
|
|
6
16
|
"INVALID_CONFIG_BROWSER_MANIFEST_INVALID": "Konfigurationsfehler: 'manifest' muss ein einfaches Objekt mit den Arrays 'files' und 'directories' sein. Empfangen: {received}",
|
|
7
17
|
"INVALID_CONFIG_BROWSER_RESOLVE_SPECIFIER_INVALID": "Konfigurationsfehler: 'resolveModuleSpecifier' muss eine Funktion sein, wenn env auf 'browser' gesetzt ist. Empfangen: {received}",
|
|
8
18
|
"INVALID_CONFIG_DIR_INVALID": "Konfigurationsfehler: 'dir' muss ein nicht leerer Pfad sein. Erhalten: {dir}",
|
|
19
|
+
"HINT_INVALID_CONFIG_DIR_INVALID": "Stellen Sie sicher, dass der Verzeichnispfad ein gültiger String ist und auf ein existierendes Verzeichnis zeigt.",
|
|
9
20
|
"INVALID_CONFIG_MODE_INVALID": "Konfigurationsfehler: 'mode' muss entweder 'eager' oder 'lazy' sein. Erhalten: {value}",
|
|
21
|
+
"HINT_INVALID_CONFIG_MODE_INVALID": "Der Modus muss entweder 'eager' oder 'lazy' sein.",
|
|
10
22
|
"INVALID_CONFIG_NOT_LOADED": "Die Operation '{operation}' kann nicht ausgeführt werden - Instanz nicht geladen. Rufen Sie zuerst load() auf.",
|
|
23
|
+
"HINT_INVALID_CONFIG_NOT_LOADED": "Die Instanz muss geladen sein, bevor diese Operation ausgeführt werden kann. Rufen Sie zuerst load() auf.",
|
|
11
24
|
"INVALID_CONFIG_LAZY_MATERIALIZATION_FAILED": "Materialisierung des Lazy-Proxys für '{apiPath}' fehlgeschlagen. Überprüfen Sie, ob das Modul korrekt geladen wird.",
|
|
12
25
|
"INVALID_CONFIG_NOT_A_FUNCTION": "Der Aufruf von '{apiPath}' ist nicht möglich - keine Funktion (erhalten: {actualType}). Überprüfen Sie, ob das Modul eine aufrufbare Funktion exportiert.",
|
|
13
26
|
"INVALID_CONFIG_API_PATH_INVALID": "Ungültiger API-Pfad '{apiPath}': {reason}. API-Pfade müssen nicht leere, korrekt formatierte Dot-Notation-Strings sein, die nicht mit reservierten Namen im Konflikt stehen. Segment bei Index {index}: '{segment}'.",
|
|
27
|
+
"HINT_INVALID_CONFIG_API_PATH_INVALID": "Stellen Sie sicher, dass der API-Pfad ein gültiger Dot-Notation-String ist (z.B. 'plugins.tools') ohne leere Segmente oder reservierte Namen (slothlet, shutdown, destroy).",
|
|
14
28
|
"INVALID_CONFIG_FORCE_OVERWRITE_REQUIRES_MODULE_ID": "Konfigurationsfehler: forceOverwrite/allowOverwrite erfordert eine moduleID. Geben Sie eine eindeutige moduleID an, wenn Sie Überschreibungsoptionen für den API-Pfad '{apiPath}' verwenden.",
|
|
29
|
+
"HINT_INVALID_CONFIG_FORCE_OVERWRITE_REQUIRES_MODULE_ID": "Bei Verwendung von forceOverwrite oder allowOverwrite müssen Sie eine eindeutige moduleID angeben, um das Eigentum am überschriebenen Pfad zu verfolgen.",
|
|
15
30
|
"INVALID_METADATA_TARGET": "Ungültiges Metadatenziel: Erwartet wurde {expected}, erhalten wurde {target}. Metadatenoperationen erfordern eine Funktions- oder Objektreferenz.",
|
|
31
|
+
"HINT_INVALID_METADATA_TARGET": "Das Ziel muss eine Funktion oder ein Objekt sein, das über Slothlet geladen wurde. Übergeben Sie die eigentliche Funktions-/Objektreferenz, keinen String oder primitiven Wert.",
|
|
16
32
|
"METADATA_NO_MODULE_ID": "Benutzermetadaten können nicht gesetzt werden: Keine moduleID in den Systemmetadaten gefunden. Stellen Sie sicher, dass die Zielfunktion/das Zielobjekt über Slothlet geladen wurde.",
|
|
33
|
+
"HINT_METADATA_NO_MODULE_ID": "Stellen Sie sicher, dass die Funktion/das Objekt über das Modulsystem von Slothlet geladen wurde. Nur von Slothlet verwaltete Funktionen haben zugeordnete Metadaten.",
|
|
17
34
|
"METADATA_LIFECYCLE_BYPASS": "tagSystemMetadata() muss über das Lifecycle-System aufgerufen werden. Verwenden Sie lifecycle.emit('impl:created') oder lifecycle.emit('impl:changed') anstelle eines direkten Aufrufs.",
|
|
35
|
+
"HINT_METADATA_LIFECYCLE_BYPASS": "Rufen Sie tagSystemMetadata() niemals direkt auf. Lösen Sie stattdessen die Lifecycle-Events 'impl:created' oder 'impl:changed' aus; diese rufen tagSystemMetadata() über den korrekten Kanal auf.",
|
|
18
36
|
"INVALID_METADATA_KEY": "Ungültiger Metadatenschlüssel: Erwartet wurde {expected}, erhalten wurde {type} für Schlüssel '{key}'. Metadatenschlüssel müssen korrekt formatiert sein.",
|
|
37
|
+
"HINT_INVALID_METADATA_KEY": "Metadaten-Schlüssel müssen Strings, String-Arrays oder Objekte mit Array-Werten sein. Prüfen Sie das Format des Schlüssels.",
|
|
19
38
|
"WARNING_METADATA_MISMATCH": "Sicherheitswarnung: Pfad der Metadatendatei für '{apiPath}' stimmt nicht überein. Stack-Trace zeigt '{stackFile}', aber Metadaten zeigen '{metadataFile}'. Dies kann auf Hot Reload oder Manipulation hindeuten.",
|
|
39
|
+
"HINT_WARNING_METADATA_MISMATCH": "Diese Warnung deutet darauf hin, dass der Ausführungsort der Funktion nicht mit ihrem registrierten Metadatenpfad übereinstimmt. Dies kann bei einem Hot Reload auftreten oder wenn die Funktion manipuliert wurde. In den meisten Fällen ist dies beim Development mit aktiviertem Hot Reload zu erwarten.",
|
|
20
40
|
"COLLISION_ERROR": "Kollisionsfehler bei '{key}' (Kontext: {collisionContext}, Modus: {collisionMode}). Setzen Sie den Kollisionsmodus auf 'merge', 'replace', 'warn' oder 'skip', um Kollisionen zu behandeln.",
|
|
41
|
+
"HINT_COLLISION_ERROR": "Der Kollisionsmodus ist auf 'error' gesetzt, was jedes Überschreiben verhindert. Benutzen Sie stattdessen collision: 'merge' (Eigenschaften kombinieren), 'replace' (vollständig überschreiben), 'warn' (warnen, aber bestehendes behalten) oder 'skip' (stillschweigend ignorieren).",
|
|
21
42
|
"COLLISION_DEFAULT_EXPORT_ERROR": "Kollision erkannt: Eigenschaft '{key}' existiert bereits im Standard-Export bei '{apiPath}'. Der Kollisionsmodus ist 'error'.",
|
|
43
|
+
"HINT_COLLISION_DEFAULT_EXPORT_ERROR": "Ein benannter Export kollidiert mit einer Eigenschaft, die bereits im Standard-Exportobjekt dieses Pfades existiert. Ändern Sie den Kollisionsmodus auf 'merge', 'replace', 'warn' oder 'skip' oder benennen Sie die kollidierende Eigenschaft um.",
|
|
22
44
|
"INVALID_ARGUMENT": "Ungültiges Argument '{argument}': Erwartet wurde {expected}, erhalten wurde {received}.",
|
|
45
|
+
"HINT_INVALID_ARGUMENT": "Der Pfad muss ein Dot-Notation-String sein (z.B. 'math.add').",
|
|
23
46
|
"RUNTIME_NO_ACTIVE_CONTEXT": "Kein aktiver Kontext gefunden. Diese Operation erfordert den Aufruf innerhalb einer Slothlet-API-Funktion.",
|
|
47
|
+
"HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() muss innerhalb einer Slothlet-API-Funktion aufgerufen werden.",
|
|
24
48
|
"INVALID_CONFIG_MUTATIONS_DISABLED": "Operation '{operation}' kann nicht ausgeführt werden - Mutationen sind deaktiviert. Setzen Sie allowMutation: true, um API-Modifikationsoperationen (add/remove/reload) zu aktivieren.",
|
|
49
|
+
"HINT_INVALID_CONFIG_MUTATIONS_DISABLED": "Operationen zur API-Mutation erfordern allowMutation: true in der Konfiguration. Benutzen Sie diagnostics: true, um diese Methoden zu Testzwecken aufzurufen, ohne echte Mutationen zu aktivieren.",
|
|
25
50
|
"CACHE_MODULEID_MISMATCH": "moduleID-Fehler im Cache-Eintrag: Erwartet wurde '{cacheKey}', aber der Eintrag hat '{entryModuleID}'. Dies deutet auf eine interne Cache-Inkonsistenz hin.",
|
|
51
|
+
"HINT_CACHE_MODULEID_MISMATCH": "Dies ist ein interner Fehler, der auf eine Cache-Korruption hindeutet. Bitte melden Sie diesen Fehler zusammen mit Schritten zur Reproduktion.",
|
|
26
52
|
"CACHE_NOT_FOUND": "Cache-Eintrag für moduleID '{moduleID}' während der Operation '{operation}' nicht gefunden. Das Modul ist möglicherweise nicht geladen oder der Cache wurde geleert.",
|
|
53
|
+
"HINT_CACHE_NOT_FOUND": "Stellen Sie sicher, dass das Modul geladen wurde, bevor Sie versuchen, es neu zu laden oder den Cache neu aufzubauen. Prüfen Sie die moduleID.",
|
|
27
54
|
"CACHE_MANAGER_NOT_AVAILABLE": "Cache-Manager ist nicht verfügbar. Operation '{operation}' kann nicht ausgeführt werden. Stellen Sie sicher, dass der Cache-Manager initialisiert ist.",
|
|
55
|
+
"HINT_CACHE_MANAGER_NOT_AVAILABLE": "Der Cache-Manager sollte automatisch initialisiert werden. Wenn Sie diesen Fehler sehen, deutet dies auf ein internen Initialisierungsproblem hin.",
|
|
28
56
|
"MODULE_LOAD_FAILED": "Fehler beim Laden des Moduls '{modulePath}' (ID: {moduleID}): {error}",
|
|
57
|
+
"HINT_MODULE_LOAD_FAILED": "Prüfen Sie die Moduldatei auf Fehler. Stellen Sie sicher, dass sie gültige JavaScript-Syntax und Exports besitzt.",
|
|
29
58
|
"MODULE_NOT_FOUND": "Modul nicht gefunden: {modulePath}. {hint}",
|
|
59
|
+
"HINT_MODULE_NOT_FOUND": "Stellen Sie sicher, dass das Modul existiert und der Pfad korrekt ist. Prüfen Sie auf Tippfehler in der Import-Anweisung.",
|
|
30
60
|
"MODULE_IMPORT_FAILED": "Fehler beim Importieren des Moduls '{modulePath}': {error}. Überprüfen Sie, ob die Datei existiert und eine gültige Syntax hat.",
|
|
61
|
+
"HINT_MODULE_IMPORT_FAILED": "Stellen Sie sicher, dass die Moduldatei existiert und importiert werden kann. Prüfen Sie auf Syntaxfehler oder fehlende Abhängigkeiten.",
|
|
31
62
|
"CONTEXT_ALREADY_EXISTS": "Kontext für Instanz '{instanceID}' existiert bereits. Initialisierung kann nicht zweimal erfolgen.",
|
|
63
|
+
"HINT_CONTEXT_ALREADY_EXISTS": "Dieser Kontext existiert bereits. Prüfen Sie, ob Sie versuchen, dieselbe Instanz zweimal zu initialisieren.",
|
|
32
64
|
"CONTEXT_NOT_FOUND": "Kontext für Instanz '{instanceID}' nicht gefunden. Instanz wurde möglicherweise heruntergefahren. Verfügbare Instanzen: {availableInstances}",
|
|
65
|
+
"HINT_CONTEXT_NOT_FOUND": "Stellen Sie sicher, dass die Slothlet-Instanz initialisiert ist und der Kontext erstellt wurde, bevor Sie darauf zugreifen. Prüfen Sie die Instanz-ID.",
|
|
33
66
|
"CONTEXT_EXECUTION_FAILED": "Ausführung im Kontext für Instanz '{instanceID}' fehlgeschlagen: {error}",
|
|
67
|
+
"HINT_CONTEXT_EXECUTION_FAILED": "Ein Fehler ist bei der Ausführung der Funktion aufgetreten. Details finden Sie in den Fehlermeldungen.",
|
|
34
68
|
"NO_ACTIVE_CONTEXT_LIVE": "Kein aktiver Kontext - im Live-Binding-Modus ist derzeit keine Instanz aktiv.",
|
|
69
|
+
"HINT_NO_ACTIVE_CONTEXT_LIVE": "Kein aktiver Kontext gefunden. Stellen Sie sicher, dass der Aufruf innerhalb eines Slothlet Live-Kontexts erfolgt.",
|
|
35
70
|
"NO_ACTIVE_CONTEXT_ASYNC": "Kein aktiver Kontext - die Funktion muss innerhalb eines Slothlet-API-Kontexts aufgerufen werden.",
|
|
71
|
+
"HINT_NO_ACTIVE_CONTEXT_ASYNC": "Kein aktiver Kontext gefunden. Stellen Sie sicher, dass der Aufruf innerhalb eines asynchronen Slothlet-Kontexts erfolgt.",
|
|
36
72
|
"RUNTIME_NO_ACTIVE_CONTEXT_SELF": "Kein aktiver Kontext - Zugriff auf 'self' nicht möglich. Stellen Sie sicher, dass der Aufruf innerhalb einer Slothlet-API-Funktion erfolgt.",
|
|
73
|
+
"HINT_RUNTIME_NO_ACTIVE_CONTEXT_SELF": "Zugriff auf 'self' außerhalb eines Slothlet-API-Funktionskontexts ist nicht möglich.",
|
|
37
74
|
"RUNTIME_NO_ACTIVE_CONTEXT_CONTEXT": "Kein aktiver Kontext - 'context' kann nur innerhalb von Slothlet-API-Aufrufen geändert werden.",
|
|
75
|
+
"HINT_RUNTIME_NO_ACTIVE_CONTEXT_CONTEXT": "Zugriff auf 'context' ist nur innerhalb einer Slothlet-API-Funktion möglich. Der Kontext kann nur innerhalb von Slothlet-API-Aufrufen geändert werden.",
|
|
38
76
|
"OWNERSHIP_INVALID_MODULE_ID": "Ungültige Eigentumsregistrierung: moduleID '{moduleID}' ist ungültig.",
|
|
77
|
+
"HINT_OWNERSHIP_INVALID_MODULE_ID": "Die Modul-ID ist ungültig. Stellen Sie sicher, dass das Modul korrekt geladen wurde und die ID stimmt.",
|
|
39
78
|
"OWNERSHIP_INVALID_API_PATH": "Ungültige Eigentumsregistrierung: apiPath '{apiPath}' ist ungültig.",
|
|
79
|
+
"HINT_OWNERSHIP_INVALID_API_PATH": "Der API-Pfad ist ungültig. Prüfen Sie das Format des Pfades.",
|
|
40
80
|
"OWNERSHIP_CONFLICT": "Eigentumskonflikt: Pfad '{apiPath}' gehört bereits dem Modul '{existingModuleId}' und kann nicht '{newModuleId}' zugewiesen werden. Verwenden Sie forceOverwrite: true oder rufen Sie zuerst removeApi auf.",
|
|
81
|
+
"HINT_OWNERSHIP_CONFLICT": "Der Pfad gehört bereits einem anderen Modul. Optionen: (1) Benutzen Sie forceOverwrite: true in den api.add() Optionen, (2) Setzen Sie die Kollisions-Konfiguration auf 'merge' oder 'replace', (3) Rufen Sie zuerst api.slothlet.api.remove() auf, um den Pfad zu leeren.",
|
|
41
82
|
"LOOSE_SET_NOT_OWNED": "Modul {callerApiPath} darf nicht in {apiPath} schreiben. Ein Modul darf nur unterhalb seines eigenen apiPath schreiben; verwenden Sie api.slothlet.api.add(), um einen anderen Pfad zu registrieren.",
|
|
83
|
+
"HINT_LOOSE_SET_NOT_OWNED": "Ein Modul mit apiPath \"P\" darf nur in \"P.*\" schreiben. Verwenden Sie api.slothlet.api.add(), um Code in einem anderen Namensraum zu registrieren.",
|
|
42
84
|
"LOOSE_SET_RESERVED_KEY": "Zuweisung an reserviertes Schlüsselsegment '{segment}' im apiPath '{apiPath}' nicht möglich. Namen wie __proto__, prototype und constructor sind blockiert, um Prototype-Pollution des API-Baums zu verhindern.",
|
|
85
|
+
"HINT_LOOSE_SET_RESERVED_KEY": "Die Segmente __proto__, prototype und constructor dürfen nicht als apiPath-Namen verwendet werden, da das Schreiben darauf die JavaScript-Prototyp-Kette verändern würde. Wählen Sie einen anderen Namen.",
|
|
43
86
|
"INVALID_DIRECTORY": "Ungültiges Verzeichnis '{dir}': {error}. Stellen Sie sicher, dass das Verzeichnis existiert und zugänglich ist.",
|
|
87
|
+
"HINT_INVALID_DIRECTORY": "Stellen Sie sicher, dass der Verzeichnispfad korrekt ist und das Verzeichnis existiert und zugänglich ist.",
|
|
44
88
|
"WARN_DIRECTORY_EMPTY": "Das Verzeichnis '{dir}' (aufgelöst: '{resolvedPath}') ist leer oder enthält keine ladbaren Module (.mjs, .cjs, .js Dateien). Dies ist für add-api Workflows gültig, kann aber auf einen falsch konfigurierten Pfad hindeuten.",
|
|
89
|
+
"HINT_WARN_DIRECTORY_EMPTY": "Prüfen Sie den Verzeichnispfad. Leere Verzeichnisse sind bei add-api Workflows gültig, wenn Module dynamisch hinzugefügt werden.",
|
|
90
|
+
"WARN_SYNTHETIC_ROOT_EMPTY": "Synthetisches Hinzufügen am API-Pfad '{apiPath}' hat keine Blätter beigetragen; es wurde nichts eingebunden.",
|
|
91
|
+
"HINT_WARN_SYNTHETIC_ROOT_EMPTY": "Geben Sie mindestens einen Export an — eine benannte Standardfunktion oder benannte Exporte —, damit das synthetische Hinzufügen etwas einzubinden hat.",
|
|
92
|
+
"WARN_SYNTHETIC_ROOT_UNNAMED": "Synthetisches Hinzufügen an der API-Wurzel hat einen anonymen Standardexport; er kann der Wurzel nicht zugeordnet werden und wurde übersprungen.",
|
|
93
|
+
"HINT_WARN_SYNTHETIC_ROOT_UNNAMED": "Benennen Sie die Standardfunktion (ihr Name wird zum Wurzelschlüssel), stellen Sie benannte Exporte bereit oder binden Sie das Blatt unter einem benannten apiPath ein.",
|
|
94
|
+
"WARN_SYNTHETIC_ROOT_COLLISION": "Synthetisches Hinzufügen an der API-Wurzel ordnet seinen Standard '{name}' zu, aber ein benannter Export verwendet '{name}' bereits; der benannte Export hat Vorrang.",
|
|
95
|
+
"HINT_WARN_SYNTHETIC_ROOT_COLLISION": "Benennen Sie die Standardfunktion oder den kollidierenden benannten Export um, damit jeder auf einem eigenen Wurzelschlüssel landet.",
|
|
45
96
|
"INTERNAL_HOOK_STATE_CORRUPT": "[INTERNER FEHLER] Zustand des HookManagers ist korrupt: Hook \"{hookId}\" ({type}/{subset}/{pattern}) — {detail}. Dies ist ein Fehler in Slothlet — bitte melden Sie ihn.",
|
|
97
|
+
"HINT_INTERNAL_HOOK_STATE_CORRUPT": "Der interne Zustand des HookManagers ist inkonsistent. Dies sollte bei normaler Verwendung niemals passieren — bitte senden Sie einen Bug-Report inklusive der Information, wie Sie hook.on() und hook.remove() aufgerufen haben.",
|
|
46
98
|
"WARNING_RESERVED_PROPERTY_CONFLICT": "Benutzer-API kollidiert mit reservierten Eigenschaften: {properties}",
|
|
99
|
+
"HINT_WARNING_RESERVED_PROPERTY_CONFLICT": "Der Eigenschaftsname 'slothlet' ist für interne API-Methoden reserviert. Benennen Sie Ihr API-Modul oder Ihre Eigenschaft um, um Konflikte mit slothlet.shutdown(), slothlet.api.* usw. zu vermeiden.",
|
|
47
100
|
"WARNING_LANGUAGE_LOAD_FAILED": "Sprache '{lang}' konnte nicht geladen werden, Rückfall auf Englisch.",
|
|
48
101
|
"WARNING_LANGUAGE_UNAVAILABLE": "Sprache '{lang}' ist nicht verfügbar, Englisch wird verwendet.",
|
|
49
102
|
"WARNING_OWNERSHIP_CONFLICT": "Eigentumskonflikt bei '{apiPath}': Gehört bereits '{existingModuleId}', '{newModuleId}' kann nicht registriert werden. Bestehendes wird beibehalten.",
|
|
103
|
+
"HINT_WARNING_OWNERSHIP_CONFLICT": "Der Pfad gehört bereits einem anderen Modul. Um das Überschreiben zu erzwingen, benutzen Sie forceOverwrite: true in den api.add() Optionen oder rufen Sie zuerst api.slothlet.api.remove() auf, um den Pfad zu leeren.",
|
|
50
104
|
"WARNING_HOT_RELOAD_PATH_COLLISION": "Pfadkollision bei {apiPath} - bestehender Wert wird beibehalten (Kollisionsmodus: warn).",
|
|
105
|
+
"HINT_WARNING_HOT_RELOAD_PATH_COLLISION": "Eine Kollision trat während des Hot Reloads am angegebenen Pfad auf. Der bestehende Wert wird beibehalten. Um ein Überschrieben zu erzwingen, benutzen Sie den Kollisionsmodus 'replace' anstelle von 'warn'.",
|
|
51
106
|
"WARNING_HOT_RELOAD_MERGE_PRIMITIVES": "Primitive Werte bei {apiPath} können nicht zusammengeführt werden - bestehender Wert wird beibehalten. Verwenden Sie den Kollisionsmodus 'replace' zum Überschreiben oder stellen Sie sicher, dass beide Werte Objekte sind.",
|
|
107
|
+
"HINT_WARNING_HOT_RELOAD_MERGE_PRIMITIVES": "Primitive Werte (Strings, Zahlen, Booleans) können nicht zusammengeführt werden. Um den Wert zu ersetzen, benutzen Sie den Kollisionsmodus 'replace'. Um den bestehenden zu behalten, benutzen Sie weiterhin 'warn'.",
|
|
52
108
|
"WARNING_COLLISION_FILE_FOLDER_MERGE": "Kollision erkannt bei '{key}' - Datei- und Ordner-Exports werden zusammengeführt (Kollisionsmodus: 'warn').",
|
|
53
109
|
"HINT_WARNING_COLLISION_FILE_FOLDER_MERGE": "Eine Datei und ein Ordner teilen sich den Namen '{key}'. Ihre Exports werden zusammengeführt. Benennen Sie eines um, um Unklarheiten zu vermeiden, oder setzen Sie collisionMode auf 'replace' oder 'error', wenn das Zusammenführen nicht beabsichtigt ist.",
|
|
54
110
|
"WARNING_COLLISION_DEFAULT_EXPORT_OVERWRITE": "Kollisionswarnung: Eigenschaft '{key}' existiert bereits in der Standard-Exportfunktion bei {apiPath}. Der benannte Export wird diese überschreiben.",
|
|
@@ -58,10 +114,13 @@
|
|
|
58
114
|
"WARNING_LIFECYCLE_HANDLER_ERROR": "Der Lifecycle-Event-Handler hat einen Fehler für das Event '{event}' verursacht. Andere Handler für dieses Event wurden weiterhin ausgeführt.",
|
|
59
115
|
"HINT_WARNING_LIFECYCLE_HANDLER_ERROR": "Ein für das Event '{event}' registrierter Lifecycle-Handler hat einen Fehler verursacht. Überprüfen Sie Ihren lifecycle.on('{event}', ...) Handler auf Fehler. Andere Handler für das gleiche Event sind nicht betroffen.",
|
|
60
116
|
"WARNING_MULTIPLE_ROOT_CONTRIBUTORS": "Mehrere Standard-Funktionsexporte auf Root-Ebene erkannt: {rootContributors}. Jeder wurde nach Dateiname in einen Namespace verschoben (z.B. api.{firstContributor}()). Erwägen Sie einen einzigen Root-Standard-Export oder das Verschieben von Dateien in Unterverzeichnisse.",
|
|
117
|
+
"HINT_WARNING_MULTIPLE_ROOT_CONTRIBUTORS": "Mehrere Dateien exportieren Standardfunktionen auf Root-Ebene. Jede wurde in einen eigenen Namespace verschoben (z.B. api.dateiname()). Erwägen Sie die Konsolidierung in einen einzigen Root-Export oder verschieben Sie Dateien in Unterverzeichnisse für eine klarere Struktur.",
|
|
61
118
|
"WARN_SUPPRESS_FIX_ACTIVE": "Regelkorrektur '{rule}' ist über 'suppressFixes' deaktiviert. Weitere Details unter {url}. Diese temporäre Ausnahme wird in v4 entfernt. Das korrigierte Verhalten von '{rule}' wird dauerhaft erzwungen.",
|
|
62
119
|
"HINT_WARN_SUPPRESS_FIX_ACTIVE": "Entfernen Sie '{rule}' aus 'suppressFixes' und aktualisieren Sie Ihre API-Verzeichnisstruktur, um das korrigierte Verhalten vor dem Upgrade auf v4 zu übernehmen.",
|
|
63
120
|
"V3_CONFIG_DEPRECATED": "Konfigurationsoption '{option}' ist veraltet und wird in v4 entfernt. Verwenden Sie stattdessen '{replacement}'.",
|
|
121
|
+
"HINT_V3_CONFIG_DEPRECATED": "Dieser Konfigurationsparameter wurde zur Klarheit umbenannt. Aktualisieren Sie Ihren Code auf den neuen Optionsnamen, um Vorwärtskompatibilität mit v4 sicherzustellen.",
|
|
64
122
|
"V2_CONFIG_UNSUPPORTED": "Konfigurationsoption '{option}' aus v2 wird in v3 nicht unterstützt. {hint} Verwenden Sie stattdessen '{replacement}'.",
|
|
123
|
+
"HINT_V2_CONFIG_UNSUPPORTED": "Diese Konfigurationsoption aus v2 wird in v3 nicht unterstützt. Aktualisieren Sie Ihre Konfiguration auf das v3-Äquivalent für bessere Kontrolle und Klarheit.",
|
|
65
124
|
"DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] Root-Contributor erkannt: {functionName}",
|
|
66
125
|
"DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] Root-Contributor-Muster angewendet - Funktions-API mit {properties} zusätzlichen Eigenschaften",
|
|
67
126
|
"DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] Verarbeite Verzeichnis: {categoryName} (Tiefe {currentDepth})",
|
|
@@ -230,72 +289,15 @@
|
|
|
230
289
|
"DEBUG_MODE_LAZY_WRAPPER_MATERIALIZED": "Lazy-Wrapper materialisiert",
|
|
231
290
|
"DEBUG_MODE_ALL_LAZY_WRAPPERS_MATERIALIZED": "Alle Lazy-Wrapper materialisiert",
|
|
232
291
|
"HINT_REFERENCE_REMOVED": "Der Export 'reference' wurde aus '@cldmv/slothlet/runtime' entfernt. Referenzobjekte werden nun direkt in die API integriert. Zugriff stattdessen über 'self.*' (z.B. 'self.myRefProperty').",
|
|
233
|
-
"HINT_MODULE_NOT_FOUND": "Stellen Sie sicher, dass das Modul existiert und der Pfad korrekt ist. Prüfen Sie auf Tippfehler in der Import-Anweisung.",
|
|
234
292
|
"HINT_SYNTAX_ERROR": "Prüfen Sie die Moduldatei auf Syntaxfehler. Häufige Probleme: fehlende Klammern, nicht geschlossene Strings oder ungültige JavaScript-Syntax.",
|
|
235
|
-
"HINT_CONTEXT_NOT_FOUND": "Stellen Sie sicher, dass die Slothlet-Instanz initialisiert ist und der Kontext erstellt wurde, bevor Sie darauf zugreifen. Prüfen Sie die Instanz-ID.",
|
|
236
|
-
"HINT_CONTEXT_ALREADY_EXISTS": "Dieser Kontext existiert bereits. Prüfen Sie, ob Sie versuchen, dieselbe Instanz zweimal zu initialisieren.",
|
|
237
|
-
"HINT_CONTEXT_EXECUTION_FAILED": "Ein Fehler ist bei der Ausführung der Funktion aufgetreten. Details finden Sie in den Fehlermeldungen.",
|
|
238
|
-
"HINT_NO_ACTIVE_CONTEXT": "Kein aktiver Kontext gefunden. Stellen Sie sicher, dass der Aufruf innerhalb eines Slothlet-Kontexts erfolgt (Async- oder Live-Modus).",
|
|
239
|
-
"HINT_NO_ACTIVE_CONTEXT_ASYNC": "Kein aktiver Kontext gefunden. Stellen Sie sicher, dass der Aufruf innerhalb eines asynchronen Slothlet-Kontexts erfolgt.",
|
|
240
|
-
"HINT_NO_ACTIVE_CONTEXT_LIVE": "Kein aktiver Kontext gefunden. Stellen Sie sicher, dass der Aufruf innerhalb eines Slothlet Live-Kontexts erfolgt.",
|
|
241
|
-
"HINT_OWNERSHIP_INVALID_MODULE_ID": "Die Modul-ID ist ungültig. Stellen Sie sicher, dass das Modul korrekt geladen wurde und die ID stimmt.",
|
|
242
|
-
"HINT_OWNERSHIP_INVALID_API_PATH": "Der API-Pfad ist ungültig. Prüfen Sie das Format des Pfades.",
|
|
243
|
-
"HINT_OWNERSHIP_CONFLICT": "Der Pfad gehört bereits einem anderen Modul. Optionen: (1) Benutzen Sie forceOverwrite: true in den api.add() Optionen, (2) Setzen Sie die Kollisions-Konfiguration auf 'merge' oder 'replace', (3) Rufen Sie zuerst api.slothlet.api.remove() auf, um den Pfad zu leeren.",
|
|
244
|
-
"HINT_INVALID_CONFIG": "Überprüfen Sie den Konfigurationswert und stellen Sie sicher, dass er den erwarteten Typ und das Format erfüllt.",
|
|
245
|
-
"HINT_INVALID_CONFIG_DIR_INVALID": "Stellen Sie sicher, dass der Verzeichnispfad ein gültiger String ist und auf ein existierendes Verzeichnis zeigt.",
|
|
246
|
-
"HINT_INVALID_CONFIG_FORCE_OVERWRITE_REQUIRES_MODULE_ID": "Bei Verwendung von forceOverwrite oder allowOverwrite müssen Sie eine eindeutige moduleID angeben, um das Eigentum am überschriebenen Pfad zu verfolgen.",
|
|
247
|
-
"HINT_COLLISION_ERROR": "Der Kollisionsmodus ist auf 'error' gesetzt, was jedes Überschreiben verhindert. Benutzen Sie stattdessen collision: 'merge' (Eigenschaften kombinieren), 'replace' (vollständig überschreiben), 'warn' (warnen, aber bestehendes behalten) oder 'skip' (stillschweigend ignorieren).",
|
|
248
|
-
"HINT_COLLISION_DEFAULT_EXPORT_ERROR": "Ein benannter Export kollidiert mit einer Eigenschaft, die bereits im Standard-Exportobjekt dieses Pfades existiert. Ändern Sie den Kollisionsmodus auf 'merge', 'replace', 'warn' oder 'skip' oder benennen Sie die kollidierende Eigenschaft um.",
|
|
249
|
-
"HINT_INVALID_ARGUMENT": "Der Pfad muss ein Dot-Notation-String sein (z.B. 'math.add').",
|
|
250
|
-
"HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() muss innerhalb einer Slothlet-API-Funktion aufgerufen werden.",
|
|
251
|
-
"HINT_INVALID_CONFIG_MODE_INVALID": "Der Modus muss entweder 'eager' oder 'lazy' sein.",
|
|
252
|
-
"HINT_INVALID_CONFIG_MODE_UNKNOWN": "Unbekannter Modus angegeben. Benutzen Sie 'eager' oder 'lazy'.",
|
|
253
|
-
"HINT_INVALID_CONFIG_DIR_MISSING": "Der Verzeichnispfad ist erforderlich, wurde aber nicht angegeben.",
|
|
254
|
-
"HINT_INVALID_CONFIG_API_PATH_INVALID": "Stellen Sie sicher, dass der API-Pfad ein gültiger Dot-Notation-String ist (z.B. 'plugins.tools') ohne leere Segmente oder reservierte Namen (slothlet, shutdown, destroy).",
|
|
255
|
-
"HINT_INVALID_CONFIG_MUTATIONS_DISABLED": "Operationen zur API-Mutation erfordern allowMutation: true in der Konfiguration. Benutzen Sie diagnostics: true, um diese Methoden zu Testzwecken aufzurufen, ohne echte Mutationen zu aktivieren.",
|
|
256
|
-
"HINT_CACHE_MODULEID_MISMATCH": "Dies ist ein interner Fehler, der auf eine Cache-Korruption hindeutet. Bitte melden Sie diesen Fehler zusammen mit Schritten zur Reproduktion.",
|
|
257
|
-
"HINT_CACHE_NOT_FOUND": "Stellen Sie sicher, dass das Modul geladen wurde, bevor Sie versuchen, es neu zu laden oder den Cache neu aufzubauen. Prüfen Sie die moduleID.",
|
|
258
|
-
"HINT_CACHE_MANAGER_NOT_AVAILABLE": "Der Cache-Manager sollte automatisch initialisiert werden. Wenn Sie diesen Fehler sehen, deutet dies auf ein internen Initialisierungsproblem hin.",
|
|
259
|
-
"HINT_INVALID_METADATA_TARGET": "Das Ziel muss eine Funktion oder ein Objekt sein, das über Slothlet geladen wurde. Übergeben Sie die eigentliche Funktions-/Objektreferenz, keinen String oder primitiven Wert.",
|
|
260
|
-
"HINT_METADATA_NO_MODULE_ID": "Stellen Sie sicher, dass die Funktion/das Objekt über das Modulsystem von Slothlet geladen wurde. Nur von Slothlet verwaltete Funktionen haben zugeordnete Metadaten.",
|
|
261
|
-
"HINT_METADATA_LIFECYCLE_BYPASS": "Rufen Sie tagSystemMetadata() niemals direkt auf. Lösen Sie stattdessen die Lifecycle-Events 'impl:created' oder 'impl:changed' aus; diese rufen tagSystemMetadata() über den korrekten Kanal auf.",
|
|
262
|
-
"HINT_INVALID_METADATA_KEY": "Metadaten-Schlüssel müssen Strings, String-Arrays oder Objekte mit Array-Werten sein. Prüfen Sie das Format des Schlüssels.",
|
|
263
|
-
"HINT_WARNING_METADATA_MISMATCH": "Diese Warnung deutet darauf hin, dass der Ausführungsort der Funktion nicht mit ihrem registrierten Metadatenpfad übereinstimmt. Dies kann bei einem Hot Reload auftreten oder wenn die Funktion manipuliert wurde. In den meisten Fällen ist dies beim Development mit aktiviertem Hot Reload zu erwarten.",
|
|
264
|
-
"HINT_WARNING_INIT_COMPONENT_SKIPPED": "Komponentendateien, die beim Import fehlschlagen, werden übersprungen. Dies ist bei optionalen Komponenten normal. Prüfen Sie die Fehlermeldung auf Details, falls die Komponente hätte geladen werden sollen.",
|
|
265
|
-
"HINT_WARNING_MULTIPLE_ROOT_CONTRIBUTORS": "Mehrere Dateien exportieren Standardfunktionen auf Root-Ebene. Jede wurde in einen eigenen Namespace verschoben (z.B. api.dateiname()). Erwägen Sie die Konsolidierung in einen einzigen Root-Export oder verschieben Sie Dateien in Unterverzeichnisse für eine klarere Struktur.",
|
|
266
|
-
"HINT_WARNING_HOT_RELOAD_PATH_COLLISION": "Eine Kollision trat während des Hot Reloads am angegebenen Pfad auf. Der bestehende Wert wird beibehalten. Um ein Überschrieben zu erzwingen, benutzen Sie den Kollisionsmodus 'replace' anstelle von 'warn'.",
|
|
267
|
-
"HINT_WARNING_HOT_RELOAD_MERGE_PRIMITIVES": "Primitive Werte (Strings, Zahlen, Booleans) können nicht zusammengeführt werden. Um den Wert zu ersetzen, benutzen Sie den Kollisionsmodus 'replace'. Um den bestehenden zu behalten, benutzen Sie weiterhin 'warn'.",
|
|
268
|
-
"HINT_WARNING_OWNERSHIP_CONFLICT": "Der Pfad gehört bereits einem anderen Modul. Um das Überschreiben zu erzwingen, benutzen Sie forceOverwrite: true in den api.add() Optionen oder rufen Sie zuerst api.slothlet.api.remove() auf, um den Pfad zu leeren.",
|
|
269
|
-
"HINT_V2_CONFIG_UNSUPPORTED": "Diese Konfigurationsoption aus v2 wird in v3 nicht unterstützt. Aktualisieren Sie Ihre Konfiguration auf das v3-Äquivalent für bessere Kontrolle und Klarheit.",
|
|
270
|
-
"HINT_V3_CONFIG_DEPRECATED": "Dieser Konfigurationsparameter wurde zur Klarheit umbenannt. Aktualisieren Sie Ihren Code auf den neuen Optionsnamen, um Vorwärtskompatibilität mit v4 sicherzustellen.",
|
|
271
|
-
"HINT_MODULE_LOAD_FAILED": "Prüfen Sie die Moduldatei auf Fehler. Stellen Sie sicher, dass sie gültige JavaScript-Syntax und Exports besitzt.",
|
|
272
|
-
"HINT_MODULE_IMPORT_FAILED": "Stellen Sie sicher, dass die Moduldatei existiert und importiert werden kann. Prüfen Sie auf Syntaxfehler oder fehlende Abhängigkeiten.",
|
|
273
|
-
"HINT_MODULE_NO_EXPORTS": "Das Modul muss mindestens eine Funktion oder ein Objekt exportieren.",
|
|
274
|
-
"HINT_INVALID_DIRECTORY": "Stellen Sie sicher, dass der Verzeichnispfad korrekt ist und das Verzeichnis existiert und zugänglich ist.",
|
|
275
|
-
"HINT_WARN_DIRECTORY_EMPTY": "Prüfen Sie den Verzeichnispfad. Leere Verzeichnisse sind bei add-api Workflows gültig, wenn Module dynamisch hinzugefügt werden.",
|
|
276
|
-
"HINT_INVALID_CONFIG_LAZY_NOT_READY": "Greifen Sie im Lazy-Modus auf Eigenschaften zu, um die Materialisierung auszulösen, bevor Sie Funktionen aufrufen.",
|
|
277
|
-
"HINT_INTERNAL_INVALID_STATE": "Ein interner Fehlzustand ist aufgetreten. Dies ist wahrscheinlich ein Fehler - bitte melden Sie ihn mit Details.",
|
|
278
|
-
"HINT_INTERNAL_HOOK_STATE_CORRUPT": "Der interne Zustand des HookManagers ist inkonsistent. Dies sollte bei normaler Verwendung niemals passieren — bitte senden Sie einen Bug-Report inklusive der Information, wie Sie hook.on() und hook.remove() aufgerufen haben.",
|
|
279
|
-
"HINT_INVALID_CONFIG_LAZY_ASYNC_REQUIRED": "Der Lazy-Modus erfordert asynchrone Operationen. Benutzen Sie den Eager-Modus oder implementieren Sie korrekte asynchrone Muster.",
|
|
280
|
-
"HINT_RUNTIME_NO_ACTIVE_CONTEXT_SELF": "Zugriff auf 'self' außerhalb eines Slothlet-API-Funktionskontexts ist nicht möglich.",
|
|
281
|
-
"HINT_RUNTIME_NO_ACTIVE_CONTEXT_CONTEXT": "Zugriff auf 'context' ist nur innerhalb einer Slothlet-API-Funktion möglich. Der Kontext kann nur innerhalb von Slothlet-API-Aufrufen geändert werden.",
|
|
282
|
-
"HINT_LOOSE_SET_NOT_OWNED": "Ein Modul mit apiPath \"P\" darf nur in \"P.*\" schreiben. Verwenden Sie api.slothlet.api.add(), um Code in einem anderen Namensraum zu registrieren.",
|
|
283
|
-
"HINT_LOOSE_SET_RESERVED_KEY": "Die Segmente __proto__, prototype und constructor dürfen nicht als apiPath-Namen verwendet werden, da das Schreiben darauf die JavaScript-Prototyp-Kette verändern würde. Wählen Sie einen anderen Namen.",
|
|
284
|
-
"HINT_INVALID_CONFIG_NOT_LOADED": "Die Instanz muss geladen sein, bevor diese Operation ausgeführt werden kann. Rufen Sie zuerst load() auf.",
|
|
285
|
-
"HINT_INVALID_CONFIG_RELOAD_NOT_IMPL": "Hinweis: Die Reload-Funktionalität ist noch nicht implementiert. Sie wird in einer zukünftigen Iteration hinzugefügt.",
|
|
286
|
-
"HINT_WARNING_RESERVED_PROPERTY_CONFLICT": "Der Eigenschaftsname 'slothlet' ist für interne API-Methoden reserviert. Benennen Sie Ihr API-Modul oder Ihre Eigenschaft um, um Konflikte mit slothlet.shutdown(), slothlet.api.* usw. zu vermeiden.",
|
|
287
|
-
"HINT_DEPRECATED_CONFIG_OPTION": "Diese Konfigurationsoption ist veraltet und wird in einer zukünftigen Version entfernt. Aktualisieren Sie Ihre Konfiguration auf den empfohlenen Ersatz.",
|
|
288
|
-
"HINT_ERROR_RUNTIME_IMPORT_FAILED": "Das Runtime-Modul konnte nicht geladen werden. Dies kann passieren, wenn der @cldmv/slothlet/runtime Export nicht verfügbar ist oder eine kreisförmige Abhängigkeit besteht. Funktionen, die Runtime-Zugriff benötigen, könnten eingeschränkt sein.",
|
|
289
|
-
"INVALID_HOOK_TYPE": "Ungültiger Hook-Typ \"{type}\". Muss einer der folgenden sein: {validTypes}.",
|
|
290
293
|
"INVALID_HOOK_HANDLER": "Der Hook-Handler muss eine Funktion sein. Erhaltener Typ: {receivedType}.",
|
|
291
|
-
"DUPLICATE_HOOK_ID": "Ein Hook mit der ID \"{id}\" existiert bereits. Benutzen Sie eine eindeutige ID oder lassen Sie die 'id' Option weg, um sie automatisch generieren zu lassen.",
|
|
292
|
-
"INVALID_HOOK_SUBSET": "Ungültiges Hook-Subset \"{subset}\". Muss \"before\", \"primary\" oder \"after\" sein. Gültige Subsets: {validSubsets}.",
|
|
293
|
-
"INVALID_TYPE_PATTERN": "Ungültiges Typ-Muster \"{typePattern}\". {expected}",
|
|
294
|
-
"HINT_INVALID_HOOK_TYPE": "Benutzen Sie einen der gültigen Hook-Typen: before, after, always oder error.",
|
|
295
294
|
"HINT_INVALID_HOOK_HANDLER": "Geben Sie eine Funktion als Hook-Handler an, keinen String oder einen anderen Typ.",
|
|
295
|
+
"DUPLICATE_HOOK_ID": "Ein Hook mit der ID \"{id}\" existiert bereits. Benutzen Sie eine eindeutige ID oder lassen Sie die 'id' Option weg, um sie automatisch generieren zu lassen.",
|
|
296
296
|
"HINT_DUPLICATE_HOOK_ID": "Benutzen Sie entweder eine andere ID oder entfernen Sie die 'id' Option, damit Slothlet automatisch eine eindeutige ID generiert.",
|
|
297
|
+
"INVALID_HOOK_SUBSET": "Ungültiges Hook-Subset \"{subset}\". Muss \"before\", \"primary\" oder \"after\" sein. Gültige Subsets: {validSubsets}.",
|
|
297
298
|
"HINT_INVALID_HOOK_SUBSET": "Subsets steuern die Reihenfolge der Ausführung. Benutzen Sie 'before' für Pre-Processing, 'primary' (Standard) für Haupt-Hooks oder 'after' für Post-Processing.",
|
|
298
|
-
"
|
|
299
|
+
"INVALID_TYPE_PATTERN": "Ungültiges Typ-Muster \"{typePattern}\". {expected}",
|
|
300
|
+
"HINT_INVALID_TYPE_PATTERN": "Hook-Muster verwenden die Form 'pattern:type', wie z.B. 'math.*:before' oder '**:error'. Die ältere Form 'type:pattern' funktioniert weiterhin, ist aber veraltet.",
|
|
299
301
|
"HOOK_BEFORE_RETURNED_PROMISE": "Der 'before' Hook '{id}' für Pfad '{path}' hat ein Promise zurückgegeben. 'before' Hooks müssen synchron sein.",
|
|
300
302
|
"HINT_HOOK_BEFORE_RETURNED_PROMISE": "Before-Hooks werden synchron vor dem API-Aufruf ausgeführt. Entfernen Sie async/await oder die Verwendung von Promises aus diesem Hook oder ändern Sie ihn zu einem 'after' Hook, falls asynchrone Verarbeitung nötig ist.",
|
|
301
303
|
"HOOK_BRACE_EXPANSION_MAX_DEPTH": "Die Klammererweiterung (Brace Expansion) im Hook-Muster überschreitet die maximale Verschachtelungstiefe von {maxDepth}.",
|
|
@@ -383,11 +385,11 @@
|
|
|
383
385
|
"INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher muss ein String (Metadatenschlüssel) oder eine Funktion sein; erhalten: {received}",
|
|
384
386
|
"INVALID_CONFIG_VERSION_TAG": "versionConfig.version muss ein nicht leerer String sein; erhalten: {received}",
|
|
385
387
|
"VERSION_NOT_FOUND": "Version '{version}' ist unter dem Pfad '{apiPath}' nicht registriert.",
|
|
388
|
+
"HINT_VERSION_NOT_FOUND": "Rufen Sie api.slothlet.versioning.list('{apiPath}') auf, um zu sehen, welche Versions-Tags derzeit unter diesem Pfad registriert sind.",
|
|
386
389
|
"VERSION_NO_DEFAULT": "Für den Pfad '{apiPath}' ist keine Standardversion konfiguriert, und aus den Aufrufer-Metadaten konnte keine Version aufgelöst werden.",
|
|
387
390
|
"VERSION_DISPATCH_NOT_CALLABLE": "Der versionierte Dispatcher unter '{apiPath}' ist ein Namespace und keine aufrufbare Funktion.",
|
|
388
391
|
"VERSION_REGISTER_DUPLICATE": "Version '{version}' ist unter dem Pfad '{apiPath}' bereits registriert. Verwenden Sie collisionMode 'replace', um sie zu überschreiben.",
|
|
389
392
|
"HINT_VERSION_REGISTER_DUPLICATE": "Rufen Sie zuerst api.slothlet.versioning.unregister('{apiPath}', '{version}') auf oder registrieren Sie mit einem anderen Versions-Tag.",
|
|
390
|
-
"HINT_VERSION_NOT_FOUND": "Rufen Sie api.slothlet.versioning.list('{apiPath}') auf, um zu sehen, welche Versions-Tags derzeit unter diesem Pfad registriert sind.",
|
|
391
393
|
"VERSION_DISCRIMINATOR_INVALID_RETURN": "Die Funktion versionDispatcher hat '{returned}' zurückgegeben, was kein für den Pfad '{apiPath}' registriertes Versions-Tag ist.",
|
|
392
394
|
"DEBUG_VERSION_RESOLVED": "Version aufgelöst: {version} für Pfad {apiPath} (Aufrufer: {callerModule})",
|
|
393
395
|
"DEBUG_VERSION_DEFAULT_USED": "Keine Discriminator-Übereinstimmung für Pfad {apiPath}; Standardversion {version} wird verwendet.",
|
|
@@ -417,7 +419,27 @@
|
|
|
417
419
|
"HINT_MODULE_MANIFEST_NOT_FOUND": "Plugin-Module müssen eine 'slothlet.module.json' im Paketwurzelverzeichnis ausliefern (oder die über die `manifest`-Überschreibung angegebene Datei/Schlüssel). Überprüfen Sie, ob die Datei im Paket existiert und der Override-Locator korrekt ist.",
|
|
418
420
|
"MODULE_MANIFEST_INVALID": "Modul-Manifest ist ungültig für Paket '{packageName}' unter '{manifestPath}': {reason}.",
|
|
419
421
|
"HINT_MODULE_MANIFEST_INVALID": "Öffnen Sie das Manifest und stellen Sie sicher, dass es gültiges JSON ist und dem Slothlet-Modul-Schema entspricht (siehe schemas/slothlet.module.schema.json). Erforderliche Felder: schemaVersion, mountPath, apiDir.",
|
|
420
|
-
"
|
|
422
|
+
"MODULE_MANIFEST_REASON_NOT_OBJECT": "Das Manifest muss ein JSON-Objekt sein",
|
|
423
|
+
"MODULE_MANIFEST_REASON_MISSING_FIELD": "Pflichtfeld '{field}' fehlt",
|
|
424
|
+
"MODULE_MANIFEST_REASON_FIELD_TYPE": "Das Feld '{field}' muss {expected} sein",
|
|
425
|
+
"EXPECTED_NON_EMPTY_STRING": "eine nicht-leere Zeichenkette",
|
|
426
|
+
"EXPECTED_STRING": "eine Zeichenkette",
|
|
427
|
+
"EXPECTED_FINITE_NUMBER": "eine endliche Zahl",
|
|
428
|
+
"EXPECTED_PLAIN_OBJECT": "ein einfaches Objekt",
|
|
429
|
+
"EXPECTED_ARRAY_OF_RULE_OBJECTS": "ein Array von Regelobjekten",
|
|
430
|
+
"MODULE_MANIFEST_REASON_MOUNTPATH_SHAPE": "Das Feld 'mountPath' muss ein nicht leerer String oder ein nicht leeres Array nicht leerer Strings sein",
|
|
431
|
+
"MODULE_MANIFEST_REASON_MOUNTPATH_ENTRIES": "Alle Einträge im Array-Feld 'mountPath' müssen nicht leere Strings sein",
|
|
432
|
+
"MODULE_MANIFEST_REASON_DEPENDENCY_TYPE": "Die Abhängigkeit '{dependency}' muss ein String-Versionsbereich sein",
|
|
433
|
+
"MODULE_MANIFEST_REASON_PERMISSION_RULE": "permissions[{index}] muss ein Regelobjekt sein",
|
|
434
|
+
"MODULE_MANIFEST_REASON_PERMISSION_CALLER": "permissions[{index}].caller muss ein nicht leerer String sein",
|
|
435
|
+
"MODULE_MANIFEST_REASON_PERMISSION_TARGET": "permissions[{index}].target muss ein nicht leerer String sein",
|
|
436
|
+
"MODULE_MANIFEST_REASON_PERMISSION_EFFECT": "permissions[{index}].effect muss \"allow\" oder \"deny\" sein",
|
|
437
|
+
"MODULE_MANIFEST_REASON_JSON_PARSE": "JSON-Analysefehler: {error}",
|
|
438
|
+
"GENERATE_MANIFEST_DIR_INVALID": "generateManifest: dir muss ein nicht leerer String sein, erhalten: {received}",
|
|
439
|
+
"GENERATE_MANIFEST_DIR_UNREADABLE": "generateManifest: Verzeichnis \"{dir}\" kann nicht gelesen werden: {reason}",
|
|
440
|
+
"GENERATE_MANIFEST_NOT_DIRECTORY": "generateManifest: \"{dir}\" ist kein Verzeichnis",
|
|
441
|
+
"GENERATE_BROWSER_ASSETS_SLOTHLET_BASE_INVALID": "generateBrowserAssets: options.slothletBase muss ein String sein (Pfad, unter dem @cldmv/slothlet im Browser bereitgestellt wird), erhalten: {received}",
|
|
442
|
+
"MODULE_MANIFEST_UNKNOWN_FIELD": "Modul-Manifest für Paket '{packageName}' unter '{manifestPath}' enthält nicht erkanntes Feld auf oberster Ebene '{field}'. Unbekannte Felder werden abgelehnt; verwenden Sie den dedizierten 'metadata'-Block für entwicklerdefinierte Zusätze.",
|
|
421
443
|
"HINT_MODULE_MANIFEST_UNKNOWN_FIELD": "Wenn '{field}' ein Tippfehler ist, korrigieren Sie ihn. Wenn es sich um beabsichtigte Entwicklermetadaten handelt, verschieben Sie sie in das 'metadata'-Objekt.",
|
|
422
444
|
"MODULE_MANIFEST_NAME_MISMATCH": "Modul-Manifest für Paket '{packageName}' deklariert Namen '{manifestName}', der nicht mit dem Namen in package.json '{packageName}' übereinstimmt.",
|
|
423
445
|
"HINT_MODULE_MANIFEST_NAME_MISMATCH": "Das 'name'-Feld in slothlet.module.json ist optional, muss aber mit package.json übereinstimmen, wenn vorhanden. Entfernen Sie entweder das 'name'-Feld im Manifest oder gleichen Sie es mit package.json ab.",
|
|
@@ -434,7 +456,11 @@
|
|
|
434
456
|
"MODULE_DUPLICATE_NAME_VERSION_MISMATCH": "Modul-Paket '{packageName}' Version '{version}' wurde an mehreren verschiedenen tatsächlichen Pfaden gefunden: {paths}.",
|
|
435
457
|
"HINT_MODULE_DUPLICATE_NAME_VERSION_MISMATCH": "Dies ist mit ziemlicher Sicherheit eine Fehlkonfiguration — dasselbe Paket in derselben Version, das an zwei nicht verwandten Orten installiert ist. Untersuchen Sie, welche Installation gewünscht ist, und entfernen Sie die andere.",
|
|
436
458
|
"MODULE_MOUNT_COLLISION": "Modul-Paket '{packageName}' kann nicht unter '{mountPath}' eingebunden werden: Pfad ist bereits von Modul '{existingModuleID}' belegt und collisionMode ist '{collisionMode}'.",
|
|
437
|
-
"HINT_MODULE_MOUNT_COLLISION": "Ändern Sie entweder den mountPath des Manifests, übergeben Sie `collisionMode: \"merge\"` an `addModule()` / `addModules()` um Koexistenz zu erlauben, oder entfernen Sie zuerst das bestehende Modul mit `removeModule()`."
|
|
459
|
+
"HINT_MODULE_MOUNT_COLLISION": "Ändern Sie entweder den mountPath des Manifests, übergeben Sie `collisionMode: \"merge\"` an `addModule()` / `addModules()` um Koexistenz zu erlauben, oder entfernen Sie zuerst das bestehende Modul mit `removeModule()`.",
|
|
460
|
+
"HOOK_TYPEPATTERN_PREFIX_DEPRECATED": "Die Hook-Registrierungsform '{given}' ist veraltet und wird in v4 entfernt. Verwenden Sie stattdessen die Pfad-zuerst-Form '{suggested}' (z. B. 'math.*:before').",
|
|
461
|
+
"HINT_HOOK_TYPEPATTERN_PREFIX_DEPRECATED": "Verschieben Sie den Hook-Typ ans Ende als Suffix: Schreiben Sie einen typ-zuerst-Selektor wie 'before:math.add' in die pfad-zuerst-Form 'math.add:before' um.",
|
|
462
|
+
"HOOK_UNPINNED_IGNORED": "lockCaller:false wurde für Hook '{pattern}' ignoriert; Hooks werden an ihr registrierendes Modul gebunden. Setzen Sie hook.pin:false (Init) oder rufen Sie api.slothlet.hook.pin.disable() auf, um ungebundene Hooks zuzulassen.",
|
|
463
|
+
"HINT_HOOK_UNPINNED_IGNORED": "Von Modulen registrierte Hooks werden aus Sicherheitsgründen immer an ihren Eigentümer gebunden. Um ungebundene Hooks zuzulassen, setzen Sie hook.pin:false in der slothlet-Konfiguration oder rufen Sie zur Laufzeit api.slothlet.hook.pin.disable() auf."
|
|
438
464
|
},
|
|
439
465
|
"metadata": {
|
|
440
466
|
"code": "de-de",
|