@cldmv/slothlet 2.11.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/AGENT-USAGE.md +355 -325
  2. package/README.md +554 -238
  3. package/dist/lib/builders/api-assignment.mjs +605 -0
  4. package/dist/lib/builders/api_builder.mjs +1073 -0
  5. package/dist/lib/builders/builder.mjs +94 -0
  6. package/dist/lib/builders/modes-processor.mjs +1816 -0
  7. package/dist/lib/errors.mjs +227 -0
  8. package/dist/lib/factories/component-base.mjs +96 -0
  9. package/dist/lib/factories/context.mjs +38 -0
  10. package/dist/lib/handlers/api-cache-manager.mjs +216 -0
  11. package/dist/lib/handlers/api-manager.mjs +2364 -0
  12. package/dist/lib/handlers/context-async.mjs +184 -0
  13. package/dist/lib/handlers/context-live.mjs +184 -0
  14. package/dist/lib/handlers/hook-manager.mjs +789 -0
  15. package/dist/lib/handlers/lifecycle-token.mjs +44 -0
  16. package/dist/lib/handlers/lifecycle.mjs +131 -0
  17. package/dist/lib/handlers/materialize-manager.mjs +64 -0
  18. package/dist/lib/handlers/metadata.mjs +500 -0
  19. package/dist/lib/handlers/ownership.mjs +338 -0
  20. package/dist/lib/handlers/unified-wrapper.mjs +3031 -0
  21. package/dist/lib/helpers/class-instance-wrapper.mjs +125 -0
  22. package/dist/lib/helpers/config.mjs +343 -0
  23. package/dist/lib/helpers/eventemitter-context.mjs +365 -0
  24. package/dist/lib/helpers/hint-detector.mjs +63 -0
  25. package/dist/lib/helpers/modes-utils.mjs +53 -0
  26. package/dist/lib/helpers/resolve-from-caller.mjs +123 -117
  27. package/dist/lib/helpers/sanitize.mjs +247 -168
  28. package/dist/lib/helpers/utilities.mjs +46 -81
  29. package/dist/lib/i18n/languages/de-de.json +377 -0
  30. package/dist/lib/i18n/languages/en-gb.json +377 -0
  31. package/dist/lib/i18n/languages/en-us.json +377 -0
  32. package/dist/lib/i18n/languages/es-mx.json +377 -0
  33. package/dist/lib/i18n/languages/fr-fr.json +377 -0
  34. package/dist/lib/i18n/languages/hi-in.json +377 -0
  35. package/dist/lib/i18n/languages/ja-jp.json +377 -0
  36. package/dist/lib/i18n/languages/ko-kr.json +377 -0
  37. package/dist/lib/i18n/languages/pt-br.json +377 -0
  38. package/dist/lib/i18n/languages/ru-ru.json +377 -0
  39. package/dist/lib/i18n/languages/zh-cn.json +377 -0
  40. package/dist/lib/i18n/translations.mjs +140 -0
  41. package/dist/lib/modes/eager.mjs +75 -0
  42. package/dist/lib/modes/lazy.mjs +97 -0
  43. package/dist/lib/processors/flatten.mjs +453 -0
  44. package/dist/lib/processors/loader.mjs +355 -0
  45. package/dist/lib/processors/type-generator.mjs +291 -0
  46. package/dist/lib/processors/typescript.mjs +188 -0
  47. package/dist/lib/runtime/runtime-asynclocalstorage.mjs +80 -522
  48. package/dist/lib/runtime/runtime-livebindings.mjs +45 -390
  49. package/dist/lib/runtime/runtime.mjs +39 -159
  50. package/dist/slothlet.mjs +525 -744
  51. package/docs/API-RULES.md +338 -486
  52. package/index.cjs +4 -4
  53. package/index.mjs +82 -45
  54. package/package.json +143 -30
  55. package/types/dist/lib/builders/api-assignment.d.mts +97 -0
  56. package/types/dist/lib/builders/api-assignment.d.mts.map +1 -0
  57. package/types/dist/lib/builders/api_builder.d.mts +96 -0
  58. package/types/dist/lib/builders/api_builder.d.mts.map +1 -0
  59. package/types/dist/lib/builders/builder.d.mts +60 -0
  60. package/types/dist/lib/builders/builder.d.mts.map +1 -0
  61. package/types/dist/lib/builders/modes-processor.d.mts +32 -0
  62. package/types/dist/lib/builders/modes-processor.d.mts.map +1 -0
  63. package/types/dist/lib/errors.d.mts +118 -0
  64. package/types/dist/lib/errors.d.mts.map +1 -0
  65. package/types/dist/lib/factories/component-base.d.mts +182 -0
  66. package/types/dist/lib/factories/component-base.d.mts.map +1 -0
  67. package/types/dist/lib/factories/context.d.mts +26 -0
  68. package/types/dist/lib/factories/context.d.mts.map +1 -0
  69. package/types/dist/lib/handlers/api-cache-manager.d.mts +208 -0
  70. package/types/dist/lib/handlers/api-cache-manager.d.mts.map +1 -0
  71. package/types/dist/lib/handlers/api-manager.d.mts +392 -0
  72. package/types/dist/lib/handlers/api-manager.d.mts.map +1 -0
  73. package/types/dist/lib/handlers/context-async.d.mts +66 -0
  74. package/types/dist/lib/handlers/context-async.d.mts.map +1 -0
  75. package/types/dist/lib/handlers/context-live.d.mts +65 -0
  76. package/types/dist/lib/handlers/context-live.d.mts.map +1 -0
  77. package/types/dist/lib/handlers/hook-manager.d.mts +199 -0
  78. package/types/dist/lib/handlers/hook-manager.d.mts.map +1 -0
  79. package/types/dist/lib/handlers/lifecycle-token.d.mts +49 -0
  80. package/types/dist/lib/handlers/lifecycle-token.d.mts.map +1 -0
  81. package/types/dist/lib/handlers/lifecycle.d.mts +90 -0
  82. package/types/dist/lib/handlers/lifecycle.d.mts.map +1 -0
  83. package/types/dist/lib/handlers/materialize-manager.d.mts +75 -0
  84. package/types/dist/lib/handlers/materialize-manager.d.mts.map +1 -0
  85. package/types/dist/lib/handlers/metadata.d.mts +215 -0
  86. package/types/dist/lib/handlers/metadata.d.mts.map +1 -0
  87. package/types/dist/lib/handlers/ownership.d.mts +170 -0
  88. package/types/dist/lib/handlers/ownership.d.mts.map +1 -0
  89. package/types/dist/lib/handlers/unified-wrapper.d.mts +250 -0
  90. package/types/dist/lib/handlers/unified-wrapper.d.mts.map +1 -0
  91. package/types/dist/lib/helpers/class-instance-wrapper.d.mts +54 -0
  92. package/types/dist/lib/helpers/class-instance-wrapper.d.mts.map +1 -0
  93. package/types/dist/lib/helpers/config.d.mts +96 -0
  94. package/types/dist/lib/helpers/config.d.mts.map +1 -0
  95. package/types/dist/lib/helpers/eventemitter-context.d.mts +31 -0
  96. package/types/dist/lib/helpers/eventemitter-context.d.mts.map +1 -0
  97. package/types/dist/lib/helpers/hint-detector.d.mts +20 -0
  98. package/types/dist/lib/helpers/hint-detector.d.mts.map +1 -0
  99. package/types/dist/lib/helpers/modes-utils.d.mts +35 -0
  100. package/types/dist/lib/helpers/modes-utils.d.mts.map +1 -0
  101. package/types/dist/lib/helpers/resolve-from-caller.d.mts +29 -145
  102. package/types/dist/lib/helpers/resolve-from-caller.d.mts.map +1 -1
  103. package/types/dist/lib/helpers/sanitize.d.mts +95 -94
  104. package/types/dist/lib/helpers/sanitize.d.mts.map +1 -1
  105. package/types/dist/lib/helpers/utilities.d.mts +53 -116
  106. package/types/dist/lib/helpers/utilities.d.mts.map +1 -1
  107. package/types/dist/lib/i18n/translations.d.mts +39 -0
  108. package/types/dist/lib/i18n/translations.d.mts.map +1 -0
  109. package/types/dist/lib/modes/eager.d.mts +36 -0
  110. package/types/dist/lib/modes/eager.d.mts.map +1 -0
  111. package/types/dist/lib/modes/lazy.d.mts +49 -0
  112. package/types/dist/lib/modes/lazy.d.mts.map +1 -0
  113. package/types/dist/lib/processors/flatten.d.mts +114 -0
  114. package/types/dist/lib/processors/flatten.d.mts.map +1 -0
  115. package/types/dist/lib/processors/loader.d.mts +47 -0
  116. package/types/dist/lib/processors/loader.d.mts.map +1 -0
  117. package/types/dist/lib/processors/type-generator.d.mts +19 -0
  118. package/types/dist/lib/processors/type-generator.d.mts.map +1 -0
  119. package/types/dist/lib/processors/typescript.d.mts +55 -0
  120. package/types/dist/lib/processors/typescript.d.mts.map +1 -0
  121. package/types/dist/lib/runtime/runtime-asynclocalstorage.d.mts +47 -42
  122. package/types/dist/lib/runtime/runtime-asynclocalstorage.d.mts.map +1 -1
  123. package/types/dist/lib/runtime/runtime-livebindings.d.mts +34 -65
  124. package/types/dist/lib/runtime/runtime-livebindings.d.mts.map +1 -1
  125. package/types/dist/lib/runtime/runtime.d.mts +39 -9
  126. package/types/dist/lib/runtime/runtime.d.mts.map +1 -1
  127. package/types/dist/slothlet.d.mts +184 -111
  128. package/types/dist/slothlet.d.mts.map +1 -1
  129. package/types/index.d.mts +1 -3
  130. package/dist/lib/engine/README.md +0 -21
  131. package/dist/lib/engine/slothlet_child.mjs +0 -59
  132. package/dist/lib/engine/slothlet_engine.mjs +0 -372
  133. package/dist/lib/engine/slothlet_esm.mjs +0 -230
  134. package/dist/lib/engine/slothlet_helpers.mjs +0 -455
  135. package/dist/lib/engine/slothlet_worker.mjs +0 -149
  136. package/dist/lib/helpers/als-eventemitter.mjs +0 -256
  137. package/dist/lib/helpers/api_builder/add_api.mjs +0 -553
  138. package/dist/lib/helpers/api_builder/analysis.mjs +0 -532
  139. package/dist/lib/helpers/api_builder/construction.mjs +0 -495
  140. package/dist/lib/helpers/api_builder/decisions.mjs +0 -748
  141. package/dist/lib/helpers/api_builder/metadata.mjs +0 -248
  142. package/dist/lib/helpers/api_builder.mjs +0 -41
  143. package/dist/lib/helpers/auto-wrap.mjs +0 -62
  144. package/dist/lib/helpers/hooks.mjs +0 -389
  145. package/dist/lib/helpers/instance-manager.mjs +0 -111
  146. package/dist/lib/helpers/metadata-api.mjs +0 -201
  147. package/dist/lib/helpers/multidefault.mjs +0 -216
  148. package/dist/lib/modes/slothlet_eager.mjs +0 -154
  149. package/dist/lib/modes/slothlet_lazy.mjs +0 -594
  150. package/docs/API-RULES-CONDITIONS.md +0 -712
  151. package/types/dist/lib/engine/slothlet_child.d.mts +0 -2
  152. package/types/dist/lib/engine/slothlet_child.d.mts.map +0 -1
  153. package/types/dist/lib/engine/slothlet_engine.d.mts +0 -31
  154. package/types/dist/lib/engine/slothlet_engine.d.mts.map +0 -1
  155. package/types/dist/lib/engine/slothlet_esm.d.mts +0 -19
  156. package/types/dist/lib/engine/slothlet_esm.d.mts.map +0 -1
  157. package/types/dist/lib/engine/slothlet_helpers.d.mts +0 -25
  158. package/types/dist/lib/engine/slothlet_helpers.d.mts.map +0 -1
  159. package/types/dist/lib/engine/slothlet_worker.d.mts +0 -2
  160. package/types/dist/lib/engine/slothlet_worker.d.mts.map +0 -1
  161. package/types/dist/lib/helpers/als-eventemitter.d.mts +0 -56
  162. package/types/dist/lib/helpers/als-eventemitter.d.mts.map +0 -1
  163. package/types/dist/lib/helpers/api_builder/add_api.d.mts +0 -102
  164. package/types/dist/lib/helpers/api_builder/add_api.d.mts.map +0 -1
  165. package/types/dist/lib/helpers/api_builder/analysis.d.mts +0 -189
  166. package/types/dist/lib/helpers/api_builder/analysis.d.mts.map +0 -1
  167. package/types/dist/lib/helpers/api_builder/construction.d.mts +0 -107
  168. package/types/dist/lib/helpers/api_builder/construction.d.mts.map +0 -1
  169. package/types/dist/lib/helpers/api_builder/decisions.d.mts +0 -213
  170. package/types/dist/lib/helpers/api_builder/decisions.d.mts.map +0 -1
  171. package/types/dist/lib/helpers/api_builder/metadata.d.mts +0 -99
  172. package/types/dist/lib/helpers/api_builder/metadata.d.mts.map +0 -1
  173. package/types/dist/lib/helpers/api_builder.d.mts +0 -6
  174. package/types/dist/lib/helpers/api_builder.d.mts.map +0 -1
  175. package/types/dist/lib/helpers/auto-wrap.d.mts +0 -49
  176. package/types/dist/lib/helpers/auto-wrap.d.mts.map +0 -1
  177. package/types/dist/lib/helpers/hooks.d.mts +0 -342
  178. package/types/dist/lib/helpers/hooks.d.mts.map +0 -1
  179. package/types/dist/lib/helpers/instance-manager.d.mts +0 -41
  180. package/types/dist/lib/helpers/instance-manager.d.mts.map +0 -1
  181. package/types/dist/lib/helpers/metadata-api.d.mts +0 -132
  182. package/types/dist/lib/helpers/metadata-api.d.mts.map +0 -1
  183. package/types/dist/lib/helpers/multidefault.d.mts +0 -90
  184. package/types/dist/lib/helpers/multidefault.d.mts.map +0 -1
  185. package/types/dist/lib/modes/slothlet_eager.d.mts +0 -65
  186. package/types/dist/lib/modes/slothlet_eager.d.mts.map +0 -1
  187. package/types/dist/lib/modes/slothlet_lazy.d.mts +0 -31
  188. package/types/dist/lib/modes/slothlet_lazy.d.mts.map +0 -1
  189. package/types/index.d.mts.map +0 -1
@@ -1,256 +0,0 @@
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 { AsyncResource, AsyncLocalStorage } from "node:async_hooks";
22
- import { EventEmitter } from "node:events";
23
-
24
-
25
- const defaultALS = new AsyncLocalStorage();
26
-
27
-
28
- let originalMethods = null;
29
-
30
-
31
- const globalResourceSet = new Set();
32
-
33
-
34
-
35
- const globalListenerTracker = new WeakMap();
36
- const allPatchedListeners = new Set();
37
-
38
-
39
- export function enableAlsForEventEmitters(als = defaultALS) {
40
-
41
- const kPatched = Symbol.for("slothlet.als.patched");
42
-
43
- if (EventEmitter.prototype[kPatched]) return;
44
- EventEmitter.prototype[kPatched] = true;
45
-
46
-
47
- const kMap = Symbol("slothlet.als.listenerMap");
48
-
49
-
50
- function runtime_ensureMap(emitter) {
51
- if (!emitter[kMap]) emitter[kMap] = new WeakMap();
52
- return emitter[kMap];
53
- }
54
-
55
-
56
- function runtime_wrapListener(listener) {
57
-
58
- const store = als.getStore();
59
- if (!store) return listener;
60
-
61
-
62
- const resource = new AsyncResource("slothlet-als-listener");
63
-
64
-
65
- globalResourceSet.add(resource);
66
-
67
-
68
- const runtime_wrappedListener = function (...args) {
69
- return resource.runInAsyncScope(
70
- () => {
71
- return listener.apply(this, args);
72
- },
73
- this,
74
- ...args
75
- );
76
- };
77
-
78
-
79
- runtime_wrappedListener._slothletResource = resource;
80
-
81
- return runtime_wrappedListener;
82
- }
83
-
84
- const proto = EventEmitter.prototype;
85
-
86
-
87
- const origOn = proto.on;
88
- const origOnce = proto.once;
89
- const origAdd = proto.addListener;
90
- const origPre = proto.prependListener;
91
- const origPreO = proto.prependOnceListener;
92
- const origOff = proto.off ?? proto.removeListener;
93
- const origRem = proto.removeListener;
94
-
95
-
96
- function runtime_installWrapper(addFnName, orig) {
97
- proto[addFnName] = function (event, listener) {
98
- const map = runtime_ensureMap(this);
99
- const wrapped = runtime_wrapListener(listener);
100
-
101
-
102
-
103
- if (!globalListenerTracker.has(this)) {
104
- globalListenerTracker.set(this, new Set());
105
- }
106
- const listenerInfo = {
107
- emitter: this,
108
- event,
109
- originalListener: listener,
110
- wrappedListener: wrapped,
111
- addMethod: addFnName
112
- };
113
- globalListenerTracker.get(this).add(listenerInfo);
114
- allPatchedListeners.add(listenerInfo);
115
-
116
- if (wrapped !== listener) map.set(listener, wrapped);
117
- return orig.call(this, event, wrapped);
118
- };
119
- }
120
-
121
-
122
- runtime_installWrapper("on", origOn);
123
- runtime_installWrapper("once", origOnce);
124
- runtime_installWrapper("addListener", origAdd);
125
- if (origPre) runtime_installWrapper("prependListener", origPre);
126
- if (origPreO) runtime_installWrapper("prependOnceListener", origPreO);
127
-
128
-
129
- function runtime_createRemoveWrapper(method) {
130
-
131
- const runtime_removeWrapper = function (event, listener) {
132
- const map = runtime_ensureMap(this);
133
- const wrapped = map.get(listener) || listener;
134
-
135
-
136
- if (globalListenerTracker.has(this)) {
137
- const emitterListeners = globalListenerTracker.get(this);
138
- for (const info of emitterListeners) {
139
- if (info.originalListener === listener || info.wrappedListener === wrapped) {
140
- emitterListeners.delete(info);
141
- allPatchedListeners.delete(info);
142
- break;
143
- }
144
- }
145
- }
146
-
147
-
148
- if (wrapped && wrapped._slothletResource) {
149
- const resource = wrapped._slothletResource;
150
- globalResourceSet.delete(resource);
151
- try {
152
- resource.emitDestroy();
153
- } catch (_) {
154
-
155
- }
156
- }
157
-
158
- map.delete(listener);
159
- return method.call(this, event, wrapped);
160
- };
161
-
162
- return runtime_removeWrapper;
163
- }
164
-
165
-
166
- if (proto.off) proto.off = runtime_createRemoveWrapper(origOff);
167
- proto.removeListener = runtime_createRemoveWrapper(origRem);
168
-
169
-
170
- const origRemoveAll = proto.removeAllListeners;
171
- proto.removeAllListeners = function (event) {
172
- const res = origRemoveAll.call(this, event);
173
- if (this[kMap]) this[kMap] = new WeakMap();
174
- return res;
175
- };
176
-
177
-
178
- if (!originalMethods) {
179
- originalMethods = {
180
- on: origOn,
181
- once: origOnce,
182
- addListener: origAdd,
183
- prependListener: origPre,
184
- prependOnceListener: origPreO,
185
- off: origOff,
186
- removeListener: origRem,
187
- removeAllListeners: origRemoveAll
188
- };
189
- }
190
- }
191
-
192
-
193
-
194
- export function cleanupAllSlothletListeners() {
195
- let cleanedCount = 0;
196
- let errorCount = 0;
197
-
198
-
199
- for (const listenerInfo of allPatchedListeners) {
200
- try {
201
- const { emitter, event, wrappedListener } = listenerInfo;
202
- if (emitter && typeof emitter.removeListener === "function") {
203
- emitter.removeListener(event, wrappedListener);
204
- cleanedCount++;
205
- }
206
- } catch (_) {
207
- errorCount++;
208
-
209
- }
210
- }
211
-
212
-
213
- allPatchedListeners.clear();
214
-
215
-
216
- if (process.env.SLOTHLET_DEBUG === "1" || process.env.SLOTHLET_DEBUG === "true") {
217
- console.log(`[slothlet] Cleaned up ${cleanedCount} listeners (${errorCount} errors)`);
218
- }
219
- }
220
-
221
- export function disableAlsForEventEmitters() {
222
- const kPatched = Symbol.for("slothlet.als.patched");
223
-
224
- if (!EventEmitter.prototype[kPatched] || !originalMethods) return;
225
-
226
-
227
- cleanupAllSlothletListeners();
228
-
229
-
230
- for (const resource of globalResourceSet) {
231
- try {
232
- resource.emitDestroy();
233
- } catch (err) {
234
-
235
- console.warn("[slothlet] AsyncResource cleanup warning:", err.message);
236
- }
237
- }
238
- globalResourceSet.clear();
239
-
240
-
241
- const proto = EventEmitter.prototype;
242
- proto.on = originalMethods.on;
243
- proto.once = originalMethods.once;
244
- proto.addListener = originalMethods.addListener;
245
- if (originalMethods.prependListener) proto.prependListener = originalMethods.prependListener;
246
- if (originalMethods.prependOnceListener) proto.prependOnceListener = originalMethods.prependOnceListener;
247
- if (originalMethods.off) proto.off = originalMethods.off;
248
- proto.removeListener = originalMethods.removeListener;
249
- proto.removeAllListeners = originalMethods.removeAllListeners;
250
-
251
-
252
- delete EventEmitter.prototype[kPatched];
253
-
254
-
255
- originalMethods = null;
256
- }