+2
.env
+2
.env
+1
.rspec
+1
.rspec
···
1
+
--require spec_helper
+44
Gemfile
+44
Gemfile
···
1
+
# frozen_string_literal: true
2
+
3
+
source "https://gem.coop"
4
+
5
+
HANAMI_VERSION = "~> 2.2"
6
+
7
+
gem "hanami", HANAMI_VERSION
8
+
gem "hanami-assets", HANAMI_VERSION
9
+
gem "hanami-controller", HANAMI_VERSION
10
+
gem "hanami-db", HANAMI_VERSION
11
+
gem "hanami-router", HANAMI_VERSION
12
+
gem "hanami-validations", HANAMI_VERSION
13
+
gem "hanami-view", HANAMI_VERSION
14
+
15
+
gem "dry-types", "~> 1.7"
16
+
gem "dry-operation"
17
+
gem "puma"
18
+
gem "rake"
19
+
gem "pg"
20
+
21
+
group :development do
22
+
gem "hanami-webconsole", "~> 2.2"
23
+
end
24
+
25
+
group :development, :test do
26
+
gem "dotenv"
27
+
end
28
+
29
+
group :cli, :development do
30
+
gem "hanami-reloader", "~> 2.2"
31
+
end
32
+
33
+
group :cli, :development, :test do
34
+
gem "hanami-rspec", "~> 2.2"
35
+
end
36
+
37
+
group :test do
38
+
# Database
39
+
gem "database_cleaner-sequel"
40
+
41
+
# Web integration
42
+
gem "capybara"
43
+
gem "rack-test"
44
+
end
+345
Gemfile.lock
+345
Gemfile.lock
···
1
+
GEM
2
+
remote: https://gem.coop/
3
+
specs:
4
+
addressable (2.8.7)
5
+
public_suffix (>= 2.0.2, < 7.0)
6
+
better_errors (2.10.1)
7
+
erubi (>= 1.0.0)
8
+
rack (>= 0.9.0)
9
+
rouge (>= 1.0.0)
10
+
bigdecimal (3.3.1)
11
+
binding_of_caller (1.0.1)
12
+
debug_inspector (>= 1.2.0)
13
+
capybara (3.40.0)
14
+
addressable
15
+
matrix
16
+
mini_mime (>= 0.1.3)
17
+
nokogiri (~> 1.11)
18
+
rack (>= 1.6.0)
19
+
rack-test (>= 0.6.3)
20
+
regexp_parser (>= 1.5, < 3.0)
21
+
xpath (~> 3.2)
22
+
coderay (1.1.3)
23
+
concurrent-ruby (1.3.5)
24
+
database_cleaner-core (2.0.1)
25
+
database_cleaner-sequel (2.0.2)
26
+
database_cleaner-core (~> 2.0.0)
27
+
sequel
28
+
debug_inspector (1.2.0)
29
+
diff-lcs (1.6.2)
30
+
dotenv (3.1.8)
31
+
dry-auto_inject (1.1.0)
32
+
dry-core (~> 1.1)
33
+
zeitwerk (~> 2.6)
34
+
dry-cli (1.3.0)
35
+
dry-configurable (1.3.0)
36
+
dry-core (~> 1.1)
37
+
zeitwerk (~> 2.6)
38
+
dry-core (1.1.0)
39
+
concurrent-ruby (~> 1.0)
40
+
logger
41
+
zeitwerk (~> 2.6)
42
+
dry-events (1.1.0)
43
+
concurrent-ruby (~> 1.0)
44
+
dry-core (~> 1.1)
45
+
dry-files (1.1.0)
46
+
dry-inflector (1.2.0)
47
+
dry-initializer (3.2.0)
48
+
dry-logger (1.1.0)
49
+
dry-logic (1.6.0)
50
+
bigdecimal
51
+
concurrent-ruby (~> 1.0)
52
+
dry-core (~> 1.1)
53
+
zeitwerk (~> 2.6)
54
+
dry-monads (1.9.0)
55
+
concurrent-ruby (~> 1.0)
56
+
dry-core (~> 1.1)
57
+
zeitwerk (~> 2.6)
58
+
dry-monitor (1.0.1)
59
+
dry-configurable (~> 1.0, < 2)
60
+
dry-core (~> 1.0, < 2)
61
+
dry-events (~> 1.0, < 2)
62
+
dry-operation (1.0.0)
63
+
dry-monads (~> 1.6)
64
+
zeitwerk (~> 2.6)
65
+
dry-schema (1.14.1)
66
+
concurrent-ruby (~> 1.0)
67
+
dry-configurable (~> 1.0, >= 1.0.1)
68
+
dry-core (~> 1.1)
69
+
dry-initializer (~> 3.2)
70
+
dry-logic (~> 1.5)
71
+
dry-types (~> 1.8)
72
+
zeitwerk (~> 2.6)
73
+
dry-struct (1.8.0)
74
+
dry-core (~> 1.1)
75
+
dry-types (~> 1.8, >= 1.8.2)
76
+
ice_nine (~> 0.11)
77
+
zeitwerk (~> 2.6)
78
+
dry-system (1.2.4)
79
+
dry-auto_inject (~> 1.1)
80
+
dry-configurable (~> 1.3)
81
+
dry-core (~> 1.1)
82
+
dry-inflector (~> 1.1)
83
+
dry-transformer (1.0.1)
84
+
zeitwerk (~> 2.6)
85
+
dry-types (1.8.3)
86
+
bigdecimal (~> 3.0)
87
+
concurrent-ruby (~> 1.0)
88
+
dry-core (~> 1.0)
89
+
dry-inflector (~> 1.0)
90
+
dry-logic (~> 1.4)
91
+
zeitwerk (~> 2.6)
92
+
dry-validation (1.11.1)
93
+
concurrent-ruby (~> 1.0)
94
+
dry-core (~> 1.1)
95
+
dry-initializer (~> 3.2)
96
+
dry-schema (~> 1.14)
97
+
zeitwerk (~> 2.6)
98
+
erubi (1.13.1)
99
+
ffi (1.17.2)
100
+
ffi (1.17.2-aarch64-linux-gnu)
101
+
ffi (1.17.2-aarch64-linux-musl)
102
+
ffi (1.17.2-arm-linux-gnu)
103
+
ffi (1.17.2-arm-linux-musl)
104
+
ffi (1.17.2-arm64-darwin)
105
+
ffi (1.17.2-x86-linux-gnu)
106
+
ffi (1.17.2-x86-linux-musl)
107
+
ffi (1.17.2-x86_64-darwin)
108
+
ffi (1.17.2-x86_64-linux-gnu)
109
+
ffi (1.17.2-x86_64-linux-musl)
110
+
formatador (1.2.1)
111
+
reline
112
+
guard (2.19.1)
113
+
formatador (>= 0.2.4)
114
+
listen (>= 2.7, < 4.0)
115
+
logger (~> 1.6)
116
+
lumberjack (>= 1.0.12, < 2.0)
117
+
nenv (~> 0.1)
118
+
notiffany (~> 0.0)
119
+
ostruct (~> 0.6)
120
+
pry (>= 0.13.0)
121
+
shellany (~> 0.0)
122
+
thor (>= 0.18.1)
123
+
guard-compat (1.2.1)
124
+
guard-puma (0.9.2)
125
+
guard (~> 2.14)
126
+
guard-compat (~> 1.2)
127
+
puma (>= 4.0, < 8)
128
+
hanami (2.2.1)
129
+
bundler (>= 1.16, < 3)
130
+
dry-configurable (~> 1.0, >= 1.2.0, < 2)
131
+
dry-core (~> 1.0, < 2)
132
+
dry-inflector (~> 1.0, >= 1.1.0, < 2)
133
+
dry-logger (~> 1.0, < 2)
134
+
dry-monitor (~> 1.0, >= 1.0.1, < 2)
135
+
dry-system (~> 1.1)
136
+
hanami-cli (~> 2.2.1)
137
+
hanami-utils (~> 2.2)
138
+
json (>= 2.7.2)
139
+
zeitwerk (~> 2.6)
140
+
hanami-assets (2.2.0)
141
+
zeitwerk (~> 2.6)
142
+
hanami-cli (2.2.1)
143
+
bundler (~> 2.1)
144
+
dry-cli (~> 1.0, >= 1.1.0)
145
+
dry-files (~> 1.0, >= 1.0.2, < 2)
146
+
dry-inflector (~> 1.0, < 2)
147
+
rake (~> 13.0)
148
+
zeitwerk (~> 2.6)
149
+
hanami-controller (2.2.0)
150
+
dry-configurable (~> 1.0, < 2)
151
+
dry-core (~> 1.0)
152
+
hanami-utils (~> 2.2)
153
+
rack (~> 2.0)
154
+
zeitwerk (~> 2.6)
155
+
hanami-db (2.2.1)
156
+
rom (~> 5.4, >= 5.4.1)
157
+
rom-sql (~> 3.7)
158
+
zeitwerk (~> 2.6)
159
+
hanami-reloader (2.2.0)
160
+
guard (~> 2.19)
161
+
guard-puma (~> 0.8)
162
+
hanami-cli (~> 2.2)
163
+
zeitwerk (~> 2.6)
164
+
hanami-router (2.2.0)
165
+
mustermann (~> 3.0)
166
+
mustermann-contrib (~> 3.0)
167
+
rack (~> 2.0)
168
+
hanami-rspec (2.2.1)
169
+
hanami-cli (~> 2.2)
170
+
rake (~> 13.0)
171
+
rspec (~> 3.12)
172
+
zeitwerk (~> 2.6)
173
+
hanami-utils (2.2.0)
174
+
concurrent-ruby (~> 1.0)
175
+
dry-core (~> 1.0, < 2)
176
+
dry-transformer (~> 1.0, < 2)
177
+
hanami-validations (2.2.0)
178
+
dry-validation (>= 1.10, < 2)
179
+
hanami-view (2.2.1)
180
+
dry-configurable (~> 1.0)
181
+
dry-core (~> 1.0)
182
+
dry-inflector (~> 1.0, < 2)
183
+
temple (~> 0.10.0, >= 0.10.2)
184
+
tilt (~> 2.3)
185
+
zeitwerk (~> 2.6)
186
+
hanami-webconsole (2.2.0)
187
+
better_errors (~> 2.10, >= 2.10.1)
188
+
binding_of_caller (~> 1.0)
189
+
hansi (0.2.1)
190
+
ice_nine (0.11.2)
191
+
io-console (0.8.1)
192
+
json (2.15.1)
193
+
listen (3.9.0)
194
+
rb-fsevent (~> 0.10, >= 0.10.3)
195
+
rb-inotify (~> 0.9, >= 0.9.10)
196
+
logger (1.7.0)
197
+
lumberjack (1.4.2)
198
+
matrix (0.4.3)
199
+
method_source (1.1.0)
200
+
mini_mime (1.1.5)
201
+
mini_portile2 (2.8.9)
202
+
mustermann (3.0.4)
203
+
ruby2_keywords (~> 0.0.1)
204
+
mustermann-contrib (3.0.4)
205
+
hansi (~> 0.2.0)
206
+
mustermann (= 3.0.4)
207
+
nenv (0.3.0)
208
+
nio4r (2.7.4)
209
+
nokogiri (1.18.10)
210
+
mini_portile2 (~> 2.8.2)
211
+
racc (~> 1.4)
212
+
nokogiri (1.18.10-aarch64-linux-gnu)
213
+
racc (~> 1.4)
214
+
nokogiri (1.18.10-aarch64-linux-musl)
215
+
racc (~> 1.4)
216
+
nokogiri (1.18.10-arm-linux-gnu)
217
+
racc (~> 1.4)
218
+
nokogiri (1.18.10-arm-linux-musl)
219
+
racc (~> 1.4)
220
+
nokogiri (1.18.10-arm64-darwin)
221
+
racc (~> 1.4)
222
+
nokogiri (1.18.10-x86_64-darwin)
223
+
racc (~> 1.4)
224
+
nokogiri (1.18.10-x86_64-linux-gnu)
225
+
racc (~> 1.4)
226
+
nokogiri (1.18.10-x86_64-linux-musl)
227
+
racc (~> 1.4)
228
+
notiffany (0.1.3)
229
+
nenv (~> 0.1)
230
+
shellany (~> 0.0)
231
+
ostruct (0.6.3)
232
+
pg (1.6.2)
233
+
pg (1.6.2-aarch64-linux)
234
+
pg (1.6.2-aarch64-linux-musl)
235
+
pg (1.6.2-arm64-darwin)
236
+
pg (1.6.2-x86_64-darwin)
237
+
pg (1.6.2-x86_64-linux)
238
+
pg (1.6.2-x86_64-linux-musl)
239
+
pry (0.15.2)
240
+
coderay (~> 1.1)
241
+
method_source (~> 1.0)
242
+
public_suffix (6.0.2)
243
+
puma (7.1.0)
244
+
nio4r (~> 2.0)
245
+
racc (1.8.1)
246
+
rack (2.2.20)
247
+
rack-test (2.2.0)
248
+
rack (>= 1.3)
249
+
rake (13.3.0)
250
+
rb-fsevent (0.11.2)
251
+
rb-inotify (0.11.1)
252
+
ffi (~> 1.0)
253
+
regexp_parser (2.11.3)
254
+
reline (0.6.2)
255
+
io-console (~> 0.5)
256
+
rom (5.4.2)
257
+
rom-changeset (~> 5.4)
258
+
rom-core (~> 5.4)
259
+
rom-repository (~> 5.4, >= 5.4.2)
260
+
rom-changeset (5.4.0)
261
+
dry-core (~> 1.0)
262
+
rom-core (~> 5.4)
263
+
transproc (~> 1.1)
264
+
rom-core (5.4.0)
265
+
concurrent-ruby (~> 1.1)
266
+
dry-configurable (~> 1.0)
267
+
dry-core (~> 1.0)
268
+
dry-inflector (~> 1.0)
269
+
dry-initializer (~> 3.2)
270
+
dry-struct (~> 1.0)
271
+
dry-types (~> 1.6)
272
+
transproc (~> 1.1)
273
+
rom-repository (5.4.2)
274
+
dry-core (~> 1.0)
275
+
dry-initializer (~> 3.2)
276
+
rom-core (~> 5.4)
277
+
rom-sql (3.7.0)
278
+
dry-core (~> 1.1)
279
+
dry-types (~> 1.8)
280
+
rom (~> 5.4)
281
+
sequel (>= 4.49)
282
+
rouge (4.6.1)
283
+
rspec (3.13.1)
284
+
rspec-core (~> 3.13.0)
285
+
rspec-expectations (~> 3.13.0)
286
+
rspec-mocks (~> 3.13.0)
287
+
rspec-core (3.13.6)
288
+
rspec-support (~> 3.13.0)
289
+
rspec-expectations (3.13.5)
290
+
diff-lcs (>= 1.2.0, < 2.0)
291
+
rspec-support (~> 3.13.0)
292
+
rspec-mocks (3.13.6)
293
+
diff-lcs (>= 1.2.0, < 2.0)
294
+
rspec-support (~> 3.13.0)
295
+
rspec-support (3.13.6)
296
+
ruby2_keywords (0.0.5)
297
+
sequel (5.97.0)
298
+
bigdecimal
299
+
shellany (0.0.1)
300
+
temple (0.10.4)
301
+
thor (1.4.0)
302
+
tilt (2.6.1)
303
+
transproc (1.1.1)
304
+
xpath (3.2.0)
305
+
nokogiri (~> 1.8)
306
+
zeitwerk (2.7.3)
307
+
308
+
PLATFORMS
309
+
aarch64-linux
310
+
aarch64-linux-gnu
311
+
aarch64-linux-musl
312
+
arm-linux-gnu
313
+
arm-linux-musl
314
+
arm64-darwin
315
+
ruby
316
+
x86-linux-gnu
317
+
x86-linux-musl
318
+
x86_64-darwin
319
+
x86_64-linux
320
+
x86_64-linux-gnu
321
+
x86_64-linux-musl
322
+
323
+
DEPENDENCIES
324
+
capybara
325
+
database_cleaner-sequel
326
+
dotenv
327
+
dry-operation
328
+
dry-types (~> 1.7)
329
+
hanami (~> 2.2)
330
+
hanami-assets (~> 2.2)
331
+
hanami-controller (~> 2.2)
332
+
hanami-db (~> 2.2)
333
+
hanami-reloader (~> 2.2)
334
+
hanami-router (~> 2.2)
335
+
hanami-rspec (~> 2.2)
336
+
hanami-validations (~> 2.2)
337
+
hanami-view (~> 2.2)
338
+
hanami-webconsole (~> 2.2)
339
+
pg
340
+
puma
341
+
rack-test
342
+
rake
343
+
344
+
BUNDLED WITH
345
+
2.7.2
+9
Guardfile
+9
Guardfile
···
1
+
# frozen_string_literal: true
2
+
3
+
group :server do
4
+
guard "puma", port: ENV.fetch("HANAMI_PORT", 2300) do
5
+
# Edit the following regular expression for your needs.
6
+
# See: https://guides.hanamirb.org/app/code-reloading/
7
+
watch(%r{^(app|config|lib|slices)([\/][^\/]+)*.(rb|erb|haml|slim)$}i)
8
+
end
9
+
end
+1
README.md
+1
README.md
···
1
+
# Sparkles
+12
app/action.rb
+12
app/action.rb
···
1
+
# auto_register: false
2
+
# frozen_string_literal: true
3
+
4
+
require "hanami/action"
5
+
require "dry/monads"
6
+
7
+
module Sparkles
8
+
class Action < Hanami::Action
9
+
# Provide `Success` and `Failure` for pattern matching on operation results
10
+
include Dry::Monads[:result]
11
+
end
12
+
end
app/actions/.keep
app/actions/.keep
This is a binary file and will not be displayed.
+5
app/assets/css/app.css
+5
app/assets/css/app.css
app/assets/images/favicon.ico
app/assets/images/favicon.ico
This is a binary file and will not be displayed.
+1
app/assets/js/app.js
+1
app/assets/js/app.js
···
1
+
import "../css/app.css";
+10
app/db/relation.rb
+10
app/db/relation.rb
+10
app/db/repo.rb
+10
app/db/repo.rb
+10
app/db/struct.rb
+10
app/db/struct.rb
+9
app/operation.rb
+9
app/operation.rb
app/relations/.keep
app/relations/.keep
This is a binary file and will not be displayed.
app/repos/.keep
app/repos/.keep
This is a binary file and will not be displayed.
app/structs/.keep
app/structs/.keep
This is a binary file and will not be displayed.
+14
app/templates/layouts/app.html.erb
+14
app/templates/layouts/app.html.erb
···
1
+
<!DOCTYPE html>
2
+
<html lang="en">
3
+
<head>
4
+
<meta charset="UTF-8">
5
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+
<title>Sparkles</title>
7
+
<%= favicon_tag %>
8
+
<%= stylesheet_tag "app" %>
9
+
</head>
10
+
<body>
11
+
<%= yield %>
12
+
<%= javascript_tag "app" %>
13
+
</body>
14
+
</html>
+9
app/view.rb
+9
app/view.rb
+10
app/views/helpers.rb
+10
app/views/helpers.rb
+5
config.ru
+5
config.ru
+8
config/app.rb
+8
config/app.rb
+16
config/assets.js
+16
config/assets.js
···
1
+
import * as assets from "hanami-assets";
2
+
3
+
await assets.run();
4
+
5
+
// To provide additional esbuild (https://esbuild.github.io) options, use the following:
6
+
//
7
+
// Read more at: https://guides.hanamirb.org/assets/customization/
8
+
//
9
+
// await assets.run({
10
+
// esbuildOptionsFn: (args, esbuildOptions) => {
11
+
// // Add to esbuildOptions here. Use `args.watch` as a condition for different options for
12
+
// // compile vs watch.
13
+
//
14
+
// return esbuildOptions;
15
+
// }
16
+
// });
config/db/migrate/.keep
config/db/migrate/.keep
This is a binary file and will not be displayed.
+15
config/db/seeds.rb
+15
config/db/seeds.rb
···
1
+
# This seeds file should create the database records required to run the app.
2
+
#
3
+
# The code should be idempotent so that it can be executed at any time.
4
+
#
5
+
# To load the seeds, run `hanami db seed`. Seeds are also loaded as part of `hanami db prepare`.
6
+
7
+
# For example, if you have appropriate repos available:
8
+
#
9
+
# category_repo = Hanami.app["repos.category_repo"]
10
+
# category_repo.create(title: "General")
11
+
#
12
+
# Alternatively, you can use relations directly:
13
+
#
14
+
# categories = Hanami.app["relations.categories"]
15
+
# categories.insert(title: "General")
+47
config/puma.rb
+47
config/puma.rb
···
1
+
# frozen_string_literal: true
2
+
3
+
#
4
+
# Environment and port
5
+
#
6
+
port ENV.fetch("HANAMI_PORT", 2300)
7
+
environment ENV.fetch("HANAMI_ENV", "development")
8
+
9
+
#
10
+
# Threads within each Puma/Ruby process (aka worker)
11
+
#
12
+
13
+
# Configure the minimum and maximum number of threads to use to answer requests.
14
+
max_threads_count = ENV.fetch("HANAMI_MAX_THREADS", 5)
15
+
min_threads_count = ENV.fetch("HANAMI_MIN_THREADS") { max_threads_count }
16
+
17
+
threads min_threads_count, max_threads_count
18
+
19
+
#
20
+
# Workers (aka Puma/Ruby processes)
21
+
#
22
+
23
+
puma_concurrency = Integer(ENV.fetch("HANAMI_WEB_CONCURRENCY", 0))
24
+
puma_cluster_mode = puma_concurrency > 1
25
+
26
+
# How many worker (Puma/Ruby) processes to run.
27
+
# Typically this is set to the number of available cores.
28
+
workers puma_concurrency
29
+
30
+
#
31
+
# Cluster mode (aka multiple workers)
32
+
#
33
+
34
+
if puma_cluster_mode
35
+
# Preload the application before starting the workers. Only in cluster mode.
36
+
preload_app!
37
+
38
+
# Code to run immediately before master process forks workers (once on boot).
39
+
#
40
+
# These hooks can block if necessary to wait for background operations unknown
41
+
# to puma to finish before the process terminates. This can be used to close
42
+
# any connections to remote servers (database, redis, …) that were opened when
43
+
# preloading the code.
44
+
before_fork do
45
+
Hanami.shutdown
46
+
end
47
+
end
+7
config/routes.rb
+7
config/routes.rb
+9
config/settings.rb
+9
config/settings.rb
+11
lib/sparkles/types.rb
+11
lib/sparkles/types.rb
lib/tasks/.keep
lib/tasks/.keep
This is a binary file and will not be displayed.
+999
package-lock.json
+999
package-lock.json
···
1
+
{
2
+
"name": "sparkles",
3
+
"lockfileVersion": 3,
4
+
"requires": true,
5
+
"packages": {
6
+
"": {
7
+
"name": "sparkles",
8
+
"dependencies": {
9
+
"hanami-assets": "^2.2.1"
10
+
}
11
+
},
12
+
"node_modules/@esbuild/aix-ppc64": {
13
+
"version": "0.25.11",
14
+
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz",
15
+
"integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==",
16
+
"cpu": [
17
+
"ppc64"
18
+
],
19
+
"license": "MIT",
20
+
"optional": true,
21
+
"os": [
22
+
"aix"
23
+
],
24
+
"engines": {
25
+
"node": ">=18"
26
+
}
27
+
},
28
+
"node_modules/@esbuild/android-arm": {
29
+
"version": "0.25.11",
30
+
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz",
31
+
"integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==",
32
+
"cpu": [
33
+
"arm"
34
+
],
35
+
"license": "MIT",
36
+
"optional": true,
37
+
"os": [
38
+
"android"
39
+
],
40
+
"engines": {
41
+
"node": ">=18"
42
+
}
43
+
},
44
+
"node_modules/@esbuild/android-arm64": {
45
+
"version": "0.25.11",
46
+
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz",
47
+
"integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==",
48
+
"cpu": [
49
+
"arm64"
50
+
],
51
+
"license": "MIT",
52
+
"optional": true,
53
+
"os": [
54
+
"android"
55
+
],
56
+
"engines": {
57
+
"node": ">=18"
58
+
}
59
+
},
60
+
"node_modules/@esbuild/android-x64": {
61
+
"version": "0.25.11",
62
+
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz",
63
+
"integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==",
64
+
"cpu": [
65
+
"x64"
66
+
],
67
+
"license": "MIT",
68
+
"optional": true,
69
+
"os": [
70
+
"android"
71
+
],
72
+
"engines": {
73
+
"node": ">=18"
74
+
}
75
+
},
76
+
"node_modules/@esbuild/darwin-arm64": {
77
+
"version": "0.25.11",
78
+
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz",
79
+
"integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==",
80
+
"cpu": [
81
+
"arm64"
82
+
],
83
+
"license": "MIT",
84
+
"optional": true,
85
+
"os": [
86
+
"darwin"
87
+
],
88
+
"engines": {
89
+
"node": ">=18"
90
+
}
91
+
},
92
+
"node_modules/@esbuild/darwin-x64": {
93
+
"version": "0.25.11",
94
+
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz",
95
+
"integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==",
96
+
"cpu": [
97
+
"x64"
98
+
],
99
+
"license": "MIT",
100
+
"optional": true,
101
+
"os": [
102
+
"darwin"
103
+
],
104
+
"engines": {
105
+
"node": ">=18"
106
+
}
107
+
},
108
+
"node_modules/@esbuild/freebsd-arm64": {
109
+
"version": "0.25.11",
110
+
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz",
111
+
"integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==",
112
+
"cpu": [
113
+
"arm64"
114
+
],
115
+
"license": "MIT",
116
+
"optional": true,
117
+
"os": [
118
+
"freebsd"
119
+
],
120
+
"engines": {
121
+
"node": ">=18"
122
+
}
123
+
},
124
+
"node_modules/@esbuild/freebsd-x64": {
125
+
"version": "0.25.11",
126
+
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz",
127
+
"integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==",
128
+
"cpu": [
129
+
"x64"
130
+
],
131
+
"license": "MIT",
132
+
"optional": true,
133
+
"os": [
134
+
"freebsd"
135
+
],
136
+
"engines": {
137
+
"node": ">=18"
138
+
}
139
+
},
140
+
"node_modules/@esbuild/linux-arm": {
141
+
"version": "0.25.11",
142
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz",
143
+
"integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==",
144
+
"cpu": [
145
+
"arm"
146
+
],
147
+
"license": "MIT",
148
+
"optional": true,
149
+
"os": [
150
+
"linux"
151
+
],
152
+
"engines": {
153
+
"node": ">=18"
154
+
}
155
+
},
156
+
"node_modules/@esbuild/linux-arm64": {
157
+
"version": "0.25.11",
158
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz",
159
+
"integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==",
160
+
"cpu": [
161
+
"arm64"
162
+
],
163
+
"license": "MIT",
164
+
"optional": true,
165
+
"os": [
166
+
"linux"
167
+
],
168
+
"engines": {
169
+
"node": ">=18"
170
+
}
171
+
},
172
+
"node_modules/@esbuild/linux-ia32": {
173
+
"version": "0.25.11",
174
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz",
175
+
"integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==",
176
+
"cpu": [
177
+
"ia32"
178
+
],
179
+
"license": "MIT",
180
+
"optional": true,
181
+
"os": [
182
+
"linux"
183
+
],
184
+
"engines": {
185
+
"node": ">=18"
186
+
}
187
+
},
188
+
"node_modules/@esbuild/linux-loong64": {
189
+
"version": "0.25.11",
190
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz",
191
+
"integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==",
192
+
"cpu": [
193
+
"loong64"
194
+
],
195
+
"license": "MIT",
196
+
"optional": true,
197
+
"os": [
198
+
"linux"
199
+
],
200
+
"engines": {
201
+
"node": ">=18"
202
+
}
203
+
},
204
+
"node_modules/@esbuild/linux-mips64el": {
205
+
"version": "0.25.11",
206
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz",
207
+
"integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==",
208
+
"cpu": [
209
+
"mips64el"
210
+
],
211
+
"license": "MIT",
212
+
"optional": true,
213
+
"os": [
214
+
"linux"
215
+
],
216
+
"engines": {
217
+
"node": ">=18"
218
+
}
219
+
},
220
+
"node_modules/@esbuild/linux-ppc64": {
221
+
"version": "0.25.11",
222
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz",
223
+
"integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==",
224
+
"cpu": [
225
+
"ppc64"
226
+
],
227
+
"license": "MIT",
228
+
"optional": true,
229
+
"os": [
230
+
"linux"
231
+
],
232
+
"engines": {
233
+
"node": ">=18"
234
+
}
235
+
},
236
+
"node_modules/@esbuild/linux-riscv64": {
237
+
"version": "0.25.11",
238
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz",
239
+
"integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==",
240
+
"cpu": [
241
+
"riscv64"
242
+
],
243
+
"license": "MIT",
244
+
"optional": true,
245
+
"os": [
246
+
"linux"
247
+
],
248
+
"engines": {
249
+
"node": ">=18"
250
+
}
251
+
},
252
+
"node_modules/@esbuild/linux-s390x": {
253
+
"version": "0.25.11",
254
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz",
255
+
"integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==",
256
+
"cpu": [
257
+
"s390x"
258
+
],
259
+
"license": "MIT",
260
+
"optional": true,
261
+
"os": [
262
+
"linux"
263
+
],
264
+
"engines": {
265
+
"node": ">=18"
266
+
}
267
+
},
268
+
"node_modules/@esbuild/linux-x64": {
269
+
"version": "0.25.11",
270
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz",
271
+
"integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==",
272
+
"cpu": [
273
+
"x64"
274
+
],
275
+
"license": "MIT",
276
+
"optional": true,
277
+
"os": [
278
+
"linux"
279
+
],
280
+
"engines": {
281
+
"node": ">=18"
282
+
}
283
+
},
284
+
"node_modules/@esbuild/netbsd-arm64": {
285
+
"version": "0.25.11",
286
+
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz",
287
+
"integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==",
288
+
"cpu": [
289
+
"arm64"
290
+
],
291
+
"license": "MIT",
292
+
"optional": true,
293
+
"os": [
294
+
"netbsd"
295
+
],
296
+
"engines": {
297
+
"node": ">=18"
298
+
}
299
+
},
300
+
"node_modules/@esbuild/netbsd-x64": {
301
+
"version": "0.25.11",
302
+
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz",
303
+
"integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==",
304
+
"cpu": [
305
+
"x64"
306
+
],
307
+
"license": "MIT",
308
+
"optional": true,
309
+
"os": [
310
+
"netbsd"
311
+
],
312
+
"engines": {
313
+
"node": ">=18"
314
+
}
315
+
},
316
+
"node_modules/@esbuild/openbsd-arm64": {
317
+
"version": "0.25.11",
318
+
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz",
319
+
"integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==",
320
+
"cpu": [
321
+
"arm64"
322
+
],
323
+
"license": "MIT",
324
+
"optional": true,
325
+
"os": [
326
+
"openbsd"
327
+
],
328
+
"engines": {
329
+
"node": ">=18"
330
+
}
331
+
},
332
+
"node_modules/@esbuild/openbsd-x64": {
333
+
"version": "0.25.11",
334
+
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz",
335
+
"integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==",
336
+
"cpu": [
337
+
"x64"
338
+
],
339
+
"license": "MIT",
340
+
"optional": true,
341
+
"os": [
342
+
"openbsd"
343
+
],
344
+
"engines": {
345
+
"node": ">=18"
346
+
}
347
+
},
348
+
"node_modules/@esbuild/openharmony-arm64": {
349
+
"version": "0.25.11",
350
+
"resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz",
351
+
"integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==",
352
+
"cpu": [
353
+
"arm64"
354
+
],
355
+
"license": "MIT",
356
+
"optional": true,
357
+
"os": [
358
+
"openharmony"
359
+
],
360
+
"engines": {
361
+
"node": ">=18"
362
+
}
363
+
},
364
+
"node_modules/@esbuild/sunos-x64": {
365
+
"version": "0.25.11",
366
+
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz",
367
+
"integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==",
368
+
"cpu": [
369
+
"x64"
370
+
],
371
+
"license": "MIT",
372
+
"optional": true,
373
+
"os": [
374
+
"sunos"
375
+
],
376
+
"engines": {
377
+
"node": ">=18"
378
+
}
379
+
},
380
+
"node_modules/@esbuild/win32-arm64": {
381
+
"version": "0.25.11",
382
+
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz",
383
+
"integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==",
384
+
"cpu": [
385
+
"arm64"
386
+
],
387
+
"license": "MIT",
388
+
"optional": true,
389
+
"os": [
390
+
"win32"
391
+
],
392
+
"engines": {
393
+
"node": ">=18"
394
+
}
395
+
},
396
+
"node_modules/@esbuild/win32-ia32": {
397
+
"version": "0.25.11",
398
+
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz",
399
+
"integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==",
400
+
"cpu": [
401
+
"ia32"
402
+
],
403
+
"license": "MIT",
404
+
"optional": true,
405
+
"os": [
406
+
"win32"
407
+
],
408
+
"engines": {
409
+
"node": ">=18"
410
+
}
411
+
},
412
+
"node_modules/@esbuild/win32-x64": {
413
+
"version": "0.25.11",
414
+
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz",
415
+
"integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==",
416
+
"cpu": [
417
+
"x64"
418
+
],
419
+
"license": "MIT",
420
+
"optional": true,
421
+
"os": [
422
+
"win32"
423
+
],
424
+
"engines": {
425
+
"node": ">=18"
426
+
}
427
+
},
428
+
"node_modules/@isaacs/balanced-match": {
429
+
"version": "4.0.1",
430
+
"resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
431
+
"integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
432
+
"license": "MIT",
433
+
"engines": {
434
+
"node": "20 || >=22"
435
+
}
436
+
},
437
+
"node_modules/@isaacs/brace-expansion": {
438
+
"version": "5.0.0",
439
+
"resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
440
+
"integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
441
+
"license": "MIT",
442
+
"dependencies": {
443
+
"@isaacs/balanced-match": "^4.0.1"
444
+
},
445
+
"engines": {
446
+
"node": "20 || >=22"
447
+
}
448
+
},
449
+
"node_modules/@isaacs/cliui": {
450
+
"version": "8.0.2",
451
+
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
452
+
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
453
+
"license": "ISC",
454
+
"dependencies": {
455
+
"string-width": "^5.1.2",
456
+
"string-width-cjs": "npm:string-width@^4.2.0",
457
+
"strip-ansi": "^7.0.1",
458
+
"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
459
+
"wrap-ansi": "^8.1.0",
460
+
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
461
+
},
462
+
"engines": {
463
+
"node": ">=12"
464
+
}
465
+
},
466
+
"node_modules/ansi-regex": {
467
+
"version": "6.2.2",
468
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
469
+
"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
470
+
"license": "MIT",
471
+
"engines": {
472
+
"node": ">=12"
473
+
},
474
+
"funding": {
475
+
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
476
+
}
477
+
},
478
+
"node_modules/ansi-styles": {
479
+
"version": "6.2.3",
480
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
481
+
"integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
482
+
"license": "MIT",
483
+
"engines": {
484
+
"node": ">=12"
485
+
},
486
+
"funding": {
487
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
488
+
}
489
+
},
490
+
"node_modules/color-convert": {
491
+
"version": "2.0.1",
492
+
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
493
+
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
494
+
"license": "MIT",
495
+
"dependencies": {
496
+
"color-name": "~1.1.4"
497
+
},
498
+
"engines": {
499
+
"node": ">=7.0.0"
500
+
}
501
+
},
502
+
"node_modules/color-name": {
503
+
"version": "1.1.4",
504
+
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
505
+
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
506
+
"license": "MIT"
507
+
},
508
+
"node_modules/cross-spawn": {
509
+
"version": "7.0.6",
510
+
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
511
+
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
512
+
"license": "MIT",
513
+
"dependencies": {
514
+
"path-key": "^3.1.0",
515
+
"shebang-command": "^2.0.0",
516
+
"which": "^2.0.1"
517
+
},
518
+
"engines": {
519
+
"node": ">= 8"
520
+
}
521
+
},
522
+
"node_modules/eastasianwidth": {
523
+
"version": "0.2.0",
524
+
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
525
+
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
526
+
"license": "MIT"
527
+
},
528
+
"node_modules/emoji-regex": {
529
+
"version": "9.2.2",
530
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
531
+
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
532
+
"license": "MIT"
533
+
},
534
+
"node_modules/esbuild": {
535
+
"version": "0.25.11",
536
+
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz",
537
+
"integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==",
538
+
"hasInstallScript": true,
539
+
"license": "MIT",
540
+
"bin": {
541
+
"esbuild": "bin/esbuild"
542
+
},
543
+
"engines": {
544
+
"node": ">=18"
545
+
},
546
+
"optionalDependencies": {
547
+
"@esbuild/aix-ppc64": "0.25.11",
548
+
"@esbuild/android-arm": "0.25.11",
549
+
"@esbuild/android-arm64": "0.25.11",
550
+
"@esbuild/android-x64": "0.25.11",
551
+
"@esbuild/darwin-arm64": "0.25.11",
552
+
"@esbuild/darwin-x64": "0.25.11",
553
+
"@esbuild/freebsd-arm64": "0.25.11",
554
+
"@esbuild/freebsd-x64": "0.25.11",
555
+
"@esbuild/linux-arm": "0.25.11",
556
+
"@esbuild/linux-arm64": "0.25.11",
557
+
"@esbuild/linux-ia32": "0.25.11",
558
+
"@esbuild/linux-loong64": "0.25.11",
559
+
"@esbuild/linux-mips64el": "0.25.11",
560
+
"@esbuild/linux-ppc64": "0.25.11",
561
+
"@esbuild/linux-riscv64": "0.25.11",
562
+
"@esbuild/linux-s390x": "0.25.11",
563
+
"@esbuild/linux-x64": "0.25.11",
564
+
"@esbuild/netbsd-arm64": "0.25.11",
565
+
"@esbuild/netbsd-x64": "0.25.11",
566
+
"@esbuild/openbsd-arm64": "0.25.11",
567
+
"@esbuild/openbsd-x64": "0.25.11",
568
+
"@esbuild/openharmony-arm64": "0.25.11",
569
+
"@esbuild/sunos-x64": "0.25.11",
570
+
"@esbuild/win32-arm64": "0.25.11",
571
+
"@esbuild/win32-ia32": "0.25.11",
572
+
"@esbuild/win32-x64": "0.25.11"
573
+
}
574
+
},
575
+
"node_modules/foreground-child": {
576
+
"version": "3.3.1",
577
+
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
578
+
"integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
579
+
"license": "ISC",
580
+
"dependencies": {
581
+
"cross-spawn": "^7.0.6",
582
+
"signal-exit": "^4.0.1"
583
+
},
584
+
"engines": {
585
+
"node": ">=14"
586
+
},
587
+
"funding": {
588
+
"url": "https://github.com/sponsors/isaacs"
589
+
}
590
+
},
591
+
"node_modules/fs-extra": {
592
+
"version": "11.3.2",
593
+
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz",
594
+
"integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==",
595
+
"license": "MIT",
596
+
"dependencies": {
597
+
"graceful-fs": "^4.2.0",
598
+
"jsonfile": "^6.0.1",
599
+
"universalify": "^2.0.0"
600
+
},
601
+
"engines": {
602
+
"node": ">=14.14"
603
+
}
604
+
},
605
+
"node_modules/glob": {
606
+
"version": "11.0.3",
607
+
"resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz",
608
+
"integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==",
609
+
"license": "ISC",
610
+
"dependencies": {
611
+
"foreground-child": "^3.3.1",
612
+
"jackspeak": "^4.1.1",
613
+
"minimatch": "^10.0.3",
614
+
"minipass": "^7.1.2",
615
+
"package-json-from-dist": "^1.0.0",
616
+
"path-scurry": "^2.0.0"
617
+
},
618
+
"bin": {
619
+
"glob": "dist/esm/bin.mjs"
620
+
},
621
+
"engines": {
622
+
"node": "20 || >=22"
623
+
},
624
+
"funding": {
625
+
"url": "https://github.com/sponsors/isaacs"
626
+
}
627
+
},
628
+
"node_modules/graceful-fs": {
629
+
"version": "4.2.11",
630
+
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
631
+
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
632
+
"license": "ISC"
633
+
},
634
+
"node_modules/hanami-assets": {
635
+
"version": "2.2.2",
636
+
"resolved": "https://registry.npmjs.org/hanami-assets/-/hanami-assets-2.2.2.tgz",
637
+
"integrity": "sha512-Dce4sHaWDkWHKM94nQplF2/1/w/xwbQlmuqQat96df5rL3GlweGBmhHgjjQR81jaoOrl57EmOsU2sAFcawF63A==",
638
+
"license": "MIT",
639
+
"dependencies": {
640
+
"esbuild": "^0.25.1",
641
+
"fs-extra": "^11.3.0",
642
+
"glob": "^11.0.1"
643
+
},
644
+
"funding": {
645
+
"url": "https://github.com/sponsors/hanami"
646
+
}
647
+
},
648
+
"node_modules/is-fullwidth-code-point": {
649
+
"version": "3.0.0",
650
+
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
651
+
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
652
+
"license": "MIT",
653
+
"engines": {
654
+
"node": ">=8"
655
+
}
656
+
},
657
+
"node_modules/isexe": {
658
+
"version": "2.0.0",
659
+
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
660
+
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
661
+
"license": "ISC"
662
+
},
663
+
"node_modules/jackspeak": {
664
+
"version": "4.1.1",
665
+
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz",
666
+
"integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==",
667
+
"license": "BlueOak-1.0.0",
668
+
"dependencies": {
669
+
"@isaacs/cliui": "^8.0.2"
670
+
},
671
+
"engines": {
672
+
"node": "20 || >=22"
673
+
},
674
+
"funding": {
675
+
"url": "https://github.com/sponsors/isaacs"
676
+
}
677
+
},
678
+
"node_modules/jsonfile": {
679
+
"version": "6.2.0",
680
+
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
681
+
"integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
682
+
"license": "MIT",
683
+
"dependencies": {
684
+
"universalify": "^2.0.0"
685
+
},
686
+
"optionalDependencies": {
687
+
"graceful-fs": "^4.1.6"
688
+
}
689
+
},
690
+
"node_modules/lru-cache": {
691
+
"version": "11.2.2",
692
+
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz",
693
+
"integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==",
694
+
"license": "ISC",
695
+
"engines": {
696
+
"node": "20 || >=22"
697
+
}
698
+
},
699
+
"node_modules/minimatch": {
700
+
"version": "10.0.3",
701
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz",
702
+
"integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==",
703
+
"license": "ISC",
704
+
"dependencies": {
705
+
"@isaacs/brace-expansion": "^5.0.0"
706
+
},
707
+
"engines": {
708
+
"node": "20 || >=22"
709
+
},
710
+
"funding": {
711
+
"url": "https://github.com/sponsors/isaacs"
712
+
}
713
+
},
714
+
"node_modules/minipass": {
715
+
"version": "7.1.2",
716
+
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
717
+
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
718
+
"license": "ISC",
719
+
"engines": {
720
+
"node": ">=16 || 14 >=14.17"
721
+
}
722
+
},
723
+
"node_modules/package-json-from-dist": {
724
+
"version": "1.0.1",
725
+
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
726
+
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
727
+
"license": "BlueOak-1.0.0"
728
+
},
729
+
"node_modules/path-key": {
730
+
"version": "3.1.1",
731
+
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
732
+
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
733
+
"license": "MIT",
734
+
"engines": {
735
+
"node": ">=8"
736
+
}
737
+
},
738
+
"node_modules/path-scurry": {
739
+
"version": "2.0.0",
740
+
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
741
+
"integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
742
+
"license": "BlueOak-1.0.0",
743
+
"dependencies": {
744
+
"lru-cache": "^11.0.0",
745
+
"minipass": "^7.1.2"
746
+
},
747
+
"engines": {
748
+
"node": "20 || >=22"
749
+
},
750
+
"funding": {
751
+
"url": "https://github.com/sponsors/isaacs"
752
+
}
753
+
},
754
+
"node_modules/shebang-command": {
755
+
"version": "2.0.0",
756
+
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
757
+
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
758
+
"license": "MIT",
759
+
"dependencies": {
760
+
"shebang-regex": "^3.0.0"
761
+
},
762
+
"engines": {
763
+
"node": ">=8"
764
+
}
765
+
},
766
+
"node_modules/shebang-regex": {
767
+
"version": "3.0.0",
768
+
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
769
+
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
770
+
"license": "MIT",
771
+
"engines": {
772
+
"node": ">=8"
773
+
}
774
+
},
775
+
"node_modules/signal-exit": {
776
+
"version": "4.1.0",
777
+
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
778
+
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
779
+
"license": "ISC",
780
+
"engines": {
781
+
"node": ">=14"
782
+
},
783
+
"funding": {
784
+
"url": "https://github.com/sponsors/isaacs"
785
+
}
786
+
},
787
+
"node_modules/string-width": {
788
+
"version": "5.1.2",
789
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
790
+
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
791
+
"license": "MIT",
792
+
"dependencies": {
793
+
"eastasianwidth": "^0.2.0",
794
+
"emoji-regex": "^9.2.2",
795
+
"strip-ansi": "^7.0.1"
796
+
},
797
+
"engines": {
798
+
"node": ">=12"
799
+
},
800
+
"funding": {
801
+
"url": "https://github.com/sponsors/sindresorhus"
802
+
}
803
+
},
804
+
"node_modules/string-width-cjs": {
805
+
"name": "string-width",
806
+
"version": "4.2.3",
807
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
808
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
809
+
"license": "MIT",
810
+
"dependencies": {
811
+
"emoji-regex": "^8.0.0",
812
+
"is-fullwidth-code-point": "^3.0.0",
813
+
"strip-ansi": "^6.0.1"
814
+
},
815
+
"engines": {
816
+
"node": ">=8"
817
+
}
818
+
},
819
+
"node_modules/string-width-cjs/node_modules/ansi-regex": {
820
+
"version": "5.0.1",
821
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
822
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
823
+
"license": "MIT",
824
+
"engines": {
825
+
"node": ">=8"
826
+
}
827
+
},
828
+
"node_modules/string-width-cjs/node_modules/emoji-regex": {
829
+
"version": "8.0.0",
830
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
831
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
832
+
"license": "MIT"
833
+
},
834
+
"node_modules/string-width-cjs/node_modules/strip-ansi": {
835
+
"version": "6.0.1",
836
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
837
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
838
+
"license": "MIT",
839
+
"dependencies": {
840
+
"ansi-regex": "^5.0.1"
841
+
},
842
+
"engines": {
843
+
"node": ">=8"
844
+
}
845
+
},
846
+
"node_modules/strip-ansi": {
847
+
"version": "7.1.2",
848
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
849
+
"integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
850
+
"license": "MIT",
851
+
"dependencies": {
852
+
"ansi-regex": "^6.0.1"
853
+
},
854
+
"engines": {
855
+
"node": ">=12"
856
+
},
857
+
"funding": {
858
+
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
859
+
}
860
+
},
861
+
"node_modules/strip-ansi-cjs": {
862
+
"name": "strip-ansi",
863
+
"version": "6.0.1",
864
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
865
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
866
+
"license": "MIT",
867
+
"dependencies": {
868
+
"ansi-regex": "^5.0.1"
869
+
},
870
+
"engines": {
871
+
"node": ">=8"
872
+
}
873
+
},
874
+
"node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
875
+
"version": "5.0.1",
876
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
877
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
878
+
"license": "MIT",
879
+
"engines": {
880
+
"node": ">=8"
881
+
}
882
+
},
883
+
"node_modules/universalify": {
884
+
"version": "2.0.1",
885
+
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
886
+
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
887
+
"license": "MIT",
888
+
"engines": {
889
+
"node": ">= 10.0.0"
890
+
}
891
+
},
892
+
"node_modules/which": {
893
+
"version": "2.0.2",
894
+
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
895
+
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
896
+
"license": "ISC",
897
+
"dependencies": {
898
+
"isexe": "^2.0.0"
899
+
},
900
+
"bin": {
901
+
"node-which": "bin/node-which"
902
+
},
903
+
"engines": {
904
+
"node": ">= 8"
905
+
}
906
+
},
907
+
"node_modules/wrap-ansi": {
908
+
"version": "8.1.0",
909
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
910
+
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
911
+
"license": "MIT",
912
+
"dependencies": {
913
+
"ansi-styles": "^6.1.0",
914
+
"string-width": "^5.0.1",
915
+
"strip-ansi": "^7.0.1"
916
+
},
917
+
"engines": {
918
+
"node": ">=12"
919
+
},
920
+
"funding": {
921
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
922
+
}
923
+
},
924
+
"node_modules/wrap-ansi-cjs": {
925
+
"name": "wrap-ansi",
926
+
"version": "7.0.0",
927
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
928
+
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
929
+
"license": "MIT",
930
+
"dependencies": {
931
+
"ansi-styles": "^4.0.0",
932
+
"string-width": "^4.1.0",
933
+
"strip-ansi": "^6.0.0"
934
+
},
935
+
"engines": {
936
+
"node": ">=10"
937
+
},
938
+
"funding": {
939
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
940
+
}
941
+
},
942
+
"node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
943
+
"version": "5.0.1",
944
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
945
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
946
+
"license": "MIT",
947
+
"engines": {
948
+
"node": ">=8"
949
+
}
950
+
},
951
+
"node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
952
+
"version": "4.3.0",
953
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
954
+
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
955
+
"license": "MIT",
956
+
"dependencies": {
957
+
"color-convert": "^2.0.1"
958
+
},
959
+
"engines": {
960
+
"node": ">=8"
961
+
},
962
+
"funding": {
963
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
964
+
}
965
+
},
966
+
"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
967
+
"version": "8.0.0",
968
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
969
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
970
+
"license": "MIT"
971
+
},
972
+
"node_modules/wrap-ansi-cjs/node_modules/string-width": {
973
+
"version": "4.2.3",
974
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
975
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
976
+
"license": "MIT",
977
+
"dependencies": {
978
+
"emoji-regex": "^8.0.0",
979
+
"is-fullwidth-code-point": "^3.0.0",
980
+
"strip-ansi": "^6.0.1"
981
+
},
982
+
"engines": {
983
+
"node": ">=8"
984
+
}
985
+
},
986
+
"node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
987
+
"version": "6.0.1",
988
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
989
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
990
+
"license": "MIT",
991
+
"dependencies": {
992
+
"ansi-regex": "^5.0.1"
993
+
},
994
+
"engines": {
995
+
"node": ">=8"
996
+
}
997
+
}
998
+
}
999
+
}
+8
package.json
+8
package.json
+11
spec/requests/root_spec.rb
+11
spec/requests/root_spec.rb
+9
spec/spec_helper.rb
+9
spec/spec_helper.rb
+10
spec/support/db.rb
+10
spec/support/db.rb
···
1
+
# frozen_string_literal: true
2
+
3
+
# Tag feature spec examples as `:db`
4
+
#
5
+
# See support/db/cleaning.rb for how the database is cleaned around these `:db` examples.
6
+
RSpec.configure do |config|
7
+
config.define_derived_metadata(type: :feature) do |metadata|
8
+
metadata[:db] = true
9
+
end
10
+
end
+42
spec/support/db/cleaning.rb
+42
spec/support/db/cleaning.rb
···
1
+
# frozen_string_literal: true
2
+
3
+
require "database_cleaner/sequel"
4
+
5
+
# Clean the databases between tests tagged as `:db`
6
+
RSpec.configure do |config|
7
+
# Returns all the configured databases across the app and its slices.
8
+
#
9
+
# Used in the before/after hooks below to ensure each database is cleaned between examples.
10
+
#
11
+
# Modify this proc (or any code below) if you only need specific databases cleaned.
12
+
all_databases = -> {
13
+
slices = [Hanami.app] + Hanami.app.slices.with_nested
14
+
15
+
slices.each_with_object([]) { |slice, dbs|
16
+
next unless slice.key?("db.rom")
17
+
18
+
dbs.concat slice["db.rom"].gateways.values.map(&:connection)
19
+
}.uniq
20
+
}
21
+
22
+
config.before :suite do
23
+
all_databases.call.each do |db|
24
+
DatabaseCleaner[:sequel, db: db].clean_with :truncation, except: ["schema_migrations"]
25
+
end
26
+
end
27
+
28
+
config.before :each, :db do |example|
29
+
strategy = example.metadata[:js] ? :truncation : :transaction
30
+
31
+
all_databases.call.each do |db|
32
+
DatabaseCleaner[:sequel, db: db].strategy = strategy
33
+
DatabaseCleaner[:sequel, db: db].start
34
+
end
35
+
end
36
+
37
+
config.after :each, :db do
38
+
all_databases.call.each do |db|
39
+
DatabaseCleaner[:sequel, db: db].clean
40
+
end
41
+
end
42
+
end
+5
spec/support/features.rb
+5
spec/support/features.rb
+8
spec/support/operations.rb
+8
spec/support/operations.rb
+13
spec/support/requests.rb
+13
spec/support/requests.rb
···
1
+
# frozen_string_literal: true
2
+
3
+
require "rack/test"
4
+
5
+
RSpec.shared_context "Rack::Test" do
6
+
# Define the app for Rack::Test requests
7
+
let(:app) { Hanami.app }
8
+
end
9
+
10
+
RSpec.configure do |config|
11
+
config.include Rack::Test::Methods, type: :request
12
+
config.include_context "Rack::Test", type: :request
13
+
end
+61
spec/support/rspec.rb
+61
spec/support/rspec.rb
···
1
+
# frozen_string_literal: true
2
+
3
+
RSpec.configure do |config|
4
+
# Use the recommended non-monkey patched syntax.
5
+
config.disable_monkey_patching!
6
+
7
+
# Use and configure rspec-expectations.
8
+
config.expect_with :rspec do |expectations|
9
+
# This option will default to `true` in RSpec 4.
10
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
11
+
end
12
+
13
+
# Use and configure rspec-mocks.
14
+
config.mock_with :rspec do |mocks|
15
+
# Prevents you from mocking or stubbing a method that does not exist on a
16
+
# real object.
17
+
mocks.verify_partial_doubles = true
18
+
end
19
+
20
+
# This option will default to `:apply_to_host_groups` in RSpec 4.
21
+
config.shared_context_metadata_behavior = :apply_to_host_groups
22
+
23
+
# Limit a spec run to individual examples or groups you care about by tagging
24
+
# them with `:focus` metadata. When nothing is tagged with `:focus`, all
25
+
# examples get run.
26
+
#
27
+
# RSpec also provides aliases for `it`, `describe`, and `context` that include
28
+
# `:focus` metadata: `fit`, `fdescribe` and `fcontext`, respectively.
29
+
config.filter_run_when_matching :focus
30
+
31
+
# Allow RSpec to persist some state between runs in order to support the
32
+
# `--only-failures` and `--next-failure` CLI options. We recommend you
33
+
# configure your source control system to ignore this file.
34
+
config.example_status_persistence_file_path = "spec/examples.txt"
35
+
36
+
# Uncomment this to enable warnings. This is recommended, but in some cases
37
+
# may be too noisy due to issues in dependencies.
38
+
# config.warnings = true
39
+
40
+
# Show more verbose output when running an individual spec file.
41
+
if config.files_to_run.one?
42
+
config.default_formatter = "doc"
43
+
end
44
+
45
+
# Print the 10 slowest examples and example groups at the end of the spec run,
46
+
# to help surface which specs are running particularly slow.
47
+
config.profile_examples = 10
48
+
49
+
# Run specs in random order to surface order dependencies. If you find an
50
+
# order dependency and want to debug it, you can fix the order by providing
51
+
# the seed, which is printed after each run:
52
+
#
53
+
# --seed 1234
54
+
config.order = :random
55
+
56
+
# Seed global randomization in this process using the `--seed` CLI option.
57
+
# This allows you to use `--seed` to deterministically reproduce test failures
58
+
# related to randomization by passing the same `--seed` value as the one that
59
+
# triggered the failure.
60
+
Kernel.srand config.seed
61
+
end