@flusys/nestjs-form-builder 7.1.0 → 8.0.0-beta.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.
Files changed (118) hide show
  1. package/config/index.d.ts +3 -3
  2. package/controllers/form-result.controller.d.ts +3 -3
  3. package/controllers/form.controller.d.ts +3 -3
  4. package/controllers/index.d.ts +2 -2
  5. package/docs/form-builder-swagger.config.d.ts +2 -2
  6. package/docs/index.d.ts +1 -1
  7. package/dtos/form.dto.d.ts +1 -1
  8. package/dtos/index.d.ts +2 -2
  9. package/entities/form-with-company.entity.d.ts +1 -1
  10. package/entities/form.entity.d.ts +1 -1
  11. package/entities/index.d.ts +7 -7
  12. package/enums/index.d.ts +1 -1
  13. package/fesm/262.js +1841 -0
  14. package/fesm/98.js +807 -0
  15. package/fesm/config/index.js +98 -3
  16. package/fesm/controllers/index.js +14 -2
  17. package/fesm/docs/index.js +171 -1
  18. package/fesm/dtos/index.js +571 -2
  19. package/fesm/entities/index.js +342 -10
  20. package/fesm/enums/index.js +38 -1
  21. package/fesm/index.js +482 -10
  22. package/fesm/interfaces/index.js +17 -3
  23. package/fesm/modules/index.js +178 -1
  24. package/fesm/runtime.js +85 -0
  25. package/fesm/services/index.js +35 -4
  26. package/index.d.ts +10 -10
  27. package/interfaces/form-builder-module.interface.d.ts +3 -3
  28. package/interfaces/form-result.interface.d.ts +1 -1
  29. package/interfaces/form.interface.d.ts +2 -2
  30. package/interfaces/index.d.ts +3 -3
  31. package/modules/form-builder.module.d.ts +2 -2
  32. package/modules/index.d.ts +1 -1
  33. package/package.json +26 -36
  34. package/services/form-builder-config.service.d.ts +4 -4
  35. package/services/form-builder-datasource.provider.d.ts +3 -3
  36. package/services/form-result.service.d.ts +6 -6
  37. package/services/form.service.d.ts +7 -7
  38. package/services/index.d.ts +4 -4
  39. package/utils/index.d.ts +2 -2
  40. package/utils/permission.utils.d.ts +1 -1
  41. package/cjs/config/event-actions.js +0 -33
  42. package/cjs/config/form-builder.constants.js +0 -13
  43. package/cjs/config/index.js +0 -20
  44. package/cjs/config/message-keys.js +0 -38
  45. package/cjs/controllers/form-result.controller.js +0 -281
  46. package/cjs/controllers/form-result.controller.spec.js +0 -257
  47. package/cjs/controllers/form.controller.js +0 -231
  48. package/cjs/controllers/form.controller.spec.js +0 -212
  49. package/cjs/controllers/index.js +0 -19
  50. package/cjs/docs/form-builder-swagger.config.js +0 -150
  51. package/cjs/docs/form-builder-swagger.config.spec.js +0 -75
  52. package/cjs/docs/index.js +0 -11
  53. package/cjs/dtos/form-result.dto.js +0 -248
  54. package/cjs/dtos/form.dto.js +0 -270
  55. package/cjs/dtos/index.js +0 -19
  56. package/cjs/entities/form-result.entity.js +0 -100
  57. package/cjs/entities/form-with-company.entity.js +0 -65
  58. package/cjs/entities/form.entity.js +0 -127
  59. package/cjs/entities/index.js +0 -52
  60. package/cjs/entities/index.spec.js +0 -18
  61. package/cjs/enums/form-access-type.enum.js +0 -19
  62. package/cjs/enums/index.js +0 -18
  63. package/cjs/index.js +0 -28
  64. package/cjs/interfaces/form-builder-module.interface.js +0 -4
  65. package/cjs/interfaces/form-result.interface.js +0 -4
  66. package/cjs/interfaces/form.interface.js +0 -4
  67. package/cjs/interfaces/index.js +0 -20
  68. package/cjs/modules/form-builder.module.js +0 -136
  69. package/cjs/modules/form-builder.module.spec.js +0 -133
  70. package/cjs/modules/index.js +0 -18
  71. package/cjs/services/form-builder-config.service.js +0 -69
  72. package/cjs/services/form-builder-config.service.spec.js +0 -121
  73. package/cjs/services/form-builder-datasource.provider.js +0 -125
  74. package/cjs/services/form-builder-datasource.provider.spec.js +0 -147
  75. package/cjs/services/form-result.service.js +0 -366
  76. package/cjs/services/form-result.service.spec.js +0 -823
  77. package/cjs/services/form.service.js +0 -341
  78. package/cjs/services/form.service.spec.js +0 -746
  79. package/cjs/services/index.js +0 -21
  80. package/cjs/utils/computed-field.utils.js +0 -199
  81. package/cjs/utils/computed-field.utils.spec.js +0 -1205
  82. package/cjs/utils/index.js +0 -19
  83. package/cjs/utils/permission.utils.js +0 -44
  84. package/cjs/utils/permission.utils.spec.js +0 -118
  85. package/fesm/config/event-actions.js +0 -12
  86. package/fesm/config/form-builder.constants.js +0 -3
  87. package/fesm/config/message-keys.js +0 -20
  88. package/fesm/controllers/form-result.controller.js +0 -271
  89. package/fesm/controllers/form-result.controller.spec.js +0 -253
  90. package/fesm/controllers/form.controller.js +0 -221
  91. package/fesm/controllers/form.controller.spec.js +0 -208
  92. package/fesm/docs/form-builder-swagger.config.js +0 -146
  93. package/fesm/docs/form-builder-swagger.config.spec.js +0 -71
  94. package/fesm/dtos/form-result.dto.js +0 -215
  95. package/fesm/dtos/form.dto.js +0 -243
  96. package/fesm/entities/form-result.entity.js +0 -90
  97. package/fesm/entities/form-with-company.entity.js +0 -55
  98. package/fesm/entities/form.entity.js +0 -117
  99. package/fesm/entities/index.spec.js +0 -14
  100. package/fesm/enums/form-access-type.enum.js +0 -9
  101. package/fesm/interfaces/form-builder-module.interface.js +0 -3
  102. package/fesm/interfaces/form-result.interface.js +0 -6
  103. package/fesm/interfaces/form.interface.js +0 -3
  104. package/fesm/modules/form-builder.module.js +0 -126
  105. package/fesm/modules/form-builder.module.spec.js +0 -129
  106. package/fesm/services/form-builder-config.service.js +0 -59
  107. package/fesm/services/form-builder-config.service.spec.js +0 -117
  108. package/fesm/services/form-builder-datasource.provider.js +0 -74
  109. package/fesm/services/form-builder-datasource.provider.spec.js +0 -143
  110. package/fesm/services/form-result.service.js +0 -356
  111. package/fesm/services/form-result.service.spec.js +0 -778
  112. package/fesm/services/form.service.js +0 -331
  113. package/fesm/services/form.service.spec.js +0 -701
  114. package/fesm/utils/computed-field.utils.js +0 -195
  115. package/fesm/utils/computed-field.utils.spec.js +0 -1201
  116. package/fesm/utils/index.js +0 -2
  117. package/fesm/utils/permission.utils.js +0 -42
  118. package/fesm/utils/permission.utils.spec.js +0 -114
@@ -1,3 +1,98 @@
1
- export * from './event-actions';
2
- export * from './form-builder.constants';
3
- export * from './message-keys';
1
+ export const __rspack_esm_id = 565;
2
+ export const __rspack_esm_ids = [565];
3
+ export const __webpack_modules__ = {
4
+ 769(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
5
+ /**
6
+ * Domain event actions published by the form builder module, alongside the
7
+ * CRUD lifecycle actions every ApiService emits.
8
+ */ const FORM_BUILDER_EVENT_ACTIONS = {
9
+ SUBMITTED: 'submitted',
10
+ DRAFT_SAVED: 'draft-saved'
11
+ };
12
+ /** Every entity the form builder module publishes under */ const FORM_BUILDER_EVENT_ENTITIES = {
13
+ FORM: 'form',
14
+ FORM_RESULT: 'form_result'
15
+ };
16
+ const FORM_BUILDER_EVENT_MODULE = 'form-builder';
17
+
18
+ __webpack_require__.d(__webpack_exports__, {
19
+ }, {
20
+ T$: FORM_BUILDER_EVENT_MODULE,
21
+ eF: FORM_BUILDER_EVENT_ENTITIES,
22
+ ov: FORM_BUILDER_EVENT_ACTIONS
23
+ });
24
+
25
+
26
+ },
27
+ 512(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
28
+ const FORM_BUILDER_MODULE_OPTIONS = 'FORM_BUILDER_MODULE_OPTIONS';
29
+
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ }, {
32
+ v: FORM_BUILDER_MODULE_OPTIONS
33
+ });
34
+
35
+
36
+ },
37
+ 511(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
38
+ /* import */ var _event_actions_js__rspack_import_0 = __webpack_require__(769);
39
+ /* import */ var _form_builder_constants_js__rspack_import_1 = __webpack_require__(512);
40
+ /* import */ var _message_keys_js__rspack_import_2 = __webpack_require__(137);
41
+
42
+
43
+
44
+
45
+ __webpack_require__.d(__webpack_exports__, {
46
+ Ql: () => (/* reexport safe */ _message_keys_js__rspack_import_2.Q),
47
+ T$: () => (/* reexport safe */ _event_actions_js__rspack_import_0.T$),
48
+ eF: () => (/* reexport safe */ _event_actions_js__rspack_import_0.eF),
49
+ ov: () => (/* reexport safe */ _event_actions_js__rspack_import_0.ov),
50
+ vx: () => (/* reexport safe */ _form_builder_constants_js__rspack_import_1.v),
51
+ yF: () => (/* reexport safe */ _message_keys_js__rspack_import_2.y)
52
+ });
53
+
54
+
55
+ },
56
+ 137(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
57
+ // ==================== FORM BUILDER MODULE MESSAGE KEYS ====================
58
+ const FORM_MESSAGES = {
59
+ NOT_FOUND: 'form.not.found',
60
+ NOT_PUBLIC: 'form.not.public',
61
+ AUTH_REQUIRED: 'form.auth.required',
62
+ ACCESS_DENIED: 'form.access.denied',
63
+ INVALID_ACCESS_TYPE: 'form.invalid.access.type',
64
+ PERMISSION_CHECK_FAILED: 'form.permission.check.failed',
65
+ GET_SUCCESS: 'form.get.success',
66
+ GET_ACCESS_INFO_SUCCESS: 'form.get.access.info.success'
67
+ };
68
+ const FORM_RESULT_MESSAGES = {
69
+ GET_ALL_SUCCESS: 'form.result.get.all.success',
70
+ NOT_FOUND: 'form.result.not.found',
71
+ HAS_SUBMITTED_SUCCESS: 'form.result.has.submitted.success',
72
+ HAS_NOT_SUBMITTED_SUCCESS: 'form.result.has.not.submitted.success',
73
+ SUBMIT_SUCCESS: 'form.result.submit.success',
74
+ DRAFT_GET_SUCCESS: 'form.result.draft.get.success',
75
+ DRAFT_UPDATE_SUCCESS: 'form.result.draft.update.success'
76
+ };
77
+
78
+ __webpack_require__.d(__webpack_exports__, {
79
+ }, {
80
+ Q: FORM_MESSAGES,
81
+ y: FORM_RESULT_MESSAGES
82
+ });
83
+
84
+
85
+ },
86
+
87
+ };
88
+ import { __webpack_require__ } from '../runtime.js';
89
+ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
90
+ import * as __rspack_chunk_1 from './index.js';
91
+ __webpack_require__.C(__rspack_chunk_1);
92
+ var __webpack_exports__ = __webpack_exec__(511);var __webpack_exports__FORM_BUILDER_EVENT_ACTIONS = __webpack_exports__.ov;
93
+ var __webpack_exports__FORM_BUILDER_EVENT_ENTITIES = __webpack_exports__.eF;
94
+ var __webpack_exports__FORM_BUILDER_EVENT_MODULE = __webpack_exports__.T$;
95
+ var __webpack_exports__FORM_BUILDER_MODULE_OPTIONS = __webpack_exports__.vx;
96
+ var __webpack_exports__FORM_MESSAGES = __webpack_exports__.Ql;
97
+ var __webpack_exports__FORM_RESULT_MESSAGES = __webpack_exports__.yF;
98
+ export { __webpack_exports__FORM_BUILDER_EVENT_ACTIONS as FORM_BUILDER_EVENT_ACTIONS, __webpack_exports__FORM_BUILDER_EVENT_ENTITIES as FORM_BUILDER_EVENT_ENTITIES, __webpack_exports__FORM_BUILDER_EVENT_MODULE as FORM_BUILDER_EVENT_MODULE, __webpack_exports__FORM_BUILDER_MODULE_OPTIONS as FORM_BUILDER_MODULE_OPTIONS, __webpack_exports__FORM_MESSAGES as FORM_MESSAGES, __webpack_exports__FORM_RESULT_MESSAGES as FORM_RESULT_MESSAGES };
@@ -1,2 +1,14 @@
1
- export * from './form.controller';
2
- export * from './form-result.controller';
1
+ export const __rspack_esm_id = 24;
2
+ export const __rspack_esm_ids = [24];
3
+ export const __webpack_modules__ = {};
4
+ import { __webpack_require__ } from '../runtime.js';
5
+ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
6
+ import * as __rspack_chunk_1 from '../262.js';
7
+ __webpack_require__.C(__rspack_chunk_1);
8
+ import * as __rspack_chunk_2 from '../98.js';
9
+ __webpack_require__.C(__rspack_chunk_2);
10
+ import * as __rspack_chunk_3 from './index.js';
11
+ __webpack_require__.C(__rspack_chunk_3);
12
+ var __webpack_exports__ = __webpack_exec__(585);var __webpack_exports__FormController = __webpack_exports__.X;
13
+ var __webpack_exports__FormResultController = __webpack_exports__.Y;
14
+ export { __webpack_exports__FormController as FormController, __webpack_exports__FormResultController as FormResultController };
@@ -1 +1,171 @@
1
- export { formBuilderSwaggerConfig } from './form-builder-swagger.config';
1
+ export const __rspack_esm_id = 428;
2
+ export const __rspack_esm_ids = [428];
3
+ export const __webpack_modules__ = {
4
+ 625(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
5
+
6
+ // EXPORTS
7
+ __webpack_require__.d(__webpack_exports__, {
8
+ a: () => (/* reexport */ formBuilderSwaggerConfig)
9
+ });
10
+
11
+ ;// CONCATENATED MODULE: ./projects/nestjs-form-builder/src/docs/form-builder-swagger.config.ts
12
+ /** Schema properties to exclude when company feature is disabled */ const COMPANY_SCHEMA_EXCLUSIONS = [
13
+ {
14
+ schemaName: 'CreateFormDto',
15
+ properties: [
16
+ 'companyId'
17
+ ]
18
+ },
19
+ {
20
+ schemaName: 'UpdateFormDto',
21
+ properties: [
22
+ 'companyId'
23
+ ]
24
+ },
25
+ {
26
+ schemaName: 'FormQueryDto',
27
+ properties: [
28
+ 'companyId'
29
+ ]
30
+ },
31
+ {
32
+ schemaName: 'FormResponseDto',
33
+ properties: [
34
+ 'companyId'
35
+ ]
36
+ }
37
+ ];
38
+ /**
39
+ * Form Builder Module Swagger Configuration
40
+ * Use this with setupSwaggerDocs() from @flusys/nestjs-core
41
+ *
42
+ * @param bootstrapConfig - Bootstrap configuration to determine feature visibility
43
+ * @returns Swagger configuration with appropriate excludeSchemaProperties based on enableCompanyFeature
44
+ */ function formBuilderSwaggerConfig(bootstrapConfig) {
45
+ const enableCompanyFeature = bootstrapConfig?.enableCompanyFeature ?? true;
46
+ const isMultiTenant = bootstrapConfig?.databaseMode === 'multi-tenant';
47
+ const multiTenantNote = isMultiTenant ? `\n> **Multi-Tenant Mode**: Include \`x-tenant-id\` header to target a specific tenant database.\n` : '';
48
+ return {
49
+ title: 'Form Builder API',
50
+ description: `
51
+ # Form Builder API
52
+ ${multiTenantNote}
53
+
54
+ Dynamic form builder with schema versioning, conditional logic, and access control.
55
+
56
+ ## Features
57
+
58
+ ### 📋 Form Management
59
+ - Create and manage dynamic forms
60
+ - Schema versioning for form updates
61
+ - Slug-based URLs for sharing${enableCompanyFeature ? '\n- **Company isolation**' : ''}
62
+
63
+ ### 🔒 Access Control
64
+ - **Public**: No authentication required
65
+ - **Authenticated**: JWT authentication required
66
+ - **Action Group**: Permission-based access via IAM
67
+
68
+ ### 📊 Form Results
69
+ - Submit and track form responses
70
+ - Draft support for partial submissions
71
+ - Schema snapshot preservation${enableCompanyFeature ? '\n- **Company-level permissions**' : ''}
72
+
73
+ ### 🔀 Conditional Logic
74
+ - Show/hide fields based on values
75
+ - Show/hide sections dynamically
76
+ - Jump to sections based on conditions
77
+ - Conditional required validation
78
+ ${enableCompanyFeature ? `
79
+ ## Multi-Tenant Support
80
+
81
+ Forms and results are automatically isolated by:
82
+ - **Company ID**: Company-level data isolation
83
+
84
+ All queries automatically filter by current user's company context.
85
+ ` : ''}
86
+ ## Form Access Types
87
+
88
+ ### Public Forms
89
+ - No authentication required
90
+ - Anyone can view and submit
91
+ - Use \`/form-builder/form/public/:id\` to get form
92
+ - Use \`/form-builder/result/submit-public\` to submit
93
+
94
+ ### Authenticated Forms
95
+ - JWT authentication required
96
+ - User must be logged in
97
+ - Use \`/form-builder/form/authenticated/:id\` to get form
98
+ - Use \`/form-builder/result/submit\` to submit
99
+
100
+ ### Action Group Forms
101
+ - Permission-based access via IAM
102
+ - User must have specific permissions
103
+ - Use \`/form-builder/form/authenticated/:id\` to get form
104
+ - Use \`/form-builder/result/submit\` to submit
105
+
106
+ ## Draft Support
107
+
108
+ Save form progress and complete later:
109
+ 1. Submit with \`isDraft: true\` to save draft
110
+ 2. Get draft with \`/form-builder/result/my-draft\`
111
+ 3. Update draft with \`/form-builder/result/update-draft\`
112
+ 4. Finalize by setting \`isDraft: false\`
113
+
114
+ ## Response Format
115
+
116
+ All endpoints return standardized responses with success status, data, message, and timestamp.
117
+
118
+ ## Error Handling
119
+
120
+ Errors return structured responses with success false, error message, error code, and timestamp.
121
+
122
+ ## Common Error Codes
123
+
124
+ - **400 Bad Request**: Invalid input data
125
+ - **401 Unauthorized**: Missing or invalid authentication
126
+ - **403 Forbidden**: Insufficient permissions or wrong access type
127
+ - **404 Not Found**: Form or result not found
128
+ - **500 Internal Server Error**: Server error
129
+
130
+ ## API Endpoints
131
+
132
+ All form builder endpoints are prefixed with \`/form-builder\`:
133
+ - \`/form-builder/form/*\` - Form management
134
+ - \`/form-builder/result/*\` - Form result/submission management
135
+
136
+ ## Examples
137
+
138
+ ### Get Form Access Info
139
+
140
+ POST /form-builder/form/access-info/:id
141
+ Returns access type and requirements (no auth required)
142
+
143
+ ### Submit Public Form
144
+
145
+ POST /form-builder/result/submit-public with JSON body containing formId and formData
146
+
147
+ ### Submit Authenticated Form
148
+
149
+ POST /form-builder/result/submit with JWT token and JSON body containing formId and formData
150
+ `,
151
+ version: '1.0',
152
+ path: 'api/docs/form-builder',
153
+ bearerAuth: true,
154
+ excludeTags: [],
155
+ excludeSchemaProperties: enableCompanyFeature ? undefined : COMPANY_SCHEMA_EXCLUSIONS
156
+ };
157
+ }
158
+
159
+ ;// CONCATENATED MODULE: ./projects/nestjs-form-builder/src/docs/index.ts
160
+
161
+
162
+
163
+ },
164
+
165
+ };
166
+ import { __webpack_require__ } from '../runtime.js';
167
+ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
168
+ import * as __rspack_chunk_1 from './index.js';
169
+ __webpack_require__.C(__rspack_chunk_1);
170
+ var __webpack_exports__ = __webpack_exec__(625);var __webpack_exports__formBuilderSwaggerConfig = __webpack_exports__.a;
171
+ export { __webpack_exports__formBuilderSwaggerConfig as formBuilderSwaggerConfig };