@outbuild/supa-store 0.0.10 → 0.0.11

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,7 @@
1
+ {
2
+ "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3
+ "dest": "../../dist/ob-supa-store",
4
+ "lib": {
5
+ "entryFile": "src/public-api.ts"
6
+ }
7
+ }
package/package.json CHANGED
@@ -1,31 +1,19 @@
1
- {
2
- "name": "@outbuild/supa-store",
3
- "version": "0.0.10",
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
- },
11
- "dependencies": {
12
- "tslib": "^2.3.0"
13
- },
14
- "resolutions": {
15
- "@supabase/auth-js": "2.61.0"
16
- },
17
- "sideEffects": false,
18
- "module": "fesm2022/outbuild-supa-store.mjs",
19
- "typings": "index.d.ts",
20
- "exports": {
21
- "./package.json": {
22
- "default": "./package.json"
23
- },
24
- ".": {
25
- "types": "./index.d.ts",
26
- "esm2022": "./esm2022/outbuild-supa-store.mjs",
27
- "esm": "./esm2022/outbuild-supa-store.mjs",
28
- "default": "./fesm2022/outbuild-supa-store.mjs"
29
- }
30
- }
31
- }
1
+ {
2
+ "name": "@outbuild/supa-store",
3
+ "version": "0.0.11",
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
+ }
@@ -0,0 +1,19 @@
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
+ })
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from "@angular/core"
2
+ import { SupaStoreInput } from "../type/supa-store.types"
3
+
4
+ export const SUPA_STORE_OPTIONS = new InjectionToken<SupaStoreInput>('SUPA_STORE_OPTIONS')
@@ -0,0 +1,27 @@
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
+ }
@@ -0,0 +1,25 @@
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
+ }
@@ -0,0 +1,55 @@
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
+ )
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Public API Surface of ob-supa-store
3
+ */
4
+
5
+ export * from './lib/supa-store.store'
6
+ export * from './lib/supa-store.provider'
@@ -0,0 +1,15 @@
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
+ }
@@ -0,0 +1,11 @@
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
+ }
@@ -0,0 +1,15 @@
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
+ }
@@ -1,18 +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
- 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==
@@ -1,3 +0,0 @@
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=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwYS1zdG9yZS1zdGF0ZS50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2Itc3VwYS1zdG9yZS9zcmMvbGliL2NvbW1vbi90eXBlL3N1cGEtc3RvcmUtc3RhdGUudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aENoYW5nZUV2ZW50LCBTZXNzaW9uLCBTdXBhYmFzZUNsaWVudCwgVXNlciB9IGZyb20gXCJAc3VwYWJhc2Uvc3VwYWJhc2UtanNcIlxyXG5cclxuZXhwb3J0IHR5cGUgU3VwYVN0b3JlU3RhdGUgPSB7XHJcbiAgY2xpZW50OiBTdXBhYmFzZUNsaWVudFxyXG4gIGF1dGg6IHtcclxuICAgIHNlc3Npb246IFNlc3Npb24gfCB1bmRlZmluZWQgfCBudWxsXHJcbiAgICB1c2VyOiBVc2VyIHwgdW5kZWZpbmVkIHwgbnVsbFxyXG4gICAgc3RhdGU6IHtcclxuICAgICAgcHJldjogQXV0aENoYW5nZUV2ZW50IHwgbnVsbCxcclxuICAgICAgY3VycjogQXV0aENoYW5nZUV2ZW50IHwgbnVsbCxcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwYS1zdG9yZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29iLXN1cGEtc3RvcmUvc3JjL2xpYi9jb21tb24vdHlwZS9zdXBhLXN0b3JlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoQ2hhbmdlRXZlbnQsIFNlc3Npb24sIFN1cGFiYXNlQ2xpZW50LCBVc2VyIH0gZnJvbSBcIkBzdXBhYmFzZS9zdXBhYmFzZS1qc1wiXHJcblxyXG5leHBvcnQgdHlwZSBTdXBhU3RvcmVTdGF0ZSA9IHtcclxuICBjbGllbnQ6IFN1cGFiYXNlQ2xpZW50XHJcbiAgYXV0aDoge1xyXG4gICAgc2Vzc2lvbjogU2Vzc2lvbiB8IHVuZGVmaW5lZCB8IG51bGxcclxuICAgIHVzZXI6IFVzZXIgfCB1bmRlZmluZWQgfCBudWxsXHJcbiAgICB1c2VyTWV0YWRhdGE6IHVua25vd24gfCB1bmRlZmluZWQgfCBudWxsXHJcbiAgICBzdGF0ZToge1xyXG4gICAgICBwcmV2OiBBdXRoQ2hhbmdlRXZlbnQgfCBudWxsLFxyXG4gICAgICBjdXJyOiBBdXRoQ2hhbmdlRXZlbnQgfCBudWxsLFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU3VwYVN0b3JlSW5wdXQgPSB7XHJcbiAgc3VwYWJhc2VVcmw6IHN0cmluZyxcclxuICBzdXBhYmFzZUtleTogc3RyaW5nLFxyXG4gIG9wdGlvbnM6IFN1cGFTdG9yZU9wdGlvbnNcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU3VwYVN0b3JlT3B0aW9ucyA9IHtcclxuICB1c2VyTWV0YWRhdGE6IHtcclxuICAgIGxvYWQ/OiBib29sZWFuLFxyXG4gICAgdGFibGU/OiBzdHJpbmcsXHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,17 +0,0 @@
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
- const defaultOptions = {
5
- userMetadata: {
6
- load: false,
7
- table: 'users',
8
- }
9
- };
10
- export const provideSupaStore = (supabaseUrl, supabaseKey, options = defaultOptions) => makeEnvironmentProviders([
11
- {
12
- provide: SUPA_STORE_OPTIONS,
13
- useValue: { supabaseUrl, supabaseKey, options }
14
- },
15
- SupaStore
16
- ]);
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwYS1zdG9yZS5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29iLXN1cGEtc3RvcmUvc3JjL2xpYi9zdXBhLXN0b3JlLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBd0Isd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDOUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFBO0FBRzlFLE1BQU0sY0FBYyxHQUFxQjtJQUN2QyxZQUFZLEVBQUU7UUFDWixJQUFJLEVBQUUsS0FBSztRQUNYLEtBQUssRUFBRSxPQUFPO0tBQ2Y7Q0FDRixDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxXQUFtQixFQUFFLFdBQW1CLEVBQUUsVUFBNEIsY0FBYyxFQUF3QixFQUFFLENBQUMsd0JBQXdCLENBQUM7SUFDdks7UUFDRSxPQUFPLEVBQUUsa0JBQWtCO1FBQzNCLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFO0tBQ2hEO0lBQ0QsU0FBUztDQUNWLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50UHJvdmlkZXJzLCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXHJcbmltcG9ydCB7IFN1cGFTdG9yZSB9IGZyb20gXCIuL3N1cGEtc3RvcmUuc3RvcmVcIlxyXG5pbXBvcnQgeyBTVVBBX1NUT1JFX09QVElPTlMgfSBmcm9tIFwiLi9jb21tb24vdG9rZW4vc3VwYWJhc2UtY3JlZGVudGlhbHMudG9rZW5cIlxyXG5pbXBvcnQgeyBTdXBhU3RvcmVPcHRpb25zIH0gZnJvbSBcIi4vY29tbW9uL3R5cGUvc3VwYS1zdG9yZS50eXBlc1wiXHJcblxyXG5jb25zdCBkZWZhdWx0T3B0aW9uczogU3VwYVN0b3JlT3B0aW9ucyA9IHtcclxuICB1c2VyTWV0YWRhdGE6IHtcclxuICAgIGxvYWQ6IGZhbHNlLFxyXG4gICAgdGFibGU6ICd1c2VycycsXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcHJvdmlkZVN1cGFTdG9yZSA9IChzdXBhYmFzZVVybDogc3RyaW5nLCBzdXBhYmFzZUtleTogc3RyaW5nLCBvcHRpb25zOiBTdXBhU3RvcmVPcHRpb25zID0gZGVmYXVsdE9wdGlvbnMpOiBFbnZpcm9ubWVudFByb3ZpZGVycyA9PiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xyXG4gIHtcclxuICAgIHByb3ZpZGU6IFNVUEFfU1RPUkVfT1BUSU9OUyxcclxuICAgIHVzZVZhbHVlOiB7IHN1cGFiYXNlVXJsLCBzdXBhYmFzZUtleSwgb3B0aW9ucyB9XHJcbiAgfSxcclxuICBTdXBhU3RvcmVcclxuXSlcclxuXHJcbiJdfQ==
@@ -1,36 +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 { 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
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0YnVpbGQtc3VwYS1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL29iLXN1cGEtc3RvcmUvc3JjL291dGJ1aWxkLXN1cGEtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -1,6 +0,0 @@
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==
@@ -1,77 +0,0 @@
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
-
8
- const SUPA_STORE_OPTIONS = new InjectionToken('SUPA_STORE_OPTIONS');
9
-
10
- const INITIAL_STATE = new InjectionToken('SupaStoreState', {
11
- factory: () => {
12
- const { supabaseUrl, supabaseKey } = inject(SUPA_STORE_OPTIONS);
13
- return {
14
- client: createClient(supabaseUrl, supabaseKey),
15
- auth: {
16
- session: undefined,
17
- user: undefined,
18
- userMetadata: undefined,
19
- state: { prev: null, curr: null }
20
- }
21
- };
22
- },
23
- });
24
-
25
- const withSupaStore = () => signalStoreFeature(withDevtools('supaStore'), withState(() => inject(INITIAL_STATE)), withMethods((store, options = inject(SUPA_STORE_OPTIONS).options) => ({
26
- initSession: async () => {
27
- const { data: { session } } = await store.client().auth.getSession();
28
- patchState(store, { auth: { ...store.auth(), session } });
29
- },
30
- initUser: async () => {
31
- const { data: { user } } = await store.client().auth.getUser();
32
- patchState(store, { auth: { ...store.auth(), user } });
33
- },
34
- setMetadata: async (id) => {
35
- const { data: userMetadata } = await store.client().from(options?.userMetadata?.table).select('*').eq('id', id).single();
36
- patchState(store, { auth: { ...store.auth(), userMetadata } });
37
- }
38
- })), withHooks({
39
- async onInit(store, options = inject(SUPA_STORE_OPTIONS).options) {
40
- store.initSession();
41
- store.initUser();
42
- store.client().auth.onAuthStateChange(state => patchState(store, { auth: { ...store.auth(), state: { prev: store.auth.state.curr(), curr: state } } }));
43
- if (options?.userMetadata?.load) {
44
- const session = await firstValueFrom(toObservable(store.auth.session).pipe(filter(res => res !== undefined)));
45
- session?.user ? store.setMetadata(session?.user?.id) : patchState(store, { auth: { ...store.auth(), userMetadata: null } });
46
- }
47
- else {
48
- patchState(store, { auth: { ...store.auth(), userMetadata: null } });
49
- }
50
- }
51
- }));
52
- const SupaStore = signalStore(withSupaStore());
53
-
54
- const defaultOptions = {
55
- userMetadata: {
56
- load: false,
57
- table: 'users',
58
- }
59
- };
60
- const provideSupaStore = (supabaseUrl, supabaseKey, options = defaultOptions) => makeEnvironmentProviders([
61
- {
62
- provide: SUPA_STORE_OPTIONS,
63
- useValue: { supabaseUrl, supabaseKey, options }
64
- },
65
- SupaStore
66
- ]);
67
-
68
- /*
69
- * Public API Surface of ob-supa-store
70
- */
71
-
72
- /**
73
- * Generated bundle index. Do not edit.
74
- */
75
-
76
- export { SupaStore, provideSupaStore, withSupaStore };
77
- //# sourceMappingURL=outbuild-supa-store.mjs.map
@@ -1 +0,0 @@
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\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, options: SupaStoreOptions = defaultOptions): EnvironmentProviders => 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 DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- /// <amd-module name="@outbuild/supa-store" />
5
- export * from './public-api';
@@ -1,3 +0,0 @@
1
- import { InjectionToken } from "@angular/core";
2
- import { SupaStoreState } from "../type/supa-store.types";
3
- export declare const INITIAL_STATE: InjectionToken<SupaStoreState>;
@@ -1,3 +0,0 @@
1
- import { InjectionToken } from "@angular/core";
2
- import { SupaStoreInput } from "../type/supa-store.types";
3
- export declare const SUPA_STORE_OPTIONS: InjectionToken<SupaStoreInput>;
@@ -1,12 +0,0 @@
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
- };
@@ -1,24 +0,0 @@
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
- };
@@ -1,3 +0,0 @@
1
- import { EnvironmentProviders } from "@angular/core";
2
- import { SupaStoreOptions } from "./common/type/supa-store.types";
3
- export declare const provideSupaStore: (supabaseUrl: string, supabaseKey: string, options?: SupaStoreOptions) => EnvironmentProviders;
@@ -1,46 +0,0 @@
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/public-api.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from './lib/supa-store.store';
2
- export * from './lib/supa-store.provider';