@nocios/crudify-components 2.0.32 → 2.0.38
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.
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/components/CrudiaAutoGenerate.tsx.html +583 -0
- package/coverage/components/CrudiaFileField/CrudiaFileField.tsx.html +1276 -0
- package/coverage/components/CrudiaFileField/components/DeleteConfirmationDialog.tsx.html +355 -0
- package/coverage/components/CrudiaFileField/components/DropZone.tsx.html +433 -0
- package/coverage/components/CrudiaFileField/components/FileItemRow.tsx.html +751 -0
- package/coverage/components/CrudiaFileField/components/FileThumbnail.tsx.html +1195 -0
- package/coverage/components/CrudiaFileField/components/index.html +176 -0
- package/coverage/components/CrudiaFileField/components/index.ts.html +115 -0
- package/coverage/components/CrudiaFileField/hooks/index.html +146 -0
- package/coverage/components/CrudiaFileField/hooks/index.ts.html +112 -0
- package/coverage/components/CrudiaFileField/hooks/useDeleteConfirmation.ts.html +421 -0
- package/coverage/components/CrudiaFileField/hooks/useDragDrop.ts.html +403 -0
- package/coverage/components/CrudiaFileField/index.html +131 -0
- package/coverage/components/CrudiaFileField/index.ts.html +112 -0
- package/coverage/components/CrudiaFileField/utils/formatters.ts.html +163 -0
- package/coverage/components/CrudiaFileField/utils/icons.tsx.html +253 -0
- package/coverage/components/CrudiaFileField/utils/index.html +131 -0
- package/coverage/components/CrudiaMarkdownField.tsx.html +619 -0
- package/coverage/components/CrudifyLogin/Forms/CheckCodeForm.tsx.html +586 -0
- package/coverage/components/CrudifyLogin/Forms/ForgotPasswordForm.tsx.html +694 -0
- package/coverage/components/CrudifyLogin/Forms/LoginForm.tsx.html +835 -0
- package/coverage/components/CrudifyLogin/Forms/ResetPasswordForm.tsx.html +1180 -0
- package/coverage/components/CrudifyLogin/Forms/components/CodeInput.tsx.html +283 -0
- package/coverage/components/CrudifyLogin/Forms/components/FormAlert.tsx.html +202 -0
- package/coverage/components/CrudifyLogin/Forms/components/PasswordInput.tsx.html +340 -0
- package/coverage/components/CrudifyLogin/Forms/components/index.html +161 -0
- package/coverage/components/CrudifyLogin/Forms/components/index.ts.html +106 -0
- package/coverage/components/CrudifyLogin/Forms/index.html +161 -0
- package/coverage/components/CrudifyLogin/Forms/utils/errorTranslation.ts.html +268 -0
- package/coverage/components/CrudifyLogin/Forms/utils/index.html +161 -0
- package/coverage/components/CrudifyLogin/Forms/utils/index.ts.html +106 -0
- package/coverage/components/CrudifyLogin/Forms/utils/paramUtils.ts.html +478 -0
- package/coverage/components/CrudifyLogin/Forms/utils/validation.ts.html +289 -0
- package/coverage/components/CrudifyLogin/components/CrudifyInitializer.tsx.html +262 -0
- package/coverage/components/CrudifyLogin/components/index.html +116 -0
- package/coverage/components/CrudifyLogin/context/CrudifyProvider.tsx.html +382 -0
- package/coverage/components/CrudifyLogin/context/I18nProvider.tsx.html +397 -0
- package/coverage/components/CrudifyLogin/context/LoginStateProvider.tsx.html +1249 -0
- package/coverage/components/CrudifyLogin/context/index.html +146 -0
- package/coverage/components/CrudifyLogin/hooks/index.html +116 -0
- package/coverage/components/CrudifyLogin/hooks/useTranslationsFromUrl.ts.html +292 -0
- package/coverage/components/CrudifyLogin/index.html +116 -0
- package/coverage/components/CrudifyLogin/index.tsx.html +475 -0
- package/coverage/components/GlobalNotificationProvider.tsx.html +781 -0
- package/coverage/components/LoginComponent.tsx.html +727 -0
- package/coverage/components/PasswordRequirements/index.html +116 -0
- package/coverage/components/PasswordRequirements/index.tsx.html +226 -0
- package/coverage/components/PublicPolicies/FieldSelector/FieldSelector.tsx.html +982 -0
- package/coverage/components/PublicPolicies/FieldSelector/index.html +131 -0
- package/coverage/components/PublicPolicies/FieldSelector/index.ts.html +85 -0
- package/coverage/components/PublicPolicies/Policies.tsx.html +610 -0
- package/coverage/components/PublicPolicies/PolicyItem/PolicyItem.tsx.html +856 -0
- package/coverage/components/PublicPolicies/PolicyItem/index.html +131 -0
- package/coverage/components/PublicPolicies/PolicyItem/index.ts.html +85 -0
- package/coverage/components/PublicPolicies/constants.ts.html +127 -0
- package/coverage/components/PublicPolicies/index.html +131 -0
- package/coverage/components/SessionTimeIndicator/index.html +116 -0
- package/coverage/components/SessionTimeIndicator/index.tsx.html +505 -0
- package/coverage/components/UserProfile/UserProfileDisplay.tsx.html +826 -0
- package/coverage/components/UserProfile/index.html +131 -0
- package/coverage/components/UserProfile/index.ts.html +85 -0
- package/coverage/components/index.html +176 -0
- package/coverage/components/index.ts.html +160 -0
- package/coverage/core/CrossTabSyncManager.ts.html +814 -0
- package/coverage/core/CrudifyInitializationManager.ts.html +1132 -0
- package/coverage/core/SessionManager.ts.html +2764 -0
- package/coverage/core/index.html +146 -0
- package/coverage/coverage-final.json +87 -0
- package/coverage/favicon.png +0 -0
- package/coverage/hooks/index.html +131 -0
- package/coverage/hooks/useAutoGenerate.ts.html +562 -0
- package/coverage/hooks/useFileUpload/index.html +131 -0
- package/coverage/hooks/useFileUpload/index.ts.html +112 -0
- package/coverage/hooks/useFileUpload/services/index.html +116 -0
- package/coverage/hooks/useFileUpload/services/uploadService.ts.html +610 -0
- package/coverage/hooks/useFileUpload/useFileUpload.ts.html +1870 -0
- package/coverage/hooks/useFileUpload/utils/fileUtils.ts.html +271 -0
- package/coverage/hooks/useFileUpload/utils/index.html +146 -0
- package/coverage/hooks/useFileUpload/utils/mimeTypes.ts.html +235 -0
- package/coverage/hooks/useFileUpload/utils/validation.ts.html +379 -0
- package/coverage/hooks/useSession/constants.ts.html +217 -0
- package/coverage/hooks/useSession/hooks/index.html +176 -0
- package/coverage/hooks/useSession/hooks/useAuthEventSubscriber.ts.html +331 -0
- package/coverage/hooks/useSession/hooks/useCrossTabSync.ts.html +433 -0
- package/coverage/hooks/useSession/hooks/useSessionActions.ts.html +664 -0
- package/coverage/hooks/useSession/hooks/useSessionState.ts.html +295 -0
- package/coverage/hooks/useSession/hooks/useTokenRefreshScheduler.ts.html +490 -0
- package/coverage/hooks/useSession/index.html +161 -0
- package/coverage/hooks/useSession/index.ts.html +127 -0
- package/coverage/hooks/useSession/types.ts.html +427 -0
- package/coverage/hooks/useSession/useSession.ts.html +526 -0
- package/coverage/hooks/useSession/utils/index.html +131 -0
- package/coverage/hooks/useSession/utils/initializeSession.ts.html +424 -0
- package/coverage/hooks/useSession/utils/tokenUtils.ts.html +280 -0
- package/coverage/hooks/useUserProfile.ts.html +658 -0
- package/coverage/index.html +566 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/providers/SessionProvider.tsx.html +1150 -0
- package/coverage/providers/TranslationsProvider.tsx.html +1450 -0
- package/coverage/providers/index.html +131 -0
- package/coverage/services/credentialsEventBus.ts.html +310 -0
- package/coverage/services/index.html +131 -0
- package/coverage/services/translationService.ts.html +1318 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/translations/critical.ts.html +1195 -0
- package/coverage/translations/index.html +116 -0
- package/coverage/types/index.html +116 -0
- package/coverage/types/password.ts.html +178 -0
- package/coverage/utils/authEventBus.ts.html +454 -0
- package/coverage/utils/configResolver.ts.html +460 -0
- package/coverage/utils/cookieSync.ts.html +580 -0
- package/coverage/utils/errorHandler.ts.html +1264 -0
- package/coverage/utils/errorTranslation.ts.html +862 -0
- package/coverage/utils/index.html +296 -0
- package/coverage/utils/jwtUtils.ts.html +301 -0
- package/coverage/utils/logger.ts.html +901 -0
- package/coverage/utils/navigationTracker.ts.html +565 -0
- package/coverage/utils/passwordValidation.ts.html +259 -0
- package/coverage/utils/redirectSecurity.ts.html +715 -0
- package/coverage/utils/tenantConfig.ts.html +700 -0
- package/coverage/utils/tokenStorage.ts.html +1768 -0
- package/coverage/utils/webCrypto.ts.html +472 -0
- package/dist/{CrudiaMarkdownField-C54-A_J3.d.mts → CrudiaMarkdownField-BvJn2GL8.d.mts} +17 -7
- package/dist/{CrudiaMarkdownField-C8HQh7s5.d.ts → CrudiaMarkdownField-CggOpcBM.d.ts} +17 -7
- package/dist/chunk-44VU4TSP.mjs +1 -0
- package/dist/chunk-4LMFQECS.js +1 -0
- package/dist/chunk-77UKXG5L.mjs +1 -0
- package/dist/{chunk-4VN5YRYZ.js → chunk-BXFEQ6KP.js} +1 -1
- package/dist/{chunk-6ONAT4QU.js → chunk-H6XXWDUT.js} +1 -1
- package/dist/chunk-NIRLP2TC.js +1 -0
- package/dist/chunk-O4FUHIQG.mjs +1 -0
- package/dist/chunk-SYHNHKFA.mjs +1 -0
- package/dist/chunk-W4ZYKPOK.js +1 -0
- package/dist/{chunk-RJBX4MWF.mjs → chunk-WMLIOPUC.mjs} +1 -1
- package/dist/components.d.mts +1 -1
- package/dist/components.d.ts +1 -1
- package/dist/components.js +1 -1
- package/dist/components.mjs +1 -1
- package/dist/errorTranslation-D-Y7uNN_.d.mts +141 -0
- package/dist/errorTranslation-DDlAXpMl.d.ts +141 -0
- package/dist/hooks.d.mts +2 -2
- package/dist/hooks.d.ts +2 -2
- package/dist/hooks.js +1 -1
- package/dist/hooks.mjs +1 -1
- package/dist/{index-DY90WVQQ.d.mts → index-U--xRr8A.d.mts} +225 -191
- package/dist/{index-d1vE803G.d.ts → index-dXVRVcEB.d.ts} +225 -191
- package/dist/index.d.mts +179 -6
- package/dist/index.d.ts +179 -6
- package/dist/index.js +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{errorTranslation-By5Av0tL.d.ts → tenantConfig-DqJqQkoR.d.mts} +116 -139
- package/dist/{errorTranslation-DeeDj7Vt.d.mts → tenantConfig-DqJqQkoR.d.ts} +116 -139
- package/dist/utils.d.mts +2 -2
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +1 -1
- package/dist/utils.mjs +1 -1
- package/package.json +1 -1
- package/coverage/.tmp/coverage-102.json +0 -1
- package/coverage/.tmp/coverage-103.json +0 -1
- package/coverage/.tmp/coverage-104.json +0 -1
- package/coverage/.tmp/coverage-105.json +0 -1
- package/coverage/.tmp/coverage-106.json +0 -1
- package/coverage/.tmp/coverage-107.json +0 -1
- package/dist/api-B4uXiHF0.d.mts +0 -118
- package/dist/api-B4uXiHF0.d.ts +0 -118
- package/dist/chunk-4ILUXVPW.mjs +0 -1
- package/dist/chunk-5XBTRBE5.js +0 -1
- package/dist/chunk-CR5KJUST.js +0 -1
- package/dist/chunk-H5M2Q6PB.mjs +0 -1
- package/dist/chunk-JAPL7EZJ.mjs +0 -1
- package/dist/chunk-L7GKP6XY.mjs +0 -1
- package/dist/chunk-NSV6ECYO.js +0 -1
- package/dist/chunk-PTUSZGL4.mjs +0 -1
- package/dist/chunk-T6R65ROU.js +0 -1
|
@@ -0,0 +1,610 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for hooks/useFileUpload/services/uploadService.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../../index.html">All files</a> / <a href="index.html">hooks/useFileUpload/services</a> uploadService.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">77.71% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>136/175</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">50% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>7/14</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">75% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>3/4</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">77.71% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>136/175</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line medium'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
242
|
+
<span class="cline-any cline-yes">1x</span>
|
|
243
|
+
<span class="cline-any cline-yes">1x</span>
|
|
244
|
+
<span class="cline-any cline-yes">1x</span>
|
|
245
|
+
<span class="cline-any cline-yes">1x</span>
|
|
246
|
+
<span class="cline-any cline-yes">1x</span>
|
|
247
|
+
<span class="cline-any cline-yes">1x</span>
|
|
248
|
+
<span class="cline-any cline-yes">1x</span>
|
|
249
|
+
<span class="cline-any cline-yes">1x</span>
|
|
250
|
+
<span class="cline-any cline-yes">1x</span>
|
|
251
|
+
<span class="cline-any cline-yes">1x</span>
|
|
252
|
+
<span class="cline-any cline-yes">1x</span>
|
|
253
|
+
<span class="cline-any cline-yes">1x</span>
|
|
254
|
+
<span class="cline-any cline-yes">1x</span>
|
|
255
|
+
<span class="cline-any cline-yes">1x</span>
|
|
256
|
+
<span class="cline-any cline-yes">1x</span>
|
|
257
|
+
<span class="cline-any cline-yes">1x</span>
|
|
258
|
+
<span class="cline-any cline-yes">1x</span>
|
|
259
|
+
<span class="cline-any cline-yes">1x</span>
|
|
260
|
+
<span class="cline-any cline-yes">1x</span>
|
|
261
|
+
<span class="cline-any cline-yes">1x</span>
|
|
262
|
+
<span class="cline-any cline-yes">1x</span>
|
|
263
|
+
<span class="cline-any cline-yes">1x</span>
|
|
264
|
+
<span class="cline-any cline-yes">1x</span>
|
|
265
|
+
<span class="cline-any cline-yes">1x</span>
|
|
266
|
+
<span class="cline-any cline-yes">1x</span>
|
|
267
|
+
<span class="cline-any cline-yes">1x</span>
|
|
268
|
+
<span class="cline-any cline-yes">1x</span>
|
|
269
|
+
<span class="cline-any cline-yes">1x</span>
|
|
270
|
+
<span class="cline-any cline-yes">1x</span>
|
|
271
|
+
<span class="cline-any cline-yes">1x</span>
|
|
272
|
+
<span class="cline-any cline-yes">1x</span>
|
|
273
|
+
<span class="cline-any cline-yes">1x</span>
|
|
274
|
+
<span class="cline-any cline-yes">1x</span>
|
|
275
|
+
<span class="cline-any cline-yes">1x</span>
|
|
276
|
+
<span class="cline-any cline-yes">1x</span>
|
|
277
|
+
<span class="cline-any cline-yes">1x</span>
|
|
278
|
+
<span class="cline-any cline-yes">1x</span>
|
|
279
|
+
<span class="cline-any cline-yes">1x</span>
|
|
280
|
+
<span class="cline-any cline-yes">1x</span>
|
|
281
|
+
<span class="cline-any cline-yes">1x</span>
|
|
282
|
+
<span class="cline-any cline-yes">1x</span>
|
|
283
|
+
<span class="cline-any cline-yes">5x</span>
|
|
284
|
+
<span class="cline-any cline-yes">5x</span>
|
|
285
|
+
<span class="cline-any cline-yes">5x</span>
|
|
286
|
+
<span class="cline-any cline-yes">5x</span>
|
|
287
|
+
<span class="cline-any cline-yes">5x</span>
|
|
288
|
+
<span class="cline-any cline-yes">5x</span>
|
|
289
|
+
<span class="cline-any cline-no"> </span>
|
|
290
|
+
<span class="cline-any cline-no"> </span>
|
|
291
|
+
<span class="cline-any cline-yes">5x</span>
|
|
292
|
+
<span class="cline-any cline-yes">5x</span>
|
|
293
|
+
<span class="cline-any cline-yes">5x</span>
|
|
294
|
+
<span class="cline-any cline-yes">5x</span>
|
|
295
|
+
<span class="cline-any cline-yes">5x</span>
|
|
296
|
+
<span class="cline-any cline-yes">5x</span>
|
|
297
|
+
<span class="cline-any cline-yes">5x</span>
|
|
298
|
+
<span class="cline-any cline-yes">5x</span>
|
|
299
|
+
<span class="cline-any cline-yes">5x</span>
|
|
300
|
+
<span class="cline-any cline-yes">5x</span>
|
|
301
|
+
<span class="cline-any cline-yes">5x</span>
|
|
302
|
+
<span class="cline-any cline-yes">5x</span>
|
|
303
|
+
<span class="cline-any cline-no"> </span>
|
|
304
|
+
<span class="cline-any cline-no"> </span>
|
|
305
|
+
<span class="cline-any cline-yes">5x</span>
|
|
306
|
+
<span class="cline-any cline-yes">5x</span>
|
|
307
|
+
<span class="cline-any cline-yes">5x</span>
|
|
308
|
+
<span class="cline-any cline-yes">5x</span>
|
|
309
|
+
<span class="cline-any cline-yes">5x</span>
|
|
310
|
+
<span class="cline-any cline-yes">5x</span>
|
|
311
|
+
<span class="cline-any cline-no"> </span>
|
|
312
|
+
<span class="cline-any cline-no"> </span>
|
|
313
|
+
<span class="cline-any cline-yes">5x</span>
|
|
314
|
+
<span class="cline-any cline-yes">5x</span>
|
|
315
|
+
<span class="cline-any cline-yes">5x</span>
|
|
316
|
+
<span class="cline-any cline-yes">5x</span>
|
|
317
|
+
<span class="cline-any cline-yes">5x</span>
|
|
318
|
+
<span class="cline-any cline-yes">5x</span>
|
|
319
|
+
<span class="cline-any cline-yes">5x</span>
|
|
320
|
+
<span class="cline-any cline-yes">5x</span>
|
|
321
|
+
<span class="cline-any cline-yes">5x</span>
|
|
322
|
+
<span class="cline-any cline-yes">5x</span>
|
|
323
|
+
<span class="cline-any cline-yes">5x</span>
|
|
324
|
+
<span class="cline-any cline-yes">5x</span>
|
|
325
|
+
<span class="cline-any cline-yes">5x</span>
|
|
326
|
+
<span class="cline-any cline-yes">1x</span>
|
|
327
|
+
<span class="cline-any cline-yes">1x</span>
|
|
328
|
+
<span class="cline-any cline-yes">1x</span>
|
|
329
|
+
<span class="cline-any cline-yes">1x</span>
|
|
330
|
+
<span class="cline-any cline-yes">1x</span>
|
|
331
|
+
<span class="cline-any cline-yes">1x</span>
|
|
332
|
+
<span class="cline-any cline-yes">1x</span>
|
|
333
|
+
<span class="cline-any cline-yes">1x</span>
|
|
334
|
+
<span class="cline-any cline-yes">5x</span>
|
|
335
|
+
<span class="cline-any cline-yes">5x</span>
|
|
336
|
+
<span class="cline-any cline-yes">5x</span>
|
|
337
|
+
<span class="cline-any cline-yes">5x</span>
|
|
338
|
+
<span class="cline-any cline-no"> </span>
|
|
339
|
+
<span class="cline-any cline-no"> </span>
|
|
340
|
+
<span class="cline-any cline-no"> </span>
|
|
341
|
+
<span class="cline-any cline-no"> </span>
|
|
342
|
+
<span class="cline-any cline-yes">5x</span>
|
|
343
|
+
<span class="cline-any cline-yes">5x</span>
|
|
344
|
+
<span class="cline-any cline-yes">5x</span>
|
|
345
|
+
<span class="cline-any cline-yes">5x</span>
|
|
346
|
+
<span class="cline-any cline-yes">5x</span>
|
|
347
|
+
<span class="cline-any cline-yes">5x</span>
|
|
348
|
+
<span class="cline-any cline-no"> </span>
|
|
349
|
+
<span class="cline-any cline-no"> </span>
|
|
350
|
+
<span class="cline-any cline-yes">5x</span>
|
|
351
|
+
<span class="cline-any cline-yes">5x</span>
|
|
352
|
+
<span class="cline-any cline-yes">5x</span>
|
|
353
|
+
<span class="cline-any cline-no"> </span>
|
|
354
|
+
<span class="cline-any cline-yes">5x</span>
|
|
355
|
+
<span class="cline-any cline-yes">5x</span>
|
|
356
|
+
<span class="cline-any cline-yes">5x</span>
|
|
357
|
+
<span class="cline-any cline-no"> </span>
|
|
358
|
+
<span class="cline-any cline-yes">5x</span>
|
|
359
|
+
<span class="cline-any cline-yes">5x</span>
|
|
360
|
+
<span class="cline-any cline-yes">5x</span>
|
|
361
|
+
<span class="cline-any cline-yes">5x</span>
|
|
362
|
+
<span class="cline-any cline-yes">5x</span>
|
|
363
|
+
<span class="cline-any cline-yes">5x</span>
|
|
364
|
+
<span class="cline-any cline-yes">5x</span>
|
|
365
|
+
<span class="cline-any cline-yes">1x</span>
|
|
366
|
+
<span class="cline-any cline-yes">1x</span>
|
|
367
|
+
<span class="cline-any cline-yes">1x</span>
|
|
368
|
+
<span class="cline-any cline-yes">1x</span>
|
|
369
|
+
<span class="cline-any cline-yes">1x</span>
|
|
370
|
+
<span class="cline-any cline-yes">1x</span>
|
|
371
|
+
<span class="cline-any cline-yes">1x</span>
|
|
372
|
+
<span class="cline-any cline-yes">1x</span>
|
|
373
|
+
<span class="cline-any cline-yes">1x</span>
|
|
374
|
+
<span class="cline-any cline-no"> </span>
|
|
375
|
+
<span class="cline-any cline-no"> </span>
|
|
376
|
+
<span class="cline-any cline-yes">1x</span>
|
|
377
|
+
<span class="cline-any cline-yes">1x</span>
|
|
378
|
+
<span class="cline-any cline-yes">1x</span>
|
|
379
|
+
<span class="cline-any cline-yes">1x</span>
|
|
380
|
+
<span class="cline-any cline-yes">1x</span>
|
|
381
|
+
<span class="cline-any cline-yes">1x</span>
|
|
382
|
+
<span class="cline-any cline-yes">1x</span>
|
|
383
|
+
<span class="cline-any cline-yes">1x</span>
|
|
384
|
+
<span class="cline-any cline-no"> </span>
|
|
385
|
+
<span class="cline-any cline-no"> </span>
|
|
386
|
+
<span class="cline-any cline-no"> </span>
|
|
387
|
+
<span class="cline-any cline-no"> </span>
|
|
388
|
+
<span class="cline-any cline-yes">1x</span>
|
|
389
|
+
<span class="cline-any cline-yes">1x</span>
|
|
390
|
+
<span class="cline-any cline-yes">1x</span>
|
|
391
|
+
<span class="cline-any cline-yes">1x</span>
|
|
392
|
+
<span class="cline-any cline-yes">1x</span>
|
|
393
|
+
<span class="cline-any cline-yes">1x</span>
|
|
394
|
+
<span class="cline-any cline-yes">1x</span>
|
|
395
|
+
<span class="cline-any cline-yes">1x</span>
|
|
396
|
+
<span class="cline-any cline-yes">1x</span>
|
|
397
|
+
<span class="cline-any cline-no"> </span>
|
|
398
|
+
<span class="cline-any cline-no"> </span>
|
|
399
|
+
<span class="cline-any cline-no"> </span>
|
|
400
|
+
<span class="cline-any cline-no"> </span>
|
|
401
|
+
<span class="cline-any cline-no"> </span>
|
|
402
|
+
<span class="cline-any cline-no"> </span>
|
|
403
|
+
<span class="cline-any cline-no"> </span>
|
|
404
|
+
<span class="cline-any cline-no"> </span>
|
|
405
|
+
<span class="cline-any cline-no"> </span>
|
|
406
|
+
<span class="cline-any cline-no"> </span>
|
|
407
|
+
<span class="cline-any cline-no"> </span>
|
|
408
|
+
<span class="cline-any cline-no"> </span>
|
|
409
|
+
<span class="cline-any cline-no"> </span>
|
|
410
|
+
<span class="cline-any cline-no"> </span>
|
|
411
|
+
<span class="cline-any cline-no"> </span>
|
|
412
|
+
<span class="cline-any cline-no"> </span>
|
|
413
|
+
<span class="cline-any cline-no"> </span>
|
|
414
|
+
<span class="cline-any cline-no"> </span>
|
|
415
|
+
<span class="cline-any cline-no"> </span>
|
|
416
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/**
|
|
417
|
+
* Upload service for useFileUpload hook
|
|
418
|
+
* Handles S3 and API operations without state management
|
|
419
|
+
*/
|
|
420
|
+
|
|
421
|
+
import crudify from "@nocios/crudify-sdk";
|
|
422
|
+
import { crudifyInitManager } from "../../../core/CrudifyInitializationManager";
|
|
423
|
+
import type { SignedUrlResponseData, FileUrlResponseData } from "../types";
|
|
424
|
+
import { generateUniqueFileName, extractRelativePath } from "../utils/fileUtils";
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Result of generating a signed URL
|
|
428
|
+
*/
|
|
429
|
+
export interface SignedUrlResult {
|
|
430
|
+
uploadUrl: string;
|
|
431
|
+
filePath: string;
|
|
432
|
+
publicUrl?: string;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* Callbacks for upload progress
|
|
437
|
+
*/
|
|
438
|
+
export interface UploadCallbacks {
|
|
439
|
+
onProgress?: (progress: number) => void;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Result of a delete operation
|
|
444
|
+
*/
|
|
445
|
+
export interface DeleteResult {
|
|
446
|
+
success: boolean;
|
|
447
|
+
error?: string;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Generates a signed URL for file upload
|
|
452
|
+
* @param fileName - Original file name
|
|
453
|
+
* @param contentType - MIME type of the file
|
|
454
|
+
* @param visibility - "public" or "private"
|
|
455
|
+
* @returns SignedUrlResult with uploadUrl and filePath
|
|
456
|
+
*/
|
|
457
|
+
export const generateSignedUploadUrl = async (
|
|
458
|
+
fileName: string,
|
|
459
|
+
contentType: string,
|
|
460
|
+
visibility: "public" | "private",
|
|
461
|
+
): Promise<SignedUrlResult> => {
|
|
462
|
+
// Verify crudify is initialized
|
|
463
|
+
if (!crudifyInitManager.isInitialized()) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
464
|
+
<span class="cstat-no" title="statement not covered" > throw new Error("Crudify is not initialized. Please wait for the application to finish loading.");</span>
|
|
465
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
466
|
+
|
|
467
|
+
// Generate unique name to avoid collisions
|
|
468
|
+
const uniqueFileName = generateUniqueFileName(fileName);
|
|
469
|
+
|
|
470
|
+
// Get pre-signed URL WITH VISIBILITY
|
|
471
|
+
const signedUrlResponse = await crudify.generateSignedUrl({
|
|
472
|
+
fileName: uniqueFileName,
|
|
473
|
+
contentType,
|
|
474
|
+
visibility,
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
if (!signedUrlResponse.success || !signedUrlResponse.data) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
478
|
+
<span class="cstat-no" title="statement not covered" > throw new Error("Failed to get upload URL");</span>
|
|
479
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
480
|
+
|
|
481
|
+
// Response contains { uploadUrl, s3Key, visibility, publicUrl }
|
|
482
|
+
const signedData = signedUrlResponse.data as SignedUrlResponseData;
|
|
483
|
+
const { uploadUrl, s3Key: fullS3Key, publicUrl } = signedData;
|
|
484
|
+
|
|
485
|
+
if (!uploadUrl || !fullS3Key) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
486
|
+
<span class="cstat-no" title="statement not covered" > throw new Error("Incomplete signed URL response");</span>
|
|
487
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
488
|
+
|
|
489
|
+
// Extract filePath by removing the first segment (subscriberKey)
|
|
490
|
+
// fullS3Key format: "subscriberKey/public/path/file.ext" or "subscriberKey/private/path/file.ext"
|
|
491
|
+
// filePath format: "public/path/file.ext" or "private/path/file.ext"
|
|
492
|
+
const firstSlashIndex = fullS3Key.indexOf("/");
|
|
493
|
+
const filePath = firstSlashIndex > 0 ? fullS3Key.substring(firstSlashIndex + 1<span class="branch-0 cbranch-no" title="branch not covered" >) : fullS3Key;</span>
|
|
494
|
+
|
|
495
|
+
return {
|
|
496
|
+
uploadUrl,
|
|
497
|
+
filePath,
|
|
498
|
+
publicUrl: visibility === "public" ? publicUrl : undefined,
|
|
499
|
+
};
|
|
500
|
+
};
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Uploads a file to a signed URL using XMLHttpRequest for progress tracking
|
|
504
|
+
* @param file - The file to upload
|
|
505
|
+
* @param uploadUrl - The signed URL to upload to
|
|
506
|
+
* @param callbacks - Optional progress callback
|
|
507
|
+
*/
|
|
508
|
+
export const uploadToSignedUrl = async (file: File, uploadUrl: string, callbacks?: UploadCallbacks): Promise<void> => {
|
|
509
|
+
return new Promise<void>((resolve, reject) => {
|
|
510
|
+
const xhr = new XMLHttpRequest();
|
|
511
|
+
|
|
512
|
+
xhr.upload.addEventListener("progress", (event) => {
|
|
513
|
+
<span class="cstat-no" title="statement not covered" > if (event.lengthComputable && callbacks?.onProgress) {</span>
|
|
514
|
+
<span class="cstat-no" title="statement not covered" > const progress = Math.round((event.loaded / event.total) * 100);</span>
|
|
515
|
+
<span class="cstat-no" title="statement not covered" > callbacks.onProgress(progress);</span>
|
|
516
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
xhr.addEventListener("load", () => {
|
|
520
|
+
if (xhr.status >= 200 && xhr.status < 300) {
|
|
521
|
+
resolve();
|
|
522
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > } else {</span>
|
|
523
|
+
<span class="cstat-no" title="statement not covered" > reject(new Error(`Upload failed with status ${xhr.status}`));</span>
|
|
524
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
xhr.addEventListener("error", () => {
|
|
528
|
+
<span class="cstat-no" title="statement not covered" > reject(new Error("Network error during upload"));</span>
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
xhr.addEventListener("abort", () => {
|
|
532
|
+
<span class="cstat-no" title="statement not covered" > reject(new Error("Upload cancelled"));</span>
|
|
533
|
+
});
|
|
534
|
+
|
|
535
|
+
xhr.open("PUT", uploadUrl);
|
|
536
|
+
xhr.setRequestHeader("Content-Type", file.type);
|
|
537
|
+
xhr.send(file);
|
|
538
|
+
});
|
|
539
|
+
};
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* Deletes a file from S3 via the crudify API
|
|
543
|
+
* @param filePath - The file path to delete (relative path)
|
|
544
|
+
* @param baseUrl - Optional baseUrl to strip from the path
|
|
545
|
+
* @returns DeleteResult with success flag and optional error
|
|
546
|
+
*/
|
|
547
|
+
export const deleteFile = async (filePath: string, baseUrl?: string): Promise<DeleteResult> => {
|
|
548
|
+
if (!crudifyInitManager.isInitialized()) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
549
|
+
<span class="cstat-no" title="statement not covered" > return { success: false, error: "Crudify not initialized" };</span>
|
|
550
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
551
|
+
|
|
552
|
+
try {
|
|
553
|
+
const relativePath = extractRelativePath(filePath, baseUrl);
|
|
554
|
+
const result = await crudify.disableFile({ filePath: relativePath });
|
|
555
|
+
|
|
556
|
+
if (result.success) {
|
|
557
|
+
return { success: true };
|
|
558
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > }</span>
|
|
559
|
+
<span class="cstat-no" title="statement not covered" > return { success: false, error: "Failed to delete file" };</span>
|
|
560
|
+
<span class="cstat-no" title="statement not covered" > } catch (error) {</span>
|
|
561
|
+
<span class="cstat-no" title="statement not covered" > return { success: false, error: error instanceof Error ? error.message : "Unknown error" };</span>
|
|
562
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
563
|
+
};
|
|
564
|
+
|
|
565
|
+
/**
|
|
566
|
+
* Gets a signed preview URL for a file
|
|
567
|
+
* @param filePath - The file path
|
|
568
|
+
* @param expiresIn - URL expiration time in seconds (default: 3600)
|
|
569
|
+
* @returns The signed URL or null if failed
|
|
570
|
+
*/
|
|
571
|
+
export const getSignedPreviewUrl = <span class="fstat-no" title="function not covered" >async (filePath: string, expiresIn: number = 3600): Promise<string | null> => {</span>
|
|
572
|
+
<span class="cstat-no" title="statement not covered" > if (!crudifyInitManager.isInitialized()) {</span>
|
|
573
|
+
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
574
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
575
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
576
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
577
|
+
<span class="cstat-no" title="statement not covered" > const response = await crudify.getFileUrl({</span>
|
|
578
|
+
<span class="cstat-no" title="statement not covered" > filePath,</span>
|
|
579
|
+
<span class="cstat-no" title="statement not covered" > expiresIn,</span>
|
|
580
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
581
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
582
|
+
<span class="cstat-no" title="statement not covered" > const fileUrlData = response.data as FileUrlResponseData | undefined;</span>
|
|
583
|
+
<span class="cstat-no" title="statement not covered" > if (response.success && fileUrlData?.url) {</span>
|
|
584
|
+
<span class="cstat-no" title="statement not covered" > return fileUrlData.url;</span>
|
|
585
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
586
|
+
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
587
|
+
<span class="cstat-no" title="statement not covered" > } catch {</span>
|
|
588
|
+
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
589
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
590
|
+
<span class="cstat-no" title="statement not covered" >};</span>
|
|
591
|
+
</pre></td></tr></table></pre>
|
|
592
|
+
|
|
593
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
594
|
+
</div><!-- /wrapper -->
|
|
595
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
596
|
+
Code coverage generated by
|
|
597
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
598
|
+
at 2026-01-28T06:22:15.683Z
|
|
599
|
+
</div>
|
|
600
|
+
<script src="../../../prettify.js"></script>
|
|
601
|
+
<script>
|
|
602
|
+
window.onload = function () {
|
|
603
|
+
prettyPrint();
|
|
604
|
+
};
|
|
605
|
+
</script>
|
|
606
|
+
<script src="../../../sorter.js"></script>
|
|
607
|
+
<script src="../../../block-navigation.js"></script>
|
|
608
|
+
</body>
|
|
609
|
+
</html>
|
|
610
|
+
|