@c15t/backend 0.0.1-rc.21 → 0.0.1-rc.23

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 (132) hide show
  1. package/.turbo/turbo-build.log +5 -5
  2. package/.turbo/turbo-fmt.log +3 -3
  3. package/.turbo/turbo-test.log +509 -36
  4. package/coverage/coverage-final.json +83 -0
  5. package/coverage/coverage-summary.json +84 -0
  6. package/coverage/html/backend/index.html +116 -0
  7. package/coverage/html/backend/rslib.config.ts.html +424 -0
  8. package/coverage/html/backend/src/core.ts.html +796 -0
  9. package/coverage/html/backend/src/index.html +131 -0
  10. package/coverage/html/backend/src/init.ts.html +1072 -0
  11. package/coverage/html/backend/src/integrations/cloudflare.ts.html +889 -0
  12. package/coverage/html/backend/src/integrations/index.html +146 -0
  13. package/coverage/html/backend/src/integrations/next.ts.html +691 -0
  14. package/coverage/html/backend/src/integrations/node.ts.html +505 -0
  15. package/coverage/html/backend/src/pkgs/api-router/hooks/index.html +116 -0
  16. package/coverage/html/backend/src/pkgs/api-router/hooks/processor.ts.html +538 -0
  17. package/coverage/html/backend/src/pkgs/api-router/index.html +131 -0
  18. package/coverage/html/backend/src/pkgs/api-router/index.ts.html +529 -0
  19. package/coverage/html/backend/src/pkgs/api-router/telemetry.ts.html +334 -0
  20. package/coverage/html/backend/src/pkgs/api-router/utils/cors.ts.html +304 -0
  21. package/coverage/html/backend/src/pkgs/api-router/utils/define-route.ts.html +1315 -0
  22. package/coverage/html/backend/src/pkgs/api-router/utils/index.html +146 -0
  23. package/coverage/html/backend/src/pkgs/api-router/utils/ip.ts.html +361 -0
  24. package/coverage/html/backend/src/pkgs/data-model/fields/field-factory.ts.html +709 -0
  25. package/coverage/html/backend/src/pkgs/data-model/fields/id-generator.ts.html +256 -0
  26. package/coverage/html/backend/src/pkgs/data-model/fields/index.html +161 -0
  27. package/coverage/html/backend/src/pkgs/data-model/fields/superjson-utils.ts.html +136 -0
  28. package/coverage/html/backend/src/pkgs/data-model/fields/zod-fields.ts.html +496 -0
  29. package/coverage/html/backend/src/pkgs/data-model/hooks/create-hooks.ts.html +349 -0
  30. package/coverage/html/backend/src/pkgs/data-model/hooks/index.html +176 -0
  31. package/coverage/html/backend/src/pkgs/data-model/hooks/update-hooks.ts.html +358 -0
  32. package/coverage/html/backend/src/pkgs/data-model/hooks/update-many-hooks.ts.html +613 -0
  33. package/coverage/html/backend/src/pkgs/data-model/hooks/utils.ts.html +538 -0
  34. package/coverage/html/backend/src/pkgs/data-model/hooks/with-hooks-factory.ts.html +289 -0
  35. package/coverage/html/backend/src/pkgs/db-adapters/adapter-factory.ts.html +277 -0
  36. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts.html +2212 -0
  37. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/index.html +116 -0
  38. package/coverage/html/backend/src/pkgs/db-adapters/adapters/index.html +116 -0
  39. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts.html +676 -0
  40. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/index.html +131 -0
  41. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.ts.html +3637 -0
  42. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/index.html +116 -0
  43. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts.html +1417 -0
  44. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/index.html +116 -0
  45. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.ts.html +2074 -0
  46. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/index.html +116 -0
  47. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.ts.html +1837 -0
  48. package/coverage/html/backend/src/pkgs/db-adapters/adapters/test.ts.html +316 -0
  49. package/coverage/html/backend/src/pkgs/db-adapters/index.html +131 -0
  50. package/coverage/html/backend/src/pkgs/db-adapters/utils.ts.html +238 -0
  51. package/coverage/html/backend/src/pkgs/logger/console-formatter.ts.html +310 -0
  52. package/coverage/html/backend/src/pkgs/logger/index.html +176 -0
  53. package/coverage/html/backend/src/pkgs/logger/log-levels.ts.html +223 -0
  54. package/coverage/html/backend/src/pkgs/logger/logger-factory.ts.html +448 -0
  55. package/coverage/html/backend/src/pkgs/logger/result-logging.ts.html +487 -0
  56. package/coverage/html/backend/src/pkgs/logger/telemetry.ts.html +373 -0
  57. package/coverage/html/backend/src/pkgs/migrations/get-migration.ts.html +343 -0
  58. package/coverage/html/backend/src/pkgs/migrations/get-schema/get-schema.ts.html +217 -0
  59. package/coverage/html/backend/src/pkgs/migrations/get-schema/index.html +146 -0
  60. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-fields.ts.html +280 -0
  61. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-tables.ts.html +289 -0
  62. package/coverage/html/backend/src/pkgs/migrations/index.html +176 -0
  63. package/coverage/html/backend/src/pkgs/migrations/migration-builders.ts.html +595 -0
  64. package/coverage/html/backend/src/pkgs/migrations/migration-execution.ts.html +301 -0
  65. package/coverage/html/backend/src/pkgs/migrations/schema-comparison.ts.html +691 -0
  66. package/coverage/html/backend/src/pkgs/migrations/type-mapping.ts.html +817 -0
  67. package/coverage/html/backend/src/pkgs/results/core/error-class.ts.html +1012 -0
  68. package/coverage/html/backend/src/pkgs/results/core/error-codes.ts.html +703 -0
  69. package/coverage/html/backend/src/pkgs/results/core/index.html +146 -0
  70. package/coverage/html/backend/src/pkgs/results/core/tracing.ts.html +280 -0
  71. package/coverage/html/backend/src/pkgs/results/create-telemetry-options.ts.html +271 -0
  72. package/coverage/html/backend/src/pkgs/results/h3-integration.ts.html +511 -0
  73. package/coverage/html/backend/src/pkgs/results/index.html +131 -0
  74. package/coverage/html/backend/src/pkgs/results/pipeline/index.html +131 -0
  75. package/coverage/html/backend/src/pkgs/results/pipeline/retrieval-pipeline.ts.html +649 -0
  76. package/coverage/html/backend/src/pkgs/results/pipeline/validation-pipeline.ts.html +577 -0
  77. package/coverage/html/backend/src/pkgs/results/results/index.html +131 -0
  78. package/coverage/html/backend/src/pkgs/results/results/recovery-utils.ts.html +628 -0
  79. package/coverage/html/backend/src/pkgs/results/results/result-helpers.ts.html +1234 -0
  80. package/coverage/html/backend/src/pkgs/utils/env.ts.html +337 -0
  81. package/coverage/html/backend/src/pkgs/utils/index.html +131 -0
  82. package/coverage/html/backend/src/pkgs/utils/url.ts.html +400 -0
  83. package/coverage/html/backend/src/routes/index.html +176 -0
  84. package/coverage/html/backend/src/routes/index.ts.html +121 -0
  85. package/coverage/html/backend/src/routes/set-consent.ts.html +832 -0
  86. package/coverage/html/backend/src/routes/show-consent-banner.ts.html +478 -0
  87. package/coverage/html/backend/src/routes/status.ts.html +268 -0
  88. package/coverage/html/backend/src/routes/verify-consent.ts.html +703 -0
  89. package/coverage/html/backend/src/schema/audit-log/index.html +146 -0
  90. package/coverage/html/backend/src/schema/audit-log/registry.ts.html +436 -0
  91. package/coverage/html/backend/src/schema/audit-log/schema.ts.html +223 -0
  92. package/coverage/html/backend/src/schema/audit-log/table.ts.html +640 -0
  93. package/coverage/html/backend/src/schema/consent/index.html +146 -0
  94. package/coverage/html/backend/src/schema/consent/registry.ts.html +616 -0
  95. package/coverage/html/backend/src/schema/consent/schema.ts.html +238 -0
  96. package/coverage/html/backend/src/schema/consent/table.ts.html +748 -0
  97. package/coverage/html/backend/src/schema/consent-policy/index.html +146 -0
  98. package/coverage/html/backend/src/schema/consent-policy/registry.ts.html +1063 -0
  99. package/coverage/html/backend/src/schema/consent-policy/schema.ts.html +265 -0
  100. package/coverage/html/backend/src/schema/consent-policy/table.ts.html +535 -0
  101. package/coverage/html/backend/src/schema/consent-purpose/index.html +146 -0
  102. package/coverage/html/backend/src/schema/consent-purpose/registry.ts.html +589 -0
  103. package/coverage/html/backend/src/schema/consent-purpose/schema.ts.html +259 -0
  104. package/coverage/html/backend/src/schema/consent-purpose/table.ts.html +547 -0
  105. package/coverage/html/backend/src/schema/consent-record/index.html +131 -0
  106. package/coverage/html/backend/src/schema/consent-record/schema.ts.html +211 -0
  107. package/coverage/html/backend/src/schema/consent-record/table.ts.html +457 -0
  108. package/coverage/html/backend/src/schema/create-registry.ts.html +148 -0
  109. package/coverage/html/backend/src/schema/definition.ts.html +685 -0
  110. package/coverage/html/backend/src/schema/domain/index.html +146 -0
  111. package/coverage/html/backend/src/schema/domain/registry.ts.html +973 -0
  112. package/coverage/html/backend/src/schema/domain/schema.ts.html +214 -0
  113. package/coverage/html/backend/src/schema/domain/table.ts.html +496 -0
  114. package/coverage/html/backend/src/schema/index.html +146 -0
  115. package/coverage/html/backend/src/schema/schemas.ts.html +166 -0
  116. package/coverage/html/backend/src/schema/subject/index.html +146 -0
  117. package/coverage/html/backend/src/schema/subject/registry.ts.html +973 -0
  118. package/coverage/html/backend/src/schema/subject/schema.ts.html +208 -0
  119. package/coverage/html/backend/src/schema/subject/table.ts.html +499 -0
  120. package/coverage/html/base.css +224 -0
  121. package/coverage/html/block-navigation.js +87 -0
  122. package/coverage/html/favicon.png +0 -0
  123. package/coverage/html/index.html +581 -0
  124. package/coverage/html/prettify.css +1 -0
  125. package/coverage/html/prettify.js +2 -0
  126. package/coverage/html/sort-arrow-sprite.png +0 -0
  127. package/coverage/html/sorter.js +196 -0
  128. package/dist/index.cjs +1 -1
  129. package/dist/index.js +1 -1
  130. package/package.json +13 -12
  131. package/vitest.config.ts +14 -11
  132. package/.turbo/turbo-lint.log +0 -6
@@ -0,0 +1,691 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for backend/src/integrations/next.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">backend/src/integrations</a> next.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/35</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/22</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/9</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/35</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 low'></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>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-neutral">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
+ <span class="cline-any cline-neutral">&nbsp;</span>
275
+ <span class="cline-any cline-neutral">&nbsp;</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span>
279
+ <span class="cline-any cline-neutral">&nbsp;</span>
280
+ <span class="cline-any cline-neutral">&nbsp;</span>
281
+ <span class="cline-any cline-neutral">&nbsp;</span>
282
+ <span class="cline-any cline-neutral">&nbsp;</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-neutral">&nbsp;</span>
285
+ <span class="cline-any cline-neutral">&nbsp;</span>
286
+ <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
288
+ <span class="cline-any cline-neutral">&nbsp;</span>
289
+ <span class="cline-any cline-neutral">&nbsp;</span>
290
+ <span class="cline-any cline-neutral">&nbsp;</span>
291
+ <span class="cline-any cline-neutral">&nbsp;</span>
292
+ <span class="cline-any cline-neutral">&nbsp;</span>
293
+ <span class="cline-any cline-neutral">&nbsp;</span>
294
+ <span class="cline-any cline-neutral">&nbsp;</span>
295
+ <span class="cline-any cline-neutral">&nbsp;</span>
296
+ <span class="cline-any cline-neutral">&nbsp;</span>
297
+ <span class="cline-any cline-neutral">&nbsp;</span>
298
+ <span class="cline-any cline-neutral">&nbsp;</span>
299
+ <span class="cline-any cline-neutral">&nbsp;</span>
300
+ <span class="cline-any cline-neutral">&nbsp;</span>
301
+ <span class="cline-any cline-neutral">&nbsp;</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
303
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-neutral">&nbsp;</span>
306
+ <span class="cline-any cline-neutral">&nbsp;</span>
307
+ <span class="cline-any cline-neutral">&nbsp;</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-no">&nbsp;</span>
311
+ <span class="cline-any cline-no">&nbsp;</span>
312
+ <span class="cline-any cline-neutral">&nbsp;</span>
313
+ <span class="cline-any cline-no">&nbsp;</span>
314
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
+ <span class="cline-any cline-neutral">&nbsp;</span>
316
+ <span class="cline-any cline-no">&nbsp;</span>
317
+ <span class="cline-any cline-no">&nbsp;</span>
318
+ <span class="cline-any cline-neutral">&nbsp;</span>
319
+ <span class="cline-any cline-no">&nbsp;</span>
320
+ <span class="cline-any cline-no">&nbsp;</span>
321
+ <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-no">&nbsp;</span>
323
+ <span class="cline-any cline-no">&nbsp;</span>
324
+ <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-neutral">&nbsp;</span>
326
+ <span class="cline-any cline-neutral">&nbsp;</span>
327
+ <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-no">&nbsp;</span>
329
+ <span class="cline-any cline-no">&nbsp;</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-no">&nbsp;</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-neutral">&nbsp;</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-neutral">&nbsp;</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-neutral">&nbsp;</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-no">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-no">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-no">&nbsp;</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-no">&nbsp;</span>
349
+ <span class="cline-any cline-neutral">&nbsp;</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
+ <span class="cline-any cline-no">&nbsp;</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-no">&nbsp;</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-neutral">&nbsp;</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-neutral">&nbsp;</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-no">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
380
+ <span class="cline-any cline-neutral">&nbsp;</span>
381
+ <span class="cline-any cline-neutral">&nbsp;</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-neutral">&nbsp;</span>
386
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
390
+ <span class="cline-any cline-no">&nbsp;</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-neutral">&nbsp;</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-neutral">&nbsp;</span>
399
+ <span class="cline-any cline-neutral">&nbsp;</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-no">&nbsp;</span>
405
+ <span class="cline-any cline-no">&nbsp;</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-neutral">&nbsp;</span>
408
+ <span class="cline-any cline-no">&nbsp;</span>
409
+ <span class="cline-any cline-no">&nbsp;</span>
410
+ <span class="cline-any cline-neutral">&nbsp;</span>
411
+ <span class="cline-any cline-no">&nbsp;</span>
412
+ <span class="cline-any cline-neutral">&nbsp;</span>
413
+ <span class="cline-any cline-no">&nbsp;</span>
414
+ <span class="cline-any cline-no">&nbsp;</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-no">&nbsp;</span>
417
+ <span class="cline-any cline-no">&nbsp;</span>
418
+ <span class="cline-any cline-no">&nbsp;</span>
419
+ <span class="cline-any cline-no">&nbsp;</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
+ <span class="cline-any cline-neutral">&nbsp;</span>
423
+ <span class="cline-any cline-neutral">&nbsp;</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span>
425
+ <span class="cline-any cline-neutral">&nbsp;</span>
426
+ <span class="cline-any cline-neutral">&nbsp;</span>
427
+ <span class="cline-any cline-neutral">&nbsp;</span>
428
+ <span class="cline-any cline-neutral">&nbsp;</span>
429
+ <span class="cline-any cline-neutral">&nbsp;</span>
430
+ <span class="cline-any cline-neutral">&nbsp;</span>
431
+ <span class="cline-any cline-neutral">&nbsp;</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
436
+ <span class="cline-any cline-neutral">&nbsp;</span>
437
+ <span class="cline-any cline-neutral">&nbsp;</span>
438
+ <span class="cline-any cline-neutral">&nbsp;</span>
439
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-neutral">&nbsp;</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-neutral">&nbsp;</span>
455
+ <span class="cline-any cline-neutral">&nbsp;</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-neutral">&nbsp;</span>
458
+ <span class="cline-any cline-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-neutral">&nbsp;</span>
460
+ <span class="cline-any cline-neutral">&nbsp;</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-no">&nbsp;</span>
463
+ <span class="cline-any cline-no">&nbsp;</span>
464
+ <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-no">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-neutral">&nbsp;</span>
469
+ <span class="cline-any cline-neutral">&nbsp;</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { C15TInstance } from '~/core';
471
+ import { ERROR_CODES } from '~/pkgs/results';
472
+ import type { C15TContext } from '~/types';
473
+ &nbsp;
474
+ /**
475
+ * Type definition for a Next.js route handler function
476
+ */
477
+ type RouteHandler = (request: Request) =&gt; Promise&lt;Response&gt;;
478
+ &nbsp;
479
+ /**
480
+ * Type definition for Next.js route handlers object
481
+ */
482
+ type NextRouteHandlers = {
483
+ GET: RouteHandler;
484
+ POST: RouteHandler;
485
+ PUT: RouteHandler;
486
+ DELETE: RouteHandler;
487
+ OPTIONS: RouteHandler;
488
+ HEAD: RouteHandler;
489
+ PATCH: RouteHandler;
490
+ };
491
+ &nbsp;
492
+ /**
493
+ * Convert a c15t handler to a Next.js route handler.
494
+ *
495
+ * This adapter converts between standard Web API and c15t, letting c15t/H3 handle
496
+ * all the HTTP logic including CORS. It doesn't depend on next/server.
497
+ *
498
+ * @example
499
+ * ```typescript
500
+ * import { toNextHandler } from '@c15t/backend/integrations/next';
501
+ * import { c15t } from '@/c15t';
502
+ *
503
+ * // app/api/c15t/[...paths]/route.ts
504
+ * export const { GET, POST } = toNextHandler(c15t);
505
+ * ```
506
+ *
507
+ * @param instance - The c15t instance to adapt
508
+ * @returns An object with Next.js route handler functions for each method
509
+ */
510
+ export function <span class="fstat-no" title="function not covered" >toNextHandler(i</span>nstance: C15TInstance): NextRouteHandlers {
511
+ // Create the base handler that processes requests
512
+ const handleRequest = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >async (r</span>equest: Request) =&gt; {</span>
513
+ <span class="cstat-no" title="statement not covered" > try {</span>
514
+ const basePath: string =
515
+ (<span class="cstat-no" title="statement not covered" >instance.options?.basePath as string) || '/api/c15t';</span>
516
+ &nbsp;
517
+ // Extract the path and rewrite for c15t routing
518
+ const originalUrl = <span class="cstat-no" title="statement not covered" >new URL(request.url);</span>
519
+ let pathWithoutBase = <span class="cstat-no" title="statement not covered" >originalUrl.pathname;</span>
520
+ &nbsp;
521
+ <span class="cstat-no" title="statement not covered" > if (pathWithoutBase.startsWith(basePath)) {</span>
522
+ <span class="cstat-no" title="statement not covered" > pathWithoutBase = pathWithoutBase.substring(basePath.length);</span>
523
+ // Ensure leading slash
524
+ <span class="cstat-no" title="statement not covered" > if (!pathWithoutBase.startsWith('/')) {</span>
525
+ <span class="cstat-no" title="statement not covered" > pathWithoutBase = `/${pathWithoutBase}`;</span>
526
+ }
527
+ }
528
+ &nbsp;
529
+ // Create rewritten request
530
+ const rewrittenUrl = <span class="cstat-no" title="statement not covered" >new URL(originalUrl.toString());</span>
531
+ <span class="cstat-no" title="statement not covered" > rewrittenUrl.pathname = pathWithoutBase;</span>
532
+ &nbsp;
533
+ const rewrittenRequest = <span class="cstat-no" title="statement not covered" >new Request(rewrittenUrl.toString(), {</span>
534
+ method: request.method,
535
+ headers: request.headers,
536
+ body: request.body,
537
+ // Preserve request properties
538
+ credentials: 'include',
539
+ });
540
+ &nbsp;
541
+ // Update baseURL for proper URL generation in responses
542
+ <span class="cstat-no" title="statement not covered" > await updateBaseUrl(request, basePath);</span>
543
+ &nbsp;
544
+ // Let c15t handle the request
545
+ const result = <span class="cstat-no" title="statement not covered" >await instance.handler(rewrittenRequest);</span>
546
+ &nbsp;
547
+ // Return the response directly - Next.js supports standard Response objects
548
+ <span class="cstat-no" title="statement not covered" > return await result.match(</span>
549
+ // Success case - just return the response
550
+ <span class="fstat-no" title="function not covered" > (r</span>esponse) =&gt; <span class="cstat-no" title="statement not covered" >response,</span>
551
+ // Error case - create an error response
552
+ <span class="fstat-no" title="function not covered" > (e</span>rror) =&gt; {
553
+ const status = <span class="cstat-no" title="statement not covered" >error.statusCode || 500;</span>
554
+ const message = <span class="cstat-no" title="statement not covered" >error.message || ERROR_CODES.INTERNAL_SERVER_ERROR;</span>
555
+ &nbsp;
556
+ <span class="cstat-no" title="statement not covered" > return new Response(</span>
557
+ JSON.stringify({
558
+ error: true,
559
+ code: error.code || ERROR_CODES.INTERNAL_SERVER_ERROR,
560
+ message,
561
+ meta: error.meta,
562
+ }),
563
+ {
564
+ status,
565
+ headers: {
566
+ 'Content-Type': 'application/json',
567
+ },
568
+ }
569
+ );
570
+ }
571
+ );
572
+ } catch (error) {
573
+ // Basic error handling
574
+ <span class="cstat-no" title="statement not covered" > return new Response(</span>
575
+ JSON.stringify({
576
+ error: true,
577
+ code: ERROR_CODES.INTERNAL_SERVER_ERROR,
578
+ message: 'An unexpected error occurred',
579
+ meta: { error: String(error) },
580
+ }),
581
+ {
582
+ status: 500,
583
+ headers: {
584
+ 'Content-Type': 'application/json',
585
+ },
586
+ }
587
+ );
588
+ }
589
+ };
590
+ &nbsp;
591
+ // Return an object with handler functions for each HTTP method
592
+ <span class="cstat-no" title="statement not covered" > return {</span>
593
+ GET: handleRequest,
594
+ POST: handleRequest,
595
+ PUT: handleRequest,
596
+ DELETE: handleRequest,
597
+ OPTIONS: handleRequest,
598
+ HEAD: handleRequest,
599
+ PATCH: handleRequest,
600
+ };
601
+ &nbsp;
602
+ async function <span class="fstat-no" title="function not covered" >updateBaseUrl(</span>
603
+ request: Request,
604
+ basePath: string
605
+ ): Promise&lt;void&gt; {
606
+ <span class="cstat-no" title="statement not covered" > if (!instance.$context) {</span>
607
+ <span class="cstat-no" title="statement not covered" > return;</span>
608
+ }
609
+ &nbsp;
610
+ <span class="cstat-no" title="statement not covered" > try {</span>
611
+ const contextResult = <span class="cstat-no" title="statement not covered" >await instance.$context;</span>
612
+ &nbsp;
613
+ <span class="cstat-no" title="statement not covered" > contextResult.match(</span>
614
+ <span class="fstat-no" title="function not covered" > (c</span>ontext: C15TContext) =&gt; {
615
+ const url = <span class="cstat-no" title="statement not covered" >new URL(request.url);</span>
616
+ const baseURL = <span class="cstat-no" title="statement not covered" >`${url.protocol}//${url.host}${basePath}`;</span>
617
+ &nbsp;
618
+ <span class="cstat-no" title="statement not covered" > if (!context.baseURL || context.baseURL !== baseURL) {</span>
619
+ <span class="cstat-no" title="statement not covered" > context.baseURL = baseURL;</span>
620
+ <span class="cstat-no" title="statement not covered" > if (context.options) {</span>
621
+ <span class="cstat-no" title="statement not covered" > context.options.baseURL = baseURL;</span>
622
+ }
623
+ }
624
+ },
625
+ <span class="fstat-no" title="function not covered" > () =&gt; {</span>} // Ignore errors
626
+ );
627
+ } catch {
628
+ // Ignore errors
629
+ }
630
+ }
631
+ }
632
+ &nbsp;
633
+ /**
634
+ * Alternative Next.js route handler that works with any handler function.
635
+ *
636
+ * This utility function helps create Next.js App Router route handlers
637
+ * from any function that accepts a Request and returns a Response.
638
+ *
639
+ * @example
640
+ * ```typescript
641
+ * // Using with c15t
642
+ * import { toNextJsHandler } from '@c15t/backend/integrations/next';
643
+ * import { c15t } from '@/c15t';
644
+ *
645
+ * // app/api/auth/[...slug]/route.ts
646
+ * export const { GET, POST } = toNextJsHandler(c15t);
647
+ *
648
+ * // Using with a custom handler
649
+ * export const { GET } = toNextJsHandler((request) =&gt; {
650
+ * return new Response('Hello World');
651
+ * });
652
+ * ```
653
+ *
654
+ * @param auth - Either a function or an object with a handler method
655
+ * @returns An object with GET and POST methods for Next.js App Router
656
+ */
657
+ export function <span class="fstat-no" title="function not covered" >toNextJsHandler(</span>
658
+ auth:
659
+ | {
660
+ handler: (request: Request) =&gt; Promise&lt;Response&gt;;
661
+ }
662
+ | ((request: Request) =&gt; Promise&lt;Response&gt;)
663
+ ) {
664
+ const handler = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >async (r</span>equest: Request) =&gt; {</span>
665
+ <span class="cstat-no" title="statement not covered" > return 'handler' in auth ? auth.handler(request) : auth(request);</span>
666
+ };
667
+ <span class="cstat-no" title="statement not covered" > return {</span>
668
+ GET: handler,
669
+ POST: handler,
670
+ };
671
+ }
672
+ &nbsp;</pre></td></tr></table></pre>
673
+
674
+ <div class='push'></div><!-- for sticky footer -->
675
+ </div><!-- /wrapper -->
676
+ <div class='footer quiet pad2 space-top1 center small'>
677
+ Code coverage generated by
678
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
679
+ at 2025-04-14T10:55:46.797Z
680
+ </div>
681
+ <script src="../../../prettify.js"></script>
682
+ <script>
683
+ window.onload = function () {
684
+ prettyPrint();
685
+ };
686
+ </script>
687
+ <script src="../../../sorter.js"></script>
688
+ <script src="../../../block-navigation.js"></script>
689
+ </body>
690
+ </html>
691
+