@shwfed/config 2.7.5 → 2.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mcp.mjs +73 -21
- package/dist/module.json +1 -1
- package/dist/preview/assets/badge-B0tiCpa_.js +1 -0
- package/dist/preview/assets/config-BG9TRQcv.js +1 -0
- package/dist/preview/assets/{config-ulTPyAGw.js → config-Bfb2sH6S.js} +1 -1
- package/dist/preview/assets/config-C-XJ-8Rs.js +1 -0
- package/dist/preview/assets/{config-ISM4vT-S.js → config-CGvnv-5x.js} +1 -1
- package/dist/preview/assets/config-DDPihojt.js +1 -0
- package/dist/preview/assets/config-Dafqx9xC.js +1 -0
- package/dist/preview/assets/{config-DBviu6U0.js → config-DqMRy1WL.js} +1 -1
- package/dist/preview/assets/{config-CtPQb6dK.js → config-GCvXe12z.js} +1 -1
- package/dist/preview/assets/{config-CYixJlBY.js → config-jDPbLgBr.js} +1 -1
- package/dist/preview/assets/definition.vue_vue_type_script_setup_true_lang-DBXfCj4Q.js +1 -0
- package/dist/preview/assets/{index-CqWUukUH.css → index-B0PL01fm.css} +1 -1
- package/dist/preview/assets/index-CHzOsSTW.js +680 -0
- package/dist/preview/assets/index-CSfKAdi7.js +1 -0
- package/dist/preview/assets/{index-D6fhWrrp.js → index-D7jDE3kp.js} +1 -1
- package/dist/preview/assets/item-DV-Garrg.js +1 -0
- package/dist/preview/assets/runtime-BovPWken.js +1 -0
- package/dist/preview/assets/runtime-BxBBFFHA.js +1 -0
- package/dist/preview/assets/{runtime-B7NcvR9y.js → runtime-CwmJ9MLQ.js} +1 -1
- package/dist/preview/assets/runtime-Cyjx6haa.js +1 -0
- package/dist/preview/assets/runtime-D-LBi56N.js +1 -0
- package/dist/preview/assets/{runtime-BqlrYWt_.js → runtime-DA77AmOP.js} +1 -1
- package/dist/preview/assets/{runtime-jVzpCkuu.js → runtime-DHTqFEQI.js} +1 -1
- package/dist/preview/assets/runtime-DKtlQWwc.js +1 -0
- package/dist/preview/assets/runtime-UmLaEUGf.js +1 -0
- package/dist/preview/index.html +2 -2
- package/dist/runtime/components/actions/buttons/2026-04-21/com.shwfed.actions.button.navigation/runtime.vue +16 -2
- package/dist/runtime/components/config/blocks/2026-05-17/com.shwfed.block.chart.xy/runtime.vue +2 -2
- package/dist/runtime/components/config/blocks/2026-06-01/com.shwfed.block.animated.number/item.vue +2 -2
- package/dist/runtime/components/config/blocks/2026-06-01/com.shwfed.block.animated.number/schema.js +2 -2
- package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/badge.vue +3 -2
- package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/schema.js +2 -2
- package/dist/runtime/components/config/config.vue +9 -1
- package/dist/runtime/components/config/index.vue +11 -1
- package/dist/runtime/components/config/schema.d.ts +25 -0
- package/dist/runtime/components/config/schema.js +8 -0
- package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.combobox.single.remote/runtime.vue +6 -5
- package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.combobox.single.remote/schema.js +2 -2
- package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/runtime.vue +3 -4
- package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/runtime.vue +3 -4
- package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/runtime.vue +3 -4
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/runtime.vue +6 -5
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/schema.js +2 -2
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/runtime.vue +6 -5
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/schema.js +2 -2
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/runtime.vue +3 -4
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/runtime.vue +3 -4
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/runtime.vue +3 -4
- package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/runtime.vue +3 -4
- package/dist/runtime/components/form/schema.js +2 -2
- package/dist/runtime/components/form/utils/initial.d.ts +5 -4
- package/dist/runtime/components/form/utils/initial.js +2 -2
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/runtime.vue +7 -6
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/schema.js +2 -2
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/runtime.vue +7 -6
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/schema.js +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/runtime.vue +7 -6
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/schema.js +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/runtime.vue +7 -6
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/schema.js +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/runtime.vue +7 -6
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/schema.js +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/runtime.vue +7 -6
- package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/schema.js +2 -2
- package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/runtime.vue +3 -4
- package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/schema.js +2 -2
- package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/runtime.vue +3 -4
- package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/schema.js +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/runtime.vue +7 -6
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/schema.js +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/runtime.vue +7 -6
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/schema.js +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/runtime.vue +3 -4
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/schema.js +2 -2
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/runtime.vue +3 -4
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/schema.js +2 -2
- package/dist/runtime/components/table/index.vue +3 -4
- package/dist/runtime/components/table/schema.js +3 -3
- package/dist/runtime/share/event-bus.d.ts +23 -4
- package/dist/runtime/share/expression.d.ts +13 -0
- package/dist/runtime/share/expression.js +1 -0
- package/dist/runtime/share/request.d.ts +29 -0
- package/dist/runtime/share/request.js +11 -0
- package/dist/runtime/vendor/cel-js/CLAUDE.md +2 -2
- package/dist/runtime/vendor/cel-js/PROMPT.md +35 -3
- package/dist/runtime/vendor/cel-js/lib/functions.js +2 -2
- package/dist/runtime/vendor/cel-js/lib/optional.js +52 -1
- package/package.json +1 -1
- package/dist/preview/assets/badge-DamXUB_x.js +0 -1
- package/dist/preview/assets/config-CXgHZFVu.js +0 -1
- package/dist/preview/assets/config-Dtj6xvFB.js +0 -1
- package/dist/preview/assets/config-DyKtOYYU.js +0 -1
- package/dist/preview/assets/config-v7KXfP3A.js +0 -1
- package/dist/preview/assets/definition.vue_vue_type_script_setup_true_lang-C-3KP_in.js +0 -1
- package/dist/preview/assets/index-CzxZSeNm.js +0 -680
- package/dist/preview/assets/index-DUSkLHHf.js +0 -1
- package/dist/preview/assets/item-BAj_4_7-.js +0 -1
- package/dist/preview/assets/runtime-CiWg_Jub.js +0 -1
- package/dist/preview/assets/runtime-CpMT9U1z.js +0 -1
- package/dist/preview/assets/runtime-CswN1gKf.js +0 -1
- package/dist/preview/assets/runtime-DOK5OTJn.js +0 -1
- package/dist/preview/assets/runtime-DldmFxn1.js +0 -1
- package/dist/preview/assets/runtime-WZBVKYom.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
|
-
import { Expression, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
2
|
+
import { Expression, HttpRequestResult, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
3
3
|
import { Locale } from "../../../../../share/locale.js";
|
|
4
4
|
import { Triggers } from "../../../../../share/event-bus.js";
|
|
5
5
|
import {
|
|
@@ -51,7 +51,7 @@ export function remoteOptionsSchema(configure) {
|
|
|
51
51
|
configure(env);
|
|
52
52
|
registerRowVariablesIfAbsent(env);
|
|
53
53
|
},
|
|
54
|
-
resultType:
|
|
54
|
+
resultType: HttpRequestResult
|
|
55
55
|
});
|
|
56
56
|
const CelOptions = Expression({
|
|
57
57
|
configure: (env) => {
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import { Icon } from "@iconify/vue";
|
|
3
|
-
import { Effect } from "effect";
|
|
3
|
+
import { Effect, Option } from "effect";
|
|
4
4
|
import { watchDebounced } from "@vueuse/core";
|
|
5
5
|
import { computed, nextTick, ref, watch } from "vue";
|
|
6
6
|
import { useI18n } from "vue-i18n";
|
|
7
7
|
import { cel as _rawCel } from "../../../../../utils/cel";
|
|
8
8
|
import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
|
|
9
9
|
import { getLocalizedText } from "../../../../../share/locale";
|
|
10
|
+
import { asRequest, fetchJsonOption } from "../../../../../share/request";
|
|
10
11
|
import {
|
|
11
12
|
Command,
|
|
12
13
|
CommandEmpty,
|
|
@@ -102,10 +103,10 @@ const requestSignature = computed(() => {
|
|
|
102
103
|
const expr = props.column.options.request;
|
|
103
104
|
if (!expr) return null;
|
|
104
105
|
try {
|
|
105
|
-
const
|
|
106
|
+
const req = asRequest(Effect.runSync(
|
|
106
107
|
$cel(expr, { row: row.value, index: rowIndex.value })
|
|
107
|
-
);
|
|
108
|
-
return JSON.stringify(
|
|
108
|
+
));
|
|
109
|
+
return Option.isSome(req) ? JSON.stringify(req.value.describe()) : null;
|
|
109
110
|
} catch {
|
|
110
111
|
return null;
|
|
111
112
|
}
|
|
@@ -120,8 +121,8 @@ async function fetchOptions() {
|
|
|
120
121
|
const expr = props.column.options.request;
|
|
121
122
|
remoteLoading.value = true;
|
|
122
123
|
const program = Effect.gen(function* () {
|
|
123
|
-
const
|
|
124
|
-
return
|
|
124
|
+
const json = yield* fetchJsonOption(yield* $cel(expr, { row: row.value, index: rowIndex.value }));
|
|
125
|
+
return Option.getOrNull(json);
|
|
125
126
|
});
|
|
126
127
|
try {
|
|
127
128
|
const result = await Effect.runPromise(Effect.provide(program, sharedFetchLayer));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import { getProperty } from "dot-prop";
|
|
3
3
|
import { Locale } from "../../../../../share/locale.js";
|
|
4
|
-
import { Expression, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
4
|
+
import { Expression, HttpRequestResult, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
5
5
|
import {
|
|
6
6
|
CelRowAccess,
|
|
7
7
|
derivedRowField,
|
|
@@ -52,7 +52,7 @@ export function remoteOptionsSchema(configure) {
|
|
|
52
52
|
configure(env);
|
|
53
53
|
registerRowVariablesIfAbsent(env);
|
|
54
54
|
},
|
|
55
|
-
resultType:
|
|
55
|
+
resultType: HttpRequestResult
|
|
56
56
|
});
|
|
57
57
|
const CelOptions = Expression({
|
|
58
58
|
configure: (env) => {
|
|
@@ -79,9 +79,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
79
79
|
};
|
|
80
80
|
}[];
|
|
81
81
|
};
|
|
82
|
-
readonly successMessage?: string | undefined;
|
|
83
82
|
readonly accessor: string;
|
|
84
83
|
readonly sortKey?: string | undefined;
|
|
84
|
+
readonly successMessage?: string | undefined;
|
|
85
85
|
}) => any;
|
|
86
86
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
87
87
|
"onUpdate:modelValue"?: ((value: {
|
|
@@ -160,9 +160,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
160
160
|
};
|
|
161
161
|
}[];
|
|
162
162
|
};
|
|
163
|
-
readonly successMessage?: string | undefined;
|
|
164
163
|
readonly accessor: string;
|
|
165
164
|
readonly sortKey?: string | undefined;
|
|
165
|
+
readonly successMessage?: string | undefined;
|
|
166
166
|
}) => any) | undefined;
|
|
167
167
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
168
168
|
declare const _default: typeof __VLS_export;
|
|
@@ -79,9 +79,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
79
79
|
};
|
|
80
80
|
}[];
|
|
81
81
|
};
|
|
82
|
-
readonly successMessage?: string | undefined;
|
|
83
82
|
readonly accessor: string;
|
|
84
83
|
readonly sortKey?: string | undefined;
|
|
84
|
+
readonly successMessage?: string | undefined;
|
|
85
85
|
}) => any;
|
|
86
86
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
87
87
|
"onUpdate:modelValue"?: ((value: {
|
|
@@ -160,9 +160,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
160
160
|
};
|
|
161
161
|
}[];
|
|
162
162
|
};
|
|
163
|
-
readonly successMessage?: string | undefined;
|
|
164
163
|
readonly accessor: string;
|
|
165
164
|
readonly sortKey?: string | undefined;
|
|
165
|
+
readonly successMessage?: string | undefined;
|
|
166
166
|
}) => any) | undefined;
|
|
167
167
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
168
168
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import { Icon } from "@iconify/vue";
|
|
3
|
-
import { Effect } from "effect";
|
|
3
|
+
import { Effect, Option } from "effect";
|
|
4
4
|
import { Fetch } from "fx-fetch";
|
|
5
5
|
import { watchDebounced } from "@vueuse/core";
|
|
6
6
|
import { toast } from "vue-sonner";
|
|
7
7
|
import { computed, nextTick, ref, watch } from "vue";
|
|
8
8
|
import { useI18n } from "vue-i18n";
|
|
9
|
+
import { asRequest, fetchJsonOption } from "../../../../../share/request";
|
|
9
10
|
import { cel as _rawCel } from "../../../../../utils/cel";
|
|
10
11
|
import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
|
|
11
12
|
import { getLocalizedText } from "../../../../../share/locale";
|
|
@@ -103,10 +104,10 @@ const requestSignature = computed(() => {
|
|
|
103
104
|
const expr = props.column.options.request;
|
|
104
105
|
if (!expr) return null;
|
|
105
106
|
try {
|
|
106
|
-
const
|
|
107
|
+
const req = asRequest(Effect.runSync(
|
|
107
108
|
$cel(expr, { row: row.value, index: rowIndex.value })
|
|
108
|
-
);
|
|
109
|
-
return JSON.stringify(
|
|
109
|
+
));
|
|
110
|
+
return Option.isSome(req) ? JSON.stringify(req.value.describe()) : null;
|
|
110
111
|
} catch {
|
|
111
112
|
return null;
|
|
112
113
|
}
|
|
@@ -121,8 +122,8 @@ async function fetchOptions() {
|
|
|
121
122
|
const expr = props.column.options.request;
|
|
122
123
|
remoteLoading.value = true;
|
|
123
124
|
const program = Effect.gen(function* () {
|
|
124
|
-
const
|
|
125
|
-
return
|
|
125
|
+
const json = yield* fetchJsonOption(yield* $cel(expr, { row: row.value, index: rowIndex.value }));
|
|
126
|
+
return Option.getOrNull(json);
|
|
126
127
|
});
|
|
127
128
|
try {
|
|
128
129
|
const result = await Effect.runPromise(Effect.provide(program, sharedFetchLayer));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
|
-
import { Expression, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
2
|
+
import { Expression, HttpRequestResult, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
3
3
|
import { Locale } from "../../../../../share/locale.js";
|
|
4
4
|
import { Triggers } from "../../../../../share/event-bus.js";
|
|
5
5
|
import {
|
|
@@ -51,7 +51,7 @@ export function remoteOptionsSchema(configure) {
|
|
|
51
51
|
configure(env);
|
|
52
52
|
registerRowVariablesIfAbsent(env);
|
|
53
53
|
},
|
|
54
|
-
resultType:
|
|
54
|
+
resultType: HttpRequestResult
|
|
55
55
|
});
|
|
56
56
|
const CelOptions = Expression({
|
|
57
57
|
configure: (env) => {
|
|
@@ -6,6 +6,7 @@ import { useI18n } from "vue-i18n";
|
|
|
6
6
|
import { cel as _rawCel } from "../../../../../utils/cel";
|
|
7
7
|
import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
|
|
8
8
|
import { getLocalizedText } from "../../../../../share/locale";
|
|
9
|
+
import { fetchJsonOption } from "../../../../../share/request";
|
|
9
10
|
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "../../../../ui/input-group";
|
|
10
11
|
import { Markdown } from "../../../../ui/markdown";
|
|
11
12
|
import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from "../../../../ui/popover";
|
|
@@ -143,12 +144,10 @@ async function fetchTree() {
|
|
|
143
144
|
const effect = Effect.gen(function* () {
|
|
144
145
|
let jsonOpt = Option.none();
|
|
145
146
|
if (dataSource.request) {
|
|
146
|
-
|
|
147
|
+
jsonOpt = yield* fetchJsonOption(yield* $cel(dataSource.request, {
|
|
147
148
|
row: row.value,
|
|
148
149
|
index: rowIndex.value
|
|
149
|
-
});
|
|
150
|
-
const response = yield* builder.json();
|
|
151
|
-
jsonOpt = Option.some(response);
|
|
150
|
+
}));
|
|
152
151
|
}
|
|
153
152
|
const dataRaw = yield* $cel(dataSource.data, {
|
|
154
153
|
row: row.value,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
2
|
import { getProperty } from "dot-prop";
|
|
3
3
|
import { Locale } from "../../../../../share/locale.js";
|
|
4
|
-
import { Expression, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
4
|
+
import { Expression, HttpRequestResult, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
5
5
|
import {
|
|
6
6
|
CelRowAccess,
|
|
7
7
|
derivedRowField,
|
|
@@ -36,7 +36,7 @@ export function schema(configure) {
|
|
|
36
36
|
};
|
|
37
37
|
const CelDataSourceRequest = Expression({
|
|
38
38
|
configure: dataSourceConfigure,
|
|
39
|
-
resultType:
|
|
39
|
+
resultType: HttpRequestResult
|
|
40
40
|
});
|
|
41
41
|
const CelDataSourceData = Expression({
|
|
42
42
|
configure: (env) => {
|
|
@@ -6,6 +6,7 @@ import { useI18n } from "vue-i18n";
|
|
|
6
6
|
import { cel as _rawCel } from "../../../../../utils/cel";
|
|
7
7
|
import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
|
|
8
8
|
import { getLocalizedText } from "../../../../../share/locale";
|
|
9
|
+
import { fetchJsonOption } from "../../../../../share/request";
|
|
9
10
|
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "../../../../ui/input-group";
|
|
10
11
|
import { Markdown } from "../../../../ui/markdown";
|
|
11
12
|
import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from "../../../../ui/popover";
|
|
@@ -146,12 +147,10 @@ async function fetchTree() {
|
|
|
146
147
|
const effect = Effect.gen(function* () {
|
|
147
148
|
let jsonOpt = Option.none();
|
|
148
149
|
if (dataSource.request) {
|
|
149
|
-
|
|
150
|
+
jsonOpt = yield* fetchJsonOption(yield* $cel(dataSource.request, {
|
|
150
151
|
row: row.value,
|
|
151
152
|
index: rowIndex.value
|
|
152
|
-
});
|
|
153
|
-
const response = yield* builder.json();
|
|
154
|
-
jsonOpt = Option.some(response);
|
|
153
|
+
}));
|
|
155
154
|
}
|
|
156
155
|
const dataRaw = yield* $cel(dataSource.data, {
|
|
157
156
|
row: row.value,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
2
|
import { getProperty } from "dot-prop";
|
|
3
3
|
import { Locale } from "../../../../../share/locale.js";
|
|
4
|
-
import { Expression, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
4
|
+
import { Expression, HttpRequestResult, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
5
5
|
import {
|
|
6
6
|
CelRowAccess,
|
|
7
7
|
derivedRowField,
|
|
@@ -36,7 +36,7 @@ export function schema(configure) {
|
|
|
36
36
|
};
|
|
37
37
|
const CelDataSourceRequest = Expression({
|
|
38
38
|
configure: dataSourceConfigure,
|
|
39
|
-
resultType:
|
|
39
|
+
resultType: HttpRequestResult
|
|
40
40
|
});
|
|
41
41
|
const CelDataSourceData = Expression({
|
|
42
42
|
configure: (env) => {
|
|
@@ -87,8 +87,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
87
87
|
readonly target: string;
|
|
88
88
|
readonly operation: string;
|
|
89
89
|
}[] | undefined;
|
|
90
|
-
readonly successMessage?: string | undefined;
|
|
91
90
|
readonly accessor: string;
|
|
91
|
+
readonly successMessage?: string | undefined;
|
|
92
92
|
};
|
|
93
93
|
}) => any;
|
|
94
94
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
@@ -176,8 +176,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
176
176
|
readonly target: string;
|
|
177
177
|
readonly operation: string;
|
|
178
178
|
}[] | undefined;
|
|
179
|
-
readonly successMessage?: string | undefined;
|
|
180
179
|
readonly accessor: string;
|
|
180
|
+
readonly successMessage?: string | undefined;
|
|
181
181
|
};
|
|
182
182
|
}) => any) | undefined;
|
|
183
183
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -87,8 +87,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
87
87
|
readonly target: string;
|
|
88
88
|
readonly operation: string;
|
|
89
89
|
}[] | undefined;
|
|
90
|
-
readonly successMessage?: string | undefined;
|
|
91
90
|
readonly accessor: string;
|
|
91
|
+
readonly successMessage?: string | undefined;
|
|
92
92
|
};
|
|
93
93
|
}) => any;
|
|
94
94
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
@@ -176,8 +176,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
176
176
|
readonly target: string;
|
|
177
177
|
readonly operation: string;
|
|
178
178
|
}[] | undefined;
|
|
179
|
-
readonly successMessage?: string | undefined;
|
|
180
179
|
readonly accessor: string;
|
|
180
|
+
readonly successMessage?: string | undefined;
|
|
181
181
|
};
|
|
182
182
|
}) => any) | undefined;
|
|
183
183
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import { Icon } from "@iconify/vue";
|
|
3
|
-
import { Effect } from "effect";
|
|
3
|
+
import { Effect, Option } from "effect";
|
|
4
4
|
import { Fetch } from "fx-fetch";
|
|
5
5
|
import { watchDebounced } from "@vueuse/core";
|
|
6
6
|
import { toast } from "vue-sonner";
|
|
7
7
|
import { computed, ref } from "vue";
|
|
8
8
|
import { useI18n } from "vue-i18n";
|
|
9
|
+
import { asRequest, fetchJsonOption } from "../../../../../share/request";
|
|
9
10
|
import { cel as _rawCel } from "../../../../../utils/cel";
|
|
10
11
|
import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
|
|
11
12
|
import { getLocalizedText } from "../../../../../share/locale";
|
|
@@ -108,10 +109,10 @@ const requestSignature = computed(() => {
|
|
|
108
109
|
const expr = props.column.options.request;
|
|
109
110
|
if (!expr) return null;
|
|
110
111
|
try {
|
|
111
|
-
const
|
|
112
|
+
const req = asRequest(Effect.runSync(
|
|
112
113
|
$cel(expr, { row: row.value, index: rowIndex.value })
|
|
113
|
-
);
|
|
114
|
-
return JSON.stringify(
|
|
114
|
+
));
|
|
115
|
+
return Option.isSome(req) ? JSON.stringify(req.value.describe()) : null;
|
|
115
116
|
} catch {
|
|
116
117
|
return null;
|
|
117
118
|
}
|
|
@@ -126,8 +127,8 @@ async function fetchOptions() {
|
|
|
126
127
|
const expr = props.column.options.request;
|
|
127
128
|
remoteLoading.value = true;
|
|
128
129
|
const program = Effect.gen(function* () {
|
|
129
|
-
const
|
|
130
|
-
return
|
|
130
|
+
const json = yield* fetchJsonOption(yield* $cel(expr, { row: row.value, index: rowIndex.value }));
|
|
131
|
+
return Option.getOrNull(json);
|
|
131
132
|
});
|
|
132
133
|
try {
|
|
133
134
|
const result = await Effect.runPromise(Effect.provide(program, sharedFetchLayer));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import { getProperty } from "dot-prop";
|
|
3
|
-
import { Expression, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
3
|
+
import { Expression, HttpRequestResult, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
4
4
|
import { Locale } from "../../../../../share/locale.js";
|
|
5
5
|
import { Triggers } from "../../../../../share/event-bus.js";
|
|
6
6
|
import {
|
|
@@ -58,7 +58,7 @@ export function remoteOptionsSchema(configure) {
|
|
|
58
58
|
configure(env);
|
|
59
59
|
registerRowVariablesIfAbsent(env);
|
|
60
60
|
},
|
|
61
|
-
resultType:
|
|
61
|
+
resultType: HttpRequestResult
|
|
62
62
|
});
|
|
63
63
|
const CelOptions = Expression({
|
|
64
64
|
configure: (env) => {
|
|
@@ -87,8 +87,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
87
87
|
readonly target: string;
|
|
88
88
|
readonly operation: string;
|
|
89
89
|
}[] | undefined;
|
|
90
|
-
readonly successMessage?: string | undefined;
|
|
91
90
|
readonly accessor: string;
|
|
91
|
+
readonly successMessage?: string | undefined;
|
|
92
92
|
};
|
|
93
93
|
}) => any;
|
|
94
94
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
@@ -176,8 +176,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
176
176
|
readonly target: string;
|
|
177
177
|
readonly operation: string;
|
|
178
178
|
}[] | undefined;
|
|
179
|
-
readonly successMessage?: string | undefined;
|
|
180
179
|
readonly accessor: string;
|
|
180
|
+
readonly successMessage?: string | undefined;
|
|
181
181
|
};
|
|
182
182
|
}) => any) | undefined;
|
|
183
183
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -87,8 +87,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
87
87
|
readonly target: string;
|
|
88
88
|
readonly operation: string;
|
|
89
89
|
}[] | undefined;
|
|
90
|
-
readonly successMessage?: string | undefined;
|
|
91
90
|
readonly accessor: string;
|
|
91
|
+
readonly successMessage?: string | undefined;
|
|
92
92
|
};
|
|
93
93
|
}) => any;
|
|
94
94
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
@@ -176,8 +176,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
176
176
|
readonly target: string;
|
|
177
177
|
readonly operation: string;
|
|
178
178
|
}[] | undefined;
|
|
179
|
-
readonly successMessage?: string | undefined;
|
|
180
179
|
readonly accessor: string;
|
|
180
|
+
readonly successMessage?: string | undefined;
|
|
181
181
|
};
|
|
182
182
|
}) => any) | undefined;
|
|
183
183
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import { Icon } from "@iconify/vue";
|
|
3
|
-
import { Effect } from "effect";
|
|
3
|
+
import { Effect, Option } from "effect";
|
|
4
4
|
import { Fetch } from "fx-fetch";
|
|
5
5
|
import { watchDebounced } from "@vueuse/core";
|
|
6
6
|
import { toast } from "vue-sonner";
|
|
7
7
|
import { computed, nextTick, ref, watch } from "vue";
|
|
8
8
|
import { useI18n } from "vue-i18n";
|
|
9
|
+
import { asRequest, fetchJsonOption } from "../../../../../share/request";
|
|
9
10
|
import { cel as _rawCel } from "../../../../../utils/cel";
|
|
10
11
|
import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
|
|
11
12
|
import { getLocalizedText } from "../../../../../share/locale";
|
|
@@ -108,10 +109,10 @@ const requestSignature = computed(() => {
|
|
|
108
109
|
const expr = props.column.options.request;
|
|
109
110
|
if (!expr) return null;
|
|
110
111
|
try {
|
|
111
|
-
const
|
|
112
|
+
const req = asRequest(Effect.runSync(
|
|
112
113
|
$cel(expr, { row: row.value, index: rowIndex.value })
|
|
113
|
-
);
|
|
114
|
-
return JSON.stringify(
|
|
114
|
+
));
|
|
115
|
+
return Option.isSome(req) ? JSON.stringify(req.value.describe()) : null;
|
|
115
116
|
} catch {
|
|
116
117
|
return null;
|
|
117
118
|
}
|
|
@@ -126,8 +127,8 @@ async function fetchOptions() {
|
|
|
126
127
|
const expr = props.column.options.request;
|
|
127
128
|
remoteLoading.value = true;
|
|
128
129
|
const program = Effect.gen(function* () {
|
|
129
|
-
const
|
|
130
|
-
return
|
|
130
|
+
const json = yield* fetchJsonOption(yield* $cel(expr, { row: row.value, index: rowIndex.value }));
|
|
131
|
+
return Option.getOrNull(json);
|
|
131
132
|
});
|
|
132
133
|
try {
|
|
133
134
|
const result = await Effect.runPromise(Effect.provide(program, sharedFetchLayer));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import { getProperty } from "dot-prop";
|
|
3
|
-
import { Expression, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
3
|
+
import { Expression, HttpRequestResult, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
4
4
|
import { Locale } from "../../../../../share/locale.js";
|
|
5
5
|
import { Triggers } from "../../../../../share/event-bus.js";
|
|
6
6
|
import {
|
|
@@ -58,7 +58,7 @@ export function remoteOptionsSchema(configure) {
|
|
|
58
58
|
configure(env);
|
|
59
59
|
registerRowVariablesIfAbsent(env);
|
|
60
60
|
},
|
|
61
|
-
resultType:
|
|
61
|
+
resultType: HttpRequestResult
|
|
62
62
|
});
|
|
63
63
|
const CelOptions = Expression({
|
|
64
64
|
configure: (env) => {
|
|
@@ -6,6 +6,7 @@ import { useI18n } from "vue-i18n";
|
|
|
6
6
|
import { cel as _rawCel } from "../../../../../utils/cel";
|
|
7
7
|
import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
|
|
8
8
|
import { getLocalizedText } from "../../../../../share/locale";
|
|
9
|
+
import { fetchJsonOption } from "../../../../../share/request";
|
|
9
10
|
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "../../../../ui/input-group";
|
|
10
11
|
import { Markdown } from "../../../../ui/markdown";
|
|
11
12
|
import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from "../../../../ui/popover";
|
|
@@ -156,12 +157,10 @@ async function fetchTree() {
|
|
|
156
157
|
const effect = Effect.gen(function* () {
|
|
157
158
|
let jsonOpt = Option.none();
|
|
158
159
|
if (dataSource.request) {
|
|
159
|
-
|
|
160
|
+
jsonOpt = yield* fetchJsonOption(yield* $cel(dataSource.request, {
|
|
160
161
|
row: row.value,
|
|
161
162
|
index: rowIndex.value
|
|
162
|
-
});
|
|
163
|
-
const response = yield* builder.json();
|
|
164
|
-
jsonOpt = Option.some(response);
|
|
163
|
+
}));
|
|
165
164
|
}
|
|
166
165
|
const dataRaw = yield* $cel(dataSource.data, {
|
|
167
166
|
row: row.value,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import { getProperty } from "dot-prop";
|
|
3
3
|
import { Locale } from "../../../../../share/locale.js";
|
|
4
|
-
import { Expression, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
4
|
+
import { Expression, HttpRequestResult, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
5
5
|
import {
|
|
6
6
|
CelRowAccess,
|
|
7
7
|
derivedRowField,
|
|
@@ -37,7 +37,7 @@ export function schema(configure) {
|
|
|
37
37
|
};
|
|
38
38
|
const CelDataSourceRequest = Expression({
|
|
39
39
|
configure: dataSourceConfigure,
|
|
40
|
-
resultType:
|
|
40
|
+
resultType: HttpRequestResult
|
|
41
41
|
});
|
|
42
42
|
const CelDataSourceData = Expression({
|
|
43
43
|
configure: (env) => {
|
|
@@ -6,6 +6,7 @@ import { useI18n } from "vue-i18n";
|
|
|
6
6
|
import { cel as _rawCel } from "../../../../../utils/cel";
|
|
7
7
|
import { celBindings, injectCELContext } from "../../../../../utils/cel-context";
|
|
8
8
|
import { getLocalizedText } from "../../../../../share/locale";
|
|
9
|
+
import { fetchJsonOption } from "../../../../../share/request";
|
|
9
10
|
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "../../../../ui/input-group";
|
|
10
11
|
import { Markdown } from "../../../../ui/markdown";
|
|
11
12
|
import { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from "../../../../ui/popover";
|
|
@@ -159,12 +160,10 @@ async function fetchTree() {
|
|
|
159
160
|
const effect = Effect.gen(function* () {
|
|
160
161
|
let jsonOpt = Option.none();
|
|
161
162
|
if (dataSource.request) {
|
|
162
|
-
|
|
163
|
+
jsonOpt = yield* fetchJsonOption(yield* $cel(dataSource.request, {
|
|
163
164
|
row: row.value,
|
|
164
165
|
index: rowIndex.value
|
|
165
|
-
});
|
|
166
|
-
const response = yield* builder.json();
|
|
167
|
-
jsonOpt = Option.some(response);
|
|
166
|
+
}));
|
|
168
167
|
}
|
|
169
168
|
const dataRaw = yield* $cel(dataSource.data, {
|
|
170
169
|
row: row.value,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import { getProperty } from "dot-prop";
|
|
3
3
|
import { Locale } from "../../../../../share/locale.js";
|
|
4
|
-
import { Expression, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
4
|
+
import { Expression, HttpRequestResult, LocaleMarkdown } from "../../../../../share/expression.js";
|
|
5
5
|
import {
|
|
6
6
|
CelRowAccess,
|
|
7
7
|
derivedRowField,
|
|
@@ -37,7 +37,7 @@ export function schema(configure) {
|
|
|
37
37
|
};
|
|
38
38
|
const CelDataSourceRequest = Expression({
|
|
39
39
|
configure: dataSourceConfigure,
|
|
40
|
-
resultType:
|
|
40
|
+
resultType: HttpRequestResult
|
|
41
41
|
});
|
|
42
42
|
const CelDataSourceData = Expression({
|
|
43
43
|
configure: (env) => {
|
|
@@ -14,6 +14,7 @@ import { Effect, Fiber, Option } from "effect";
|
|
|
14
14
|
import { Fetch } from "fx-fetch";
|
|
15
15
|
import { Pagination } from "reka-ui/namespaced";
|
|
16
16
|
import { computed, h, onMounted, ref, toRaw, watch } from "vue";
|
|
17
|
+
import { fetchJsonOption } from "../../share/request";
|
|
17
18
|
import { useI18n } from "vue-i18n";
|
|
18
19
|
import { celBindings, provideCELContext, injectCELContext } from "../../utils/cel-context";
|
|
19
20
|
import TableRowProvider from "./row-provider.vue";
|
|
@@ -336,12 +337,10 @@ async function fetchDataSource() {
|
|
|
336
337
|
const effect = Effect.gen(function* () {
|
|
337
338
|
let jsonOpt = Option.none();
|
|
338
339
|
if (dataSource.request) {
|
|
339
|
-
|
|
340
|
+
jsonOpt = yield* fetchJsonOption(yield* $cel(
|
|
340
341
|
dataSource.request,
|
|
341
342
|
mergeCelContext({ pageIndex, pageSize })
|
|
342
|
-
);
|
|
343
|
-
const response = yield* builder.json();
|
|
344
|
-
jsonOpt = Option.some(response);
|
|
343
|
+
));
|
|
345
344
|
}
|
|
346
345
|
const nextRowsRaw = yield* $cel(
|
|
347
346
|
dataSource.data,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
|
-
import { Expression } from "../../share/expression.js";
|
|
2
|
+
import { Expression, HttpRequestResult } from "../../share/expression.js";
|
|
3
3
|
import { Locale } from "../../share/locale.js";
|
|
4
4
|
import { md } from "../../share/markdown.js";
|
|
5
5
|
import { ActionSchemaFields } from "../actions/schema.js";
|
|
@@ -186,7 +186,7 @@ export function DataSource(configure, extras) {
|
|
|
186
186
|
configure(env);
|
|
187
187
|
extras?.request?.(env);
|
|
188
188
|
},
|
|
189
|
-
resultType:
|
|
189
|
+
resultType: HttpRequestResult
|
|
190
190
|
});
|
|
191
191
|
const CelRows = Expression({
|
|
192
192
|
configure: (env) => {
|
|
@@ -218,7 +218,7 @@ export function tableDataSource(configure) {
|
|
|
218
218
|
configure(env);
|
|
219
219
|
registerDataSourceRequestVars(env);
|
|
220
220
|
},
|
|
221
|
-
resultType:
|
|
221
|
+
resultType: HttpRequestResult
|
|
222
222
|
});
|
|
223
223
|
const CelRows = Expression({
|
|
224
224
|
configure: (env) => {
|
|
@@ -41,10 +41,29 @@ export type EventChannel = Readonly<{
|
|
|
41
41
|
}>;
|
|
42
42
|
/**
|
|
43
43
|
* Operation id → handler, for one operation-exposing instance. Handlers
|
|
44
|
-
* return an Effect so the bus can run them serially and in order.
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
44
|
+
* return an Effect so the bus can run them serially and in order.
|
|
45
|
+
*
|
|
46
|
+
* The `void` error channel pins handlers as infallible *failures* — a handler
|
|
47
|
+
* that hits a recoverable hiccup must swallow/log it internally (mirrors the
|
|
48
|
+
* table's fetch-error contract) rather than surface it, since the bus has no
|
|
49
|
+
* error channel to carry it.
|
|
50
|
+
*
|
|
51
|
+
* A handler MAY still *halt* the chain — the "guard" shape: stop everything
|
|
52
|
+
* queued after it. `dispatchTriggers` runs the list with `Effect.forEach`,
|
|
53
|
+
* which short-circuits the moment one request's effect aborts, so triggers
|
|
54
|
+
* after the guard never dispatch. The page's `close` op is the canonical case
|
|
55
|
+
* (it halts unconditionally — nothing should run after a close). It halts with
|
|
56
|
+
* `Effect.die`, not `Effect.fail`: a defect aborts the chain without widening
|
|
57
|
+
* the `void` error channel here (and `ActionEffect`'s `catchTags` union over in
|
|
58
|
+
* `actions/components/group.vue`). The defect propagates to that runner's
|
|
59
|
+
* `runPromise`, whose outer try/catch absorbs it silently — `catchTags` only
|
|
60
|
+
* intercepts typed failures, so no toast.
|
|
61
|
+
*
|
|
62
|
+
* Pre-submit form validation is the same guard shape but doesn't run over this
|
|
63
|
+
* bus yet — it injects the separate `share/form-validate` seam. The intended
|
|
64
|
+
* end state folds it in as a fallible `validate` operation here, at which point
|
|
65
|
+
* the error channel widens to carry a typed validation failure (see the note in
|
|
66
|
+
* `form-validate.ts`).
|
|
48
67
|
*/
|
|
49
68
|
export type OperationHandlers = Readonly<Record<string, () => Effect.Effect<void>>>;
|
|
50
69
|
export declare const EVENT_CHANNEL_KEY: InjectionKey<EventChannel>;
|