gitx.do 0.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.
- package/LICENSE +21 -0
- package/README.md +156 -0
- package/dist/durable-object/object-store.d.ts +113 -0
- package/dist/durable-object/object-store.d.ts.map +1 -0
- package/dist/durable-object/object-store.js +387 -0
- package/dist/durable-object/object-store.js.map +1 -0
- package/dist/durable-object/schema.d.ts +17 -0
- package/dist/durable-object/schema.d.ts.map +1 -0
- package/dist/durable-object/schema.js +43 -0
- package/dist/durable-object/schema.js.map +1 -0
- package/dist/durable-object/wal.d.ts +111 -0
- package/dist/durable-object/wal.d.ts.map +1 -0
- package/dist/durable-object/wal.js +200 -0
- package/dist/durable-object/wal.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/adapter.d.ts +231 -0
- package/dist/mcp/adapter.d.ts.map +1 -0
- package/dist/mcp/adapter.js +502 -0
- package/dist/mcp/adapter.js.map +1 -0
- package/dist/mcp/sandbox.d.ts +261 -0
- package/dist/mcp/sandbox.d.ts.map +1 -0
- package/dist/mcp/sandbox.js +983 -0
- package/dist/mcp/sandbox.js.map +1 -0
- package/dist/mcp/sdk-adapter.d.ts +413 -0
- package/dist/mcp/sdk-adapter.d.ts.map +1 -0
- package/dist/mcp/sdk-adapter.js +672 -0
- package/dist/mcp/sdk-adapter.js.map +1 -0
- package/dist/mcp/tools.d.ts +133 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +1604 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/ops/blame.d.ts +148 -0
- package/dist/ops/blame.d.ts.map +1 -0
- package/dist/ops/blame.js +754 -0
- package/dist/ops/blame.js.map +1 -0
- package/dist/ops/branch.d.ts +215 -0
- package/dist/ops/branch.d.ts.map +1 -0
- package/dist/ops/branch.js +608 -0
- package/dist/ops/branch.js.map +1 -0
- package/dist/ops/commit-traversal.d.ts +209 -0
- package/dist/ops/commit-traversal.d.ts.map +1 -0
- package/dist/ops/commit-traversal.js +755 -0
- package/dist/ops/commit-traversal.js.map +1 -0
- package/dist/ops/commit.d.ts +221 -0
- package/dist/ops/commit.d.ts.map +1 -0
- package/dist/ops/commit.js +606 -0
- package/dist/ops/commit.js.map +1 -0
- package/dist/ops/merge-base.d.ts +223 -0
- package/dist/ops/merge-base.d.ts.map +1 -0
- package/dist/ops/merge-base.js +581 -0
- package/dist/ops/merge-base.js.map +1 -0
- package/dist/ops/merge.d.ts +385 -0
- package/dist/ops/merge.d.ts.map +1 -0
- package/dist/ops/merge.js +1203 -0
- package/dist/ops/merge.js.map +1 -0
- package/dist/ops/tag.d.ts +182 -0
- package/dist/ops/tag.d.ts.map +1 -0
- package/dist/ops/tag.js +608 -0
- package/dist/ops/tag.js.map +1 -0
- package/dist/ops/tree-builder.d.ts +82 -0
- package/dist/ops/tree-builder.d.ts.map +1 -0
- package/dist/ops/tree-builder.js +246 -0
- package/dist/ops/tree-builder.js.map +1 -0
- package/dist/ops/tree-diff.d.ts +243 -0
- package/dist/ops/tree-diff.d.ts.map +1 -0
- package/dist/ops/tree-diff.js +657 -0
- package/dist/ops/tree-diff.js.map +1 -0
- package/dist/pack/delta.d.ts +68 -0
- package/dist/pack/delta.d.ts.map +1 -0
- package/dist/pack/delta.js +343 -0
- package/dist/pack/delta.js.map +1 -0
- package/dist/pack/format.d.ts +84 -0
- package/dist/pack/format.d.ts.map +1 -0
- package/dist/pack/format.js +261 -0
- package/dist/pack/format.js.map +1 -0
- package/dist/pack/full-generation.d.ts +327 -0
- package/dist/pack/full-generation.d.ts.map +1 -0
- package/dist/pack/full-generation.js +1159 -0
- package/dist/pack/full-generation.js.map +1 -0
- package/dist/pack/generation.d.ts +118 -0
- package/dist/pack/generation.d.ts.map +1 -0
- package/dist/pack/generation.js +459 -0
- package/dist/pack/generation.js.map +1 -0
- package/dist/pack/index.d.ts +181 -0
- package/dist/pack/index.d.ts.map +1 -0
- package/dist/pack/index.js +552 -0
- package/dist/pack/index.js.map +1 -0
- package/dist/refs/branch.d.ts +224 -0
- package/dist/refs/branch.d.ts.map +1 -0
- package/dist/refs/branch.js +170 -0
- package/dist/refs/branch.js.map +1 -0
- package/dist/refs/storage.d.ts +208 -0
- package/dist/refs/storage.d.ts.map +1 -0
- package/dist/refs/storage.js +421 -0
- package/dist/refs/storage.js.map +1 -0
- package/dist/refs/tag.d.ts +230 -0
- package/dist/refs/tag.d.ts.map +1 -0
- package/dist/refs/tag.js +188 -0
- package/dist/refs/tag.js.map +1 -0
- package/dist/storage/lru-cache.d.ts +188 -0
- package/dist/storage/lru-cache.d.ts.map +1 -0
- package/dist/storage/lru-cache.js +410 -0
- package/dist/storage/lru-cache.js.map +1 -0
- package/dist/storage/object-index.d.ts +140 -0
- package/dist/storage/object-index.d.ts.map +1 -0
- package/dist/storage/object-index.js +166 -0
- package/dist/storage/object-index.js.map +1 -0
- package/dist/storage/r2-pack.d.ts +394 -0
- package/dist/storage/r2-pack.d.ts.map +1 -0
- package/dist/storage/r2-pack.js +1062 -0
- package/dist/storage/r2-pack.js.map +1 -0
- package/dist/tiered/cdc-pipeline.d.ts +316 -0
- package/dist/tiered/cdc-pipeline.d.ts.map +1 -0
- package/dist/tiered/cdc-pipeline.js +771 -0
- package/dist/tiered/cdc-pipeline.js.map +1 -0
- package/dist/tiered/migration.d.ts +242 -0
- package/dist/tiered/migration.d.ts.map +1 -0
- package/dist/tiered/migration.js +592 -0
- package/dist/tiered/migration.js.map +1 -0
- package/dist/tiered/parquet-writer.d.ts +248 -0
- package/dist/tiered/parquet-writer.d.ts.map +1 -0
- package/dist/tiered/parquet-writer.js +555 -0
- package/dist/tiered/parquet-writer.js.map +1 -0
- package/dist/tiered/read-path.d.ts +141 -0
- package/dist/tiered/read-path.d.ts.map +1 -0
- package/dist/tiered/read-path.js +204 -0
- package/dist/tiered/read-path.js.map +1 -0
- package/dist/types/objects.d.ts +53 -0
- package/dist/types/objects.d.ts.map +1 -0
- package/dist/types/objects.js +291 -0
- package/dist/types/objects.js.map +1 -0
- package/dist/types/storage.d.ts +117 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +8 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/utils/hash.d.ts +31 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +60 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/sha1.d.ts +26 -0
- package/dist/utils/sha1.d.ts.map +1 -0
- package/dist/utils/sha1.js +127 -0
- package/dist/utils/sha1.js.map +1 -0
- package/dist/wire/capabilities.d.ts +236 -0
- package/dist/wire/capabilities.d.ts.map +1 -0
- package/dist/wire/capabilities.js +437 -0
- package/dist/wire/capabilities.js.map +1 -0
- package/dist/wire/pkt-line.d.ts +67 -0
- package/dist/wire/pkt-line.d.ts.map +1 -0
- package/dist/wire/pkt-line.js +145 -0
- package/dist/wire/pkt-line.js.map +1 -0
- package/dist/wire/receive-pack.d.ts +302 -0
- package/dist/wire/receive-pack.d.ts.map +1 -0
- package/dist/wire/receive-pack.js +885 -0
- package/dist/wire/receive-pack.js.map +1 -0
- package/dist/wire/smart-http.d.ts +321 -0
- package/dist/wire/smart-http.d.ts.map +1 -0
- package/dist/wire/smart-http.js +654 -0
- package/dist/wire/smart-http.js.map +1 -0
- package/dist/wire/upload-pack.d.ts +333 -0
- package/dist/wire/upload-pack.d.ts.map +1 -0
- package/dist/wire/upload-pack.js +850 -0
- package/dist/wire/upload-pack.js.map +1 -0
- package/package.json +61 -0
package/dist/refs/tag.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Tag Operations
|
|
3
|
+
*
|
|
4
|
+
* Handles creation, deletion, and management of Git tags.
|
|
5
|
+
* Supports both lightweight tags (refs pointing to commits)
|
|
6
|
+
* and annotated tags (tag objects with metadata).
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Error thrown when a tag operation fails
|
|
10
|
+
*/
|
|
11
|
+
export class TagError extends Error {
|
|
12
|
+
code;
|
|
13
|
+
tagName;
|
|
14
|
+
constructor(message, code, tagName) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.code = code;
|
|
17
|
+
this.tagName = tagName;
|
|
18
|
+
this.name = 'TagError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Tag manager for handling Git tag operations
|
|
23
|
+
*/
|
|
24
|
+
export class TagManager {
|
|
25
|
+
constructor(refStorage, objectStorage, gpgSigner) {
|
|
26
|
+
void refStorage; // Suppress unused variable warning until implementation
|
|
27
|
+
void objectStorage;
|
|
28
|
+
void gpgSigner;
|
|
29
|
+
// TODO: Implement in GREEN phase
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a new tag
|
|
33
|
+
*/
|
|
34
|
+
async createTag(_name, _target, _options) {
|
|
35
|
+
// TODO: Implement in GREEN phase
|
|
36
|
+
throw new Error('Not implemented');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Delete a tag
|
|
40
|
+
*/
|
|
41
|
+
async deleteTag(_name, _options) {
|
|
42
|
+
// TODO: Implement in GREEN phase
|
|
43
|
+
throw new Error('Not implemented');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* List all tags
|
|
47
|
+
*/
|
|
48
|
+
async listTags(_options) {
|
|
49
|
+
// TODO: Implement in GREEN phase
|
|
50
|
+
throw new Error('Not implemented');
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get a tag by name
|
|
54
|
+
*/
|
|
55
|
+
async getTag(_name, _options) {
|
|
56
|
+
// TODO: Implement in GREEN phase
|
|
57
|
+
throw new Error('Not implemented');
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if a tag exists
|
|
61
|
+
*/
|
|
62
|
+
async tagExists(_name) {
|
|
63
|
+
// TODO: Implement in GREEN phase
|
|
64
|
+
throw new Error('Not implemented');
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the target (commit SHA) that a tag points to
|
|
68
|
+
*/
|
|
69
|
+
async getTagTarget(_name) {
|
|
70
|
+
// TODO: Implement in GREEN phase
|
|
71
|
+
throw new Error('Not implemented');
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Verify a tag's GPG signature
|
|
75
|
+
*/
|
|
76
|
+
async verifyTag(_name) {
|
|
77
|
+
// TODO: Implement in GREEN phase
|
|
78
|
+
throw new Error('Not implemented');
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check if a tag is annotated
|
|
82
|
+
*/
|
|
83
|
+
async isAnnotatedTag(_name) {
|
|
84
|
+
// TODO: Implement in GREEN phase
|
|
85
|
+
throw new Error('Not implemented');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Validate a tag name according to Git rules
|
|
90
|
+
* Similar to ref name rules but with tag-specific constraints
|
|
91
|
+
*/
|
|
92
|
+
export function isValidTagName(_name) {
|
|
93
|
+
// TODO: Implement in GREEN phase
|
|
94
|
+
throw new Error('Not implemented');
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check if a string is a valid annotated tag (has tag object)
|
|
98
|
+
*/
|
|
99
|
+
export function isAnnotatedTag(_tag) {
|
|
100
|
+
// TODO: Implement in GREEN phase
|
|
101
|
+
throw new Error('Not implemented');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Format a tag message (handle line endings, etc.)
|
|
105
|
+
*/
|
|
106
|
+
export function formatTagMessage(_message) {
|
|
107
|
+
// TODO: Implement in GREEN phase
|
|
108
|
+
throw new Error('Not implemented');
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Parse a tag message from raw content
|
|
112
|
+
*/
|
|
113
|
+
export function parseTagMessage(_content) {
|
|
114
|
+
// TODO: Implement in GREEN phase
|
|
115
|
+
throw new Error('Not implemented');
|
|
116
|
+
}
|
|
117
|
+
// Convenience functions that wrap TagManager methods
|
|
118
|
+
/**
|
|
119
|
+
* Create a lightweight tag pointing to a commit
|
|
120
|
+
*/
|
|
121
|
+
export async function createTag(_manager, _name, _target, _options) {
|
|
122
|
+
// TODO: Implement in GREEN phase
|
|
123
|
+
throw new Error('Not implemented');
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Create an annotated tag with message
|
|
127
|
+
*/
|
|
128
|
+
export async function createAnnotatedTag(_manager, _name, _target, _message, _tagger, _options) {
|
|
129
|
+
// TODO: Implement in GREEN phase
|
|
130
|
+
throw new Error('Not implemented');
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Delete a tag
|
|
134
|
+
*/
|
|
135
|
+
export async function deleteTag(_manager, _name, _options) {
|
|
136
|
+
// TODO: Implement in GREEN phase
|
|
137
|
+
throw new Error('Not implemented');
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* List all tags
|
|
141
|
+
*/
|
|
142
|
+
export async function listTags(_manager, _options) {
|
|
143
|
+
// TODO: Implement in GREEN phase
|
|
144
|
+
throw new Error('Not implemented');
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get a tag by name
|
|
148
|
+
*/
|
|
149
|
+
export async function getTag(_manager, _name, _options) {
|
|
150
|
+
// TODO: Implement in GREEN phase
|
|
151
|
+
throw new Error('Not implemented');
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Check if a tag is an annotated tag
|
|
155
|
+
*/
|
|
156
|
+
export async function checkIsAnnotatedTag(_manager, _name) {
|
|
157
|
+
// TODO: Implement in GREEN phase
|
|
158
|
+
throw new Error('Not implemented');
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Verify a tag's signature
|
|
162
|
+
*/
|
|
163
|
+
export async function verifyTagSignature(_manager, _name) {
|
|
164
|
+
// TODO: Implement in GREEN phase
|
|
165
|
+
throw new Error('Not implemented');
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get the target commit SHA for a tag
|
|
169
|
+
*/
|
|
170
|
+
export async function getTagTarget(_manager, _name) {
|
|
171
|
+
// TODO: Implement in GREEN phase
|
|
172
|
+
throw new Error('Not implemented');
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Sort tags by semantic version
|
|
176
|
+
*/
|
|
177
|
+
export function sortTagsByVersion(_tags, _direction = 'asc') {
|
|
178
|
+
// TODO: Implement in GREEN phase
|
|
179
|
+
throw new Error('Not implemented');
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Filter tags by glob pattern
|
|
183
|
+
*/
|
|
184
|
+
export function filterTagsByPattern(_tags, _pattern) {
|
|
185
|
+
// TODO: Implement in GREEN phase
|
|
186
|
+
throw new Error('Not implemented');
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=tag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/refs/tag.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LRU Cache implementation for hot objects in gitdo
|
|
3
|
+
* gitdo-165: LRU cache for hot objects
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Configuration options for the LRU cache
|
|
7
|
+
*/
|
|
8
|
+
export interface CacheOptions {
|
|
9
|
+
/** Maximum number of items in the cache */
|
|
10
|
+
maxCount?: number;
|
|
11
|
+
/** Maximum size in bytes for the cache */
|
|
12
|
+
maxBytes?: number;
|
|
13
|
+
/** Default TTL in milliseconds for cache entries */
|
|
14
|
+
defaultTTL?: number;
|
|
15
|
+
/** Function to calculate size of a value in bytes */
|
|
16
|
+
sizeCalculator?: <T>(value: T) => number;
|
|
17
|
+
/** Callback when an item is evicted */
|
|
18
|
+
onEvict?: <K, V>(key: K, value: V, reason: EvictionReason) => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Reason why an item was evicted from the cache
|
|
22
|
+
*/
|
|
23
|
+
export type EvictionReason = 'lru' | 'ttl' | 'size' | 'manual' | 'clear';
|
|
24
|
+
/**
|
|
25
|
+
* Statistics about cache performance
|
|
26
|
+
*/
|
|
27
|
+
export interface CacheStats {
|
|
28
|
+
/** Number of cache hits */
|
|
29
|
+
hits: number;
|
|
30
|
+
/** Number of cache misses */
|
|
31
|
+
misses: number;
|
|
32
|
+
/** Current number of items in the cache */
|
|
33
|
+
count: number;
|
|
34
|
+
/** Current size in bytes */
|
|
35
|
+
bytes: number;
|
|
36
|
+
/** Number of evictions */
|
|
37
|
+
evictions: number;
|
|
38
|
+
/** Hit rate as a percentage (0-100) */
|
|
39
|
+
hitRate: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Entry stored in the cache
|
|
43
|
+
*/
|
|
44
|
+
export interface CacheEntry<V> {
|
|
45
|
+
value: V;
|
|
46
|
+
size: number;
|
|
47
|
+
createdAt: number;
|
|
48
|
+
expiresAt: number | null;
|
|
49
|
+
lastAccessed: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Options for setting a cache entry
|
|
53
|
+
*/
|
|
54
|
+
export interface SetOptions {
|
|
55
|
+
/** TTL in milliseconds for this specific entry */
|
|
56
|
+
ttl?: number;
|
|
57
|
+
/** Size in bytes (overrides sizeCalculator) */
|
|
58
|
+
size?: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* LRU Cache class for storing hot objects with size and count limits
|
|
62
|
+
*/
|
|
63
|
+
export declare class LRUCache<K = string, V = unknown> {
|
|
64
|
+
private cache;
|
|
65
|
+
private head;
|
|
66
|
+
private tail;
|
|
67
|
+
private _bytes;
|
|
68
|
+
private _hits;
|
|
69
|
+
private _misses;
|
|
70
|
+
private _evictions;
|
|
71
|
+
private maxCount;
|
|
72
|
+
private maxBytes;
|
|
73
|
+
private defaultTTL;
|
|
74
|
+
private sizeCalculator;
|
|
75
|
+
private onEvict?;
|
|
76
|
+
/**
|
|
77
|
+
* Create a new LRU cache
|
|
78
|
+
* @param options Configuration options
|
|
79
|
+
*/
|
|
80
|
+
constructor(options?: CacheOptions);
|
|
81
|
+
/**
|
|
82
|
+
* Check if an entry is expired
|
|
83
|
+
*/
|
|
84
|
+
private isExpired;
|
|
85
|
+
/**
|
|
86
|
+
* Move a node to the head (most recently used)
|
|
87
|
+
*/
|
|
88
|
+
private moveToHead;
|
|
89
|
+
/**
|
|
90
|
+
* Remove a node from the linked list
|
|
91
|
+
*/
|
|
92
|
+
private removeNode;
|
|
93
|
+
/**
|
|
94
|
+
* Add a node to the head of the list
|
|
95
|
+
*/
|
|
96
|
+
private addToHead;
|
|
97
|
+
/**
|
|
98
|
+
* Evict items until we're under limits
|
|
99
|
+
*/
|
|
100
|
+
private evictToFit;
|
|
101
|
+
/**
|
|
102
|
+
* Get a value from the cache
|
|
103
|
+
* @param key The cache key
|
|
104
|
+
* @returns The cached value or undefined if not found/expired
|
|
105
|
+
*/
|
|
106
|
+
get(key: K): V | undefined;
|
|
107
|
+
/**
|
|
108
|
+
* Set a value in the cache
|
|
109
|
+
* @param key The cache key
|
|
110
|
+
* @param value The value to cache
|
|
111
|
+
* @param options Optional settings for this entry
|
|
112
|
+
* @returns true if successfully set, false otherwise
|
|
113
|
+
*/
|
|
114
|
+
set(key: K, value: V, options?: SetOptions): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* Check if a key exists in the cache (without updating LRU order)
|
|
117
|
+
* @param key The cache key
|
|
118
|
+
* @returns true if the key exists and is not expired
|
|
119
|
+
*/
|
|
120
|
+
has(key: K): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Delete a key from the cache
|
|
123
|
+
* @param key The cache key
|
|
124
|
+
* @returns true if the key was deleted, false if it didn't exist
|
|
125
|
+
*/
|
|
126
|
+
delete(key: K): boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Clear all entries from the cache
|
|
129
|
+
*/
|
|
130
|
+
clear(): void;
|
|
131
|
+
/**
|
|
132
|
+
* Get cache statistics
|
|
133
|
+
* @returns Current cache statistics
|
|
134
|
+
*/
|
|
135
|
+
getStats(): CacheStats;
|
|
136
|
+
/**
|
|
137
|
+
* Reset cache statistics (keeps cached data)
|
|
138
|
+
*/
|
|
139
|
+
resetStats(): void;
|
|
140
|
+
/**
|
|
141
|
+
* Get the number of items currently in the cache
|
|
142
|
+
*/
|
|
143
|
+
get size(): number;
|
|
144
|
+
/**
|
|
145
|
+
* Get the current byte size of the cache
|
|
146
|
+
*/
|
|
147
|
+
get bytes(): number;
|
|
148
|
+
/**
|
|
149
|
+
* Get all keys in the cache (in LRU order, most recent first)
|
|
150
|
+
*/
|
|
151
|
+
keys(): K[];
|
|
152
|
+
/**
|
|
153
|
+
* Get all values in the cache (in LRU order, most recent first)
|
|
154
|
+
*/
|
|
155
|
+
values(): V[];
|
|
156
|
+
/**
|
|
157
|
+
* Get all entries in the cache (in LRU order, most recent first)
|
|
158
|
+
*/
|
|
159
|
+
entries(): Array<[K, V]>;
|
|
160
|
+
/**
|
|
161
|
+
* Peek at a value without updating LRU order
|
|
162
|
+
* @param key The cache key
|
|
163
|
+
* @returns The cached value or undefined if not found/expired
|
|
164
|
+
*/
|
|
165
|
+
peek(key: K): V | undefined;
|
|
166
|
+
/**
|
|
167
|
+
* Evict expired entries from the cache
|
|
168
|
+
* @returns Number of entries evicted
|
|
169
|
+
*/
|
|
170
|
+
prune(): number;
|
|
171
|
+
/**
|
|
172
|
+
* Resize the cache to new limits
|
|
173
|
+
* @param options New size limits
|
|
174
|
+
*/
|
|
175
|
+
resize(options: Pick<CacheOptions, 'maxCount' | 'maxBytes'>): void;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Create a key serializer for complex key types
|
|
179
|
+
*/
|
|
180
|
+
export declare function createKeySerializer<K>(serialize: (key: K) => string, deserialize: (str: string) => K): {
|
|
181
|
+
serialize: (key: K) => string;
|
|
182
|
+
deserialize: (str: string) => K;
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* Default size calculator for common value types
|
|
186
|
+
*/
|
|
187
|
+
export declare function defaultSizeCalculator<T>(value: T): number;
|
|
188
|
+
//# sourceMappingURL=lru-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru-cache.d.ts","sourceRoot":"","sources":["../../src/storage/lru-cache.ts"],"names":[],"mappings":"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"}
|