glass-easel 0.1.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 +40 -0
- package/dist/glass_easel.all.d.ts +1 -0
- package/dist/glass_easel.all.js +2 -0
- package/dist/glass_easel.all.js.map +1 -0
- package/dist/glass_easel.domlike.global.d.ts +1 -0
- package/dist/glass_easel.domlike.global.js +2 -0
- package/dist/glass_easel.domlike.global.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/types/src/backend/backend_protocol.d.ts +119 -0
- package/dist/types/src/backend/backend_protocol.d.ts.map +1 -0
- package/dist/types/src/backend/composed_backend_protocol.d.ts +90 -0
- package/dist/types/src/backend/composed_backend_protocol.d.ts.map +1 -0
- package/dist/types/src/backend/domlike_backend_protocol.d.ts +76 -0
- package/dist/types/src/backend/domlike_backend_protocol.d.ts.map +1 -0
- package/dist/types/src/backend/mode.d.ts +46 -0
- package/dist/types/src/backend/mode.d.ts.map +1 -0
- package/dist/types/src/backend/suggested_backend_protocol.d.ts +30 -0
- package/dist/types/src/backend/suggested_backend_protocol.d.ts.map +1 -0
- package/dist/types/src/behavior.d.ts +428 -0
- package/dist/types/src/behavior.d.ts.map +1 -0
- package/dist/types/src/class_list.d.ts +79 -0
- package/dist/types/src/class_list.d.ts.map +1 -0
- package/dist/types/src/component.d.ts +291 -0
- package/dist/types/src/component.d.ts.map +1 -0
- package/dist/types/src/component_params.d.ts +239 -0
- package/dist/types/src/component_params.d.ts.map +1 -0
- package/dist/types/src/component_space.d.ts +164 -0
- package/dist/types/src/component_space.d.ts.map +1 -0
- package/dist/types/src/data_path.d.ts +5 -0
- package/dist/types/src/data_path.d.ts.map +1 -0
- package/dist/types/src/data_proxy.d.ts +107 -0
- package/dist/types/src/data_proxy.d.ts.map +1 -0
- package/dist/types/src/data_utils.d.ts +3 -0
- package/dist/types/src/data_utils.d.ts.map +1 -0
- package/dist/types/src/element.d.ts +275 -0
- package/dist/types/src/element.d.ts.map +1 -0
- package/dist/types/src/element_iterator.d.ts +43 -0
- package/dist/types/src/element_iterator.d.ts.map +1 -0
- package/dist/types/src/event.d.ts +104 -0
- package/dist/types/src/event.d.ts.map +1 -0
- package/dist/types/src/external_shadow_tree.d.ts +20 -0
- package/dist/types/src/external_shadow_tree.d.ts.map +1 -0
- package/dist/types/src/func_arr.d.ts +39 -0
- package/dist/types/src/func_arr.d.ts.map +1 -0
- package/dist/types/src/global_options.d.ts +111 -0
- package/dist/types/src/global_options.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +43 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/mutation_observer.d.ts +79 -0
- package/dist/types/src/mutation_observer.d.ts.map +1 -0
- package/dist/types/src/native_node.d.ts +8 -0
- package/dist/types/src/native_node.d.ts.map +1 -0
- package/dist/types/src/node.d.ts +49 -0
- package/dist/types/src/node.d.ts.map +1 -0
- package/dist/types/src/relation.d.ts +47 -0
- package/dist/types/src/relation.d.ts.map +1 -0
- package/dist/types/src/render.d.ts +3 -0
- package/dist/types/src/render.d.ts.map +1 -0
- package/dist/types/src/selector.d.ts +32 -0
- package/dist/types/src/selector.d.ts.map +1 -0
- package/dist/types/src/shadow_root.d.ts +136 -0
- package/dist/types/src/shadow_root.d.ts.map +1 -0
- package/dist/types/src/template_engine.d.ts +18 -0
- package/dist/types/src/template_engine.d.ts.map +1 -0
- package/dist/types/src/text_node.d.ts +32 -0
- package/dist/types/src/text_node.d.ts.map +1 -0
- package/dist/types/src/tmpl/index.d.ts +18 -0
- package/dist/types/src/tmpl/index.d.ts.map +1 -0
- package/dist/types/src/tmpl/native_rendering.d.ts +45 -0
- package/dist/types/src/tmpl/native_rendering.d.ts.map +1 -0
- package/dist/types/src/tmpl/proc_gen_wrapper.d.ts +80 -0
- package/dist/types/src/tmpl/proc_gen_wrapper.d.ts.map +1 -0
- package/dist/types/src/tmpl/proc_gen_wrapper_dom.d.ts +50 -0
- package/dist/types/src/tmpl/proc_gen_wrapper_dom.d.ts.map +1 -0
- package/dist/types/src/tmpl/range_list_diff.d.ts +19 -0
- package/dist/types/src/tmpl/range_list_diff.d.ts.map +1 -0
- package/dist/types/src/trait_behaviors.d.ts +38 -0
- package/dist/types/src/trait_behaviors.d.ts.map +1 -0
- package/dist/types/src/virtual_node.d.ts +10 -0
- package/dist/types/src/virtual_node.d.ts.map +1 -0
- package/dist/types/tests/backend/domlike.test.d.ts +2 -0
- package/dist/types/tests/backend/domlike.test.d.ts.map +1 -0
- package/dist/types/tests/base/env.d.ts +29 -0
- package/dist/types/tests/base/env.d.ts.map +1 -0
- package/dist/types/tests/base/match.d.ts +9 -0
- package/dist/types/tests/base/match.d.ts.map +1 -0
- package/dist/types/tests/core/backend.test.d.ts +2 -0
- package/dist/types/tests/core/backend.test.d.ts.map +1 -0
- package/dist/types/tests/core/behavior.test.d.ts +2 -0
- package/dist/types/tests/core/behavior.test.d.ts.map +1 -0
- package/dist/types/tests/core/component_space.test.d.ts +2 -0
- package/dist/types/tests/core/component_space.test.d.ts.map +1 -0
- package/dist/types/tests/core/data_update.test.d.ts +2 -0
- package/dist/types/tests/core/data_update.test.d.ts.map +1 -0
- package/dist/types/tests/core/misc.test.d.ts +2 -0
- package/dist/types/tests/core/misc.test.d.ts.map +1 -0
- package/dist/types/tests/core/placeholder.test.d.ts +2 -0
- package/dist/types/tests/core/placeholder.test.d.ts.map +1 -0
- package/dist/types/tests/core/slot.test.d.ts +2 -0
- package/dist/types/tests/core/slot.test.d.ts.map +1 -0
- package/dist/types/tests/core/trait_behaviors.test.d.ts +2 -0
- package/dist/types/tests/core/trait_behaviors.test.d.ts.map +1 -0
- package/dist/types/tests/tmpl/binding_map.test.d.ts +2 -0
- package/dist/types/tests/tmpl/binding_map.test.d.ts.map +1 -0
- package/dist/types/tests/tmpl/event.test.d.ts +2 -0
- package/dist/types/tests/tmpl/event.test.d.ts.map +1 -0
- package/dist/types/tests/tmpl/expression.test.d.ts +2 -0
- package/dist/types/tests/tmpl/expression.test.d.ts.map +1 -0
- package/dist/types/tests/tmpl/lvalue.test.d.ts +2 -0
- package/dist/types/tests/tmpl/lvalue.test.d.ts.map +1 -0
- package/dist/types/tests/tmpl/native_rendering.test.d.ts +2 -0
- package/dist/types/tests/tmpl/native_rendering.test.d.ts.map +1 -0
- package/dist/types/tests/tmpl/structure.test.d.ts +2 -0
- package/dist/types/tests/tmpl/structure.test.d.ts.map +1 -0
- package/dist/types/tests/types/chaining.test.d.ts +2 -0
- package/dist/types/tests/types/chaining.test.d.ts.map +1 -0
- package/dist/types/tests/types/createElement.test.d.ts +2 -0
- package/dist/types/tests/types/createElement.test.d.ts.map +1 -0
- package/dist/types/tests/types/definition.test.d.ts +2 -0
- package/dist/types/tests/types/definition.test.d.ts.map +1 -0
- package/guide/zh_CN/advanced/binding_map_update.md +32 -0
- package/guide/zh_CN/advanced/build_args.md +28 -0
- package/guide/zh_CN/advanced/component_filter.md +70 -0
- package/guide/zh_CN/advanced/component_space.md +124 -0
- package/guide/zh_CN/advanced/custom_backend.md +53 -0
- package/guide/zh_CN/advanced/error_listener.md +32 -0
- package/guide/zh_CN/advanced/external_component.md +73 -0
- package/guide/zh_CN/advanced/template_engine.md +61 -0
- package/guide/zh_CN/appendix/backend_protocol.md +501 -0
- package/guide/zh_CN/appendix/list_diff_algorithm.md +406 -0
- package/guide/zh_CN/basic/beginning.md +94 -0
- package/guide/zh_CN/basic/component.md +156 -0
- package/guide/zh_CN/basic/event.md +169 -0
- package/guide/zh_CN/basic/lifetime.md +66 -0
- package/guide/zh_CN/basic/method.md +62 -0
- package/guide/zh_CN/basic/template.md +135 -0
- package/guide/zh_CN/data_management/advanced_update.md +170 -0
- package/guide/zh_CN/data_management/data_deep_copy.md +157 -0
- package/guide/zh_CN/data_management/data_observer.md +154 -0
- package/guide/zh_CN/data_management/property_early_init.md +31 -0
- package/guide/zh_CN/data_management/pure_data_pattern.md +21 -0
- package/guide/zh_CN/index.md +93 -0
- package/guide/zh_CN/interaction/behavior.md +52 -0
- package/guide/zh_CN/interaction/component_path.md +37 -0
- package/guide/zh_CN/interaction/generic.md +73 -0
- package/guide/zh_CN/interaction/placeholder.md +40 -0
- package/guide/zh_CN/interaction/relation.md +151 -0
- package/guide/zh_CN/interaction/slot.md +137 -0
- package/guide/zh_CN/interaction/template_import.md +94 -0
- package/guide/zh_CN/interaction/trait_behavior.md +117 -0
- package/guide/zh_CN/styling/external_class.md +46 -0
- package/guide/zh_CN/styling/style_isolation.md +54 -0
- package/guide/zh_CN/styling/virtual_host.md +52 -0
- package/guide/zh_CN/tree/element_iterator.md +54 -0
- package/guide/zh_CN/tree/mutation_observer.md +52 -0
- package/guide/zh_CN/tree/node_tree.md +142 -0
- package/guide/zh_CN/tree/node_tree_modification.md +78 -0
- package/guide/zh_CN/tree/selector.md +66 -0
- package/jest.config.js +6 -0
- package/jest.dts.config.js +9 -0
- package/jest.unit.config.js +14 -0
- package/package.json +28 -0
- package/src/backend/backend_protocol.ts +313 -0
- package/src/backend/composed_backend_protocol.ts +252 -0
- package/src/backend/domlike_backend_protocol.ts +370 -0
- package/src/backend/mode.ts +51 -0
- package/src/backend/suggested_backend_protocol.ts +83 -0
- package/src/behavior.ts +1655 -0
- package/src/bootstrap_dom_dev.js +22 -0
- package/src/class_list.ts +376 -0
- package/src/component.ts +1309 -0
- package/src/component_params.ts +461 -0
- package/src/component_space.ts +547 -0
- package/src/data_path.ts +225 -0
- package/src/data_proxy.ts +670 -0
- package/src/data_utils.ts +50 -0
- package/src/element.ts +1966 -0
- package/src/element_iterator.ts +158 -0
- package/src/event.ts +401 -0
- package/src/external_shadow_tree.ts +27 -0
- package/src/func_arr.ts +198 -0
- package/src/global_options.ts +242 -0
- package/src/index.ts +187 -0
- package/src/mutation_observer.ts +252 -0
- package/src/native_node.ts +74 -0
- package/src/node.ts +174 -0
- package/src/relation.ts +380 -0
- package/src/render.ts +25 -0
- package/src/selector.ts +218 -0
- package/src/shadow_root.ts +766 -0
- package/src/template_engine.ts +45 -0
- package/src/text_node.ts +149 -0
- package/src/tmpl/index.ts +199 -0
- package/src/tmpl/native_rendering.ts +175 -0
- package/src/tmpl/proc_gen_wrapper.ts +954 -0
- package/src/tmpl/proc_gen_wrapper_dom.ts +230 -0
- package/src/tmpl/range_list_diff.ts +443 -0
- package/src/trait_behaviors.ts +51 -0
- package/src/virtual_node.ts +51 -0
- package/tests/backend/domlike.test.ts +254 -0
- package/tests/base/env.ts +78 -0
- package/tests/base/match.ts +185 -0
- package/tests/core/backend.test.ts +144 -0
- package/tests/core/behavior.test.ts +546 -0
- package/tests/core/component_space.test.ts +212 -0
- package/tests/core/data_update.test.ts +461 -0
- package/tests/core/misc.test.ts +339 -0
- package/tests/core/placeholder.test.ts +180 -0
- package/tests/core/slot.test.ts +1495 -0
- package/tests/core/trait_behaviors.test.ts +153 -0
- package/tests/legacy/README.md +3 -0
- package/tests/legacy/behavior.test.js +293 -0
- package/tests/legacy/component.test.js +1247 -0
- package/tests/legacy/data_path.test.js +149 -0
- package/tests/legacy/data_proxy.test.js +759 -0
- package/tests/legacy/element_iterator.test.js +148 -0
- package/tests/legacy/event.test.js +849 -0
- package/tests/legacy/external.test.js +510 -0
- package/tests/legacy/extra_info.test.js +109 -0
- package/tests/legacy/generics.test.js +176 -0
- package/tests/legacy/mutation_observer.test.js +210 -0
- package/tests/legacy/relation.test.js +517 -0
- package/tests/legacy/selector.test.js +263 -0
- package/tests/legacy/slot.test.js +915 -0
- package/tests/legacy/virtual.test.js +394 -0
- package/tests/tmpl/binding_map.test.ts +208 -0
- package/tests/tmpl/event.test.ts +206 -0
- package/tests/tmpl/expression.test.ts +429 -0
- package/tests/tmpl/lvalue.test.ts +160 -0
- package/tests/tmpl/native_rendering.test.ts +155 -0
- package/tests/tmpl/structure.test.ts +998 -0
- package/tests/types/chaining.test.ts +614 -0
- package/tests/types/createElement.test.ts +82 -0
- package/tests/types/definition.test.ts +442 -0
- package/tsconfig.json +11 -0
- package/webpack.config.js +270 -0
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
import {
|
|
2
|
+
GeneralBehavior,
|
|
3
|
+
Component,
|
|
4
|
+
GeneralComponentDefinition,
|
|
5
|
+
ComponentOptions,
|
|
6
|
+
GeneralComponent,
|
|
7
|
+
GeneralBehaviorBuilder,
|
|
8
|
+
} from '.'
|
|
9
|
+
import { TraitBehavior } from './trait_behaviors'
|
|
10
|
+
|
|
11
|
+
export type Empty = Record<never, never>;
|
|
12
|
+
|
|
13
|
+
export type NewField<TObject, TField extends string, TValueType> = Extract<
|
|
14
|
+
keyof TObject,
|
|
15
|
+
TField
|
|
16
|
+
> extends never
|
|
17
|
+
? TValueType
|
|
18
|
+
: never;
|
|
19
|
+
|
|
20
|
+
export type NewFieldList<TObject, TNewObject> = Extract<
|
|
21
|
+
keyof TObject,
|
|
22
|
+
keyof TNewObject
|
|
23
|
+
> extends never
|
|
24
|
+
? TNewObject
|
|
25
|
+
: never;
|
|
26
|
+
|
|
27
|
+
export type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <
|
|
28
|
+
T
|
|
29
|
+
>() => T extends Y ? 1 : 2
|
|
30
|
+
? true
|
|
31
|
+
: false;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* UnionToIntersection<'foo' | 42 | true> = 'foo' & 42 & true
|
|
35
|
+
* UnionToIntersection<(() => 'foo') | ((i: 42) => true)> = (() => 'foo') & ((i: 42) => true)
|
|
36
|
+
*/
|
|
37
|
+
export type UnionToIntersection<T> = (
|
|
38
|
+
T extends unknown ? (arg: T) => void : never
|
|
39
|
+
) extends (args: infer Arg) => void
|
|
40
|
+
? Arg
|
|
41
|
+
: never;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Merge<{ foo: string }, { bar: number }> = { foo: string, bar: number }
|
|
45
|
+
*/
|
|
46
|
+
export type Merge<U> = U extends infer T ? { [K in keyof T]: T[K] } : never;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* IsAny<any> = true
|
|
50
|
+
* IsAny<{}> = false
|
|
51
|
+
*/
|
|
52
|
+
export type IsAny<T> = (<S>(S: S) => S extends T ? 1 : 2) extends <R>(
|
|
53
|
+
R: R
|
|
54
|
+
) => R extends any ? 1 : 2
|
|
55
|
+
? true
|
|
56
|
+
: false;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* IsNever<never> = true
|
|
60
|
+
* IsNever<unknown> = false
|
|
61
|
+
* IsNever<any> = false
|
|
62
|
+
*/
|
|
63
|
+
export type IsNever<T> = [T] extends [never] ? true : false;
|
|
64
|
+
|
|
65
|
+
type SetDataStringPath<K extends string | number, Prefix extends string> = [
|
|
66
|
+
Prefix
|
|
67
|
+
] extends [never]
|
|
68
|
+
? `${K}`
|
|
69
|
+
: K extends number
|
|
70
|
+
? `${Prefix}[${K}]`
|
|
71
|
+
: `${Prefix}.${K}`;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* SetDataSetter<{ name: string; foo: { bar: number } }> = {
|
|
75
|
+
* name: string,
|
|
76
|
+
* foo: { bar: number },
|
|
77
|
+
* 'foo.bar': number,
|
|
78
|
+
* }
|
|
79
|
+
* setDataSetter<{ list: number[], foo: { bar: number }[]}> = {
|
|
80
|
+
* list: number[],
|
|
81
|
+
* `list[${number}]`: number,
|
|
82
|
+
* foo: { bar: number }[],
|
|
83
|
+
* `foo[${number}]`: { bar: number }[],
|
|
84
|
+
* `foo[${number}].bar`: number,
|
|
85
|
+
* }
|
|
86
|
+
*/
|
|
87
|
+
export type SetDataSetter<
|
|
88
|
+
T,
|
|
89
|
+
Prefix extends string = never
|
|
90
|
+
> = IsAny<T> extends true
|
|
91
|
+
? Record<SetDataStringPath<any, Prefix>, T>
|
|
92
|
+
: UnionToIntersection<
|
|
93
|
+
T extends any[]
|
|
94
|
+
? {
|
|
95
|
+
[P in keyof T & number]: SetDataSetter<
|
|
96
|
+
T[P],
|
|
97
|
+
SetDataStringPath<P, Prefix>
|
|
98
|
+
> &
|
|
99
|
+
Record<SetDataStringPath<P, Prefix>, T[P]>;
|
|
100
|
+
}[keyof T & number]
|
|
101
|
+
: T extends Record<string | number, any>
|
|
102
|
+
? {
|
|
103
|
+
[P in keyof T & (string | number)]: SetDataSetter<
|
|
104
|
+
T[P],
|
|
105
|
+
SetDataStringPath<P, Prefix>
|
|
106
|
+
> &
|
|
107
|
+
Record<SetDataStringPath<P, Prefix>, T[P]>;
|
|
108
|
+
}[keyof T & (string | number)]
|
|
109
|
+
: never
|
|
110
|
+
>;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* DeepReadonly<{ foo: { bar: number } }> = {
|
|
114
|
+
* readonly foo: {
|
|
115
|
+
* readonly bar: number
|
|
116
|
+
* }
|
|
117
|
+
* }
|
|
118
|
+
*/
|
|
119
|
+
export type DeepReadonly<T> = T extends Record<any, any>
|
|
120
|
+
? T extends (...args: any[]) => any
|
|
121
|
+
? T
|
|
122
|
+
: { readonly [P in keyof T]: DeepReadonly<T[P]> }
|
|
123
|
+
: T;
|
|
124
|
+
|
|
125
|
+
export type PublicFields<T> = {
|
|
126
|
+
[K in keyof T as K extends `_$${any}` ? never : K]: T[K];
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* ObjectKeyPaths<{ name: string; age: number }> = 'name' | 'age'
|
|
131
|
+
* ObjectKeyPaths<{
|
|
132
|
+
* refCount: number;
|
|
133
|
+
* person: { name: string; age: number };
|
|
134
|
+
* }> = 'refCount' | 'person' | 'person.name' | 'person.age'
|
|
135
|
+
* ObjectKeyPaths<{ books: [{ name: string; price: number }] }> =
|
|
136
|
+
* 'books' | `books[${number}]` | `books[${number}].name` | `books[${number}].price`
|
|
137
|
+
*/
|
|
138
|
+
export type ObjectDataPathStrings<
|
|
139
|
+
T,
|
|
140
|
+
Prefix extends string = never
|
|
141
|
+
> = IsAny<T> extends true
|
|
142
|
+
? SetDataStringPath<any, Prefix>
|
|
143
|
+
: T extends any[]
|
|
144
|
+
? {
|
|
145
|
+
[P in keyof T & number]:
|
|
146
|
+
| SetDataStringPath<P, Prefix>
|
|
147
|
+
| ObjectDataPathStrings<T[P], SetDataStringPath<P, Prefix>>;
|
|
148
|
+
}[keyof T & number]
|
|
149
|
+
: T extends Record<string | number, any>
|
|
150
|
+
? {
|
|
151
|
+
[P in keyof T & (string | number)]:
|
|
152
|
+
| SetDataStringPath<P, Prefix>
|
|
153
|
+
| ObjectDataPathStrings<T[P], SetDataStringPath<P, Prefix>>;
|
|
154
|
+
}[keyof T & (string | number)]
|
|
155
|
+
: Prefix;
|
|
156
|
+
|
|
157
|
+
export type ObserverDataPathStrings<
|
|
158
|
+
T,
|
|
159
|
+
S extends string = ObjectDataPathStrings<T>
|
|
160
|
+
> = '**' | S | `${S}.**`;
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* GetFromDataPathString<{ name: string; age: number }, 'name'> = string
|
|
164
|
+
* GetFromDataPathString<{ person: { name: string; age: number } }, 'person.name'> = string
|
|
165
|
+
* GetFromDataPathString<{ books: [{ name: string; price: number }] }, 'books[0].name'> = string
|
|
166
|
+
*/
|
|
167
|
+
export type GetFromDataPathString<T, P extends string> = P extends keyof T
|
|
168
|
+
? T[P]
|
|
169
|
+
: P extends ''
|
|
170
|
+
? T
|
|
171
|
+
: P extends `[${infer K extends keyof T & number}].${infer R}`
|
|
172
|
+
? GetFromDataPathString<T[K], R>
|
|
173
|
+
: P extends `[${infer K extends keyof T & number}]${infer R}`
|
|
174
|
+
? GetFromDataPathString<T[K], R>
|
|
175
|
+
: P extends `${infer K extends keyof T & string}[${infer R}`
|
|
176
|
+
? GetFromDataPathString<T[K], `[${R}`>
|
|
177
|
+
: P extends `${infer K extends keyof T & string}.${infer R}`
|
|
178
|
+
? GetFromDataPathString<T[K], R>
|
|
179
|
+
: never;
|
|
180
|
+
|
|
181
|
+
export type GetFromObserverPathString<T, P extends string> = P extends '**'
|
|
182
|
+
? GetFromDataPathString<T, ''>
|
|
183
|
+
: P extends `${infer K}.**`
|
|
184
|
+
? GetFromDataPathString<T, K>
|
|
185
|
+
: GetFromDataPathString<T, P>;
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* GetFromDataPath<{ foo: { bar: number } }, ['foo', 'bar']> = number
|
|
189
|
+
* GetFromDataPath<{ list: { bar: number }[] }, ['list', 0, 'bar']> = number
|
|
190
|
+
* GetFromDataPath<{ list: number }, ['nonExists']> = never
|
|
191
|
+
*/
|
|
192
|
+
export type GetFromDataPath<
|
|
193
|
+
T,
|
|
194
|
+
K extends readonly (string | number)[]
|
|
195
|
+
> = K extends [infer F, ...infer R extends (string | number)[]]
|
|
196
|
+
? F extends keyof T
|
|
197
|
+
? GetFromDataPath<T[F], R>
|
|
198
|
+
: never
|
|
199
|
+
: T;
|
|
200
|
+
|
|
201
|
+
declare const TaggedSymbol: unique symbol
|
|
202
|
+
type Tagged = typeof TaggedSymbol;
|
|
203
|
+
|
|
204
|
+
type IfNeverOrAny<T, Replacement> = [T] extends [never]
|
|
205
|
+
? Replacement
|
|
206
|
+
: 1 extends T & 0
|
|
207
|
+
? Replacement
|
|
208
|
+
: T;
|
|
209
|
+
|
|
210
|
+
type GetTags<B> = B extends {
|
|
211
|
+
readonly [Tag in Tagged]: infer Tags extends symbol[];
|
|
212
|
+
}
|
|
213
|
+
? Tags
|
|
214
|
+
: [];
|
|
215
|
+
|
|
216
|
+
type GetTagsWithout<B, T extends symbol, Tags = GetTags<B>> = Tags extends [
|
|
217
|
+
infer F,
|
|
218
|
+
...infer R
|
|
219
|
+
]
|
|
220
|
+
? Equal<T, F> extends true
|
|
221
|
+
? GetTagsWithout<B, T, R>
|
|
222
|
+
: [F, ...GetTagsWithout<B, T, R>]
|
|
223
|
+
: [];
|
|
224
|
+
|
|
225
|
+
type UnTagAll<B> = Tagged extends keyof IfNeverOrAny<B, unknown>
|
|
226
|
+
? B extends infer Origin & { readonly [Tag in Tagged]: GetTags<B> }
|
|
227
|
+
? Origin
|
|
228
|
+
: B
|
|
229
|
+
: B;
|
|
230
|
+
|
|
231
|
+
export type Tag<B, T extends symbol> = [IfNeverOrAny<B, unknown>] extends [
|
|
232
|
+
null | undefined
|
|
233
|
+
]
|
|
234
|
+
? B
|
|
235
|
+
: UnTagAll<B> & { readonly [Tag in Tagged]: [...GetTags<B>, T] };
|
|
236
|
+
|
|
237
|
+
export type UnTag<
|
|
238
|
+
B,
|
|
239
|
+
T extends symbol,
|
|
240
|
+
Tags = GetTagsWithout<B, T>
|
|
241
|
+
> = Tagged extends keyof IfNeverOrAny<B, unknown>
|
|
242
|
+
? Tags extends []
|
|
243
|
+
? UnTagAll<B>
|
|
244
|
+
: UnTagAll<B> & { readonly [Tag in Tagged]: Tags }
|
|
245
|
+
: B;
|
|
246
|
+
|
|
247
|
+
export type HasTag<B, T extends symbol> = T extends GetTags<B>[number]
|
|
248
|
+
? true
|
|
249
|
+
: false;
|
|
250
|
+
|
|
251
|
+
export type DataList = Record<string, unknown>;
|
|
252
|
+
export type PropertyList = Record<string, PropertyListItem<any, unknown>>;
|
|
253
|
+
|
|
254
|
+
export type PropertyType =
|
|
255
|
+
| null
|
|
256
|
+
| StringConstructor
|
|
257
|
+
| NumberConstructor
|
|
258
|
+
| BooleanConstructor
|
|
259
|
+
| ArrayConstructor
|
|
260
|
+
| ObjectConstructor
|
|
261
|
+
| FunctionConstructor;
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* PropertyTypeToValueType<null> = any
|
|
265
|
+
* PropertyTypeToValueType<typeof String> = string
|
|
266
|
+
* PropertyTypeToValueType<typeof Number> = number
|
|
267
|
+
*/
|
|
268
|
+
export type PropertyTypeToValueType<T extends PropertyType> = T extends null
|
|
269
|
+
? any
|
|
270
|
+
: T extends StringConstructor
|
|
271
|
+
? string
|
|
272
|
+
: T extends NumberConstructor
|
|
273
|
+
? number
|
|
274
|
+
: T extends BooleanConstructor
|
|
275
|
+
? boolean
|
|
276
|
+
: T extends ArrayConstructor
|
|
277
|
+
? any[]
|
|
278
|
+
: T extends ObjectConstructor
|
|
279
|
+
? Record<string, any> | null
|
|
280
|
+
: T extends FunctionConstructor
|
|
281
|
+
? (...args: any[]) => any
|
|
282
|
+
: never;
|
|
283
|
+
|
|
284
|
+
type Satisfy<T, V> = V extends T ? V : T;
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* PropertyTypeToSimpleValueType<typeof String, 'foo'> = 'foo'
|
|
288
|
+
* PropertyTypeToSimpleValueType<typeof String, 123> = string
|
|
289
|
+
*/
|
|
290
|
+
type PropertyTypeToSimpleValueType<
|
|
291
|
+
T extends PropertyType,
|
|
292
|
+
V
|
|
293
|
+
> = T extends StringConstructor
|
|
294
|
+
? Satisfy<string, V>
|
|
295
|
+
: T extends NumberConstructor
|
|
296
|
+
? Satisfy<number, V>
|
|
297
|
+
: T extends BooleanConstructor
|
|
298
|
+
? Satisfy<boolean, V>
|
|
299
|
+
: T extends ArrayConstructor
|
|
300
|
+
? Satisfy<any[], V>
|
|
301
|
+
: T extends ObjectConstructor
|
|
302
|
+
? Satisfy<Record<string, any> | null, V>
|
|
303
|
+
: T extends FunctionConstructor
|
|
304
|
+
? Satisfy<(...args: any[]) => any, V>
|
|
305
|
+
: never;
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* PropertyValueType<null> = any
|
|
309
|
+
* PropertyValueType<typeof String> = string
|
|
310
|
+
* PropertyValueType<typeof String | typeof Number> = string | number
|
|
311
|
+
* PropertyValueType<{ type: typeof String }> = string
|
|
312
|
+
* PropertyValueType<{ type: typeof String, optionalTypes: [typeof Number] }> = string | number
|
|
313
|
+
* PropertyValueType<{ type: typeof String, value: 'foo' }> = 'foo'
|
|
314
|
+
* PropertyValueType<{ type: typeof String, value: 123 }> = never
|
|
315
|
+
* PropertyValueType<{ type: typeof String, optionalTypes: [typeof Number], value: 123 }> =
|
|
316
|
+
* string | 123
|
|
317
|
+
*/
|
|
318
|
+
type PropertyValueType<P extends PropertyListItem<PropertyType, any>> =
|
|
319
|
+
P extends PropertyListItem<infer T, infer V>
|
|
320
|
+
? unknown extends V
|
|
321
|
+
? PropertyTypeToValueType<T>
|
|
322
|
+
: ((a: T) => void) extends (a: PropertyType) => void
|
|
323
|
+
? V
|
|
324
|
+
: V extends PropertyTypeToValueType<T>
|
|
325
|
+
? PropertyTypeToSimpleValueType<T, V>
|
|
326
|
+
: never
|
|
327
|
+
: never;
|
|
328
|
+
|
|
329
|
+
export type PropertyOption<T extends PropertyType, V> = {
|
|
330
|
+
type?: T
|
|
331
|
+
optionalTypes?: T[]
|
|
332
|
+
value?: V
|
|
333
|
+
default?: () => V
|
|
334
|
+
observer?:
|
|
335
|
+
| ((newValue: DeepReadonly<V>, oldValue: DeepReadonly<V>) => void)
|
|
336
|
+
| string
|
|
337
|
+
reflectIdPrefix?: boolean
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
export type PropertyListItem<T extends PropertyType, V> =
|
|
341
|
+
| T
|
|
342
|
+
| PropertyOption<T, V>
|
|
343
|
+
|
|
344
|
+
export type PropertyValues<P extends PropertyList> = {
|
|
345
|
+
[key in keyof P]: PropertyValueType<P[key]>
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
export type DataWithPropertyValues<
|
|
349
|
+
TData extends DataList,
|
|
350
|
+
TProperty extends PropertyList
|
|
351
|
+
> = TData & PropertyValues<TProperty>
|
|
352
|
+
|
|
353
|
+
export type ComponentMethod = (...args: any[]) => any
|
|
354
|
+
|
|
355
|
+
export type MethodList = Record<string, ComponentMethod>
|
|
356
|
+
|
|
357
|
+
export const METHOD_TAG = Symbol('method')
|
|
358
|
+
|
|
359
|
+
export type TaggedMethod<Fn extends ComponentMethod> = Tag<
|
|
360
|
+
Fn,
|
|
361
|
+
typeof METHOD_TAG
|
|
362
|
+
>;
|
|
363
|
+
|
|
364
|
+
export type UnTaggedMethod<M extends TaggedMethod<any>> = UnTag<
|
|
365
|
+
M,
|
|
366
|
+
typeof METHOD_TAG
|
|
367
|
+
>;
|
|
368
|
+
|
|
369
|
+
export type RelationParams = {
|
|
370
|
+
target?: string | GeneralComponentDefinition | GeneralBehavior | TraitBehavior<any>;
|
|
371
|
+
type:
|
|
372
|
+
| 'ancestor'
|
|
373
|
+
| 'descendant'
|
|
374
|
+
| 'parent'
|
|
375
|
+
| 'child'
|
|
376
|
+
| 'parent-common-node'
|
|
377
|
+
| 'child-common-node';
|
|
378
|
+
linked?: (target: GeneralComponent) => void;
|
|
379
|
+
linkChanged?: (target: GeneralComponent) => void;
|
|
380
|
+
unlinked?: (target: GeneralComponent) => void;
|
|
381
|
+
linkFailed?: (target: GeneralComponent) => void;
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
export type RelationParamsWithKey = {
|
|
385
|
+
[name: string]: RelationParams;
|
|
386
|
+
};
|
|
387
|
+
|
|
388
|
+
export type TraitRelationParams<TOut extends { [key: string]: any }> = {
|
|
389
|
+
target: TraitBehavior<any, TOut>;
|
|
390
|
+
type:
|
|
391
|
+
| 'ancestor'
|
|
392
|
+
| 'descendant'
|
|
393
|
+
| 'parent'
|
|
394
|
+
| 'child'
|
|
395
|
+
| 'parent-common-node'
|
|
396
|
+
| 'child-common-node';
|
|
397
|
+
linked?: (target: GeneralComponent) => void;
|
|
398
|
+
linkChanged?: (target: GeneralComponent) => void;
|
|
399
|
+
unlinked?: (target: GeneralComponent) => void;
|
|
400
|
+
linkFailed?: (target: GeneralComponent) => void;
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
export type ChainingFilterFunc<
|
|
404
|
+
TAddedFields extends { [key: string]: any },
|
|
405
|
+
TRemovedFields extends string = never
|
|
406
|
+
> = (chain: GeneralBehaviorBuilder) => Omit<GeneralBehaviorBuilder, TRemovedFields> & TAddedFields
|
|
407
|
+
|
|
408
|
+
export type ChainingFilterType = {
|
|
409
|
+
add: { [key: string]: any },
|
|
410
|
+
remove: string
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
export type ComponentInstance<
|
|
414
|
+
TData extends DataList,
|
|
415
|
+
TProperty extends PropertyList,
|
|
416
|
+
TMethod extends MethodList
|
|
417
|
+
> = Component<TData, TProperty, TMethod> & {
|
|
418
|
+
data: DeepReadonly<DataWithPropertyValues<TData, TProperty>>;
|
|
419
|
+
properties: DeepReadonly<DataWithPropertyValues<TData, TProperty>>;
|
|
420
|
+
} & TMethod;
|
|
421
|
+
|
|
422
|
+
export type ComponentParams<
|
|
423
|
+
TData extends DataList,
|
|
424
|
+
TProperty extends PropertyList,
|
|
425
|
+
TMethod extends MethodList
|
|
426
|
+
> = {
|
|
427
|
+
is?: string;
|
|
428
|
+
behaviors?: (string | GeneralBehavior)[];
|
|
429
|
+
using?: { [name: string]: string | GeneralComponentDefinition };
|
|
430
|
+
generics?: {
|
|
431
|
+
[name: string]: { default: string | GeneralComponentDefinition } | true;
|
|
432
|
+
};
|
|
433
|
+
placeholders?: { [name: string]: string };
|
|
434
|
+
template?: { [key: string]: any } | null;
|
|
435
|
+
externalClasses?: string[];
|
|
436
|
+
data?: TData | (() => TData);
|
|
437
|
+
properties?: TProperty;
|
|
438
|
+
methods?: TMethod;
|
|
439
|
+
listeners?: { [name: string]: ComponentMethod | string };
|
|
440
|
+
relations?: RelationParamsWithKey;
|
|
441
|
+
lifetimes?: { [name: string]: ComponentMethod };
|
|
442
|
+
created?: () => any;
|
|
443
|
+
attached?: ComponentMethod;
|
|
444
|
+
moved?: ComponentMethod;
|
|
445
|
+
detached?: ComponentMethod;
|
|
446
|
+
ready?: ComponentMethod;
|
|
447
|
+
pageLifetimes?: { [name: string]: ComponentMethod };
|
|
448
|
+
observers?:
|
|
449
|
+
| {
|
|
450
|
+
fields?: string;
|
|
451
|
+
observer: ComponentMethod | string;
|
|
452
|
+
}[]
|
|
453
|
+
| { [fields: string]: ComponentMethod | string };
|
|
454
|
+
options?: ComponentOptions;
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
export type GeneralComponentInstance = ComponentInstance<
|
|
458
|
+
Record<string, any>,
|
|
459
|
+
Record<string, any>,
|
|
460
|
+
Record<string, any>
|
|
461
|
+
>;
|