@@ -36,10 +36,7 @@ export function createInjector(modulesToLoad, strictDi = false) {
3636 service : supportObject ( service ) ,
3737 value : supportObject ( value ) ,
3838 constant : supportObject ( constant ) ,
39- session : supportObject ( session ) ,
40- local : supportObject ( local ) ,
41- store : supportObject ( store ) ,
42- cookie : supportObject ( cookie ) ,
39+ store,
4340 decorator,
4441 } ,
4542 } ;
@@ -174,106 +171,80 @@ export function createInjector(modulesToLoad, strictDi = false) {
174171 }
175172
176173 /**
177- * Registers a session-persistent service
178- */
179- function session ( name , ctor ) {
180- return provider ( name , {
181- $get : ( $injector ) => {
182- const instance = $injector . instantiate ( ctor ) ;
183- return createPersistentProxy ( instance , name , sessionStorage ) ;
184- } ,
185- } ) ;
186- }
187-
188- /**
189- * Registers a localStorage-persistent service
190- */
191- function local ( name , ctor ) {
192- return provider ( name , {
193- $get : ( $injector ) => {
194- const instance = $injector . instantiate ( ctor ) ;
195- return createPersistentProxy ( instance , name , localStorage ) ;
196- } ,
197- } ) ;
198- }
199-
200- /**
201- * Registers a cookie-persistent service.
202- *
203- * @param {string } name
204- * @param {Function } ctor
205- * @param {ng.CookieStoreOptions } [options]
206- */
207- function cookie ( name , ctor , options = { } ) {
208- return provider ( name , {
209- $get : [
210- $injectTokens . $injector ,
211- ( $injector ) => {
212- const instance = $injector . instantiate ( ctor ) ;
213- const $cookie = $injector . get ( $injectTokens . $cookie ) ;
214- const serialize = options . serialize ?? JSON . stringify ;
215- const deserialize = options . deserialize ?? JSON . parse ;
216- const cookieOpts = options . cookie ?? { } ;
217-
218- return createPersistentProxy ( instance , name , {
219- getItem ( key ) {
220- const raw = $cookie . get ( key ) ;
221- return raw == null ? null : raw ;
222- } ,
223-
224- setItem ( key , value ) {
225- $cookie . put ( key , value , cookieOpts ) ;
226- } ,
227-
228- removeItem ( key ) {
229- $cookie . remove ( key , cookieOpts ) ;
230- } ,
231-
232- serialize,
233- deserialize,
234- } ) ;
235- } ,
236- ] ,
237- } ) ;
238- }
239-
240- /**
241- * Registers a service persisted in a custom storage
174+ * Registers a service persisted in a storage
242175 *
243176 * @param {string } name - Service name
244177 * @param {Function } ctor - Constructor for the service
178+ * @param {ng.StorageType } type - Type of storage to be instantiated
245179 * @param {Storage|Object } backendOrConfig - Either a Storage-like object (getItem/setItem) or a config object
246180 * with { backend, serialize, deserialize }
247181 */
248- function store ( name , ctor , backendOrConfig ) {
182+ function store ( name , ctor , type , backendOrConfig = { } ) {
249183 return provider ( name , {
250- $get : ( $injector ) => {
251- const instance = $injector . instantiate ( ctor ) ;
252-
253- let backend ;
254- let serialize = JSON . stringify ;
255- let deserialize = JSON . parse ;
256-
257- if ( backendOrConfig ) {
258- if ( typeof backendOrConfig . getItem === "function" ) {
259- // raw Storage object
260- backend = backendOrConfig ;
261- } else if ( isObject ( backendOrConfig ) ) {
262- backend = backendOrConfig . backend || localStorage ;
263- if ( backendOrConfig . serialize )
264- serialize = backendOrConfig . serialize ;
265- if ( backendOrConfig . deserialize )
266- deserialize = backendOrConfig . deserialize ;
184+ $get : /** @param {ng.InjectorService } $injector */ ( $injector ) => {
185+ switch ( type ) {
186+ case "session" : {
187+ const instance = $injector . instantiate ( ctor ) ;
188+ return createPersistentProxy ( instance , name , sessionStorage ) ;
189+ }
190+ case "local" : {
191+ const instance = $injector . instantiate ( ctor ) ;
192+ return createPersistentProxy ( instance , name , localStorage ) ;
193+ }
194+ case "cookie" : {
195+ const instance = $injector . instantiate ( ctor ) ;
196+ const $cookie = $injector . get ( $injectTokens . $cookie ) ;
197+ const serialize = backendOrConfig . serialize ?? JSON . stringify ;
198+ const deserialize = backendOrConfig . deserialize ?? JSON . parse ;
199+ const cookieOpts = backendOrConfig . cookie ?? { } ;
200+
201+ return createPersistentProxy ( instance , name , {
202+ getItem ( key ) {
203+ const raw = $cookie . get ( key ) ;
204+ return raw == null ? null : raw ;
205+ } ,
206+
207+ setItem ( key , value ) {
208+ $cookie . put ( key , value , cookieOpts ) ;
209+ } ,
210+
211+ removeItem ( key ) {
212+ $cookie . remove ( key , cookieOpts ) ;
213+ } ,
214+
215+ serialize,
216+ deserialize,
217+ } ) ;
218+ }
219+ case "custom" : {
220+ const instance = $injector . instantiate ( ctor ) ;
221+
222+ let backend ;
223+ let serialize = JSON . stringify ;
224+ let deserialize = JSON . parse ;
225+
226+ if ( backendOrConfig ) {
227+ if ( typeof backendOrConfig . getItem === "function" ) {
228+ // raw Storage object
229+ backend = backendOrConfig ;
230+ } else if ( isObject ( backendOrConfig ) ) {
231+ backend = backendOrConfig . backend || localStorage ;
232+ if ( backendOrConfig . serialize )
233+ serialize = backendOrConfig . serialize ;
234+ if ( backendOrConfig . deserialize )
235+ deserialize = backendOrConfig . deserialize ;
236+ }
237+ } else {
238+ // fallback default
239+ backend = localStorage ;
240+ }
241+
242+ return createPersistentProxy ( instance , name , backend , {
243+ serialize,
244+ deserialize,
245+ } ) ;
267246 }
268- } else {
269- // fallback default
270- backend = localStorage ;
271247 }
272-
273- return createPersistentProxy ( instance , name , backend , {
274- serialize,
275- deserialize,
276- } ) ;
277248 } ,
278249 } ) ;
279250 }
0 commit comments