@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.
@@ -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;IAkBE,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,EA0HlC;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;mBAvda,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;;;kBAqdvD,MAAM;WACN,MAAM;cACN,WAAW;eACX,SAAS;;6BAxfM,oBAAoB;+BAoB4B,aAAa;gCAAb,aAAa;mCAAb,aAAa;sBAnBpE,WAAW;uBAUV,cAAc;2BAQV,WAAW;uCACuC,aAAa"}
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(): ("track" | "remoteDetectionAlert" | "observation")[] | ("translation" | "projectSettings" | "preset" | "icon" | "field" | "deviceInfo")[] | ("role" | "coreOwnership")[];
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
@@ -1,112 +1,142 @@
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[] }>
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;AAED;;GAEG;AACH,6DAFW,QAAQ,CAAC,IAAI,CAAC;;;;;EAUxB;AAtDD;;;uBAIC;AAED;;;uBAIC;wBAZuB,gBAAgB"}
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("stream").Duplex | import("streamx").Duplex<any, any, any, any, true, true, import("streamx").DuplexEvents<any, any>>): ReturnType<(isInitiatorOrStream: (boolean | import("stream").Duplex | import("streamx").Duplex)) => import("./types.js").ReplicationStream>;
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 };
@@ -58,7 +58,7 @@ export class MapeoProject extends TypedEmitter<{
58
58
  /**
59
59
  */
60
60
  close(): Promise<void>;
61
- get observation(): DataType<DataStore<"data", "track" | "remoteDetectionAlert" | "observation">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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", "track" | "remoteDetectionAlert" | "observation">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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" | "projectSettings" | "preset" | "icon" | "field" | "deviceInfo">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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" | "projectSettings" | "preset" | "icon" | "field" | "deviceInfo">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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", "track" | "remoteDetectionAlert" | "observation">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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", "track" | "remoteDetectionAlert" | "observation">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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", "track" | "remoteDetectionAlert" | "observation">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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", "track" | "remoteDetectionAlert" | "observation">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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" | "projectSettings" | "preset" | "icon" | "field" | "deviceInfo">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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" | "projectSettings" | "preset" | "icon" | "field" | "deviceInfo">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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" | "projectSettings" | "preset" | "icon" | "field" | "deviceInfo">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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", "role" | "coreOwnership">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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", "role" | "coreOwnership">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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" | "projectSettings" | "preset" | "icon" | "field" | "deviceInfo">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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" | "projectSettings" | "preset" | "icon" | "field" | "deviceInfo">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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" | "projectSettings" | "preset" | "icon" | "field" | "deviceInfo">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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: "track" | "role" | "projectSettings" | "preset" | "observation" | "field" | "deviceInfo" | "UNRECOGNIZED" | "type_unspecified";
3501
+ data: "UNRECOGNIZED" | "observation" | "track" | "preset" | "field" | "projectSettings" | "deviceInfo" | "role" | "type_unspecified";
3502
3502
  driverParam: string;
3503
3503
  notNull: true;
3504
3504
  hasDefault: false;
@@ -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: "track" | "role" | "projectSettings" | "preset" | "observation" | "field" | "deviceInfo" | "UNRECOGNIZED" | "type_unspecified";
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" | "projectSettings" | "preset" | "icon" | "field" | "deviceInfo">, import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
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: "track" | "role" | "projectSettings" | "preset" | "observation" | "field" | "deviceInfo" | "UNRECOGNIZED" | "type_unspecified";
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,CAqC5D;IAED;;OAEG;IACH,WAFW,gBAAgB,QAkB1B;IAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAEC;IALD,mHAEC;;CAIF;sCAhIkD,iBAAiB;iCACnC,WAAW;iCADO,iBAAiB"}
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.0",
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.3.0",
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.29.6",
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
 
@@ -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 { MapeoDocMap, MapeoValueMap } from '../types.js' */
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 {TDataStore['schemas'][number]} TSchemaName
53
- * @template {MapeoDocTablesMap[TSchemaName]} TTable
54
- * @template {Exclude<MapeoDocMap[TSchemaName], { schemaName: 'coreOwnership' }>} TDoc
55
- * @template {Exclude<MapeoValueMap[TSchemaName], { schemaName: 'coreOwnership' }>} TValue
56
- * @extends {TypedEmitter<DataTypeEvents<TDoc> & import('../types.js').DefaultEmitterEvents<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 {import('type-fest').Exact<TValue, T>} T
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, types in index.d.ts override this
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 | import('../types.js').CoreOwnershipWithSignaturesValue} value
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
- return this.#translate(result, { lang })
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
- /** @param {{ includeDeleted?: boolean, lang?: string }} [opts] */
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()
@@ -120,6 +120,7 @@ export async function plugin(fastify, opts) {
120
120
  if (resp && resp.status === 200) {
121
121
  return reply
122
122
  .headers({
123
+ 'access-control-allow-origin': '*',
123
124
  'cache-control': 'no-cache',
124
125
  })
125
126
  .redirect(url.toString())
@@ -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
- }
@@ -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
  /**
@@ -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
- }