@comapeo/core 2.3.0 → 2.3.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/dist/core-manager/index.d.ts.map +1 -1
- package/dist/datastore/index.d.ts +1 -1
- package/dist/datatype/index.d.ts +141 -111
- package/dist/datatype/index.d.ts.map +1 -0
- package/dist/fastify-plugins/utils.d.ts +0 -9
- package/dist/fastify-plugins/utils.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/mapeo-project.d.ts +17 -17
- package/dist/schema/project.d.ts +1 -1
- package/dist/translation-api.d.ts +2 -2
- package/dist/translation-api.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/core-manager/index.js +0 -2
- package/src/datatype/index.js +57 -19
- package/src/fastify-plugins/maps.js +1 -0
- package/src/fastify-plugins/utils.js +0 -13
- package/src/translation-api.js +2 -1
- package/src/datatype/index.d.ts +0 -112
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core-manager/index.js"],"names":[],"mappings":"AAwBA,kDAAqE;AAErE,kDAAkD;AAClD,8EAA8E;AAC9E;;;;;GAKG;AAEH;;GAEG;AACH;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core-manager/index.js"],"names":[],"mappings":"AAwBA,kDAAqE;AAErE,kDAAkD;AAClD,8EAA8E;AAC9E;;;;;GAKG;AAEH;;GAEG;AACH;IAiBE,kFAEC;IAED;;;;;;;;;;OAUG;IACH,8GATG;QAA4E,EAAE,EAAtE,OAAO,4BAA4B,EAAE,qBAAqB;QACd,UAAU,EAAtD,2CAAkC;QAClB,UAAU,EAA1B,MAAM;QACW,gBAAgB;QACY,cAAc;QACb,OAAO,EAArD,OAAO,WAAW,EAAE,gBAAgB;QAClB,YAAY;QACb,MAAM;KAAC,EAyHlC;IAED,uBAEC;IAED,wBAEC;IAED,oCAEC;IAED;;;;OAIG;IACH,SAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,yBAFW,SAAS,cAInB;IAED;;;;OAIG;IACH,oBAFW,SAAS,gBAInB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,IAAI,GAAG,SAAS,CAK5B;IAED;;;;;OAKG;IACH,oCAHW,MAAM,GACJ,UAAU,GAAG,SAAS,CAOlC;IAED;;;OAGG;IACH,uBAQC;IAED;;;;;;OAMG;IACH,aAJW,MAAM,aACN,SAAS,GACP,UAAU,CAItB;IAiJD;;;OAGG;IACH,gCAHW,UAAU,QACV,aAAa,QAIvB;IAgDD;;;OAGG;IACH,4BAHW,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC,CAgBzB;IAhCD;;;;;;;;OAQG;IACH,gCAFW,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,qBAK/C;;CAqBF;mBArda,UAAU,QAAQ,EAAE,MAAM,CAAC;yBAC3B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE;;gBAGjD,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI;iBAChC,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,WAAW,CAAA;KAAE,KAAK,IAAI;4BACtH,CAAC,UAAU,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI;;;kBAmdvD,MAAM;WACN,MAAM;cACN,WAAW;eACX,SAAS;;6BAtfM,oBAAoB;+BAoB4B,aAAa;gCAAb,aAAa;mCAAb,aAAa;sBAnBpE,WAAW;uBAUV,cAAc;2BAQV,WAAW;uCACuC,aAAa"}
|
|
@@ -44,7 +44,7 @@ export class DataStore<TNamespace extends keyof NamespaceSchemas = "auth" | "con
|
|
|
44
44
|
});
|
|
45
45
|
get indexer(): MultiCoreIndexer<"binary">;
|
|
46
46
|
get namespace(): TNamespace;
|
|
47
|
-
get schemas(): ("
|
|
47
|
+
get schemas(): ("observation" | "track" | "remoteDetectionAlert")[] | ("translation" | "preset" | "field" | "projectSettings" | "deviceInfo" | "icon")[] | ("coreOwnership" | "role")[];
|
|
48
48
|
get writerCore(): import("../core-manager/index.js").Core;
|
|
49
49
|
/**
|
|
50
50
|
* UNSAFE: Does not check links: [] refer to a valid doc - should only be used
|
package/dist/datatype/index.d.ts
CHANGED
|
@@ -1,112 +1,142 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
T extends import(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
delete(docId: string): Promise<TDoc & { forks: string[] }>
|
|
1
|
+
export const kCreateWithDocId: unique symbol;
|
|
2
|
+
export const kSelect: unique symbol;
|
|
3
|
+
export const kTable: unique symbol;
|
|
4
|
+
export const kDataStore: unique symbol;
|
|
5
|
+
/**
|
|
6
|
+
* @template {DataStore} TDataStore
|
|
7
|
+
* @template {MapeoDocTables} TTable
|
|
8
|
+
* @template {TTable['_']['name']} TSchemaName
|
|
9
|
+
* @template {MapeoDocMap[TSchemaName]} TDoc
|
|
10
|
+
* @template {MapeoValueMap[TSchemaName]} TValue
|
|
11
|
+
* @extends {TypedEmitter<DataTypeEvents<TDoc> & DefaultEmitterEvents<DataTypeEvents<TDoc>>>}
|
|
12
|
+
*/
|
|
13
|
+
export class DataType<TDataStore extends DataStore, TTable extends MapeoDocTables, TSchemaName extends TTable["_"]["name"], TDoc extends MapeoDocMap[TSchemaName], TValue extends MapeoValueMap[TSchemaName]> extends TypedEmitter<DataTypeEvents<TDoc> & DefaultEmitterEvents<DataTypeEvents<TDoc>>> {
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @param {object} opts
|
|
17
|
+
* @param {TTable} opts.table
|
|
18
|
+
* @param {TDataStore} opts.dataStore
|
|
19
|
+
* @param {import('drizzle-orm/better-sqlite3').BetterSQLite3Database} opts.db
|
|
20
|
+
* @param {import('../translation-api.js').default['get']} opts.getTranslations
|
|
21
|
+
*/
|
|
22
|
+
constructor({ dataStore, table, db, getTranslations }: {
|
|
23
|
+
table: TTable;
|
|
24
|
+
dataStore: TDataStore;
|
|
25
|
+
db: import("drizzle-orm/better-sqlite3").BetterSQLite3Database;
|
|
26
|
+
getTranslations: import("../translation-api.js").default["get"];
|
|
27
|
+
});
|
|
28
|
+
/** @returns {TSchemaName} */
|
|
29
|
+
get schemaName(): TSchemaName;
|
|
30
|
+
/** @returns {TDataStore['namespace']} */
|
|
31
|
+
get namespace(): TDataStore["namespace"];
|
|
32
|
+
/**
|
|
33
|
+
* @template {Exact<ExcludeSchema<TValue, 'coreOwnership'>, T>} T
|
|
34
|
+
* @param {T} value
|
|
35
|
+
* @returns {Promise<TDoc & { forks: string[] }>}
|
|
36
|
+
*/
|
|
37
|
+
create<T extends Exact<ExcludeSchema<TValue, "coreOwnership">, T>>(value: T): Promise<TDoc & {
|
|
38
|
+
forks: string[];
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* @overload
|
|
42
|
+
* @param {string} docId
|
|
43
|
+
* @param {object} [options]
|
|
44
|
+
* @param {true} [options.mustBeFound]
|
|
45
|
+
* @param {string} [options.lang]
|
|
46
|
+
* @returns {Promise<TDoc & { forks: string[] }>}
|
|
47
|
+
*/
|
|
48
|
+
getByDocId(docId: string, options?: {
|
|
49
|
+
mustBeFound?: true | undefined;
|
|
50
|
+
lang?: string | undefined;
|
|
51
|
+
} | undefined): Promise<TDoc & {
|
|
52
|
+
forks: string[];
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* @param {string} versionId
|
|
56
|
+
* @param {{ lang?: string }} [opts]
|
|
57
|
+
* @returns {Promise<TDoc>}
|
|
58
|
+
*/
|
|
59
|
+
getByVersionId(versionId: string, { lang }?: {
|
|
60
|
+
lang?: string;
|
|
61
|
+
} | undefined): Promise<TDoc>;
|
|
62
|
+
/**
|
|
63
|
+
* @param {object} opts
|
|
64
|
+
* @param {boolean} [opts.includeDeleted]
|
|
65
|
+
* @param {string} [opts.lang]
|
|
66
|
+
* @returns {Promise<Array<TDoc & { forks: string[] }>>}
|
|
67
|
+
*/
|
|
68
|
+
getMany({ includeDeleted, lang }?: {
|
|
69
|
+
includeDeleted?: boolean | undefined;
|
|
70
|
+
lang?: string | undefined;
|
|
71
|
+
}): Promise<Array<TDoc & {
|
|
72
|
+
forks: string[];
|
|
73
|
+
}>>;
|
|
74
|
+
/**
|
|
75
|
+
* @template {Exact<ExcludeSchema<TValue, 'coreOwnership'>, T>} T
|
|
76
|
+
* @param {string | string[]} versionId
|
|
77
|
+
* @param {T} value
|
|
78
|
+
* @returns {Promise<TDoc & { forks: string[] }>}
|
|
79
|
+
*/
|
|
80
|
+
update<T extends Exact<ExcludeSchema<TValue, "coreOwnership">, T>>(versionId: string | string[], value: T): Promise<TDoc & {
|
|
81
|
+
forks: string[];
|
|
82
|
+
}>;
|
|
83
|
+
/**
|
|
84
|
+
* @param {string} docId
|
|
85
|
+
* @returns {Promise<TDoc & { forks: string[] }>}
|
|
86
|
+
*/
|
|
87
|
+
delete(docId: string): Promise<TDoc & {
|
|
88
|
+
forks: string[];
|
|
89
|
+
}>;
|
|
90
|
+
/** @returns {TTable} */
|
|
91
|
+
get [kTable](): TTable;
|
|
92
|
+
/** @returns {TDataStore} */
|
|
93
|
+
get [kDataStore](): TDataStore;
|
|
94
|
+
/**
|
|
95
|
+
* @param {string} docId
|
|
96
|
+
* @param {ExcludeSchema<TValue, 'coreOwnership'> | CoreOwnershipWithSignaturesValue} value
|
|
97
|
+
* @param {{ checkExisting?: boolean }} [opts] - only used internally to skip the checkExisting check when creating a document with a random ID (collisions should be too small probability to be worth checking for)
|
|
98
|
+
* @returns {Promise<TDoc & { forks: string[] }>}
|
|
99
|
+
*/
|
|
100
|
+
[kCreateWithDocId](docId: string, value: ExcludeSchema<TValue, "coreOwnership"> | CoreOwnershipWithSignaturesValue, { checkExisting }?: {
|
|
101
|
+
checkExisting?: boolean;
|
|
102
|
+
} | undefined): Promise<TDoc & {
|
|
103
|
+
forks: string[];
|
|
104
|
+
}>;
|
|
105
|
+
[kSelect](): Promise<Omit<SQLiteSelectBase<import("drizzle-orm/query-builders/select.types").GetSelectTableName<TTable>, "sync", RunResult, import("drizzle-orm/query-builders/select.types").GetSelectTableSelection<TTable>, "single", import("drizzle-orm/query-builders/select.types").GetSelectTableName<TTable> extends infer T ? T extends import("drizzle-orm/query-builders/select.types").GetSelectTableName<TTable> ? T extends string ? Record<T, "not-null"> : {} : never : never, false, never, ({ [Key in keyof import("drizzle-orm/query-builders/select.types").GetSelectTableSelection<TTable> & string]: import("drizzle-orm/query-builders/select.types").SelectResultField<import("drizzle-orm/query-builders/select.types").GetSelectTableSelection<TTable>[Key], true>; } extends infer T_1 ? { [K in keyof T_1]: { [Key in keyof import("drizzle-orm/query-builders/select.types").GetSelectTableSelection<TTable> & string]: import("drizzle-orm/query-builders/select.types").SelectResultField<import("drizzle-orm/query-builders/select.types").GetSelectTableSelection<TTable>[Key], true>; }[K]; } : never)[], import("drizzle-orm/query-builders/select.types").BuildSubquerySelection<import("drizzle-orm/query-builders/select.types").GetSelectTableSelection<TTable>, import("drizzle-orm/query-builders/select.types").GetSelectTableName<TTable> extends infer T ? T extends import("drizzle-orm/query-builders/select.types").GetSelectTableName<TTable> ? T extends string ? Record<T, "not-null"> : {} : never : never>>, "then" | "catch" | "finally"> & {
|
|
106
|
+
then?: undefined;
|
|
107
|
+
catch?: undefined;
|
|
108
|
+
finally?: undefined;
|
|
109
|
+
}>;
|
|
110
|
+
#private;
|
|
112
111
|
}
|
|
112
|
+
export type MapeoDocTableName = `${MapeoDoc["schemaName"]}Table`;
|
|
113
|
+
export type GetMapeoDocTables<T> = T[(keyof T) & MapeoDocTableName];
|
|
114
|
+
/**
|
|
115
|
+
* Union of Drizzle schema tables that correspond to MapeoDoc types (e.g. excluding backlink tables and other utility tables)
|
|
116
|
+
*/
|
|
117
|
+
export type MapeoDocTables = GetMapeoDocTables<typeof import("../schema/project.js")> | GetMapeoDocTables<typeof import("../schema/client.js")>;
|
|
118
|
+
export type MapeoDocTablesMap = { [K in MapeoDocTables["_"]["name"]]: Extract<MapeoDocTables, {
|
|
119
|
+
_: {
|
|
120
|
+
name: K;
|
|
121
|
+
};
|
|
122
|
+
}>; };
|
|
123
|
+
export type OmitUnion<T, K extends keyof any> = T extends any ? Omit<T, K> : never;
|
|
124
|
+
export type ExcludeSchema<T extends MapeoValue, S extends MapeoValue["schemaName"]> = Exclude<T, {
|
|
125
|
+
schemaName: S;
|
|
126
|
+
}>;
|
|
127
|
+
export type DataTypeEvents<TDoc extends MapeoDoc> = {
|
|
128
|
+
"updated-docs": (docs: TDoc[]) => void;
|
|
129
|
+
};
|
|
130
|
+
import type { DataStore } from '../datastore/index.js';
|
|
131
|
+
import type { MapeoDocMap } from '../types.js';
|
|
132
|
+
import type { MapeoValueMap } from '../types.js';
|
|
133
|
+
import type { DefaultEmitterEvents } from '../types.js';
|
|
134
|
+
import { TypedEmitter } from 'tiny-typed-emitter';
|
|
135
|
+
import type { Exact } from 'type-fest';
|
|
136
|
+
import type { CoreOwnershipWithSignaturesValue } from '../types.js';
|
|
137
|
+
import type { RunResult } from 'better-sqlite3';
|
|
138
|
+
import type { SQLiteSelectBase } from 'drizzle-orm/sqlite-core';
|
|
139
|
+
import type { MapeoDoc } from '@comapeo/schema';
|
|
140
|
+
import type { MapeoValue } from '@comapeo/schema';
|
|
141
|
+
import type { MapeoDoc as MapeoDoc_1 } from '@comapeo/schema';
|
|
142
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/datatype/index.js"],"names":[],"mappings":"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"}
|
|
@@ -6,15 +6,6 @@
|
|
|
6
6
|
export function getFastifyServerAddress(server: import("node:http").Server, { timeout }?: {
|
|
7
7
|
timeout?: number;
|
|
8
8
|
} | undefined): Promise<string>;
|
|
9
|
-
/**
|
|
10
|
-
* @param {Readonly<Date>} lastModified
|
|
11
|
-
*/
|
|
12
|
-
export function createStyleJsonResponseHeaders(lastModified: Readonly<Date>): {
|
|
13
|
-
'Cache-Control': string;
|
|
14
|
-
'Access-Control-Allow-Headers': string;
|
|
15
|
-
'Access-Control-Allow-Origin': string;
|
|
16
|
-
'Last-Modified': string;
|
|
17
|
-
};
|
|
18
9
|
export const NotFoundError: createError.FastifyErrorConstructor<{
|
|
19
10
|
code: "FST_RESOURCE_NOT_FOUND";
|
|
20
11
|
statusCode: 404;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/fastify-plugins/utils.js"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,gDAJW,OAAO,WAAW,EAAE,MAAM;cACd,MAAM;gBAChB,OAAO,CAAC,MAAM,CAAC,CA0B3B;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/fastify-plugins/utils.js"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,gDAJW,OAAO,WAAW,EAAE,MAAM;cACd,MAAM;gBAChB,OAAO,CAAC,MAAM,CAAC,CA0B3B;AAzCD;;;uBAIC;AAED;;;uBAIC;wBAZuB,gBAAgB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { plugin as CoMapeoMapsFastifyPlugin } from "./fastify-plugins/maps.js";
|
|
2
2
|
export { FastifyController } from "./fastify-controller.js";
|
|
3
3
|
export { MapeoManager } from "./mapeo-manager.js";
|
|
4
|
-
export function replicateProject(project: MapeoProject, isInitiatorOrStream: boolean | import("
|
|
4
|
+
export function replicateProject(project: MapeoProject, isInitiatorOrStream: boolean | import("streamx").Duplex<any, any, any, any, true, true, import("streamx").DuplexEvents<any, any>> | import("stream").Duplex): ReturnType<(isInitiatorOrStream: (boolean | import("stream").Duplex | import("streamx").Duplex)) => import("./types.js").ReplicationStream>;
|
|
5
5
|
export namespace roles {
|
|
6
6
|
export { CREATOR_ROLE_ID };
|
|
7
7
|
export { COORDINATOR_ROLE_ID };
|
package/dist/mapeo-project.d.ts
CHANGED
|
@@ -58,7 +58,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
58
58
|
/**
|
|
59
59
|
*/
|
|
60
60
|
close(): Promise<void>;
|
|
61
|
-
get observation(): DataType<DataStore<"data", "
|
|
61
|
+
get observation(): DataType<DataStore<"data", "observation" | "track" | "remoteDetectionAlert">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
62
62
|
name: "observation";
|
|
63
63
|
schema: undefined;
|
|
64
64
|
columns: {
|
|
@@ -328,7 +328,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
328
328
|
versionId: string;
|
|
329
329
|
} | undefined;
|
|
330
330
|
}>;
|
|
331
|
-
get track(): DataType<DataStore<"data", "
|
|
331
|
+
get track(): DataType<DataStore<"data", "observation" | "track" | "remoteDetectionAlert">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
332
332
|
name: "track";
|
|
333
333
|
schema: undefined;
|
|
334
334
|
columns: {
|
|
@@ -511,7 +511,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
511
511
|
[k: string]: boolean | number | string | null | (boolean | number | string | null)[];
|
|
512
512
|
};
|
|
513
513
|
}>;
|
|
514
|
-
get preset(): DataType<DataStore<"config", "translation" | "
|
|
514
|
+
get preset(): DataType<DataStore<"config", "translation" | "preset" | "field" | "projectSettings" | "deviceInfo" | "icon">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
515
515
|
name: "preset";
|
|
516
516
|
schema: undefined;
|
|
517
517
|
columns: {
|
|
@@ -781,7 +781,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
781
781
|
terms: string[];
|
|
782
782
|
color?: string | undefined;
|
|
783
783
|
}>;
|
|
784
|
-
get field(): DataType<DataStore<"config", "translation" | "
|
|
784
|
+
get field(): DataType<DataStore<"config", "translation" | "preset" | "field" | "projectSettings" | "deviceInfo" | "icon">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
785
785
|
name: "field";
|
|
786
786
|
schema: undefined;
|
|
787
787
|
columns: {
|
|
@@ -1042,7 +1042,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
1042
1042
|
placeholder?: string | undefined;
|
|
1043
1043
|
helperText?: string | undefined;
|
|
1044
1044
|
}>;
|
|
1045
|
-
get remoteDetectionAlert(): DataType<DataStore<"data", "
|
|
1045
|
+
get remoteDetectionAlert(): DataType<DataStore<"data", "observation" | "track" | "remoteDetectionAlert">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
1046
1046
|
name: "remoteDetectionAlert";
|
|
1047
1047
|
schema: undefined;
|
|
1048
1048
|
columns: {
|
|
@@ -1286,7 +1286,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
1286
1286
|
* DataTypes object mappings, used for tests
|
|
1287
1287
|
*/
|
|
1288
1288
|
get [kDataTypes](): {
|
|
1289
|
-
observation: DataType<DataStore<"data", "
|
|
1289
|
+
observation: DataType<DataStore<"data", "observation" | "track" | "remoteDetectionAlert">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
1290
1290
|
name: "observation";
|
|
1291
1291
|
schema: undefined;
|
|
1292
1292
|
columns: {
|
|
@@ -1556,7 +1556,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
1556
1556
|
versionId: string;
|
|
1557
1557
|
} | undefined;
|
|
1558
1558
|
}>;
|
|
1559
|
-
track: DataType<DataStore<"data", "
|
|
1559
|
+
track: DataType<DataStore<"data", "observation" | "track" | "remoteDetectionAlert">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
1560
1560
|
name: "track";
|
|
1561
1561
|
schema: undefined;
|
|
1562
1562
|
columns: {
|
|
@@ -1739,7 +1739,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
1739
1739
|
[k: string]: boolean | number | string | null | (boolean | number | string | null)[];
|
|
1740
1740
|
};
|
|
1741
1741
|
}>;
|
|
1742
|
-
remoteDetectionAlert: DataType<DataStore<"data", "
|
|
1742
|
+
remoteDetectionAlert: DataType<DataStore<"data", "observation" | "track" | "remoteDetectionAlert">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
1743
1743
|
name: "remoteDetectionAlert";
|
|
1744
1744
|
schema: undefined;
|
|
1745
1745
|
columns: {
|
|
@@ -1941,7 +1941,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
1941
1941
|
};
|
|
1942
1942
|
geometry: import("@comapeo/schema/dist/schema/remoteDetectionAlert.js").Geometry;
|
|
1943
1943
|
}>;
|
|
1944
|
-
preset: DataType<DataStore<"config", "translation" | "
|
|
1944
|
+
preset: DataType<DataStore<"config", "translation" | "preset" | "field" | "projectSettings" | "deviceInfo" | "icon">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
1945
1945
|
name: "preset";
|
|
1946
1946
|
schema: undefined;
|
|
1947
1947
|
columns: {
|
|
@@ -2211,7 +2211,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
2211
2211
|
terms: string[];
|
|
2212
2212
|
color?: string | undefined;
|
|
2213
2213
|
}>;
|
|
2214
|
-
field: DataType<DataStore<"config", "translation" | "
|
|
2214
|
+
field: DataType<DataStore<"config", "translation" | "preset" | "field" | "projectSettings" | "deviceInfo" | "icon">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
2215
2215
|
name: "field";
|
|
2216
2216
|
schema: undefined;
|
|
2217
2217
|
columns: {
|
|
@@ -2472,7 +2472,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
2472
2472
|
placeholder?: string | undefined;
|
|
2473
2473
|
helperText?: string | undefined;
|
|
2474
2474
|
}>;
|
|
2475
|
-
projectSettings: DataType<DataStore<"config", "translation" | "
|
|
2475
|
+
projectSettings: DataType<DataStore<"config", "translation" | "preset" | "field" | "projectSettings" | "deviceInfo" | "icon">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
2476
2476
|
name: "projectSettings";
|
|
2477
2477
|
schema: undefined;
|
|
2478
2478
|
columns: {
|
|
@@ -2673,7 +2673,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
2673
2673
|
fileVersion: string;
|
|
2674
2674
|
} | undefined;
|
|
2675
2675
|
}>;
|
|
2676
|
-
coreOwnership: DataType<DataStore<"auth", "
|
|
2676
|
+
coreOwnership: DataType<DataStore<"auth", "coreOwnership" | "role">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
2677
2677
|
name: "coreOwnership";
|
|
2678
2678
|
schema: undefined;
|
|
2679
2679
|
columns: {
|
|
@@ -2869,7 +2869,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
2869
2869
|
blobCoreId: string;
|
|
2870
2870
|
blobIndexCoreId: string;
|
|
2871
2871
|
}>;
|
|
2872
|
-
role: DataType<DataStore<"auth", "
|
|
2872
|
+
role: DataType<DataStore<"auth", "coreOwnership" | "role">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
2873
2873
|
name: "role";
|
|
2874
2874
|
schema: undefined;
|
|
2875
2875
|
columns: {
|
|
@@ -3023,7 +3023,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
3023
3023
|
roleId: string;
|
|
3024
3024
|
fromIndex: number;
|
|
3025
3025
|
}>;
|
|
3026
|
-
deviceInfo: DataType<DataStore<"config", "translation" | "
|
|
3026
|
+
deviceInfo: DataType<DataStore<"config", "translation" | "preset" | "field" | "projectSettings" | "deviceInfo" | "icon">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
3027
3027
|
name: "deviceInfo";
|
|
3028
3028
|
schema: undefined;
|
|
3029
3029
|
columns: {
|
|
@@ -3197,7 +3197,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
3197
3197
|
baseUrl: string;
|
|
3198
3198
|
} | undefined;
|
|
3199
3199
|
}>;
|
|
3200
|
-
icon: DataType<DataStore<"config", "translation" | "
|
|
3200
|
+
icon: DataType<DataStore<"config", "translation" | "preset" | "field" | "projectSettings" | "deviceInfo" | "icon">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
3201
3201
|
name: "icon";
|
|
3202
3202
|
schema: undefined;
|
|
3203
3203
|
columns: {
|
|
@@ -3378,7 +3378,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
3378
3378
|
blobVersionId: import("@comapeo/schema/dist/schema/icon.js").BlobVersionId;
|
|
3379
3379
|
})[];
|
|
3380
3380
|
}>;
|
|
3381
|
-
translation: DataType<DataStore<"config", "translation" | "
|
|
3381
|
+
translation: DataType<DataStore<"config", "translation" | "preset" | "field" | "projectSettings" | "deviceInfo" | "icon">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
3382
3382
|
name: "translation";
|
|
3383
3383
|
schema: undefined;
|
|
3384
3384
|
columns: {
|
|
@@ -3498,7 +3498,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
3498
3498
|
tableName: "translation";
|
|
3499
3499
|
dataType: "string";
|
|
3500
3500
|
columnType: "SQLiteText";
|
|
3501
|
-
data: "
|
|
3501
|
+
data: "UNRECOGNIZED" | "observation" | "track" | "preset" | "field" | "projectSettings" | "deviceInfo" | "role" | "type_unspecified";
|
|
3502
3502
|
driverParam: string;
|
|
3503
3503
|
notNull: true;
|
|
3504
3504
|
hasDefault: false;
|
package/dist/schema/project.d.ts
CHANGED
|
@@ -118,7 +118,7 @@ export const translationTable: import("drizzle-orm/sqlite-core").SQLiteTableWith
|
|
|
118
118
|
tableName: "translation";
|
|
119
119
|
dataType: "string";
|
|
120
120
|
columnType: "SQLiteText";
|
|
121
|
-
data: "
|
|
121
|
+
data: "UNRECOGNIZED" | "observation" | "track" | "preset" | "field" | "projectSettings" | "deviceInfo" | "role" | "type_unspecified";
|
|
122
122
|
driverParam: string;
|
|
123
123
|
notNull: true;
|
|
124
124
|
hasDefault: false;
|
|
@@ -58,7 +58,7 @@ export default class TranslationApi {
|
|
|
58
58
|
* @param {TranslationValue} doc
|
|
59
59
|
*/
|
|
60
60
|
index(doc: TranslationValue): void;
|
|
61
|
-
get dataType(): import("./datatype/index.js").DataType<import("./datastore/index.js").DataStore<"config", "translation" | "
|
|
61
|
+
get dataType(): import("./datatype/index.js").DataType<import("./datastore/index.js").DataStore<"config", "translation" | "preset" | "field" | "projectSettings" | "deviceInfo" | "icon">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
|
|
62
62
|
name: "translation";
|
|
63
63
|
schema: undefined;
|
|
64
64
|
columns: {
|
|
@@ -178,7 +178,7 @@ export default class TranslationApi {
|
|
|
178
178
|
tableName: "translation";
|
|
179
179
|
dataType: "string";
|
|
180
180
|
columnType: "SQLiteText";
|
|
181
|
-
data: "
|
|
181
|
+
data: "UNRECOGNIZED" | "observation" | "track" | "preset" | "field" | "projectSettings" | "deviceInfo" | "role" | "type_unspecified";
|
|
182
182
|
driverParam: string;
|
|
183
183
|
notNull: true;
|
|
184
184
|
hasDefault: false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translation-api.d.ts","sourceRoot":"","sources":["../src/translation-api.js"],"names":[],"mappings":"AAKA,uEAAuE;AACvE,+CAA+C;AAE/C,iEAEC;AACD;IAQE;;;;;;;;;OASG;IACH,0BARG;QAMS,QAAQ,EANT,OAAO,qBAAqB,EAAE,QAAQ,CAChD,OAAW,sBAAsB,EAAE,SAAS,CAAC,QAAQ,CAAC,EACtD,cAAkB,qBAAqB,EAAE,gBAAgB,EACzD,aAAiB,EACjB,WAAe,EACf,gBAAoB,CACjB;KACH,EAWA;IAED,+BAA+B;IAC/B,SADc,OAAO,CAAC,IAAI,CAAC,CAG1B;IAED;;OAEG;IACH,WAFW,gBAAgB;;;;;;;;;;;;;;;;;;;;OAW1B;IAED,kGAAkG;IAElG;;;;;OAKG;IACH,WALW,YACR,IAAI,CAAC,gBAAgB,EAAC,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC,EAC5D,aAAe,GAAG,YAAY,CAAC,GAAG;QAAC,MAAM;;;UAA6B;KAAC,GAC3D,OAAO,CAAC,OAAO,iBAAiB,EAAE,WAAW,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"translation-api.d.ts","sourceRoot":"","sources":["../src/translation-api.js"],"names":[],"mappings":"AAKA,uEAAuE;AACvE,+CAA+C;AAE/C,iEAEC;AACD;IAQE;;;;;;;;;OASG;IACH,0BARG;QAMS,QAAQ,EANT,OAAO,qBAAqB,EAAE,QAAQ,CAChD,OAAW,sBAAsB,EAAE,SAAS,CAAC,QAAQ,CAAC,EACtD,cAAkB,qBAAqB,EAAE,gBAAgB,EACzD,aAAiB,EACjB,WAAe,EACf,gBAAoB,CACjB;KACH,EAWA;IAED,+BAA+B;IAC/B,SADc,OAAO,CAAC,IAAI,CAAC,CAG1B;IAED;;OAEG;IACH,WAFW,gBAAgB;;;;;;;;;;;;;;;;;;;;OAW1B;IAED,kGAAkG;IAElG;;;;;OAKG;IACH,WALW,YACR,IAAI,CAAC,gBAAgB,EAAC,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC,EAC5D,aAAe,GAAG,YAAY,CAAC,GAAG;QAAC,MAAM;;;UAA6B;KAAC,GAC3D,OAAO,CAAC,OAAO,iBAAiB,EAAE,WAAW,EAAE,CAAC,CAsC5D;IAED;;OAEG;IACH,WAFW,gBAAgB,QAkB1B;IAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAEC;IALD,mHAEC;;CAIF;sCAjIkD,iBAAiB;iCACnC,WAAW;iCADO,iBAAiB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comapeo/core",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.1",
|
|
4
4
|
"description": "Offline p2p mapping library",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -110,6 +110,7 @@
|
|
|
110
110
|
"@bufbuild/buf": "^1.26.1",
|
|
111
111
|
"@comapeo/cloud": "^0.1.0",
|
|
112
112
|
"@comapeo/core2.0.1": "npm:@comapeo/core@2.0.1",
|
|
113
|
+
"@comapeo/ipc": "^2.1.0",
|
|
113
114
|
"@mapeo/default-config": "5.0.0",
|
|
114
115
|
"@mapeo/mock-data": "^2.1.1",
|
|
115
116
|
"@sinonjs/fake-timers": "^10.0.2",
|
|
@@ -158,14 +159,14 @@
|
|
|
158
159
|
},
|
|
159
160
|
"dependencies": {
|
|
160
161
|
"@comapeo/fallback-smp": "^1.0.0",
|
|
161
|
-
"@comapeo/schema": "1.
|
|
162
|
+
"@comapeo/schema": "1.4.1",
|
|
162
163
|
"@digidem/types": "^2.3.0",
|
|
163
164
|
"@fastify/error": "^3.4.1",
|
|
164
165
|
"@fastify/type-provider-typebox": "^4.1.0",
|
|
165
166
|
"@hyperswarm/secret-stream": "^6.6.3",
|
|
166
167
|
"@mapeo/crypto": "1.0.0-alpha.10",
|
|
167
168
|
"@mapeo/sqlite-indexer": "1.0.0-alpha.9",
|
|
168
|
-
"@sinclair/typebox": "^0.
|
|
169
|
+
"@sinclair/typebox": "^0.33.17",
|
|
169
170
|
"@sindresorhus/merge-streams": "^4.0.0",
|
|
170
171
|
"b4a": "^1.6.3",
|
|
171
172
|
"bcp-47": "^2.1.0",
|
|
@@ -41,7 +41,6 @@ export class CoreManager extends TypedEmitter {
|
|
|
41
41
|
#coreIndex
|
|
42
42
|
/** @type {CoreRecord} */
|
|
43
43
|
#creatorCoreRecord
|
|
44
|
-
#projectKey
|
|
45
44
|
#queries
|
|
46
45
|
#encryptionKeys
|
|
47
46
|
#projectExtension
|
|
@@ -93,7 +92,6 @@ export class CoreManager extends TypedEmitter {
|
|
|
93
92
|
this.#l = Logger.create('coreManager', logger)
|
|
94
93
|
const primaryKey = keyManager.getDerivedKey('primaryKey', projectKey)
|
|
95
94
|
this.#deviceId = keyManager.getIdentityKeypair().publicKey.toString('hex')
|
|
96
|
-
this.#projectKey = projectKey
|
|
97
95
|
this.#encryptionKeys = encryptionKeys
|
|
98
96
|
this.#autoDownload = autoDownload
|
|
99
97
|
|
package/src/datatype/index.js
CHANGED
|
@@ -8,29 +8,57 @@ import { TypedEmitter } from 'tiny-typed-emitter'
|
|
|
8
8
|
import { parse as parseBCP47 } from 'bcp-47'
|
|
9
9
|
import { setProperty, getProperty } from 'dot-prop'
|
|
10
10
|
/** @import { MapeoDoc, MapeoValue } from '@comapeo/schema' */
|
|
11
|
-
/** @import {
|
|
11
|
+
/** @import { RunResult } from 'better-sqlite3' */
|
|
12
|
+
/** @import { SQLiteSelectBase } from 'drizzle-orm/sqlite-core' */
|
|
13
|
+
/** @import { Exact } from 'type-fest' */
|
|
12
14
|
/** @import { DataStore } from '../datastore/index.js' */
|
|
15
|
+
/**
|
|
16
|
+
* @import {
|
|
17
|
+
* CoreOwnershipWithSignaturesValue,
|
|
18
|
+
* DefaultEmitterEvents,
|
|
19
|
+
* MapeoDocMap,
|
|
20
|
+
* MapeoValueMap,
|
|
21
|
+
* } from '../types.js'
|
|
22
|
+
*/
|
|
13
23
|
|
|
14
24
|
/**
|
|
25
|
+
* @internal
|
|
15
26
|
* @typedef {`${MapeoDoc['schemaName']}Table`} MapeoDocTableName
|
|
16
27
|
*/
|
|
28
|
+
|
|
17
29
|
/**
|
|
30
|
+
* @internal
|
|
18
31
|
* @template T
|
|
19
32
|
* @typedef {T[(keyof T) & MapeoDocTableName]} GetMapeoDocTables
|
|
20
33
|
*/
|
|
34
|
+
|
|
21
35
|
/**
|
|
22
36
|
* Union of Drizzle schema tables that correspond to MapeoDoc types (e.g. excluding backlink tables and other utility tables)
|
|
37
|
+
* @internal
|
|
23
38
|
* @typedef {GetMapeoDocTables<typeof import('../schema/project.js')> | GetMapeoDocTables<typeof import('../schema/client.js')>} MapeoDocTables
|
|
24
39
|
*/
|
|
40
|
+
|
|
25
41
|
/**
|
|
42
|
+
* @internal
|
|
26
43
|
* @typedef {{ [K in MapeoDocTables['_']['name']]: Extract<MapeoDocTables, { _: { name: K }}> }} MapeoDocTablesMap
|
|
27
44
|
*/
|
|
45
|
+
|
|
28
46
|
/**
|
|
47
|
+
* @internal
|
|
29
48
|
* @template T
|
|
30
49
|
* @template {keyof any} K
|
|
31
50
|
* @typedef {T extends any ? Omit<T, K> : never} OmitUnion
|
|
32
51
|
*/
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @internal
|
|
55
|
+
* @template {MapeoValue} T
|
|
56
|
+
* @template {MapeoValue['schemaName']} S
|
|
57
|
+
* @typedef {Exclude<T, { schemaName: S }>} ExcludeSchema
|
|
58
|
+
*/
|
|
59
|
+
|
|
33
60
|
/**
|
|
61
|
+
* @internal
|
|
34
62
|
* @template {MapeoDoc} TDoc
|
|
35
63
|
* @typedef {object} DataTypeEvents
|
|
36
64
|
* @property {(docs: TDoc[]) => void} updated-docs
|
|
@@ -49,11 +77,11 @@ export const kDataStore = Symbol('dataStore')
|
|
|
49
77
|
|
|
50
78
|
/**
|
|
51
79
|
* @template {DataStore} TDataStore
|
|
52
|
-
* @template {
|
|
53
|
-
* @template {
|
|
54
|
-
* @template {
|
|
55
|
-
* @template {
|
|
56
|
-
* @extends {TypedEmitter<DataTypeEvents<TDoc> &
|
|
80
|
+
* @template {MapeoDocTables} TTable
|
|
81
|
+
* @template {TTable['_']['name']} TSchemaName
|
|
82
|
+
* @template {MapeoDocMap[TSchemaName]} TDoc
|
|
83
|
+
* @template {MapeoValueMap[TSchemaName]} TValue
|
|
84
|
+
* @extends {TypedEmitter<DataTypeEvents<TDoc> & DefaultEmitterEvents<DataTypeEvents<TDoc>>>}
|
|
57
85
|
*/
|
|
58
86
|
export class DataType extends TypedEmitter {
|
|
59
87
|
#dataStore
|
|
@@ -106,36 +134,42 @@ export class DataType extends TypedEmitter {
|
|
|
106
134
|
})
|
|
107
135
|
}
|
|
108
136
|
|
|
137
|
+
/** @returns {TTable} */
|
|
109
138
|
get [kTable]() {
|
|
110
139
|
return this.#table
|
|
111
140
|
}
|
|
112
141
|
|
|
142
|
+
/** @returns {TSchemaName} */
|
|
113
143
|
get schemaName() {
|
|
114
144
|
return this.#schemaName
|
|
115
145
|
}
|
|
116
146
|
|
|
147
|
+
/** @returns {TDataStore['namespace']} */
|
|
117
148
|
get namespace() {
|
|
118
149
|
return this.#dataStore.namespace
|
|
119
150
|
}
|
|
120
151
|
|
|
152
|
+
/** @returns {TDataStore} */
|
|
121
153
|
get [kDataStore]() {
|
|
122
154
|
return this.#dataStore
|
|
123
155
|
}
|
|
124
156
|
|
|
125
157
|
/**
|
|
126
|
-
* @template {
|
|
158
|
+
* @template {Exact<ExcludeSchema<TValue, 'coreOwnership'>, T>} T
|
|
127
159
|
* @param {T} value
|
|
160
|
+
* @returns {Promise<TDoc & { forks: string[] }>}
|
|
128
161
|
*/
|
|
129
162
|
async create(value) {
|
|
130
163
|
const docId = generateId()
|
|
131
|
-
// @ts-expect-error - can't figure this one out
|
|
164
|
+
// @ts-expect-error - can't figure this one out
|
|
132
165
|
return this[kCreateWithDocId](docId, value, { checkExisting: false })
|
|
133
166
|
}
|
|
134
167
|
|
|
135
168
|
/**
|
|
136
169
|
* @param {string} docId
|
|
137
|
-
* @param {TValue |
|
|
170
|
+
* @param {ExcludeSchema<TValue, 'coreOwnership'> | CoreOwnershipWithSignaturesValue} value
|
|
138
171
|
* @param {{ checkExisting?: boolean }} [opts] - only used internally to skip the checkExisting check when creating a document with a random ID (collisions should be too small probability to be worth checking for)
|
|
172
|
+
* @returns {Promise<TDoc & { forks: string[] }>}
|
|
139
173
|
*/
|
|
140
174
|
async [kCreateWithDocId](docId, value, { checkExisting = true } = {}) {
|
|
141
175
|
if (!validate(this.#schemaName, value)) {
|
|
@@ -193,15 +227,18 @@ export class DataType extends TypedEmitter {
|
|
|
193
227
|
/**
|
|
194
228
|
* @param {string} versionId
|
|
195
229
|
* @param {{ lang?: string }} [opts]
|
|
230
|
+
* @returns {Promise<TDoc>}
|
|
196
231
|
*/
|
|
197
232
|
async getByVersionId(versionId, { lang } = {}) {
|
|
198
233
|
const result = await this.#dataStore.read(versionId)
|
|
199
|
-
|
|
234
|
+
if (result.schemaName !== this.#schemaName) throw new NotFoundError()
|
|
235
|
+
return this.#translate(deNullify(result), { lang })
|
|
200
236
|
}
|
|
201
237
|
|
|
202
238
|
/**
|
|
203
239
|
* @param {any} doc
|
|
204
240
|
* @param {{ lang?: string }} [opts]
|
|
241
|
+
* @returns {Promise<TDoc & { forks: string[] }>}
|
|
205
242
|
*/
|
|
206
243
|
async #translate(doc, { lang } = {}) {
|
|
207
244
|
if (!lang) return doc
|
|
@@ -235,27 +272,27 @@ export class DataType extends TypedEmitter {
|
|
|
235
272
|
return doc
|
|
236
273
|
}
|
|
237
274
|
|
|
238
|
-
/**
|
|
275
|
+
/**
|
|
276
|
+
* @param {object} opts
|
|
277
|
+
* @param {boolean} [opts.includeDeleted]
|
|
278
|
+
* @param {string} [opts.lang]
|
|
279
|
+
* @returns {Promise<Array<TDoc & { forks: string[] }>>}
|
|
280
|
+
*/
|
|
239
281
|
async getMany({ includeDeleted = false, lang } = {}) {
|
|
240
282
|
await this.#dataStore.indexer.idle()
|
|
241
283
|
const rows = includeDeleted
|
|
242
284
|
? this.#sql.getManyWithDeleted.all()
|
|
243
285
|
: this.#sql.getMany.all()
|
|
244
286
|
return await Promise.all(
|
|
245
|
-
rows.map(
|
|
246
|
-
async (doc) =>
|
|
247
|
-
await this.#translate(deNullify(/** @type {MapeoDoc} */ (doc)), {
|
|
248
|
-
lang,
|
|
249
|
-
})
|
|
250
|
-
)
|
|
287
|
+
rows.map((doc) => this.#translate(deNullify(doc), { lang }))
|
|
251
288
|
)
|
|
252
289
|
}
|
|
253
290
|
|
|
254
291
|
/**
|
|
255
|
-
*
|
|
256
|
-
* @template {import('type-fest').Exact<TValue, T>} T
|
|
292
|
+
* @template {Exact<ExcludeSchema<TValue, 'coreOwnership'>, T>} T
|
|
257
293
|
* @param {string | string[]} versionId
|
|
258
294
|
* @param {T} value
|
|
295
|
+
* @returns {Promise<TDoc & { forks: string[] }>}
|
|
259
296
|
*/
|
|
260
297
|
async update(versionId, value) {
|
|
261
298
|
await this.#dataStore.indexer.idle()
|
|
@@ -279,6 +316,7 @@ export class DataType extends TypedEmitter {
|
|
|
279
316
|
|
|
280
317
|
/**
|
|
281
318
|
* @param {string} docId
|
|
319
|
+
* @returns {Promise<TDoc & { forks: string[] }>}
|
|
282
320
|
*/
|
|
283
321
|
async delete(docId) {
|
|
284
322
|
await this.#dataStore.indexer.idle()
|
|
@@ -43,16 +43,3 @@ export async function getFastifyServerAddress(server, { timeout } = {}) {
|
|
|
43
43
|
|
|
44
44
|
return 'http://' + addr
|
|
45
45
|
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* @param {Readonly<Date>} lastModified
|
|
49
|
-
*/
|
|
50
|
-
export function createStyleJsonResponseHeaders(lastModified) {
|
|
51
|
-
return {
|
|
52
|
-
'Cache-Control': 'max-age=' + 5 * 60, // 5 minutes
|
|
53
|
-
'Access-Control-Allow-Headers':
|
|
54
|
-
'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since',
|
|
55
|
-
'Access-Control-Allow-Origin': '*',
|
|
56
|
-
'Last-Modified': lastModified.toUTCString(),
|
|
57
|
-
}
|
|
58
|
-
}
|
package/src/translation-api.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { and, sql } from 'drizzle-orm'
|
|
2
2
|
import { kCreateWithDocId, kSelect } from './datatype/index.js'
|
|
3
|
-
import { hashObject } from './utils.js'
|
|
3
|
+
import { deNullify, hashObject } from './utils.js'
|
|
4
4
|
import { nullIfNotFound } from './errors.js'
|
|
5
5
|
import { omit } from './lib/omit.js'
|
|
6
6
|
/** @import { Translation, TranslationValue } from '@comapeo/schema' */
|
|
@@ -101,6 +101,7 @@ export default class TranslationApi {
|
|
|
101
101
|
.where(and.apply(null, filters))
|
|
102
102
|
.prepare()
|
|
103
103
|
.all()
|
|
104
|
+
.map(deNullify)
|
|
104
105
|
}
|
|
105
106
|
|
|
106
107
|
/**
|
package/src/datatype/index.d.ts
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
// Typescript was incorrectly compiling declaration files for this, so the
|
|
2
|
-
// declaration for DataType is written manually below, and copied into the
|
|
3
|
-
// `dist` folder at build-time. The types are checked in `test-types/data-types.ts`
|
|
4
|
-
|
|
5
|
-
import { type MapeoDoc, type MapeoValue } from '@comapeo/schema'
|
|
6
|
-
import {
|
|
7
|
-
type MapeoDocMap,
|
|
8
|
-
type MapeoValueMap,
|
|
9
|
-
type CoreOwnershipWithSignaturesValue,
|
|
10
|
-
} from '../types.js'
|
|
11
|
-
import { type BetterSQLite3Database } from 'drizzle-orm/better-sqlite3'
|
|
12
|
-
import { SQLiteSelectBase } from 'drizzle-orm/sqlite-core'
|
|
13
|
-
import { RunResult } from 'better-sqlite3'
|
|
14
|
-
import type Hypercore from 'hypercore'
|
|
15
|
-
import { TypedEmitter } from 'tiny-typed-emitter'
|
|
16
|
-
import TranslationApi from '../translation-api.js'
|
|
17
|
-
|
|
18
|
-
type MapeoDocTableName = `${MapeoDoc['schemaName']}Table`
|
|
19
|
-
type GetMapeoDocTables<T> = T[keyof T & MapeoDocTableName]
|
|
20
|
-
/** Union of Drizzle schema tables that correspond to MapeoDoc types (e.g. excluding backlink tables and other utility tables) */
|
|
21
|
-
type MapeoDocTables =
|
|
22
|
-
| GetMapeoDocTables<typeof import('../schema/project.js')>
|
|
23
|
-
| GetMapeoDocTables<typeof import('../schema/client.js')>
|
|
24
|
-
type MapeoDocTablesMap = {
|
|
25
|
-
[K in MapeoDocTables['_']['name']]: Extract<
|
|
26
|
-
MapeoDocTables,
|
|
27
|
-
{ _: { name: K } }
|
|
28
|
-
>
|
|
29
|
-
}
|
|
30
|
-
export interface DataTypeEvents<TDoc extends MapeoDoc> {
|
|
31
|
-
'updated-docs': (docs: TDoc[]) => void
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export const kCreateWithDocId: unique symbol
|
|
35
|
-
export const kSelect: unique symbol
|
|
36
|
-
export const kTable: unique symbol
|
|
37
|
-
export const kDataStore: unique symbol
|
|
38
|
-
|
|
39
|
-
type OmitUnion<T, K extends keyof any> = T extends any ? Omit<T, K> : never
|
|
40
|
-
type ExcludeSchema<
|
|
41
|
-
T extends MapeoValue,
|
|
42
|
-
S extends MapeoValue['schemaName']
|
|
43
|
-
> = Exclude<T, { schemaName: S }>
|
|
44
|
-
|
|
45
|
-
export class DataType<
|
|
46
|
-
TDataStore extends import('../datastore/index.js').DataStore,
|
|
47
|
-
TTable extends MapeoDocTables,
|
|
48
|
-
TSchemaName extends TTable['_']['name'],
|
|
49
|
-
TDoc extends MapeoDocMap[TSchemaName],
|
|
50
|
-
TValue extends MapeoValueMap[TSchemaName]
|
|
51
|
-
> extends TypedEmitter<DataTypeEvents<TDoc>> {
|
|
52
|
-
constructor({
|
|
53
|
-
dataStore,
|
|
54
|
-
table,
|
|
55
|
-
db,
|
|
56
|
-
getTranslations,
|
|
57
|
-
}: {
|
|
58
|
-
table: TTable
|
|
59
|
-
dataStore: TDataStore
|
|
60
|
-
db: import('drizzle-orm/better-sqlite3').BetterSQLite3Database
|
|
61
|
-
getTranslations: TranslationApi['get']
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
get [kTable](): TTable
|
|
65
|
-
|
|
66
|
-
get [kDataStore](): TDataStore
|
|
67
|
-
|
|
68
|
-
get schemaName(): TSchemaName
|
|
69
|
-
|
|
70
|
-
get namespace(): TDataStore.namespace
|
|
71
|
-
|
|
72
|
-
[kCreateWithDocId](
|
|
73
|
-
docId: string,
|
|
74
|
-
value:
|
|
75
|
-
| ExcludeSchema<TValue, 'coreOwnership'>
|
|
76
|
-
| CoreOwnershipWithSignaturesValue
|
|
77
|
-
): Promise<TDoc & { forks: string[] }>
|
|
78
|
-
|
|
79
|
-
[kSelect](): Promise<SQLiteSelectBase<TTable, 'sync', RunResult>>
|
|
80
|
-
|
|
81
|
-
create<
|
|
82
|
-
T extends import('type-fest').Exact<
|
|
83
|
-
ExcludeSchema<TValue, 'coreOwnership'>,
|
|
84
|
-
T
|
|
85
|
-
>
|
|
86
|
-
>(value: T): Promise<TDoc & { forks: string[] }>
|
|
87
|
-
|
|
88
|
-
getByDocId(
|
|
89
|
-
docId: string,
|
|
90
|
-
opts?: { mustBeFound?: true; lang?: string }
|
|
91
|
-
): Promise<TDoc & { forks: string[] }>
|
|
92
|
-
getByDocId(
|
|
93
|
-
docId: string,
|
|
94
|
-
opts?: { mustBeFound?: boolean; lang?: string }
|
|
95
|
-
): Promise<null | (TDoc & { forks: string[] })>
|
|
96
|
-
|
|
97
|
-
getByVersionId(versionId: string, opts?: { lang?: string }): Promise<TDoc>
|
|
98
|
-
|
|
99
|
-
getMany(opts?: {
|
|
100
|
-
includeDeleted?: boolean
|
|
101
|
-
lang?: string
|
|
102
|
-
}): Promise<Array<TDoc & { forks: string[] }>>
|
|
103
|
-
|
|
104
|
-
update<
|
|
105
|
-
T extends import('type-fest').Exact<
|
|
106
|
-
ExcludeSchema<TValue, 'coreOwnership'>,
|
|
107
|
-
T
|
|
108
|
-
>
|
|
109
|
-
>(versionId: string | string[], value: T): Promise<TDoc & { forks: string[] }>
|
|
110
|
-
|
|
111
|
-
delete(docId: string): Promise<TDoc & { forks: string[] }>
|
|
112
|
-
}
|