@c15t/backend 1.2.0-canary.9 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/.turbo/turbo-build.log +53 -52
  2. package/CHANGELOG.md +13 -0
  3. package/dist/__tests__/server.test.d.ts +2 -0
  4. package/dist/__tests__/server.test.d.ts.map +1 -0
  5. package/dist/contracts/index.d.ts +1 -1
  6. package/dist/contracts/index.d.ts.map +1 -1
  7. package/dist/contracts.cjs +708 -0
  8. package/dist/contracts.js +661 -0
  9. package/dist/core.cjs +96 -49
  10. package/dist/core.d.ts.map +1 -1
  11. package/dist/core.js +96 -49
  12. package/dist/middleware/openapi/config.d.ts +1 -1
  13. package/dist/middleware/openapi/config.d.ts.map +1 -1
  14. package/dist/pkgs/data-model/index.cjs +59 -41
  15. package/dist/pkgs/data-model/index.js +59 -41
  16. package/dist/pkgs/data-model/schema/index.cjs +59 -41
  17. package/dist/pkgs/data-model/schema/index.js +59 -41
  18. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.cjs +2 -2
  19. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.js +2 -2
  20. package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.cjs +2 -2
  21. package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.js +2 -2
  22. package/dist/pkgs/db-adapters/adapters/memory-adapter/index.cjs +2 -2
  23. package/dist/pkgs/db-adapters/adapters/memory-adapter/index.js +2 -2
  24. package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.cjs +2 -2
  25. package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.js +2 -2
  26. package/dist/pkgs/db-adapters/index.cjs +2 -2
  27. package/dist/pkgs/db-adapters/index.js +2 -2
  28. package/dist/pkgs/migrations/index.cjs +2 -2
  29. package/dist/pkgs/migrations/index.js +2 -2
  30. package/dist/router.cjs +5 -3
  31. package/dist/router.js +5 -3
  32. package/dist/schema/consent-policy/registry.d.ts.map +1 -1
  33. package/dist/schema/consent-purpose/registry.d.ts +4 -4
  34. package/dist/schema/consent-purpose/schema.d.ts +6 -6
  35. package/dist/schema/consent-purpose/table.d.ts +6 -6
  36. package/dist/schema/create-registry.d.ts +4 -4
  37. package/dist/schema/create-registry.d.ts.map +1 -1
  38. package/dist/schema/definition.d.ts +6 -6
  39. package/dist/schema/index.cjs +59 -41
  40. package/dist/schema/index.js +59 -41
  41. package/dist/schema/schemas.d.ts +6 -6
  42. package/package.json +7 -2
  43. package/rslib.config.ts +1 -0
  44. package/src/__tests__/server.test.ts +96 -0
  45. package/src/contracts/index.ts +2 -0
  46. package/src/core.ts +29 -1
  47. package/src/middleware/cors/cors.test.ts +0 -1
  48. package/src/middleware/openapi/config.ts +10 -7
  49. package/src/schema/consent-policy/registry.ts +74 -51
  50. package/src/schema/consent-purpose/schema.ts +2 -2
  51. package/.turbo/turbo-fmt.log +0 -7
  52. package/.turbo/turbo-test.log +0 -426
  53. package/coverage/coverage-final.json +0 -88
  54. package/coverage/coverage-summary.json +0 -89
  55. package/coverage/html/backend/index.html +0 -116
  56. package/coverage/html/backend/rslib.config.ts.html +0 -415
  57. package/coverage/html/backend/src/contracts/consent/index.html +0 -161
  58. package/coverage/html/backend/src/contracts/consent/index.ts.html +0 -112
  59. package/coverage/html/backend/src/contracts/consent/post.contract.ts.html +0 -550
  60. package/coverage/html/backend/src/contracts/consent/show-banner.contract.ts.html +0 -220
  61. package/coverage/html/backend/src/contracts/consent/verify.contract.ts.html +0 -463
  62. package/coverage/html/backend/src/contracts/index.html +0 -116
  63. package/coverage/html/backend/src/contracts/index.ts.html +0 -139
  64. package/coverage/html/backend/src/contracts/meta/index.html +0 -131
  65. package/coverage/html/backend/src/contracts/meta/index.ts.html +0 -100
  66. package/coverage/html/backend/src/contracts/meta/status.contract.ts.html +0 -196
  67. package/coverage/html/backend/src/contracts/shared/index.html +0 -116
  68. package/coverage/html/backend/src/contracts/shared/jurisdiction.schema.ts.html +0 -175
  69. package/coverage/html/backend/src/core.ts.html +0 -1342
  70. package/coverage/html/backend/src/handlers/consent/index.html +0 -161
  71. package/coverage/html/backend/src/handlers/consent/index.ts.html +0 -112
  72. package/coverage/html/backend/src/handlers/consent/post.handler.ts.html +0 -904
  73. package/coverage/html/backend/src/handlers/consent/show-banner.handler.ts.html +0 -532
  74. package/coverage/html/backend/src/handlers/consent/verify.handler.ts.html +0 -1000
  75. package/coverage/html/backend/src/handlers/meta/index.html +0 -131
  76. package/coverage/html/backend/src/handlers/meta/index.ts.html +0 -100
  77. package/coverage/html/backend/src/handlers/meta/status.handler.ts.html +0 -226
  78. package/coverage/html/backend/src/index.html +0 -161
  79. package/coverage/html/backend/src/init.ts.html +0 -1018
  80. package/coverage/html/backend/src/middleware/cors/cors.ts.html +0 -661
  81. package/coverage/html/backend/src/middleware/cors/index.html +0 -146
  82. package/coverage/html/backend/src/middleware/cors/is-origin-trusted.ts.html +0 -463
  83. package/coverage/html/backend/src/middleware/cors/process-cors.ts.html +0 -358
  84. package/coverage/html/backend/src/middleware/openapi/config.ts.html +0 -160
  85. package/coverage/html/backend/src/middleware/openapi/handlers.ts.html +0 -481
  86. package/coverage/html/backend/src/middleware/openapi/index.html +0 -131
  87. package/coverage/html/backend/src/pkgs/api-router/hooks/index.html +0 -116
  88. package/coverage/html/backend/src/pkgs/api-router/hooks/processor.ts.html +0 -544
  89. package/coverage/html/backend/src/pkgs/api-router/index.html +0 -116
  90. package/coverage/html/backend/src/pkgs/api-router/telemetry.ts.html +0 -334
  91. package/coverage/html/backend/src/pkgs/api-router/utils/index.html +0 -116
  92. package/coverage/html/backend/src/pkgs/api-router/utils/ip.ts.html +0 -361
  93. package/coverage/html/backend/src/pkgs/data-model/fields/field-factory.ts.html +0 -709
  94. package/coverage/html/backend/src/pkgs/data-model/fields/id-generator.ts.html +0 -256
  95. package/coverage/html/backend/src/pkgs/data-model/fields/index.html +0 -161
  96. package/coverage/html/backend/src/pkgs/data-model/fields/superjson-utils.ts.html +0 -136
  97. package/coverage/html/backend/src/pkgs/data-model/fields/zod-fields.ts.html +0 -496
  98. package/coverage/html/backend/src/pkgs/data-model/hooks/create-hooks.ts.html +0 -349
  99. package/coverage/html/backend/src/pkgs/data-model/hooks/index.html +0 -176
  100. package/coverage/html/backend/src/pkgs/data-model/hooks/update-hooks.ts.html +0 -358
  101. package/coverage/html/backend/src/pkgs/data-model/hooks/update-many-hooks.ts.html +0 -613
  102. package/coverage/html/backend/src/pkgs/data-model/hooks/utils.ts.html +0 -538
  103. package/coverage/html/backend/src/pkgs/data-model/hooks/with-hooks-factory.ts.html +0 -289
  104. package/coverage/html/backend/src/pkgs/db-adapters/adapter-factory.ts.html +0 -289
  105. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts.html +0 -2203
  106. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/index.html +0 -116
  107. package/coverage/html/backend/src/pkgs/db-adapters/adapters/index.html +0 -116
  108. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts.html +0 -670
  109. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/index.html +0 -131
  110. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.ts.html +0 -3634
  111. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/index.html +0 -116
  112. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts.html +0 -1417
  113. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/index.html +0 -116
  114. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.ts.html +0 -2071
  115. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/index.html +0 -116
  116. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.ts.html +0 -1834
  117. package/coverage/html/backend/src/pkgs/db-adapters/adapters/test.ts.html +0 -316
  118. package/coverage/html/backend/src/pkgs/db-adapters/index.html +0 -131
  119. package/coverage/html/backend/src/pkgs/db-adapters/utils.ts.html +0 -238
  120. package/coverage/html/backend/src/pkgs/migrations/get-migration.ts.html +0 -343
  121. package/coverage/html/backend/src/pkgs/migrations/get-schema/get-schema.ts.html +0 -217
  122. package/coverage/html/backend/src/pkgs/migrations/get-schema/index.html +0 -146
  123. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-fields.ts.html +0 -280
  124. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-tables.ts.html +0 -289
  125. package/coverage/html/backend/src/pkgs/migrations/index.html +0 -176
  126. package/coverage/html/backend/src/pkgs/migrations/migration-builders.ts.html +0 -595
  127. package/coverage/html/backend/src/pkgs/migrations/migration-execution.ts.html +0 -301
  128. package/coverage/html/backend/src/pkgs/migrations/schema-comparison.ts.html +0 -694
  129. package/coverage/html/backend/src/pkgs/migrations/type-mapping.ts.html +0 -817
  130. package/coverage/html/backend/src/pkgs/results/core/error-class.ts.html +0 -976
  131. package/coverage/html/backend/src/pkgs/results/core/error-codes.ts.html +0 -703
  132. package/coverage/html/backend/src/pkgs/results/core/index.html +0 -146
  133. package/coverage/html/backend/src/pkgs/results/core/tracing.ts.html +0 -280
  134. package/coverage/html/backend/src/pkgs/results/create-telemetry-options.ts.html +0 -271
  135. package/coverage/html/backend/src/pkgs/results/index.html +0 -131
  136. package/coverage/html/backend/src/pkgs/results/orpc-error-handler.ts.html +0 -496
  137. package/coverage/html/backend/src/pkgs/results/results/index.html +0 -131
  138. package/coverage/html/backend/src/pkgs/results/results/recovery-utils.ts.html +0 -628
  139. package/coverage/html/backend/src/pkgs/results/results/result-helpers.ts.html +0 -1234
  140. package/coverage/html/backend/src/pkgs/utils/env.ts.html +0 -337
  141. package/coverage/html/backend/src/pkgs/utils/index.html +0 -146
  142. package/coverage/html/backend/src/pkgs/utils/logger.ts.html +0 -199
  143. package/coverage/html/backend/src/pkgs/utils/url.ts.html +0 -400
  144. package/coverage/html/backend/src/router.ts.html +0 -109
  145. package/coverage/html/backend/src/schema/audit-log/index.html +0 -146
  146. package/coverage/html/backend/src/schema/audit-log/registry.ts.html +0 -436
  147. package/coverage/html/backend/src/schema/audit-log/schema.ts.html +0 -223
  148. package/coverage/html/backend/src/schema/audit-log/table.ts.html +0 -640
  149. package/coverage/html/backend/src/schema/consent/index.html +0 -146
  150. package/coverage/html/backend/src/schema/consent/registry.ts.html +0 -616
  151. package/coverage/html/backend/src/schema/consent/schema.ts.html +0 -238
  152. package/coverage/html/backend/src/schema/consent/table.ts.html +0 -748
  153. package/coverage/html/backend/src/schema/consent-policy/index.html +0 -146
  154. package/coverage/html/backend/src/schema/consent-policy/registry.ts.html +0 -1063
  155. package/coverage/html/backend/src/schema/consent-policy/schema.ts.html +0 -265
  156. package/coverage/html/backend/src/schema/consent-policy/table.ts.html +0 -535
  157. package/coverage/html/backend/src/schema/consent-purpose/index.html +0 -146
  158. package/coverage/html/backend/src/schema/consent-purpose/registry.ts.html +0 -589
  159. package/coverage/html/backend/src/schema/consent-purpose/schema.ts.html +0 -259
  160. package/coverage/html/backend/src/schema/consent-purpose/table.ts.html +0 -547
  161. package/coverage/html/backend/src/schema/consent-record/index.html +0 -131
  162. package/coverage/html/backend/src/schema/consent-record/schema.ts.html +0 -211
  163. package/coverage/html/backend/src/schema/consent-record/table.ts.html +0 -457
  164. package/coverage/html/backend/src/schema/create-registry.ts.html +0 -148
  165. package/coverage/html/backend/src/schema/definition.ts.html +0 -685
  166. package/coverage/html/backend/src/schema/domain/index.html +0 -146
  167. package/coverage/html/backend/src/schema/domain/registry.ts.html +0 -973
  168. package/coverage/html/backend/src/schema/domain/schema.ts.html +0 -214
  169. package/coverage/html/backend/src/schema/domain/table.ts.html +0 -496
  170. package/coverage/html/backend/src/schema/index.html +0 -146
  171. package/coverage/html/backend/src/schema/schemas.ts.html +0 -166
  172. package/coverage/html/backend/src/schema/subject/index.html +0 -146
  173. package/coverage/html/backend/src/schema/subject/registry.ts.html +0 -973
  174. package/coverage/html/backend/src/schema/subject/schema.ts.html +0 -208
  175. package/coverage/html/backend/src/schema/subject/table.ts.html +0 -499
  176. package/coverage/html/backend/src/server.ts.html +0 -463
  177. package/coverage/html/backend/src/testing/contract-testing.ts.html +0 -1396
  178. package/coverage/html/backend/src/testing/index.html +0 -116
  179. package/coverage/html/base.css +0 -224
  180. package/coverage/html/block-navigation.js +0 -87
  181. package/coverage/html/favicon.png +0 -0
  182. package/coverage/html/index.html +0 -656
  183. package/coverage/html/prettify.css +0 -1
  184. package/coverage/html/prettify.js +0 -2
  185. package/coverage/html/sort-arrow-sprite.png +0 -0
  186. package/coverage/html/sorter.js +0 -196
@@ -1,1063 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for backend/src/schema/consent-policy/registry.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/schema/consent-policy</a> registry.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">9.67% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>3/31</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/15</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">12.5% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>1/8</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">9.67% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>3/31</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>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a></td><td class="line-coverage quiet"><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-neutral">&nbsp;</span>
405
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
409
- <span class="cline-any cline-neutral">&nbsp;</span>
410
- <span class="cline-any cline-neutral">&nbsp;</span>
411
- <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-neutral">&nbsp;</span>
413
- <span class="cline-any cline-neutral">&nbsp;</span>
414
- <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-neutral">&nbsp;</span>
416
- <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-neutral">&nbsp;</span>
418
- <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
427
- <span class="cline-any cline-no">&nbsp;</span>
428
- <span class="cline-any cline-no">&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-yes">26x</span>
462
- <span class="cline-any cline-yes">26x</span>
463
- <span class="cline-any cline-neutral">&nbsp;</span>
464
- <span class="cline-any cline-neutral">&nbsp;</span>
465
- <span class="cline-any cline-neutral">&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>
471
- <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-neutral">&nbsp;</span>
474
- <span class="cline-any cline-neutral">&nbsp;</span>
475
- <span class="cline-any cline-neutral">&nbsp;</span>
476
- <span class="cline-any cline-neutral">&nbsp;</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-neutral">&nbsp;</span>
480
- <span class="cline-any cline-neutral">&nbsp;</span>
481
- <span class="cline-any cline-neutral">&nbsp;</span>
482
- <span class="cline-any cline-neutral">&nbsp;</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-neutral">&nbsp;</span>
486
- <span class="cline-any cline-neutral">&nbsp;</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-neutral">&nbsp;</span>
489
- <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-neutral">&nbsp;</span>
491
- <span class="cline-any cline-neutral">&nbsp;</span>
492
- <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-neutral">&nbsp;</span>
494
- <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-neutral">&nbsp;</span>
496
- <span class="cline-any cline-neutral">&nbsp;</span>
497
- <span class="cline-any cline-neutral">&nbsp;</span>
498
- <span class="cline-any cline-neutral">&nbsp;</span>
499
- <span class="cline-any cline-neutral">&nbsp;</span>
500
- <span class="cline-any cline-no">&nbsp;</span>
501
- <span class="cline-any cline-neutral">&nbsp;</span>
502
- <span class="cline-any cline-neutral">&nbsp;</span>
503
- <span class="cline-any cline-neutral">&nbsp;</span>
504
- <span class="cline-any cline-neutral">&nbsp;</span>
505
- <span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-neutral">&nbsp;</span>
507
- <span class="cline-any cline-neutral">&nbsp;</span>
508
- <span class="cline-any cline-neutral">&nbsp;</span>
509
- <span class="cline-any cline-no">&nbsp;</span>
510
- <span class="cline-any cline-no">&nbsp;</span>
511
- <span class="cline-any cline-neutral">&nbsp;</span>
512
- <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-neutral">&nbsp;</span>
516
- <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-neutral">&nbsp;</span>
518
- <span class="cline-any cline-neutral">&nbsp;</span>
519
- <span class="cline-any cline-no">&nbsp;</span>
520
- <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-neutral">&nbsp;</span>
522
- <span class="cline-any cline-neutral">&nbsp;</span>
523
- <span class="cline-any cline-neutral">&nbsp;</span>
524
- <span class="cline-any cline-neutral">&nbsp;</span>
525
- <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-neutral">&nbsp;</span>
530
- <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-neutral">&nbsp;</span>
532
- <span class="cline-any cline-neutral">&nbsp;</span>
533
- <span class="cline-any cline-neutral">&nbsp;</span>
534
- <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-neutral">&nbsp;</span>
536
- <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-neutral">&nbsp;</span>
540
- <span class="cline-any cline-neutral">&nbsp;</span>
541
- <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-neutral">&nbsp;</span>
551
- <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-neutral">&nbsp;</span>
554
- <span class="cline-any cline-neutral">&nbsp;</span>
555
- <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-no">&nbsp;</span>
559
- <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-no">&nbsp;</span>
561
- <span class="cline-any cline-no">&nbsp;</span>
562
- <span class="cline-any cline-neutral">&nbsp;</span>
563
- <span class="cline-any cline-neutral">&nbsp;</span>
564
- <span class="cline-any cline-neutral">&nbsp;</span>
565
- <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-no">&nbsp;</span>
568
- <span class="cline-any cline-no">&nbsp;</span>
569
- <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-neutral">&nbsp;</span>
571
- <span class="cline-any cline-neutral">&nbsp;</span>
572
- <span class="cline-any cline-neutral">&nbsp;</span>
573
- <span class="cline-any cline-neutral">&nbsp;</span>
574
- <span class="cline-any cline-no">&nbsp;</span>
575
- <span class="cline-any cline-no">&nbsp;</span>
576
- <span class="cline-any cline-neutral">&nbsp;</span>
577
- <span class="cline-any cline-neutral">&nbsp;</span>
578
- <span class="cline-any cline-neutral">&nbsp;</span>
579
- <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-no">&nbsp;</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-neutral">&nbsp;</span>
586
- <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-neutral">&nbsp;</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-neutral">&nbsp;</span>
590
- <span class="cline-any cline-no">&nbsp;</span>
591
- <span class="cline-any cline-no">&nbsp;</span>
592
- <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-neutral">&nbsp;</span>
599
- <span class="cline-any cline-neutral">&nbsp;</span>
600
- <span class="cline-any cline-neutral">&nbsp;</span>
601
- <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-neutral">&nbsp;</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-neutral">&nbsp;</span>
618
- <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-no">&nbsp;</span>
620
- <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-neutral">&nbsp;</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-neutral">&nbsp;</span>
624
- <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-no">&nbsp;</span>
629
- <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-neutral">&nbsp;</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-neutral">&nbsp;</span>
647
- <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-neutral">&nbsp;</span>
652
- <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-no">&nbsp;</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-no">&nbsp;</span>
663
- <span class="cline-any cline-no">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-no">&nbsp;</span>
670
- <span class="cline-any cline-neutral">&nbsp;</span>
671
- <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-neutral">&nbsp;</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-no">&nbsp;</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-neutral">&nbsp;</span>
692
- <span class="cline-any cline-no">&nbsp;</span>
693
- <span class="cline-any cline-no">&nbsp;</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-no">&nbsp;</span>
699
- <span class="cline-any cline-neutral">&nbsp;</span>
700
- <span class="cline-any cline-no">&nbsp;</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-neutral">&nbsp;</span>
709
- <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-neutral">&nbsp;</span>
711
- <span class="cline-any cline-neutral">&nbsp;</span>
712
- <span class="cline-any cline-neutral">&nbsp;</span>
713
- <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-yes">26x</span>
717
- <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { createHash } from 'node:crypto';
719
- &nbsp;
720
- import { getWithHooks } from '~/pkgs/data-model';
721
- import type { Where } from '~/pkgs/db-adapters';
722
- import type { GenericEndpointContext, RegistryContext } from '~/pkgs/types';
723
- &nbsp;
724
- import { DoubleTieError, ERROR_CODES } from '~/pkgs/results';
725
- import { validateEntityOutput } from '../definition';
726
- import type { ConsentPolicy, PolicyType } from './schema';
727
- &nbsp;
728
- /**
729
- * Generates placeholder content for a policy with its hash.
730
- *
731
- * Creates standardized temporary content for a consent policy, which includes a warning
732
- * that it should be replaced with actual policy terms. Also generates a SHA-256 hash
733
- * of this content for integrity verification.
734
- *
735
- * @param name - Policy name to include in the placeholder text
736
- * @param date - Generation date to include in the placeholder text
737
- * @returns Object containing the generated placeholder content and its SHA-256 hash
738
- * @returns {Object} result - Result object
739
- * @returns {string} result.content - Generated placeholder content
740
- * @returns {string} result.contentHash - SHA-256 hash of the generated content
741
- *
742
- * @example
743
- * ```ts
744
- * const { content, contentHash } = generatePolicyPlaceholder('Privacy Policy', new Date());
745
- * console.log(content); // "[PLACEHOLDER] This is an automatically generated version..."
746
- * console.log(contentHash); // "a1b2c3d4..." (SHA-256 hash)
747
- * ```
748
- *
749
- * @internal Used by findOrCreatePolicy to initialize placeholder content
750
- */
751
- function <span class="fstat-no" title="function not covered" >generatePolicyPlaceholder(n</span>ame: string, date: Date) {
752
- const content = <span class="cstat-no" title="statement not covered" >`[PLACEHOLDER] This is an automatically generated version of the ${name} policy.\n\nThis placeholder content should be replaced with actual policy terms before being presented to users.\n\nGenerated on: ${date.toISOString()}`;</span>
753
- const contentHash = <span class="cstat-no" title="statement not covered" >createHash('sha256').update(content).digest('hex');</span>
754
- <span class="cstat-no" title="statement not covered" > return { content, contentHash };</span>
755
- }
756
- &nbsp;
757
- /**
758
- * Creates and returns a set of consent policy-related adapter methods to interact with the database.
759
- * These methods provide a consistent interface for creating, finding, and updating
760
- * consent policy records while applying hooks and enforcing data validation rules.
761
- *
762
- * The returned registry object contains methods for common operations on consent policies,
763
- * including creation, retrieval, and conditional creation. All methods validate their
764
- * inputs and outputs according to the schema configuration.
765
- *
766
- * @param params - Registry context parameters
767
- * @param params.adapter - The database adapter used for direct database operations
768
- * @param params.ctx - Additional context properties containing hooks and options
769
- * @returns An object containing type-safe consent policy operations
770
- *
771
- * @example
772
- * ```typescript
773
- * const registry = policyRegistry({
774
- * adapter: databaseAdapter,
775
- * hooks: customHooks,
776
- * options: validationOptions
777
- * });
778
- *
779
- * // Use the registry methods
780
- * const policy = await registry.findOrCreatePolicy('privacy');
781
- * ```
782
- *
783
- * @see {@link RegistryContext} For details on the context parameters
784
- * @see {@link ConsentPolicy} For the structure of policy objects
785
- */
786
- export function policyRegistry({ adapter, ...ctx }: RegistryContext) {
787
- const { createWithHooks } = getWithHooks(adapter, ctx);
788
- const registry = {
789
- /**
790
- * Creates a new consent policy record in the database.
791
- * Automatically sets creation timestamp and applies any
792
- * configured hooks during the creation process.
793
- *
794
- * This method validates the provided policy data, assigns a creation timestamp,
795
- * and stores it in the database. It uses the configured hooks system to allow
796
- * for customization of the creation process.
797
- *
798
- * @param policy - Policy data to create (without id and timestamp)
799
- * @param context - Optional endpoint context for hooks execution
800
- * @returns Promise resolving to the created policy with all fields populated
801
- * @throws {Error} When the creation operation fails or returns null
802
- * @throws May also throw errors if hooks prevent creation or if database operations fail
803
- *
804
- * @example
805
- * ```ts
806
- * const newPolicy = await policyRegistry.createConsentPolicy({
807
- * version: '1.0.0',
808
- * type: 'privacy',
809
- * name: 'Privacy Policy',
810
- * effectiveDate: new Date(),
811
- * content: 'Full policy text...',
812
- * contentHash: 'sha256-hash-of-content',
813
- * isActive: true,
814
- * updatedAt: new Date(),
815
- * expirationDate: null
816
- * });
817
- * ```
818
- *
819
- * @see {@link ConsentPolicy} For the structure of the policy object
820
- * @see {@link GenericEndpointContext} For details on the context object
821
- */
822
- createConsentPolicy: <span class="fstat-no" title="function not covered" >async (</span>
823
- policy: Omit&lt;ConsentPolicy, 'id' | 'createdAt'&gt; &amp; Partial&lt;ConsentPolicy&gt;,
824
- context?: GenericEndpointContext
825
- ) =&gt; {
826
- const createdPolicy = <span class="cstat-no" title="statement not covered" >await createWithHooks({</span>
827
- data: {
828
- createdAt: new Date(),
829
- ...policy,
830
- },
831
- model: 'consentPolicy',
832
- context,
833
- });
834
- &nbsp;
835
- <span class="cstat-no" title="statement not covered" > if (!createdPolicy) {</span>
836
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError(</span>
837
- 'Failed to create consent policy - operation returned null',
838
- {
839
- code: ERROR_CODES.INTERNAL_SERVER_ERROR,
840
- status: 500,
841
- }
842
- );
843
- }
844
- &nbsp;
845
- <span class="cstat-no" title="statement not covered" > return createdPolicy as ConsentPolicy;</span>
846
- },
847
- &nbsp;
848
- /**
849
- * Retrieves consent policies from the database based on provided filter parameters.
850
- *
851
- * This method queries the database for consent policies matching the specified criteria.
852
- * By default, only active policies are returned unless specifically requested otherwise.
853
- * Results are sorted by effective date in descending order (newest first).
854
- *
855
- * @param params - Optional parameters to filter the policies
856
- * @param params.domainId - Optional domain identifier to filter policies by domain
857
- * @param params.version - Optional version string to filter policies by specific version
858
- * @param params.includeInactive - When true, includes inactive policies in the results
859
- * @returns Promise resolving to an array of validated consent policy objects
860
- *
861
- * @example
862
- * ```ts
863
- * // Get all active policies
864
- * const activePolicies = await policyRegistry.findPolicies();
865
- *
866
- * // Get all policies including inactive ones
867
- * const allPolicies = await policyRegistry.findPolicies({ includeInactive: true });
868
- *
869
- * // Get active policies for a specific version
870
- * const specificVersionPolicies = await policyRegistry.findPolicies({
871
- * version: '2.0.0'
872
- * });
873
- * ```
874
- *
875
- * @see {@link ConsentPolicy} For the structure of returned policy objects
876
- */
877
- findPolicies: <span class="fstat-no" title="function not covered" >async (</span>
878
- params: {
879
- domainId?: string;
880
- version?: string;
881
- includeInactive?: boolean;
882
- } = <span class="branch-0 cbranch-no" title="branch not covered" >{}</span>
883
- ) =&gt; {
884
- const whereConditions: Where&lt;'consentPolicy'&gt; = <span class="cstat-no" title="statement not covered" >[];</span>
885
- &nbsp;
886
- <span class="cstat-no" title="statement not covered" > if (!params.includeInactive) {</span>
887
- <span class="cstat-no" title="statement not covered" > whereConditions.push({</span>
888
- field: 'isActive',
889
- value: true,
890
- });
891
- }
892
- &nbsp;
893
- <span class="cstat-no" title="statement not covered" > if (params.domainId) {</span>
894
- <span class="cstat-no" title="statement not covered" > whereConditions.push({</span>
895
- field: 'id',
896
- value: params.domainId,
897
- });
898
- }
899
- &nbsp;
900
- <span class="cstat-no" title="statement not covered" > if (params.version) {</span>
901
- <span class="cstat-no" title="statement not covered" > whereConditions.push({</span>
902
- field: 'version',
903
- value: params.version,
904
- });
905
- }
906
- &nbsp;
907
- const policies = <span class="cstat-no" title="statement not covered" >await adapter.findMany({</span>
908
- model: 'consentPolicy',
909
- where: whereConditions,
910
- sortBy: {
911
- field: 'effectiveDate',
912
- direction: 'desc',
913
- },
914
- });
915
- &nbsp;
916
- <span class="cstat-no" title="statement not covered" > return policies.map(<span class="fstat-no" title="function not covered" >(p</span>olicy) =&gt;</span>
917
- <span class="cstat-no" title="statement not covered" > validateEntityOutput('consentPolicy', policy, ctx.options)</span>
918
- );
919
- },
920
- &nbsp;
921
- /**
922
- * Finds a consent policy by its unique ID.
923
- * Returns the policy with processed output fields according to the schema configuration.
924
- *
925
- * This method queries the database for a single consent policy that matches the provided ID.
926
- * The resulting policy is validated against the schema before being returned.
927
- *
928
- * @param policyId - The unique identifier of the policy to find
929
- * @returns Promise resolving to the validated policy object if found, null otherwise
930
- *
931
- * @example
932
- * ```ts
933
- * // Find a policy by ID
934
- * const policy = await policyRegistry.findConsentPolicyById('policy-123');
935
- * if (policy) {
936
- * console.log(`Found policy: ${policy.name}, version ${policy.version}`);
937
- * } else {
938
- * console.log('Policy not found');
939
- * }
940
- * ```
941
- *
942
- * @see {@link ConsentPolicy} For the structure of the returned policy object
943
- */
944
- findConsentPolicyById: <span class="fstat-no" title="function not covered" >async (p</span>olicyId: string) =&gt; {
945
- const policy = <span class="cstat-no" title="statement not covered" >await adapter.findOne({</span>
946
- model: 'consentPolicy',
947
- where: [
948
- {
949
- field: 'id',
950
- value: policyId,
951
- },
952
- ],
953
- });
954
- <span class="cstat-no" title="statement not covered" > return policy</span>
955
- ? validateEntityOutput('consentPolicy', policy, ctx.options)
956
- : null;
957
- },
958
- &nbsp;
959
- /**
960
- * Finds the latest active policy or creates a new one if none exists.
961
- * Uses a database transaction to prevent race conditions in multi-threaded environments.
962
- *
963
- * If multiple active policies with the same type exist, returns the most recent one
964
- * based on effectiveDate. When creating a new policy, it assigns version '1.0.0'
965
- * and generates placeholder content with a SHA-256 hash.
966
- *
967
- * @param type - The type of the policy to find/create (e.g., 'privacy', 'terms')
968
- * @returns Promise resolving to the found or newly created policy object
969
- * @throws {Error} If the database transaction fails to complete
970
- *
971
- * @example
972
- * ```ts
973
- * // Find or create a privacy policy
974
- * const privacyPolicy = await policyRegistry.findOrCreatePolicy('privacy');
975
- *
976
- * // Find or create a terms of service policy
977
- * const termsPolicy = await policyRegistry.findOrCreatePolicy('terms');
978
- * ```
979
- *
980
- * @see {@link PolicyType} For the available policy types
981
- * @see {@link ConsentPolicy} For the structure of the returned policy object
982
- * @see {@link generatePolicyPlaceholder} For details on how placeholder content is generated
983
- */
984
- findOrCreatePolicy: <span class="fstat-no" title="function not covered" >async (t</span>ype: PolicyType) =&gt; {
985
- // Use a transaction to prevent race conditions
986
- <span class="cstat-no" title="statement not covered" > return adapter.transaction({</span>
987
- callback: <span class="fstat-no" title="function not covered" >async (t</span>xAdapter) =&gt; {
988
- const now = <span class="cstat-no" title="statement not covered" >new Date();</span>
989
- const txRegistry = <span class="cstat-no" title="statement not covered" >policyRegistry({</span>
990
- adapter: txAdapter,
991
- ...ctx,
992
- });
993
- &nbsp;
994
- // Find latest policy with exact name match directly from database
995
- const rawLatestPolicy = <span class="cstat-no" title="statement not covered" >await txAdapter.findOne({</span>
996
- model: 'consentPolicy',
997
- where: [
998
- { field: 'isActive', value: true },
999
- {
1000
- field: 'type',
1001
- value: type,
1002
- },
1003
- ],
1004
- sortBy: {
1005
- field: 'effectiveDate',
1006
- direction: 'desc',
1007
- },
1008
- });
1009
- &nbsp;
1010
- const latestPolicy = <span class="cstat-no" title="statement not covered" >rawLatestPolicy</span>
1011
- ? validateEntityOutput(
1012
- 'consentPolicy',
1013
- rawLatestPolicy,
1014
- ctx.options
1015
- )
1016
- : null;
1017
- &nbsp;
1018
- <span class="cstat-no" title="statement not covered" > if (latestPolicy) {</span>
1019
- <span class="cstat-no" title="statement not covered" > return latestPolicy;</span>
1020
- }
1021
- &nbsp;
1022
- // Generate policy content and hash
1023
- const { content: defaultContent, contentHash } =
1024
- <span class="cstat-no" title="statement not covered" > generatePolicyPlaceholder(type, now);</span>
1025
- &nbsp;
1026
- <span class="cstat-no" title="statement not covered" > return txRegistry.createConsentPolicy({</span>
1027
- version: '1.0.0',
1028
- type,
1029
- name: type,
1030
- effectiveDate: now,
1031
- content: defaultContent,
1032
- contentHash,
1033
- isActive: true,
1034
- updatedAt: now,
1035
- expirationDate: null,
1036
- });
1037
- },
1038
- });
1039
- },
1040
- };
1041
- &nbsp;
1042
- return registry;
1043
- }
1044
- &nbsp;</pre></td></tr></table></pre>
1045
-
1046
- <div class='push'></div><!-- for sticky footer -->
1047
- </div><!-- /wrapper -->
1048
- <div class='footer quiet pad2 space-top1 center small'>
1049
- Code coverage generated by
1050
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1051
- at 2025-05-08T20:18:30.062Z
1052
- </div>
1053
- <script src="../../../../prettify.js"></script>
1054
- <script>
1055
- window.onload = function () {
1056
- prettyPrint();
1057
- };
1058
- </script>
1059
- <script src="../../../../sorter.js"></script>
1060
- <script src="../../../../block-navigation.js"></script>
1061
- </body>
1062
- </html>
1063
-