@marcoappio/marco-config 4.0.8 → 4.0.10

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/appwrite/tableContract/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import * as v from 'valibot';
2
+ import { identityTableInputs } from './identity';
3
+ import { mailboxTableInputs } from './mailbox';
4
+ import { operationalTableInputs } from './operational';
5
+ import { appwriteIds, appwriteRowIdSchema, identifierSchema, timestampSchema, } from './shared';
6
+ export * from './shared';
7
+ const appwriteTableInputs = {
8
+ ...identityTableInputs,
9
+ ...mailboxTableInputs,
10
+ ...operationalTableInputs,
11
+ };
12
+ const materialiseTable = (table) => {
13
+ const columns = Object.entries(table.fields).flatMap(([key, field]) => {
14
+ if ('relatedTable' in field.definition) {
15
+ return [];
16
+ }
17
+ return [{ key, ...field.definition }];
18
+ });
19
+ const relationships = Object.entries(table.fields).flatMap(([key, field]) => {
20
+ if ('relatedTable' in field.definition) {
21
+ return [
22
+ {
23
+ key,
24
+ onDelete: field.definition.onDelete,
25
+ relatedTableId: appwriteIds.tables[field.definition.relatedTable],
26
+ type: field.definition.type,
27
+ },
28
+ ];
29
+ }
30
+ return [];
31
+ });
32
+ return {
33
+ columns,
34
+ id: table.id,
35
+ indexes: table.indexes,
36
+ key: table.key,
37
+ name: table.name,
38
+ relationships,
39
+ };
40
+ };
41
+ const wireMetadata = (tableId, wirePermissions) => ({
42
+ $createdAt: timestampSchema,
43
+ $databaseId: v.literal(appwriteIds.database),
44
+ $id: appwriteRowIdSchema,
45
+ $permissions: wirePermissions === 'empty' ? v.pipe(v.array(v.string()), v.length(0)) : v.array(v.string()),
46
+ $sequence: identifierSchema,
47
+ $tableId: v.literal(tableId),
48
+ $updatedAt: timestampSchema,
49
+ });
50
+ function createDataSchema(fields, dataCheck) {
51
+ const schema = v.object(fields);
52
+ if (dataCheck) {
53
+ return v.pipe(schema, v.check(input => dataCheck(input)));
54
+ }
55
+ return schema;
56
+ }
57
+ const createRowSchema = (fields, tableId, wirePermissions) => v.strictObject({ ...wireMetadata(tableId, wirePermissions), ...fields });
58
+ export function defineAppwriteTables(tables) {
59
+ const createDataSchemaForTable = (fields, dataCheck) => {
60
+ if (dataCheck) {
61
+ return createDataSchema(fields, dataCheck);
62
+ }
63
+ return createDataSchema(fields);
64
+ };
65
+ const dataSchemas = Object.fromEntries(Object.entries(tables).map(([tableKey, table]) => [tableKey, createDataSchemaForTable(table.fields, table.dataCheck)]));
66
+ const rowSchemas = Object.fromEntries(Object.entries(tables).map(([tableKey, table]) => [tableKey, createRowSchema(table.fields, table.id, table.wirePermissions)]));
67
+ const tableDefinitions = Object.fromEntries(Object.entries(tables).map(([tableKey, table]) => [tableKey, materialiseTable(table)]));
68
+ return {
69
+ dataSchemas,
70
+ rowSchemas,
71
+ tables: tableDefinitions,
72
+ };
73
+ }
74
+ export const appwriteTableContract = defineAppwriteTables(appwriteTableInputs);
75
+ export const appwriteTables = appwriteTableContract.tables;
76
+ export const appwriteDataSchemas = appwriteTableContract.dataSchemas;
77
+ export const appwriteRowSchemas = appwriteTableContract.rowSchemas;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/appwrite/tableContract/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { describe, expect, it } from 'bun:test';
2
+ import * as v from 'valibot';
3
+ import { identityTableInputs } from './identity';
4
+ import { defineAppwriteTables } from './index';
5
+ import { mailboxTableInputs } from './mailbox';
6
+ import { operationalTableInputs } from './operational';
7
+ const tableInputs = {
8
+ ...identityTableInputs,
9
+ ...mailboxTableInputs,
10
+ ...operationalTableInputs,
11
+ };
12
+ const validAccount = {
13
+ colour: '#000000',
14
+ credential: null,
15
+ displayName: null,
16
+ initialSyncCompletedAt: null,
17
+ lastErrorCode: null,
18
+ lastSuccessfulSyncAt: null,
19
+ mailboxSyncState: null,
20
+ mailProcessedCount: 0,
21
+ mailTotalCount: 0,
22
+ pollShardAssignmentId: null,
23
+ pollShardId: null,
24
+ primaryAlias: 'test-alias-id-1',
25
+ primaryEmail: 'test-account-1@example.com',
26
+ profile: 'test-user-id-1',
27
+ profileAssignmentKey: 'test-user-id-1',
28
+ provider: 'GMAIL',
29
+ state: 'CONNECTED',
30
+ };
31
+ describe('defineAppwriteTables', () => {
32
+ it('applies each supplied table data check to its generated data schema', () => {
33
+ const contract = defineAppwriteTables({
34
+ ...tableInputs,
35
+ accounts: {
36
+ ...tableInputs.accounts,
37
+ dataCheck: () => false,
38
+ },
39
+ });
40
+ expect(v.safeParse(contract.dataSchemas.accounts, validAccount).success).toBe(false);
41
+ });
42
+ it('generates each schema and definition from the supplied table inputs', () => {
43
+ const contract = defineAppwriteTables(tableInputs);
44
+ expect(Object.keys(contract.dataSchemas).sort()).toEqual(Object.keys(tableInputs).sort());
45
+ expect(Object.keys(contract.rowSchemas).sort()).toEqual(Object.keys(tableInputs).sort());
46
+ expect(Object.keys(contract.tables).sort()).toEqual(Object.keys(tableInputs).sort());
47
+ });
48
+ });