resetDependencies - greydragon888/real-router GitHub Wiki
-
What it does: Removes all dependencies, replacing the container with a fresh empty object (
Object.create(null)). Idempotent -- safe to call multiple times. -
When to use:
- For complete dependency cleanup
- In tests for isolation between test cases
- For complete dependency reinitialization
import { createRouter } from "@real-router/core";
import { getDependenciesApi } from "@real-router/core/api";
const router = createRouter<Dependencies>(routes, options, dependencies);
const depsApi = getDependenciesApi(router);
depsApi.reset(): voidimport { createRouter } from "@real-router/core";
import { getDependenciesApi } from "@real-router/core/api";
interface AppDependencies {
api: ApiClient;
analytics: Analytics;
store: Store;
}
const router = createRouter<AppDependencies>(
routes,
{},
{
api: new ApiClient(),
analytics: new Analytics(),
store: new Store(),
},
);
const depsApi = getDependenciesApi(router);
// Complete cleanup
depsApi.reset();
console.log(depsApi.getAll()); // {}
// In tests -- isolation
afterEach(() => {
depsApi.reset();
});
// Complete reinitialization pattern
depsApi.reset();
depsApi.set("api", newApiClient);
depsApi.set("analytics", newAnalytics);
depsApi.set("store", newStore);Method takes no parameters.
-
Type:
void
-
Removes all dependencies: Internal container is replaced with a fresh empty object (
Object.create(null)) -
Effect on other methods:
-
depsApi.getAll()returns{} -
depsApi.has(key)returnsfalsefor all keys -
depsApi.get(key)throwsReferenceErrorfor all keys
-
| Condition | Error Type | Code |
|---|---|---|
| Router disposed | RouterError |
ROUTER_DISPOSED |
Idempotent -- does not throw when called on an already-empty container.
router.dispose();
const depsApi = getDependenciesApi(router);
depsApi.reset();
// RouterError: ROUTER_DISPOSED| Method | When to use |
|---|---|
| getDependenciesApi().remove | Remove single dependency |
| getDependenciesApi().set | Set after reset |
| getDependenciesApi().setAll | Batch set after reset |
| getDependenciesApi().getAll | Check reset result |
const depsApi = getDependenciesApi(router);
// remove -- removes one dependency at a time
depsApi.remove("service1");
depsApi.remove("service2");
// reset -- removes all at once
depsApi.reset();-
Removes all dependencies:
getAll()returns{} - Idempotency: Safe to call multiple times, including on empty container
-
Throws after dispose:
RouterError(ROUTER_DISPOSED)
import { createRouter } from "@real-router/core";
import { getDependenciesApi } from "@real-router/core/api";
interface Deps {
foo?: number;
bar?: string;
}
const router = createRouter<Deps>([], {}, {});
const depsApi = getDependenciesApi(router);
// Removes all dependencies
depsApi.setAll({ foo: 5, bar: "test" });
depsApi.reset();
const all = depsApi.getAll();
expect(all).toStrictEqual({});
// Can set dependencies after reset
depsApi.reset();
depsApi.set("foo", 42);
expect(depsApi.get("foo")).toBe(42);depsApi.setAll({ foo: 1, bar: "value" });
depsApi.reset();
expect(depsApi.has("foo")).toBe(false);
expect(depsApi.has("bar")).toBe(false);depsApi.setAll({ foo: 1, bar: "test" });
depsApi.reset();
// All previous dependencies throw ReferenceError
expect(() => depsApi.get("foo")).toThrowError(ReferenceError);
expect(() => depsApi.get("bar")).toThrowError(ReferenceError);depsApi.setAll({ foo: 1, bar: "test" });
// First reset
depsApi.reset();
expect(depsApi.getAll()).toStrictEqual({});
// Second reset -- does not throw
expect(() => depsApi.reset()).not.toThrowError();
expect(depsApi.getAll()).toStrictEqual({});
// Third reset -- still safe
expect(() => depsApi.reset()).not.toThrowError();depsApi.reset(); // Already empty
// Does not throw
expect(() => depsApi.reset()).not.toThrowError();
expect(depsApi.getAll()).toStrictEqual({});depsApi.set("", "empty");
depsApi.set("api:v2", "colon");
depsApi.set("用户", "unicode");
depsApi.reset();
expect(depsApi.has("")).toBe(false);
expect(depsApi.has("api:v2")).toBe(false);
expect(depsApi.has("用户")).toBe(false);depsApi.set("foo", 0);
depsApi.set("bar", null);
depsApi.set("baz", false);
depsApi.reset();
expect(depsApi.has("foo")).toBe(false);
expect(depsApi.has("bar")).toBe(false);
expect(depsApi.has("baz")).toBe(false);// Initial setup
depsApi.setAll({ foo: 1, bar: "old" });
// Complete reinitialization
depsApi.reset();
depsApi.set("baz", "new1");
depsApi.set("qux", "new2");
// Old dependencies removed
expect(depsApi.has("foo")).toBe(false);
expect(depsApi.has("bar")).toBe(false);
// New dependencies set
expect(depsApi.get("baz")).toBe("new1");
expect(depsApi.get("qux")).toBe("new2");const depsApi = getDependenciesApi(router);
// Test 1
depsApi.set("testDep1", "value1");
expect(depsApi.has("testDep1")).toBe(true);
// Cleanup between tests
depsApi.reset();
// Test 2 -- does not see dependencies from test 1
expect(depsApi.has("testDep1")).toBe(false);
depsApi.set("testDep2", "value2");
expect(depsApi.has("testDep2")).toBe(true);
// Cleanup
depsApi.reset();
expect(depsApi.has("testDep2")).toBe(false);- Empty container: Safe to call
- Multiple calls: Idempotent
-
Special keys:
"", Unicode, special characters -- all removed -
Falsy values:
0,null,false-- all removed - After reset: Can set new dependencies
- Returns
void - Idempotency -- safe to call on empty container
- Throws
RouterError(ROUTER_DISPOSED)if router is disposed - All dependencies removed (including falsy values)
- All special keys removed (Unicode, empty string, special characters)
- Can set new dependencies after reset
- Integration with
has,get,getAll
| Before (router5) | After (real-router) |
|---|---|
router.resetDependencies() |
getDependenciesApi(router).reset() |
// Before (router5)
router.resetDependencies();
// After (real-router)
import { getDependenciesApi } from "@real-router/core/api";
const depsApi = getDependenciesApi(router);
depsApi.reset();Note: the return type changed from Router (fluent interface) to void.