@trebired/result 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/LICENSE +21 -0
- package/README.md +184 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/presets.d.ts +6 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +156 -0
- package/dist/presets.js.map +1 -0
- package/dist/responder.d.ts +4 -0
- package/dist/responder.d.ts.map +1 -0
- package/dist/responder.js +116 -0
- package/dist/responder.js.map +1 -0
- package/dist/responder_support.d.ts +10 -0
- package/dist/responder_support.d.ts.map +1 -0
- package/dist/responder_support.js +88 -0
- package/dist/responder_support.js.map +1 -0
- package/dist/result.d.ts +23 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +89 -0
- package/dist/result.js.map +1 -0
- package/dist/shared.d.ts +19 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +175 -0
- package/dist/shared.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/presets.d.ts +6 -0
- package/dist/src/presets.d.ts.map +1 -0
- package/dist/src/presets.js +156 -0
- package/dist/src/presets.js.map +1 -0
- package/dist/src/responder.d.ts +4 -0
- package/dist/src/responder.d.ts.map +1 -0
- package/dist/src/responder.js +116 -0
- package/dist/src/responder.js.map +1 -0
- package/dist/src/responder_support.d.ts +10 -0
- package/dist/src/responder_support.d.ts.map +1 -0
- package/dist/src/responder_support.js +88 -0
- package/dist/src/responder_support.js.map +1 -0
- package/dist/src/result.d.ts +23 -0
- package/dist/src/result.d.ts.map +1 -0
- package/dist/src/result.js +89 -0
- package/dist/src/result.js.map +1 -0
- package/dist/src/shared.d.ts +19 -0
- package/dist/src/shared.d.ts.map +1 -0
- package/dist/src/shared.js +175 -0
- package/dist/src/shared.js.map +1 -0
- package/dist/src/types.d.ts +105 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/types.d.ts +105 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { resolveResultPreset } from "../presets.js";
|
|
2
|
+
import { createTextContext, handleRenderFailure, resolveDetails, resolveErrorCode, resolveMessage, resolveTitle, resolveView, } from "../responder_support.js";
|
|
3
|
+
import { buildResultRenderModePath, defaultResultStatus, extractResultExtras, getResultLevel, hasOwn, isObject, isPromiseLike, mergeMetadata, normalizeResultLike, toResultStatus, } from "../shared.js";
|
|
4
|
+
function createResultResponder(config) {
|
|
5
|
+
return {
|
|
6
|
+
respond(input) {
|
|
7
|
+
const context = createBaseContext(config, input);
|
|
8
|
+
if (input.render === true) {
|
|
9
|
+
const model = buildRenderModel(config, context);
|
|
10
|
+
return respondWithRender(config, context, model);
|
|
11
|
+
}
|
|
12
|
+
const jsonContext = createJsonContext(context);
|
|
13
|
+
return config.json(jsonContext);
|
|
14
|
+
},
|
|
15
|
+
resolvePreset(input) {
|
|
16
|
+
return resolveResultPreset({
|
|
17
|
+
...input,
|
|
18
|
+
presets: config.presets,
|
|
19
|
+
});
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function createBaseContext(config, input) {
|
|
24
|
+
const result = normalizeResultLike(input.result);
|
|
25
|
+
const level = getResultLevel(result);
|
|
26
|
+
const status = toResultStatus(result.status, level === "error" ? 400 : 200);
|
|
27
|
+
return {
|
|
28
|
+
req: input.req,
|
|
29
|
+
res: input.res,
|
|
30
|
+
input,
|
|
31
|
+
result,
|
|
32
|
+
level,
|
|
33
|
+
status,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function createJsonContext(context) {
|
|
37
|
+
return {
|
|
38
|
+
...context,
|
|
39
|
+
payload: buildJsonPayload(context),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function buildJsonPayload(context) {
|
|
43
|
+
const { input, level, result, status } = context;
|
|
44
|
+
const payload = {
|
|
45
|
+
ok: level !== "error",
|
|
46
|
+
error: level === "error" ? result.error !== false : false,
|
|
47
|
+
noop: level === "noop",
|
|
48
|
+
status,
|
|
49
|
+
error_code: resolveErrorCode(level, status, result),
|
|
50
|
+
message: resolveMessage(level, status, result, input),
|
|
51
|
+
data: hasOwn(result, "data") ? (result.data ?? null) : null,
|
|
52
|
+
};
|
|
53
|
+
if (hasOwn(result, "details") && result.details !== undefined) {
|
|
54
|
+
payload.details = result.details;
|
|
55
|
+
}
|
|
56
|
+
if (typeof result.redirect === "string" && result.redirect.length > 0) {
|
|
57
|
+
payload.redirect = result.redirect;
|
|
58
|
+
}
|
|
59
|
+
if (isObject(result.meta) && Object.keys(result.meta).length > 0) {
|
|
60
|
+
payload.meta = result.meta;
|
|
61
|
+
}
|
|
62
|
+
Object.assign(payload, extractResultExtras(result));
|
|
63
|
+
return payload;
|
|
64
|
+
}
|
|
65
|
+
function buildRenderModel(config, context) {
|
|
66
|
+
const { input, level, result } = context;
|
|
67
|
+
const preset = resolveResultPreset({
|
|
68
|
+
presets: config.presets,
|
|
69
|
+
level,
|
|
70
|
+
status: result.status,
|
|
71
|
+
type: input.type,
|
|
72
|
+
});
|
|
73
|
+
const status = toResultStatus(result.status, toResultStatus(preset.status, defaultResultStatus(level)));
|
|
74
|
+
const message = resolveMessage(level, status, result, input, preset);
|
|
75
|
+
const renderModePath = buildResultRenderModePath(config.getRenderModePath?.({
|
|
76
|
+
...context,
|
|
77
|
+
status,
|
|
78
|
+
}), level);
|
|
79
|
+
const meta = mergeMetadata(preset.meta, isObject(result.meta) ? result.meta : null, input.meta);
|
|
80
|
+
return {
|
|
81
|
+
level,
|
|
82
|
+
status,
|
|
83
|
+
type: (input.type || ""),
|
|
84
|
+
title: resolveTitle(level, status, result, input, preset),
|
|
85
|
+
message,
|
|
86
|
+
view: resolveView(result, input, preset),
|
|
87
|
+
details: resolveDetails(result, input),
|
|
88
|
+
meta,
|
|
89
|
+
error_code: resolveErrorCode(level, status, result),
|
|
90
|
+
redirect: typeof result.redirect === "string" && result.redirect.length > 0 ? result.redirect : null,
|
|
91
|
+
preset,
|
|
92
|
+
renderModePath,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function respondWithRender(config, context, model) {
|
|
96
|
+
const renderContext = {
|
|
97
|
+
...context,
|
|
98
|
+
status: model.status,
|
|
99
|
+
model,
|
|
100
|
+
};
|
|
101
|
+
if (!config.render) {
|
|
102
|
+
return config.text(createTextContext(renderContext, "no-renderer"));
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const rendered = config.render(renderContext);
|
|
106
|
+
if (isPromiseLike(rendered)) {
|
|
107
|
+
return Promise.resolve(rendered).catch((error) => handleRenderFailure(config, renderContext, error));
|
|
108
|
+
}
|
|
109
|
+
return rendered;
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
return handleRenderFailure(config, renderContext, error);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export { createResultResponder, };
|
|
116
|
+
//# sourceMappingURL=responder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responder.js","sourceRoot":"","sources":["../../src/responder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ResultLike, ResultPreset, ResultRenderContext, ResultResponderConfig, ResultResponderContextBase, ResultRespondInput, ResultTextContext } from "../types.js";
|
|
2
|
+
declare function createTextContext<Req = unknown, Res = unknown, TType extends string = string>(context: ResultRenderContext<Req, Res, TType>, cause: "fallback" | "no-renderer", renderError?: unknown): ResultTextContext<Req, Res, TType>;
|
|
3
|
+
declare function handleRenderFailure<Req = unknown, Res = unknown, TType extends string = string>(config: ResultResponderConfig<Req, Res, TType>, context: ResultRenderContext<Req, Res, TType>, error: unknown): unknown;
|
|
4
|
+
declare function resolveMessage<Req = unknown, Res = unknown, TType extends string = string>(level: ResultResponderContextBase<Req, Res, TType>["level"], status: number, result: ResultLike, input: ResultRespondInput<Req, Res, TType>, preset?: ResultPreset): string;
|
|
5
|
+
declare function resolveTitle<Req = unknown, Res = unknown, TType extends string = string>(level: ResultResponderContextBase<Req, Res, TType>["level"], status: number, result: ResultLike, input: ResultRespondInput<Req, Res, TType>, preset: ResultPreset): string;
|
|
6
|
+
declare function resolveView<Req = unknown, Res = unknown, TType extends string = string>(result: ResultLike, input: ResultRespondInput<Req, Res, TType>, preset: ResultPreset): string | null;
|
|
7
|
+
declare function resolveDetails<Req = unknown, Res = unknown, TType extends string = string>(result: ResultLike, input: ResultRespondInput<Req, Res, TType>): unknown;
|
|
8
|
+
declare function resolveErrorCode(level: ResultRenderContext["level"], status: number, result: ResultLike): string;
|
|
9
|
+
export { createTextContext, handleRenderFailure, resolveDetails, resolveErrorCode, resolveMessage, resolveTitle, resolveView, };
|
|
10
|
+
//# sourceMappingURL=responder_support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responder_support.d.ts","sourceRoot":"","sources":["../../src/responder_support.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,QAAQ,CAAC;AAEhB,iBAAS,iBAAiB,CACxB,GAAG,GAAG,OAAO,EACb,GAAG,GAAG,OAAO,EACb,KAAK,SAAS,MAAM,GAAG,MAAM,EAE7B,OAAO,EAAE,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAC7C,KAAK,EAAE,UAAU,GAAG,aAAa,EACjC,WAAW,CAAC,EAAE,OAAO,GACpB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAOpC;AAED,iBAAS,mBAAmB,CAC1B,GAAG,GAAG,OAAO,EACb,GAAG,GAAG,OAAO,EACb,KAAK,SAAS,MAAM,GAAG,MAAM,EAE7B,MAAM,EAAE,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAC9C,OAAO,EAAE,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAC7C,KAAK,EAAE,OAAO,WAYf;AAED,iBAAS,cAAc,CACrB,GAAG,GAAG,OAAO,EACb,GAAG,GAAG,OAAO,EACb,KAAK,SAAS,MAAM,GAAG,MAAM,EAE7B,KAAK,EAAE,0BAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,EAC3D,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAC1C,MAAM,CAAC,EAAE,YAAY,GACpB,MAAM,CAkBR;AAED,iBAAS,YAAY,CACnB,GAAG,GAAG,OAAO,EACb,GAAG,GAAG,OAAO,EACb,KAAK,SAAS,MAAM,GAAG,MAAM,EAE7B,KAAK,EAAE,0BAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,EAC3D,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAC1C,MAAM,EAAE,YAAY,GACnB,MAAM,CAgBR;AAED,iBAAS,WAAW,CAClB,GAAG,GAAG,OAAO,EACb,GAAG,GAAG,OAAO,EACb,KAAK,SAAS,MAAM,GAAG,MAAM,EAE7B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAC1C,MAAM,EAAE,YAAY,GACnB,MAAM,GAAG,IAAI,CAgBf;AAED,iBAAS,cAAc,CACrB,GAAG,GAAG,OAAO,EACb,GAAG,GAAG,OAAO,EACb,KAAK,SAAS,MAAM,GAAG,MAAM,EAE7B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GACzC,OAAO,CAUT;AAED,iBAAS,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAoBzG;AAED,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { defaultResultMessage, defaultResultTitle, defaultTextFallback, formatErrorMessage, hasOwn, normalizeResultErrorCode, } from "../shared.js";
|
|
2
|
+
function createTextContext(context, cause, renderError) {
|
|
3
|
+
return {
|
|
4
|
+
...context,
|
|
5
|
+
text: defaultTextFallback(context.model.level, context.model.status, context.model.title),
|
|
6
|
+
cause,
|
|
7
|
+
renderError,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function handleRenderFailure(config, context, error) {
|
|
11
|
+
config.logger?.error?.("result.responder", "render-failed", {
|
|
12
|
+
level: context.level,
|
|
13
|
+
status: context.model.status,
|
|
14
|
+
type: context.model.type || null,
|
|
15
|
+
view: context.model.view,
|
|
16
|
+
error: formatErrorMessage(error),
|
|
17
|
+
...context.model.meta,
|
|
18
|
+
});
|
|
19
|
+
return config.text(createTextContext(context, "fallback", error));
|
|
20
|
+
}
|
|
21
|
+
function resolveMessage(level, status, result, input, preset) {
|
|
22
|
+
if ((level === "ok" || level === "noop") && typeof input.successMessage === "string" && input.successMessage.trim()) {
|
|
23
|
+
return input.successMessage;
|
|
24
|
+
}
|
|
25
|
+
if (typeof input.message === "string" && input.message.trim()) {
|
|
26
|
+
return input.message;
|
|
27
|
+
}
|
|
28
|
+
if (typeof result.message === "string" && result.message.trim()) {
|
|
29
|
+
return result.message;
|
|
30
|
+
}
|
|
31
|
+
if (typeof preset?.message === "string" && preset.message.trim()) {
|
|
32
|
+
return preset.message;
|
|
33
|
+
}
|
|
34
|
+
return defaultResultMessage(level, status);
|
|
35
|
+
}
|
|
36
|
+
function resolveTitle(level, status, result, input, preset) {
|
|
37
|
+
const titleFromResult = typeof result.title === "string" ? result.title : "";
|
|
38
|
+
if (typeof input.title === "string" && input.title.trim()) {
|
|
39
|
+
return input.title;
|
|
40
|
+
}
|
|
41
|
+
if (titleFromResult.trim()) {
|
|
42
|
+
return titleFromResult;
|
|
43
|
+
}
|
|
44
|
+
if (typeof preset.title === "string" && preset.title.trim()) {
|
|
45
|
+
return preset.title;
|
|
46
|
+
}
|
|
47
|
+
return defaultResultTitle(level, status);
|
|
48
|
+
}
|
|
49
|
+
function resolveView(result, input, preset) {
|
|
50
|
+
const viewFromResult = typeof result.view === "string" ? result.view : "";
|
|
51
|
+
if (typeof input.view === "string" && input.view.trim()) {
|
|
52
|
+
return input.view;
|
|
53
|
+
}
|
|
54
|
+
if (viewFromResult.trim()) {
|
|
55
|
+
return viewFromResult;
|
|
56
|
+
}
|
|
57
|
+
if (typeof preset.view === "string" && preset.view.trim()) {
|
|
58
|
+
return preset.view;
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
function resolveDetails(result, input) {
|
|
63
|
+
if (input.details !== undefined) {
|
|
64
|
+
return input.details;
|
|
65
|
+
}
|
|
66
|
+
if (hasOwn(result, "details")) {
|
|
67
|
+
return result.details;
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
function resolveErrorCode(level, status, result) {
|
|
72
|
+
const normalized = normalizeResultErrorCode(result.error_code);
|
|
73
|
+
if (normalized) {
|
|
74
|
+
return normalized;
|
|
75
|
+
}
|
|
76
|
+
if (level === "noop") {
|
|
77
|
+
return "noop";
|
|
78
|
+
}
|
|
79
|
+
if (level === "ok") {
|
|
80
|
+
return "";
|
|
81
|
+
}
|
|
82
|
+
if (status === 404) {
|
|
83
|
+
return "not-found";
|
|
84
|
+
}
|
|
85
|
+
return "failed";
|
|
86
|
+
}
|
|
87
|
+
export { createTextContext, handleRenderFailure, resolveDetails, resolveErrorCode, resolveMessage, resolveTitle, resolveView, };
|
|
88
|
+
//# sourceMappingURL=responder_support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responder_support.js","sourceRoot":"","sources":["../../src/responder_support.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ResultInit, ResultLike, ResultMetadata } from "../types.js";
|
|
2
|
+
declare function ok<TData = unknown, TDetails = unknown, TMeta extends ResultMetadata = ResultMetadata>(message?: string, meta?: ResultInit<TData, TDetails, TMeta>): ResultLike<TData, TDetails, TMeta>;
|
|
3
|
+
declare function noop<TData = unknown, TDetails = unknown, TMeta extends ResultMetadata = ResultMetadata>(code?: string, message?: string, meta?: ResultInit<TData, TDetails, TMeta>): ResultLike<TData, TDetails, TMeta>;
|
|
4
|
+
declare function error<TData = unknown, TDetails = unknown, TMeta extends ResultMetadata = ResultMetadata>(status?: number, code?: string, message?: string, meta?: ResultInit<TData, TDetails, TMeta>): ResultLike<TData, TDetails, TMeta>;
|
|
5
|
+
declare function badRequest<TData = unknown, TDetails = unknown, TMeta extends ResultMetadata = ResultMetadata>(code?: string, message?: string, meta?: ResultInit<TData, TDetails, TMeta>): ResultLike<TData, TDetails, TMeta>;
|
|
6
|
+
declare function unauthorized<TData = unknown, TDetails = unknown, TMeta extends ResultMetadata = ResultMetadata>(code?: string, message?: string, meta?: ResultInit<TData, TDetails, TMeta>): ResultLike<TData, TDetails, TMeta>;
|
|
7
|
+
declare function forbidden<TData = unknown, TDetails = unknown, TMeta extends ResultMetadata = ResultMetadata>(code?: string, message?: string, meta?: ResultInit<TData, TDetails, TMeta>): ResultLike<TData, TDetails, TMeta>;
|
|
8
|
+
declare function notFound<TData = unknown, TDetails = unknown, TMeta extends ResultMetadata = ResultMetadata>(code?: string, message?: string, meta?: ResultInit<TData, TDetails, TMeta>): ResultLike<TData, TDetails, TMeta>;
|
|
9
|
+
declare function conflict<TData = unknown, TDetails = unknown, TMeta extends ResultMetadata = ResultMetadata>(code?: string, message?: string, meta?: ResultInit<TData, TDetails, TMeta>): ResultLike<TData, TDetails, TMeta>;
|
|
10
|
+
declare function internal<TData = unknown, TDetails = unknown, TMeta extends ResultMetadata = ResultMetadata>(code?: string, message?: string, meta?: ResultInit<TData, TDetails, TMeta>): ResultLike<TData, TDetails, TMeta>;
|
|
11
|
+
declare const result: {
|
|
12
|
+
readonly ok: typeof ok;
|
|
13
|
+
readonly noop: typeof noop;
|
|
14
|
+
readonly error: typeof error;
|
|
15
|
+
readonly badRequest: typeof badRequest;
|
|
16
|
+
readonly unauthorized: typeof unauthorized;
|
|
17
|
+
readonly forbidden: typeof forbidden;
|
|
18
|
+
readonly notFound: typeof notFound;
|
|
19
|
+
readonly conflict: typeof conflict;
|
|
20
|
+
readonly internal: typeof internal;
|
|
21
|
+
};
|
|
22
|
+
export { badRequest, conflict, error, forbidden, internal, noop, notFound, ok, result, unauthorized, };
|
|
23
|
+
//# sourceMappingURL=result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/result.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { hasOwn, normalizeResultErrorCode, toResultStatus } from "../shared.js";
|
|
2
|
+
function ok(message = "Success.", meta) {
|
|
3
|
+
return createResult({
|
|
4
|
+
ok: true,
|
|
5
|
+
error: false,
|
|
6
|
+
noop: false,
|
|
7
|
+
status: 200,
|
|
8
|
+
error_code: "",
|
|
9
|
+
message,
|
|
10
|
+
meta,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function noop(code = "noop", message = "No changes.", meta) {
|
|
14
|
+
return createResult({
|
|
15
|
+
ok: true,
|
|
16
|
+
error: false,
|
|
17
|
+
noop: true,
|
|
18
|
+
status: 200,
|
|
19
|
+
error_code: normalizeResultErrorCode(code) || "noop",
|
|
20
|
+
message,
|
|
21
|
+
meta,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function error(status = 400, code = "failed", message = "Request failed.", meta) {
|
|
25
|
+
return createResult({
|
|
26
|
+
ok: false,
|
|
27
|
+
error: typeof meta?.error === "boolean" ? meta.error : true,
|
|
28
|
+
noop: false,
|
|
29
|
+
status: toResultStatus(status, 400),
|
|
30
|
+
error_code: normalizeResultErrorCode(code) || "failed",
|
|
31
|
+
message,
|
|
32
|
+
meta,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function badRequest(code = "bad-request", message = "Bad request.", meta) {
|
|
36
|
+
return error(400, code, message, meta);
|
|
37
|
+
}
|
|
38
|
+
function unauthorized(code = "unauthorized", message = "Unauthorized.", meta) {
|
|
39
|
+
return error(401, code, message, meta);
|
|
40
|
+
}
|
|
41
|
+
function forbidden(code = "forbidden", message = "Forbidden.", meta) {
|
|
42
|
+
return error(403, code, message, meta);
|
|
43
|
+
}
|
|
44
|
+
function notFound(code = "not-found", message = "Not found.", meta) {
|
|
45
|
+
return error(404, code, message, meta);
|
|
46
|
+
}
|
|
47
|
+
function conflict(code = "conflict", message = "Conflict.", meta) {
|
|
48
|
+
return error(409, code, message, meta);
|
|
49
|
+
}
|
|
50
|
+
function internal(code = "internal-error", message = "Internal error.", meta) {
|
|
51
|
+
return error(500, code, message, {
|
|
52
|
+
...meta,
|
|
53
|
+
error: typeof meta?.error === "boolean" ? meta.error : true,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const result = {
|
|
57
|
+
ok,
|
|
58
|
+
noop,
|
|
59
|
+
error,
|
|
60
|
+
badRequest,
|
|
61
|
+
unauthorized,
|
|
62
|
+
forbidden,
|
|
63
|
+
notFound,
|
|
64
|
+
conflict,
|
|
65
|
+
internal,
|
|
66
|
+
};
|
|
67
|
+
function createResult({ ok, error, noop, status, error_code, message, meta, }) {
|
|
68
|
+
const out = {
|
|
69
|
+
ok,
|
|
70
|
+
error,
|
|
71
|
+
noop,
|
|
72
|
+
status,
|
|
73
|
+
error_code,
|
|
74
|
+
message,
|
|
75
|
+
data: hasOwn(meta, "data") ? (meta?.data ?? null) : null,
|
|
76
|
+
};
|
|
77
|
+
if (hasOwn(meta, "details") && meta?.details !== undefined) {
|
|
78
|
+
out.details = meta.details;
|
|
79
|
+
}
|
|
80
|
+
if (typeof meta?.redirect === "string" && meta.redirect.length > 0) {
|
|
81
|
+
out.redirect = meta.redirect;
|
|
82
|
+
}
|
|
83
|
+
if (meta?.meta && Object.keys(meta.meta).length > 0) {
|
|
84
|
+
out.meta = meta.meta;
|
|
85
|
+
}
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
export { badRequest, conflict, error, forbidden, internal, noop, notFound, ok, result, unauthorized, };
|
|
89
|
+
//# sourceMappingURL=result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/result.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ResultLevel, ResultLike, ResultMetadata } from "../types.js";
|
|
2
|
+
declare function isObject(value: unknown): value is Record<string, unknown>;
|
|
3
|
+
declare function hasOwn(value: unknown, key: string): boolean;
|
|
4
|
+
declare function toResultStatus(input: unknown, fallback: number): number;
|
|
5
|
+
declare function normalizeResultErrorCode(input: unknown): string;
|
|
6
|
+
declare function getResultLevel(resultLike: unknown): ResultLevel;
|
|
7
|
+
declare function normalizeResultLike(resultLike: ResultLike | null | undefined): ResultLike;
|
|
8
|
+
declare function mergeMetadata(...items: Array<unknown>): ResultMetadata;
|
|
9
|
+
declare function extractResultExtras(resultLike: ResultLike): ResultMetadata;
|
|
10
|
+
declare function typeHierarchy(type: string | null | undefined): string[];
|
|
11
|
+
declare function buildResultRenderModePath(basePath: string | null | undefined, level: ResultLevel): string;
|
|
12
|
+
declare function defaultResultStatus(level: ResultLevel): number;
|
|
13
|
+
declare function defaultResultTitle(level: ResultLevel, status: number): string;
|
|
14
|
+
declare function defaultResultMessage(level: ResultLevel, status: number): string;
|
|
15
|
+
declare function defaultTextFallback(level: ResultLevel, status: number, title: string): string;
|
|
16
|
+
declare function formatErrorMessage(error: unknown): string;
|
|
17
|
+
declare function isPromiseLike<T = unknown>(value: unknown): value is PromiseLike<T>;
|
|
18
|
+
export { buildResultRenderModePath, defaultResultMessage, defaultResultStatus, defaultResultTitle, defaultTextFallback, extractResultExtras, formatErrorMessage, getResultLevel, hasOwn, isObject, isPromiseLike, mergeMetadata, normalizeResultErrorCode, normalizeResultLike, toResultStatus, typeHierarchy, };
|
|
19
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAetE,iBAAS,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElE;AAED,iBAAS,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,iBAAS,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED,iBAAS,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWxD;AAED,iBAAS,cAAc,CAAC,UAAU,EAAE,OAAO,GAAG,WAAW,CAMxD;AAED,iBAAS,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAclF;AAED,iBAAS,aAAa,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,cAAc,CAY/D;AAED,iBAAS,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,CAYnE;AAED,iBAAS,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAehE;AAED,iBAAS,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAKlG;AAED,iBAAS,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAMvD;AAED,iBAAS,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA8BtE;AAED,iBAAS,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA8BxE;AAED,iBAAS,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBtF;AAED,iBAAS,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMlD;AAED,iBAAS,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAE3E;AAED,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,MAAM,EACN,QAAQ,EACR,aAAa,EACb,aAAa,EACb,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,CAAC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
const RESULT_CORE_KEYS = new Set([
|
|
2
|
+
"ok",
|
|
3
|
+
"error",
|
|
4
|
+
"noop",
|
|
5
|
+
"status",
|
|
6
|
+
"error_code",
|
|
7
|
+
"message",
|
|
8
|
+
"data",
|
|
9
|
+
"details",
|
|
10
|
+
"redirect",
|
|
11
|
+
"meta",
|
|
12
|
+
]);
|
|
13
|
+
function isObject(value) {
|
|
14
|
+
return value != null && typeof value === "object" && !Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
function hasOwn(value, key) {
|
|
17
|
+
return isObject(value) && Object.prototype.hasOwnProperty.call(value, key);
|
|
18
|
+
}
|
|
19
|
+
function toResultStatus(input, fallback) {
|
|
20
|
+
const current = Number(input);
|
|
21
|
+
if (Number.isFinite(current) && current >= 100 && current <= 599) {
|
|
22
|
+
return current;
|
|
23
|
+
}
|
|
24
|
+
return fallback;
|
|
25
|
+
}
|
|
26
|
+
function normalizeResultErrorCode(input) {
|
|
27
|
+
const current = typeof input === "string" ? input.trim().toLowerCase() : "";
|
|
28
|
+
if (!current) {
|
|
29
|
+
return "";
|
|
30
|
+
}
|
|
31
|
+
return current
|
|
32
|
+
.replace(/[^a-z0-9-]+/gu, "-")
|
|
33
|
+
.replace(/-+/gu, "-")
|
|
34
|
+
.replace(/^-+|-+$/gu, "");
|
|
35
|
+
}
|
|
36
|
+
function getResultLevel(resultLike) {
|
|
37
|
+
if (isObject(resultLike) && resultLike.ok === true) {
|
|
38
|
+
return resultLike.noop === true ? "noop" : "ok";
|
|
39
|
+
}
|
|
40
|
+
return "error";
|
|
41
|
+
}
|
|
42
|
+
function normalizeResultLike(resultLike) {
|
|
43
|
+
if (isObject(resultLike)) {
|
|
44
|
+
return resultLike;
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
ok: false,
|
|
48
|
+
error: true,
|
|
49
|
+
noop: false,
|
|
50
|
+
status: 500,
|
|
51
|
+
error_code: "invalid-result",
|
|
52
|
+
message: "Result payload is invalid.",
|
|
53
|
+
data: null,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function mergeMetadata(...items) {
|
|
57
|
+
const out = {};
|
|
58
|
+
for (const item of items) {
|
|
59
|
+
if (!isObject(item)) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
Object.assign(out, item);
|
|
63
|
+
}
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
function extractResultExtras(resultLike) {
|
|
67
|
+
const out = {};
|
|
68
|
+
for (const [key, value] of Object.entries(resultLike)) {
|
|
69
|
+
if (RESULT_CORE_KEYS.has(key)) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
out[key] = value;
|
|
73
|
+
}
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
function typeHierarchy(type) {
|
|
77
|
+
const current = typeof type === "string" ? type.trim() : "";
|
|
78
|
+
if (!current) {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
const parts = current.split(".").filter(Boolean);
|
|
82
|
+
const out = [];
|
|
83
|
+
for (let index = 0; index < parts.length; index += 1) {
|
|
84
|
+
out.push(parts.slice(0, index + 1).join("."));
|
|
85
|
+
}
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
function buildResultRenderModePath(basePath, level) {
|
|
89
|
+
const suffix = level === "ok" ? "success" : level;
|
|
90
|
+
const current = typeof basePath === "string" ? basePath.trim() : "";
|
|
91
|
+
return current ? `${current}.${suffix}` : suffix;
|
|
92
|
+
}
|
|
93
|
+
function defaultResultStatus(level) {
|
|
94
|
+
if (level === "error") {
|
|
95
|
+
return 500;
|
|
96
|
+
}
|
|
97
|
+
return 200;
|
|
98
|
+
}
|
|
99
|
+
function defaultResultTitle(level, status) {
|
|
100
|
+
if (level === "ok") {
|
|
101
|
+
return "Success";
|
|
102
|
+
}
|
|
103
|
+
if (level === "noop") {
|
|
104
|
+
return "No changes";
|
|
105
|
+
}
|
|
106
|
+
if (status === 400) {
|
|
107
|
+
return "Bad request";
|
|
108
|
+
}
|
|
109
|
+
if (status === 401) {
|
|
110
|
+
return "Unauthorized";
|
|
111
|
+
}
|
|
112
|
+
if (status === 403) {
|
|
113
|
+
return "Forbidden";
|
|
114
|
+
}
|
|
115
|
+
if (status === 404) {
|
|
116
|
+
return "Not Found";
|
|
117
|
+
}
|
|
118
|
+
if (status === 409) {
|
|
119
|
+
return "Conflict";
|
|
120
|
+
}
|
|
121
|
+
return "Oops..";
|
|
122
|
+
}
|
|
123
|
+
function defaultResultMessage(level, status) {
|
|
124
|
+
if (level === "ok") {
|
|
125
|
+
return "The request completed successfully.";
|
|
126
|
+
}
|
|
127
|
+
if (level === "noop") {
|
|
128
|
+
return "No changes were needed.";
|
|
129
|
+
}
|
|
130
|
+
if (status === 400) {
|
|
131
|
+
return "The request could not be completed.";
|
|
132
|
+
}
|
|
133
|
+
if (status === 401) {
|
|
134
|
+
return "You must sign in to continue.";
|
|
135
|
+
}
|
|
136
|
+
if (status === 403) {
|
|
137
|
+
return "You do not have access to this resource.";
|
|
138
|
+
}
|
|
139
|
+
if (status === 404) {
|
|
140
|
+
return "The requested resource does not exist.";
|
|
141
|
+
}
|
|
142
|
+
if (status === 409) {
|
|
143
|
+
return "The request conflicts with the current resource state.";
|
|
144
|
+
}
|
|
145
|
+
return "Something went wrong.";
|
|
146
|
+
}
|
|
147
|
+
function defaultTextFallback(level, status, title) {
|
|
148
|
+
if (level === "ok") {
|
|
149
|
+
return title || "Success";
|
|
150
|
+
}
|
|
151
|
+
if (level === "noop") {
|
|
152
|
+
return title || "No changes";
|
|
153
|
+
}
|
|
154
|
+
if (status === 404) {
|
|
155
|
+
return "Not Found";
|
|
156
|
+
}
|
|
157
|
+
if (status === 403) {
|
|
158
|
+
return "Forbidden";
|
|
159
|
+
}
|
|
160
|
+
if (status === 401) {
|
|
161
|
+
return "Unauthorized";
|
|
162
|
+
}
|
|
163
|
+
return title || "Internal Server Error";
|
|
164
|
+
}
|
|
165
|
+
function formatErrorMessage(error) {
|
|
166
|
+
if (error instanceof Error && error.message) {
|
|
167
|
+
return error.message;
|
|
168
|
+
}
|
|
169
|
+
return typeof error === "string" ? error : String(error);
|
|
170
|
+
}
|
|
171
|
+
function isPromiseLike(value) {
|
|
172
|
+
return typeof value === "object" && value != null && typeof value.then === "function";
|
|
173
|
+
}
|
|
174
|
+
export { buildResultRenderModePath, defaultResultMessage, defaultResultStatus, defaultResultTitle, defaultTextFallback, extractResultExtras, formatErrorMessage, getResultLevel, hasOwn, isObject, isPromiseLike, mergeMetadata, normalizeResultErrorCode, normalizeResultLike, toResultStatus, typeHierarchy, };
|
|
175
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/shared.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,IAAI;IACJ,OAAO;IACP,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,MAAM;IACN,SAAS;IACT,UAAU;IACV,MAAM;CACP,CAAC,CAAC;AAEH,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,MAAM,CAAC,KAAc,EAAE,GAAW;IACzC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,QAAgB;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE9B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;QACjE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,OAAO;SACX,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,cAAc,CAAC,UAAmB;IACzC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;QACnD,OAAO,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAyC;IACpE,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACzB,OAAO,UAAwB,CAAC;IAClC,CAAC;IAED,OAAO;QACL,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,GAAG;QACX,UAAU,EAAE,gBAAgB;QAC5B,OAAO,EAAE,4BAA4B;QACrC,IAAI,EAAE,IAAI;KACX,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAAG,KAAqB;IAC7C,MAAM,GAAG,GAAmB,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAsB;IACjD,MAAM,GAAG,GAAmB,EAAE,CAAC;IAE/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,IAA+B;IACpD,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,yBAAyB,CAAC,QAAmC,EAAE,KAAkB;IACxF,MAAM,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IAClD,MAAM,OAAO,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpE,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAkB;IAC7C,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAkB,EAAE,MAAc;IAC5D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAkB,EAAE,MAAc;IAC9D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,qCAAqC,CAAC;IAC/C,CAAC;IAED,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,yBAAyB,CAAC;IACnC,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,qCAAqC,CAAC;IAC/C,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,+BAA+B,CAAC;IACzC,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,0CAA0C,CAAC;IACpD,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,wCAAwC,CAAC;IAClD,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,wDAAwD,CAAC;IAClE,CAAC;IAED,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAkB,EAAE,MAAc,EAAE,KAAa;IAC5E,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,KAAK,IAAI,SAAS,CAAC;IAC5B,CAAC;IAED,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,KAAK,IAAI,YAAY,CAAC;IAC/B,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,KAAK,IAAI,uBAAuB,CAAC;AAC1C,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,aAAa,CAAc,KAAc;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,OAAQ,KAAwB,CAAC,IAAI,KAAK,UAAU,CAAC;AAC5G,CAAC;AAED,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,MAAM,EACN,QAAQ,EACR,aAAa,EACb,aAAa,EACb,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,CAAC"}
|