@openstax/ts-utils 1.7.0 → 1.9.0
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/dist/cjs/{fetch.d.ts → fetch/index.d.ts} +1 -1
- package/dist/{esm/middleware.d.ts → cjs/middleware/index.d.ts} +2 -2
- package/dist/cjs/misc/hashValue.d.ts +2 -3
- package/dist/cjs/{pagination.d.ts → pagination/index.d.ts} +1 -1
- package/dist/cjs/{pagination.js → pagination/index.js} +3 -3
- package/dist/cjs/routing/index.d.ts +0 -3
- package/dist/cjs/routing/index.js +7 -9
- package/dist/cjs/services/authProvider/decryption.js +5 -5
- package/dist/cjs/services/authProvider/index.d.ts +0 -2
- package/dist/cjs/services/authProvider/subrequest.js +6 -6
- package/dist/cjs/services/documentStore/dynamoEncoding.d.ts +10 -0
- package/dist/cjs/services/documentStore/dynamoEncoding.js +52 -0
- package/dist/cjs/services/documentStore/index.d.ts +14 -0
- package/dist/cjs/services/documentStore/unversioned/dynamodb.d.ts +13 -0
- package/dist/cjs/services/documentStore/unversioned/dynamodb.js +51 -0
- package/dist/cjs/services/documentStore/unversioned/file-system.d.ts +15 -0
- package/dist/cjs/services/documentStore/unversioned/file-system.js +81 -0
- package/dist/cjs/services/documentStore/unversioned/index.d.ts +2 -0
- package/dist/cjs/services/documentStore/unversioned/index.js +2 -0
- package/dist/{esm/services/versionedDocumentStore → cjs/services/documentStore/versioned}/dynamodb.d.ts +6 -11
- package/dist/cjs/services/{versionedDocumentStore → documentStore/versioned}/dynamodb.js +27 -70
- package/dist/cjs/services/{versionedDocumentStore → documentStore/versioned}/file-system.d.ts +6 -11
- package/dist/cjs/services/{versionedDocumentStore → documentStore/versioned}/file-system.js +16 -16
- package/dist/cjs/services/{versionedDocumentStore → documentStore/versioned}/index.d.ts +2 -8
- package/dist/cjs/services/documentStore/versioned/index.js +2 -0
- package/dist/cjs/services/exercisesGateway/index.d.ts +3 -6
- package/dist/cjs/services/exercisesGateway/index.js +7 -7
- package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +4 -0
- package/dist/esm/{fetch.d.ts → fetch/index.d.ts} +1 -1
- package/dist/{cjs/middleware.d.ts → esm/middleware/index.d.ts} +2 -2
- package/dist/esm/misc/hashValue.d.ts +2 -3
- package/dist/esm/{pagination.d.ts → pagination/index.d.ts} +1 -1
- package/dist/esm/{pagination.js → pagination/index.js} +3 -3
- package/dist/esm/routing/index.d.ts +0 -3
- package/dist/esm/routing/index.js +7 -9
- package/dist/esm/services/authProvider/decryption.js +5 -5
- package/dist/esm/services/authProvider/index.d.ts +0 -2
- package/dist/esm/services/authProvider/subrequest.js +6 -6
- package/dist/esm/services/documentStore/dynamoEncoding.d.ts +10 -0
- package/dist/esm/services/documentStore/dynamoEncoding.js +45 -0
- package/dist/esm/services/documentStore/index.d.ts +14 -0
- package/dist/esm/services/documentStore/unversioned/dynamodb.d.ts +13 -0
- package/dist/esm/services/documentStore/unversioned/dynamodb.js +47 -0
- package/dist/esm/services/documentStore/unversioned/file-system.d.ts +15 -0
- package/dist/esm/services/documentStore/unversioned/file-system.js +51 -0
- package/dist/esm/services/documentStore/unversioned/index.d.ts +2 -0
- package/dist/esm/services/documentStore/unversioned/index.js +1 -0
- package/dist/{cjs/services/versionedDocumentStore → esm/services/documentStore/versioned}/dynamodb.d.ts +6 -11
- package/dist/esm/services/{versionedDocumentStore → documentStore/versioned}/dynamodb.js +17 -60
- package/dist/esm/services/{versionedDocumentStore → documentStore/versioned}/file-system.d.ts +6 -11
- package/dist/esm/services/{versionedDocumentStore → documentStore/versioned}/file-system.js +16 -16
- package/dist/esm/services/{versionedDocumentStore → documentStore/versioned}/index.d.ts +2 -8
- package/dist/esm/services/documentStore/versioned/index.js +1 -0
- package/dist/esm/services/exercisesGateway/index.d.ts +3 -6
- package/dist/esm/services/exercisesGateway/index.js +7 -7
- package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +4 -0
- package/package.json +118 -13
- package/dist/cjs/profile.d.ts +0 -61
- package/dist/cjs/profile.js +0 -199
- package/dist/esm/profile.d.ts +0 -61
- package/dist/esm/profile.js +0 -191
- /package/dist/cjs/{assertions.d.ts → assertions/index.d.ts} +0 -0
- /package/dist/cjs/{assertions.js → assertions/index.js} +0 -0
- /package/dist/cjs/{errors.d.ts → errors/index.d.ts} +0 -0
- /package/dist/cjs/{errors.js → errors/index.js} +0 -0
- /package/dist/cjs/{fetch.js → fetch/index.js} +0 -0
- /package/dist/cjs/{guards.d.ts → guards/index.d.ts} +0 -0
- /package/dist/cjs/{guards.js → guards/index.js} +0 -0
- /package/dist/cjs/{middleware.js → middleware/index.js} +0 -0
- /package/dist/cjs/services/{versionedDocumentStore → documentStore}/index.js +0 -0
- /package/dist/esm/{assertions.d.ts → assertions/index.d.ts} +0 -0
- /package/dist/esm/{assertions.js → assertions/index.js} +0 -0
- /package/dist/esm/{errors.d.ts → errors/index.d.ts} +0 -0
- /package/dist/esm/{errors.js → errors/index.js} +0 -0
- /package/dist/esm/{fetch.js → fetch/index.js} +0 -0
- /package/dist/esm/{guards.d.ts → guards/index.d.ts} +0 -0
- /package/dist/esm/{guards.js → guards/index.js} +0 -0
- /package/dist/esm/{middleware.js → middleware/index.js} +0 -0
- /package/dist/esm/services/{versionedDocumentStore → documentStore}/index.js +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as fsModule from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
import { hashValue } from '
|
|
4
|
-
import { resolveConfigValue } from '
|
|
5
|
-
import { ifDefined } from '
|
|
3
|
+
import { hashValue } from '../../..';
|
|
4
|
+
import { resolveConfigValue } from '../../../config';
|
|
5
|
+
import { ifDefined } from '../../../guards';
|
|
6
6
|
const PAGE_LIMIT = 5;
|
|
7
|
-
export const fileSystemVersionedDocumentStore = (initializer) => () => (configProvider) => (
|
|
7
|
+
export const fileSystemVersionedDocumentStore = (initializer) => () => (configProvider) => (_, hashKey, getAuthor) => {
|
|
8
8
|
const tableName = resolveConfigValue(configProvider[initializer.configSpace || 'fileSystem'].tableName);
|
|
9
9
|
const filePath = tableName.then((table) => path.join(initializer.dataDir, table));
|
|
10
10
|
const { readFile, writeFile } = ifDefined(initializer.fs, fsModule);
|
|
@@ -30,14 +30,14 @@ export const fileSystemVersionedDocumentStore = (initializer) => () => (configPr
|
|
|
30
30
|
}));
|
|
31
31
|
let previousSave;
|
|
32
32
|
return {
|
|
33
|
-
loadAllDocumentsTheBadWay:
|
|
33
|
+
loadAllDocumentsTheBadWay: async () => {
|
|
34
34
|
await load;
|
|
35
35
|
return Object.entries(data || []).map(([, versions]) => {
|
|
36
36
|
const versionsList = Object.values(versions);
|
|
37
37
|
return versionsList[versionsList.length - 1];
|
|
38
38
|
});
|
|
39
|
-
}
|
|
40
|
-
getVersions:
|
|
39
|
+
},
|
|
40
|
+
getVersions: async (id, startVersion) => {
|
|
41
41
|
await load;
|
|
42
42
|
const versions = data === null || data === void 0 ? void 0 : data[hashValue(id)];
|
|
43
43
|
const versionsList = versions ? Object.values(versions).reverse() : undefined;
|
|
@@ -51,8 +51,8 @@ export const fileSystemVersionedDocumentStore = (initializer) => () => (configPr
|
|
|
51
51
|
items,
|
|
52
52
|
nextPageToken: hasMore ? items[items.length - 1].timestamp : undefined
|
|
53
53
|
};
|
|
54
|
-
}
|
|
55
|
-
getItem:
|
|
54
|
+
},
|
|
55
|
+
getItem: async (id, timestamp) => {
|
|
56
56
|
await load;
|
|
57
57
|
const versions = data === null || data === void 0 ? void 0 : data[hashValue(id)];
|
|
58
58
|
if (timestamp) {
|
|
@@ -60,14 +60,14 @@ export const fileSystemVersionedDocumentStore = (initializer) => () => (configPr
|
|
|
60
60
|
}
|
|
61
61
|
const versionsList = versions ? Object.values(versions) : [];
|
|
62
62
|
return versionsList[versionsList.length - 1];
|
|
63
|
-
}
|
|
64
|
-
prepareItem:
|
|
63
|
+
},
|
|
64
|
+
prepareItem: async (item, ...authorArgs) => {
|
|
65
65
|
// this getAuthor type is terrible
|
|
66
66
|
const author = getAuthor ? await getAuthor(...authorArgs) : authorArgs[0];
|
|
67
67
|
const timestamp = new Date().getTime();
|
|
68
68
|
return {
|
|
69
69
|
document: { ...item, timestamp, author },
|
|
70
|
-
save:
|
|
70
|
+
save: async (changes) => {
|
|
71
71
|
await load;
|
|
72
72
|
await previousSave;
|
|
73
73
|
const save = previousSave = new Promise(resolve => (async () => {
|
|
@@ -80,10 +80,10 @@ export const fileSystemVersionedDocumentStore = (initializer) => () => (configPr
|
|
|
80
80
|
writeFile(path, JSON.stringify(data, null, 2), () => resolve(document));
|
|
81
81
|
})());
|
|
82
82
|
return await save;
|
|
83
|
-
}
|
|
83
|
+
}
|
|
84
84
|
};
|
|
85
|
-
}
|
|
86
|
-
putItem:
|
|
85
|
+
},
|
|
86
|
+
putItem: async (item, ...authorArgs) => {
|
|
87
87
|
await load;
|
|
88
88
|
await previousSave;
|
|
89
89
|
const save = previousSave = new Promise(resolve => (async () => {
|
|
@@ -98,6 +98,6 @@ export const fileSystemVersionedDocumentStore = (initializer) => () => (configPr
|
|
|
98
98
|
writeFile(path, JSON.stringify(data, null, 2), () => resolve(document));
|
|
99
99
|
})());
|
|
100
100
|
return await save;
|
|
101
|
-
}
|
|
101
|
+
},
|
|
102
102
|
};
|
|
103
103
|
};
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
+
import { TDocument } from '..';
|
|
1
2
|
import { dynamoVersionedDocumentStore } from './dynamodb';
|
|
2
|
-
export declare type DocumentBaseValueTypes = number | boolean | string | null | DocumentBaseMapType | DocumentBaseListType;
|
|
3
|
-
export declare type DocumentBaseMapType = {
|
|
4
|
-
[key: string]: DocumentBaseValueTypes;
|
|
5
|
-
};
|
|
6
|
-
export declare type DocumentBaseListType = DocumentBaseValueTypes[];
|
|
7
3
|
export declare type VersionedDocumentAuthor = {
|
|
8
4
|
type: 'user';
|
|
9
5
|
uuid: string;
|
|
@@ -17,7 +13,5 @@ export declare type VersionedDocumentRequiredFields = {
|
|
|
17
13
|
timestamp: number;
|
|
18
14
|
author: VersionedDocumentAuthor;
|
|
19
15
|
};
|
|
20
|
-
export declare type
|
|
21
|
-
[k in keyof T]: DocumentBaseValueTypes;
|
|
22
|
-
} & VersionedDocumentRequiredFields;
|
|
16
|
+
export declare type VersionedTDocument<T> = TDocument<T> & VersionedDocumentRequiredFields;
|
|
23
17
|
export declare type VersionedDocumentStoreCreator = typeof dynamoVersionedDocumentStore;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ConfigProviderForConfig } from '../../config';
|
|
2
2
|
import { GenericFetch } from '../../fetch';
|
|
3
|
-
import { Track } from '../../profile';
|
|
4
3
|
export declare type Config = {
|
|
5
4
|
defaultCorrectness?: string;
|
|
6
5
|
exercisesHost: string;
|
|
@@ -63,12 +62,10 @@ export declare const exercisesGateway: <C extends string = "exercises">(initiali
|
|
|
63
62
|
defaultCorrectness?: import("../../config").ConfigValueProvider<string> | undefined;
|
|
64
63
|
exercisesHost: import("../../config").ConfigValueProvider<string>;
|
|
65
64
|
exercisesAuthToken: import("../../config").ConfigValueProvider<string>;
|
|
66
|
-
}; }) => ({
|
|
67
|
-
|
|
68
|
-
}) => {
|
|
69
|
-
searchDigest: (query: string, page?: any, per_page?: any) => Promise<string>;
|
|
65
|
+
}; }) => (_: {}) => {
|
|
66
|
+
searchDigest: (query: string, page?: number, per_page?: number) => Promise<string>;
|
|
70
67
|
get: (uuid: string) => Promise<Exercise | undefined>;
|
|
71
|
-
search: (query: string, page?:
|
|
68
|
+
search: (query: string, page?: number, per_page?: number) => Promise<ExercisesSearchResultsWithDigest>;
|
|
72
69
|
};
|
|
73
70
|
export declare type ExercisesGateway = ReturnType<ReturnType<ReturnType<typeof exercisesGateway>>>;
|
|
74
71
|
export {};
|
|
@@ -32,7 +32,7 @@ export const exercisesGateway = (initializer) => (configProvider) => {
|
|
|
32
32
|
}
|
|
33
33
|
return exercise;
|
|
34
34
|
};
|
|
35
|
-
return (
|
|
35
|
+
return (_) => {
|
|
36
36
|
const request = async (method, path, query = undefined) => {
|
|
37
37
|
const host = (await exercisesHost()).replace(/\/+$/, '');
|
|
38
38
|
const baseUrl = `${host}/api/${path}`;
|
|
@@ -44,22 +44,22 @@ export const exercisesGateway = (initializer) => (configProvider) => {
|
|
|
44
44
|
method,
|
|
45
45
|
});
|
|
46
46
|
};
|
|
47
|
-
const searchDigest =
|
|
47
|
+
const searchDigest = async (query, page = 1, per_page = 100) => {
|
|
48
48
|
const response = await request(METHOD.HEAD, 'exercises', { query, page, per_page });
|
|
49
49
|
return assertString(response.headers.get('X-Digest'), 'OpenStax Exercises search endpoint HEAD did not return an X-Digest header');
|
|
50
|
-
}
|
|
51
|
-
const search =
|
|
50
|
+
};
|
|
51
|
+
const search = async (query, page = 1, per_page = 100) => {
|
|
52
52
|
const response = await request(METHOD.GET, 'exercises', { query, page, per_page });
|
|
53
53
|
const digest = assertString(response.headers.get('X-Digest'), 'OpenStax Exercises search endpoint GET did not return an X-Digest header');
|
|
54
54
|
const { items, total_count } = await response.json();
|
|
55
55
|
return { digest, items: await Promise.all(items.map(doDefaultCorrectness)), total_count };
|
|
56
|
-
}
|
|
57
|
-
const get =
|
|
56
|
+
};
|
|
57
|
+
const get = async (uuid) => {
|
|
58
58
|
const response = await request(METHOD.GET, `exercises/${uuid}`);
|
|
59
59
|
return response.status === 404
|
|
60
60
|
? undefined
|
|
61
61
|
: response.json().then(doDefaultCorrectness);
|
|
62
|
-
}
|
|
62
|
+
};
|
|
63
63
|
return {
|
|
64
64
|
searchDigest,
|
|
65
65
|
get,
|