@dill-pixel/storage-adapter-supabase
Version:
Supabase Storage Adapter
1 lines • 7.45 kB
Source Map (JSON)
{"version":3,"file":"dill-pixel-storage-adapter-supabase.mjs","sources":["../src/version.ts","../src/SupabaseAdapter.ts"],"sourcesContent":["export const version = '5.0.3';\nexport const supabaseVersion = '2.50.0';\nexport const supabasePostgresVersion = '1.19.4';","import type { SupabaseClient } from '@supabase/supabase-js';\nimport { createClient } from '@supabase/supabase-js';\nimport { GenericSchema } from '@supabase/supabase-js/dist/module/lib/types';\nimport { IApplication, IStorageAdapter, Logger, StorageAdapter } from 'dill-pixel';\nimport { supabasePostgresVersion, supabaseVersion, version } from './version';\n\ntype SaveMethod = 'insert' | 'update' | 'upsert';\n\ntype DeleteData = {\n [key: string]: any;\n};\n\ninterface ISupabaseAdapterOptions {\n supabaseUrl?: string;\n anonKey?: string;\n debug?: boolean;\n}\n\nexport interface ISupabaseAdapter<Database extends GenericSchema = any> extends IStorageAdapter {\n client: SupabaseClient<Database>;\n\n initialize(app: IApplication, options?: Partial<ISupabaseAdapterOptions>): void;\n\n save(tableId: string, data: any, method?: SaveMethod): Promise<any>;\n\n load<T = any>(tableId: string, selectors?: string[]): Promise<T>;\n\n delete(tableId: string, data: DeleteData): Promise<any>;\n}\n\n/**\n * A class representing a storage adapter that uses Supabase.\n */\nexport class SupabaseAdapter<Database extends GenericSchema = any>\n extends StorageAdapter\n implements ISupabaseAdapter<Database>\n{\n private _options: ISupabaseAdapterOptions;\n private _supabase: SupabaseClient<Database>;\n\n /**\n * Returns the Supabase client.\n * @returns {SupabaseClient<Database>} The Supabase client.\n */\n get client(): SupabaseClient<Database> {\n return this._supabase as SupabaseClient<Database>;\n }\n\n private hello() {\n const hello = `%c Dill Pixel Supabase Adapter v${version} | %cSupabase v${supabaseVersion} | %cSupabase Postgres v${supabasePostgresVersion}`;\n console.log(\n hello,\n 'background: rgba(31, 41, 55, 1);color: #74b64c',\n 'background: rgba(31, 41, 55, 1);color: #e91e63',\n 'background: rgba(31, 41, 55, 1);color: #e91e63',\n 'background: rgba(31, 41, 55, 1);color: #74b64c',\n 'background: rgba(31, 41, 55, 1);color: #74b64c',\n );\n\n if (this._options.debug) {\n Logger.log(this._options);\n }\n }\n\n /**\n * Initializes the adapter.\n * @param {IApplication} _app The application that the adapter belongs to.\n * @param {ISupabaseAdapterOptions} options The options to initialize the adapter with.\n * @returns {void}\n */\n public initialize(_app: IApplication, options: Partial<ISupabaseAdapterOptions> = {}): void {\n Logger.log('SupabaseAdapter initialized');\n const defaultConfig: ISupabaseAdapterOptions = {\n supabaseUrl: _app.env.VITE_SUPABASE_URL || _app.env.SUPABASE_URL,\n anonKey: _app.env.VITE_SUPABASE_ANON_KEY || _app.env.SUPABASE_ANON_KEY,\n };\n this._options = { ...defaultConfig, ...options };\n\n this.hello();\n\n if (!this._options.supabaseUrl) {\n throw new Error('Supabase URL is not set');\n }\n if (!this._options.anonKey) {\n throw new Error('Supabase anon key is not set');\n }\n\n this._supabase = createClient<Database>(this._options.supabaseUrl, this._options.anonKey);\n }\n\n /**\n * Saves data to a specified table in the Supabase database.\n * @param {string} tableId The table to save the data to.\n * @param {any} data The data to save.\n * @param {SaveMethod} method The method to use for saving the data.\n * @returns {Promise<any>} The saved data.\n *\n * @example\n * await this.app.supabase.save('scores', { username: 'relish', score: 50 })\n */\n async save(tableId: string, data: any, method: SaveMethod = 'upsert'): Promise<any> {\n if (!Array.isArray(data)) {\n data = [data];\n }\n const table = this.client.from(tableId);\n switch (method) {\n case 'insert':\n return await table.insert(data).select();\n case 'update':\n return await table.update(data).select();\n case 'upsert':\n return await table.upsert(data).select();\n }\n }\n\n /**\n * Loads data from a specified table in the Supabase database.\n * @param {string} tableId The table from which to load the data.\n * @param {string[]} selectors The columns to select. Default is '*'.\n * @returns {PostgrestFilterBuilder<any, any, any>} PostgrestFilterBuilder // TODO\n *\n * @example\n * await this.app.supabase.load('scores', ['score', 'username']).order('score', { ascending: false }).limit(5)\n */\n async load<TExpectedLoadResult = any>(tableId: string, selectors?: string[]): Promise<TExpectedLoadResult> {\n const query = this.client.from(tableId).select(selectors?.join(','));\n const { data, error } = await query;\n if (error) throw error;\n return data as TExpectedLoadResult;\n }\n\n /**\n * Deletes data from a specified table in the Supabase database.\n * @param {string} tableId The table from which to load the data.\n * @param {DeleteData} data The data to delete.\n * @returns {Promise<any>} The deleted data.\n *\n * @example\n * await this.app.supabase.delete('scores', { username: 'relish', score: 50 })\n */\n\n async delete(tableId: string, data: DeleteData): Promise<any> {\n const column = Object.keys(data)[0];\n const value = data[column];\n return await this.client.from(tableId).delete().eq(column, value).select();\n }\n}\n"],"names":["version","supabaseVersion","supabasePostgresVersion","SupabaseAdapter","StorageAdapter","hello","Logger","_app","options","defaultConfig","createClient","tableId","data","method","table","selectors","query","error","column","value"],"mappings":";;AAAO,MAAMA,IAAU,SACVC,IAAkB,UAClBC,IAA0B;AC+BhC,MAAMC,UACHC,EAEV;AAAA;AAAA;AAAA;AAAA;AAAA,EAQE,IAAI,SAAmC;AACrC,WAAO,KAAK;AAAA,EAAA;AAAA,EAGN,QAAQ;AACd,UAAMC,IAAQ,mCAAmCL,CAAO,kBAAkBC,CAAe,2BAA2BC,CAAuB;AACnI,YAAA;AAAA,MACNG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAEI,KAAK,SAAS,SACTC,EAAA,IAAI,KAAK,QAAQ;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASK,WAAWC,GAAoBC,IAA4C,IAAU;AAC1F,IAAAF,EAAO,IAAI,6BAA6B;AACxC,UAAMG,IAAyC;AAAA,MAC7C,aAAaF,EAAK,IAAI,qBAAqBA,EAAK,IAAI;AAAA,MACpD,SAASA,EAAK,IAAI,0BAA0BA,EAAK,IAAI;AAAA,IACvD;AAKI,QAJJ,KAAK,WAAW,EAAE,GAAGE,GAAe,GAAGD,EAAQ,GAE/C,KAAK,MAAM,GAEP,CAAC,KAAK,SAAS;AACX,YAAA,IAAI,MAAM,yBAAyB;AAEvC,QAAA,CAAC,KAAK,SAAS;AACX,YAAA,IAAI,MAAM,8BAA8B;AAGhD,SAAK,YAAYE,EAAuB,KAAK,SAAS,aAAa,KAAK,SAAS,OAAO;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa1F,MAAM,KAAKC,GAAiBC,GAAWC,IAAqB,UAAwB;AAClF,IAAK,MAAM,QAAQD,CAAI,MACrBA,IAAO,CAACA,CAAI;AAEd,UAAME,IAAQ,KAAK,OAAO,KAAKH,CAAO;AACtC,YAAQE,GAAQ;AAAA,MACd,KAAK;AACH,eAAO,MAAMC,EAAM,OAAOF,CAAI,EAAE,OAAO;AAAA,MACzC,KAAK;AACH,eAAO,MAAME,EAAM,OAAOF,CAAI,EAAE,OAAO;AAAA,MACzC,KAAK;AACH,eAAO,MAAME,EAAM,OAAOF,CAAI,EAAE,OAAO;AAAA,IAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYF,MAAM,KAAgCD,GAAiBI,GAAoD;AACnG,UAAAC,IAAQ,KAAK,OAAO,KAAKL,CAAO,EAAE,OAAOI,KAAA,gBAAAA,EAAW,KAAK,IAAI,GAC7D,EAAE,MAAAH,GAAM,OAAAK,EAAM,IAAI,MAAMD;AAC9B,QAAIC,EAAa,OAAAA;AACV,WAAAL;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaT,MAAM,OAAOD,GAAiBC,GAAgC;AAC5D,UAAMM,IAAS,OAAO,KAAKN,CAAI,EAAE,CAAC,GAC5BO,IAAQP,EAAKM,CAAM;AACzB,WAAO,MAAM,KAAK,OAAO,KAAKP,CAAO,EAAE,OAAO,EAAE,GAAGO,GAAQC,CAAK,EAAE,OAAO;AAAA,EAAA;AAE7E;"}