+8
.idea/.gitignore
+8
.idea/.gitignore
+12
.idea/clippr.iml
+12
.idea/clippr.iml
···
1
+
<?xml version="1.0" encoding="UTF-8"?>
2
+
<module type="WEB_MODULE" version="4">
3
+
<component name="NewModuleRootManager">
4
+
<content url="file://$MODULE_DIR$">
5
+
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
6
+
<excludeFolder url="file://$MODULE_DIR$/temp" />
7
+
<excludeFolder url="file://$MODULE_DIR$/tmp" />
8
+
</content>
9
+
<orderEntry type="inheritedJdk" />
10
+
<orderEntry type="sourceFolder" forTests="false" />
11
+
</component>
12
+
</module>
+8
.idea/modules.xml
+8
.idea/modules.xml
+6
.idea/vcs.xml
+6
.idea/vcs.xml
+661
LICENSE
+661
LICENSE
···
1
+
GNU AFFERO GENERAL PUBLIC LICENSE
2
+
Version 3, 19 November 2007
3
+
4
+
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
5
+
Everyone is permitted to copy and distribute verbatim copies
6
+
of this license document, but changing it is not allowed.
7
+
8
+
Preamble
9
+
10
+
The GNU Affero General Public License is a free, copyleft license for
11
+
software and other kinds of works, specifically designed to ensure
12
+
cooperation with the community in the case of network server software.
13
+
14
+
The licenses for most software and other practical works are designed
15
+
to take away your freedom to share and change the works. By contrast,
16
+
our General Public Licenses are intended to guarantee your freedom to
17
+
share and change all versions of a program--to make sure it remains free
18
+
software for all its users.
19
+
20
+
When we speak of free software, we are referring to freedom, not
21
+
price. Our General Public Licenses are designed to make sure that you
22
+
have the freedom to distribute copies of free software (and charge for
23
+
them if you wish), that you receive source code or can get it if you
24
+
want it, that you can change the software or use pieces of it in new
25
+
free programs, and that you know you can do these things.
26
+
27
+
Developers that use our General Public Licenses protect your rights
28
+
with two steps: (1) assert copyright on the software, and (2) offer
29
+
you this License which gives you legal permission to copy, distribute
30
+
and/or modify the software.
31
+
32
+
A secondary benefit of defending all users' freedom is that
33
+
improvements made in alternate versions of the program, if they
34
+
receive widespread use, become available for other developers to
35
+
incorporate. Many developers of free software are heartened and
36
+
encouraged by the resulting cooperation. However, in the case of
37
+
software used on network servers, this result may fail to come about.
38
+
The GNU General Public License permits making a modified version and
39
+
letting the public access it on a server without ever releasing its
40
+
source code to the public.
41
+
42
+
The GNU Affero General Public License is designed specifically to
43
+
ensure that, in such cases, the modified source code becomes available
44
+
to the community. It requires the operator of a network server to
45
+
provide the source code of the modified version running there to the
46
+
users of that server. Therefore, public use of a modified version, on
47
+
a publicly accessible server, gives the public access to the source
48
+
code of the modified version.
49
+
50
+
An older license, called the Affero General Public License and
51
+
published by Affero, was designed to accomplish similar goals. This is
52
+
a different license, not a version of the Affero GPL, but Affero has
53
+
released a new version of the Affero GPL which permits relicensing under
54
+
this license.
55
+
56
+
The precise terms and conditions for copying, distribution and
57
+
modification follow.
58
+
59
+
TERMS AND CONDITIONS
60
+
61
+
0. Definitions.
62
+
63
+
"This License" refers to version 3 of the GNU Affero General Public License.
64
+
65
+
"Copyright" also means copyright-like laws that apply to other kinds of
66
+
works, such as semiconductor masks.
67
+
68
+
"The Program" refers to any copyrightable work licensed under this
69
+
License. Each licensee is addressed as "you". "Licensees" and
70
+
"recipients" may be individuals or organizations.
71
+
72
+
To "modify" a work means to copy from or adapt all or part of the work
73
+
in a fashion requiring copyright permission, other than the making of an
74
+
exact copy. The resulting work is called a "modified version" of the
75
+
earlier work or a work "based on" the earlier work.
76
+
77
+
A "covered work" means either the unmodified Program or a work based
78
+
on the Program.
79
+
80
+
To "propagate" a work means to do anything with it that, without
81
+
permission, would make you directly or secondarily liable for
82
+
infringement under applicable copyright law, except executing it on a
83
+
computer or modifying a private copy. Propagation includes copying,
84
+
distribution (with or without modification), making available to the
85
+
public, and in some countries other activities as well.
86
+
87
+
To "convey" a work means any kind of propagation that enables other
88
+
parties to make or receive copies. Mere interaction with a user through
89
+
a computer network, with no transfer of a copy, is not conveying.
90
+
91
+
An interactive user interface displays "Appropriate Legal Notices"
92
+
to the extent that it includes a convenient and prominently visible
93
+
feature that (1) displays an appropriate copyright notice, and (2)
94
+
tells the user that there is no warranty for the work (except to the
95
+
extent that warranties are provided), that licensees may convey the
96
+
work under this License, and how to view a copy of this License. If
97
+
the interface presents a list of user commands or options, such as a
98
+
menu, a prominent item in the list meets this criterion.
99
+
100
+
1. Source Code.
101
+
102
+
The "source code" for a work means the preferred form of the work
103
+
for making modifications to it. "Object code" means any non-source
104
+
form of a work.
105
+
106
+
A "Standard Interface" means an interface that either is an official
107
+
standard defined by a recognized standards body, or, in the case of
108
+
interfaces specified for a particular programming language, one that
109
+
is widely used among developers working in that language.
110
+
111
+
The "System Libraries" of an executable work include anything, other
112
+
than the work as a whole, that (a) is included in the normal form of
113
+
packaging a Major Component, but which is not part of that Major
114
+
Component, and (b) serves only to enable use of the work with that
115
+
Major Component, or to implement a Standard Interface for which an
116
+
implementation is available to the public in source code form. A
117
+
"Major Component", in this context, means a major essential component
118
+
(kernel, window system, and so on) of the specific operating system
119
+
(if any) on which the executable work runs, or a compiler used to
120
+
produce the work, or an object code interpreter used to run it.
121
+
122
+
The "Corresponding Source" for a work in object code form means all
123
+
the source code needed to generate, install, and (for an executable
124
+
work) run the object code and to modify the work, including scripts to
125
+
control those activities. However, it does not include the work's
126
+
System Libraries, or general-purpose tools or generally available free
127
+
programs which are used unmodified in performing those activities but
128
+
which are not part of the work. For example, Corresponding Source
129
+
includes interface definition files associated with source files for
130
+
the work, and the source code for shared libraries and dynamically
131
+
linked subprograms that the work is specifically designed to require,
132
+
such as by intimate data communication or control flow between those
133
+
subprograms and other parts of the work.
134
+
135
+
The Corresponding Source need not include anything that users
136
+
can regenerate automatically from other parts of the Corresponding
137
+
Source.
138
+
139
+
The Corresponding Source for a work in source code form is that
140
+
same work.
141
+
142
+
2. Basic Permissions.
143
+
144
+
All rights granted under this License are granted for the term of
145
+
copyright on the Program, and are irrevocable provided the stated
146
+
conditions are met. This License explicitly affirms your unlimited
147
+
permission to run the unmodified Program. The output from running a
148
+
covered work is covered by this License only if the output, given its
149
+
content, constitutes a covered work. This License acknowledges your
150
+
rights of fair use or other equivalent, as provided by copyright law.
151
+
152
+
You may make, run and propagate covered works that you do not
153
+
convey, without conditions so long as your license otherwise remains
154
+
in force. You may convey covered works to others for the sole purpose
155
+
of having them make modifications exclusively for you, or provide you
156
+
with facilities for running those works, provided that you comply with
157
+
the terms of this License in conveying all material for which you do
158
+
not control copyright. Those thus making or running the covered works
159
+
for you must do so exclusively on your behalf, under your direction
160
+
and control, on terms that prohibit them from making any copies of
161
+
your copyrighted material outside their relationship with you.
162
+
163
+
Conveying under any other circumstances is permitted solely under
164
+
the conditions stated below. Sublicensing is not allowed; section 10
165
+
makes it unnecessary.
166
+
167
+
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
168
+
169
+
No covered work shall be deemed part of an effective technological
170
+
measure under any applicable law fulfilling obligations under article
171
+
11 of the WIPO copyright treaty adopted on 20 December 1996, or
172
+
similar laws prohibiting or restricting circumvention of such
173
+
measures.
174
+
175
+
When you convey a covered work, you waive any legal power to forbid
176
+
circumvention of technological measures to the extent such circumvention
177
+
is effected by exercising rights under this License with respect to
178
+
the covered work, and you disclaim any intention to limit operation or
179
+
modification of the work as a means of enforcing, against the work's
180
+
users, your or third parties' legal rights to forbid circumvention of
181
+
technological measures.
182
+
183
+
4. Conveying Verbatim Copies.
184
+
185
+
You may convey verbatim copies of the Program's source code as you
186
+
receive it, in any medium, provided that you conspicuously and
187
+
appropriately publish on each copy an appropriate copyright notice;
188
+
keep intact all notices stating that this License and any
189
+
non-permissive terms added in accord with section 7 apply to the code;
190
+
keep intact all notices of the absence of any warranty; and give all
191
+
recipients a copy of this License along with the Program.
192
+
193
+
You may charge any price or no price for each copy that you convey,
194
+
and you may offer support or warranty protection for a fee.
195
+
196
+
5. Conveying Modified Source Versions.
197
+
198
+
You may convey a work based on the Program, or the modifications to
199
+
produce it from the Program, in the form of source code under the
200
+
terms of section 4, provided that you also meet all of these conditions:
201
+
202
+
a) The work must carry prominent notices stating that you modified
203
+
it, and giving a relevant date.
204
+
205
+
b) The work must carry prominent notices stating that it is
206
+
released under this License and any conditions added under section
207
+
7. This requirement modifies the requirement in section 4 to
208
+
"keep intact all notices".
209
+
210
+
c) You must license the entire work, as a whole, under this
211
+
License to anyone who comes into possession of a copy. This
212
+
License will therefore apply, along with any applicable section 7
213
+
additional terms, to the whole of the work, and all its parts,
214
+
regardless of how they are packaged. This License gives no
215
+
permission to license the work in any other way, but it does not
216
+
invalidate such permission if you have separately received it.
217
+
218
+
d) If the work has interactive user interfaces, each must display
219
+
Appropriate Legal Notices; however, if the Program has interactive
220
+
interfaces that do not display Appropriate Legal Notices, your
221
+
work need not make them do so.
222
+
223
+
A compilation of a covered work with other separate and independent
224
+
works, which are not by their nature extensions of the covered work,
225
+
and which are not combined with it such as to form a larger program,
226
+
in or on a volume of a storage or distribution medium, is called an
227
+
"aggregate" if the compilation and its resulting copyright are not
228
+
used to limit the access or legal rights of the compilation's users
229
+
beyond what the individual works permit. Inclusion of a covered work
230
+
in an aggregate does not cause this License to apply to the other
231
+
parts of the aggregate.
232
+
233
+
6. Conveying Non-Source Forms.
234
+
235
+
You may convey a covered work in object code form under the terms
236
+
of sections 4 and 5, provided that you also convey the
237
+
machine-readable Corresponding Source under the terms of this License,
238
+
in one of these ways:
239
+
240
+
a) Convey the object code in, or embodied in, a physical product
241
+
(including a physical distribution medium), accompanied by the
242
+
Corresponding Source fixed on a durable physical medium
243
+
customarily used for software interchange.
244
+
245
+
b) Convey the object code in, or embodied in, a physical product
246
+
(including a physical distribution medium), accompanied by a
247
+
written offer, valid for at least three years and valid for as
248
+
long as you offer spare parts or customer support for that product
249
+
model, to give anyone who possesses the object code either (1) a
250
+
copy of the Corresponding Source for all the software in the
251
+
product that is covered by this License, on a durable physical
252
+
medium customarily used for software interchange, for a price no
253
+
more than your reasonable cost of physically performing this
254
+
conveying of source, or (2) access to copy the
255
+
Corresponding Source from a network server at no charge.
256
+
257
+
c) Convey individual copies of the object code with a copy of the
258
+
written offer to provide the Corresponding Source. This
259
+
alternative is allowed only occasionally and noncommercially, and
260
+
only if you received the object code with such an offer, in accord
261
+
with subsection 6b.
262
+
263
+
d) Convey the object code by offering access from a designated
264
+
place (gratis or for a charge), and offer equivalent access to the
265
+
Corresponding Source in the same way through the same place at no
266
+
further charge. You need not require recipients to copy the
267
+
Corresponding Source along with the object code. If the place to
268
+
copy the object code is a network server, the Corresponding Source
269
+
may be on a different server (operated by you or a third party)
270
+
that supports equivalent copying facilities, provided you maintain
271
+
clear directions next to the object code saying where to find the
272
+
Corresponding Source. Regardless of what server hosts the
273
+
Corresponding Source, you remain obligated to ensure that it is
274
+
available for as long as needed to satisfy these requirements.
275
+
276
+
e) Convey the object code using peer-to-peer transmission, provided
277
+
you inform other peers where the object code and Corresponding
278
+
Source of the work are being offered to the general public at no
279
+
charge under subsection 6d.
280
+
281
+
A separable portion of the object code, whose source code is excluded
282
+
from the Corresponding Source as a System Library, need not be
283
+
included in conveying the object code work.
284
+
285
+
A "User Product" is either (1) a "consumer product", which means any
286
+
tangible personal property which is normally used for personal, family,
287
+
or household purposes, or (2) anything designed or sold for incorporation
288
+
into a dwelling. In determining whether a product is a consumer product,
289
+
doubtful cases shall be resolved in favor of coverage. For a particular
290
+
product received by a particular user, "normally used" refers to a
291
+
typical or common use of that class of product, regardless of the status
292
+
of the particular user or of the way in which the particular user
293
+
actually uses, or expects or is expected to use, the product. A product
294
+
is a consumer product regardless of whether the product has substantial
295
+
commercial, industrial or non-consumer uses, unless such uses represent
296
+
the only significant mode of use of the product.
297
+
298
+
"Installation Information" for a User Product means any methods,
299
+
procedures, authorization keys, or other information required to install
300
+
and execute modified versions of a covered work in that User Product from
301
+
a modified version of its Corresponding Source. The information must
302
+
suffice to ensure that the continued functioning of the modified object
303
+
code is in no case prevented or interfered with solely because
304
+
modification has been made.
305
+
306
+
If you convey an object code work under this section in, or with, or
307
+
specifically for use in, a User Product, and the conveying occurs as
308
+
part of a transaction in which the right of possession and use of the
309
+
User Product is transferred to the recipient in perpetuity or for a
310
+
fixed term (regardless of how the transaction is characterized), the
311
+
Corresponding Source conveyed under this section must be accompanied
312
+
by the Installation Information. But this requirement does not apply
313
+
if neither you nor any third party retains the ability to install
314
+
modified object code on the User Product (for example, the work has
315
+
been installed in ROM).
316
+
317
+
The requirement to provide Installation Information does not include a
318
+
requirement to continue to provide support service, warranty, or updates
319
+
for a work that has been modified or installed by the recipient, or for
320
+
the User Product in which it has been modified or installed. Access to a
321
+
network may be denied when the modification itself materially and
322
+
adversely affects the operation of the network or violates the rules and
323
+
protocols for communication across the network.
324
+
325
+
Corresponding Source conveyed, and Installation Information provided,
326
+
in accord with this section must be in a format that is publicly
327
+
documented (and with an implementation available to the public in
328
+
source code form), and must require no special password or key for
329
+
unpacking, reading or copying.
330
+
331
+
7. Additional Terms.
332
+
333
+
"Additional permissions" are terms that supplement the terms of this
334
+
License by making exceptions from one or more of its conditions.
335
+
Additional permissions that are applicable to the entire Program shall
336
+
be treated as though they were included in this License, to the extent
337
+
that they are valid under applicable law. If additional permissions
338
+
apply only to part of the Program, that part may be used separately
339
+
under those permissions, but the entire Program remains governed by
340
+
this License without regard to the additional permissions.
341
+
342
+
When you convey a copy of a covered work, you may at your option
343
+
remove any additional permissions from that copy, or from any part of
344
+
it. (Additional permissions may be written to require their own
345
+
removal in certain cases when you modify the work.) You may place
346
+
additional permissions on material, added by you to a covered work,
347
+
for which you have or can give appropriate copyright permission.
348
+
349
+
Notwithstanding any other provision of this License, for material you
350
+
add to a covered work, you may (if authorized by the copyright holders of
351
+
that material) supplement the terms of this License with terms:
352
+
353
+
a) Disclaiming warranty or limiting liability differently from the
354
+
terms of sections 15 and 16 of this License; or
355
+
356
+
b) Requiring preservation of specified reasonable legal notices or
357
+
author attributions in that material or in the Appropriate Legal
358
+
Notices displayed by works containing it; or
359
+
360
+
c) Prohibiting misrepresentation of the origin of that material, or
361
+
requiring that modified versions of such material be marked in
362
+
reasonable ways as different from the original version; or
363
+
364
+
d) Limiting the use for publicity purposes of names of licensors or
365
+
authors of the material; or
366
+
367
+
e) Declining to grant rights under trademark law for use of some
368
+
trade names, trademarks, or service marks; or
369
+
370
+
f) Requiring indemnification of licensors and authors of that
371
+
material by anyone who conveys the material (or modified versions of
372
+
it) with contractual assumptions of liability to the recipient, for
373
+
any liability that these contractual assumptions directly impose on
374
+
those licensors and authors.
375
+
376
+
All other non-permissive additional terms are considered "further
377
+
restrictions" within the meaning of section 10. If the Program as you
378
+
received it, or any part of it, contains a notice stating that it is
379
+
governed by this License along with a term that is a further
380
+
restriction, you may remove that term. If a license document contains
381
+
a further restriction but permits relicensing or conveying under this
382
+
License, you may add to a covered work material governed by the terms
383
+
of that license document, provided that the further restriction does
384
+
not survive such relicensing or conveying.
385
+
386
+
If you add terms to a covered work in accord with this section, you
387
+
must place, in the relevant source files, a statement of the
388
+
additional terms that apply to those files, or a notice indicating
389
+
where to find the applicable terms.
390
+
391
+
Additional terms, permissive or non-permissive, may be stated in the
392
+
form of a separately written license, or stated as exceptions;
393
+
the above requirements apply either way.
394
+
395
+
8. Termination.
396
+
397
+
You may not propagate or modify a covered work except as expressly
398
+
provided under this License. Any attempt otherwise to propagate or
399
+
modify it is void, and will automatically terminate your rights under
400
+
this License (including any patent licenses granted under the third
401
+
paragraph of section 11).
402
+
403
+
However, if you cease all violation of this License, then your
404
+
license from a particular copyright holder is reinstated (a)
405
+
provisionally, unless and until the copyright holder explicitly and
406
+
finally terminates your license, and (b) permanently, if the copyright
407
+
holder fails to notify you of the violation by some reasonable means
408
+
prior to 60 days after the cessation.
409
+
410
+
Moreover, your license from a particular copyright holder is
411
+
reinstated permanently if the copyright holder notifies you of the
412
+
violation by some reasonable means, this is the first time you have
413
+
received notice of violation of this License (for any work) from that
414
+
copyright holder, and you cure the violation prior to 30 days after
415
+
your receipt of the notice.
416
+
417
+
Termination of your rights under this section does not terminate the
418
+
licenses of parties who have received copies or rights from you under
419
+
this License. If your rights have been terminated and not permanently
420
+
reinstated, you do not qualify to receive new licenses for the same
421
+
material under section 10.
422
+
423
+
9. Acceptance Not Required for Having Copies.
424
+
425
+
You are not required to accept this License in order to receive or
426
+
run a copy of the Program. Ancillary propagation of a covered work
427
+
occurring solely as a consequence of using peer-to-peer transmission
428
+
to receive a copy likewise does not require acceptance. However,
429
+
nothing other than this License grants you permission to propagate or
430
+
modify any covered work. These actions infringe copyright if you do
431
+
not accept this License. Therefore, by modifying or propagating a
432
+
covered work, you indicate your acceptance of this License to do so.
433
+
434
+
10. Automatic Licensing of Downstream Recipients.
435
+
436
+
Each time you convey a covered work, the recipient automatically
437
+
receives a license from the original licensors, to run, modify and
438
+
propagate that work, subject to this License. You are not responsible
439
+
for enforcing compliance by third parties with this License.
440
+
441
+
An "entity transaction" is a transaction transferring control of an
442
+
organization, or substantially all assets of one, or subdividing an
443
+
organization, or merging organizations. If propagation of a covered
444
+
work results from an entity transaction, each party to that
445
+
transaction who receives a copy of the work also receives whatever
446
+
licenses to the work the party's predecessor in interest had or could
447
+
give under the previous paragraph, plus a right to possession of the
448
+
Corresponding Source of the work from the predecessor in interest, if
449
+
the predecessor has it or can get it with reasonable efforts.
450
+
451
+
You may not impose any further restrictions on the exercise of the
452
+
rights granted or affirmed under this License. For example, you may
453
+
not impose a license fee, royalty, or other charge for exercise of
454
+
rights granted under this License, and you may not initiate litigation
455
+
(including a cross-claim or counterclaim in a lawsuit) alleging that
456
+
any patent claim is infringed by making, using, selling, offering for
457
+
sale, or importing the Program or any portion of it.
458
+
459
+
11. Patents.
460
+
461
+
A "contributor" is a copyright holder who authorizes use under this
462
+
License of the Program or a work on which the Program is based. The
463
+
work thus licensed is called the contributor's "contributor version".
464
+
465
+
A contributor's "essential patent claims" are all patent claims
466
+
owned or controlled by the contributor, whether already acquired or
467
+
hereafter acquired, that would be infringed by some manner, permitted
468
+
by this License, of making, using, or selling its contributor version,
469
+
but do not include claims that would be infringed only as a
470
+
consequence of further modification of the contributor version. For
471
+
purposes of this definition, "control" includes the right to grant
472
+
patent sublicenses in a manner consistent with the requirements of
473
+
this License.
474
+
475
+
Each contributor grants you a non-exclusive, worldwide, royalty-free
476
+
patent license under the contributor's essential patent claims, to
477
+
make, use, sell, offer for sale, import and otherwise run, modify and
478
+
propagate the contents of its contributor version.
479
+
480
+
In the following three paragraphs, a "patent license" is any express
481
+
agreement or commitment, however denominated, not to enforce a patent
482
+
(such as an express permission to practice a patent or covenant not to
483
+
sue for patent infringement). To "grant" such a patent license to a
484
+
party means to make such an agreement or commitment not to enforce a
485
+
patent against the party.
486
+
487
+
If you convey a covered work, knowingly relying on a patent license,
488
+
and the Corresponding Source of the work is not available for anyone
489
+
to copy, free of charge and under the terms of this License, through a
490
+
publicly available network server or other readily accessible means,
491
+
then you must either (1) cause the Corresponding Source to be so
492
+
available, or (2) arrange to deprive yourself of the benefit of the
493
+
patent license for this particular work, or (3) arrange, in a manner
494
+
consistent with the requirements of this License, to extend the patent
495
+
license to downstream recipients. "Knowingly relying" means you have
496
+
actual knowledge that, but for the patent license, your conveying the
497
+
covered work in a country, or your recipient's use of the covered work
498
+
in a country, would infringe one or more identifiable patents in that
499
+
country that you have reason to believe are valid.
500
+
501
+
If, pursuant to or in connection with a single transaction or
502
+
arrangement, you convey, or propagate by procuring conveyance of, a
503
+
covered work, and grant a patent license to some of the parties
504
+
receiving the covered work authorizing them to use, propagate, modify
505
+
or convey a specific copy of the covered work, then the patent license
506
+
you grant is automatically extended to all recipients of the covered
507
+
work and works based on it.
508
+
509
+
A patent license is "discriminatory" if it does not include within
510
+
the scope of its coverage, prohibits the exercise of, or is
511
+
conditioned on the non-exercise of one or more of the rights that are
512
+
specifically granted under this License. You may not convey a covered
513
+
work if you are a party to an arrangement with a third party that is
514
+
in the business of distributing software, under which you make payment
515
+
to the third party based on the extent of your activity of conveying
516
+
the work, and under which the third party grants, to any of the
517
+
parties who would receive the covered work from you, a discriminatory
518
+
patent license (a) in connection with copies of the covered work
519
+
conveyed by you (or copies made from those copies), or (b) primarily
520
+
for and in connection with specific products or compilations that
521
+
contain the covered work, unless you entered into that arrangement,
522
+
or that patent license was granted, prior to 28 March 2007.
523
+
524
+
Nothing in this License shall be construed as excluding or limiting
525
+
any implied license or other defenses to infringement that may
526
+
otherwise be available to you under applicable patent law.
527
+
528
+
12. No Surrender of Others' Freedom.
529
+
530
+
If conditions are imposed on you (whether by court order, agreement or
531
+
otherwise) that contradict the conditions of this License, they do not
532
+
excuse you from the conditions of this License. If you cannot convey a
533
+
covered work so as to satisfy simultaneously your obligations under this
534
+
License and any other pertinent obligations, then as a consequence you may
535
+
not convey it at all. For example, if you agree to terms that obligate you
536
+
to collect a royalty for further conveying from those to whom you convey
537
+
the Program, the only way you could satisfy both those terms and this
538
+
License would be to refrain entirely from conveying the Program.
539
+
540
+
13. Remote Network Interaction; Use with the GNU General Public License.
541
+
542
+
Notwithstanding any other provision of this License, if you modify the
543
+
Program, your modified version must prominently offer all users
544
+
interacting with it remotely through a computer network (if your version
545
+
supports such interaction) an opportunity to receive the Corresponding
546
+
Source of your version by providing access to the Corresponding Source
547
+
from a network server at no charge, through some standard or customary
548
+
means of facilitating copying of software. This Corresponding Source
549
+
shall include the Corresponding Source for any work covered by version 3
550
+
of the GNU General Public License that is incorporated pursuant to the
551
+
following paragraph.
552
+
553
+
Notwithstanding any other provision of this License, you have
554
+
permission to link or combine any covered work with a work licensed
555
+
under version 3 of the GNU General Public License into a single
556
+
combined work, and to convey the resulting work. The terms of this
557
+
License will continue to apply to the part which is the covered work,
558
+
but the work with which it is combined will remain governed by version
559
+
3 of the GNU General Public License.
560
+
561
+
14. Revised Versions of this License.
562
+
563
+
The Free Software Foundation may publish revised and/or new versions of
564
+
the GNU Affero General Public License from time to time. Such new versions
565
+
will be similar in spirit to the present version, but may differ in detail to
566
+
address new problems or concerns.
567
+
568
+
Each version is given a distinguishing version number. If the
569
+
Program specifies that a certain numbered version of the GNU Affero General
570
+
Public License "or any later version" applies to it, you have the
571
+
option of following the terms and conditions either of that numbered
572
+
version or of any later version published by the Free Software
573
+
Foundation. If the Program does not specify a version number of the
574
+
GNU Affero General Public License, you may choose any version ever published
575
+
by the Free Software Foundation.
576
+
577
+
If the Program specifies that a proxy can decide which future
578
+
versions of the GNU Affero General Public License can be used, that proxy's
579
+
public statement of acceptance of a version permanently authorizes you
580
+
to choose that version for the Program.
581
+
582
+
Later license versions may give you additional or different
583
+
permissions. However, no additional obligations are imposed on any
584
+
author or copyright holder as a result of your choosing to follow a
585
+
later version.
586
+
587
+
15. Disclaimer of Warranty.
588
+
589
+
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
590
+
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
591
+
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
592
+
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
593
+
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
594
+
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
595
+
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
596
+
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
597
+
598
+
16. Limitation of Liability.
599
+
600
+
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
601
+
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
602
+
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
603
+
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
604
+
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
605
+
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
606
+
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
607
+
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
608
+
SUCH DAMAGES.
609
+
610
+
17. Interpretation of Sections 15 and 16.
611
+
612
+
If the disclaimer of warranty and limitation of liability provided
613
+
above cannot be given local legal effect according to their terms,
614
+
reviewing courts shall apply local law that most closely approximates
615
+
an absolute waiver of all civil liability in connection with the
616
+
Program, unless a warranty or assumption of liability accompanies a
617
+
copy of the Program in return for a fee.
618
+
619
+
END OF TERMS AND CONDITIONS
620
+
621
+
How to Apply These Terms to Your New Programs
622
+
623
+
If you develop a new program, and you want it to be of the greatest
624
+
possible use to the public, the best way to achieve this is to make it
625
+
free software which everyone can redistribute and change under these terms.
626
+
627
+
To do so, attach the following notices to the program. It is safest
628
+
to attach them to the start of each source file to most effectively
629
+
state the exclusion of warranty; and each file should have at least
630
+
the "copyright" line and a pointer to where the full notice is found.
631
+
632
+
<one line to give the program's name and a brief idea of what it does.>
633
+
Copyright (C) <year> <name of author>
634
+
635
+
This program is free software: you can redistribute it and/or modify
636
+
it under the terms of the GNU Affero General Public License as published by
637
+
the Free Software Foundation, either version 3 of the License, or
638
+
(at your option) any later version.
639
+
640
+
This program is distributed in the hope that it will be useful,
641
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
642
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
643
+
GNU Affero General Public License for more details.
644
+
645
+
You should have received a copy of the GNU Affero General Public License
646
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
647
+
648
+
Also add information on how to contact you by electronic and paper mail.
649
+
650
+
If your software can interact with users remotely through a computer
651
+
network, you should also make sure that it provides a way for users to
652
+
get its source. For example, if your program is a web application, its
653
+
interface could display a "Source" link that leads users to an archive
654
+
of the code. There are many ways you could offer source, and different
655
+
solutions will be better for different programs; see section 13 for the
656
+
specific requirements.
657
+
658
+
You should also get your employer (if you work as a programmer) or school,
659
+
if any, to sign a "copyright disclaimer" for the program, if necessary.
660
+
For more information on this, and how to apply and follow the GNU AGPL, see
661
+
<https://www.gnu.org/licenses/>.
+3
backend/.gitignore
+3
backend/.gitignore
+2
backend/README.md
+2
backend/README.md
+30
backend/analysis_options.yaml
+30
backend/analysis_options.yaml
···
1
+
# This file configures the static analysis results for your project (errors,
2
+
# warnings, and lints).
3
+
#
4
+
# This enables the 'recommended' set of lints from `package:lints`.
5
+
# This set helps identify many issues that may lead to problems when running
6
+
# or consuming Dart code, and enforces writing Dart using a single, idiomatic
7
+
# style and format.
8
+
#
9
+
# If you want a smaller set of lints you can change this to specify
10
+
# 'package:lints/core.yaml'. These are just the most critical lints
11
+
# (the recommended set includes the core lints).
12
+
# The core lints are also what is used by pub.dev for scoring packages.
13
+
14
+
include: package:lints/recommended.yaml
15
+
16
+
# Uncomment the following section to specify additional rules.
17
+
18
+
# linter:
19
+
# rules:
20
+
# - camel_case_types
21
+
22
+
# analyzer:
23
+
# exclude:
24
+
# - path/to/excluded/files/**
25
+
26
+
# For more information about the core and recommended set of lints, see
27
+
# https://dart.dev/go/core-lints
28
+
29
+
# For additional information about configuring this file, see
30
+
# https://dart.dev/guides/language/analysis-options
+5
backend/bin/backend.dart
+5
backend/bin/backend.dart
+397
backend/pubspec.lock
+397
backend/pubspec.lock
···
1
+
# Generated by pub
2
+
# See https://dart.dev/tools/pub/glossary#lockfile
3
+
packages:
4
+
_fe_analyzer_shared:
5
+
dependency: transitive
6
+
description:
7
+
name: _fe_analyzer_shared
8
+
sha256: e55636ed79578b9abca5fecf9437947798f5ef7456308b5cb85720b793eac92f
9
+
url: "https://pub.dev"
10
+
source: hosted
11
+
version: "82.0.0"
12
+
analyzer:
13
+
dependency: transitive
14
+
description:
15
+
name: analyzer
16
+
sha256: "904ae5bb474d32c38fb9482e2d925d5454cda04ddd0e55d2e6826bc72f6ba8c0"
17
+
url: "https://pub.dev"
18
+
source: hosted
19
+
version: "7.4.5"
20
+
args:
21
+
dependency: transitive
22
+
description:
23
+
name: args
24
+
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
25
+
url: "https://pub.dev"
26
+
source: hosted
27
+
version: "2.7.0"
28
+
async:
29
+
dependency: transitive
30
+
description:
31
+
name: async
32
+
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
33
+
url: "https://pub.dev"
34
+
source: hosted
35
+
version: "2.13.0"
36
+
boolean_selector:
37
+
dependency: transitive
38
+
description:
39
+
name: boolean_selector
40
+
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
41
+
url: "https://pub.dev"
42
+
source: hosted
43
+
version: "2.1.2"
44
+
cli_config:
45
+
dependency: transitive
46
+
description:
47
+
name: cli_config
48
+
sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec
49
+
url: "https://pub.dev"
50
+
source: hosted
51
+
version: "0.2.0"
52
+
collection:
53
+
dependency: transitive
54
+
description:
55
+
name: collection
56
+
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
57
+
url: "https://pub.dev"
58
+
source: hosted
59
+
version: "1.19.1"
60
+
convert:
61
+
dependency: transitive
62
+
description:
63
+
name: convert
64
+
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
65
+
url: "https://pub.dev"
66
+
source: hosted
67
+
version: "3.1.2"
68
+
coverage:
69
+
dependency: transitive
70
+
description:
71
+
name: coverage
72
+
sha256: aa07dbe5f2294c827b7edb9a87bba44a9c15a3cc81bc8da2ca19b37322d30080
73
+
url: "https://pub.dev"
74
+
source: hosted
75
+
version: "1.14.1"
76
+
crypto:
77
+
dependency: transitive
78
+
description:
79
+
name: crypto
80
+
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
81
+
url: "https://pub.dev"
82
+
source: hosted
83
+
version: "3.0.6"
84
+
file:
85
+
dependency: transitive
86
+
description:
87
+
name: file
88
+
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
89
+
url: "https://pub.dev"
90
+
source: hosted
91
+
version: "7.0.1"
92
+
frontend_server_client:
93
+
dependency: transitive
94
+
description:
95
+
name: frontend_server_client
96
+
sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
97
+
url: "https://pub.dev"
98
+
source: hosted
99
+
version: "4.0.0"
100
+
glob:
101
+
dependency: transitive
102
+
description:
103
+
name: glob
104
+
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
105
+
url: "https://pub.dev"
106
+
source: hosted
107
+
version: "2.1.3"
108
+
http_multi_server:
109
+
dependency: transitive
110
+
description:
111
+
name: http_multi_server
112
+
sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8
113
+
url: "https://pub.dev"
114
+
source: hosted
115
+
version: "3.2.2"
116
+
http_parser:
117
+
dependency: transitive
118
+
description:
119
+
name: http_parser
120
+
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
121
+
url: "https://pub.dev"
122
+
source: hosted
123
+
version: "4.1.2"
124
+
io:
125
+
dependency: transitive
126
+
description:
127
+
name: io
128
+
sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
129
+
url: "https://pub.dev"
130
+
source: hosted
131
+
version: "1.0.5"
132
+
js:
133
+
dependency: transitive
134
+
description:
135
+
name: js
136
+
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
137
+
url: "https://pub.dev"
138
+
source: hosted
139
+
version: "0.7.2"
140
+
lints:
141
+
dependency: "direct dev"
142
+
description:
143
+
name: lints
144
+
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
145
+
url: "https://pub.dev"
146
+
source: hosted
147
+
version: "5.1.1"
148
+
logging:
149
+
dependency: transitive
150
+
description:
151
+
name: logging
152
+
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
153
+
url: "https://pub.dev"
154
+
source: hosted
155
+
version: "1.3.0"
156
+
matcher:
157
+
dependency: transitive
158
+
description:
159
+
name: matcher
160
+
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
161
+
url: "https://pub.dev"
162
+
source: hosted
163
+
version: "0.12.17"
164
+
meta:
165
+
dependency: transitive
166
+
description:
167
+
name: meta
168
+
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
169
+
url: "https://pub.dev"
170
+
source: hosted
171
+
version: "1.17.0"
172
+
mime:
173
+
dependency: transitive
174
+
description:
175
+
name: mime
176
+
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
177
+
url: "https://pub.dev"
178
+
source: hosted
179
+
version: "2.0.0"
180
+
node_preamble:
181
+
dependency: transitive
182
+
description:
183
+
name: node_preamble
184
+
sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
185
+
url: "https://pub.dev"
186
+
source: hosted
187
+
version: "2.0.2"
188
+
package_config:
189
+
dependency: transitive
190
+
description:
191
+
name: package_config
192
+
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
193
+
url: "https://pub.dev"
194
+
source: hosted
195
+
version: "2.2.0"
196
+
path:
197
+
dependency: transitive
198
+
description:
199
+
name: path
200
+
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
201
+
url: "https://pub.dev"
202
+
source: hosted
203
+
version: "1.9.1"
204
+
pool:
205
+
dependency: transitive
206
+
description:
207
+
name: pool
208
+
sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
209
+
url: "https://pub.dev"
210
+
source: hosted
211
+
version: "1.5.1"
212
+
pub_semver:
213
+
dependency: transitive
214
+
description:
215
+
name: pub_semver
216
+
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
217
+
url: "https://pub.dev"
218
+
source: hosted
219
+
version: "2.2.0"
220
+
shelf:
221
+
dependency: transitive
222
+
description:
223
+
name: shelf
224
+
sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
225
+
url: "https://pub.dev"
226
+
source: hosted
227
+
version: "1.4.2"
228
+
shelf_packages_handler:
229
+
dependency: transitive
230
+
description:
231
+
name: shelf_packages_handler
232
+
sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
233
+
url: "https://pub.dev"
234
+
source: hosted
235
+
version: "3.0.2"
236
+
shelf_static:
237
+
dependency: transitive
238
+
description:
239
+
name: shelf_static
240
+
sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3
241
+
url: "https://pub.dev"
242
+
source: hosted
243
+
version: "1.1.3"
244
+
shelf_web_socket:
245
+
dependency: transitive
246
+
description:
247
+
name: shelf_web_socket
248
+
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
249
+
url: "https://pub.dev"
250
+
source: hosted
251
+
version: "3.0.0"
252
+
source_map_stack_trace:
253
+
dependency: transitive
254
+
description:
255
+
name: source_map_stack_trace
256
+
sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b
257
+
url: "https://pub.dev"
258
+
source: hosted
259
+
version: "2.1.2"
260
+
source_maps:
261
+
dependency: transitive
262
+
description:
263
+
name: source_maps
264
+
sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812"
265
+
url: "https://pub.dev"
266
+
source: hosted
267
+
version: "0.10.13"
268
+
source_span:
269
+
dependency: transitive
270
+
description:
271
+
name: source_span
272
+
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
273
+
url: "https://pub.dev"
274
+
source: hosted
275
+
version: "1.10.1"
276
+
stack_trace:
277
+
dependency: transitive
278
+
description:
279
+
name: stack_trace
280
+
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
281
+
url: "https://pub.dev"
282
+
source: hosted
283
+
version: "1.12.1"
284
+
stream_channel:
285
+
dependency: transitive
286
+
description:
287
+
name: stream_channel
288
+
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
289
+
url: "https://pub.dev"
290
+
source: hosted
291
+
version: "2.1.4"
292
+
string_scanner:
293
+
dependency: transitive
294
+
description:
295
+
name: string_scanner
296
+
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
297
+
url: "https://pub.dev"
298
+
source: hosted
299
+
version: "1.4.1"
300
+
term_glyph:
301
+
dependency: transitive
302
+
description:
303
+
name: term_glyph
304
+
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
305
+
url: "https://pub.dev"
306
+
source: hosted
307
+
version: "1.2.2"
308
+
test:
309
+
dependency: "direct dev"
310
+
description:
311
+
name: test
312
+
sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb"
313
+
url: "https://pub.dev"
314
+
source: hosted
315
+
version: "1.26.2"
316
+
test_api:
317
+
dependency: transitive
318
+
description:
319
+
name: test_api
320
+
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
321
+
url: "https://pub.dev"
322
+
source: hosted
323
+
version: "0.7.6"
324
+
test_core:
325
+
dependency: transitive
326
+
description:
327
+
name: test_core
328
+
sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a"
329
+
url: "https://pub.dev"
330
+
source: hosted
331
+
version: "0.6.11"
332
+
typed_data:
333
+
dependency: transitive
334
+
description:
335
+
name: typed_data
336
+
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
337
+
url: "https://pub.dev"
338
+
source: hosted
339
+
version: "1.4.0"
340
+
vm_service:
341
+
dependency: transitive
342
+
description:
343
+
name: vm_service
344
+
sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
345
+
url: "https://pub.dev"
346
+
source: hosted
347
+
version: "15.0.2"
348
+
watcher:
349
+
dependency: transitive
350
+
description:
351
+
name: watcher
352
+
sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104"
353
+
url: "https://pub.dev"
354
+
source: hosted
355
+
version: "1.1.1"
356
+
web:
357
+
dependency: transitive
358
+
description:
359
+
name: web
360
+
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
361
+
url: "https://pub.dev"
362
+
source: hosted
363
+
version: "1.1.1"
364
+
web_socket:
365
+
dependency: transitive
366
+
description:
367
+
name: web_socket
368
+
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
369
+
url: "https://pub.dev"
370
+
source: hosted
371
+
version: "1.0.1"
372
+
web_socket_channel:
373
+
dependency: transitive
374
+
description:
375
+
name: web_socket_channel
376
+
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
377
+
url: "https://pub.dev"
378
+
source: hosted
379
+
version: "3.0.3"
380
+
webkit_inspection_protocol:
381
+
dependency: transitive
382
+
description:
383
+
name: webkit_inspection_protocol
384
+
sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
385
+
url: "https://pub.dev"
386
+
source: hosted
387
+
version: "1.2.1"
388
+
yaml:
389
+
dependency: transitive
390
+
description:
391
+
name: yaml
392
+
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
393
+
url: "https://pub.dev"
394
+
source: hosted
395
+
version: "3.1.3"
396
+
sdks:
397
+
dart: ">=3.8.1 <4.0.0"
+15
backend/pubspec.yaml
+15
backend/pubspec.yaml
···
1
+
name: backend
2
+
description: A sample command-line application.
3
+
version: 1.0.0
4
+
# repository: https://github.com/my_org/my_repo
5
+
6
+
environment:
7
+
sdk: ^3.8.1
8
+
9
+
# Add regular dependencies here.
10
+
dependencies:
11
+
# path: ^1.8.0
12
+
13
+
dev_dependencies:
14
+
lints: ^5.0.0
15
+
test: ^1.24.0
+8
backend/test/backend_test.dart
+8
backend/test/backend_test.dart
+24
frontend/.gitignore
+24
frontend/.gitignore
···
1
+
# Logs
2
+
logs
3
+
*.log
4
+
npm-debug.log*
5
+
yarn-debug.log*
6
+
yarn-error.log*
7
+
pnpm-debug.log*
8
+
lerna-debug.log*
9
+
10
+
node_modules
11
+
dist
12
+
dist-ssr
13
+
*.local
14
+
15
+
# Editor directories and files
16
+
.vscode/*
17
+
!.vscode/extensions.json
18
+
.idea
19
+
.DS_Store
20
+
*.suo
21
+
*.ntvs*
22
+
*.njsproj
23
+
*.sln
24
+
*.sw?
+13
frontend/index.html
+13
frontend/index.html
···
1
+
<!doctype html>
2
+
<html lang="en">
3
+
<head>
4
+
<meta charset="UTF-8" />
5
+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+
<title>Vite + TS</title>
8
+
</head>
9
+
<body>
10
+
<div id="app"></div>
11
+
<script type="module" src="/src/main.ts"></script>
12
+
</body>
13
+
</html>
+18
frontend/package.json
+18
frontend/package.json
···
1
+
{
2
+
"name": "frontend",
3
+
"private": true,
4
+
"version": "0.0.0",
5
+
"type": "module",
6
+
"scripts": {
7
+
"dev": "vite",
8
+
"build": "tsc && vite build",
9
+
"preview": "vite preview"
10
+
},
11
+
"devDependencies": {
12
+
"typescript": "~5.8.3",
13
+
"vite": "^6.3.5"
14
+
},
15
+
"dependencies": {
16
+
"htmx.org": "^2.0.4"
17
+
}
18
+
}
+603
frontend/pnpm-lock.yaml
+603
frontend/pnpm-lock.yaml
···
1
+
lockfileVersion: '9.0'
2
+
3
+
settings:
4
+
autoInstallPeers: true
5
+
excludeLinksFromLockfile: false
6
+
importers:
7
+
8
+
.:
9
+
dependencies:
10
+
htmx.org:
11
+
specifier: ^2.0.4
12
+
version: 2.0.4
13
+
devDependencies:
14
+
typescript:
15
+
specifier: ~5.8.3
16
+
version: 5.8.3
17
+
vite:
18
+
specifier: ^6.3.5
19
+
version: 6.3.5
20
+
21
+
packages:
22
+
23
+
'@esbuild/aix-ppc64@0.25.5':
24
+
resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
25
+
engines: {node: '>=18'}
26
+
cpu: [ppc64]
27
+
os: [aix]
28
+
29
+
'@esbuild/android-arm64@0.25.5':
30
+
resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
31
+
engines: {node: '>=18'}
32
+
cpu: [arm64]
33
+
os: [android]
34
+
35
+
'@esbuild/android-arm@0.25.5':
36
+
resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
37
+
engines: {node: '>=18'}
38
+
cpu: [arm]
39
+
os: [android]
40
+
41
+
'@esbuild/android-x64@0.25.5':
42
+
resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
43
+
engines: {node: '>=18'}
44
+
cpu: [x64]
45
+
os: [android]
46
+
47
+
'@esbuild/darwin-arm64@0.25.5':
48
+
resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
49
+
engines: {node: '>=18'}
50
+
cpu: [arm64]
51
+
os: [darwin]
52
+
53
+
'@esbuild/darwin-x64@0.25.5':
54
+
resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
55
+
engines: {node: '>=18'}
56
+
cpu: [x64]
57
+
os: [darwin]
58
+
59
+
'@esbuild/freebsd-arm64@0.25.5':
60
+
resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
61
+
engines: {node: '>=18'}
62
+
cpu: [arm64]
63
+
os: [freebsd]
64
+
65
+
'@esbuild/freebsd-x64@0.25.5':
66
+
resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
67
+
engines: {node: '>=18'}
68
+
cpu: [x64]
69
+
os: [freebsd]
70
+
71
+
'@esbuild/linux-arm64@0.25.5':
72
+
resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
73
+
engines: {node: '>=18'}
74
+
cpu: [arm64]
75
+
os: [linux]
76
+
77
+
'@esbuild/linux-arm@0.25.5':
78
+
resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
79
+
engines: {node: '>=18'}
80
+
cpu: [arm]
81
+
os: [linux]
82
+
83
+
'@esbuild/linux-ia32@0.25.5':
84
+
resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
85
+
engines: {node: '>=18'}
86
+
cpu: [ia32]
87
+
os: [linux]
88
+
89
+
'@esbuild/linux-loong64@0.25.5':
90
+
resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
91
+
engines: {node: '>=18'}
92
+
cpu: [loong64]
93
+
os: [linux]
94
+
95
+
'@esbuild/linux-mips64el@0.25.5':
96
+
resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
97
+
engines: {node: '>=18'}
98
+
cpu: [mips64el]
99
+
os: [linux]
100
+
101
+
'@esbuild/linux-ppc64@0.25.5':
102
+
resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
103
+
engines: {node: '>=18'}
104
+
cpu: [ppc64]
105
+
os: [linux]
106
+
107
+
'@esbuild/linux-riscv64@0.25.5':
108
+
resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
109
+
engines: {node: '>=18'}
110
+
cpu: [riscv64]
111
+
os: [linux]
112
+
113
+
'@esbuild/linux-s390x@0.25.5':
114
+
resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
115
+
engines: {node: '>=18'}
116
+
cpu: [s390x]
117
+
os: [linux]
118
+
119
+
'@esbuild/linux-x64@0.25.5':
120
+
resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
121
+
engines: {node: '>=18'}
122
+
cpu: [x64]
123
+
os: [linux]
124
+
125
+
'@esbuild/netbsd-arm64@0.25.5':
126
+
resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
127
+
engines: {node: '>=18'}
128
+
cpu: [arm64]
129
+
os: [netbsd]
130
+
131
+
'@esbuild/netbsd-x64@0.25.5':
132
+
resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
133
+
engines: {node: '>=18'}
134
+
cpu: [x64]
135
+
os: [netbsd]
136
+
137
+
'@esbuild/openbsd-arm64@0.25.5':
138
+
resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
139
+
engines: {node: '>=18'}
140
+
cpu: [arm64]
141
+
os: [openbsd]
142
+
143
+
'@esbuild/openbsd-x64@0.25.5':
144
+
resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
145
+
engines: {node: '>=18'}
146
+
cpu: [x64]
147
+
os: [openbsd]
148
+
149
+
'@esbuild/sunos-x64@0.25.5':
150
+
resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
151
+
engines: {node: '>=18'}
152
+
cpu: [x64]
153
+
os: [sunos]
154
+
155
+
'@esbuild/win32-arm64@0.25.5':
156
+
resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
157
+
engines: {node: '>=18'}
158
+
cpu: [arm64]
159
+
os: [win32]
160
+
161
+
'@esbuild/win32-ia32@0.25.5':
162
+
resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
163
+
engines: {node: '>=18'}
164
+
cpu: [ia32]
165
+
os: [win32]
166
+
167
+
'@esbuild/win32-x64@0.25.5':
168
+
resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
169
+
engines: {node: '>=18'}
170
+
cpu: [x64]
171
+
os: [win32]
172
+
173
+
'@rollup/rollup-android-arm-eabi@4.42.0':
174
+
resolution: {integrity: sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==}
175
+
cpu: [arm]
176
+
os: [android]
177
+
178
+
'@rollup/rollup-android-arm64@4.42.0':
179
+
resolution: {integrity: sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==}
180
+
cpu: [arm64]
181
+
os: [android]
182
+
183
+
'@rollup/rollup-darwin-arm64@4.42.0':
184
+
resolution: {integrity: sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==}
185
+
cpu: [arm64]
186
+
os: [darwin]
187
+
188
+
'@rollup/rollup-darwin-x64@4.42.0':
189
+
resolution: {integrity: sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==}
190
+
cpu: [x64]
191
+
os: [darwin]
192
+
193
+
'@rollup/rollup-freebsd-arm64@4.42.0':
194
+
resolution: {integrity: sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==}
195
+
cpu: [arm64]
196
+
os: [freebsd]
197
+
198
+
'@rollup/rollup-freebsd-x64@4.42.0':
199
+
resolution: {integrity: sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==}
200
+
cpu: [x64]
201
+
os: [freebsd]
202
+
203
+
'@rollup/rollup-linux-arm-gnueabihf@4.42.0':
204
+
resolution: {integrity: sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==}
205
+
cpu: [arm]
206
+
os: [linux]
207
+
208
+
'@rollup/rollup-linux-arm-musleabihf@4.42.0':
209
+
resolution: {integrity: sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==}
210
+
cpu: [arm]
211
+
os: [linux]
212
+
213
+
'@rollup/rollup-linux-arm64-gnu@4.42.0':
214
+
resolution: {integrity: sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==}
215
+
cpu: [arm64]
216
+
os: [linux]
217
+
218
+
'@rollup/rollup-linux-arm64-musl@4.42.0':
219
+
resolution: {integrity: sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==}
220
+
cpu: [arm64]
221
+
os: [linux]
222
+
223
+
'@rollup/rollup-linux-loongarch64-gnu@4.42.0':
224
+
resolution: {integrity: sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==}
225
+
cpu: [loong64]
226
+
os: [linux]
227
+
228
+
'@rollup/rollup-linux-powerpc64le-gnu@4.42.0':
229
+
resolution: {integrity: sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==}
230
+
cpu: [ppc64]
231
+
os: [linux]
232
+
233
+
'@rollup/rollup-linux-riscv64-gnu@4.42.0':
234
+
resolution: {integrity: sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==}
235
+
cpu: [riscv64]
236
+
os: [linux]
237
+
238
+
'@rollup/rollup-linux-riscv64-musl@4.42.0':
239
+
resolution: {integrity: sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==}
240
+
cpu: [riscv64]
241
+
os: [linux]
242
+
243
+
'@rollup/rollup-linux-s390x-gnu@4.42.0':
244
+
resolution: {integrity: sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==}
245
+
cpu: [s390x]
246
+
os: [linux]
247
+
248
+
'@rollup/rollup-linux-x64-gnu@4.42.0':
249
+
resolution: {integrity: sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==}
250
+
cpu: [x64]
251
+
os: [linux]
252
+
253
+
'@rollup/rollup-linux-x64-musl@4.42.0':
254
+
resolution: {integrity: sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==}
255
+
cpu: [x64]
256
+
os: [linux]
257
+
258
+
'@rollup/rollup-win32-arm64-msvc@4.42.0':
259
+
resolution: {integrity: sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==}
260
+
cpu: [arm64]
261
+
os: [win32]
262
+
263
+
'@rollup/rollup-win32-ia32-msvc@4.42.0':
264
+
resolution: {integrity: sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==}
265
+
cpu: [ia32]
266
+
os: [win32]
267
+
268
+
'@rollup/rollup-win32-x64-msvc@4.42.0':
269
+
resolution: {integrity: sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==}
270
+
cpu: [x64]
271
+
os: [win32]
272
+
273
+
'@types/estree@1.0.7':
274
+
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
275
+
276
+
esbuild@0.25.5:
277
+
resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
278
+
engines: {node: '>=18'}
279
+
hasBin: true
280
+
281
+
fdir@6.4.5:
282
+
resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==}
283
+
peerDependencies:
284
+
picomatch: ^3 || ^4
285
+
peerDependenciesMeta:
286
+
picomatch:
287
+
optional: true
288
+
289
+
fsevents@2.3.3:
290
+
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
291
+
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
292
+
os: [darwin]
293
+
294
+
htmx.org@2.0.4:
295
+
resolution: {integrity: sha512-HLxMCdfXDOJirs3vBZl/ZLoY+c7PfM4Ahr2Ad4YXh6d22T5ltbTXFFkpx9Tgb2vvmWFMbIc3LqN2ToNkZJvyYQ==}
296
+
297
+
nanoid@3.3.11:
298
+
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
299
+
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
300
+
hasBin: true
301
+
302
+
picocolors@1.1.1:
303
+
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
304
+
305
+
picomatch@4.0.2:
306
+
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
307
+
engines: {node: '>=12'}
308
+
309
+
postcss@8.5.4:
310
+
resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==}
311
+
engines: {node: ^10 || ^12 || >=14}
312
+
313
+
rollup@4.42.0:
314
+
resolution: {integrity: sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==}
315
+
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
316
+
hasBin: true
317
+
318
+
source-map-js@1.2.1:
319
+
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
320
+
engines: {node: '>=0.10.0'}
321
+
322
+
tinyglobby@0.2.14:
323
+
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
324
+
engines: {node: '>=12.0.0'}
325
+
326
+
typescript@5.8.3:
327
+
resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
328
+
engines: {node: '>=14.17'}
329
+
hasBin: true
330
+
331
+
vite@6.3.5:
332
+
resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
333
+
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
334
+
hasBin: true
335
+
peerDependencies:
336
+
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
337
+
jiti: '>=1.21.0'
338
+
less: '*'
339
+
lightningcss: ^1.21.0
340
+
sass: '*'
341
+
sass-embedded: '*'
342
+
stylus: '*'
343
+
sugarss: '*'
344
+
terser: ^5.16.0
345
+
tsx: ^4.8.1
346
+
yaml: ^2.4.2
347
+
peerDependenciesMeta:
348
+
'@types/node':
349
+
optional: true
350
+
jiti:
351
+
optional: true
352
+
less:
353
+
optional: true
354
+
lightningcss:
355
+
optional: true
356
+
sass:
357
+
optional: true
358
+
sass-embedded:
359
+
optional: true
360
+
stylus:
361
+
optional: true
362
+
sugarss:
363
+
optional: true
364
+
terser:
365
+
optional: true
366
+
tsx:
367
+
optional: true
368
+
yaml:
369
+
optional: true
370
+
371
+
snapshots:
372
+
373
+
'@esbuild/aix-ppc64@0.25.5':
374
+
optional: true
375
+
376
+
'@esbuild/android-arm64@0.25.5':
377
+
optional: true
378
+
379
+
'@esbuild/android-arm@0.25.5':
380
+
optional: true
381
+
382
+
'@esbuild/android-x64@0.25.5':
383
+
optional: true
384
+
385
+
'@esbuild/darwin-arm64@0.25.5':
386
+
optional: true
387
+
388
+
'@esbuild/darwin-x64@0.25.5':
389
+
optional: true
390
+
391
+
'@esbuild/freebsd-arm64@0.25.5':
392
+
optional: true
393
+
394
+
'@esbuild/freebsd-x64@0.25.5':
395
+
optional: true
396
+
397
+
'@esbuild/linux-arm64@0.25.5':
398
+
optional: true
399
+
400
+
'@esbuild/linux-arm@0.25.5':
401
+
optional: true
402
+
403
+
'@esbuild/linux-ia32@0.25.5':
404
+
optional: true
405
+
406
+
'@esbuild/linux-loong64@0.25.5':
407
+
optional: true
408
+
409
+
'@esbuild/linux-mips64el@0.25.5':
410
+
optional: true
411
+
412
+
'@esbuild/linux-ppc64@0.25.5':
413
+
optional: true
414
+
415
+
'@esbuild/linux-riscv64@0.25.5':
416
+
optional: true
417
+
418
+
'@esbuild/linux-s390x@0.25.5':
419
+
optional: true
420
+
421
+
'@esbuild/linux-x64@0.25.5':
422
+
optional: true
423
+
424
+
'@esbuild/netbsd-arm64@0.25.5':
425
+
optional: true
426
+
427
+
'@esbuild/netbsd-x64@0.25.5':
428
+
optional: true
429
+
430
+
'@esbuild/openbsd-arm64@0.25.5':
431
+
optional: true
432
+
433
+
'@esbuild/openbsd-x64@0.25.5':
434
+
optional: true
435
+
436
+
'@esbuild/sunos-x64@0.25.5':
437
+
optional: true
438
+
439
+
'@esbuild/win32-arm64@0.25.5':
440
+
optional: true
441
+
442
+
'@esbuild/win32-ia32@0.25.5':
443
+
optional: true
444
+
445
+
'@esbuild/win32-x64@0.25.5':
446
+
optional: true
447
+
448
+
'@rollup/rollup-android-arm-eabi@4.42.0':
449
+
optional: true
450
+
451
+
'@rollup/rollup-android-arm64@4.42.0':
452
+
optional: true
453
+
454
+
'@rollup/rollup-darwin-arm64@4.42.0':
455
+
optional: true
456
+
457
+
'@rollup/rollup-darwin-x64@4.42.0':
458
+
optional: true
459
+
460
+
'@rollup/rollup-freebsd-arm64@4.42.0':
461
+
optional: true
462
+
463
+
'@rollup/rollup-freebsd-x64@4.42.0':
464
+
optional: true
465
+
466
+
'@rollup/rollup-linux-arm-gnueabihf@4.42.0':
467
+
optional: true
468
+
469
+
'@rollup/rollup-linux-arm-musleabihf@4.42.0':
470
+
optional: true
471
+
472
+
'@rollup/rollup-linux-arm64-gnu@4.42.0':
473
+
optional: true
474
+
475
+
'@rollup/rollup-linux-arm64-musl@4.42.0':
476
+
optional: true
477
+
478
+
'@rollup/rollup-linux-loongarch64-gnu@4.42.0':
479
+
optional: true
480
+
481
+
'@rollup/rollup-linux-powerpc64le-gnu@4.42.0':
482
+
optional: true
483
+
484
+
'@rollup/rollup-linux-riscv64-gnu@4.42.0':
485
+
optional: true
486
+
487
+
'@rollup/rollup-linux-riscv64-musl@4.42.0':
488
+
optional: true
489
+
490
+
'@rollup/rollup-linux-s390x-gnu@4.42.0':
491
+
optional: true
492
+
493
+
'@rollup/rollup-linux-x64-gnu@4.42.0':
494
+
optional: true
495
+
496
+
'@rollup/rollup-linux-x64-musl@4.42.0':
497
+
optional: true
498
+
499
+
'@rollup/rollup-win32-arm64-msvc@4.42.0':
500
+
optional: true
501
+
502
+
'@rollup/rollup-win32-ia32-msvc@4.42.0':
503
+
optional: true
504
+
505
+
'@rollup/rollup-win32-x64-msvc@4.42.0':
506
+
optional: true
507
+
508
+
'@types/estree@1.0.7': {}
509
+
510
+
esbuild@0.25.5:
511
+
optionalDependencies:
512
+
'@esbuild/aix-ppc64': 0.25.5
513
+
'@esbuild/android-arm': 0.25.5
514
+
'@esbuild/android-arm64': 0.25.5
515
+
'@esbuild/android-x64': 0.25.5
516
+
'@esbuild/darwin-arm64': 0.25.5
517
+
'@esbuild/darwin-x64': 0.25.5
518
+
'@esbuild/freebsd-arm64': 0.25.5
519
+
'@esbuild/freebsd-x64': 0.25.5
520
+
'@esbuild/linux-arm': 0.25.5
521
+
'@esbuild/linux-arm64': 0.25.5
522
+
'@esbuild/linux-ia32': 0.25.5
523
+
'@esbuild/linux-loong64': 0.25.5
524
+
'@esbuild/linux-mips64el': 0.25.5
525
+
'@esbuild/linux-ppc64': 0.25.5
526
+
'@esbuild/linux-riscv64': 0.25.5
527
+
'@esbuild/linux-s390x': 0.25.5
528
+
'@esbuild/linux-x64': 0.25.5
529
+
'@esbuild/netbsd-arm64': 0.25.5
530
+
'@esbuild/netbsd-x64': 0.25.5
531
+
'@esbuild/openbsd-arm64': 0.25.5
532
+
'@esbuild/openbsd-x64': 0.25.5
533
+
'@esbuild/sunos-x64': 0.25.5
534
+
'@esbuild/win32-arm64': 0.25.5
535
+
'@esbuild/win32-ia32': 0.25.5
536
+
'@esbuild/win32-x64': 0.25.5
537
+
538
+
fdir@6.4.5(picomatch@4.0.2):
539
+
optionalDependencies:
540
+
picomatch: 4.0.2
541
+
542
+
fsevents@2.3.3:
543
+
optional: true
544
+
545
+
htmx.org@2.0.4: {}
546
+
547
+
nanoid@3.3.11: {}
548
+
549
+
picocolors@1.1.1: {}
550
+
551
+
picomatch@4.0.2: {}
552
+
553
+
postcss@8.5.4:
554
+
dependencies:
555
+
nanoid: 3.3.11
556
+
picocolors: 1.1.1
557
+
source-map-js: 1.2.1
558
+
559
+
rollup@4.42.0:
560
+
dependencies:
561
+
'@types/estree': 1.0.7
562
+
optionalDependencies:
563
+
'@rollup/rollup-android-arm-eabi': 4.42.0
564
+
'@rollup/rollup-android-arm64': 4.42.0
565
+
'@rollup/rollup-darwin-arm64': 4.42.0
566
+
'@rollup/rollup-darwin-x64': 4.42.0
567
+
'@rollup/rollup-freebsd-arm64': 4.42.0
568
+
'@rollup/rollup-freebsd-x64': 4.42.0
569
+
'@rollup/rollup-linux-arm-gnueabihf': 4.42.0
570
+
'@rollup/rollup-linux-arm-musleabihf': 4.42.0
571
+
'@rollup/rollup-linux-arm64-gnu': 4.42.0
572
+
'@rollup/rollup-linux-arm64-musl': 4.42.0
573
+
'@rollup/rollup-linux-loongarch64-gnu': 4.42.0
574
+
'@rollup/rollup-linux-powerpc64le-gnu': 4.42.0
575
+
'@rollup/rollup-linux-riscv64-gnu': 4.42.0
576
+
'@rollup/rollup-linux-riscv64-musl': 4.42.0
577
+
'@rollup/rollup-linux-s390x-gnu': 4.42.0
578
+
'@rollup/rollup-linux-x64-gnu': 4.42.0
579
+
'@rollup/rollup-linux-x64-musl': 4.42.0
580
+
'@rollup/rollup-win32-arm64-msvc': 4.42.0
581
+
'@rollup/rollup-win32-ia32-msvc': 4.42.0
582
+
'@rollup/rollup-win32-x64-msvc': 4.42.0
583
+
fsevents: 2.3.3
584
+
585
+
source-map-js@1.2.1: {}
586
+
587
+
tinyglobby@0.2.14:
588
+
dependencies:
589
+
fdir: 6.4.5(picomatch@4.0.2)
590
+
picomatch: 4.0.2
591
+
592
+
typescript@5.8.3: {}
593
+
594
+
vite@6.3.5:
595
+
dependencies:
596
+
esbuild: 0.25.5
597
+
fdir: 6.4.5(picomatch@4.0.2)
598
+
picomatch: 4.0.2
599
+
postcss: 8.5.4
600
+
rollup: 4.42.0
601
+
tinyglobby: 0.2.14
602
+
optionalDependencies:
603
+
fsevents: 2.3.3
+1
frontend/public/vite.svg
+1
frontend/public/vite.svg
···
1
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
+9
frontend/src/counter.ts
+9
frontend/src/counter.ts
+24
frontend/src/main.ts
+24
frontend/src/main.ts
···
1
+
import './style.css'
2
+
import typescriptLogo from './typescript.svg'
3
+
import viteLogo from '/vite.svg'
4
+
import { setupCounter } from './counter.ts'
5
+
6
+
document.querySelector<HTMLDivElement>('#app')!.innerHTML = `
7
+
<div>
8
+
<a href="https://vite.dev" target="_blank">
9
+
<img src="${viteLogo}" class="logo" alt="Vite logo" />
10
+
</a>
11
+
<a href="https://www.typescriptlang.org/" target="_blank">
12
+
<img src="${typescriptLogo}" class="logo vanilla" alt="TypeScript logo" />
13
+
</a>
14
+
<h1>Vite + TypeScript</h1>
15
+
<div class="card">
16
+
<button id="counter" type="button"></button>
17
+
</div>
18
+
<p class="read-the-docs">
19
+
Click on the Vite and TypeScript logos to learn more
20
+
</p>
21
+
</div>
22
+
`
23
+
24
+
setupCounter(document.querySelector<HTMLButtonElement>('#counter')!)
+96
frontend/src/style.css
+96
frontend/src/style.css
···
1
+
:root {
2
+
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
3
+
line-height: 1.5;
4
+
font-weight: 400;
5
+
6
+
color-scheme: light dark;
7
+
color: rgba(255, 255, 255, 0.87);
8
+
background-color: #242424;
9
+
10
+
font-synthesis: none;
11
+
text-rendering: optimizeLegibility;
12
+
-webkit-font-smoothing: antialiased;
13
+
-moz-osx-font-smoothing: grayscale;
14
+
}
15
+
16
+
a {
17
+
font-weight: 500;
18
+
color: #646cff;
19
+
text-decoration: inherit;
20
+
}
21
+
a:hover {
22
+
color: #535bf2;
23
+
}
24
+
25
+
body {
26
+
margin: 0;
27
+
display: flex;
28
+
place-items: center;
29
+
min-width: 320px;
30
+
min-height: 100vh;
31
+
}
32
+
33
+
h1 {
34
+
font-size: 3.2em;
35
+
line-height: 1.1;
36
+
}
37
+
38
+
#app {
39
+
max-width: 1280px;
40
+
margin: 0 auto;
41
+
padding: 2rem;
42
+
text-align: center;
43
+
}
44
+
45
+
.logo {
46
+
height: 6em;
47
+
padding: 1.5em;
48
+
will-change: filter;
49
+
transition: filter 300ms;
50
+
}
51
+
.logo:hover {
52
+
filter: drop-shadow(0 0 2em #646cffaa);
53
+
}
54
+
.logo.vanilla:hover {
55
+
filter: drop-shadow(0 0 2em #3178c6aa);
56
+
}
57
+
58
+
.card {
59
+
padding: 2em;
60
+
}
61
+
62
+
.read-the-docs {
63
+
color: #888;
64
+
}
65
+
66
+
button {
67
+
border-radius: 8px;
68
+
border: 1px solid transparent;
69
+
padding: 0.6em 1.2em;
70
+
font-size: 1em;
71
+
font-weight: 500;
72
+
font-family: inherit;
73
+
background-color: #1a1a1a;
74
+
cursor: pointer;
75
+
transition: border-color 0.25s;
76
+
}
77
+
button:hover {
78
+
border-color: #646cff;
79
+
}
80
+
button:focus,
81
+
button:focus-visible {
82
+
outline: 4px auto -webkit-focus-ring-color;
83
+
}
84
+
85
+
@media (prefers-color-scheme: light) {
86
+
:root {
87
+
color: #213547;
88
+
background-color: #ffffff;
89
+
}
90
+
a:hover {
91
+
color: #747bff;
92
+
}
93
+
button {
94
+
background-color: #f9f9f9;
95
+
}
96
+
}
+1
frontend/src/typescript.svg
+1
frontend/src/typescript.svg
···
1
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="32" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path fill="#007ACC" d="M0 128v128h256V0H0z"></path><path fill="#FFF" d="m56.612 128.85l-.081 10.483h33.32v94.68h23.568v-94.68h33.321v-10.28c0-5.69-.122-10.444-.284-10.566c-.122-.162-20.4-.244-44.983-.203l-44.74.122l-.121 10.443Zm149.955-10.742c6.501 1.625 11.459 4.51 16.01 9.224c2.357 2.52 5.851 7.111 6.136 8.208c.08.325-11.053 7.802-17.798 11.988c-.244.162-1.22-.894-2.317-2.52c-3.291-4.795-6.745-6.867-12.028-7.233c-7.76-.528-12.759 3.535-12.718 10.321c0 1.992.284 3.17 1.097 4.795c1.707 3.536 4.876 5.649 14.832 9.956c18.326 7.883 26.168 13.084 31.045 20.48c5.445 8.249 6.664 21.415 2.966 31.208c-4.063 10.646-14.14 17.879-28.323 20.276c-4.388.772-14.79.65-19.504-.203c-10.28-1.828-20.033-6.908-26.047-13.572c-2.357-2.6-6.949-9.387-6.664-9.874c.122-.163 1.178-.813 2.356-1.504c1.138-.65 5.446-3.129 9.509-5.485l7.355-4.267l1.544 2.276c2.154 3.29 6.867 7.801 9.712 9.305c8.167 4.307 19.383 3.698 24.909-1.26c2.357-2.153 3.332-4.388 3.332-7.68c0-2.966-.366-4.266-1.91-6.501c-1.99-2.845-6.054-5.242-17.595-10.24c-13.206-5.69-18.895-9.224-24.096-14.832c-3.007-3.25-5.852-8.452-7.03-12.8c-.975-3.617-1.22-12.678-.447-16.335c2.723-12.76 12.353-21.659 26.25-24.3c4.51-.853 14.994-.528 19.424.569Z"></path></svg>
+1
frontend/src/vite-env.d.ts
+1
frontend/src/vite-env.d.ts
···
1
+
/// <reference types="vite/client" />
+25
frontend/tsconfig.json
+25
frontend/tsconfig.json
···
1
+
{
2
+
"compilerOptions": {
3
+
"target": "ES2020",
4
+
"useDefineForClassFields": true,
5
+
"module": "ESNext",
6
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
7
+
"skipLibCheck": true,
8
+
9
+
/* Bundler mode */
10
+
"moduleResolution": "bundler",
11
+
"allowImportingTsExtensions": true,
12
+
"verbatimModuleSyntax": true,
13
+
"moduleDetection": "force",
14
+
"noEmit": true,
15
+
16
+
/* Linting */
17
+
"strict": true,
18
+
"noUnusedLocals": true,
19
+
"noUnusedParameters": true,
20
+
"erasableSyntaxOnly": true,
21
+
"noFallthroughCasesInSwitch": true,
22
+
"noUncheckedSideEffectImports": true
23
+
},
24
+
"include": ["src"]
25
+
}