react-native-roster 0.4.6 → 0.4.7
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 +6 -0
- package/dist/src/core/cache.d.ts +6 -3
- package/dist/src/core/cache.d.ts.map +1 -1
- package/dist/src/core/cache.js +24 -5
- package/dist/src/core/cache.js.map +1 -1
- package/dist/src/core/coverage.d.ts +2 -2
- package/dist/src/core/coverage.d.ts.map +1 -1
- package/dist/src/core/coverage.js +4 -3
- package/dist/src/core/coverage.js.map +1 -1
- package/dist/src/core/index.d.ts +1 -1
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/layout.d.ts +2 -2
- package/dist/src/core/layout.d.ts.map +1 -1
- package/dist/src/core/layout.js +5 -4
- package/dist/src/core/layout.js.map +1 -1
- package/dist/src/core/types.d.ts +2 -0
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/llms.txt +8 -4
- package/package.json +1 -1
- package/src/core/README.md +17 -1
- package/src/core/cache.ts +28 -6
- package/src/core/coverage.ts +8 -3
- package/src/core/index.ts +1 -0
- package/src/core/layout.ts +19 -4
- package/src/core/types.ts +3 -0
- package/src/index.ts +1 -0
package/README.md
CHANGED
|
@@ -256,6 +256,12 @@ render from. See [customization](https://github.com/simiancraft/react-native-ros
|
|
|
256
256
|
|
|
257
257
|
## Size and support
|
|
258
258
|
|
|
259
|
+
Core geometry and coverage caches accept an optional `ScopedCacheIdentity`. Keep one stable empty
|
|
260
|
+
identity object per dataset, and pass it to both `layoutLane` and `coverageFor`; independent
|
|
261
|
+
datasets then cannot collide when they reuse lane IDs and versions. Omitting the identity uses the
|
|
262
|
+
core-owned default, while deliberately reusing one identity shares target-warm coverage across
|
|
263
|
+
projections.
|
|
264
|
+
|
|
259
265
|
Minified, with peers external: `/core` is 13.6 kB and the root entry is 51.2 kB.
|
|
260
266
|
`/rrule` adds 12.9 kB of its own code plus its two dependencies, `rrule-temporal`
|
|
261
267
|
and `@js-temporal/polyfill`, which install with the package. Web runs in CI on
|
package/dist/src/core/cache.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { Coverage, LaneFlag, LaneGeometry, Rect } from './types';
|
|
2
|
-
export declare const
|
|
1
|
+
import type { Coverage, LaneFlag, LaneGeometry, Rect, ScopedCacheIdentity } from './types';
|
|
2
|
+
export declare const defaultScopedCacheIdentity: ScopedCacheIdentity;
|
|
3
|
+
type LayoutCache = Map<string, {
|
|
3
4
|
rects: Rect[];
|
|
4
5
|
gapRects: Rect[];
|
|
5
6
|
assemblies: WeakMap<Coverage, Map<LaneFlag, LaneGeometry>>;
|
|
6
7
|
}>;
|
|
7
|
-
export declare const coverageCache: Map<string, Coverage>;
|
|
8
8
|
export declare const counts: {
|
|
9
9
|
layout: {
|
|
10
10
|
runs: number;
|
|
@@ -24,6 +24,9 @@ export declare function coverageStats(): {
|
|
|
24
24
|
cacheHits: number;
|
|
25
25
|
};
|
|
26
26
|
export declare function resetStats(): void;
|
|
27
|
+
export declare function layoutCacheFor(cacheIdentity: ScopedCacheIdentity): LayoutCache;
|
|
28
|
+
export declare function coverageCacheFor(cacheIdentity: ScopedCacheIdentity): Map<string, Coverage>;
|
|
27
29
|
export declare function clearLayoutCache(): void;
|
|
28
30
|
export declare function clearCoverageCache(): void;
|
|
31
|
+
export {};
|
|
29
32
|
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/core/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/core/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE3F,eAAO,MAAM,0BAA0B,EAAE,mBAAwB,CAAC;AAElE,KAAK,WAAW,GAAG,GAAG,CACpB,MAAM,EACN;IACE,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;CAC5D,CACF,CAAC;AAIF,eAAO,MAAM,MAAM;IACjB,MAAM;QAAI,IAAI;QAAK,SAAS;;IAC5B,QAAQ;QAAI,IAAI;QAAK,SAAS;;CAC/B,CAAC;AAEF,wBAAgB,WAAW,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAEjE;AAED,wBAAgB,aAAa,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAEnE;AAED,wBAAgB,UAAU,IAAI,IAAI,CAKjC;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,mBAAmB,GAAG,WAAW,CAO9E;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAO1F;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
package/dist/src/core/cache.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.counts = exports.
|
|
3
|
+
exports.counts = exports.defaultScopedCacheIdentity = void 0;
|
|
4
4
|
exports.layoutStats = layoutStats;
|
|
5
5
|
exports.coverageStats = coverageStats;
|
|
6
6
|
exports.resetStats = resetStats;
|
|
7
|
+
exports.layoutCacheFor = layoutCacheFor;
|
|
8
|
+
exports.coverageCacheFor = coverageCacheFor;
|
|
7
9
|
exports.clearLayoutCache = clearLayoutCache;
|
|
8
10
|
exports.clearCoverageCache = clearCoverageCache;
|
|
9
|
-
exports.
|
|
10
|
-
|
|
11
|
+
exports.defaultScopedCacheIdentity = {};
|
|
12
|
+
let layoutCaches = new WeakMap();
|
|
13
|
+
let coverageCaches = new WeakMap();
|
|
11
14
|
exports.counts = {
|
|
12
15
|
layout: { runs: 0, cacheHits: 0 },
|
|
13
16
|
coverage: { runs: 0, cacheHits: 0 },
|
|
@@ -24,10 +27,26 @@ function resetStats() {
|
|
|
24
27
|
exports.counts.coverage.runs = 0;
|
|
25
28
|
exports.counts.coverage.cacheHits = 0;
|
|
26
29
|
}
|
|
30
|
+
function layoutCacheFor(cacheIdentity) {
|
|
31
|
+
let cache = layoutCaches.get(cacheIdentity);
|
|
32
|
+
if (!cache) {
|
|
33
|
+
cache = new Map();
|
|
34
|
+
layoutCaches.set(cacheIdentity, cache);
|
|
35
|
+
}
|
|
36
|
+
return cache;
|
|
37
|
+
}
|
|
38
|
+
function coverageCacheFor(cacheIdentity) {
|
|
39
|
+
let cache = coverageCaches.get(cacheIdentity);
|
|
40
|
+
if (!cache) {
|
|
41
|
+
cache = new Map();
|
|
42
|
+
coverageCaches.set(cacheIdentity, cache);
|
|
43
|
+
}
|
|
44
|
+
return cache;
|
|
45
|
+
}
|
|
27
46
|
function clearLayoutCache() {
|
|
28
|
-
|
|
47
|
+
layoutCaches = new WeakMap();
|
|
29
48
|
}
|
|
30
49
|
function clearCoverageCache() {
|
|
31
|
-
|
|
50
|
+
coverageCaches = new WeakMap();
|
|
32
51
|
}
|
|
33
52
|
//# sourceMappingURL=cache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/core/cache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/core/cache.ts"],"names":[],"mappings":";;;;;;;;;;AAEa,QAAA,0BAA0B,GAAwB,EAAE,CAAC;AAWlE,IAAI,YAAY,GAAG,IAAI,OAAO,EAAoC,CAAC;AACnE,IAAI,cAAc,GAAG,IAAI,OAAO,EAA8C,CAAC;AAClE,QAAA,MAAM,GAAG;IACpB,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;IACjC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;CACpC,CAAC;AAEF;IACE,OAAO,EAAE,GAAG,QAAA,MAAM,CAAC,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED;IACE,OAAO,EAAE,GAAG,QAAA,MAAM,CAAC,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED;IACE,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACvB,QAAA,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;IAC5B,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IACzB,QAAA,MAAM,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,wBAA+B,aAAkC;IAC/D,IAAI,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QAClB,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0BAAiC,aAAkC;IACjE,IAAI,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QAClB,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;IACE,YAAY,GAAG,IAAI,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED;IACE,cAAc,GAAG,IAAI,OAAO,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { Coverage, Lane, Window } from './types';
|
|
2
|
-
export declare function coverageFor(lane: Lane, window: Window): Coverage;
|
|
1
|
+
import type { Coverage, Lane, ScopedCacheIdentity, Window } from './types';
|
|
2
|
+
export declare function coverageFor(lane: Lane, window: Window, cacheIdentity?: ScopedCacheIdentity): Coverage;
|
|
3
3
|
//# sourceMappingURL=coverage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../src/core/coverage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAa,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../src/core/coverage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAa,mBAAmB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtF,wBAAgB,WAAW,CACzB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,mBAAgD,GAC9D,QAAQ,CA6BV"}
|
|
@@ -3,9 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.coverageFor = coverageFor;
|
|
4
4
|
const cache_1 = require("./cache");
|
|
5
5
|
const hash_1 = require("./hash");
|
|
6
|
-
function coverageFor(lane, window) {
|
|
6
|
+
function coverageFor(lane, window, cacheIdentity = cache_1.defaultScopedCacheIdentity) {
|
|
7
|
+
const coverageCache = (0, cache_1.coverageCacheFor)(cacheIdentity);
|
|
7
8
|
const key = (0, hash_1.laneKey)(lane, window);
|
|
8
|
-
const cached =
|
|
9
|
+
const cached = coverageCache.get(key);
|
|
9
10
|
if (cached) {
|
|
10
11
|
cache_1.counts.coverage.cacheHits++;
|
|
11
12
|
return cached;
|
|
@@ -31,7 +32,7 @@ function coverageFor(lane, window) {
|
|
|
31
32
|
bookingMinutes: duration(booked) / 60_000,
|
|
32
33
|
availabilityMinusBookingMinutes: availabilityMinutes - intersection / 60_000,
|
|
33
34
|
};
|
|
34
|
-
|
|
35
|
+
coverageCache.set(key, result);
|
|
35
36
|
return result;
|
|
36
37
|
}
|
|
37
38
|
function union(lane, window, role) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/core/coverage.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../src/core/coverage.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/index.d.ts
CHANGED
|
@@ -10,5 +10,5 @@ export { byCoverage, byLabel } from './order';
|
|
|
10
10
|
export { snapToStep, timeAtX, timeAtY, xAtTime } from './snap';
|
|
11
11
|
export { hasSource } from './source';
|
|
12
12
|
export { extentOf, intersectionOf, unionOf } from './spans';
|
|
13
|
-
export type { Coverage, DayColumn, Gap, Interval, Lane, LaneFlag, LaneGeometry, Layer, LayerRole, LayerStyle, Projection, Rect, Source, Transition, Weekday, Window, } from './types';
|
|
13
|
+
export type { Coverage, DayColumn, Gap, Interval, Lane, LaneFlag, LaneGeometry, Layer, LayerRole, LayerStyle, Projection, Rect, ScopedCacheIdentity, Source, Transition, Weekday, Window, } from './types';
|
|
14
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC5D,YAAY,EACV,QAAQ,EACR,SAAS,EACT,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,IAAI,EACJ,MAAM,EACN,UAAU,EACV,OAAO,EACP,MAAM,GACP,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC5D,YAAY,EACV,QAAQ,EACR,SAAS,EACT,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,IAAI,EACJ,mBAAmB,EACnB,MAAM,EACN,UAAU,EACV,OAAO,EACP,MAAM,GACP,MAAM,SAAS,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { Lane, LaneGeometry, Projection, Window } from './types';
|
|
2
|
-
export declare function layoutLane(lane: Lane, window: Window, projection: Projection): LaneGeometry;
|
|
1
|
+
import type { Lane, LaneGeometry, Projection, ScopedCacheIdentity, Window } from './types';
|
|
2
|
+
export declare function layoutLane(lane: Lane, window: Window, projection: Projection, cacheIdentity?: ScopedCacheIdentity): LaneGeometry;
|
|
3
3
|
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/core/layout.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/core/layout.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,IAAI,EACJ,YAAY,EAEZ,UAAU,EAEV,mBAAmB,EACnB,MAAM,EACP,MAAM,SAAS,CAAC;AAEjB,wBAAgB,UAAU,CACxB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,aAAa,GAAE,mBAAgD,GAC9D,YAAY,CAyCd"}
|
package/dist/src/core/layout.js
CHANGED
|
@@ -8,10 +8,11 @@ const hash_1 = require("./hash");
|
|
|
8
8
|
const scale_1 = require("./scale");
|
|
9
9
|
const snap_1 = require("./snap");
|
|
10
10
|
const spans_1 = require("./spans");
|
|
11
|
-
function layoutLane(lane, window, projection) {
|
|
11
|
+
function layoutLane(lane, window, projection, cacheIdentity = cache_1.defaultScopedCacheIdentity) {
|
|
12
|
+
const layoutCache = (0, cache_1.layoutCacheFor)(cacheIdentity);
|
|
12
13
|
const key = `${(0, hash_1.laneKey)(lane, window)}|${(0, hash_1.projectionKey)(projection)}`;
|
|
13
|
-
let cached =
|
|
14
|
-
const coverage = (0, coverage_1.coverageFor)(lane, window);
|
|
14
|
+
let cached = layoutCache.get(key);
|
|
15
|
+
const coverage = (0, coverage_1.coverageFor)(lane, window, cacheIdentity);
|
|
15
16
|
const flag = (0, flag_1.flagFor)(lane, window);
|
|
16
17
|
if (cached) {
|
|
17
18
|
cache_1.counts.layout.cacheHits++;
|
|
@@ -28,7 +29,7 @@ function layoutLane(lane, window, projection) {
|
|
|
28
29
|
project((0, spans_1.sourceSpans)(layer.gaps ?? [], window), layer, window, projection, pieces, gapRects);
|
|
29
30
|
}
|
|
30
31
|
cached = { rects, gapRects, assemblies: new WeakMap() };
|
|
31
|
-
|
|
32
|
+
layoutCache.set(key, cached);
|
|
32
33
|
}
|
|
33
34
|
// Read the current flag and coverage above, then retain each complete assembly
|
|
34
35
|
// by reference, including when a consumer revisits an earlier explicit flag.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/core/layout.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/core/layout.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/types.d.ts
CHANGED
|
@@ -46,6 +46,8 @@ export type Lane = {
|
|
|
46
46
|
layers: Layer[];
|
|
47
47
|
meta?: unknown;
|
|
48
48
|
};
|
|
49
|
+
/** A stable object reference that scopes retained geometry and coverage to one dataset. */
|
|
50
|
+
export type ScopedCacheIdentity = Readonly<Record<PropertyKey, never>>;
|
|
49
51
|
/** A span of absolute time. No span kind, no resolution; those are axis and component concerns (#6). */
|
|
50
52
|
export type Window = {
|
|
51
53
|
start: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -29,5 +29,6 @@ export { ScheduleGutter } from './components/schedule/parts/gutter';
|
|
|
29
29
|
export { ScheduleIncomplete } from './components/schedule/parts/incomplete';
|
|
30
30
|
export type { ScheduleColumnInput, ScheduleHoursInput, ScheduleInput, ScheduleModel, ScheduleProjection, ScheduleProps, ScheduleStyleProps, ScheduleTransitionInput, ScheduleWindowSpec, } from './components/schedule/schedule.types';
|
|
31
31
|
export { useSchedule } from './components/schedule/use-schedule';
|
|
32
|
+
export type { ScopedCacheIdentity } from './core';
|
|
32
33
|
export * from './core';
|
|
33
34
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,YAAY,EACV,SAAS,EACT,SAAS,EACT,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,UAAU,GACX,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,YAAY,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,cAAc,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,YAAY,EACV,SAAS,EACT,SAAS,EACT,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,UAAU,GACX,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,YAAY,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,YAAY,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAClD,cAAc,QAAQ,CAAC"}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,qDAA0D;AAAjD,gGAAA,SAAS,OAAA;AAClB,+DAAoE;AAA3D,0GAAA,cAAc,OAAA;AACvB,yDAAoE;AAA3D,gGAAA,MAAM,OAAA;AAAE,oGAAA,UAAU,OAAA;AAC3B,8CAA6C;AAApC,gGAAA,MAAM,OAAA;AACf,+DAAmE;AAA1D,+GAAA,gBAAgB,OAAA;AACzB,yEAA6E;AAApE,6GAAA,eAAe,OAAA;AACxB,uDAA4D;AAAnD,kGAAA,UAAU,OAAA;AACnB,2DAAgE;AAAvD,sGAAA,YAAY,OAAA;AACrB,yDAA8D;AAArD,oGAAA,WAAW,OAAA;AACpB,uDAA4D;AAAnD,kGAAA,UAAU,OAAA;AACnB,2DAAgE;AAAvD,sGAAA,YAAY,OAAA;AACrB,qEAAyE;AAAhE,+GAAA,gBAAgB,OAAA;AACzB,iFAAoF;AAA3E,0HAAA,qBAAqB,OAAA;AAC9B,iEAAqE;AAA5D,2GAAA,cAAc,OAAA;AACvB,+DAAmE;AAA1D,yGAAA,aAAa,OAAA;AAmBtB,mFAAwF;AAA/E,0HAAA,sBAAsB,OAAA;AAE/B,6DAA2D;AAAlD,uGAAA,SAAS,OAAA;AAClB,kDAAiD;AAAxC,oGAAA,QAAQ,OAAA;AACjB,kEAAyE;AAAhE,wGAAA,cAAc,OAAA;AACvB,0EAAgF;AAAvE,+GAAA,iBAAiB,OAAA;AAC1B,8DAAqE;AAA5D,oGAAA,YAAY,OAAA;AACrB,sEAA4E;AAAnE,2GAAA,eAAe,OAAA;AACxB,8EAAoF;AAA3E,mHAAA,mBAAmB,OAAA;AAC5B,0EAAiF;AAAxE,gHAAA,kBAAkB,OAAA;AAC3B,6DAAoE;AAA3D,wGAAA,cAAc,OAAA;AACvB,qEAA4E;AAAnE,gHAAA,kBAAkB,OAAA;AAY3B,mEAAiE;AAAxD,2GAAA,WAAW,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,qDAA0D;AAAjD,gGAAA,SAAS,OAAA;AAClB,+DAAoE;AAA3D,0GAAA,cAAc,OAAA;AACvB,yDAAoE;AAA3D,gGAAA,MAAM,OAAA;AAAE,oGAAA,UAAU,OAAA;AAC3B,8CAA6C;AAApC,gGAAA,MAAM,OAAA;AACf,+DAAmE;AAA1D,+GAAA,gBAAgB,OAAA;AACzB,yEAA6E;AAApE,6GAAA,eAAe,OAAA;AACxB,uDAA4D;AAAnD,kGAAA,UAAU,OAAA;AACnB,2DAAgE;AAAvD,sGAAA,YAAY,OAAA;AACrB,yDAA8D;AAArD,oGAAA,WAAW,OAAA;AACpB,uDAA4D;AAAnD,kGAAA,UAAU,OAAA;AACnB,2DAAgE;AAAvD,sGAAA,YAAY,OAAA;AACrB,qEAAyE;AAAhE,+GAAA,gBAAgB,OAAA;AACzB,iFAAoF;AAA3E,0HAAA,qBAAqB,OAAA;AAC9B,iEAAqE;AAA5D,2GAAA,cAAc,OAAA;AACvB,+DAAmE;AAA1D,yGAAA,aAAa,OAAA;AAmBtB,mFAAwF;AAA/E,0HAAA,sBAAsB,OAAA;AAE/B,6DAA2D;AAAlD,uGAAA,SAAS,OAAA;AAClB,kDAAiD;AAAxC,oGAAA,QAAQ,OAAA;AACjB,kEAAyE;AAAhE,wGAAA,cAAc,OAAA;AACvB,0EAAgF;AAAvE,+GAAA,iBAAiB,OAAA;AAC1B,8DAAqE;AAA5D,oGAAA,YAAY,OAAA;AACrB,sEAA4E;AAAnE,2GAAA,eAAe,OAAA;AACxB,8EAAoF;AAA3E,mHAAA,mBAAmB,OAAA;AAC5B,0EAAiF;AAAxE,gHAAA,kBAAkB,OAAA;AAC3B,6DAAoE;AAA3D,wGAAA,cAAc,OAAA;AACvB,qEAA4E;AAAnE,gHAAA,kBAAkB,OAAA;AAY3B,mEAAiE;AAAxD,2GAAA,WAAW,OAAA;AAEpB,yCAAuB"}
|
package/llms.txt
CHANGED
|
@@ -406,14 +406,18 @@ layout. Scroll retains viewport offset, not a lane anchor.
|
|
|
406
406
|
|
|
407
407
|
## Caches and counters
|
|
408
408
|
|
|
409
|
-
layoutLane(lane,window,projection) computes rects for visible lanes only.
|
|
410
|
-
coverageFor(lane,window) computes role unions for all lanes,
|
|
409
|
+
layoutLane(lane,window,projection,cacheIdentity?) computes rects for visible lanes only.
|
|
410
|
+
coverageFor(lane,window,cacheIdentity?) computes role unions for all lanes,
|
|
411
|
+
projection-independent. ScopedCacheIdentity is a stable empty object whose reference
|
|
412
|
+
identifies one dataset. Omitted identities use the core-owned default; pass the same
|
|
413
|
+
explicit identity to share one dataset across calls and projections, and use distinct
|
|
414
|
+
identities for independent datasets whose lane IDs and versions can collide.
|
|
411
415
|
flagFor(lane,window) is cheap and uncached. Geometry assembly reads fresh flag and
|
|
412
416
|
coverage outside cached rects. Repeated complete inputs retain references; treat
|
|
413
417
|
all results as read-only.
|
|
414
418
|
|
|
415
|
-
Geometry key: lane.id + lane.version (or structural encoding of layers
|
|
416
|
-
window bounds + every projection field. Coverage uses the same key without
|
|
419
|
+
Geometry key: cache identity + lane.id + lane.version (or structural encoding of layers
|
|
420
|
+
only) + window bounds + every projection field. Coverage uses the same key without
|
|
417
421
|
projection. Bump any supplied version when layers change. Label, lane timezone,
|
|
418
422
|
flag, complete, and meta never invalidate rects. Clear retained windows explicitly
|
|
419
423
|
when a consumer no longer needs them. This cache lifetime belongs to the consumer.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-roster",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.7",
|
|
4
4
|
"description": "Resource timeline and schedule components for React Native and web, with layered intervals, coverage, provenance, and explicit daylight-saving handling.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
package/src/core/README.md
CHANGED
|
@@ -5,7 +5,8 @@ no React Native, no dependencies.
|
|
|
5
5
|
|
|
6
6
|
- Public subpath: `react-native-roster/core`; the root entry re-exports it
|
|
7
7
|
- Authoritative types: `types.ts` (`Lane`, `Layer`, `Interval`, `Gap`,
|
|
8
|
-
`Source`, `Window`, `Projection`, `Rect`, `Coverage`, `LaneGeometry
|
|
8
|
+
`Source`, `Window`, `Projection`, `Rect`, `Coverage`, `LaneGeometry`,
|
|
9
|
+
`ScopedCacheIdentity`)
|
|
9
10
|
- Interval helpers: `extentOf(segments: readonly Window[]): Window | null`,
|
|
10
11
|
`intersectionOf(spans: readonly Window[]): Window | null`, and
|
|
11
12
|
`unionOf(spans: readonly Window[]): Window[]`
|
|
@@ -25,6 +26,21 @@ no React Native, no dependencies.
|
|
|
25
26
|
| `order.ts`, `flag.ts` | lane comparators and lane flags |
|
|
26
27
|
| `cache.ts`, `hash.ts` | layout and coverage caches keyed by lane content |
|
|
27
28
|
|
|
29
|
+
`layoutLane(lane, window, projection, cacheIdentity?)` and
|
|
30
|
+
`coverageFor(lane, window, cacheIdentity?)` use a stable `ScopedCacheIdentity` object to keep
|
|
31
|
+
retained results within one dataset. Omitted identities use the core-owned default. Standalone
|
|
32
|
+
callers should keep one empty identity object for each dataset and pass the same object to both
|
|
33
|
+
functions; projections share coverage because projection fields remain outside the coverage key.
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import type { ScopedCacheIdentity } from 'react-native-roster/core';
|
|
37
|
+
import { coverageFor, layoutLane } from 'react-native-roster/core';
|
|
38
|
+
|
|
39
|
+
const cacheIdentity: ScopedCacheIdentity = {};
|
|
40
|
+
const coverage = coverageFor(lane, window, cacheIdentity);
|
|
41
|
+
const geometry = layoutLane(lane, window, projection, cacheIdentity);
|
|
42
|
+
```
|
|
43
|
+
|
|
28
44
|
All interval helpers reuse the bare `{ start, end }` `Window` type with
|
|
29
45
|
end-exclusive epoch millisecond bounds. `extentOf` bridges disjoint segments;
|
|
30
46
|
`intersectionOf` returns only their shared span. Both return `null` for empty
|
package/src/core/cache.ts
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import type { Coverage, LaneFlag, LaneGeometry, Rect } from './types';
|
|
1
|
+
import type { Coverage, LaneFlag, LaneGeometry, Rect, ScopedCacheIdentity } from './types';
|
|
2
2
|
|
|
3
|
-
export const
|
|
3
|
+
export const defaultScopedCacheIdentity: ScopedCacheIdentity = {};
|
|
4
|
+
|
|
5
|
+
type LayoutCache = Map<
|
|
4
6
|
string,
|
|
5
7
|
{
|
|
6
8
|
rects: Rect[];
|
|
7
9
|
gapRects: Rect[];
|
|
8
10
|
assemblies: WeakMap<Coverage, Map<LaneFlag, LaneGeometry>>;
|
|
9
11
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
>;
|
|
13
|
+
|
|
14
|
+
let layoutCaches = new WeakMap<ScopedCacheIdentity, LayoutCache>();
|
|
15
|
+
let coverageCaches = new WeakMap<ScopedCacheIdentity, Map<string, Coverage>>();
|
|
12
16
|
export const counts = {
|
|
13
17
|
layout: { runs: 0, cacheHits: 0 },
|
|
14
18
|
coverage: { runs: 0, cacheHits: 0 },
|
|
@@ -29,10 +33,28 @@ export function resetStats(): void {
|
|
|
29
33
|
counts.coverage.cacheHits = 0;
|
|
30
34
|
}
|
|
31
35
|
|
|
36
|
+
export function layoutCacheFor(cacheIdentity: ScopedCacheIdentity): LayoutCache {
|
|
37
|
+
let cache = layoutCaches.get(cacheIdentity);
|
|
38
|
+
if (!cache) {
|
|
39
|
+
cache = new Map();
|
|
40
|
+
layoutCaches.set(cacheIdentity, cache);
|
|
41
|
+
}
|
|
42
|
+
return cache;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function coverageCacheFor(cacheIdentity: ScopedCacheIdentity): Map<string, Coverage> {
|
|
46
|
+
let cache = coverageCaches.get(cacheIdentity);
|
|
47
|
+
if (!cache) {
|
|
48
|
+
cache = new Map();
|
|
49
|
+
coverageCaches.set(cacheIdentity, cache);
|
|
50
|
+
}
|
|
51
|
+
return cache;
|
|
52
|
+
}
|
|
53
|
+
|
|
32
54
|
export function clearLayoutCache(): void {
|
|
33
|
-
|
|
55
|
+
layoutCaches = new WeakMap();
|
|
34
56
|
}
|
|
35
57
|
|
|
36
58
|
export function clearCoverageCache(): void {
|
|
37
|
-
|
|
59
|
+
coverageCaches = new WeakMap();
|
|
38
60
|
}
|
package/src/core/coverage.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import { counts,
|
|
1
|
+
import { counts, coverageCacheFor, defaultScopedCacheIdentity } from './cache';
|
|
2
2
|
import { laneKey } from './hash';
|
|
3
|
-
import type { Coverage, Lane, LayerRole, Window } from './types';
|
|
3
|
+
import type { Coverage, Lane, LayerRole, ScopedCacheIdentity, Window } from './types';
|
|
4
4
|
|
|
5
|
-
export function coverageFor(
|
|
5
|
+
export function coverageFor(
|
|
6
|
+
lane: Lane,
|
|
7
|
+
window: Window,
|
|
8
|
+
cacheIdentity: ScopedCacheIdentity = defaultScopedCacheIdentity,
|
|
9
|
+
): Coverage {
|
|
10
|
+
const coverageCache = coverageCacheFor(cacheIdentity);
|
|
6
11
|
const key = laneKey(lane, window);
|
|
7
12
|
const cached = coverageCache.get(key);
|
|
8
13
|
if (cached) {
|
package/src/core/index.ts
CHANGED
package/src/core/layout.ts
CHANGED
|
@@ -1,16 +1,31 @@
|
|
|
1
|
-
import { counts,
|
|
1
|
+
import { counts, defaultScopedCacheIdentity, layoutCacheFor } from './cache';
|
|
2
2
|
import { coverageFor } from './coverage';
|
|
3
3
|
import { flagFor } from './flag';
|
|
4
4
|
import { laneKey, projectionKey } from './hash';
|
|
5
5
|
import { type ScalePiece, scalePieces } from './scale';
|
|
6
6
|
import { xAtTime } from './snap';
|
|
7
7
|
import { sourceSpans } from './spans';
|
|
8
|
-
import type {
|
|
8
|
+
import type {
|
|
9
|
+
Interval,
|
|
10
|
+
Lane,
|
|
11
|
+
LaneGeometry,
|
|
12
|
+
Layer,
|
|
13
|
+
Projection,
|
|
14
|
+
Rect,
|
|
15
|
+
ScopedCacheIdentity,
|
|
16
|
+
Window,
|
|
17
|
+
} from './types';
|
|
9
18
|
|
|
10
|
-
export function layoutLane(
|
|
19
|
+
export function layoutLane(
|
|
20
|
+
lane: Lane,
|
|
21
|
+
window: Window,
|
|
22
|
+
projection: Projection,
|
|
23
|
+
cacheIdentity: ScopedCacheIdentity = defaultScopedCacheIdentity,
|
|
24
|
+
): LaneGeometry {
|
|
25
|
+
const layoutCache = layoutCacheFor(cacheIdentity);
|
|
11
26
|
const key = `${laneKey(lane, window)}|${projectionKey(projection)}`;
|
|
12
27
|
let cached = layoutCache.get(key);
|
|
13
|
-
const coverage = coverageFor(lane, window);
|
|
28
|
+
const coverage = coverageFor(lane, window, cacheIdentity);
|
|
14
29
|
const flag = flagFor(lane, window);
|
|
15
30
|
if (cached) {
|
|
16
31
|
counts.layout.cacheHits++;
|
package/src/core/types.ts
CHANGED
|
@@ -39,6 +39,9 @@ export type Lane = {
|
|
|
39
39
|
meta?: unknown;
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
+
/** A stable object reference that scopes retained geometry and coverage to one dataset. */
|
|
43
|
+
export type ScopedCacheIdentity = Readonly<Record<PropertyKey, never>>;
|
|
44
|
+
|
|
42
45
|
/** A span of absolute time. No span kind, no resolution; those are axis and component concerns (#6). */
|
|
43
46
|
export type Window = { start: number; end: number };
|
|
44
47
|
|