payload 3.0.0-alpha.4 → 3.0.0-alpha.40

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 (797) hide show
  1. package/auth.d.ts +5 -5
  2. package/auth.js +5 -44
  3. package/bin.js +17 -1
  4. package/components.d.ts +14 -0
  5. package/components.js +71 -0
  6. package/config.d.ts +10 -10
  7. package/config.js +10 -59
  8. package/database.d.ts +22 -22
  9. package/database.js +21 -108
  10. package/dist/admin/RichText.d.ts +9 -5
  11. package/dist/admin/RichText.d.ts.map +1 -1
  12. package/dist/admin/RichText.js +2 -5
  13. package/dist/admin/elements/Cell.d.ts +2 -2
  14. package/dist/admin/elements/Cell.d.ts.map +1 -1
  15. package/dist/admin/elements/Cell.js +2 -5
  16. package/dist/admin/elements/DatePicker.js +2 -5
  17. package/dist/admin/elements/PreviewButton.js +2 -5
  18. package/dist/admin/elements/PublishButton.js +2 -5
  19. package/dist/admin/elements/SaveButton.js +2 -5
  20. package/dist/admin/elements/SaveDraftButton.js +2 -5
  21. package/dist/admin/elements/Tab.d.ts +3 -3
  22. package/dist/admin/elements/Tab.d.ts.map +1 -1
  23. package/dist/admin/elements/Tab.js +2 -5
  24. package/dist/admin/forms/Error.js +2 -5
  25. package/dist/admin/forms/FieldDescription.js +2 -5
  26. package/dist/admin/forms/FieldTypes.js +2 -5
  27. package/dist/admin/forms/Form.d.ts +22 -0
  28. package/dist/admin/forms/Form.d.ts.map +1 -1
  29. package/dist/admin/forms/Form.js +2 -5
  30. package/dist/admin/forms/Label.js +2 -5
  31. package/dist/admin/forms/RowLabel.d.ts +1 -1
  32. package/dist/admin/forms/RowLabel.d.ts.map +1 -1
  33. package/dist/admin/forms/RowLabel.js +2 -5
  34. package/dist/admin/types.d.ts +19 -18
  35. package/dist/admin/types.d.ts.map +1 -1
  36. package/dist/admin/types.js +2 -5
  37. package/dist/admin/views/types.d.ts +41 -0
  38. package/dist/admin/views/types.d.ts.map +1 -0
  39. package/dist/admin/views/types.js +3 -0
  40. package/dist/assets/assets.d.js +0 -1
  41. package/dist/auth/baseFields/accountLock.d.ts +1 -1
  42. package/dist/auth/baseFields/accountLock.d.ts.map +1 -1
  43. package/dist/auth/baseFields/accountLock.js +6 -16
  44. package/dist/auth/baseFields/apiKey.d.ts +1 -1
  45. package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
  46. package/dist/auth/baseFields/apiKey.js +6 -21
  47. package/dist/auth/baseFields/auth.d.ts +1 -1
  48. package/dist/auth/baseFields/auth.d.ts.map +1 -1
  49. package/dist/auth/baseFields/auth.js +6 -16
  50. package/dist/auth/baseFields/verification.d.ts +1 -1
  51. package/dist/auth/baseFields/verification.d.ts.map +1 -1
  52. package/dist/auth/baseFields/verification.js +8 -18
  53. package/dist/auth/cookies.d.ts +2 -2
  54. package/dist/auth/cookies.d.ts.map +1 -1
  55. package/dist/auth/cookies.js +6 -33
  56. package/dist/auth/crypto.js +7 -30
  57. package/dist/auth/defaultAccess.d.ts +1 -1
  58. package/dist/auth/defaultAccess.d.ts.map +1 -1
  59. package/dist/auth/defaultAccess.js +2 -12
  60. package/dist/auth/defaultUser.d.ts +1 -1
  61. package/dist/auth/defaultUser.d.ts.map +1 -1
  62. package/dist/auth/defaultUser.js +6 -16
  63. package/dist/auth/executeAccess.d.ts +2 -2
  64. package/dist/auth/executeAccess.d.ts.map +1 -1
  65. package/dist/auth/executeAccess.js +5 -15
  66. package/dist/auth/extractJWT.d.ts +1 -1
  67. package/dist/auth/extractJWT.d.ts.map +1 -1
  68. package/dist/auth/extractJWT.js +4 -14
  69. package/dist/auth/getAccessResults.d.ts +2 -2
  70. package/dist/auth/getAccessResults.d.ts.map +1 -1
  71. package/dist/auth/getAccessResults.js +9 -19
  72. package/dist/auth/getAuthenticatedUser.d.ts +1 -1
  73. package/dist/auth/getAuthenticatedUser.d.ts.map +1 -1
  74. package/dist/auth/getAuthenticatedUser.js +2 -12
  75. package/dist/auth/getFieldsToSign.d.ts +2 -2
  76. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  77. package/dist/auth/getFieldsToSign.js +5 -15
  78. package/dist/auth/index.d.ts +3 -3
  79. package/dist/auth/index.d.ts.map +1 -1
  80. package/dist/auth/index.js +4 -27
  81. package/dist/auth/isLocked.js +2 -12
  82. package/dist/auth/operations/access.d.ts +2 -2
  83. package/dist/auth/operations/access.d.ts.map +1 -1
  84. package/dist/auth/operations/access.js +12 -22
  85. package/dist/auth/operations/forgotPassword.d.ts +2 -2
  86. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  87. package/dist/auth/operations/forgotPassword.js +21 -32
  88. package/dist/auth/operations/init.d.ts +1 -1
  89. package/dist/auth/operations/init.d.ts.map +1 -1
  90. package/dist/auth/operations/init.js +2 -12
  91. package/dist/auth/operations/local/forgotPassword.d.ts +3 -3
  92. package/dist/auth/operations/local/forgotPassword.d.ts.map +1 -1
  93. package/dist/auth/operations/local/forgotPassword.js +8 -18
  94. package/dist/auth/operations/local/index.d.ts +5 -5
  95. package/dist/auth/operations/local/index.d.ts.map +1 -1
  96. package/dist/auth/operations/local/index.js +12 -27
  97. package/dist/auth/operations/local/login.d.ts +4 -4
  98. package/dist/auth/operations/local/login.d.ts.map +1 -1
  99. package/dist/auth/operations/local/login.js +8 -18
  100. package/dist/auth/operations/local/resetPassword.d.ts +4 -4
  101. package/dist/auth/operations/local/resetPassword.d.ts.map +1 -1
  102. package/dist/auth/operations/local/resetPassword.js +8 -18
  103. package/dist/auth/operations/local/unlock.d.ts +3 -3
  104. package/dist/auth/operations/local/unlock.d.ts.map +1 -1
  105. package/dist/auth/operations/local/unlock.js +8 -18
  106. package/dist/auth/operations/local/verifyEmail.d.ts +3 -3
  107. package/dist/auth/operations/local/verifyEmail.d.ts.map +1 -1
  108. package/dist/auth/operations/local/verifyEmail.js +8 -18
  109. package/dist/auth/operations/login.d.ts +7 -7
  110. package/dist/auth/operations/login.d.ts.map +1 -1
  111. package/dist/auth/operations/login.js +32 -47
  112. package/dist/auth/operations/logout.d.ts +2 -2
  113. package/dist/auth/operations/logout.d.ts.map +1 -1
  114. package/dist/auth/operations/logout.js +6 -21
  115. package/dist/auth/operations/me.d.ts +3 -3
  116. package/dist/auth/operations/me.d.ts.map +1 -1
  117. package/dist/auth/operations/me.js +4 -19
  118. package/dist/auth/operations/refresh.d.ts +3 -3
  119. package/dist/auth/operations/refresh.d.ts.map +1 -1
  120. package/dist/auth/operations/refresh.js +19 -34
  121. package/dist/auth/operations/registerFirstUser.d.ts +9 -9
  122. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  123. package/dist/auth/operations/registerFirstUser.js +11 -21
  124. package/dist/auth/operations/resetPassword.d.ts +2 -2
  125. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  126. package/dist/auth/operations/resetPassword.js +21 -43
  127. package/dist/auth/operations/unlock.d.ts +2 -2
  128. package/dist/auth/operations/unlock.d.ts.map +1 -1
  129. package/dist/auth/operations/unlock.js +17 -39
  130. package/dist/auth/operations/verifyEmail.d.ts +2 -2
  131. package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
  132. package/dist/auth/operations/verifyEmail.js +14 -37
  133. package/dist/auth/sendVerificationEmail.d.ts +5 -5
  134. package/dist/auth/sendVerificationEmail.d.ts.map +1 -1
  135. package/dist/auth/sendVerificationEmail.js +4 -14
  136. package/dist/auth/strategies/apiKey.d.ts +2 -2
  137. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  138. package/dist/auth/strategies/apiKey.js +4 -19
  139. package/dist/auth/strategies/jwt.d.ts +1 -1
  140. package/dist/auth/strategies/jwt.d.ts.map +1 -1
  141. package/dist/auth/strategies/jwt.js +6 -21
  142. package/dist/auth/strategies/local/authenticate.d.ts +1 -1
  143. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  144. package/dist/auth/strategies/local/authenticate.js +6 -21
  145. package/dist/auth/strategies/local/generatePasswordSaltHash.js +7 -22
  146. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts +3 -3
  147. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
  148. package/dist/auth/strategies/local/incrementLoginAttempts.js +2 -12
  149. package/dist/auth/strategies/local/register.d.ts +3 -3
  150. package/dist/auth/strategies/local/register.d.ts.map +1 -1
  151. package/dist/auth/strategies/local/register.js +6 -16
  152. package/dist/auth/strategies/local/resetLoginAttempts.d.ts +3 -3
  153. package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
  154. package/dist/auth/strategies/local/resetLoginAttempts.js +2 -12
  155. package/dist/auth/types.d.ts +2 -2
  156. package/dist/auth/types.d.ts.map +1 -1
  157. package/dist/auth/types.js +2 -12
  158. package/dist/bin/generateTypes.d.ts +1 -1
  159. package/dist/bin/generateTypes.d.ts.map +1 -1
  160. package/dist/bin/generateTypes.js +10 -34
  161. package/dist/bin/index.d.ts +1 -1
  162. package/dist/bin/index.d.ts.map +1 -1
  163. package/dist/bin/index.js +25 -69
  164. package/dist/bin/loadEnv.js +13 -26
  165. package/dist/bin/migrate.d.ts +7 -1
  166. package/dist/bin/migrate.d.ts.map +1 -1
  167. package/dist/bin/migrate.js +12 -37
  168. package/dist/bin/register/clientExtensions.d.ts +2 -0
  169. package/dist/bin/register/clientExtensions.d.ts.map +1 -0
  170. package/dist/bin/register/clientExtensions.js +13 -0
  171. package/dist/bin/register/index.d.ts +34 -0
  172. package/dist/bin/register/index.d.ts.map +1 -0
  173. package/dist/bin/register/index.js +95 -0
  174. package/dist/bin/register/read-default-tsconfig.d.ts +4 -0
  175. package/dist/bin/register/read-default-tsconfig.d.ts.map +1 -0
  176. package/dist/bin/register/read-default-tsconfig.js +92 -0
  177. package/dist/bin/register/register.d.ts +15 -0
  178. package/dist/bin/register/register.d.ts.map +1 -0
  179. package/dist/bin/register/register.js +92 -0
  180. package/dist/collections/config/build.d.ts +1 -1
  181. package/dist/collections/config/build.d.ts.map +1 -1
  182. package/dist/collections/config/build.js +2 -12
  183. package/dist/collections/config/defaults.d.ts +5 -5
  184. package/dist/collections/config/defaults.js +9 -32
  185. package/dist/collections/config/sanitize.d.ts +2 -2
  186. package/dist/collections/config/sanitize.d.ts.map +1 -1
  187. package/dist/collections/config/sanitize.js +34 -49
  188. package/dist/collections/config/schema.js +157 -172
  189. package/dist/collections/config/types.d.ts +13 -13
  190. package/dist/collections/config/types.d.ts.map +1 -1
  191. package/dist/collections/config/types.js +2 -5
  192. package/dist/collections/dataloader.d.ts +2 -2
  193. package/dist/collections/dataloader.d.ts.map +1 -1
  194. package/dist/collections/dataloader.js +8 -23
  195. package/dist/collections/operations/create.d.ts +9 -9
  196. package/dist/collections/operations/create.d.ts.map +1 -1
  197. package/dist/collections/operations/create.js +38 -53
  198. package/dist/collections/operations/delete.d.ts +9 -10
  199. package/dist/collections/operations/delete.d.ts.map +1 -1
  200. package/dist/collections/operations/delete.js +27 -42
  201. package/dist/collections/operations/deleteByID.d.ts +2 -3
  202. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  203. package/dist/collections/operations/deleteByID.js +27 -42
  204. package/dist/collections/operations/docAccess.d.ts +3 -3
  205. package/dist/collections/operations/docAccess.d.ts.map +1 -1
  206. package/dist/collections/operations/docAccess.js +12 -22
  207. package/dist/collections/operations/find.d.ts +3 -4
  208. package/dist/collections/operations/find.d.ts.map +1 -1
  209. package/dist/collections/operations/find.js +25 -40
  210. package/dist/collections/operations/findByID.d.ts +2 -2
  211. package/dist/collections/operations/findByID.d.ts.map +1 -1
  212. package/dist/collections/operations/findByID.js +21 -36
  213. package/dist/collections/operations/findVersionByID.d.ts +3 -3
  214. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  215. package/dist/collections/operations/findVersionByID.js +19 -34
  216. package/dist/collections/operations/findVersions.d.ts +4 -5
  217. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  218. package/dist/collections/operations/findVersions.js +20 -35
  219. package/dist/collections/operations/local/create.d.ts +4 -5
  220. package/dist/collections/operations/local/create.d.ts.map +1 -1
  221. package/dist/collections/operations/local/create.js +10 -25
  222. package/dist/collections/operations/local/delete.d.ts +5 -5
  223. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  224. package/dist/collections/operations/local/delete.js +10 -20
  225. package/dist/collections/operations/local/find.d.ts +3 -4
  226. package/dist/collections/operations/local/find.d.ts.map +1 -1
  227. package/dist/collections/operations/local/find.js +8 -18
  228. package/dist/collections/operations/local/findByID.d.ts +2 -4
  229. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  230. package/dist/collections/operations/local/findByID.js +8 -18
  231. package/dist/collections/operations/local/findVersionByID.d.ts +3 -4
  232. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  233. package/dist/collections/operations/local/findVersionByID.js +8 -18
  234. package/dist/collections/operations/local/findVersions.d.ts +4 -5
  235. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  236. package/dist/collections/operations/local/findVersions.js +8 -18
  237. package/dist/collections/operations/local/index.d.ts +13 -13
  238. package/dist/collections/operations/local/index.d.ts.map +1 -1
  239. package/dist/collections/operations/local/index.js +20 -35
  240. package/dist/collections/operations/local/restoreVersion.d.ts +2 -3
  241. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  242. package/dist/collections/operations/local/restoreVersion.js +8 -18
  243. package/dist/collections/operations/local/update.d.ts +4 -5
  244. package/dist/collections/operations/local/update.d.ts.map +1 -1
  245. package/dist/collections/operations/local/update.js +12 -27
  246. package/dist/collections/operations/restoreVersion.d.ts +2 -2
  247. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  248. package/dist/collections/operations/restoreVersion.js +26 -41
  249. package/dist/collections/operations/update.d.ts +7 -8
  250. package/dist/collections/operations/update.d.ts.map +1 -1
  251. package/dist/collections/operations/update.js +43 -58
  252. package/dist/collections/operations/updateByID.d.ts +9 -9
  253. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  254. package/dist/collections/operations/updateByID.js +44 -59
  255. package/dist/collections/operations/utils.d.ts +12 -12
  256. package/dist/collections/operations/utils.d.ts.map +1 -1
  257. package/dist/collections/operations/utils.js +3 -12
  258. package/dist/config/build.d.ts +1 -1
  259. package/dist/config/build.d.ts.map +1 -1
  260. package/dist/config/build.js +9 -15
  261. package/dist/config/createClientConfig.d.ts +1243 -3
  262. package/dist/config/createClientConfig.d.ts.map +1 -1
  263. package/dist/config/createClientConfig.js +107 -72
  264. package/dist/config/defaults.d.ts +1 -1
  265. package/dist/config/defaults.d.ts.map +1 -1
  266. package/dist/config/defaults.js +4 -19
  267. package/dist/config/find.d.ts +1 -2
  268. package/dist/config/find.d.ts.map +1 -1
  269. package/dist/config/find.js +18 -34
  270. package/dist/config/load.d.ts +2 -2
  271. package/dist/config/load.d.ts.map +1 -1
  272. package/dist/config/load.js +17 -30
  273. package/dist/config/sanitize.d.ts +1 -1
  274. package/dist/config/sanitize.d.ts.map +1 -1
  275. package/dist/config/sanitize.js +25 -40
  276. package/dist/config/schema.d.ts.map +1 -1
  277. package/dist/config/schema.js +116 -133
  278. package/dist/config/shared/adminViewSchema.js +9 -24
  279. package/dist/config/shared/componentSchema.js +21 -50
  280. package/dist/config/types.d.ts +28 -34
  281. package/dist/config/types.d.ts.map +1 -1
  282. package/dist/config/types.js +9 -21
  283. package/dist/config/validate.d.ts +1 -1
  284. package/dist/config/validate.d.ts.map +1 -1
  285. package/dist/config/validate.js +15 -71
  286. package/dist/database/combineQueries.d.ts +1 -1
  287. package/dist/database/combineQueries.d.ts.map +1 -1
  288. package/dist/database/combineQueries.js +4 -14
  289. package/dist/database/createDatabaseAdapter.d.ts +1 -1
  290. package/dist/database/createDatabaseAdapter.d.ts.map +1 -1
  291. package/dist/database/createDatabaseAdapter.js +14 -24
  292. package/dist/database/flattenWhereToOperators.d.ts +1 -1
  293. package/dist/database/flattenWhereToOperators.d.ts.map +1 -1
  294. package/dist/database/flattenWhereToOperators.js +2 -12
  295. package/dist/database/getLocalizedPaths.d.ts +3 -3
  296. package/dist/database/getLocalizedPaths.d.ts.map +1 -1
  297. package/dist/database/getLocalizedPaths.js +7 -22
  298. package/dist/database/migrations/createMigration.d.ts +1 -1
  299. package/dist/database/migrations/createMigration.d.ts.map +1 -1
  300. package/dist/database/migrations/createMigration.js +7 -22
  301. package/dist/database/migrations/getMigrations.d.ts +2 -2
  302. package/dist/database/migrations/getMigrations.d.ts.map +1 -1
  303. package/dist/database/migrations/getMigrations.js +4 -12
  304. package/dist/database/migrations/migrate.d.ts +1 -1
  305. package/dist/database/migrations/migrate.d.ts.map +1 -1
  306. package/dist/database/migrations/migrate.js +12 -22
  307. package/dist/database/migrations/migrateDown.d.ts +1 -1
  308. package/dist/database/migrations/migrateDown.d.ts.map +1 -1
  309. package/dist/database/migrations/migrateDown.js +12 -22
  310. package/dist/database/migrations/migrateRefresh.d.ts +1 -1
  311. package/dist/database/migrations/migrateRefresh.d.ts.map +1 -1
  312. package/dist/database/migrations/migrateRefresh.js +16 -24
  313. package/dist/database/migrations/migrateReset.d.ts +1 -1
  314. package/dist/database/migrations/migrateReset.d.ts.map +1 -1
  315. package/dist/database/migrations/migrateReset.js +12 -22
  316. package/dist/database/migrations/migrateStatus.d.ts +1 -1
  317. package/dist/database/migrations/migrateStatus.d.ts.map +1 -1
  318. package/dist/database/migrations/migrateStatus.js +8 -18
  319. package/dist/database/migrations/migrationTemplate.js +2 -12
  320. package/dist/database/migrations/migrationsCollection.d.ts +1 -1
  321. package/dist/database/migrations/migrationsCollection.d.ts.map +1 -1
  322. package/dist/database/migrations/migrationsCollection.js +2 -12
  323. package/dist/database/migrations/readMigrationFiles.d.ts +2 -2
  324. package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
  325. package/dist/database/migrations/readMigrationFiles.js +17 -25
  326. package/dist/database/queryValidation/types.d.ts +2 -2
  327. package/dist/database/queryValidation/types.d.ts.map +1 -1
  328. package/dist/database/queryValidation/types.js +2 -5
  329. package/dist/database/queryValidation/validateQueryPaths.d.ts +5 -5
  330. package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
  331. package/dist/database/queryValidation/validateQueryPaths.js +13 -28
  332. package/dist/database/queryValidation/validateSearchParams.d.ts +5 -5
  333. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  334. package/dist/database/queryValidation/validateSearchParams.js +17 -25
  335. package/dist/database/types.d.ts +11 -9
  336. package/dist/database/types.d.ts.map +1 -1
  337. package/dist/database/types.js +2 -5
  338. package/dist/email/build.d.ts +2 -2
  339. package/dist/email/build.d.ts.map +1 -1
  340. package/dist/email/build.js +11 -26
  341. package/dist/email/defaults.d.ts +1 -1
  342. package/dist/email/defaults.d.ts.map +1 -1
  343. package/dist/email/defaults.js +2 -12
  344. package/dist/email/mockHandler.d.ts +2 -2
  345. package/dist/email/mockHandler.d.ts.map +1 -1
  346. package/dist/email/mockHandler.js +8 -23
  347. package/dist/email/sendEmail.js +2 -12
  348. package/dist/email/types.js +2 -5
  349. package/dist/errors/APIError.js +4 -19
  350. package/dist/errors/AuthenticationError.d.ts +1 -1
  351. package/dist/errors/AuthenticationError.d.ts.map +1 -1
  352. package/dist/errors/AuthenticationError.js +7 -22
  353. package/dist/errors/DuplicateCollection.d.ts +1 -1
  354. package/dist/errors/DuplicateCollection.d.ts.map +1 -1
  355. package/dist/errors/DuplicateCollection.js +4 -19
  356. package/dist/errors/DuplicateFieldName.d.ts +1 -1
  357. package/dist/errors/DuplicateFieldName.d.ts.map +1 -1
  358. package/dist/errors/DuplicateFieldName.js +4 -19
  359. package/dist/errors/DuplicateGlobal.d.ts +2 -2
  360. package/dist/errors/DuplicateGlobal.d.ts.map +1 -1
  361. package/dist/errors/DuplicateGlobal.js +4 -19
  362. package/dist/errors/ErrorDeletingFile.d.ts +1 -1
  363. package/dist/errors/ErrorDeletingFile.d.ts.map +1 -1
  364. package/dist/errors/ErrorDeletingFile.js +7 -22
  365. package/dist/errors/FileUploadError.d.ts +1 -1
  366. package/dist/errors/FileUploadError.d.ts.map +1 -1
  367. package/dist/errors/FileUploadError.js +7 -22
  368. package/dist/errors/Forbidden.d.ts +1 -1
  369. package/dist/errors/Forbidden.d.ts.map +1 -1
  370. package/dist/errors/Forbidden.js +7 -22
  371. package/dist/errors/InvalidConfiguration.d.ts +1 -1
  372. package/dist/errors/InvalidConfiguration.d.ts.map +1 -1
  373. package/dist/errors/InvalidConfiguration.js +6 -21
  374. package/dist/errors/InvalidFieldName.d.ts +2 -2
  375. package/dist/errors/InvalidFieldName.d.ts.map +1 -1
  376. package/dist/errors/InvalidFieldName.js +4 -19
  377. package/dist/errors/InvalidFieldRelationship.d.ts +2 -2
  378. package/dist/errors/InvalidFieldRelationship.d.ts.map +1 -1
  379. package/dist/errors/InvalidFieldRelationship.js +4 -19
  380. package/dist/errors/InvalidSchema.d.ts +1 -1
  381. package/dist/errors/InvalidSchema.d.ts.map +1 -1
  382. package/dist/errors/InvalidSchema.js +6 -21
  383. package/dist/errors/LockedAuth.d.ts +1 -1
  384. package/dist/errors/LockedAuth.d.ts.map +1 -1
  385. package/dist/errors/LockedAuth.js +7 -22
  386. package/dist/errors/MissingCollectionLabel.d.ts +1 -1
  387. package/dist/errors/MissingCollectionLabel.d.ts.map +1 -1
  388. package/dist/errors/MissingCollectionLabel.js +4 -19
  389. package/dist/errors/MissingFieldInputOptions.d.ts +2 -2
  390. package/dist/errors/MissingFieldInputOptions.d.ts.map +1 -1
  391. package/dist/errors/MissingFieldInputOptions.js +4 -19
  392. package/dist/errors/MissingFieldType.d.ts +2 -2
  393. package/dist/errors/MissingFieldType.d.ts.map +1 -1
  394. package/dist/errors/MissingFieldType.js +6 -21
  395. package/dist/errors/MissingFile.d.ts +1 -1
  396. package/dist/errors/MissingFile.d.ts.map +1 -1
  397. package/dist/errors/MissingFile.js +7 -22
  398. package/dist/errors/NotFound.d.ts +1 -1
  399. package/dist/errors/NotFound.d.ts.map +1 -1
  400. package/dist/errors/NotFound.js +7 -22
  401. package/dist/errors/QueryError.d.ts +1 -1
  402. package/dist/errors/QueryError.d.ts.map +1 -1
  403. package/dist/errors/QueryError.js +6 -21
  404. package/dist/errors/TimestampsRequired.d.ts +2 -2
  405. package/dist/errors/TimestampsRequired.d.ts.map +1 -1
  406. package/dist/errors/TimestampsRequired.js +4 -19
  407. package/dist/errors/UnathorizedError.d.ts +1 -1
  408. package/dist/errors/UnathorizedError.d.ts.map +1 -1
  409. package/dist/errors/UnathorizedError.js +7 -22
  410. package/dist/errors/ValidationError.d.ts +1 -1
  411. package/dist/errors/ValidationError.d.ts.map +1 -1
  412. package/dist/errors/ValidationError.js +8 -23
  413. package/dist/errors/index.d.ts +19 -19
  414. package/dist/errors/index.d.ts.map +1 -1
  415. package/dist/errors/index.js +20 -94
  416. package/dist/errors/types.d.ts +1 -1
  417. package/dist/errors/types.d.ts.map +1 -1
  418. package/dist/errors/types.js +2 -19
  419. package/dist/exports/auth.d.ts +5 -5
  420. package/dist/exports/auth.d.ts.map +1 -1
  421. package/dist/exports/auth.js +5 -44
  422. package/dist/exports/components/utilities.js +0 -1
  423. package/dist/exports/config.d.ts +10 -10
  424. package/dist/exports/config.d.ts.map +1 -1
  425. package/dist/exports/config.js +10 -59
  426. package/dist/exports/database.d.ts +22 -22
  427. package/dist/exports/database.d.ts.map +1 -1
  428. package/dist/exports/database.js +21 -108
  429. package/dist/exports/errors.d.ts +1 -1
  430. package/dist/exports/errors.d.ts.map +1 -1
  431. package/dist/exports/errors.js +2 -68
  432. package/dist/exports/fields/index.d.ts +2 -2
  433. package/dist/exports/fields/index.d.ts.map +1 -1
  434. package/dist/exports/fields/index.js +3 -26
  435. package/dist/exports/fields/validations.d.ts +1 -1
  436. package/dist/exports/fields/validations.d.ts.map +1 -1
  437. package/dist/exports/fields/validations.js +2 -19
  438. package/dist/exports/operations.d.ts +28 -28
  439. package/dist/exports/operations.d.ts.map +1 -1
  440. package/dist/exports/operations.js +29 -125
  441. package/dist/exports/types.d.ts +11 -11
  442. package/dist/exports/types.d.ts.map +1 -1
  443. package/dist/exports/types.js +4 -74
  444. package/dist/exports/utilities.d.ts +28 -27
  445. package/dist/exports/utilities.d.ts.map +1 -1
  446. package/dist/exports/utilities.js +29 -141
  447. package/dist/exports/versions.d.ts +9 -9
  448. package/dist/exports/versions.d.ts.map +1 -1
  449. package/dist/exports/versions.js +9 -45
  450. package/dist/fields/baseFields/baseBlockFields.d.ts +1 -1
  451. package/dist/fields/baseFields/baseBlockFields.d.ts.map +1 -1
  452. package/dist/fields/baseFields/baseBlockFields.js +6 -16
  453. package/dist/fields/baseFields/baseIDField.d.ts +1 -1
  454. package/dist/fields/baseFields/baseIDField.d.ts.map +1 -1
  455. package/dist/fields/baseFields/baseIDField.js +7 -21
  456. package/dist/fields/config/sanitize.d.ts +2 -2
  457. package/dist/fields/config/sanitize.d.ts.map +1 -1
  458. package/dist/fields/config/sanitize.js +28 -43
  459. package/dist/fields/config/sanitize.spec.js +25 -29
  460. package/dist/fields/config/schema.js +336 -431
  461. package/dist/fields/config/types.d.ts +5 -6
  462. package/dist/fields/config/types.d.ts.map +1 -1
  463. package/dist/fields/config/types.js +15 -69
  464. package/dist/fields/getDefaultValue.d.ts +1 -1
  465. package/dist/fields/getDefaultValue.d.ts.map +1 -1
  466. package/dist/fields/getDefaultValue.js +2 -12
  467. package/dist/fields/hooks/afterChange/index.d.ts +3 -3
  468. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  469. package/dist/fields/hooks/afterChange/index.js +6 -16
  470. package/dist/fields/hooks/afterChange/promise.d.ts +4 -4
  471. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  472. package/dist/fields/hooks/afterChange/promise.js +14 -22
  473. package/dist/fields/hooks/afterChange/traverseFields.d.ts +4 -4
  474. package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
  475. package/dist/fields/hooks/afterChange/traverseFields.js +4 -14
  476. package/dist/fields/hooks/afterRead/index.d.ts +3 -3
  477. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  478. package/dist/fields/hooks/afterRead/index.js +6 -16
  479. package/dist/fields/hooks/afterRead/promise.d.ts +4 -4
  480. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  481. package/dist/fields/hooks/afterRead/promise.js +28 -38
  482. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts +2 -2
  483. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  484. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +5 -15
  485. package/dist/fields/hooks/afterRead/traverseFields.d.ts +4 -4
  486. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  487. package/dist/fields/hooks/afterRead/traverseFields.js +4 -14
  488. package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.js +2 -12
  489. package/dist/fields/hooks/beforeChange/getExistingRowDoc.js +2 -12
  490. package/dist/fields/hooks/beforeChange/index.d.ts +3 -4
  491. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  492. package/dist/fields/hooks/beforeChange/index.js +8 -18
  493. package/dist/fields/hooks/beforeChange/promise.d.ts +4 -5
  494. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  495. package/dist/fields/hooks/beforeChange/promise.js +26 -35
  496. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +4 -5
  497. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  498. package/dist/fields/hooks/beforeChange/traverseFields.js +4 -14
  499. package/dist/fields/hooks/beforeValidate/index.d.ts +3 -3
  500. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  501. package/dist/fields/hooks/beforeValidate/index.js +6 -16
  502. package/dist/fields/hooks/beforeValidate/promise.d.ts +4 -4
  503. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  504. package/dist/fields/hooks/beforeValidate/promise.js +30 -39
  505. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +4 -4
  506. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  507. package/dist/fields/hooks/beforeValidate/traverseFields.js +4 -14
  508. package/dist/fields/mergeBaseFields.d.ts +1 -1
  509. package/dist/fields/mergeBaseFields.d.ts.map +1 -1
  510. package/dist/fields/mergeBaseFields.js +8 -23
  511. package/dist/fields/sortableFieldTypes.js +2 -12
  512. package/dist/fields/validations.d.ts +6 -6
  513. package/dist/fields/validations.d.ts.map +1 -1
  514. package/dist/fields/validations.js +31 -97
  515. package/dist/fields/validations.spec.js +93 -87
  516. package/dist/globals/config/sanitize.d.ts +2 -2
  517. package/dist/globals/config/sanitize.d.ts.map +1 -1
  518. package/dist/globals/config/sanitize.js +23 -34
  519. package/dist/globals/config/schema.js +55 -70
  520. package/dist/globals/config/types.d.ts +11 -11
  521. package/dist/globals/config/types.d.ts.map +1 -1
  522. package/dist/globals/config/types.js +2 -5
  523. package/dist/globals/operations/docAccess.d.ts +3 -3
  524. package/dist/globals/operations/docAccess.d.ts.map +1 -1
  525. package/dist/globals/operations/docAccess.js +12 -22
  526. package/dist/globals/operations/findOne.d.ts +2 -2
  527. package/dist/globals/operations/findOne.d.ts.map +1 -1
  528. package/dist/globals/operations/findOne.js +14 -29
  529. package/dist/globals/operations/findVersionByID.d.ts +3 -3
  530. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  531. package/dist/globals/operations/findVersionByID.js +18 -33
  532. package/dist/globals/operations/findVersions.d.ts +4 -5
  533. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  534. package/dist/globals/operations/findVersions.js +20 -35
  535. package/dist/globals/operations/local/findOne.d.ts +2 -4
  536. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  537. package/dist/globals/operations/local/findOne.js +11 -21
  538. package/dist/globals/operations/local/findVersionByID.d.ts +3 -5
  539. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  540. package/dist/globals/operations/local/findVersionByID.js +9 -19
  541. package/dist/globals/operations/local/findVersions.d.ts +4 -6
  542. package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
  543. package/dist/globals/operations/local/findVersions.js +9 -19
  544. package/dist/globals/operations/local/index.d.ts +5 -5
  545. package/dist/globals/operations/local/index.d.ts.map +1 -1
  546. package/dist/globals/operations/local/index.js +12 -27
  547. package/dist/globals/operations/local/restoreVersion.d.ts +2 -4
  548. package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
  549. package/dist/globals/operations/local/restoreVersion.js +9 -19
  550. package/dist/globals/operations/local/update.d.ts +2 -4
  551. package/dist/globals/operations/local/update.d.ts.map +1 -1
  552. package/dist/globals/operations/local/update.js +9 -19
  553. package/dist/globals/operations/restoreVersion.d.ts +3 -3
  554. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  555. package/dist/globals/operations/restoreVersion.js +16 -31
  556. package/dist/globals/operations/update.d.ts +9 -9
  557. package/dist/globals/operations/update.d.ts.map +1 -1
  558. package/dist/globals/operations/update.js +23 -38
  559. package/dist/index.d.ts +29 -29
  560. package/dist/index.d.ts.map +1 -1
  561. package/dist/index.js +50 -71
  562. package/dist/localization/middleware.js +2 -12
  563. package/dist/localization/sanitizeFallbackLocale.js +2 -12
  564. package/dist/preferences/deleteUserPreferences.d.ts +3 -3
  565. package/dist/preferences/deleteUserPreferences.d.ts.map +1 -1
  566. package/dist/preferences/deleteUserPreferences.js +2 -12
  567. package/dist/preferences/operations/delete.d.ts +2 -2
  568. package/dist/preferences/operations/delete.d.ts.map +1 -1
  569. package/dist/preferences/operations/delete.js +10 -25
  570. package/dist/preferences/operations/findOne.d.ts +2 -2
  571. package/dist/preferences/operations/findOne.d.ts.map +1 -1
  572. package/dist/preferences/operations/findOne.js +2 -12
  573. package/dist/preferences/operations/update.d.ts +1 -1
  574. package/dist/preferences/operations/update.d.ts.map +1 -1
  575. package/dist/preferences/operations/update.js +8 -23
  576. package/dist/preferences/preferencesCollection.d.ts +2 -2
  577. package/dist/preferences/preferencesCollection.d.ts.map +1 -1
  578. package/dist/preferences/preferencesCollection.js +8 -18
  579. package/dist/preferences/requestHandlers/delete.d.ts +1 -1
  580. package/dist/preferences/requestHandlers/delete.d.ts.map +1 -1
  581. package/dist/preferences/requestHandlers/delete.js +6 -21
  582. package/dist/preferences/requestHandlers/findOne.d.ts +1 -1
  583. package/dist/preferences/requestHandlers/findOne.d.ts.map +1 -1
  584. package/dist/preferences/requestHandlers/findOne.js +6 -21
  585. package/dist/preferences/requestHandlers/update.d.ts +1 -1
  586. package/dist/preferences/requestHandlers/update.d.ts.map +1 -1
  587. package/dist/preferences/requestHandlers/update.js +6 -21
  588. package/dist/preferences/types.d.ts +2 -2
  589. package/dist/preferences/types.d.ts.map +1 -1
  590. package/dist/preferences/types.js +2 -5
  591. package/dist/translations/extractTranslations.js +4 -14
  592. package/dist/translations/getLocalI18n.d.ts +1 -1
  593. package/dist/translations/getLocalI18n.d.ts.map +1 -1
  594. package/dist/translations/getLocalI18n.js +5 -15
  595. package/dist/types/constants.js +2 -12
  596. package/dist/types/index.d.ts +8 -6
  597. package/dist/types/index.d.ts.map +1 -1
  598. package/dist/types/index.js +2 -12
  599. package/dist/uploads/canResizeImage.js +2 -12
  600. package/dist/uploads/cropImage.d.ts +3 -7
  601. package/dist/uploads/cropImage.d.ts.map +1 -1
  602. package/dist/uploads/cropImage.js +4 -28
  603. package/dist/uploads/deleteAssociatedFiles.d.ts +4 -4
  604. package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
  605. package/dist/uploads/deleteAssociatedFiles.js +11 -26
  606. package/dist/uploads/docWithFilenameExists.d.ts +1 -1
  607. package/dist/uploads/docWithFilenameExists.d.ts.map +1 -1
  608. package/dist/uploads/docWithFilenameExists.js +2 -12
  609. package/dist/uploads/fileExists.js +4 -19
  610. package/dist/uploads/formatFilesize.js +2 -12
  611. package/dist/uploads/generateFileData.d.ts +4 -4
  612. package/dist/uploads/generateFileData.d.ts.map +1 -1
  613. package/dist/uploads/generateFileData.js +42 -55
  614. package/dist/uploads/getBaseFields.d.ts +3 -3
  615. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  616. package/dist/uploads/getBaseFields.js +6 -16
  617. package/dist/uploads/getExternalFile.d.ts +2 -2
  618. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  619. package/dist/uploads/getExternalFile.js +5 -15
  620. package/dist/uploads/getFileByPath.d.ts +1 -1
  621. package/dist/uploads/getFileByPath.d.ts.map +1 -1
  622. package/dist/uploads/getFileByPath.js +11 -25
  623. package/dist/uploads/getImageSize.d.ts +3 -3
  624. package/dist/uploads/getImageSize.d.ts.map +1 -1
  625. package/dist/uploads/getImageSize.js +14 -22
  626. package/dist/uploads/getSafeFilename.d.ts +1 -1
  627. package/dist/uploads/getSafeFilename.d.ts.map +1 -1
  628. package/dist/uploads/getSafeFilename.js +8 -23
  629. package/dist/uploads/imageResizer.d.ts +6 -5
  630. package/dist/uploads/imageResizer.d.ts.map +1 -1
  631. package/dist/uploads/imageResizer.js +29 -44
  632. package/dist/uploads/isImage.js +2 -12
  633. package/dist/uploads/mimeTypeValidator.d.ts +1 -1
  634. package/dist/uploads/mimeTypeValidator.d.ts.map +1 -1
  635. package/dist/uploads/mimeTypeValidator.js +2 -12
  636. package/dist/uploads/mimeTypeValidator.spec.js +11 -15
  637. package/dist/uploads/saveBufferToFile.d.ts +1 -1
  638. package/dist/uploads/saveBufferToFile.js +6 -21
  639. package/dist/uploads/types.d.ts +8 -4
  640. package/dist/uploads/types.d.ts.map +1 -1
  641. package/dist/uploads/types.js +2 -5
  642. package/dist/uploads/unlinkTempFiles.d.ts +3 -3
  643. package/dist/uploads/unlinkTempFiles.d.ts.map +1 -1
  644. package/dist/uploads/unlinkTempFiles.js +9 -22
  645. package/dist/uploads/uploadFiles.d.ts +3 -3
  646. package/dist/uploads/uploadFiles.d.ts.map +1 -1
  647. package/dist/uploads/uploadFiles.js +6 -21
  648. package/dist/utilities/checkDuplicateCollections.d.ts +1 -1
  649. package/dist/utilities/checkDuplicateCollections.d.ts.map +1 -1
  650. package/dist/utilities/checkDuplicateCollections.js +4 -14
  651. package/dist/utilities/combineMerge.js +4 -19
  652. package/dist/utilities/commitTransaction.d.ts +1 -1
  653. package/dist/utilities/commitTransaction.d.ts.map +1 -1
  654. package/dist/utilities/commitTransaction.js +4 -12
  655. package/dist/utilities/configToJSONSchema.d.ts +12 -6
  656. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  657. package/dist/utilities/configToJSONSchema.js +82 -97
  658. package/dist/utilities/configToJSONSchema.spec.js +5 -9
  659. package/dist/utilities/convertData.js +3 -23
  660. package/dist/utilities/createArrayFromCommaDelineated.js +2 -12
  661. package/dist/utilities/createLocalReq.d.ts +3 -3
  662. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  663. package/dist/utilities/createLocalReq.js +7 -16
  664. package/dist/utilities/deepCopyObject.js +2 -12
  665. package/dist/utilities/deepMerge.js +2 -12
  666. package/dist/utilities/fieldSchemaToJSON.d.ts +2 -2
  667. package/dist/utilities/fieldSchemaToJSON.d.ts.map +1 -1
  668. package/dist/utilities/fieldSchemaToJSON.js +2 -12
  669. package/dist/utilities/flattenTopLevelFields.d.ts +1 -1
  670. package/dist/utilities/flattenTopLevelFields.d.ts.map +1 -1
  671. package/dist/utilities/flattenTopLevelFields.js +6 -16
  672. package/dist/utilities/formatLabels.d.ts +2 -1
  673. package/dist/utilities/formatLabels.d.ts.map +1 -1
  674. package/dist/utilities/formatLabels.js +10 -70
  675. package/dist/utilities/formatLabels.spec.js +8 -12
  676. package/dist/utilities/getCSSVariable.js +2 -12
  677. package/dist/utilities/getCollectionIDFieldTypes.d.ts +13 -0
  678. package/dist/utilities/getCollectionIDFieldTypes.d.ts.map +1 -0
  679. package/dist/utilities/getCollectionIDFieldTypes.js +16 -0
  680. package/dist/utilities/getEntityPolicies.d.ts +4 -4
  681. package/dist/utilities/getEntityPolicies.d.ts.map +1 -1
  682. package/dist/utilities/getEntityPolicies.js +4 -14
  683. package/dist/utilities/getIDType.d.ts +2 -2
  684. package/dist/utilities/getIDType.d.ts.map +1 -1
  685. package/dist/utilities/getIDType.js +2 -12
  686. package/dist/utilities/getObjectDotNotation.js +2 -12
  687. package/dist/utilities/getUniqueListBy.js +2 -12
  688. package/dist/utilities/initTransaction.d.ts +1 -1
  689. package/dist/utilities/initTransaction.d.ts.map +1 -1
  690. package/dist/utilities/initTransaction.js +5 -12
  691. package/dist/utilities/isEntityHidden.d.ts +2 -2
  692. package/dist/utilities/isEntityHidden.d.ts.map +1 -1
  693. package/dist/utilities/isEntityHidden.js +2 -12
  694. package/dist/utilities/isNumber.js +2 -12
  695. package/dist/utilities/isPlainObject.d.ts +2 -0
  696. package/dist/utilities/isPlainObject.d.ts.map +1 -0
  697. package/dist/utilities/isPlainObject.js +25 -0
  698. package/dist/utilities/isValidID.d.ts.map +1 -1
  699. package/dist/utilities/isValidID.js +6 -20
  700. package/dist/utilities/isolateObjectProperty.js +2 -12
  701. package/dist/utilities/killTransaction.d.ts +1 -1
  702. package/dist/utilities/killTransaction.d.ts.map +1 -1
  703. package/dist/utilities/killTransaction.js +4 -12
  704. package/dist/utilities/logger.d.ts +6 -6
  705. package/dist/utilities/logger.d.ts.map +1 -1
  706. package/dist/utilities/logger.js +18 -37
  707. package/dist/utilities/mapAsync.js +2 -12
  708. package/dist/utilities/overwriteMerge.js +2 -12
  709. package/dist/utilities/parseCookies.js +4 -14
  710. package/dist/utilities/sanitizeInternalFields.js +2 -12
  711. package/dist/utilities/setsAreEqual.js +2 -12
  712. package/dist/utilities/telemetry/events/adminInit.d.ts +2 -2
  713. package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
  714. package/dist/utilities/telemetry/events/adminInit.js +7 -17
  715. package/dist/utilities/telemetry/events/serverInit.d.ts +1 -1
  716. package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
  717. package/dist/utilities/telemetry/events/serverInit.js +4 -14
  718. package/dist/utilities/telemetry/index.d.ts +3 -3
  719. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  720. package/dist/utilities/telemetry/index.js +23 -41
  721. package/dist/utilities/telemetry/oneWayHash.js +4 -14
  722. package/dist/utilities/timestamp.js +2 -12
  723. package/dist/utilities/toKebabCase.js +2 -12
  724. package/dist/utilities/wait.js +2 -12
  725. package/dist/utilities/wordBoundariesRegex.js +3 -13
  726. package/dist/versions/baseFields.d.ts +1 -1
  727. package/dist/versions/baseFields.d.ts.map +1 -1
  728. package/dist/versions/baseFields.js +7 -25
  729. package/dist/versions/buildCollectionFields.d.ts +2 -2
  730. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  731. package/dist/versions/buildCollectionFields.js +2 -12
  732. package/dist/versions/buildGlobalFields.d.ts +2 -2
  733. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  734. package/dist/versions/buildGlobalFields.js +12 -22
  735. package/dist/versions/deleteCollectionVersions.d.ts +3 -3
  736. package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
  737. package/dist/versions/deleteCollectionVersions.js +2 -12
  738. package/dist/versions/drafts/appendVersionToQueryKey.d.ts +1 -1
  739. package/dist/versions/drafts/appendVersionToQueryKey.d.ts.map +1 -1
  740. package/dist/versions/drafts/appendVersionToQueryKey.js +2 -12
  741. package/dist/versions/drafts/getQueryDraftsSort.js +2 -12
  742. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts +4 -4
  743. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  744. package/dist/versions/drafts/replaceWithDraftIfAvailable.js +12 -27
  745. package/dist/versions/enforceMaxVersions.d.ts +3 -3
  746. package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
  747. package/dist/versions/enforceMaxVersions.js +2 -12
  748. package/dist/versions/getLatestCollectionVersion.d.ts +3 -3
  749. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  750. package/dist/versions/getLatestCollectionVersion.js +4 -14
  751. package/dist/versions/getLatestGlobalVersion.d.ts +3 -3
  752. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  753. package/dist/versions/getLatestGlobalVersion.js +5 -15
  754. package/dist/versions/getVersionsModelName.d.ts +2 -2
  755. package/dist/versions/getVersionsModelName.d.ts.map +1 -1
  756. package/dist/versions/getVersionsModelName.js +2 -12
  757. package/dist/versions/saveVersion.d.ts +4 -4
  758. package/dist/versions/saveVersion.d.ts.map +1 -1
  759. package/dist/versions/saveVersion.js +8 -23
  760. package/dist/versions/types.js +2 -5
  761. package/errors.d.ts +1 -1
  762. package/errors.js +2 -68
  763. package/graphql.d.ts +3 -0
  764. package/graphql.js +27 -0
  765. package/operations.d.ts +28 -28
  766. package/operations.js +29 -125
  767. package/package.json +10 -7
  768. package/types.d.ts +11 -11
  769. package/types.js +4 -74
  770. package/utilities.d.ts +28 -27
  771. package/utilities.js +29 -141
  772. package/versions.d.ts +9 -9
  773. package/versions.js +9 -45
  774. package/.eslintrc.js +0 -58
  775. package/dist/bundlers/mocks/db-mongodb.js +0 -3
  776. package/dist/bundlers/mocks/db-postgres.js +0 -13
  777. package/dist/bundlers/mocks/dotENV.js +0 -15
  778. package/dist/bundlers/mocks/emptyModule.js +0 -13
  779. package/dist/bundlers/mocks/fileMock.js +0 -13
  780. package/dist/bundlers/types.d.ts +0 -8
  781. package/dist/bundlers/types.d.ts.map +0 -1
  782. package/dist/bundlers/types.js +0 -6
  783. package/dist/config/clientFiles.d.ts +0 -2
  784. package/dist/config/clientFiles.d.ts.map +0 -1
  785. package/dist/config/clientFiles.js +0 -23
  786. package/dist/express/middleware/errorHandler.d.ts +0 -2
  787. package/dist/express/middleware/errorHandler.d.ts.map +0 -1
  788. package/dist/express/middleware/errorHandler.js +0 -3
  789. package/dist/express/middleware/index.d.ts +0 -2
  790. package/dist/express/middleware/index.d.ts.map +0 -1
  791. package/dist/express/middleware/index.js +0 -3
  792. package/dist/globals/config/build.d.ts +0 -2
  793. package/dist/globals/config/build.d.ts.map +0 -1
  794. package/dist/globals/config/build.js +0 -3
  795. package/dist/globals/graphql/resolvers/docAccess.d.ts +0 -2
  796. package/dist/globals/graphql/resolvers/docAccess.d.ts.map +0 -1
  797. package/dist/globals/graphql/resolvers/docAccess.js +0 -3
@@ -1,14 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return _default;
9
- }
10
- });
11
- const _default = [
1
+ export default [
12
2
  'text',
13
3
  'textarea',
14
4
  'code',
@@ -20,4 +10,4 @@ const _default = [
20
10
  'date'
21
11
  ];
22
12
 
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maWVsZHMvc29ydGFibGVGaWVsZFR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFsndGV4dCcsICd0ZXh0YXJlYScsICdjb2RlJywgJ2pzb24nLCAnbnVtYmVyJywgJ2VtYWlsJywgJ3JhZGlvJywgJ3NlbGVjdCcsICdkYXRlJ11cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OytCQUFBOzs7ZUFBQTs7O01BQUEsV0FBZTtJQUFDO0lBQVE7SUFBWTtJQUFRO0lBQVE7SUFBVTtJQUFTO0lBQVM7SUFBVTtDQUFPIn0=
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maWVsZHMvc29ydGFibGVGaWVsZFR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFsndGV4dCcsICd0ZXh0YXJlYScsICdjb2RlJywgJ2pzb24nLCAnbnVtYmVyJywgJ2VtYWlsJywgJ3JhZGlvJywgJ3NlbGVjdCcsICdkYXRlJ11cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlO0lBQUM7SUFBUTtJQUFZO0lBQVE7SUFBUTtJQUFVO0lBQVM7SUFBUztJQUFVO0NBQU8sQ0FBQSJ9
@@ -1,4 +1,4 @@
1
- import type { ArrayField, BlockField, CheckboxField, CodeField, DateField, EmailField, JSONField, NumberField, PointField, RadioField, RelationshipField, RelationshipValue, RichTextField, SelectField, TextField, TextareaField, UploadField, Validate } from './config/types';
1
+ import type { ArrayField, BlockField, CheckboxField, CodeField, DateField, EmailField, JSONField, NumberField, PointField, RadioField, RelationshipField, RelationshipValue, RichTextField, SelectField, TextField, TextareaField, UploadField, Validate } from './config/types.js';
2
2
  export declare const text: Validate<string | string[], unknown, unknown, TextField>;
3
3
  export declare const password: Validate<string, unknown, unknown, TextField>;
4
4
  export declare const email: Validate<string, unknown, unknown, EmailField>;
@@ -25,7 +25,7 @@ declare const _default: {
25
25
  code: Validate<string, unknown, unknown, CodeField>;
26
26
  date: Validate<Date, unknown, unknown, DateField>;
27
27
  email: Validate<string, unknown, unknown, EmailField>;
28
- json: Validate<string, unknown, unknown, Omit<import("./config/types").FieldBase, "admin"> & {
28
+ json: Validate<string, unknown, unknown, Omit<import("./config/types.js").FieldBase, "admin"> & {
29
29
  admin?: {
30
30
  className?: string;
31
31
  components?: {
@@ -33,8 +33,8 @@ declare const _default: {
33
33
  Field?: import("react").ComponentType<any>;
34
34
  Filter?: import("react").ComponentType<any>;
35
35
  };
36
- condition?: import("./config/types").Condition<any, any>;
37
- description?: import("../exports/types").Description;
36
+ condition?: import("./config/types.js").Condition<any, any>;
37
+ description?: import("../exports/types.js").Description;
38
38
  disableBulkEdit?: boolean;
39
39
  disabled?: boolean;
40
40
  hidden?: boolean;
@@ -44,8 +44,8 @@ declare const _default: {
44
44
  width?: string;
45
45
  } & {
46
46
  components?: {
47
- Error?: import("react").ComponentType<import("../exports/types").ErrorProps>;
48
- Label?: import("react").ComponentType<import("../exports/types").LabelProps>;
47
+ Error?: import("react").ComponentType<import("../exports/types.js").ErrorProps>;
48
+ Label?: import("react").ComponentType<import("../exports/types.js").LabelProps>;
49
49
  };
50
50
  editorOptions?: import("monaco-editor").editor.IStandaloneEditorConstructionOptions;
51
51
  };
@@ -1 +1 @@
1
- {"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../src/fields/validations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,SAAS,EACT,aAAa,EACb,WAAW,EACX,QAAQ,EACT,MAAM,gBAAgB,CAAA;AAOvB,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAkDzE,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CA8BlE,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAShE,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CA6BtE,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAS9D,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAavF,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CASvE,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAkB5D,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAOtE,CAAA;AAgCD,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAgC7E,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAKnE,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAKlE,CAAA;AA0HD,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAqBnE,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,QAAQ,CACjC,iBAAiB,EACjB,OAAO,EACP,OAAO,EACP,iBAAiB,CA8ElB,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAmCnE,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAYjE,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAqB5F,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,wBAkBC"}
1
+ {"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../src/fields/validations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,SAAS,EACT,aAAa,EACb,WAAW,EACX,QAAQ,EACT,MAAM,mBAAmB,CAAA;AAO1B,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAkDzE,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CA8BlE,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAShE,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CA6BtE,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAS9D,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAavF,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CASvE,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAkB5D,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAOtE,CAAA;AAgCD,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAgC7E,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAKnE,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAKlE,CAAA;AA0HD,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAqBnE,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,QAAQ,CACjC,iBAAiB,EACjB,OAAO,EACP,OAAO,EACP,iBAAiB,CA8ElB,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAmCnE,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAYjE,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAqB5F,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,wBAkBC"}
@@ -1,74 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: all[name]
9
- });
10
- }
11
- _export(exports, {
12
- array: function() {
13
- return array;
14
- },
15
- blocks: function() {
16
- return blocks;
17
- },
18
- checkbox: function() {
19
- return checkbox;
20
- },
21
- code: function() {
22
- return code;
23
- },
24
- date: function() {
25
- return date;
26
- },
27
- default: function() {
28
- return _default;
29
- },
30
- email: function() {
31
- return email;
32
- },
33
- json: function() {
34
- return json;
35
- },
36
- number: function() {
37
- return number;
38
- },
39
- password: function() {
40
- return password;
41
- },
42
- point: function() {
43
- return point;
44
- },
45
- radio: function() {
46
- return radio;
47
- },
48
- relationship: function() {
49
- return relationship;
50
- },
51
- richText: function() {
52
- return richText;
53
- },
54
- select: function() {
55
- return select;
56
- },
57
- text: function() {
58
- return text;
59
- },
60
- textarea: function() {
61
- return textarea;
62
- },
63
- upload: function() {
64
- return upload;
65
- }
66
- });
67
- const _getIDType = require("../utilities/getIDType");
68
- const _isNumber = require("../utilities/isNumber");
69
- const _isValidID = require("../utilities/isValidID");
70
- const _types = require("./config/types");
71
- const text = (value, { hasMany, maxLength: fieldMaxLength, maxRows, minLength, minRows, req: { payload: { config }, t }, required })=>{
1
+ import { getIDType } from '../utilities/getIDType.js';
2
+ import { isNumber } from '../utilities/isNumber.js';
3
+ import { isValidID } from '../utilities/isValidID.js';
4
+ import { fieldAffectsData } from './config/types.js';
5
+ export const text = (value, { hasMany, maxLength: fieldMaxLength, maxRows, minLength, minRows, req: { payload: { config }, t }, required })=>{
72
6
  let maxLength;
73
7
  if (!required) {
74
8
  if (!value) return true;
@@ -111,7 +45,7 @@ const text = (value, { hasMany, maxLength: fieldMaxLength, maxRows, minLength, m
111
45
  }
112
46
  return true;
113
47
  };
114
- const password = (value, { maxLength: fieldMaxLength, minLength, req: { payload: { config }, t }, required })=>{
48
+ export const password = (value, { maxLength: fieldMaxLength, minLength, req: { payload: { config }, t }, required })=>{
115
49
  let maxLength;
116
50
  if (typeof config?.defaultMaxTextLength === 'number') maxLength = config.defaultMaxTextLength;
117
51
  if (typeof fieldMaxLength === 'number') maxLength = fieldMaxLength;
@@ -130,13 +64,13 @@ const password = (value, { maxLength: fieldMaxLength, minLength, req: { payload:
130
64
  }
131
65
  return true;
132
66
  };
133
- const email = (value, { req: { t }, required })=>{
67
+ export const email = (value, { req: { t }, required })=>{
134
68
  if (value && !/\S[^\s@]*@\S+\.\S+/.test(value) || !value && required) {
135
69
  return t('validation:emailAddress');
136
70
  }
137
71
  return true;
138
72
  };
139
- const textarea = (value, { maxLength: fieldMaxLength, minLength, req: { payload: { config }, t }, required })=>{
73
+ export const textarea = (value, { maxLength: fieldMaxLength, minLength, req: { payload: { config }, t }, required })=>{
140
74
  let maxLength;
141
75
  if (typeof config?.defaultMaxTextLength === 'number') maxLength = config.defaultMaxTextLength;
142
76
  if (typeof fieldMaxLength === 'number') maxLength = fieldMaxLength;
@@ -155,13 +89,13 @@ const textarea = (value, { maxLength: fieldMaxLength, minLength, req: { payload:
155
89
  }
156
90
  return true;
157
91
  };
158
- const code = (value, { req: { t }, required })=>{
92
+ export const code = (value, { req: { t }, required })=>{
159
93
  if (required && value === undefined) {
160
94
  return t('validation:required');
161
95
  }
162
96
  return true;
163
97
  };
164
- const json = (value, { jsonError, req: { t }, required })=>{
98
+ export const json = (value, { jsonError, req: { t }, required })=>{
165
99
  if (required && !value) {
166
100
  return t('validation:required');
167
101
  }
@@ -170,13 +104,13 @@ const json = (value, { jsonError, req: { t }, required })=>{
170
104
  }
171
105
  return true;
172
106
  };
173
- const checkbox = (value, { req: { t }, required })=>{
107
+ export const checkbox = (value, { req: { t }, required })=>{
174
108
  if (value && typeof value !== 'boolean' || required && typeof value !== 'boolean') {
175
109
  return t('validation:trueOrFalse');
176
110
  }
177
111
  return true;
178
112
  };
179
- const date = (value, { req: { t }, required })=>{
113
+ export const date = (value, { req: { t }, required })=>{
180
114
  if (value && !isNaN(Date.parse(value.toString()))) {
181
115
  /* eslint-disable-line */ return true;
182
116
  }
@@ -190,7 +124,7 @@ const date = (value, { req: { t }, required })=>{
190
124
  }
191
125
  return true;
192
126
  };
193
- const richText = async (value, options)=>{
127
+ export const richText = async (value, options)=>{
194
128
  const editor = options?.editor;
195
129
  return editor.validate(value, options);
196
130
  };
@@ -218,7 +152,7 @@ const validateArrayLength = (value, options)=>{
218
152
  }
219
153
  return true;
220
154
  };
221
- const number = (value, { hasMany, max, maxRows, min, minRows, req: { t }, required })=>{
155
+ export const number = (value, { hasMany, max, maxRows, min, minRows, req: { t }, required })=>{
222
156
  if (hasMany === true) {
223
157
  const lengthValidationResult = validateArrayLength(value, {
224
158
  maxRows,
@@ -228,7 +162,7 @@ const number = (value, { hasMany, max, maxRows, min, minRows, req: { t }, requir
228
162
  });
229
163
  if (typeof lengthValidationResult === 'string') return lengthValidationResult;
230
164
  }
231
- if (!value && !(0, _isNumber.isNumber)(value)) {
165
+ if (!value && !isNumber(value)) {
232
166
  // if no value is present, validate based on required
233
167
  if (required) return t('validation:required');
234
168
  if (!required) return true;
@@ -237,7 +171,7 @@ const number = (value, { hasMany, max, maxRows, min, minRows, req: { t }, requir
237
171
  value
238
172
  ];
239
173
  for (const number of numbersToValidate){
240
- if (!(0, _isNumber.isNumber)(number)) return t('validation:enterNumber');
174
+ if (!isNumber(number)) return t('validation:enterNumber');
241
175
  const numberValue = parseFloat(number);
242
176
  if (typeof max === 'number' && numberValue > max) {
243
177
  return t('validation:greaterThanMax', {
@@ -256,7 +190,7 @@ const number = (value, { hasMany, max, maxRows, min, minRows, req: { t }, requir
256
190
  }
257
191
  return true;
258
192
  };
259
- const array = (value, { maxRows, minRows, req: { t }, required })=>{
193
+ export const array = (value, { maxRows, minRows, req: { t }, required })=>{
260
194
  return validateArrayLength(value, {
261
195
  maxRows,
262
196
  minRows,
@@ -264,7 +198,7 @@ const array = (value, { maxRows, minRows, req: { t }, required })=>{
264
198
  t
265
199
  });
266
200
  };
267
- const blocks = (value, { maxRows, minRows, req: { t }, required })=>{
201
+ export const blocks = (value, { maxRows, minRows, req: { t }, required })=>{
268
202
  return validateArrayLength(value, {
269
203
  maxRows,
270
204
  minRows,
@@ -364,20 +298,20 @@ const validateFilterOptions = async (value, { id, data, filterOptions, relationT
364
298
  }
365
299
  return true;
366
300
  };
367
- const upload = (value, options)=>{
301
+ export const upload = (value, options)=>{
368
302
  if (!value && options.required) {
369
303
  return options?.req?.t('validation:required');
370
304
  }
371
305
  if (typeof value !== 'undefined' && value !== null) {
372
- const idField = options?.req?.payload?.config?.collections?.find((collection)=>collection.slug === options.relationTo)?.fields?.find((field)=>(0, _types.fieldAffectsData)(field) && field.name === 'id');
373
- const type = (0, _getIDType.getIDType)(idField, options?.req?.payload?.db?.defaultIDType);
374
- if (!(0, _isValidID.isValidID)(value, type)) {
306
+ const idField = options?.req?.payload?.config?.collections?.find((collection)=>collection.slug === options.relationTo)?.fields?.find((field)=>fieldAffectsData(field) && field.name === 'id');
307
+ const type = getIDType(idField, options?.req?.payload?.db?.defaultIDType);
308
+ if (!isValidID(value, type)) {
375
309
  return options.req?.t('validation:validUploadID');
376
310
  }
377
311
  }
378
312
  return validateFilterOptions(value, options);
379
313
  };
380
- const relationship = async (value, options)=>{
314
+ export const relationship = async (value, options)=>{
381
315
  const { maxRows, minRows, relationTo, req: { payload, payload: { config }, t }, required } = options;
382
316
  if ((!value || Array.isArray(value) && value.length === 0) && required) {
383
317
  return t('validation:required');
@@ -417,9 +351,9 @@ const relationship = async (value, options)=>{
417
351
  requestedID = val.value;
418
352
  }
419
353
  if (requestedID === null) return false;
420
- const idField = config?.collections?.find((collection)=>collection.slug === collectionSlug)?.fields?.find((field)=>(0, _types.fieldAffectsData)(field) && field.name === 'id');
421
- const type = (0, _getIDType.getIDType)(idField, payload?.db?.defaultIDType);
422
- return !(0, _isValidID.isValidID)(requestedID, type);
354
+ const idField = config?.collections?.find((collection)=>collection.slug === collectionSlug)?.fields?.find((field)=>fieldAffectsData(field) && field.name === 'id');
355
+ const type = getIDType(idField, payload?.db?.defaultIDType);
356
+ return !isValidID(requestedID, type);
423
357
  });
424
358
  if (invalidRelationships.length > 0) {
425
359
  return `This relationship field has the following invalid relationships: ${invalidRelationships.map((err, invalid)=>{
@@ -429,7 +363,7 @@ const relationship = async (value, options)=>{
429
363
  }
430
364
  return validateFilterOptions(value, options);
431
365
  };
432
- const select = (value, { hasMany, options, req: { t }, required })=>{
366
+ export const select = (value, { hasMany, options, req: { t }, required })=>{
433
367
  if (Array.isArray(value) && value.some((input)=>!options.some((option)=>option === input || typeof option !== 'string' && option?.value === input))) {
434
368
  return t('validation:invalidSelection');
435
369
  }
@@ -441,14 +375,14 @@ const select = (value, { hasMany, options, req: { t }, required })=>{
441
375
  }
442
376
  return true;
443
377
  };
444
- const radio = (value, { options, req: { t }, required })=>{
378
+ export const radio = (value, { options, req: { t }, required })=>{
445
379
  if (value) {
446
380
  const valueMatchesOption = options.some((option)=>option === value || typeof option !== 'string' && option.value === value);
447
381
  return valueMatchesOption || t('validation:invalidSelection');
448
382
  }
449
383
  return required ? t('validation:required') : true;
450
384
  };
451
- const point = (value = [
385
+ export const point = (value = [
452
386
  '',
453
387
  ''
454
388
  ], { req: { t }, required })=>{
@@ -462,7 +396,7 @@ const point = (value = [
462
396
  }
463
397
  return true;
464
398
  };
465
- const _default = {
399
+ export default {
466
400
  array,
467
401
  blocks,
468
402
  checkbox,
@@ -482,4 +416,4 @@ const _default = {
482
416
  upload
483
417
  };
484
418
 
485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maWVsZHMvdmFsaWRhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSaWNoVGV4dEFkYXB0ZXIsIFdoZXJlIH0gZnJvbSAnLi4vZXhwb3J0cy90eXBlcydcbmltcG9ydCB0eXBlIHtcbiAgQXJyYXlGaWVsZCxcbiAgQmxvY2tGaWVsZCxcbiAgQ2hlY2tib3hGaWVsZCxcbiAgQ29kZUZpZWxkLFxuICBEYXRlRmllbGQsXG4gIEVtYWlsRmllbGQsXG4gIEpTT05GaWVsZCxcbiAgTnVtYmVyRmllbGQsXG4gIFBvaW50RmllbGQsXG4gIFJhZGlvRmllbGQsXG4gIFJlbGF0aW9uc2hpcEZpZWxkLFxuICBSZWxhdGlvbnNoaXBWYWx1ZSxcbiAgUmljaFRleHRGaWVsZCxcbiAgU2VsZWN0RmllbGQsXG4gIFRleHRGaWVsZCxcbiAgVGV4dGFyZWFGaWVsZCxcbiAgVXBsb2FkRmllbGQsXG4gIFZhbGlkYXRlLFxufSBmcm9tICcuL2NvbmZpZy90eXBlcydcblxuaW1wb3J0IHsgZ2V0SURUeXBlIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2dldElEVHlwZSdcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2lzTnVtYmVyJ1xuaW1wb3J0IHsgaXNWYWxpZElEIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2lzVmFsaWRJRCdcbmltcG9ydCB7IGZpZWxkQWZmZWN0c0RhdGEgfSBmcm9tICcuL2NvbmZpZy90eXBlcydcblxuZXhwb3J0IGNvbnN0IHRleHQ6IFZhbGlkYXRlPHN0cmluZyB8IHN0cmluZ1tdLCB1bmtub3duLCB1bmtub3duLCBUZXh0RmllbGQ+ID0gKFxuICB2YWx1ZSxcbiAge1xuICAgIGhhc01hbnksXG4gICAgbWF4TGVuZ3RoOiBmaWVsZE1heExlbmd0aCxcbiAgICBtYXhSb3dzLFxuICAgIG1pbkxlbmd0aCxcbiAgICBtaW5Sb3dzLFxuICAgIHJlcToge1xuICAgICAgcGF5bG9hZDogeyBjb25maWcgfSxcbiAgICAgIHQsXG4gICAgfSxcbiAgICByZXF1aXJlZCxcbiAgfSxcbikgPT4ge1xuICBsZXQgbWF4TGVuZ3RoOiBudW1iZXJcblxuICBpZiAoIXJlcXVpcmVkKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChoYXNNYW55ID09PSB0cnVlKSB7XG4gICAgY29uc3QgbGVuZ3RoVmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlQXJyYXlMZW5ndGgodmFsdWUsIHsgbWF4Um93cywgbWluUm93cywgcmVxdWlyZWQsIHQgfSlcbiAgICBpZiAodHlwZW9mIGxlbmd0aFZhbGlkYXRpb25SZXN1bHQgPT09ICdzdHJpbmcnKSByZXR1cm4gbGVuZ3RoVmFsaWRhdGlvblJlc3VsdFxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb25maWc/LmRlZmF1bHRNYXhUZXh0TGVuZ3RoID09PSAnbnVtYmVyJykgbWF4TGVuZ3RoID0gY29uZmlnLmRlZmF1bHRNYXhUZXh0TGVuZ3RoXG4gIGlmICh0eXBlb2YgZmllbGRNYXhMZW5ndGggPT09ICdudW1iZXInKSBtYXhMZW5ndGggPSBmaWVsZE1heExlbmd0aFxuXG4gIGNvbnN0IHN0cmluZ3NUb1ZhbGlkYXRlOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdXG5cbiAgZm9yIChjb25zdCBzdHJpbmdWYWx1ZSBvZiBzdHJpbmdzVG9WYWxpZGF0ZSkge1xuICAgIGNvbnN0IGxlbmd0aCA9IHN0cmluZ1ZhbHVlPy5sZW5ndGggfHwgMFxuXG4gICAgaWYgKHR5cGVvZiBtYXhMZW5ndGggPT09ICdudW1iZXInICYmIGxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246c2hvcnRlclRoYW5NYXgnLCB7IGxhYmVsOiB0KCd2YWx1ZScpLCBtYXhMZW5ndGgsIHN0cmluZ1ZhbHVlIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW5MZW5ndGggPT09ICdudW1iZXInICYmIGxlbmd0aCA8IG1pbkxlbmd0aCkge1xuICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246bG9uZ2VyVGhhbk1pbicsIHsgbGFiZWw6IHQoJ3ZhbHVlJyksIG1pbkxlbmd0aCwgc3RyaW5nVmFsdWUgfSlcbiAgICB9XG4gIH1cblxuICBpZiAocmVxdWlyZWQpIHtcbiAgICBpZiAoISh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB8fCB2YWx1ZT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IHBhc3N3b3JkOiBWYWxpZGF0ZTxzdHJpbmcsIHVua25vd24sIHVua25vd24sIFRleHRGaWVsZD4gPSAoXG4gIHZhbHVlLFxuICB7XG4gICAgbWF4TGVuZ3RoOiBmaWVsZE1heExlbmd0aCxcbiAgICBtaW5MZW5ndGgsXG4gICAgcmVxOiB7XG4gICAgICBwYXlsb2FkOiB7IGNvbmZpZyB9LFxuICAgICAgdCxcbiAgICB9LFxuICAgIHJlcXVpcmVkLFxuICB9LFxuKSA9PiB7XG4gIGxldCBtYXhMZW5ndGg6IG51bWJlclxuXG4gIGlmICh0eXBlb2YgY29uZmlnPy5kZWZhdWx0TWF4VGV4dExlbmd0aCA9PT0gJ251bWJlcicpIG1heExlbmd0aCA9IGNvbmZpZy5kZWZhdWx0TWF4VGV4dExlbmd0aFxuICBpZiAodHlwZW9mIGZpZWxkTWF4TGVuZ3RoID09PSAnbnVtYmVyJykgbWF4TGVuZ3RoID0gZmllbGRNYXhMZW5ndGhcblxuICBpZiAodmFsdWUgJiYgbWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnNob3J0ZXJUaGFuTWF4JywgeyBtYXhMZW5ndGggfSlcbiAgfVxuXG4gIGlmICh2YWx1ZSAmJiBtaW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246bG9uZ2VyVGhhbk1pbicsIHsgbWluTGVuZ3RoIH0pXG4gIH1cblxuICBpZiAocmVxdWlyZWQgJiYgIXZhbHVlKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IGVtYWlsOiBWYWxpZGF0ZTxzdHJpbmcsIHVua25vd24sIHVua25vd24sIEVtYWlsRmllbGQ+ID0gKFxuICB2YWx1ZSxcbiAgeyByZXE6IHsgdCB9LCByZXF1aXJlZCB9LFxuKSA9PiB7XG4gIGlmICgodmFsdWUgJiYgIS9cXFNbXlxcc0BdKkBcXFMrXFwuXFxTKy8udGVzdCh2YWx1ZSkpIHx8ICghdmFsdWUgJiYgcmVxdWlyZWQpKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246ZW1haWxBZGRyZXNzJylcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCB0ZXh0YXJlYTogVmFsaWRhdGU8c3RyaW5nLCB1bmtub3duLCB1bmtub3duLCBUZXh0YXJlYUZpZWxkPiA9IChcbiAgdmFsdWUsXG4gIHtcbiAgICBtYXhMZW5ndGg6IGZpZWxkTWF4TGVuZ3RoLFxuICAgIG1pbkxlbmd0aCxcbiAgICByZXE6IHtcbiAgICAgIHBheWxvYWQ6IHsgY29uZmlnIH0sXG4gICAgICB0LFxuICAgIH0sXG4gICAgcmVxdWlyZWQsXG4gIH0sXG4pID0+IHtcbiAgbGV0IG1heExlbmd0aDogbnVtYmVyXG5cbiAgaWYgKHR5cGVvZiBjb25maWc/LmRlZmF1bHRNYXhUZXh0TGVuZ3RoID09PSAnbnVtYmVyJykgbWF4TGVuZ3RoID0gY29uZmlnLmRlZmF1bHRNYXhUZXh0TGVuZ3RoXG4gIGlmICh0eXBlb2YgZmllbGRNYXhMZW5ndGggPT09ICdudW1iZXInKSBtYXhMZW5ndGggPSBmaWVsZE1heExlbmd0aFxuICBpZiAodmFsdWUgJiYgbWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnNob3J0ZXJUaGFuTWF4JywgeyBtYXhMZW5ndGggfSlcbiAgfVxuXG4gIGlmICh2YWx1ZSAmJiBtaW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246bG9uZ2VyVGhhbk1pbicsIHsgbWluTGVuZ3RoIH0pXG4gIH1cblxuICBpZiAocmVxdWlyZWQgJiYgIXZhbHVlKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IGNvZGU6IFZhbGlkYXRlPHN0cmluZywgdW5rbm93biwgdW5rbm93biwgQ29kZUZpZWxkPiA9IChcbiAgdmFsdWUsXG4gIHsgcmVxOiB7IHQgfSwgcmVxdWlyZWQgfSxcbikgPT4ge1xuICBpZiAocmVxdWlyZWQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJylcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCBqc29uOiBWYWxpZGF0ZTxzdHJpbmcsIHVua25vd24sIHVua25vd24sIEpTT05GaWVsZCAmIHsganNvbkVycm9yPzogc3RyaW5nIH0+ID0gKFxuICB2YWx1ZSxcbiAgeyBqc29uRXJyb3IsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0sXG4pID0+IHtcbiAgaWYgKHJlcXVpcmVkICYmICF2YWx1ZSkge1xuICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJylcbiAgfVxuXG4gIGlmIChqc29uRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOmludmFsaWRJbnB1dCcpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgY29uc3QgY2hlY2tib3g6IFZhbGlkYXRlPGJvb2xlYW4sIHVua25vd24sIHVua25vd24sIENoZWNrYm94RmllbGQ+ID0gKFxuICB2YWx1ZSxcbiAgeyByZXE6IHsgdCB9LCByZXF1aXJlZCB9LFxuKSA9PiB7XG4gIGlmICgodmFsdWUgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHx8IChyZXF1aXJlZCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykpIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjp0cnVlT3JGYWxzZScpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgY29uc3QgZGF0ZTogVmFsaWRhdGU8RGF0ZSwgdW5rbm93biwgdW5rbm93biwgRGF0ZUZpZWxkPiA9IChcbiAgdmFsdWUsXG4gIHsgcmVxOiB7IHQgfSwgcmVxdWlyZWQgfSxcbikgPT4ge1xuICBpZiAodmFsdWUgJiYgIWlzTmFOKERhdGUucGFyc2UodmFsdWUudG9TdHJpbmcoKSkpKSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUtbGluZSAqL1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAodmFsdWUpIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpub3RWYWxpZERhdGUnLCB7IHZhbHVlIH0pXG4gIH1cblxuICBpZiAocmVxdWlyZWQpIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgY29uc3QgcmljaFRleHQ6IFZhbGlkYXRlPG9iamVjdCwgdW5rbm93biwgdW5rbm93biwgUmljaFRleHRGaWVsZD4gPSBhc3luYyAoXG4gIHZhbHVlLFxuICBvcHRpb25zLFxuKSA9PiB7XG4gIGNvbnN0IGVkaXRvcjogUmljaFRleHRBZGFwdGVyID0gb3B0aW9ucz8uZWRpdG9yXG5cbiAgcmV0dXJuIGVkaXRvci52YWxpZGF0ZSh2YWx1ZSwgb3B0aW9ucylcbn1cblxuY29uc3QgdmFsaWRhdGVBcnJheUxlbmd0aCA9IChcbiAgdmFsdWUsXG4gIG9wdGlvbnM6IHtcbiAgICBtYXhSb3dzPzogbnVtYmVyXG4gICAgbWluUm93cz86IG51bWJlclxuICAgIHJlcXVpcmVkPzogYm9vbGVhblxuICAgIHQ6IChrZXk6IHN0cmluZywgb3B0aW9ucz86IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nIH0pID0+IHN0cmluZ1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IHsgbWF4Um93cywgbWluUm93cywgcmVxdWlyZWQsIHQgfSA9IG9wdGlvbnNcblxuICBjb25zdCBhcnJheUxlbmd0aCA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubGVuZ3RoIDogMFxuXG4gIGlmICghcmVxdWlyZWQgJiYgYXJyYXlMZW5ndGggPT09IDApIHJldHVybiB0cnVlXG5cbiAgaWYgKG1pblJvd3MgJiYgYXJyYXlMZW5ndGggPCBtaW5Sb3dzKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZXNBdExlYXN0JywgeyBjb3VudDogbWluUm93cywgbGFiZWw6IHQoJ2dlbmVyYWw6cm93cycpIH0pXG4gIH1cblxuICBpZiAobWF4Um93cyAmJiBhcnJheUxlbmd0aCA+IG1heFJvd3MpIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlc05vTW9yZVRoYW4nLCB7IGNvdW50OiBtYXhSb3dzLCBsYWJlbDogdCgnZ2VuZXJhbDpyb3dzJykgfSlcbiAgfVxuXG4gIGlmIChyZXF1aXJlZCAmJiAhYXJyYXlMZW5ndGgpIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlc0F0TGVhc3QnLCB7IGNvdW50OiAxLCBsYWJlbDogdCgnZ2VuZXJhbDpyb3cnKSB9KVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IG51bWJlcjogVmFsaWRhdGU8bnVtYmVyIHwgbnVtYmVyW10sIHVua25vd24sIHVua25vd24sIE51bWJlckZpZWxkPiA9IChcbiAgdmFsdWUsXG4gIHsgaGFzTWFueSwgbWF4LCBtYXhSb3dzLCBtaW4sIG1pblJvd3MsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0sXG4pID0+IHtcbiAgaWYgKGhhc01hbnkgPT09IHRydWUpIHtcbiAgICBjb25zdCBsZW5ndGhWYWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVBcnJheUxlbmd0aCh2YWx1ZSwgeyBtYXhSb3dzLCBtaW5Sb3dzLCByZXF1aXJlZCwgdCB9KVxuICAgIGlmICh0eXBlb2YgbGVuZ3RoVmFsaWRhdGlvblJlc3VsdCA9PT0gJ3N0cmluZycpIHJldHVybiBsZW5ndGhWYWxpZGF0aW9uUmVzdWx0XG4gIH1cblxuICBpZiAoIXZhbHVlICYmICFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAvLyBpZiBubyB2YWx1ZSBpcyBwcmVzZW50LCB2YWxpZGF0ZSBiYXNlZCBvbiByZXF1aXJlZFxuICAgIGlmIChyZXF1aXJlZCkgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKVxuICAgIGlmICghcmVxdWlyZWQpIHJldHVybiB0cnVlXG4gIH1cblxuICBjb25zdCBudW1iZXJzVG9WYWxpZGF0ZTogbnVtYmVyW10gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXVxuXG4gIGZvciAoY29uc3QgbnVtYmVyIG9mIG51bWJlcnNUb1ZhbGlkYXRlKSB7XG4gICAgaWYgKCFpc051bWJlcihudW1iZXIpKSByZXR1cm4gdCgndmFsaWRhdGlvbjplbnRlck51bWJlcicpXG5cbiAgICBjb25zdCBudW1iZXJWYWx1ZSA9IHBhcnNlRmxvYXQobnVtYmVyIGFzIHVua25vd24gYXMgc3RyaW5nKVxuXG4gICAgaWYgKHR5cGVvZiBtYXggPT09ICdudW1iZXInICYmIG51bWJlclZhbHVlID4gbWF4KSB7XG4gICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpncmVhdGVyVGhhbk1heCcsIHsgbGFiZWw6IHQoJ2dlbmVyYWw6dmFsdWUnKSwgbWF4LCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWluID09PSAnbnVtYmVyJyAmJiBudW1iZXJWYWx1ZSA8IG1pbikge1xuICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246bGVzc1RoYW5NaW4nLCB7IGxhYmVsOiB0KCdnZW5lcmFsOnZhbHVlJyksIG1pbiwgdmFsdWUgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgY29uc3QgYXJyYXk6IFZhbGlkYXRlPHVua25vd25bXSwgdW5rbm93biwgdW5rbm93biwgQXJyYXlGaWVsZD4gPSAoXG4gIHZhbHVlLFxuICB7IG1heFJvd3MsIG1pblJvd3MsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0sXG4pID0+IHtcbiAgcmV0dXJuIHZhbGlkYXRlQXJyYXlMZW5ndGgodmFsdWUsIHsgbWF4Um93cywgbWluUm93cywgcmVxdWlyZWQsIHQgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGJsb2NrczogVmFsaWRhdGU8dW5rbm93biwgdW5rbm93biwgdW5rbm93biwgQmxvY2tGaWVsZD4gPSAoXG4gIHZhbHVlLFxuICB7IG1heFJvd3MsIG1pblJvd3MsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0sXG4pID0+IHtcbiAgcmV0dXJuIHZhbGlkYXRlQXJyYXlMZW5ndGgodmFsdWUsIHsgbWF4Um93cywgbWluUm93cywgcmVxdWlyZWQsIHQgfSlcbn1cblxuY29uc3QgdmFsaWRhdGVGaWx0ZXJPcHRpb25zOiBWYWxpZGF0ZTxcbiAgdW5rbm93bixcbiAgdW5rbm93bixcbiAgdW5rbm93bixcbiAgUmVsYXRpb25zaGlwRmllbGQgfCBVcGxvYWRGaWVsZFxuPiA9IGFzeW5jIChcbiAgdmFsdWUsXG4gIHsgaWQsIGRhdGEsIGZpbHRlck9wdGlvbnMsIHJlbGF0aW9uVG8sIHJlcSwgcmVxOiB7IHBheWxvYWQsIHQsIHVzZXIgfSwgc2libGluZ0RhdGEgfSxcbikgPT4ge1xuICBpZiAodHlwZW9mIGZpbHRlck9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlKSB7XG4gICAgY29uc3Qgb3B0aW9uczoge1xuICAgICAgW2NvbGxlY3Rpb246IHN0cmluZ106IChudW1iZXIgfCBzdHJpbmcpW11cbiAgICB9ID0ge31cblxuICAgIGNvbnN0IGZhbHNlQ29sbGVjdGlvbnM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBjb2xsZWN0aW9ucyA9IHR5cGVvZiByZWxhdGlvblRvID09PSAnc3RyaW5nJyA/IFtyZWxhdGlvblRvXSA6IHJlbGF0aW9uVG9cbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjb2xsZWN0aW9ucy5tYXAoYXN5bmMgKGNvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgb3B0aW9uRmlsdGVyID1cbiAgICAgICAgICAgIHR5cGVvZiBmaWx0ZXJPcHRpb25zID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgID8gYXdhaXQgZmlsdGVyT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgc2libGluZ0RhdGEsXG4gICAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogZmlsdGVyT3B0aW9uc1xuXG4gICAgICAgICAgaWYgKG9wdGlvbkZpbHRlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgb3B0aW9uRmlsdGVyID0gbnVsbFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHZhbHVlSURzOiAobnVtYmVyIHwgc3RyaW5nKVtdID0gW11cblxuICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWw/LnZhbHVlKSB7XG4gICAgICAgICAgICAgIHZhbHVlSURzLnB1c2godmFsLnZhbHVlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgdmFsdWVJRHMucHVzaCh2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmICh2YWx1ZUlEcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaW5kV2hlcmU6IFdoZXJlID0ge1xuICAgICAgICAgICAgICBhbmQ6IFt7IGlkOiB7IGluOiB2YWx1ZUlEcyB9IH1dLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9uRmlsdGVyICYmIG9wdGlvbkZpbHRlciAhPT0gdHJ1ZSkgZmluZFdoZXJlLmFuZC5wdXNoKG9wdGlvbkZpbHRlcilcblxuICAgICAgICAgICAgaWYgKG9wdGlvbkZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgZmFsc2VDb2xsZWN0aW9ucy5wdXNoKGNvbGxlY3Rpb24pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGByZXFgIG9taXR0ZWQgdG8gcHJldmVudCB0cmFuc2FjdGlvbiBlcnJvcnMgZnJvbSBhYm9ydGluZyB0aGUgZW50aXJlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXlsb2FkLmZpbmQoe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICAgICAgbGltaXQ6IDAsXG4gICAgICAgICAgICAgIHBhZ2luYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgICB3aGVyZTogZmluZFdoZXJlLFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgb3B0aW9uc1tjb2xsZWN0aW9uXSA9IHJlc3VsdC5kb2NzLm1hcCgoZG9jKSA9PiBkb2MuaWQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnNbY29sbGVjdGlvbl0gPSBbXVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVxLnBheWxvYWQubG9nZ2VyLmVycm9yKHtcbiAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgIG1zZzogYEVycm9yIHZhbGlkYXRpbmcgZmlsdGVyIG9wdGlvbnMgZm9yIGNvbGxlY3Rpb24gJHtjb2xsZWN0aW9ufWAsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBvcHRpb25zW2NvbGxlY3Rpb25dID0gW11cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKVxuXG4gICAgY29uc3QgaW52YWxpZFJlbGF0aW9uc2hpcHMgPSB2YWx1ZXMuZmlsdGVyKCh2YWwpID0+IHtcbiAgICAgIGxldCBjb2xsZWN0aW9uOiBzdHJpbmdcbiAgICAgIGxldCByZXF1ZXN0ZWRJRDogbnVtYmVyIHwgc3RyaW5nXG5cbiAgICAgIGlmICh0eXBlb2YgcmVsYXRpb25UbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29sbGVjdGlvbiA9IHJlbGF0aW9uVG9cblxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXF1ZXN0ZWRJRCA9IHZhbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbD8ucmVsYXRpb25Ubykge1xuICAgICAgICBjb2xsZWN0aW9uID0gdmFsLnJlbGF0aW9uVG9cbiAgICAgICAgcmVxdWVzdGVkSUQgPSB2YWwudmFsdWVcbiAgICAgIH1cblxuICAgICAgaWYgKGZhbHNlQ29sbGVjdGlvbnMuZmluZCgoc2x1ZykgPT4gcmVsYXRpb25UbyA9PT0gc2x1ZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wdGlvbnNbY29sbGVjdGlvbl0uaW5kZXhPZihyZXF1ZXN0ZWRJRCkgPT09IC0xXG4gICAgfSlcblxuICAgIGlmIChpbnZhbGlkUmVsYXRpb25zaGlwcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFJlbGF0aW9uc2hpcHMucmVkdWNlKChlcnIsIGludmFsaWQsIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIGAke2Vycn0gJHtKU09OLnN0cmluZ2lmeShpbnZhbGlkKX0ke1xuICAgICAgICAgIGludmFsaWRSZWxhdGlvbnNoaXBzLmxlbmd0aCA9PT0gaSArIDEgPyAnLCcgOiAnJ1xuICAgICAgICB9IGBcbiAgICAgIH0sIHQoJ3ZhbGlkYXRpb246aW52YWxpZFNlbGVjdGlvbnMnKSkgYXMgc3RyaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCB1cGxvYWQ6IFZhbGlkYXRlPHVua25vd24sIHVua25vd24sIHVua25vd24sIFVwbG9hZEZpZWxkPiA9IChcbiAgdmFsdWU6IHN0cmluZyxcbiAgb3B0aW9ucyxcbikgPT4ge1xuICBpZiAoIXZhbHVlICYmIG9wdGlvbnMucmVxdWlyZWQpIHtcbiAgICByZXR1cm4gb3B0aW9ucz8ucmVxPy50KCd2YWxpZGF0aW9uOnJlcXVpcmVkJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgY29uc3QgaWRGaWVsZCA9IG9wdGlvbnM/LnJlcT8ucGF5bG9hZD8uY29uZmlnPy5jb2xsZWN0aW9uc1xuICAgICAgPy5maW5kKChjb2xsZWN0aW9uKSA9PiBjb2xsZWN0aW9uLnNsdWcgPT09IG9wdGlvbnMucmVsYXRpb25UbylcbiAgICAgID8uZmllbGRzPy5maW5kKChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJylcblxuICAgIGNvbnN0IHR5cGUgPSBnZXRJRFR5cGUoaWRGaWVsZCwgb3B0aW9ucz8ucmVxPy5wYXlsb2FkPy5kYj8uZGVmYXVsdElEVHlwZSlcblxuICAgIGlmICghaXNWYWxpZElEKHZhbHVlLCB0eXBlKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucmVxPy50KCd2YWxpZGF0aW9uOnZhbGlkVXBsb2FkSUQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZUZpbHRlck9wdGlvbnModmFsdWUsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBjb25zdCByZWxhdGlvbnNoaXA6IFZhbGlkYXRlPFxuICBSZWxhdGlvbnNoaXBWYWx1ZSxcbiAgdW5rbm93bixcbiAgdW5rbm93bixcbiAgUmVsYXRpb25zaGlwRmllbGRcbj4gPSBhc3luYyAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qge1xuICAgIG1heFJvd3MsXG4gICAgbWluUm93cyxcbiAgICByZWxhdGlvblRvLFxuICAgIHJlcToge1xuICAgICAgcGF5bG9hZCxcbiAgICAgIHBheWxvYWQ6IHsgY29uZmlnIH0sXG4gICAgICB0LFxuICAgIH0sXG4gICAgcmVxdWlyZWQsXG4gIH0gPSBvcHRpb25zXG5cbiAgaWYgKCghdmFsdWUgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpICYmIHJlcXVpcmVkKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICBpZiAobWluUm93cyAmJiB2YWx1ZS5sZW5ndGggPCBtaW5Sb3dzKSB7XG4gICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpsZXNzVGhhbk1pbicsIHtcbiAgICAgICAgbGFiZWw6IHQoJ2dlbmVyYWw6cm93cycpLFxuICAgICAgICBtaW46IG1pblJvd3MsXG4gICAgICAgIHZhbHVlOiB2YWx1ZS5sZW5ndGgsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChtYXhSb3dzICYmIHZhbHVlLmxlbmd0aCA+IG1heFJvd3MpIHtcbiAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOmdyZWF0ZXJUaGFuTWF4Jywge1xuICAgICAgICBsYWJlbDogdCgnZ2VuZXJhbDpyb3dzJyksXG4gICAgICAgIG1heDogbWF4Um93cyxcbiAgICAgICAgdmFsdWU6IHZhbHVlLmxlbmd0aCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXVxuXG4gICAgY29uc3QgaW52YWxpZFJlbGF0aW9uc2hpcHMgPSB2YWx1ZXMuZmlsdGVyKCh2YWwpID0+IHtcbiAgICAgIGxldCBjb2xsZWN0aW9uU2x1Zzogc3RyaW5nXG4gICAgICBsZXQgcmVxdWVzdGVkSURcblxuICAgICAgaWYgKHR5cGVvZiByZWxhdGlvblRvID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb2xsZWN0aW9uU2x1ZyA9IHJlbGF0aW9uVG9cblxuICAgICAgICAvLyBjdXN0b20gaWRcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgIHJlcXVlc3RlZElEID0gdmFsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsPy5yZWxhdGlvblRvKSB7XG4gICAgICAgIGNvbGxlY3Rpb25TbHVnID0gdmFsLnJlbGF0aW9uVG9cbiAgICAgICAgcmVxdWVzdGVkSUQgPSB2YWwudmFsdWVcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcXVlc3RlZElEID09PSBudWxsKSByZXR1cm4gZmFsc2VcblxuICAgICAgY29uc3QgaWRGaWVsZCA9IGNvbmZpZz8uY29sbGVjdGlvbnNcbiAgICAgICAgPy5maW5kKChjb2xsZWN0aW9uKSA9PiBjb2xsZWN0aW9uLnNsdWcgPT09IGNvbGxlY3Rpb25TbHVnKVxuICAgICAgICA/LmZpZWxkcz8uZmluZCgoZmllbGQpID0+IGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpXG5cbiAgICAgIGNvbnN0IHR5cGUgPSBnZXRJRFR5cGUoaWRGaWVsZCwgcGF5bG9hZD8uZGI/LmRlZmF1bHRJRFR5cGUpXG5cbiAgICAgIHJldHVybiAhaXNWYWxpZElEKHJlcXVlc3RlZElELCB0eXBlKVxuICAgIH0pXG5cbiAgICBpZiAoaW52YWxpZFJlbGF0aW9uc2hpcHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGBUaGlzIHJlbGF0aW9uc2hpcCBmaWVsZCBoYXMgdGhlIGZvbGxvd2luZyBpbnZhbGlkIHJlbGF0aW9uc2hpcHM6ICR7aW52YWxpZFJlbGF0aW9uc2hpcHNcbiAgICAgICAgLm1hcCgoZXJyLCBpbnZhbGlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAke2Vycn0gJHtKU09OLnN0cmluZ2lmeShpbnZhbGlkKX1gXG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcsICcpfWBcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVGaWx0ZXJPcHRpb25zKHZhbHVlLCBvcHRpb25zKVxufVxuXG5leHBvcnQgY29uc3Qgc2VsZWN0OiBWYWxpZGF0ZTx1bmtub3duLCB1bmtub3duLCB1bmtub3duLCBTZWxlY3RGaWVsZD4gPSAoXG4gIHZhbHVlLFxuICB7IGhhc01hbnksIG9wdGlvbnMsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0sXG4pID0+IHtcbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgdmFsdWUuc29tZShcbiAgICAgIChpbnB1dCkgPT5cbiAgICAgICAgIW9wdGlvbnMuc29tZShcbiAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24gPT09IGlucHV0IHx8ICh0eXBlb2Ygb3B0aW9uICE9PSAnc3RyaW5nJyAmJiBvcHRpb24/LnZhbHVlID09PSBpbnB1dCksXG4gICAgICAgICksXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjppbnZhbGlkU2VsZWN0aW9uJylcbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgIW9wdGlvbnMuc29tZShcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbiA9PT0gdmFsdWUgfHwgKHR5cGVvZiBvcHRpb24gIT09ICdzdHJpbmcnICYmIG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpLFxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246aW52YWxpZFNlbGVjdGlvbicpXG4gIH1cblxuICBpZiAoXG4gICAgcmVxdWlyZWQgJiZcbiAgICAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgIChoYXNNYW55ICYmIEFycmF5LmlzQXJyYXkodmFsdWUpICYmICh2YWx1ZSBhcyBbXSk/Lmxlbmd0aCA9PT0gMCkpXG4gICkge1xuICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJylcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCByYWRpbzogVmFsaWRhdGU8dW5rbm93biwgdW5rbm93biwgdW5rbm93biwgUmFkaW9GaWVsZD4gPSAoXG4gIHZhbHVlLFxuICB7IG9wdGlvbnMsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0sXG4pID0+IHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgdmFsdWVNYXRjaGVzT3B0aW9uID0gb3B0aW9ucy5zb21lKFxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uID09PSB2YWx1ZSB8fCAodHlwZW9mIG9wdGlvbiAhPT0gJ3N0cmluZycgJiYgb3B0aW9uLnZhbHVlID09PSB2YWx1ZSksXG4gICAgKVxuICAgIHJldHVybiB2YWx1ZU1hdGNoZXNPcHRpb24gfHwgdCgndmFsaWRhdGlvbjppbnZhbGlkU2VsZWN0aW9uJylcbiAgfVxuXG4gIHJldHVybiByZXF1aXJlZCA/IHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKSA6IHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IHBvaW50OiBWYWxpZGF0ZTxbbnVtYmVyIHwgc3RyaW5nLCBudW1iZXIgfCBzdHJpbmddLCB1bmtub3duLCB1bmtub3duLCBQb2ludEZpZWxkPiA9IChcbiAgdmFsdWUgPSBbJycsICcnXSxcbiAgeyByZXE6IHsgdCB9LCByZXF1aXJlZCB9LFxuKSA9PiB7XG4gIGNvbnN0IGxuZyA9IHBhcnNlRmxvYXQoU3RyaW5nKHZhbHVlWzBdKSlcbiAgY29uc3QgbGF0ID0gcGFyc2VGbG9hdChTdHJpbmcodmFsdWVbMV0pKVxuICBpZiAoXG4gICAgcmVxdWlyZWQgJiZcbiAgICAoKHZhbHVlWzBdICYmIHZhbHVlWzFdICYmIHR5cGVvZiBsbmcgIT09ICdudW1iZXInICYmIHR5cGVvZiBsYXQgIT09ICdudW1iZXInKSB8fFxuICAgICAgTnVtYmVyLmlzTmFOKGxuZykgfHxcbiAgICAgIE51bWJlci5pc05hTihsYXQpIHx8XG4gICAgICAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoICE9PSAyKSlcbiAgKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZXNUd29OdW1iZXJzJylcbiAgfVxuXG4gIGlmICgodmFsdWVbMV0gJiYgTnVtYmVyLmlzTmFOKGxuZykpIHx8ICh2YWx1ZVswXSAmJiBOdW1iZXIuaXNOYU4obGF0KSkpIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjppbnZhbGlkSW5wdXQnKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhcnJheSxcbiAgYmxvY2tzLFxuICBjaGVja2JveCxcbiAgY29kZSxcbiAgZGF0ZSxcbiAgZW1haWwsXG4gIGpzb24sXG4gIG51bWJlcixcbiAgcGFzc3dvcmQsXG4gIHBvaW50LFxuICByYWRpbyxcbiAgcmVsYXRpb25zaGlwLFxuICByaWNoVGV4dCxcbiAgc2VsZWN0LFxuICB0ZXh0LFxuICB0ZXh0YXJlYSxcbiAgdXBsb2FkLFxufVxuIl0sIm5hbWVzIjpbImFycmF5IiwiYmxvY2tzIiwiY2hlY2tib3giLCJjb2RlIiwiZGF0ZSIsImVtYWlsIiwianNvbiIsIm51bWJlciIsInBhc3N3b3JkIiwicG9pbnQiLCJyYWRpbyIsInJlbGF0aW9uc2hpcCIsInJpY2hUZXh0Iiwic2VsZWN0IiwidGV4dCIsInRleHRhcmVhIiwidXBsb2FkIiwidmFsdWUiLCJoYXNNYW55IiwibWF4TGVuZ3RoIiwiZmllbGRNYXhMZW5ndGgiLCJtYXhSb3dzIiwibWluTGVuZ3RoIiwibWluUm93cyIsInJlcSIsInBheWxvYWQiLCJjb25maWciLCJ0IiwicmVxdWlyZWQiLCJsZW5ndGhWYWxpZGF0aW9uUmVzdWx0IiwidmFsaWRhdGVBcnJheUxlbmd0aCIsImRlZmF1bHRNYXhUZXh0TGVuZ3RoIiwic3RyaW5nc1RvVmFsaWRhdGUiLCJBcnJheSIsImlzQXJyYXkiLCJzdHJpbmdWYWx1ZSIsImxlbmd0aCIsImxhYmVsIiwidGVzdCIsInVuZGVmaW5lZCIsImpzb25FcnJvciIsImlzTmFOIiwiRGF0ZSIsInBhcnNlIiwidG9TdHJpbmciLCJvcHRpb25zIiwiZWRpdG9yIiwidmFsaWRhdGUiLCJhcnJheUxlbmd0aCIsImNvdW50IiwibWF4IiwibWluIiwiaXNOdW1iZXIiLCJudW1iZXJzVG9WYWxpZGF0ZSIsIm51bWJlclZhbHVlIiwicGFyc2VGbG9hdCIsInZhbGlkYXRlRmlsdGVyT3B0aW9ucyIsImlkIiwiZGF0YSIsImZpbHRlck9wdGlvbnMiLCJyZWxhdGlvblRvIiwidXNlciIsInNpYmxpbmdEYXRhIiwiZmFsc2VDb2xsZWN0aW9ucyIsImNvbGxlY3Rpb25zIiwidmFsdWVzIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImNvbGxlY3Rpb24iLCJvcHRpb25GaWx0ZXIiLCJ2YWx1ZUlEcyIsImZvckVhY2giLCJ2YWwiLCJwdXNoIiwiZmluZFdoZXJlIiwiYW5kIiwiaW4iLCJyZXN1bHQiLCJmaW5kIiwiZGVwdGgiLCJsaW1pdCIsInBhZ2luYXRpb24iLCJ3aGVyZSIsImRvY3MiLCJkb2MiLCJlcnIiLCJsb2dnZXIiLCJlcnJvciIsIm1zZyIsImludmFsaWRSZWxhdGlvbnNoaXBzIiwiZmlsdGVyIiwicmVxdWVzdGVkSUQiLCJzbHVnIiwiaW5kZXhPZiIsInJlZHVjZSIsImludmFsaWQiLCJpIiwiSlNPTiIsInN0cmluZ2lmeSIsImlkRmllbGQiLCJmaWVsZHMiLCJmaWVsZCIsImZpZWxkQWZmZWN0c0RhdGEiLCJuYW1lIiwidHlwZSIsImdldElEVHlwZSIsImRiIiwiZGVmYXVsdElEVHlwZSIsImlzVmFsaWRJRCIsImNvbGxlY3Rpb25TbHVnIiwiam9pbiIsInNvbWUiLCJpbnB1dCIsIm9wdGlvbiIsInZhbHVlTWF0Y2hlc09wdGlvbiIsImxuZyIsIlN0cmluZyIsImxhdCIsIk51bWJlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUEyUmFBLEtBQUs7ZUFBTEE7O0lBT0FDLE1BQU07ZUFBTkE7O0lBL0dBQyxRQUFRO2VBQVJBOztJQTFCQUMsSUFBSTtlQUFKQTs7SUFxQ0FDLElBQUk7ZUFBSkE7O0lBd1piLE9Ba0JDO2VBbEJEOztJQXZlYUMsS0FBSztlQUFMQTs7SUFxREFDLElBQUk7ZUFBSkE7O0lBcUZBQyxNQUFNO2VBQU5BOztJQTFLQUMsUUFBUTtlQUFSQTs7SUFnZkFDLEtBQUs7ZUFBTEE7O0lBZEFDLEtBQUs7ZUFBTEE7O0lBekhBQyxZQUFZO2VBQVpBOztJQXRPQUMsUUFBUTtlQUFSQTs7SUEwVEFDLE1BQU07ZUFBTkE7O0lBamZBQyxJQUFJO2VBQUpBOztJQStGQUMsUUFBUTtlQUFSQTs7SUF1U0FDLE1BQU07ZUFBTkE7OzsyQkEzWWE7MEJBQ0Q7MkJBQ0M7dUJBQ087QUFFMUIsTUFBTUYsT0FBaUUsQ0FDNUVHLE9BQ0EsRUFDRUMsT0FBTyxFQUNQQyxXQUFXQyxjQUFjLEVBQ3pCQyxPQUFPLEVBQ1BDLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyxLQUFLLEVBQ0hDLFNBQVMsRUFBRUMs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
419
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maWVsZHMvdmFsaWRhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSaWNoVGV4dEFkYXB0ZXIsIFdoZXJlIH0gZnJvbSAnLi4vZXhwb3J0cy90eXBlcy5qcydcbmltcG9ydCB0eXBlIHtcbiAgQXJyYXlGaWVsZCxcbiAgQmxvY2tGaWVsZCxcbiAgQ2hlY2tib3hGaWVsZCxcbiAgQ29kZUZpZWxkLFxuICBEYXRlRmllbGQsXG4gIEVtYWlsRmllbGQsXG4gIEpTT05GaWVsZCxcbiAgTnVtYmVyRmllbGQsXG4gIFBvaW50RmllbGQsXG4gIFJhZGlvRmllbGQsXG4gIFJlbGF0aW9uc2hpcEZpZWxkLFxuICBSZWxhdGlvbnNoaXBWYWx1ZSxcbiAgUmljaFRleHRGaWVsZCxcbiAgU2VsZWN0RmllbGQsXG4gIFRleHRGaWVsZCxcbiAgVGV4dGFyZWFGaWVsZCxcbiAgVXBsb2FkRmllbGQsXG4gIFZhbGlkYXRlLFxufSBmcm9tICcuL2NvbmZpZy90eXBlcy5qcydcblxuaW1wb3J0IHsgZ2V0SURUeXBlIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2dldElEVHlwZS5qcydcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2lzTnVtYmVyLmpzJ1xuaW1wb3J0IHsgaXNWYWxpZElEIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2lzVmFsaWRJRC5qcydcbmltcG9ydCB7IGZpZWxkQWZmZWN0c0RhdGEgfSBmcm9tICcuL2NvbmZpZy90eXBlcy5qcydcblxuZXhwb3J0IGNvbnN0IHRleHQ6IFZhbGlkYXRlPHN0cmluZyB8IHN0cmluZ1tdLCB1bmtub3duLCB1bmtub3duLCBUZXh0RmllbGQ+ID0gKFxuICB2YWx1ZSxcbiAge1xuICAgIGhhc01hbnksXG4gICAgbWF4TGVuZ3RoOiBmaWVsZE1heExlbmd0aCxcbiAgICBtYXhSb3dzLFxuICAgIG1pbkxlbmd0aCxcbiAgICBtaW5Sb3dzLFxuICAgIHJlcToge1xuICAgICAgcGF5bG9hZDogeyBjb25maWcgfSxcbiAgICAgIHQsXG4gICAgfSxcbiAgICByZXF1aXJlZCxcbiAgfSxcbikgPT4ge1xuICBsZXQgbWF4TGVuZ3RoOiBudW1iZXJcblxuICBpZiAoIXJlcXVpcmVkKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChoYXNNYW55ID09PSB0cnVlKSB7XG4gICAgY29uc3QgbGVuZ3RoVmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlQXJyYXlMZW5ndGgodmFsdWUsIHsgbWF4Um93cywgbWluUm93cywgcmVxdWlyZWQsIHQgfSlcbiAgICBpZiAodHlwZW9mIGxlbmd0aFZhbGlkYXRpb25SZXN1bHQgPT09ICdzdHJpbmcnKSByZXR1cm4gbGVuZ3RoVmFsaWRhdGlvblJlc3VsdFxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb25maWc/LmRlZmF1bHRNYXhUZXh0TGVuZ3RoID09PSAnbnVtYmVyJykgbWF4TGVuZ3RoID0gY29uZmlnLmRlZmF1bHRNYXhUZXh0TGVuZ3RoXG4gIGlmICh0eXBlb2YgZmllbGRNYXhMZW5ndGggPT09ICdudW1iZXInKSBtYXhMZW5ndGggPSBmaWVsZE1heExlbmd0aFxuXG4gIGNvbnN0IHN0cmluZ3NUb1ZhbGlkYXRlOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdXG5cbiAgZm9yIChjb25zdCBzdHJpbmdWYWx1ZSBvZiBzdHJpbmdzVG9WYWxpZGF0ZSkge1xuICAgIGNvbnN0IGxlbmd0aCA9IHN0cmluZ1ZhbHVlPy5sZW5ndGggfHwgMFxuXG4gICAgaWYgKHR5cGVvZiBtYXhMZW5ndGggPT09ICdudW1iZXInICYmIGxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246c2hvcnRlclRoYW5NYXgnLCB7IGxhYmVsOiB0KCd2YWx1ZScpLCBtYXhMZW5ndGgsIHN0cmluZ1ZhbHVlIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW5MZW5ndGggPT09ICdudW1iZXInICYmIGxlbmd0aCA8IG1pbkxlbmd0aCkge1xuICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246bG9uZ2VyVGhhbk1pbicsIHsgbGFiZWw6IHQoJ3ZhbHVlJyksIG1pbkxlbmd0aCwgc3RyaW5nVmFsdWUgfSlcbiAgICB9XG4gIH1cblxuICBpZiAocmVxdWlyZWQpIHtcbiAgICBpZiAoISh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB8fCB2YWx1ZT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IHBhc3N3b3JkOiBWYWxpZGF0ZTxzdHJpbmcsIHVua25vd24sIHVua25vd24sIFRleHRGaWVsZD4gPSAoXG4gIHZhbHVlLFxuICB7XG4gICAgbWF4TGVuZ3RoOiBmaWVsZE1heExlbmd0aCxcbiAgICBtaW5MZW5ndGgsXG4gICAgcmVxOiB7XG4gICAgICBwYXlsb2FkOiB7IGNvbmZpZyB9LFxuICAgICAgdCxcbiAgICB9LFxuICAgIHJlcXVpcmVkLFxuICB9LFxuKSA9PiB7XG4gIGxldCBtYXhMZW5ndGg6IG51bWJlclxuXG4gIGlmICh0eXBlb2YgY29uZmlnPy5kZWZhdWx0TWF4VGV4dExlbmd0aCA9PT0gJ251bWJlcicpIG1heExlbmd0aCA9IGNvbmZpZy5kZWZhdWx0TWF4VGV4dExlbmd0aFxuICBpZiAodHlwZW9mIGZpZWxkTWF4TGVuZ3RoID09PSAnbnVtYmVyJykgbWF4TGVuZ3RoID0gZmllbGRNYXhMZW5ndGhcblxuICBpZiAodmFsdWUgJiYgbWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnNob3J0ZXJUaGFuTWF4JywgeyBtYXhMZW5ndGggfSlcbiAgfVxuXG4gIGlmICh2YWx1ZSAmJiBtaW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246bG9uZ2VyVGhhbk1pbicsIHsgbWluTGVuZ3RoIH0pXG4gIH1cblxuICBpZiAocmVxdWlyZWQgJiYgIXZhbHVlKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IGVtYWlsOiBWYWxpZGF0ZTxzdHJpbmcsIHVua25vd24sIHVua25vd24sIEVtYWlsRmllbGQ+ID0gKFxuICB2YWx1ZSxcbiAgeyByZXE6IHsgdCB9LCByZXF1aXJlZCB9LFxuKSA9PiB7XG4gIGlmICgodmFsdWUgJiYgIS9cXFNbXlxcc0BdKkBcXFMrXFwuXFxTKy8udGVzdCh2YWx1ZSkpIHx8ICghdmFsdWUgJiYgcmVxdWlyZWQpKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246ZW1haWxBZGRyZXNzJylcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCB0ZXh0YXJlYTogVmFsaWRhdGU8c3RyaW5nLCB1bmtub3duLCB1bmtub3duLCBUZXh0YXJlYUZpZWxkPiA9IChcbiAgdmFsdWUsXG4gIHtcbiAgICBtYXhMZW5ndGg6IGZpZWxkTWF4TGVuZ3RoLFxuICAgIG1pbkxlbmd0aCxcbiAgICByZXE6IHtcbiAgICAgIHBheWxvYWQ6IHsgY29uZmlnIH0sXG4gICAgICB0LFxuICAgIH0sXG4gICAgcmVxdWlyZWQsXG4gIH0sXG4pID0+IHtcbiAgbGV0IG1heExlbmd0aDogbnVtYmVyXG5cbiAgaWYgKHR5cGVvZiBjb25maWc/LmRlZmF1bHRNYXhUZXh0TGVuZ3RoID09PSAnbnVtYmVyJykgbWF4TGVuZ3RoID0gY29uZmlnLmRlZmF1bHRNYXhUZXh0TGVuZ3RoXG4gIGlmICh0eXBlb2YgZmllbGRNYXhMZW5ndGggPT09ICdudW1iZXInKSBtYXhMZW5ndGggPSBmaWVsZE1heExlbmd0aFxuICBpZiAodmFsdWUgJiYgbWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnNob3J0ZXJUaGFuTWF4JywgeyBtYXhMZW5ndGggfSlcbiAgfVxuXG4gIGlmICh2YWx1ZSAmJiBtaW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246bG9uZ2VyVGhhbk1pbicsIHsgbWluTGVuZ3RoIH0pXG4gIH1cblxuICBpZiAocmVxdWlyZWQgJiYgIXZhbHVlKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IGNvZGU6IFZhbGlkYXRlPHN0cmluZywgdW5rbm93biwgdW5rbm93biwgQ29kZUZpZWxkPiA9IChcbiAgdmFsdWUsXG4gIHsgcmVxOiB7IHQgfSwgcmVxdWlyZWQgfSxcbikgPT4ge1xuICBpZiAocmVxdWlyZWQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJylcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCBqc29uOiBWYWxpZGF0ZTxzdHJpbmcsIHVua25vd24sIHVua25vd24sIEpTT05GaWVsZCAmIHsganNvbkVycm9yPzogc3RyaW5nIH0+ID0gKFxuICB2YWx1ZSxcbiAgeyBqc29uRXJyb3IsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0sXG4pID0+IHtcbiAgaWYgKHJlcXVpcmVkICYmICF2YWx1ZSkge1xuICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJylcbiAgfVxuXG4gIGlmIChqc29uRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOmludmFsaWRJbnB1dCcpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgY29uc3QgY2hlY2tib3g6IFZhbGlkYXRlPGJvb2xlYW4sIHVua25vd24sIHVua25vd24sIENoZWNrYm94RmllbGQ+ID0gKFxuICB2YWx1ZSxcbiAgeyByZXE6IHsgdCB9LCByZXF1aXJlZCB9LFxuKSA9PiB7XG4gIGlmICgodmFsdWUgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHx8IChyZXF1aXJlZCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykpIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjp0cnVlT3JGYWxzZScpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgY29uc3QgZGF0ZTogVmFsaWRhdGU8RGF0ZSwgdW5rbm93biwgdW5rbm93biwgRGF0ZUZpZWxkPiA9IChcbiAgdmFsdWUsXG4gIHsgcmVxOiB7IHQgfSwgcmVxdWlyZWQgfSxcbikgPT4ge1xuICBpZiAodmFsdWUgJiYgIWlzTmFOKERhdGUucGFyc2UodmFsdWUudG9TdHJpbmcoKSkpKSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUtbGluZSAqL1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAodmFsdWUpIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpub3RWYWxpZERhdGUnLCB7IHZhbHVlIH0pXG4gIH1cblxuICBpZiAocmVxdWlyZWQpIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgY29uc3QgcmljaFRleHQ6IFZhbGlkYXRlPG9iamVjdCwgdW5rbm93biwgdW5rbm93biwgUmljaFRleHRGaWVsZD4gPSBhc3luYyAoXG4gIHZhbHVlLFxuICBvcHRpb25zLFxuKSA9PiB7XG4gIGNvbnN0IGVkaXRvcjogUmljaFRleHRBZGFwdGVyID0gb3B0aW9ucz8uZWRpdG9yXG5cbiAgcmV0dXJuIGVkaXRvci52YWxpZGF0ZSh2YWx1ZSwgb3B0aW9ucylcbn1cblxuY29uc3QgdmFsaWRhdGVBcnJheUxlbmd0aCA9IChcbiAgdmFsdWUsXG4gIG9wdGlvbnM6IHtcbiAgICBtYXhSb3dzPzogbnVtYmVyXG4gICAgbWluUm93cz86IG51bWJlclxuICAgIHJlcXVpcmVkPzogYm9vbGVhblxuICAgIHQ6IChrZXk6IHN0cmluZywgb3B0aW9ucz86IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nIH0pID0+IHN0cmluZ1xuICB9LFxuKSA9PiB7XG4gIGNvbnN0IHsgbWF4Um93cywgbWluUm93cywgcmVxdWlyZWQsIHQgfSA9IG9wdGlvbnNcblxuICBjb25zdCBhcnJheUxlbmd0aCA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubGVuZ3RoIDogMFxuXG4gIGlmICghcmVxdWlyZWQgJiYgYXJyYXlMZW5ndGggPT09IDApIHJldHVybiB0cnVlXG5cbiAgaWYgKG1pblJvd3MgJiYgYXJyYXlMZW5ndGggPCBtaW5Sb3dzKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZXNBdExlYXN0JywgeyBjb3VudDogbWluUm93cywgbGFiZWw6IHQoJ2dlbmVyYWw6cm93cycpIH0pXG4gIH1cblxuICBpZiAobWF4Um93cyAmJiBhcnJheUxlbmd0aCA+IG1heFJvd3MpIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlc05vTW9yZVRoYW4nLCB7IGNvdW50OiBtYXhSb3dzLCBsYWJlbDogdCgnZ2VuZXJhbDpyb3dzJykgfSlcbiAgfVxuXG4gIGlmIChyZXF1aXJlZCAmJiAhYXJyYXlMZW5ndGgpIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpyZXF1aXJlc0F0TGVhc3QnLCB7IGNvdW50OiAxLCBsYWJlbDogdCgnZ2VuZXJhbDpyb3cnKSB9KVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IG51bWJlcjogVmFsaWRhdGU8bnVtYmVyIHwgbnVtYmVyW10sIHVua25vd24sIHVua25vd24sIE51bWJlckZpZWxkPiA9IChcbiAgdmFsdWUsXG4gIHsgaGFzTWFueSwgbWF4LCBtYXhSb3dzLCBtaW4sIG1pblJvd3MsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0sXG4pID0+IHtcbiAgaWYgKGhhc01hbnkgPT09IHRydWUpIHtcbiAgICBjb25zdCBsZW5ndGhWYWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVBcnJheUxlbmd0aCh2YWx1ZSwgeyBtYXhSb3dzLCBtaW5Sb3dzLCByZXF1aXJlZCwgdCB9KVxuICAgIGlmICh0eXBlb2YgbGVuZ3RoVmFsaWRhdGlvblJlc3VsdCA9PT0gJ3N0cmluZycpIHJldHVybiBsZW5ndGhWYWxpZGF0aW9uUmVzdWx0XG4gIH1cblxuICBpZiAoIXZhbHVlICYmICFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAvLyBpZiBubyB2YWx1ZSBpcyBwcmVzZW50LCB2YWxpZGF0ZSBiYXNlZCBvbiByZXF1aXJlZFxuICAgIGlmIChyZXF1aXJlZCkgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKVxuICAgIGlmICghcmVxdWlyZWQpIHJldHVybiB0cnVlXG4gIH1cblxuICBjb25zdCBudW1iZXJzVG9WYWxpZGF0ZTogbnVtYmVyW10gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXVxuXG4gIGZvciAoY29uc3QgbnVtYmVyIG9mIG51bWJlcnNUb1ZhbGlkYXRlKSB7XG4gICAgaWYgKCFpc051bWJlcihudW1iZXIpKSByZXR1cm4gdCgndmFsaWRhdGlvbjplbnRlck51bWJlcicpXG5cbiAgICBjb25zdCBudW1iZXJWYWx1ZSA9IHBhcnNlRmxvYXQobnVtYmVyIGFzIHVua25vd24gYXMgc3RyaW5nKVxuXG4gICAgaWYgKHR5cGVvZiBtYXggPT09ICdudW1iZXInICYmIG51bWJlclZhbHVlID4gbWF4KSB7XG4gICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpncmVhdGVyVGhhbk1heCcsIHsgbGFiZWw6IHQoJ2dlbmVyYWw6dmFsdWUnKSwgbWF4LCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWluID09PSAnbnVtYmVyJyAmJiBudW1iZXJWYWx1ZSA8IG1pbikge1xuICAgICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246bGVzc1RoYW5NaW4nLCB7IGxhYmVsOiB0KCdnZW5lcmFsOnZhbHVlJyksIG1pbiwgdmFsdWUgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgY29uc3QgYXJyYXk6IFZhbGlkYXRlPHVua25vd25bXSwgdW5rbm93biwgdW5rbm93biwgQXJyYXlGaWVsZD4gPSAoXG4gIHZhbHVlLFxuICB7IG1heFJvd3MsIG1pblJvd3MsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0sXG4pID0+IHtcbiAgcmV0dXJuIHZhbGlkYXRlQXJyYXlMZW5ndGgodmFsdWUsIHsgbWF4Um93cywgbWluUm93cywgcmVxdWlyZWQsIHQgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGJsb2NrczogVmFsaWRhdGU8dW5rbm93biwgdW5rbm93biwgdW5rbm93biwgQmxvY2tGaWVsZD4gPSAoXG4gIHZhbHVlLFxuICB7IG1heFJvd3MsIG1pblJvd3MsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0sXG4pID0+IHtcbiAgcmV0dXJuIHZhbGlkYXRlQXJyYXlMZW5ndGgodmFsdWUsIHsgbWF4Um93cywgbWluUm93cywgcmVxdWlyZWQsIHQgfSlcbn1cblxuY29uc3QgdmFsaWRhdGVGaWx0ZXJPcHRpb25zOiBWYWxpZGF0ZTxcbiAgdW5rbm93bixcbiAgdW5rbm93bixcbiAgdW5rbm93bixcbiAgUmVsYXRpb25zaGlwRmllbGQgfCBVcGxvYWRGaWVsZFxuPiA9IGFzeW5jIChcbiAgdmFsdWUsXG4gIHsgaWQsIGRhdGEsIGZpbHRlck9wdGlvbnMsIHJlbGF0aW9uVG8sIHJlcSwgcmVxOiB7IHBheWxvYWQsIHQsIHVzZXIgfSwgc2libGluZ0RhdGEgfSxcbikgPT4ge1xuICBpZiAodHlwZW9mIGZpbHRlck9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlKSB7XG4gICAgY29uc3Qgb3B0aW9uczoge1xuICAgICAgW2NvbGxlY3Rpb246IHN0cmluZ106IChudW1iZXIgfCBzdHJpbmcpW11cbiAgICB9ID0ge31cblxuICAgIGNvbnN0IGZhbHNlQ29sbGVjdGlvbnM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBjb2xsZWN0aW9ucyA9IHR5cGVvZiByZWxhdGlvblRvID09PSAnc3RyaW5nJyA/IFtyZWxhdGlvblRvXSA6IHJlbGF0aW9uVG9cbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjb2xsZWN0aW9ucy5tYXAoYXN5bmMgKGNvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgb3B0aW9uRmlsdGVyID1cbiAgICAgICAgICAgIHR5cGVvZiBmaWx0ZXJPcHRpb25zID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgID8gYXdhaXQgZmlsdGVyT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgc2libGluZ0RhdGEsXG4gICAgICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogZmlsdGVyT3B0aW9uc1xuXG4gICAgICAgICAgaWYgKG9wdGlvbkZpbHRlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgb3B0aW9uRmlsdGVyID0gbnVsbFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHZhbHVlSURzOiAobnVtYmVyIHwgc3RyaW5nKVtdID0gW11cblxuICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWw/LnZhbHVlKSB7XG4gICAgICAgICAgICAgIHZhbHVlSURzLnB1c2godmFsLnZhbHVlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgdmFsdWVJRHMucHVzaCh2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmICh2YWx1ZUlEcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaW5kV2hlcmU6IFdoZXJlID0ge1xuICAgICAgICAgICAgICBhbmQ6IFt7IGlkOiB7IGluOiB2YWx1ZUlEcyB9IH1dLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9uRmlsdGVyICYmIG9wdGlvbkZpbHRlciAhPT0gdHJ1ZSkgZmluZFdoZXJlLmFuZC5wdXNoKG9wdGlvbkZpbHRlcilcblxuICAgICAgICAgICAgaWYgKG9wdGlvbkZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgZmFsc2VDb2xsZWN0aW9ucy5wdXNoKGNvbGxlY3Rpb24pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGByZXFgIG9taXR0ZWQgdG8gcHJldmVudCB0cmFuc2FjdGlvbiBlcnJvcnMgZnJvbSBhYm9ydGluZyB0aGUgZW50aXJlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXlsb2FkLmZpbmQoe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICAgICAgbGltaXQ6IDAsXG4gICAgICAgICAgICAgIHBhZ2luYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgICB3aGVyZTogZmluZFdoZXJlLFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgb3B0aW9uc1tjb2xsZWN0aW9uXSA9IHJlc3VsdC5kb2NzLm1hcCgoZG9jKSA9PiBkb2MuaWQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnNbY29sbGVjdGlvbl0gPSBbXVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVxLnBheWxvYWQubG9nZ2VyLmVycm9yKHtcbiAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgIG1zZzogYEVycm9yIHZhbGlkYXRpbmcgZmlsdGVyIG9wdGlvbnMgZm9yIGNvbGxlY3Rpb24gJHtjb2xsZWN0aW9ufWAsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBvcHRpb25zW2NvbGxlY3Rpb25dID0gW11cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKVxuXG4gICAgY29uc3QgaW52YWxpZFJlbGF0aW9uc2hpcHMgPSB2YWx1ZXMuZmlsdGVyKCh2YWwpID0+IHtcbiAgICAgIGxldCBjb2xsZWN0aW9uOiBzdHJpbmdcbiAgICAgIGxldCByZXF1ZXN0ZWRJRDogbnVtYmVyIHwgc3RyaW5nXG5cbiAgICAgIGlmICh0eXBlb2YgcmVsYXRpb25UbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29sbGVjdGlvbiA9IHJlbGF0aW9uVG9cblxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXF1ZXN0ZWRJRCA9IHZhbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlbGF0aW9uVG8pICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbD8ucmVsYXRpb25Ubykge1xuICAgICAgICBjb2xsZWN0aW9uID0gdmFsLnJlbGF0aW9uVG9cbiAgICAgICAgcmVxdWVzdGVkSUQgPSB2YWwudmFsdWVcbiAgICAgIH1cblxuICAgICAgaWYgKGZhbHNlQ29sbGVjdGlvbnMuZmluZCgoc2x1ZykgPT4gcmVsYXRpb25UbyA9PT0gc2x1ZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wdGlvbnNbY29sbGVjdGlvbl0uaW5kZXhPZihyZXF1ZXN0ZWRJRCkgPT09IC0xXG4gICAgfSlcblxuICAgIGlmIChpbnZhbGlkUmVsYXRpb25zaGlwcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFJlbGF0aW9uc2hpcHMucmVkdWNlKChlcnIsIGludmFsaWQsIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIGAke2Vycn0gJHtKU09OLnN0cmluZ2lmeShpbnZhbGlkKX0ke1xuICAgICAgICAgIGludmFsaWRSZWxhdGlvbnNoaXBzLmxlbmd0aCA9PT0gaSArIDEgPyAnLCcgOiAnJ1xuICAgICAgICB9IGBcbiAgICAgIH0sIHQoJ3ZhbGlkYXRpb246aW52YWxpZFNlbGVjdGlvbnMnKSkgYXMgc3RyaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCB1cGxvYWQ6IFZhbGlkYXRlPHVua25vd24sIHVua25vd24sIHVua25vd24sIFVwbG9hZEZpZWxkPiA9IChcbiAgdmFsdWU6IHN0cmluZyxcbiAgb3B0aW9ucyxcbikgPT4ge1xuICBpZiAoIXZhbHVlICYmIG9wdGlvbnMucmVxdWlyZWQpIHtcbiAgICByZXR1cm4gb3B0aW9ucz8ucmVxPy50KCd2YWxpZGF0aW9uOnJlcXVpcmVkJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgY29uc3QgaWRGaWVsZCA9IG9wdGlvbnM/LnJlcT8ucGF5bG9hZD8uY29uZmlnPy5jb2xsZWN0aW9uc1xuICAgICAgPy5maW5kKChjb2xsZWN0aW9uKSA9PiBjb2xsZWN0aW9uLnNsdWcgPT09IG9wdGlvbnMucmVsYXRpb25UbylcbiAgICAgID8uZmllbGRzPy5maW5kKChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJylcblxuICAgIGNvbnN0IHR5cGUgPSBnZXRJRFR5cGUoaWRGaWVsZCwgb3B0aW9ucz8ucmVxPy5wYXlsb2FkPy5kYj8uZGVmYXVsdElEVHlwZSlcblxuICAgIGlmICghaXNWYWxpZElEKHZhbHVlLCB0eXBlKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucmVxPy50KCd2YWxpZGF0aW9uOnZhbGlkVXBsb2FkSUQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZUZpbHRlck9wdGlvbnModmFsdWUsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBjb25zdCByZWxhdGlvbnNoaXA6IFZhbGlkYXRlPFxuICBSZWxhdGlvbnNoaXBWYWx1ZSxcbiAgdW5rbm93bixcbiAgdW5rbm93bixcbiAgUmVsYXRpb25zaGlwRmllbGRcbj4gPSBhc3luYyAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qge1xuICAgIG1heFJvd3MsXG4gICAgbWluUm93cyxcbiAgICByZWxhdGlvblRvLFxuICAgIHJlcToge1xuICAgICAgcGF5bG9hZCxcbiAgICAgIHBheWxvYWQ6IHsgY29uZmlnIH0sXG4gICAgICB0LFxuICAgIH0sXG4gICAgcmVxdWlyZWQsXG4gIH0gPSBvcHRpb25zXG5cbiAgaWYgKCghdmFsdWUgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpICYmIHJlcXVpcmVkKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICBpZiAobWluUm93cyAmJiB2YWx1ZS5sZW5ndGggPCBtaW5Sb3dzKSB7XG4gICAgICByZXR1cm4gdCgndmFsaWRhdGlvbjpsZXNzVGhhbk1pbicsIHtcbiAgICAgICAgbGFiZWw6IHQoJ2dlbmVyYWw6cm93cycpLFxuICAgICAgICBtaW46IG1pblJvd3MsXG4gICAgICAgIHZhbHVlOiB2YWx1ZS5sZW5ndGgsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChtYXhSb3dzICYmIHZhbHVlLmxlbmd0aCA+IG1heFJvd3MpIHtcbiAgICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOmdyZWF0ZXJUaGFuTWF4Jywge1xuICAgICAgICBsYWJlbDogdCgnZ2VuZXJhbDpyb3dzJyksXG4gICAgICAgIG1heDogbWF4Um93cyxcbiAgICAgICAgdmFsdWU6IHZhbHVlLmxlbmd0aCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXVxuXG4gICAgY29uc3QgaW52YWxpZFJlbGF0aW9uc2hpcHMgPSB2YWx1ZXMuZmlsdGVyKCh2YWwpID0+IHtcbiAgICAgIGxldCBjb2xsZWN0aW9uU2x1Zzogc3RyaW5nXG4gICAgICBsZXQgcmVxdWVzdGVkSURcblxuICAgICAgaWYgKHR5cGVvZiByZWxhdGlvblRvID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb2xsZWN0aW9uU2x1ZyA9IHJlbGF0aW9uVG9cblxuICAgICAgICAvLyBjdXN0b20gaWRcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgIHJlcXVlc3RlZElEID0gdmFsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsPy5yZWxhdGlvblRvKSB7XG4gICAgICAgIGNvbGxlY3Rpb25TbHVnID0gdmFsLnJlbGF0aW9uVG9cbiAgICAgICAgcmVxdWVzdGVkSUQgPSB2YWwudmFsdWVcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcXVlc3RlZElEID09PSBudWxsKSByZXR1cm4gZmFsc2VcblxuICAgICAgY29uc3QgaWRGaWVsZCA9IGNvbmZpZz8uY29sbGVjdGlvbnNcbiAgICAgICAgPy5maW5kKChjb2xsZWN0aW9uKSA9PiBjb2xsZWN0aW9uLnNsdWcgPT09IGNvbGxlY3Rpb25TbHVnKVxuICAgICAgICA/LmZpZWxkcz8uZmluZCgoZmllbGQpID0+IGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpXG5cbiAgICAgIGNvbnN0IHR5cGUgPSBnZXRJRFR5cGUoaWRGaWVsZCwgcGF5bG9hZD8uZGI/LmRlZmF1bHRJRFR5cGUpXG5cbiAgICAgIHJldHVybiAhaXNWYWxpZElEKHJlcXVlc3RlZElELCB0eXBlKVxuICAgIH0pXG5cbiAgICBpZiAoaW52YWxpZFJlbGF0aW9uc2hpcHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGBUaGlzIHJlbGF0aW9uc2hpcCBmaWVsZCBoYXMgdGhlIGZvbGxvd2luZyBpbnZhbGlkIHJlbGF0aW9uc2hpcHM6ICR7aW52YWxpZFJlbGF0aW9uc2hpcHNcbiAgICAgICAgLm1hcCgoZXJyLCBpbnZhbGlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAke2Vycn0gJHtKU09OLnN0cmluZ2lmeShpbnZhbGlkKX1gXG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcsICcpfWBcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVGaWx0ZXJPcHRpb25zKHZhbHVlLCBvcHRpb25zKVxufVxuXG5leHBvcnQgY29uc3Qgc2VsZWN0OiBWYWxpZGF0ZTx1bmtub3duLCB1bmtub3duLCB1bmtub3duLCBTZWxlY3RGaWVsZD4gPSAoXG4gIHZhbHVlLFxuICB7IGhhc01hbnksIG9wdGlvbnMsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0sXG4pID0+IHtcbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgdmFsdWUuc29tZShcbiAgICAgIChpbnB1dCkgPT5cbiAgICAgICAgIW9wdGlvbnMuc29tZShcbiAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24gPT09IGlucHV0IHx8ICh0eXBlb2Ygb3B0aW9uICE9PSAnc3RyaW5nJyAmJiBvcHRpb24/LnZhbHVlID09PSBpbnB1dCksXG4gICAgICAgICksXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjppbnZhbGlkU2VsZWN0aW9uJylcbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgIW9wdGlvbnMuc29tZShcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbiA9PT0gdmFsdWUgfHwgKHR5cGVvZiBvcHRpb24gIT09ICdzdHJpbmcnICYmIG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpLFxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246aW52YWxpZFNlbGVjdGlvbicpXG4gIH1cblxuICBpZiAoXG4gICAgcmVxdWlyZWQgJiZcbiAgICAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgIChoYXNNYW55ICYmIEFycmF5LmlzQXJyYXkodmFsdWUpICYmICh2YWx1ZSBhcyBbXSk/Lmxlbmd0aCA9PT0gMCkpXG4gICkge1xuICAgIHJldHVybiB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJylcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCByYWRpbzogVmFsaWRhdGU8dW5rbm93biwgdW5rbm93biwgdW5rbm93biwgUmFkaW9GaWVsZD4gPSAoXG4gIHZhbHVlLFxuICB7IG9wdGlvbnMsIHJlcTogeyB0IH0sIHJlcXVpcmVkIH0sXG4pID0+IHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgdmFsdWVNYXRjaGVzT3B0aW9uID0gb3B0aW9ucy5zb21lKFxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uID09PSB2YWx1ZSB8fCAodHlwZW9mIG9wdGlvbiAhPT0gJ3N0cmluZycgJiYgb3B0aW9uLnZhbHVlID09PSB2YWx1ZSksXG4gICAgKVxuICAgIHJldHVybiB2YWx1ZU1hdGNoZXNPcHRpb24gfHwgdCgndmFsaWRhdGlvbjppbnZhbGlkU2VsZWN0aW9uJylcbiAgfVxuXG4gIHJldHVybiByZXF1aXJlZCA/IHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKSA6IHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IHBvaW50OiBWYWxpZGF0ZTxbbnVtYmVyIHwgc3RyaW5nLCBudW1iZXIgfCBzdHJpbmddLCB1bmtub3duLCB1bmtub3duLCBQb2ludEZpZWxkPiA9IChcbiAgdmFsdWUgPSBbJycsICcnXSxcbiAgeyByZXE6IHsgdCB9LCByZXF1aXJlZCB9LFxuKSA9PiB7XG4gIGNvbnN0IGxuZyA9IHBhcnNlRmxvYXQoU3RyaW5nKHZhbHVlWzBdKSlcbiAgY29uc3QgbGF0ID0gcGFyc2VGbG9hdChTdHJpbmcodmFsdWVbMV0pKVxuICBpZiAoXG4gICAgcmVxdWlyZWQgJiZcbiAgICAoKHZhbHVlWzBdICYmIHZhbHVlWzFdICYmIHR5cGVvZiBsbmcgIT09ICdudW1iZXInICYmIHR5cGVvZiBsYXQgIT09ICdudW1iZXInKSB8fFxuICAgICAgTnVtYmVyLmlzTmFOKGxuZykgfHxcbiAgICAgIE51bWJlci5pc05hTihsYXQpIHx8XG4gICAgICAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoICE9PSAyKSlcbiAgKSB7XG4gICAgcmV0dXJuIHQoJ3ZhbGlkYXRpb246cmVxdWlyZXNUd29OdW1iZXJzJylcbiAgfVxuXG4gIGlmICgodmFsdWVbMV0gJiYgTnVtYmVyLmlzTmFOKGxuZykpIHx8ICh2YWx1ZVswXSAmJiBOdW1iZXIuaXNOYU4obGF0KSkpIHtcbiAgICByZXR1cm4gdCgndmFsaWRhdGlvbjppbnZhbGlkSW5wdXQnKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhcnJheSxcbiAgYmxvY2tzLFxuICBjaGVja2JveCxcbiAgY29kZSxcbiAgZGF0ZSxcbiAgZW1haWwsXG4gIGpzb24sXG4gIG51bWJlcixcbiAgcGFzc3dvcmQsXG4gIHBvaW50LFxuICByYWRpbyxcbiAgcmVsYXRpb25zaGlwLFxuICByaWNoVGV4dCxcbiAgc2VsZWN0LFxuICB0ZXh0LFxuICB0ZXh0YXJlYSxcbiAgdXBsb2FkLFxufVxuIl0sIm5hbWVzIjpbImdldElEVHlwZSIsImlzTnVtYmVyIiwiaXNWYWxpZElEIiwiZmllbGRBZmZlY3RzRGF0YSIsInRleHQiLCJ2YWx1ZSIsImhhc01hbnkiLCJtYXhMZW5ndGgiLCJmaWVsZE1heExlbmd0aCIsIm1heFJvd3MiLCJtaW5MZW5ndGgiLCJtaW5Sb3dzIiwicmVxIiwicGF5bG9hZCIsImNvbmZpZyIsInQiLCJyZXF1aXJlZCIsImxlbmd0aFZhbGlkYXRpb25SZXN1bHQiLCJ2YWxpZGF0ZUFycmF5TGVuZ3RoIiwiZGVmYXVsdE1heFRleHRMZW5ndGgiLCJzdHJpbmdzVG9WYWxpZGF0ZSIsIkFycmF5IiwiaXNBcnJheSIsInN0cmluZ1ZhbHVlIiwibGVuZ3RoIiwibGFiZWwiLCJwYXNzd29yZCIsImVtYWlsIiwidGVzdCIsInRleHRhcmVhIiwiY29kZSIsInVuZGVmaW5lZCIsImpzb24iLCJqc29uRXJyb3IiLCJjaGVja2JveCIsImRhdGUiLCJpc05hTiIsIkRhdGUiLCJwYXJzZSIsInRvU3RyaW5nIiwicmljaFRleHQiLCJvcHRpb25zIiwiZWRpdG9yIiwidmFsaWRhdGUiLCJhcnJheUxlbmd0aCIsImNvdW50IiwibnVtYmVyIiwibWF4IiwibWluIiwibnVtYmVyc1RvVmFsaWRhdGUiLCJudW1iZXJWYWx1ZSIsInBhcnNlRmxvYXQiLCJhcnJheSIsImJsb2NrcyIsInZhbGlkYXRlRmlsdGVyT3B0aW9ucyIsImlkIiwiZGF0YSIsImZpbHRlck9wdGlvbnMiLCJyZWxhdGlvblRvIiwidXNlciIsInNpYmxpbmdEYXRhIiwiZmFsc2VDb2xsZWN0aW9ucyIsImNvbGxlY3Rpb25zIiwidmFsdWVzIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImNvbGxlY3Rpb24iLCJvcHRpb25GaWx0ZXIiLCJ2YWx1ZUlEcyIsImZvckVhY2giLCJ2YWwiLCJwdXNoIiwiZmluZFdoZXJlIiwiYW5kIiwiaW4iLCJyZXN1bHQiLCJmaW5kIiwiZGVwdGgiLCJsaW1pdCIsInBhZ2luYXRpb24iLCJ3aGVyZSIsImRvY3MiLCJkb2MiLCJlcnIiLCJsb2dnZXIiLCJlcnJvciIsIm1zZyIsImludmFsaWRSZWxhdGlvbnNoaXBzIiwiZmlsdGVyIiwicmVxdWVzdGVkSUQiLCJzbHVnIiwiaW5kZXhPZiIsInJlZHVjZSIsImludmFsaWQiLCJpIiwiSlNPTiIsInN0cmluZ2lmeSIsInVwbG9hZCIsImlkRmllbGQiLCJmaWVsZHMiLCJmaWVsZCIsIm5hbWUiLCJ0eXBlIiwiZGIiLCJkZWZhdWx0SURUeXBlIiwicmVsYXRpb25zaGlwIiwiY29sbGVjdGlvblNsdWciLCJqb2luIiwic2VsZWN0Iiwic29tZSIsImlucHV0Iiwib3B0aW9uIiwicmFkaW8iLCJ2YWx1ZU1hdGNoZXNPcHRpb24iLCJwb2ludCIsImxuZyIsIlN0cmluZyIsImxhdCIsIk51bWJlciJdLCJtYXBwaW5ncyI6IkFBc0JBLFNBQVNBLFNBQVMsUUFBUSw0QkFBMkI7QUFDckQsU0FBU0MsUUFBUSxRQUFRLDJCQUEwQjtBQUNuRCxTQUFTQyxTQUFTLFFBQVEsNEJBQTJCO0FBQ3JELFNBQVNDLGdCQUFnQixRQUFRLG9CQUFtQjtBQUVwRCxPQUFPLE1BQU1DLE9BQWlFLENBQzVFQyxPQUNBLEVBQ0VDLE9BQU8sRUFDUEMsV0FBV0MsY0FBYyxFQUN6QkMsT0FBTyxFQUNQQyxTQUFTLEVBQ1RDLE9BQU8sRUFDUEMsS0FBSyxFQUNIQyxTQUFTLEVBQUVDLE1BQU0sRUFBRSxFQUNuQkMsQ0FBQyxFQUNGLEVBQ0RDLFFBQVEsRUFDVDtJQUVELElBQUlUO0lBRUosSUFBSSxDQUFDUyxVQUFVO1FBQ2IsSUFBSSxDQUFDWCxPQUFPLE9BQU87SUFDckI7SUFFQSxJQUFJQyxZQUFZLE1BQU07UUFDcEIsTUFBTVcseUJBQXlCQyxvQkFBb0JiLE9BQU87WUFBRUk7WUFBU0U7WUFBU0s7WUFBVUQ7UUFBRTtRQUMxRixJQUFJLE9BQU9FLDJCQUEyQixVQUFVLE9BQU9BO0lBQ3pEO0lBRUEs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