@vscode/observables-react 0.1.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/LICENSE +21 -0
- package/README.md +349 -0
- package/dist/IPropertyTransformer.d.ts +37 -0
- package/dist/IPropertyTransformer.d.ts.map +1 -0
- package/dist/IPropertyTransformer.js +64 -0
- package/dist/IPropertyTransformer.js.map +1 -0
- package/dist/ManualChangesHandler.d.ts +14 -0
- package/dist/ManualChangesHandler.d.ts.map +1 -0
- package/dist/ManualChangesHandler.js +45 -0
- package/dist/ManualChangesHandler.js.map +1 -0
- package/dist/ProvideViewModel.d.ts +41 -0
- package/dist/ProvideViewModel.d.ts.map +1 -0
- package/dist/ProvideViewModel.js +41 -0
- package/dist/ProvideViewModel.js.map +1 -0
- package/dist/Value.d.ts +16 -0
- package/dist/Value.d.ts.map +1 -0
- package/dist/Value.js +26 -0
- package/dist/Value.js.map +1 -0
- package/dist/di.d.ts +31 -0
- package/dist/di.d.ts.map +1 -0
- package/dist/di.js +86 -0
- package/dist/di.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/index.min.js +6 -0
- package/dist/index.min.js.map +1 -0
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +6 -0
- package/dist/internal.js.map +1 -0
- package/dist/obsView.d.ts +14 -0
- package/dist/obsView.d.ts.map +1 -0
- package/dist/obsView.js +109 -0
- package/dist/obsView.js.map +1 -0
- package/dist/router/Navigator.d.ts +18 -0
- package/dist/router/Navigator.d.ts.map +1 -0
- package/dist/router/Navigator.js +35 -0
- package/dist/router/Navigator.js.map +1 -0
- package/dist/router/Path.d.ts +23 -0
- package/dist/router/Path.d.ts.map +1 -0
- package/dist/router/Path.js +63 -0
- package/dist/router/Path.js.map +1 -0
- package/dist/router/PathPattern.d.ts +15 -0
- package/dist/router/PathPattern.d.ts.map +1 -0
- package/dist/router/PathPattern.js +88 -0
- package/dist/router/PathPattern.js.map +1 -0
- package/dist/router/Route.d.ts +35 -0
- package/dist/router/Route.d.ts.map +1 -0
- package/dist/router/Route.js +63 -0
- package/dist/router/Route.js.map +1 -0
- package/dist/router/Router.d.ts +16 -0
- package/dist/router/Router.d.ts.map +1 -0
- package/dist/router/Router.js +37 -0
- package/dist/router/Router.js.map +1 -0
- package/dist/router/index.d.ts +10 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/utils.d.ts +8 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +14 -0
- package/dist/utils.js.map +1 -0
- package/dist/view.d.ts +9 -0
- package/dist/view.d.ts.map +1 -0
- package/dist/view.js +27 -0
- package/dist/view.js.map +1 -0
- package/dist/viewModel.d.ts +33 -0
- package/dist/viewModel.d.ts.map +1 -0
- package/dist/viewModel.js +36 -0
- package/dist/viewModel.js.map +1 -0
- package/dist/viewWithModel.d.ts +30 -0
- package/dist/viewWithModel.d.ts.map +1 -0
- package/dist/viewWithModel.js +50 -0
- package/dist/viewWithModel.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
class PathPattern {
|
|
6
|
+
/**
|
|
7
|
+
* E.g. "/folder/:path/::rest"
|
|
8
|
+
*/
|
|
9
|
+
static parse(pattern) {
|
|
10
|
+
if (!pattern.startsWith("/")) {
|
|
11
|
+
throw new Error();
|
|
12
|
+
}
|
|
13
|
+
const parts = pattern.substring(1).split('/');
|
|
14
|
+
const p = parts.map(part => {
|
|
15
|
+
if (part.startsWith('::')) {
|
|
16
|
+
const variableName = part.substring(2);
|
|
17
|
+
return { kind: 'variable', variableName, catchAll: true };
|
|
18
|
+
}
|
|
19
|
+
else if (part.startsWith(':')) {
|
|
20
|
+
const variableName = part.substring(1);
|
|
21
|
+
return { kind: 'variable', variableName, catchAll: false };
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return { kind: 'literal', value: part };
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
return new PathPattern(p);
|
|
28
|
+
}
|
|
29
|
+
constructor(_segments) {
|
|
30
|
+
this._segments = _segments;
|
|
31
|
+
}
|
|
32
|
+
match(path) {
|
|
33
|
+
if (!path.startsWith('/')) {
|
|
34
|
+
throw new Error();
|
|
35
|
+
}
|
|
36
|
+
const parts = path.substring(1).split('/');
|
|
37
|
+
const params = {};
|
|
38
|
+
for (const segment of this._segments) {
|
|
39
|
+
if (segment.kind === 'literal') {
|
|
40
|
+
const part = parts.shift();
|
|
41
|
+
if (segment.value !== part) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else if (segment.kind == 'variable') {
|
|
46
|
+
if (segment.catchAll) {
|
|
47
|
+
const partText = parts.join('/');
|
|
48
|
+
parts.length = 0;
|
|
49
|
+
const value = decodeURIComponent(partText);
|
|
50
|
+
params[segment.variableName] = value;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const part = parts.shift();
|
|
54
|
+
if (part === undefined) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
const value = decodeURIComponent(part);
|
|
58
|
+
params[segment.variableName] = value;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
throw new Error();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (parts.length > 0) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
return params;
|
|
69
|
+
}
|
|
70
|
+
build(data) {
|
|
71
|
+
const parts = this._segments.map(segment => {
|
|
72
|
+
if (segment.kind === 'literal') {
|
|
73
|
+
return segment.value;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const value = data[segment.variableName];
|
|
77
|
+
if (value === undefined) {
|
|
78
|
+
throw new Error();
|
|
79
|
+
}
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
return '/' + parts.join('/');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export { PathPattern };
|
|
88
|
+
//# sourceMappingURL=PathPattern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathPattern.js","sources":["../../src/router/PathPattern.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { NavigationPath } from "./Path";
|
|
2
|
+
export declare class Route<TArgs extends {} | void = void> implements PathMatcher<TArgs> {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
readonly args: PathArgs;
|
|
5
|
+
readonly queryArgs: QueryArgs;
|
|
6
|
+
static create(path: string): Route<void>;
|
|
7
|
+
static create<TPathArgs extends PathArgs>(path: string, pathArgs: TPathArgs): Route<PathArgsToType<TPathArgs>>;
|
|
8
|
+
static create<TPathArgs extends PathArgs, TQueryArgs extends QueryArgs>(path: string, pathArgs: TPathArgs, queryArgs: TQueryArgs): Route<PathArgsToType<TPathArgs> & QueryArgsToType<TQueryArgs>>;
|
|
9
|
+
private readonly _pathPattern;
|
|
10
|
+
private constructor();
|
|
11
|
+
build(args: TArgs): NavigationPath;
|
|
12
|
+
matches(path: NavigationPath): TArgs | undefined;
|
|
13
|
+
}
|
|
14
|
+
export interface PathMatcher<T> {
|
|
15
|
+
matches(path: NavigationPath): T | undefined;
|
|
16
|
+
}
|
|
17
|
+
export type PathArgs = Record<string, "string">;
|
|
18
|
+
export type QueryArgs = Record<string, "string" | {
|
|
19
|
+
const: string;
|
|
20
|
+
}>;
|
|
21
|
+
export type PathArgsToType<T extends PathArgs> = {
|
|
22
|
+
[TKey in keyof T]: {
|
|
23
|
+
string: string;
|
|
24
|
+
}[T[TKey]];
|
|
25
|
+
};
|
|
26
|
+
type PrimitiveTypeMap = {
|
|
27
|
+
string: string;
|
|
28
|
+
};
|
|
29
|
+
export type QueryArgsToType<T extends QueryArgs> = {
|
|
30
|
+
[TKey in keyof T]: T[TKey] extends keyof PrimitiveTypeMap ? PrimitiveTypeMap[T[TKey]] : never;
|
|
31
|
+
} extends infer O ? {
|
|
32
|
+
[K in keyof O as O[K] extends never ? never : K]: O[K];
|
|
33
|
+
} : never;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=Route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Route.d.ts","sourceRoot":"","sources":["../../src/router/Route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAGxC,qBAAa,KAAK,CAAC,KAAK,SAAS,EAAE,GAAG,IAAI,GAAG,IAAI,CAAE,YAAW,WAAW,CAAC,KAAK,CAAC;aAqBxD,IAAI,EAAE,MAAM;aACZ,IAAI,EAAE,QAAQ;aACd,SAAS,EAAE,SAAS;WAtB1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;WAEjC,MAAM,CAAC,SAAS,SAAS,QAAQ,EAC3C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,GACpB,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;WACrB,MAAM,CAAC,SAAS,SAAS,QAAQ,EAAE,UAAU,SAAS,SAAS,EACzE,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,UAAU,GACtB,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAOjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAE7D,OAAO;IAMA,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,cAAc;IAqBlC,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,KAAK,GAAG,SAAS;CAqB1D;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC1B,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,CAAC,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAgB,CAAC;AAC/D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAErE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,QAAQ,IAAI;KAC5C,IAAI,IAAI,MAAM,CAAC,GAAG;QACf,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CACb,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,MAAM,EAAE,MAAM,CAAA;CACjB,CAAC;AACF,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,SAAS,IAAI;KAC9C,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK;CAChG,SAAS,MAAM,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { NavigationPath } from './Path.js';
|
|
6
|
+
import { PathPattern } from './PathPattern.js';
|
|
7
|
+
|
|
8
|
+
class Route {
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
+
static create(path, pathArgs, queryArgs) {
|
|
11
|
+
return new Route(path, pathArgs ?? {}, queryArgs ?? {});
|
|
12
|
+
}
|
|
13
|
+
constructor(path, args, queryArgs) {
|
|
14
|
+
this.path = path;
|
|
15
|
+
this.args = args;
|
|
16
|
+
this.queryArgs = queryArgs;
|
|
17
|
+
this._pathPattern = PathPattern.parse(this.path);
|
|
18
|
+
}
|
|
19
|
+
build(args) {
|
|
20
|
+
const pathArgs = {};
|
|
21
|
+
for (const key in this.args) {
|
|
22
|
+
pathArgs[key] = args[key];
|
|
23
|
+
}
|
|
24
|
+
const path = this._pathPattern.build(pathArgs);
|
|
25
|
+
const queryArgs = {};
|
|
26
|
+
for (const key in this.queryArgs) {
|
|
27
|
+
const v = this.queryArgs[key];
|
|
28
|
+
if (typeof v === 'object') {
|
|
29
|
+
queryArgs[key] = v.const;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
queryArgs[key] = args[key];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return NavigationPath.create(path, queryArgs);
|
|
36
|
+
}
|
|
37
|
+
matches(path) {
|
|
38
|
+
const r = this._pathPattern.match(path.getPathString());
|
|
39
|
+
if (!r) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const params = new URLSearchParams(path.queryArgs);
|
|
43
|
+
const args = { ...r };
|
|
44
|
+
for (const [key, type] of Object.entries(this.queryArgs)) {
|
|
45
|
+
const value = params.get(key);
|
|
46
|
+
if (value === null) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
if (typeof type === 'object') {
|
|
50
|
+
if (value !== type.const) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
args[key] = value;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return args;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export { Route };
|
|
63
|
+
//# sourceMappingURL=Route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Route.js","sources":["../../src/router/Route.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;MAGa,KAAK,CAAA;;AAcP,IAAA,OAAO,MAAM,CAAC,IAAY,EAAE,QAAmB,EAAE,SAAqB,EAAA;AACzE,QAAA,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;KAC3D;AAID,IAAA,WAAA,CACoB,IAAY,EACZ,IAAc,EACd,SAAoB,EAAA;QAFpB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QACZ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAU;QACd,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QALvB,IAAY,CAAA,YAAA,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAMxD;AAEE,IAAA,KAAK,CAAC,IAAW,EAAA;QACpB,MAAM,QAAQ,GAA4B,EAAE,CAAC;AAC7C,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;YACzB,QAAQ,CAAC,GAAG,CAAC,GAAI,IAAgC,CAAC,GAAG,CAAC,CAAC;SAC1D;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE/C,MAAM,SAAS,GAA2B,EAAE,CAAC;AAC7C,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;YAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC9B,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACvB,gBAAA,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;aAC5B;iBAAM;gBACH,SAAS,CAAC,GAAG,CAAC,GAAI,IAAgC,CAAC,GAAG,CAAW,CAAC;aACrE;SACJ;QAED,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KACjD;AAEM,IAAA,OAAO,CAAC,IAAoB,EAAA;AAC/B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,CAAC,EAAE;AAAE,YAAA,OAAO,SAAS,CAAC;SAAE;QAE7B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnD,QAAA,MAAM,IAAI,GAA4B,EAAE,GAAG,CAAC,EAAE,CAAC;AAC/C,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACtD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,YAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAChB,gBAAA,OAAO,SAAS,CAAC;aACpB;AACD,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC1B,gBAAA,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;AACtB,oBAAA,OAAO,SAAS,CAAC;iBACpB;aACJ;iBAAM;AACH,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACrB;SACJ;AACD,QAAA,OAAO,IAAa,CAAC;KACxB;AACJ;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NavigationPath } from "./Path";
|
|
2
|
+
import { PathMatcher } from "./Route";
|
|
3
|
+
export declare class Router<TOut, TRouteArgs = {}> {
|
|
4
|
+
private readonly _parent;
|
|
5
|
+
private readonly _addedRoute;
|
|
6
|
+
static create<TData>(): Router<TData, {}>;
|
|
7
|
+
private constructor();
|
|
8
|
+
with<TNewArgs>(matcher: PathMatcher<TNewArgs>, dataProvider: (args: TNewArgs) => TOut): Router<TOut, TRouteArgs & TNewArgs>;
|
|
9
|
+
route(path: NavigationPath): RouteResult<TOut, TRouteArgs> | undefined;
|
|
10
|
+
}
|
|
11
|
+
export interface RouteResult<TOut, TArgs> {
|
|
12
|
+
args: TArgs;
|
|
13
|
+
out: TOut;
|
|
14
|
+
matcher: PathMatcher<unknown>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=Router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../src/router/Router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,qBAAa,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,EAAE;IAOjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;WAPlB,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IAIhD,OAAO;IAMA,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAI3H,KAAK,CAAC,IAAI,EAAE,cAAc,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,SAAS;CAgBhF;AAED,MAAM,WAAW,WAAW,CAAC,IAAI,EAAE,KAAK;IACpC,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,IAAI,CAAC;IACV,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACjC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
class Router {
|
|
6
|
+
static create() {
|
|
7
|
+
return new Router(undefined, undefined);
|
|
8
|
+
}
|
|
9
|
+
constructor(
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
11
|
+
_parent, _addedRoute) {
|
|
12
|
+
this._parent = _parent;
|
|
13
|
+
this._addedRoute = _addedRoute;
|
|
14
|
+
}
|
|
15
|
+
with(matcher, dataProvider) {
|
|
16
|
+
return new Router(this, { matcher: matcher, dataProvider: dataProvider });
|
|
17
|
+
}
|
|
18
|
+
route(path) {
|
|
19
|
+
if (this._addedRoute) {
|
|
20
|
+
const args = this._addedRoute.matcher.matches(path);
|
|
21
|
+
if (args) {
|
|
22
|
+
return {
|
|
23
|
+
args: args,
|
|
24
|
+
out: this._addedRoute.dataProvider(args),
|
|
25
|
+
matcher: this._addedRoute.matcher,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (this._parent) {
|
|
30
|
+
return this._parent.route(path);
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { Router };
|
|
37
|
+
//# sourceMappingURL=Router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.js","sources":["../../src/router/Router.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;MAGa,MAAM,CAAA;AACR,IAAA,OAAO,MAAM,GAAA;AAChB,QAAA,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;KAC3C;AAED,IAAA,WAAA;;AAEqB,IAAA,OAAsC,EACtC,WAAyC,EAAA;QADzC,IAAO,CAAA,OAAA,GAAP,OAAO,CAA+B;QACtC,IAAW,CAAA,WAAA,GAAX,WAAW,CAA8B;KACzD;IAEE,IAAI,CAAW,OAA8B,EAAE,YAAsC,EAAA;AACxF,QAAA,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,OAA+B,EAAE,YAAY,EAAE,YAAuC,EAAE,CAAC,CAAC;KAChI;AAEM,IAAA,KAAK,CAAC,IAAoB,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,IAAI,EAAE;gBACN,OAAO;AACH,oBAAA,IAAI,EAAE,IAAkB;oBACxB,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC;AACxC,oBAAA,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO;iBACpC,CAAC;aACL;SACJ;AACD,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAA8C,CAAC;SAChF;AACD,QAAA,OAAO,SAAS,CAAC;KACpB;AACJ;;;;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { NavigationPath } from './Path';
|
|
2
|
+
export type { QueryArgs } from './Path';
|
|
3
|
+
export { PathPattern } from './PathPattern';
|
|
4
|
+
export { Route } from './Route';
|
|
5
|
+
export type { PathMatcher, PathArgs, PathArgsToType, QueryArgsToType, QueryArgs as RouteQueryArgs } from './Route';
|
|
6
|
+
export { Router } from './Router';
|
|
7
|
+
export type { RouteResult } from './Router';
|
|
8
|
+
export { Navigator } from './Navigator';
|
|
9
|
+
export type { ILinkData } from './Navigator';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,SAAS,CAAC;AACnH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps over an object's values, returning a new object with the same keys
|
|
3
|
+
* but transformed values.
|
|
4
|
+
*/
|
|
5
|
+
export declare function mapObject<T extends Record<string, any>, U>(obj: T, fn: (value: T[keyof T], key: string) => U): {
|
|
6
|
+
[K in keyof T]: U;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EACtD,GAAG,EAAE,CAAC,EACN,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC,GAC1C;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;CAAE,CAIvB"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
/**
|
|
6
|
+
* Maps over an object's values, returning a new object with the same keys
|
|
7
|
+
* but transformed values.
|
|
8
|
+
*/
|
|
9
|
+
function mapObject(obj, fn) {
|
|
10
|
+
return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, fn(value, key)]));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { mapObject };
|
|
14
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../src/utils.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAAA;;;AAGG;AACa,SAAA,SAAS,CACrB,GAAM,EACN,EAAyC,EAAA;AAEzC,IAAA,OAAO,MAAM,CAAC,WAAW,CACrB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAC1C,CAAC;AAC/B;;;;"}
|
package/dist/view.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IReader } from "@vscode/observables";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { PropsDesc, PropsIn, PropsOut } from "./viewModel";
|
|
4
|
+
/**
|
|
5
|
+
* Creates a React component with typed observable props.
|
|
6
|
+
* Props are transformed according to their IPropertyTransformerFactory.
|
|
7
|
+
*/
|
|
8
|
+
export declare function view<T extends PropsDesc>(props: T, render: (reader: IReader, props: PropsOut<T>) => React.ReactNode): React.ComponentType<PropsIn<T>>;
|
|
9
|
+
//# sourceMappingURL=view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,SAAS,EACpC,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,GACjE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAajC"}
|
package/dist/view.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { obsView } from './obsView.js';
|
|
6
|
+
import { mapObject } from './utils.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Creates a React component with typed observable props.
|
|
10
|
+
* Props are transformed according to their IPropertyTransformerFactory.
|
|
11
|
+
*/
|
|
12
|
+
function view(props, render) {
|
|
13
|
+
return obsView('view', (p) => {
|
|
14
|
+
const readableProps = mapObject(props, (value, key) => {
|
|
15
|
+
return value.create(reader => p.read(reader)[key], undefined);
|
|
16
|
+
});
|
|
17
|
+
return reader => {
|
|
18
|
+
const propValues = mapObject(readableProps, (value) => {
|
|
19
|
+
return value.read(reader);
|
|
20
|
+
});
|
|
21
|
+
return render(reader, propValues);
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { view };
|
|
27
|
+
//# sourceMappingURL=view.js.map
|
package/dist/view.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sources":["../src/view.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAMA;;;AAGG;AACa,SAAA,IAAI,CAChB,KAAQ,EACR,MAAgE,EAAA;AAEhE,IAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAI;QACzB,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;YAClD,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;AAClE,SAAC,CAAC,CAAC;QAEH,OAAO,MAAM,IAAG;YACZ,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,KAAK,KAAI;AAClD,gBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACtC,SAAC,CAAC;AACN,KAAC,CAAC,CAAC;AACP;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { IDisposable, DisposableStore } from "@vscode/observables";
|
|
2
|
+
import { Context } from "react";
|
|
3
|
+
import { IPropertyTransformerFactory } from "./IPropertyTransformer";
|
|
4
|
+
export declare const ViewModelContextSymbol: unique symbol;
|
|
5
|
+
export type PropsDesc = Record<string, IPropertyTransformerFactory<any, any>>;
|
|
6
|
+
export type PropsIn<T extends PropsDesc> = {
|
|
7
|
+
[K in keyof T]: T[K] extends IPropertyTransformerFactory<infer U, any> ? U : never;
|
|
8
|
+
};
|
|
9
|
+
export type PropsOut<T extends PropsDesc> = {
|
|
10
|
+
[K in keyof T]: T[K] extends IPropertyTransformerFactory<any, infer U> ? U : never;
|
|
11
|
+
};
|
|
12
|
+
export declare class BaseViewModel<TProps> implements IDisposable {
|
|
13
|
+
protected readonly props: TProps;
|
|
14
|
+
protected _store: DisposableStore;
|
|
15
|
+
constructor(props: TProps);
|
|
16
|
+
dispose(): void;
|
|
17
|
+
}
|
|
18
|
+
export type ViewModelClass<TProps extends PropsDesc> = {
|
|
19
|
+
new (arg: PropsOut<TProps>): BaseViewModel<PropsOut<TProps>>;
|
|
20
|
+
_props: TProps;
|
|
21
|
+
[ViewModelContextSymbol]?: Context<unknown>;
|
|
22
|
+
};
|
|
23
|
+
/** Get or create the context for a ViewModel class */
|
|
24
|
+
export declare function getOrCreateViewModelContext<T>(ctor: {
|
|
25
|
+
[ViewModelContextSymbol]?: Context<T | undefined>;
|
|
26
|
+
}): Context<T | undefined>;
|
|
27
|
+
/**
|
|
28
|
+
* Creates a ViewModel class with typed props.
|
|
29
|
+
* Use this as a base class for your ViewModels.
|
|
30
|
+
*/
|
|
31
|
+
export declare function ViewModel(): ViewModelClass<{}>;
|
|
32
|
+
export declare function ViewModel<T extends PropsDesc>(props: T): ViewModelClass<T>;
|
|
33
|
+
//# sourceMappingURL=viewModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewModel.d.ts","sourceRoot":"","sources":["../src/viewModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAiB,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAGrE,eAAO,MAAM,sBAAsB,eAA6B,CAAC;AAEjE,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE9E,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,SAAS,IAAI;KACtC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,2BAA2B,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;CACrF,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,SAAS,IAAI;KACvC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,2BAA2B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CACrF,CAAC;AAEF,qBAAa,aAAa,CAAC,MAAM,CAAE,YAAW,WAAW;IACrD,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,MAAM,kBAAyB;gBAE7B,KAAK,EAAE,MAAM;IAIzB,OAAO,IAAI,IAAI;CAGlB;AAGD,MAAM,MAAM,cAAc,CAAC,MAAM,SAAS,SAAS,IAAI;IACnD,KAAK,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,sBAAsB,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/C,CAAC;AAEF,sDAAsD;AACtD,wBAAgB,2BAA2B,CAAC,CAAC,EACzC,IAAI,EAAE;IAAE,CAAC,sBAAsB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;CAAE,GAC5D,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAMxB;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;AAChD,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { DisposableStore } from '@vscode/observables';
|
|
6
|
+
import { createContext } from 'react';
|
|
7
|
+
|
|
8
|
+
// Symbol to store the context on the ViewModel class
|
|
9
|
+
const ViewModelContextSymbol = Symbol('ViewModelContext');
|
|
10
|
+
class BaseViewModel {
|
|
11
|
+
constructor(props) {
|
|
12
|
+
this._store = new DisposableStore();
|
|
13
|
+
this.props = props;
|
|
14
|
+
}
|
|
15
|
+
dispose() {
|
|
16
|
+
this._store.dispose();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** Get or create the context for a ViewModel class */
|
|
20
|
+
function getOrCreateViewModelContext(ctor) {
|
|
21
|
+
if (!ctor[ViewModelContextSymbol]) {
|
|
22
|
+
ctor[ViewModelContextSymbol] =
|
|
23
|
+
createContext(undefined);
|
|
24
|
+
}
|
|
25
|
+
return ctor[ViewModelContextSymbol];
|
|
26
|
+
}
|
|
27
|
+
function ViewModel(props = {}) {
|
|
28
|
+
var _a;
|
|
29
|
+
return _a = class extends BaseViewModel {
|
|
30
|
+
},
|
|
31
|
+
_a._props = props,
|
|
32
|
+
_a;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { BaseViewModel, ViewModel, ViewModelContextSymbol, getOrCreateViewModelContext };
|
|
36
|
+
//# sourceMappingURL=viewModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewModel.js","sources":["../src/viewModel.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAIA;MACa,sBAAsB,GAAG,MAAM,CAAC,kBAAkB,EAAE;MAYpD,aAAa,CAAA;AAItB,IAAA,WAAA,CAAY,KAAa,EAAA;AAFf,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;AAGrC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACtB;IAED,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;KACzB;AACJ,CAAA;AASD;AACM,SAAU,2BAA2B,CACvC,IAA2D,EAAA;AAE3D,IAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE;QAC9B,IAA8D,CAAC,sBAAsB,CAAC;YACnF,aAAa,CAAgB,SAAS,CAAC,CAAC;KAC/C;AACD,IAAA,OAAO,IAAI,CAAC,sBAAsB,CAAE,CAAC;AACzC,CAAC;AAQe,SAAA,SAAS,CAAsB,KAAA,GAAW,EAAO,EAAA;;IAC7D,OAAO,EAAA,GAAA,cAAc,aAA0B,CAAA;AAE9C,SAAA;AADU,QAAA,EAAA,CAAA,MAAM,GAAG,KAAM;UACJ,CAAC;AAC3B;;;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { IDisposable, IReader } from "@vscode/observables";
|
|
2
|
+
import React, { Context } from "react";
|
|
3
|
+
import { IPropertyTransformerFactory } from "./IPropertyTransformer";
|
|
4
|
+
import { BaseViewModel, PropsDesc, PropsOut, ViewModelContextSymbol } from "./viewModel";
|
|
5
|
+
/** Check if a transformer has _requiredContext defined (injected) */
|
|
6
|
+
type HasRequiredContext<T> = T extends {
|
|
7
|
+
_requiredContext: Context<unknown>;
|
|
8
|
+
} ? true : false;
|
|
9
|
+
/** Required props: non-injected properties that must be provided */
|
|
10
|
+
type RequiredProps<T extends PropsDesc> = {
|
|
11
|
+
[K in keyof T as HasRequiredContext<T[K]> extends true ? never : K]: T[K] extends IPropertyTransformerFactory<infer U, any> ? U : never;
|
|
12
|
+
};
|
|
13
|
+
/** Optional props: injected properties that can be overridden */
|
|
14
|
+
type OptionalProps<T extends PropsDesc> = {
|
|
15
|
+
[K in keyof T as HasRequiredContext<T[K]> extends true ? K : never]?: T[K] extends IPropertyTransformerFactory<any, infer U> ? U : never;
|
|
16
|
+
};
|
|
17
|
+
/** Combined props type: required + optional injected */
|
|
18
|
+
type WithOptionalInjected<T extends PropsDesc> = RequiredProps<T> & OptionalProps<T>;
|
|
19
|
+
export declare function viewWithModel<TModelProps extends PropsDesc, TModel extends BaseViewModel<PropsOut<TModelProps>>>(viewModelCtor: (new (arg: PropsOut<TModelProps>) => TModel) & {
|
|
20
|
+
_props: TModelProps;
|
|
21
|
+
[ViewModelContextSymbol]?: Context<unknown>;
|
|
22
|
+
}, render: (reader: IReader, model: TModel) => React.ReactNode): React.ComponentType<WithOptionalInjected<TModelProps>>;
|
|
23
|
+
export declare function viewWithModel<TModelProps extends PropsDesc, TProps extends PropsDesc, TModel extends BaseViewModel<PropsOut<TModelProps>>>(viewModelCtor: (new (arg: PropsOut<TModelProps>) => TModel) & {
|
|
24
|
+
_props: TModelProps;
|
|
25
|
+
[ViewModelContextSymbol]?: Context<unknown>;
|
|
26
|
+
}, props: TProps, render: (reader: IReader, model: TModel, props: PropsOut<TProps>) => React.ReactNode): React.ComponentType<WithOptionalInjected<TModelProps> & WithOptionalInjected<TProps>>;
|
|
27
|
+
export declare function viewWithModel<TModel extends IDisposable>(viewModelCtor: new () => TModel, render: (reader: IReader, model: TModel) => React.ReactNode): React.ComponentType<{}>;
|
|
28
|
+
export declare function viewWithModel<TProps extends PropsDesc, TModel extends IDisposable>(viewModelCtor: new () => TModel, props: TProps, render: (reader: IReader, model: TModel, props: PropsOut<TProps>) => React.ReactNode): React.ComponentType<WithOptionalInjected<TProps>>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=viewWithModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewWithModel.d.ts","sourceRoot":"","sources":["../src/viewWithModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { derivedDisposable } from '@vscode/observables';
|
|
6
|
+
import { obsView } from './obsView.js';
|
|
7
|
+
import { mapObject } from './utils.js';
|
|
8
|
+
import { getOrCreateViewModelContext } from './viewModel.js';
|
|
9
|
+
|
|
10
|
+
/** Collect unique _requiredContext from transformers */
|
|
11
|
+
function collectRequiredContexts(propsDesc) {
|
|
12
|
+
const contexts = [];
|
|
13
|
+
for (const t of Object.values(propsDesc)) {
|
|
14
|
+
const ctx = t._requiredContext;
|
|
15
|
+
if (ctx && !contexts.includes(ctx))
|
|
16
|
+
contexts.push(ctx);
|
|
17
|
+
}
|
|
18
|
+
return contexts;
|
|
19
|
+
}
|
|
20
|
+
function viewWithModel(viewModelCtor, propsOrRender, maybeRender) {
|
|
21
|
+
const props = typeof propsOrRender === 'function' ? {} : propsOrRender;
|
|
22
|
+
const render = typeof propsOrRender === 'function' ? propsOrRender : maybeRender;
|
|
23
|
+
const modelPropsDesc = '_props' in viewModelCtor ? viewModelCtor._props : {};
|
|
24
|
+
const requiredContexts = collectRequiredContexts({ ...modelPropsDesc, ...props });
|
|
25
|
+
// Always create the context so ProvideViewModel can work
|
|
26
|
+
const viewModelContext = getOrCreateViewModelContext(viewModelCtor);
|
|
27
|
+
const allContexts = [...requiredContexts, viewModelContext];
|
|
28
|
+
return obsView('viewWithModel', (p, getContextValues) => {
|
|
29
|
+
const contextValues = getContextValues();
|
|
30
|
+
const providedModel = contextValues.get(viewModelContext);
|
|
31
|
+
const readableModelProps = '_props' in viewModelCtor
|
|
32
|
+
? mapObject(viewModelCtor._props, (v, k) => v.create((r) => p.read(r)[k], contextValues.get(v._requiredContext)))
|
|
33
|
+
: {};
|
|
34
|
+
const model = providedModel
|
|
35
|
+
? { read: () => providedModel, dispose: () => { } }
|
|
36
|
+
: derivedDisposable(reader => {
|
|
37
|
+
const modelProps = mapObject(readableModelProps, (v) => v.read(reader));
|
|
38
|
+
return new viewModelCtor(modelProps);
|
|
39
|
+
});
|
|
40
|
+
const readableProps = mapObject(props, (v, k) => v.create((r) => p.read(r)[k], contextValues.get(v._requiredContext)));
|
|
41
|
+
return (reader) => {
|
|
42
|
+
const m = model.read(reader);
|
|
43
|
+
const propValues = mapObject(readableProps, (v) => v.read(reader));
|
|
44
|
+
return render(reader, m, propValues);
|
|
45
|
+
};
|
|
46
|
+
}, allContexts.length > 0 ? allContexts : undefined);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { viewWithModel };
|
|
50
|
+
//# sourceMappingURL=viewWithModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewWithModel.js","sources":["../src/viewWithModel.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vscode/observables-react",
|
|
3
|
+
"description": "React bindings for VS Code observables",
|
|
4
|
+
"author": "Microsoft",
|
|
5
|
+
"version": "0.1.1-0",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/microsoft/vscode-packages.git",
|
|
10
|
+
"directory": "vscode-observables/observables-react"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/microsoft/vscode-packages/tree/main/vscode-observables/observables-react",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/microsoft/vscode-packages/issues"
|
|
15
|
+
},
|
|
16
|
+
"type": "module",
|
|
17
|
+
"main": "./dist/index.js",
|
|
18
|
+
"module": "./dist/index.js",
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"import": "./dist/index.js",
|
|
24
|
+
"default": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./internal": {
|
|
27
|
+
"types": "./dist/internal.d.ts",
|
|
28
|
+
"import": "./dist/internal.js",
|
|
29
|
+
"default": "./dist/internal.js"
|
|
30
|
+
},
|
|
31
|
+
"./min": {
|
|
32
|
+
"import": "./dist/index.min.js",
|
|
33
|
+
"default": "./dist/index.min.js"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist"
|
|
38
|
+
],
|
|
39
|
+
"scripts": {
|
|
40
|
+
"prepare": "pnpm run build",
|
|
41
|
+
"build": "rollup -c",
|
|
42
|
+
"dev": "rollup -c -w",
|
|
43
|
+
"clean": "rimraf dist",
|
|
44
|
+
"typecheck": "tsc --noEmit",
|
|
45
|
+
"typecheck:examples": "tsc -p readme-codeblock-examples/tsconfig.json",
|
|
46
|
+
"test:e2e": "playwright test",
|
|
47
|
+
"test:e2e:ui": "playwright test --ui",
|
|
48
|
+
"test:e2e:debug": "playwright test --debug"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"react": "^18.0.0",
|
|
52
|
+
"react-dom": "^18.0.0",
|
|
53
|
+
"@vscode/observables": "*"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@vscode/observables": "workspace:*",
|
|
57
|
+
"@playwright/test": "^1.40.0",
|
|
58
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
59
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
60
|
+
"@rollup/plugin-typescript": "^12.3.0",
|
|
61
|
+
"@types/react": "^18.0.0",
|
|
62
|
+
"@types/react-dom": "^18.0.0",
|
|
63
|
+
"@vitejs/plugin-react": "^4.0.0",
|
|
64
|
+
"react": "^18.0.0",
|
|
65
|
+
"react-dom": "^18.0.0",
|
|
66
|
+
"rimraf": "^5.0.0",
|
|
67
|
+
"rollup": "^3.29.5",
|
|
68
|
+
"tslib": "^2.8.1",
|
|
69
|
+
"typescript": "^5.0.0",
|
|
70
|
+
"vite": "^4.4.0"
|
|
71
|
+
}
|
|
72
|
+
}
|