@comapeo/core 4.2.0 → 4.4.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/core-ownership.d.ts +2 -6
- package/dist/core-ownership.d.ts.map +1 -1
- package/dist/datatype/index.d.ts +29 -29
- package/dist/datatype/index.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/mapeo-project.d.ts +1 -0
- package/dist/mapeo-project.d.ts.map +1 -1
- package/dist/translation-api.d.ts +1 -3
- package/dist/translation-api.d.ts.map +1 -1
- package/dist/types.d.ts +9 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +15 -3
- package/dist/utils.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/datatype/index.js +86 -36
- package/src/index.js +1 -0
- package/src/mapeo-project.js +16 -11
- package/src/translation-api.js +1 -1
- package/src/types.ts +11 -20
- package/src/utils.js +24 -3
package/dist/core-ownership.d.ts
CHANGED
|
@@ -77,9 +77,7 @@ export class CoreOwnership extends TypedEmitter<CoreOwnershipEvents> {
|
|
|
77
77
|
updatedAt: string;
|
|
78
78
|
links: string[];
|
|
79
79
|
deleted: boolean;
|
|
80
|
-
} &
|
|
81
|
-
forks: string[];
|
|
82
|
-
}>;
|
|
80
|
+
} & import("./datatype/index.js").DerivedDocFields>;
|
|
83
81
|
getAll(): Promise<({
|
|
84
82
|
schemaName: "coreOwnership";
|
|
85
83
|
authCoreId: string;
|
|
@@ -94,9 +92,7 @@ export class CoreOwnership extends TypedEmitter<CoreOwnershipEvents> {
|
|
|
94
92
|
updatedAt: string;
|
|
95
93
|
links: string[];
|
|
96
94
|
deleted: boolean;
|
|
97
|
-
} &
|
|
98
|
-
forks: string[];
|
|
99
|
-
})[]>;
|
|
95
|
+
} & import("./datatype/index.js").DerivedDocFields)[]>;
|
|
100
96
|
#private;
|
|
101
97
|
}
|
|
102
98
|
export type CoreOwnershipEvents = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-ownership.d.ts","sourceRoot":"","sources":["../src/core-ownership.js"],"names":[],"mappings":"AAmJA;;;;;;;;;;;GAWG;AACH,iDAJW,2BAA2B,wBAC3B,OAAO,iBAAiB,EAAE,eAAe,GACvC,OAAO,iBAAiB,EAAE,aAAa,CAiBnD;;AA3JD;;;;;;;GAOG;AAEH;;;GAGG;AAEH;;GAEG;AACH;IAGE;;;;;;;;;;;;OAYG;IACH,yDAVG;QAMQ,QAAQ,EANR,OAAO,qBAAqB,EAAE,QAAQ,CAChD,OAAW,sBAAsB,EAAE,SAAS,CAAC,MAAM,CAAC,EACpD,cAAkB,qBAAqB,EAAE,kBAAkB,EAC3D,eAAmB,EACnB,OAAW,iBAAiB,EAAE,aAAa,EAC3C,OAAW,iBAAiB,EAAE,kBAAkB,CAC7C;QACwC,YAAY,EAA7C,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;QACZ,eAAe,EAA7B,OAAO;KACjB,EAyBA;IAED;;;OAGG;IACH,iBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAc3B;IAED;;;;;OAKG;IACH,oBAJW,MAAM,aACN,SAAS,GACP,OAAO,CAAC,MAAM,CAAC,CAK3B;IAED;;;;OAIG;IACH,cAFW,MAAM
|
|
1
|
+
{"version":3,"file":"core-ownership.d.ts","sourceRoot":"","sources":["../src/core-ownership.js"],"names":[],"mappings":"AAmJA;;;;;;;;;;;GAWG;AACH,iDAJW,2BAA2B,wBAC3B,OAAO,iBAAiB,EAAE,eAAe,GACvC,OAAO,iBAAiB,EAAE,aAAa,CAiBnD;;AA3JD;;;;;;;GAOG;AAEH;;;GAGG;AAEH;;GAEG;AACH;IAGE;;;;;;;;;;;;OAYG;IACH,yDAVG;QAMQ,QAAQ,EANR,OAAO,qBAAqB,EAAE,QAAQ,CAChD,OAAW,sBAAsB,EAAE,SAAS,CAAC,MAAM,CAAC,EACpD,cAAkB,qBAAqB,EAAE,kBAAkB,EAC3D,eAAmB,EACnB,OAAW,iBAAiB,EAAE,aAAa,EAC3C,OAAW,iBAAiB,EAAE,kBAAkB,CAC7C;QACwC,YAAY,EAA7C,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;QACZ,eAAe,EAA7B,OAAO;KACjB,EAyBA;IAED;;;OAGG;IACH,iBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAc3B;IAED;;;;;OAKG;IACH,oBAJW,MAAM,aACN,SAAS,GACP,OAAO,CAAC,MAAM,CAAC,CAK3B;IAED;;;;OAIG;IACH,cAFW,MAAM;;;;;;;;;;;;;;wDAKhB;IAED;;;;;;;;;;;;;;2DAGC;;CAyBF;;;;;YAnHa,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI;;iDALjC,YAAY;6BATO,oBAAoB;+BASvC,YAAY;6BAAZ,YAAY"}
|
package/dist/datatype/index.d.ts
CHANGED
|
@@ -17,13 +17,20 @@ export class DataType<TDataStore extends DataStore, TTable extends MapeoDocTable
|
|
|
17
17
|
* @param {TTable} opts.table
|
|
18
18
|
* @param {TDataStore} opts.dataStore
|
|
19
19
|
* @param {import('drizzle-orm/better-sqlite3').BetterSQLite3Database} opts.db
|
|
20
|
-
* @param {import('../translation-api.js').default['get']} opts.getTranslations
|
|
20
|
+
* @param {import('../translation-api.js').default['get']} [opts.getTranslations]
|
|
21
|
+
* @param {(versionId: string) => Promise<string>} opts.getDeviceIdForVersionId
|
|
21
22
|
*/
|
|
22
|
-
constructor({ dataStore, table, db, getTranslations }: {
|
|
23
|
+
constructor({ dataStore, table, db, getTranslations, getDeviceIdForVersionId, }: {
|
|
23
24
|
table: TTable;
|
|
24
25
|
dataStore: TDataStore;
|
|
25
26
|
db: import("drizzle-orm/better-sqlite3").BetterSQLite3Database;
|
|
26
|
-
getTranslations: import("
|
|
27
|
+
getTranslations?: ((value: import("type-fest").SetOptional<Omit<import("@comapeo/schema").TranslationValue, "schemaName" | "message" | "docRef">, "propertyRef" | "regionCode"> & {
|
|
28
|
+
docRef: {
|
|
29
|
+
docId: string;
|
|
30
|
+
versionId?: string | undefined;
|
|
31
|
+
};
|
|
32
|
+
}) => Promise<import("@comapeo/schema").Translation[]>) | undefined;
|
|
33
|
+
getDeviceIdForVersionId: (versionId: string) => Promise<string>;
|
|
27
34
|
});
|
|
28
35
|
/** @returns {TSchemaName} */
|
|
29
36
|
get schemaName(): TSchemaName;
|
|
@@ -32,61 +39,51 @@ export class DataType<TDataStore extends DataStore, TTable extends MapeoDocTable
|
|
|
32
39
|
/**
|
|
33
40
|
* @template {Exact<ExcludeSchema<TValue, 'coreOwnership'>, T>} T
|
|
34
41
|
* @param {T} value
|
|
35
|
-
* @returns {Promise<TDoc &
|
|
42
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
36
43
|
*/
|
|
37
|
-
create<T extends Exact<ExcludeSchema<TValue, "coreOwnership">, T>>(value: T): Promise<TDoc &
|
|
38
|
-
forks: string[];
|
|
39
|
-
}>;
|
|
44
|
+
create<T extends Exact<ExcludeSchema<TValue, "coreOwnership">, T>>(value: T): Promise<TDoc & DerivedDocFields>;
|
|
40
45
|
/**
|
|
41
46
|
* @overload
|
|
42
47
|
* @param {string} docId
|
|
43
48
|
* @param {object} [options]
|
|
44
49
|
* @param {true} [options.mustBeFound]
|
|
45
50
|
* @param {string} [options.lang]
|
|
46
|
-
* @returns {Promise<TDoc &
|
|
51
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
47
52
|
*/
|
|
48
53
|
getByDocId(docId: string, options?: {
|
|
49
54
|
mustBeFound?: true | undefined;
|
|
50
55
|
lang?: string | undefined;
|
|
51
|
-
} | undefined): Promise<TDoc &
|
|
52
|
-
forks: string[];
|
|
53
|
-
}>;
|
|
56
|
+
} | undefined): Promise<TDoc & DerivedDocFields>;
|
|
54
57
|
/**
|
|
55
58
|
* @param {string} versionId
|
|
56
59
|
* @param {{ lang?: string }} [opts]
|
|
57
|
-
* @returns {Promise<TDoc>}
|
|
60
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
58
61
|
*/
|
|
59
62
|
getByVersionId(versionId: string, { lang }?: {
|
|
60
63
|
lang?: string;
|
|
61
|
-
} | undefined): Promise<TDoc>;
|
|
64
|
+
} | undefined): Promise<TDoc & DerivedDocFields>;
|
|
62
65
|
/**
|
|
63
66
|
* @param {object} opts
|
|
64
67
|
* @param {boolean} [opts.includeDeleted]
|
|
65
68
|
* @param {string} [opts.lang]
|
|
66
|
-
* @returns {Promise<Array<TDoc &
|
|
69
|
+
* @returns {Promise<Array<TDoc & DerivedDocFields>>}
|
|
67
70
|
*/
|
|
68
71
|
getMany({ includeDeleted, lang }?: {
|
|
69
72
|
includeDeleted?: boolean | undefined;
|
|
70
73
|
lang?: string | undefined;
|
|
71
|
-
}): Promise<Array<TDoc &
|
|
72
|
-
forks: string[];
|
|
73
|
-
}>>;
|
|
74
|
+
}): Promise<Array<TDoc & DerivedDocFields>>;
|
|
74
75
|
/**
|
|
75
76
|
* @template {Exact<ExcludeSchema<TValue, 'coreOwnership'>, T>} T
|
|
76
77
|
* @param {string | string[]} versionId
|
|
77
78
|
* @param {T} value
|
|
78
|
-
* @returns {Promise<TDoc &
|
|
79
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
79
80
|
*/
|
|
80
|
-
update<T extends Exact<ExcludeSchema<TValue, "coreOwnership">, T>>(versionId: string | string[], value: T): Promise<TDoc &
|
|
81
|
-
forks: string[];
|
|
82
|
-
}>;
|
|
81
|
+
update<T extends Exact<ExcludeSchema<TValue, "coreOwnership">, T>>(versionId: string | string[], value: T): Promise<TDoc & DerivedDocFields>;
|
|
83
82
|
/**
|
|
84
83
|
* @param {string} docId
|
|
85
|
-
* @returns {Promise<TDoc &
|
|
84
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
86
85
|
*/
|
|
87
|
-
delete(docId: string): Promise<TDoc &
|
|
88
|
-
forks: string[];
|
|
89
|
-
}>;
|
|
86
|
+
delete(docId: string): Promise<TDoc & DerivedDocFields>;
|
|
90
87
|
/** @returns {TTable} */
|
|
91
88
|
get [kTable](): TTable;
|
|
92
89
|
/** @returns {TDataStore} */
|
|
@@ -95,13 +92,11 @@ export class DataType<TDataStore extends DataStore, TTable extends MapeoDocTable
|
|
|
95
92
|
* @param {string} docId
|
|
96
93
|
* @param {ExcludeSchema<TValue, 'coreOwnership'> | CoreOwnershipWithSignaturesValue} value
|
|
97
94
|
* @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 &
|
|
95
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
99
96
|
*/
|
|
100
97
|
[kCreateWithDocId](docId: string, value: ExcludeSchema<TValue, "coreOwnership"> | CoreOwnershipWithSignaturesValue, { checkExisting }?: {
|
|
101
98
|
checkExisting?: boolean;
|
|
102
|
-
} | undefined): Promise<TDoc &
|
|
103
|
-
forks: string[];
|
|
104
|
-
}>;
|
|
99
|
+
} | undefined): Promise<TDoc & DerivedDocFields>;
|
|
105
100
|
[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
101
|
then?: undefined;
|
|
107
102
|
catch?: undefined;
|
|
@@ -127,6 +122,11 @@ export type ExcludeSchema<T extends MapeoValue, S extends MapeoValue["schemaName
|
|
|
127
122
|
export type DataTypeEvents<TDoc extends MapeoDoc> = {
|
|
128
123
|
"updated-docs": (docs: TDoc[]) => void;
|
|
129
124
|
};
|
|
125
|
+
export type DerivedDocFields = {
|
|
126
|
+
forks: string[];
|
|
127
|
+
createdBy: string;
|
|
128
|
+
updatedBy: string;
|
|
129
|
+
};
|
|
130
130
|
import type { DataStore } from '../datastore/index.js';
|
|
131
131
|
import type { MapeoDocMap } from '../types.js';
|
|
132
132
|
import type { MapeoValueMap } from '../types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/datatype/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/datatype/index.js"],"names":[],"mappings":"AA+EA,6CAA0D;AAC1D,oCAAuC;AACvC,mCAAqC;AACrC,uCAA6C;AAE7C;;;;;;;GAOG;AACH,sBAPyB,UAAU,SAAtB,SAAW,EACM,MAAM,SAAtB,cAAe,EACM,WAAW,SAAhC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAE,EACM,IAAI,SAA9B,WAAW,CAAC,WAAW,CAAE,EACG,MAAM,SAAlC,aAAa,CAAC,WAAW,CAAE;IAYvC;;;;;;;;OAQG;IACH,iFANG;QAAqB,KAAK,EAAlB,MAAM;QACW,SAAS,EAA1B,UAAU;QACuD,EAAE,EAAnE,OAAO,4BAA4B,EAAE,qBAAqB;QACJ,eAAe;;;;;6BAjC/C,iBAE1B;QAgCiD,uBAAuB,EAApE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;KAChD,EAyCA;IAOD,6BAA6B;IAC7B,8BAEC;IAED,yCAAyC;IACzC,yCAEC;IAOD;;;;OAIG;IACH,OAJgE,CAAC,SAApD,MAAO,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC,CAAE,SACpD,CAAC,GACC,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC,CAM5C;;;;;;;;;IAmCE,kBACQ,MAAM;;;oBAIJ,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC,CAC5C;IAoBD;;;;OAIG;IACH,0BAJW,MAAM;eACG,MAAM;oBACb,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC,CAM5C;IAyED;;;;;OAKG;IACH,mCAJG;QAAuB,cAAc;QACf,IAAI;KAC1B,GAAU,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAUnD;IAED;;;;;OAKG;IACH,OALgE,CAAC,SAApD,MAAO,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC,CAAE,aACpD,MAAM,GAAG,MAAM,EAAE,SACjB,CAAC,GACC,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC,CAoB5C;IAED;;;OAGG;IACH,cAHW,MAAM,GACJ,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC,CAmB5C;IA3OD,wBAAwB;IACxB,uBAEC;IAYD,4BAA4B;IAC5B,+BAEC;IAaD;;;;;OAKG;IACH,0BALW,MAAM,SACN,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,gCAAgC;wBACvD,OAAO;oBACvB,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC,CA0B5C;IAgLD;eA6D4D,SAAS;gBAAU,SAAS;kBAAY,SAAS;OAlD5G;;CA6CF;gCApaY,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO;8BAKhC,CAAC,IACD,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,iBAAiB,CAAC;;;;6BAMhC,iBAAiB,CAAC,cAAc,sBAAsB,CAAC,CAAC,GAAG,iBAAiB,CAAC,cAAc,qBAAqB,CAAC,CAAC;gCAKlH,GAAG,CAAgC,IAA3B,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,cAAc,EAAE;IAAE,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAA;CAAC,CAAC,GAAE;sBAKlF,CAAC,EACW,CAAC,SAAb,MAAO,GAAI,IACX,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;0BAKrB,CAAC,SAAd,UAAY,EACe,CAAC,SAA3B,UAAU,CAAC,YAAY,CAAE,IAC1B,OAAO,CAAC,CAAC,EAAE;IAAE,UAAU,EAAE,CAAC,CAAA;CAAE,CAAC;2BAKlB,IAAI,SAAf,QAAU;oBAET,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI;;;WAKtB,MAAM,EAAE;eACR,MAAM;eACN,MAAM;;+BAzDW,uBAAuB;iCAO5C,aAAa;mCAAb,aAAa;0CAAb,aAAa;6BAdM,oBAAoB;2BAMtB,WAAW;sDAQ5B,aAAa;+BAVQ,gBAAgB;sCACT,yBAAyB;8BAFrB,iBAAiB;gCAAjB,iBAAiB;4CAAjB,iBAAiB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export namespace MemberApi {
|
|
|
25
25
|
type MemberInfo = import("./member-api.js").MemberInfo;
|
|
26
26
|
type RoleId = import("./roles.js").RoleId;
|
|
27
27
|
type RoleIdForNewInvite = import("./roles.js").RoleIdForNewInvite;
|
|
28
|
+
type RoleIdAssignableToOthers = import("./roles.js").RoleIdAssignableToOthers;
|
|
28
29
|
}
|
|
29
30
|
import { CREATOR_ROLE_ID } from './roles.js';
|
|
30
31
|
import { COORDINATOR_ROLE_ID } from './roles.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":";;;AAgDO,0CARI,YAAY,uBACZ,CACV,OAAW,GACX,OAAW,QAAQ,EAAE,MAAM,GAC3B,OAAW,SAAS,EAAE,MAAM,CACzB,GACS,OAAO,YAAY,EAAE,iBAAiB,CAGF;;;;;;2BAtCnC,OAAO,oBAAoB,EAAE,YAAY;sCACzC,OAAO,oBAAoB,EAAE,uBAAuB;;sBAGrD,OAAO,eAAe,EAAE,UAAU;mBAClC,OAAO,eAAe,EAAE,OAAO;;;kBAI/B,OAAO,YAAY,EAAE,MAAM;oBAC3B,OAAO,eAAe,EAAE,QAAQ;qBAIA,SAAS,SAAzC,OAAQ,YAAY,EAAE,QAAS,IAC/B,OAAO,YAAY,EAAE,WAAW,CAAC,SAAS,CAAC;;;kBAI3C,OAAO,wBAAwB,EAAE,MAAM;;;sBAIvC,OAAO,iBAAiB,EAAE,UAAU;kBACpC,OAAO,YAAY,EAAE,MAAM;8BAC3B,OAAO,YAAY,EAAE,kBAAkB;oCACvC,OAAO,YAAY,EAAE,wBAAwB;;gCAjCnD,YAAY;oCAAZ,YAAY;+BAAZ,YAAY"}
|
package/dist/mapeo-project.d.ts
CHANGED
|
@@ -1280,6 +1280,7 @@ export class MapeoProject extends TypedEmitter<{
|
|
|
1280
1280
|
$hasSyncedProjectSettings(): Promise<boolean>;
|
|
1281
1281
|
$getOwnRole(): Promise<import("./roles.js").Role<"a12a6702b93bd7ff" | "f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9" | "8ced989b1904606b" | "08e4251e36f6e7ed">>;
|
|
1282
1282
|
/**
|
|
1283
|
+
* @deprecated
|
|
1283
1284
|
* @param {string} originalVersionId The `originalVersionId` from a document.
|
|
1284
1285
|
* @returns {Promise<string>} The device ID for this creator.
|
|
1285
1286
|
* @throws When device ID cannot be found.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapeo-project.d.ts","sourceRoot":"","sources":["../src/mapeo-project.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapeo-project.d.ts","sourceRoot":"","sources":["../src/mapeo-project.js"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqZT;IAED,8BAEC;IAqMD;;;;;;;;;;;OAWG;IACH,yCAPW,CACV,OAAW,GACX,OAAW,QAAQ,EAAE,MAAM,GAC3B,OAAW,SAAS,EAAE,MAAM,CACzB,GACS,iBAAiB,CAqB7B;IAED;;;OAGG;IACH,2BAHW,IAAI,CAAC,OAAO,iBAAiB,EAAE,eAAe,EAAE,MAAM,GAAG,YAAY,GAAG,yBAAyB,CAAC,GAChG,OAAO,CAAC,OAAO,iBAAiB,EAAE,UAAU,CAAC,CAwBzD;IAED,uCAAuC;IACvC,uCADY,OAAO,iBAGlB;IAED,yBAAyB;IACzB,kCAEC;IAsPD;;;;OAIG;IACH,iCAJW,OAAO,UACP,OAAO,GACL,OAAO,CAAC,MAAM,CAAC,CAY3B;IAmPD,iCAMC;IAED;;;OAGG;IACH,sBAFa,OAAO,CAAC,IAAI,CAAC,CAoCzB;;CAuKF;sCAl6Ca,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC;6BACxC,oBAAoB,CAAC,gBAAgB,CAAC;8BACtC,GAAG,CAAC,MAAM,EAAC,UAAU,CAAC;;cAE1B,MAAM,GAAC,SAAS;YAChB,MAAM;;;aAIF,MAAM,EAAE;YACR,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;oBAIvB,MAAM;kBACN,KAAK;YACL,KAAK;aACL,KAAK;;6BAjFU,oBAAoB;wBAYzB,eAAe;0BAHb,sBAAsB;yBACL,qBAAqB;0BAuCtC,iBAAiB;wBAKpC,oBAAoB;2BAIA,sBAAsB;wBAFzB,eAAe;4BAhDX,yBAAyB;8BAuB9C,qBAAqB;0BApBF,uBAAuB;uCAoD8H,YAAY;4BAlD/J,yBAAyB;iCAkD0H,YAAY;0BAHjK,IAAI;uBALP,aAAa;0CAO0B,iBAAiB;gCACgG,YAAY;4BAAZ,YAAY"}
|
|
@@ -38,9 +38,7 @@ export default class TranslationApi {
|
|
|
38
38
|
updatedAt: string;
|
|
39
39
|
links: string[];
|
|
40
40
|
deleted: boolean;
|
|
41
|
-
} &
|
|
42
|
-
forks: string[];
|
|
43
|
-
}>;
|
|
41
|
+
} & import("./datatype/index.js").DerivedDocFields>;
|
|
44
42
|
/** @typedef {SetOptional<TranslationValue['docRef'], 'versionId'>} DocRefWithOptionalVersionId */
|
|
45
43
|
/**
|
|
46
44
|
* @param {SetOptional<
|
|
@@ -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
|
|
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;;;;;;;;;;;;;;;;;;wDAW1B;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/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Simplify, TupleToUnion, ValueOf, RequireAtLeastOne
|
|
1
|
+
import type { Simplify, TupleToUnion, ValueOf, RequireAtLeastOne } from 'type-fest';
|
|
2
2
|
import { SUPPORTED_BLOB_VARIANTS } from './blob-store/index.js';
|
|
3
3
|
import { MapeoCommon, MapeoDoc, MapeoValue, Observation, decode } from '@comapeo/schema';
|
|
4
4
|
import type BigSparseArray from 'big-sparse-array';
|
|
@@ -46,13 +46,6 @@ export type CoreOwnershipWithSignatures = Extract<ReturnType<typeof decode>, {
|
|
|
46
46
|
schemaName: 'coreOwnership';
|
|
47
47
|
}>;
|
|
48
48
|
export type CoreOwnershipWithSignaturesValue = Omit<CoreOwnershipWithSignatures, Exclude<keyof MapeoCommon, 'schemaName'>>;
|
|
49
|
-
type NullToOptional<T> = SetOptional<T, NullKeys<T>>;
|
|
50
|
-
type RemoveNull<T> = {
|
|
51
|
-
[K in keyof T]: Exclude<T[K], null>;
|
|
52
|
-
};
|
|
53
|
-
type NullKeys<Base> = NonNullable<{
|
|
54
|
-
[Key in keyof Base]: null extends Base[Key] ? Key : never;
|
|
55
|
-
}[keyof Base]>;
|
|
56
49
|
/**
|
|
57
50
|
* Replace an object's `Buffer` values with `string`s. Useful for serialization.
|
|
58
51
|
*/
|
|
@@ -65,7 +58,14 @@ export type MapBuffers<T> = {
|
|
|
65
58
|
* top-level optional props set to `null`) to the original types in
|
|
66
59
|
* @comapeo/schema
|
|
67
60
|
*/
|
|
68
|
-
export type NullableToOptional<T> = Simplify<
|
|
61
|
+
export type NullableToOptional<T> = Simplify<{
|
|
62
|
+
[K in keyof T as null extends T[K] ? K : never]?: Exclude<T[K], null>;
|
|
63
|
+
} & {
|
|
64
|
+
[K in keyof T as null extends T[K] ? never : K]: T[K];
|
|
65
|
+
}>;
|
|
66
|
+
export type OptionalToNullable<T> = Simplify<{
|
|
67
|
+
[K in keyof T]-?: T[K] | (undefined extends T[K] ? null : never);
|
|
68
|
+
}>;
|
|
69
69
|
export type KeyPair = {
|
|
70
70
|
publicKey: PublicKey;
|
|
71
71
|
secretKey: SecretKey;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,iBAAiB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -45,13 +45,25 @@ export function isDefined<T>(value: undefined | T): value is T;
|
|
|
45
45
|
*/
|
|
46
46
|
export function deNullify<T extends {}>(obj: T): import("./types.js").NullableToOptional<T>;
|
|
47
47
|
/**
|
|
48
|
-
*
|
|
48
|
+
* __Mutating__
|
|
49
|
+
* When reading from SQLite, any optional properties are set to `null`. This
|
|
50
|
+
* converts `null` back to `undefined` to match the input types (e.g. the types
|
|
51
|
+
* defined in @comapeo/schema)
|
|
52
|
+
* @template {{}} T
|
|
53
|
+
* @param {T} obj
|
|
54
|
+
* @returns {import('./types.js').NullableToOptional<T>}
|
|
55
|
+
*/
|
|
56
|
+
export function mutatingDeNullify<T extends {}>(obj: T): import("./types.js").NullableToOptional<T>;
|
|
57
|
+
/**
|
|
58
|
+
* @template {import('@comapeo/schema').MapeoDoc & { forks?: string[], createdBy?: string, updatedBy?: string }} T
|
|
49
59
|
* @param {T} doc
|
|
50
|
-
* @returns {Omit<T, 'docId' | 'versionId' | 'originalVersionId' | 'links' | 'forks' | 'createdAt' | 'updatedAt' | 'deleted'>}
|
|
60
|
+
* @returns {Omit<T, 'docId' | 'versionId' | 'originalVersionId' | 'links' | 'forks' | 'createdAt' | 'updatedAt' | 'createdBy' | 'updatedBy' | 'deleted' >}
|
|
51
61
|
*/
|
|
52
62
|
export function valueOf<T extends import("@comapeo/schema").MapeoDoc & {
|
|
53
63
|
forks?: string[];
|
|
54
|
-
|
|
64
|
+
createdBy?: string;
|
|
65
|
+
updatedBy?: string;
|
|
66
|
+
}>(doc: T): Omit<T, "docId" | "versionId" | "originalVersionId" | "links" | "forks" | "createdAt" | "updatedAt" | "createdBy" | "updatedBy" | "deleted">;
|
|
55
67
|
/**
|
|
56
68
|
* Create an internal ID from a project key
|
|
57
69
|
* @param {Buffer} projectKey
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.js"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,6BAHW,MAAM,SAAO,UASvB;AAUD;;GAEG;AACH,wBAFa,IAAI,CAEQ;AAEzB;;;;GAIG;AACH,kCAJW,OAAO,kBACP,MAAM,GAAG,KAAK,GACZ,QAAQ,SAAS,CAS7B;AAED;;;;;;;;;;;;;GAaG;AACH,uBATa,CAAC,OACH,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAUd,OAAO,KACL,KAAK,IAAI,CAAC,CAGxB;AAED;;;;GAIG;AACH,0BAJa,CAAC,SACH,SAAS,GAAG,CAAC,GACX,KAAK,IAAI,CAAC,CAItB;AAED;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.js"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,6BAHW,MAAM,SAAO,UASvB;AAUD;;GAEG;AACH,wBAFa,IAAI,CAEQ;AAEzB;;;;GAIG;AACH,kCAJW,OAAO,kBACP,MAAM,GAAG,KAAK,GACZ,QAAQ,SAAS,CAS7B;AAED;;;;;;;;;;;;;GAaG;AACH,uBATa,CAAC,OACH,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAUd,OAAO,KACL,KAAK,IAAI,CAAC,CAGxB;AAED;;;;GAIG;AACH,0BAJa,CAAC,SACH,SAAS,GAAG,CAAC,GACX,KAAK,IAAI,CAAC,CAItB;AAED;;;;;;;GAOG;AACH,0BAJkB,CAAC,SAAN,EAAI,OACN,CAAC,GACC,OAAO,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAStD;AAED;;;;;;;;GAQG;AACH,kCAJkB,CAAC,SAAN,EAAI,OACN,CAAC,GACC,OAAO,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAWtD;AAED;;;;GAIG;AACH,wBAJiH,CAAC,SAApG,OAAO,iBAAiB,EAAE,QAAQ,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAG,OACrG,CAAC,GACC,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,mBAAmB,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAE,CAezJ;AAED;;;;GAIG;AACH,2CAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;GAIG;AACH,iDAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;GAIG;AACH,wDAHW,QAAQ,CAAC,MAAM,CAAC,GACd,MAAM,CAMlB;AAED;;;GAGG;AACH,4CAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;GAGG;AACH,wCAHW,2CAAkC,GAChC,MAAM,CAIlB;AAED;;;;;;;2DAO2D;AAC3D,0BALsB,CAAC,SAAV,MAAQ,EACF,CAAC,wBACT,aAAa,CAAC,CAAC,CAAC,SAChB,CAAC,GACC,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAOtD;AAED;;;;GAIG;AACH,gCAHW,MAAM,UAQhB;AAED;;;;;GAKG;AACH,wCAJW,UAAU,oBACV,UAAU,GAAG,WAAW,GAAG,SAAS,GAClC,MAAM,CA0BlB;AA1ND;IACE,2BAA2B;IAC3B,mBADY,KAAK,EAIhB;CACF;gCAvBqC,YAAY;4BAAZ,YAAY"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comapeo/core",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.4.0",
|
|
4
4
|
"description": "Offline p2p mapping library",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
},
|
|
163
163
|
"dependencies": {
|
|
164
164
|
"@comapeo/fallback-smp": "^1.0.0",
|
|
165
|
-
"@comapeo/schema": "
|
|
165
|
+
"@comapeo/schema": "2.1.1",
|
|
166
166
|
"@digidem/types": "^2.3.0",
|
|
167
167
|
"@fastify/error": "^3.4.1",
|
|
168
168
|
"@fastify/type-provider-typebox": "^4.1.0",
|
package/src/datatype/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { validate } from '@comapeo/schema'
|
|
|
2
2
|
import { getTableConfig } from 'drizzle-orm/sqlite-core'
|
|
3
3
|
import { eq, inArray, sql } from 'drizzle-orm'
|
|
4
4
|
import { randomBytes } from 'node:crypto'
|
|
5
|
-
import { noop,
|
|
5
|
+
import { noop, mutatingDeNullify } from '../utils.js'
|
|
6
6
|
import { NotFoundError } from '../errors.js'
|
|
7
7
|
import { TypedEmitter } from 'tiny-typed-emitter'
|
|
8
8
|
import { parse as parseBCP47 } from 'bcp-47'
|
|
@@ -64,6 +64,13 @@ import { setProperty, getProperty } from 'dot-prop'
|
|
|
64
64
|
* @property {(docs: TDoc[]) => void} updated-docs
|
|
65
65
|
*/
|
|
66
66
|
|
|
67
|
+
/**
|
|
68
|
+
* @typedef {object} DerivedDocFields
|
|
69
|
+
* @property {string[]} forks
|
|
70
|
+
* @property {string} createdBy
|
|
71
|
+
* @property {string} updatedBy
|
|
72
|
+
*/
|
|
73
|
+
|
|
67
74
|
function generateId() {
|
|
68
75
|
return randomBytes(32).toString('hex')
|
|
69
76
|
}
|
|
@@ -90,6 +97,7 @@ export class DataType extends TypedEmitter {
|
|
|
90
97
|
#sql
|
|
91
98
|
#db
|
|
92
99
|
#getTranslations
|
|
100
|
+
#getDeviceIdForVersionId
|
|
93
101
|
|
|
94
102
|
/**
|
|
95
103
|
*
|
|
@@ -97,15 +105,23 @@ export class DataType extends TypedEmitter {
|
|
|
97
105
|
* @param {TTable} opts.table
|
|
98
106
|
* @param {TDataStore} opts.dataStore
|
|
99
107
|
* @param {import('drizzle-orm/better-sqlite3').BetterSQLite3Database} opts.db
|
|
100
|
-
* @param {import('../translation-api.js').default['get']} opts.getTranslations
|
|
108
|
+
* @param {import('../translation-api.js').default['get']} [opts.getTranslations]
|
|
109
|
+
* @param {(versionId: string) => Promise<string>} opts.getDeviceIdForVersionId
|
|
101
110
|
*/
|
|
102
|
-
constructor({
|
|
111
|
+
constructor({
|
|
112
|
+
dataStore,
|
|
113
|
+
table,
|
|
114
|
+
db,
|
|
115
|
+
getTranslations,
|
|
116
|
+
getDeviceIdForVersionId,
|
|
117
|
+
}) {
|
|
103
118
|
super()
|
|
104
119
|
this.#dataStore = dataStore
|
|
105
120
|
this.#table = table
|
|
106
121
|
this.#schemaName = /** @type {TSchemaName} */ (getTableConfig(table).name)
|
|
107
122
|
this.#db = db
|
|
108
123
|
this.#getTranslations = getTranslations
|
|
124
|
+
this.#getDeviceIdForVersionId = getDeviceIdForVersionId
|
|
109
125
|
this.#sql = {
|
|
110
126
|
getByDocId: db
|
|
111
127
|
.select()
|
|
@@ -157,7 +173,7 @@ export class DataType extends TypedEmitter {
|
|
|
157
173
|
/**
|
|
158
174
|
* @template {Exact<ExcludeSchema<TValue, 'coreOwnership'>, T>} T
|
|
159
175
|
* @param {T} value
|
|
160
|
-
* @returns {Promise<TDoc &
|
|
176
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
161
177
|
*/
|
|
162
178
|
async create(value) {
|
|
163
179
|
const docId = generateId()
|
|
@@ -169,7 +185,7 @@ export class DataType extends TypedEmitter {
|
|
|
169
185
|
* @param {string} docId
|
|
170
186
|
* @param {ExcludeSchema<TValue, 'coreOwnership'> | CoreOwnershipWithSignaturesValue} value
|
|
171
187
|
* @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 &
|
|
188
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
173
189
|
*/
|
|
174
190
|
async [kCreateWithDocId](docId, value, { checkExisting = true } = {}) {
|
|
175
191
|
if (!validate(this.#schemaName, value)) {
|
|
@@ -203,20 +219,20 @@ export class DataType extends TypedEmitter {
|
|
|
203
219
|
* @param {object} [options]
|
|
204
220
|
* @param {true} [options.mustBeFound]
|
|
205
221
|
* @param {string} [options.lang]
|
|
206
|
-
* @returns {Promise<TDoc &
|
|
222
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
207
223
|
*/
|
|
208
224
|
/**
|
|
209
225
|
* @param {string} docId
|
|
210
226
|
* @param {object} [options]
|
|
211
227
|
* @param {boolean} [options.mustBeFound]
|
|
212
228
|
* @param {string} [options.lang]
|
|
213
|
-
* @returns {Promise<null | (TDoc &
|
|
229
|
+
* @returns {Promise<null | (TDoc & DerivedDocFields)>}
|
|
214
230
|
*/
|
|
215
231
|
async getByDocId(docId, { mustBeFound = true, lang } = {}) {
|
|
216
232
|
await this.#dataStore.indexer.idle()
|
|
217
233
|
const result = this.#sql.getByDocId.get({ docId })
|
|
218
234
|
if (result) {
|
|
219
|
-
return this.#
|
|
235
|
+
return this.#mutatingAddDerivedFields(result, { lang })
|
|
220
236
|
} else if (mustBeFound) {
|
|
221
237
|
throw new NotFoundError()
|
|
222
238
|
} else {
|
|
@@ -227,48 +243,82 @@ export class DataType extends TypedEmitter {
|
|
|
227
243
|
/**
|
|
228
244
|
* @param {string} versionId
|
|
229
245
|
* @param {{ lang?: string }} [opts]
|
|
230
|
-
* @returns {Promise<TDoc>}
|
|
246
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
231
247
|
*/
|
|
232
248
|
async getByVersionId(versionId, { lang } = {}) {
|
|
233
249
|
const result = await this.#dataStore.read(versionId)
|
|
234
250
|
if (result.schemaName !== this.#schemaName) throw new NotFoundError()
|
|
235
|
-
return this.#
|
|
251
|
+
return this.#mutatingAddDerivedFields(result, { lang })
|
|
236
252
|
}
|
|
237
253
|
|
|
238
254
|
/**
|
|
239
|
-
* @param {any} doc
|
|
255
|
+
* @param {any} doc - not typesafe - this should be a MapeoDoc with nullable fields in place of optional fields, read from SQLite
|
|
240
256
|
* @param {{ lang?: string }} [opts]
|
|
241
|
-
* @returns {Promise<TDoc &
|
|
257
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
258
|
+
*/
|
|
259
|
+
async #mutatingAddDerivedFields(doc, { lang } = {}) {
|
|
260
|
+
mutatingDeNullify(doc)
|
|
261
|
+
const createdByPromise = this.#getDeviceIdForVersionId(
|
|
262
|
+
doc.originalVersionId
|
|
263
|
+
)
|
|
264
|
+
const updatedByPromise =
|
|
265
|
+
doc.originalVersionId === doc.versionId
|
|
266
|
+
? createdByPromise
|
|
267
|
+
: this.#getDeviceIdForVersionId(doc.versionId)
|
|
268
|
+
if (lang) {
|
|
269
|
+
await this.#mutatingAddTranslations(doc, { lang })
|
|
270
|
+
}
|
|
271
|
+
const [createdBy, updatedBy] = await Promise.all([
|
|
272
|
+
createdByPromise,
|
|
273
|
+
updatedByPromise,
|
|
274
|
+
])
|
|
275
|
+
doc.createdBy = createdBy
|
|
276
|
+
doc.updatedBy = updatedBy
|
|
277
|
+
return doc
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* @param {any} doc
|
|
282
|
+
* @param {{ lang: string }} opts
|
|
283
|
+
* @returns {Promise<any>}
|
|
242
284
|
*/
|
|
243
|
-
async #
|
|
244
|
-
if (!
|
|
285
|
+
async #mutatingAddTranslations(doc, { lang }) {
|
|
286
|
+
if (!this.#getTranslations) return doc
|
|
245
287
|
|
|
246
288
|
const { language, region } = parseBCP47(lang)
|
|
247
289
|
if (!language) return doc
|
|
248
|
-
const translatedDoc = JSON.parse(JSON.stringify(doc))
|
|
249
290
|
|
|
250
|
-
const
|
|
291
|
+
const translations = await this.#getTranslations({
|
|
251
292
|
languageCode: language,
|
|
252
293
|
docRef: {
|
|
253
|
-
docId:
|
|
254
|
-
versionId:
|
|
294
|
+
docId: doc.docId,
|
|
295
|
+
versionId: doc.versionId,
|
|
255
296
|
},
|
|
256
|
-
docRefType:
|
|
257
|
-
|
|
258
|
-
}
|
|
259
|
-
let translations = await this.#getTranslations(value)
|
|
260
|
-
// if passing a region code returns no matches,
|
|
261
|
-
// fallback to matching only languageCode
|
|
262
|
-
if (translations.length === 0 && value.regionCode) {
|
|
263
|
-
value.regionCode = undefined
|
|
264
|
-
translations = await this.#getTranslations(value)
|
|
265
|
-
}
|
|
297
|
+
docRefType: doc.schemaName,
|
|
298
|
+
})
|
|
266
299
|
|
|
300
|
+
/** @type {Set<string>} */
|
|
301
|
+
const translationsWithMatchingRegion = new Set()
|
|
267
302
|
for (const translation of translations) {
|
|
268
303
|
if (typeof getProperty(doc, translation.propertyRef) === 'string') {
|
|
269
|
-
|
|
304
|
+
const isMatchingRegion = region
|
|
305
|
+
? translation.regionCode === region
|
|
306
|
+
: false
|
|
307
|
+
// Prefer translations with a matching region code, but fall back to
|
|
308
|
+
// translations without a region code if no matching region code has
|
|
309
|
+
// been found yet for this propertyRef
|
|
310
|
+
if (
|
|
311
|
+
isMatchingRegion ||
|
|
312
|
+
!translationsWithMatchingRegion.has(translation.propertyRef)
|
|
313
|
+
) {
|
|
314
|
+
setProperty(doc, translation.propertyRef, translation.message)
|
|
315
|
+
}
|
|
316
|
+
if (isMatchingRegion) {
|
|
317
|
+
translationsWithMatchingRegion.add(translation.propertyRef)
|
|
318
|
+
}
|
|
270
319
|
}
|
|
271
320
|
}
|
|
321
|
+
|
|
272
322
|
return doc
|
|
273
323
|
}
|
|
274
324
|
|
|
@@ -276,7 +326,7 @@ export class DataType extends TypedEmitter {
|
|
|
276
326
|
* @param {object} opts
|
|
277
327
|
* @param {boolean} [opts.includeDeleted]
|
|
278
328
|
* @param {string} [opts.lang]
|
|
279
|
-
* @returns {Promise<Array<TDoc &
|
|
329
|
+
* @returns {Promise<Array<TDoc & DerivedDocFields>>}
|
|
280
330
|
*/
|
|
281
331
|
async getMany({ includeDeleted = false, lang } = {}) {
|
|
282
332
|
await this.#dataStore.indexer.idle()
|
|
@@ -284,7 +334,7 @@ export class DataType extends TypedEmitter {
|
|
|
284
334
|
? this.#sql.getManyWithDeleted.all()
|
|
285
335
|
: this.#sql.getMany.all()
|
|
286
336
|
return await Promise.all(
|
|
287
|
-
rows.map((doc) => this.#
|
|
337
|
+
rows.map((doc) => this.#mutatingAddDerivedFields(doc, { lang }))
|
|
288
338
|
)
|
|
289
339
|
}
|
|
290
340
|
|
|
@@ -292,7 +342,7 @@ export class DataType extends TypedEmitter {
|
|
|
292
342
|
* @template {Exact<ExcludeSchema<TValue, 'coreOwnership'>, T>} T
|
|
293
343
|
* @param {string | string[]} versionId
|
|
294
344
|
* @param {T} value
|
|
295
|
-
* @returns {Promise<TDoc &
|
|
345
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
296
346
|
*/
|
|
297
347
|
async update(versionId, value) {
|
|
298
348
|
await this.#dataStore.indexer.idle()
|
|
@@ -316,7 +366,7 @@ export class DataType extends TypedEmitter {
|
|
|
316
366
|
|
|
317
367
|
/**
|
|
318
368
|
* @param {string} docId
|
|
319
|
-
* @returns {Promise<TDoc &
|
|
369
|
+
* @returns {Promise<TDoc & DerivedDocFields>}
|
|
320
370
|
*/
|
|
321
371
|
async delete(docId) {
|
|
322
372
|
await this.#dataStore.indexer.idle()
|
|
@@ -383,15 +433,15 @@ export class DataType extends TypedEmitter {
|
|
|
383
433
|
*/
|
|
384
434
|
#handleDataStoreUpdate = (docIds) => {
|
|
385
435
|
if (this.listenerCount('updated-docs') === 0) return
|
|
386
|
-
const updatedDocs = /** @type {TDoc[]} */ (
|
|
436
|
+
const updatedDocs = /** @type {Promise<TDoc[]>} */ Promise.all(
|
|
387
437
|
this.#db
|
|
388
438
|
.select()
|
|
389
439
|
.from(this.#table)
|
|
390
440
|
.where(inArray(this.#table.docId, [...docIds]))
|
|
391
441
|
.all()
|
|
392
|
-
.map((doc) =>
|
|
442
|
+
.map((doc) => this.#mutatingAddDerivedFields(doc))
|
|
393
443
|
)
|
|
394
|
-
this.emit('updated-docs',
|
|
444
|
+
updatedDocs.then((docs) => this.emit('updated-docs', docs))
|
|
395
445
|
}
|
|
396
446
|
}
|
|
397
447
|
|
package/src/index.js
CHANGED
|
@@ -35,6 +35,7 @@ export { MapeoManager } from './mapeo-manager.js'
|
|
|
35
35
|
* @typedef {import('./member-api.js').MemberInfo} MemberApi.MemberInfo
|
|
36
36
|
* @typedef {import('./roles.js').RoleId} MemberApi.RoleId
|
|
37
37
|
* @typedef {import('./roles.js').RoleIdForNewInvite} MemberApi.RoleIdForNewInvite
|
|
38
|
+
* @typedef {import('./roles.js').RoleIdAssignableToOthers} MemberApi.RoleIdAssignableToOthers
|
|
38
39
|
*/
|
|
39
40
|
/**
|
|
40
41
|
* @param {MapeoProject} project
|
package/src/mapeo-project.js
CHANGED
|
@@ -287,74 +287,78 @@ export class MapeoProject extends TypedEmitter {
|
|
|
287
287
|
|
|
288
288
|
/** @type {typeof TranslationApi.prototype.get} */
|
|
289
289
|
const getTranslations = (...args) => this.$translation.get(...args)
|
|
290
|
+
/** @type {(versionId: string) => Promise<string>} */
|
|
291
|
+
const getDeviceIdForVersionId = (...args) =>
|
|
292
|
+
this.$originalVersionIdToDeviceId(...args)
|
|
293
|
+
|
|
290
294
|
this.#dataTypes = {
|
|
291
295
|
observation: new DataType({
|
|
292
296
|
dataStore: this.#dataStores.data,
|
|
293
297
|
table: observationTable,
|
|
294
298
|
db,
|
|
295
|
-
|
|
299
|
+
getDeviceIdForVersionId,
|
|
296
300
|
}),
|
|
297
301
|
track: new DataType({
|
|
298
302
|
dataStore: this.#dataStores.data,
|
|
299
303
|
table: trackTable,
|
|
300
304
|
db,
|
|
301
|
-
|
|
305
|
+
getDeviceIdForVersionId,
|
|
302
306
|
}),
|
|
303
307
|
remoteDetectionAlert: new DataType({
|
|
304
308
|
dataStore: this.#dataStores.data,
|
|
305
309
|
table: remoteDetectionAlertTable,
|
|
306
310
|
db,
|
|
307
|
-
|
|
311
|
+
getDeviceIdForVersionId,
|
|
308
312
|
}),
|
|
309
313
|
preset: new DataType({
|
|
310
314
|
dataStore: this.#dataStores.config,
|
|
311
315
|
table: presetTable,
|
|
312
316
|
db,
|
|
313
317
|
getTranslations,
|
|
318
|
+
getDeviceIdForVersionId,
|
|
314
319
|
}),
|
|
315
320
|
field: new DataType({
|
|
316
321
|
dataStore: this.#dataStores.config,
|
|
317
322
|
table: fieldTable,
|
|
318
323
|
db,
|
|
319
324
|
getTranslations,
|
|
325
|
+
getDeviceIdForVersionId,
|
|
320
326
|
}),
|
|
321
327
|
projectSettings: new DataType({
|
|
322
328
|
dataStore: this.#dataStores.config,
|
|
323
329
|
table: projectSettingsTable,
|
|
324
330
|
db: sharedDb,
|
|
325
|
-
|
|
331
|
+
getDeviceIdForVersionId,
|
|
326
332
|
}),
|
|
327
333
|
coreOwnership: new DataType({
|
|
328
334
|
dataStore: this.#dataStores.auth,
|
|
329
335
|
table: coreOwnershipTable,
|
|
330
336
|
db,
|
|
331
|
-
|
|
337
|
+
getDeviceIdForVersionId: () => Promise.resolve(''),
|
|
332
338
|
}),
|
|
333
339
|
role: new DataType({
|
|
334
340
|
dataStore: this.#dataStores.auth,
|
|
335
341
|
table: roleTable,
|
|
336
342
|
db,
|
|
337
|
-
|
|
343
|
+
getDeviceIdForVersionId: () => Promise.resolve(''),
|
|
338
344
|
}),
|
|
339
345
|
deviceInfo: new DataType({
|
|
340
346
|
dataStore: this.#dataStores.config,
|
|
341
347
|
table: deviceInfoTable,
|
|
342
348
|
db,
|
|
343
|
-
|
|
349
|
+
getDeviceIdForVersionId: () => Promise.resolve(''),
|
|
344
350
|
}),
|
|
345
351
|
icon: new DataType({
|
|
346
352
|
dataStore: this.#dataStores.config,
|
|
347
353
|
table: iconTable,
|
|
348
354
|
db,
|
|
349
|
-
|
|
355
|
+
getDeviceIdForVersionId,
|
|
350
356
|
}),
|
|
351
357
|
translation: new DataType({
|
|
352
358
|
dataStore: this.#dataStores.config,
|
|
353
359
|
table: translationTable,
|
|
354
360
|
db,
|
|
355
|
-
|
|
356
|
-
throw new Error('Cannot get translation for translations')
|
|
357
|
-
},
|
|
361
|
+
getDeviceIdForVersionId,
|
|
358
362
|
}),
|
|
359
363
|
}
|
|
360
364
|
this.#identityKeypair = keyManager.getIdentityKeypair()
|
|
@@ -706,6 +710,7 @@ export class MapeoProject extends TypedEmitter {
|
|
|
706
710
|
}
|
|
707
711
|
|
|
708
712
|
/**
|
|
713
|
+
* @deprecated
|
|
709
714
|
* @param {string} originalVersionId The `originalVersionId` from a document.
|
|
710
715
|
* @returns {Promise<string>} The device ID for this creator.
|
|
711
716
|
* @throws When device ID cannot be found.
|
package/src/translation-api.js
CHANGED
package/src/types.ts
CHANGED
|
@@ -74,25 +74,6 @@ export type CoreOwnershipWithSignaturesValue = Omit<
|
|
|
74
74
|
Exclude<keyof MapeoCommon, 'schemaName'>
|
|
75
75
|
>
|
|
76
76
|
|
|
77
|
-
type NullToOptional<T> = SetOptional<T, NullKeys<T>>
|
|
78
|
-
type RemoveNull<T> = {
|
|
79
|
-
[K in keyof T]: Exclude<T[K], null>
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
type NullKeys<Base> = NonNullable<
|
|
83
|
-
// Wrap in `NonNullable` to strip away the `undefined` type from the produced union.
|
|
84
|
-
{
|
|
85
|
-
// Map through all the keys of the given base type.
|
|
86
|
-
[Key in keyof Base]: null extends Base[Key] // Pick only keys with types extending the given `Condition` type.
|
|
87
|
-
? // Retain this key since the condition passes.
|
|
88
|
-
Key
|
|
89
|
-
: // Discard this key since the condition fails.
|
|
90
|
-
never
|
|
91
|
-
|
|
92
|
-
// Convert the produced object into a union type of the keys which passed the conditional test.
|
|
93
|
-
}[keyof Base]
|
|
94
|
-
>
|
|
95
|
-
|
|
96
77
|
/**
|
|
97
78
|
* Replace an object's `Buffer` values with `string`s. Useful for serialization.
|
|
98
79
|
*/
|
|
@@ -106,7 +87,17 @@ export type MapBuffers<T> = {
|
|
|
106
87
|
* top-level optional props set to `null`) to the original types in
|
|
107
88
|
* @comapeo/schema
|
|
108
89
|
*/
|
|
109
|
-
export type NullableToOptional<T> = Simplify<
|
|
90
|
+
export type NullableToOptional<T> = Simplify<
|
|
91
|
+
{
|
|
92
|
+
[K in keyof T as null extends T[K] ? K : never]?: Exclude<T[K], null>
|
|
93
|
+
} & {
|
|
94
|
+
[K in keyof T as null extends T[K] ? never : K]: T[K]
|
|
95
|
+
}
|
|
96
|
+
>
|
|
97
|
+
export type OptionalToNullable<T> = Simplify<{
|
|
98
|
+
[K in keyof T]-?: T[K] | (undefined extends T[K] ? null : never)
|
|
99
|
+
}>
|
|
100
|
+
|
|
110
101
|
export type KeyPair = {
|
|
111
102
|
publicKey: PublicKey
|
|
112
103
|
secretKey: SecretKey
|
package/src/utils.js
CHANGED
|
@@ -87,7 +87,6 @@ export function isDefined(value) {
|
|
|
87
87
|
* @param {T} obj
|
|
88
88
|
* @returns {import('./types.js').NullableToOptional<T>}
|
|
89
89
|
*/
|
|
90
|
-
|
|
91
90
|
export function deNullify(obj) {
|
|
92
91
|
/** @type {Record<string, any>} */
|
|
93
92
|
const objNoNulls = {}
|
|
@@ -98,9 +97,29 @@ export function deNullify(obj) {
|
|
|
98
97
|
}
|
|
99
98
|
|
|
100
99
|
/**
|
|
101
|
-
*
|
|
100
|
+
* __Mutating__
|
|
101
|
+
* When reading from SQLite, any optional properties are set to `null`. This
|
|
102
|
+
* converts `null` back to `undefined` to match the input types (e.g. the types
|
|
103
|
+
* defined in @comapeo/schema)
|
|
104
|
+
* @template {{}} T
|
|
105
|
+
* @param {T} obj
|
|
106
|
+
* @returns {import('./types.js').NullableToOptional<T>}
|
|
107
|
+
*/
|
|
108
|
+
export function mutatingDeNullify(obj) {
|
|
109
|
+
for (const key of Object.keys(obj)) {
|
|
110
|
+
// @ts-expect-error
|
|
111
|
+
if (obj[key] === null) {
|
|
112
|
+
// @ts-expect-error
|
|
113
|
+
obj[key] = undefined
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return /** @type {import('./types.js').NullableToOptional<T>} */ (obj)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @template {import('@comapeo/schema').MapeoDoc & { forks?: string[], createdBy?: string, updatedBy?: string }} T
|
|
102
121
|
* @param {T} doc
|
|
103
|
-
* @returns {Omit<T, 'docId' | 'versionId' | 'originalVersionId' | 'links' | 'forks' | 'createdAt' | 'updatedAt' | 'deleted'>}
|
|
122
|
+
* @returns {Omit<T, 'docId' | 'versionId' | 'originalVersionId' | 'links' | 'forks' | 'createdAt' | 'updatedAt' | 'createdBy' | 'updatedBy' | 'deleted' >}
|
|
104
123
|
*/
|
|
105
124
|
export function valueOf(doc) {
|
|
106
125
|
return omit(doc, [
|
|
@@ -111,6 +130,8 @@ export function valueOf(doc) {
|
|
|
111
130
|
'forks',
|
|
112
131
|
'createdAt',
|
|
113
132
|
'updatedAt',
|
|
133
|
+
'createdBy',
|
|
134
|
+
'updatedBy',
|
|
114
135
|
'deleted',
|
|
115
136
|
])
|
|
116
137
|
}
|