@cratis/scene.components 3.4.0 → 3.5.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 +51 -2
- package/bindings/ArcBoundComponents.tsx +40 -0
- package/bindings/BoundConstructor.ts +5 -5
- package/bindings/for_requireArcProxy/NativeProxies.ts +28 -0
- package/bindings/for_requireArcProxy/when_mounting_bound_adapters.tsx +71 -0
- package/bindings/for_requireArcProxy/when_previewing_without_arc.tsx +37 -0
- package/bindings/for_requireArcProxy/when_validating_a_proxy.ts +44 -0
- package/bindings/requireArcProxy.ts +24 -0
- package/cratisComponents.ts +2 -1
- package/cratisComponentsPackage.ts +2 -1
- package/data/SceneDataTable.tsx +1 -1
- package/data/SceneObservableDataTable.tsx +1 -1
- package/data/SceneSingleResult.tsx +29 -0
- package/data/SingleResultRuntime.tsx +89 -0
- package/data/SingleResultStatus.tsx +13 -0
- package/data/for_SceneDataTable/when_forwarding_query_arguments.tsx +4 -2
- package/data/for_SceneSingleResult/when_executing_a_native_query.tsx +290 -0
- package/data/for_SceneSingleResult/when_gating_the_lazy_runtime.tsx +60 -0
- package/data/index.ts +1 -0
- package/dialogs/SceneCommandDialog.tsx +1 -1
- package/dialogs/SceneStepperCommandDialog.tsx +1 -1
- package/dist/cjs/bindings/ArcBoundComponents.js +55 -0
- package/dist/cjs/bindings/ArcBoundComponents.js.map +1 -0
- package/dist/cjs/bindings/requireArcProxy.js +25 -0
- package/dist/cjs/bindings/requireArcProxy.js.map +1 -0
- package/dist/cjs/cratisComponents.js +2 -0
- package/dist/cjs/cratisComponents.js.map +1 -1
- package/dist/cjs/cratisComponentsPackage.js +2 -1
- package/dist/cjs/cratisComponentsPackage.js.map +1 -1
- package/dist/cjs/data/SceneDataTable.js +1 -1
- package/dist/cjs/data/SceneDataTable.js.map +1 -1
- package/dist/cjs/data/SceneObservableDataTable.js +1 -1
- package/dist/cjs/data/SceneObservableDataTable.js.map +1 -1
- package/dist/cjs/data/SceneSingleResult.js +41 -0
- package/dist/cjs/data/SceneSingleResult.js.map +1 -0
- package/dist/cjs/data/SingleResultRuntime.js +122 -0
- package/dist/cjs/data/SingleResultRuntime.js.map +1 -0
- package/dist/cjs/data/SingleResultStatus.js +23 -0
- package/dist/cjs/data/SingleResultStatus.js.map +1 -0
- package/dist/cjs/dialogs/SceneCommandDialog.js +1 -1
- package/dist/cjs/dialogs/SceneCommandDialog.js.map +1 -1
- package/dist/cjs/dialogs/SceneStepperCommandDialog.js +1 -1
- package/dist/cjs/dialogs/SceneStepperCommandDialog.js.map +1 -1
- package/dist/cjs/forms/fields/SceneRadioButtonField.js +4 -1
- package/dist/cjs/forms/fields/SceneRadioButtonField.js.map +1 -1
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/pages/SceneDataPage.js +1 -1
- package/dist/cjs/pages/SceneDataPage.js.map +1 -1
- package/dist/esm/bindings/ArcBoundComponents.d.ts +18 -0
- package/dist/esm/bindings/ArcBoundComponents.d.ts.map +1 -0
- package/dist/esm/bindings/ArcBoundComponents.js +49 -0
- package/dist/esm/bindings/ArcBoundComponents.js.map +1 -0
- package/dist/esm/bindings/for_requireArcProxy/NativeProxies.d.ts +25 -0
- package/dist/esm/bindings/for_requireArcProxy/NativeProxies.d.ts.map +1 -0
- package/dist/esm/bindings/for_requireArcProxy/NativeProxies.js +23 -0
- package/dist/esm/bindings/for_requireArcProxy/NativeProxies.js.map +1 -0
- package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.d.ts +2 -0
- package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.d.ts.map +1 -0
- package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.js +56 -0
- package/dist/esm/bindings/for_requireArcProxy/when_mounting_bound_adapters.js.map +1 -0
- package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.d.ts +2 -0
- package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.d.ts.map +1 -0
- package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.js +32 -0
- package/dist/esm/bindings/for_requireArcProxy/when_previewing_without_arc.js.map +1 -0
- package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.d.ts +2 -0
- package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.d.ts.map +1 -0
- package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.js +45 -0
- package/dist/esm/bindings/for_requireArcProxy/when_validating_a_proxy.js.map +1 -0
- package/dist/esm/bindings/requireArcProxy.d.ts +5 -0
- package/dist/esm/bindings/requireArcProxy.d.ts.map +1 -0
- package/dist/esm/bindings/requireArcProxy.js +23 -0
- package/dist/esm/bindings/requireArcProxy.js.map +1 -0
- package/dist/esm/cratisComponents.d.ts.map +1 -1
- package/dist/esm/cratisComponents.js +2 -0
- package/dist/esm/cratisComponents.js.map +1 -1
- package/dist/esm/cratisComponentsPackage.d.ts.map +1 -1
- package/dist/esm/cratisComponentsPackage.js +2 -1
- package/dist/esm/cratisComponentsPackage.js.map +1 -1
- package/dist/esm/data/SceneDataTable.js +1 -1
- package/dist/esm/data/SceneDataTable.js.map +1 -1
- package/dist/esm/data/SceneObservableDataTable.js +1 -1
- package/dist/esm/data/SceneObservableDataTable.js.map +1 -1
- package/dist/esm/data/SceneSingleResult.d.ts +3 -0
- package/dist/esm/data/SceneSingleResult.d.ts.map +1 -0
- package/dist/esm/data/SceneSingleResult.js +39 -0
- package/dist/esm/data/SceneSingleResult.js.map +1 -0
- package/dist/esm/data/SingleResultRuntime.d.ts +9 -0
- package/dist/esm/data/SingleResultRuntime.d.ts.map +1 -0
- package/dist/esm/data/SingleResultRuntime.js +118 -0
- package/dist/esm/data/SingleResultRuntime.js.map +1 -0
- package/dist/esm/data/SingleResultStatus.d.ts +7 -0
- package/dist/esm/data/SingleResultStatus.d.ts.map +1 -0
- package/dist/esm/data/SingleResultStatus.js +21 -0
- package/dist/esm/data/SingleResultStatus.js.map +1 -0
- package/dist/esm/data/for_SceneDataTable/when_forwarding_query_arguments.js +4 -4
- package/dist/esm/data/for_SceneDataTable/when_forwarding_query_arguments.js.map +1 -1
- package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.d.ts +2 -0
- package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.d.ts.map +1 -0
- package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.js +255 -0
- package/dist/esm/data/for_SceneSingleResult/when_executing_a_native_query.js.map +1 -0
- package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.d.ts +2 -0
- package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.d.ts.map +1 -0
- package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.js +54 -0
- package/dist/esm/data/for_SceneSingleResult/when_gating_the_lazy_runtime.js.map +1 -0
- package/dist/esm/data/index.d.ts +1 -0
- package/dist/esm/data/index.d.ts.map +1 -1
- package/dist/esm/data/index.js +1 -0
- package/dist/esm/data/index.js.map +1 -1
- package/dist/esm/dialogs/SceneCommandDialog.js +1 -1
- package/dist/esm/dialogs/SceneCommandDialog.js.map +1 -1
- package/dist/esm/dialogs/SceneStepperCommandDialog.js +1 -1
- package/dist/esm/dialogs/SceneStepperCommandDialog.js.map +1 -1
- package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.d.ts +2 -0
- package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.d.ts.map +1 -0
- package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.js +16 -0
- package/dist/esm/for_cratisComponentsPackage/when_describing_single_result.js.map +1 -0
- package/dist/esm/forms/fields/SceneRadioButtonField.d.ts.map +1 -1
- package/dist/esm/forms/fields/SceneRadioButtonField.js +4 -1
- package/dist/esm/forms/fields/SceneRadioButtonField.js.map +1 -1
- package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.d.ts +2 -0
- package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.d.ts.map +1 -0
- package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.js +38 -0
- package/dist/esm/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.js.map +1 -0
- package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.js +4 -0
- package/dist/esm/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pages/SceneDataPage.js +1 -1
- package/dist/esm/pages/SceneDataPage.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/for_cratisComponentsPackage/when_describing_single_result.ts +20 -0
- package/forms/fields/SceneRadioButtonField.tsx +4 -1
- package/forms/fields/for_SceneRadioButtonField/when_mapping_the_group_name.tsx +45 -0
- package/forms/fields/for_resolveFieldBinding/when_resolving_a_field_binding.ts +6 -0
- package/package.json +19 -7
- package/pages/SceneDataPage.tsx +1 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useContext, useMemo, useState, useEffect } from 'react';
|
|
3
|
+
import { ArcContext } from '@cratis/arc.react';
|
|
4
|
+
import { SingleResultStatus } from './SingleResultStatus.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Private execution owner. Arc owns validation, routing, HTTP and deserialization; this component
|
|
8
|
+
* owns only request lifetime and presentation. No shared cache can hand B the result belonging to A.
|
|
9
|
+
*/ function SingleResultRuntime({ query, queryArguments, resultField }) {
|
|
10
|
+
const arc = useContext(ArcContext);
|
|
11
|
+
const { microservice, apiBasePath, origin, httpHeadersCallback, queryVersion } = arc;
|
|
12
|
+
// Identity is deliberate: hosts replace immutable committed arguments rather than mutating them.
|
|
13
|
+
const request = useMemo(()=>({
|
|
14
|
+
query,
|
|
15
|
+
queryArguments,
|
|
16
|
+
resultField,
|
|
17
|
+
microservice,
|
|
18
|
+
apiBasePath,
|
|
19
|
+
origin,
|
|
20
|
+
httpHeadersCallback,
|
|
21
|
+
queryVersion
|
|
22
|
+
}), [
|
|
23
|
+
query,
|
|
24
|
+
queryArguments,
|
|
25
|
+
resultField,
|
|
26
|
+
microservice,
|
|
27
|
+
apiBasePath,
|
|
28
|
+
origin,
|
|
29
|
+
httpHeadersCallback,
|
|
30
|
+
queryVersion
|
|
31
|
+
]);
|
|
32
|
+
const [settled, setSettled] = useState();
|
|
33
|
+
useEffect(()=>{
|
|
34
|
+
// Each effect setup is a generation, including StrictMode's setup/cleanup/setup replay.
|
|
35
|
+
let current = true;
|
|
36
|
+
let instance;
|
|
37
|
+
const publish = (outcome)=>{
|
|
38
|
+
if (current) setSettled({
|
|
39
|
+
request,
|
|
40
|
+
outcome
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
const execute = async ()=>{
|
|
44
|
+
try {
|
|
45
|
+
// The registry intentionally stores constructors without an eager Arc dependency.
|
|
46
|
+
instance = new request.query();
|
|
47
|
+
if (instance.enumerable !== false) {
|
|
48
|
+
publish({
|
|
49
|
+
state: 'failure'
|
|
50
|
+
});
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
instance.setMicroservice(request.microservice);
|
|
54
|
+
instance.setApiBasePath(request.apiBasePath ?? '');
|
|
55
|
+
instance.setOrigin(request.origin ?? '');
|
|
56
|
+
instance.setHttpHeadersCallback(request.httpHeadersCallback ?? (()=>({})));
|
|
57
|
+
// Native perform validates required arguments and proxy rules before HTTP. No copying,
|
|
58
|
+
// defaults, business validation, route construction or array wrapping happens here.
|
|
59
|
+
const result = await instance.perform(request.queryArguments);
|
|
60
|
+
if (!current) return;
|
|
61
|
+
if (result.isSuccess !== true || result.isAuthorized !== true || result.isValid !== true || result.hasExceptions !== false || result.isReady === false) {
|
|
62
|
+
publish({
|
|
63
|
+
state: 'failure'
|
|
64
|
+
});
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (result.data === null || result.data === undefined) {
|
|
68
|
+
publish({
|
|
69
|
+
state: 'notFound'
|
|
70
|
+
});
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (typeof result.data !== 'object' || Array.isArray(result.data)) {
|
|
74
|
+
publish({
|
|
75
|
+
state: 'failure'
|
|
76
|
+
});
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Only one own data field, never a path, inherited member, getter or expression.
|
|
80
|
+
const descriptor = Object.getOwnPropertyDescriptor(result.data, request.resultField);
|
|
81
|
+
const value = descriptor && 'value' in descriptor ? descriptor.value : undefined;
|
|
82
|
+
if (typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number' && Number.isFinite(value)) {
|
|
83
|
+
publish({
|
|
84
|
+
state: 'success',
|
|
85
|
+
value: String(value)
|
|
86
|
+
});
|
|
87
|
+
} else {
|
|
88
|
+
publish({
|
|
89
|
+
state: 'failure'
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
} catch {
|
|
93
|
+
// Includes native AbortError rejections. Disposed generations cannot publish or leak
|
|
94
|
+
// an unhandled promise, even when the HTTP boundary ignores cancellation.
|
|
95
|
+
publish({
|
|
96
|
+
state: 'failure'
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
void execute();
|
|
101
|
+
return ()=>{
|
|
102
|
+
current = false;
|
|
103
|
+
instance?.abortController?.abort();
|
|
104
|
+
};
|
|
105
|
+
}, [
|
|
106
|
+
request
|
|
107
|
+
]);
|
|
108
|
+
// Mask old data during the render that changes inputs, before effect cleanup/setup runs.
|
|
109
|
+
if (settled?.request !== request) return /*#__PURE__*/ jsx(SingleResultStatus, {
|
|
110
|
+
state: "loading"
|
|
111
|
+
});
|
|
112
|
+
return /*#__PURE__*/ jsx(SingleResultStatus, {
|
|
113
|
+
...settled.outcome
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export { SingleResultRuntime as default };
|
|
118
|
+
//# sourceMappingURL=SingleResultRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SingleResultRuntime.js","sources":["../../../data/SingleResultRuntime.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { useContext, useEffect, useMemo, useState } from 'react';\nimport { ArcContext } from '@cratis/arc.react';\nimport type { QueryFor } from '@cratis/arc/queries';\nimport type { BoundConstructor } from '../bindings/BoundConstructor';\nimport { SingleResultStatus } from './SingleResultStatus';\n\ninterface Props {\n query: BoundConstructor;\n queryArguments: Record<string, unknown>;\n resultField: string;\n}\n\ntype Outcome = { state: 'failure' | 'notFound' } | { state: 'success'; value: string };\n\n/**\n * Private execution owner. Arc owns validation, routing, HTTP and deserialization; this component\n * owns only request lifetime and presentation. No shared cache can hand B the result belonging to A.\n */\nexport default function SingleResultRuntime({ query, queryArguments, resultField }: Props) {\n const arc = useContext(ArcContext);\n const { microservice, apiBasePath, origin, httpHeadersCallback, queryVersion } = arc;\n // Identity is deliberate: hosts replace immutable committed arguments rather than mutating them.\n const request = useMemo(() => ({ query, queryArguments, resultField, microservice, apiBasePath, origin, httpHeadersCallback, queryVersion }),\n [query, queryArguments, resultField, microservice, apiBasePath, origin, httpHeadersCallback, queryVersion]);\n const [settled, setSettled] = useState<{ request: typeof request; outcome: Outcome }>();\n\n useEffect(() => {\n // Each effect setup is a generation, including StrictMode's setup/cleanup/setup replay.\n let current = true;\n let instance: QueryFor<unknown, Record<string, unknown>> | undefined;\n const publish = (outcome: Outcome) => {\n if (current) setSettled({ request, outcome });\n };\n const execute = async () => {\n try {\n // The registry intentionally stores constructors without an eager Arc dependency.\n instance = new request.query() as QueryFor<unknown, Record<string, unknown>>;\n if (instance.enumerable !== false) {\n publish({ state: 'failure' });\n return;\n }\n instance.setMicroservice(request.microservice);\n instance.setApiBasePath(request.apiBasePath ?? '');\n instance.setOrigin(request.origin ?? '');\n instance.setHttpHeadersCallback(request.httpHeadersCallback ?? (() => ({})));\n // Native perform validates required arguments and proxy rules before HTTP. No copying,\n // defaults, business validation, route construction or array wrapping happens here.\n const result = await instance.perform(request.queryArguments);\n if (!current) return;\n if (result.isSuccess !== true || result.isAuthorized !== true || result.isValid !== true || result.hasExceptions !== false || result.isReady === false) {\n publish({ state: 'failure' });\n return;\n }\n if (result.data === null || result.data === undefined) {\n publish({ state: 'notFound' });\n return;\n }\n if (typeof result.data !== 'object' || Array.isArray(result.data)) {\n publish({ state: 'failure' });\n return;\n }\n // Only one own data field, never a path, inherited member, getter or expression.\n const descriptor = Object.getOwnPropertyDescriptor(result.data, request.resultField);\n const value: unknown = descriptor && 'value' in descriptor ? descriptor.value : undefined;\n if (typeof value === 'string' || typeof value === 'boolean' || (typeof value === 'number' && Number.isFinite(value))) {\n publish({ state: 'success', value: String(value) });\n } else {\n publish({ state: 'failure' });\n }\n } catch {\n // Includes native AbortError rejections. Disposed generations cannot publish or leak\n // an unhandled promise, even when the HTTP boundary ignores cancellation.\n publish({ state: 'failure' });\n }\n };\n void execute();\n return () => {\n current = false;\n instance?.abortController?.abort();\n };\n }, [request]);\n\n // Mask old data during the render that changes inputs, before effect cleanup/setup runs.\n if (settled?.request !== request) return <SingleResultStatus state='loading' />;\n return <SingleResultStatus {...settled.outcome} />;\n}\n"],"names":["SingleResultRuntime","query","queryArguments","resultField","arc","useContext","ArcContext","microservice","apiBasePath","origin","httpHeadersCallback","queryVersion","request","useMemo","settled","setSettled","useState","useEffect","current","instance","publish","outcome","execute","enumerable","state","setMicroservice","setApiBasePath","setOrigin","setHttpHeadersCallback","result","perform","isSuccess","isAuthorized","isValid","hasExceptions","isReady","data","undefined","Array","isArray","descriptor","Object","getOwnPropertyDescriptor","value","Number","isFinite","String","abortController","abort","_jsx","SingleResultStatus"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SingleResultStatus.d.ts","sourceRoot":"","sources":["../../../data/SingleResultStatus.tsx"],"names":[],"mappings":"AAGA,KAAK,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAKrE,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,+BAIpF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
4
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
5
|
+
const messages = {
|
|
6
|
+
idle: 'Idle',
|
|
7
|
+
loading: 'Loading',
|
|
8
|
+
notFound: 'Not found',
|
|
9
|
+
failure: 'Unable to load result',
|
|
10
|
+
success: ''
|
|
11
|
+
};
|
|
12
|
+
/** Internal shared presentation; never exposes query exception messages or server stack traces. */ function SingleResultStatus({ state, value }) {
|
|
13
|
+
return /*#__PURE__*/ jsx("span", {
|
|
14
|
+
role: state === 'failure' ? 'alert' : 'status',
|
|
15
|
+
"data-scene-single-result": state,
|
|
16
|
+
children: state === 'success' ? value : messages[state]
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { SingleResultStatus };
|
|
21
|
+
//# sourceMappingURL=SingleResultStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SingleResultStatus.js","sources":["../../../data/SingleResultStatus.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\ntype State = 'idle' | 'loading' | 'notFound' | 'failure' | 'success';\n\nconst messages = { idle: 'Idle', loading: 'Loading', notFound: 'Not found', failure: 'Unable to load result', success: '' };\n\n/** Internal shared presentation; never exposes query exception messages or server stack traces. */\nexport function SingleResultStatus({ state, value }: { state: State; value?: string }) {\n return <span role={state === 'failure' ? 'alert' : 'status'} data-scene-single-result={state}>\n {state === 'success' ? value : messages[state]}\n </span>;\n}\n"],"names":["messages","idle","loading","notFound","failure","success","SingleResultStatus","state","value","_jsx","span","role","data-scene-single-result"],"mappings":";;AAAA;AACA;AAIA,MAAMA,QAAAA,GAAW;IAAEC,IAAAA,EAAM,MAAA;IAAQC,OAAAA,EAAS,SAAA;IAAWC,QAAAA,EAAU,WAAA;IAAaC,OAAAA,EAAS,uBAAA;IAAyBC,OAAAA,EAAS;AAAG,CAAA;AAE1H,oGACO,SAASC,kBAAAA,CAAmB,EAAEC,KAAK,EAAEC,KAAK,EAAoC,EAAA;AACjF,IAAA,qBAAOC,GAAA,CAACC,MAAAA,EAAAA;QAAKC,IAAAA,EAAMJ,KAAAA,KAAU,YAAY,OAAA,GAAU,QAAA;QAAUK,0BAAAA,EAA0BL,KAAAA;AAClFA,QAAAA,QAAAA,EAAAA,KAAAA,KAAU,SAAA,GAAYC,KAAAA,GAAQR,QAAQ,CAACO,KAAAA;;AAEhD;;"}
|
|
@@ -2,10 +2,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { act, cleanup, render, screen } from '@testing-library/react';
|
|
3
3
|
import { vi } from 'vitest';
|
|
4
4
|
import { externalComponent } from '../../given';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class AnotherQuery {
|
|
8
|
-
}
|
|
5
|
+
let InvoicesForProject;
|
|
6
|
+
let AnotherQuery;
|
|
9
7
|
describe('when forwarding query arguments', () => {
|
|
10
8
|
const suppliedId = 'project-with-an-explicit-id';
|
|
11
9
|
const received = vi.fn();
|
|
@@ -20,6 +18,8 @@ describe('when forwarding query arguments', () => {
|
|
|
20
18
|
return _jsx("div", { "data-testid": 'query-table' });
|
|
21
19
|
},
|
|
22
20
|
}));
|
|
21
|
+
({ Snapshot: InvoicesForProject } = await import('../../bindings/for_requireArcProxy/NativeProxies'));
|
|
22
|
+
AnotherQuery = InvoicesForProject;
|
|
23
23
|
bindings = await import('../../bindings');
|
|
24
24
|
bindings.clearBindings();
|
|
25
25
|
bindings.registerQuery('InvoicesForProject', InvoicesForProject);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"when_forwarding_query_arguments.js","sourceRoot":"","sources":["../../../../data/for_SceneDataTable/when_forwarding_query_arguments.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,
|
|
1
|
+
{"version":3,"file":"when_forwarding_query_arguments.js","sourceRoot":"","sources":["../../../../data/for_SceneDataTable/when_forwarding_query_arguments.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_executing_a_native_query.d.ts","sourceRoot":"","sources":["../../../../data/for_SceneSingleResult/when_executing_a_native_query.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { act, cleanup, render, screen, waitFor } from '@testing-library/react';
|
|
3
|
+
import { expect, vi } from 'vitest';
|
|
4
|
+
import { StrictMode } from 'react';
|
|
5
|
+
import { ArcContext } from '@cratis/arc.react';
|
|
6
|
+
import { QueryFor, QueryHttpMethod, QueryValidator } from '@cratis/arc/queries';
|
|
7
|
+
import { clearBindings, registerQuery } from '../../bindings';
|
|
8
|
+
import { externalComponent } from '../../given';
|
|
9
|
+
import { SceneSingleResult } from '../SceneSingleResult';
|
|
10
|
+
class ProjectName extends QueryFor {
|
|
11
|
+
route = '/projects/{projectId}/name';
|
|
12
|
+
parameterDescriptors = [];
|
|
13
|
+
requiredRequestParameters = ['projectId'];
|
|
14
|
+
defaultValue = undefined;
|
|
15
|
+
constructor() {
|
|
16
|
+
super(Object, false);
|
|
17
|
+
this.setHttpMethod(QueryHttpMethod.Get);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
class ProjectNames extends QueryFor {
|
|
21
|
+
route = '/projects';
|
|
22
|
+
parameterDescriptors = [];
|
|
23
|
+
requiredRequestParameters = [];
|
|
24
|
+
defaultValue = [];
|
|
25
|
+
constructor() { super(Object, true); }
|
|
26
|
+
}
|
|
27
|
+
class ProjectArgumentsValidator extends QueryValidator {
|
|
28
|
+
static received;
|
|
29
|
+
constructor() {
|
|
30
|
+
super();
|
|
31
|
+
this.ruleFor(args => {
|
|
32
|
+
ProjectArgumentsValidator.received = args;
|
|
33
|
+
return args.projectId;
|
|
34
|
+
}).minLength(2);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
class ValidatedProjectName extends ProjectName {
|
|
38
|
+
validation = new ProjectArgumentsValidator();
|
|
39
|
+
}
|
|
40
|
+
function envelope(data, overrides = {}) {
|
|
41
|
+
return {
|
|
42
|
+
data, isSuccess: true, isAuthorized: true, isValid: true, hasExceptions: false,
|
|
43
|
+
validationResults: [], exceptionMessages: [], exceptionStackTrace: '',
|
|
44
|
+
paging: { page: 0, size: 0, totalItems: 0, totalPages: 0 }, ...overrides,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function response(data, overrides = {}) {
|
|
48
|
+
return { ok: true, status: 200, json: async () => envelope(data, overrides) };
|
|
49
|
+
}
|
|
50
|
+
function deferred() {
|
|
51
|
+
let resolve;
|
|
52
|
+
let reject;
|
|
53
|
+
const promise = new Promise((yes, no) => { resolve = yes; reject = no; });
|
|
54
|
+
return { promise, resolve, reject };
|
|
55
|
+
}
|
|
56
|
+
describe('when executing an optional single result with native Arc 22.16.1', () => {
|
|
57
|
+
const headers = () => ({ 'x-host': 'one' });
|
|
58
|
+
const context = { microservice: 'projects', origin: 'https://example.test', apiBasePath: '/backend', httpHeadersCallback: headers };
|
|
59
|
+
const fetch = vi.fn();
|
|
60
|
+
function view(queryArguments = { projectId: 'A' }, arc = context, properties = {}) {
|
|
61
|
+
return _jsx(ArcContext.Provider, { value: arc, children: _jsx(SceneSingleResult, { element: externalComponent('Cratis.Components:singleResult', {
|
|
62
|
+
query: 'ProjectName', queryArguments, enabled: true, resultField: 'name', ...properties,
|
|
63
|
+
}), slots: {} }) });
|
|
64
|
+
}
|
|
65
|
+
beforeEach(() => {
|
|
66
|
+
clearBindings();
|
|
67
|
+
registerQuery('ProjectName', ProjectName);
|
|
68
|
+
registerQuery('ProjectNames', ProjectNames);
|
|
69
|
+
registerQuery('ValidatedProjectName', ValidatedProjectName);
|
|
70
|
+
fetch.mockReset();
|
|
71
|
+
vi.stubGlobal('fetch', fetch);
|
|
72
|
+
});
|
|
73
|
+
afterEach(() => {
|
|
74
|
+
cleanup();
|
|
75
|
+
clearBindings();
|
|
76
|
+
vi.unstubAllGlobals();
|
|
77
|
+
});
|
|
78
|
+
it('uses the native URL, arguments and context headers without changing the host object', async () => {
|
|
79
|
+
const args = Object.freeze({ projectId: 'AA', locale: 'en' });
|
|
80
|
+
fetch.mockResolvedValue(response({ name: '<b>Project A</b>' }));
|
|
81
|
+
await act(async () => { render(view(args, context, { query: 'ValidatedProjectName' })); });
|
|
82
|
+
expect(await screen.findByText('<b>Project A</b>')).not.toBeNull();
|
|
83
|
+
expect(document.querySelector('b')).toBeNull();
|
|
84
|
+
expect(fetch).toHaveBeenCalledTimes(1);
|
|
85
|
+
const [url, init] = fetch.mock.calls[0];
|
|
86
|
+
expect(String(url)).toBe('https://example.test/backend/projects/AA/name?locale=en');
|
|
87
|
+
expect(ProjectArgumentsValidator.received).toBe(args);
|
|
88
|
+
expect(new Headers(init?.headers).get('x-host')).toBe('one');
|
|
89
|
+
expect(new Headers(init?.headers).get('x-cratis-microservice')).toBe('projects');
|
|
90
|
+
expect(args).toEqual({ projectId: 'AA', locale: 'en' });
|
|
91
|
+
});
|
|
92
|
+
for (const value of [false, 0, '']) {
|
|
93
|
+
it(`renders scalar own-field ${JSON.stringify(value)} as present`, async () => {
|
|
94
|
+
fetch.mockResolvedValue(response({ name: value }));
|
|
95
|
+
await act(async () => { render(view()); });
|
|
96
|
+
await waitFor(() => expect(screen.getByRole('status').getAttribute('data-scene-single-result')).toBe('success'));
|
|
97
|
+
expect(screen.getByRole('status').textContent).toBe(String(value));
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
for (const data of [null, undefined]) {
|
|
101
|
+
it(`shows not found for successful ${String(data)}`, async () => {
|
|
102
|
+
fetch.mockResolvedValue(response(data));
|
|
103
|
+
await act(async () => { render(view()); });
|
|
104
|
+
expect(await screen.findByText('Not found')).not.toBeNull();
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
for (const failure of [{ isSuccess: false }, { isAuthorized: false }, { isValid: false }, { hasExceptions: true }]) {
|
|
108
|
+
it(`prioritizes failure over missing data: ${JSON.stringify(failure)}`, async () => {
|
|
109
|
+
fetch.mockResolvedValue(response(null, { ...failure, exceptionMessages: ['secret'], exceptionStackTrace: 'server stack' }));
|
|
110
|
+
await act(async () => { render(view()); });
|
|
111
|
+
expect(await screen.findByRole('alert')).toHaveProperty('textContent', 'Unable to load result');
|
|
112
|
+
expect(screen.queryByText('Not found')).toBeNull();
|
|
113
|
+
expect(document.body.textContent).not.toMatch(/secret|server stack/);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
for (const args of [{}, { projectId: '' }, { projectId: null }, [], null, 'A', undefined]) {
|
|
117
|
+
it(`does not send invalid or missing arguments: ${JSON.stringify(args)}`, async () => {
|
|
118
|
+
await act(async () => { render(view(args, context, { queryArguments: args })); });
|
|
119
|
+
expect(await screen.findByRole('alert')).not.toBeNull();
|
|
120
|
+
expect(fetch).not.toHaveBeenCalled();
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
it('lets the native proxy validator reject arguments without HTTP', async () => {
|
|
124
|
+
await act(async () => { render(view({ projectId: 'A' }, context, { query: 'ValidatedProjectName' })); });
|
|
125
|
+
expect(await screen.findByRole('alert')).not.toBeNull();
|
|
126
|
+
expect(fetch).not.toHaveBeenCalled();
|
|
127
|
+
});
|
|
128
|
+
for (const enabled of [false, undefined, 'true']) {
|
|
129
|
+
it(`is idle unless explicitly enabled: ${String(enabled)}`, async () => {
|
|
130
|
+
await act(async () => { render(view({ projectId: 'A' }, context, { enabled })); });
|
|
131
|
+
expect(screen.getByText('Idle')).not.toBeNull();
|
|
132
|
+
expect(fetch).not.toHaveBeenCalled();
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
it('never chooses another query when the binding is missing', async () => {
|
|
136
|
+
await act(async () => { render(view({}, context, { query: 'Missing' })); });
|
|
137
|
+
expect(screen.getByText(/Unresolved query binding 'Missing'/)).not.toBeNull();
|
|
138
|
+
expect(fetch).not.toHaveBeenCalled();
|
|
139
|
+
});
|
|
140
|
+
it('aborts A and ignores reverse completion when the transport ignores abort', async () => {
|
|
141
|
+
const a = deferred();
|
|
142
|
+
const b = deferred();
|
|
143
|
+
fetch.mockReturnValueOnce(a.promise).mockReturnValueOnce(b.promise);
|
|
144
|
+
let mounted;
|
|
145
|
+
await act(async () => { mounted = render(view()); });
|
|
146
|
+
expect(screen.getByText('Loading')).not.toBeNull();
|
|
147
|
+
const signal = fetch.mock.calls[0][1]?.signal;
|
|
148
|
+
await act(async () => { mounted.rerender(view({ projectId: 'B' })); });
|
|
149
|
+
expect(signal?.aborted).toBe(true);
|
|
150
|
+
await act(async () => { b.resolve(response({ name: 'B' })); });
|
|
151
|
+
expect(screen.getByText('B')).not.toBeNull();
|
|
152
|
+
await act(async () => { a.resolve(response({ name: 'A' })); });
|
|
153
|
+
expect(screen.queryByText('A')).toBeNull();
|
|
154
|
+
expect(screen.getByText('B')).not.toBeNull();
|
|
155
|
+
});
|
|
156
|
+
it('hides a settled A immediately on B and aborts B on disposal', async () => {
|
|
157
|
+
const b = deferred();
|
|
158
|
+
fetch.mockResolvedValueOnce(response({ name: 'A' })).mockReturnValueOnce(b.promise);
|
|
159
|
+
let mounted;
|
|
160
|
+
await act(async () => { mounted = render(view()); });
|
|
161
|
+
expect(screen.getByText('A')).not.toBeNull();
|
|
162
|
+
await act(async () => { mounted.rerender(view({ projectId: 'B' })); });
|
|
163
|
+
expect(screen.queryByText('A')).toBeNull();
|
|
164
|
+
expect(screen.getByText('Loading')).not.toBeNull();
|
|
165
|
+
mounted.unmount();
|
|
166
|
+
expect(fetch.mock.calls[1][1]?.signal?.aborted).toBe(true);
|
|
167
|
+
await act(async () => { b.reject(new DOMException('Aborted', 'AbortError')); });
|
|
168
|
+
});
|
|
169
|
+
it('reexecutes for header-only context changes and ignores the old response', async () => {
|
|
170
|
+
const a = deferred();
|
|
171
|
+
const b = deferred();
|
|
172
|
+
const args = { projectId: 'A' };
|
|
173
|
+
fetch.mockReturnValueOnce(a.promise).mockReturnValueOnce(b.promise);
|
|
174
|
+
let mounted;
|
|
175
|
+
await act(async () => { mounted = render(view(args)); });
|
|
176
|
+
await act(async () => { mounted.rerender(view(args, { ...context, httpHeadersCallback: () => ({ 'x-host': 'two' }) })); });
|
|
177
|
+
expect(fetch.mock.calls[0][1]?.signal?.aborted).toBe(true);
|
|
178
|
+
expect(new Headers(fetch.mock.calls[1][1]?.headers).get('x-host')).toBe('two');
|
|
179
|
+
await act(async () => { b.resolve(response({ name: 'New context' })); a.resolve(response({ name: 'Old context' })); });
|
|
180
|
+
expect(screen.getByText('New context')).not.toBeNull();
|
|
181
|
+
expect(screen.queryByText('Old context')).toBeNull();
|
|
182
|
+
});
|
|
183
|
+
it('rejects enumerable proxies before HTTP rather than adapting them to a single model', async () => {
|
|
184
|
+
await act(async () => { render(view({}, context, { query: 'ProjectNames' })); });
|
|
185
|
+
expect(await screen.findByRole('alert')).not.toBeNull();
|
|
186
|
+
expect(fetch).not.toHaveBeenCalled();
|
|
187
|
+
});
|
|
188
|
+
it('handles StrictMode disposal without an unhandled abort promise', async () => {
|
|
189
|
+
const a = deferred();
|
|
190
|
+
const b = deferred();
|
|
191
|
+
fetch.mockReturnValueOnce(a.promise).mockReturnValueOnce(b.promise);
|
|
192
|
+
await act(async () => { render(_jsx(StrictMode, { children: view() })); });
|
|
193
|
+
expect(fetch).toHaveBeenCalledTimes(2);
|
|
194
|
+
expect(fetch.mock.calls[0][1]?.signal?.aborted).toBe(true);
|
|
195
|
+
await act(async () => {
|
|
196
|
+
a.reject(new DOMException('Aborted', 'AbortError'));
|
|
197
|
+
b.resolve(response({ name: 'Current generation' }));
|
|
198
|
+
});
|
|
199
|
+
expect(screen.getByText('Current generation')).not.toBeNull();
|
|
200
|
+
});
|
|
201
|
+
it('ignores successful completion after unmount even if HTTP ignores abort', async () => {
|
|
202
|
+
const pending = deferred();
|
|
203
|
+
fetch.mockReturnValueOnce(pending.promise);
|
|
204
|
+
let mounted;
|
|
205
|
+
await act(async () => { mounted = render(view()); });
|
|
206
|
+
mounted.unmount();
|
|
207
|
+
expect(fetch.mock.calls[0][1]?.signal?.aborted).toBe(true);
|
|
208
|
+
await act(async () => { pending.resolve(response({ name: 'Disposed' })); });
|
|
209
|
+
expect(screen.queryByText('Disposed')).toBeNull();
|
|
210
|
+
});
|
|
211
|
+
it('turns transport rejection and malformed envelopes into safe failure', async () => {
|
|
212
|
+
fetch.mockRejectedValueOnce(new Error('private network detail'));
|
|
213
|
+
let mounted;
|
|
214
|
+
await act(async () => { mounted = render(view()); });
|
|
215
|
+
expect(await screen.findByRole('alert')).toHaveProperty('textContent', 'Unable to load result');
|
|
216
|
+
fetch.mockResolvedValueOnce({ ok: false, status: 500, json: async () => ({}) });
|
|
217
|
+
await act(async () => { mounted.rerender(view({ projectId: 'B' })); });
|
|
218
|
+
expect(await screen.findByRole('alert')).toHaveProperty('textContent', 'Unable to load result');
|
|
219
|
+
expect(document.body.textContent).not.toContain('private network detail');
|
|
220
|
+
});
|
|
221
|
+
it('aborts and clears a pending request when disabled', async () => {
|
|
222
|
+
const pending = deferred();
|
|
223
|
+
fetch.mockReturnValueOnce(pending.promise);
|
|
224
|
+
let mounted;
|
|
225
|
+
await act(async () => { mounted = render(view()); });
|
|
226
|
+
await act(async () => { mounted.rerender(view({ projectId: 'A' }, context, { enabled: false })); });
|
|
227
|
+
expect(fetch.mock.calls[0][1]?.signal?.aborted).toBe(true);
|
|
228
|
+
await act(async () => { pending.resolve(response({ name: 'Obsolete' })); });
|
|
229
|
+
expect(screen.getByText('Idle')).not.toBeNull();
|
|
230
|
+
expect(screen.queryByText('Obsolete')).toBeNull();
|
|
231
|
+
});
|
|
232
|
+
for (const change of [{ origin: 'https://other.test' }, { apiBasePath: '/v2' }, { microservice: 'other' }, { queryVersion: 1 }]) {
|
|
233
|
+
it(`invalidates a settled result after context changes: ${JSON.stringify(change)}`, async () => {
|
|
234
|
+
const pending = deferred();
|
|
235
|
+
const args = { projectId: 'A' };
|
|
236
|
+
fetch.mockResolvedValueOnce(response({ name: 'Old' })).mockReturnValueOnce(pending.promise);
|
|
237
|
+
let mounted;
|
|
238
|
+
await act(async () => { mounted = render(view(args)); });
|
|
239
|
+
await act(async () => { mounted.rerender(view(args, { ...context, ...change })); });
|
|
240
|
+
expect(screen.queryByText('Old')).toBeNull();
|
|
241
|
+
expect(screen.getByText('Loading')).not.toBeNull();
|
|
242
|
+
expect(fetch).toHaveBeenCalledTimes(2);
|
|
243
|
+
await act(async () => { pending.resolve(response({ name: 'New' })); });
|
|
244
|
+
expect(screen.getByText('New')).not.toBeNull();
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
for (const data of [{ name: {} }, { name: [] }, {}, Object.create({ name: 'Inherited' }), [{ name: 'A' }]]) {
|
|
248
|
+
it(`rejects non-scalar or absent own fields: ${JSON.stringify(data)}`, async () => {
|
|
249
|
+
fetch.mockResolvedValue(response(data));
|
|
250
|
+
await act(async () => { render(view()); });
|
|
251
|
+
expect(await screen.findByRole('alert')).not.toBeNull();
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
//# sourceMappingURL=when_executing_a_native_query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_executing_a_native_query.js","sourceRoot":"","sources":["../../../../data/for_SceneSingleResult/when_executing_a_native_query.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_gating_the_lazy_runtime.d.ts","sourceRoot":"","sources":["../../../../data/for_SceneSingleResult/when_gating_the_lazy_runtime.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { act, cleanup, render, screen } from '@testing-library/react';
|
|
3
|
+
import { expect, vi } from 'vitest';
|
|
4
|
+
import { externalComponent } from '../../given';
|
|
5
|
+
class RegisteredQuery {
|
|
6
|
+
}
|
|
7
|
+
describe('when gating the single result lazy runtime', () => {
|
|
8
|
+
const loaded = vi.fn();
|
|
9
|
+
let SceneSingleResult;
|
|
10
|
+
let bindings;
|
|
11
|
+
beforeEach(async () => {
|
|
12
|
+
vi.resetModules();
|
|
13
|
+
loaded.mockClear();
|
|
14
|
+
vi.doMock('../SingleResultRuntime', () => {
|
|
15
|
+
loaded();
|
|
16
|
+
return { default: () => _jsx("span", { children: "Runtime mounted" }) };
|
|
17
|
+
});
|
|
18
|
+
bindings = await import('../../bindings');
|
|
19
|
+
bindings.clearBindings();
|
|
20
|
+
bindings.registerQuery('Registered', RegisteredQuery);
|
|
21
|
+
({ SceneSingleResult } = await import('../SceneSingleResult'));
|
|
22
|
+
});
|
|
23
|
+
afterEach(() => {
|
|
24
|
+
cleanup();
|
|
25
|
+
bindings.clearBindings();
|
|
26
|
+
vi.doUnmock('../SingleResultRuntime');
|
|
27
|
+
vi.resetModules();
|
|
28
|
+
});
|
|
29
|
+
for (const properties of [
|
|
30
|
+
{ query: 'Missing', enabled: true, queryArguments: {}, resultField: 'name' },
|
|
31
|
+
{ query: 'Registered', queryArguments: {}, resultField: 'name' },
|
|
32
|
+
{ query: 'Registered', enabled: true, queryArguments: [], resultField: 'name' },
|
|
33
|
+
{ query: 'Registered', enabled: true, queryArguments: {}, resultField: '' },
|
|
34
|
+
]) {
|
|
35
|
+
it(`does not import Arc-bound code for ${JSON.stringify(properties)}`, async () => {
|
|
36
|
+
await act(async () => {
|
|
37
|
+
render(_jsx(SceneSingleResult, { element: externalComponent('Cratis.Components:singleResult', properties), slots: {} }));
|
|
38
|
+
});
|
|
39
|
+
expect(loaded).not.toHaveBeenCalled();
|
|
40
|
+
expect(screen.queryByText('Runtime mounted')).toBeNull();
|
|
41
|
+
expect(document.body.textContent).toMatch(/Unresolved query binding|Idle|Unable to load result/);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
it('loads only the explicitly bound and enabled view', async () => {
|
|
45
|
+
await act(async () => {
|
|
46
|
+
render(_jsx(SceneSingleResult, { element: externalComponent('Cratis.Components:singleResult', {
|
|
47
|
+
query: 'Registered', enabled: true, queryArguments: {}, resultField: 'name',
|
|
48
|
+
}), slots: {} }));
|
|
49
|
+
});
|
|
50
|
+
expect(await screen.findByText('Runtime mounted')).not.toBeNull();
|
|
51
|
+
expect(loaded).toHaveBeenCalledTimes(1);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=when_gating_the_lazy_runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"when_gating_the_lazy_runtime.js","sourceRoot":"","sources":["../../../../data/for_SceneSingleResult/when_gating_the_lazy_runtime.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,eAAe;CAAG;AAExB,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IACxD,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IACvB,IAAI,iBAA0E,CAAC;IAC/E,IAAI,QAAyC,CAAC;IAE9C,UAAU,CAAC,KAAK,IAAI,EAAE;QAClB,EAAE,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,EAAE,CAAC,MAAM,CAAC,wBAAwB,EAAE,GAAG,EAAE;YACrC,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,6CAA4B,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;QACH,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC1C,QAAQ,CAAC,aAAa,EAAE,CAAC;QACzB,QAAQ,CAAC,aAAa,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QACtD,CAAC,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,OAAO,EAAE,CAAC;QACV,QAAQ,CAAC,aAAa,EAAE,CAAC;QACzB,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;QACtC,EAAE,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,UAAU,IAAI;QACrB,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;QAC5E,EAAE,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;QAChE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;QAC/E,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;KAC9E,EAAE,CAAC;QACA,EAAE,CAAC,sCAAsC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;gBACjB,MAAM,CAAC,KAAC,iBAAiB,IAAC,OAAO,EAAE,iBAAiB,CAAC,gCAAgC,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,GAAI,CAAC,CAAC;YACvH,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC;QACrG,CAAC,CAAC,CAAC;IACP,CAAC;IAED,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,CAAC,KAAC,iBAAiB,IAAC,OAAO,EAAE,iBAAiB,CAAC,gCAAgC,EAAE;oBACnF,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM;iBAC9E,CAAC,EAAE,KAAK,EAAE,EAAE,GAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
package/dist/esm/data/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../data/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../data/index.ts"],"names":[],"mappings":"AAGA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC"}
|
package/dist/esm/data/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../data/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../data/index.ts"],"names":[],"mappings":"AAGA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC"}
|
|
@@ -7,7 +7,7 @@ import { ArcRuntimeBoundary } from '../bindings/ArcRuntimeBoundary.js';
|
|
|
7
7
|
import { stringProperty, booleanProperty } from '../properties.js';
|
|
8
8
|
|
|
9
9
|
const CommandDialog = /*#__PURE__*/ lazy(async ()=>({
|
|
10
|
-
default: (await import('
|
|
10
|
+
default: (await import('../bindings/ArcBoundComponents.js')).BoundCommandDialog
|
|
11
11
|
}));
|
|
12
12
|
/**
|
|
13
13
|
* The `Cratis.Components:commandDialog` component - `CommandDialog` from `@cratis/components/CommandDialog`.
|