@project-ajax/sdk 0.0.71 → 0.0.74
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/builder.d.ts +16 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +4 -0
- package/dist/capabilities/sync.d.ts +13 -4
- package/dist/capabilities/sync.d.ts.map +1 -1
- package/dist/capabilities/sync.js +4 -3
- package/dist/capabilities/sync.test.d.ts +2 -0
- package/dist/capabilities/sync.test.d.ts.map +1 -0
- package/dist/schema.d.ts +28 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +4 -0
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/builder.ts +19 -0
- package/src/capabilities/sync.test.ts +102 -0
- package/src/capabilities/sync.ts +16 -4
- package/src/schema.ts +33 -1
- package/src/types.ts +14 -0
package/dist/builder.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { NoticonName } from "./icon-names.js";
|
|
2
|
-
import type { Icon, NoticonColor, PeopleValue, PlaceValue, TextValue } from "./types.js";
|
|
2
|
+
import type { Icon, NoticonColor, PeopleValue, PlaceValue, RelationReference, TextValue } from "./types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Creates a rich text value.
|
|
5
5
|
*/
|
|
@@ -83,6 +83,21 @@ export declare function people(...emails: string[]): PeopleValue;
|
|
|
83
83
|
* @param value - The place value with lat/lon coordinates and optional name/address
|
|
84
84
|
*/
|
|
85
85
|
export declare function place(value: PlaceValue): PlaceValue;
|
|
86
|
+
/**
|
|
87
|
+
* Creates a relation reference from a primary key of a related record.
|
|
88
|
+
* Use an array of relation references as the property value.
|
|
89
|
+
*
|
|
90
|
+
* @param primaryKey - The primary key of the related record
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* // Single relation
|
|
94
|
+
* { Project: [Builder.relation("project-123")] }
|
|
95
|
+
*
|
|
96
|
+
* // Multiple relations
|
|
97
|
+
* { Projects: [Builder.relation("project-123"), Builder.relation("project-456")] }
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export declare function relation(primaryKey: string): RelationReference;
|
|
86
101
|
/**
|
|
87
102
|
* Creates an emoji icon.
|
|
88
103
|
* @param emoji - An emoji string (e.g., "🎯", "✨", "🚀")
|
package/dist/builder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAEX,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAEnD;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAE1C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAEhD;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAE9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAEpD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAK/C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CASlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAYjE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAWvE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,EACb,QAAQ,CAAC,EAAE,MAAM,GACf,SAAS,CAcX;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAEhE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAK1D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAEvD;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAKnD;AA4CD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAK7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACzB,IAAI,EAAE,WAAW,EACjB,KAAK,GAAE,YAAqB,GAC1B,IAAI,CAMN;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAK3C"}
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAEX,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,SAAS,EACT,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAEnD;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAE1C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAEhD;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAE9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAEpD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAK/C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CASlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAYjE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAWvE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,EACb,QAAQ,CAAC,EAAE,MAAM,GACf,SAAS,CAcX;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAEhE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAK1D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAE/C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAEvD;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAKnD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAE9D;AA4CD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAK7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACzB,IAAI,EAAE,WAAW,EACjB,KAAK,GAAE,YAAqB,GAC1B,IAAI,CAMN;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAK3C"}
|
package/dist/builder.js
CHANGED
|
@@ -94,6 +94,9 @@ function place(value) {
|
|
|
94
94
|
}
|
|
95
95
|
return value;
|
|
96
96
|
}
|
|
97
|
+
function relation(primaryKey) {
|
|
98
|
+
return { type: "primaryKey", value: primaryKey };
|
|
99
|
+
}
|
|
97
100
|
function validateDateString(dateString) {
|
|
98
101
|
if (!/^\d{4}-\d{2}-\d{2}$/.test(dateString)) {
|
|
99
102
|
throw new Error(
|
|
@@ -155,6 +158,7 @@ export {
|
|
|
155
158
|
people,
|
|
156
159
|
phoneNumber,
|
|
157
160
|
place,
|
|
161
|
+
relation,
|
|
158
162
|
richText,
|
|
159
163
|
select,
|
|
160
164
|
status,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PropertyConfiguration, PropertySchema, Schema } from "../schema.js";
|
|
2
|
-
import type { Icon, PeopleValue, PlaceValue, Schedule, SyncSchedule, TextValue } from "../types.js";
|
|
2
|
+
import type { Icon, PeopleValue, PlaceValue, RelationValue, Schedule, SyncSchedule, TextValue } from "../types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Maps a property configuration to its corresponding value type.
|
|
5
5
|
*/
|
|
@@ -7,7 +7,9 @@ type PropertyValueType<T extends PropertyConfiguration> = T extends {
|
|
|
7
7
|
type: "people";
|
|
8
8
|
} ? PeopleValue : T extends {
|
|
9
9
|
type: "place";
|
|
10
|
-
} ? PlaceValue :
|
|
10
|
+
} ? PlaceValue : T extends {
|
|
11
|
+
type: "relation";
|
|
12
|
+
} ? RelationValue : TextValue;
|
|
11
13
|
/**
|
|
12
14
|
* Sync mode determines how the sync handles data lifecycle.
|
|
13
15
|
*/
|
|
@@ -148,6 +150,13 @@ export type SyncHandlerResult<PK extends string, Context = unknown> = {
|
|
|
148
150
|
mode?: SyncMode;
|
|
149
151
|
};
|
|
150
152
|
export type SyncCapability = ReturnType<typeof createSyncCapability>;
|
|
153
|
+
/**
|
|
154
|
+
* Context object passed from the runtime to sync capability handlers.
|
|
155
|
+
*/
|
|
156
|
+
type RuntimeContext<UserContext = unknown> = {
|
|
157
|
+
/** The user-defined/-controlled context (cursor, pagination state, etc.) */
|
|
158
|
+
userContext?: UserContext;
|
|
159
|
+
};
|
|
151
160
|
/**
|
|
152
161
|
* Creates a special handler for syncing third-party data to a collection.
|
|
153
162
|
*
|
|
@@ -164,10 +173,10 @@ export declare function createSyncCapability<PK extends string, S extends Schema
|
|
|
164
173
|
mode: SyncMode | undefined;
|
|
165
174
|
schedule: SyncSchedule;
|
|
166
175
|
};
|
|
167
|
-
handler(
|
|
176
|
+
handler(runtimeContext?: RuntimeContext<Context>): Promise<{
|
|
168
177
|
changes: SyncChange<PK, PropertySchema<PK>>[];
|
|
169
178
|
hasMore: boolean;
|
|
170
|
-
|
|
179
|
+
nextUserContext: Context | undefined;
|
|
171
180
|
}>;
|
|
172
181
|
};
|
|
173
182
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/capabilities/sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,qBAAqB,EACrB,cAAc,EACd,MAAM,EACN,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACX,IAAI,EACJ,WAAW,EACX,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,EAET,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,KAAK,iBAAiB,CAAC,CAAC,SAAS,qBAAqB,IAAI,CAAC,SAAS;IACnE,IAAI,EAAE,QAAQ,CAAC;CACf,GACE,WAAW,GACX,CAAC,SAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B,UAAU,GACV,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/capabilities/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,14 +9,15 @@ function createSyncCapability(key, syncConfiguration) {
|
|
|
9
9
|
mode: syncConfiguration.mode,
|
|
10
10
|
schedule: parseSchedule(syncConfiguration.schedule)
|
|
11
11
|
},
|
|
12
|
-
async handler(
|
|
13
|
-
const
|
|
12
|
+
async handler(runtimeContext) {
|
|
13
|
+
const userContext = runtimeContext?.userContext;
|
|
14
|
+
const executionResult = await syncConfiguration.execute(userContext).catch((err) => {
|
|
14
15
|
throw new ExecutionError(err);
|
|
15
16
|
});
|
|
16
17
|
const result = {
|
|
17
18
|
changes: executionResult.changes,
|
|
18
19
|
hasMore: executionResult.hasMore,
|
|
19
|
-
|
|
20
|
+
nextUserContext: executionResult.nextContext
|
|
20
21
|
};
|
|
21
22
|
process.stdout.write(`
|
|
22
23
|
<output>${JSON.stringify(result)}</output>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.test.d.ts","sourceRoot":"","sources":["../../src/capabilities/sync.test.ts"],"names":[],"mappings":""}
|
package/dist/schema.d.ts
CHANGED
|
@@ -45,6 +45,13 @@ export type PropertyConfiguration = {
|
|
|
45
45
|
type: "people";
|
|
46
46
|
} | {
|
|
47
47
|
type: "place";
|
|
48
|
+
} | {
|
|
49
|
+
type: "relation";
|
|
50
|
+
/**
|
|
51
|
+
* The export name of the sync capability that defines the related collection.
|
|
52
|
+
* This must match the export name used when defining the related sync capability.
|
|
53
|
+
*/
|
|
54
|
+
relatedSyncKey: string;
|
|
48
55
|
};
|
|
49
56
|
export type Schema<PK extends string> = {
|
|
50
57
|
/**
|
|
@@ -128,4 +135,25 @@ export declare function people(): PropertyConfiguration;
|
|
|
128
135
|
* Creates a place property definition for storing geographic locations.
|
|
129
136
|
*/
|
|
130
137
|
export declare function place(): PropertyConfiguration;
|
|
138
|
+
/**
|
|
139
|
+
* Creates a relation property definition that references another sync capability.
|
|
140
|
+
* The related collection must be defined by a sync capability in the same worker.
|
|
141
|
+
*
|
|
142
|
+
* @param relatedSyncKey - The export name of the sync capability that defines the related collection.
|
|
143
|
+
* @example
|
|
144
|
+
* ```typescript
|
|
145
|
+
* export const projectsSync = sync({...});
|
|
146
|
+
*
|
|
147
|
+
* export const tasksSync = sync({
|
|
148
|
+
* schema: {
|
|
149
|
+
* properties: {
|
|
150
|
+
* "Task Title": Schema.title(),
|
|
151
|
+
* "Project": Schema.relation("projectsSync"),
|
|
152
|
+
* },
|
|
153
|
+
* },
|
|
154
|
+
* ...
|
|
155
|
+
* });
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
export declare function relation(relatedSyncKey: string): PropertyConfiguration;
|
|
131
159
|
//# sourceMappingURL=schema.d.ts.map
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EACV,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,MAAM,YAAY,GACrB,OAAO,GACP,WAAW,GACX,KAAK,GACL,OAAO,GACP,cAAc,GACd,UAAU,GACV,MAAM,GACN,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,cAAc,GACd,QAAQ,GACR,QAAQ,GACR,OAAO,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,YAAY,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;CACrB,GACD;IACA,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,UAAU,CAAC;CACxB,GACD;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,YAAY,EAAE,CAAC;CACvB,GACD;IACA,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,YAAY,EAAE,CAAC;CACvB,GACD;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;CACrB,GACD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.js
CHANGED
|
@@ -40,6 +40,9 @@ function people() {
|
|
|
40
40
|
function place() {
|
|
41
41
|
return { type: "place" };
|
|
42
42
|
}
|
|
43
|
+
function relation(relatedSyncKey) {
|
|
44
|
+
return { type: "relation", relatedSyncKey };
|
|
45
|
+
}
|
|
43
46
|
export {
|
|
44
47
|
checkbox,
|
|
45
48
|
date,
|
|
@@ -50,6 +53,7 @@ export {
|
|
|
50
53
|
people,
|
|
51
54
|
phoneNumber,
|
|
52
55
|
place,
|
|
56
|
+
relation,
|
|
53
57
|
richText,
|
|
54
58
|
select,
|
|
55
59
|
status,
|
package/dist/types.d.ts
CHANGED
|
@@ -162,6 +162,18 @@ export interface PlaceValue {
|
|
|
162
162
|
*/
|
|
163
163
|
googlePlaceId?: string;
|
|
164
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* A reference to a related record by its primary key.
|
|
167
|
+
*/
|
|
168
|
+
export type RelationReference = {
|
|
169
|
+
type: "primaryKey";
|
|
170
|
+
value: string;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* Relation value representing references to related records.
|
|
174
|
+
* Each reference identifies a record in the target collection.
|
|
175
|
+
*/
|
|
176
|
+
export type RelationValue = RelationReference[];
|
|
165
177
|
/**
|
|
166
178
|
* Time units for schedule intervals.
|
|
167
179
|
* - "m": minutes
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,SAAS,GAClB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEhC;;;GAGG;AACH,KAAK,SAAS,GAAG,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,WAAW,GACpB,SAAS,GACT,MAAM,GACN,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,MAAM,GACN,QAAQ,GACR,MAAM,GACN,KAAK,CAAC;AAET;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,GAAG,aAAa,CAAC;AAEhF;;GAEG;AACH,MAAM,MAAM,YAAY,GACrB,QAAQ,GACR,oBAAoB,GACpB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,KAAK,GACL,MAAM,CAAC;AAEV;;GAEG;AACH,MAAM,MAAM,UAAU,GACnB,UAAU,GACV,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,IAAI,GACJ,OAAO,CAAC;AAEX,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACrB,MAAM,GACN,WAAW,GACX,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,MAAM,GACN,QAAQ,GACR,MAAM,GACN,KAAK,CAAC;AAET;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,WAAW,CAAC;IAClB;;OAEG;IACH,KAAK,EAAE,YAAY,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,OAAO,CAAC;IACd;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;AAE5C,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,UAAU;IAC1B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC;AAEpD;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,cAAc,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,YAAY,GACrB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/builder.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type {
|
|
|
5
5
|
NoticonColor,
|
|
6
6
|
PeopleValue,
|
|
7
7
|
PlaceValue,
|
|
8
|
+
RelationReference,
|
|
8
9
|
TextValue,
|
|
9
10
|
} from "./types.js";
|
|
10
11
|
|
|
@@ -199,6 +200,24 @@ export function place(value: PlaceValue): PlaceValue {
|
|
|
199
200
|
return value;
|
|
200
201
|
}
|
|
201
202
|
|
|
203
|
+
/**
|
|
204
|
+
* Creates a relation reference from a primary key of a related record.
|
|
205
|
+
* Use an array of relation references as the property value.
|
|
206
|
+
*
|
|
207
|
+
* @param primaryKey - The primary key of the related record
|
|
208
|
+
* @example
|
|
209
|
+
* ```typescript
|
|
210
|
+
* // Single relation
|
|
211
|
+
* { Project: [Builder.relation("project-123")] }
|
|
212
|
+
*
|
|
213
|
+
* // Multiple relations
|
|
214
|
+
* { Projects: [Builder.relation("project-123"), Builder.relation("project-456")] }
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
export function relation(primaryKey: string): RelationReference {
|
|
218
|
+
return { type: "primaryKey", value: primaryKey };
|
|
219
|
+
}
|
|
220
|
+
|
|
202
221
|
/**
|
|
203
222
|
* Validates a date string is in YYYY-MM-DD format and represents a valid date.
|
|
204
223
|
*/
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import * as Builder from "../builder.js";
|
|
3
|
+
import * as Schema from "../schema.js";
|
|
4
|
+
import { createSyncCapability } from "./sync.js";
|
|
5
|
+
|
|
6
|
+
describe("Worker.sync", () => {
|
|
7
|
+
describe("Schema.relation", () => {
|
|
8
|
+
it("creates a relation property configuration", () => {
|
|
9
|
+
const relationProp = Schema.relation("projectsSync");
|
|
10
|
+
|
|
11
|
+
expect(relationProp).toEqual({
|
|
12
|
+
type: "relation",
|
|
13
|
+
relatedSyncKey: "projectsSync",
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("can be used in a schema definition", () => {
|
|
18
|
+
const capability = createSyncCapability("tasksSync", {
|
|
19
|
+
primaryKeyProperty: "Task ID",
|
|
20
|
+
schema: {
|
|
21
|
+
defaultName: "Tasks",
|
|
22
|
+
properties: {
|
|
23
|
+
"Task ID": Schema.title(),
|
|
24
|
+
Project: Schema.relation("projectsSync"),
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
execute: async () => ({
|
|
28
|
+
changes: [],
|
|
29
|
+
hasMore: false,
|
|
30
|
+
}),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
expect(capability.config.schema.properties.Project).toEqual({
|
|
34
|
+
type: "relation",
|
|
35
|
+
relatedSyncKey: "projectsSync",
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe("Builder.relation", () => {
|
|
41
|
+
it("creates a relation reference from a primary key", () => {
|
|
42
|
+
const value = Builder.relation("project-123");
|
|
43
|
+
|
|
44
|
+
expect(value).toEqual({ type: "primaryKey", value: "project-123" });
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("can be used to build relation arrays", () => {
|
|
48
|
+
const value = [
|
|
49
|
+
Builder.relation("project-123"),
|
|
50
|
+
Builder.relation("project-456"),
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
expect(value).toEqual([
|
|
54
|
+
{ type: "primaryKey", value: "project-123" },
|
|
55
|
+
{ type: "primaryKey", value: "project-456" },
|
|
56
|
+
]);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
describe("SyncedObject with relation properties", () => {
|
|
61
|
+
it("allows relation values in synced objects", async () => {
|
|
62
|
+
const capability = createSyncCapability("tasksSync", {
|
|
63
|
+
primaryKeyProperty: "Task ID",
|
|
64
|
+
schema: {
|
|
65
|
+
defaultName: "Tasks",
|
|
66
|
+
properties: {
|
|
67
|
+
"Task ID": Schema.title(),
|
|
68
|
+
Project: Schema.relation("projectsSync"),
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
execute: async () => ({
|
|
72
|
+
changes: [
|
|
73
|
+
{
|
|
74
|
+
type: "upsert",
|
|
75
|
+
key: "task-1",
|
|
76
|
+
properties: {
|
|
77
|
+
"Task ID": Builder.title("TASK-001"),
|
|
78
|
+
Project: [Builder.relation("project-123")],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: "upsert",
|
|
83
|
+
key: "task-2",
|
|
84
|
+
properties: {
|
|
85
|
+
"Task ID": Builder.title("TASK-002"),
|
|
86
|
+
Project: [
|
|
87
|
+
Builder.relation("project-123"),
|
|
88
|
+
Builder.relation("project-456"),
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
hasMore: false,
|
|
94
|
+
}),
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// Verify the capability is properly configured
|
|
98
|
+
expect(capability._tag).toBe("sync");
|
|
99
|
+
expect(capability.config.primaryKeyProperty).toBe("Task ID");
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
});
|
package/src/capabilities/sync.ts
CHANGED
|
@@ -8,6 +8,7 @@ import type {
|
|
|
8
8
|
Icon,
|
|
9
9
|
PeopleValue,
|
|
10
10
|
PlaceValue,
|
|
11
|
+
RelationValue,
|
|
11
12
|
Schedule,
|
|
12
13
|
SyncSchedule,
|
|
13
14
|
TextValue,
|
|
@@ -23,7 +24,9 @@ type PropertyValueType<T extends PropertyConfiguration> = T extends {
|
|
|
23
24
|
? PeopleValue
|
|
24
25
|
: T extends { type: "place" }
|
|
25
26
|
? PlaceValue
|
|
26
|
-
:
|
|
27
|
+
: T extends { type: "relation" }
|
|
28
|
+
? RelationValue
|
|
29
|
+
: TextValue;
|
|
27
30
|
|
|
28
31
|
/**
|
|
29
32
|
* Sync mode determines how the sync handles data lifecycle.
|
|
@@ -188,6 +191,14 @@ export type SyncHandlerResult<PK extends string, Context = unknown> = {
|
|
|
188
191
|
|
|
189
192
|
export type SyncCapability = ReturnType<typeof createSyncCapability>;
|
|
190
193
|
|
|
194
|
+
/**
|
|
195
|
+
* Context object passed from the runtime to sync capability handlers.
|
|
196
|
+
*/
|
|
197
|
+
type RuntimeContext<UserContext = unknown> = {
|
|
198
|
+
/** The user-defined/-controlled context (cursor, pagination state, etc.) */
|
|
199
|
+
userContext?: UserContext;
|
|
200
|
+
};
|
|
201
|
+
|
|
191
202
|
/**
|
|
192
203
|
* Creates a special handler for syncing third-party data to a collection.
|
|
193
204
|
*
|
|
@@ -209,9 +220,10 @@ export function createSyncCapability<
|
|
|
209
220
|
mode: syncConfiguration.mode,
|
|
210
221
|
schedule: parseSchedule(syncConfiguration.schedule),
|
|
211
222
|
},
|
|
212
|
-
async handler(
|
|
223
|
+
async handler(runtimeContext?: RuntimeContext<Context>) {
|
|
224
|
+
const userContext = runtimeContext?.userContext;
|
|
213
225
|
const executionResult = await syncConfiguration
|
|
214
|
-
.execute(
|
|
226
|
+
.execute(userContext)
|
|
215
227
|
.catch((err) => {
|
|
216
228
|
throw new ExecutionError(err);
|
|
217
229
|
});
|
|
@@ -219,7 +231,7 @@ export function createSyncCapability<
|
|
|
219
231
|
const result = {
|
|
220
232
|
changes: executionResult.changes,
|
|
221
233
|
hasMore: executionResult.hasMore,
|
|
222
|
-
|
|
234
|
+
nextUserContext: executionResult.nextContext,
|
|
223
235
|
};
|
|
224
236
|
|
|
225
237
|
process.stdout.write(`\n<output>${JSON.stringify(result)}</output>\n`);
|
package/src/schema.ts
CHANGED
|
@@ -64,7 +64,15 @@ export type PropertyConfiguration =
|
|
|
64
64
|
groups: StatusGroup[];
|
|
65
65
|
}
|
|
66
66
|
| { type: "people" }
|
|
67
|
-
| { type: "place" }
|
|
67
|
+
| { type: "place" }
|
|
68
|
+
| {
|
|
69
|
+
type: "relation";
|
|
70
|
+
/**
|
|
71
|
+
* The export name of the sync capability that defines the related collection.
|
|
72
|
+
* This must match the export name used when defining the related sync capability.
|
|
73
|
+
*/
|
|
74
|
+
relatedSyncKey: string;
|
|
75
|
+
};
|
|
68
76
|
|
|
69
77
|
export type Schema<PK extends string> = {
|
|
70
78
|
/**
|
|
@@ -191,3 +199,27 @@ export function people(): PropertyConfiguration {
|
|
|
191
199
|
export function place(): PropertyConfiguration {
|
|
192
200
|
return { type: "place" };
|
|
193
201
|
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Creates a relation property definition that references another sync capability.
|
|
205
|
+
* The related collection must be defined by a sync capability in the same worker.
|
|
206
|
+
*
|
|
207
|
+
* @param relatedSyncKey - The export name of the sync capability that defines the related collection.
|
|
208
|
+
* @example
|
|
209
|
+
* ```typescript
|
|
210
|
+
* export const projectsSync = sync({...});
|
|
211
|
+
*
|
|
212
|
+
* export const tasksSync = sync({
|
|
213
|
+
* schema: {
|
|
214
|
+
* properties: {
|
|
215
|
+
* "Task Title": Schema.title(),
|
|
216
|
+
* "Project": Schema.relation("projectsSync"),
|
|
217
|
+
* },
|
|
218
|
+
* },
|
|
219
|
+
* ...
|
|
220
|
+
* });
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
export function relation(relatedSyncKey: string): PropertyConfiguration {
|
|
224
|
+
return { type: "relation", relatedSyncKey };
|
|
225
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -226,6 +226,20 @@ export interface PlaceValue {
|
|
|
226
226
|
googlePlaceId?: string;
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
+
/**
|
|
230
|
+
* A reference to a related record by its primary key.
|
|
231
|
+
*/
|
|
232
|
+
export type RelationReference = {
|
|
233
|
+
type: "primaryKey";
|
|
234
|
+
value: string;
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Relation value representing references to related records.
|
|
239
|
+
* Each reference identifies a record in the target collection.
|
|
240
|
+
*/
|
|
241
|
+
export type RelationValue = RelationReference[];
|
|
242
|
+
|
|
229
243
|
/**
|
|
230
244
|
* Time units for schedule intervals.
|
|
231
245
|
* - "m": minutes
|