@c15t/backend 0.0.1-rc.24 → 1.0.0

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 (133) hide show
  1. package/.turbo/turbo-build.log +5 -5
  2. package/dist/index.cjs +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/pkgs/logger/types.d.ts +1 -1
  5. package/dist/pkgs/logger/types.d.ts.map +1 -1
  6. package/package.json +2 -3
  7. package/src/pkgs/logger/types.ts +1 -5
  8. package/.turbo/turbo-fmt.log +0 -7
  9. package/.turbo/turbo-test.log +0 -551
  10. package/coverage/coverage-final.json +0 -83
  11. package/coverage/coverage-summary.json +0 -84
  12. package/coverage/html/backend/index.html +0 -116
  13. package/coverage/html/backend/rslib.config.ts.html +0 -424
  14. package/coverage/html/backend/src/core.ts.html +0 -796
  15. package/coverage/html/backend/src/index.html +0 -131
  16. package/coverage/html/backend/src/init.ts.html +0 -1072
  17. package/coverage/html/backend/src/integrations/cloudflare.ts.html +0 -889
  18. package/coverage/html/backend/src/integrations/index.html +0 -146
  19. package/coverage/html/backend/src/integrations/next.ts.html +0 -691
  20. package/coverage/html/backend/src/integrations/node.ts.html +0 -505
  21. package/coverage/html/backend/src/pkgs/api-router/hooks/index.html +0 -116
  22. package/coverage/html/backend/src/pkgs/api-router/hooks/processor.ts.html +0 -538
  23. package/coverage/html/backend/src/pkgs/api-router/index.html +0 -131
  24. package/coverage/html/backend/src/pkgs/api-router/index.ts.html +0 -529
  25. package/coverage/html/backend/src/pkgs/api-router/telemetry.ts.html +0 -334
  26. package/coverage/html/backend/src/pkgs/api-router/utils/cors.ts.html +0 -304
  27. package/coverage/html/backend/src/pkgs/api-router/utils/define-route.ts.html +0 -1315
  28. package/coverage/html/backend/src/pkgs/api-router/utils/index.html +0 -146
  29. package/coverage/html/backend/src/pkgs/api-router/utils/ip.ts.html +0 -361
  30. package/coverage/html/backend/src/pkgs/data-model/fields/field-factory.ts.html +0 -709
  31. package/coverage/html/backend/src/pkgs/data-model/fields/id-generator.ts.html +0 -256
  32. package/coverage/html/backend/src/pkgs/data-model/fields/index.html +0 -161
  33. package/coverage/html/backend/src/pkgs/data-model/fields/superjson-utils.ts.html +0 -136
  34. package/coverage/html/backend/src/pkgs/data-model/fields/zod-fields.ts.html +0 -496
  35. package/coverage/html/backend/src/pkgs/data-model/hooks/create-hooks.ts.html +0 -349
  36. package/coverage/html/backend/src/pkgs/data-model/hooks/index.html +0 -176
  37. package/coverage/html/backend/src/pkgs/data-model/hooks/update-hooks.ts.html +0 -358
  38. package/coverage/html/backend/src/pkgs/data-model/hooks/update-many-hooks.ts.html +0 -613
  39. package/coverage/html/backend/src/pkgs/data-model/hooks/utils.ts.html +0 -538
  40. package/coverage/html/backend/src/pkgs/data-model/hooks/with-hooks-factory.ts.html +0 -289
  41. package/coverage/html/backend/src/pkgs/db-adapters/adapter-factory.ts.html +0 -277
  42. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts.html +0 -2212
  43. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/index.html +0 -116
  44. package/coverage/html/backend/src/pkgs/db-adapters/adapters/index.html +0 -116
  45. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts.html +0 -676
  46. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/index.html +0 -131
  47. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.ts.html +0 -3637
  48. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/index.html +0 -116
  49. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts.html +0 -1417
  50. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/index.html +0 -116
  51. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.ts.html +0 -2074
  52. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/index.html +0 -116
  53. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.ts.html +0 -1837
  54. package/coverage/html/backend/src/pkgs/db-adapters/adapters/test.ts.html +0 -316
  55. package/coverage/html/backend/src/pkgs/db-adapters/index.html +0 -131
  56. package/coverage/html/backend/src/pkgs/db-adapters/utils.ts.html +0 -238
  57. package/coverage/html/backend/src/pkgs/logger/console-formatter.ts.html +0 -310
  58. package/coverage/html/backend/src/pkgs/logger/index.html +0 -176
  59. package/coverage/html/backend/src/pkgs/logger/log-levels.ts.html +0 -223
  60. package/coverage/html/backend/src/pkgs/logger/logger-factory.ts.html +0 -448
  61. package/coverage/html/backend/src/pkgs/logger/result-logging.ts.html +0 -487
  62. package/coverage/html/backend/src/pkgs/logger/telemetry.ts.html +0 -373
  63. package/coverage/html/backend/src/pkgs/migrations/get-migration.ts.html +0 -343
  64. package/coverage/html/backend/src/pkgs/migrations/get-schema/get-schema.ts.html +0 -217
  65. package/coverage/html/backend/src/pkgs/migrations/get-schema/index.html +0 -146
  66. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-fields.ts.html +0 -280
  67. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-tables.ts.html +0 -289
  68. package/coverage/html/backend/src/pkgs/migrations/index.html +0 -176
  69. package/coverage/html/backend/src/pkgs/migrations/migration-builders.ts.html +0 -595
  70. package/coverage/html/backend/src/pkgs/migrations/migration-execution.ts.html +0 -301
  71. package/coverage/html/backend/src/pkgs/migrations/schema-comparison.ts.html +0 -691
  72. package/coverage/html/backend/src/pkgs/migrations/type-mapping.ts.html +0 -817
  73. package/coverage/html/backend/src/pkgs/results/core/error-class.ts.html +0 -1012
  74. package/coverage/html/backend/src/pkgs/results/core/error-codes.ts.html +0 -703
  75. package/coverage/html/backend/src/pkgs/results/core/index.html +0 -146
  76. package/coverage/html/backend/src/pkgs/results/core/tracing.ts.html +0 -280
  77. package/coverage/html/backend/src/pkgs/results/create-telemetry-options.ts.html +0 -271
  78. package/coverage/html/backend/src/pkgs/results/h3-integration.ts.html +0 -511
  79. package/coverage/html/backend/src/pkgs/results/index.html +0 -131
  80. package/coverage/html/backend/src/pkgs/results/pipeline/index.html +0 -131
  81. package/coverage/html/backend/src/pkgs/results/pipeline/retrieval-pipeline.ts.html +0 -649
  82. package/coverage/html/backend/src/pkgs/results/pipeline/validation-pipeline.ts.html +0 -577
  83. package/coverage/html/backend/src/pkgs/results/results/index.html +0 -131
  84. package/coverage/html/backend/src/pkgs/results/results/recovery-utils.ts.html +0 -628
  85. package/coverage/html/backend/src/pkgs/results/results/result-helpers.ts.html +0 -1234
  86. package/coverage/html/backend/src/pkgs/utils/env.ts.html +0 -337
  87. package/coverage/html/backend/src/pkgs/utils/index.html +0 -131
  88. package/coverage/html/backend/src/pkgs/utils/url.ts.html +0 -400
  89. package/coverage/html/backend/src/routes/index.html +0 -176
  90. package/coverage/html/backend/src/routes/index.ts.html +0 -121
  91. package/coverage/html/backend/src/routes/set-consent.ts.html +0 -832
  92. package/coverage/html/backend/src/routes/show-consent-banner.ts.html +0 -478
  93. package/coverage/html/backend/src/routes/status.ts.html +0 -268
  94. package/coverage/html/backend/src/routes/verify-consent.ts.html +0 -703
  95. package/coverage/html/backend/src/schema/audit-log/index.html +0 -146
  96. package/coverage/html/backend/src/schema/audit-log/registry.ts.html +0 -436
  97. package/coverage/html/backend/src/schema/audit-log/schema.ts.html +0 -223
  98. package/coverage/html/backend/src/schema/audit-log/table.ts.html +0 -640
  99. package/coverage/html/backend/src/schema/consent/index.html +0 -146
  100. package/coverage/html/backend/src/schema/consent/registry.ts.html +0 -616
  101. package/coverage/html/backend/src/schema/consent/schema.ts.html +0 -238
  102. package/coverage/html/backend/src/schema/consent/table.ts.html +0 -748
  103. package/coverage/html/backend/src/schema/consent-policy/index.html +0 -146
  104. package/coverage/html/backend/src/schema/consent-policy/registry.ts.html +0 -1063
  105. package/coverage/html/backend/src/schema/consent-policy/schema.ts.html +0 -265
  106. package/coverage/html/backend/src/schema/consent-policy/table.ts.html +0 -535
  107. package/coverage/html/backend/src/schema/consent-purpose/index.html +0 -146
  108. package/coverage/html/backend/src/schema/consent-purpose/registry.ts.html +0 -589
  109. package/coverage/html/backend/src/schema/consent-purpose/schema.ts.html +0 -259
  110. package/coverage/html/backend/src/schema/consent-purpose/table.ts.html +0 -547
  111. package/coverage/html/backend/src/schema/consent-record/index.html +0 -131
  112. package/coverage/html/backend/src/schema/consent-record/schema.ts.html +0 -211
  113. package/coverage/html/backend/src/schema/consent-record/table.ts.html +0 -457
  114. package/coverage/html/backend/src/schema/create-registry.ts.html +0 -148
  115. package/coverage/html/backend/src/schema/definition.ts.html +0 -685
  116. package/coverage/html/backend/src/schema/domain/index.html +0 -146
  117. package/coverage/html/backend/src/schema/domain/registry.ts.html +0 -973
  118. package/coverage/html/backend/src/schema/domain/schema.ts.html +0 -214
  119. package/coverage/html/backend/src/schema/domain/table.ts.html +0 -496
  120. package/coverage/html/backend/src/schema/index.html +0 -146
  121. package/coverage/html/backend/src/schema/schemas.ts.html +0 -166
  122. package/coverage/html/backend/src/schema/subject/index.html +0 -146
  123. package/coverage/html/backend/src/schema/subject/registry.ts.html +0 -973
  124. package/coverage/html/backend/src/schema/subject/schema.ts.html +0 -208
  125. package/coverage/html/backend/src/schema/subject/table.ts.html +0 -499
  126. package/coverage/html/base.css +0 -224
  127. package/coverage/html/block-navigation.js +0 -87
  128. package/coverage/html/favicon.png +0 -0
  129. package/coverage/html/index.html +0 -581
  130. package/coverage/html/prettify.css +0 -1
  131. package/coverage/html/prettify.js +0 -2
  132. package/coverage/html/sort-arrow-sprite.png +0 -0
  133. package/coverage/html/sorter.js +0 -196
@@ -1,973 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for backend/src/schema/subject/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/subject</a> registry.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">4.76% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>2/42</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/39</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">20% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>1/5</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">4.76% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>2/42</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></td><td class="line-coverage quiet"><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-neutral">&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-neutral">&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-yes">11x</span>
396
- <span class="cline-any cline-neutral">&nbsp;</span>
397
- <span class="cline-any cline-yes">11x</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-no">&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-no">&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-no">&nbsp;</span>
452
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
458
- <span class="cline-any cline-no">&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-neutral">&nbsp;</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-no">&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-no">&nbsp;</span>
481
- <span class="cline-any cline-no">&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-no">&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-neutral">&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-no">&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-neutral">&nbsp;</span>
510
- <span class="cline-any cline-no">&nbsp;</span>
511
- <span class="cline-any cline-no">&nbsp;</span>
512
- <span class="cline-any cline-no">&nbsp;</span>
513
- <span class="cline-any cline-no">&nbsp;</span>
514
- <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-no">&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-neutral">&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-no">&nbsp;</span>
523
- <span class="cline-any cline-no">&nbsp;</span>
524
- <span class="cline-any cline-no">&nbsp;</span>
525
- <span class="cline-any cline-no">&nbsp;</span>
526
- <span class="cline-any cline-no">&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-no">&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-no">&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-no">&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-no">&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-no">&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-no">&nbsp;</span>
557
- <span class="cline-any cline-no">&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-neutral">&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-neutral">&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-neutral">&nbsp;</span>
575
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
582
- <span class="cline-any cline-no">&nbsp;</span>
583
- <span class="cline-any cline-no">&nbsp;</span>
584
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
591
- <span class="cline-any cline-neutral">&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-no">&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-no">&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-no">&nbsp;</span>
618
- <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&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-no">&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-no">&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></td><td class="text"><pre class="prettyprint lang-js">import { getWithHooks } from '~/pkgs/data-model';
659
- import { DoubleTieError, ERROR_CODES } from '~/pkgs/results';
660
- import type { GenericEndpointContext, RegistryContext } from '~/pkgs/types';
661
- &nbsp;
662
- import { validateEntityOutput } from '../definition';
663
- import type { Subject } from './schema';
664
- &nbsp;
665
- /**
666
- * Creates and returns a set of subject-related adapter methods to interact with the database.
667
- *
668
- * These methods provide a consistent interface for creating and finding
669
- * subject records while applying hooks and enforcing data validation rules.
670
- *
671
- * @param adapter - The database adapter used for direct database operations
672
- * @param ctx - The context object containing the database adapter, hooks, and options
673
- * @returns An object containing type-safe subject operations
674
- *
675
- * @example
676
- * ```typescript
677
- * const subjectAdapter = createSubjectAdapter(
678
- * databaseAdapter,
679
- * createWithHooks,
680
- * c15tOptions
681
- * );
682
- *
683
- * // Create a new subject
684
- * const subject = await subjectAdapter.createSubject({
685
- * externalId: 'external-123',
686
- * identityProvider: 'auth0'
687
- * });
688
- * ```
689
- */
690
- export function subjectRegistry({ adapter, ...ctx }: RegistryContext) {
691
- const { createWithHooks } = getWithHooks(adapter, ctx);
692
- &nbsp;
693
- return {
694
- /**
695
- * Creates a new subject record in the database.
696
- *
697
- * Automatically sets creation and update timestamps and applies any
698
- * configured hooks during the creation process.
699
- *
700
- * @param subject - Subject data to create (without id and timestamps)
701
- * @param context - Optional endpoint context for hooks
702
- * @returns The created subject with all fields populated
703
- *
704
- * @throws May throw an error if hooks prevent creation or if database operations fail
705
- */
706
- createSubject: <span class="fstat-no" title="function not covered" >async (</span>
707
- subject: Omit&lt;Subject, 'id' | 'createdAt' | 'updatedAt'&gt; &amp;
708
- Partial&lt;Subject&gt;,
709
- context?: GenericEndpointContext
710
- ) =&gt; {
711
- const createdSubject = <span class="cstat-no" title="statement not covered" >await createWithHooks({</span>
712
- data: {
713
- createdAt: new Date(),
714
- updatedAt: new Date(),
715
- ...subject,
716
- },
717
- model: 'subject',
718
- customFn: undefined,
719
- context,
720
- });
721
- <span class="cstat-no" title="statement not covered" > return createdSubject</span>
722
- ? validateEntityOutput('subject', createdSubject, ctx.options)
723
- : null;
724
- },
725
- &nbsp;
726
- /**
727
- * Finds an existing subject or creates a new one if needed.
728
- * If both subjectId and externalSubjectId are provided, validates they match the same subject.
729
- * Creates a new anonymous subject only if no identifiers are provided.
730
- *
731
- * @param params - Parameters for finding or creating the subject
732
- * @returns The existing or newly created subject
733
- * @throws APIError if subject validation fails or creation fails
734
- */
735
- findOrCreateSubject: <span class="fstat-no" title="function not covered" >async function ({</span>
736
- subjectId,
737
- externalSubjectId,
738
- ipAddress = <span class="branch-0 cbranch-no" title="branch not covered" >'unknown',</span>
739
- context,
740
- }: {
741
- subjectId?: string;
742
- externalSubjectId?: string;
743
- ipAddress?: string;
744
- context?: GenericEndpointContext;
745
- }) {
746
- // If both subjectId and externalSubjectId are provided, validate they match
747
- <span class="cstat-no" title="statement not covered" > if (subjectId &amp;&amp; externalSubjectId) {</span>
748
- const [subjectById, subjectByExternalId] = <span class="cstat-no" title="statement not covered" >await Promise.all([</span>
749
- this.findSubjectById(subjectId),
750
- this.findSubjectByExternalId(externalSubjectId),
751
- ]);
752
- &nbsp;
753
- <span class="cstat-no" title="statement not covered" > if (!subjectById || !subjectByExternalId) {</span>
754
- <span class="cstat-no" title="statement not covered" > ctx.logger?.error(</span>
755
- 'Subject validation failed: One or both subjects not found',
756
- {
757
- providedSubjectId: subjectId,
758
- providedExternalId: externalSubjectId,
759
- subjectByIdFound: !!subjectById,
760
- subjectByExternalIdFound: !!subjectByExternalId,
761
- }
762
- );
763
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError(</span>
764
- 'The specified subject could not be found. Please verify the subject identifiers and try again.',
765
- {
766
- code: ERROR_CODES.NOT_FOUND,
767
- status: 404,
768
- meta: {
769
- providedSubjectId: subjectId,
770
- providedExternalId: externalSubjectId,
771
- },
772
- }
773
- );
774
- }
775
- &nbsp;
776
- <span class="cstat-no" title="statement not covered" > if (subjectById.id !== subjectByExternalId.id) {</span>
777
- <span class="cstat-no" title="statement not covered" > ctx.logger?.warn(</span>
778
- 'Subject validation failed: IDs do not match the same subject',
779
- {
780
- providedSubjectId: subjectId,
781
- providedExternalId: externalSubjectId,
782
- subjectByIdId: subjectById.id,
783
- subjectByExternalIdId: subjectByExternalId.id,
784
- }
785
- );
786
- &nbsp;
787
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError(</span>
788
- 'The provided subjectId and externalSubjectId do not match the same subject. Please ensure both identifiers refer to the same subject.',
789
- {
790
- code: ERROR_CODES.CONFLICT,
791
- status: 409,
792
- meta: {
793
- providedSubjectId: subjectId,
794
- providedExternalId: externalSubjectId,
795
- subjectByIdId: subjectById.id,
796
- subjectByExternalIdId: subjectByExternalId.id,
797
- },
798
- }
799
- );
800
- }
801
- &nbsp;
802
- <span class="cstat-no" title="statement not covered" > return subjectById;</span>
803
- }
804
- &nbsp;
805
- // Try to find subject by subjectId if provided
806
- <span class="cstat-no" title="statement not covered" > if (subjectId) {</span>
807
- const subject = <span class="cstat-no" title="statement not covered" >await this.findSubjectById(subjectId);</span>
808
- <span class="cstat-no" title="statement not covered" > if (subject) {</span>
809
- <span class="cstat-no" title="statement not covered" > return subject;</span>
810
- }
811
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError('Subject not found by subjectId', {</span>
812
- code: ERROR_CODES.NOT_FOUND,
813
- status: 404,
814
- });
815
- }
816
- &nbsp;
817
- // If externalSubjectId provided, try to find or create with upsert
818
- <span class="cstat-no" title="statement not covered" > if (externalSubjectId) {</span>
819
- <span class="cstat-no" title="statement not covered" > try {</span>
820
- const subject = <span class="cstat-no" title="statement not covered" >await this.findSubjectByExternalId(externalSubjectId);</span>
821
- <span class="cstat-no" title="statement not covered" > if (subject) {</span>
822
- <span class="cstat-no" title="statement not covered" > ctx.logger?.debug('Found existing subject by external ID', {</span>
823
- externalSubjectId,
824
- });
825
- <span class="cstat-no" title="statement not covered" > return subject;</span>
826
- }
827
- &nbsp;
828
- <span class="cstat-no" title="statement not covered" > ctx.logger?.info('Creating new subject with external ID', {</span>
829
- externalSubjectId,
830
- });
831
- // Attempt to create with unique constraint on externalId
832
- <span class="cstat-no" title="statement not covered" > return await this.createSubject(</span>
833
- {
834
- externalId: externalSubjectId,
835
- identityProvider: 'external',
836
- lastIpAddress: ipAddress,
837
- isIdentified: true,
838
- },
839
- context
840
- );
841
- } catch (error) {
842
- // If creation failed due to duplicate, try to find again
843
- <span class="cstat-no" title="statement not covered" > if (</span>
844
- error instanceof Error &amp;&amp;
845
- error.message.includes('unique constraint')
846
- ) {
847
- <span class="cstat-no" title="statement not covered" > ctx.logger?.info(</span>
848
- 'Handling duplicate key violation for external ID',
849
- { externalSubjectId }
850
- );
851
- const subject =
852
- <span class="cstat-no" title="statement not covered" > await this.findSubjectByExternalId(externalSubjectId);</span>
853
- <span class="cstat-no" title="statement not covered" > if (subject) {</span>
854
- <span class="cstat-no" title="statement not covered" > return subject;</span>
855
- }
856
- }
857
- <span class="cstat-no" title="statement not covered" > ctx.logger?.error(</span>
858
- 'Failed to create or find subject with external ID',
859
- {
860
- externalSubjectId,
861
- error: error instanceof Error ? error.message : 'Unknown error',
862
- }
863
- );
864
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError(</span>
865
- 'Failed to create or find subject with external ID',
866
- {
867
- code: ERROR_CODES.INTERNAL_SERVER_ERROR,
868
- status: 500,
869
- meta: {
870
- error: error instanceof Error ? error.message : 'Unknown error',
871
- },
872
- }
873
- );
874
- }
875
- }
876
- &nbsp;
877
- // For anonymous subjects, use a transaction to prevent duplicates
878
- <span class="cstat-no" title="statement not covered" > try {</span>
879
- <span class="cstat-no" title="statement not covered" > ctx.logger?.info('Creating new anonymous subject');</span>
880
- <span class="cstat-no" title="statement not covered" > return await this.createSubject(</span>
881
- {
882
- externalId: null,
883
- identityProvider: 'anonymous',
884
- lastIpAddress: ipAddress,
885
- isIdentified: false,
886
- },
887
- context
888
- );
889
- } catch (error) {
890
- <span class="cstat-no" title="statement not covered" > ctx.logger?.error('Failed to create anonymous subject', {</span>
891
- ipAddress,
892
- error: error instanceof Error ? error.message : 'Unknown error',
893
- });
894
- <span class="cstat-no" title="statement not covered" > throw new DoubleTieError('Failed to create anonymous subject', {</span>
895
- code: ERROR_CODES.INTERNAL_SERVER_ERROR,
896
- status: 500,
897
- meta: {
898
- error: error instanceof Error ? error.message : 'Unknown error',
899
- },
900
- });
901
- }
902
- },
903
- &nbsp;
904
- /**
905
- * Finds a subject by their unique ID.
906
- *
907
- * Returns the subject with processed output fields according to the schema configuration.
908
- *
909
- * @param subjectId - The unique identifier of the subject
910
- * @returns The subject object if found, null otherwise
911
- */
912
- findSubjectById: <span class="fstat-no" title="function not covered" >async (s</span>ubjectId: string) =&gt; {
913
- const subject = <span class="cstat-no" title="statement not covered" >await adapter.findOne({</span>
914
- model: 'subject',
915
- where: [
916
- {
917
- field: 'id',
918
- value: subjectId,
919
- },
920
- ],
921
- });
922
- &nbsp;
923
- <span class="cstat-no" title="statement not covered" > return subject</span>
924
- ? validateEntityOutput('subject', subject, ctx.options)
925
- : null;
926
- },
927
- &nbsp;
928
- /**
929
- * Finds a subject by their external ID.
930
- *
931
- * This is useful when integrating with external authentication systems
932
- * where subjects are identified by a provider-specific ID.
933
- *
934
- * @param externalId - The external identifier of the subject
935
- * @returns The subject object if found, null otherwise
936
- */
937
- findSubjectByExternalId: <span class="fstat-no" title="function not covered" >async (e</span>xternalId: string) =&gt; {
938
- const subject = <span class="cstat-no" title="statement not covered" >await adapter.findOne({</span>
939
- model: 'subject',
940
- where: [
941
- {
942
- field: 'externalId',
943
- value: externalId,
944
- },
945
- ],
946
- });
947
- &nbsp;
948
- <span class="cstat-no" title="statement not covered" > return subject</span>
949
- ? validateEntityOutput('subject', subject, ctx.options)
950
- : null;
951
- },
952
- };
953
- }
954
- &nbsp;</pre></td></tr></table></pre>
955
-
956
- <div class='push'></div><!-- for sticky footer -->
957
- </div><!-- /wrapper -->
958
- <div class='footer quiet pad2 space-top1 center small'>
959
- Code coverage generated by
960
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
961
- at 2025-04-14T10:55:46.797Z
962
- </div>
963
- <script src="../../../../prettify.js"></script>
964
- <script>
965
- window.onload = function () {
966
- prettyPrint();
967
- };
968
- </script>
969
- <script src="../../../../sorter.js"></script>
970
- <script src="../../../../block-navigation.js"></script>
971
- </body>
972
- </html>
973
-