@cldmv/slothlet 3.2.0 → 3.2.3
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/AGENT-USAGE.md +129 -0
- package/README.md +9 -13
- package/dist/lib/builders/api_builder.mjs +1 -3
- package/dist/lib/handlers/metadata.mjs +2 -0
- package/dist/lib/handlers/unified-wrapper.mjs +17 -1
- package/dist/lib/handlers/version-manager.mjs +135 -7
- package/package.json +1 -1
- package/types/dist/lib/builders/api_builder.d.mts.map +1 -1
- package/types/dist/lib/handlers/metadata.d.mts.map +1 -1
- package/types/dist/lib/handlers/unified-wrapper.d.mts.map +1 -1
- package/types/dist/lib/handlers/version-manager.d.mts.map +1 -1
package/AGENT-USAGE.md
CHANGED
|
@@ -409,6 +409,34 @@ export const secureOperation = {
|
|
|
409
409
|
|
|
410
410
|
---
|
|
411
411
|
|
|
412
|
+
## 🌍 Environment Snapshot (v3.1+)
|
|
413
|
+
|
|
414
|
+
Slothlet captures a **frozen snapshot of `process.env` at init time** and exposes it at `api.slothlet.env`. The snapshot is deeply read-only — mutating `process.env` after init does not affect `api.slothlet.env`.
|
|
415
|
+
|
|
416
|
+
```js
|
|
417
|
+
const api = await slothlet({
|
|
418
|
+
dir: "./api",
|
|
419
|
+
env: true,
|
|
420
|
+
// env: { include: ["NODE_ENV", "DATABASE_URL", "PORT"] } // allowlist
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
// Access inside any module:
|
|
424
|
+
import { self } from "@cldmv/slothlet/runtime";
|
|
425
|
+
|
|
426
|
+
export const getConfig = () => ({
|
|
427
|
+
mode: self.slothlet.env.NODE_ENV,
|
|
428
|
+
dbUrl: self.slothlet.env.DATABASE_URL
|
|
429
|
+
});
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
**Key behaviors:**
|
|
433
|
+
- `env: true` → all `process.env` variables are captured
|
|
434
|
+
- `env: { include: [...] }` → only the listed keys are captured (recommended for security)
|
|
435
|
+
- `api.slothlet.env` is a frozen object — writes throw in strict mode
|
|
436
|
+
- Snapshot is taken at init time — late `process.env` mutations are NOT reflected
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
412
440
|
## 🔁 Hot Reload / Dynamic API Management
|
|
413
441
|
|
|
414
442
|
```js
|
|
@@ -457,6 +485,69 @@ api.slothlet.lifecycle.off("materialized:complete", handler);
|
|
|
457
485
|
|
|
458
486
|
---
|
|
459
487
|
|
|
488
|
+
## 🔀 API Path Versioning (v3.2+)
|
|
489
|
+
|
|
490
|
+
Mount multiple versions of the same logical path and dispatch to the correct version automatically based on the caller's version metadata.
|
|
491
|
+
|
|
492
|
+
### Setup
|
|
493
|
+
|
|
494
|
+
```js
|
|
495
|
+
const api = await slothlet({
|
|
496
|
+
dir: "./api",
|
|
497
|
+
versionDispatcher: "version" // use caller's versionMetadata.version field
|
|
498
|
+
// versionDispatcher: (allVersions, caller) => { ... } // custom function
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
// Register versioned modules — 4th argument is versionConfig
|
|
502
|
+
await api.slothlet.api.add("auth", "./api/v1", {}, { version: "v1", default: true });
|
|
503
|
+
await api.slothlet.api.add("auth", "./api/v2", {}, { version: "v2" });
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
### Access Patterns
|
|
507
|
+
|
|
508
|
+
```js
|
|
509
|
+
// Dispatcher — routes via discriminator (use this in most cases)
|
|
510
|
+
api.auth.login(user, pass) // → routes to v1 or v2 based on caller metadata
|
|
511
|
+
|
|
512
|
+
// Direct versioned access — bypasses dispatcher entirely
|
|
513
|
+
api.v1.auth.login(user, pass) // → always v1
|
|
514
|
+
api.v2.auth.login(user, pass) // → always v2
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
### Attaching Version Metadata to a Caller
|
|
518
|
+
|
|
519
|
+
```js
|
|
520
|
+
// Register a module WITH a version tag so the discriminator can use it
|
|
521
|
+
await api.slothlet.api.add("services/payments", "./payments", {}, {
|
|
522
|
+
version: "v2",
|
|
523
|
+
metadata: { stable: true } // versionConfig.metadata — stored in VersionManager only
|
|
524
|
+
});
|
|
525
|
+
|
|
526
|
+
// options.metadata (3rd arg) → regular Metadata system (metadata.caller() etc.)
|
|
527
|
+
// versionConfig.metadata (4th arg) → version-system only, used by the discriminator
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
### Runtime Version Management
|
|
531
|
+
|
|
532
|
+
```js
|
|
533
|
+
// List registered versions for a path
|
|
534
|
+
api.slothlet.versioning.list("auth");
|
|
535
|
+
// → { versions: { v1: { ... }, v2: { ... } }, default: "v2" }
|
|
536
|
+
|
|
537
|
+
// Change the default dispatcher fallback
|
|
538
|
+
api.slothlet.versioning.setDefault("auth", "v1");
|
|
539
|
+
|
|
540
|
+
// Unregister a version (removes api.v1.auth; dispatcher updates automatically)
|
|
541
|
+
await api.slothlet.versioning.unregister("auth", "v1");
|
|
542
|
+
|
|
543
|
+
// Read version metadata stored at registration
|
|
544
|
+
api.slothlet.versioning.getVersionMetadata(moduleID);
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
> 📖 See [`docs/VERSIONING.md`](docs/VERSIONING.md) for full documentation.
|
|
548
|
+
|
|
549
|
+
---
|
|
550
|
+
|
|
460
551
|
## 📁 File Organization Best Practices
|
|
461
552
|
|
|
462
553
|
### ✅ Clean Folder Structure
|
|
@@ -550,6 +641,41 @@ api.slothlet.lifecycle.on("materialized:complete", handler);
|
|
|
550
641
|
api.slothlet.lifecycle.off("materialized:complete", handler);
|
|
551
642
|
```
|
|
552
643
|
|
|
644
|
+
### ❌ Mistake 6: Assuming `api.v1.auth` Goes Through the Dispatcher
|
|
645
|
+
|
|
646
|
+
```js
|
|
647
|
+
// ❌ WRONG — direct versioned path bypasses the discriminator entirely
|
|
648
|
+
api.v1.auth.login(user, pass); // always v1, no routing logic
|
|
649
|
+
|
|
650
|
+
// ✅ CORRECT — use the logical dispatcher path for dynamic routing
|
|
651
|
+
api.auth.login(user, pass); // routes based on caller version metadata
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
### ❌ Mistake 7: Wrong Config Key for Versioning
|
|
655
|
+
|
|
656
|
+
```js
|
|
657
|
+
// ❌ WRONG
|
|
658
|
+
const api = await slothlet({ dir: "./api", versionResolver: "version" });
|
|
659
|
+
|
|
660
|
+
// ✅ CORRECT
|
|
661
|
+
const api = await slothlet({ dir: "./api", versionDispatcher: "version" });
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
### ❌ Mistake 8: Conflating versionConfig.metadata with options.metadata
|
|
665
|
+
|
|
666
|
+
```js
|
|
667
|
+
// ❌ WRONG — puts version tag in the regular Metadata system instead of VersionManager
|
|
668
|
+
await api.slothlet.api.add("auth", "./v2", { metadata: { version: "v2" } });
|
|
669
|
+
|
|
670
|
+
// ✅ CORRECT
|
|
671
|
+
// options.metadata (3rd arg) → regular Metadata system (metadata.caller() etc.)
|
|
672
|
+
// versionConfig.metadata (4th arg) → VersionManager only, used by the discriminator
|
|
673
|
+
await api.slothlet.api.add("auth", "./v2",
|
|
674
|
+
{ metadata: { role: "core" } },
|
|
675
|
+
{ version: "v2", metadata: { stable: true } }
|
|
676
|
+
);
|
|
677
|
+
```
|
|
678
|
+
|
|
553
679
|
---
|
|
554
680
|
|
|
555
681
|
## ✅ AI Agent Checklist
|
|
@@ -563,6 +689,9 @@ api.slothlet.lifecycle.off("materialized:complete", handler);
|
|
|
563
689
|
- [ ] **Lifecycle** uses `api.slothlet.lifecycle.on/off()` only
|
|
564
690
|
- [ ] **Lazy mode**: if using background materialization, use `api.slothlet.materialize.wait()` before accessing the API
|
|
565
691
|
- [ ] **Hook subsets**: auth/security → `subset: "before"`, main logic → `"primary"`, audit → `"after"`
|
|
692
|
+
- [ ] **Versioning config key is `versionDispatcher:`**, not `versionResolver:` or `versionDiscriminator:`
|
|
693
|
+
- [ ] **Use `api.auth` (dispatcher path) for dynamic routing**, not `api.v1.auth` (direct path bypasses discriminator)
|
|
694
|
+
- [ ] **`versionConfig.metadata` (4th arg)** and **`options.metadata` (3rd arg)** are separate systems — don't conflate them
|
|
566
695
|
- [ ] **Double quotes everywhere** - follow Slothlet coding standards
|
|
567
696
|
|
|
568
697
|
---
|
package/README.md
CHANGED
|
@@ -55,22 +55,18 @@ Every feature has been hardened with a comprehensive test suite - over **5,300 t
|
|
|
55
55
|
|
|
56
56
|
## ✨ What's New
|
|
57
57
|
|
|
58
|
-
### Latest: v3.2.
|
|
58
|
+
### Latest: v3.2.3 (April 2026)
|
|
59
59
|
|
|
60
|
-
- **
|
|
61
|
-
-
|
|
62
|
-
- **`api.slothlet.versioning.*`** — runtime management: `list()`, `setDefault()`, `unregister()`, `getVersionMetadata()`
|
|
63
|
-
- **Separate version metadata** — `versionConfig.metadata` stored in VersionManager; never merged with `options.metadata` (regular Metadata system)
|
|
64
|
-
- **Shutdown race fix** — `shutdown()` now drains in-flight lazy-mode ESM `import()` calls before teardown, preventing unhandled rejections on worker exit
|
|
65
|
-
- [View full v3.2.0 Changelog](./docs/changelog/v3/v3.2.0.md)
|
|
60
|
+
- **Publish workflow fix** — switched CI trigger from `pull_request` to `push` on master so releases publish immediately on merge without depending on the PR event payload
|
|
61
|
+
- [View full v3.2.3 Changelog](./docs/changelog/v3/v3.2.3.md)
|
|
66
62
|
|
|
67
63
|
### Recent Releases
|
|
68
64
|
|
|
65
|
+
- **v3.2.2** (April 2026) — missing `set` trap on version dispatchers; `util.inspect(api.auth)` now shows resolved versioned namespace ([Changelog](./docs/changelog/v3/v3.2.2.md))
|
|
66
|
+
- **v3.2.1** (April 2026) — version-dispatcher `defineProperty` trap fix; pre-commit validation cleanup ([Changelog](./docs/changelog/v3/v3.2.1.md))
|
|
67
|
+
- **v3.2.0** (April 2026) — API Path Versioning (`versionDispatcher`, `api.slothlet.versioning.*`, version metadata, dispatcher proxy); lazy-mode shutdown race fix ([Changelog](./docs/changelog/v3/v3.2.0.md))
|
|
69
68
|
- **v3.1.0** (March 2026) — Frozen `api.slothlet.env` snapshot; `env.include` allowlist; reload immunity ([Changelog](./docs/changelog/v3/v3.1.0.md))
|
|
70
|
-
|
|
71
|
-
- **v3.0.0** (February 2026) — Unified Wrapper architecture, redesigned hook system, full i18n, background materialization, lifecycle events, collision modes, mutation controls ([Changelog](./docs/changelog/v3.0.md))
|
|
72
|
-
- **v2.11.0** — AddApi Special File Pattern (Rule 11), smart flattening enhancements ([Changelog](https://github.com/CLDMV/slothlet/blob/master/docs/changelog/v2.11.md))
|
|
73
|
-
- **v2.10.0** — Function metadata tagging and introspection capabilities ([Changelog](https://github.com/CLDMV/slothlet/blob/master/docs/changelog/v2.10.md))
|
|
69
|
+
|
|
74
70
|
|
|
75
71
|
📚 **For complete version history and detailed release notes, see [docs/changelog/](./docs/changelog/) folder.**
|
|
76
72
|
|
|
@@ -157,7 +153,7 @@ Automatic context preservation across all asynchronous boundaries:
|
|
|
157
153
|
- **TypeScript-Friendly**: Comprehensive JSDoc annotations with auto-generated declarations
|
|
158
154
|
- **Configurable Debug**: Detailed logging via CLI flags or environment variables
|
|
159
155
|
- **Multiple Instances**: Parameter-based isolation for complex applications
|
|
160
|
-
- **Inspectable APIs**: `console.log(api.math)`
|
|
156
|
+
- **Inspectable APIs**: `console.log(api.math)` and logical versioned paths like `console.log(api.auth)` show real module contents instead of proxy internals (v3+)
|
|
161
157
|
- **Development Checks**: Built-in environment detection with silent production behavior
|
|
162
158
|
|
|
163
159
|
---
|
|
@@ -972,7 +968,7 @@ try {
|
|
|
972
968
|
- **Debug Mode**: Comprehensive i18n-translated logging via `--slothletdebug` flag or `SLOTHLET_DEBUG=true`
|
|
973
969
|
- **Development Check**: `devcheck.mjs` for environment validation
|
|
974
970
|
- **Source Detection**: Automatic `src/` vs `dist/` mode detection
|
|
975
|
-
- **API Inspection**: `console.log(api.math)`
|
|
971
|
+
- **API Inspection**: `console.log(api.math)` and versioned dispatcher paths like `console.log(api.auth)` show real module contents (v3+)
|
|
976
972
|
|
|
977
973
|
---
|
|
978
974
|
|
|
@@ -584,9 +584,7 @@ export class ApiBuilder extends ComponentBase {
|
|
|
584
584
|
throw new slothlet.SlothletError("METADATA_NOT_AVAILABLE", {
|
|
585
585
|
handlersKeys: slothlet.handlers
|
|
586
586
|
? Object.keys(slothlet.handlers).join(", ")
|
|
587
|
-
:
|
|
588
|
-
|
|
589
|
-
"undefined",
|
|
587
|
+
: "undefined",
|
|
590
588
|
validationError: true
|
|
591
589
|
});
|
|
592
590
|
}
|
|
@@ -1342,6 +1342,8 @@ export class UnifiedWrapper extends ComponentBase {
|
|
|
1342
1342
|
|
|
1343
1343
|
|
|
1344
1344
|
|
|
1345
|
+
|
|
1346
|
+
|
|
1345
1347
|
wrapper._materialize().catch(() => {});
|
|
1346
1348
|
}
|
|
1347
1349
|
|
|
@@ -1900,7 +1902,9 @@ export class UnifiedWrapper extends ComponentBase {
|
|
|
1900
1902
|
!wrapper.____slothletInternal.state.materialized &&
|
|
1901
1903
|
wrapper.____slothletInternal.materializeFunc
|
|
1902
1904
|
) {
|
|
1903
|
-
|
|
1905
|
+
|
|
1906
|
+
|
|
1907
|
+
wrapper._materialize().catch(() => {});
|
|
1904
1908
|
}
|
|
1905
1909
|
|
|
1906
1910
|
|
|
@@ -2054,6 +2058,8 @@ export class UnifiedWrapper extends ComponentBase {
|
|
|
2054
2058
|
!wrapper.____slothletInternal.state.materialized &&
|
|
2055
2059
|
!wrapper.____slothletInternal.state.inFlight
|
|
2056
2060
|
) {
|
|
2061
|
+
|
|
2062
|
+
|
|
2057
2063
|
wrapper._materialize().catch(() => {});
|
|
2058
2064
|
}
|
|
2059
2065
|
|
|
@@ -2305,6 +2311,8 @@ export class UnifiedWrapper extends ComponentBase {
|
|
|
2305
2311
|
!cachedWrapper.____slothletInternal.state.materialized &&
|
|
2306
2312
|
!cachedWrapper.____slothletInternal.state.inFlight
|
|
2307
2313
|
) {
|
|
2314
|
+
|
|
2315
|
+
|
|
2308
2316
|
cachedWrapper._materialize().catch(() => {});
|
|
2309
2317
|
}
|
|
2310
2318
|
}
|
|
@@ -2565,6 +2573,8 @@ export class UnifiedWrapper extends ComponentBase {
|
|
|
2565
2573
|
!wrapper.____slothletInternal.state.materialized &&
|
|
2566
2574
|
!wrapper.____slothletInternal.state.inFlight
|
|
2567
2575
|
) {
|
|
2576
|
+
|
|
2577
|
+
|
|
2568
2578
|
wrapper._materialize().catch(() => {});
|
|
2569
2579
|
}
|
|
2570
2580
|
|
|
@@ -2772,6 +2782,8 @@ export class UnifiedWrapper extends ComponentBase {
|
|
|
2772
2782
|
!wrapper.____slothletInternal.state.materialized &&
|
|
2773
2783
|
!wrapper.____slothletInternal.state.inFlight
|
|
2774
2784
|
) {
|
|
2785
|
+
|
|
2786
|
+
|
|
2775
2787
|
wrapper._materialize().catch(() => {});
|
|
2776
2788
|
}
|
|
2777
2789
|
|
|
@@ -2799,6 +2811,8 @@ export class UnifiedWrapper extends ComponentBase {
|
|
|
2799
2811
|
!wrapper.____slothletInternal.state.materialized &&
|
|
2800
2812
|
!wrapper.____slothletInternal.state.inFlight
|
|
2801
2813
|
) {
|
|
2814
|
+
|
|
2815
|
+
|
|
2802
2816
|
wrapper._materialize().catch(() => {});
|
|
2803
2817
|
}
|
|
2804
2818
|
|
|
@@ -2848,6 +2862,8 @@ export class UnifiedWrapper extends ComponentBase {
|
|
|
2848
2862
|
!wrapper.____slothletInternal.state.materialized &&
|
|
2849
2863
|
!wrapper.____slothletInternal.state.inFlight
|
|
2850
2864
|
) {
|
|
2865
|
+
|
|
2866
|
+
|
|
2851
2867
|
wrapper._materialize().catch(() => {});
|
|
2852
2868
|
}
|
|
2853
2869
|
|
|
@@ -212,6 +212,8 @@ export class VersionManager extends ComponentBase {
|
|
|
212
212
|
});
|
|
213
213
|
}
|
|
214
214
|
const ve = entry.versions.get(versionTag);
|
|
215
|
+
|
|
216
|
+
|
|
215
217
|
const existing = this.#versionMetadataByModule.get(ve.moduleID) ?? {};
|
|
216
218
|
|
|
217
219
|
this.#versionMetadataByModule.set(ve.moduleID, {
|
|
@@ -435,6 +437,8 @@ export class VersionManager extends ComponentBase {
|
|
|
435
437
|
let node = this.slothlet.api;
|
|
436
438
|
|
|
437
439
|
|
|
440
|
+
|
|
441
|
+
|
|
438
442
|
const segments = Array.isArray(apiPath) ? apiPath : apiPath.split(".");
|
|
439
443
|
for (const segment of segments) {
|
|
440
444
|
|
|
@@ -504,6 +508,30 @@ export class VersionManager extends ComponentBase {
|
|
|
504
508
|
return manager.#walkApiPath([versionTag, ...logicalPath.split(".")]);
|
|
505
509
|
};
|
|
506
510
|
|
|
511
|
+
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
target[Symbol.for("nodejs.util.inspect.custom")] = function (_depth, options, inspectFn) {
|
|
517
|
+
const vw = resolveVersionedWrapper();
|
|
518
|
+
if (vw) {
|
|
519
|
+
try {
|
|
520
|
+
return typeof inspectFn === "function" ? inspectFn(vw, options) : inspect(vw, options);
|
|
521
|
+
} catch {
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
void 0;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
const entry = manager.#registry.get(logicalPath);
|
|
531
|
+
const versions = entry ? Array.from(entry.versions.keys()) : [];
|
|
532
|
+
return { __versionDispatcher: logicalPath, versions };
|
|
533
|
+
};
|
|
534
|
+
|
|
507
535
|
const handlers = {
|
|
508
536
|
|
|
509
537
|
get(t, prop) {
|
|
@@ -562,24 +590,26 @@ export class VersionManager extends ComponentBase {
|
|
|
562
590
|
|
|
563
591
|
|
|
564
592
|
|
|
565
|
-
|
|
566
|
-
|
|
593
|
+
|
|
594
|
+
if (prop === inspect.custom) {
|
|
595
|
+
return (_depth, options, inspectFn) => {
|
|
567
596
|
const vw = resolveVersionedWrapper();
|
|
568
597
|
if (vw) {
|
|
569
598
|
try {
|
|
570
|
-
return inspect(vw);
|
|
599
|
+
return typeof inspectFn === "function" ? inspectFn(vw, options) : inspect(vw, options);
|
|
571
600
|
} catch {
|
|
572
601
|
|
|
602
|
+
|
|
573
603
|
void 0;
|
|
574
604
|
}
|
|
575
605
|
}
|
|
576
606
|
|
|
607
|
+
|
|
577
608
|
const entry = manager.#registry.get(logicalPath);
|
|
578
609
|
const versions = entry ? Array.from(entry.versions.keys()) : [];
|
|
579
610
|
return { __versionDispatcher: logicalPath, versions };
|
|
580
611
|
};
|
|
581
612
|
}
|
|
582
|
-
|
|
583
613
|
|
|
584
614
|
|
|
585
615
|
if (prop === "toString") return () => `[VersionDispatcher: ${logicalPath}]`;
|
|
@@ -678,14 +708,112 @@ export class VersionManager extends ComponentBase {
|
|
|
678
708
|
|
|
679
709
|
|
|
680
710
|
getOwnPropertyDescriptor(t, prop) {
|
|
681
|
-
|
|
682
711
|
const targetDesc = Reflect.getOwnPropertyDescriptor(t, prop);
|
|
683
|
-
if (targetDesc)
|
|
712
|
+
if (targetDesc) {
|
|
713
|
+
if (!targetDesc.configurable) {
|
|
714
|
+
|
|
715
|
+
|
|
716
|
+
|
|
717
|
+
|
|
718
|
+
|
|
719
|
+
return targetDesc;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
|
|
723
|
+
return { configurable: true, enumerable: true, writable: false, value: t[prop] };
|
|
724
|
+
}
|
|
684
725
|
|
|
685
726
|
|
|
686
727
|
|
|
687
|
-
|
|
688
728
|
return { configurable: true, enumerable: true, writable: false, value: undefined };
|
|
729
|
+
},
|
|
730
|
+
|
|
731
|
+
|
|
732
|
+
defineProperty(t, prop, descriptor) {
|
|
733
|
+
const vw = resolveVersionedWrapper();
|
|
734
|
+
|
|
735
|
+
|
|
736
|
+
|
|
737
|
+
if (!vw) return Reflect.defineProperty(t, prop, descriptor);
|
|
738
|
+
if (descriptor.configurable === false) {
|
|
739
|
+
|
|
740
|
+
|
|
741
|
+
|
|
742
|
+
|
|
743
|
+
|
|
744
|
+
|
|
745
|
+
const shadow = Object.create(Reflect.getPrototypeOf(t));
|
|
746
|
+
const currentDescriptor = Reflect.getOwnPropertyDescriptor(t, prop);
|
|
747
|
+
if (currentDescriptor) {
|
|
748
|
+
Reflect.defineProperty(shadow, prop, currentDescriptor);
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
|
|
752
|
+
|
|
753
|
+
|
|
754
|
+
|
|
755
|
+
|
|
756
|
+
|
|
757
|
+
if (!Reflect.isExtensible(t)) {
|
|
758
|
+
Reflect.preventExtensions(shadow);
|
|
759
|
+
}
|
|
760
|
+
if (!Reflect.defineProperty(shadow, prop, descriptor)) return false;
|
|
761
|
+
|
|
762
|
+
if (!Reflect.defineProperty(vw, prop, descriptor)) return false;
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
|
|
766
|
+
return Reflect.defineProperty(t, prop, descriptor);
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
return Reflect.defineProperty(vw, prop, descriptor);
|
|
770
|
+
},
|
|
771
|
+
|
|
772
|
+
|
|
773
|
+
set(t, prop, value) {
|
|
774
|
+
|
|
775
|
+
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
|
|
779
|
+
if (typeof prop === "symbol") return true;
|
|
780
|
+
|
|
781
|
+
|
|
782
|
+
if (prop === "____slothletInternal" || prop === "_impl" || prop === "__impl" || prop === "__state" || prop === "__invalid")
|
|
783
|
+
return true;
|
|
784
|
+
|
|
785
|
+
|
|
786
|
+
if (
|
|
787
|
+
prop === "__isVersionDispatcher" ||
|
|
788
|
+
prop === "__mode" ||
|
|
789
|
+
prop === "__apiPath" ||
|
|
790
|
+
prop === "__slothletPath" ||
|
|
791
|
+
prop === "__isCallable" ||
|
|
792
|
+
prop === "__materializeOnCreate" ||
|
|
793
|
+
prop === "__materialized" ||
|
|
794
|
+
prop === "__inFlight" ||
|
|
795
|
+
prop === "__displayName" ||
|
|
796
|
+
prop === "__moduleID" ||
|
|
797
|
+
prop === "_materialize" ||
|
|
798
|
+
prop === "length" ||
|
|
799
|
+
prop === "name"
|
|
800
|
+
)
|
|
801
|
+
return true;
|
|
802
|
+
|
|
803
|
+
|
|
804
|
+
if (prop === "then" || prop === "constructor" || prop === "toString" || prop === "valueOf" || prop === "toJSON") return true;
|
|
805
|
+
|
|
806
|
+
const vw = resolveVersionedWrapper();
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
|
|
812
|
+
if (!vw) return true;
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
|
|
816
|
+
return Reflect.set(vw, prop, value, vw);
|
|
689
817
|
}
|
|
690
818
|
};
|
|
691
819
|
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api_builder.d.mts","sourceRoot":"","sources":["../../../../dist/lib/builders/api_builder.mjs"],"names":[],"mappings":"AAyEA;;;;;;;;;;;;;GAaG;AACH;IACC,gCAAuC;IAcvC;;;;;OAKG;IACH,oCAHa,OAAO,KAAQ,CAiG3B;IAED;;;;;;;;;;;OAWG;IACH,
|
|
1
|
+
{"version":3,"file":"api_builder.d.mts","sourceRoot":"","sources":["../../../../dist/lib/builders/api_builder.mjs"],"names":[],"mappings":"AAyEA;;;;;;;;;;;;;GAaG;AACH;IACC,gCAAuC;IAcvC;;;;;OAKG;IACH,oCAHa,OAAO,KAAQ,CAiG3B;IAED;;;;;;;;;;;OAWG;IACH,gCAyuCC;IAED;;;;OAIG;IACH,+BAYC;IAED;;;;OAIG;IACH,0BAgCC;IAED;;;;OAIG;IACH,4BAoMC;IAED;;;;;OAKG;IACH,8BAyCC;IAED;;;;;OAKG;IACH,uBAgCC;CACD;;;;;;;;;;;;;;;;;;;;;;;;;;8BArwD6B,0CAA0C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/metadata.mjs"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH;IACC,gCAAqC;IASrC,iBAAmB;IAkCnB;;;;;;;;;;;;;;;OAeG;IACH,0BAyCC;IAED;;;;;OAKG;IACH,0BAJW,cAAe,GACb,MAAO,IAAI,CAYvB;IAED;;;;;;OAMG;IACH,2BAJW,cAAe,OAoEzB;IAED;;;;;OAKG;IACH,8BAJW,MAAM,SACN,OAAO,QAKjB;IAED;;;;;;OAMG;IACH,8CAJW,MAAM,SACN,OAAO,QA+CjB;IAED;;;;;;;;OAQG;IACH,kDANW,MAAM,GAAC,MAAM,EAAE,GAAC;YAAO,MAAM,GAAE,MAAM,EAAE;KAAC,QAkFlD;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,iCAJW,MAAM,uBA2BhB;IAED;;;;;;;;;OASG;IACH,qCAHW,MAAM,QAMhB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,gCALW,MAAM,YACN,MAAM,MAAO,UACb,OAAO,QAyBjB;IAED;;;;;;;;;;;;;OAaG;IACH,gCANW,MAAM,
|
|
1
|
+
{"version":3,"file":"metadata.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/metadata.mjs"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH;IACC,gCAAqC;IASrC,iBAAmB;IAkCnB;;;;;;;;;;;;;;;OAeG;IACH,0BAyCC;IAED;;;;;OAKG;IACH,0BAJW,cAAe,GACb,MAAO,IAAI,CAYvB;IAED;;;;;;OAMG;IACH,2BAJW,cAAe,OAoEzB;IAED;;;;;OAKG;IACH,8BAJW,MAAM,SACN,OAAO,QAKjB;IAED;;;;;;OAMG;IACH,8CAJW,MAAM,SACN,OAAO,QA+CjB;IAED;;;;;;;;OAQG;IACH,kDANW,MAAM,GAAC,MAAM,EAAE,GAAC;YAAO,MAAM,GAAE,MAAM,EAAE;KAAC,QAkFlD;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,iCAJW,MAAM,uBA2BhB;IAED;;;;;;;;;OASG;IACH,qCAHW,MAAM,QAMhB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,gCALW,MAAM,YACN,MAAM,MAAO,UACb,OAAO,QAyBjB;IAED;;;;;;;;;;;;;OAaG;IACH,gCANW,MAAM,OAoBhB;IAED;;;;;;;;;;;;OAYG;IACH,mCAJW,MAAM,QACN,MAAM,GAAC,MAAM,EAAE,QA+BzB;IAED;;;;;;;;;;OAUG;IACH,mBAHa;QAAE,cAAc,MAAS;QAAC,iBAAiB,gBAAK;KAAE,CAe9D;IAED;;;;;;;;;;;;;;;OAeG;IACH,uBAHW;QAAE,cAAc,MAAS;QAAC,iBAAiB,gBAAK;KAAE,QAgC5D;IAED;;;;;;;;;;;;;OAaG;IACH,iBAJW,MAAM,GACJ,OAAO,CAAC,MAAM,GAAC,IAAI,CAAC,CAkChC;IAED;;;;;;;;;;;;;OAaG;IACH,eAHa,MAAM,CASlB;IAED;;;;;;;;;;;;OAYG;IACH,iBAHa,MAAM,GAAC,IAAI,CAOvB;;CACD;8BA9qB6B,0CAA0C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified-wrapper.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/unified-wrapper.mjs"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"unified-wrapper.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/unified-wrapper.mjs"],"names":[],"mappings":"AAgwGA;;;;;;;;;;;GAWG;AACH,sCAPW,OAAO,GACL,cAAc,GAAC,IAAI,CAkB/B;;;;;AA5qGD;;;;;;;;;;GAUG;AACH;IAiQC;;;;;;;;;;;;;;;;OAgBG;IACH,0BA8BC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,gCA0DC;IApWD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,+IAtBG;QAAwB,IAAI,EAApB,MAAM;QACU,OAAO,EAAvB,MAAM;QACW,WAAW;QACT,eAAe;QAChB,UAAU,GAA5B,OAAO;QACW,mBAAmB,GAArC,OAAO;QACU,QAAQ,GAAzB,MAAM;QACW,QAAQ,GAAzB,MAAM;QACW,YAAY,GAA7B,MAAM;KAEd,EA4KF;IA1MD;;;;;;;;;;;OAWG;IACH,4BAFa,MAAO,SAAS,CAK5B;IA+ND;;;;OAIG;IACH,qBAHa,MAAO,IAAI,CAKvB;IAkID;;;;;;;;;;;OAWG;IACH,sBAiCC;IAED;;;;;;;;;;;;OAYG;IACH,mBAgDC;IAED;;;;;;;;;OASG;IACH,qBAmDC;IAED;;;;OAIG;IACH,uBA+FC;IAED;;;;;;;;;OASG;IACH,qBAEC;IAED;;;;;;;;;OASG;IACH,sBAiBC;IAED;;;;;;;;;;OAUG;IACH,6BA2bC;IAED;;;;;;;;;;;OAWG;IACH,8BAwIC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,8BAmpBC;IAED;;;;;;OAMG;IACH,uCA4rCC;IAvVE,mBAA0B;IAzlF7B;;;OAGG;IACH,2EAFa,GAAC,CA8Bb;;CAi5FD;8BAxuG6B,0CAA0C;iBADvD,WAAW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-manager.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/version-manager.mjs"],"names":[],"mappings":"AAsGA;;;;;;;;;;GAUG;AACH;IACC,gCAA2C;IA8B3C;;;;;;;;;;;OAWG;IACH,6BATW,MAAM,cACN,MAAM,YACN,MAAM,eACN,MAAM,aACN,OAAO,GACL,IAAI,CAyDhB;IAED;;;;;;;;;OASG;IACH,+BANW,MAAM,cACN,MAAM,GACJ,OAAO,CAqCnB;IAED;;;;;;;;OAQG;IACH,iCALW,MAAM,GACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAMnE;IAED;;;;;;;;OAQG;IACH,2BALW,MAAM,GACJ,OAAO,CAMnB;IAED;;;;;;;;OAQG;IACH,6BALW,MAAM,GACJ,MAAM,GAAG,SAAS,CAM9B;IAED;;;;;;;;OAQG;IACH,sCANW,MAAM,cACN,MAAM,GACJ,MAAM,GAAG,SAAS,CAU9B;IAED;;;;;;;;;;;OAWG;IACH,sCARW,MAAM,cACN,MAAM,SACN,MAAM,GACJ,IAAI,
|
|
1
|
+
{"version":3,"file":"version-manager.d.mts","sourceRoot":"","sources":["../../../../dist/lib/handlers/version-manager.mjs"],"names":[],"mappings":"AAsGA;;;;;;;;;;GAUG;AACH;IACC,gCAA2C;IA8B3C;;;;;;;;;;;OAWG;IACH,6BATW,MAAM,cACN,MAAM,YACN,MAAM,eACN,MAAM,aACN,OAAO,GACL,IAAI,CAyDhB;IAED;;;;;;;;;OASG;IACH,+BANW,MAAM,cACN,MAAM,GACJ,OAAO,CAqCnB;IAED;;;;;;;;OAQG;IACH,iCALW,MAAM,GACJ;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAMnE;IAED;;;;;;;;OAQG;IACH,2BALW,MAAM,GACJ,OAAO,CAMnB;IAED;;;;;;;;OAQG;IACH,6BALW,MAAM,GACJ,MAAM,GAAG,SAAS,CAM9B;IAED;;;;;;;;OAQG;IACH,sCANW,MAAM,cACN,MAAM,GACJ,MAAM,GAAG,SAAS,CAU9B;IAED;;;;;;;;;;;OAWG;IACH,sCARW,MAAM,cACN,MAAM,SACN,MAAM,GACJ,IAAI,CAwBhB;IAED;;;;;;;;OAQG;IACH,kBANW,MAAM,GACJ;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,SAAS,CAcpE;IAED;;;;;;;;;;OAUG;IACH,wBAPW,MAAM,cACN,MAAM,GACJ,IAAI,CAwBhB;IAID;;;;;;;;;;;;;OAaG;IACH,+BANW,MAAM,GACJ,MAAM,GAAG,IAAI,CAqCzB;IAID;;;;;;;;;;;;OAYG;IACH,4BAPW,MAAM,eACN,MAAM,UACN,MAAM,GACJ,MAAM,GAAG,IAAI,CAkDzB;IAID;;;;;;;;;;;OAWG;IACH,iCANW,MAAM,GACJ,MAAM,CAmClB;IAED;;;;;;;;;;;OAWG;IACH,8BANW,MAAM,GAAG,IAAI,GAAG,SAAS,GACvB;QAAE,OAAO,EAAE,MAAM,GAAC,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,GAAC,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,GAAC,IAAI,CAAA;KAAE,CAkC3G;IA0DD;;;;;;;;;;;;OAYG;IACH,8BAPW,MAAM,GACJ,MAAM,CA6elB;IAED;;;;;;;;OAQG;IACH,8BALW,MAAM,GACJ,IAAI,CAiChB;IAED;;;;;;;OAOG;IACH,gCALW,MAAM,GACJ,IAAI,CAkBhB;IAID;;;;;;;;OAQG;IACH,kCALW,MAAM,GACJ,IAAI,CAmBhB;IAED;;;;;;;OAOG;IACH,YAJa,IAAI,CAShB;;CACD;8BAttC6B,0CAA0C"}
|