social bookmarking for atproto

Initial commit

penny 506d3857

+8
.idea/.gitignore
···
··· 1 + # Default ignored files 2 + /shelf/ 3 + /workspace.xml 4 + # Editor-based HTTP Client requests 5 + /httpRequests/ 6 + # Datasource local storage ignored files 7 + /dataSources/ 8 + /dataSources.local.xml
+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
···
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <project version="4"> 3 + <component name="ProjectModuleManager"> 4 + <modules> 5 + <module fileurl="file://$PROJECT_DIR$/.idea/clippr.iml" filepath="$PROJECT_DIR$/.idea/clippr.iml" /> 6 + </modules> 7 + </component> 8 + </project>
+6
.idea/vcs.xml
···
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <project version="4"> 3 + <component name="VcsDirectoryMappings"> 4 + <mapping directory="" vcs="Git" /> 5 + </component> 6 + </project>
+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
README.md
···
··· 1 + # clippr 2 + 3 + social bookmarking for atproto
+3
backend/.gitignore
···
··· 1 + # https://dart.dev/guides/libraries/private-files 2 + # Created by `dart pub` 3 + .dart_tool/
+3
backend/CHANGELOG.md
···
··· 1 + ## 1.0.0 2 + 3 + - Initial version.
+2
backend/README.md
···
··· 1 + A sample command-line application with an entrypoint in `bin/`, library code 2 + in `lib/`, and example unit test in `test/`.
+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
···
··· 1 + import 'package:backend/backend.dart' as backend; 2 + 3 + void main(List<String> arguments) { 4 + print('Hello world: ${backend.calculate()}!'); 5 + }
+3
backend/lib/backend.dart
···
··· 1 + int calculate() { 2 + return 6 * 7; 3 + }
+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
···
··· 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
···
··· 1 + import 'package:backend/backend.dart'; 2 + import 'package:test/test.dart'; 3 + 4 + void main() { 5 + test('calculate', () { 6 + expect(calculate(), 42); 7 + }); 8 + }
+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?
+3
frontend/README.md
···
··· 1 + # clippr-web 2 + 3 + frontend for clippr
+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
···
··· 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
···
··· 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
+2
frontend/pnpm-workspace.yaml
···
··· 1 + onlyBuiltDependencies: 2 + - esbuild
+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
···
··· 1 + export function setupCounter(element: HTMLButtonElement) { 2 + let counter = 0 3 + const setCounter = (count: number) => { 4 + counter = count 5 + element.innerHTML = `count is ${counter}` 6 + } 7 + element.addEventListener('click', () => setCounter(counter + 1)) 8 + setCounter(0) 9 + }
+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
···
··· 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 + <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 + /// <reference types="vite/client" />
+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 + }