@pega/custom-dx-components 0.0.1 → 0.23.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 (223) hide show
  1. package/.vscode/extensions.json +1 -1
  2. package/README.md +6 -189
  3. package/package.json +34 -32
  4. package/src/auth.js +608 -0
  5. package/src/cli.js +42 -0
  6. package/src/constants.js +122 -8
  7. package/src/tasks/authenticate/helper.js +91 -8
  8. package/src/tasks/authenticate/index.js +169 -49
  9. package/src/tasks/build/helper.js +122 -0
  10. package/src/tasks/build/index.js +54 -0
  11. package/src/tasks/build-all/helper.js +70 -0
  12. package/src/tasks/build-all/index.js +79 -0
  13. package/src/tasks/{publish/bundle → bundle}/builder/index.js +49 -5
  14. package/src/tasks/{publish/bundle → bundle}/builder/webpack.config.js +5 -3
  15. package/src/tasks/{publish/bundle → bundle}/index.js +2 -2
  16. package/src/tasks/create/index.js +87 -64
  17. package/src/tasks/create/templates/Constellation/Field/Boolean/Boolean.js.mustache +38 -0
  18. package/src/tasks/create/templates/Constellation/Field/Boolean/boolean-format.js.mustache +26 -0
  19. package/src/tasks/create/templates/Constellation/Field/Boolean/config.json.mustache +145 -0
  20. package/src/tasks/create/templates/Constellation/Field/Boolean/demo.stories.jsx.mustache +61 -0
  21. package/src/tasks/create/templates/Constellation/Field/Boolean/event-utils.js.mustache +18 -0
  22. package/src/tasks/create/templates/Constellation/Field/Boolean/index.jsx.mustache +170 -0
  23. package/src/tasks/create/templates/Constellation/Field/Boolean/mock.stories.js.mustache +21 -0
  24. package/src/tasks/create/templates/Constellation/Field/Boolean/styles.js.mustache +7 -0
  25. package/src/tasks/create/templates/Constellation/Field/Date/DateFormatter.js.mustache +61 -0
  26. package/src/tasks/create/templates/Constellation/Field/Date/FormattedText.jsx.mustache +41 -0
  27. package/src/tasks/create/templates/Constellation/Field/Date/config.json.mustache +195 -0
  28. package/src/tasks/create/templates/Constellation/Field/Date/date.js.mustache +439 -0
  29. package/src/tasks/create/templates/Constellation/Field/Date/demo.stories.jsx.mustache +73 -0
  30. package/src/tasks/create/templates/Constellation/Field/Date/index.jsx.mustache +256 -0
  31. package/src/tasks/create/templates/Constellation/Field/Date/mock.stories.js.mustache +23 -0
  32. package/src/tasks/create/templates/Constellation/Field/Date/styles.js.mustache +7 -0
  33. package/src/tasks/create/templates/Constellation/Field/Date/suggestions-handler.js +10 -0
  34. package/src/tasks/create/templates/Constellation/Field/DateTime/config.json.mustache +256 -0
  35. package/src/tasks/create/templates/Constellation/Field/DateTime/date-time.js.mustache +92 -0
  36. package/src/tasks/create/templates/Constellation/Field/DateTime/date-utils.js.mustache +287 -0
  37. package/src/tasks/create/templates/Constellation/Field/DateTime/date.js.mustache +328 -0
  38. package/src/tasks/create/templates/Constellation/Field/DateTime/demo.stories.jsx.mustache +73 -0
  39. package/src/tasks/create/templates/Constellation/Field/DateTime/index.jsx.mustache +254 -0
  40. package/src/tasks/create/templates/Constellation/Field/DateTime/mock.stories.js.mustache +23 -0
  41. package/src/tasks/create/templates/Constellation/Field/DateTime/styles.js.mustache +7 -0
  42. package/src/tasks/create/templates/Constellation/Field/DateTime/suggestions-handler.js +10 -0
  43. package/src/tasks/create/templates/Constellation/Field/Decimal/config.json.mustache +278 -0
  44. package/src/tasks/create/templates/Constellation/Field/Decimal/demo.stories.jsx.mustache +49 -0
  45. package/src/tasks/create/templates/Constellation/Field/Decimal/event-utils.js.mustache +18 -0
  46. package/src/tasks/create/templates/Constellation/Field/Decimal/index.jsx.mustache +273 -0
  47. package/src/tasks/create/templates/Constellation/Field/Decimal/mock.stories.js.mustache +21 -0
  48. package/src/tasks/create/templates/Constellation/Field/Decimal/styles.js.mustache +7 -0
  49. package/src/tasks/create/templates/Constellation/Field/Decimal/suggestions-handler.js +10 -0
  50. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/config.json.mustache +291 -0
  51. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/demo.stories.jsx.mustache +53 -0
  52. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/event-utils.js.mustache +18 -0
  53. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/index.jsx.mustache +299 -0
  54. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/mock.stories.js.mustache +23 -0
  55. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/styles.js.mustache +7 -0
  56. package/src/tasks/create/templates/Constellation/Field/Decimal-Currency/suggestions-handler.js +10 -0
  57. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/config.json.mustache +93 -0
  58. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/demo.stories.jsx.mustache +49 -0
  59. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/event-utils.js.mustache +18 -0
  60. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/index.jsx.mustache +281 -0
  61. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/mock.stories.js.mustache +21 -0
  62. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/styles.js.mustache +7 -0
  63. package/src/tasks/create/templates/Constellation/Field/Decimal-Percentage/suggestions-handler.js +10 -0
  64. package/src/tasks/create/templates/Constellation/Field/Integer/config.json.mustache +347 -0
  65. package/src/tasks/create/templates/Constellation/Field/Integer/demo.stories.jsx.mustache +49 -0
  66. package/src/tasks/create/templates/Constellation/Field/Integer/event-utils.js.mustache +18 -0
  67. package/src/tasks/create/templates/Constellation/Field/Integer/index.jsx.mustache +336 -0
  68. package/src/tasks/create/templates/Constellation/Field/Integer/mock.stories.js.mustache +21 -0
  69. package/src/tasks/create/templates/Constellation/Field/Integer/styles.js.mustache +7 -0
  70. package/src/tasks/create/templates/Constellation/Field/Integer/suggestions-handler.js +10 -0
  71. package/src/tasks/create/templates/Constellation/Field/Picklist/config.json.mustache +114 -0
  72. package/src/tasks/create/templates/Constellation/Field/Picklist/demo.stories.jsx.mustache +78 -0
  73. package/src/tasks/create/templates/Constellation/Field/Picklist/event-utils.js.mustache +18 -0
  74. package/src/tasks/create/templates/Constellation/Field/Picklist/index.jsx.mustache +351 -0
  75. package/src/tasks/create/templates/Constellation/Field/Picklist/mock.stories.js.mustache +67 -0
  76. package/src/tasks/create/templates/Constellation/Field/Picklist/styles.js.mustache +7 -0
  77. package/src/tasks/create/templates/Constellation/Field/Picklist/suggestions-handler.js +10 -0
  78. package/src/tasks/create/{template → templates/Constellation/Field/Text}/config.json.mustache +14 -5
  79. package/src/tasks/create/templates/Constellation/Field/Text/demo.stories.jsx.mustache +51 -0
  80. package/src/tasks/create/{template → templates/Constellation/Field/Text}/index.jsx.mustache +5 -0
  81. package/src/tasks/create/templates/Constellation/Field/Text/mock.stories.js.mustache +13 -0
  82. package/src/tasks/create/templates/Constellation/Field/Text/styles.js.mustache +7 -0
  83. package/src/tasks/create/templates/Constellation/Field/Text-Email/config.json.mustache +111 -0
  84. package/src/tasks/create/templates/Constellation/Field/Text-Email/demo.stories.jsx.mustache +48 -0
  85. package/src/tasks/create/templates/Constellation/Field/Text-Email/event-utils.js.mustache +18 -0
  86. package/src/tasks/create/templates/Constellation/Field/Text-Email/index.jsx.mustache +231 -0
  87. package/src/tasks/create/templates/Constellation/Field/Text-Email/mock.stories.js.mustache +22 -0
  88. package/src/tasks/create/templates/Constellation/Field/Text-Email/styles.js.mustache +7 -0
  89. package/src/tasks/create/templates/Constellation/Field/Text-Email/suggestions-handler.js +10 -0
  90. package/src/tasks/create/templates/Constellation/Field/Text-Input/StatusWork.jsx +26 -0
  91. package/src/tasks/create/templates/Constellation/Field/Text-Input/config.json.mustache +111 -0
  92. package/src/tasks/create/templates/Constellation/Field/Text-Input/demo.stories.jsx.mustache +48 -0
  93. package/src/tasks/create/templates/Constellation/Field/Text-Input/event-utils.js.mustache +18 -0
  94. package/src/tasks/create/templates/Constellation/Field/Text-Input/index.jsx.mustache +239 -0
  95. package/src/tasks/create/templates/Constellation/Field/Text-Input/mock.stories.js.mustache +21 -0
  96. package/src/tasks/create/templates/Constellation/Field/Text-Input/styles.js.mustache +7 -0
  97. package/src/tasks/create/templates/Constellation/Field/Text-Input/suggestions-handler.js +10 -0
  98. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/config.json.mustache +111 -0
  99. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/demo.stories.jsx.mustache +48 -0
  100. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/event-utils.js.mustache +18 -0
  101. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/index.jsx.mustache +231 -0
  102. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/mock.stories.js.mustache +20 -0
  103. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/styles.js.mustache +7 -0
  104. package/src/tasks/create/templates/Constellation/Field/Text-Paragraph/suggestions-handler.js +10 -0
  105. package/src/tasks/create/templates/Constellation/Field/Text-Phone/config.json.mustache +123 -0
  106. package/src/tasks/create/templates/Constellation/Field/Text-Phone/demo.stories.jsx.mustache +46 -0
  107. package/src/tasks/create/templates/Constellation/Field/Text-Phone/event-utils.js.mustache +18 -0
  108. package/src/tasks/create/templates/Constellation/Field/Text-Phone/index.jsx.mustache +267 -0
  109. package/src/tasks/create/templates/Constellation/Field/Text-Phone/mock.stories.js.mustache +37 -0
  110. package/src/tasks/create/templates/Constellation/Field/Text-Phone/styles.js.mustache +7 -0
  111. package/src/tasks/create/templates/Constellation/Field/Text-Phone/suggestions-handler.js +10 -0
  112. package/src/tasks/create/templates/Constellation/Field/Text-URL/config.json.mustache +237 -0
  113. package/src/tasks/create/templates/Constellation/Field/Text-URL/demo.stories.jsx.mustache +46 -0
  114. package/src/tasks/create/templates/Constellation/Field/Text-URL/event-utils.js.mustache +18 -0
  115. package/src/tasks/create/templates/Constellation/Field/Text-URL/index.jsx.mustache +232 -0
  116. package/src/tasks/create/templates/Constellation/Field/Text-URL/mock.stories.js.mustache +22 -0
  117. package/src/tasks/create/templates/Constellation/Field/Text-URL/styles.js.mustache +7 -0
  118. package/src/tasks/create/templates/Constellation/Field/Text-URL/suggestions-handler.js +10 -0
  119. package/src/tasks/create/templates/Constellation/Field/Text-URL/text-url.jsx.mustache +173 -0
  120. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/config.json.mustache +185 -0
  121. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/demo.stories.jsx.mustache +57 -0
  122. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/index.jsx.mustache +213 -0
  123. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/mock.stories.js.mustache +20 -0
  124. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/styles.js.mustache +7 -0
  125. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/suggestions-handler.js +10 -0
  126. package/src/tasks/create/templates/Constellation/Field/TimeOfDay/time-of-day.js.mustache +287 -0
  127. package/src/tasks/create/templates/Constellation/Template/DETAILS/OneColumnDetails.svg +22 -0
  128. package/src/tasks/create/templates/Constellation/Template/DETAILS/StatusWork.jsx.mustache +26 -0
  129. package/src/tasks/create/templates/Constellation/Template/DETAILS/config.json.mustache +35 -0
  130. package/src/tasks/create/templates/Constellation/Template/DETAILS/demo.stories.jsx.mustache +132 -0
  131. package/src/tasks/create/templates/Constellation/Template/DETAILS/index.jsx.mustache +86 -0
  132. package/src/tasks/create/templates/Constellation/Template/DETAILS/mock.stories.js.mustache +189 -0
  133. package/src/tasks/create/templates/Constellation/Template/DETAILS/styles.js.mustache +7 -0
  134. package/src/tasks/create/templates/Constellation/Template/DETAILS/utils.js.mustache +152 -0
  135. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/StatusWork.jsx.mustache +26 -0
  136. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/TwoColumnDetails.svg +28 -0
  137. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/config.json.mustache +42 -0
  138. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/demo.stories.jsx.mustache +136 -0
  139. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/index.jsx.mustache +86 -0
  140. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/mock.stories.js.mustache +230 -0
  141. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/styles.js.mustache +7 -0
  142. package/src/tasks/create/templates/Constellation/Template/DETAILS-region/utils.js.mustache +155 -0
  143. package/src/tasks/create/templates/Constellation/Template/FORM/DefaultForm.svg +29 -0
  144. package/src/tasks/create/templates/Constellation/Template/FORM/config.json.mustache +45 -0
  145. package/src/tasks/create/templates/Constellation/Template/FORM/demo.stories.jsx.mustache +169 -0
  146. package/src/tasks/create/templates/Constellation/Template/FORM/index.jsx.mustache +45 -0
  147. package/src/tasks/create/templates/Constellation/Template/FORM/mock.stories.js.mustache +137 -0
  148. package/src/tasks/create/templates/Constellation/Template/FORM/styles.js.mustache +7 -0
  149. package/src/tasks/create/templates/Constellation/Template/FORM-region/TwoColumn.svg +38 -0
  150. package/src/tasks/create/templates/Constellation/Template/FORM-region/config.json.mustache +27 -0
  151. package/src/tasks/create/templates/Constellation/Template/FORM-region/demo.stories.jsx.mustache +178 -0
  152. package/src/tasks/create/templates/Constellation/Template/FORM-region/index.jsx.mustache +48 -0
  153. package/src/tasks/create/templates/Constellation/Template/FORM-region/mock.stories.js.mustache +143 -0
  154. package/src/tasks/create/templates/Constellation/Template/FORM-region/styles.js.mustache +7 -0
  155. package/src/tasks/create/templates/Constellation/Template/PAGE/GetNextWork.jsx.mustache +35 -0
  156. package/src/tasks/create/templates/Constellation/Template/PAGE/OneColumnPage.svg +36 -0
  157. package/src/tasks/create/templates/Constellation/Template/PAGE/config.json.mustache +32 -0
  158. package/src/tasks/create/templates/Constellation/Template/PAGE/demo.stories.jsx.mustache +102 -0
  159. package/src/tasks/create/templates/Constellation/Template/PAGE/index.jsx.mustache +70 -0
  160. package/src/tasks/create/templates/Constellation/Template/PAGE/localizations.json.mustache +4 -0
  161. package/src/tasks/create/templates/Constellation/Template/PAGE/mock.stories.js.mustache +94 -0
  162. package/src/tasks/create/templates/Constellation/Template/PAGE/styles.js.mustache +7 -0
  163. package/src/tasks/create/templates/Constellation/Template/PAGE/utils.js.mustache +229 -0
  164. package/src/tasks/create/templates/Constellation/Widget/CASE/OneColumnPage.svg +36 -0
  165. package/src/tasks/create/templates/Constellation/Widget/CASE/config.json.mustache +23 -0
  166. package/src/tasks/create/templates/Constellation/Widget/CASE/demo.stories.jsx.mustache +78 -0
  167. package/src/tasks/create/templates/Constellation/Widget/CASE/index.jsx.mustache +76 -0
  168. package/src/tasks/create/templates/Constellation/Widget/CASE/mock.stories.js.mustache +390 -0
  169. package/src/tasks/create/{template → templates/Constellation/Widget/CASE}/styles.js.mustache +1 -1
  170. package/src/tasks/create/templates/Constellation/Widget/PAGE/OneColumnPage.svg +36 -0
  171. package/src/tasks/create/templates/Constellation/Widget/PAGE/config.json.mustache +59 -0
  172. package/src/tasks/create/templates/Constellation/Widget/PAGE/demo.stories.jsx.mustache +30 -0
  173. package/src/tasks/create/templates/Constellation/Widget/PAGE/index.jsx.mustache +48 -0
  174. package/src/tasks/create/templates/Constellation/Widget/PAGE/mock.stories.js.mustache +23 -0
  175. package/src/tasks/create/templates/Constellation/Widget/PAGE/styles.js.mustache +7 -0
  176. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/Avatar.jsx.mustache +75 -0
  177. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/OneColumnPage.svg +36 -0
  178. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/Operator.jsx.mustache +240 -0
  179. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/config.json.mustache +66 -0
  180. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/demo.stories.jsx.mustache +68 -0
  181. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/index.jsx.mustache +110 -0
  182. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/mock.stories.js.mustache +51 -0
  183. package/src/tasks/create/templates/Constellation/Widget/PAGE-CASE/styles.js.mustache +7 -0
  184. package/src/tasks/create-all/index.js +398 -0
  185. package/src/tasks/delete/helper.js +6 -4
  186. package/src/tasks/delete/index.js +4 -0
  187. package/src/tasks/delete-all/helper.js +153 -0
  188. package/src/tasks/delete-all/index.js +49 -0
  189. package/src/tasks/generate-ai/aiPrompt.txt.mustache +121 -0
  190. package/src/tasks/generate-ai/helper.js +184 -0
  191. package/src/tasks/generate-ai/index.js +33 -0
  192. package/src/tasks/index.js +7 -0
  193. package/src/tasks/init/index.js +9 -3
  194. package/src/tasks/init/template/.eslintignore +8 -0
  195. package/src/tasks/init/template/.eslintrc.json +186 -5
  196. package/src/tasks/init/template/.vscode/extensions.json +1 -1
  197. package/src/tasks/init/template/README.md +80 -61
  198. package/src/tasks/init/template/keys/DX-ComponentDev.zip +0 -0
  199. package/src/tasks/init/template/keys/dxcb.crt +32 -0
  200. package/src/tasks/init/template/keys/dxcb.key +51 -0
  201. package/src/tasks/init/template/package.json.mustache +44 -21
  202. package/src/tasks/init/template/tasks.config.json +19 -5
  203. package/src/tasks/init/template/templateNPMRC.txt +8 -0
  204. package/src/tasks/linter/index.js +46 -0
  205. package/src/tasks/list/helper.js +19 -6
  206. package/src/tasks/list/index.js +4 -0
  207. package/src/tasks/publish/helper.js +13 -4
  208. package/src/tasks/publish/index.js +14 -1
  209. package/src/tasks/publish-all/helper.js +154 -0
  210. package/src/tasks/publish-all/index.js +95 -0
  211. package/src/tasks/rename/index.js +314 -0
  212. package/src/tasks/validator/index.js +291 -18
  213. package/src/util.js +247 -6
  214. package/src/tasks/create/template/demo.stories.jsx.mustache +0 -44
  215. package/src/tasks/init/template/src/components/MBTAList/MBTAList.stories.tsx +0 -10
  216. package/src/tasks/init/template/src/components/MBTAList/MBTAList.tsx +0 -122
  217. package/src/tasks/init/template/src/components/MBTAList/icons/accessible.icon.tsx +0 -14
  218. package/src/tasks/init/template/src/components/MBTAList/icons/bus.icon.tsx +0 -13
  219. package/src/tasks/init/template/src/components/MBTAList/icons/mbta.icon.tsx +0 -10
  220. package/src/tasks/init/template/src/components/MBTAList/icons/subway.icon.tsx +0 -14
  221. package/src/tasks/init/template/src/components/MBTAList/index.ts +0 -2
  222. /package/src/tasks/{publish/bundle → bundle}/builder/modules.js +0 -0
  223. /package/src/tasks/{publish/bundle → bundle}/builder/paths.js +0 -0
@@ -5,8 +5,13 @@ import chalk from 'chalk';
5
5
  import inquirer from 'inquirer';
6
6
  import Ajv from 'ajv';
7
7
 
8
- import { COMPONENT_SCHEMA } from '../../constants.js';
9
- import { getComponentDirectoryPath, getComponents, getOOTBComponents } from '../../util.js';
8
+ import {
9
+ COMPONENT_SCHEMA } from '../../constants.js';
10
+
11
+ import {
12
+ getComponentDirectoryPath,
13
+ getComponents,
14
+ getOOTBComponents } from '../../util.js';
10
15
 
11
16
  const ajv = new Ajv({ allErrors: true });
12
17
 
@@ -15,12 +20,20 @@ const combinationTypes = ['PAGE', 'CASE'];
15
20
  const allowedSubtypes = [
16
21
  ...new Set([
17
22
  ...COMPONENT_SCHEMA.subtype.field.map(({ value }) => value),
18
- ...COMPONENT_SCHEMA.subtype.template,
19
- ...COMPONENT_SCHEMA.subtype.widget,
20
- combinationTypes
23
+ ...COMPONENT_SCHEMA.subtype.template.map(({ value }) => value),
24
+ ...COMPONENT_SCHEMA.subtype.widget.map(({ value }) => value)
21
25
  ])
22
26
  ];
23
27
 
28
+ // additional subtypes are manually added below
29
+ const allowedOverrideSubtypes = [
30
+ ...new Set([
31
+ ...COMPONENT_SCHEMA.subtype.field.map(({ value }) => value),
32
+ ...COMPONENT_SCHEMA.subtype.template.map(({ value }) => value),
33
+ ...COMPONENT_SCHEMA.subtype.widget.map(({ value }) => value)
34
+ ]), "ACTION", "DATA_CAPTURE", "SUMMARY", "CASEVIEW", "DATAVIEW", "LIST"
35
+ ];
36
+
24
37
  const schema = {
25
38
  type: 'object',
26
39
  properties: {
@@ -32,7 +45,7 @@ const schema = {
32
45
  organization: { type: 'string' },
33
46
  version: { type: 'string' },
34
47
  library: { type: 'string' },
35
- allowedApplications : { type: 'array' },
48
+ allowedApplications: { type: 'array' },
36
49
  type: { type: 'string', enum: COMPONENT_SCHEMA.type.map(({ value }) => value) },
37
50
  subtype: {
38
51
  anyOf: [{ type: 'string' }, { type: 'array' }],
@@ -44,24 +57,263 @@ const schema = {
44
57
  type: 'array',
45
58
  uniqueItems: true,
46
59
  items: {
47
- type: 'object',
48
- properties: {
49
- name: { type: 'string' },
50
- label: { type: 'string' },
51
- format: { type: 'string' }
52
- },
53
- required: ['name', 'label', 'format']
60
+ anyOf: [
61
+ {
62
+ type: 'object',
63
+ properties: {
64
+ name: { type: 'string' },
65
+ label: { type: 'string' },
66
+ format: { type: 'string' }
67
+ },
68
+ required: ['name', 'label', 'format']
69
+ },
70
+ {
71
+ type: 'object',
72
+ properties: {
73
+ format: { type: 'string' },
74
+ source: {
75
+ type: 'object',
76
+ properties: {
77
+ name: { type: 'string' },
78
+ label: { type: 'string' },
79
+ format: { type: 'string' }
80
+ },
81
+ required: ['name', 'label', 'format']
82
+ },
83
+ cascadeElements: {
84
+ type: 'array',
85
+ uniqueItems: true,
86
+ items: {
87
+ anyOf: [
88
+ {
89
+ type: 'object',
90
+ properties: {
91
+ key: { type: 'string'},
92
+ name: { type: 'string' },
93
+ label: { type: 'string' },
94
+ format: { type: 'string' }
95
+ },
96
+ required: ['key','name', 'label', 'format']
97
+ }
98
+ ]
99
+ }
100
+ },
101
+ },
102
+ required: ['format']
103
+ },
104
+ {
105
+ type: 'object',
106
+ properties: {
107
+ label: { type: 'string' },
108
+ format: { type: 'string' },
109
+ properties: {
110
+ type: 'array',
111
+ uniqueItems: true,
112
+ items: {
113
+ anyOf: [
114
+ {
115
+ type: 'object',
116
+ properties: {
117
+ name: { type: 'string' },
118
+ label: { type: 'string' },
119
+ format: { type: 'string' }
120
+ },
121
+ required: ['name', 'label', 'format']
122
+ },
123
+ {
124
+ type: 'object',
125
+ properties: {
126
+ variant: { type: 'string' },
127
+ label: { type: 'string' },
128
+ format: { type: 'string' }
129
+ },
130
+ required: ['variant', 'label', 'format']
131
+ },
132
+ {
133
+ type: 'object',
134
+ properties: {
135
+ format: { type: 'string' },
136
+ elements: {
137
+ type: 'array',
138
+ uniqueItems: true,
139
+ items: {
140
+ anyOf: [
141
+ {
142
+ type: 'object',
143
+ properties: {
144
+ key: { type: 'string' },
145
+ name: { type: 'string' },
146
+ label: { type: 'string' },
147
+ format: { type: 'string' },
148
+ variant: { type: 'string' }
149
+ },
150
+ required: ['key', 'format', 'label']
151
+ }
152
+ ]
153
+ }
154
+ }
155
+ },
156
+ required: ['format', 'elements']
157
+ },
158
+ ]
159
+ }
160
+ }
161
+
162
+ },
163
+ required: ['label', 'format'],
164
+ }
165
+ ]
54
166
  }
55
167
  },
56
168
  defaultConfig: { type: 'object' }
57
169
  },
58
170
  required: ['componentKey', 'name', 'description', 'type', 'subtype', 'properties'],
59
- additionalProperties: false
171
+ additionalProperties: true
172
+ };
173
+
174
+ const overrideSchema = {
175
+ type: 'object',
176
+ properties: {
177
+ baseComponentName: { type: 'string' },
178
+ componentKey: { type: 'string', pattern: '^[A-Za-z0-9]+$' },
179
+ name: { type: 'string', pattern: '^[A-Za-z0-9]+$' },
180
+ label: { type: 'string' },
181
+ description: { type: 'string' },
182
+ organization: { type: 'string' },
183
+ version: { type: 'string' },
184
+ library: { type: 'string' },
185
+ allowedApplications: { type: 'array' },
186
+ type: { type: 'string', enum: COMPONENT_SCHEMA.type.map(({ value }) => value) },
187
+ subtype: {
188
+ anyOf: [{ type: 'string' }, { type: 'array' }],
189
+
190
+ enum: allowedOverrideSubtypes
191
+ },
192
+ icon: { type: 'string' },
193
+ properties: {
194
+ type: 'array',
195
+ uniqueItems: true,
196
+ items: {
197
+ anyOf: [
198
+ {
199
+ type: 'object',
200
+ properties: {
201
+ name: { type: 'string' },
202
+ label: { type: 'string' },
203
+ format: { type: 'string' }
204
+ },
205
+ required: ['name', 'label', 'format']
206
+ },
207
+ {
208
+ type: 'object',
209
+ properties: {
210
+ format: { type: 'string' },
211
+ source: {
212
+ type: 'object',
213
+ properties: {
214
+ name: { type: 'string' },
215
+ label: { type: 'string' },
216
+ format: { type: 'string' }
217
+ },
218
+ required: ['name', 'label', 'format']
219
+ },
220
+ cascadeElements: {
221
+ type: 'array',
222
+ uniqueItems: true,
223
+ items: {
224
+ anyOf: [
225
+ {
226
+ type: 'object',
227
+ properties: {
228
+ key: { type: 'string'},
229
+ name: { type: 'string' },
230
+ label: { type: 'string' },
231
+ format: { type: 'string' }
232
+ },
233
+ required: ['key','name', 'label', 'format']
234
+ }
235
+ ]
236
+ }
237
+ },
238
+ },
239
+ required: ['format']
240
+ },
241
+ {
242
+ type: 'object',
243
+ properties: {
244
+ label: { type: 'string' },
245
+ format: { type: 'string' },
246
+ properties: {
247
+ type: 'array',
248
+ uniqueItems: true,
249
+ items: {
250
+ anyOf: [
251
+ {
252
+ type: 'object',
253
+ properties: {
254
+ name: { type: 'string' },
255
+ label: { type: 'string' },
256
+ format: { type: 'string' }
257
+ },
258
+ required: ['name', 'label', 'format']
259
+ },
260
+ {
261
+ type: 'object',
262
+ properties: {
263
+ variant: { type: 'string' },
264
+ label: { type: 'string' },
265
+ format: { type: 'string' }
266
+ },
267
+ required: ['variant', 'label', 'format']
268
+ },
269
+ {
270
+ type: 'object',
271
+ properties: {
272
+ format: { type: 'string' },
273
+ elements: {
274
+ type: 'array',
275
+ uniqueItems: true,
276
+ items: {
277
+ anyOf: [
278
+ {
279
+ type: 'object',
280
+ properties: {
281
+ key: { type: 'string' },
282
+ name: { type: 'string' },
283
+ label: { type: 'string' },
284
+ format: { type: 'string' },
285
+ variant: { type: 'string' }
286
+ },
287
+ required: ['key', 'format', 'label']
288
+ }
289
+ ]
290
+ }
291
+ }
292
+ },
293
+ required: ['format', 'elements']
294
+ },
295
+ ]
296
+ }
297
+ }
298
+
299
+ },
300
+ required: ['label', 'format'],
301
+ }
302
+ ]
303
+ }
304
+ },
305
+ defaultConfig: { type: 'object' }
306
+ },
307
+ required: ['name', 'type', 'subtype', 'properties', 'componentKey'],
308
+ additionalProperties: true
60
309
  };
61
310
 
62
311
  const validateSchema = ajv.compile(schema);
312
+ const validateOverideSchema = ajv.compile(overrideSchema);
313
+
314
+
63
315
 
64
- export default async option => {
316
+ export default async (option) => {
65
317
  let componentToValidate = null;
66
318
  if (option.params && option.params[3]) {
67
319
  componentToValidate = option.params[3];
@@ -75,26 +327,47 @@ export default async option => {
75
327
  });
76
328
 
77
329
  componentToValidate = answer.component;
330
+ } else if (option.name) {
331
+ componentToValidate = option.value;
78
332
  } else {
79
333
  componentToValidate = option;
80
334
  }
81
335
 
82
336
  const componentDirectory = await getComponentDirectoryPath(componentToValidate);
83
- const configFile = path.join(componentDirectory, 'config.json');
84
- const data = JSON.parse(fs.readFileSync(path.resolve(configFile), 'utf8'));
337
+ let configFileName = "config.json";
338
+
339
+ const configFile = path.join(componentDirectory, configFileName);
340
+ let configData;
341
+ try {
342
+ configData = fs.readFileSync(path.resolve(configFile), 'utf8');
343
+ }
344
+ catch (err) {
345
+
346
+ // for now, if now file just end
347
+ console.log(`${chalk.bold.yellow('Config file not availabe for: ' + componentToValidate)}`);
348
+ return;
349
+
350
+ }
351
+
352
+ //const data = JSON.parse(fs.readFileSync(path.resolve(configFile), 'utf8'));
353
+ const data = JSON.parse(configData);
354
+
85
355
  const valid = validateSchema(data);
86
356
 
87
357
  if (valid) {
358
+
88
359
  if (
89
360
  componentToValidate &&
90
361
  !/^[A-Za-z0-9]+_[A-Za-z0-9]+_[A-Za-z0-9]+$/.test(componentToValidate)
91
362
  ) {
92
363
  const ootbComponents = await getOOTBComponents();
93
364
  if (ootbComponents.includes(componentToValidate)) {
94
- throw new Error(`Invalid: Error occured in validating ${componentToValidate}`);
365
+ throw new Error(`Invalid: Error occurred in validating ${componentToValidate}`);
95
366
  }
96
367
  }
97
368
 
369
+
370
+
98
371
  console.log(`${chalk.bold.green(componentToValidate)} schema is valid`);
99
372
  } else {
100
373
  throw new Error(`Invalid: ${ajv.errorsText(validateSchema.errors)}`);
package/src/util.js CHANGED
@@ -7,6 +7,10 @@ import chalk from 'chalk';
7
7
  import mustache from 'mustache';
8
8
  import pascalCase from 'pascalcase';
9
9
  import fetch from 'node-fetch';
10
+ import { createRequire } from 'module';
11
+
12
+ import _ from 'lodash';
13
+
10
14
 
11
15
  import {
12
16
  COMPONENTS_DIRECTORY_PATH,
@@ -15,11 +19,15 @@ import {
15
19
  OOTB_COMPONENT_SERVICE_REST_ENDPOINT,
16
20
  DELETE_COMPONENT_SERVICE_REST_ENDPOINT,
17
21
  OOTB_COMPONENTS,
18
- TOKEN_URL_V1
22
+ SERVICES_AI_REST_ENDPOINT,
23
+ BOOTSTRAP_SERVICE_REST_ENDPOINT,
24
+ SERVICE_TOKEN_PATH
19
25
  } from './constants.js';
20
26
 
21
27
  const access = promisify(fs.access);
22
28
 
29
+ let servicesToken = "";
30
+
23
31
  export const checkPathAccess = async (path, options = {}) => {
24
32
  const { errorMessage } = options;
25
33
 
@@ -51,7 +59,7 @@ export const deleteLocalComponent = async componentKey => {
51
59
 
52
60
  const directory = join(currentDirectory, data[COMPONENTS_DIRECTORY_PATH], componentKey);
53
61
 
54
- fs.rmdir(directory, { recursive: true }, err => {
62
+ fs.rm(directory, { recursive: true }, err => {
55
63
  if (err) {
56
64
  throw err;
57
65
  }
@@ -74,7 +82,9 @@ export const deleteServerComponent = async componentKey => {
74
82
  token_type: tokenType,
75
83
  refresh_token: refreshToken
76
84
  } = JSON.parse(OauthData);
77
- fetch(deleteUrl, {
85
+
86
+
87
+ await fetch(deleteUrl, {
78
88
  method: 'DELETE',
79
89
  agent: new https.Agent({ rejectUnauthorized: false }),
80
90
  headers: {
@@ -83,12 +93,23 @@ export const deleteServerComponent = async componentKey => {
83
93
  })
84
94
  .then(response => response.text())
85
95
  .then(resp => {
86
- const respData = JSON.parse(resp);
96
+ let respData;
97
+ try {
98
+ respData = JSON.parse(resp);
99
+
100
+ }
101
+ catch (e) {
102
+ console.log(chalk.bold.redBright(`Failure : ${resp}`));
103
+ process.exit(1);
104
+ }
105
+
87
106
  if (respData.status == 200) {
88
107
  console.log(chalk.bold.green(`Success : ${respData.message}`));
89
108
  } else {
90
109
  throw new Error(`${respData.message}`);
91
110
  }
111
+
112
+
92
113
  })
93
114
  .catch(e => Promise.reject(`${chalk.bold.red(e)}`));
94
115
  }
@@ -97,6 +118,7 @@ export const deleteServerComponent = async componentKey => {
97
118
  }
98
119
  };
99
120
 
121
+
100
122
  export const getComponents = async () => {
101
123
  const currentDirectory = process.cwd();
102
124
  const pegaConfigJsonPath = join(currentDirectory, TASKS_CONFIG_JSON_FILENAME);
@@ -120,6 +142,51 @@ export const getComponents = async () => {
120
142
  .map(dirent => dirent.name);
121
143
  };
122
144
 
145
+
146
+
147
+
148
+ export const getSubComponents = async (directory, type) => {
149
+
150
+ const subDirectory = join(directory, type);
151
+ return fs
152
+ .readdirSync(subDirectory, { withFileTypes: true })
153
+ .filter(dirent => dirent.isDirectory())
154
+ .map(dirent => dirent.name);
155
+ }
156
+
157
+
158
+ export const getDirectoryFiles = async (directory) => {
159
+ return fs
160
+ .readdirSync(directory, { withFileTypes: true })
161
+ .filter(dirent => !dirent.isDirectory())
162
+ .map(dirent => dirent.name);
163
+ }
164
+
165
+
166
+ export const getComponentsObj = async () => {
167
+
168
+ let compList = new Array();
169
+
170
+ //const componentList = await getDirectoryFiles(directory);
171
+ const componentList = await getComponents();
172
+
173
+
174
+ if (componentList.length > 0) {
175
+
176
+ compList.push(...componentList.map(
177
+ name => {
178
+ const container = {};
179
+ container.name = name;
180
+ container.value = name;
181
+
182
+ return container;
183
+ }
184
+ ));
185
+ }
186
+
187
+ return compList;
188
+ }
189
+
123
190
  export const getPegaConfig = async () => {
124
191
  const currentDirectory = process.cwd();
125
192
  const pegaConfigJsonPath = join(currentDirectory, TASKS_CONFIG_JSON_FILENAME);
@@ -132,11 +199,32 @@ export const getPegaConfig = async () => {
132
199
  return data;
133
200
  };
134
201
 
202
+ export const getAIPromptData = async (aiPromptPath) => {
203
+ await checkPathAccess(aiPromptPath);
204
+
205
+ let data = fs.readFileSync(aiPromptPath, { encoding: 'utf8' });
206
+
207
+ return data;
208
+ }
209
+
210
+ export const getComponentConfigJson = async (componentDirectory) => {
211
+
212
+ const filePath = join(componentDirectory, "config.json");
213
+ await checkPathAccess(filePath);
214
+
215
+ let data = fs.readFileSync(filePath, { encoding: 'utf8' });
216
+
217
+ data = _.unescape(data);
218
+
219
+ return data;
220
+ }
221
+
135
222
  export const getPegaServerConfig = async () => {
136
223
  const config = await getPegaConfig();
137
224
  return config['server-config'];
138
225
  };
139
226
 
227
+
140
228
  export const getComponentDefaults = async () => {
141
229
  const config = await getPegaConfig();
142
230
  return config.component;
@@ -218,6 +306,25 @@ export const validateRulesetVersion = str => {
218
306
  return regex.test(str);
219
307
  };
220
308
 
309
+ export const showVersion = () => {
310
+ // get package version, so can display at start
311
+ const require = createRequire(import.meta.url);
312
+ const pData = require("@pega/custom-dx-components/package.json");
313
+
314
+ console.log(chalk.green("DX Component Builder v" + pData.version));
315
+
316
+ // do a check of node version, it should be 18 or greater
317
+ const arNodeVersion = process.versions.node.split(".");
318
+
319
+ const nodeMajorVersion = parseInt(arNodeVersion[0]);
320
+ const nodeMinorVersion = parseInt(arNodeVersion[1]);
321
+
322
+ if (nodeMajorVersion < 18) {
323
+ console.log(chalk.redBright("DX Component Builder - SDK requires node v18 or greater, current version: " + process.version));
324
+ process.exit(1);
325
+ }
326
+ };
327
+
221
328
  export const getOOTBComponents = async () => {
222
329
  return new Promise((resolve, reject) => {
223
330
  fs.readFile(OOTB_COMPONENTS, 'utf-8', async (err, data) => {
@@ -272,6 +379,140 @@ export const getOOTBComponents = async () => {
272
379
  });
273
380
  };
274
381
 
275
- export const getTokenUrl = async (server) => {
276
- return server.endsWith('/') ? `${server}${TOKEN_URL_V1}` : `${server}/${TOKEN_URL_V1}`;
382
+
383
+
384
+ export const storeServicesToken = async () => {
385
+ const { server } = await getPegaServerConfig();
386
+ const url = constructCompleteUrl(server, BOOTSTRAP_SERVICE_REST_ENDPOINT);
387
+
388
+ let returnToken = "";
389
+
390
+ try {
391
+ const OauthData = fs.readFileSync(TOKEN_PATH, 'utf8');
392
+ if (OauthData) {
393
+ let {
394
+ access_token: accessToken,
395
+ token_type: tokenType,
396
+ refresh_token: refreshToken
397
+ } = JSON.parse(OauthData);
398
+
399
+ await fetch(url, {
400
+ method: 'GET',
401
+ agent: new https.Agent({ rejectUnauthorized: false }),
402
+ headers: {
403
+ Authorization: `${tokenType} ${accessToken}`
404
+ },
405
+ })
406
+ .then(response => response.text())
407
+ .then(data => {
408
+
409
+ try {
410
+ const returnData = JSON.parse(data);
411
+
412
+ if (returnData != null && returnData.pyConfigJSON) {
413
+ const returnJSON = JSON.parse(returnData.pyConfigJSON);
414
+ const strToken = JSON.stringify(returnJSON.tokens, null, 2);
415
+
416
+
417
+ fs.writeFileSync(SERVICE_TOKEN_PATH, strToken, err => {
418
+ if (err) {
419
+ Promise.reject(`${chalk.bold.red(err)}`);
420
+ }
421
+ });
422
+ //returnToken = returnJSON.tokens.C11NB2S;
423
+ }
424
+ else {
425
+ //returnToken = "";
426
+ }
427
+ }
428
+ catch {
429
+ Promise.reject(`${chalk.bold.red(data)}`);
430
+ }
431
+
432
+
433
+ })
434
+ .catch(e => Promise.reject(`${chalk.bold.red(e)}`));
435
+ }
436
+ }
437
+ catch (error) {
438
+ throw new Error('Error occurred in validation', error);
439
+ }
440
+
441
+ //return returnToken;
442
+
443
+ }
444
+
445
+ export const getAIComponent = async (prompt) => {
446
+
447
+
448
+ const { servicesServer } = await getPegaServerConfig();
449
+ if (servicesServer === undefined) {
450
+ Promise.reject(`${chalk.bold.red("ERROR: servicesServer not defined in tasks.config.json" )}`);
451
+ }
452
+
453
+ const serviceUrl = constructCompleteUrl(servicesServer, SERVICES_AI_REST_ENDPOINT);
454
+
455
+ const jsonBody = { "prompt" : prompt };
456
+
457
+ let returnCode = "";
458
+
459
+ try {
460
+ const OauthData = fs.readFileSync(TOKEN_PATH, 'utf8');
461
+ const ServicesData = fs.readFileSync(SERVICE_TOKEN_PATH, 'utf8');
462
+ if (OauthData && ServicesData) {
463
+ let {
464
+ access_token: accessToken,
465
+ token_type: tokenType,
466
+ refresh_token: refreshToken
467
+ } = JSON.parse(OauthData);
468
+
469
+ const { C11NB2S } = JSON.parse(ServicesData);
470
+
471
+ // services needs Bearer with a big "B"
472
+ tokenType = convertIntoPascalCase(tokenType);
473
+
474
+ await fetch(serviceUrl, {
475
+ method: 'POST',
476
+ agent: new https.Agent({ rejectUnauthorized: false }),
477
+ headers: {
478
+ Authorization: `${tokenType} ${C11NB2S}`,
479
+ 'Accept': 'application/json',
480
+ 'Content-Type': 'application/json'
481
+ },
482
+ body: JSON.stringify(jsonBody),
483
+ })
484
+ .then(response => response.text())
485
+ .then(data => {
486
+
487
+ try {
488
+ const returnData = JSON.parse(data);
489
+
490
+ if (returnData != null && returnData.code) {
491
+ returnCode = returnData.code;
492
+ }
493
+ else {
494
+ returnCode = "";
495
+ }
496
+ }
497
+ catch {
498
+ Promise.reject(`Error in AI generation: \n ${chalk.bold.red(data)}`);
499
+ //throw new Error('Error occurred in validation', data);
500
+ }
501
+
502
+
503
+ })
504
+ .catch(e => Promise.reject(`Error in AI generation: \n ${chalk.bold.red(e)}`));
505
+ }
506
+ }
507
+ catch (error) {
508
+ if (error.code === 'ENOENT') {
509
+ Promise.reject(`${chalk.bold.red("ERROR: Need to authenticate or reauthenticate.")}`);
510
+ }
511
+ else {
512
+ throw new Error('Error occurred in validation', error);
513
+ }
514
+
515
+ }
516
+
517
+ return returnCode;
277
518
  };