typo3-typescript-sources 13.4.20

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 (415) hide show
  1. package/.github/workflows/sync-and-publish.yml +265 -0
  2. package/.last-synced-tag +1 -0
  3. package/LICENSE.txt +339 -0
  4. package/README-TYPO3.md +166 -0
  5. package/README.md +28 -0
  6. package/adminpanel/admin-panel.ts +375 -0
  7. package/adminpanel/modules/cache.ts +27 -0
  8. package/adminpanel/modules/preview.ts +75 -0
  9. package/backend/action-button/abstract-action.ts +22 -0
  10. package/backend/action-button/deferred-action.ts +41 -0
  11. package/backend/action-button/immediate-action.ts +31 -0
  12. package/backend/action-dispatcher.ts +104 -0
  13. package/backend/ajax-data-handler/message-interface.ts +18 -0
  14. package/backend/ajax-data-handler/response-interface.ts +20 -0
  15. package/backend/ajax-data-handler.ts +214 -0
  16. package/backend/backend-exception.ts +22 -0
  17. package/backend/broadcast-message.ts +50 -0
  18. package/backend/broadcast-service.ts +52 -0
  19. package/backend/browse-database.ts +38 -0
  20. package/backend/clear-cache.ts +88 -0
  21. package/backend/clipboard-panel.ts +240 -0
  22. package/backend/close-current-window.ts +2 -0
  23. package/backend/code-editor/autocomplete/completion-result.ts +105 -0
  24. package/backend/code-editor/autocomplete/ts-code-completion.ts +142 -0
  25. package/backend/code-editor/autocomplete/ts-parser.ts +485 -0
  26. package/backend/code-editor/autocomplete/ts-ref.ts +164 -0
  27. package/backend/code-editor/element/code-mirror-element.ts +282 -0
  28. package/backend/code-editor/language/typoscript.ts +181 -0
  29. package/backend/code-editor/stream-parser/typoscript.ts +1600 -0
  30. package/backend/color-picker.ts +158 -0
  31. package/backend/color-scheme-switch.ts +179 -0
  32. package/backend/column-selector-button.ts +302 -0
  33. package/backend/context-help.ts +68 -0
  34. package/backend/context-menu-actions.ts +322 -0
  35. package/backend/context-menu.ts +751 -0
  36. package/backend/copy-to-clipboard.ts +79 -0
  37. package/backend/date-time-picker.ts +270 -0
  38. package/backend/document-save-actions.ts +159 -0
  39. package/backend/drag-tooltip.ts +285 -0
  40. package/backend/drag-uploader.ts +914 -0
  41. package/backend/element/alert-element.ts +116 -0
  42. package/backend/element/dispatch-modal-button.ts +50 -0
  43. package/backend/element/draggable-resizable-element.ts +249 -0
  44. package/backend/element/editable-page-title.ts +306 -0
  45. package/backend/element/icon-element.ts +84 -0
  46. package/backend/element/immediate-action-element.ts +89 -0
  47. package/backend/element/pagination.ts +59 -0
  48. package/backend/element/progress-bar-element.ts +172 -0
  49. package/backend/element/progress-tracker-element.ts +119 -0
  50. package/backend/element/pseudo-button.ts +58 -0
  51. package/backend/element/spinner-element.ts +51 -0
  52. package/backend/element/thumbnail-element.ts +80 -0
  53. package/backend/element-browser.ts +182 -0
  54. package/backend/enum/data-transfer-types.ts +21 -0
  55. package/backend/enum/icon-types.ts +31 -0
  56. package/backend/enum/key-types.ts +27 -0
  57. package/backend/enum/severity.ts +20 -0
  58. package/backend/enum/viewport/scaffold-identifier.ts +24 -0
  59. package/backend/event/client-request.ts +25 -0
  60. package/backend/event/consumable.ts +18 -0
  61. package/backend/event/consumer-scope.ts +54 -0
  62. package/backend/event/event-dispatcher.ts +26 -0
  63. package/backend/event/interaction-request-assignment.ts +24 -0
  64. package/backend/event/interaction-request-map.ts +75 -0
  65. package/backend/event/interaction-request.ts +48 -0
  66. package/backend/event/trigger-request.ts +56 -0
  67. package/backend/form/submit-interceptor.ts +66 -0
  68. package/backend/form-engine/container/files-control-container.ts +716 -0
  69. package/backend/form-engine/container/flex-form-container-container.ts +166 -0
  70. package/backend/form-engine/container/flex-form-section-container.ts +210 -0
  71. package/backend/form-engine/container/inline-control-container.ts +1230 -0
  72. package/backend/form-engine/container/site-language-container.ts +616 -0
  73. package/backend/form-engine/element/abstract-sortable-select-items.ts +186 -0
  74. package/backend/form-engine/element/category-element.ts +160 -0
  75. package/backend/form-engine/element/color-element.ts +81 -0
  76. package/backend/form-engine/element/datetime-element.ts +66 -0
  77. package/backend/form-engine/element/extra/char-counter.ts +112 -0
  78. package/backend/form-engine/element/extra/select-box-filter.ts +85 -0
  79. package/backend/form-engine/element/folder-element.ts +66 -0
  80. package/backend/form-engine/element/group-element.ts +47 -0
  81. package/backend/form-engine/element/json-element.ts +52 -0
  82. package/backend/form-engine/element/link-element.ts +121 -0
  83. package/backend/form-engine/element/mfa-info-element.ts +169 -0
  84. package/backend/form-engine/element/modifier/resizable.ts +27 -0
  85. package/backend/form-engine/element/modifier/tabbable.ts +29 -0
  86. package/backend/form-engine/element/online-media-form-element.ts +65 -0
  87. package/backend/form-engine/element/password-element.ts +71 -0
  88. package/backend/form-engine/element/select-multiple-side-by-side-element.ts +83 -0
  89. package/backend/form-engine/element/select-single-element.ts +82 -0
  90. package/backend/form-engine/element/select-tree-element.ts +148 -0
  91. package/backend/form-engine/element/select-tree-toolbar.ts +118 -0
  92. package/backend/form-engine/element/select-tree.ts +210 -0
  93. package/backend/form-engine/element/slug-element.ts +243 -0
  94. package/backend/form-engine/element/suggest/result-container.ts +118 -0
  95. package/backend/form-engine/element/suggest/result-item.ts +90 -0
  96. package/backend/form-engine/element/table-permission-element.ts +101 -0
  97. package/backend/form-engine/element/table-wizard-element.ts +427 -0
  98. package/backend/form-engine/element/text-element.ts +52 -0
  99. package/backend/form-engine/element/text-table-element.ts +31 -0
  100. package/backend/form-engine/field-control/add-record.ts +40 -0
  101. package/backend/form-engine/field-control/edit-popup.ts +64 -0
  102. package/backend/form-engine/field-control/insert-clipboard.ts +50 -0
  103. package/backend/form-engine/field-control/link-popup.ts +53 -0
  104. package/backend/form-engine/field-control/list-module.ts +40 -0
  105. package/backend/form-engine/field-control/password-generator.ts +102 -0
  106. package/backend/form-engine/field-control/reset-selection.ts +48 -0
  107. package/backend/form-engine/field-wizard/localization-state-selector.ts +67 -0
  108. package/backend/form-engine/field-wizard/value-picker.ts +123 -0
  109. package/backend/form-engine/field-wizard/value-slider.ts +86 -0
  110. package/backend/form-engine/inline-relation/ajax-dispatcher.ts +124 -0
  111. package/backend/form-engine/inline-relation/inline-response-interface.ts +41 -0
  112. package/backend/form-engine-link-browser-adapter.ts +129 -0
  113. package/backend/form-engine-review.ts +155 -0
  114. package/backend/form-engine-suggest.ts +133 -0
  115. package/backend/form-engine-validation.ts +686 -0
  116. package/backend/form-engine.ts +1391 -0
  117. package/backend/global-event-handler.ts +252 -0
  118. package/backend/grid-editor.ts +1077 -0
  119. package/backend/hashing/md5.ts +252 -0
  120. package/backend/helper.ts +24 -0
  121. package/backend/hotkeys/hotkey-storage.ts +63 -0
  122. package/backend/hotkeys.ts +216 -0
  123. package/backend/icons.ts +236 -0
  124. package/backend/image-manipulation.ts +885 -0
  125. package/backend/info-window.ts +46 -0
  126. package/backend/input/clearable.ts +128 -0
  127. package/backend/input/index.d.ts +8 -0
  128. package/backend/java-script-module-import-event-handler.ts +19 -0
  129. package/backend/key-bindings.ts +42 -0
  130. package/backend/layout-module/drag-drop.ts +359 -0
  131. package/backend/layout-module/paste.ts +165 -0
  132. package/backend/link-browser.ts +89 -0
  133. package/backend/live-search/element/backend-search.ts +34 -0
  134. package/backend/live-search/element/hint.ts +33 -0
  135. package/backend/live-search/element/provider/default-result-item.ts +52 -0
  136. package/backend/live-search/element/provider/page-provider-result-item.ts +52 -0
  137. package/backend/live-search/element/result/item/action/action-container.ts +135 -0
  138. package/backend/live-search/element/result/item/action/action.ts +56 -0
  139. package/backend/live-search/element/result/item/item-container.ts +224 -0
  140. package/backend/live-search/element/result/item/item.ts +74 -0
  141. package/backend/live-search/element/result/result-container.ts +110 -0
  142. package/backend/live-search/element/result/result-detail-container.ts +50 -0
  143. package/backend/live-search/element/result/result-pagination.ts +122 -0
  144. package/backend/live-search/element/search-option-item.ts +70 -0
  145. package/backend/live-search/live-search-configurator.ts +54 -0
  146. package/backend/live-search/live-search-shortcut.ts +29 -0
  147. package/backend/live-search/result-types/backend-module-result-type.ts +8 -0
  148. package/backend/live-search/result-types/default-result-type.ts +21 -0
  149. package/backend/live-search/result-types/page-result-type.ts +23 -0
  150. package/backend/localization.ts +390 -0
  151. package/backend/login-refresh.ts +525 -0
  152. package/backend/login.ts +179 -0
  153. package/backend/mail-link-handler.ts +45 -0
  154. package/backend/modal-interface.ts +19 -0
  155. package/backend/modal.ts +685 -0
  156. package/backend/module/iframe.ts +125 -0
  157. package/backend/module/router.ts +275 -0
  158. package/backend/module-menu.ts +550 -0
  159. package/backend/module.ts +133 -0
  160. package/backend/multi-record-selection-action.ts +44 -0
  161. package/backend/multi-record-selection-delete-action.ts +108 -0
  162. package/backend/multi-record-selection-edit-action.ts +56 -0
  163. package/backend/multi-record-selection.ts +468 -0
  164. package/backend/multi-step-wizard.ts +568 -0
  165. package/backend/new-content-element-wizard-button.ts +51 -0
  166. package/backend/new-multiple-pages.ts +108 -0
  167. package/backend/new-record-wizard.ts +680 -0
  168. package/backend/notification.ts +366 -0
  169. package/backend/offset.ts +40 -0
  170. package/backend/online-media.ts +110 -0
  171. package/backend/page-actions.ts +91 -0
  172. package/backend/page-link-handler.ts +51 -0
  173. package/backend/pagetsconfig/pagetsconfig-includes.ts +77 -0
  174. package/backend/popover.ts +165 -0
  175. package/backend/record-download-button.ts +104 -0
  176. package/backend/record-link-handler.ts +31 -0
  177. package/backend/record-search.ts +44 -0
  178. package/backend/recordlist.ts +230 -0
  179. package/backend/resource/resource.ts +35 -0
  180. package/backend/security/element/csp-reports.ts +406 -0
  181. package/backend/security/element/sudo-mode.ts +249 -0
  182. package/backend/security/sudo-mode-interceptor.ts +19 -0
  183. package/backend/settings/editor/editable-setting.ts +231 -0
  184. package/backend/settings/editor.ts +451 -0
  185. package/backend/settings/enum/settings-mode.enum.ts +24 -0
  186. package/backend/settings/type/base.ts +200 -0
  187. package/backend/settings/type/bool.ts +56 -0
  188. package/backend/settings/type/color.ts +64 -0
  189. package/backend/settings/type/int.ts +85 -0
  190. package/backend/settings/type/number.ts +61 -0
  191. package/backend/settings/type/page.ts +100 -0
  192. package/backend/settings/type/string.ts +77 -0
  193. package/backend/settings/type/stringlist.ts +87 -0
  194. package/backend/severity.ts +88 -0
  195. package/backend/site-inline-actions.ts +32 -0
  196. package/backend/sortable-table.ts +208 -0
  197. package/backend/storage/abstract-client-storage.ts +76 -0
  198. package/backend/storage/browser-session.ts +28 -0
  199. package/backend/storage/client.ts +28 -0
  200. package/backend/storage/module-state-storage.ts +118 -0
  201. package/backend/storage/persistent.ts +204 -0
  202. package/backend/switch-user.ts +82 -0
  203. package/backend/tabs.ts +72 -0
  204. package/backend/telephone-link-handler.ts +40 -0
  205. package/backend/tests/backend/storage/browser-storage-test.ts +87 -0
  206. package/backend/tests/backend/storage/client-test.ts +87 -0
  207. package/backend/tests/backend/utility/dom-helper-test.ts +51 -0
  208. package/backend/tests/backend-exception-test.ts +28 -0
  209. package/backend/tests/element/immediate-action-element-test.ts +81 -0
  210. package/backend/tests/form-engine-validation-test.ts +304 -0
  211. package/backend/tests/grid-editor-test.ts +29 -0
  212. package/backend/tests/hashing/md5Test.ts +28 -0
  213. package/backend/tests/icons-test.ts +23 -0
  214. package/backend/tests/notification-test.ts +161 -0
  215. package/backend/tests/popover-test.ts +83 -0
  216. package/backend/toolbar/clear-cache-menu.ts +88 -0
  217. package/backend/toolbar/live-search.ts +284 -0
  218. package/backend/toolbar/shortcut-menu.ts +254 -0
  219. package/backend/toolbar/system-information-menu.ts +161 -0
  220. package/backend/toolbar.ts +41 -0
  221. package/backend/tree/file-storage-browser.ts +194 -0
  222. package/backend/tree/file-storage-tree-container.ts +465 -0
  223. package/backend/tree/file-storage-tree.ts +42 -0
  224. package/backend/tree/page-browser.ts +272 -0
  225. package/backend/tree/page-tree-element.ts +602 -0
  226. package/backend/tree/page-tree.ts +152 -0
  227. package/backend/tree/tree-module-state.ts +159 -0
  228. package/backend/tree/tree-node-toggle.ts +31 -0
  229. package/backend/tree/tree-node.ts +97 -0
  230. package/backend/tree/tree-toolbar.ts +117 -0
  231. package/backend/tree/tree.ts +1595 -0
  232. package/backend/url-link-handler.ts +36 -0
  233. package/backend/user-pass-login.ts +255 -0
  234. package/backend/user-settings-manager.ts +189 -0
  235. package/backend/utility/collapse-state-persister.ts +205 -0
  236. package/backend/utility/collapse-state-search.ts +183 -0
  237. package/backend/utility/dom-helper.ts +91 -0
  238. package/backend/utility/drag-drop-utility.ts +47 -0
  239. package/backend/utility/message-utility.ts +45 -0
  240. package/backend/utility/top-level-module-import.ts +32 -0
  241. package/backend/utility.ts +194 -0
  242. package/backend/viewport/abstract-container.ts +22 -0
  243. package/backend/viewport/content-container.ts +98 -0
  244. package/backend/viewport/loader.ts +28 -0
  245. package/backend/viewport/navigation-container.ts +119 -0
  246. package/backend/viewport/resizable-navigation.ts +176 -0
  247. package/backend/viewport/toolbar.ts +27 -0
  248. package/backend/viewport/topbar.ts +39 -0
  249. package/backend/viewport.ts +46 -0
  250. package/backend/window-manager.ts +84 -0
  251. package/backend/wizard/move-content-element.ts +107 -0
  252. package/backend/wizard/move-page.ts +74 -0
  253. package/backend/wizard.ts +331 -0
  254. package/belog/backend-log.ts +88 -0
  255. package/beuser/backend-user-listing.ts +40 -0
  256. package/beuser/permissions.ts +291 -0
  257. package/core/ajax/ajax-request-types.ts +15 -0
  258. package/core/ajax/ajax-request.ts +202 -0
  259. package/core/ajax/ajax-response.ts +57 -0
  260. package/core/ajax/input-transformer.ts +92 -0
  261. package/core/ajax/simple-response-interface.ts +5 -0
  262. package/core/authentication/mfa-provider/totp.ts +54 -0
  263. package/core/cache/dedupe-async-task.ts +95 -0
  264. package/core/directive/markdown.ts +82 -0
  265. package/core/directive/nl2br.ts +16 -0
  266. package/core/document-service.ts +35 -0
  267. package/core/event/debounce-event.ts +40 -0
  268. package/core/event/event-interface.ts +24 -0
  269. package/core/event/regular-event.ts +58 -0
  270. package/core/event/request-animation-frame-event.ts +42 -0
  271. package/core/event/throttle-event.ts +54 -0
  272. package/core/java-script-item-handler.ts +29 -0
  273. package/core/java-script-item-processor.ts +171 -0
  274. package/core/lit-helper.ts +126 -0
  275. package/core/literals.ts +17 -0
  276. package/core/referrer-refresh.ts +2 -0
  277. package/core/security-utility.ts +89 -0
  278. package/core/tests/ajax/ajax-request-test.ts +290 -0
  279. package/core/tests/ajax/input-transformer-test.ts +64 -0
  280. package/core/tests/cache/dedupe-async-task-test.ts +152 -0
  281. package/core/tests/event/throttle-event-test.ts +47 -0
  282. package/core/tests/literals-test.ts +24 -0
  283. package/core/tests/security-utility-test.ts +50 -0
  284. package/core/utility/types.ts +9 -0
  285. package/dashboard/chart-initializer.ts +136 -0
  286. package/dashboard/dashboard.ts +1487 -0
  287. package/extensionmanager/distribution-image.ts +55 -0
  288. package/extensionmanager/main.ts +291 -0
  289. package/extensionmanager/repository.ts +195 -0
  290. package/extensionmanager/update.ts +118 -0
  291. package/extensionmanager/upload-form.ts +42 -0
  292. package/filelist/browse-files.ts +148 -0
  293. package/filelist/browse-folders.ts +94 -0
  294. package/filelist/context-menu-actions.ts +335 -0
  295. package/filelist/create-folder.ts +69 -0
  296. package/filelist/file-delete.ts +69 -0
  297. package/filelist/file-list-actions.ts +132 -0
  298. package/filelist/file-list-dragdrop.ts +139 -0
  299. package/filelist/file-list-rename-handler.ts +128 -0
  300. package/filelist/file-list-transfer-handler.ts +138 -0
  301. package/filelist/file-list.ts +396 -0
  302. package/filelist/file-replace.ts +37 -0
  303. package/filelist/linkbrowser-file-handler.ts +94 -0
  304. package/filelist/linkbrowser-folder-handler.ts +74 -0
  305. package/filelist/rename-file.ts +109 -0
  306. package/form/backend/form-editor/component/property-grid-editor.ts +340 -0
  307. package/form/backend/form-editor/core.ts +2104 -0
  308. package/form/backend/form-editor/helper.ts +226 -0
  309. package/form/backend/form-editor/inspector-component.ts +2323 -0
  310. package/form/backend/form-editor/mediator.ts +941 -0
  311. package/form/backend/form-editor/modals-component.ts +433 -0
  312. package/form/backend/form-editor/stage-component.ts +908 -0
  313. package/form/backend/form-editor/tree-component.ts +548 -0
  314. package/form/backend/form-editor/view-model.ts +1343 -0
  315. package/form/backend/form-editor.ts +846 -0
  316. package/form/backend/form-manager/main.ts +39 -0
  317. package/form/backend/form-manager/view-model.ts +789 -0
  318. package/form/backend/form-manager.ts +180 -0
  319. package/form/backend/helper.ts +60 -0
  320. package/form/frontend/date-picker.ts +38 -0
  321. package/frontend/default_frontend.ts +82 -0
  322. package/impexp/context-menu-actions.ts +50 -0
  323. package/impexp/import-export.ts +62 -0
  324. package/indexed-search/pagination.ts +26 -0
  325. package/indexed-search/statistics.ts +50 -0
  326. package/info/translation-status.ts +48 -0
  327. package/install/ajax/ajax-queue.ts +83 -0
  328. package/install/init-install.ts +2 -0
  329. package/install/init-installer.ts +2 -0
  330. package/install/install.ts +25 -0
  331. package/install/installer.ts +458 -0
  332. package/install/message-interface.ts +18 -0
  333. package/install/module/abstract-inline-module.ts +27 -0
  334. package/install/module/abstract-interactable-module.ts +107 -0
  335. package/install/module/environment/environment-check.ts +92 -0
  336. package/install/module/environment/folder-structure.ts +145 -0
  337. package/install/module/environment/image-processing.ts +141 -0
  338. package/install/module/environment/mail-test.ts +127 -0
  339. package/install/module/environment/php-info.ts +50 -0
  340. package/install/module/environment/system-information.ts +50 -0
  341. package/install/module/maintenance/cache.ts +59 -0
  342. package/install/module/maintenance/clear-tables.ts +134 -0
  343. package/install/module/maintenance/clear-typo3temp-files.ts +137 -0
  344. package/install/module/maintenance/create-admin.ts +126 -0
  345. package/install/module/maintenance/database-analyzer.ts +266 -0
  346. package/install/module/maintenance/dump-autoload.ts +58 -0
  347. package/install/module/maintenance/language-packs.ts +338 -0
  348. package/install/module/maintenance/reset-backend-user-uc.ts +58 -0
  349. package/install/module/password-strength.ts +56 -0
  350. package/install/module/settings/change-install-tool-password.ts +101 -0
  351. package/install/module/settings/extension-configuration.ts +224 -0
  352. package/install/module/settings/features.ts +102 -0
  353. package/install/module/settings/local-configuration.ts +316 -0
  354. package/install/module/settings/presets.ts +147 -0
  355. package/install/module/settings/system-maintainer.ts +111 -0
  356. package/install/module/upgrade/core-update.ts +255 -0
  357. package/install/module/upgrade/extension-compat-tester.ts +195 -0
  358. package/install/module/upgrade/extension-scanner.ts +381 -0
  359. package/install/module/upgrade/tca-ext-tables-check.ts +93 -0
  360. package/install/module/upgrade/tca-migrations-check.ts +101 -0
  361. package/install/module/upgrade/upgrade-docs.ts +310 -0
  362. package/install/module/upgrade/upgrade-wizards.ts +612 -0
  363. package/install/renderable/clearable.ts +113 -0
  364. package/install/renderable/flash-message.ts +64 -0
  365. package/install/renderable/info-box.ts +66 -0
  366. package/install/renderable/language-packs.ts +304 -0
  367. package/install/renderable/offset-group.ts +38 -0
  368. package/install/renderable/severity.ts +49 -0
  369. package/install/renderable/wrap-group.ts +36 -0
  370. package/install/router.ts +468 -0
  371. package/linkvalidator/linkvalidator-modal.ts +45 -0
  372. package/linkvalidator/linkvalidator.ts +101 -0
  373. package/lowlevel/query-generator.ts +132 -0
  374. package/lowlevel/reference-index.ts +44 -0
  375. package/opendocs/toolbar/opendocs-menu.ts +117 -0
  376. package/package.json +34 -0
  377. package/recycler/recycler.ts +539 -0
  378. package/redirects/event-handler.ts +108 -0
  379. package/redirects/form-engine-evaluation.ts +34 -0
  380. package/redirects/redirects-module.ts +58 -0
  381. package/rte-ckeditor/ckeditor5.ts +402 -0
  382. package/rte-ckeditor/css-prefixer.ts +94 -0
  383. package/rte-ckeditor/legacy/ckeditor5-bundle.ts +17 -0
  384. package/rte-ckeditor/legacy/ckeditor5-inspector.ts +2 -0
  385. package/rte-ckeditor/plugin/typo3-link.ts +810 -0
  386. package/rte-ckeditor/plugin/whitespace.ts +114 -0
  387. package/rte-ckeditor/rte-link-browser.ts +112 -0
  388. package/rte-ckeditor/tests/css-prefixer-test.ts +314 -0
  389. package/scheduler/scheduler-add-group.ts +119 -0
  390. package/scheduler/scheduler-editable-group-name.ts +307 -0
  391. package/scheduler/scheduler-sortable-groups.ts +59 -0
  392. package/scheduler/scheduler.ts +466 -0
  393. package/setup/setup-module.ts +122 -0
  394. package/styleguide/checkbox-demo.ts +5 -0
  395. package/styleguide/element/theme-switcher-element.ts +101 -0
  396. package/styleguide/filter.ts +22 -0
  397. package/styleguide/find-icons.ts +78 -0
  398. package/styleguide/processing-indicator.ts +78 -0
  399. package/styleguide/render-notifications.ts +64 -0
  400. package/sys-note/element/delete-button.ts +78 -0
  401. package/tstemplate/constant-editor.ts +64 -0
  402. package/tstemplate/information-module.ts +31 -0
  403. package/tstemplate/template-analyzer.ts +77 -0
  404. package/viewpage/main.ts +253 -0
  405. package/workspaces/backend.ts +979 -0
  406. package/workspaces/preview.ts +232 -0
  407. package/workspaces/renderable/comment-view.ts +79 -0
  408. package/workspaces/renderable/diff-view.ts +58 -0
  409. package/workspaces/renderable/history-view.ts +97 -0
  410. package/workspaces/renderable/record-information.ts +118 -0
  411. package/workspaces/renderable/record-table.ts +355 -0
  412. package/workspaces/renderable/send-to-stage-form.ts +108 -0
  413. package/workspaces/toolbar/workspaces-menu.ts +190 -0
  414. package/workspaces/utility/icon-helper.ts +57 -0
  415. package/workspaces/workspaces.ts +136 -0
@@ -0,0 +1,204 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
15
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
16
+
17
+ export type UC = { [key: string]: string | number | boolean | null | UC };
18
+
19
+ /**
20
+ * Module: @typo3/backend/storage/persistent
21
+ * Wrapper for persistent storage in UC
22
+ * @exports @typo3/backend/storage/persistent
23
+ */
24
+ class Persistent {
25
+ private data: UC|null = null;
26
+
27
+ /**
28
+ * Persistent storage, stores everything on the server via AJAX, does a greedy load on read
29
+ * common functions get/set/clear
30
+ *
31
+ * @param {String} key
32
+ * @returns {any}
33
+ */
34
+ public get(key: string): any {
35
+ if (this.data === null) {
36
+ this.data = this.loadFromServer();
37
+ }
38
+
39
+ return this.getRecursiveDataByDeepKey(this.data, key.split('.'));
40
+ }
41
+
42
+ /**
43
+ * Store data persistent on server
44
+ *
45
+ * @param {String} key
46
+ * @param {String} value
47
+ * @returns {Promise<UC>}
48
+ */
49
+ public set(key: string, value: string|UC): Promise<UC> {
50
+ if (this.data !== null) {
51
+ this.data = this.setRecursiveDataByDeepKey(this.data, key.split('.'), value);
52
+ }
53
+ return this.storeOnServer(key, value);
54
+ }
55
+
56
+ /**
57
+ * @param {string} key
58
+ * @param {string} value
59
+ * @returns {Promise<UC>}
60
+ */
61
+ public async addToList(key: string, value: string): Promise<UC> {
62
+ const response = await new AjaxRequest(TYPO3.settings.ajaxUrls.usersettings_process).post({
63
+ action: 'addToList',
64
+ key,
65
+ value,
66
+ });
67
+ return this.resolveResponse(response);
68
+ }
69
+
70
+ /**
71
+ * @param {string} key
72
+ * @param {string} value
73
+ * @returns {Promise<UC>}
74
+ */
75
+ public async removeFromList(key: string, value: string): Promise<UC> {
76
+ const response = await new AjaxRequest(TYPO3.settings.ajaxUrls.usersettings_process).post({
77
+ action: 'removeFromList',
78
+ key,
79
+ value,
80
+ });
81
+ return this.resolveResponse(response);
82
+ }
83
+
84
+ public async unset(key: string): Promise<UC> {
85
+ const response = await new AjaxRequest(TYPO3.settings.ajaxUrls.usersettings_process).post({
86
+ action: 'unset',
87
+ key,
88
+ });
89
+ return this.resolveResponse(response);
90
+ }
91
+
92
+ /**
93
+ * Clears the UC
94
+ */
95
+ public clear(): void {
96
+ new AjaxRequest(TYPO3.settings.ajaxUrls.usersettings_process).post({
97
+ action: 'clear',
98
+ });
99
+ this.data = null;
100
+ }
101
+
102
+ /**
103
+ * Checks if a key was set before, useful to not do all the undefined checks all the time
104
+ *
105
+ * @param {string} key
106
+ * @returns {boolean}
107
+ */
108
+ public isset(key: string): boolean {
109
+ const value = this.get(key);
110
+ return (typeof value !== 'undefined' && value !== null);
111
+ }
112
+
113
+ /**
114
+ * Loads the data from outside, only used for the initial call from BackendController
115
+ *
116
+ * @param {UC} data
117
+ */
118
+ public load(data: UC): void {
119
+ this.data = data;
120
+ }
121
+
122
+ /**
123
+ * Loads all data from the server
124
+ */
125
+ private loadFromServer(): UC {
126
+ const url = new URL(location.origin + TYPO3.settings.ajaxUrls.usersettings_process);
127
+ url.searchParams.set('action', 'getAll');
128
+
129
+ const request = new XMLHttpRequest();
130
+ const async = false;
131
+ request.open('GET', url.toString(), async);
132
+ request.send();
133
+
134
+ if (request.status === 200) {
135
+ return JSON.parse(request.responseText);
136
+ }
137
+
138
+ throw `Unexpected response code ${request.status}, reason: ${request.responseText}`;
139
+ }
140
+
141
+ /**
142
+ * Stores data on the server, and gets the updated data on return
143
+ * to always be up-to-date inside the browser
144
+ *
145
+ * @param {string} key
146
+ * @param {string|object} value
147
+ * @returns {Promise<UC>}
148
+ */
149
+ private async storeOnServer(key: string, value: string|object): Promise<UC> {
150
+ const response = await new AjaxRequest(TYPO3.settings.ajaxUrls.usersettings_process).post({
151
+ action: 'set',
152
+ key,
153
+ value,
154
+ });
155
+ return this.resolveResponse(response);
156
+ }
157
+
158
+ /**
159
+ * Helper function used to set a value which could have been a flat object key data["my.foo.bar"] to
160
+ * data[my][foo][bar] is called recursively by itself
161
+ *
162
+ * @param {object} data the data to be used as base
163
+ * @param {string[]} keyParts the keyParts for the subtree
164
+ * @returns {UC}
165
+ */
166
+ private getRecursiveDataByDeepKey(data: any, keyParts: string[]): any {
167
+ if (keyParts.length === 1) {
168
+ return (data || {})[keyParts[0]];
169
+ }
170
+
171
+ const firstKey = keyParts.shift();
172
+ return this.getRecursiveDataByDeepKey(data[firstKey] || {}, keyParts);
173
+ }
174
+
175
+ /**
176
+ * helper function used to set a value which could have been a flat object key data["my.foo.bar"] to
177
+ * data[my][foo][bar]
178
+ * is called recursively by itself
179
+ *
180
+ * @param {UC} data
181
+ * @param {string[]} keyParts
182
+ * @param {UC} value
183
+ * @returns {UC}
184
+ */
185
+ private setRecursiveDataByDeepKey(data: UC, keyParts: string[], value: string | UC): UC {
186
+ if (keyParts.length === 1) {
187
+ data = data || {};
188
+ data[keyParts[0]] = value;
189
+ } else {
190
+ const firstKey = keyParts.shift();
191
+ data[firstKey] = this.setRecursiveDataByDeepKey((data[firstKey] as UC) || {}, keyParts, value);
192
+ }
193
+ return data;
194
+ }
195
+
196
+ private async resolveResponse(response: AjaxResponse): Promise<UC> {
197
+ const resolvedResponse = await response.resolve();
198
+ this.data = resolvedResponse;
199
+
200
+ return resolvedResponse;
201
+ }
202
+ }
203
+
204
+ export default new Persistent();
@@ -0,0 +1,82 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { PseudoButtonLitElement } from '@typo3/backend/element/pseudo-button';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
17
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
18
+ import Notification from '@typo3/backend/notification';
19
+
20
+ enum Modes {
21
+ switch = 'switch',
22
+ exit = 'exit',
23
+ }
24
+
25
+ /**
26
+ * Module: @typo3/backend/switch-user
27
+ *
28
+ * @example
29
+ * <typo3-backend-switch-user class="some" targetuser="123" mode="switch">
30
+ * Switch user
31
+ * </typo3-backend-switch-user>
32
+ */
33
+ @customElement('typo3-backend-switch-user')
34
+ export class SwitchUser extends PseudoButtonLitElement {
35
+
36
+ @property({ type: String }) targetUser: string;
37
+ @property({ type: Modes }) mode: Modes = Modes.switch;
38
+
39
+ protected override buttonActivated(): void {
40
+ if (this.mode === Modes.switch) {
41
+ this.handleSwitchUser();
42
+ } else if (this.mode === Modes.exit) {
43
+ this.handleExitSwitchUser();
44
+ }
45
+ }
46
+
47
+ private handleSwitchUser(): void {
48
+ if (!this.targetUser) {
49
+ // Invalid request without target user
50
+ Notification.error('Switching to user went wrong.');
51
+ return;
52
+ }
53
+
54
+ (new AjaxRequest(TYPO3.settings.ajaxUrls.switch_user)).post({
55
+ targetUser: this.targetUser,
56
+ }).then(async (response: AjaxResponse): Promise<void> => {
57
+ const data = await response.resolve();
58
+ if (data.success === true && data.url) {
59
+ top.window.location.href = data.url;
60
+ } else {
61
+ Notification.error('Switching to user went wrong.');
62
+ }
63
+ });
64
+ }
65
+
66
+ private handleExitSwitchUser(): void {
67
+ (new AjaxRequest(TYPO3.settings.ajaxUrls.switch_user_exit)).post({}).then(async (response: AjaxResponse): Promise<void> => {
68
+ const data = await response.resolve();
69
+ if (data.success === true && data.url) {
70
+ top.window.location.href = data.url;
71
+ } else {
72
+ Notification.error('Exiting current user went wrong.');
73
+ }
74
+ });
75
+ }
76
+ }
77
+
78
+ declare global {
79
+ interface HTMLElementTagNameMap {
80
+ 'typo3-backend-switch-user': SwitchUser;
81
+ }
82
+ }
@@ -0,0 +1,72 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { Tab } from 'bootstrap';
15
+ import BrowserSession from './storage/browser-session';
16
+ import Client from './storage/client';
17
+ import DocumentService from '@typo3/core/document-service';
18
+
19
+ /**
20
+ * Module: @typo3/backend/tabs
21
+ * @exports @typo3/backend/tabs
22
+ */
23
+ class Tabs {
24
+ constructor() {
25
+ DocumentService.ready().then((): void => {
26
+ const tabContainers = document.querySelectorAll('.t3js-tabs');
27
+ tabContainers.forEach((tabContainer: HTMLElement): void => {
28
+ const currentActiveTab = Tabs.receiveActiveTab(tabContainer.id);
29
+ if (currentActiveTab) {
30
+ const tabButton = document.querySelector('[data-bs-target="#' + currentActiveTab + '"]');
31
+ if (tabButton) {
32
+ new Tab(tabButton).show();
33
+ }
34
+ }
35
+
36
+ const storeLastActiveTab = tabContainer.dataset.storeLastTab === '1';
37
+ if (storeLastActiveTab) {
38
+ tabContainer.addEventListener('show.bs.tab', (e: Event): void => {
39
+ const id = (e.currentTarget as HTMLElement).id;
40
+ const tabTarget = (e.target as HTMLButtonElement).dataset.bsTarget.slice(1);
41
+ Tabs.storeActiveTab(id, tabTarget);
42
+ });
43
+ }
44
+ });
45
+ });
46
+
47
+ // Remove legacy values from localStorage
48
+ Client.unsetByPrefix('tabs-');
49
+ }
50
+
51
+ /**
52
+ * Receive active tab from storage
53
+ *
54
+ * @param {string} id
55
+ * @returns {string}
56
+ */
57
+ private static receiveActiveTab(id: string): string {
58
+ return BrowserSession.get(id) || '';
59
+ }
60
+
61
+ /**
62
+ * Set active tab to storage
63
+ *
64
+ * @param {string} id
65
+ * @param {string} target
66
+ */
67
+ private static storeActiveTab(id: string, target: string): void {
68
+ BrowserSession.set(id, target);
69
+ }
70
+ }
71
+
72
+ export default new Tabs();
@@ -0,0 +1,40 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import LinkBrowser from './link-browser';
15
+ import RegularEvent from '@typo3/core/event/regular-event';
16
+
17
+ /**
18
+ * Module: @typo3/backend/telephone-link-handler
19
+ * @exports @typo3/backend/telephone-link-handler
20
+ * Telephone link interaction
21
+ */
22
+ class TelephoneLinkHandler {
23
+ constructor() {
24
+ new RegularEvent('submit', (evt: MouseEvent, targetEl: HTMLElement): void => {
25
+ evt.preventDefault();
26
+ const inputField = targetEl.querySelector('[name="ltelephone"]') as HTMLInputElement;
27
+ let value = inputField.value;
28
+ if (value === 'tel:') {
29
+ return;
30
+ }
31
+ if (value.startsWith('tel:')) {
32
+ value = value.substr(4);
33
+ }
34
+
35
+ LinkBrowser.finalizeFunction('tel:' + value);
36
+ }).delegateTo(document, '#ltelephoneform');
37
+ }
38
+ }
39
+
40
+ export default new TelephoneLinkHandler();
@@ -0,0 +1,87 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import BrowserSession from '@typo3/backend/storage/browser-session.js';
15
+ import { expect } from '@open-wc/testing';
16
+ import type { } from 'mocha';
17
+
18
+ describe('@typo3/backend/storage/browser-session', () => {
19
+ afterEach((): void => {
20
+ BrowserSession.clear();
21
+ });
22
+
23
+ it('can set and get item', () => {
24
+ const key = 'test-key';
25
+ BrowserSession.set(key, 'foo');
26
+ expect(BrowserSession.get(key)).to.equal('foo');
27
+ });
28
+
29
+ it('can check if item is set', () => {
30
+ const key = 'test-key';
31
+ expect(BrowserSession.isset(key)).to.be.false;
32
+ BrowserSession.set(key, 'foo');
33
+ expect(BrowserSession.isset(key)).to.be.true;
34
+ });
35
+
36
+ it('can get multiple items by prefix', () => {
37
+ const entries = {
38
+ 'test-prefix-foo': 'foo',
39
+ 'test-prefix-bar': 'bar',
40
+ 'test-prefix-baz': 'baz',
41
+ };
42
+ for (const [key, value] of Object.entries(entries)) {
43
+ BrowserSession.set(key, value);
44
+ }
45
+
46
+ const items = BrowserSession.getByPrefix('test-prefix-');
47
+ expect(items).to.eql(entries);
48
+ });
49
+
50
+ it('can remove item', () => {
51
+ const key = 'item-to-be-removed';
52
+ BrowserSession.set(key, 'foo');
53
+ expect(BrowserSession.get(key)).not.to.be.null;
54
+
55
+ BrowserSession.unset(key);
56
+ expect(BrowserSession.get(key)).to.be.null;
57
+ });
58
+
59
+ it('can remove multiple items by prefix', () => {
60
+ const entries = {
61
+ 'test-prefix-foo': 'foo',
62
+ 'test-prefix-bar': 'bar',
63
+ 'test-prefix-baz': 'baz',
64
+ };
65
+ for (const [key, value] of Object.entries(entries)) {
66
+ BrowserSession.set(key, value);
67
+ }
68
+ BrowserSession.unsetByPrefix('test-prefix-');
69
+
70
+ const items = BrowserSession.getByPrefix('test-prefix-');
71
+ expect(items).to.be.empty;
72
+ });
73
+
74
+ it('can clear storage', () => {
75
+ const entries = {
76
+ 'foo': 'foo',
77
+ 'baz': 'bencer',
78
+ 'huselpusel': '42',
79
+ };
80
+ for (const [key, value] of Object.entries(entries)) {
81
+ BrowserSession.set(key, value);
82
+ }
83
+ BrowserSession.clear();
84
+
85
+ expect(sessionStorage).to.be.empty;
86
+ });
87
+ });
@@ -0,0 +1,87 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import Client from '@typo3/backend/storage/client.js';
15
+ import { expect } from '@open-wc/testing';
16
+ import type { } from 'mocha';
17
+
18
+ describe('@typo3/backend/storage/client', () => {
19
+ afterEach((): void => {
20
+ Client.clear();
21
+ });
22
+
23
+ it('can set and get item', () => {
24
+ const key = 'test-key';
25
+ Client.set(key, 'foo');
26
+ expect(Client.get(key)).to.equal('foo');
27
+ });
28
+
29
+ it('can check if item is set', () => {
30
+ const key = 'test-key';
31
+ expect(Client.isset(key)).to.be.false;
32
+ Client.set(key, 'foo');
33
+ expect(Client.isset(key)).to.be.true;
34
+ });
35
+
36
+ it('can get multiple items by prefix', () => {
37
+ const entries = {
38
+ 'test-prefix-foo': 'foo',
39
+ 'test-prefix-bar': 'bar',
40
+ 'test-prefix-baz': 'baz',
41
+ };
42
+ for (const [key, value] of Object.entries(entries)) {
43
+ Client.set(key, value);
44
+ }
45
+
46
+ const items = Client.getByPrefix('test-prefix-');
47
+ expect(items).to.eql(entries);
48
+ });
49
+
50
+ it('can remove item', () => {
51
+ const key = 'item-to-be-removed';
52
+ Client.set(key, 'foo');
53
+ expect(Client.get(key)).not.to.be.null;
54
+
55
+ Client.unset(key);
56
+ expect(Client.get(key)).to.be.null;
57
+ });
58
+
59
+ it('can remove multiple items by prefix', () => {
60
+ const entries = {
61
+ 'test-prefix-foo': 'foo',
62
+ 'test-prefix-bar': 'bar',
63
+ 'test-prefix-baz': 'baz',
64
+ };
65
+ for (const [key, value] of Object.entries(entries)) {
66
+ Client.set(key, value);
67
+ }
68
+ Client.unsetByPrefix('test-prefix-');
69
+
70
+ const items = Client.getByPrefix('test-prefix-');
71
+ expect(items).to.be.empty;
72
+ });
73
+
74
+ it('can clear storage', () => {
75
+ const entries = {
76
+ 'foo': 'foo',
77
+ 'baz': 'bencer',
78
+ 'huselpusel': '42',
79
+ };
80
+ for (const [key, value] of Object.entries(entries)) {
81
+ Client.set(key, value);
82
+ }
83
+ Client.clear();
84
+
85
+ expect(localStorage).to.be.empty;
86
+ });
87
+ });
@@ -0,0 +1,51 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import DomHelper from '@typo3/backend/utility/dom-helper.js';
15
+ import { expect } from '@open-wc/testing';
16
+
17
+ describe('@typo3/backend/utility/dom-helper', () => {
18
+ it('parents() returns all parents matching the selector', () => {
19
+ const markup =
20
+ `<div class="dummy-matching-element">
21
+ <ul>
22
+ <li>
23
+ <p class="dummy-matching-element">
24
+ <span class="dummy-matching-element">
25
+ <span id="enter-here"></span>
26
+ </span>
27
+ </p>
28
+ </li>
29
+ </ul>
30
+ </div>`;
31
+ const wrapperElement = document.createElement('div');
32
+ wrapperElement.append(document.createRange().createContextualFragment(markup));
33
+
34
+ const parents = DomHelper.parents(wrapperElement.querySelector('#enter-here'), '.dummy-matching-element');
35
+ expect(parents).to.length(3);
36
+ expect(parents.map((el: HTMLElement) => el.tagName)).to.have.ordered.members(['SPAN', 'P', 'DIV']);
37
+ });
38
+
39
+ it('nextAll() returns a proper list of all next elements', () => {
40
+ const wrapperElement = document.createElement('div');
41
+ const pElement = document.createElement('p');
42
+ const strongElement = document.createElement('strong');
43
+ const ulElement = document.createElement('ul');
44
+ ulElement.append(document.createElement('li'));
45
+ wrapperElement.append(pElement, strongElement, ulElement);
46
+
47
+ const nextAll = DomHelper.nextAll(pElement);
48
+ expect(nextAll).to.length(2);
49
+ expect(nextAll).to.have.ordered.members([strongElement, ulElement]);
50
+ });
51
+ });
@@ -0,0 +1,28 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { BackendException } from '@typo3/backend/backend-exception.js';
15
+ import { expect } from '@open-wc/testing';
16
+ import type { } from 'mocha';
17
+
18
+ describe('@typo3/backend/backend-exception', () => {
19
+ it('sets exception message', () => {
20
+ const backendException: BackendException = new BackendException('some message');
21
+ expect(backendException.message).to.equal('some message');
22
+ });
23
+
24
+ it('sets exception code', () => {
25
+ const backendException: BackendException = new BackendException('', 12345);
26
+ expect(backendException.code).to.equal(12345);
27
+ });
28
+ });