@ng-atomic/common 18.11.0 → 18.12.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.
Files changed (192) hide show
  1. package/directives/molecules/column/column.molecule.d.ts +66 -0
  2. package/directives/molecules/column/index.d.ts +1 -0
  3. package/directives/resize-column/index.d.ts +1 -0
  4. package/directives/resize-column/resize-column.directive.d.ts +21 -0
  5. package/directives/resize-column/resize-handle.component.d.ts +5 -0
  6. package/esm2022/directives/molecules/column/column.molecule.mjs +112 -0
  7. package/esm2022/directives/molecules/column/index.mjs +2 -0
  8. package/esm2022/directives/molecules/column/ng-atomic-common-directives-molecules-column.mjs +5 -0
  9. package/esm2022/directives/resize-column/index.mjs +2 -0
  10. package/esm2022/directives/resize-column/ng-atomic-common-directives-resize-column.mjs +5 -0
  11. package/esm2022/directives/resize-column/resize-column.directive.mjs +62 -0
  12. package/esm2022/directives/resize-column/resize-handle.component.mjs +13 -0
  13. package/esm2022/models/index.mjs +1 -1
  14. package/esm2022/pipes/actions/actions.pipe.mjs +1 -1
  15. package/esm2022/pipes/columns/columns.pipe.mjs +3 -2
  16. package/esm2022/pipes/data-accessor/data-accessor.pipe.mjs +1 -1
  17. package/esm2022/pipes/domain/domain.pipe.mjs +10 -24
  18. package/esm2022/pipes/error/error.pipe.mjs +1 -2
  19. package/esm2022/pipes/expression/expression.pipe.mjs +18 -0
  20. package/esm2022/pipes/expression/index.mjs +2 -0
  21. package/esm2022/pipes/expression/ng-atomic-common-pipes-expression.mjs +5 -0
  22. package/esm2022/pipes/smart-field/smart-field.pipe.mjs +15 -4
  23. package/esm2022/pipes/style/index.mjs +2 -0
  24. package/esm2022/pipes/style/ng-atomic-common-pipes-style.mjs +5 -0
  25. package/esm2022/pipes/style/style.pipe.mjs +41 -0
  26. package/esm2022/services/form/columns/columns.service.mjs +28 -21
  27. package/esm2022/services/form/json-schema/json-schema.service.mjs +75 -57
  28. package/esm2022/services/form/pagination/pagination.service.mjs +4 -4
  29. package/esm2022/services/language/index.mjs +2 -0
  30. package/esm2022/services/language/language.service.mjs +39 -0
  31. package/esm2022/services/language/ng-atomic-common-services-language.mjs +5 -0
  32. package/esm2022/services/loading/loading.service.mjs +2 -2
  33. package/esm2022/services/query-resolver/query-resolver.service.mjs +4 -5
  34. package/esm2022/services/snack-bar/snack-bar.service.mjs +29 -11
  35. package/esm2022/services/spreadsheet/directives/grid-cell.directive.mjs +124 -0
  36. package/esm2022/services/spreadsheet/directives/index.mjs +2 -0
  37. package/esm2022/services/spreadsheet/features/clipboard.service.mjs +71 -0
  38. package/esm2022/services/spreadsheet/features/data.service.mjs +63 -0
  39. package/esm2022/services/spreadsheet/features/editor.service.mjs +65 -0
  40. package/esm2022/services/spreadsheet/features/grid.service.mjs +54 -0
  41. package/esm2022/services/spreadsheet/features/index.mjs +8 -0
  42. package/esm2022/services/spreadsheet/features/navigation.service.mjs +71 -0
  43. package/esm2022/services/spreadsheet/features/protection.service.mjs +25 -0
  44. package/esm2022/services/spreadsheet/features/selection.service.mjs +129 -0
  45. package/esm2022/services/spreadsheet/index.mjs +5 -0
  46. package/esm2022/services/spreadsheet/models/cell.model.mjs +2 -0
  47. package/esm2022/services/spreadsheet/models/index.mjs +2 -0
  48. package/esm2022/services/spreadsheet/ng-atomic-common-services-spreadsheet.mjs +5 -0
  49. package/esm2022/services/spreadsheet/spreadsheet.service.mjs +183 -0
  50. package/esm2022/services/ui/ui.helpers.mjs +15 -8
  51. package/esm2022/stores/query/query.store.mjs +2 -2
  52. package/esm2022/utils/expression/expression.transformer.mjs +38 -0
  53. package/esm2022/utils/expression/index.mjs +2 -0
  54. package/esm2022/utils/get/get.mjs +2 -2
  55. package/esm2022/utils/index.mjs +2 -2
  56. package/esm2022/utils/inject/inject.mjs +1 -1
  57. package/fesm2022/ng-atomic-common-directives-fallback-src.mjs.map +1 -1
  58. package/fesm2022/ng-atomic-common-directives-ios-safari-scroll-buggyfill.mjs.map +1 -1
  59. package/fesm2022/ng-atomic-common-directives-molecules-column.mjs +119 -0
  60. package/fesm2022/ng-atomic-common-directives-molecules-column.mjs.map +1 -0
  61. package/fesm2022/ng-atomic-common-directives-resize-column.mjs +79 -0
  62. package/fesm2022/ng-atomic-common-directives-resize-column.mjs.map +1 -0
  63. package/fesm2022/ng-atomic-common-interceptors-authorization.mjs.map +1 -1
  64. package/fesm2022/ng-atomic-common-interceptors-throttle.mjs.map +1 -1
  65. package/fesm2022/ng-atomic-common-interceptors-token.mjs.map +1 -1
  66. package/fesm2022/ng-atomic-common-interceptors.mjs.map +1 -1
  67. package/fesm2022/ng-atomic-common-pipes-actions.mjs.map +1 -1
  68. package/fesm2022/ng-atomic-common-pipes-auto-columns.mjs.map +1 -1
  69. package/fesm2022/ng-atomic-common-pipes-columns.mjs +2 -1
  70. package/fesm2022/ng-atomic-common-pipes-columns.mjs.map +1 -1
  71. package/fesm2022/ng-atomic-common-pipes-data-accessor.mjs.map +1 -1
  72. package/fesm2022/ng-atomic-common-pipes-domain.mjs +10 -24
  73. package/fesm2022/ng-atomic-common-pipes-domain.mjs.map +1 -1
  74. package/fesm2022/ng-atomic-common-pipes-error.mjs +0 -1
  75. package/fesm2022/ng-atomic-common-pipes-error.mjs.map +1 -1
  76. package/fesm2022/ng-atomic-common-pipes-expression.mjs +25 -0
  77. package/fesm2022/ng-atomic-common-pipes-expression.mjs.map +1 -0
  78. package/fesm2022/ng-atomic-common-pipes-grouped-by.mjs.map +1 -1
  79. package/fesm2022/ng-atomic-common-pipes-index-length.mjs.map +1 -1
  80. package/fesm2022/ng-atomic-common-pipes-index.mjs.map +1 -1
  81. package/fesm2022/ng-atomic-common-pipes-keys.mjs.map +1 -1
  82. package/fesm2022/ng-atomic-common-pipes-map.mjs.map +1 -1
  83. package/fesm2022/ng-atomic-common-pipes-page.mjs.map +1 -1
  84. package/fesm2022/ng-atomic-common-pipes-pagination.mjs.map +1 -1
  85. package/fesm2022/ng-atomic-common-pipes-query.mjs.map +1 -1
  86. package/fesm2022/ng-atomic-common-pipes-resolve-columns.mjs.map +1 -1
  87. package/fesm2022/ng-atomic-common-pipes-secret.mjs.map +1 -1
  88. package/fesm2022/ng-atomic-common-pipes-select-id.mjs.map +1 -1
  89. package/fesm2022/ng-atomic-common-pipes-signal.mjs.map +1 -1
  90. package/fesm2022/ng-atomic-common-pipes-smart-field.mjs +15 -4
  91. package/fesm2022/ng-atomic-common-pipes-smart-field.mjs.map +1 -1
  92. package/fesm2022/ng-atomic-common-pipes-sort-by.mjs.map +1 -1
  93. package/fesm2022/ng-atomic-common-pipes-sort.mjs.map +1 -1
  94. package/fesm2022/ng-atomic-common-pipes-style.mjs +48 -0
  95. package/fesm2022/ng-atomic-common-pipes-style.mjs.map +1 -0
  96. package/fesm2022/ng-atomic-common-pipes-yen.mjs.map +1 -1
  97. package/fesm2022/ng-atomic-common-services-app.mjs.map +1 -1
  98. package/fesm2022/ng-atomic-common-services-auth.mjs.map +1 -1
  99. package/fesm2022/ng-atomic-common-services-breakpoint.mjs.map +1 -1
  100. package/fesm2022/ng-atomic-common-services-chips-manager.mjs.map +1 -1
  101. package/fesm2022/ng-atomic-common-services-csv.mjs.map +1 -1
  102. package/fesm2022/ng-atomic-common-services-fab.mjs.map +1 -1
  103. package/fesm2022/ng-atomic-common-services-form-_index.mjs.map +1 -1
  104. package/fesm2022/ng-atomic-common-services-form-columns.mjs +27 -20
  105. package/fesm2022/ng-atomic-common-services-form-columns.mjs.map +1 -1
  106. package/fesm2022/ng-atomic-common-services-form-json-schema.mjs +74 -56
  107. package/fesm2022/ng-atomic-common-services-form-json-schema.mjs.map +1 -1
  108. package/fesm2022/ng-atomic-common-services-form-pagination.mjs +3 -3
  109. package/fesm2022/ng-atomic-common-services-form-pagination.mjs.map +1 -1
  110. package/fesm2022/ng-atomic-common-services-form-sort.mjs.map +1 -1
  111. package/fesm2022/ng-atomic-common-services-form.mjs.map +1 -1
  112. package/fesm2022/ng-atomic-common-services-initializer.mjs.map +1 -1
  113. package/fesm2022/ng-atomic-common-services-language.mjs +46 -0
  114. package/fesm2022/ng-atomic-common-services-language.mjs.map +1 -0
  115. package/fesm2022/ng-atomic-common-services-loading.mjs +1 -1
  116. package/fesm2022/ng-atomic-common-services-loading.mjs.map +1 -1
  117. package/fesm2022/ng-atomic-common-services-navigation-history.mjs.map +1 -1
  118. package/fesm2022/ng-atomic-common-services-query-resolver.mjs +3 -3
  119. package/fesm2022/ng-atomic-common-services-query-resolver.mjs.map +1 -1
  120. package/fesm2022/ng-atomic-common-services-root-property.mjs.map +1 -1
  121. package/fesm2022/ng-atomic-common-services-router.mjs.map +1 -1
  122. package/fesm2022/ng-atomic-common-services-secret.mjs.map +1 -1
  123. package/fesm2022/ng-atomic-common-services-sheets-actions.mjs.map +1 -1
  124. package/fesm2022/ng-atomic-common-services-sheets.mjs.map +1 -1
  125. package/fesm2022/ng-atomic-common-services-side-app.mjs.map +1 -1
  126. package/fesm2022/ng-atomic-common-services-side-nav-mode.mjs.map +1 -1
  127. package/fesm2022/ng-atomic-common-services-snack-bar.mjs +29 -11
  128. package/fesm2022/ng-atomic-common-services-snack-bar.mjs.map +1 -1
  129. package/fesm2022/ng-atomic-common-services-spreadsheet.mjs +758 -0
  130. package/fesm2022/ng-atomic-common-services-spreadsheet.mjs.map +1 -0
  131. package/fesm2022/ng-atomic-common-services-ui.mjs +14 -7
  132. package/fesm2022/ng-atomic-common-services-ui.mjs.map +1 -1
  133. package/fesm2022/ng-atomic-common-stores-entities.mjs.map +1 -1
  134. package/fesm2022/ng-atomic-common-stores-entity.mjs.map +1 -1
  135. package/fesm2022/ng-atomic-common-stores-pagination.mjs.map +1 -1
  136. package/fesm2022/ng-atomic-common-stores-query.mjs +1 -1
  137. package/fesm2022/ng-atomic-common-stores-query.mjs.map +1 -1
  138. package/fesm2022/ng-atomic-common-stores-selection.mjs.map +1 -1
  139. package/fesm2022/ng-atomic-common-stores-sort.mjs.map +1 -1
  140. package/fesm2022/ng-atomic-common-utils.mjs +34 -15
  141. package/fesm2022/ng-atomic-common-utils.mjs.map +1 -1
  142. package/fesm2022/ng-atomic-common.mjs.map +1 -1
  143. package/models/index.d.ts +2 -1
  144. package/package.json +67 -38
  145. package/pipes/actions/actions.pipe.d.ts +2 -1
  146. package/pipes/columns/columns.pipe.d.ts +1 -0
  147. package/pipes/data-accessor/data-accessor.pipe.d.ts +1 -1
  148. package/pipes/domain/domain.pipe.d.ts +3 -5
  149. package/pipes/expression/expression.pipe.d.ts +9 -0
  150. package/pipes/expression/index.d.ts +1 -0
  151. package/pipes/smart-field/smart-field.pipe.d.ts +2 -2
  152. package/pipes/style/index.d.ts +1 -0
  153. package/pipes/style/style.pipe.d.ts +18 -0
  154. package/services/form/_index/index.service.d.ts +4 -4
  155. package/services/form/columns/columns.service.d.ts +5 -2
  156. package/services/form/json-schema/json-schema.service.d.ts +9 -1
  157. package/services/form/pagination/pagination.service.d.ts +5 -5
  158. package/services/language/index.d.ts +1 -0
  159. package/services/language/language.service.d.ts +12 -0
  160. package/services/query-resolver/query-resolver.service.d.ts +2 -2
  161. package/services/snack-bar/snack-bar.service.d.ts +5 -3
  162. package/services/spreadsheet/directives/grid-cell.directive.d.ts +41 -0
  163. package/services/spreadsheet/directives/index.d.ts +1 -0
  164. package/services/spreadsheet/features/clipboard.service.d.ts +15 -0
  165. package/services/spreadsheet/features/data.service.d.ts +16 -0
  166. package/services/spreadsheet/features/editor.service.d.ts +22 -0
  167. package/services/spreadsheet/features/grid.service.d.ts +17 -0
  168. package/services/spreadsheet/features/index.d.ts +7 -0
  169. package/services/spreadsheet/features/navigation.service.d.ts +17 -0
  170. package/services/spreadsheet/features/protection.service.d.ts +24 -0
  171. package/services/spreadsheet/features/selection.service.d.ts +40 -0
  172. package/services/spreadsheet/index.d.ts +4 -0
  173. package/services/spreadsheet/models/cell.model.d.ts +17 -0
  174. package/services/spreadsheet/models/index.d.ts +1 -0
  175. package/services/spreadsheet/spreadsheet.service.d.ts +29 -0
  176. package/utils/expression/expression.transformer.d.ts +12 -0
  177. package/utils/expression/index.d.ts +1 -0
  178. package/utils/index.d.ts +1 -1
  179. package/utils/inject/inject.d.ts +2 -2
  180. package/esm2022/pipes/smart-exp/index.mjs +0 -3
  181. package/esm2022/pipes/smart-exp/ng-atomic-common-pipes-smart-exp.mjs +0 -5
  182. package/esm2022/pipes/smart-exp/smart-exp.module.mjs +0 -16
  183. package/esm2022/pipes/smart-exp/smart-exp.pipe.mjs +0 -27
  184. package/esm2022/utils/smart-exp-transformer/index.mjs +0 -2
  185. package/esm2022/utils/smart-exp-transformer/smart-exp-transformer.mjs +0 -18
  186. package/fesm2022/ng-atomic-common-pipes-smart-exp.mjs +0 -47
  187. package/fesm2022/ng-atomic-common-pipes-smart-exp.mjs.map +0 -1
  188. package/pipes/smart-exp/index.d.ts +0 -2
  189. package/pipes/smart-exp/smart-exp.module.d.ts +0 -7
  190. package/pipes/smart-exp/smart-exp.pipe.d.ts +0 -11
  191. package/utils/smart-exp-transformer/index.d.ts +0 -1
  192. package/utils/smart-exp-transformer/smart-exp-transformer.d.ts +0 -6
@@ -12,13 +12,11 @@ class ColumnsFormBuilder {
12
12
  map: {
13
13
  user: {
14
14
  type: 'text',
15
- headerText: 'User',
16
15
  width: 80,
17
16
  visible: true,
18
17
  },
19
18
  id: {
20
19
  type: 'text',
21
- headerText: 'ID',
22
20
  width: 80,
23
21
  visible: true,
24
22
  },
@@ -37,10 +35,10 @@ class ColumnsFormBuilder {
37
35
  case 'tree':
38
36
  return this.fb.group({
39
37
  type: this.fb.control({ value: 'tree', disabled: true }),
40
- headerText: this.fb.control(column.headerText),
41
38
  visible: this.fb.control(column.visible),
42
39
  width: this.fb.control(column.width),
43
40
  sticky: this.fb.control(column.sticky),
41
+ stickyEnd: this.fb.control(column.stickyEnd),
44
42
  });
45
43
  case 'text':
46
44
  return this.fb.group({
@@ -48,6 +46,7 @@ class ColumnsFormBuilder {
48
46
  visible: this.fb.control(column.visible),
49
47
  width: this.fb.control(column.width),
50
48
  sticky: this.fb.control(column.sticky),
49
+ stickyEnd: this.fb.control(column.stickyEnd),
51
50
  });
52
51
  case 'checkbox':
53
52
  return this.fb.group({
@@ -55,6 +54,7 @@ class ColumnsFormBuilder {
55
54
  visible: this.fb.control(column.visible),
56
55
  width: this.fb.control(column.width),
57
56
  sticky: this.fb.control(column.sticky),
57
+ stickyEnd: this.fb.control(column.stickyEnd),
58
58
  });
59
59
  case 'actions':
60
60
  return this.fb.group({
@@ -63,6 +63,7 @@ class ColumnsFormBuilder {
63
63
  width: this.fb.control(column.width),
64
64
  actions: this.fb.control(column.actions),
65
65
  sticky: this.fb.control(column.sticky),
66
+ stickyEnd: this.fb.control(column.stickyEnd),
66
67
  });
67
68
  default:
68
69
  throw new Error(`Unknown column type: ${column.type}`);
@@ -78,43 +79,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
78
79
  function injectColumnsForm() {
79
80
  return inject(ColumnsFormBuilder).build();
80
81
  }
81
- function toColumns(column, i, sticky) {
82
- if (typeof column === 'string') {
83
- if (column === '__actions') {
82
+ function buildColumn(nameOrAction, i, sticky, stickyEnd) {
83
+ if (typeof nameOrAction === 'string') {
84
+ if (nameOrAction === '__actions') {
84
85
  return {
85
86
  type: 'actions',
86
87
  name: `actions_${i}`,
87
88
  visible: true,
88
- width: 80,
89
+ width: 40,
89
90
  sticky,
91
+ stickyEnd,
90
92
  };
91
93
  }
92
- else if (column === '__checkbox') {
94
+ else if (nameOrAction === '__checkbox') {
93
95
  return {
94
96
  type: 'checkbox',
95
97
  name: 'checkbox',
96
98
  visible: true,
97
99
  width: 24,
98
100
  sticky,
101
+ stickyEnd,
99
102
  };
100
103
  }
101
- else if (column.startsWith('__tree')) {
104
+ else if (nameOrAction.startsWith('__tree')) {
102
105
  return {
103
106
  type: 'tree',
104
- name: column.split('__tree_')?.[1] ?? '__tree',
105
- headerText: column.split('__tree_')?.[1] ?? '',
107
+ name: nameOrAction.split('__tree_')?.[1] ?? '__tree',
106
108
  visible: true,
107
- width: 320,
109
+ width: 240,
108
110
  sticky,
111
+ stickyEnd,
109
112
  };
110
113
  }
111
114
  else {
112
115
  return {
113
116
  type: 'text',
114
- name: column,
117
+ name: nameOrAction,
115
118
  visible: true,
116
- width: 80,
119
+ width: 100,
117
120
  sticky,
121
+ stickyEnd,
118
122
  };
119
123
  }
120
124
  }
@@ -123,17 +127,20 @@ function toColumns(column, i, sticky) {
123
127
  type: 'actions',
124
128
  name: `actions_${i}`,
125
129
  visible: true,
126
- width: 80,
130
+ width: 40,
127
131
  sticky,
128
- actions: wrapActions(column),
132
+ stickyEnd,
133
+ actions: wrapActions(nameOrAction),
129
134
  };
130
135
  }
131
136
  }
132
- function buildColumns(columns, { stickyStart = 0, stickyEnd = 0, } = {}) {
133
- const _columns = columns.map((column, i) => toColumns(column, i, i < stickyStart || i >= columns.length - stickyEnd));
137
+ function buildColumns(columnIdOrActions, { stickyStart = 0, stickyEnd = 0, } = {}) {
138
+ const columns = columnIdOrActions.map((columnIdOrAction, i) => {
139
+ return buildColumn(columnIdOrAction, i, i < stickyStart, i >= columnIdOrActions.length - stickyEnd);
140
+ });
134
141
  return {
135
- ids: _columns.map((column) => column.name),
136
- map: _columns.reduce((obj, column) => ({ ...obj, [column.name]: column }), {}),
142
+ ids: columns.map((column) => column.name),
143
+ map: columns.reduce((obj, column) => ({ ...obj, [column.name]: column }), {}),
137
144
  };
138
145
  }
139
146
 
@@ -1 +1 @@
1
- {"version":3,"file":"ng-atomic-common-services-form-columns.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/form/columns/columns.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/columns/ng-atomic-common-services-form-columns.ts"],"sourcesContent":["import { inject, Injectable } from \"@angular/core\";\nimport { FormArray, FormBuilder, FormControl, FormGroup, FormRecord, Validators } from \"@angular/forms\";\nimport { Actions, wrapActions } from \"@ng-atomic/core\";\nimport { Column } from \"@ng-atomic/common/models\";\n\nexport type ActionsColumnForm = FormGroup<{\n type: FormControl<'actions'>,\n visible: FormControl<boolean>,\n width: FormControl<number>,\n actions: FormControl<any>,\n sticky: FormControl<boolean>,\n}>;\n\nexport type CheckboxColumnForm = FormGroup<{\n type: FormControl<'checkbox'>,\n visible: FormControl<boolean>,\n width: FormControl<number>,\n sticky: FormControl<boolean>,\n}>;\n\nexport type TextColumnForm = FormGroup<{\n type: FormControl<'text'>,\n visible: FormControl<boolean>,\n width: FormControl<number>,\n sticky: FormControl<boolean>,\n}>;\n\nexport type TreeColumnForm = FormGroup<{\n type: FormControl<'tree'>,\n headerText: FormControl<string>,\n visible: FormControl<boolean>,\n width: FormControl<number>,\n sticky: FormControl<boolean>,\n}>;\n\nexport type ColumnsForm = FormArray<FormRecord<ActionsColumnForm | CheckboxColumnForm | TextColumnForm | TreeColumnForm>>;\n\nexport interface ColumnsFormValue {\n ids: string[],\n map: { [key: string]: Column },\n}\n\n@Injectable({providedIn: 'root'})\nexport class ColumnsFormBuilder {\n protected readonly fb = inject(FormBuilder).nonNullable;\n\n build(columns: ColumnsFormValue = {\n ids: ['id', 'user'],\n map: {\n user: {\n type: 'text' as const,\n headerText: 'User',\n width: 80,\n visible: true,\n },\n id: {\n type: 'text',\n headerText: 'ID',\n width: 80,\n visible: true,\n },\n },\n }) {\n return this.fb.group({\n ids: this.fb.control(columns.ids, Validators.required),\n map: this.fb.group(Object.entries(columns.map).reduce((obj, [key, value]) => ({\n ...obj,\n [key]: this.buildColumnForm(value),\n }), {})),\n });\n }\n\n protected buildColumnForm(column: Column) {\n switch (column.type) {\n case 'tree':\n return this.fb.group({\n type: this.fb.control({value: 'tree' as const, disabled: true}),\n headerText: this.fb.control(column.headerText),\n visible: this.fb.control(column.visible),\n width: this.fb.control(column.width),\n sticky: this.fb.control(column.sticky),\n }) as TreeColumnForm;\n case 'text': \n return this.fb.group({\n type: this.fb.control({value: 'text' as const, disabled: true}),\n visible: this.fb.control(column.visible),\n width: this.fb.control(column.width),\n sticky: this.fb.control(column.sticky),\n }) as TextColumnForm;\n case 'checkbox':\n return this.fb.group({\n type: this.fb.control({value: 'checkbox' as const, disabled: true}),\n visible: this.fb.control(column.visible),\n width: this.fb.control(column.width),\n sticky: this.fb.control(column.sticky),\n }) as CheckboxColumnForm;\n case 'actions':\n return this.fb.group({\n type: this.fb.control({value: 'actions' as const, disabled: true}),\n visible: this.fb.control(column.visible),\n width: this.fb.control(column.width),\n actions: this.fb.control(column.actions),\n sticky: this.fb.control(column.sticky),\n }) as ActionsColumnForm;\n default:\n throw new Error(`Unknown column type: ${(column as any).type}`);\n }\n }\n}\n\nexport function injectColumnsForm() {\n return inject(ColumnsFormBuilder).build();\n}\n\nfunction toColumns(column: (string | Actions), i: number, sticky: boolean): Column {\n if (typeof column === 'string') {\n if (column === '__actions') {\n return {\n type: 'actions',\n name: `actions_${i}`,\n visible: true,\n width: 80,\n sticky,\n }\n } else if (column === '__checkbox') {\n return {\n type: 'checkbox',\n name: 'checkbox',\n visible: true,\n width: 24,\n sticky,\n }\n } else if (column.startsWith('__tree')) {\n return {\n type: 'tree',\n name: column.split('__tree_')?.[1] ?? '__tree',\n headerText: column.split('__tree_')?.[1] ?? '',\n visible: true,\n width: 320,\n sticky,\n }\n } else {\n return {\n type: 'text',\n name: column,\n visible: true,\n width: 80,\n sticky,\n };\n } \n } else {\n return {\n type: 'actions',\n name: `actions_${i}`,\n visible: true,\n width: 80,\n sticky,\n actions: wrapActions(column),\n };\n }\n}\n\nexport function buildColumns(columns: (string | Actions)[], {\n stickyStart = 0,\n stickyEnd = 0,\n}: {\n stickyStart?: number,\n stickyEnd?: number,\n} = {}): {ids: string[], map: {[key: string]: Column}} {\n const _columns = columns.map((column, i) => toColumns(column, i, i < stickyStart || i >= columns.length - stickyEnd));\n return {\n ids: _columns.map((column) => column.name),\n map: _columns.reduce((obj, column) => ({...obj, [column.name]: column}), {}),\n };\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-atomic-common-services-form-columns.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/form/columns/columns.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/columns/ng-atomic-common-services-form-columns.ts"],"sourcesContent":["import { inject, Injectable } from \"@angular/core\";\nimport { FormArray, FormBuilder, FormControl, FormGroup, FormRecord, Validators } from \"@angular/forms\";\nimport { Actions, wrapActions } from \"@ng-atomic/core\";\nimport { Column } from \"@ng-atomic/common/models\";\n\nexport type ActionsColumnForm = FormGroup<{\n type: FormControl<'actions'>,\n visible: FormControl<boolean>,\n width: FormControl<number>,\n actions: FormControl<any>,\n sticky: FormControl<boolean>,\n stickyEnd: FormControl<boolean>,\n}>;\n\nexport type CheckboxColumnForm = FormGroup<{\n type: FormControl<'checkbox'>,\n visible: FormControl<boolean>,\n width: FormControl<number>,\n sticky: FormControl<boolean>,\n stickyEnd: FormControl<boolean>,\n}>;\n\nexport type TextColumnForm = FormGroup<{\n type: FormControl<'text'>,\n visible: FormControl<boolean>,\n width: FormControl<number>,\n sticky: FormControl<boolean>,\n stickyEnd: FormControl<boolean>,\n}>;\n\nexport type TreeColumnForm = FormGroup<{\n type: FormControl<'tree'>,\n visible: FormControl<boolean>,\n width: FormControl<number>,\n sticky: FormControl<boolean>,\n stickyEnd: FormControl<boolean>,\n}>;\n\nexport type ColumnsForm = FormArray<FormRecord<ActionsColumnForm | CheckboxColumnForm | TextColumnForm | TreeColumnForm>>;\n\nexport interface ColumnsFormValue {\n ids: string[],\n map: { [key: string]: Column },\n}\n\n@Injectable({providedIn: 'root'})\nexport class ColumnsFormBuilder {\n protected readonly fb = inject(FormBuilder).nonNullable;\n\n build(columns: ColumnsFormValue = {\n ids: ['id', 'user'],\n map: {\n user: {\n type: 'text' as const,\n width: 80,\n visible: true,\n },\n id: {\n type: 'text',\n width: 80,\n visible: true,\n },\n },\n }) {\n return this.fb.group({\n ids: this.fb.control(columns.ids, Validators.required),\n map: this.fb.group(Object.entries(columns.map).reduce((obj, [key, value]) => ({\n ...obj,\n [key]: this.buildColumnForm(value),\n }), {})),\n });\n }\n\n protected buildColumnForm(column: Column) {\n switch (column.type) {\n case 'tree':\n return this.fb.group({\n type: this.fb.control({value: 'tree' as const, disabled: true}),\n visible: this.fb.control(column.visible),\n width: this.fb.control(column.width),\n sticky: this.fb.control(column.sticky),\n stickyEnd: this.fb.control(column.stickyEnd),\n }) as TreeColumnForm;\n case 'text': \n return this.fb.group({\n type: this.fb.control({value: 'text' as const, disabled: true}),\n visible: this.fb.control(column.visible),\n width: this.fb.control(column.width),\n sticky: this.fb.control(column.sticky),\n stickyEnd: this.fb.control(column.stickyEnd),\n }) as TextColumnForm;\n case 'checkbox':\n return this.fb.group({\n type: this.fb.control({value: 'checkbox' as const, disabled: true}),\n visible: this.fb.control(column.visible),\n width: this.fb.control(column.width),\n sticky: this.fb.control(column.sticky),\n stickyEnd: this.fb.control(column.stickyEnd),\n }) as CheckboxColumnForm;\n case 'actions':\n return this.fb.group({\n type: this.fb.control({value: 'actions' as const, disabled: true}),\n visible: this.fb.control(column.visible),\n width: this.fb.control(column.width),\n actions: this.fb.control(column.actions),\n sticky: this.fb.control(column.sticky),\n stickyEnd: this.fb.control(column.stickyEnd),\n }) as ActionsColumnForm;\n default:\n throw new Error(`Unknown column type: ${(column as any).type}`);\n }\n }\n}\n\nexport function injectColumnsForm() {\n return inject(ColumnsFormBuilder).build();\n}\n\nfunction buildColumn(nameOrAction: (string | Actions), i: number, sticky: boolean, stickyEnd: boolean): Column {\n if (typeof nameOrAction === 'string') {\n if (nameOrAction === '__actions') {\n return {\n type: 'actions',\n name: `actions_${i}`,\n visible: true,\n width: 40,\n sticky,\n stickyEnd,\n }\n } else if (nameOrAction === '__checkbox') {\n return {\n type: 'checkbox',\n name: 'checkbox',\n visible: true,\n width: 24,\n sticky,\n stickyEnd,\n }\n } else if (nameOrAction.startsWith('__tree')) {\n return {\n type: 'tree',\n name: nameOrAction.split('__tree_')?.[1] ?? '__tree',\n visible: true,\n width: 240,\n sticky,\n stickyEnd,\n }\n } else {\n return {\n type: 'text',\n name: nameOrAction,\n visible: true,\n width: 100,\n sticky,\n stickyEnd,\n };\n } \n } else {\n return {\n type: 'actions',\n name: `actions_${i}`,\n visible: true,\n width: 40,\n sticky,\n stickyEnd,\n actions: wrapActions(nameOrAction),\n };\n }\n}\n\nexport function buildColumns(columnIdOrActions: (string | Actions)[], {\n stickyStart = 0,\n stickyEnd = 0,\n}: {\n stickyStart?: number,\n stickyEnd?: number,\n} = {}): {ids: string[], map: {[key: string]: Column}} {\n const columns = columnIdOrActions.map((columnIdOrAction, i) => {\n return buildColumn(columnIdOrAction, i, i < stickyStart, i >= columnIdOrActions.length - stickyEnd);\n });\n return {\n ids: columns.map((column) => column.name),\n map: columns.reduce((obj, column) => ({...obj, [column.name]: column}), {}),\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -78,10 +78,14 @@ class JsonSchemaFormUtils {
78
78
  for (const key in schema.properties) {
79
79
  const property = schema.properties[key];
80
80
  const validators = [];
81
- if (schema.required && schema.required.includes(key)) {
81
+ if (schema.required && schema.required.includes(key) && !property.nullable) {
82
82
  validators.push(Validators.required);
83
83
  }
84
84
  group[key] = this.buildFormByJsonSchemaProperty(property, { fb, value: value?.[key], validators });
85
+ // MEMO(@NozomuMiyamoto): Arrayなら追加用のダミーコントロールを追加する
86
+ if (property.type === 'array') {
87
+ group[`${key}__add_action`] = fb.control(property);
88
+ }
85
89
  }
86
90
  return fb.group(group);
87
91
  }
@@ -90,34 +94,37 @@ class JsonSchemaFormUtils {
90
94
  return fb.array([]);
91
95
  }
92
96
  console.debug('[buildFormArrayByJsonSchema] schema:', schema);
93
- const array = fb.array([
97
+ const formArray = fb.array([
94
98
  this.buildFormGroupByJsonSchema(schema.items, { fb }),
95
99
  ]);
96
- return array;
100
+ return formArray;
97
101
  }
98
102
  static buildFormByJsonSchemaProperty(property, { fb = inject(FormBuilder).nonNullable, value = null, validators = [], } = {}) {
99
- if (property.type === 'string') {
100
- if (property.format === 'date-time') {
101
- return fb.control(value ?? property.default ?? null, validators);
102
- }
103
- else if (property.format === 'binary') {
104
- return fb.control(value ?? property.default ?? null, validators);
105
- }
106
- else {
107
- return fb.control(value ?? property.default ?? '', validators);
103
+ switch (property.type) {
104
+ case 'string': switch (property.format) {
105
+ case 'date':
106
+ case 'date-time':
107
+ return fb.control(value ?? property.default ?? null, { nonNullable: !property.nullable, validators });
108
+ case 'binary':
109
+ return fb.control(value ?? property.default ?? null, { nonNullable: !property.nullable, validators });
110
+ case 'email':
111
+ return fb.control(value ?? property.default ?? '', {
112
+ nonNullable: !property.nullable,
113
+ validators: [...validators, Validators.email],
114
+ });
115
+ default:
116
+ return fb.control(value ?? property.default ?? '', { nonNullable: !property.nullable, validators });
108
117
  }
109
- }
110
- else if (property.type === 'integer') {
111
- return fb.control(value ?? property.default ?? 0, validators);
112
- }
113
- else if (property.type === 'number') {
114
- return fb.control(value ?? property.default ?? 0, validators);
115
- }
116
- else if (property.type === 'object') {
117
- return this.buildFormGroupByJsonSchema(property, { fb, value: (value || {}) });
118
- }
119
- else if (property.type === 'array') {
120
- return this.buildFormArrayByJsonSchema(property, { fb, value: (value || []) });
118
+ case 'boolean':
119
+ return fb.control(value ?? property.default ?? false, { nonNullable: !property.nullable, validators });
120
+ case 'integer':
121
+ return fb.control(value ?? property.default ?? 0, { nonNullable: !property.nullable, validators });
122
+ case 'number':
123
+ return fb.control(value ?? property.default ?? 0, { nonNullable: !property.nullable, validators });
124
+ case 'object':
125
+ return this.buildFormGroupByJsonSchema(property, { fb, value });
126
+ case 'array':
127
+ return this.buildFormArrayByJsonSchema(property, { fb, value: value });
121
128
  }
122
129
  }
123
130
  static buildFormByJsonSchema(schema, { fb = inject(FormBuilder).nonNullable, value = {}, fieldMap = {}, } = {}) {
@@ -126,6 +133,28 @@ class JsonSchemaFormUtils {
126
133
  fieldMap: this.buildFormFieldMapByJsonSchema(schema, { merge: fieldMap }),
127
134
  };
128
135
  }
136
+ static buildFormFieldByProperty(property) {
137
+ switch (property.type) {
138
+ case 'string': {
139
+ if (property.enum) {
140
+ return { type: 'select', options: property.enum.map((v) => ({ value: v, name: v })) };
141
+ }
142
+ else if (['date-time', 'date'].includes(property.format)) {
143
+ return { type: 'date' };
144
+ }
145
+ else if (property.format === 'binary') {
146
+ return { type: 'file' };
147
+ }
148
+ else {
149
+ return { type: 'text' };
150
+ }
151
+ }
152
+ case 'boolean': return { type: 'select', options: [{ value: true, name: 'はい' }, { value: false, name: 'いいえ' }] };
153
+ case 'integer': return { type: 'number' };
154
+ case 'number': return { type: 'number' };
155
+ default: return { type: property.type };
156
+ }
157
+ }
129
158
  static buildFormFieldMapByJsonSchema(schema, options = {}) {
130
159
  if (!schema || !schema.properties) {
131
160
  return {
@@ -135,37 +164,26 @@ class JsonSchemaFormUtils {
135
164
  const fieldMap = {};
136
165
  for (const key in schema.properties) {
137
166
  const property = schema.properties[key];
138
- if (property.type === 'string') {
139
- if (property.enum) {
140
- fieldMap[key] = { type: 'select', options: property.enum.map((v) => ({ value: v, name: v })) };
141
- }
142
- else if (property.format === 'date-time') {
143
- fieldMap[key] = { type: 'date' };
144
- }
145
- else if (property.format === 'binary') {
146
- fieldMap[key] = { type: 'file' };
167
+ switch (property.type) {
168
+ case 'object': {
169
+ const childFieldMap = this.buildFormFieldMapByJsonSchema(property, options);
170
+ for (const childKey in childFieldMap) {
171
+ fieldMap[`${key}.${childKey}`] = childFieldMap[childKey];
172
+ }
173
+ break;
147
174
  }
148
- else {
149
- fieldMap[key] = { type: 'text' };
175
+ case 'array': {
176
+ const childFieldMap = this.buildFormFieldMapByJsonSchema(property.items, options);
177
+ for (const childKey in childFieldMap) {
178
+ // TODO: 正規表現でパスマッチを判定できるようにする。
179
+ fieldMap[`${key}.\\d+.${childKey}`] = childFieldMap[childKey];
180
+ }
181
+ break;
150
182
  }
151
- }
152
- else if (property.type === 'object') {
153
- const childFieldMap = this.buildFormFieldMapByJsonSchema(property, options);
154
- for (const childKey in childFieldMap) {
155
- fieldMap[`${key}.${childKey}`] = childFieldMap[childKey];
183
+ default: {
184
+ fieldMap[key] = this.buildFormFieldByProperty(property);
156
185
  }
157
186
  }
158
- else if (property.type === 'array') {
159
- const childFieldMap = this.buildFormFieldMapByJsonSchema(property.items, options);
160
- for (const childKey in childFieldMap) {
161
- // TODO: 正規表現でパスマッチを判定できるようにする。
162
- fieldMap[`${key}.\\d+.${childKey}`] = childFieldMap[childKey];
163
- }
164
- }
165
- else {
166
- fieldMap[key] = { type: property.type };
167
- }
168
- // const type = ? 'date' : property.type;
169
187
  }
170
188
  console.debug('[buildFormFieldMapByJsonSchema] fieldMap:', fieldMap);
171
189
  console.debug('[buildFormFieldMapByJsonSchema] options.merge:', options.merge);
@@ -174,23 +192,23 @@ class JsonSchemaFormUtils {
174
192
  }
175
193
  function buildFormGroup(klass, { fb = inject(FormBuilder).nonNullable, value, }) {
176
194
  const schema = targetConstructorToSchema(klass);
177
- return this.buildFormGroupByJsonSchema(schema, { fb, value });
195
+ return JsonSchemaFormUtils.buildFormGroupByJsonSchema(schema, { fb, value });
178
196
  }
179
197
  function buildFormFieldMap(klass, options) {
180
198
  const schema = targetConstructorToSchema(klass);
181
- const map = this.buildFormFieldMapByJsonSchema(schema, options);
199
+ const map = JsonSchemaFormUtils.buildFormFieldMapByJsonSchema(schema, options);
182
200
  return merge(map, options.merge);
183
201
  }
184
202
  function buildForm(klass, { fb = inject(FormBuilder).nonNullable, value = {}, fieldMap = {}, } = {}) {
185
203
  const schema = targetConstructorToSchema(klass);
186
204
  return {
187
- form: this.buildFormGroupByJsonSchema(schema, { fb, value }),
188
- fieldMap: this.buildFormFieldMapByJsonSchema(schema, { merge: fieldMap }),
205
+ form: JsonSchemaFormUtils.buildFormGroupByJsonSchema(schema, { fb, value }),
206
+ fieldMap: JsonSchemaFormUtils.buildFormFieldMapByJsonSchema(schema, { merge: fieldMap }),
189
207
  };
190
208
  }
191
209
  class JsonSchemaFormService {
192
210
  constructor() {
193
- this.fb = inject(FormBuilder).nonNullable;
211
+ this.fb = inject(FormBuilder);
194
212
  }
195
213
  build(schema, { fb = this.fb, value = {}, } = {}) {
196
214
  return JsonSchemaFormUtils.buildFormGroupByJsonSchema(schema, { fb, value });
@@ -1 +1 @@
1
- {"version":3,"file":"ng-atomic-common-services-form-json-schema.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/form/json-schema/json-schema.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/json-schema/json-schema.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/json-schema/ng-atomic-common-services-form-json-schema.ts"],"sourcesContent":["import { ValidationTypes } from \"class-validator\"\nimport { targetConstructorToSchema as _targetConstructorToSchema } from \"class-validator-jsonschema\"\nimport { IOptions } from \"class-validator-jsonschema/build/options\";\nimport { JSONSchema7 } from 'json-schema';\n// TODO(@NozomuMiyamoto): fix\n// @ts-ignore\n// const { defaultMetadataStorage } = require('class-transformer/cjs/storage');\nimport { defaultMetadataStorage } from 'class-transformer/esm5/storage';\n\nfunction getPropType(target: object, property: string) {\n return Reflect.getMetadata('design:type', target, property)\n}\n\nfunction targetToSchema(\n type: any,\n options: any\n): any {\n if (typeof type === 'function') {\n if (\n type.prototype === String.prototype ||\n type.prototype === Symbol.prototype\n ) {\n return { type: 'string' }\n } else if (type.prototype === Number.prototype) {\n return { type: 'number' }\n } else if (type.prototype === Boolean.prototype) {\n return { type: 'boolean' }\n }\n\n return targetConstructorToSchema(type, options)\n }\n}\n\nconst additionalConverters= {\n [ValidationTypes.NESTED_VALIDATION]: (meta: any, options: any) => {\n if (typeof meta.target === 'function') {\n const typeMeta = options.classTransformerMetadataStorage\n ? options.classTransformerMetadataStorage.findTypeMetadata(\n meta.target,\n meta.propertyName\n )\n : null\n const childType = typeMeta\n ? typeMeta.typeFunction()\n : getPropType(meta.target.prototype, meta.propertyName)\n return targetToSchema(childType, options)\n }\n },\n isDayjs: (meta: any): JSONSchema7 => {\n return {\n type: 'string',\n format: 'date-time', // JSON Schemaで日付型を指定\n };\n },\n};\n\nexport function targetConstructorToSchema(target: Function, options: Partial<IOptions> = {}) {\n return _targetConstructorToSchema(target, {\n ...options,\n additionalConverters,\n classTransformerMetadataStorage: defaultMetadataStorage,\n });\n}\n","import { Injectable, inject } from \"@angular/core\";\nimport { FormBuilder, FormGroup, NonNullableFormBuilder, Validators } from \"@angular/forms\";\nimport { JsonSchema } from \"json-schema-library\";\nimport { targetConstructorToSchema } from './json-schema';\nimport { merge } from \"lodash-es\";\n\nexport class JsonSchemaFormUtils {\n static removeObjectPercent<T extends object>(value: T): any {\n return Object.entries(value).reduce((acc, [key, value]) => {\n if (typeof value === 'string' && value.startsWith('%') && value.endsWith('%')) {\n acc[key] = value.slice(1, -1);\n } else if (typeof value === 'string' && value.startsWith('%')) {\n acc[key] = value.slice(1);\n } else if (typeof value === 'string' && value.endsWith('%')) {\n acc[key] = value.slice(0, -1);\n } else {\n acc[key] = value;\n }\n return acc;\n }, {});\n }\n\n static buildFormGroupByJsonSchema(schema: JsonSchema, {\n fb = inject(FormBuilder).nonNullable,\n value = {},\n }: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: object,\n } = {}): FormGroup {\n console.debug('[buildFormGroupByJsonSchema] schema:', schema);\n if (!schema || !schema?.properties) {\n return fb.group({});\n }\n const group: any = {};\n \n for (const key in schema.properties) {\n const property = schema.properties[key];\n const validators = [];\n \n if (schema.required && schema.required.includes(key)) {\n validators.push(Validators.required);\n }\n group[key] = this.buildFormByJsonSchemaProperty(property, {fb, value: value?.[key], validators});\n }\n return fb.group(group);\n }\n \n static buildFormArrayByJsonSchema(schema: JsonSchema, {\n fb = inject(FormBuilder).nonNullable,\n value = [],\n }: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: any[],\n } = {}): any {\n if (!schema || !schema.items) {\n return fb.array([]);\n }\n console.debug('[buildFormArrayByJsonSchema] schema:', schema);\n const array = fb.array([\n this.buildFormGroupByJsonSchema(schema.items, {fb}),\n ])\n return array;\n }\n \n static buildFormByJsonSchemaProperty(property: JsonSchema, {\n fb = inject(FormBuilder).nonNullable,\n value = null,\n validators = [],\n }: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: object | object[],\n validators?: any[],\n } = {}): any {\n if (property.type === 'string') {\n if (property.format === 'date-time') {\n return fb.control(value ?? property.default ?? null, validators);\n } else if (property.format === 'binary') {\n return fb.control(value ?? property.default ?? null, validators);\n } else {\n return fb.control(value ?? property.default ?? '', validators);\n }\n } else if (property.type === 'integer') {\n return fb.control(value ?? property.default ?? 0, validators);\n } else if (property.type === 'number') {\n return fb.control(value ?? property.default ?? 0, validators);\n } else if (property.type === 'object') {\n return this.buildFormGroupByJsonSchema(property, {fb, value: (value || {}) as object});\n }\n else if (property.type === 'array') {\n return this.buildFormArrayByJsonSchema(property, {fb, value: (value || []) as any[]});\n }\n }\n \n\n static buildFormByJsonSchema(schema: JsonSchema, {\n fb = inject(FormBuilder).nonNullable,\n value = {},\n fieldMap = {},\n }: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: object,\n fieldMap?: object,\n } = {}): any {\n return {\n form: this.buildFormGroupByJsonSchema(schema, {fb, value}),\n fieldMap: this.buildFormFieldMapByJsonSchema(schema, {merge: fieldMap}),\n };\n }\n\n static buildFormFieldMapByJsonSchema(\n schema: JsonSchema,\n options: {\n merge?: { [key: string]: any },\n } = {},\n ): any {\n if (!schema || !schema.properties) {\n return {\n id: { type: 'hidden' },\n };\n }\n const fieldMap: any = {};\n \n for (const key in schema.properties) {\n const property = schema.properties[key];\n if (property.type === 'string') {\n if (property.enum) {\n fieldMap[key] = { type: 'select', options: property.enum.map((v: string) => ({ value: v, name: v })) };\n } else if (property.format === 'date-time') {\n fieldMap[key] = { type: 'date' };\n } else if (property.format === 'binary') {\n fieldMap[key] = { type: 'file' };\n } else {\n fieldMap[key] = { type: 'text' };\n }\n } else if (property.type === 'object') {\n const childFieldMap = this.buildFormFieldMapByJsonSchema(property, options);\n for (const childKey in childFieldMap) {\n fieldMap[`${key}.${childKey}`] = childFieldMap[childKey];\n }\n } else if (property.type === 'array') {\n const childFieldMap = this.buildFormFieldMapByJsonSchema(property.items, options);\n for (const childKey in childFieldMap) {\n // TODO: 正規表現でパスマッチを判定できるようにする。\n fieldMap[`${key}.\\\\d+.${childKey}`] = childFieldMap[childKey];\n }\n } else {\n fieldMap[key] = { type: property.type };\n }\n // const type = ? 'date' : property.type;\n }\n \n console.debug('[buildFormFieldMapByJsonSchema] fieldMap:', fieldMap);\n console.debug('[buildFormFieldMapByJsonSchema] options.merge:', options.merge);\n \n return {...fieldMap, ...options.merge};\n }\n}\n\nexport function buildFormGroup(klass: new() => any, {\n fb = inject(FormBuilder).nonNullable,\n value,\n}: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: object,\n}): FormGroup {\n const schema = targetConstructorToSchema(klass);\n return this.buildFormGroupByJsonSchema(schema, {fb, value});\n}\n\n\nexport function buildFormFieldMap(klass: new() => any, options: {\n merge?: { [key: string]: any },\n}): any {\n const schema = targetConstructorToSchema(klass);\n const map = this.buildFormFieldMapByJsonSchema(schema, options);\n return merge(map, options.merge);\n}\n\nexport function buildForm(klass: new() => any, {\n fb = inject(FormBuilder).nonNullable,\n value = {},\n fieldMap = {},\n}: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: object,\n fieldMap?: object,\n} = {}): any {\n const schema = targetConstructorToSchema(klass);\n return {\n form: this.buildFormGroupByJsonSchema(schema, {fb, value}),\n fieldMap: this.buildFormFieldMapByJsonSchema(schema, {merge: fieldMap}),\n };\n}\n\n\n@Injectable({ providedIn: 'root' })\nexport class JsonSchemaFormService {\n private fb = inject(FormBuilder).nonNullable;\n\n build(schema: JsonSchema, {\n fb = this.fb,\n value = {},\n }: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: object,\n } = {}): FormGroup {\n return JsonSchemaFormUtils.buildFormGroupByJsonSchema(schema, {fb, value});\n }\n\n buildFieldMap(\n schema: JsonSchema,\n options: {\n merge?: { [key: string]: any },\n } = {},\n ): any {\n return JsonSchemaFormUtils.buildFormFieldMapByJsonSchema(schema, options);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_targetConstructorToSchema"],"mappings":";;;;;;;;AASA,SAAS,WAAW,CAAC,MAAc,EAAE,QAAgB,EAAA;IACnD,OAAO,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,cAAc,CACrB,IAAS,EACT,OAAY,EAAA;AAEZ,IAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AAC9B,QAAA,IACE,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;AACnC,YAAA,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,EACnC;AACA,YAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;SAC1B;aAAM,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE;AAC9C,YAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;SAC1B;aAAM,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE;AAC/C,YAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;SAC3B;AAED,QAAA,OAAO,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;KAChD;AACH,CAAC;AAED,MAAM,oBAAoB,GAAE;IAC1B,CAAC,eAAe,CAAC,iBAAiB,GAAG,CAAC,IAAS,EAAE,OAAY,KAAI;AAC/D,QAAA,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;AACrC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,+BAA+B;AACtD,kBAAE,OAAO,CAAC,+BAA+B,CAAC,gBAAgB,CACtD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,YAAY,CAClB;kBACD,IAAI,CAAA;YACR,MAAM,SAAS,GAAG,QAAQ;AACxB,kBAAE,QAAQ,CAAC,YAAY,EAAE;AACzB,kBAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;AACzD,YAAA,OAAO,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;SAC1C;KACF;AACD,IAAA,OAAO,EAAE,CAAC,IAAS,KAAiB;QAClC,OAAO;AACL,YAAA,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,WAAW;SACpB,CAAC;KACH;CACF,CAAC;SAEc,yBAAyB,CAAC,MAAgB,EAAE,UAA6B,EAAE,EAAA;IACzF,OAAOA,2BAA0B,CAAC,MAAM,EAAE;AACxC,QAAA,GAAG,OAAO;QACV,oBAAoB;AACpB,QAAA,+BAA+B,EAAE,sBAAsB;AACxD,KAAA,CAAC,CAAC;AACL;;MCxDa,mBAAmB,CAAA;IAC9B,OAAO,mBAAmB,CAAmB,KAAQ,EAAA;AACnD,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACxD,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC7E,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAC/B;AAAM,iBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBAC7D,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC3B;AAAM,iBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3D,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAC/B;iBAAM;AACL,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aAClB;AACD,YAAA,OAAO,GAAG,CAAC;SACZ,EAAE,EAAE,CAAC,CAAC;KACR;AAED,IAAA,OAAO,0BAA0B,CAAC,MAAkB,EAAE,EACpD,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EACpC,KAAK,GAAG,EAAE,MAIR,EAAE,EAAA;AACJ,QAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE;AAClC,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SACrB;QACD,MAAM,KAAK,GAAQ,EAAE,CAAC;AAEtB,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;YACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,YAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACpD,gBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;aACtC;YACD,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,EAAE,UAAU,EAAC,CAAC,CAAC;SAClG;AACD,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACxB;AAED,IAAA,OAAO,0BAA0B,CAAC,MAAkB,EAAE,EACpD,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EACpC,KAAK,GAAG,EAAE,MAIR,EAAE,EAAA;QACJ,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC5B,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SACrB;AACD,QAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC;AAC9D,QAAA,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,KAAK,EAAE,EAAC,EAAE,EAAC,CAAC;AACpD,SAAA,CAAC,CAAA;AACF,QAAA,OAAO,KAAK,CAAC;KACd;IAED,OAAO,6BAA6B,CAAC,QAAoB,EAAE,EACzD,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EACpC,KAAK,GAAG,IAAI,EACZ,UAAU,GAAG,EAAE,GAAA,GAKb,EAAE,EAAA;AACJ,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC9B,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE;AACnC,gBAAA,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,EAAE,UAAU,CAAC,CAAC;aAClE;AAAM,iBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE;AACvC,gBAAA,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,EAAE,UAAU,CAAC,CAAC;aAClE;iBAAM;AACL,gBAAA,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;aAChE;SACF;AAAM,aAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;AACtC,YAAA,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;SAC/D;AAAM,aAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;AACrC,YAAA,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;SAC/D;AAAM,aAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,KAAK,GAAG,KAAK,IAAI,EAAE,CAAW,EAAC,CAAC,CAAC;SACxF;AACI,aAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,KAAK,GAAG,KAAK,IAAI,EAAE,CAAU,EAAC,CAAC,CAAC;SACvF;KACF;IAGD,OAAO,qBAAqB,CAAC,MAAkB,EAAE,EAC/C,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EACpC,KAAK,GAAG,EAAE,EACV,QAAQ,GAAG,EAAE,GAAA,GAKX,EAAE,EAAA;QACJ,OAAO;AACL,YAAA,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE,KAAK,EAAC,CAAC;AAC1D,YAAA,QAAQ,EAAE,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,QAAQ,EAAC,CAAC;SACxE,CAAC;KACH;AAED,IAAA,OAAO,6BAA6B,CAClC,MAAkB,EAClB,UAEI,EAAE,EAAA;QAEN,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YACjC,OAAO;AACL,gBAAA,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aACvB,CAAC;SACH;QACD,MAAM,QAAQ,GAAQ,EAAE,CAAC;AAEzB,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;YACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACxC,YAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC9B,gBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE;AACjB,oBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAS,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;iBACxG;AAAM,qBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE;oBAC1C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iBAClC;AAAM,qBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE;oBACvC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iBAClC;qBAAM;oBACL,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iBAClC;aACF;AAAM,iBAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACrC,MAAM,aAAa,GAAG,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5E,gBAAA,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE;AACpC,oBAAA,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;iBAC1D;aACF;AAAM,iBAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE;AACpC,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAClF,gBAAA,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE;;AAEpC,oBAAA,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAA,MAAA,EAAS,QAAQ,CAAA,CAAE,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;iBAC/D;aACF;iBAAM;gBACL,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;aACzC;;SAEF;AAED,QAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,QAAQ,CAAC,CAAC;QACrE,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAE/E,OAAO,EAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,EAAC,CAAC;KACxC;AACF,CAAA;SAEe,cAAc,CAAC,KAAmB,EAAE,EAClD,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EACpC,KAAK,GAIN,EAAA;AACC,IAAA,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAChD,IAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE,KAAK,EAAC,CAAC,CAAC;AAC9D,CAAC;AAGe,SAAA,iBAAiB,CAAC,KAAmB,EAAE,OAEtD,EAAA;AACC,IAAA,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAEK,SAAU,SAAS,CAAC,KAAmB,EAAE,EAC7C,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EACpC,KAAK,GAAG,EAAE,EACV,QAAQ,GAAG,EAAE,GAAA,GAKX,EAAE,EAAA;AACJ,IAAA,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO;AACL,QAAA,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE,KAAK,EAAC,CAAC;AAC1D,QAAA,QAAQ,EAAE,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,QAAQ,EAAC,CAAC;KACxE,CAAC;AACJ,CAAC;MAIY,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC;AAoB9C,KAAA;AAlBC,IAAA,KAAK,CAAC,MAAkB,EAAE,EACxB,EAAE,GAAG,IAAI,CAAC,EAAE,EACZ,KAAK,GAAG,EAAE,MAIR,EAAE,EAAA;AACJ,QAAA,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE,KAAK,EAAC,CAAC,CAAC;KAC5E;AAED,IAAA,aAAa,CACX,MAAkB,EAClB,OAAA,GAEI,EAAE,EAAA;QAEN,OAAO,mBAAmB,CAAC,6BAA6B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC3E;8GApBU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACnMlC;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-atomic-common-services-form-json-schema.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/form/json-schema/json-schema.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/json-schema/json-schema.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/json-schema/ng-atomic-common-services-form-json-schema.ts"],"sourcesContent":["import { ValidationTypes } from \"class-validator\"\nimport { targetConstructorToSchema as _targetConstructorToSchema } from \"class-validator-jsonschema\"\nimport { IOptions } from \"class-validator-jsonschema/build/options\";\nimport { JSONSchema7 } from 'json-schema';\n// TODO(@NozomuMiyamoto): fix\n// @ts-ignore\n// const { defaultMetadataStorage } = require('class-transformer/cjs/storage');\nimport { defaultMetadataStorage } from 'class-transformer/esm5/storage';\n\nfunction getPropType(target: object, property: string) {\n return Reflect.getMetadata('design:type', target, property)\n}\n\nfunction targetToSchema(\n type: any,\n options: any\n): any {\n if (typeof type === 'function') {\n if (\n type.prototype === String.prototype ||\n type.prototype === Symbol.prototype\n ) {\n return { type: 'string' }\n } else if (type.prototype === Number.prototype) {\n return { type: 'number' }\n } else if (type.prototype === Boolean.prototype) {\n return { type: 'boolean' }\n }\n\n return targetConstructorToSchema(type, options)\n }\n}\n\nconst additionalConverters= {\n [ValidationTypes.NESTED_VALIDATION]: (meta: any, options: any) => {\n if (typeof meta.target === 'function') {\n const typeMeta = options.classTransformerMetadataStorage\n ? options.classTransformerMetadataStorage.findTypeMetadata(\n meta.target,\n meta.propertyName\n )\n : null\n const childType = typeMeta\n ? typeMeta.typeFunction()\n : getPropType(meta.target.prototype, meta.propertyName)\n return targetToSchema(childType, options)\n }\n },\n isDayjs: (meta: any): JSONSchema7 => {\n return {\n type: 'string',\n format: 'date-time', // JSON Schemaで日付型を指定\n };\n },\n};\n\nexport function targetConstructorToSchema(target: Function, options: Partial<IOptions> = {}) {\n return _targetConstructorToSchema(target, {\n ...options,\n additionalConverters,\n classTransformerMetadataStorage: defaultMetadataStorage,\n });\n}\n","import { Injectable, inject } from \"@angular/core\";\nimport { FormBuilder, FormGroup, NonNullableFormBuilder, Validators } from \"@angular/forms\";\nimport { JsonSchema } from \"json-schema-library\";\nimport { targetConstructorToSchema } from './json-schema';\nimport { merge } from \"lodash-es\";\nimport { FormFieldMap } from \"@ng-atomic/common/pipes/smart-field\";\n\nexport class JsonSchemaFormUtils {\n static removeObjectPercent<T extends object>(value: T): any {\n return Object.entries(value).reduce((acc, [key, value]) => {\n if (typeof value === 'string' && value.startsWith('%') && value.endsWith('%')) {\n acc[key] = value.slice(1, -1);\n } else if (typeof value === 'string' && value.startsWith('%')) {\n acc[key] = value.slice(1);\n } else if (typeof value === 'string' && value.endsWith('%')) {\n acc[key] = value.slice(0, -1);\n } else {\n acc[key] = value;\n }\n return acc;\n }, {});\n }\n\n static buildFormGroupByJsonSchema(schema: JsonSchema, {\n fb = inject(FormBuilder).nonNullable,\n value = {},\n }: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: object,\n } = {}): FormGroup {\n console.debug('[buildFormGroupByJsonSchema] schema:', schema);\n if (!schema || !schema?.properties) {\n return fb.group({});\n }\n const group: any = {};\n \n for (const key in schema.properties) {\n const property = schema.properties[key];\n const validators = [];\n \n if (schema.required && schema.required.includes(key) && !property.nullable) {\n validators.push(Validators.required);\n }\n group[key] = this.buildFormByJsonSchemaProperty(property, {fb, value: value?.[key], validators});\n // MEMO(@NozomuMiyamoto): Arrayなら追加用のダミーコントロールを追加する\n if (property.type === 'array') {\n group[`${key}__add_action`] = fb.control(property);\n }\n }\n return fb.group(group);\n }\n \n static buildFormArrayByJsonSchema(schema: JsonSchema, {\n fb = inject(FormBuilder).nonNullable,\n value = [],\n }: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: any[],\n } = {}): any {\n if (!schema || !schema.items) {\n return fb.array([]);\n }\n console.debug('[buildFormArrayByJsonSchema] schema:', schema);\n const formArray = fb.array([\n this.buildFormGroupByJsonSchema(schema.items, {fb}),\n ]);\n return formArray;\n }\n \n static buildFormByJsonSchemaProperty(property: JsonSchema, {\n fb = inject(FormBuilder).nonNullable,\n value = null,\n validators = [],\n }: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: object | object[],\n validators?: any[],\n } = {}): any {\n switch (property.type) {\n case 'string': switch (property.format) {\n case 'date':\n case 'date-time':\n return fb.control(value ?? property.default ?? null, { nonNullable: !property.nullable, validators });\n case 'binary':\n return fb.control(value ?? property.default ?? null, { nonNullable: !property.nullable, validators });\n case 'email':\n return fb.control(value ?? property.default ?? '', {\n nonNullable: !property.nullable,\n validators: [...validators, Validators.email],\n });\n default:\n return fb.control(value ?? property.default ?? '', { nonNullable: !property.nullable, validators });\n }\n case 'boolean':\n return fb.control(value ?? property.default ?? false, {nonNullable: !property.nullable, validators});\n case 'integer':\n return fb.control(value ?? property.default ?? 0, {nonNullable: !property.nullable, validators});\n case 'number':\n return fb.control(value ?? property.default ?? 0, {nonNullable: !property.nullable, validators});\n case 'object':\n return this.buildFormGroupByJsonSchema(property, {fb, value});\n case 'array':\n return this.buildFormArrayByJsonSchema(property, {fb, value: value as any[]});\n }\n }\n \n\n static buildFormByJsonSchema(schema: JsonSchema, {\n fb = inject(FormBuilder).nonNullable,\n value = {},\n fieldMap = {},\n }: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: object,\n fieldMap?: object,\n } = {}): any {\n return {\n form: this.buildFormGroupByJsonSchema(schema, {fb, value}),\n fieldMap: this.buildFormFieldMapByJsonSchema(schema, {merge: fieldMap}),\n };\n }\n\n static buildFormFieldByProperty(property: JsonSchema['properties']) {\n switch (property.type) {\n case 'string': {\n if (property.enum) {\n return { type: 'select', options: property.enum.map((v: string) => ({ value: v, name: v })) };\n } else if (['date-time', 'date'].includes(property.format)) {\n return { type: 'date' };\n } else if (property.format === 'binary') {\n return { type: 'file' };\n } else {\n return { type: 'text' };\n }\n }\n case 'boolean': return { type: 'select', options: [{ value: true, name: 'はい' }, { value: false, name: 'いいえ' }] };\n case 'integer': return { type: 'number' };\n case 'number': return { type: 'number' };\n default: return { type: property.type };\n }\n }\n\n static buildFormFieldMapByJsonSchema(\n schema: JsonSchema,\n options: {\n merge?: { [key: string]: any },\n } = {},\n ): any {\n if (!schema || !schema.properties) {\n return {\n id: { type: 'hidden' },\n };\n }\n const fieldMap: any = {};\n \n for (const key in schema.properties) {\n const property = schema.properties[key];\n switch (property.type) {\n case 'object': {\n const childFieldMap = this.buildFormFieldMapByJsonSchema(property, options);\n for (const childKey in childFieldMap) {\n fieldMap[`${key}.${childKey}`] = childFieldMap[childKey];\n }\n break;\n }\n case 'array': {\n const childFieldMap = this.buildFormFieldMapByJsonSchema(property.items, options);\n for (const childKey in childFieldMap) {\n // TODO: 正規表現でパスマッチを判定できるようにする。\n fieldMap[`${key}.\\\\d+.${childKey}`] = childFieldMap[childKey];\n }\n break;\n }\n default: {\n fieldMap[key] = this.buildFormFieldByProperty(property);\n }\n }\n }\n \n console.debug('[buildFormFieldMapByJsonSchema] fieldMap:', fieldMap);\n console.debug('[buildFormFieldMapByJsonSchema] options.merge:', options.merge);\n \n return {...fieldMap, ...options.merge};\n }\n}\n\nexport function buildFormGroup(klass: new() => any, {\n fb = inject(FormBuilder).nonNullable,\n value,\n}: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: object,\n}): FormGroup {\n const schema = targetConstructorToSchema(klass);\n return JsonSchemaFormUtils.buildFormGroupByJsonSchema(schema, {fb, value});\n}\n\n\nexport function buildFormFieldMap(klass: new() => any, options: {\n merge?: { [key: string]: any },\n}): any {\n const schema = targetConstructorToSchema(klass);\n const map = JsonSchemaFormUtils.buildFormFieldMapByJsonSchema(schema, options);\n return merge(map, options.merge);\n}\n\nexport function buildForm(klass: new() => any, {\n fb = inject(FormBuilder).nonNullable,\n value = {},\n fieldMap = {},\n}: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: object,\n fieldMap?: FormFieldMap,\n} = {}): any {\n const schema = targetConstructorToSchema(klass);\n return {\n form: JsonSchemaFormUtils.buildFormGroupByJsonSchema(schema, {fb, value}),\n fieldMap: JsonSchemaFormUtils.buildFormFieldMapByJsonSchema(schema, {merge: fieldMap}),\n };\n}\n\n\n@Injectable({ providedIn: 'root' })\nexport class JsonSchemaFormService {\n private fb = inject(FormBuilder);\n\n build(schema: JsonSchema, {\n fb = this.fb,\n value = {},\n }: {\n fb?: FormBuilder | NonNullableFormBuilder,\n value?: object,\n } = {}): FormGroup {\n return JsonSchemaFormUtils.buildFormGroupByJsonSchema(schema, {fb, value});\n }\n\n buildFieldMap(\n schema: JsonSchema,\n options: {\n merge?: { [key: string]: any },\n } = {},\n ): any {\n return JsonSchemaFormUtils.buildFormFieldMapByJsonSchema(schema, options);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_targetConstructorToSchema"],"mappings":"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"}
@@ -6,10 +6,10 @@ class PaginationService {
6
6
  constructor() {
7
7
  this.fb = inject(FormBuilder);
8
8
  }
9
- build({ pageSize = 50, pageIndex = 0, length = 0, } = {}) {
9
+ build({ size = 50, index = 0, length = 0, } = {}) {
10
10
  return this.fb.group({
11
- pageSize: [pageSize],
12
- pageIndex: [pageIndex],
11
+ size: [size],
12
+ index: [index],
13
13
  length: [length],
14
14
  });
15
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ng-atomic-common-services-form-pagination.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/form/pagination/pagination.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/pagination/ng-atomic-common-services-form-pagination.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\n\nexport interface PaginationFormValue {\n pageSize: number,\n pageIndex: number,\n length: number,\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PaginationService {\n private fb = inject(FormBuilder);\n\n build({\n pageSize = 50,\n pageIndex = 0,\n length = 0,\n }: Partial<PaginationFormValue> = {}) {\n return this.fb.group({\n pageSize: [pageSize],\n pageIndex: [pageIndex],\n length: [length],\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAYa,iBAAiB,CAAA;AAH9B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAalC,KAAA;AAXC,IAAA,KAAK,CAAC,EACJ,QAAQ,GAAG,EAAE,EACb,SAAS,GAAG,CAAC,EACb,MAAM,GAAG,CAAC,MACsB,EAAE,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACnB,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,SAAS,EAAE,CAAC,SAAS,CAAC;YACtB,MAAM,EAAE,CAAC,MAAM,CAAC;AACjB,SAAA,CAAC,CAAC;KACJ;8GAbU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACXD;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-atomic-common-services-form-pagination.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/form/pagination/pagination.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/pagination/ng-atomic-common-services-form-pagination.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\n\nexport interface PaginationFormValue {\n size: number,\n index: number,\n length: number,\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PaginationService {\n private fb = inject(FormBuilder);\n\n build({\n size = 50,\n index = 0,\n length = 0,\n }: Partial<PaginationFormValue> = {}) {\n return this.fb.group({\n size: [size],\n index: [index],\n length: [length],\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAYa,iBAAiB,CAAA;AAH9B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AAajC;AAXC,IAAA,KAAK,CAAC,EACJ,IAAI,GAAG,EAAE,EACT,KAAK,GAAG,CAAC,EACT,MAAM,GAAG,CAAC,MACsB,EAAE,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACnB,IAAI,EAAE,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,CAAC,KAAK,CAAC;YACd,MAAM,EAAE,CAAC,MAAM,CAAC;AACjB,SAAA,CAAC;;8GAZO,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA,CAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACXD;;AAEG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ng-atomic-common-services-form-sort.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/form/sort/sort.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/sort/ng-atomic-common-services-form-sort.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nexport interface SortFormValue {\n key?: string,\n order?: 'asc' | 'desc',\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SortService {\n\n constructor(private fb: FormBuilder) { }\n\n build({key= null, order = 'asc'}: Partial<SortFormValue> = {}) {\n return this.fb.group({\n key: [key],\n order: [order as 'asc' | 'desc'],\n });\n }\n\n toggle(form: ReturnType<typeof this.build>, name: string) {\n if (form.get('key').value === name) {\n form.get('order').setValue(form.get('order').value === 'asc' ? 'desc' : 'asc');\n } else {\n form.get('order').setValue('asc');\n form.get('key').setValue(name);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAWa,WAAW,CAAA;AAEtB,IAAA,WAAA,CAAoB,EAAe,EAAA;QAAf,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;KAAK;IAExC,KAAK,CAAC,EAAC,GAAG,GAAE,IAAI,EAAE,KAAK,GAAG,KAAK,EAAA,GAA4B,EAAE,EAAA;AAC3D,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACnB,GAAG,EAAE,CAAC,GAAG,CAAC;YACV,KAAK,EAAE,CAAC,KAAuB,CAAC;AACjC,SAAA,CAAC,CAAC;KACJ;IAED,MAAM,CAAC,IAAmC,EAAE,IAAY,EAAA;QACtD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE;YAClC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;SAChF;aAAM;YACL,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SAChC;KACF;8GAlBU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACVD;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-atomic-common-services-form-sort.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/form/sort/sort.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/sort/ng-atomic-common-services-form-sort.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nexport interface SortFormValue {\n key?: string,\n order?: 'asc' | 'desc',\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SortService {\n\n constructor(private fb: FormBuilder) { }\n\n build({key= null, order = 'asc'}: Partial<SortFormValue> = {}) {\n return this.fb.group({\n key: [key],\n order: [order as 'asc' | 'desc'],\n });\n }\n\n toggle(form: ReturnType<typeof this.build>, name: string) {\n if (form.get('key').value === name) {\n form.get('order').setValue(form.get('order').value === 'asc' ? 'desc' : 'asc');\n } else {\n form.get('order').setValue('asc');\n form.get('key').setValue(name);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAWa,WAAW,CAAA;AAEtB,IAAA,WAAA,CAAoB,EAAe,EAAA;QAAf,IAAE,CAAA,EAAA,GAAF,EAAE;;IAEtB,KAAK,CAAC,EAAC,GAAG,GAAE,IAAI,EAAE,KAAK,GAAG,KAAK,EAAA,GAA4B,EAAE,EAAA;AAC3D,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACnB,GAAG,EAAE,CAAC,GAAG,CAAC;YACV,KAAK,EAAE,CAAC,KAAuB,CAAC;AACjC,SAAA,CAAC;;IAGJ,MAAM,CAAC,IAAmC,EAAE,IAAY,EAAA;QACtD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE;YAClC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;;aACzE;YACL,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;;;8GAhBvB,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA;;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACVD;;AAEG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ng-atomic-common-services-form.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/form/form.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/ng-atomic-common-services-form.ts"],"sourcesContent":["import { toObject, isIsoString } from '@ng-atomic/common/utils';\nimport dayjs from 'dayjs';\nimport { unflatten, flatten } from 'flat';\nimport { omit, pick } from 'lodash-es';\n\nconst isNumeric = (v: string): boolean => !isNaN(Number(v));\n\nconst parseQueryString = (v: string, key: string): any => key.match(/id$/i) \n ? v\n : typeof v === 'string' && isIsoString(v) \n ? dayjs(v) \n : v === ''\n ? v\n : isNumeric(v)\n ? Number(v)\n : v;\n\nexport class BaseFormService {\n static fromQueryParams<T>(obj: T): object {\n return Object.entries((unflatten(obj) as any)?.form ?? {}).reduce((m, [k, v]: [string, string]) => ({\n ...m, [k]: parseQueryString(v, k),\n }), {});\n }\n\n static toQueryParams<T>(obj: object): T { \n return flatten({form: Object.entries(obj).reduce((m, [k, v]) => ({\n ...m, [k]: dayjs.isDayjs(v) ? v.isValid() ? v.toISOString() : null : v,\n }), {})});\n }\n\n static dayjsKeys(object: object): string[] {\n return Object.entries(object).filter(([_, v]) => dayjs.isDayjs(v)).map(([k]) => k);\n }\n\n static toValue(object: object): object {\n const keys = this.dayjsKeys(object);\n return {...flatten(omit(toObject(object), keys)), ...pick(toObject(object), keys)};\n }\n\n static fromValue(value: object): object {\n const keys = this.dayjsKeys(value);\n return {...unflatten(omit(value, keys)), ...pick(value, keys)};\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAKA,MAAM,SAAS,GAAG,CAAC,CAAS,KAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5D,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAE,GAAW,KAAU,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;AACzE,MAAE,CAAC;MACD,OAAO,CAAC,KAAK,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC;AACzC,UAAE,KAAK,CAAC,CAAC,CAAC;UACR,CAAC,KAAK,EAAE;AACV,cAAE,CAAC;AACH,cAAE,SAAS,CAAC,CAAC,CAAC;AACd,kBAAE,MAAM,CAAC,CAAC,CAAC;kBACT,CAAC,CAAC;MAEO,eAAe,CAAA;IAC1B,OAAO,eAAe,CAAI,GAAM,EAAA;QAC9B,OAAO,MAAM,CAAC,OAAO,CAAE,SAAS,CAAC,GAAG,CAAS,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAmB,MAAM;YAClG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;SAClC,CAAC,EAAE,EAAE,CAAC,CAAC;KACT;IAED,OAAO,aAAa,CAAI,GAAW,EAAA;QACjC,OAAO,OAAO,CAAC,EAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM;AAC/D,gBAAA,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,GAAG,CAAC;AACvE,aAAA,CAAC,EAAE,EAAE,CAAC,EAAC,CAAC,CAAC;KACX;IAED,OAAO,SAAS,CAAC,MAAc,EAAA;AAC7B,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;KACpF;IAED,OAAO,OAAO,CAAC,MAAc,EAAA;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,EAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAC,CAAC;KACpF;IAED,OAAO,SAAS,CAAC,KAAa,EAAA;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,EAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAC,CAAC;KAChE;AACF;;AC3CD;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-atomic-common-services-form.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/form/form.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/form/ng-atomic-common-services-form.ts"],"sourcesContent":["import { toObject, isIsoString } from '@ng-atomic/common/utils';\nimport dayjs from 'dayjs';\nimport { unflatten, flatten } from 'flat';\nimport { omit, pick } from 'lodash-es';\n\nconst isNumeric = (v: string): boolean => !isNaN(Number(v));\n\nconst parseQueryString = (v: string, key: string): any => key.match(/id$/i) \n ? v\n : typeof v === 'string' && isIsoString(v) \n ? dayjs(v) \n : v === ''\n ? v\n : isNumeric(v)\n ? Number(v)\n : v;\n\nexport class BaseFormService {\n static fromQueryParams<T>(obj: T): object {\n return Object.entries((unflatten(obj) as any)?.form ?? {}).reduce((m, [k, v]: [string, string]) => ({\n ...m, [k]: parseQueryString(v, k),\n }), {});\n }\n\n static toQueryParams<T>(obj: object): T { \n return flatten({form: Object.entries(obj).reduce((m, [k, v]) => ({\n ...m, [k]: dayjs.isDayjs(v) ? v.isValid() ? v.toISOString() : null : v,\n }), {})});\n }\n\n static dayjsKeys(object: object): string[] {\n return Object.entries(object).filter(([_, v]) => dayjs.isDayjs(v)).map(([k]) => k);\n }\n\n static toValue(object: object): object {\n const keys = this.dayjsKeys(object);\n return {...flatten(omit(toObject(object), keys)), ...pick(toObject(object), keys)};\n }\n\n static fromValue(value: object): object {\n const keys = this.dayjsKeys(value);\n return {...unflatten(omit(value, keys)), ...pick(value, keys)};\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAKA,MAAM,SAAS,GAAG,CAAC,CAAS,KAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAE3D,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAE,GAAW,KAAU,GAAG,CAAC,KAAK,CAAC,MAAM;AACxE,MAAE;MACA,OAAO,CAAC,KAAK,QAAQ,IAAI,WAAW,CAAC,CAAC;AACxC,UAAE,KAAK,CAAC,CAAC;UACP,CAAC,KAAK;AACR,cAAE;AACF,cAAE,SAAS,CAAC,CAAC;AACb,kBAAE,MAAM,CAAC,CAAC;kBACR,CAAC;MAEQ,eAAe,CAAA;IAC1B,OAAO,eAAe,CAAI,GAAM,EAAA;QAC9B,OAAO,MAAM,CAAC,OAAO,CAAE,SAAS,CAAC,GAAG,CAAS,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAmB,MAAM;YAClG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;SAClC,CAAC,EAAE,EAAE,CAAC;;IAGT,OAAO,aAAa,CAAI,GAAW,EAAA;QACjC,OAAO,OAAO,CAAC,EAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM;AAC/D,gBAAA,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,GAAG,CAAC;AACvE,aAAA,CAAC,EAAE,EAAE,CAAC,EAAC,CAAC;;IAGX,OAAO,SAAS,CAAC,MAAc,EAAA;AAC7B,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;;IAGpF,OAAO,OAAO,CAAC,MAAc,EAAA;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACnC,OAAO,EAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAC;;IAGpF,OAAO,SAAS,CAAC,KAAa,EAAA;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAClC,OAAO,EAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAC;;AAEjE;;AC3CD;;AAEG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ng-atomic-common-services-initializer.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/initializer/initializer.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/initializer/ng-atomic-common-services-initializer.ts"],"sourcesContent":["import { Injectable, Injector, inject, runInInjectionContext } from '@angular/core';\nimport { InjectionToken } from \"@angular/core\";\n\ntype StoreInitializer<S> = (store: S) => Promise<void> | void;\n\ninterface StoreInitializerEntry<S> {\n key: { new(): S };\n initializer: StoreInitializer<S>;\n}\n\nconst STORE_INITIALIZER = new InjectionToken<StoreInitializer<any>>('[@ng-atomic/common/pages/form] StoreInitializer');\n\nfunction provideStoreInitializer<S>(key: {new(): S}, initializer: StoreInitializer<S>) {\n return [\n { provide: STORE_INITIALIZER, useValue: { key, initializer}, multi: true },\n ];\n}\n\nfunction injectInitializerEntries<S>(): StoreInitializerEntry<S>[] {\n return inject<StoreInitializerEntry<S>[]>(STORE_INITIALIZER, {optional: true}) ?? [];\n}\n\nfunction injectStoreInitializers<S>(key: {new(): S}): StoreInitializer<S>[] {\n const entries = injectInitializerEntries<S>();\n return entries.filter(entry => entry.key === key).map(entry => entry.initializer);\n}\n\nexport function makeInitializerConfig<S>(klass: {new(): S}) {\n return {\n provide<SI extends StoreInitializer<S>>(initializer: SI) {\n return provideStoreInitializer(klass, initializer);\n },\n inject(): StoreInitializer<S>[] {\n return injectStoreInitializers(klass);\n },\n async initializeStore(store: S) {\n const injector = inject(Injector);\n const initializers = injectStoreInitializers(klass);\n for (const initializer of initializers) {\n await runInInjectionContext(injector, () => initializer(store));\n }\n },\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InitializerService {\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAUA,MAAM,iBAAiB,GAAG,IAAI,cAAc,CAAwB,iDAAiD,CAAC,CAAC;AAEvH,SAAS,uBAAuB,CAAI,GAAe,EAAE,WAAgC,EAAA;IACnF,OAAO;AACL,QAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,WAAW,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE;KAC3E,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,GAAA;AAC/B,IAAA,OAAO,MAAM,CAA6B,iBAAiB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,IAAI,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,uBAAuB,CAAI,GAAe,EAAA;AACjD,IAAA,MAAM,OAAO,GAAG,wBAAwB,EAAK,CAAC;IAC9C,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;AACpF,CAAC;AAEK,SAAU,qBAAqB,CAAI,KAAiB,EAAA;IACxD,OAAO;AACL,QAAA,OAAO,CAAiC,WAAe,EAAA;AACrD,YAAA,OAAO,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;SACpD;QACD,MAAM,GAAA;AACJ,YAAA,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC;SACvC;QACD,MAAM,eAAe,CAAC,KAAQ,EAAA;AAC5B,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAClC,YAAA,MAAM,YAAY,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;AACpD,YAAA,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;AACtC,gBAAA,MAAM,qBAAqB,CAAC,QAAQ,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;aACjE;SACF;KACF,CAAA;AACH,CAAC;MAKY,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;AC/CD;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-atomic-common-services-initializer.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/initializer/initializer.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/initializer/ng-atomic-common-services-initializer.ts"],"sourcesContent":["import { Injectable, Injector, inject, runInInjectionContext } from '@angular/core';\nimport { InjectionToken } from \"@angular/core\";\n\ntype StoreInitializer<S> = (store: S) => Promise<void> | void;\n\ninterface StoreInitializerEntry<S> {\n key: { new(): S };\n initializer: StoreInitializer<S>;\n}\n\nconst STORE_INITIALIZER = new InjectionToken<StoreInitializer<any>>('[@ng-atomic/common/pages/form] StoreInitializer');\n\nfunction provideStoreInitializer<S>(key: {new(): S}, initializer: StoreInitializer<S>) {\n return [\n { provide: STORE_INITIALIZER, useValue: { key, initializer}, multi: true },\n ];\n}\n\nfunction injectInitializerEntries<S>(): StoreInitializerEntry<S>[] {\n return inject<StoreInitializerEntry<S>[]>(STORE_INITIALIZER, {optional: true}) ?? [];\n}\n\nfunction injectStoreInitializers<S>(key: {new(): S}): StoreInitializer<S>[] {\n const entries = injectInitializerEntries<S>();\n return entries.filter(entry => entry.key === key).map(entry => entry.initializer);\n}\n\nexport function makeInitializerConfig<S>(klass: {new(): S}) {\n return {\n provide<SI extends StoreInitializer<S>>(initializer: SI) {\n return provideStoreInitializer(klass, initializer);\n },\n inject(): StoreInitializer<S>[] {\n return injectStoreInitializers(klass);\n },\n async initializeStore(store: S) {\n const injector = inject(Injector);\n const initializers = injectStoreInitializers(klass);\n for (const initializer of initializers) {\n await runInInjectionContext(injector, () => initializer(store));\n }\n },\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InitializerService {\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAUA,MAAM,iBAAiB,GAAG,IAAI,cAAc,CAAwB,iDAAiD,CAAC;AAEtH,SAAS,uBAAuB,CAAI,GAAe,EAAE,WAAgC,EAAA;IACnF,OAAO;AACL,QAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,WAAW,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE;KAC3E;AACH;AAEA,SAAS,wBAAwB,GAAA;AAC/B,IAAA,OAAO,MAAM,CAA6B,iBAAiB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,IAAI,EAAE;AACtF;AAEA,SAAS,uBAAuB,CAAI,GAAe,EAAA;AACjD,IAAA,MAAM,OAAO,GAAG,wBAAwB,EAAK;IAC7C,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC;AACnF;AAEM,SAAU,qBAAqB,CAAI,KAAiB,EAAA;IACxD,OAAO;AACL,QAAA,OAAO,CAAiC,WAAe,EAAA;AACrD,YAAA,OAAO,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC;SACnD;QACD,MAAM,GAAA;AACJ,YAAA,OAAO,uBAAuB,CAAC,KAAK,CAAC;SACtC;QACD,MAAM,eAAe,CAAC,KAAQ,EAAA;AAC5B,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,YAAA,MAAM,YAAY,GAAG,uBAAuB,CAAC,KAAK,CAAC;AACnD,YAAA,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;AACtC,gBAAA,MAAM,qBAAqB,CAAC,QAAQ,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;;SAElE;KACF;AACH;MAKa,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC/CD;;AAEG;;;;"}
@@ -0,0 +1,46 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, inject, Injectable } from '@angular/core';
3
+ import { has, get } from 'lodash-es';
4
+
5
+ const DOMAIN_LANG_MAP = new InjectionToken('domain lang map');
6
+ class LanguageService {
7
+ constructor() {
8
+ this.map = inject(DOMAIN_LANG_MAP, { optional: true }) ?? {};
9
+ this.regexResolvers = Object.entries(this.map).map(([regexKey, value]) => {
10
+ const regexIndicators = /[.*+?^${}()|[\]\\]/;
11
+ if (regexIndicators.test(regexKey)) {
12
+ return (key) => {
13
+ const regex = new RegExp(regexKey);
14
+ return regex.test(key) ? value : null;
15
+ };
16
+ }
17
+ return () => null;
18
+ });
19
+ }
20
+ translate(text, src, dest, context) {
21
+ return text;
22
+ }
23
+ transform(input, map = this.map) {
24
+ if (has(map, input))
25
+ return get(map, input);
26
+ for (const resolver of this.regexResolvers) {
27
+ const result = resolver(input);
28
+ if (result)
29
+ return result;
30
+ }
31
+ return map[input] ?? input;
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: LanguageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
34
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: LanguageService, providedIn: 'any' }); }
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: LanguageService, decorators: [{
37
+ type: Injectable,
38
+ args: [{ providedIn: 'any' }]
39
+ }] });
40
+
41
+ /**
42
+ * Generated bundle index. Do not edit.
43
+ */
44
+
45
+ export { DOMAIN_LANG_MAP, LanguageService };
46
+ //# sourceMappingURL=ng-atomic-common-services-language.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ng-atomic-common-services-language.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/language/language.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/language/ng-atomic-common-services-language.ts"],"sourcesContent":["import { InjectionToken, inject, Injectable } from '@angular/core';\nimport { get, has } from 'lodash-es';\n\nexport type DomainLangMap = Record<string, string>;\nexport const DOMAIN_LANG_MAP = new InjectionToken<DomainLangMap>('domain lang map');\n\n@Injectable({ providedIn: 'any' })\nexport class LanguageService {\n protected map = inject(DOMAIN_LANG_MAP, {optional: true}) ?? {};\n protected regexResolvers = Object.entries(this.map).map(([regexKey, value]) => {\n const regexIndicators = /[.*+?^${}()|[\\]\\\\]/;\n if (regexIndicators.test(regexKey)) {\n return (key: string) => {\n const regex = new RegExp(regexKey);\n return regex.test(key) ? value : null;\n }\n }\n return () => null;\n });\n\n translate(text: string, src: string, dest: string, context?: any): string {\n return text;\n }\n\n transform(input: string, map: DomainLangMap = this.map): string {\n if (has(map, input)) return get(map, input);\n for (const resolver of this.regexResolvers) {\n const result = resolver(input);\n if (result) return result;\n }\n return map[input] ?? input;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAIa,eAAe,GAAG,IAAI,cAAc,CAAgB,iBAAiB;MAGrE,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,eAAe,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,IAAI,EAAE;AACrD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAI;YAC5E,MAAM,eAAe,GAAG,oBAAoB;AAC5C,YAAA,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAClC,OAAO,CAAC,GAAW,KAAI;AACrB,oBAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;AAClC,oBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI;AACvC,iBAAC;;AAEH,YAAA,OAAO,MAAM,IAAI;AACnB,SAAC,CAAC;AAcH;AAZC,IAAA,SAAS,CAAC,IAAY,EAAE,GAAW,EAAE,IAAY,EAAE,OAAa,EAAA;AAC9D,QAAA,OAAO,IAAI;;AAGb,IAAA,SAAS,CAAC,KAAa,EAAE,GAAqB,GAAA,IAAI,CAAC,GAAG,EAAA;AACpD,QAAA,IAAI,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AAAE,YAAA,OAAO,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AAC3C,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AAC1C,YAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC9B,YAAA,IAAI,MAAM;AAAE,gBAAA,OAAO,MAAM;;AAE3B,QAAA,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK;;8GAvBjB,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,KAAK,EAAA,CAAA,CAAA;;2FAClB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,KAAK,EAAE;;;ACNjC;;AAEG;;;;"}