@tailorkit/app 0.1.0-beta.8 → 0.1.0-beta.9
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/dist/index.d.ts +48 -32
- package/dist/index.js +7 -12
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,67 +1,83 @@
|
|
|
1
1
|
import { h } from "preact";
|
|
2
2
|
import type { ComponentChild, ComponentChildren, VNode } from "preact";
|
|
3
|
-
export interface
|
|
3
|
+
export interface TailorKitViews {
|
|
4
4
|
}
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
export type
|
|
8
|
-
export type
|
|
9
|
-
export type
|
|
5
|
+
export interface TailorKitSlots {
|
|
6
|
+
}
|
|
7
|
+
export type SlotName = keyof TailorKitSlots & string;
|
|
8
|
+
export type ViewPath = Extract<keyof TailorKitViews & string, `/${string}`>;
|
|
9
|
+
export type AppViewPath = ViewPath;
|
|
10
|
+
export type ViewProps<TPath extends ViewPath> = TailorKitViews[TPath] extends object ? TailorKitViews[TPath] : Record<string, never>;
|
|
11
|
+
export type ViewPropsForPath<TPath extends AppViewPath> = TPath extends ViewPath ? ViewProps<TPath> : never;
|
|
12
|
+
export type ViewContext<TPath extends AppViewPath> = ViewPropsForPath<TPath> extends {
|
|
10
13
|
context: infer TContext;
|
|
11
14
|
} ? TContext : Record<string, never>;
|
|
12
15
|
export type View<TProps extends object = Record<string, never>> = (props: TProps) => ComponentChild;
|
|
13
|
-
export type
|
|
14
|
-
context:
|
|
15
|
-
|
|
16
|
+
export type ViewRuntimeProps<TPath extends AppViewPath> = {
|
|
17
|
+
context: ViewContext<TPath>;
|
|
18
|
+
view: TPath;
|
|
16
19
|
status: "ready";
|
|
17
20
|
} | {
|
|
18
21
|
context?: never;
|
|
19
|
-
|
|
22
|
+
view: TPath;
|
|
20
23
|
status: "loading";
|
|
21
24
|
} | {
|
|
22
25
|
context?: never;
|
|
23
|
-
|
|
26
|
+
view: TPath;
|
|
24
27
|
status: "error";
|
|
25
28
|
};
|
|
26
|
-
export interface
|
|
27
|
-
component: View<
|
|
29
|
+
export interface ViewDefinition<TPath extends AppViewPath = AppViewPath> {
|
|
30
|
+
component: View<ViewRuntimeProps<TPath>>;
|
|
28
31
|
path: TPath;
|
|
29
|
-
useContext: () =>
|
|
32
|
+
useContext: () => ViewContext<TPath>;
|
|
30
33
|
}
|
|
31
|
-
type
|
|
32
|
-
[TPath in
|
|
34
|
+
type RegisteredViews = {
|
|
35
|
+
[TPath in AppViewPath]: ViewDefinition<TPath>;
|
|
36
|
+
};
|
|
37
|
+
type ViewDefinitions = Partial<{
|
|
38
|
+
[P in AppViewPath]: RegisteredViews[P] | false;
|
|
39
|
+
}>;
|
|
40
|
+
type InvalidViewPath<TViews> = Exclude<keyof TViews & string, AppViewPath>;
|
|
41
|
+
type RequireViewPaths<TViews> = InvalidViewPath<TViews> extends never ? unknown : {
|
|
42
|
+
readonly __tailorkit_error__: `View paths must be declared by the host. Invalid view: ${InvalidViewPath<TViews>}`;
|
|
33
43
|
};
|
|
34
|
-
type
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
44
|
+
type ViewKeyPathMismatch<TViews> = {
|
|
45
|
+
[TPath in keyof TViews & string]: TViews[TPath] extends false ? never : TViews[TPath] extends ViewDefinition<infer TViewPath> ? TViewPath extends TPath ? never : TPath : TPath;
|
|
46
|
+
}[keyof TViews & string];
|
|
47
|
+
type RequireMatchingViewKeys<TViews> = ViewKeyPathMismatch<TViews> extends never ? unknown : {
|
|
48
|
+
readonly __tailorkit_error__: `View key must match createView path. Invalid view: ${ViewKeyPathMismatch<TViews>}`;
|
|
38
49
|
};
|
|
39
|
-
type
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
type RequireMatchingScreenKeys<TScreens> = ScreenKeyPathMismatch<TScreens> extends never ? unknown : {
|
|
43
|
-
readonly __tailorkit_error__: `Screen key must match createScreen path. Invalid screen: ${ScreenKeyPathMismatch<TScreens>}`;
|
|
50
|
+
export type SlotView<TSlot extends SlotName> = Extract<TailorKitSlots[TSlot], AppViewPath>;
|
|
51
|
+
type SlotDefinitions = {
|
|
52
|
+
[V in SlotName]?: Pick<ViewDefinitions, SlotView<V>>;
|
|
44
53
|
};
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
type RequireSlotViews<V, S> = V extends SlotName ? Exclude<keyof S, SlotView<V>> extends never ? unknown : {
|
|
55
|
+
readonly __tailorkit_error__: "View is not supported by this slot";
|
|
56
|
+
} : never;
|
|
57
|
+
export interface TailorKitClient<TSlots extends SlotDefinitions = SlotDefinitions> {
|
|
58
|
+
slots: TSlots;
|
|
47
59
|
}
|
|
48
60
|
export interface TailorKitClientMeta {
|
|
49
61
|
preactVersion: string;
|
|
50
62
|
}
|
|
51
63
|
export interface TailorKitClientRuntime {
|
|
52
64
|
h: typeof h;
|
|
53
|
-
render: (vnode: VNode, parent: Element | Document | ShadowRoot | DocumentFragment) => void;
|
|
65
|
+
render: (vnode: VNode | null, parent: Element | Document | ShadowRoot | DocumentFragment) => void;
|
|
54
66
|
}
|
|
55
|
-
export type TailorKitClientWithMeta<
|
|
67
|
+
export type TailorKitClientWithMeta<TViews extends SlotDefinitions = SlotDefinitions> = TailorKitClient<TViews> & {
|
|
56
68
|
$meta: TailorKitClientMeta;
|
|
57
69
|
$runtime: TailorKitClientRuntime;
|
|
58
70
|
};
|
|
59
|
-
export declare const
|
|
71
|
+
export declare const createView: <const TPath extends AppViewPath>(path: TPath, options: {
|
|
60
72
|
component: View<Record<string, never>>;
|
|
61
73
|
error?: View<Record<string, never>>;
|
|
62
74
|
loading?: View<Record<string, never>>;
|
|
63
|
-
}) =>
|
|
64
|
-
export declare const defineClient: <const
|
|
75
|
+
}) => ViewDefinition<TPath>;
|
|
76
|
+
export declare const defineClient: <const TSlots extends SlotDefinitions>(client: TailorKitClient<TSlots> & {
|
|
77
|
+
slots: { [V in keyof TSlots]: TSlots[V] & RequireViewPaths<TSlots[V]> & RequireMatchingViewKeys<TSlots[V]> & RequireSlotViews<V, TSlots[V]>; };
|
|
78
|
+
} & (Exclude<keyof TSlots, SlotName> extends never ? unknown : {
|
|
79
|
+
__tailorkit_error__: "Unknown slot";
|
|
80
|
+
})) => TailorKitClientWithMeta<TSlots>;
|
|
65
81
|
export declare const createRemoteComponent: <TProps extends object, TChildren extends boolean = false>(name: string, options?: {
|
|
66
82
|
callbacks?: Record<string, number>;
|
|
67
83
|
children?: TChildren;
|
package/dist/index.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import { createContext, h, render } from "preact";
|
|
3
3
|
import { useContext } from "preact/hooks";
|
|
4
4
|
var preactVersion = "10.29.8";
|
|
5
|
-
var
|
|
5
|
+
var createView = (path, options) => {
|
|
6
6
|
const Context = createContext(null);
|
|
7
|
-
const
|
|
7
|
+
const View = (props) => {
|
|
8
8
|
if (props.status === "loading") {
|
|
9
9
|
return options.loading ? h(options.loading, {}) : null;
|
|
10
10
|
}
|
|
@@ -18,12 +18,12 @@ var createScreen = (path, options) => {
|
|
|
18
18
|
);
|
|
19
19
|
};
|
|
20
20
|
return {
|
|
21
|
-
component:
|
|
21
|
+
component: View,
|
|
22
22
|
path,
|
|
23
23
|
useContext: () => {
|
|
24
24
|
const context = useContext(Context);
|
|
25
25
|
if (context === null) {
|
|
26
|
-
throw new Error(`
|
|
26
|
+
throw new Error(`View context is only available while rendering "${path}".`);
|
|
27
27
|
}
|
|
28
28
|
return context;
|
|
29
29
|
}
|
|
@@ -31,13 +31,8 @@ var createScreen = (path, options) => {
|
|
|
31
31
|
};
|
|
32
32
|
var defineClient = (client) => ({
|
|
33
33
|
...client,
|
|
34
|
-
$meta: {
|
|
35
|
-
|
|
36
|
-
},
|
|
37
|
-
$runtime: {
|
|
38
|
-
h,
|
|
39
|
-
render
|
|
40
|
-
}
|
|
34
|
+
$meta: { preactVersion },
|
|
35
|
+
$runtime: { h, render }
|
|
41
36
|
});
|
|
42
37
|
var componentTagPrefix = "tailorkit-";
|
|
43
38
|
var toComponentTagName = (name) => `${componentTagPrefix}${name.replaceAll(/([a-z0-9])([A-Z])/gu, "$1-$2").replaceAll(/[\s_]+/gu, "-").toLowerCase()}`;
|
|
@@ -73,6 +68,6 @@ var createRemoteComponent = (name, options = {}) => {
|
|
|
73
68
|
};
|
|
74
69
|
export {
|
|
75
70
|
createRemoteComponent,
|
|
76
|
-
|
|
71
|
+
createView,
|
|
77
72
|
defineClient
|
|
78
73
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tailorkit/app",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.9",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@tailorkit/core": "0.1.0-beta.
|
|
36
|
+
"@tailorkit/core": "0.1.0-beta.9",
|
|
37
37
|
"cosmiconfig": "^10.0.0",
|
|
38
38
|
"vite": "^8.2.2",
|
|
39
39
|
"zod": "^4.4.3"
|