@tstdl/base 0.90.33 → 0.90.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintrc.json CHANGED
@@ -86,7 +86,6 @@
86
86
  "capitalized-comments": "off",
87
87
  "class-methods-use-this": "off",
88
88
  "complexity": "off",
89
- "consistent-return": ["error", { "treatUndefinedAsUnspecified": true }],
90
89
  "dot-location": ["error", "property"],
91
90
  "eqeqeq": "off",
92
91
  "func-style": ["error", "declaration", { "allowArrowFunctions": true }],
@@ -11,12 +11,12 @@ import type { ApiController, ApiDefinition, ApiEndpointDefinition, ApiEndpointMe
11
11
  import { ApiRequestTokenProvider } from './api-request-token.provider.js';
12
12
  import type { CorsMiddlewareOptions } from './middlewares/cors.middleware.js';
13
13
  export type ApiGatewayMiddlewareContext = {
14
- api: ApiItem;
14
+ readonly api: ApiItem;
15
15
  /** can be undefined if used before allowedMethods middleware */
16
- endpoint: GatewayEndpoint;
17
- resourcePatternResult: URLPatternResult;
18
- request: HttpServerRequest;
19
- response: HttpServerResponse;
16
+ readonly endpoint: GatewayEndpoint;
17
+ readonly resourcePatternResult: URLPatternResult;
18
+ readonly request: HttpServerRequest;
19
+ readonly response: HttpServerResponse;
20
20
  };
21
21
  export type ApiGatewayMiddlewareNext = AsyncMiddlewareNext;
22
22
  export type ApiGatewayMiddleware = AsyncMiddleware<ApiGatewayMiddlewareContext>;
@@ -29,7 +29,7 @@ import { normalizedApiDefinitionEndpointsEntries } from '../types.js';
29
29
  import { getFullApiEndpointResource } from '../utils.js';
30
30
  import { ApiRequestTokenProvider } from './api-request-token.provider.js';
31
31
  import { handleApiError } from './error-handler.js';
32
- import { allowedMethodsMiddleware, getCatchErrorMiddleware, contentTypeMiddleware, corsMiddleware, responseTimeMiddleware } from './middlewares/index.js';
32
+ import { allowedMethodsMiddleware, contentTypeMiddleware, corsMiddleware, getCatchErrorMiddleware, responseTimeMiddleware } from './middlewares/index.js';
33
33
  import { API_MODULE_OPTIONS } from './tokens.js';
34
34
  const defaultMaxBytes = 10 * mebibyte;
35
35
  export class ApiGatewayOptions {
@@ -189,7 +189,7 @@ let ApiGateway = class ApiGateway {
189
189
  };
190
190
  const result = await context.endpoint.implementation(requestContext);
191
191
  if (result instanceof HttpServerResponse) {
192
- context.response = result; // eslint-disable-line require-atomic-updates
192
+ context.response.update(result); // eslint-disable-line require-atomic-updates
193
193
  }
194
194
  else {
195
195
  context.response.body = isUint8Array(result) ? { buffer: result } // eslint-disable-line require-atomic-updates
@@ -1 +1 @@
1
- export {};
1
+ import '../../polyfills.js';
@@ -5,6 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  /* eslint-disable max-classes-per-file */
8
+ import '../../polyfills.js';
8
9
  import { compileClient } from '../../api/client/client.js';
9
10
  import { defineApi } from '../../api/index.js';
10
11
  import { apiController, configureApiServer } from '../../api/server/index.js';
@@ -194,17 +194,15 @@ HttpClient = __decorate([
194
194
  export { HttpClient };
195
195
  function getBuildRequestUrlMiddleware(baseUrl) {
196
196
  async function buildUrlParametersMiddleware({ request }, next) {
197
- if (!request.mapParameters) {
198
- return next();
197
+ if (request.mapParameters) {
198
+ mapParameters(request, baseUrl);
199
199
  }
200
- mapParameters(request, baseUrl);
201
200
  return next();
202
201
  }
203
202
  return buildUrlParametersMiddleware;
204
203
  }
205
204
  function getAddRequestHeadersMiddleware(defaultHeaders) {
206
205
  async function addRequestHeadersMiddleware({ request }, next) {
207
- await next();
208
206
  const { body, authorization } = request;
209
207
  for (const [key, value] of defaultHeaders) {
210
208
  request.headers.setIfMissing(key, value);
@@ -238,6 +236,7 @@ function getAddRequestHeadersMiddleware(defaultHeaders) {
238
236
  request.headers.authorization = `Token ${authorization.token}`;
239
237
  }
240
238
  }
239
+ return next();
241
240
  }
242
241
  return addRequestHeadersMiddleware;
243
242
  }
@@ -32,4 +32,5 @@ export declare class HttpServerResponse {
32
32
  };
33
33
  constructor(response?: HttpServerResponseOptions);
34
34
  static fromObject(options?: HttpServerResponseOptions): HttpServerResponse;
35
+ update(options: HttpServerResponseOptions): void;
35
36
  }
@@ -8,17 +8,20 @@ export class HttpServerResponse {
8
8
  headers;
9
9
  body;
10
10
  constructor(response = {}) {
11
- this.statusCode = response.statusCode;
12
- this.statusMessage = response.statusMessage;
13
- this.headers = new HttpHeaders(response.headers);
14
- this.body = response.body;
15
- if (isDefined(response.cookies)) {
16
- for (const [name, options] of objectEntries(response.cookies)) {
17
- this.headers.append('Set-Cookie', formatSetCookie(name, options.value, options));
18
- }
19
- }
11
+ this.update(response);
20
12
  }
21
13
  static fromObject(options) {
22
14
  return new HttpServerResponse(options);
23
15
  }
16
+ update(options) {
17
+ this.statusCode = options.statusCode;
18
+ this.statusMessage = options.statusMessage;
19
+ this.headers = new HttpHeaders(options.headers);
20
+ this.body = options.body;
21
+ if (isDefined(options.cookies)) {
22
+ for (const [name, cookie] of objectEntries(options.cookies)) {
23
+ this.headers.append('Set-Cookie', formatSetCookie(name, cookie.value, cookie));
24
+ }
25
+ }
26
+ }
24
27
  }
@@ -47,8 +47,10 @@ let NodeHttpServer = class NodeHttpServer extends HttpServer {
47
47
  });
48
48
  }
49
49
  async [disposeAsync]() {
50
- await this.close(3000);
51
- this.requestIterable.end();
50
+ if (this.httpServer.listening) {
51
+ await this.close(3000);
52
+ this.requestIterable.end();
53
+ }
52
54
  }
53
55
  async listen(port) {
54
56
  if (this.httpServer.listening) {
@@ -1,7 +1,7 @@
1
1
  import { CancellationSignal, CancellationToken } from '../cancellation/index.js';
2
2
  import { CircularBuffer } from '../data-structures/circular-buffer.js';
3
3
  import { MultiKeyMap } from '../data-structures/multi-key-map.js';
4
- import { isAsyncDisposable, isDisposable, isSyncOrAsyncDisposable } from '../disposable/disposable.js';
4
+ import { isSyncOrAsyncDisposable } from '../disposable/disposable.js';
5
5
  import { DeferredPromise } from '../promise/deferred-promise.js';
6
6
  import { reflectionRegistry } from '../reflection/registry.js';
7
7
  import { toArray } from '../utils/array/array.js';
@@ -22,6 +22,7 @@ export class Injector {
22
22
  #children = [];
23
23
  #disposeToken = new CancellationToken();
24
24
  #disposableStack = new AsyncDisposableStack();
25
+ #disposableStackRegistrations = new Set();
25
26
  #registrations = new Map();
26
27
  #injectorScopedResolutions = new MultiKeyMap();
27
28
  #addDisposeHandler;
@@ -44,6 +45,7 @@ export class Injector {
44
45
  };
45
46
  this.#disposableStack.defer(() => this.#registrations.clear());
46
47
  this.#disposableStack.defer(() => this.#injectorScopedResolutions.clear());
48
+ this.#disposableStack.defer(() => this.#disposableStackRegistrations.clear());
47
49
  }
48
50
  /**
49
51
  * Globally register a provider for a token
@@ -323,8 +325,9 @@ export class Injector {
323
325
  if (isUndefined(result)) {
324
326
  throw new Error('Unsupported provider.');
325
327
  }
326
- if (isDisposable(result.value) || isAsyncDisposable(result.value)) {
328
+ if (isSyncOrAsyncDisposable(result.value) && !this.#disposableStackRegistrations.has(result.value)) {
327
329
  this.#disposableStack.use(result.value);
330
+ this.#disposableStackRegistrations.add(result.value);
328
331
  }
329
332
  return result.value;
330
333
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tstdl/base",
3
- "version": "0.90.33",
3
+ "version": "0.90.35",
4
4
  "author": "Patrick Hein",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -121,8 +121,8 @@
121
121
  "@types/mjml": "4.7",
122
122
  "@types/node": "20",
123
123
  "@types/nodemailer": "6.4",
124
- "@typescript-eslint/eslint-plugin": "6.10",
125
- "@typescript-eslint/parser": "6.10",
124
+ "@typescript-eslint/eslint-plugin": "6.11",
125
+ "@typescript-eslint/parser": "6.11",
126
126
  "concurrently": "8.2",
127
127
  "esbuild": "0.19",
128
128
  "eslint": "8.53",