@tstdl/base 0.90.29 → 0.90.30
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/api/server/gateway.js +3 -1
- package/jsx/index.d.ts +2 -0
- package/jsx/index.js +2 -0
- package/jsx/is-component-class.d.ts +2 -0
- package/jsx/is-component-class.js +5 -0
- package/jsx/render-to-string.d.ts +3 -0
- package/jsx/render-to-string.js +9 -0
- package/package.json +4 -3
- package/templates/renderers/jsx.template-renderer.d.ts +1 -1
- package/templates/renderers/jsx.template-renderer.js +3 -11
- package/utils/html-link-utils.d.ts +5 -0
- package/utils/html-link-utils.js +16 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/type/extends.d.ts +2 -1
- package/utils/url-builder.js +3 -3
package/api/server/gateway.js
CHANGED
|
@@ -21,6 +21,7 @@ import { Schema } from '../../schema/index.js';
|
|
|
21
21
|
import { ServerSentEventsSource } from '../../sse/server-sent-events-source.js';
|
|
22
22
|
import { toArray } from '../../utils/array/array.js';
|
|
23
23
|
import { composeAsyncMiddleware } from '../../utils/middleware.js';
|
|
24
|
+
import { mapObjectValues } from '../../utils/object/object.js';
|
|
24
25
|
import { deferThrow } from '../../utils/throw.js';
|
|
25
26
|
import { isArray, isBlob, isDefined, isNull, isNullOrUndefined, isObject, isReadableStream, isUint8Array, isUndefined } from '../../utils/type-guards.js';
|
|
26
27
|
import { mebibyte } from '../../utils/units.js';
|
|
@@ -173,7 +174,8 @@ let ApiGateway = class ApiGateway {
|
|
|
173
174
|
if (isDefined(bodyAsParameters) && !isObject(bodyAsParameters)) {
|
|
174
175
|
throw new BadRequestError('Expected json object as body.');
|
|
175
176
|
}
|
|
176
|
-
const
|
|
177
|
+
const decodedUrlParameters = mapObjectValues(context.resourcePatternResult.pathname.groups, (value) => isDefined(value) ? decodeURIComponent(value) : undefined);
|
|
178
|
+
const parameters = { ...request.query.asObject(), ...bodyAsParameters, ...decodedUrlParameters };
|
|
177
179
|
const validatedParameters = isDefined(context.endpoint.definition.parameters)
|
|
178
180
|
? Schema.parse(context.endpoint.definition.parameters, parameters)
|
|
179
181
|
: parameters;
|
package/jsx/index.d.ts
ADDED
package/jsx/index.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ComponentClass, FunctionComponent, VNode } from 'preact';
|
|
2
|
+
export declare function renderJsx(template: FunctionComponent<void> | ComponentClass<void, void> | VNode): string;
|
|
3
|
+
export declare function renderJsx<Properties>(template: FunctionComponent<Properties> | ComponentClass<Properties, any>, properties: Properties): string;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "preact/jsx-runtime";
|
|
2
|
+
import { isFunction } from '../utils/type-guards.js';
|
|
3
|
+
import { render } from 'preact-render-to-string';
|
|
4
|
+
export function renderJsx(Template, properties) {
|
|
5
|
+
if (isFunction(Template)) {
|
|
6
|
+
return render(_jsx(Template, { ...properties }));
|
|
7
|
+
}
|
|
8
|
+
return render(Template);
|
|
9
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tstdl/base",
|
|
3
|
-
"version": "0.90.
|
|
3
|
+
"version": "0.90.30",
|
|
4
4
|
"author": "Patrick Hein",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"./injector": "./injector/index.js",
|
|
54
54
|
"./intl": "./intl/index.js",
|
|
55
55
|
"./json-path": "./json-path/index.js",
|
|
56
|
+
"./jsx": "./jsx/index.js",
|
|
56
57
|
"./key-value-store": "./key-value-store/index.js",
|
|
57
58
|
"./lock": "./lock/index.js",
|
|
58
59
|
"./lock/mongo": "./lock/mongo/index.js",
|
|
@@ -109,7 +110,7 @@
|
|
|
109
110
|
"luxon": "^3.4",
|
|
110
111
|
"reflect-metadata": "^0.1",
|
|
111
112
|
"rxjs": "^7.8",
|
|
112
|
-
"type-fest": "^4.
|
|
113
|
+
"type-fest": "^4.7"
|
|
113
114
|
},
|
|
114
115
|
"devDependencies": {
|
|
115
116
|
"@mxssfd/typedoc-theme": "1.1",
|
|
@@ -149,7 +150,7 @@
|
|
|
149
150
|
"nodemailer": "^6.9",
|
|
150
151
|
"playwright": "^1.39",
|
|
151
152
|
"preact": "^10.18",
|
|
152
|
-
"preact-render-to-string": "^6.
|
|
153
|
+
"preact-render-to-string": "^6.3",
|
|
153
154
|
"undici": "^5.27",
|
|
154
155
|
"urlpattern-polyfill": "^9.0"
|
|
155
156
|
},
|
|
@@ -6,5 +6,5 @@ export type JsxTemplateRenderObject = TemplateRenderObject<'jsx', undefined, Jsx
|
|
|
6
6
|
export declare class JsxTemplateRenderer extends TemplateRenderer<'jsx', undefined> {
|
|
7
7
|
constructor();
|
|
8
8
|
canHandleType(type: string): boolean;
|
|
9
|
-
_render({ template
|
|
9
|
+
_render({ template }: JsxTemplateRenderObject, context: Record): TemplateRenderResult;
|
|
10
10
|
}
|
|
@@ -7,11 +7,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
import { jsx as _jsx } from "preact/jsx-runtime";
|
|
11
10
|
import { Singleton } from '../../injector/decorators.js';
|
|
12
|
-
import {
|
|
13
|
-
import { Component } from 'preact';
|
|
14
|
-
import { render } from 'preact-render-to-string';
|
|
11
|
+
import { renderJsx } from '../../jsx/render-to-string.js';
|
|
15
12
|
import { TemplateRenderer } from '../template.renderer.js';
|
|
16
13
|
let JsxTemplateRenderer = class JsxTemplateRenderer extends TemplateRenderer {
|
|
17
14
|
constructor() {
|
|
@@ -20,10 +17,8 @@ let JsxTemplateRenderer = class JsxTemplateRenderer extends TemplateRenderer {
|
|
|
20
17
|
canHandleType(type) {
|
|
21
18
|
return (type == 'jsx');
|
|
22
19
|
}
|
|
23
|
-
_render({ template
|
|
24
|
-
|
|
25
|
-
assertNotNull(node, 'Template returned null');
|
|
26
|
-
return render(node);
|
|
20
|
+
_render({ template }, context) {
|
|
21
|
+
return renderJsx(template, context);
|
|
27
22
|
}
|
|
28
23
|
};
|
|
29
24
|
JsxTemplateRenderer = __decorate([
|
|
@@ -31,6 +26,3 @@ JsxTemplateRenderer = __decorate([
|
|
|
31
26
|
__metadata("design:paramtypes", [])
|
|
32
27
|
], JsxTemplateRenderer);
|
|
33
28
|
export { JsxTemplateRenderer };
|
|
34
|
-
function isComponentClass(template) {
|
|
35
|
-
return Reflect.getPrototypeOf(template) == Component;
|
|
36
|
-
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NotFoundError } from '../errors/not-found.error.js';
|
|
2
|
+
import { isNull } from './type-guards.js';
|
|
3
|
+
/**
|
|
4
|
+
* Dynamically set a webmanifest
|
|
5
|
+
* Note: The link-element has to be statically added (href can be empty), otherwise it wont work.
|
|
6
|
+
*/
|
|
7
|
+
export function setWebManifest(linkSelector, manifest) {
|
|
8
|
+
const link = document.querySelector(linkSelector);
|
|
9
|
+
if (isNull(link)) {
|
|
10
|
+
throw new NotFoundError(`Link element "${linkSelector}" not found.`);
|
|
11
|
+
}
|
|
12
|
+
const manifestString = JSON.stringify(manifest);
|
|
13
|
+
const blob = new Blob([manifestString], { type: 'application/json' });
|
|
14
|
+
const manifestURL = URL.createObjectURL(blob);
|
|
15
|
+
link.setAttribute('href', manifestURL);
|
|
16
|
+
}
|
package/utils/index.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export * from './file-reader.js';
|
|
|
23
23
|
export * from './format-error.js';
|
|
24
24
|
export * from './format.js';
|
|
25
25
|
export * from './helpers.js';
|
|
26
|
+
export * from './html-link-utils.js';
|
|
26
27
|
export * from './image.js';
|
|
27
28
|
export * from './jwt.js';
|
|
28
29
|
export * from './map.js';
|
package/utils/index.js
CHANGED
|
@@ -23,6 +23,7 @@ export * from './file-reader.js';
|
|
|
23
23
|
export * from './format-error.js';
|
|
24
24
|
export * from './format.js';
|
|
25
25
|
export * from './helpers.js';
|
|
26
|
+
export * from './html-link-utils.js';
|
|
26
27
|
export * from './image.js';
|
|
27
28
|
export * from './jwt.js';
|
|
28
29
|
export * from './map.js';
|
package/utils/type/extends.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { AbstractConstructor } from '../../types.js';
|
|
2
|
-
export declare function typeExtends(type:
|
|
2
|
+
export declare function typeExtends<Type extends AbstractConstructor, Base extends Type>(type: Type, base: Base): type is Base;
|
|
3
|
+
export declare function typeExtends<Base extends AbstractConstructor>(type: AbstractConstructor, base: Base): type is Base;
|
package/utils/url-builder.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { normalizeSingleHttpValue } from '../http/types.js';
|
|
2
2
|
import { memoizeSingle } from './function/memoize.js';
|
|
3
3
|
import { isArray, isDefined, isObject, isUndefined } from './type-guards.js';
|
|
4
4
|
var UrlBuilderPartType;
|
|
@@ -44,8 +44,8 @@ export function compileUrlBuilder(url) {
|
|
|
44
44
|
throw new Error(`Url parameter ${part.value} is an object. (${url})`);
|
|
45
45
|
}
|
|
46
46
|
parsedUrl += isArray(value)
|
|
47
|
-
? value.map(
|
|
48
|
-
: normalizeSingleHttpValue(value);
|
|
47
|
+
? value.map((httpValue) => encodeURIComponent(normalizeSingleHttpValue(httpValue))).join(arraySeparator)
|
|
48
|
+
: encodeURIComponent(normalizeSingleHttpValue(value));
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
return { parsedUrl, parametersRest };
|