@msbci/form-server 1.2.0 → 1.3.1
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 +22 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +81 -13
- package/dist/index.d.ts +81 -13
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/prisma/schema.prisma +85 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PrismaClient } from '../generated/prisma';
|
|
2
|
-
import {
|
|
2
|
+
import { IFormDefinition } from '@msbci/form-core';
|
|
3
3
|
export { IFormDefinition, IFormPage, IFormRoster, IFormVariable } from '@msbci/form-core';
|
|
4
|
+
import { z } from 'zod';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Auth middleware — injectable hook for the host application.
|
|
@@ -132,6 +133,7 @@ declare class FormService {
|
|
|
132
133
|
pageSize: number;
|
|
133
134
|
search?: string;
|
|
134
135
|
tenantId?: string;
|
|
136
|
+
scopeId?: string;
|
|
135
137
|
}): Promise<{
|
|
136
138
|
items: ({
|
|
137
139
|
formType: {
|
|
@@ -174,6 +176,11 @@ declare class FormService {
|
|
|
174
176
|
createdAt: Date;
|
|
175
177
|
updatedAt: Date;
|
|
176
178
|
} | null;
|
|
179
|
+
scopes: {
|
|
180
|
+
order: number;
|
|
181
|
+
scopeId: string;
|
|
182
|
+
formId: string;
|
|
183
|
+
}[];
|
|
177
184
|
pages: ({
|
|
178
185
|
variables: {
|
|
179
186
|
id: string;
|
|
@@ -187,7 +194,9 @@ declare class FormService {
|
|
|
187
194
|
conditions: string | null;
|
|
188
195
|
options: string | null;
|
|
189
196
|
pageId: string | null;
|
|
197
|
+
templateOverrides: string | null;
|
|
190
198
|
type: string;
|
|
199
|
+
rosterId: string | null;
|
|
191
200
|
isRequired: boolean;
|
|
192
201
|
isReadonly: boolean;
|
|
193
202
|
isHidden: boolean;
|
|
@@ -198,7 +207,7 @@ declare class FormService {
|
|
|
198
207
|
dataSourceId: string | null;
|
|
199
208
|
dataSourceDependencies: string | null;
|
|
200
209
|
style: string | null;
|
|
201
|
-
|
|
210
|
+
templateId: string | null;
|
|
202
211
|
}[];
|
|
203
212
|
rosters: ({
|
|
204
213
|
variables: {
|
|
@@ -213,7 +222,9 @@ declare class FormService {
|
|
|
213
222
|
conditions: string | null;
|
|
214
223
|
options: string | null;
|
|
215
224
|
pageId: string | null;
|
|
225
|
+
templateOverrides: string | null;
|
|
216
226
|
type: string;
|
|
227
|
+
rosterId: string | null;
|
|
217
228
|
isRequired: boolean;
|
|
218
229
|
isReadonly: boolean;
|
|
219
230
|
isHidden: boolean;
|
|
@@ -224,7 +235,7 @@ declare class FormService {
|
|
|
224
235
|
dataSourceId: string | null;
|
|
225
236
|
dataSourceDependencies: string | null;
|
|
226
237
|
style: string | null;
|
|
227
|
-
|
|
238
|
+
templateId: string | null;
|
|
228
239
|
}[];
|
|
229
240
|
} & {
|
|
230
241
|
id: string;
|
|
@@ -248,13 +259,13 @@ declare class FormService {
|
|
|
248
259
|
createdAt: Date;
|
|
249
260
|
updatedAt: Date;
|
|
250
261
|
order: number;
|
|
262
|
+
formId: string;
|
|
251
263
|
isRepeatable: boolean;
|
|
252
264
|
repeatMinInstances: number | null;
|
|
253
265
|
repeatMaxInstances: number | null;
|
|
254
266
|
repeatControlVarCode: string | null;
|
|
255
267
|
repeatInstanceLabel: string | null;
|
|
256
268
|
conditions: string | null;
|
|
257
|
-
formId: string;
|
|
258
269
|
})[];
|
|
259
270
|
} & {
|
|
260
271
|
id: string;
|
|
@@ -279,6 +290,7 @@ declare class FormService {
|
|
|
279
290
|
isPublished?: boolean;
|
|
280
291
|
tenantId?: string;
|
|
281
292
|
formTypeId?: string;
|
|
293
|
+
scopeIds?: string[];
|
|
282
294
|
metadata?: Record<string, unknown>;
|
|
283
295
|
}, ctx?: IRequestContext): Promise<{
|
|
284
296
|
id: string;
|
|
@@ -302,8 +314,15 @@ declare class FormService {
|
|
|
302
314
|
version: string;
|
|
303
315
|
isPublished: boolean;
|
|
304
316
|
formTypeId: string;
|
|
317
|
+
scopeIds: string[];
|
|
305
318
|
metadata: Record<string, unknown>;
|
|
306
|
-
}>, ctx?: IRequestContext): Promise<{
|
|
319
|
+
}>, ctx?: IRequestContext): Promise<({
|
|
320
|
+
scopes: {
|
|
321
|
+
order: number;
|
|
322
|
+
scopeId: string;
|
|
323
|
+
formId: string;
|
|
324
|
+
}[];
|
|
325
|
+
} & {
|
|
307
326
|
id: string;
|
|
308
327
|
code: string;
|
|
309
328
|
name: string;
|
|
@@ -317,7 +336,14 @@ declare class FormService {
|
|
|
317
336
|
formTypeId: string | null;
|
|
318
337
|
createdBy: string | null;
|
|
319
338
|
updatedBy: string | null;
|
|
320
|
-
}>;
|
|
339
|
+
}) | null>;
|
|
340
|
+
/**
|
|
341
|
+
* Load a form by id and return it as a fully-resolved `IFormDefinition`
|
|
342
|
+
* (templates applied — Option B). Used by `GET /forms/:id/resolved` and
|
|
343
|
+
* `exportForm`. The original DB-include shape is still available via
|
|
344
|
+
* {@link getFormDefinition}.
|
|
345
|
+
*/
|
|
346
|
+
getResolvedFormDefinition(id: string): Promise<IFormDefinition>;
|
|
321
347
|
deleteFormDefinition(id: string): Promise<{
|
|
322
348
|
id: string;
|
|
323
349
|
code: string;
|
|
@@ -352,13 +378,13 @@ declare class FormService {
|
|
|
352
378
|
createdAt: Date;
|
|
353
379
|
updatedAt: Date;
|
|
354
380
|
order: number;
|
|
381
|
+
formId: string;
|
|
355
382
|
isRepeatable: boolean;
|
|
356
383
|
repeatMinInstances: number | null;
|
|
357
384
|
repeatMaxInstances: number | null;
|
|
358
385
|
repeatControlVarCode: string | null;
|
|
359
386
|
repeatInstanceLabel: string | null;
|
|
360
387
|
conditions: string | null;
|
|
361
|
-
formId: string;
|
|
362
388
|
}>;
|
|
363
389
|
updateFormPage(id: string, data: Partial<{
|
|
364
390
|
code: string;
|
|
@@ -379,13 +405,13 @@ declare class FormService {
|
|
|
379
405
|
createdAt: Date;
|
|
380
406
|
updatedAt: Date;
|
|
381
407
|
order: number;
|
|
408
|
+
formId: string;
|
|
382
409
|
isRepeatable: boolean;
|
|
383
410
|
repeatMinInstances: number | null;
|
|
384
411
|
repeatMaxInstances: number | null;
|
|
385
412
|
repeatControlVarCode: string | null;
|
|
386
413
|
repeatInstanceLabel: string | null;
|
|
387
414
|
conditions: string | null;
|
|
388
|
-
formId: string;
|
|
389
415
|
}>;
|
|
390
416
|
deleteFormPage(id: string): Promise<{
|
|
391
417
|
id: string;
|
|
@@ -395,13 +421,13 @@ declare class FormService {
|
|
|
395
421
|
createdAt: Date;
|
|
396
422
|
updatedAt: Date;
|
|
397
423
|
order: number;
|
|
424
|
+
formId: string;
|
|
398
425
|
isRepeatable: boolean;
|
|
399
426
|
repeatMinInstances: number | null;
|
|
400
427
|
repeatMaxInstances: number | null;
|
|
401
428
|
repeatControlVarCode: string | null;
|
|
402
429
|
repeatInstanceLabel: string | null;
|
|
403
430
|
conditions: string | null;
|
|
404
|
-
formId: string;
|
|
405
431
|
}>;
|
|
406
432
|
createFormRoster(pageId: string, data: {
|
|
407
433
|
code: string;
|
|
@@ -484,6 +510,8 @@ declare class FormService {
|
|
|
484
510
|
dataSourceDependencies?: Record<string, string>;
|
|
485
511
|
style?: unknown;
|
|
486
512
|
metadata?: Record<string, unknown>;
|
|
513
|
+
templateId?: string;
|
|
514
|
+
templateOverrides?: Record<string, unknown>;
|
|
487
515
|
}): Promise<{
|
|
488
516
|
id: string;
|
|
489
517
|
code: string;
|
|
@@ -496,7 +524,9 @@ declare class FormService {
|
|
|
496
524
|
conditions: string | null;
|
|
497
525
|
options: string | null;
|
|
498
526
|
pageId: string | null;
|
|
527
|
+
templateOverrides: string | null;
|
|
499
528
|
type: string;
|
|
529
|
+
rosterId: string | null;
|
|
500
530
|
isRequired: boolean;
|
|
501
531
|
isReadonly: boolean;
|
|
502
532
|
isHidden: boolean;
|
|
@@ -507,7 +537,7 @@ declare class FormService {
|
|
|
507
537
|
dataSourceId: string | null;
|
|
508
538
|
dataSourceDependencies: string | null;
|
|
509
539
|
style: string | null;
|
|
510
|
-
|
|
540
|
+
templateId: string | null;
|
|
511
541
|
}>;
|
|
512
542
|
updateFormVariable(id: string, data: Partial<{
|
|
513
543
|
code: string;
|
|
@@ -528,6 +558,8 @@ declare class FormService {
|
|
|
528
558
|
dataSourceDependencies: Record<string, string>;
|
|
529
559
|
style: unknown;
|
|
530
560
|
metadata: Record<string, unknown>;
|
|
561
|
+
templateId: string | null;
|
|
562
|
+
templateOverrides: Record<string, unknown> | null;
|
|
531
563
|
}>): Promise<{
|
|
532
564
|
id: string;
|
|
533
565
|
code: string;
|
|
@@ -540,7 +572,9 @@ declare class FormService {
|
|
|
540
572
|
conditions: string | null;
|
|
541
573
|
options: string | null;
|
|
542
574
|
pageId: string | null;
|
|
575
|
+
templateOverrides: string | null;
|
|
543
576
|
type: string;
|
|
577
|
+
rosterId: string | null;
|
|
544
578
|
isRequired: boolean;
|
|
545
579
|
isReadonly: boolean;
|
|
546
580
|
isHidden: boolean;
|
|
@@ -551,7 +585,7 @@ declare class FormService {
|
|
|
551
585
|
dataSourceId: string | null;
|
|
552
586
|
dataSourceDependencies: string | null;
|
|
553
587
|
style: string | null;
|
|
554
|
-
|
|
588
|
+
templateId: string | null;
|
|
555
589
|
}>;
|
|
556
590
|
deleteFormVariable(id: string): Promise<{
|
|
557
591
|
id: string;
|
|
@@ -565,7 +599,9 @@ declare class FormService {
|
|
|
565
599
|
conditions: string | null;
|
|
566
600
|
options: string | null;
|
|
567
601
|
pageId: string | null;
|
|
602
|
+
templateOverrides: string | null;
|
|
568
603
|
type: string;
|
|
604
|
+
rosterId: string | null;
|
|
569
605
|
isRequired: boolean;
|
|
570
606
|
isReadonly: boolean;
|
|
571
607
|
isHidden: boolean;
|
|
@@ -576,7 +612,7 @@ declare class FormService {
|
|
|
576
612
|
dataSourceId: string | null;
|
|
577
613
|
dataSourceDependencies: string | null;
|
|
578
614
|
style: string | null;
|
|
579
|
-
|
|
615
|
+
templateId: string | null;
|
|
580
616
|
}>;
|
|
581
617
|
getSubmissions(params: {
|
|
582
618
|
formId: string;
|
|
@@ -654,9 +690,23 @@ declare class FormService {
|
|
|
654
690
|
importForm(json: string, tenantId?: string): Promise<string>;
|
|
655
691
|
/** Extract variable data for createFormVariable (omit `id` to let Prisma generate it) */
|
|
656
692
|
private extractVariableData;
|
|
657
|
-
/**
|
|
693
|
+
/**
|
|
694
|
+
* Convert a Prisma DB result to a fully-resolved `IFormDefinition`.
|
|
695
|
+
*
|
|
696
|
+
* Templates referenced by `IFormVariable.templateId` are loaded in a
|
|
697
|
+
* single batch and applied via `resolveFormTemplates` (Option B —
|
|
698
|
+
* in-memory only, no mutation in DB). Pass `resolveTemplates = false`
|
|
699
|
+
* to obtain the raw shape (useful for editor tooling that wants to
|
|
700
|
+
* preserve `templateOverrides`).
|
|
701
|
+
*/
|
|
658
702
|
private dbToFormDefinition;
|
|
659
703
|
private dbToVariable;
|
|
704
|
+
/**
|
|
705
|
+
* Convert a Prisma VariableTemplate row to the domain type. Duplicated
|
|
706
|
+
* locally (kept in sync with `ScopeService.dbToTemplate`) to avoid an
|
|
707
|
+
* import cycle between the two services.
|
|
708
|
+
*/
|
|
709
|
+
private dbToTemplate;
|
|
660
710
|
}
|
|
661
711
|
|
|
662
712
|
/**
|
|
@@ -730,6 +780,7 @@ declare const createFormDefinitionSchema: z.ZodObject<{
|
|
|
730
780
|
isPublished: z.ZodDefault<z.ZodBoolean>;
|
|
731
781
|
tenantId: z.ZodOptional<z.ZodString>;
|
|
732
782
|
formTypeId: z.ZodOptional<z.ZodString>;
|
|
783
|
+
scopeIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
733
784
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
734
785
|
}, "strip", z.ZodTypeAny, {
|
|
735
786
|
code: string;
|
|
@@ -740,6 +791,7 @@ declare const createFormDefinitionSchema: z.ZodObject<{
|
|
|
740
791
|
metadata?: Record<string, unknown> | undefined;
|
|
741
792
|
tenantId?: string | undefined;
|
|
742
793
|
formTypeId?: string | undefined;
|
|
794
|
+
scopeIds?: string[] | undefined;
|
|
743
795
|
}, {
|
|
744
796
|
code: string;
|
|
745
797
|
name: string;
|
|
@@ -749,6 +801,7 @@ declare const createFormDefinitionSchema: z.ZodObject<{
|
|
|
749
801
|
version?: string | undefined;
|
|
750
802
|
isPublished?: boolean | undefined;
|
|
751
803
|
formTypeId?: string | undefined;
|
|
804
|
+
scopeIds?: string[] | undefined;
|
|
752
805
|
}>;
|
|
753
806
|
declare const updateFormDefinitionSchema: z.ZodObject<{
|
|
754
807
|
code: z.ZodOptional<z.ZodString>;
|
|
@@ -758,6 +811,7 @@ declare const updateFormDefinitionSchema: z.ZodObject<{
|
|
|
758
811
|
isPublished: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
759
812
|
tenantId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
760
813
|
formTypeId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
814
|
+
scopeIds: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
761
815
|
metadata: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
762
816
|
}, "strip", z.ZodTypeAny, {
|
|
763
817
|
code?: string | undefined;
|
|
@@ -768,6 +822,7 @@ declare const updateFormDefinitionSchema: z.ZodObject<{
|
|
|
768
822
|
version?: string | undefined;
|
|
769
823
|
isPublished?: boolean | undefined;
|
|
770
824
|
formTypeId?: string | undefined;
|
|
825
|
+
scopeIds?: string[] | undefined;
|
|
771
826
|
}, {
|
|
772
827
|
code?: string | undefined;
|
|
773
828
|
name?: string | undefined;
|
|
@@ -777,6 +832,7 @@ declare const updateFormDefinitionSchema: z.ZodObject<{
|
|
|
777
832
|
version?: string | undefined;
|
|
778
833
|
isPublished?: boolean | undefined;
|
|
779
834
|
formTypeId?: string | undefined;
|
|
835
|
+
scopeIds?: string[] | undefined;
|
|
780
836
|
}>;
|
|
781
837
|
declare const createFormPageSchema: z.ZodObject<{
|
|
782
838
|
code: z.ZodString;
|
|
@@ -985,6 +1041,8 @@ declare const createFormVariableSchema: z.ZodObject<{
|
|
|
985
1041
|
dataSourceDependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
986
1042
|
style: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
987
1043
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
1044
|
+
templateId: z.ZodOptional<z.ZodString>;
|
|
1045
|
+
templateOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
988
1046
|
}, "strip", z.ZodTypeAny, {
|
|
989
1047
|
code: string;
|
|
990
1048
|
name: string;
|
|
@@ -1001,6 +1059,7 @@ declare const createFormVariableSchema: z.ZodObject<{
|
|
|
1001
1059
|
metadata?: Record<string, unknown> | undefined;
|
|
1002
1060
|
value?: unknown;
|
|
1003
1061
|
}[] | undefined;
|
|
1062
|
+
templateOverrides?: Record<string, unknown> | undefined;
|
|
1004
1063
|
defaultValue?: unknown;
|
|
1005
1064
|
placeholder?: string | undefined;
|
|
1006
1065
|
validationRules?: {
|
|
@@ -1012,6 +1071,7 @@ declare const createFormVariableSchema: z.ZodObject<{
|
|
|
1012
1071
|
dataSourceId?: string | undefined;
|
|
1013
1072
|
dataSourceDependencies?: Record<string, string> | undefined;
|
|
1014
1073
|
style?: Record<string, unknown> | undefined;
|
|
1074
|
+
templateId?: string | undefined;
|
|
1015
1075
|
}, {
|
|
1016
1076
|
code: string;
|
|
1017
1077
|
name: string;
|
|
@@ -1025,6 +1085,7 @@ declare const createFormVariableSchema: z.ZodObject<{
|
|
|
1025
1085
|
metadata?: Record<string, unknown> | undefined;
|
|
1026
1086
|
value?: unknown;
|
|
1027
1087
|
}[] | undefined;
|
|
1088
|
+
templateOverrides?: Record<string, unknown> | undefined;
|
|
1028
1089
|
isRequired?: boolean | undefined;
|
|
1029
1090
|
isReadonly?: boolean | undefined;
|
|
1030
1091
|
isHidden?: boolean | undefined;
|
|
@@ -1039,6 +1100,7 @@ declare const createFormVariableSchema: z.ZodObject<{
|
|
|
1039
1100
|
dataSourceId?: string | undefined;
|
|
1040
1101
|
dataSourceDependencies?: Record<string, string> | undefined;
|
|
1041
1102
|
style?: Record<string, unknown> | undefined;
|
|
1103
|
+
templateId?: string | undefined;
|
|
1042
1104
|
}>;
|
|
1043
1105
|
declare const updateFormVariableSchema: z.ZodObject<{
|
|
1044
1106
|
code: z.ZodOptional<z.ZodString>;
|
|
@@ -1083,6 +1145,8 @@ declare const updateFormVariableSchema: z.ZodObject<{
|
|
|
1083
1145
|
dataSourceDependencies: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
1084
1146
|
style: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
1085
1147
|
metadata: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
1148
|
+
templateId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
1149
|
+
templateOverrides: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
1086
1150
|
}, "strip", z.ZodTypeAny, {
|
|
1087
1151
|
code?: string | undefined;
|
|
1088
1152
|
name?: string | undefined;
|
|
@@ -1095,6 +1159,7 @@ declare const updateFormVariableSchema: z.ZodObject<{
|
|
|
1095
1159
|
metadata?: Record<string, unknown> | undefined;
|
|
1096
1160
|
value?: unknown;
|
|
1097
1161
|
}[] | undefined;
|
|
1162
|
+
templateOverrides?: Record<string, unknown> | undefined;
|
|
1098
1163
|
type?: string | undefined;
|
|
1099
1164
|
isRequired?: boolean | undefined;
|
|
1100
1165
|
isReadonly?: boolean | undefined;
|
|
@@ -1110,6 +1175,7 @@ declare const updateFormVariableSchema: z.ZodObject<{
|
|
|
1110
1175
|
dataSourceId?: string | undefined;
|
|
1111
1176
|
dataSourceDependencies?: Record<string, string> | undefined;
|
|
1112
1177
|
style?: Record<string, unknown> | undefined;
|
|
1178
|
+
templateId?: string | undefined;
|
|
1113
1179
|
}, {
|
|
1114
1180
|
code?: string | undefined;
|
|
1115
1181
|
name?: string | undefined;
|
|
@@ -1122,6 +1188,7 @@ declare const updateFormVariableSchema: z.ZodObject<{
|
|
|
1122
1188
|
metadata?: Record<string, unknown> | undefined;
|
|
1123
1189
|
value?: unknown;
|
|
1124
1190
|
}[] | undefined;
|
|
1191
|
+
templateOverrides?: Record<string, unknown> | undefined;
|
|
1125
1192
|
type?: string | undefined;
|
|
1126
1193
|
isRequired?: boolean | undefined;
|
|
1127
1194
|
isReadonly?: boolean | undefined;
|
|
@@ -1137,6 +1204,7 @@ declare const updateFormVariableSchema: z.ZodObject<{
|
|
|
1137
1204
|
dataSourceId?: string | undefined;
|
|
1138
1205
|
dataSourceDependencies?: Record<string, string> | undefined;
|
|
1139
1206
|
style?: Record<string, unknown> | undefined;
|
|
1207
|
+
templateId?: string | undefined;
|
|
1140
1208
|
}>;
|
|
1141
1209
|
declare const createSubmissionSchema: z.ZodObject<{
|
|
1142
1210
|
formId: z.ZodString;
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {serializeForm,deserializeForm}from'@msbci/form-core';import {z as z$1}from'zod';var g=class m extends Error{constructor(a,r,i){super(r);this.statusCode=a;this.errors=i;this.name="ApiError";}static notFound(a="Resource not found"){return new m(404,a)}static badRequest(a,r){return new m(400,a,r)}static unauthorized(a="Unauthorized"){return new m(401,a)}static conflict(a){return new m(409,a)}};function T(m,e="Success"){return {status:200,message:e,data:m}}function k(m,e,a,r){return {status:200,message:"Success",data:{items:m,total:e,page:a,pageSize:r,totalPages:Math.ceil(e/r)}}}function u(m){return m==null?null:JSON.stringify(m)}function f(m){if(m)try{return JSON.parse(m)}catch{return}}function b(m){if(m!=null)return typeof m=="string"?m:JSON.stringify(m)}var w=class{constructor(e){this.prisma=e;}async getFormTypes(e){return this.prisma.formType.findMany({orderBy:{name:"asc"}})}async getFormType(e){let a=await this.prisma.formType.findUnique({where:{id:e}});if(!a)throw g.notFound("FormType not found");return a}async createFormType(e){return this.prisma.formType.create({data:{...e,metadata:u(e.metadata)}})}async updateFormType(e,a){let{metadata:r,...i}=a;return this.prisma.formType.update({where:{id:e},data:{...i,...r!==void 0?{metadata:u(r)}:{}}})}async deleteFormType(e){return this.prisma.formType.delete({where:{id:e}})}async getFormDefinitions(e){let a={};e.tenantId&&(a.tenantId=e.tenantId),e.search&&(a.OR=[{name:{contains:e.search}},{code:{contains:e.search}}]);let[r,i]=await Promise.all([this.prisma.formDefinition.findMany({where:a,include:{formType:true,_count:{select:{pages:true,submissions:true}}},skip:(e.page-1)*e.pageSize,take:e.pageSize,orderBy:{updatedAt:"desc"}}),this.prisma.formDefinition.count({where:a})]);return {items:r,total:i}}async getFormDefinition(e){let a=await this.prisma.formDefinition.findUnique({where:{id:e},include:{formType:true,pages:{orderBy:{order:"asc"},include:{variables:{where:{pageId:{not:null}},orderBy:{order:"asc"}},rosters:{orderBy:{order:"asc"},include:{variables:{orderBy:{order:"asc"}}}}}}}});if(!a)throw g.notFound("FormDefinition not found");return a}async createFormDefinition(e,a){return this.prisma.formDefinition.create({data:{...e,metadata:u(e.metadata),createdBy:a?.userId,updatedBy:a?.userId}})}async updateFormDefinition(e,a,r){let{metadata:i,...s}=a;return this.prisma.formDefinition.update({where:{id:e},data:{...s,...i!==void 0?{metadata:u(i)}:{},updatedBy:r?.userId}})}async deleteFormDefinition(e){return this.prisma.formDefinition.delete({where:{id:e}})}async createFormPage(e,a){return this.prisma.formPage.create({data:{...a,formId:e,conditions:u(a.conditions),metadata:u(a.metadata)}})}async updateFormPage(e,a){let{conditions:r,metadata:i,...s}=a;return this.prisma.formPage.update({where:{id:e},data:{...s,...r!==void 0?{conditions:u(r)}:{},...i!==void 0?{metadata:u(i)}:{}}})}async deleteFormPage(e){return this.prisma.formPage.delete({where:{id:e}})}async createFormRoster(e,a){return this.prisma.formRoster.create({data:{...a,pageId:e,options:u(a.options),conditions:u(a.conditions),metadata:u(a.metadata)}})}async updateFormRoster(e,a){let{options:r,conditions:i,metadata:s,...d}=a;return this.prisma.formRoster.update({where:{id:e},data:{...d,...r!==void 0?{options:u(r)}:{},...i!==void 0?{conditions:u(i)}:{},...s!==void 0?{metadata:u(s)}:{}}})}async deleteFormRoster(e){return this.prisma.formRoster.delete({where:{id:e}})}async createFormVariable(e){if(!e.pageId&&!e.rosterId)throw g.badRequest("Variable must belong to a page or a roster");return this.prisma.formVariable.create({data:{...e,defaultValue:e.defaultValue!==void 0?String(e.defaultValue):null,options:u(e.options),validationRules:u(e.validationRules),conditions:u(e.conditions),dataSourceDependencies:u(e.dataSourceDependencies),style:u(e.style),metadata:u(e.metadata)}})}async updateFormVariable(e,a){let{options:r,validationRules:i,conditions:s,dataSourceDependencies:d,style:c,metadata:y,defaultValue:t,...o}=a;return this.prisma.formVariable.update({where:{id:e},data:{...o,...t!==void 0?{defaultValue:String(t)}:{},...r!==void 0?{options:u(r)}:{},...i!==void 0?{validationRules:u(i)}:{},...s!==void 0?{conditions:u(s)}:{},...d!==void 0?{dataSourceDependencies:u(d)}:{},...c!==void 0?{style:u(c)}:{},...y!==void 0?{metadata:u(y)}:{}}})}async deleteFormVariable(e){return this.prisma.formVariable.delete({where:{id:e}})}async getSubmissions(e){let a={formId:e.formId};e.status&&(a.status=e.status),e.tenantId&&(a.tenantId=e.tenantId);let[r,i]=await Promise.all([this.prisma.formSubmission.findMany({where:a,skip:(e.page-1)*e.pageSize,take:e.pageSize,orderBy:{createdAt:"desc"}}),this.prisma.formSubmission.count({where:a})]);return {items:r,total:i}}async getSubmission(e){let a=await this.prisma.formSubmission.findUnique({where:{id:e}});if(!a)throw g.notFound("Submission not found");return a}async createSubmission(e,a){return this.prisma.formSubmission.create({data:{formId:e.formId,tenantId:e.tenantId,status:e.status??"draft",data:JSON.stringify(e.data),submittedBy:e.submittedBy,metadata:u(e.metadata),createdBy:a?.userId,updatedBy:a?.userId}})}async updateSubmission(e,a,r){return this.prisma.formSubmission.update({where:{id:e},data:{...a.status?{status:a.status}:{},...a.data?{data:JSON.stringify(a.data)}:{},...a.metadata!==void 0?{metadata:u(a.metadata)}:{},updatedBy:r?.userId}})}async exportForm(e){let a=await this.getFormDefinition(e),r=this.dbToFormDefinition(a);return serializeForm(r)}async importForm(e,a){let r=deserializeForm(e),i=await this.createFormDefinition({code:r.code,name:b(r.name)??"",description:b(r.description),version:r.version,isPublished:r.isPublished,tenantId:a,formTypeId:r.formTypeId});for(let s of r.pages){let d=await this.createFormPage(i.id,{code:s.code,name:b(s.name)??"",order:s.order,isRepeatable:s.isRepeatable,repeatMinInstances:s.repeatConfig?.min,repeatMaxInstances:s.repeatConfig?.max,repeatControlVarCode:s.repeatConfig?.controlVariableCode,repeatInstanceLabel:b(s.repeatConfig?.instanceLabel)});for(let c of s.variables)await this.createFormVariable(this.extractVariableData(c,d.id,void 0));for(let c of s.rosters){let y=await this.createFormRoster(d.id,{code:c.code,name:b(c.name)??"",rosterType:c.rosterType,order:c.order,pilotVariableCode:c.pilotVariableCode,options:c.options});for(let t of c.variables)await this.createFormVariable(this.extractVariableData(t,void 0,y.id));}}return i.id}extractVariableData(e,a,r){return {code:e.code,name:e.name,type:e.type,order:e.order,pageId:a,rosterId:r,isRequired:e.isRequired,isReadonly:e.isReadonly,isHidden:e.isHidden,defaultValue:e.defaultValue,placeholder:e.placeholder,description:e.description,options:e.options,validationRules:e.validationRules,conditions:e.conditions,expression:e.expression,dataSourceId:e.dataSourceId,dataSourceDependencies:e.dataSourceDependencies,style:e.style,metadata:e.metadata}}dbToFormDefinition(e){return {id:e.id,code:e.code,name:e.name,description:e.description??void 0,version:e.version,isPublished:e.isPublished,formTypeId:e.formTypeId??void 0,metadata:f(e.metadata),pages:(e.pages??[]).map(a=>({id:a.id,code:a.code,name:a.name,order:a.order,isRepeatable:a.isRepeatable,repeatConfig:a.isRepeatable?{min:a.repeatMinInstances??void 0,max:a.repeatMaxInstances??void 0,controlVariableCode:a.repeatControlVarCode??void 0,instanceLabel:a.repeatInstanceLabel??void 0}:void 0,conditions:f(a.conditions)??[],variables:(a.variables??[]).map(r=>this.dbToVariable(r)),rosters:(a.rosters??[]).map(r=>({id:r.id,code:r.code,name:r.name,rosterType:r.rosterType,order:r.order,pilotVariableCode:r.pilotVariableCode??void 0,options:f(r.options),conditions:f(r.conditions)??[],variables:(r.variables??[]).map(i=>this.dbToVariable(i))}))}))}}dbToVariable(e){return {id:e.id,code:e.code,name:e.name,type:e.type,order:e.order,isRequired:e.isRequired,isReadonly:e.isReadonly,isHidden:e.isHidden,defaultValue:e.defaultValue??void 0,placeholder:e.placeholder??void 0,description:e.description??void 0,options:f(e.options),validationRules:f(e.validationRules),conditions:f(e.conditions),expression:e.expression??void 0,dataSourceId:e.dataSourceId??void 0,dataSourceDependencies:f(e.dataSourceDependencies),style:f(e.style),metadata:f(e.metadata)}}};var P=async()=>({});var R=z$1.object({code:z$1.string().min(1).max(50),name:z$1.string().min(1).max(200),description:z$1.string().max(1e3).optional(),metadata:z$1.record(z$1.unknown()).optional()}),V=R.partial(),S=z$1.object({code:z$1.string().min(1).max(50),name:z$1.string().min(1).max(200),description:z$1.string().max(1e3).optional(),version:z$1.string().default("1.0.0"),isPublished:z$1.boolean().default(false),tenantId:z$1.string().optional(),formTypeId:z$1.string().optional(),metadata:z$1.record(z$1.unknown()).optional()}),D=S.partial(),I=z$1.object({code:z$1.string().min(1).max(50),name:z$1.string().min(1).max(200),order:z$1.number().int().min(0),isRepeatable:z$1.boolean().default(false),repeatMinInstances:z$1.number().int().min(0).optional(),repeatMaxInstances:z$1.number().int().min(1).optional(),repeatControlVarCode:z$1.string().optional(),repeatInstanceLabel:z$1.string().optional(),conditions:z$1.array(z$1.unknown()).optional(),metadata:z$1.record(z$1.unknown()).optional()}),C=I.partial(),F=z$1.object({code:z$1.string().min(1).max(50),name:z$1.string().min(1).max(200),rosterType:z$1.enum(["check","list","collection","collection_extend"]),order:z$1.number().int().min(0),pilotVariableCode:z$1.string().optional(),options:z$1.array(z$1.object({label:z$1.string(),value:z$1.unknown(),metadata:z$1.record(z$1.unknown()).optional()})).optional(),conditions:z$1.array(z$1.unknown()).optional(),metadata:z$1.record(z$1.unknown()).optional()}),E=F.partial(),h=z$1.object({code:z$1.string().min(1).max(50),name:z$1.string().min(1).max(200),type:z$1.string().min(1),order:z$1.number().int().min(0),isRequired:z$1.boolean().default(false),isReadonly:z$1.boolean().default(false),isHidden:z$1.boolean().default(false),defaultValue:z$1.unknown().optional(),placeholder:z$1.string().optional(),description:z$1.string().max(1e3).optional(),options:z$1.array(z$1.object({label:z$1.string(),value:z$1.unknown(),metadata:z$1.record(z$1.unknown()).optional()})).optional(),validationRules:z$1.array(z$1.object({type:z$1.string(),value:z$1.unknown().optional(),message:z$1.string()})).optional(),conditions:z$1.array(z$1.unknown()).optional(),expression:z$1.string().optional(),dataSourceId:z$1.string().optional(),dataSourceDependencies:z$1.record(z$1.string()).optional(),style:z$1.record(z$1.unknown()).optional(),metadata:z$1.record(z$1.unknown()).optional()}),M=h.partial(),z=z$1.object({formId:z$1.string().min(1),tenantId:z$1.string().optional(),status:z$1.enum(["draft","submitted","approved","rejected","completed"]).default("draft"),data:z$1.record(z$1.unknown()),submittedBy:z$1.string().optional(),metadata:z$1.record(z$1.unknown()).optional()}),B=z$1.object({status:z$1.enum(["draft","submitted","approved","rejected","completed"]).optional(),data:z$1.record(z$1.unknown()).optional(),metadata:z$1.record(z$1.unknown()).optional()}),x=z$1.object({page:z$1.coerce.number().int().min(1).default(1),pageSize:z$1.coerce.number().int().min(1).max(100).default(20),search:z$1.string().optional(),tenantId:z$1.string().optional()});function U(m){let{prisma:e,auth:a=P}=m,r=new w(e),i=new Map;async function s(t){let o=await a({headers:t.headers,query:t.query});if(!o)throw g.unauthorized();return o}function d(t,o=200){return {status:o,body:T(t)}}function c(t,o,p,l){return {status:200,body:k(t,o,p,l)}}i.set("GET /form-types",async t=>{await s(t);let o=await r.getFormTypes();return d(o)}),i.set("GET /form-types/:id",async t=>(await s(t),d(await r.getFormType(t.params.id)))),i.set("POST /form-types",async t=>{await s(t);let o=R.parse(t.body);return d(await r.createFormType(o),201)}),i.set("PUT /form-types/:id",async t=>{await s(t);let o=V.parse(t.body);return d(await r.updateFormType(t.params.id,o))}),i.set("DELETE /form-types/:id",async t=>(await s(t),await r.deleteFormType(t.params.id),d(null,204))),i.set("GET /forms",async t=>{await s(t);let o=x.parse(t.query),{items:p,total:l}=await r.getFormDefinitions(o);return c(p,l,o.page,o.pageSize)}),i.set("GET /forms/:id",async t=>(await s(t),d(await r.getFormDefinition(t.params.id)))),i.set("POST /forms",async t=>{let o=await s(t),p=S.parse(t.body);return d(await r.createFormDefinition(p,o),201)}),i.set("PUT /forms/:id",async t=>{let o=await s(t),p=D.parse(t.body);return d(await r.updateFormDefinition(t.params.id,p,o))}),i.set("DELETE /forms/:id",async t=>(await s(t),await r.deleteFormDefinition(t.params.id),d(null,204))),i.set("GET /forms/:id/export",async t=>(await s(t),{status:200,body:await r.exportForm(t.params.id)})),i.set("POST /forms/import",async t=>{await s(t);let{json:o,tenantId:p}=t.body,l=await r.importForm(o,p);return d({formId:l},201)}),i.set("POST /forms/:formId/pages",async t=>{await s(t);let o=I.parse(t.body);return d(await r.createFormPage(t.params.formId,o),201)}),i.set("PUT /pages/:id",async t=>{await s(t);let o=C.parse(t.body);return d(await r.updateFormPage(t.params.id,o))}),i.set("DELETE /pages/:id",async t=>(await s(t),await r.deleteFormPage(t.params.id),d(null,204))),i.set("POST /pages/:pageId/rosters",async t=>{await s(t);let o=F.parse(t.body);return d(await r.createFormRoster(t.params.pageId,o),201)}),i.set("PUT /rosters/:id",async t=>{await s(t);let o=E.parse(t.body);return d(await r.updateFormRoster(t.params.id,o))}),i.set("DELETE /rosters/:id",async t=>(await s(t),await r.deleteFormRoster(t.params.id),d(null,204))),i.set("POST /pages/:pageId/variables",async t=>{await s(t);let o=h.parse(t.body);return d(await r.createFormVariable({...o,pageId:t.params.pageId}),201)}),i.set("POST /rosters/:rosterId/variables",async t=>{await s(t);let o=h.parse(t.body);return d(await r.createFormVariable({...o,rosterId:t.params.rosterId}),201)}),i.set("PUT /variables/:id",async t=>{await s(t);let o=M.parse(t.body);return d(await r.updateFormVariable(t.params.id,o))}),i.set("DELETE /variables/:id",async t=>(await s(t),await r.deleteFormVariable(t.params.id),d(null,204))),i.set("GET /forms/:formId/submissions",async t=>{await s(t);let o=x.parse(t.query),{items:p,total:l}=await r.getSubmissions({formId:t.params.formId,...o});return c(p,l,o.page,o.pageSize)}),i.set("GET /submissions/:id",async t=>(await s(t),d(await r.getSubmission(t.params.id)))),i.set("POST /submissions",async t=>{let o=await s(t),p=z.parse(t.body);return d(await r.createSubmission(p,o),201)}),i.set("PUT /submissions/:id",async t=>{let o=await s(t),p=B.parse(t.body);return d(await r.updateSubmission(t.params.id,p,o))});function y(t,o){for(let[p,l]of i){let[j,O]=p.split(" ");if(j!==t)continue;let A=G(O,o);if(A)return {handler:l,params:A}}return null}return {routes:i,handle:async t=>{try{let o=y(t.method,t.path);return o?(t.params=o.params,await o.handler(t)):{status:404,body:{status:404,message:"Route not found",data:null}}}catch(o){return o instanceof g?{status:o.statusCode,body:{status:o.statusCode,message:o.message,data:null,errors:o.errors}}:o instanceof Error&&o.name==="ZodError"?{status:400,body:{status:400,message:"Validation error",data:null,errors:o.issues?.map(l=>l.message)}}:{status:500,body:{status:500,message:"Internal server error",data:null}}}}}}function G(m,e){let a=m.split("/").filter(Boolean),r=e.split("/").filter(Boolean);if(a.length!==r.length)return null;let i={};for(let s=0;s<a.length;s++){let d=a[s],c=r[s];if(d.startsWith(":"))i[d.slice(1)]=c;else if(d!==c)return null}return i}export{g as ApiError,w as FormService,S as createFormDefinitionSchema,I as createFormPageSchema,F as createFormRosterSchema,U as createFormRouter,R as createFormTypeSchema,h as createFormVariableSchema,z as createSubmissionSchema,P as noAuth,k as paginatedResponse,x as paginationSchema,T as successResponse,D as updateFormDefinitionSchema,C as updateFormPageSchema,E as updateFormRosterSchema,V as updateFormTypeSchema,M as updateFormVariableSchema,B as updateSubmissionSchema};//# sourceMappingURL=index.mjs.map
|
|
1
|
+
import {serializeForm,deserializeForm,getPageVariables,getPageRosters,collectTemplateIds,resolveFormTemplates}from'@msbci/form-core';import {z as z$1}from'zod';var f=class s extends Error{constructor(n,i,c){super(i);this.statusCode=n;this.errors=c;this.name="ApiError";}static notFound(n="Resource not found"){return new s(404,n)}static badRequest(n,i){return new s(400,n,i)}static unauthorized(n="Unauthorized"){return new s(401,n)}static conflict(n){return new s(409,n)}};function v(s,e="Success"){return {status:200,message:e,data:s}}function B(s,e,n,i){return {status:200,message:"Success",data:{items:s,total:e,page:n,pageSize:i,totalPages:Math.ceil(e/i)}}}function l(s){return s==null?null:JSON.stringify(s)}function y(s){if(s)try{return JSON.parse(s)}catch{return}}function T(s){if(s!=null)return typeof s=="string"?s:JSON.stringify(s)}var x=class{constructor(e){this.prisma=e;}async getFormTypes(e){return this.prisma.formType.findMany({orderBy:{name:"asc"}})}async getFormType(e){let n=await this.prisma.formType.findUnique({where:{id:e}});if(!n)throw f.notFound("FormType not found");return n}async createFormType(e){return this.prisma.formType.create({data:{...e,metadata:l(e.metadata)}})}async updateFormType(e,n){let{metadata:i,...c}=n;return this.prisma.formType.update({where:{id:e},data:{...c,...i!==void 0?{metadata:l(i)}:{}}})}async deleteFormType(e){return this.prisma.formType.delete({where:{id:e}})}async getFormDefinitions(e){let n={};e.tenantId&&(n.tenantId=e.tenantId),e.scopeId&&(n.scopes={some:{scopeId:e.scopeId}}),e.search&&(n.OR=[{name:{contains:e.search}},{code:{contains:e.search}}]);let[i,c]=await Promise.all([this.prisma.formDefinition.findMany({where:n,include:{formType:true,_count:{select:{pages:true,submissions:true}}},skip:(e.page-1)*e.pageSize,take:e.pageSize,orderBy:{updatedAt:"desc"}}),this.prisma.formDefinition.count({where:n})]);return {items:i,total:c}}async getFormDefinition(e){let n=await this.prisma.formDefinition.findUnique({where:{id:e},include:{formType:true,scopes:{orderBy:{order:"asc"}},pages:{orderBy:{order:"asc"},include:{variables:{where:{pageId:{not:null}},orderBy:{order:"asc"}},rosters:{orderBy:{order:"asc"},include:{variables:{orderBy:{order:"asc"}}}}}}}});if(!n)throw f.notFound("FormDefinition not found");return n}async createFormDefinition(e,n){let{scopeIds:i,...c}=e;return this.prisma.formDefinition.create({data:{...c,metadata:l(c.metadata),createdBy:n?.userId,updatedBy:n?.userId,...i&&i.length>0?{scopes:{create:i.map((r,d)=>({scopeId:r,order:d}))}}:{}}})}async updateFormDefinition(e,n,i){let{metadata:c,scopeIds:r,...d}=n;return await this.prisma.formDefinition.update({where:{id:e},data:{...d,...c!==void 0?{metadata:l(c)}:{},updatedBy:i?.userId}}),r!==void 0&&(await this.prisma.formDefinitionScope.deleteMany({where:{formId:e}}),r.length>0&&await this.prisma.formDefinitionScope.createMany({data:r.map((p,u)=>({formId:e,scopeId:p,order:u}))})),this.prisma.formDefinition.findUnique({where:{id:e},include:{scopes:{orderBy:{order:"asc"}}}})}async getResolvedFormDefinition(e){let n=await this.getFormDefinition(e);return this.dbToFormDefinition(n)}async deleteFormDefinition(e){return this.prisma.formDefinition.delete({where:{id:e}})}async createFormPage(e,n){return this.prisma.formPage.create({data:{...n,formId:e,conditions:l(n.conditions),metadata:l(n.metadata)}})}async updateFormPage(e,n){let{conditions:i,metadata:c,...r}=n;return this.prisma.formPage.update({where:{id:e},data:{...r,...i!==void 0?{conditions:l(i)}:{},...c!==void 0?{metadata:l(c)}:{}}})}async deleteFormPage(e){return this.prisma.formPage.delete({where:{id:e}})}async createFormRoster(e,n){return this.prisma.formRoster.create({data:{...n,pageId:e,options:l(n.options),conditions:l(n.conditions),metadata:l(n.metadata)}})}async updateFormRoster(e,n){let{options:i,conditions:c,metadata:r,...d}=n;return this.prisma.formRoster.update({where:{id:e},data:{...d,...i!==void 0?{options:l(i)}:{},...c!==void 0?{conditions:l(c)}:{},...r!==void 0?{metadata:l(r)}:{}}})}async deleteFormRoster(e){return this.prisma.formRoster.delete({where:{id:e}})}async createFormVariable(e){if(!e.pageId&&!e.rosterId)throw f.badRequest("Variable must belong to a page or a roster");let{templateOverrides:n,...i}=e;return this.prisma.formVariable.create({data:{...i,defaultValue:e.defaultValue!==void 0?String(e.defaultValue):null,options:l(e.options),validationRules:l(e.validationRules),conditions:l(e.conditions),dataSourceDependencies:l(e.dataSourceDependencies),style:l(e.style),metadata:l(e.metadata),templateOverrides:l(n)}})}async updateFormVariable(e,n){let{options:i,validationRules:c,conditions:r,dataSourceDependencies:d,style:p,metadata:u,defaultValue:g,templateOverrides:a,...o}=n;return this.prisma.formVariable.update({where:{id:e},data:{...o,...g!==void 0?{defaultValue:String(g)}:{},...i!==void 0?{options:l(i)}:{},...c!==void 0?{validationRules:l(c)}:{},...r!==void 0?{conditions:l(r)}:{},...d!==void 0?{dataSourceDependencies:l(d)}:{},...p!==void 0?{style:l(p)}:{},...u!==void 0?{metadata:l(u)}:{},...a!==void 0?{templateOverrides:l(a)}:{}}})}async deleteFormVariable(e){return this.prisma.formVariable.delete({where:{id:e}})}async getSubmissions(e){let n={formId:e.formId};e.status&&(n.status=e.status),e.tenantId&&(n.tenantId=e.tenantId);let[i,c]=await Promise.all([this.prisma.formSubmission.findMany({where:n,skip:(e.page-1)*e.pageSize,take:e.pageSize,orderBy:{createdAt:"desc"}}),this.prisma.formSubmission.count({where:n})]);return {items:i,total:c}}async getSubmission(e){let n=await this.prisma.formSubmission.findUnique({where:{id:e}});if(!n)throw f.notFound("Submission not found");return n}async createSubmission(e,n){return this.prisma.formSubmission.create({data:{formId:e.formId,tenantId:e.tenantId,status:e.status??"draft",data:JSON.stringify(e.data),submittedBy:e.submittedBy,metadata:l(e.metadata),createdBy:n?.userId,updatedBy:n?.userId}})}async updateSubmission(e,n,i){return this.prisma.formSubmission.update({where:{id:e},data:{...n.status?{status:n.status}:{},...n.data?{data:JSON.stringify(n.data)}:{},...n.metadata!==void 0?{metadata:l(n.metadata)}:{},updatedBy:i?.userId}})}async exportForm(e){let n=await this.getFormDefinition(e),i=await this.dbToFormDefinition(n);return serializeForm(i)}async importForm(e,n){let i=deserializeForm(e),c=await this.createFormDefinition({code:i.code,name:T(i.name)??"",description:T(i.description),version:i.version,isPublished:i.isPublished,tenantId:n,formTypeId:i.formTypeId,scopeIds:i.scopeIds});for(let r of i.pages){let d=await this.createFormPage(c.id,{code:r.code,name:T(r.name)??"",order:r.order,isRepeatable:r.isRepeatable,repeatMinInstances:r.repeatConfig?.min,repeatMaxInstances:r.repeatConfig?.max,repeatControlVarCode:r.repeatConfig?.controlVariableCode,repeatInstanceLabel:T(r.repeatConfig?.instanceLabel)});for(let p of getPageVariables(r))await this.createFormVariable(this.extractVariableData(p,d.id,void 0));for(let p of getPageRosters(r)){let u=await this.createFormRoster(d.id,{code:p.code,name:T(p.name)??"",rosterType:p.rosterType,order:p.order,pilotVariableCode:p.pilotVariableCode,options:p.options});for(let g of p.variables)await this.createFormVariable(this.extractVariableData(g,void 0,u.id));}}return c.id}extractVariableData(e,n,i){return {code:e.code,name:e.name,type:e.type,order:e.order,pageId:n,rosterId:i,isRequired:e.isRequired,isReadonly:e.isReadonly,isHidden:e.isHidden,defaultValue:e.defaultValue,placeholder:e.placeholder,description:e.description,options:e.options,validationRules:e.validationRules,conditions:e.conditions,expression:e.expression,dataSourceId:e.dataSourceId,dataSourceDependencies:e.dataSourceDependencies,style:e.style,metadata:e.metadata,templateId:e.templateId,templateOverrides:e.templateOverrides}}async dbToFormDefinition(e,n=true){let i=Array.isArray(e.scopes)?e.scopes.slice().sort((u,g)=>u.order-g.order).map(u=>u.scopeId):void 0,c={id:e.id,code:e.code,name:e.name,description:e.description??void 0,version:e.version,isPublished:e.isPublished,formTypeId:e.formTypeId??void 0,scopeIds:i&&i.length>0?i:void 0,metadata:y(e.metadata),pages:(e.pages??[]).map(u=>({id:u.id,code:u.code,name:u.name,order:u.order,isRepeatable:u.isRepeatable,repeatConfig:u.isRepeatable?{min:u.repeatMinInstances??void 0,max:u.repeatMaxInstances??void 0,controlVariableCode:u.repeatControlVarCode??void 0,instanceLabel:u.repeatInstanceLabel??void 0}:void 0,conditions:y(u.conditions)??[],variables:(u.variables??[]).map(g=>this.dbToVariable(g)),rosters:(u.rosters??[]).map(g=>({id:g.id,code:g.code,name:g.name,rosterType:g.rosterType,order:g.order,pilotVariableCode:g.pilotVariableCode??void 0,options:y(g.options),conditions:y(g.conditions)??[],variables:(g.variables??[]).map(a=>this.dbToVariable(a))}))}))};if(!n)return c;let r=collectTemplateIds(c);if(r.size===0)return c;let d=await this.prisma.variableTemplate.findMany({where:{id:{in:[...r]}}}),p=new Map(d.map(u=>[u.id,this.dbToTemplate(u)]));return resolveFormTemplates(c,p)}dbToVariable(e){return {id:e.id,code:e.code,name:e.name,type:e.type,order:e.order,isRequired:e.isRequired,isReadonly:e.isReadonly,isHidden:e.isHidden,defaultValue:e.defaultValue??void 0,placeholder:e.placeholder??void 0,description:e.description??void 0,options:y(e.options),validationRules:y(e.validationRules),conditions:y(e.conditions),expression:e.expression??void 0,dataSourceId:e.dataSourceId??void 0,dataSourceDependencies:y(e.dataSourceDependencies),style:y(e.style),metadata:y(e.metadata),templateId:e.templateId??void 0,templateOverrides:y(e.templateOverrides)}}dbToTemplate(e){return {id:e.id,code:e.code,name:E(e.name)??"",scopeId:e.scopeId,tenantId:e.tenantId??"default",variableType:e.variableType,description:E(e.description),placeholder:E(e.placeholder),isRequired:e.isRequired??void 0,isReadonly:e.isReadonly??void 0,isHidden:e.isHidden??void 0,options:y(e.options),validationRules:y(e.validationRules),conditions:y(e.conditions),expression:e.expression??void 0,dataSourceId:e.dataSourceId??void 0,dataSourceDependencies:y(e.dataSourceDependencies),style:y(e.style),metadata:y(e.metadata),createdAt:e.createdAt instanceof Date?e.createdAt.toISOString():e.createdAt,updatedAt:e.updatedAt instanceof Date?e.updatedAt.toISOString():e.updatedAt,createdBy:e.createdBy??void 0,updatedBy:e.updatedBy??void 0}}};function E(s){if(s!=null){if(s.startsWith("{"))try{return JSON.parse(s)}catch{return s}return s}}var L="default";function h(s){return s==null?null:JSON.stringify(s)}function I(s){if(s!=null)try{return JSON.parse(s)}catch{return}}function S(s){if(s!=null)return typeof s=="string"?s:JSON.stringify(s)}function F(s){if(s!=null){if(s.startsWith("{"))try{return JSON.parse(s)}catch{return s}return s}}function O(s,e){return e??s?.tenantId??L}var P=class{constructor(e){this.prisma=e;}async createScope(e,n){let i=O(n,e.tenantId);try{let c=await this.prisma.scope.create({data:{code:e.code,name:S(e.name)??"",description:S(e.description),tenantId:i,metadata:h(e.metadata),createdBy:n?.userId,updatedBy:n?.userId}});return this.dbToScope(c)}catch(c){throw W(c)?f.badRequest(`Scope code "${e.code}" already exists for tenant "${i}"`):c}}async updateScope(e,n,i){if(!await this.prisma.scope.findUnique({where:{id:e}}))throw f.notFound("Scope not found");let r=await this.prisma.scope.update({where:{id:e},data:{...n.name!==void 0?{name:S(n.name)??""}:{},...n.description!==void 0?{description:S(n.description)}:{},...n.metadata!==void 0?{metadata:h(n.metadata)}:{},updatedBy:i?.userId}});return this.dbToScope(r)}async deleteScope(e){if(!await this.prisma.scope.findUnique({where:{id:e}}))throw f.notFound("Scope not found");let[i,c]=await Promise.all([this.prisma.formDefinitionScope.count({where:{scopeId:e}}),this.prisma.variableTemplate.count({where:{scopeId:e}})]);if(i>0||c>0)throw f.conflict(`Scope is in use (forms: ${i}, templates: ${c}). Remove dependents first.`);await this.prisma.scope.delete({where:{id:e}});}async listScopes(e,n){let i=O(n,e.tenantId),c=e.page??1,r=e.pageSize??50,[d,p]=await Promise.all([this.prisma.scope.findMany({where:{tenantId:i},skip:(c-1)*r,take:r,orderBy:{updatedAt:"desc"}}),this.prisma.scope.count({where:{tenantId:i}})]);return {items:d.map(u=>this.dbToScope(u)),total:p}}async getScopeById(e){let n=await this.prisma.scope.findUnique({where:{id:e}});if(!n)throw f.notFound("Scope not found");return this.dbToScope(n)}async createTemplate(e,n,i){let c=await this.prisma.scope.findUnique({where:{id:e}});if(!c)throw f.notFound("Scope not found");let r=O(i,n.tenantId)||c.tenantId;try{let d=await this.prisma.variableTemplate.create({data:{code:n.code,name:S(n.name)??"",scopeId:e,tenantId:r,variableType:n.variableType,description:S(n.description),placeholder:S(n.placeholder),isRequired:n.isRequired??!1,isReadonly:n.isReadonly??!1,isHidden:n.isHidden??!1,options:h(n.options),validationRules:h(n.validationRules),conditions:h(n.conditions),expression:n.expression,dataSourceId:n.dataSourceId,dataSourceDependencies:h(n.dataSourceDependencies),style:h(n.style),metadata:h(n.metadata),createdBy:i?.userId,updatedBy:i?.userId}});return this.dbToTemplate(d)}catch(d){throw W(d)?f.badRequest(`Template code "${n.code}" already exists in this scope`):d}}async updateTemplate(e,n,i){if("code"in n||"name"in n)throw f.badRequest("Template code and name are immutable");if(!await this.prisma.variableTemplate.findUnique({where:{id:e}}))throw f.notFound("Template not found");let r=await this.prisma.variableTemplate.update({where:{id:e},data:{...n.variableType!==void 0?{variableType:n.variableType}:{},...n.description!==void 0?{description:S(n.description)}:{},...n.placeholder!==void 0?{placeholder:S(n.placeholder)}:{},...n.isRequired!==void 0?{isRequired:n.isRequired}:{},...n.isReadonly!==void 0?{isReadonly:n.isReadonly}:{},...n.isHidden!==void 0?{isHidden:n.isHidden}:{},...n.options!==void 0?{options:h(n.options)}:{},...n.validationRules!==void 0?{validationRules:h(n.validationRules)}:{},...n.conditions!==void 0?{conditions:h(n.conditions)}:{},...n.expression!==void 0?{expression:n.expression}:{},...n.dataSourceId!==void 0?{dataSourceId:n.dataSourceId}:{},...n.dataSourceDependencies!==void 0?{dataSourceDependencies:h(n.dataSourceDependencies)}:{},...n.style!==void 0?{style:h(n.style)}:{},...n.metadata!==void 0?{metadata:h(n.metadata)}:{},updatedBy:i?.userId}});return this.dbToTemplate(r)}async deleteTemplate(e){if(!await this.prisma.variableTemplate.findUnique({where:{id:e}}))throw f.notFound("Template not found");await this.prisma.variableTemplate.delete({where:{id:e}});}async listTemplates(e,n){let i=n?.page??1,c=n?.pageSize??100,[r,d]=await Promise.all([this.prisma.variableTemplate.findMany({where:{scopeId:e},skip:(i-1)*c,take:c,orderBy:{updatedAt:"desc"}}),this.prisma.variableTemplate.count({where:{scopeId:e}})]);return {items:r.map(p=>this.dbToTemplate(p)),total:d}}async getTemplateById(e){let n=await this.prisma.variableTemplate.findUnique({where:{id:e}});if(!n)throw f.notFound("Template not found");return this.dbToTemplate(n)}async getTemplatesByIds(e){return e.length===0?[]:(await this.prisma.variableTemplate.findMany({where:{id:{in:e}}})).map(i=>this.dbToTemplate(i))}dbToScope(e){return {id:e.id,code:e.code,name:F(e.name)??"",description:F(e.description),tenantId:e.tenantId??L,metadata:I(e.metadata),createdAt:e.createdAt instanceof Date?e.createdAt.toISOString():e.createdAt,updatedAt:e.updatedAt instanceof Date?e.updatedAt.toISOString():e.updatedAt,createdBy:e.createdBy??void 0,updatedBy:e.updatedBy??void 0}}dbToTemplate(e){return {id:e.id,code:e.code,name:F(e.name)??"",scopeId:e.scopeId,tenantId:e.tenantId??L,variableType:e.variableType,description:F(e.description),placeholder:F(e.placeholder),isRequired:e.isRequired??void 0,isReadonly:e.isReadonly??void 0,isHidden:e.isHidden??void 0,options:I(e.options),validationRules:I(e.validationRules),conditions:I(e.conditions),expression:e.expression??void 0,dataSourceId:e.dataSourceId??void 0,dataSourceDependencies:I(e.dataSourceDependencies),style:I(e.style),metadata:I(e.metadata),createdAt:e.createdAt instanceof Date?e.createdAt.toISOString():e.createdAt,updatedAt:e.updatedAt instanceof Date?e.updatedAt.toISOString():e.updatedAt,createdBy:e.createdBy??void 0,updatedBy:e.updatedBy??void 0}}};function W(s){return typeof s=="object"&&s!==null&&"code"in s&&s.code==="P2002"}var M=async()=>({});var D=z$1.object({code:z$1.string().min(1).max(50),name:z$1.string().min(1).max(200),description:z$1.string().max(1e3).optional(),metadata:z$1.record(z$1.unknown()).optional()}),j=D.partial(),V=z$1.object({code:z$1.string().min(1).max(50),name:z$1.string().min(1).max(200),description:z$1.string().max(1e3).optional(),version:z$1.string().default("1.0.0"),isPublished:z$1.boolean().default(false),tenantId:z$1.string().optional(),formTypeId:z$1.string().optional(),scopeIds:z$1.array(z$1.string()).optional(),metadata:z$1.record(z$1.unknown()).optional()}),U=V.partial(),C=z$1.object({code:z$1.string().min(1).max(50),name:z$1.string().min(1).max(200),order:z$1.number().int().min(0),isRepeatable:z$1.boolean().default(false),repeatMinInstances:z$1.number().int().min(0).optional(),repeatMaxInstances:z$1.number().int().min(1).optional(),repeatControlVarCode:z$1.string().optional(),repeatInstanceLabel:z$1.string().optional(),conditions:z$1.array(z$1.unknown()).optional(),metadata:z$1.record(z$1.unknown()).optional()}),H=C.partial(),z=z$1.object({code:z$1.string().min(1).max(50),name:z$1.string().min(1).max(200),rosterType:z$1.enum(["check","list","collection","collection_extend"]),order:z$1.number().int().min(0),pilotVariableCode:z$1.string().optional(),options:z$1.array(z$1.object({label:z$1.string(),value:z$1.unknown(),metadata:z$1.record(z$1.unknown()).optional()})).optional(),conditions:z$1.array(z$1.unknown()).optional(),metadata:z$1.record(z$1.unknown()).optional()}),q=z.partial(),k=z$1.object({code:z$1.string().min(1).max(50),name:z$1.string().min(1).max(200),type:z$1.string().min(1),order:z$1.number().int().min(0),isRequired:z$1.boolean().default(false),isReadonly:z$1.boolean().default(false),isHidden:z$1.boolean().default(false),defaultValue:z$1.unknown().optional(),placeholder:z$1.string().optional(),description:z$1.string().max(1e3).optional(),options:z$1.array(z$1.object({label:z$1.string(),value:z$1.unknown(),metadata:z$1.record(z$1.unknown()).optional()})).optional(),validationRules:z$1.array(z$1.object({type:z$1.string(),value:z$1.unknown().optional(),message:z$1.string()})).optional(),conditions:z$1.array(z$1.unknown()).optional(),expression:z$1.string().optional(),dataSourceId:z$1.string().optional(),dataSourceDependencies:z$1.record(z$1.string()).optional(),style:z$1.record(z$1.unknown()).optional(),metadata:z$1.record(z$1.unknown()).optional(),templateId:z$1.string().optional(),templateOverrides:z$1.record(z$1.unknown()).optional()}),J=k.partial(),w=z$1.union([z$1.string(),z$1.record(z$1.string())]),Y=z$1.object({code:z$1.string().min(1).max(80),name:w,description:w.optional(),tenantId:z$1.string().optional(),metadata:z$1.record(z$1.unknown()).optional()}),Z=z$1.object({name:w.optional(),description:w.optional(),metadata:z$1.record(z$1.unknown()).optional()}),_=["text","textarea","number","date","datetime","time","select","multiselect","checkbox","radio","file","image","email","gps","rating","calculated","hidden","label","panel","richtext","listradio","photo"],K=z$1.object({code:z$1.string().min(1).max(80),name:w,variableType:z$1.enum(_),tenantId:z$1.string().optional(),description:w.optional(),placeholder:w.optional(),isRequired:z$1.boolean().optional(),isReadonly:z$1.boolean().optional(),isHidden:z$1.boolean().optional(),options:z$1.array(z$1.object({label:w,value:z$1.unknown(),metadata:z$1.record(z$1.unknown()).optional()})).optional(),validationRules:z$1.array(z$1.object({type:z$1.string(),value:z$1.unknown().optional(),message:w})).optional(),conditions:z$1.array(z$1.unknown()).optional(),expression:z$1.string().optional(),dataSourceId:z$1.string().optional(),dataSourceDependencies:z$1.record(z$1.string()).optional(),style:z$1.record(z$1.unknown()).optional(),metadata:z$1.record(z$1.unknown()).optional()}),Q=z$1.object({variableType:z$1.enum(_).optional(),description:w.optional(),placeholder:w.optional(),isRequired:z$1.boolean().optional(),isReadonly:z$1.boolean().optional(),isHidden:z$1.boolean().optional(),options:z$1.array(z$1.object({label:w,value:z$1.unknown(),metadata:z$1.record(z$1.unknown()).optional()})).optional(),validationRules:z$1.array(z$1.object({type:z$1.string(),value:z$1.unknown().optional(),message:w})).optional(),conditions:z$1.array(z$1.unknown()).optional(),expression:z$1.string().optional(),dataSourceId:z$1.string().optional(),dataSourceDependencies:z$1.record(z$1.string()).optional(),style:z$1.record(z$1.unknown()).optional(),metadata:z$1.record(z$1.unknown()).optional()}).strict(),N=z$1.object({formId:z$1.string().min(1),tenantId:z$1.string().optional(),status:z$1.enum(["draft","submitted","approved","rejected","completed"]).default("draft"),data:z$1.record(z$1.unknown()),submittedBy:z$1.string().optional(),metadata:z$1.record(z$1.unknown()).optional()}),G=z$1.object({status:z$1.enum(["draft","submitted","approved","rejected","completed"]).optional(),data:z$1.record(z$1.unknown()).optional(),metadata:z$1.record(z$1.unknown()).optional()}),R=z$1.object({page:z$1.coerce.number().int().min(1).default(1),pageSize:z$1.coerce.number().int().min(1).max(100).default(20),search:z$1.string().optional(),tenantId:z$1.string().optional()});var X=new WeakSet;async function se(s){await s.scope.upsert({where:{code_tenantId:{code:"default",tenantId:"default"}},update:{},create:{code:"default",name:JSON.stringify({fr:"Scope par d\xE9faut",en:"Default Scope"}),tenantId:"default"}});}function de(s){let{prisma:e,auth:n=M}=s;X.has(e)||(X.add(e),se(e).catch(a=>{console.error("[form-server] initializeDefaults failed:",a);}));let i=new x(e),c=new P(e),r=new Map;async function d(a){let o=await n({headers:a.headers,query:a.query});if(!o)throw f.unauthorized();return o}function p(a,o=200){return {status:o,body:v(a)}}function u(a,o,m,b){return {status:200,body:B(a,o,m,b)}}r.set("GET /form-types",async a=>{await d(a);let o=await i.getFormTypes();return p(o)}),r.set("GET /form-types/:id",async a=>(await d(a),p(await i.getFormType(a.params.id)))),r.set("POST /form-types",async a=>{await d(a);let o=D.parse(a.body);return p(await i.createFormType(o),201)}),r.set("PUT /form-types/:id",async a=>{await d(a);let o=j.parse(a.body);return p(await i.updateFormType(a.params.id,o))}),r.set("DELETE /form-types/:id",async a=>(await d(a),await i.deleteFormType(a.params.id),p(null,204))),r.set("GET /forms",async a=>{await d(a);let o=R.parse(a.query),{items:m,total:b}=await i.getFormDefinitions(o);return u(m,b,o.page,o.pageSize)}),r.set("GET /forms/:id",async a=>(await d(a),p(await i.getFormDefinition(a.params.id)))),r.set("GET /forms/:id/resolved",async a=>(await d(a),p(await i.getResolvedFormDefinition(a.params.id)))),r.set("POST /forms",async a=>{let o=await d(a),m=V.parse(a.body);return p(await i.createFormDefinition(m,o),201)}),r.set("PUT /forms/:id",async a=>{let o=await d(a),m=U.parse(a.body);return p(await i.updateFormDefinition(a.params.id,m,o))}),r.set("DELETE /forms/:id",async a=>(await d(a),await i.deleteFormDefinition(a.params.id),p(null,204))),r.set("GET /forms/:id/export",async a=>(await d(a),{status:200,body:await i.exportForm(a.params.id)})),r.set("POST /forms/import",async a=>{await d(a);let{json:o,tenantId:m}=a.body,b=await i.importForm(o,m);return p({formId:b},201)}),r.set("POST /forms/:formId/pages",async a=>{await d(a);let o=C.parse(a.body);return p(await i.createFormPage(a.params.formId,o),201)}),r.set("PUT /pages/:id",async a=>{await d(a);let o=H.parse(a.body);return p(await i.updateFormPage(a.params.id,o))}),r.set("DELETE /pages/:id",async a=>(await d(a),await i.deleteFormPage(a.params.id),p(null,204))),r.set("POST /pages/:pageId/rosters",async a=>{await d(a);let o=z.parse(a.body);return p(await i.createFormRoster(a.params.pageId,o),201)}),r.set("PUT /rosters/:id",async a=>{await d(a);let o=q.parse(a.body);return p(await i.updateFormRoster(a.params.id,o))}),r.set("DELETE /rosters/:id",async a=>(await d(a),await i.deleteFormRoster(a.params.id),p(null,204))),r.set("POST /pages/:pageId/variables",async a=>{await d(a);let o=k.parse(a.body);return p(await i.createFormVariable({...o,pageId:a.params.pageId}),201)}),r.set("POST /rosters/:rosterId/variables",async a=>{await d(a);let o=k.parse(a.body);return p(await i.createFormVariable({...o,rosterId:a.params.rosterId}),201)}),r.set("PUT /variables/:id",async a=>{await d(a);let o=J.parse(a.body);return p(await i.updateFormVariable(a.params.id,o))}),r.set("DELETE /variables/:id",async a=>(await d(a),await i.deleteFormVariable(a.params.id),p(null,204))),r.set("GET /forms/:formId/submissions",async a=>{await d(a);let o=R.parse(a.query),{items:m,total:b}=await i.getSubmissions({formId:a.params.formId,...o});return u(m,b,o.page,o.pageSize)}),r.set("GET /submissions/:id",async a=>(await d(a),p(await i.getSubmission(a.params.id)))),r.set("POST /submissions",async a=>{let o=await d(a),m=N.parse(a.body);return p(await i.createSubmission(m,o),201)}),r.set("PUT /submissions/:id",async a=>{let o=await d(a),m=G.parse(a.body);return p(await i.updateSubmission(a.params.id,m,o))}),r.set("GET /scopes",async a=>{let o=await d(a),m=R.parse(a.query),{items:b,total:A}=await c.listScopes({tenantId:m.tenantId,page:m.page,pageSize:m.pageSize},o);return u(b,A,m.page,m.pageSize)}),r.set("GET /scopes/:id",async a=>(await d(a),p(await c.getScopeById(a.params.id)))),r.set("POST /scopes",async a=>{let o=await d(a),m=Y.parse(a.body);return p(await c.createScope(m,o),201)}),r.set("PUT /scopes/:id",async a=>{let o=await d(a),m=Z.parse(a.body);return p(await c.updateScope(a.params.id,m,o))}),r.set("DELETE /scopes/:id",async a=>(await d(a),await c.deleteScope(a.params.id),p(null,204))),r.set("GET /scopes/:scopeId/templates",async a=>{await d(a);let o=R.parse(a.query),{items:m,total:b}=await c.listTemplates(a.params.scopeId,{page:o.page,pageSize:o.pageSize});return u(m,b,o.page,o.pageSize)}),r.set("POST /scopes/:scopeId/templates",async a=>{let o=await d(a),m=K.parse(a.body);return p(await c.createTemplate(a.params.scopeId,m,o),201)}),r.set("GET /templates/:id",async a=>(await d(a),p(await c.getTemplateById(a.params.id)))),r.set("PUT /templates/:id",async a=>{let o=await d(a),m=Q.parse(a.body);return p(await c.updateTemplate(a.params.id,m,o))}),r.set("DELETE /templates/:id",async a=>(await d(a),await c.deleteTemplate(a.params.id),p(null,204)));function g(a,o){for(let[m,b]of r){let[A,ee]=m.split(" ");if(A!==a)continue;let $=ce(ee,o);if($)return {handler:b,params:$}}return null}return {routes:r,handle:async a=>{try{let o=g(a.method,a.path);return o?(a.params=o.params,await o.handler(a)):{status:404,body:{status:404,message:"Route not found",data:null}}}catch(o){return o instanceof f?{status:o.statusCode,body:{status:o.statusCode,message:o.message,data:null,errors:o.errors}}:o instanceof Error&&o.name==="ZodError"?{status:400,body:{status:400,message:"Validation error",data:null,errors:o.issues?.map(b=>b.message)}}:{status:500,body:{status:500,message:"Internal server error",data:null}}}}}}function ce(s,e){let n=s.split("/").filter(Boolean),i=e.split("/").filter(Boolean);if(n.length!==i.length)return null;let c={};for(let r=0;r<n.length;r++){let d=n[r],p=i[r];if(d.startsWith(":"))c[d.slice(1)]=p;else if(d!==p)return null}return c}export{f as ApiError,x as FormService,V as createFormDefinitionSchema,C as createFormPageSchema,z as createFormRosterSchema,de as createFormRouter,D as createFormTypeSchema,k as createFormVariableSchema,N as createSubmissionSchema,M as noAuth,B as paginatedResponse,R as paginationSchema,v as successResponse,U as updateFormDefinitionSchema,H as updateFormPageSchema,q as updateFormRosterSchema,j as updateFormTypeSchema,J as updateFormVariableSchema,G as updateSubmissionSchema};//# sourceMappingURL=index.mjs.map
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|