@outbuild/supa-store 0.0.11 → 0.0.12
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/esm2022/lib/common/token/initial-state.token.mjs +18 -0
- package/esm2022/lib/common/token/supabase-credentials.token.mjs +3 -0
- package/esm2022/lib/common/type/supa-store-state.type.mjs +2 -0
- package/esm2022/lib/common/type/supa-store.types.mjs +2 -0
- package/esm2022/lib/supa-store.provider.mjs +21 -0
- package/esm2022/lib/supa-store.store.mjs +36 -0
- package/esm2022/outbuild-supa-store.mjs +5 -0
- package/esm2022/public-api.mjs +6 -0
- package/fesm2022/outbuild-supa-store.mjs +81 -0
- package/fesm2022/outbuild-supa-store.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/common/token/initial-state.token.d.ts +3 -0
- package/lib/common/token/supabase-credentials.token.d.ts +3 -0
- package/lib/common/type/supa-store-state.type.d.ts +12 -0
- package/lib/common/type/supa-store.types.d.ts +24 -0
- package/lib/supa-store.provider.d.ts +3 -0
- package/lib/supa-store.store.d.ts +46 -0
- package/package.json +32 -19
- package/public-api.d.ts +2 -0
- package/ng-package.json +0 -7
- package/src/lib/common/token/initial-state.token.ts +0 -19
- package/src/lib/common/token/supabase-credentials.token.ts +0 -4
- package/src/lib/common/type/supa-store.types.ts +0 -27
- package/src/lib/supa-store.provider.ts +0 -25
- package/src/lib/supa-store.store.ts +0 -55
- package/src/public-api.ts +0 -6
- package/tsconfig.lib.json +0 -15
- package/tsconfig.lib.prod.json +0 -11
- package/tsconfig.spec.json +0 -15
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { inject, InjectionToken } from "@angular/core";
|
|
2
|
+
import { SUPA_STORE_OPTIONS } from "./supabase-credentials.token";
|
|
3
|
+
import { createClient } from "@supabase/supabase-js";
|
|
4
|
+
export const INITIAL_STATE = new InjectionToken('SupaStoreState', {
|
|
5
|
+
factory: () => {
|
|
6
|
+
const { supabaseUrl, supabaseKey } = inject(SUPA_STORE_OPTIONS);
|
|
7
|
+
return {
|
|
8
|
+
client: createClient(supabaseUrl, supabaseKey),
|
|
9
|
+
auth: {
|
|
10
|
+
session: undefined,
|
|
11
|
+
user: undefined,
|
|
12
|
+
userMetadata: undefined,
|
|
13
|
+
state: { prev: null, curr: null }
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbC1zdGF0ZS50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29iLXN1cGEtc3RvcmUvc3JjL2xpYi9jb21tb24vdG9rZW4vaW5pdGlhbC1zdGF0ZS50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFHcEQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLElBQUksY0FBYyxDQUFpQixnQkFBZ0IsRUFBRTtJQUNoRixPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ1osTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUMvRCxPQUFPO1lBQ0wsTUFBTSxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO1lBQzlDLElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUUsU0FBUztnQkFDbEIsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTthQUNsQztTQUNGLENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcclxuaW1wb3J0IHsgU1VQQV9TVE9SRV9PUFRJT05TIH0gZnJvbSBcIi4vc3VwYWJhc2UtY3JlZGVudGlhbHMudG9rZW5cIlxyXG5pbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tIFwiQHN1cGFiYXNlL3N1cGFiYXNlLWpzXCJcclxuaW1wb3J0IHsgU3VwYVN0b3JlU3RhdGUgfSBmcm9tIFwiLi4vdHlwZS9zdXBhLXN0b3JlLnR5cGVzXCJcclxuXHJcbmV4cG9ydCBjb25zdCBJTklUSUFMX1NUQVRFID0gbmV3IEluamVjdGlvblRva2VuPFN1cGFTdG9yZVN0YXRlPignU3VwYVN0b3JlU3RhdGUnLCB7XHJcbiAgZmFjdG9yeTogKCkgPT4ge1xyXG4gICAgY29uc3QgeyBzdXBhYmFzZVVybCwgc3VwYWJhc2VLZXkgfSA9IGluamVjdChTVVBBX1NUT1JFX09QVElPTlMpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjbGllbnQ6IGNyZWF0ZUNsaWVudChzdXBhYmFzZVVybCwgc3VwYWJhc2VLZXkpLFxyXG4gICAgICBhdXRoOiB7XHJcbiAgICAgICAgc2Vzc2lvbjogdW5kZWZpbmVkLFxyXG4gICAgICAgIHVzZXI6IHVuZGVmaW5lZCxcclxuICAgICAgICB1c2VyTWV0YWRhdGE6IHVuZGVmaW5lZCxcclxuICAgICAgICBzdGF0ZTogeyBwcmV2OiBudWxsLCBjdXJyOiBudWxsIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sXHJcbn0pXHJcbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { InjectionToken } from "@angular/core";
|
|
2
|
+
export const SUPA_STORE_OPTIONS = new InjectionToken('SUPA_STORE_OPTIONS');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwYWJhc2UtY3JlZGVudGlhbHMudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYi1zdXBhLXN0b3JlL3NyYy9saWIvY29tbW9uL3Rva2VuL3N1cGFiYXNlLWNyZWRlbnRpYWxzLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFHOUMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQWlCLG9CQUFvQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcclxuaW1wb3J0IHsgU3VwYVN0b3JlSW5wdXQgfSBmcm9tIFwiLi4vdHlwZS9zdXBhLXN0b3JlLnR5cGVzXCJcclxuXHJcbmV4cG9ydCBjb25zdCBTVVBBX1NUT1JFX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3VwYVN0b3JlSW5wdXQ+KCdTVVBBX1NUT1JFX09QVElPTlMnKVxyXG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwYS1zdG9yZS1zdGF0ZS50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2Itc3VwYS1zdG9yZS9zcmMvbGliL2NvbW1vbi90eXBlL3N1cGEtc3RvcmUtc3RhdGUudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aENoYW5nZUV2ZW50LCBTZXNzaW9uLCBTdXBhYmFzZUNsaWVudCwgVXNlciB9IGZyb20gXCJAc3VwYWJhc2Uvc3VwYWJhc2UtanNcIlxyXG5cclxuZXhwb3J0IHR5cGUgU3VwYVN0b3JlU3RhdGUgPSB7XHJcbiAgY2xpZW50OiBTdXBhYmFzZUNsaWVudFxyXG4gIGF1dGg6IHtcclxuICAgIHNlc3Npb246IFNlc3Npb24gfCB1bmRlZmluZWQgfCBudWxsXHJcbiAgICB1c2VyOiBVc2VyIHwgdW5kZWZpbmVkIHwgbnVsbFxyXG4gICAgc3RhdGU6IHtcclxuICAgICAgcHJldjogQXV0aENoYW5nZUV2ZW50IHwgbnVsbCxcclxuICAgICAgY3VycjogQXV0aENoYW5nZUV2ZW50IHwgbnVsbCxcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwYS1zdG9yZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29iLXN1cGEtc3RvcmUvc3JjL2xpYi9jb21tb24vdHlwZS9zdXBhLXN0b3JlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoQ2hhbmdlRXZlbnQsIFNlc3Npb24sIFN1cGFiYXNlQ2xpZW50LCBVc2VyIH0gZnJvbSBcIkBzdXBhYmFzZS9zdXBhYmFzZS1qc1wiXHJcblxyXG5leHBvcnQgdHlwZSBTdXBhU3RvcmVTdGF0ZSA9IHtcclxuICBjbGllbnQ6IFN1cGFiYXNlQ2xpZW50XHJcbiAgYXV0aDoge1xyXG4gICAgc2Vzc2lvbjogU2Vzc2lvbiB8IHVuZGVmaW5lZCB8IG51bGxcclxuICAgIHVzZXI6IFVzZXIgfCB1bmRlZmluZWQgfCBudWxsXHJcbiAgICB1c2VyTWV0YWRhdGE6IHVua25vd24gfCB1bmRlZmluZWQgfCBudWxsXHJcbiAgICBzdGF0ZToge1xyXG4gICAgICBwcmV2OiBBdXRoQ2hhbmdlRXZlbnQgfCBudWxsLFxyXG4gICAgICBjdXJyOiBBdXRoQ2hhbmdlRXZlbnQgfCBudWxsLFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU3VwYVN0b3JlSW5wdXQgPSB7XHJcbiAgc3VwYWJhc2VVcmw6IHN0cmluZyxcclxuICBzdXBhYmFzZUtleTogc3RyaW5nLFxyXG4gIG9wdGlvbnM6IFN1cGFTdG9yZU9wdGlvbnNcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU3VwYVN0b3JlT3B0aW9ucyA9IHtcclxuICB1c2VyTWV0YWRhdGE/OiB7XHJcbiAgICBsb2FkPzogYm9vbGVhbixcclxuICAgIHRhYmxlPzogc3RyaW5nLFxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { makeEnvironmentProviders } from "@angular/core";
|
|
2
|
+
import { SupaStore } from "./supa-store.store";
|
|
3
|
+
import { SUPA_STORE_OPTIONS } from "./common/token/supabase-credentials.token";
|
|
4
|
+
import { merge } from "lodash-es";
|
|
5
|
+
const defaultOptions = {
|
|
6
|
+
userMetadata: {
|
|
7
|
+
load: false,
|
|
8
|
+
table: 'users',
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
export const provideSupaStore = (supabaseUrl, supabaseKey, opts = {}) => {
|
|
12
|
+
const options = merge(defaultOptions, opts);
|
|
13
|
+
return makeEnvironmentProviders([
|
|
14
|
+
{
|
|
15
|
+
provide: SUPA_STORE_OPTIONS,
|
|
16
|
+
useValue: { supabaseUrl, supabaseKey, options }
|
|
17
|
+
},
|
|
18
|
+
SupaStore
|
|
19
|
+
]);
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwYS1zdG9yZS5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29iLXN1cGEtc3RvcmUvc3JjL2xpYi9zdXBhLXN0b3JlLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBd0Isd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDOUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFBO0FBRTlFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFakMsTUFBTSxjQUFjLEdBQXFCO0lBQ3ZDLFlBQVksRUFBRTtRQUNaLElBQUksRUFBRSxLQUFLO1FBQ1gsS0FBSyxFQUFFLE9BQU87S0FDZjtDQUNGLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFdBQW1CLEVBQUUsV0FBbUIsRUFBRSxPQUF5QixFQUFFLEVBQXdCLEVBQUU7SUFFOUgsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUUzQyxPQUFPLHdCQUF3QixDQUFDO1FBQzlCO1lBQ0UsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRTtTQUNoRDtRQUNELFNBQVM7S0FDVixDQUFDLENBQUE7QUFDSixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxyXG5pbXBvcnQgeyBTdXBhU3RvcmUgfSBmcm9tIFwiLi9zdXBhLXN0b3JlLnN0b3JlXCJcclxuaW1wb3J0IHsgU1VQQV9TVE9SRV9PUFRJT05TIH0gZnJvbSBcIi4vY29tbW9uL3Rva2VuL3N1cGFiYXNlLWNyZWRlbnRpYWxzLnRva2VuXCJcclxuaW1wb3J0IHsgU3VwYVN0b3JlT3B0aW9ucyB9IGZyb20gXCIuL2NvbW1vbi90eXBlL3N1cGEtc3RvcmUudHlwZXNcIlxyXG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gXCJsb2Rhc2gtZXNcIlxyXG5cclxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IFN1cGFTdG9yZU9wdGlvbnMgPSB7XHJcbiAgdXNlck1ldGFkYXRhOiB7XHJcbiAgICBsb2FkOiBmYWxzZSxcclxuICAgIHRhYmxlOiAndXNlcnMnLFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHByb3ZpZGVTdXBhU3RvcmUgPSAoc3VwYWJhc2VVcmw6IHN0cmluZywgc3VwYWJhc2VLZXk6IHN0cmluZywgb3B0czogU3VwYVN0b3JlT3B0aW9ucyA9IHt9KTogRW52aXJvbm1lbnRQcm92aWRlcnMgPT4ge1xyXG5cclxuICBjb25zdCBvcHRpb25zID0gbWVyZ2UoZGVmYXVsdE9wdGlvbnMsIG9wdHMpXHJcblxyXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBTVVBBX1NUT1JFX09QVElPTlMsXHJcbiAgICAgIHVzZVZhbHVlOiB7IHN1cGFiYXNlVXJsLCBzdXBhYmFzZUtleSwgb3B0aW9ucyB9XHJcbiAgICB9LFxyXG4gICAgU3VwYVN0b3JlXHJcbiAgXSlcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { withDevtools } from '@angular-architects/ngrx-toolkit';
|
|
3
|
+
import { INITIAL_STATE } from './common/token/initial-state.token';
|
|
4
|
+
import { patchState, signalStore, signalStoreFeature, withHooks, withMethods, withState } from '@ngrx/signals';
|
|
5
|
+
import { SUPA_STORE_OPTIONS } from './common/token/supabase-credentials.token';
|
|
6
|
+
import { filter, firstValueFrom } from 'rxjs';
|
|
7
|
+
import { toObservable } from "@angular/core/rxjs-interop";
|
|
8
|
+
export const withSupaStore = () => signalStoreFeature(withDevtools('supaStore'), withState(() => inject(INITIAL_STATE)), withMethods((store, options = inject(SUPA_STORE_OPTIONS).options) => ({
|
|
9
|
+
initSession: async () => {
|
|
10
|
+
const { data: { session } } = await store.client().auth.getSession();
|
|
11
|
+
patchState(store, { auth: { ...store.auth(), session } });
|
|
12
|
+
},
|
|
13
|
+
initUser: async () => {
|
|
14
|
+
const { data: { user } } = await store.client().auth.getUser();
|
|
15
|
+
patchState(store, { auth: { ...store.auth(), user } });
|
|
16
|
+
},
|
|
17
|
+
setMetadata: async (id) => {
|
|
18
|
+
const { data: userMetadata } = await store.client().from(options?.userMetadata?.table).select('*').eq('id', id).single();
|
|
19
|
+
patchState(store, { auth: { ...store.auth(), userMetadata } });
|
|
20
|
+
}
|
|
21
|
+
})), withHooks({
|
|
22
|
+
async onInit(store, options = inject(SUPA_STORE_OPTIONS).options) {
|
|
23
|
+
store.initSession();
|
|
24
|
+
store.initUser();
|
|
25
|
+
store.client().auth.onAuthStateChange(state => patchState(store, { auth: { ...store.auth(), state: { prev: store.auth.state.curr(), curr: state } } }));
|
|
26
|
+
if (options?.userMetadata?.load) {
|
|
27
|
+
const session = await firstValueFrom(toObservable(store.auth.session).pipe(filter(res => res !== undefined)));
|
|
28
|
+
session?.user ? store.setMetadata(session?.user?.id) : patchState(store, { auth: { ...store.auth(), userMetadata: null } });
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
patchState(store, { auth: { ...store.auth(), userMetadata: null } });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}));
|
|
35
|
+
export const SupaStore = signalStore(withSupaStore());
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwYS1zdG9yZS5zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29iLXN1cGEtc3RvcmUvc3JjL2xpYi9zdXBhLXN0b3JlLnN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUVsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM5RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFekQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUVuRCxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQ3pCLFNBQVMsQ0FBaUIsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBRXRELFdBQVcsQ0FBQyxDQUFFLEtBQUssRUFBRSxPQUFPLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXJFLFdBQVcsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN0QixNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDbkUsVUFBVSxDQUFDLEtB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bmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB3aXRoRGV2dG9vbHMgfSBmcm9tICdAYW5ndWxhci1hcmNoaXRlY3RzL25ncngtdG9vbGtpdCdcclxuaW1wb3J0IHsgSU5JVElBTF9TVEFURSB9IGZyb20gJy4vY29tbW9uL3Rva2VuL2luaXRpYWwtc3RhdGUudG9rZW4nXHJcbmltcG9ydCB7IFN1cGFTdG9yZVN0YXRlIH0gZnJvbSAnLi9jb21tb24vdHlwZS9zdXBhLXN0b3JlLnR5cGVzJ1xyXG5pbXBvcnQgeyBwYXRjaFN0YXRlLCBzaWduYWxTdG9yZSwgc2lnbmFsU3RvcmVGZWF0dXJlLCB3aXRoSG9va3MsIHdpdGhNZXRob2RzLCB3aXRoU3RhdGUgfSBmcm9tICdAbmdyeC9zaWduYWxzJ1xyXG5pbXBvcnQgeyBTVVBBX1NUT1JFX09QVElPTlMgfSBmcm9tICcuL2NvbW1vbi90b2tlbi9zdXBhYmFzZS1jcmVkZW50aWFscy50b2tlbidcclxuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiXHJcblxyXG5leHBvcnQgY29uc3Qgd2l0aFN1cGFTdG9yZSA9ICgpID0+IHNpZ25hbFN0b3JlRmVhdHVyZShcclxuXHJcbiAgd2l0aERldnRvb2xzKCdzdXBhU3RvcmUnKSxcclxuICB3aXRoU3RhdGU8U3VwYVN0b3JlU3RhdGU+KCgpID0+IGluamVjdChJTklUSUFMX1NUQVRFKSksXHJcblxyXG4gIHdpdGhNZXRob2RzKCggc3RvcmUsIG9wdGlvbnMgPSBpbmplY3QoU1VQQV9TVE9SRV9PUFRJT05TKS5vcHRpb25zKSA9PiAoe1xyXG5cclxuICAgIGluaXRTZXNzaW9uOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH19ID0gYXdhaXQgc3RvcmUuY2xpZW50KCkuYXV0aC5nZXRTZXNzaW9uKClcclxuICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBhdXRoOiB7IC4uLnN0b3JlLmF1dGgoKSwgc2Vzc2lvbiB9fSlcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFVzZXI6IGFzeW5jICgpID0+IHtcclxuICAgICAgY29uc3QgeyBkYXRhOiB7IHVzZXIgfX0gPSBhd2FpdCBzdG9yZS5jbGllbnQoKS5hdXRoLmdldFVzZXIoKVxyXG4gICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IGF1dGg6IHsgLi4uc3RvcmUuYXV0aCgpLCB1c2VyIH19KVxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRNZXRhZGF0YTogYXN5bmMgKGlkOiBzdHJpbmcpID0+IHtcclxuICAgICAgY29uc3QgeyBkYXRhOiB1c2VyTWV0YWRhdGEgfSA9IGF3YWl0IHN0b3JlLmNsaWVudCgpLmZyb20ob3B0aW9ucz8udXNlck1ldGFkYXRhPy50YWJsZSBhcyBzdHJpbmcpLnNlbGVjdCgnKicpLmVxKCdpZCcsIGlkKS5zaW5nbGUoKVxyXG4gICAgICBwYXRjaFN0YXRlKHN0b3JlLCAgeyBhdXRoOiB7IC4uLnN0b3JlLmF1dGgoKSwgdXNlck1ldGFkYXRhIH19KVxyXG4gICAgfVxyXG5cclxuICB9KSksXHJcblxyXG4gIHdpdGhIb29rcyh7XHJcbiAgICBhc3luYyBvbkluaXQoc3RvcmUsIG9wdGlvbnMgPSBpbmplY3QoU1VQQV9TVE9SRV9PUFRJT05TKS5vcHRpb25zKSB7XHJcblxyXG4gICAgICBzdG9yZS5pbml0U2Vzc2lvbigpXHJcbiAgICAgIHN0b3JlLmluaXRVc2VyKClcclxuICAgICAgc3RvcmUuY2xpZW50KCkuYXV0aC5vbkF1dGhTdGF0ZUNoYW5nZShzdGF0ZSA9PiBwYXRjaFN0YXRlKHN0b3JlLCB7IGF1dGg6IHsgLi4uc3RvcmUuYXV0aCgpLCBzdGF0ZTogeyBwcmV2OiBzdG9yZS5hdXRoLnN0YXRlLmN1cnIoKSwgY3Vycjogc3RhdGUgfSB9fSkpXHJcblxyXG4gICAgICBpZiAob3B0aW9ucz8udXNlck1ldGFkYXRhPy5sb2FkKSB7XHJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRvT2JzZXJ2YWJsZShzdG9yZS5hdXRoLnNlc3Npb24pLnBpcGUoZmlsdGVyKHJlcyA9PiByZXMgIT09IHVuZGVmaW5lZCkpKVxyXG4gICAgICAgIHNlc3Npb24/LnVzZXIgPyBzdG9yZS5zZXRNZXRhZGF0YShzZXNzaW9uPy51c2VyPy5pZCkgOiBwYXRjaFN0YXRlKHN0b3JlLCAgeyBhdXRoOiB7IC4uLnN0b3JlLmF1dGgoKSwgdXNlck1ldGFkYXRhOiBudWxsfX0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgIHsgYXV0aDogeyAuLi5zdG9yZS5hdXRoKCksIHVzZXJNZXRhZGF0YTogbnVsbH19KVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4pXHJcblxyXG5leHBvcnQgY29uc3QgU3VwYVN0b3JlID0gc2lnbmFsU3RvcmUoXHJcbiAgd2l0aFN1cGFTdG9yZSgpXHJcbilcclxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0YnVpbGQtc3VwYS1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL29iLXN1cGEtc3RvcmUvc3JjL291dGJ1aWxkLXN1cGEtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of ob-supa-store
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/supa-store.store';
|
|
5
|
+
export * from './lib/supa-store.provider';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL29iLXN1cGEtc3RvcmUvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHdCQUF3QixDQUFBO0FBQ3RDLGNBQWMsMkJBQTJCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygb2Itc3VwYS1zdG9yZVxyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N1cGEtc3RvcmUuc3RvcmUnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N1cGEtc3RvcmUucHJvdmlkZXInXHJcbiJdfQ==
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { InjectionToken, inject, makeEnvironmentProviders } from '@angular/core';
|
|
2
|
+
import { withDevtools } from '@angular-architects/ngrx-toolkit';
|
|
3
|
+
import { createClient } from '@supabase/supabase-js';
|
|
4
|
+
import { signalStoreFeature, withState, withMethods, patchState, withHooks, signalStore } from '@ngrx/signals';
|
|
5
|
+
import { firstValueFrom, filter } from 'rxjs';
|
|
6
|
+
import { toObservable } from '@angular/core/rxjs-interop';
|
|
7
|
+
import { merge } from 'lodash-es';
|
|
8
|
+
|
|
9
|
+
const SUPA_STORE_OPTIONS = new InjectionToken('SUPA_STORE_OPTIONS');
|
|
10
|
+
|
|
11
|
+
const INITIAL_STATE = new InjectionToken('SupaStoreState', {
|
|
12
|
+
factory: () => {
|
|
13
|
+
const { supabaseUrl, supabaseKey } = inject(SUPA_STORE_OPTIONS);
|
|
14
|
+
return {
|
|
15
|
+
client: createClient(supabaseUrl, supabaseKey),
|
|
16
|
+
auth: {
|
|
17
|
+
session: undefined,
|
|
18
|
+
user: undefined,
|
|
19
|
+
userMetadata: undefined,
|
|
20
|
+
state: { prev: null, curr: null }
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const withSupaStore = () => signalStoreFeature(withDevtools('supaStore'), withState(() => inject(INITIAL_STATE)), withMethods((store, options = inject(SUPA_STORE_OPTIONS).options) => ({
|
|
27
|
+
initSession: async () => {
|
|
28
|
+
const { data: { session } } = await store.client().auth.getSession();
|
|
29
|
+
patchState(store, { auth: { ...store.auth(), session } });
|
|
30
|
+
},
|
|
31
|
+
initUser: async () => {
|
|
32
|
+
const { data: { user } } = await store.client().auth.getUser();
|
|
33
|
+
patchState(store, { auth: { ...store.auth(), user } });
|
|
34
|
+
},
|
|
35
|
+
setMetadata: async (id) => {
|
|
36
|
+
const { data: userMetadata } = await store.client().from(options?.userMetadata?.table).select('*').eq('id', id).single();
|
|
37
|
+
patchState(store, { auth: { ...store.auth(), userMetadata } });
|
|
38
|
+
}
|
|
39
|
+
})), withHooks({
|
|
40
|
+
async onInit(store, options = inject(SUPA_STORE_OPTIONS).options) {
|
|
41
|
+
store.initSession();
|
|
42
|
+
store.initUser();
|
|
43
|
+
store.client().auth.onAuthStateChange(state => patchState(store, { auth: { ...store.auth(), state: { prev: store.auth.state.curr(), curr: state } } }));
|
|
44
|
+
if (options?.userMetadata?.load) {
|
|
45
|
+
const session = await firstValueFrom(toObservable(store.auth.session).pipe(filter(res => res !== undefined)));
|
|
46
|
+
session?.user ? store.setMetadata(session?.user?.id) : patchState(store, { auth: { ...store.auth(), userMetadata: null } });
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
patchState(store, { auth: { ...store.auth(), userMetadata: null } });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}));
|
|
53
|
+
const SupaStore = signalStore(withSupaStore());
|
|
54
|
+
|
|
55
|
+
const defaultOptions = {
|
|
56
|
+
userMetadata: {
|
|
57
|
+
load: false,
|
|
58
|
+
table: 'users',
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const provideSupaStore = (supabaseUrl, supabaseKey, opts = {}) => {
|
|
62
|
+
const options = merge(defaultOptions, opts);
|
|
63
|
+
return makeEnvironmentProviders([
|
|
64
|
+
{
|
|
65
|
+
provide: SUPA_STORE_OPTIONS,
|
|
66
|
+
useValue: { supabaseUrl, supabaseKey, options }
|
|
67
|
+
},
|
|
68
|
+
SupaStore
|
|
69
|
+
]);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/*
|
|
73
|
+
* Public API Surface of ob-supa-store
|
|
74
|
+
*/
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Generated bundle index. Do not edit.
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
export { SupaStore, provideSupaStore, withSupaStore };
|
|
81
|
+
//# sourceMappingURL=outbuild-supa-store.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbuild-supa-store.mjs","sources":["../../../projects/ob-supa-store/src/lib/common/token/supabase-credentials.token.ts","../../../projects/ob-supa-store/src/lib/common/token/initial-state.token.ts","../../../projects/ob-supa-store/src/lib/supa-store.store.ts","../../../projects/ob-supa-store/src/lib/supa-store.provider.ts","../../../projects/ob-supa-store/src/public-api.ts","../../../projects/ob-supa-store/src/outbuild-supa-store.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\"\r\nimport { SupaStoreInput } from \"../type/supa-store.types\"\r\n\r\nexport const SUPA_STORE_OPTIONS = new InjectionToken<SupaStoreInput>('SUPA_STORE_OPTIONS')\r\n","import { inject, InjectionToken } from \"@angular/core\"\r\nimport { SUPA_STORE_OPTIONS } from \"./supabase-credentials.token\"\r\nimport { createClient } from \"@supabase/supabase-js\"\r\nimport { SupaStoreState } from \"../type/supa-store.types\"\r\n\r\nexport const INITIAL_STATE = new InjectionToken<SupaStoreState>('SupaStoreState', {\r\n factory: () => {\r\n const { supabaseUrl, supabaseKey } = inject(SUPA_STORE_OPTIONS)\r\n return {\r\n client: createClient(supabaseUrl, supabaseKey),\r\n auth: {\r\n session: undefined,\r\n user: undefined,\r\n userMetadata: undefined,\r\n state: { prev: null, curr: null }\r\n }\r\n }\r\n },\r\n})\r\n","import { inject } from '@angular/core';\r\nimport { withDevtools } from '@angular-architects/ngrx-toolkit'\r\nimport { INITIAL_STATE } from './common/token/initial-state.token'\r\nimport { SupaStoreState } from './common/type/supa-store.types'\r\nimport { patchState, signalStore, signalStoreFeature, withHooks, withMethods, withState } from '@ngrx/signals'\r\nimport { SUPA_STORE_OPTIONS } from './common/token/supabase-credentials.token'\r\nimport { filter, firstValueFrom } from 'rxjs'\r\nimport { toObservable } from \"@angular/core/rxjs-interop\"\r\n\r\nexport const withSupaStore = () => signalStoreFeature(\r\n\r\n withDevtools('supaStore'),\r\n withState<SupaStoreState>(() => inject(INITIAL_STATE)),\r\n\r\n withMethods(( store, options = inject(SUPA_STORE_OPTIONS).options) => ({\r\n\r\n initSession: async () => {\r\n const { data: { session }} = await store.client().auth.getSession()\r\n patchState(store, { auth: { ...store.auth(), session }})\r\n },\r\n\r\n initUser: async () => {\r\n const { data: { user }} = await store.client().auth.getUser()\r\n patchState(store, { auth: { ...store.auth(), user }})\r\n },\r\n\r\n setMetadata: async (id: string) => {\r\n const { data: userMetadata } = await store.client().from(options?.userMetadata?.table as string).select('*').eq('id', id).single()\r\n patchState(store, { auth: { ...store.auth(), userMetadata }})\r\n }\r\n\r\n })),\r\n\r\n withHooks({\r\n async onInit(store, options = inject(SUPA_STORE_OPTIONS).options) {\r\n\r\n store.initSession()\r\n store.initUser()\r\n store.client().auth.onAuthStateChange(state => patchState(store, { auth: { ...store.auth(), state: { prev: store.auth.state.curr(), curr: state } }}))\r\n\r\n if (options?.userMetadata?.load) {\r\n const session = await firstValueFrom(toObservable(store.auth.session).pipe(filter(res => res !== undefined)))\r\n session?.user ? store.setMetadata(session?.user?.id) : patchState(store, { auth: { ...store.auth(), userMetadata: null}})\r\n } else {\r\n patchState(store, { auth: { ...store.auth(), userMetadata: null}})\r\n }\r\n\r\n }\r\n })\r\n\r\n)\r\n\r\nexport const SupaStore = signalStore(\r\n withSupaStore()\r\n)\r\n","import { EnvironmentProviders, makeEnvironmentProviders } from \"@angular/core\"\r\nimport { SupaStore } from \"./supa-store.store\"\r\nimport { SUPA_STORE_OPTIONS } from \"./common/token/supabase-credentials.token\"\r\nimport { SupaStoreOptions } from \"./common/type/supa-store.types\"\r\nimport { merge } from \"lodash-es\"\r\n\r\nconst defaultOptions: SupaStoreOptions = {\r\n userMetadata: {\r\n load: false,\r\n table: 'users',\r\n }\r\n}\r\n\r\nexport const provideSupaStore = (supabaseUrl: string, supabaseKey: string, opts: SupaStoreOptions = {}): EnvironmentProviders => {\r\n\r\n const options = merge(defaultOptions, opts)\r\n\r\n return makeEnvironmentProviders([\r\n {\r\n provide: SUPA_STORE_OPTIONS,\r\n useValue: { supabaseUrl, supabaseKey, options }\r\n },\r\n SupaStore\r\n ])\r\n}\r\n","/*\r\n * Public API Surface of ob-supa-store\r\n */\r\n\r\nexport * from './lib/supa-store.store'\r\nexport * from './lib/supa-store.provider'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AuthChangeEvent, Session, SupabaseClient, User } from "@supabase/supabase-js";
|
|
2
|
+
export type SupaStoreState = {
|
|
3
|
+
client: SupabaseClient;
|
|
4
|
+
auth: {
|
|
5
|
+
session: Session | undefined | null;
|
|
6
|
+
user: User | undefined | null;
|
|
7
|
+
state: {
|
|
8
|
+
prev: AuthChangeEvent | null;
|
|
9
|
+
curr: AuthChangeEvent | null;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AuthChangeEvent, Session, SupabaseClient, User } from "@supabase/supabase-js";
|
|
2
|
+
export type SupaStoreState = {
|
|
3
|
+
client: SupabaseClient;
|
|
4
|
+
auth: {
|
|
5
|
+
session: Session | undefined | null;
|
|
6
|
+
user: User | undefined | null;
|
|
7
|
+
userMetadata: unknown | undefined | null;
|
|
8
|
+
state: {
|
|
9
|
+
prev: AuthChangeEvent | null;
|
|
10
|
+
curr: AuthChangeEvent | null;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export type SupaStoreInput = {
|
|
15
|
+
supabaseUrl: string;
|
|
16
|
+
supabaseKey: string;
|
|
17
|
+
options: SupaStoreOptions;
|
|
18
|
+
};
|
|
19
|
+
export type SupaStoreOptions = {
|
|
20
|
+
userMetadata?: {
|
|
21
|
+
load?: boolean;
|
|
22
|
+
table?: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export declare const withSupaStore: () => import("@ngrx/signals").SignalStoreFeature<import("@ngrx/signals").EmptyFeatureResult, {
|
|
2
|
+
state: {
|
|
3
|
+
client: import("@supabase/supabase-js").SupabaseClient;
|
|
4
|
+
auth: {
|
|
5
|
+
session: import("@supabase/auth-js").Session | undefined | null;
|
|
6
|
+
user: import("@supabase/auth-js").User | undefined | null;
|
|
7
|
+
userMetadata: unknown | undefined | null;
|
|
8
|
+
state: {
|
|
9
|
+
prev: import("@supabase/auth-js").AuthChangeEvent | null;
|
|
10
|
+
curr: import("@supabase/auth-js").AuthChangeEvent | null;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
computed: {};
|
|
15
|
+
methods: {
|
|
16
|
+
initSession: () => Promise<void>;
|
|
17
|
+
initUser: () => Promise<void>;
|
|
18
|
+
setMetadata: (id: string) => Promise<void>;
|
|
19
|
+
};
|
|
20
|
+
}>;
|
|
21
|
+
export declare const SupaStore: import("@angular/core").Type<{
|
|
22
|
+
client: import("@ngrx/signals").DeepSignal<import("@supabase/supabase-js").SupabaseClient<any, "public", any>>;
|
|
23
|
+
auth: import("@ngrx/signals").DeepSignal<{
|
|
24
|
+
session: import("@supabase/auth-js").Session | undefined | null;
|
|
25
|
+
user: import("@supabase/auth-js").User | undefined | null;
|
|
26
|
+
userMetadata: unknown | undefined | null;
|
|
27
|
+
state: {
|
|
28
|
+
prev: import("@supabase/auth-js").AuthChangeEvent | null;
|
|
29
|
+
curr: import("@supabase/auth-js").AuthChangeEvent | null;
|
|
30
|
+
};
|
|
31
|
+
}>;
|
|
32
|
+
initSession: () => Promise<void>;
|
|
33
|
+
initUser: () => Promise<void>;
|
|
34
|
+
setMetadata: (id: string) => Promise<void>;
|
|
35
|
+
} & import("@ngrx/signals").StateSource<{
|
|
36
|
+
client: import("@supabase/supabase-js").SupabaseClient;
|
|
37
|
+
auth: {
|
|
38
|
+
session: import("@supabase/auth-js").Session | undefined | null;
|
|
39
|
+
user: import("@supabase/auth-js").User | undefined | null;
|
|
40
|
+
userMetadata: unknown | undefined | null;
|
|
41
|
+
state: {
|
|
42
|
+
prev: import("@supabase/auth-js").AuthChangeEvent | null;
|
|
43
|
+
curr: import("@supabase/auth-js").AuthChangeEvent | null;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
}>>;
|
package/package.json
CHANGED
|
@@ -1,19 +1,32 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@outbuild/supa-store",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"peerDependencies": {
|
|
5
|
-
"@angular/common": "^18.2.0",
|
|
6
|
-
"@angular/core": "^18.2.0",
|
|
7
|
-
"@ngrx/signals": "^18.0.2",
|
|
8
|
-
"@supabase/supabase-js": "^2.45.3",
|
|
9
|
-
"@angular-architects/ngrx-toolkit": "18.0.3",
|
|
10
|
-
"lodash-es": "^4.17.21"
|
|
11
|
-
},
|
|
12
|
-
"dependencies": {
|
|
13
|
-
"tslib": "^2.3.0"
|
|
14
|
-
},
|
|
15
|
-
"resolutions": {
|
|
16
|
-
"@supabase/auth-js": "2.61.0"
|
|
17
|
-
},
|
|
18
|
-
"sideEffects": false
|
|
19
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@outbuild/supa-store",
|
|
3
|
+
"version": "0.0.12",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^18.2.0",
|
|
6
|
+
"@angular/core": "^18.2.0",
|
|
7
|
+
"@ngrx/signals": "^18.0.2",
|
|
8
|
+
"@supabase/supabase-js": "^2.45.3",
|
|
9
|
+
"@angular-architects/ngrx-toolkit": "18.0.3",
|
|
10
|
+
"lodash-es": "^4.17.21"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"tslib": "^2.3.0"
|
|
14
|
+
},
|
|
15
|
+
"resolutions": {
|
|
16
|
+
"@supabase/auth-js": "2.61.0"
|
|
17
|
+
},
|
|
18
|
+
"sideEffects": false,
|
|
19
|
+
"module": "fesm2022/outbuild-supa-store.mjs",
|
|
20
|
+
"typings": "index.d.ts",
|
|
21
|
+
"exports": {
|
|
22
|
+
"./package.json": {
|
|
23
|
+
"default": "./package.json"
|
|
24
|
+
},
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./index.d.ts",
|
|
27
|
+
"esm2022": "./esm2022/outbuild-supa-store.mjs",
|
|
28
|
+
"esm": "./esm2022/outbuild-supa-store.mjs",
|
|
29
|
+
"default": "./fesm2022/outbuild-supa-store.mjs"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
package/public-api.d.ts
ADDED
package/ng-package.json
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { inject, InjectionToken } from "@angular/core"
|
|
2
|
-
import { SUPA_STORE_OPTIONS } from "./supabase-credentials.token"
|
|
3
|
-
import { createClient } from "@supabase/supabase-js"
|
|
4
|
-
import { SupaStoreState } from "../type/supa-store.types"
|
|
5
|
-
|
|
6
|
-
export const INITIAL_STATE = new InjectionToken<SupaStoreState>('SupaStoreState', {
|
|
7
|
-
factory: () => {
|
|
8
|
-
const { supabaseUrl, supabaseKey } = inject(SUPA_STORE_OPTIONS)
|
|
9
|
-
return {
|
|
10
|
-
client: createClient(supabaseUrl, supabaseKey),
|
|
11
|
-
auth: {
|
|
12
|
-
session: undefined,
|
|
13
|
-
user: undefined,
|
|
14
|
-
userMetadata: undefined,
|
|
15
|
-
state: { prev: null, curr: null }
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
})
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { AuthChangeEvent, Session, SupabaseClient, User } from "@supabase/supabase-js"
|
|
2
|
-
|
|
3
|
-
export type SupaStoreState = {
|
|
4
|
-
client: SupabaseClient
|
|
5
|
-
auth: {
|
|
6
|
-
session: Session | undefined | null
|
|
7
|
-
user: User | undefined | null
|
|
8
|
-
userMetadata: unknown | undefined | null
|
|
9
|
-
state: {
|
|
10
|
-
prev: AuthChangeEvent | null,
|
|
11
|
-
curr: AuthChangeEvent | null,
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export type SupaStoreInput = {
|
|
17
|
-
supabaseUrl: string,
|
|
18
|
-
supabaseKey: string,
|
|
19
|
-
options: SupaStoreOptions
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export type SupaStoreOptions = {
|
|
23
|
-
userMetadata?: {
|
|
24
|
-
load?: boolean,
|
|
25
|
-
table?: string,
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { EnvironmentProviders, makeEnvironmentProviders } from "@angular/core"
|
|
2
|
-
import { SupaStore } from "./supa-store.store"
|
|
3
|
-
import { SUPA_STORE_OPTIONS } from "./common/token/supabase-credentials.token"
|
|
4
|
-
import { SupaStoreOptions } from "./common/type/supa-store.types"
|
|
5
|
-
import { merge } from "lodash-es"
|
|
6
|
-
|
|
7
|
-
const defaultOptions: SupaStoreOptions = {
|
|
8
|
-
userMetadata: {
|
|
9
|
-
load: false,
|
|
10
|
-
table: 'users',
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export const provideSupaStore = (supabaseUrl: string, supabaseKey: string, opts: SupaStoreOptions = {}): EnvironmentProviders => {
|
|
15
|
-
|
|
16
|
-
const options = merge(defaultOptions, opts)
|
|
17
|
-
|
|
18
|
-
return makeEnvironmentProviders([
|
|
19
|
-
{
|
|
20
|
-
provide: SUPA_STORE_OPTIONS,
|
|
21
|
-
useValue: { supabaseUrl, supabaseKey, options }
|
|
22
|
-
},
|
|
23
|
-
SupaStore
|
|
24
|
-
])
|
|
25
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { inject } from '@angular/core';
|
|
2
|
-
import { withDevtools } from '@angular-architects/ngrx-toolkit'
|
|
3
|
-
import { INITIAL_STATE } from './common/token/initial-state.token'
|
|
4
|
-
import { SupaStoreState } from './common/type/supa-store.types'
|
|
5
|
-
import { patchState, signalStore, signalStoreFeature, withHooks, withMethods, withState } from '@ngrx/signals'
|
|
6
|
-
import { SUPA_STORE_OPTIONS } from './common/token/supabase-credentials.token'
|
|
7
|
-
import { filter, firstValueFrom } from 'rxjs'
|
|
8
|
-
import { toObservable } from "@angular/core/rxjs-interop"
|
|
9
|
-
|
|
10
|
-
export const withSupaStore = () => signalStoreFeature(
|
|
11
|
-
|
|
12
|
-
withDevtools('supaStore'),
|
|
13
|
-
withState<SupaStoreState>(() => inject(INITIAL_STATE)),
|
|
14
|
-
|
|
15
|
-
withMethods(( store, options = inject(SUPA_STORE_OPTIONS).options) => ({
|
|
16
|
-
|
|
17
|
-
initSession: async () => {
|
|
18
|
-
const { data: { session }} = await store.client().auth.getSession()
|
|
19
|
-
patchState(store, { auth: { ...store.auth(), session }})
|
|
20
|
-
},
|
|
21
|
-
|
|
22
|
-
initUser: async () => {
|
|
23
|
-
const { data: { user }} = await store.client().auth.getUser()
|
|
24
|
-
patchState(store, { auth: { ...store.auth(), user }})
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
setMetadata: async (id: string) => {
|
|
28
|
-
const { data: userMetadata } = await store.client().from(options?.userMetadata?.table as string).select('*').eq('id', id).single()
|
|
29
|
-
patchState(store, { auth: { ...store.auth(), userMetadata }})
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
})),
|
|
33
|
-
|
|
34
|
-
withHooks({
|
|
35
|
-
async onInit(store, options = inject(SUPA_STORE_OPTIONS).options) {
|
|
36
|
-
|
|
37
|
-
store.initSession()
|
|
38
|
-
store.initUser()
|
|
39
|
-
store.client().auth.onAuthStateChange(state => patchState(store, { auth: { ...store.auth(), state: { prev: store.auth.state.curr(), curr: state } }}))
|
|
40
|
-
|
|
41
|
-
if (options?.userMetadata?.load) {
|
|
42
|
-
const session = await firstValueFrom(toObservable(store.auth.session).pipe(filter(res => res !== undefined)))
|
|
43
|
-
session?.user ? store.setMetadata(session?.user?.id) : patchState(store, { auth: { ...store.auth(), userMetadata: null}})
|
|
44
|
-
} else {
|
|
45
|
-
patchState(store, { auth: { ...store.auth(), userMetadata: null}})
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
export const SupaStore = signalStore(
|
|
54
|
-
withSupaStore()
|
|
55
|
-
)
|
package/src/public-api.ts
DELETED
package/tsconfig.lib.json
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
|
|
2
|
-
/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
|
|
3
|
-
{
|
|
4
|
-
"extends": "../../tsconfig.json",
|
|
5
|
-
"compilerOptions": {
|
|
6
|
-
"outDir": "../../out-tsc/lib",
|
|
7
|
-
"declaration": true,
|
|
8
|
-
"declarationMap": true,
|
|
9
|
-
"inlineSources": true,
|
|
10
|
-
"types": []
|
|
11
|
-
},
|
|
12
|
-
"exclude": [
|
|
13
|
-
"**/*.spec.ts"
|
|
14
|
-
]
|
|
15
|
-
}
|
package/tsconfig.lib.prod.json
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
|
|
2
|
-
/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
|
|
3
|
-
{
|
|
4
|
-
"extends": "./tsconfig.lib.json",
|
|
5
|
-
"compilerOptions": {
|
|
6
|
-
"declarationMap": false
|
|
7
|
-
},
|
|
8
|
-
"angularCompilerOptions": {
|
|
9
|
-
"compilationMode": "partial"
|
|
10
|
-
}
|
|
11
|
-
}
|
package/tsconfig.spec.json
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
|
|
2
|
-
/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
|
|
3
|
-
{
|
|
4
|
-
"extends": "../../tsconfig.json",
|
|
5
|
-
"compilerOptions": {
|
|
6
|
-
"outDir": "../../out-tsc/spec",
|
|
7
|
-
"types": [
|
|
8
|
-
"jasmine"
|
|
9
|
-
]
|
|
10
|
-
},
|
|
11
|
-
"include": [
|
|
12
|
-
"**/*.spec.ts",
|
|
13
|
-
"**/*.d.ts"
|
|
14
|
-
]
|
|
15
|
-
}
|