@@ -12,6 +12,7 @@ import {
1212import { INJECTOR_LITERAL } from "./ng-module/ng-module.js" ;
1313import { InjectorService , ProviderInjector } from "./internal-injector.js" ;
1414import { createPersistentProxy } from "../../services/storage/storage.js" ;
15+ import { $injectTokens } from "../../injection-tokens" ;
1516
1617const $injectorMinErr = minErr ( INJECTOR_LITERAL ) ;
1718const providerSuffix = "Provider" ;
@@ -38,6 +39,7 @@ export function createInjector(modulesToLoad, strictDi = false) {
3839 session : supportObject ( session ) ,
3940 local : supportObject ( local ) ,
4041 store : supportObject ( store ) ,
42+ cookie : supportObject ( cookie ) ,
4143 decorator,
4244 } ,
4345 } ;
@@ -195,6 +197,46 @@ export function createInjector(modulesToLoad, strictDi = false) {
195197 } ) ;
196198 }
197199
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+
198240 /**
199241 * Registers a service persisted in a custom storage
200242 *
0 commit comments