@multitenantkit/sdk-supabase 0.2.2 → 0.2.4
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/factories/AdapterFactory.d.ts +45 -4
- package/dist/factories/AdapterFactory.d.ts.map +1 -1
- package/dist/factories/AdapterFactory.js +98 -4
- package/dist/factories/AdapterFactory.js.map +1 -1
- package/dist/index.d.ts +15 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -3,33 +3,74 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Creates complete adapters bundle for Supabase Edge Functions.
|
|
5
5
|
* Uses Web Crypto API for UUID generation (Deno compatible).
|
|
6
|
+
* Applies Supabase-specific defaults automatically.
|
|
6
7
|
*/
|
|
7
8
|
import type { Adapters, ToolkitOptions } from '@multitenantkit/domain-contracts';
|
|
8
9
|
import type { SupabaseClient } from '@supabase/supabase-js';
|
|
10
|
+
/**
|
|
11
|
+
* Merges user-provided ToolkitOptions with Supabase-specific defaults.
|
|
12
|
+
*
|
|
13
|
+
* Supabase defaults applied:
|
|
14
|
+
* - namingStrategy: 'snake_case'
|
|
15
|
+
* - users.database: { schema: 'public', table: 'profiles' }
|
|
16
|
+
* - users.customFields.columnMapping: { externalId: 'external_id', username: 'username' }
|
|
17
|
+
* - organizations.database: { schema: 'public', table: 'organizations' }
|
|
18
|
+
* - organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }
|
|
19
|
+
*
|
|
20
|
+
* Note: We use public.profiles instead of auth.users because:
|
|
21
|
+
* - auth.users is not accessible via PostgREST (Supabase client)
|
|
22
|
+
* - auth.users is managed by GoTrue and shouldn't be modified directly
|
|
23
|
+
* - public.profiles gives you full control over user data
|
|
24
|
+
*
|
|
25
|
+
* User-provided options take precedence over defaults.
|
|
26
|
+
*/
|
|
27
|
+
export declare function applySupabaseDefaults<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>(options?: ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
|
|
9
28
|
/**
|
|
10
29
|
* Options for creating Supabase adapters
|
|
11
30
|
*/
|
|
12
31
|
export interface CreateSupabaseAdaptersOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields> {
|
|
13
32
|
/** Supabase client instance */
|
|
14
33
|
client: SupabaseClient;
|
|
15
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Toolkit options for custom fields and database configuration.
|
|
36
|
+
* Supabase defaults are applied automatically (auth.users, snake_case, etc.)
|
|
37
|
+
* Your options take precedence over defaults.
|
|
38
|
+
*/
|
|
16
39
|
toolkitOptions?: ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
|
|
17
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Result of createSupabaseAdapters including adapters and resolved toolkitOptions
|
|
43
|
+
*/
|
|
44
|
+
export interface SupabaseAdaptersResult<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields> {
|
|
45
|
+
/** The adapters bundle (persistence + system) */
|
|
46
|
+
adapters: Adapters<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
|
|
47
|
+
/** The toolkit options with Supabase defaults applied */
|
|
48
|
+
toolkitOptions: ToolkitOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
|
|
49
|
+
}
|
|
18
50
|
/**
|
|
19
51
|
* Create complete Supabase adapters bundle (persistence + system)
|
|
20
52
|
*
|
|
21
53
|
* This is the main factory function for Supabase/Deno environments.
|
|
22
54
|
* It creates all necessary adapters with NO Node.js dependencies.
|
|
23
55
|
*
|
|
56
|
+
* **Supabase defaults applied automatically:**
|
|
57
|
+
* - `namingStrategy: 'snake_case'`
|
|
58
|
+
* - `users.database: { schema: 'auth', table: 'users' }`
|
|
59
|
+
* - `users.customFields.columnMapping: { externalId: 'id', username: 'email' }`
|
|
60
|
+
* - `organizations.database: { schema: 'public', table: 'organizations' }`
|
|
61
|
+
* - `organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }`
|
|
62
|
+
*
|
|
63
|
+
* Your options take precedence over defaults.
|
|
64
|
+
*
|
|
24
65
|
* @example
|
|
25
66
|
* ```typescript
|
|
26
67
|
* import { createSupabaseAdapters, createUseCases } from '@multitenantkit/sdk-supabase';
|
|
27
68
|
* import { createClient } from '@supabase/supabase-js';
|
|
28
69
|
*
|
|
29
70
|
* const client = createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY);
|
|
30
|
-
* const adapters = createSupabaseAdapters({ client });
|
|
31
|
-
* const useCases = createUseCases(adapters);
|
|
71
|
+
* const { adapters, toolkitOptions } = createSupabaseAdapters({ client });
|
|
72
|
+
* const useCases = createUseCases(adapters, toolkitOptions);
|
|
32
73
|
* ```
|
|
33
74
|
*/
|
|
34
|
-
export declare function createSupabaseAdapters<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options: CreateSupabaseAdaptersOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>):
|
|
75
|
+
export declare function createSupabaseAdapters<TUserCustomFields = {}, TOrganizationCustomFields = {}, TOrganizationMembershipCustomFields = {}>(options: CreateSupabaseAdaptersOptions<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>): SupabaseAdaptersResult<TUserCustomFields, TOrganizationCustomFields, TOrganizationMembershipCustomFields>;
|
|
35
76
|
//# sourceMappingURL=AdapterFactory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdapterFactory.d.ts","sourceRoot":"","sources":["../../src/factories/AdapterFactory.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"AdapterFactory.d.ts","sourceRoot":"","sources":["../../src/factories/AdapterFactory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACR,QAAQ,EAIR,cAAc,EAEjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAY5D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CACjC,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,EAEnC,OAAO,CAAC,EAAE,cAAc,CACpB,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,cAAc,CACb,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAmEA;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B,CAC1C,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC;IAEnC,+BAA+B;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAC3B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB,CACnC,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC;IAEnC,iDAAiD;IACjD,QAAQ,EAAE,QAAQ,CACd,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAAC;IACF,yDAAyD;IACzD,cAAc,EAAE,cAAc,CAC1B,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAAC;CACL;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,sBAAsB,CAElC,iBAAiB,GAAG,EAAE,EAEtB,yBAAyB,GAAG,EAAE,EAE9B,mCAAmC,GAAG,EAAE,EAExC,OAAO,EAAE,6BAA6B,CAClC,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,GACF,sBAAsB,CACrB,iBAAiB,EACjB,yBAAyB,EACzB,mCAAmC,CACtC,CAqCA"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Creates complete adapters bundle for Supabase Edge Functions.
|
|
5
5
|
* Uses Web Crypto API for UUID generation (Deno compatible).
|
|
6
|
+
* Applies Supabase-specific defaults automatically.
|
|
6
7
|
*/
|
|
7
8
|
import { createSupabaseRepositories } from '@multitenantkit/adapter-persistence-supabase';
|
|
8
9
|
import { WebCryptoUuid } from '@multitenantkit/adapter-system-web-crypto';
|
|
@@ -15,24 +16,116 @@ class WebClock {
|
|
|
15
16
|
return new Date();
|
|
16
17
|
}
|
|
17
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Merges user-provided ToolkitOptions with Supabase-specific defaults.
|
|
21
|
+
*
|
|
22
|
+
* Supabase defaults applied:
|
|
23
|
+
* - namingStrategy: 'snake_case'
|
|
24
|
+
* - users.database: { schema: 'public', table: 'profiles' }
|
|
25
|
+
* - users.customFields.columnMapping: { externalId: 'external_id', username: 'username' }
|
|
26
|
+
* - organizations.database: { schema: 'public', table: 'organizations' }
|
|
27
|
+
* - organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }
|
|
28
|
+
*
|
|
29
|
+
* Note: We use public.profiles instead of auth.users because:
|
|
30
|
+
* - auth.users is not accessible via PostgREST (Supabase client)
|
|
31
|
+
* - auth.users is managed by GoTrue and shouldn't be modified directly
|
|
32
|
+
* - public.profiles gives you full control over user data
|
|
33
|
+
*
|
|
34
|
+
* User-provided options take precedence over defaults.
|
|
35
|
+
*/
|
|
36
|
+
export function applySupabaseDefaults(options) {
|
|
37
|
+
// Default Supabase columnMapping for users (profiles table uses snake_case)
|
|
38
|
+
const supabaseUserColumnMapping = {
|
|
39
|
+
externalId: 'external_id',
|
|
40
|
+
username: 'username'
|
|
41
|
+
};
|
|
42
|
+
// Build users config with Supabase defaults
|
|
43
|
+
const usersConfig = {
|
|
44
|
+
customFields: {
|
|
45
|
+
// User's customSchema if provided
|
|
46
|
+
...(options?.users?.customFields?.customSchema && {
|
|
47
|
+
customSchema: options.users.customFields.customSchema
|
|
48
|
+
}),
|
|
49
|
+
// Use user's columnMapping or Supabase default
|
|
50
|
+
columnMapping: options?.users?.customFields?.columnMapping ?? supabaseUserColumnMapping,
|
|
51
|
+
// Use user's customMapper if provided (no default mapper needed for profiles table)
|
|
52
|
+
...(options?.users?.customFields?.customMapper && {
|
|
53
|
+
customMapper: options.users.customFields.customMapper
|
|
54
|
+
})
|
|
55
|
+
},
|
|
56
|
+
database: {
|
|
57
|
+
schema: options?.users?.database?.schema ?? 'public',
|
|
58
|
+
table: options?.users?.database?.table ?? 'profiles',
|
|
59
|
+
...(options?.users?.database?.namingStrategy && {
|
|
60
|
+
namingStrategy: options.users.database.namingStrategy
|
|
61
|
+
})
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
// Build organizations config with Supabase defaults
|
|
65
|
+
const organizationsConfig = {
|
|
66
|
+
...(options?.organizations?.customFields && {
|
|
67
|
+
customFields: options.organizations.customFields
|
|
68
|
+
}),
|
|
69
|
+
database: {
|
|
70
|
+
schema: options?.organizations?.database?.schema ?? 'public',
|
|
71
|
+
table: options?.organizations?.database?.table ?? 'organizations',
|
|
72
|
+
...(options?.organizations?.database?.namingStrategy && {
|
|
73
|
+
namingStrategy: options.organizations.database.namingStrategy
|
|
74
|
+
})
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
// Build organization memberships config with Supabase defaults
|
|
78
|
+
const organizationMembershipsConfig = {
|
|
79
|
+
...(options?.organizationMemberships?.customFields && {
|
|
80
|
+
customFields: options.organizationMemberships.customFields
|
|
81
|
+
}),
|
|
82
|
+
database: {
|
|
83
|
+
schema: options?.organizationMemberships?.database?.schema ?? 'public',
|
|
84
|
+
table: options?.organizationMemberships?.database?.table ?? 'organization_memberships',
|
|
85
|
+
...(options?.organizationMemberships?.database?.namingStrategy && {
|
|
86
|
+
namingStrategy: options.organizationMemberships.database.namingStrategy
|
|
87
|
+
})
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
return {
|
|
91
|
+
namingStrategy: options?.namingStrategy ?? 'snake_case',
|
|
92
|
+
users: usersConfig,
|
|
93
|
+
organizations: organizationsConfig,
|
|
94
|
+
organizationMemberships: organizationMembershipsConfig,
|
|
95
|
+
// Pass through other options as-is
|
|
96
|
+
...(options?.useCaseHooks && { useCaseHooks: options.useCaseHooks }),
|
|
97
|
+
...(options?.responseTransformers && { responseTransformers: options.responseTransformers })
|
|
98
|
+
};
|
|
99
|
+
}
|
|
18
100
|
/**
|
|
19
101
|
* Create complete Supabase adapters bundle (persistence + system)
|
|
20
102
|
*
|
|
21
103
|
* This is the main factory function for Supabase/Deno environments.
|
|
22
104
|
* It creates all necessary adapters with NO Node.js dependencies.
|
|
23
105
|
*
|
|
106
|
+
* **Supabase defaults applied automatically:**
|
|
107
|
+
* - `namingStrategy: 'snake_case'`
|
|
108
|
+
* - `users.database: { schema: 'auth', table: 'users' }`
|
|
109
|
+
* - `users.customFields.columnMapping: { externalId: 'id', username: 'email' }`
|
|
110
|
+
* - `organizations.database: { schema: 'public', table: 'organizations' }`
|
|
111
|
+
* - `organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }`
|
|
112
|
+
*
|
|
113
|
+
* Your options take precedence over defaults.
|
|
114
|
+
*
|
|
24
115
|
* @example
|
|
25
116
|
* ```typescript
|
|
26
117
|
* import { createSupabaseAdapters, createUseCases } from '@multitenantkit/sdk-supabase';
|
|
27
118
|
* import { createClient } from '@supabase/supabase-js';
|
|
28
119
|
*
|
|
29
120
|
* const client = createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY);
|
|
30
|
-
* const adapters = createSupabaseAdapters({ client });
|
|
31
|
-
* const useCases = createUseCases(adapters);
|
|
121
|
+
* const { adapters, toolkitOptions } = createSupabaseAdapters({ client });
|
|
122
|
+
* const useCases = createUseCases(adapters, toolkitOptions);
|
|
32
123
|
* ```
|
|
33
124
|
*/
|
|
34
125
|
export function createSupabaseAdapters(options) {
|
|
35
|
-
const { client, toolkitOptions } = options;
|
|
126
|
+
const { client, toolkitOptions: userOptions } = options;
|
|
127
|
+
// Apply Supabase defaults to toolkit options
|
|
128
|
+
const toolkitOptions = applySupabaseDefaults(userOptions);
|
|
36
129
|
// Create persistence adapters using Supabase repositories
|
|
37
130
|
const persistence = createSupabaseRepositories({ client, toolkitOptions });
|
|
38
131
|
// Create system adapters using Web APIs (Deno compatible)
|
|
@@ -40,9 +133,10 @@ export function createSupabaseAdapters(options) {
|
|
|
40
133
|
clock: new WebClock(),
|
|
41
134
|
uuid: new WebCryptoUuid()
|
|
42
135
|
};
|
|
43
|
-
|
|
136
|
+
const adapters = {
|
|
44
137
|
persistence: persistence,
|
|
45
138
|
system
|
|
46
139
|
};
|
|
140
|
+
return { adapters, toolkitOptions };
|
|
47
141
|
}
|
|
48
142
|
//# sourceMappingURL=AdapterFactory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdapterFactory.js","sourceRoot":"","sources":["../../src/factories/AdapterFactory.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"AdapterFactory.js","sourceRoot":"","sources":["../../src/factories/AdapterFactory.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,18 +6,30 @@
|
|
|
6
6
|
* This SDK provides everything you need to run MultiTenantKit in Supabase Edge Functions
|
|
7
7
|
* without any Node.js dependencies.
|
|
8
8
|
*
|
|
9
|
+
* **Supabase defaults applied automatically:**
|
|
10
|
+
* - `namingStrategy: 'snake_case'`
|
|
11
|
+
* - `users.database: { schema: 'public', table: 'profiles' }`
|
|
12
|
+
* - `users.customFields.columnMapping: { externalId: 'external_id', username: 'username' }`
|
|
13
|
+
* - `organizations.database: { schema: 'public', table: 'organizations' }`
|
|
14
|
+
* - `organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }`
|
|
15
|
+
*
|
|
16
|
+
* Note: We use `public.profiles` instead of `auth.users` because:
|
|
17
|
+
* - `auth.users` is not accessible via PostgREST (Supabase JS client)
|
|
18
|
+
* - `auth.users` is managed by GoTrue and shouldn't be modified directly
|
|
19
|
+
* - `public.profiles` gives you full control over user profile data
|
|
20
|
+
*
|
|
9
21
|
* @example
|
|
10
22
|
* ```typescript
|
|
11
23
|
* import { createSupabaseAdapters, createUseCases } from '@multitenantkit/sdk-supabase';
|
|
12
24
|
* import { createClient } from '@supabase/supabase-js';
|
|
13
25
|
*
|
|
14
26
|
* const client = createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY);
|
|
15
|
-
* const adapters = createSupabaseAdapters({ client });
|
|
16
|
-
* const useCases = createUseCases(adapters);
|
|
27
|
+
* const { adapters, toolkitOptions } = createSupabaseAdapters({ client });
|
|
28
|
+
* const useCases = createUseCases(adapters, toolkitOptions);
|
|
17
29
|
* ```
|
|
18
30
|
*/
|
|
19
31
|
export { createSupabaseClient, createSupabaseConfig, createSupabaseRepositories, type SupabaseClient, type SupabaseConfig, type SupabaseFactoryOptions, type SupabaseRepositoryBundle } from '@multitenantkit/adapter-persistence-supabase';
|
|
20
32
|
export { WebCryptoUuid } from '@multitenantkit/adapter-system-web-crypto';
|
|
21
|
-
export { type CreateSupabaseAdaptersOptions, createSupabaseAdapters } from './factories/AdapterFactory';
|
|
33
|
+
export { applySupabaseDefaults, type CreateSupabaseAdaptersOptions, createSupabaseAdapters, type SupabaseAdaptersResult } from './factories/AdapterFactory';
|
|
22
34
|
export { createUseCases } from './factories/UseCaseFactory';
|
|
23
35
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAChC,MAAM,8CAA8C,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG1E,OAAO,EACH,qBAAqB,EACrB,KAAK,6BAA6B,EAClC,sBAAsB,EACtB,KAAK,sBAAsB,EAC9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,21 +6,33 @@
|
|
|
6
6
|
* This SDK provides everything you need to run MultiTenantKit in Supabase Edge Functions
|
|
7
7
|
* without any Node.js dependencies.
|
|
8
8
|
*
|
|
9
|
+
* **Supabase defaults applied automatically:**
|
|
10
|
+
* - `namingStrategy: 'snake_case'`
|
|
11
|
+
* - `users.database: { schema: 'public', table: 'profiles' }`
|
|
12
|
+
* - `users.customFields.columnMapping: { externalId: 'external_id', username: 'username' }`
|
|
13
|
+
* - `organizations.database: { schema: 'public', table: 'organizations' }`
|
|
14
|
+
* - `organizationMemberships.database: { schema: 'public', table: 'organization_memberships' }`
|
|
15
|
+
*
|
|
16
|
+
* Note: We use `public.profiles` instead of `auth.users` because:
|
|
17
|
+
* - `auth.users` is not accessible via PostgREST (Supabase JS client)
|
|
18
|
+
* - `auth.users` is managed by GoTrue and shouldn't be modified directly
|
|
19
|
+
* - `public.profiles` gives you full control over user profile data
|
|
20
|
+
*
|
|
9
21
|
* @example
|
|
10
22
|
* ```typescript
|
|
11
23
|
* import { createSupabaseAdapters, createUseCases } from '@multitenantkit/sdk-supabase';
|
|
12
24
|
* import { createClient } from '@supabase/supabase-js';
|
|
13
25
|
*
|
|
14
26
|
* const client = createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY);
|
|
15
|
-
* const adapters = createSupabaseAdapters({ client });
|
|
16
|
-
* const useCases = createUseCases(adapters);
|
|
27
|
+
* const { adapters, toolkitOptions } = createSupabaseAdapters({ client });
|
|
28
|
+
* const useCases = createUseCases(adapters, toolkitOptions);
|
|
17
29
|
* ```
|
|
18
30
|
*/
|
|
19
31
|
// Re-export persistence adapter
|
|
20
32
|
export { createSupabaseClient, createSupabaseConfig, createSupabaseRepositories } from '@multitenantkit/adapter-persistence-supabase';
|
|
21
33
|
// Re-export system adapter
|
|
22
34
|
export { WebCryptoUuid } from '@multitenantkit/adapter-system-web-crypto';
|
|
23
|
-
// Export factories
|
|
24
|
-
export { createSupabaseAdapters } from './factories/AdapterFactory';
|
|
35
|
+
// Export factories and utilities
|
|
36
|
+
export { applySupabaseDefaults, createSupabaseAdapters } from './factories/AdapterFactory';
|
|
25
37
|
export { createUseCases } from './factories/UseCaseFactory';
|
|
26
38
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,gCAAgC;AAChC,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAK7B,MAAM,8CAA8C,CAAC;AAEtD,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,iCAAiC;AACjC,OAAO,EACH,qBAAqB,EAErB,sBAAsB,EAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multitenantkit/sdk-supabase",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "MultiTenantKit SDK for Supabase Edge Functions (Deno compatible)",
|
|
6
6
|
"keywords": [
|
|
@@ -46,10 +46,10 @@
|
|
|
46
46
|
"type-check": "tsc --noEmit"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@multitenantkit/domain": "^0.2.
|
|
49
|
+
"@multitenantkit/domain": "^0.2.4",
|
|
50
50
|
"@multitenantkit/domain-contracts": "^0.2.0",
|
|
51
|
-
"@multitenantkit/adapter-persistence-supabase": "^0.2.
|
|
52
|
-
"@multitenantkit/adapter-system-web-crypto": "^0.2.
|
|
51
|
+
"@multitenantkit/adapter-persistence-supabase": "^0.2.4",
|
|
52
|
+
"@multitenantkit/adapter-system-web-crypto": "^0.2.4",
|
|
53
53
|
"@supabase/supabase-js": "^2.39.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|