@commitspark/graphql-api 1.0.0-beta.5 → 1.0.0-beta.6
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/CHANGELOG.md +9 -1
- package/dist/cjs/persistence/cache.js +21 -8
- package/dist/cjs/persistence/cache.js.map +1 -1
- package/dist/esm/persistence/cache.js +21 -8
- package/dist/esm/persistence/cache.js.map +1 -1
- package/dist/tsconfig.build.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.build.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.build.types.tsbuildinfo +1 -1
- package/dist/types/persistence/cache.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/persistence/cache.ts +42 -9
package/CHANGELOG.md
CHANGED
|
@@ -5,7 +5,15 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [1.0.0-beta.
|
|
8
|
+
## [1.0.0-beta.6] - 2025-11-28
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Ensure single adapter call when GraphQL request contains multiple queries
|
|
13
|
+
- Ensure all adapter errors are re-thrown as GraphQLError
|
|
14
|
+
- Upgrade dependencies
|
|
15
|
+
|
|
16
|
+
## [1.0.0-beta.5] - 2025-11-25
|
|
9
17
|
|
|
10
18
|
### Added
|
|
11
19
|
|
|
@@ -13,14 +13,24 @@ exports.createCacheHandler = void 0;
|
|
|
13
13
|
const git_adapter_1 = require("@commitspark/git-adapter");
|
|
14
14
|
const errors_1 = require("../graphql/errors");
|
|
15
15
|
const MAX_CACHE_ENTRIES = 50;
|
|
16
|
-
|
|
16
|
+
// intentionally not async so that the same in-flight promise is returned to all callers
|
|
17
|
+
const getEntriesRecordByRef = (entriesCache, inflightEntries, cacheSize, context, ref) => {
|
|
17
18
|
const cacheRecord = entriesCache.get(ref);
|
|
18
19
|
if (cacheRecord !== undefined) {
|
|
19
20
|
// move map key back to end of list (newest)
|
|
20
21
|
entriesCache.delete(ref);
|
|
21
22
|
entriesCache.set(ref, cacheRecord);
|
|
22
|
-
return cacheRecord;
|
|
23
|
+
return Promise.resolve(cacheRecord);
|
|
23
24
|
}
|
|
25
|
+
const inflightPromise = inflightEntries.get(ref);
|
|
26
|
+
if (inflightPromise) {
|
|
27
|
+
return inflightPromise;
|
|
28
|
+
}
|
|
29
|
+
const fetchPromise = fetchAndCacheEntries(entriesCache, cacheSize, context, ref).finally(() => inflightEntries.delete(ref));
|
|
30
|
+
inflightEntries.set(ref, fetchPromise);
|
|
31
|
+
return fetchPromise;
|
|
32
|
+
};
|
|
33
|
+
const fetchAndCacheEntries = (entriesCache, cacheSize, context, ref) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
34
|
let allEntries;
|
|
25
35
|
try {
|
|
26
36
|
allEntries = yield context.gitAdapter.getEntries(ref);
|
|
@@ -29,14 +39,15 @@ const getEntriesRecordByRef = (entriesCache, cacheSize, context, ref) => __await
|
|
|
29
39
|
if (err instanceof git_adapter_1.GitAdapterError) {
|
|
30
40
|
throw (0, errors_1.createError)(err.message, err.code, {});
|
|
31
41
|
}
|
|
32
|
-
|
|
42
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
43
|
+
throw (0, errors_1.createError)(message, "INTERNAL_ERROR" /* ErrorCode.INTERNAL_ERROR */, {});
|
|
33
44
|
}
|
|
34
45
|
const entriesById = new Map(allEntries.map((entry) => [entry.id, entry]));
|
|
35
46
|
const entriesByType = new Map();
|
|
36
47
|
for (const entry of allEntries) {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
entriesByType.set(entry.metadata.type,
|
|
48
|
+
const existingEntriesOfType = entriesByType.get(entry.metadata.type) || [];
|
|
49
|
+
existingEntriesOfType.push(entry);
|
|
50
|
+
entriesByType.set(entry.metadata.type, existingEntriesOfType);
|
|
40
51
|
}
|
|
41
52
|
const newCacheRecord = {
|
|
42
53
|
byType: entriesByType,
|
|
@@ -68,7 +79,8 @@ const getSchemaStringByRef = (schemaCache, cacheSize, context, ref) => __awaiter
|
|
|
68
79
|
if (err instanceof git_adapter_1.GitAdapterError) {
|
|
69
80
|
throw (0, errors_1.createError)(err.message, err.code, {});
|
|
70
81
|
}
|
|
71
|
-
|
|
82
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
83
|
+
throw (0, errors_1.createError)(message, "INTERNAL_ERROR" /* ErrorCode.INTERNAL_ERROR */, {});
|
|
72
84
|
}
|
|
73
85
|
schemaCache.set(ref, schemaString);
|
|
74
86
|
if (schemaCache.size > cacheSize) {
|
|
@@ -83,8 +95,9 @@ const getSchemaStringByRef = (schemaCache, cacheSize, context, ref) => __awaiter
|
|
|
83
95
|
const createCacheHandler = (cacheSize = MAX_CACHE_ENTRIES) => {
|
|
84
96
|
const entriesCache = new Map();
|
|
85
97
|
const schemaCache = new Map();
|
|
98
|
+
const inflightEntries = new Map();
|
|
86
99
|
return {
|
|
87
|
-
getEntriesRecord: (...args) => getEntriesRecordByRef(entriesCache, cacheSize, ...args),
|
|
100
|
+
getEntriesRecord: (...args) => getEntriesRecordByRef(entriesCache, inflightEntries, cacheSize, ...args),
|
|
88
101
|
getSchema: (...args) => getSchemaStringByRef(schemaCache, cacheSize, ...args),
|
|
89
102
|
};
|
|
90
103
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/persistence/cache.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0DAAiE;AAEjE,
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/persistence/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import { GitAdapterError } from '@commitspark/git-adapter';
|
|
2
2
|
import { createError } from '../graphql/errors';
|
|
3
3
|
const MAX_CACHE_ENTRIES = 50;
|
|
4
|
-
|
|
4
|
+
// intentionally not async so that the same in-flight promise is returned to all callers
|
|
5
|
+
const getEntriesRecordByRef = (entriesCache, inflightEntries, cacheSize, context, ref) => {
|
|
5
6
|
const cacheRecord = entriesCache.get(ref);
|
|
6
7
|
if (cacheRecord !== undefined) {
|
|
7
8
|
// move map key back to end of list (newest)
|
|
8
9
|
entriesCache.delete(ref);
|
|
9
10
|
entriesCache.set(ref, cacheRecord);
|
|
10
|
-
return cacheRecord;
|
|
11
|
+
return Promise.resolve(cacheRecord);
|
|
11
12
|
}
|
|
13
|
+
const inflightPromise = inflightEntries.get(ref);
|
|
14
|
+
if (inflightPromise) {
|
|
15
|
+
return inflightPromise;
|
|
16
|
+
}
|
|
17
|
+
const fetchPromise = fetchAndCacheEntries(entriesCache, cacheSize, context, ref).finally(() => inflightEntries.delete(ref));
|
|
18
|
+
inflightEntries.set(ref, fetchPromise);
|
|
19
|
+
return fetchPromise;
|
|
20
|
+
};
|
|
21
|
+
const fetchAndCacheEntries = async (entriesCache, cacheSize, context, ref) => {
|
|
12
22
|
let allEntries;
|
|
13
23
|
try {
|
|
14
24
|
allEntries = await context.gitAdapter.getEntries(ref);
|
|
@@ -17,14 +27,15 @@ const getEntriesRecordByRef = async (entriesCache, cacheSize, context, ref) => {
|
|
|
17
27
|
if (err instanceof GitAdapterError) {
|
|
18
28
|
throw createError(err.message, err.code, {});
|
|
19
29
|
}
|
|
20
|
-
|
|
30
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
31
|
+
throw createError(message, "INTERNAL_ERROR" /* ErrorCode.INTERNAL_ERROR */, {});
|
|
21
32
|
}
|
|
22
33
|
const entriesById = new Map(allEntries.map((entry) => [entry.id, entry]));
|
|
23
34
|
const entriesByType = new Map();
|
|
24
35
|
for (const entry of allEntries) {
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
entriesByType.set(entry.metadata.type,
|
|
36
|
+
const existingEntriesOfType = entriesByType.get(entry.metadata.type) || [];
|
|
37
|
+
existingEntriesOfType.push(entry);
|
|
38
|
+
entriesByType.set(entry.metadata.type, existingEntriesOfType);
|
|
28
39
|
}
|
|
29
40
|
const newCacheRecord = {
|
|
30
41
|
byType: entriesByType,
|
|
@@ -56,7 +67,8 @@ const getSchemaStringByRef = async (schemaCache, cacheSize, context, ref) => {
|
|
|
56
67
|
if (err instanceof GitAdapterError) {
|
|
57
68
|
throw createError(err.message, err.code, {});
|
|
58
69
|
}
|
|
59
|
-
|
|
70
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
71
|
+
throw createError(message, "INTERNAL_ERROR" /* ErrorCode.INTERNAL_ERROR */, {});
|
|
60
72
|
}
|
|
61
73
|
schemaCache.set(ref, schemaString);
|
|
62
74
|
if (schemaCache.size > cacheSize) {
|
|
@@ -71,8 +83,9 @@ const getSchemaStringByRef = async (schemaCache, cacheSize, context, ref) => {
|
|
|
71
83
|
export const createCacheHandler = (cacheSize = MAX_CACHE_ENTRIES) => {
|
|
72
84
|
const entriesCache = new Map();
|
|
73
85
|
const schemaCache = new Map();
|
|
86
|
+
const inflightEntries = new Map();
|
|
74
87
|
return {
|
|
75
|
-
getEntriesRecord: (...args) => getEntriesRecordByRef(entriesCache, cacheSize, ...args),
|
|
88
|
+
getEntriesRecord: (...args) => getEntriesRecordByRef(entriesCache, inflightEntries, cacheSize, ...args),
|
|
76
89
|
getSchema: (...args) => getSchemaStringByRef(schemaCache, cacheSize, ...args),
|
|
77
90
|
};
|
|
78
91
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/persistence/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/persistence/cache.ts"],"names":[],"mappings":"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"}
|