ngx-cookie-backend
Version:
Implementation of Angular 1.x $cookies service to Angular
66 lines • 9.73 kB
JavaScript
import { Inject, Injectable, Optional } from '@angular/core';
import { REQUEST, RESPONSE } from '@nguniversal/express-engine/tokens';
import { isEmpty, isString } from 'ngx-cookie';
import * as i0 from "@angular/core";
const COOKIE_SEPARATOR = ';';
export class CookieBackendWriterService {
constructor(request, response) {
this.request = request;
this.response = response;
}
readAllAsString() {
const requestHeadersCookies = this.request?.headers?.cookie;
const cookiesFromRequest = requestHeadersCookies?.split(COOKIE_SEPARATOR) ?? [];
const addedCookies = this.getNormalizedResponseCookies();
const allCookies = this.latestUniqueCookieValues(cookiesFromRequest, addedCookies);
return allCookies.join(COOKIE_SEPARATOR);
}
write(name, value, options) {
this.response?.cookie(name, value, this.getOptions(options));
}
getOptions(options) {
if (isEmpty(options)) {
return {};
}
const opts = { ...options };
if (!isEmpty(options.expires)) {
opts.expires = this.getExpires(options.expires);
}
return opts;
}
getExpires(expires) {
return isString(expires) ? new Date(expires) : expires;
}
getNormalizedResponseCookies() {
const responseCookies = this.response?.getHeader('Set-Cookie') ?? '';
const addedCookies = Array.isArray(responseCookies) ? responseCookies : [responseCookies];
return addedCookies.flatMap(cookieEntry => cookieEntry.split(COOKIE_SEPARATOR));
}
latestUniqueCookieValues(oldCookies, newerCookies) {
const cookiesMap = new Map();
const oldAndNewCookies = [...oldCookies, ...newerCookies];
oldAndNewCookies
.filter(value => !isEmpty(value))
.map(cookie => cookie.split('='))
.forEach(([key, value]) => cookiesMap.set(key.trim(), value));
const result = [];
cookiesMap.forEach((value, key) => result.push(`${key}=${value}`));
return result;
}
}
CookieBackendWriterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: CookieBackendWriterService, deps: [{ token: REQUEST, optional: true }, { token: RESPONSE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
CookieBackendWriterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: CookieBackendWriterService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: CookieBackendWriterService, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [REQUEST]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [RESPONSE]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLWJhY2tlbmQtd3JpdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29va2llLWJhY2tlbmQvc3JjL2xpYi9jb29raWUtYmFja2VuZC13cml0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV2RSxPQUFPLEVBQXVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBRXBGLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBRzdCLE1BQU0sT0FBTywwQkFBMEI7SUFDckMsWUFBaUQsT0FBZ0IsRUFDZixRQUFrQjtRQURuQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2YsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUFHLENBQUM7SUFFeEUsZUFBZTtRQUNiLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQzVELE1BQU0sa0JBQWtCLEdBQWEscUJBQXFCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFGLE1BQU0sWUFBWSxHQUFhLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ25FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxrQkFBa0IsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNuRixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVksRUFBRSxLQUF5QixFQUFFLE9BQXVCO1FBQ3BFLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyxVQUFVLENBQUMsT0FBdUI7UUFDeEMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE1BQU0sSUFBSSxHQUFHLEVBQUMsR0FBRyxPQUFPLEVBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxJQUE0QixDQUFDO0lBQ3RDLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBdUI7UUFDeEMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQWlCLENBQUMsQ0FBQyxDQUFDLENBQUUsT0FBZ0IsQ0FBQztJQUM3RSxDQUFDO0lBRU8sNEJBQTRCO1FBQ2xDLE1BQU0sZUFBZSxHQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBdUIsSUFBSSxFQUFFLENBQUM7UUFDNUYsTUFBTSxZQUFZLEdBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxVQUFvQixFQUFFLFlBQXNCO1FBQzNFLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQzdDLE1BQU0sZ0JBQWdCLEdBQWEsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO1FBQ3BFLGdCQUFnQjthQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDaEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzt1SEEvQ1UsMEJBQTBCLGtCQUNMLE9BQU8sNkJBQ1AsUUFBUTsySEFGN0IsMEJBQTBCOzJGQUExQiwwQkFBMEI7a0JBRHRDLFVBQVU7OzBCQUVJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsT0FBTzs7MEJBQzFCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJFUVVFU1QsIFJFU1BPTlNFIH0gZnJvbSAnQG5ndW5pdmVyc2FsL2V4cHJlc3MtZW5naW5lL3Rva2Vucyc7XG5pbXBvcnQgeyBDb29raWVPcHRpb25zIGFzIEV4cHJlc3NDb29raWVPcHRpb25zLCBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgQ29va2llT3B0aW9ucywgSUNvb2tpZVdyaXRlclNlcnZpY2UsIGlzRW1wdHksIGlzU3RyaW5nIH0gZnJvbSAnbmd4LWNvb2tpZSc7XG5cbmNvbnN0IENPT0tJRV9TRVBBUkFUT1IgPSAnOyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb29raWVCYWNrZW5kV3JpdGVyU2VydmljZSBpbXBsZW1lbnRzIElDb29raWVXcml0ZXJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChSRVFVRVNUKSBwcml2YXRlIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUkVTUE9OU0UpIHByaXZhdGUgcmVzcG9uc2U6IFJlc3BvbnNlKSB7fVxuXG4gIHJlYWRBbGxBc1N0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzQ29va2llcyA9IHRoaXMucmVxdWVzdD8uaGVhZGVycz8uY29va2llO1xuICAgIGNvbnN0IGNvb2tpZXNGcm9tUmVxdWVzdDogc3RyaW5nW10gPSByZXF1ZXN0SGVhZGVyc0Nvb2tpZXM/LnNwbGl0KENPT0tJRV9TRVBBUkFUT1IpID8/IFtdO1xuICAgIGNvbnN0IGFkZGVkQ29va2llczogc3RyaW5nW10gPSB0aGlzLmdldE5vcm1hbGl6ZWRSZXNwb25zZUNvb2tpZXMoKTtcbiAgICBjb25zdCBhbGxDb29raWVzID0gdGhpcy5sYXRlc3RVbmlxdWVDb29raWVWYWx1ZXMoY29va2llc0Zyb21SZXF1ZXN0LCBhZGRlZENvb2tpZXMpO1xuICAgIHJldHVybiBhbGxDb29raWVzLmpvaW4oQ09PS0lFX1NFUEFSQVRPUik7XG4gIH1cblxuICB3cml0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbnM/OiBDb29raWVPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5yZXNwb25zZT8uY29va2llKG5hbWUsIHZhbHVlLCB0aGlzLmdldE9wdGlvbnMob3B0aW9ucykpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcHRpb25zKG9wdGlvbnM/OiBDb29raWVPcHRpb25zKTogRXhwcmVzc0Nvb2tpZU9wdGlvbnMge1xuICAgIGlmIChpc0VtcHR5KG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IG9wdHMgPSB7Li4ub3B0aW9uc307XG4gICAgaWYgKCFpc0VtcHR5KG9wdGlvbnMuZXhwaXJlcykpIHtcbiAgICAgIG9wdHMuZXhwaXJlcyA9IHRoaXMuZ2V0RXhwaXJlcyhvcHRpb25zLmV4cGlyZXMpO1xuICAgIH1cbiAgICByZXR1cm4gb3B0cyBhcyBFeHByZXNzQ29va2llT3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhwaXJlcyhleHBpcmVzPzogc3RyaW5nIHwgRGF0ZSk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBpc1N0cmluZyhleHBpcmVzKSA/IG5ldyBEYXRlKGV4cGlyZXMgYXMgc3RyaW5nKSA6IChleHBpcmVzIGFzIERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb3JtYWxpemVkUmVzcG9uc2VDb29raWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXNwb25zZUNvb2tpZXMgPSAodGhpcy5yZXNwb25zZT8uZ2V0SGVhZGVyKCdTZXQtQ29va2llJykgYXMgc3RyaW5nIHwgc3RyaW5nW10pID8/ICcnO1xuICAgIGNvbnN0IGFkZGVkQ29va2llczogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlQ29va2llcykgPyByZXNwb25zZUNvb2tpZXMgOiBbcmVzcG9uc2VDb29raWVzXTtcbiAgICByZXR1cm4gYWRkZWRDb29raWVzLmZsYXRNYXAoY29va2llRW50cnkgPT4gY29va2llRW50cnkuc3BsaXQoQ09PS0lFX1NFUEFSQVRPUikpO1xuICB9XG5cbiAgcHJpdmF0ZSBsYXRlc3RVbmlxdWVDb29raWVWYWx1ZXMob2xkQ29va2llczogc3RyaW5nW10sIG5ld2VyQ29va2llczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY29va2llc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgY29uc3Qgb2xkQW5kTmV3Q29va2llczogc3RyaW5nW10gPSBbLi4ub2xkQ29va2llcywgLi4ubmV3ZXJDb29raWVzXTtcbiAgICBvbGRBbmROZXdDb29raWVzXG4gICAgICAuZmlsdGVyKHZhbHVlID0+ICFpc0VtcHR5KHZhbHVlKSlcbiAgICAgIC5tYXAoY29va2llID0+IGNvb2tpZS5zcGxpdCgnPScpKVxuICAgICAgLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gY29va2llc01hcC5zZXQoa2V5LnRyaW0oKSwgdmFsdWUpKTtcbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgY29va2llc01hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiByZXN1bHQucHVzaChgJHtrZXl9PSR7dmFsdWV9YCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==