@cldmv/slothlet 2.10.0 → 3.0.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 (188) hide show
  1. package/AGENT-USAGE.md +365 -294
  2. package/README.md +556 -233
  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 +125 -85
  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 +529 -700
  51. package/docs/API-RULES.md +497 -617
  52. package/index.cjs +4 -4
  53. package/index.mjs +82 -45
  54. package/package.json +139 -26
  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 +186 -105
  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 -292
  138. package/dist/lib/helpers/api_builder/analysis.mjs +0 -532
  139. package/dist/lib/helpers/api_builder/construction.mjs +0 -457
  140. package/dist/lib/helpers/api_builder/decisions.mjs +0 -737
  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 -126
  149. package/dist/lib/modes/slothlet_lazy.mjs +0 -513
  150. package/docs/API-RULES-CONDITIONS.md +0 -508
  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 -76
  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
@@ -20,123 +20,163 @@
20
20
 
21
21
  import fs from "node:fs";
22
22
  import path from "node:path";
23
- import { fileURLToPath, pathToFileURL } from "node:url";
23
+ import { fileURLToPath } from "node:url";
24
+ import { ComponentBase } from "@cldmv/slothlet/factories/component-base";
24
25
 
25
26
 
27
+ const __filename = fileURLToPath(import.meta.url);
28
+ const __dirname = path.dirname(__filename);
29
+ const SLOTHLET_LIB_ROOT = path.resolve(__dirname, "../..");
26
30
 
27
31
 
28
- export const toFsPath = (v) => (v && String(v).startsWith("file://") ? fileURLToPath(String(v)) : v ? String(v) : null);
32
+ export class Resolver extends ComponentBase {
33
+ static slothletProperty = "resolver";
29
34
 
30
-
31
- export function getStack(skipFn) {
32
- const orig = Error.prepareStackTrace;
33
- try {
34
- Error.prepareStackTrace = (_, s) => s;
35
- const e = new Error("Stack trace");
36
- if (skipFn) Error.captureStackTrace(e, skipFn);
37
- return e.stack || [];
38
- } finally {
39
- Error.prepareStackTrace = orig;
35
+
36
+ getStack(skipFn) {
37
+ const orig = Error.prepareStackTrace;
38
+ try {
39
+ Error.prepareStackTrace = (_, s) => s;
40
+ const e = new Error("Stack trace");
41
+ if (skipFn) Error.captureStackTrace(e, skipFn);
42
+ return e.stack;
43
+ } finally {
44
+ Error.prepareStackTrace = orig;
45
+ }
40
46
  }
41
- }
42
-
43
- const THIS_FILE = fileURLToPath(import.meta.url);
44
- const THIS_DIR = path.dirname(THIS_FILE);
45
-
46
-
47
-
48
47
 
49
-
50
-
51
-
52
-
53
- function pickPrimaryBaseFile() {
54
- const files = [];
55
- for (const cs of getStack(pickPrimaryBaseFile)) {
56
- const f = toFsPath(cs?.getFileName?.());
57
- if (!f) continue;
58
- if (f.startsWith?.("node:internal")) continue;
59
- files.push(f);
48
+
49
+ #getStack() {
50
+ const originalPrepare = Error.prepareStackTrace;
51
+ Error.prepareStackTrace = (___, stack) => stack;
52
+ const stack = new Error().stack;
53
+ Error.prepareStackTrace = originalPrepare;
54
+ return stack;
60
55
  }
61
56
 
62
- let iSloth = -1;
63
- for (let i = 0; i < files.length; i++) {
64
- if (path.basename(files[i]).toLowerCase() === "slothlet.mjs") iSloth = i;
57
+
58
+ toFsPath(v) {
59
+ if (!v) return null;
60
+ const str = String(v);
61
+ return str.startsWith("file://") ? fileURLToPath(str) : str;
65
62
  }
66
- if (iSloth !== -1) {
67
- const j = iSloth + 1;
68
- if (j < files.length) {
69
- const b = path.basename(files[j]).toLowerCase();
70
- if (/^index\.(mjs|cjs|js)$/.test(b) && j + 1 < files.length) return files[j + 1];
71
- return files[j];
63
+
64
+
65
+ #isSlothletInternal(filePath) {
66
+
67
+ const normalized = path.normalize(filePath);
68
+ const normalizedLibRoot = path.normalize(SLOTHLET_LIB_ROOT);
69
+
70
+
71
+ if (normalized.startsWith(normalizedLibRoot)) {
72
+ return true;
72
73
  }
73
- }
74
- return null;
75
- }
76
74
 
75
+
76
+ const basename = path.basename(normalized);
77
+
78
+
79
+
80
+
81
+
82
+ if (basename === "index.mjs" || basename === "index.cjs") {
83
+ return true;
84
+ }
77
85
 
78
- function pickFallbackBaseFile() {
79
- for (const cs of getStack(pickFallbackBaseFile)) {
80
- const f = toFsPath(cs?.getFileName?.());
81
- if (!f) continue;
82
- if (f.startsWith?.("node:internal")) continue;
83
- if (f === THIS_FILE) continue;
84
- if (f.startsWith(THIS_DIR + path.sep)) continue;
85
- if (path.basename(f).toLowerCase() === "slothlet.mjs") continue;
86
- return f;
86
+ return false;
87
87
  }
88
- return THIS_FILE;
89
- }
90
-
91
88
 
89
+
90
+ #findCallerBase() {
91
+ const stack = this.#getStack();
92
+ const files = stack.map((s) => this.toFsPath(s.getFileName())).filter(Boolean);
92
93
 
94
+
95
+ const slothletIndex = files.findIndex((f) => path.basename(f).toLowerCase() === "slothlet.mjs");
96
+
97
+ if (slothletIndex === -1) {
98
+
99
+ for (const file of files) {
100
+ if (!this.#isSlothletInternal(file)) {
101
+ return file;
102
+ }
103
+ }
104
+
105
+
106
+
107
+
108
+
109
+ return null;
110
+ }
93
111
 
94
- function resolveWith(rel, makePrimary, exists, makeFallback) {
95
- if (typeof rel !== "string") throw new TypeError("rel must be a string");
112
+
113
+ for (let i = slothletIndex + 1; i < files.length; i++) {
114
+ const file = files[i];
96
115
 
97
-
98
- const primaryBase = pickPrimaryBaseFile() ?? pickFallbackBaseFile();
99
- const primary = makePrimary(primaryBase, rel);
100
- if (exists(primary)) return primary;
116
+
117
+ if (file.startsWith?.("node:")) continue;
101
118
 
102
- const fbBase = pickFallbackBaseFile();
103
- return makeFallback(fbBase, rel);
104
- }
119
+
120
+ if (this.#isSlothletInternal(file)) continue;
105
121
 
122
+
123
+ return file;
124
+ }
106
125
 
126
+
127
+
128
+
129
+
130
+
131
+
132
+ for (const file of files) {
133
+ if (!this.#isSlothletInternal(file)) {
134
+ return file;
135
+ }
136
+ }
107
137
 
138
+
139
+
140
+
141
+
142
+ return null;
143
+ }
108
144
 
109
- export function resolvePathFromCaller(rel) {
110
145
 
111
- if (rel.startsWith?.("file://")) return fileURLToPath(rel);
112
- if (path.isAbsolute(rel)) return rel;
146
+ resolvePathFromCaller(rel) {
147
+
148
+ if (rel.startsWith?.("file://")) return fileURLToPath(rel);
149
+ if (path.isAbsolute(rel)) return rel;
113
150
 
114
- return resolveWith(
115
- rel,
116
151
 
117
- (baseFile, r) => path.resolve(path.dirname(baseFile), r),
152
+ const callerFile = this.#findCallerBase();
153
+
118
154
 
119
- (candidate) => fs.existsSync(candidate),
120
155
 
121
- (baseFile, r) => path.resolve(path.dirname(baseFile), r)
122
- );
123
- }
156
+
157
+
158
+ if (!callerFile) {
159
+
160
+ return path.resolve(process.cwd(), rel);
161
+ }
124
162
 
163
+
164
+ const callerDir = path.dirname(callerFile);
165
+ const resolved = path.resolve(callerDir, rel);
125
166
 
126
- export function resolveUrlFromCaller(rel) {
127
-
128
- if (rel.startsWith?.("file://")) return rel;
129
- if (path.isAbsolute(rel)) return pathToFileURL(rel).href;
167
+
168
+ if (fs.existsSync(resolved)) {
169
+ return resolved;
170
+ }
130
171
 
131
- return resolveWith(
132
- rel,
133
172
 
134
- (baseFile, r) => new URL(r, pathToFileURL(baseFile)).href,
173
+ const cwdResolved = path.resolve(process.cwd(), rel);
174
+ if (fs.existsSync(cwdResolved)) {
175
+ return cwdResolved;
176
+ }
177
+
135
178
 
136
- (href) => fs.existsSync(fileURLToPath(href)),
137
179
 
138
- (baseFile, r) => new URL(r, pathToFileURL(baseFile)).href
139
- );
180
+ return resolved;
181
+ }
140
182
  }
141
-
142
-