From 5b33c77be4b74eb18943cb41c0ce7270b37d13a1 Mon Sep 17 00:00:00 2001 From: Dmitriy Shekhovtsov Date: Mon, 27 Dec 2021 14:50:35 +0200 Subject: [PATCH] feat(request): add request provider for SSR without adding express as a dep to a client lib --- .../ngx-cookie-service/express-ssr/ng-package.json | 7 +++++++ .../ngx-cookie-service/express-ssr/package.json | 8 ++++++++ .../express-ssr/src/express-request.provider.ts | 13 +++++++++++++ .../express-ssr/src/public-api.ts | 1 + projects/ngx-cookie-service/package.json | 3 +-- .../request-provider/ng-package.json | 7 +++++++ .../request-provider/package.json | 4 ++++ .../request-provider/src/public-api.ts | 1 + .../request-provider/src/request.provider.ts | 9 +++++++++ .../ngx-cookie-service/src/lib/cookie.service.ts | 5 ++--- tsconfig.json | 4 +++- 11 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 projects/ngx-cookie-service/express-ssr/ng-package.json create mode 100644 projects/ngx-cookie-service/express-ssr/package.json create mode 100644 projects/ngx-cookie-service/express-ssr/src/express-request.provider.ts create mode 100644 projects/ngx-cookie-service/express-ssr/src/public-api.ts create mode 100644 projects/ngx-cookie-service/request-provider/ng-package.json create mode 100644 projects/ngx-cookie-service/request-provider/package.json create mode 100644 projects/ngx-cookie-service/request-provider/src/public-api.ts create mode 100644 projects/ngx-cookie-service/request-provider/src/request.provider.ts diff --git a/projects/ngx-cookie-service/express-ssr/ng-package.json b/projects/ngx-cookie-service/express-ssr/ng-package.json new file mode 100644 index 0000000..d19b081 --- /dev/null +++ b/projects/ngx-cookie-service/express-ssr/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/ngx-cookie-service/express-ssr", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/projects/ngx-cookie-service/express-ssr/package.json b/projects/ngx-cookie-service/express-ssr/package.json new file mode 100644 index 0000000..8ad8731 --- /dev/null +++ b/projects/ngx-cookie-service/express-ssr/package.json @@ -0,0 +1,8 @@ +{ + "name": "ngx-cookie-service/express-ssr", + "license": "MIT", + "peerDependencies": { + "@nguniversal/express-engine": "^13.0.1", + "express": "^4.17.2" + } +} diff --git a/projects/ngx-cookie-service/express-ssr/src/express-request.provider.ts b/projects/ngx-cookie-service/express-ssr/src/express-request.provider.ts new file mode 100644 index 0000000..9bfc382 --- /dev/null +++ b/projects/ngx-cookie-service/express-ssr/src/express-request.provider.ts @@ -0,0 +1,13 @@ +import {StaticProvider} from '@angular/core'; +import {REQUEST} from '@nguniversal/express-engine/tokens'; +import {REQUEST_PROVIDER_TOKEN, RequestProvider} from 'ngx-cookie-service/request-provider'; + +export const requestProviderFactory = (request: RequestProvider) => { + return request; +}; + +export const expressRequestProvider: StaticProvider = { + provide: REQUEST_PROVIDER_TOKEN, + useFactory: requestProviderFactory, + deps: [REQUEST] +}; diff --git a/projects/ngx-cookie-service/express-ssr/src/public-api.ts b/projects/ngx-cookie-service/express-ssr/src/public-api.ts new file mode 100644 index 0000000..e25c748 --- /dev/null +++ b/projects/ngx-cookie-service/express-ssr/src/public-api.ts @@ -0,0 +1 @@ +export * from './express-request.provider'; diff --git a/projects/ngx-cookie-service/package.json b/projects/ngx-cookie-service/package.json index f975ca4..9ee17e6 100644 --- a/projects/ngx-cookie-service/package.json +++ b/projects/ngx-cookie-service/package.json @@ -78,8 +78,7 @@ }, "peerDependencies": { "@angular/common": "^13.0.0", - "@angular/core": "^13.0.0", - "@nguniversal/express-engine": "^13.0.0" + "@angular/core": "^13.0.0" }, "dependencies": { "tslib": "^2.0.0" diff --git a/projects/ngx-cookie-service/request-provider/ng-package.json b/projects/ngx-cookie-service/request-provider/ng-package.json new file mode 100644 index 0000000..d19b081 --- /dev/null +++ b/projects/ngx-cookie-service/request-provider/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/ngx-cookie-service/express-ssr", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/projects/ngx-cookie-service/request-provider/package.json b/projects/ngx-cookie-service/request-provider/package.json new file mode 100644 index 0000000..fa6d9c6 --- /dev/null +++ b/projects/ngx-cookie-service/request-provider/package.json @@ -0,0 +1,4 @@ +{ + "name": "ngx-cookie-service/request-provider", + "license": "MIT" +} diff --git a/projects/ngx-cookie-service/request-provider/src/public-api.ts b/projects/ngx-cookie-service/request-provider/src/public-api.ts new file mode 100644 index 0000000..83e5341 --- /dev/null +++ b/projects/ngx-cookie-service/request-provider/src/public-api.ts @@ -0,0 +1 @@ +export * from './request.provider'; diff --git a/projects/ngx-cookie-service/request-provider/src/request.provider.ts b/projects/ngx-cookie-service/request-provider/src/request.provider.ts new file mode 100644 index 0000000..d174a39 --- /dev/null +++ b/projects/ngx-cookie-service/request-provider/src/request.provider.ts @@ -0,0 +1,9 @@ +import {InjectionToken} from '@angular/core'; + +export interface RequestProvider { + headers? : { + cookie: string; + } +} + +export const REQUEST_PROVIDER_TOKEN = new InjectionToken('request provider token') diff --git a/projects/ngx-cookie-service/src/lib/cookie.service.ts b/projects/ngx-cookie-service/src/lib/cookie.service.ts index 7948bde..a026f02 100644 --- a/projects/ngx-cookie-service/src/lib/cookie.service.ts +++ b/projects/ngx-cookie-service/src/lib/cookie.service.ts @@ -1,10 +1,9 @@ // This service is based on the `ng2-cookies` package which sadly is not a service and does // not use `DOCUMENT` injection and therefore doesn't work well with AoT production builds. // Package: https://github.com/BCJTI/ng2-cookies -import { Request } from 'express'; -import { REQUEST } from '@nguniversal/express-engine/tokens'; import { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core'; import { DOCUMENT, isPlatformBrowser } from '@angular/common'; +import {REQUEST_PROVIDER_TOKEN, RequestProvider} from 'ngx-cookie-service/request-provider'; @Injectable({ providedIn: 'root', @@ -16,7 +15,7 @@ export class CookieService { @Inject(DOCUMENT) private document: Document, // Get the `PLATFORM_ID` so we can check if we're in a browser. @Inject(PLATFORM_ID) private platformId: any, - @Optional() @Inject(REQUEST) private request: Request + @Optional() @Inject(REQUEST_PROVIDER_TOKEN) private request: RequestProvider ) { this.documentIsAccessible = isPlatformBrowser(this.platformId); } diff --git a/tsconfig.json b/tsconfig.json index 171dc46..9e1dbbb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,9 @@ "typeRoots": ["node_modules/@types"], "lib": ["es2018", "dom"], "paths": { - "ngx-cookie-service": ["dist/ngx-cookie-service/ngx-cookie-service", "dist/ngx-cookie-service"] + "ngx-cookie-service": ["projects/ngx-cookie-service/src/public-api.ts"], + "ngx-cookie-service/express-ssr": ["projects/ngx-cookie-service/express-ssr/src/public-api.ts"], + "ngx-cookie-service/request-provider": ["projects/ngx-cookie-service/request-provider/src/public-api.ts"], } }, "angularCompilerOptions": {