structured-fw 1.3.4 → 1.4.0
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/README.md
CHANGED
|
@@ -444,13 +444,23 @@ That was the simplest possible example, let's make it more interesting by adding
|
|
|
444
444
|
### Component server-side code
|
|
445
445
|
Create a new file `/app/views/HelloWorld/HelloWorld.ts` (server side component code):
|
|
446
446
|
```
|
|
447
|
-
import {
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
447
|
+
import { Application } from 'structured-fw/Application';
|
|
448
|
+
import { ComponentScaffold, RequestContext } from 'structured-fw/Types';
|
|
449
|
+
|
|
450
|
+
type ComponentInput = {
|
|
451
|
+
name: string,
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
type ComponentOutput = {
|
|
455
|
+
greetName: string,
|
|
456
|
+
luckyNumber: number,
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
export default class HelloWorld implements ComponentScaffold<ComponentInput, ComponentOutput> {
|
|
460
|
+
async getData(data: ComponentInput, ctx: RequestContext, app: Application): Promise<ComponentOutput> {
|
|
452
461
|
return {
|
|
453
|
-
|
|
462
|
+
greetName: data.name,
|
|
463
|
+
luckyNumber: this.num(),
|
|
454
464
|
}
|
|
455
465
|
}
|
|
456
466
|
|
|
@@ -462,7 +472,7 @@ export default class HelloWorld implements ComponentScaffold {
|
|
|
462
472
|
|
|
463
473
|
Update `HelloWorld.html`:
|
|
464
474
|
```
|
|
465
|
-
Hello,
|
|
475
|
+
Hello, {{greetName}}!<br>
|
|
466
476
|
Your lucky number is {{luckyNumber}}
|
|
467
477
|
```
|
|
468
478
|
|
|
@@ -60,7 +60,7 @@ export declare class ClientComponent extends EventEmitter {
|
|
|
60
60
|
private destroy;
|
|
61
61
|
remove(): Promise<void>;
|
|
62
62
|
bind<T extends any>(element: ClientComponent, event: string, callback: EventEmitterCallback<T>): void;
|
|
63
|
-
bind<T extends LooseObject | undefined>(element: HTMLElement | Window | Array<HTMLElement | Window>, event: keyof HTMLElementEventMap | Array<keyof HTMLElementEventMap>, callback: ClientComponentEventCallback<T>): void;
|
|
63
|
+
bind<T extends LooseObject | undefined, Evt extends Event = Event>(element: HTMLElement | Window | Array<HTMLElement | Window>, event: keyof HTMLElementEventMap | Array<keyof HTMLElementEventMap>, callback: ClientComponentEventCallback<T, Evt>): void;
|
|
64
64
|
unbind<T extends LooseObject | undefined = undefined>(element: HTMLElement | Window | ClientComponent, event: keyof HTMLElementEventMap | Array<keyof HTMLElementEventMap>, callback: ClientComponentEventCallback<T> | EventEmitterCallback<T>): void;
|
|
65
65
|
private unbindOwn;
|
|
66
66
|
private unbindAll;
|
|
@@ -17,9 +17,9 @@ export declare class Document extends Component<{
|
|
|
17
17
|
initializers: Initializers;
|
|
18
18
|
initializersInitialized: boolean;
|
|
19
19
|
componentIds: Array<string>;
|
|
20
|
-
ctx:
|
|
20
|
+
ctx: RequestContext;
|
|
21
21
|
appendHTML: string;
|
|
22
|
-
constructor(app: Application, title: string, ctx
|
|
22
|
+
constructor(app: Application, title: string, ctx: RequestContext<any>);
|
|
23
23
|
push(response: ServerResponse): void;
|
|
24
24
|
body(): string;
|
|
25
25
|
initInitializers(): Record<string, string>;
|
|
@@ -26,15 +26,14 @@ export type ComponentEntry = {
|
|
|
26
26
|
attributes?: Record<string, string>;
|
|
27
27
|
initializer?: InitializerFunction;
|
|
28
28
|
};
|
|
29
|
-
export interface ComponentScaffold<
|
|
29
|
+
export interface ComponentScaffold<I extends LooseObject = LooseObject, O extends LooseObject = LooseObject, K extends KeysOfUnion<O> = KeysOfUnion<O>> {
|
|
30
30
|
tagName?: string;
|
|
31
31
|
exportData?: boolean;
|
|
32
32
|
exportFields?: ReadonlyArray<K>;
|
|
33
33
|
static?: boolean;
|
|
34
|
-
deferred?: (data: Record<string, any>, ctx: RequestContext
|
|
34
|
+
deferred?: (data: Record<string, any>, ctx: RequestContext, app: Application) => boolean;
|
|
35
35
|
attributes?: Record<string, string>;
|
|
36
|
-
getData: (this: ComponentScaffold, data:
|
|
37
|
-
[key: string]: any;
|
|
36
|
+
getData: (this: ComponentScaffold<I, O>, data: I, ctx: RequestContext, app: Application, component: Component) => Promise<O | void>;
|
|
38
37
|
}
|
|
39
38
|
export type ComponentEvents = {
|
|
40
39
|
componentCreated: Component;
|
|
@@ -47,13 +46,13 @@ export type ClientComponentTransition = {
|
|
|
47
46
|
};
|
|
48
47
|
export type ClientComponentTransitionEvent = 'show' | 'hide';
|
|
49
48
|
export type ClientComponentTransitions = Record<ClientComponentTransitionEvent, ClientComponentTransition>;
|
|
50
|
-
export type ClientComponentBoundEvent<
|
|
51
|
-
element:
|
|
49
|
+
export type ClientComponentBoundEvent<Data extends LooseObject | undefined, Element extends HTMLElement | Window | ClientComponent, Evt extends Event = Event> = {
|
|
50
|
+
element: Element;
|
|
52
51
|
event: keyof HTMLElementEventMap;
|
|
53
|
-
callback:
|
|
54
|
-
callbackOriginal:
|
|
52
|
+
callback: Element extends ClientComponent ? EventEmitterCallback<Data> : (e: Event) => void;
|
|
53
|
+
callbackOriginal: Element extends ClientComponent ? EventEmitterCallback<Data> : ClientComponentEventCallback<Data, Evt>;
|
|
55
54
|
};
|
|
56
|
-
export type ClientComponentEventCallback<T> = (e:
|
|
55
|
+
export type ClientComponentEventCallback<T, E extends Event = Event> = (e: E, data: T, element: HTMLElement | Window) => void;
|
|
57
56
|
export type InitializerFunction = (this: ClientComponent, ctx: InitializerFunctionContext) => Promise<void>;
|
|
58
57
|
export type Initializers = {
|
|
59
58
|
[key: string]: InitializerFunction;
|
package/package.json
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"type": "module",
|
|
21
21
|
"main": "build/index",
|
|
22
|
-
"version": "1.
|
|
22
|
+
"version": "1.4.0",
|
|
23
23
|
"scripts": {
|
|
24
24
|
"develop": "tsc --watch",
|
|
25
25
|
"startDev": "cd build && nodemon --watch '../app/**/*' --watch '../build/**/*' -e js,html,hbs,css index.js",
|