├── .dockerignore
├── .github
└── workflows
│ └── docker-image.yml
├── .gitignore
├── .gitmodules
├── .prettierrc
├── .yarnrc.yml
├── Dockerfile
├── LICENSE
├── README.md
├── controllers
├── github.ts
├── memo.ts
├── query.ts
├── user.ts
└── wx.ts
├── helpers
├── DBHelper.ts
├── Error.ts
├── config.ts
└── utils.ts
├── middlewares
├── authCheck.ts
└── errorHandler.ts
├── models
├── MemoModel.ts
├── QueryModel.ts
└── UserModel.ts
├── package.json
├── resources
├── memos.db
└── sqlite.sql
├── roadmap.md
├── routers
├── github.ts
├── memo.ts
├── query.ts
├── user.ts
└── wx.ts
├── scripts
└── build.sh
├── server.ts
├── tsconfig.json
├── typings
└── basic.d.ts
└── yarn.lock
/.dockerignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 |
3 | # Git
4 | .git
5 | .gitattributes
6 | .gitignore
7 | .github
8 |
9 | # Dependency
10 | node_modules
11 | .yarn
12 |
13 | # build/
14 | resources
15 | build
16 |
--------------------------------------------------------------------------------
/.github/workflows/docker-image.yml:
--------------------------------------------------------------------------------
1 | name: ci
2 |
3 | on:
4 | push:
5 | branches:
6 | - "master"
7 |
8 | jobs:
9 | docker:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 | with:
14 | submodules: true
15 |
16 | - name: Login to Docker Hub
17 | uses: docker/login-action@v1
18 | with:
19 | username: ${{ secrets.DOCKER_NEOSMEMO_USERNAME }}
20 | password: ${{ secrets.DOCKER_NEOSMEMO_TOKEN }}
21 |
22 | - name: Set up Docker Buildx
23 | id: buildx
24 | uses: docker/setup-buildx-action@v1
25 |
26 | - name: Build and push
27 | id: docker_build
28 | uses: docker/build-push-action@v2
29 | with:
30 | context: ./
31 | file: ./Dockerfile
32 | push: true
33 | tags: ${{ secrets.DOCKER_NEOSMEMO_USERNAME }}/memos:latest
34 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | build
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "web"]
2 | path = web
3 | url = git@github.com:boojack/insmemo-web.git
4 | branch = dist
5 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 140,
3 | "useTabs": false,
4 | "semi": true,
5 | "singleQuote": false
6 | }
7 |
--------------------------------------------------------------------------------
/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | nodeLinker: node-modules
2 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:lts-alpine
2 |
3 | WORKDIR /usr/src/app
4 | ENV TZ=Asia/Shanghai
5 |
6 | COPY . .
7 |
8 | RUN yarn
9 | RUN yarn build
10 |
11 | CMD ["node", "./build/server.js"]
12 |
13 | EXPOSE 8080
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
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 General Public License is a free, copyleft license for
11 | software and other kinds of works.
12 |
13 | The licenses for most software and other practical works are designed
14 | to take away your freedom to share and change the works. By contrast,
15 | the GNU General Public License is intended to guarantee your freedom to
16 | share and change all versions of a program--to make sure it remains free
17 | software for all its users. We, the Free Software Foundation, use the
18 | GNU General Public License for most of our software; it applies also to
19 | any other work released this way by its authors. You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | them if you wish), that you receive source code or can get it if you
26 | want it, that you can change the software or use pieces of it in new
27 | free programs, and that you know you can do these things.
28 |
29 | To protect your rights, we need to prevent others from denying you
30 | these rights or asking you to surrender the rights. Therefore, you have
31 | certain responsibilities if you distribute copies of the software, or if
32 | you modify it: responsibilities to respect the freedom of others.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must pass on to the recipients the same
36 | freedoms that you received. You must make sure that they, too, receive
37 | or can get the source code. And you must show them these terms so they
38 | know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps:
41 | (1) assert copyright on the software, and (2) offer you this License
42 | giving you legal permission to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains
45 | that there is no warranty for this free software. For both users' and
46 | authors' sake, the GPL requires that modified versions be marked as
47 | changed, so that their problems will not be attributed erroneously to
48 | authors of previous versions.
49 |
50 | Some devices are designed to deny users access to install or run
51 | modified versions of the software inside them, although the manufacturer
52 | can do so. This is fundamentally incompatible with the aim of
53 | protecting users' freedom to change the software. The systematic
54 | pattern of such abuse occurs in the area of products for individuals to
55 | use, which is precisely where it is most unacceptable. Therefore, we
56 | have designed this version of the GPL to prohibit the practice for those
57 | products. If such problems arise substantially in other domains, we
58 | stand ready to extend this provision to those domains in future versions
59 | of the GPL, as needed to protect the freedom of users.
60 |
61 | Finally, every program is threatened constantly by software patents.
62 | States should not allow patents to restrict development and use of
63 | software on general-purpose computers, but in those that do, we wish to
64 | avoid the special danger that patents applied to a free program could
65 | make it effectively proprietary. To prevent this, the GPL assures that
66 | patents cannot be used to render the program non-free.
67 |
68 | The precise terms and conditions for copying, distribution and
69 | modification follow.
70 |
71 | TERMS AND CONDITIONS
72 |
73 | 0. Definitions.
74 |
75 | "This License" refers to version 3 of the GNU General Public License.
76 |
77 | "Copyright" also means copyright-like laws that apply to other kinds of
78 | works, such as semiconductor masks.
79 |
80 | "The Program" refers to any copyrightable work licensed under this
81 | License. Each licensee is addressed as "you". "Licensees" and
82 | "recipients" may be individuals or organizations.
83 |
84 | To "modify" a work means to copy from or adapt all or part of the work
85 | in a fashion requiring copyright permission, other than the making of an
86 | exact copy. The resulting work is called a "modified version" of the
87 | earlier work or a work "based on" the earlier work.
88 |
89 | A "covered work" means either the unmodified Program or a work based
90 | on the Program.
91 |
92 | To "propagate" a work means to do anything with it that, without
93 | permission, would make you directly or secondarily liable for
94 | infringement under applicable copyright law, except executing it on a
95 | computer or modifying a private copy. Propagation includes copying,
96 | distribution (with or without modification), making available to the
97 | public, and in some countries other activities as well.
98 |
99 | To "convey" a work means any kind of propagation that enables other
100 | parties to make or receive copies. Mere interaction with a user through
101 | a computer network, with no transfer of a copy, is not conveying.
102 |
103 | An interactive user interface displays "Appropriate Legal Notices"
104 | to the extent that it includes a convenient and prominently visible
105 | feature that (1) displays an appropriate copyright notice, and (2)
106 | tells the user that there is no warranty for the work (except to the
107 | extent that warranties are provided), that licensees may convey the
108 | work under this License, and how to view a copy of this License. If
109 | the interface presents a list of user commands or options, such as a
110 | menu, a prominent item in the list meets this criterion.
111 |
112 | 1. Source Code.
113 |
114 | The "source code" for a work means the preferred form of the work
115 | for making modifications to it. "Object code" means any non-source
116 | form of a work.
117 |
118 | A "Standard Interface" means an interface that either is an official
119 | standard defined by a recognized standards body, or, in the case of
120 | interfaces specified for a particular programming language, one that
121 | is widely used among developers working in that language.
122 |
123 | The "System Libraries" of an executable work include anything, other
124 | than the work as a whole, that (a) is included in the normal form of
125 | packaging a Major Component, but which is not part of that Major
126 | Component, and (b) serves only to enable use of the work with that
127 | Major Component, or to implement a Standard Interface for which an
128 | implementation is available to the public in source code form. A
129 | "Major Component", in this context, means a major essential component
130 | (kernel, window system, and so on) of the specific operating system
131 | (if any) on which the executable work runs, or a compiler used to
132 | produce the work, or an object code interpreter used to run it.
133 |
134 | The "Corresponding Source" for a work in object code form means all
135 | the source code needed to generate, install, and (for an executable
136 | work) run the object code and to modify the work, including scripts to
137 | control those activities. However, it does not include the work's
138 | System Libraries, or general-purpose tools or generally available free
139 | programs which are used unmodified in performing those activities but
140 | which are not part of the work. For example, Corresponding Source
141 | includes interface definition files associated with source files for
142 | the work, and the source code for shared libraries and dynamically
143 | linked subprograms that the work is specifically designed to require,
144 | such as by intimate data communication or control flow between those
145 | subprograms and other parts of the work.
146 |
147 | The Corresponding Source need not include anything that users
148 | can regenerate automatically from other parts of the Corresponding
149 | Source.
150 |
151 | The Corresponding Source for a work in source code form is that
152 | same work.
153 |
154 | 2. Basic Permissions.
155 |
156 | All rights granted under this License are granted for the term of
157 | copyright on the Program, and are irrevocable provided the stated
158 | conditions are met. This License explicitly affirms your unlimited
159 | permission to run the unmodified Program. The output from running a
160 | covered work is covered by this License only if the output, given its
161 | content, constitutes a covered work. This License acknowledges your
162 | rights of fair use or other equivalent, as provided by copyright law.
163 |
164 | You may make, run and propagate covered works that you do not
165 | convey, without conditions so long as your license otherwise remains
166 | in force. You may convey covered works to others for the sole purpose
167 | of having them make modifications exclusively for you, or provide you
168 | with facilities for running those works, provided that you comply with
169 | the terms of this License in conveying all material for which you do
170 | not control copyright. Those thus making or running the covered works
171 | for you must do so exclusively on your behalf, under your direction
172 | and control, on terms that prohibit them from making any copies of
173 | your copyrighted material outside their relationship with you.
174 |
175 | Conveying under any other circumstances is permitted solely under
176 | the conditions stated below. Sublicensing is not allowed; section 10
177 | makes it unnecessary.
178 |
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180 |
181 | No covered work shall be deemed part of an effective technological
182 | measure under any applicable law fulfilling obligations under article
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184 | similar laws prohibiting or restricting circumvention of such
185 | measures.
186 |
187 | When you convey a covered work, you waive any legal power to forbid
188 | circumvention of technological measures to the extent such circumvention
189 | is effected by exercising rights under this License with respect to
190 | the covered work, and you disclaim any intention to limit operation or
191 | modification of the work as a means of enforcing, against the work's
192 | users, your or third parties' legal rights to forbid circumvention of
193 | technological measures.
194 |
195 | 4. Conveying Verbatim Copies.
196 |
197 | You may convey verbatim copies of the Program's source code as you
198 | receive it, in any medium, provided that you conspicuously and
199 | appropriately publish on each copy an appropriate copyright notice;
200 | keep intact all notices stating that this License and any
201 | non-permissive terms added in accord with section 7 apply to the code;
202 | keep intact all notices of the absence of any warranty; and give all
203 | recipients a copy of this License along with the Program.
204 |
205 | You may charge any price or no price for each copy that you convey,
206 | and you may offer support or warranty protection for a fee.
207 |
208 | 5. Conveying Modified Source Versions.
209 |
210 | You may convey a work based on the Program, or the modifications to
211 | produce it from the Program, in the form of source code under the
212 | terms of section 4, provided that you also meet all of these conditions:
213 |
214 | a) The work must carry prominent notices stating that you modified
215 | it, and giving a relevant date.
216 |
217 | b) The work must carry prominent notices stating that it is
218 | released under this License and any conditions added under section
219 | 7. This requirement modifies the requirement in section 4 to
220 | "keep intact all notices".
221 |
222 | c) You must license the entire work, as a whole, under this
223 | License to anyone who comes into possession of a copy. This
224 | License will therefore apply, along with any applicable section 7
225 | additional terms, to the whole of the work, and all its parts,
226 | regardless of how they are packaged. This License gives no
227 | permission to license the work in any other way, but it does not
228 | invalidate such permission if you have separately received it.
229 |
230 | d) If the work has interactive user interfaces, each must display
231 | Appropriate Legal Notices; however, if the Program has interactive
232 | interfaces that do not display Appropriate Legal Notices, your
233 | work need not make them do so.
234 |
235 | A compilation of a covered work with other separate and independent
236 | works, which are not by their nature extensions of the covered work,
237 | and which are not combined with it such as to form a larger program,
238 | in or on a volume of a storage or distribution medium, is called an
239 | "aggregate" if the compilation and its resulting copyright are not
240 | used to limit the access or legal rights of the compilation's users
241 | beyond what the individual works permit. Inclusion of a covered work
242 | in an aggregate does not cause this License to apply to the other
243 | parts of the aggregate.
244 |
245 | 6. Conveying Non-Source Forms.
246 |
247 | You may convey a covered work in object code form under the terms
248 | of sections 4 and 5, provided that you also convey the
249 | machine-readable Corresponding Source under the terms of this License,
250 | in one of these ways:
251 |
252 | a) Convey the object code in, or embodied in, a physical product
253 | (including a physical distribution medium), accompanied by the
254 | Corresponding Source fixed on a durable physical medium
255 | customarily used for software interchange.
256 |
257 | b) Convey the object code in, or embodied in, a physical product
258 | (including a physical distribution medium), accompanied by a
259 | written offer, valid for at least three years and valid for as
260 | long as you offer spare parts or customer support for that product
261 | model, to give anyone who possesses the object code either (1) a
262 | copy of the Corresponding Source for all the software in the
263 | product that is covered by this License, on a durable physical
264 | medium customarily used for software interchange, for a price no
265 | more than your reasonable cost of physically performing this
266 | conveying of source, or (2) access to copy the
267 | Corresponding Source from a network server at no charge.
268 |
269 | c) Convey individual copies of the object code with a copy of the
270 | written offer to provide the Corresponding Source. This
271 | alternative is allowed only occasionally and noncommercially, and
272 | only if you received the object code with such an offer, in accord
273 | with subsection 6b.
274 |
275 | d) Convey the object code by offering access from a designated
276 | place (gratis or for a charge), and offer equivalent access to the
277 | Corresponding Source in the same way through the same place at no
278 | further charge. You need not require recipients to copy the
279 | Corresponding Source along with the object code. If the place to
280 | copy the object code is a network server, the Corresponding Source
281 | may be on a different server (operated by you or a third party)
282 | that supports equivalent copying facilities, provided you maintain
283 | clear directions next to the object code saying where to find the
284 | Corresponding Source. Regardless of what server hosts the
285 | Corresponding Source, you remain obligated to ensure that it is
286 | available for as long as needed to satisfy these requirements.
287 |
288 | e) Convey the object code using peer-to-peer transmission, provided
289 | you inform other peers where the object code and Corresponding
290 | Source of the work are being offered to the general public at no
291 | charge under subsection 6d.
292 |
293 | A separable portion of the object code, whose source code is excluded
294 | from the Corresponding Source as a System Library, need not be
295 | included in conveying the object code work.
296 |
297 | A "User Product" is either (1) a "consumer product", which means any
298 | tangible personal property which is normally used for personal, family,
299 | or household purposes, or (2) anything designed or sold for incorporation
300 | into a dwelling. In determining whether a product is a consumer product,
301 | doubtful cases shall be resolved in favor of coverage. For a particular
302 | product received by a particular user, "normally used" refers to a
303 | typical or common use of that class of product, regardless of the status
304 | of the particular user or of the way in which the particular user
305 | actually uses, or expects or is expected to use, the product. A product
306 | is a consumer product regardless of whether the product has substantial
307 | commercial, industrial or non-consumer uses, unless such uses represent
308 | the only significant mode of use of the product.
309 |
310 | "Installation Information" for a User Product means any methods,
311 | procedures, authorization keys, or other information required to install
312 | and execute modified versions of a covered work in that User Product from
313 | a modified version of its Corresponding Source. The information must
314 | suffice to ensure that the continued functioning of the modified object
315 | code is in no case prevented or interfered with solely because
316 | modification has been made.
317 |
318 | If you convey an object code work under this section in, or with, or
319 | specifically for use in, a User Product, and the conveying occurs as
320 | part of a transaction in which the right of possession and use of the
321 | User Product is transferred to the recipient in perpetuity or for a
322 | fixed term (regardless of how the transaction is characterized), the
323 | Corresponding Source conveyed under this section must be accompanied
324 | by the Installation Information. But this requirement does not apply
325 | if neither you nor any third party retains the ability to install
326 | modified object code on the User Product (for example, the work has
327 | been installed in ROM).
328 |
329 | The requirement to provide Installation Information does not include a
330 | requirement to continue to provide support service, warranty, or updates
331 | for a work that has been modified or installed by the recipient, or for
332 | the User Product in which it has been modified or installed. Access to a
333 | network may be denied when the modification itself materially and
334 | adversely affects the operation of the network or violates the rules and
335 | protocols for communication across the network.
336 |
337 | Corresponding Source conveyed, and Installation Information provided,
338 | in accord with this section must be in a format that is publicly
339 | documented (and with an implementation available to the public in
340 | source code form), and must require no special password or key for
341 | unpacking, reading or copying.
342 |
343 | 7. Additional Terms.
344 |
345 | "Additional permissions" are terms that supplement the terms of this
346 | License by making exceptions from one or more of its conditions.
347 | Additional permissions that are applicable to the entire Program shall
348 | be treated as though they were included in this License, to the extent
349 | that they are valid under applicable law. If additional permissions
350 | apply only to part of the Program, that part may be used separately
351 | under those permissions, but the entire Program remains governed by
352 | this License without regard to the additional permissions.
353 |
354 | When you convey a copy of a covered work, you may at your option
355 | remove any additional permissions from that copy, or from any part of
356 | it. (Additional permissions may be written to require their own
357 | removal in certain cases when you modify the work.) You may place
358 | additional permissions on material, added by you to a covered work,
359 | for which you have or can give appropriate copyright permission.
360 |
361 | Notwithstanding any other provision of this License, for material you
362 | add to a covered work, you may (if authorized by the copyright holders of
363 | that material) supplement the terms of this License with terms:
364 |
365 | a) Disclaiming warranty or limiting liability differently from the
366 | terms of sections 15 and 16 of this License; or
367 |
368 | b) Requiring preservation of specified reasonable legal notices or
369 | author attributions in that material or in the Appropriate Legal
370 | Notices displayed by works containing it; or
371 |
372 | c) Prohibiting misrepresentation of the origin of that material, or
373 | requiring that modified versions of such material be marked in
374 | reasonable ways as different from the original version; or
375 |
376 | d) Limiting the use for publicity purposes of names of licensors or
377 | authors of the material; or
378 |
379 | e) Declining to grant rights under trademark law for use of some
380 | trade names, trademarks, or service marks; or
381 |
382 | f) Requiring indemnification of licensors and authors of that
383 | material by anyone who conveys the material (or modified versions of
384 | it) with contractual assumptions of liability to the recipient, for
385 | any liability that these contractual assumptions directly impose on
386 | those licensors and authors.
387 |
388 | All other non-permissive additional terms are considered "further
389 | restrictions" within the meaning of section 10. If the Program as you
390 | received it, or any part of it, contains a notice stating that it is
391 | governed by this License along with a term that is a further
392 | restriction, you may remove that term. If a license document contains
393 | a further restriction but permits relicensing or conveying under this
394 | License, you may add to a covered work material governed by the terms
395 | of that license document, provided that the further restriction does
396 | not survive such relicensing or conveying.
397 |
398 | If you add terms to a covered work in accord with this section, you
399 | must place, in the relevant source files, a statement of the
400 | additional terms that apply to those files, or a notice indicating
401 | where to find the applicable terms.
402 |
403 | Additional terms, permissive or non-permissive, may be stated in the
404 | form of a separately written license, or stated as exceptions;
405 | the above requirements apply either way.
406 |
407 | 8. Termination.
408 |
409 | You may not propagate or modify a covered work except as expressly
410 | provided under this License. Any attempt otherwise to propagate or
411 | modify it is void, and will automatically terminate your rights under
412 | this License (including any patent licenses granted under the third
413 | paragraph of section 11).
414 |
415 | However, if you cease all violation of this License, then your
416 | license from a particular copyright holder is reinstated (a)
417 | provisionally, unless and until the copyright holder explicitly and
418 | finally terminates your license, and (b) permanently, if the copyright
419 | holder fails to notify you of the violation by some reasonable means
420 | prior to 60 days after the cessation.
421 |
422 | Moreover, your license from a particular copyright holder is
423 | reinstated permanently if the copyright holder notifies you of the
424 | violation by some reasonable means, this is the first time you have
425 | received notice of violation of this License (for any work) from that
426 | copyright holder, and you cure the violation prior to 30 days after
427 | your receipt of the notice.
428 |
429 | Termination of your rights under this section does not terminate the
430 | licenses of parties who have received copies or rights from you under
431 | this License. If your rights have been terminated and not permanently
432 | reinstated, you do not qualify to receive new licenses for the same
433 | material under section 10.
434 |
435 | 9. Acceptance Not Required for Having Copies.
436 |
437 | You are not required to accept this License in order to receive or
438 | run a copy of the Program. Ancillary propagation of a covered work
439 | occurring solely as a consequence of using peer-to-peer transmission
440 | to receive a copy likewise does not require acceptance. However,
441 | nothing other than this License grants you permission to propagate or
442 | modify any covered work. These actions infringe copyright if you do
443 | not accept this License. Therefore, by modifying or propagating a
444 | covered work, you indicate your acceptance of this License to do so.
445 |
446 | 10. Automatic Licensing of Downstream Recipients.
447 |
448 | Each time you convey a covered work, the recipient automatically
449 | receives a license from the original licensors, to run, modify and
450 | propagate that work, subject to this License. You are not responsible
451 | for enforcing compliance by third parties with this License.
452 |
453 | An "entity transaction" is a transaction transferring control of an
454 | organization, or substantially all assets of one, or subdividing an
455 | organization, or merging organizations. If propagation of a covered
456 | work results from an entity transaction, each party to that
457 | transaction who receives a copy of the work also receives whatever
458 | licenses to the work the party's predecessor in interest had or could
459 | give under the previous paragraph, plus a right to possession of the
460 | Corresponding Source of the work from the predecessor in interest, if
461 | the predecessor has it or can get it with reasonable efforts.
462 |
463 | You may not impose any further restrictions on the exercise of the
464 | rights granted or affirmed under this License. For example, you may
465 | not impose a license fee, royalty, or other charge for exercise of
466 | rights granted under this License, and you may not initiate litigation
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that
468 | any patent claim is infringed by making, using, selling, offering for
469 | sale, or importing the Program or any portion of it.
470 |
471 | 11. Patents.
472 |
473 | A "contributor" is a copyright holder who authorizes use under this
474 | License of the Program or a work on which the Program is based. The
475 | work thus licensed is called the contributor's "contributor version".
476 |
477 | A contributor's "essential patent claims" are all patent claims
478 | owned or controlled by the contributor, whether already acquired or
479 | hereafter acquired, that would be infringed by some manner, permitted
480 | by this License, of making, using, or selling its contributor version,
481 | but do not include claims that would be infringed only as a
482 | consequence of further modification of the contributor version. For
483 | purposes of this definition, "control" includes the right to grant
484 | patent sublicenses in a manner consistent with the requirements of
485 | this License.
486 |
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free
488 | patent license under the contributor's essential patent claims, to
489 | make, use, sell, offer for sale, import and otherwise run, modify and
490 | propagate the contents of its contributor version.
491 |
492 | In the following three paragraphs, a "patent license" is any express
493 | agreement or commitment, however denominated, not to enforce a patent
494 | (such as an express permission to practice a patent or covenant not to
495 | sue for patent infringement). To "grant" such a patent license to a
496 | party means to make such an agreement or commitment not to enforce a
497 | patent against the party.
498 |
499 | If you convey a covered work, knowingly relying on a patent license,
500 | and the Corresponding Source of the work is not available for anyone
501 | to copy, free of charge and under the terms of this License, through a
502 | publicly available network server or other readily accessible means,
503 | then you must either (1) cause the Corresponding Source to be so
504 | available, or (2) arrange to deprive yourself of the benefit of the
505 | patent license for this particular work, or (3) arrange, in a manner
506 | consistent with the requirements of this License, to extend the patent
507 | license to downstream recipients. "Knowingly relying" means you have
508 | actual knowledge that, but for the patent license, your conveying the
509 | covered work in a country, or your recipient's use of the covered work
510 | in a country, would infringe one or more identifiable patents in that
511 | country that you have reason to believe are valid.
512 |
513 | If, pursuant to or in connection with a single transaction or
514 | arrangement, you convey, or propagate by procuring conveyance of, a
515 | covered work, and grant a patent license to some of the parties
516 | receiving the covered work authorizing them to use, propagate, modify
517 | or convey a specific copy of the covered work, then the patent license
518 | you grant is automatically extended to all recipients of the covered
519 | work and works based on it.
520 |
521 | A patent license is "discriminatory" if it does not include within
522 | the scope of its coverage, prohibits the exercise of, or is
523 | conditioned on the non-exercise of one or more of the rights that are
524 | specifically granted under this License. You may not convey a covered
525 | work if you are a party to an arrangement with a third party that is
526 | in the business of distributing software, under which you make payment
527 | to the third party based on the extent of your activity of conveying
528 | the work, and under which the third party grants, to any of the
529 | parties who would receive the covered work from you, a discriminatory
530 | patent license (a) in connection with copies of the covered work
531 | conveyed by you (or copies made from those copies), or (b) primarily
532 | for and in connection with specific products or compilations that
533 | contain the covered work, unless you entered into that arrangement,
534 | or that patent license was granted, prior to 28 March 2007.
535 |
536 | Nothing in this License shall be construed as excluding or limiting
537 | any implied license or other defenses to infringement that may
538 | otherwise be available to you under applicable patent law.
539 |
540 | 12. No Surrender of Others' Freedom.
541 |
542 | If conditions are imposed on you (whether by court order, agreement or
543 | otherwise) that contradict the conditions of this License, they do not
544 | excuse you from the conditions of this License. If you cannot convey a
545 | covered work so as to satisfy simultaneously your obligations under this
546 | License and any other pertinent obligations, then as a consequence you may
547 | not convey it at all. For example, if you agree to terms that obligate you
548 | to collect a royalty for further conveying from those to whom you convey
549 | the Program, the only way you could satisfy both those terms and this
550 | License would be to refrain entirely from conveying the Program.
551 |
552 | 13. Use with the GNU Affero General Public License.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU Affero General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the special requirements of the GNU Affero General Public License,
560 | section 13, concerning interaction through a network will apply to the
561 | combination as such.
562 |
563 | 14. Revised Versions of this License.
564 |
565 | The Free Software Foundation may publish revised and/or new versions of
566 | the GNU General Public License from time to time. Such new versions will
567 | be similar in spirit to the present version, but may differ in detail to
568 | address new problems or concerns.
569 |
570 | Each version is given a distinguishing version number. If the
571 | Program specifies that a certain numbered version of the GNU General
572 | Public License "or any later version" applies to it, you have the
573 | option of following the terms and conditions either of that numbered
574 | version or of any later version published by the Free Software
575 | Foundation. If the Program does not specify a version number of the
576 | GNU General Public License, you may choose any version ever published
577 | by the Free Software Foundation.
578 |
579 | If the Program specifies that a proxy can decide which future
580 | versions of the GNU General Public License can be used, that proxy's
581 | public statement of acceptance of a version permanently authorizes you
582 | to choose that version for the Program.
583 |
584 | Later license versions may give you additional or different
585 | permissions. However, no additional obligations are imposed on any
586 | author or copyright holder as a result of your choosing to follow a
587 | later version.
588 |
589 | 15. Disclaimer of Warranty.
590 |
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599 |
600 | 16. Limitation of Liability.
601 |
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610 | SUCH DAMAGES.
611 |
612 | 17. Interpretation of Sections 15 and 16.
613 |
614 | If the disclaimer of warranty and limitation of liability provided
615 | above cannot be given local legal effect according to their terms,
616 | reviewing courts shall apply local law that most closely approximates
617 | an absolute waiver of all civil liability in connection with the
618 | Program, unless a warranty or assumption of liability accompanies a
619 | copy of the Program in return for a fee.
620 |
621 | END OF TERMS AND CONDITIONS
622 |
623 | How to Apply These Terms to Your New Programs
624 |
625 | If you develop a new program, and you want it to be of the greatest
626 | possible use to the public, the best way to achieve this is to make it
627 | free software which everyone can redistribute and change under these terms.
628 |
629 | To do so, attach the following notices to the program. It is safest
630 | to attach them to the start of each source file to most effectively
631 | state the exclusion of warranty; and each file should have at least
632 | the "copyright" line and a pointer to where the full notice is found.
633 |
634 |
635 | Copyright (C)
636 |
637 | This program is free software: you can redistribute it and/or modify
638 | it under the terms of the GNU General Public License as published by
639 | the Free Software Foundation, either version 3 of the License, or
640 | (at your option) any later version.
641 |
642 | This program is distributed in the hope that it will be useful,
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645 | GNU General Public License for more details.
646 |
647 | You should have received a copy of the GNU General Public License
648 | along with this program. If not, see .
649 |
650 | Also add information on how to contact you by electronic and paper mail.
651 |
652 | If the program does terminal interaction, make it output a short
653 | notice like this when it starts in an interactive mode:
654 |
655 | Copyright (C)
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 | This is free software, and you are welcome to redistribute it
658 | under certain conditions; type `show c' for details.
659 |
660 | The hypothetical commands `show w' and `show c' should show the appropriate
661 | parts of the General Public License. Of course, your program's commands
662 | might be different; for a GUI interface, you would use an "about box".
663 |
664 | You should also get your employer (if you work as a programmer) or school,
665 | if any, to sign a "copyright disclaimer" for the program, if necessary.
666 | For more information on this, and how to apply and follow the GNU GPL, see
667 | .
668 |
669 | The GNU General Public License does not permit incorporating your program
670 | into proprietary programs. If your program is a subroutine library, you
671 | may consider it more useful to permit linking proprietary applications with
672 | the library. If this is what you want to do, use the GNU Lesser General
673 | Public License instead of this License. But first, please read
674 | .
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Memos
2 |
3 | 一个碎片化知识记录工具。
4 |
5 | 私有化部署请参考:[docker image](https://hub.docker.com/r/neosmemo/memos)
6 |
7 | ---
8 |
9 | 为何做这个?
10 |
11 | - 用于记录:📅 每日/周计划、💡 突发奇想、📕 读后感...
12 | - 代替了我在微信上经常使用的“文件传输助手”;
13 | - 打造一个属于自己的轻量化“卡片”笔记簿;
14 |
15 | 有何特点呢?
16 |
17 | - ✨ 开源项目;
18 | - 😋 精美且细节的视觉样式;
19 | - 📑 体验优良的交互逻辑;
20 |
21 | ---
22 |
23 | Enjoy it and have fun~
24 |
--------------------------------------------------------------------------------
/controllers/github.ts:
--------------------------------------------------------------------------------
1 | import { Context } from "koa";
2 | import axios from "axios";
3 | import querystring from "querystring";
4 | import { githubOAuthConfig } from "../helpers/config";
5 | import utils from "../helpers/utils";
6 | import { UserModel } from "../models/UserModel";
7 |
8 | interface GithubUserInfo {
9 | id: number;
10 | login: string;
11 | name: string;
12 | }
13 |
14 | export namespace GithubController {
15 | export async function oauth(ctx: Context) {
16 | const { code } = ctx.query;
17 | const tokenRes = await axios.get(
18 | `https://github.com/login/oauth/access_token?client_id=${githubOAuthConfig.clientId}&client_secret=${githubOAuthConfig.clientSecret}&code=${code}`
19 | );
20 | const accessToken = querystring.parse(tokenRes.data).access_token as string;
21 |
22 | if (!accessToken) {
23 | throw new Error("20010");
24 | }
25 |
26 | const ghUserRes = await axios.get(`https://api.github.com/user`, {
27 | headers: {
28 | Authorization: "token " + accessToken,
29 | },
30 | });
31 | const ghUser = ghUserRes.data as GithubUserInfo;
32 |
33 | if (!ghUser) {
34 | throw new Error("20010");
35 | }
36 |
37 | // 如果已经登录,则更新绑定信息
38 | const userId = ctx.session?.userId as string;
39 |
40 | if (userId) {
41 | const githubNameUsable = await UserModel.checkGithubnameUsable(ghUser.login);
42 | if (!githubNameUsable) {
43 | throw new Error("20011");
44 | }
45 | await UserModel.updateUser(userId, undefined, undefined, ghUser.login);
46 | }
47 |
48 | let user = await UserModel.getUserByGhName(ghUser.login);
49 |
50 | if (user === null) {
51 | // 创建新用户,防止用户名重复
52 | let username = ghUser.name;
53 | let usernameUsable = await UserModel.checkUsernameUsable(username);
54 | while (!usernameUsable) {
55 | username = ghUser.name + utils.genUUID();
56 | usernameUsable = await UserModel.checkUsernameUsable(username);
57 | }
58 | user = await UserModel.createUser(username, username, ghUser.login);
59 | }
60 |
61 | ctx.session!.userId = user.id;
62 |
63 | ctx.redirect(githubOAuthConfig.redirectUri);
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/controllers/memo.ts:
--------------------------------------------------------------------------------
1 | import { Context } from "koa";
2 | import utils from "../helpers/utils";
3 | import { MemoModel } from "../models/MemoModel";
4 |
5 | export namespace MemoController {
6 | // example: /api/memo/all
7 | export async function getAllMemos(ctx: Context) {
8 | const userId = ctx.session?.userId as string;
9 | const memos = await MemoModel.getAllMemosByUserId(userId);
10 |
11 | ctx.body = {
12 | succeed: true,
13 | data: memos,
14 | };
15 | }
16 |
17 | export async function getDeletedMemos(ctx: Context) {
18 | const userId = ctx.session?.userId as string;
19 |
20 | const memos: any[] = await MemoModel.getDeletedMemosByUserId(userId);
21 |
22 | ctx.body = {
23 | succeed: true,
24 | data: memos,
25 | };
26 | }
27 |
28 | // get memo by id
29 | export async function getMemoById(ctx: Context) {
30 | const { id } = ctx.query;
31 |
32 | if (!utils.isString(id)) {
33 | throw new Error("30001");
34 | }
35 |
36 | const memo = await MemoModel.getMemoById(id as string);
37 |
38 | ctx.body = {
39 | succeed: true,
40 | data: memo,
41 | };
42 | }
43 |
44 | // get linked memos
45 | export async function getLinkedMemosById(ctx: Context) {
46 | const userId = ctx.session?.userId as string;
47 | const { memoId } = ctx.query;
48 |
49 | if (!utils.isString(memoId)) {
50 | throw new Error("30001");
51 | }
52 |
53 | const memos = await MemoModel.getLinkedMemosById(userId, memoId as string);
54 |
55 | ctx.body = {
56 | succeed: true,
57 | data: memos,
58 | };
59 | }
60 |
61 | // create memo
62 | export async function createMemo(ctx: Context) {
63 | const userId = ctx.session?.userId as string;
64 | const { content } = ctx.request.body;
65 |
66 | if (!utils.isString(content)) {
67 | throw new Error("30001");
68 | }
69 |
70 | const memo = await MemoModel.createMemo(userId, content);
71 |
72 | ctx.body = {
73 | succeed: true,
74 | data: memo,
75 | };
76 | }
77 |
78 | export async function hideMemo(ctx: Context) {
79 | const { memoId } = ctx.request.body;
80 |
81 | if (!utils.isString(memoId)) {
82 | throw new Error("30001");
83 | }
84 |
85 | try {
86 | const nowTimeStr = utils.getDateTimeString(Date.now());
87 | await MemoModel.updateMemoDeletedAt(memoId, nowTimeStr);
88 | } catch (error) {
89 | throw new Error("50002");
90 | }
91 |
92 | ctx.body = {
93 | succeed: true,
94 | message: "delete memo succeed",
95 | };
96 | }
97 |
98 | export async function restoreMemo(ctx: Context) {
99 | const { memoId } = ctx.request.body;
100 |
101 | if (!utils.isString(memoId)) {
102 | throw new Error("30001");
103 | }
104 |
105 | try {
106 | await MemoModel.updateMemoDeletedAt(memoId, null);
107 | } catch (error) {
108 | throw new Error("50002");
109 | }
110 |
111 | ctx.body = {
112 | succeed: true,
113 | message: "delete memo succeed",
114 | };
115 | }
116 |
117 | export async function deleteMemo(ctx: Context) {
118 | const { memoId } = ctx.request.body;
119 |
120 | if (!utils.isString(memoId)) {
121 | throw new Error("30001");
122 | }
123 |
124 | try {
125 | await MemoModel.deleteMemoByID(memoId);
126 | } catch (error) {
127 | throw new Error("50002");
128 | }
129 |
130 | ctx.body = {
131 | succeed: true,
132 | message: "delete memo succeed",
133 | };
134 | }
135 |
136 | export async function updateMemo(ctx: Context) {
137 | const { memoId, content } = ctx.request.body;
138 |
139 | if (!utils.isString(memoId) || !utils.isString(content)) {
140 | throw new Error("30001");
141 | }
142 |
143 | const result = await MemoModel.updateMemoContent(memoId, content);
144 | if (!result) {
145 | throw new Error("50002");
146 | }
147 |
148 | const data: IterObject = {
149 | id: memoId,
150 | content,
151 | };
152 |
153 | ctx.body = {
154 | succeed: true,
155 | message: "update memo content succeed",
156 | data,
157 | };
158 | }
159 | }
160 |
--------------------------------------------------------------------------------
/controllers/query.ts:
--------------------------------------------------------------------------------
1 | import { Context } from "koa";
2 | import utils from "../helpers/utils";
3 | import { QueryModel } from "../models/QueryModel";
4 |
5 | export namespace QueryController {
6 | // create query
7 | export async function createQuery(ctx: Context) {
8 | const userId = ctx.session?.userId as string;
9 | const { querystring, title } = ctx.request.body;
10 |
11 | if (!utils.isString(querystring) || !utils.isString(title)) {
12 | throw new Error("30001");
13 | }
14 |
15 | if (title === "" || querystring === "") {
16 | throw new Error("30001");
17 | }
18 |
19 | let query = await QueryModel.getQueryByText(userId, querystring);
20 | if (!query) {
21 | query = await QueryModel.createQuery(userId, title, querystring);
22 | }
23 |
24 | ctx.body = {
25 | succeed: true,
26 | data: query,
27 | };
28 | }
29 |
30 | export async function pinQuery(ctx: Context) {
31 | const { queryId } = ctx.request.body;
32 |
33 | if (!utils.isString(queryId)) {
34 | throw new Error("30001");
35 | }
36 |
37 | const result = await QueryModel.pinQuery(queryId);
38 |
39 | ctx.body = {
40 | succeed: true,
41 | data: result,
42 | };
43 | }
44 |
45 | export async function unpinQuery(ctx: Context) {
46 | const { queryId } = ctx.request.body;
47 |
48 | if (!utils.isString(queryId)) {
49 | throw new Error("30001");
50 | }
51 |
52 | const result = await QueryModel.unpinQuery(queryId);
53 |
54 | ctx.body = {
55 | succeed: true,
56 | data: result,
57 | };
58 | }
59 |
60 | // update query
61 | export async function updateQuery(ctx: Context) {
62 | const { queryId, querystring, title } = ctx.request.body;
63 |
64 | if (!utils.isString(queryId) || !utils.isString(querystring) || !utils.isString(title)) {
65 | throw new Error("30001");
66 | }
67 |
68 | if (queryId === "" || title === "" || querystring === "") {
69 | throw new Error("30001");
70 | }
71 |
72 | await QueryModel.updateQuery(queryId, title, querystring);
73 | const query = await QueryModel.getQueryById(queryId);
74 |
75 | ctx.body = {
76 | succeed: true,
77 | data: query,
78 | };
79 | }
80 |
81 | // get my queries
82 | export async function getMyQueries(ctx: Context) {
83 | const userId = ctx.session?.userId as string;
84 |
85 | const queries = await QueryModel.getQueriesByUserId(userId);
86 |
87 | ctx.body = {
88 | succeed: true,
89 | data: queries,
90 | };
91 | }
92 |
93 | // delete query
94 | export async function deleteQueryById(ctx: Context) {
95 | const { queryId } = ctx.request.body;
96 |
97 | if (!utils.isString(queryId)) {
98 | throw new Error("30001");
99 | }
100 |
101 | await QueryModel.deleteQueryById(queryId);
102 |
103 | ctx.body = {
104 | succeed: true,
105 | data: true,
106 | };
107 | }
108 | }
109 |
--------------------------------------------------------------------------------
/controllers/user.ts:
--------------------------------------------------------------------------------
1 | import { Context } from "koa";
2 | import { UserModel } from "../models/UserModel";
3 |
4 | export namespace UserController {
5 | /**
6 | * Get my userinfo
7 | * use for check sign in status
8 | */
9 | export async function getMyUserInfo(ctx: Context) {
10 | const userId = ctx.session?.userId as string;
11 | const userinfo = await UserModel.getUserInfoById(userId);
12 |
13 | if (!userinfo) {
14 | ctx.body = {
15 | succeed: false,
16 | };
17 | return;
18 | }
19 |
20 | // 数据去敏
21 | const data = userinfo as IterObject;
22 | delete data.password;
23 |
24 | ctx.body = {
25 | succeed: true,
26 | data,
27 | };
28 | }
29 |
30 | export async function signup(ctx: Context) {
31 | const { username, password } = ctx.request.body;
32 |
33 | if (!username || !password) {
34 | throw new Error("30001");
35 | }
36 |
37 | const usernameUsable = await UserModel.checkUsernameUsable(username);
38 | if (!usernameUsable) {
39 | throw new Error("20002");
40 | }
41 |
42 | const user = await UserModel.createUser(username, password);
43 |
44 | if (!user) {
45 | throw new Error("20003");
46 | }
47 |
48 | ctx.session!.userId = user.id;
49 |
50 | ctx.body = {
51 | succeed: true,
52 | message: "sign up succeed",
53 | };
54 | }
55 |
56 | export async function signin(ctx: Context) {
57 | const { username, password } = ctx.request.body;
58 |
59 | if (!username || !password) {
60 | throw new Error("30001");
61 | }
62 |
63 | const user = await UserModel.validSigninInfo(username, password);
64 |
65 | if (!user) {
66 | throw new Error("20004");
67 | }
68 |
69 | ctx.session!.userId = user.id;
70 |
71 | ctx.body = {
72 | succeed: true,
73 | message: "sign in succeed",
74 | };
75 | }
76 |
77 | export async function signout(ctx: Context) {
78 | ctx.session!.userId = null;
79 |
80 | ctx.body = {
81 | succeed: true,
82 | message: "sign out succeed",
83 | };
84 | }
85 |
86 | export async function checkUsernameUsable(ctx: Context) {
87 | const { username } = ctx.query;
88 |
89 | if (!username) {
90 | throw new Error("30001");
91 | }
92 |
93 | const usernameUsable = await UserModel.checkUsernameUsable(username as string);
94 |
95 | ctx.body = {
96 | succeed: true,
97 | data: usernameUsable,
98 | };
99 | }
100 |
101 | export async function update(ctx: Context) {
102 | const userId = ctx.session?.userId as string;
103 | const { username, password, githubName, wxUserId } = ctx.request.body;
104 |
105 | await UserModel.updateUser(userId, username, password, githubName, wxUserId);
106 |
107 | ctx.body = {
108 | succeed: true,
109 | message: "update succeed",
110 | };
111 | }
112 |
113 | export async function checkPassword(ctx: Context) {
114 | const userId = ctx.session?.userId as string;
115 | const { password } = ctx.request.body;
116 |
117 | if (!password) {
118 | throw new Error("30001");
119 | }
120 |
121 | const isValid = await UserModel.validPassword(userId, password as string);
122 |
123 | ctx.body = {
124 | succeed: true,
125 | data: isValid,
126 | };
127 | }
128 | }
129 |
--------------------------------------------------------------------------------
/controllers/wx.ts:
--------------------------------------------------------------------------------
1 | import { Context } from "koa";
2 | import { parseStringPromise } from "xml2js";
3 | import utils from "../helpers/utils";
4 | import { MemoModel } from "../models/MemoModel";
5 | import { UserModel } from "../models/UserModel";
6 |
7 | const TOKEN = "insmemo0justsven0top";
8 |
9 | export namespace WxController {
10 | export async function validate(ctx: Context) {
11 | const signature = ctx.query.signature;
12 | const timestamp = ctx.query.timestamp;
13 | const echostr = ctx.query.echostr;
14 | const nonce = ctx.query.nonce;
15 |
16 | const original = [nonce, timestamp, TOKEN].sort().join("");
17 | const sha1Code = utils.getInsecureSHA1ofStr(original);
18 |
19 | if (signature === sha1Code) {
20 | ctx.body = echostr;
21 | } else {
22 | ctx.body = "wx validate error";
23 | }
24 | }
25 |
26 | export async function handleWxMessage(ctx: Context) {
27 | const data = await parseStringPromise(ctx.request.body, {
28 | explicitArray: false,
29 | explicitRoot: false,
30 | });
31 |
32 | let responseContent = "";
33 | let userId = "";
34 | let accountId = "";
35 |
36 | if (data) {
37 | const wxUserId = data.FromUserName;
38 | userId = wxUserId;
39 | accountId = data.ToUserName;
40 |
41 | try {
42 | const user = await UserModel.getUserByWxUserId(wxUserId);
43 | if (user) {
44 | const msgType = data.MsgType;
45 | let content = "";
46 |
47 | if (msgType === "text") {
48 | content = data.Content;
49 | } else if (msgType === "image") {
50 | content = data.PicUrl;
51 | } else if (msgType === "voice") {
52 | content = data.Recognition;
53 | } else if (msgType === "link") {
54 | const title = data.Title;
55 | const description = data.Description;
56 | const url = data.Url;
57 | content = `${title}\n${description}\n${url}`;
58 | }
59 |
60 | if (content) {
61 | await MemoModel.createMemo(user.id, content);
62 | responseContent = `保存成功 🎉`;
63 | }
64 | } else {
65 | responseContent = `请先绑定微信 id:${wxUserId}。`;
66 | }
67 | } catch (error) {
68 | responseContent = `Error: ${error}`;
69 | }
70 | } else {
71 | ctx.body = {
72 | success: false,
73 | msg: "data is null",
74 | };
75 | return;
76 | }
77 |
78 | ctx.type = "application/xml";
79 | ctx.method = "GET";
80 | ctx.body = getWxApplyMsgXML(userId, accountId, responseContent);
81 | }
82 |
83 | function getWxApplyMsgXML(toUser: string, fromUser: string, content: string) {
84 | const time = Math.round(new Date().getTime() / 1000);
85 |
86 | return `${time}`;
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/helpers/DBHelper.ts:
--------------------------------------------------------------------------------
1 | import { accessSync } from "fs";
2 | import sqlite3 from "sqlite3";
3 | import utils from "./utils";
4 |
5 | // JUST FOR DEV
6 | const devDbFile = "/Users/sli4/Downloads/data/memos.db";
7 | const userDbFile = process.env.NODE_ENV === "dev" ? devDbFile : "/data/memos.db";
8 |
9 | function getDbInstance() {
10 | let temp: sqlite3.Database;
11 |
12 | try {
13 | accessSync(userDbFile);
14 | temp = new sqlite3.Database(userDbFile, (err) => {
15 | if (err) {
16 | console.error(err.message);
17 | } else {
18 | console.log("Connected to the user database.");
19 | }
20 | });
21 | } catch (error) {
22 | console.log("/data/memo.db file not exist");
23 | throw "/data/memo.db file not exist";
24 | }
25 |
26 | return temp;
27 | }
28 |
29 | let db = getDbInstance();
30 |
31 | function parseResult(result: any): BasicType {
32 | if (result instanceof Array) {
33 | const parsedResult = [];
34 |
35 | for (const data of result) {
36 | parsedResult.push(parseResult(data));
37 | }
38 |
39 | return parsedResult;
40 | } else if (result instanceof Object) {
41 | const keys = Object.keys(result).map((k) => utils.snakeToCamelCase(k));
42 | const vals = Object.values(result);
43 | const d: IterObject = {};
44 |
45 | for (let i = 0; i < keys.length; ++i) {
46 | d[keys[i]] = vals[i];
47 | }
48 |
49 | return d;
50 | } else {
51 | return null;
52 | }
53 | }
54 |
55 | export default {
56 | run: (sql: string, parms: any[]): Promise => {
57 | if (!db) {
58 | db = getDbInstance();
59 | }
60 | return new Promise((resolve, reject) => {
61 | db.serialize(() => {
62 | db.run(sql, parms, (err) => {
63 | if (err) {
64 | reject(err);
65 | } else {
66 | resolve(true);
67 | }
68 | });
69 | });
70 | });
71 | },
72 | all: (sql: string, parms: any[]): Promise => {
73 | if (!db) {
74 | db = getDbInstance();
75 | }
76 | return new Promise((resolve, reject) => {
77 | db.serialize(() => {
78 | db.all(sql, parms, (err, rows) => {
79 | if (err) {
80 | reject(err);
81 | } else {
82 | resolve(parseResult(rows) as T);
83 | }
84 | });
85 | });
86 | });
87 | },
88 | get: (sql: string, parms: any[]): Promise => {
89 | if (!db) {
90 | db = getDbInstance();
91 | }
92 | return new Promise((resolve, reject) => {
93 | db.serialize(() => {
94 | db.get(sql, parms, (err, row) => {
95 | if (err) {
96 | reject(err);
97 | } else {
98 | resolve(parseResult(row) as T | null);
99 | }
100 | });
101 | });
102 | });
103 | },
104 | };
105 |
--------------------------------------------------------------------------------
/helpers/Error.ts:
--------------------------------------------------------------------------------
1 | const Errors: IterObject = {
2 | "20001": "请先登录",
3 | "20002": "用户名不可用",
4 | "20003": "注册失败,请稍候再试",
5 | "20004": "登录失败,请检查账号密码是否正确",
6 | "20010": "GitHub 服务错误",
7 | "20011": "GitHub 已被绑定",
8 |
9 | // 客户端请求数据格式错误
10 | "30001": "请求数据错误",
11 |
12 | "40001": "未知领域的错误",
13 |
14 | // 服务端出错
15 | "50001": "服务器出错啦,请稍候再试",
16 | "50002": "数据库挂啦,请稍候再试",
17 | };
18 | const ErrorCode = Object.keys(Errors);
19 |
20 | export function getErrorInfo(code: string) {
21 | if (!ErrorCode.includes(code)) {
22 | code = "40001";
23 | }
24 | const statusCode = parseInt(code.slice(0, 3));
25 |
26 | return {
27 | statusCode,
28 | message: Errors[code],
29 | };
30 | }
31 |
--------------------------------------------------------------------------------
/helpers/config.ts:
--------------------------------------------------------------------------------
1 | export const githubOAuthConfig = {
2 | clientId: process.env.GH_CLIENT_ID || "187ba36888f152b06612",
3 | clientSecret: process.env.GH_CLIENT_SECRET || "10b6fec4146cbb7bdf64016b3cf0905366a35041",
4 | redirectUri: process.env.GH_REDIRECT_URI || "https://memos.justsven.top/",
5 | };
6 |
--------------------------------------------------------------------------------
/helpers/utils.ts:
--------------------------------------------------------------------------------
1 | import crypto from "crypto";
2 | import { generate } from "short-uuid";
3 |
4 | namespace utils {
5 | /**
6 | * generate uuid
7 | * @returns uuid
8 | */
9 | export function genUUID(): string {
10 | return generate();
11 | }
12 |
13 | export function getNowTimeStamp(): TimeStamp {
14 | return Date.now();
15 | }
16 |
17 | export function getTimeStampByDate(t: Date | number | string): number {
18 | if (typeof t === "string") {
19 | t = t.replaceAll("-", "/");
20 | }
21 | const d = new Date(t);
22 |
23 | return d.getTime();
24 | }
25 |
26 | export function getDateStampByDate(t: Date | number | string): number {
27 | const d = new Date(getTimeStampByDate(t));
28 |
29 | return new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();
30 | }
31 |
32 | export function getDateString(t: Date | number | string): string {
33 | const d = new Date(getTimeStampByDate(t));
34 |
35 | const year = d.getFullYear();
36 | const month = d.getMonth() + 1;
37 | const date = d.getDate();
38 |
39 | return `${year}/${month}/${date}`;
40 | }
41 |
42 | export function getTimeString(t: Date | number | string): string {
43 | const d = new Date(getTimeStampByDate(t));
44 |
45 | const hours = d.getHours();
46 | const mins = d.getMinutes();
47 |
48 | const hoursStr = hours < 10 ? "0" + hours : hours;
49 | const minsStr = mins < 10 ? "0" + mins : mins;
50 |
51 | return `${hoursStr}:${minsStr}`;
52 | }
53 |
54 | // For example: 2021-4-8 17:52:17
55 | export function getDateTimeString(t: Date | number | string): string {
56 | const d = new Date(getTimeStampByDate(t));
57 |
58 | const year = d.getFullYear();
59 | const month = d.getMonth() + 1;
60 | const date = d.getDate();
61 | const hours = d.getHours();
62 | const mins = d.getMinutes();
63 | const secs = d.getSeconds();
64 |
65 | const monthStr = month < 10 ? "0" + month : month;
66 | const dateStr = date < 10 ? "0" + date : date;
67 | const hoursStr = hours < 10 ? "0" + hours : hours;
68 | const minsStr = mins < 10 ? "0" + mins : mins;
69 | const secsStr = secs < 10 ? "0" + secs : secs;
70 |
71 | return `${year}/${monthStr}/${dateStr} ${hoursStr}:${minsStr}:${secsStr}`;
72 | }
73 |
74 | export function isString(s: any): boolean {
75 | return typeof s === "string";
76 | }
77 |
78 | export function snakeToCamelCase(s: string): string {
79 | const keys = s.split("_").map((k) => toFirstUpperCase(k));
80 |
81 | return toFirstLowerCase(keys.join(""));
82 | }
83 |
84 | export function toFirstUpperCase(s: string): string {
85 | return s.replace(/^[a-z]/g, (c) => c.toUpperCase());
86 | }
87 |
88 | export function toFirstLowerCase(s: string): string {
89 | return s.replace(/^[A-Z]/g, (c) => c.toLowerCase());
90 | }
91 |
92 | export function getInsecureSHA1ofStr(str: string) {
93 | return crypto.createHash("sha1").update(str).digest("hex");
94 | }
95 | }
96 |
97 | export default utils;
98 |
--------------------------------------------------------------------------------
/middlewares/authCheck.ts:
--------------------------------------------------------------------------------
1 | import { Context, Next } from "koa";
2 |
3 | export async function validSigninCookie(ctx: Context, next: Next) {
4 | const userId = ctx.session?.userId ?? "";
5 |
6 | if (!Boolean(userId)) {
7 | throw new Error("20001");
8 | }
9 |
10 | await next();
11 | }
12 |
--------------------------------------------------------------------------------
/middlewares/errorHandler.ts:
--------------------------------------------------------------------------------
1 | import { Context, Next } from "koa";
2 | import { getErrorInfo } from "../helpers/Error";
3 |
4 | export async function errorHandler(ctx: Context, next: Next) {
5 | try {
6 | await next();
7 | } catch (error: any) {
8 | const errorInfo = getErrorInfo(error.message);
9 |
10 | ctx.status = errorInfo.statusCode;
11 | ctx.body = {
12 | succeed: false,
13 | status: errorInfo.statusCode ?? 500,
14 | message: `${errorInfo.message}`,
15 | data: null,
16 | };
17 | console.error("Error handler:", error.message, errorInfo);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/models/MemoModel.ts:
--------------------------------------------------------------------------------
1 | import DB from "../helpers/DBHelper";
2 | import utils from "../helpers/utils";
3 |
4 | interface MemoType {
5 | id: string;
6 | content: string;
7 | userId: string;
8 | createdAt: string;
9 | updatedAt: string;
10 | deletedAt?: string;
11 | }
12 |
13 | export namespace MemoModel {
14 | export async function createMemo(userId: string, content: string): Promise {
15 | const sql = `INSERT INTO memos (id, content, user_id, created_at, updated_at) VALUES (?, ?, ?, ?, ?)`;
16 | const nowTimeStr = utils.getDateTimeString(Date.now());
17 | const memo: MemoType = {
18 | id: utils.genUUID(),
19 | content,
20 | userId,
21 | createdAt: nowTimeStr,
22 | updatedAt: nowTimeStr,
23 | };
24 |
25 | await DB.run(sql, Object.values(memo));
26 | return memo;
27 | }
28 |
29 | export async function countMemosByUserId(userId: string): Promise {
30 | const sql = `SELECT COUNT(*) as count FROM memos WHERE user_id=?`;
31 |
32 | const data = await DB.get(sql, [userId]);
33 | if (data === null) {
34 | return 0;
35 | } else {
36 | return data.count as number;
37 | }
38 | }
39 |
40 | export async function getAllMemosByUserId(userId: string): Promise {
41 | const sql = `SELECT id, content, created_at, updated_at, deleted_at FROM memos WHERE user_id=? AND deleted_at IS NULL ORDER BY created_at DESC`;
42 |
43 | const data = await DB.all(sql, [userId]);
44 | return data;
45 | }
46 |
47 | export async function getMemosByUserId(userId: string, offset: number, amount: number = 20): Promise {
48 | const sql = `SELECT * FROM memos WHERE user_id=? AND deleted_at IS NULL ORDER BY created_at DESC LIMIT ${amount} OFFSET ${offset}`;
49 |
50 | const data = await DB.all(sql, [userId]);
51 | return data;
52 | }
53 |
54 | export async function getDeletedMemosByUserId(userId: string): Promise {
55 | const sql = `SELECT * FROM memos WHERE user_id=? AND deleted_at IS NOT NULL ORDER BY deleted_at DESC`;
56 |
57 | const data = await DB.all(sql, [userId]);
58 | return data;
59 | }
60 |
61 | export async function getMemosWithDuration(userId: string, from: Date, to: Date): Promise {
62 | const sql = `
63 | SELECT * FROM memos
64 | WHERE
65 | user_id=?
66 | ${Boolean(from) ? "AND created_at > '" + utils.getDateTimeString(from) + "'" : ""}
67 | ${Boolean(to) ? "AND created_at < '" + utils.getDateTimeString(to) + "'" : ""}
68 | ORDER BY created_at
69 | DESC
70 | `;
71 |
72 | const data = await DB.all(sql, [userId]);
73 | return data;
74 | }
75 |
76 | export async function getMemoById(id: string): Promise {
77 | const sql = `SELECT * FROM memos WHERE id=?`;
78 |
79 | const data = await DB.get(sql, [id]);
80 | return data;
81 | }
82 |
83 | export async function getLinkedMemosById(userId: string, memoId: string): Promise {
84 | const sql = `SELECT * FROM memos WHERE user_id=? AND content LIKE '%[@%](${memoId})%'`;
85 | const data = await DB.all(sql, [userId]);
86 | return data;
87 | }
88 |
89 | export async function updateMemoContent(memoId: string, content: string): Promise {
90 | const sql = `UPDATE memos SET content=?, updated_at=? WHERE id=?`;
91 | const nowTimeStr = utils.getDateTimeString(Date.now());
92 |
93 | await DB.run(sql, [content, nowTimeStr, memoId]);
94 | return true;
95 | }
96 |
97 | export async function deleteMemoByID(memoId: string): Promise {
98 | const sql = `DELETE FROM memos WHERE id=?`;
99 |
100 | await DB.run(sql, [memoId]);
101 | return true;
102 | }
103 |
104 | export async function updateMemoDeletedAt(memoId: string, deletedAtStr: string | null): Promise {
105 | const sql = `UPDATE memos SET deleted_at=? WHERE id=?`;
106 |
107 | const data = await DB.all(sql, [deletedAtStr, memoId]);
108 | return data;
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/models/QueryModel.ts:
--------------------------------------------------------------------------------
1 | import DB from "../helpers/DBHelper";
2 | import utils from "../helpers/utils";
3 |
4 | interface QueryType {
5 | id: string;
6 | userId: string;
7 | title: string;
8 | querystring: string;
9 | createdAt: string;
10 | updatedAt: string;
11 | pinnedAt?: string;
12 | }
13 |
14 | export namespace QueryModel {
15 | /**
16 | * create query
17 | * @param userId
18 | * @param text
19 | */
20 | export async function createQuery(userId: string, title: string, querystring: string): Promise {
21 | const nowTimeStr = utils.getDateTimeString(Date.now());
22 | const query: QueryType = {
23 | id: utils.genUUID(),
24 | userId,
25 | title,
26 | querystring,
27 | createdAt: nowTimeStr,
28 | updatedAt: nowTimeStr,
29 | };
30 | const sql = `INSERT INTO queries (id, user_id, title, querystring, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)`;
31 |
32 | await DB.run(sql, Object.values(query));
33 | return query;
34 | }
35 |
36 | export async function pinQuery(queryId: string): Promise {
37 | const nowTimeStr = utils.getDateTimeString(Date.now());
38 | const sql = `UPDATE queries SET pinned_at=? WHERE id=?`;
39 |
40 | await DB.run(sql, [nowTimeStr, queryId]);
41 | return true;
42 | }
43 |
44 | export async function unpinQuery(queryId: string): Promise {
45 | const sql = `UPDATE queries SET pinned_at=NULL WHERE id=?`;
46 |
47 | await DB.run(sql, [queryId]);
48 | return true;
49 | }
50 |
51 | export async function getQueriesByUserId(userId: string): Promise {
52 | const sql = `SELECT id, title, querystring, created_at, pinned_at FROM queries WHERE user_id=?`;
53 |
54 | const data = await DB.all(sql, [userId]);
55 | return data;
56 | }
57 |
58 | export async function getQueryById(id: string): Promise {
59 | const sql = `SELECT * FROM queries WHERE id=?`;
60 |
61 | const data = await DB.get(sql, [id]);
62 | return data;
63 | }
64 |
65 | export async function getQueryByText(userId: string, text: string): Promise {
66 | const sql = `SELECT * FROM queries WHERE user_id=? AND querystring=?`;
67 |
68 | const data = await DB.get(sql, [userId, text]);
69 | return data;
70 | }
71 |
72 | export async function updateQuery(id: string, title: string, querystring: string): Promise {
73 | const nowTimeStr = utils.getDateTimeString(Date.now());
74 | const sql = `UPDATE queries SET title=?, querystring=?, updated_at=? WHERE id=?`;
75 |
76 | await DB.run(sql, [title, querystring, nowTimeStr, id]);
77 | return true;
78 | }
79 |
80 | export async function deleteQueryById(queryId: string): Promise {
81 | const sql = `DELETE FROM queries WHERE id=?`;
82 |
83 | await DB.run(sql, [queryId]);
84 | return true;
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/models/UserModel.ts:
--------------------------------------------------------------------------------
1 | import DB from "../helpers/DBHelper";
2 | import utils from "../helpers/utils";
3 |
4 | interface UserType {
5 | id: string;
6 | username: string;
7 | password: string;
8 | createdAt: string;
9 | updatedAt: string;
10 | githubName: string;
11 | wxUserId: string;
12 | }
13 |
14 | export namespace UserModel {
15 | export async function createUser(username: string, password: string, githubName = "", wxUserId = ""): Promise {
16 | const nowTimeStr = utils.getDateTimeString(Date.now());
17 | const user: UserType = {
18 | id: utils.genUUID(),
19 | username,
20 | password,
21 | createdAt: nowTimeStr,
22 | updatedAt: nowTimeStr,
23 | githubName,
24 | wxUserId,
25 | };
26 | const sql = "INSERT INTO users (id, username, password, created_at, updated_at, github_name, wx_user_id) VALUES (?, ?, ?, ?, ?, ?)";
27 | await DB.run(sql, Object.values(user));
28 | return user;
29 | }
30 |
31 | export async function updateUser(
32 | id: string,
33 | username?: string,
34 | password?: string,
35 | githubName?: string,
36 | wxUserId?: string
37 | ): Promise {
38 | const nowTimeStr = utils.getDateTimeString(Date.now());
39 | const sql = `UPDATE users SET ${username !== undefined ? "username='" + username + "' ," : ""} ${
40 | password !== undefined ? "password='" + password + "' ," : ""
41 | } ${githubName !== undefined ? "github_name='" + githubName + "' ," : ""} ${
42 | wxUserId !== undefined ? "wx_user_id='" + wxUserId + "' ," : ""
43 | } updated_at='${nowTimeStr}' WHERE id=?`;
44 | await DB.run(sql, [id]);
45 | return true;
46 | }
47 |
48 | export async function getUserInfoById(userId: string): Promise {
49 | const sql = "SELECT * FROM users WHERE id=?";
50 | const data = await DB.get(sql, [userId]);
51 | return data;
52 | }
53 |
54 | export async function checkUsernameUsable(username: string): Promise {
55 | const sql = "SELECT * FROM users WHERE username=?";
56 | const data = await DB.get(sql, [username]);
57 | if (data === null) {
58 | return true;
59 | } else {
60 | return false;
61 | }
62 | }
63 |
64 | export async function checkGithubnameUsable(githubName: string): Promise {
65 | const sql = "SELECT * FROM users WHERE github_name=?";
66 | const data = await DB.get(sql, [githubName]);
67 | if (data === null) {
68 | return true;
69 | } else {
70 | return false;
71 | }
72 | }
73 |
74 | export async function validSigninInfo(username: string, password: string): Promise {
75 | const sql = "SELECT * FROM users WHERE username=? AND password=?";
76 | const data = await DB.get(sql, [username, password]);
77 | return data;
78 | }
79 |
80 | export async function validPassword(userId: string, password: string): Promise {
81 | const sql = "SELECT * FROM users WHERE id=? AND password=?";
82 | const data = await DB.get(sql, [userId, password]);
83 | if (data === null) {
84 | return false;
85 | } else {
86 | return true;
87 | }
88 | }
89 |
90 | export async function getUserByGhName(gbName: string): Promise {
91 | const sql = "SELECT * FROM users WHERE github_name=?";
92 | const data = await DB.get(sql, [gbName]);
93 | return data;
94 | }
95 |
96 | export async function getUserByWxUserId(wxUserId: string): Promise {
97 | const sql = "SELECT * FROM users WHERE wx_user_id=?";
98 | const data = await DB.get(sql, [wxUserId]);
99 | return data;
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "memos-backend",
3 | "version": "1.0.0",
4 | "author": "boojack ",
5 | "license": "",
6 | "scripts": {
7 | "dev": "nodemon --watch '**/*.ts' --exec cross-env NODE_ENV=dev ts-node --files ./server.ts",
8 | "build": "tsc --project ./"
9 | },
10 | "dependencies": {
11 | "axios": "^0.21.1",
12 | "koa": "^2.13.1",
13 | "koa-bodyparser": "^4.3.0",
14 | "koa-mount": "^4.0.0",
15 | "koa-router": "^10.0.0",
16 | "koa-session": "^6.2.0",
17 | "koa-static": "^5.0.0",
18 | "koa2-connect-history-api-fallback": "^0.1.3",
19 | "query-string": "^7.0.1",
20 | "short-uuid": "^4.2.0",
21 | "sqlite3": "^5.0.2",
22 | "xml2js": "^0.4.23"
23 | },
24 | "devDependencies": {
25 | "@types/koa": "^2.13.1",
26 | "@types/koa-bodyparser": "^4.3.0",
27 | "@types/koa-mount": "^4.0.0",
28 | "@types/koa-router": "^7.4.1",
29 | "@types/koa-session": "^5.10.4",
30 | "@types/koa-static": "^4.0.1",
31 | "@types/sqlite3": "^3.1.7",
32 | "@types/xml2js": "^0.4.9",
33 | "cross-env": "^7.0.3",
34 | "nodemon": "^2.0.7",
35 | "ts-node": "^9.1.1",
36 | "typescript": "^4.2.3"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/resources/memos.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/boojack/insmemo/b523c480b4cc63965a2f278b3a4dfbe4199a701e/resources/memos.db
--------------------------------------------------------------------------------
/resources/sqlite.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `users` (
2 | `id` TEXT NOT NULL PRIMARY KEY,
3 | `username` TEXT NOT NULL,
4 | `password` TEXT NOT NULL,
5 | `github_name` TEXT NULL DEFAULT '',
6 | `wx_user_id` TEXT NULL DEFAULT '',
7 | `created_at` TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
8 | `updated_at` TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
9 | );
10 |
11 | CREATE TABLE `memos` (
12 | `id` TEXT NOT NULL PRIMARY KEY,
13 | `content` TEXT NOT NULL,
14 | `user_id` TEXT NOT NULL,
15 | `created_at` TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
16 | `updated_at` TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
17 | `deleted_at` TEXT,
18 | FOREIGN KEY(`user_id`) REFERENCES `users`(`id`)
19 | );
20 |
21 | CREATE TABLE `queries` (
22 | `id` TEXT NOT NULL PRIMARY KEY,
23 | `user_id` TEXT NOT NULL,
24 | `title` TEXT NOT NULL,
25 | `querystring` TEXT NOT NULL,
26 | `created_at` TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
27 | `updated_at` TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
28 | `pinned_at` TEXT NULL,
29 | FOREIGN KEY(`user_id`) REFERENCES `users`(`id`)
30 | );
31 |
--------------------------------------------------------------------------------
/roadmap.md:
--------------------------------------------------------------------------------
1 | # Memos roadmap
2 |
3 | ## 总体思路
4 |
5 | - 先保证可用性;
6 | - 再去完善逻辑、扩展;
7 |
--------------------------------------------------------------------------------
/routers/github.ts:
--------------------------------------------------------------------------------
1 | import Router from "koa-router";
2 | import { GithubController } from "../controllers/github";
3 |
4 | export const githubRouter = new Router({
5 | prefix: "/api/gh",
6 | });
7 |
8 | githubRouter.get("/oauth", GithubController.oauth);
9 |
--------------------------------------------------------------------------------
/routers/memo.ts:
--------------------------------------------------------------------------------
1 | import Router from "koa-router";
2 | import { MemoController } from "../controllers/memo";
3 | import { validSigninCookie } from "../middlewares/authCheck";
4 |
5 | export const memoRouter = new Router({
6 | prefix: "/api/memo",
7 | });
8 |
9 | memoRouter.use(validSigninCookie);
10 | memoRouter.get("/", MemoController.getMemoById);
11 | memoRouter.get("/all", MemoController.getAllMemos);
12 | memoRouter.get("/linked", MemoController.getLinkedMemosById);
13 | memoRouter.get("/deleted", MemoController.getDeletedMemos);
14 | memoRouter.post("/new", MemoController.createMemo);
15 | memoRouter.post("/hide", MemoController.hideMemo);
16 | memoRouter.post("/restore", MemoController.restoreMemo);
17 | memoRouter.post("/delete", MemoController.deleteMemo);
18 | memoRouter.post("/update", MemoController.updateMemo);
19 |
--------------------------------------------------------------------------------
/routers/query.ts:
--------------------------------------------------------------------------------
1 | import Router from "koa-router";
2 | import { QueryController } from "../controllers/query";
3 | import { validSigninCookie } from "../middlewares/authCheck";
4 |
5 | export const queryRouter = new Router({
6 | prefix: "/api/query",
7 | });
8 |
9 | queryRouter.use(validSigninCookie);
10 | queryRouter.get("/all", QueryController.getMyQueries);
11 | queryRouter.post("/new", QueryController.createQuery);
12 | queryRouter.post("/update", QueryController.updateQuery);
13 | queryRouter.post("/delete", QueryController.deleteQueryById);
14 | queryRouter.post("/pin", QueryController.pinQuery);
15 | queryRouter.post("/unpin", QueryController.unpinQuery);
16 |
--------------------------------------------------------------------------------
/routers/user.ts:
--------------------------------------------------------------------------------
1 | import Router from "koa-router";
2 | import { UserController } from "../controllers/user";
3 | import { validSigninCookie } from "../middlewares/authCheck";
4 |
5 | export const userRouter = new Router({
6 | prefix: "/api/user",
7 | });
8 |
9 | userRouter.get("/me", validSigninCookie, UserController.getMyUserInfo);
10 | userRouter.post("/signup", UserController.signup);
11 | userRouter.post("/signin", UserController.signin);
12 | userRouter.post("/signout", UserController.signout);
13 | userRouter.get("/checkusername", validSigninCookie, UserController.checkUsernameUsable);
14 | userRouter.post("/update", validSigninCookie, UserController.update);
15 | userRouter.post("/checkpassword", validSigninCookie, UserController.checkPassword);
16 |
--------------------------------------------------------------------------------
/routers/wx.ts:
--------------------------------------------------------------------------------
1 | import Router from "koa-router";
2 | import { WxController } from "../controllers/wx";
3 |
4 | export const wxRouter = new Router({
5 | prefix: "/api/wx",
6 | });
7 |
8 | wxRouter.get("/", WxController.validate);
9 | wxRouter.post("/", WxController.handleWxMessage);
10 |
--------------------------------------------------------------------------------
/scripts/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash -x
2 | cd `dirname $0`
3 |
4 | tag="latest"
5 |
6 | if [[ ! -z "$1" ]]
7 | then
8 | tag=$1
9 | fi
10 |
11 | docker build -t memos:$tag ../
12 | docker tag memos:$tag neosmemo/memos:$tag
13 | docker push neosmemo/memos:$tag
14 |
--------------------------------------------------------------------------------
/server.ts:
--------------------------------------------------------------------------------
1 | import Koa from "koa";
2 | import bodyParser from "koa-bodyparser";
3 | import Mount from "koa-mount";
4 | import Serve from "koa-static";
5 | import session from "koa-session";
6 | import historyApiFallback from "koa2-connect-history-api-fallback";
7 | import { errorHandler } from "./middlewares/errorHandler";
8 | import { userRouter } from "./routers/user";
9 | import { memoRouter } from "./routers/memo";
10 | import { queryRouter } from "./routers/query";
11 | import { githubRouter } from "./routers/github";
12 | import { wxRouter } from "./routers/wx";
13 |
14 | const app = new Koa();
15 |
16 | const CONFIG: Partial = {
17 | key: "session",
18 | maxAge: 1000 * 3600 * 24 * 365,
19 | overwrite: true,
20 | httpOnly: true,
21 | signed: true,
22 | rolling: false,
23 | renew: false,
24 | secure: false,
25 | sameSite: "strict",
26 | };
27 |
28 | app.keys = ["justsven.site"];
29 |
30 | app.use(session(CONFIG, app));
31 |
32 | app.use(errorHandler);
33 |
34 | app.use(
35 | Mount(
36 | "/",
37 | Serve("./web/", {
38 | maxAge: 1000 * 60 * 60 * 24 * 30,
39 | defer: true,
40 | })
41 | )
42 | );
43 |
44 | app.use(historyApiFallback({ whiteList: ["/api"] }));
45 |
46 | app.use(
47 | bodyParser({
48 | enableTypes: ["json", "form", "text", "xml"],
49 | })
50 | );
51 |
52 | app.use(userRouter.routes());
53 | app.use(memoRouter.routes());
54 | app.use(queryRouter.routes());
55 | app.use(githubRouter.routes());
56 | app.use(wxRouter.routes());
57 |
58 | app.listen(8080, () => {
59 | console.log("server started in :8080");
60 | });
61 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */
4 |
5 | /* Basic Options */
6 | // "incremental": true, /* Enable incremental compilation */
7 | "target": "es6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,
8 | "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
9 | "lib": ["es2021"] /* Specify library files to be included in the compilation. */,
10 | // "allowJs": true, /* Allow javascript files to be compiled. */
11 | // "checkJs": true, /* Report errors in .js files. */
12 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
13 | // "declaration": true, /* Generates corresponding '.d.ts' file. */
14 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
15 | // "sourceMap": true, /* Generates corresponding '.map' file. */
16 | // "outFile": "./", /* Concatenate and emit output to single file. */
17 | "outDir": "./build" /* Redirect output structure to the directory. */,
18 | "rootDir": "./" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,
19 | // "composite": true, /* Enable project compilation */
20 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
21 | // "removeComments": true, /* Do not emit comments to output. */
22 | // "noEmit": true, /* Do not emit outputs. */
23 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */
24 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
25 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
26 |
27 | /* Strict Type-Checking Options */
28 | "strict": true /* Enable all strict type-checking options. */,
29 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
30 | // "strictNullChecks": true, /* Enable strict null checks. */
31 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */
32 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
33 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
34 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
35 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
36 |
37 | /* Additional Checks */
38 | // "noUnusedLocals": true, /* Report errors on unused locals. */
39 | // "noUnusedParameters": true, /* Report errors on unused parameters. */
40 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
41 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
42 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
43 |
44 | /* Module Resolution Options */
45 | "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */,
46 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
47 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
48 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
49 | "typeRoots": ["./typings"] /* List of folders to include type definitions from. */,
50 | // "types": [], /* Type declaration files to be included in compilation. */
51 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
52 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
53 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
54 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
55 |
56 | /* Source Map Options */
57 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
58 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
59 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
60 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
61 |
62 | /* Experimental Options */
63 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
64 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
65 |
66 | /* Advanced Options */
67 | "skipLibCheck": true /* Skip type checking of declaration files. */,
68 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
69 | },
70 | "exclude": ["web"]
71 | }
72 |
--------------------------------------------------------------------------------
/typings/basic.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * type and interface definations
3 | */
4 | type BasicType = undefined | null | boolean | number | string | Object | Array;
5 | type TimeStamp = number;
6 | type FunctionType = (...args: any) => any;
7 |
8 | interface IterObject {
9 | [key: string]: any;
10 | }
11 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@sindresorhus/is@^0.14.0":
6 | version "0.14.0"
7 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
8 | integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
9 |
10 | "@szmarczak/http-timer@^1.1.2":
11 | version "1.1.2"
12 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
13 | integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
14 | dependencies:
15 | defer-to-connect "^1.0.1"
16 |
17 | "@types/accepts@*":
18 | version "1.3.5"
19 | resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575"
20 | integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==
21 | dependencies:
22 | "@types/node" "*"
23 |
24 | "@types/body-parser@*":
25 | version "1.19.2"
26 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0"
27 | integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==
28 | dependencies:
29 | "@types/connect" "*"
30 | "@types/node" "*"
31 |
32 | "@types/connect@*":
33 | version "3.4.35"
34 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
35 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
36 | dependencies:
37 | "@types/node" "*"
38 |
39 | "@types/content-disposition@*":
40 | version "0.5.4"
41 | resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.4.tgz#de48cf01c79c9f1560bcfd8ae43217ab028657f8"
42 | integrity sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==
43 |
44 | "@types/cookies@*":
45 | version "0.7.7"
46 | resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.7.tgz#7a92453d1d16389c05a5301eef566f34946cfd81"
47 | integrity sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==
48 | dependencies:
49 | "@types/connect" "*"
50 | "@types/express" "*"
51 | "@types/keygrip" "*"
52 | "@types/node" "*"
53 |
54 | "@types/express-serve-static-core@^4.17.18":
55 | version "4.17.25"
56 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.25.tgz#e42f7046adc65ece2eb6059b77aecfbe9e9f82e0"
57 | integrity sha512-OUJIVfRMFijZukGGwTpKNFprqCCXk5WjNGvUgB/CxxBR40QWSjsNK86+yvGKlCOGc7sbwfHLaXhkG+NsytwBaQ==
58 | dependencies:
59 | "@types/node" "*"
60 | "@types/qs" "*"
61 | "@types/range-parser" "*"
62 |
63 | "@types/express@*":
64 | version "4.17.13"
65 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034"
66 | integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==
67 | dependencies:
68 | "@types/body-parser" "*"
69 | "@types/express-serve-static-core" "^4.17.18"
70 | "@types/qs" "*"
71 | "@types/serve-static" "*"
72 |
73 | "@types/http-assert@*":
74 | version "1.5.3"
75 | resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.3.tgz#ef8e3d1a8d46c387f04ab0f2e8ab8cb0c5078661"
76 | integrity sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==
77 |
78 | "@types/http-errors@*":
79 | version "1.8.1"
80 | resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.1.tgz#e81ad28a60bee0328c6d2384e029aec626f1ae67"
81 | integrity sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q==
82 |
83 | "@types/keygrip@*":
84 | version "1.0.2"
85 | resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72"
86 | integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==
87 |
88 | "@types/koa-bodyparser@^4.3.0":
89 | version "4.3.4"
90 | resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.3.4.tgz#86aca8ba2ac5896f84386f52cf02eb06563e2539"
91 | integrity sha512-eNyHGkIxwJKYaZhyxzAVP3taZVWNgAw+Gzl1Zc9vdkfzoBjypTANLwOAb6tC2hGOXS5uw4O08N6jaL6MdrltqQ==
92 | dependencies:
93 | "@types/koa" "*"
94 |
95 | "@types/koa-compose@*":
96 | version "3.2.5"
97 | resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d"
98 | integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==
99 | dependencies:
100 | "@types/koa" "*"
101 |
102 | "@types/koa-mount@^4.0.0":
103 | version "4.0.1"
104 | resolved "https://registry.yarnpkg.com/@types/koa-mount/-/koa-mount-4.0.1.tgz#2994be86eaa3d9dc97365e6ebfa227cee3c5f157"
105 | integrity sha512-HNeg80CVS9Dfq8dGYqCZZCAUm7g6jPCNJ1ydqVLEJxLrjmeburpvq+lOZkE4rxBZ6O38dr3tj9IA3IfbdoI05w==
106 | dependencies:
107 | "@types/koa" "*"
108 |
109 | "@types/koa-router@^7.4.1":
110 | version "7.4.4"
111 | resolved "https://registry.yarnpkg.com/@types/koa-router/-/koa-router-7.4.4.tgz#db72bde3616365d74f00178d5f243c4fce7da572"
112 | integrity sha512-3dHlZ6CkhgcWeF6wafEUvyyqjWYfKmev3vy1PtOmr0mBc3wpXPU5E8fBBd4YQo5bRpHPfmwC5yDaX7s4jhIN6A==
113 | dependencies:
114 | "@types/koa" "*"
115 |
116 | "@types/koa-send@*":
117 | version "4.1.3"
118 | resolved "https://registry.yarnpkg.com/@types/koa-send/-/koa-send-4.1.3.tgz#17193c6472ae9e5d1b99ae8086949cc4fd69179d"
119 | integrity sha512-daaTqPZlgjIJycSTNjKpHYuKhXYP30atFc1pBcy6HHqB9+vcymDgYTguPdx9tO4HMOqNyz6bz/zqpxt5eLR+VA==
120 | dependencies:
121 | "@types/koa" "*"
122 |
123 | "@types/koa-session@^5.10.4":
124 | version "5.10.4"
125 | resolved "https://registry.npmmirror.com/@types/koa-session/download/@types/koa-session-5.10.4.tgz#d5f97532f6ef27d5c4e1b04c3fd3ff447693bf10"
126 | integrity sha1-1fl1MvbvJ9XE4bBMP9P/RHaTvxA=
127 | dependencies:
128 | "@types/cookies" "*"
129 | "@types/koa" "*"
130 |
131 | "@types/koa-static@^4.0.1":
132 | version "4.0.2"
133 | resolved "https://registry.yarnpkg.com/@types/koa-static/-/koa-static-4.0.2.tgz#a199d2d64d2930755eb3ea370aeaf2cb6f501d67"
134 | integrity sha512-ns/zHg+K6XVPMuohjpOlpkR1WLa4VJ9czgUP9bxkCDn0JZBtUWbD/wKDZzPGDclkQK1bpAEScufCHOy8cbfL0w==
135 | dependencies:
136 | "@types/koa" "*"
137 | "@types/koa-send" "*"
138 |
139 | "@types/koa@*", "@types/koa@^2.13.1":
140 | version "2.13.4"
141 | resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.4.tgz#10620b3f24a8027ef5cbae88b393d1b31205726b"
142 | integrity sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==
143 | dependencies:
144 | "@types/accepts" "*"
145 | "@types/content-disposition" "*"
146 | "@types/cookies" "*"
147 | "@types/http-assert" "*"
148 | "@types/http-errors" "*"
149 | "@types/keygrip" "*"
150 | "@types/koa-compose" "*"
151 | "@types/node" "*"
152 |
153 | "@types/mime@^1":
154 | version "1.3.2"
155 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
156 | integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
157 |
158 | "@types/node@*":
159 | version "16.11.9"
160 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.9.tgz#879be3ad7af29f4c1a5c433421bf99fab7047185"
161 | integrity sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A==
162 |
163 | "@types/qs@*":
164 | version "6.9.7"
165 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
166 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
167 |
168 | "@types/range-parser@*":
169 | version "1.2.4"
170 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
171 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
172 |
173 | "@types/serve-static@*":
174 | version "1.13.10"
175 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9"
176 | integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==
177 | dependencies:
178 | "@types/mime" "^1"
179 | "@types/node" "*"
180 |
181 | "@types/sqlite3@^3.1.7":
182 | version "3.1.7"
183 | resolved "https://registry.yarnpkg.com/@types/sqlite3/-/sqlite3-3.1.7.tgz#84fbc65946603d15cff4968d0cb283d1879dd156"
184 | integrity sha512-8FHV/8Uzd7IwdHm5mvmF2Aif4aC/gjrt4axWD9SmfaxITnOjtOhCbOSTuqv/VbH1uq0QrwlaTj9aTz3gmR6u4w==
185 | dependencies:
186 | "@types/node" "*"
187 |
188 | "@types/xml2js@^0.4.9":
189 | version "0.4.9"
190 | resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.9.tgz#a38267d8c2fe121c96922b12ee3bd89a58a6e20e"
191 | integrity sha512-CHiCKIihl1pychwR2RNX5mAYmJDACgFVCMT5OArMaO3erzwXVcBqPcusr+Vl8yeeXukxZqtF8mZioqX+mpjjdw==
192 | dependencies:
193 | "@types/node" "*"
194 |
195 | abbrev@1:
196 | version "1.1.1"
197 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
198 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
199 |
200 | accepts@^1.3.5:
201 | version "1.3.7"
202 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
203 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
204 | dependencies:
205 | mime-types "~2.1.24"
206 | negotiator "0.6.2"
207 |
208 | ajv@^6.12.3:
209 | version "6.12.6"
210 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
211 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
212 | dependencies:
213 | fast-deep-equal "^3.1.1"
214 | fast-json-stable-stringify "^2.0.0"
215 | json-schema-traverse "^0.4.1"
216 | uri-js "^4.2.2"
217 |
218 | ansi-align@^3.0.0:
219 | version "3.0.1"
220 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59"
221 | integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==
222 | dependencies:
223 | string-width "^4.1.0"
224 |
225 | ansi-regex@^2.0.0:
226 | version "2.1.1"
227 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
228 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
229 |
230 | ansi-regex@^5.0.1:
231 | version "5.0.1"
232 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
233 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
234 |
235 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
236 | version "4.3.0"
237 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
238 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
239 | dependencies:
240 | color-convert "^2.0.1"
241 |
242 | any-base@^1.1.0:
243 | version "1.1.0"
244 | resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe"
245 | integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==
246 |
247 | anymatch@~3.1.2:
248 | version "3.1.2"
249 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
250 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
251 | dependencies:
252 | normalize-path "^3.0.0"
253 | picomatch "^2.0.4"
254 |
255 | aproba@^1.0.3:
256 | version "1.2.0"
257 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
258 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
259 |
260 | are-we-there-yet@~1.1.2:
261 | version "1.1.7"
262 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146"
263 | integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==
264 | dependencies:
265 | delegates "^1.0.0"
266 | readable-stream "^2.0.6"
267 |
268 | arg@^4.1.0:
269 | version "4.1.3"
270 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
271 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
272 |
273 | asn1@~0.2.3:
274 | version "0.2.6"
275 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
276 | integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
277 | dependencies:
278 | safer-buffer "~2.1.0"
279 |
280 | assert-plus@1.0.0, assert-plus@^1.0.0:
281 | version "1.0.0"
282 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
283 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
284 |
285 | asynckit@^0.4.0:
286 | version "0.4.0"
287 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
288 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
289 |
290 | aws-sign2@~0.7.0:
291 | version "0.7.0"
292 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
293 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
294 |
295 | aws4@^1.8.0:
296 | version "1.11.0"
297 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
298 | integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
299 |
300 | axios@^0.21.1:
301 | version "0.21.4"
302 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
303 | integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
304 | dependencies:
305 | follow-redirects "^1.14.0"
306 |
307 | balanced-match@^1.0.0:
308 | version "1.0.2"
309 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
310 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
311 |
312 | base64-js@^1.3.1:
313 | version "1.5.1"
314 | resolved "https://registry.npmmirror.com/base64-js/download/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
315 | integrity sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=
316 |
317 | bcrypt-pbkdf@^1.0.0:
318 | version "1.0.2"
319 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
320 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
321 | dependencies:
322 | tweetnacl "^0.14.3"
323 |
324 | binary-extensions@^2.0.0:
325 | version "2.2.0"
326 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
327 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
328 |
329 | block-stream@*:
330 | version "0.0.9"
331 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
332 | integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
333 | dependencies:
334 | inherits "~2.0.0"
335 |
336 | boxen@^5.0.0:
337 | version "5.1.2"
338 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50"
339 | integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==
340 | dependencies:
341 | ansi-align "^3.0.0"
342 | camelcase "^6.2.0"
343 | chalk "^4.1.0"
344 | cli-boxes "^2.2.1"
345 | string-width "^4.2.2"
346 | type-fest "^0.20.2"
347 | widest-line "^3.1.0"
348 | wrap-ansi "^7.0.0"
349 |
350 | brace-expansion@^1.1.7:
351 | version "1.1.11"
352 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
353 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
354 | dependencies:
355 | balanced-match "^1.0.0"
356 | concat-map "0.0.1"
357 |
358 | braces@~3.0.2:
359 | version "3.0.2"
360 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
361 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
362 | dependencies:
363 | fill-range "^7.0.1"
364 |
365 | buffer-from@^1.0.0:
366 | version "1.1.2"
367 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
368 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
369 |
370 | buffer@^5.1.0:
371 | version "5.7.1"
372 | resolved "https://registry.nlark.com/buffer/download/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
373 | integrity sha1-umLnwTEzBTWCGXFghRqPZI6Z7tA=
374 | dependencies:
375 | base64-js "^1.3.1"
376 | ieee754 "^1.1.13"
377 |
378 | bytes@3.1.1:
379 | version "3.1.1"
380 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a"
381 | integrity sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==
382 |
383 | cache-content-type@^1.0.0:
384 | version "1.0.1"
385 | resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c"
386 | integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==
387 | dependencies:
388 | mime-types "^2.1.18"
389 | ylru "^1.2.0"
390 |
391 | cacheable-request@^6.0.0:
392 | version "6.1.0"
393 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
394 | integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
395 | dependencies:
396 | clone-response "^1.0.2"
397 | get-stream "^5.1.0"
398 | http-cache-semantics "^4.0.0"
399 | keyv "^3.0.0"
400 | lowercase-keys "^2.0.0"
401 | normalize-url "^4.1.0"
402 | responselike "^1.0.2"
403 |
404 | call-bind@^1.0.0:
405 | version "1.0.2"
406 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
407 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
408 | dependencies:
409 | function-bind "^1.1.1"
410 | get-intrinsic "^1.0.2"
411 |
412 | camelcase@^6.2.0:
413 | version "6.2.1"
414 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e"
415 | integrity sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==
416 |
417 | caseless@~0.12.0:
418 | version "0.12.0"
419 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
420 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
421 |
422 | chalk@^4.1.0:
423 | version "4.1.2"
424 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
425 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
426 | dependencies:
427 | ansi-styles "^4.1.0"
428 | supports-color "^7.1.0"
429 |
430 | chokidar@^3.5.2:
431 | version "3.5.2"
432 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
433 | integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==
434 | dependencies:
435 | anymatch "~3.1.2"
436 | braces "~3.0.2"
437 | glob-parent "~5.1.2"
438 | is-binary-path "~2.1.0"
439 | is-glob "~4.0.1"
440 | normalize-path "~3.0.0"
441 | readdirp "~3.6.0"
442 | optionalDependencies:
443 | fsevents "~2.3.2"
444 |
445 | chownr@^1.1.4:
446 | version "1.1.4"
447 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
448 | integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
449 |
450 | ci-info@^2.0.0:
451 | version "2.0.0"
452 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
453 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
454 |
455 | cli-boxes@^2.2.1:
456 | version "2.2.1"
457 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
458 | integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
459 |
460 | clone-response@^1.0.2:
461 | version "1.0.2"
462 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
463 | integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
464 | dependencies:
465 | mimic-response "^1.0.0"
466 |
467 | co-body@^6.0.0:
468 | version "6.1.0"
469 | resolved "https://registry.yarnpkg.com/co-body/-/co-body-6.1.0.tgz#d87a8efc3564f9bfe3aced8ef5cd04c7a8766547"
470 | integrity sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==
471 | dependencies:
472 | inflation "^2.0.0"
473 | qs "^6.5.2"
474 | raw-body "^2.3.3"
475 | type-is "^1.6.16"
476 |
477 | co@^4.6.0:
478 | version "4.6.0"
479 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
480 | integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
481 |
482 | code-point-at@^1.0.0:
483 | version "1.1.0"
484 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
485 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
486 |
487 | color-convert@^2.0.1:
488 | version "2.0.1"
489 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
490 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
491 | dependencies:
492 | color-name "~1.1.4"
493 |
494 | color-name@~1.1.4:
495 | version "1.1.4"
496 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
497 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
498 |
499 | combined-stream@^1.0.6, combined-stream@~1.0.6:
500 | version "1.0.8"
501 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
502 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
503 | dependencies:
504 | delayed-stream "~1.0.0"
505 |
506 | concat-map@0.0.1:
507 | version "0.0.1"
508 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
509 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
510 |
511 | configstore@^5.0.1:
512 | version "5.0.1"
513 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96"
514 | integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==
515 | dependencies:
516 | dot-prop "^5.2.0"
517 | graceful-fs "^4.1.2"
518 | make-dir "^3.0.0"
519 | unique-string "^2.0.0"
520 | write-file-atomic "^3.0.0"
521 | xdg-basedir "^4.0.0"
522 |
523 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
524 | version "1.1.0"
525 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
526 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
527 |
528 | content-disposition@~0.5.2:
529 | version "0.5.3"
530 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
531 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
532 | dependencies:
533 | safe-buffer "5.1.2"
534 |
535 | content-type@^1.0.4:
536 | version "1.0.4"
537 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
538 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
539 |
540 | cookies@~0.8.0:
541 | version "0.8.0"
542 | resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90"
543 | integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==
544 | dependencies:
545 | depd "~2.0.0"
546 | keygrip "~1.1.0"
547 |
548 | copy-to@^2.0.1:
549 | version "2.0.1"
550 | resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5"
551 | integrity sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=
552 |
553 | core-util-is@1.0.2:
554 | version "1.0.2"
555 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
556 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
557 |
558 | core-util-is@^1.0.2, core-util-is@~1.0.0:
559 | version "1.0.3"
560 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
561 | integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
562 |
563 | crc@^3.4.4:
564 | version "3.8.0"
565 | resolved "https://registry.nlark.com/crc/download/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6"
566 | integrity sha1-rWAmnCyFb4wpnixMwN5FVpFAVsY=
567 | dependencies:
568 | buffer "^5.1.0"
569 |
570 | create-require@^1.1.0:
571 | version "1.1.1"
572 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
573 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
574 |
575 | cross-env@^7.0.3:
576 | version "7.0.3"
577 | resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
578 | integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
579 | dependencies:
580 | cross-spawn "^7.0.1"
581 |
582 | cross-spawn@^7.0.1:
583 | version "7.0.3"
584 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
585 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
586 | dependencies:
587 | path-key "^3.1.0"
588 | shebang-command "^2.0.0"
589 | which "^2.0.1"
590 |
591 | crypto-random-string@^2.0.0:
592 | version "2.0.0"
593 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
594 | integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
595 |
596 | dashdash@^1.12.0:
597 | version "1.14.1"
598 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
599 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
600 | dependencies:
601 | assert-plus "^1.0.0"
602 |
603 | debug@^3.1.0, debug@^3.2.6, debug@^3.2.7:
604 | version "3.2.7"
605 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
606 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
607 | dependencies:
608 | ms "^2.1.1"
609 |
610 | debug@^4.0.1, debug@^4.1.1, debug@^4.3.2:
611 | version "4.3.2"
612 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
613 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
614 | dependencies:
615 | ms "2.1.2"
616 |
617 | decode-uri-component@^0.2.0:
618 | version "0.2.0"
619 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
620 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
621 |
622 | decompress-response@^3.3.0:
623 | version "3.3.0"
624 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
625 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
626 | dependencies:
627 | mimic-response "^1.0.0"
628 |
629 | deep-equal@~1.0.1:
630 | version "1.0.1"
631 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
632 | integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
633 |
634 | deep-extend@^0.6.0:
635 | version "0.6.0"
636 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
637 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
638 |
639 | defer-to-connect@^1.0.1:
640 | version "1.1.3"
641 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591"
642 | integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
643 |
644 | delayed-stream@~1.0.0:
645 | version "1.0.0"
646 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
647 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
648 |
649 | delegates@^1.0.0:
650 | version "1.0.0"
651 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
652 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
653 |
654 | depd@^2.0.0, depd@~2.0.0:
655 | version "2.0.0"
656 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
657 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
658 |
659 | depd@~1.1.2:
660 | version "1.1.2"
661 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
662 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
663 |
664 | destroy@^1.0.4:
665 | version "1.0.4"
666 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
667 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
668 |
669 | detect-libc@^1.0.2:
670 | version "1.0.3"
671 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
672 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
673 |
674 | diff@^4.0.1:
675 | version "4.0.2"
676 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
677 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
678 |
679 | dot-prop@^5.2.0:
680 | version "5.3.0"
681 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
682 | integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
683 | dependencies:
684 | is-obj "^2.0.0"
685 |
686 | duplexer3@^0.1.4:
687 | version "0.1.4"
688 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
689 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
690 |
691 | ecc-jsbn@~0.1.1:
692 | version "0.1.2"
693 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
694 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
695 | dependencies:
696 | jsbn "~0.1.0"
697 | safer-buffer "^2.1.0"
698 |
699 | ee-first@1.1.1:
700 | version "1.1.1"
701 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
702 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
703 |
704 | emoji-regex@^8.0.0:
705 | version "8.0.0"
706 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
707 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
708 |
709 | encodeurl@^1.0.2:
710 | version "1.0.2"
711 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
712 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
713 |
714 | end-of-stream@^1.1.0:
715 | version "1.4.4"
716 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
717 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
718 | dependencies:
719 | once "^1.4.0"
720 |
721 | escape-goat@^2.0.0:
722 | version "2.1.1"
723 | resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
724 | integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==
725 |
726 | escape-html@^1.0.3:
727 | version "1.0.3"
728 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
729 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
730 |
731 | extend@~3.0.2:
732 | version "3.0.2"
733 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
734 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
735 |
736 | extsprintf@1.3.0:
737 | version "1.3.0"
738 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
739 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
740 |
741 | extsprintf@^1.2.0:
742 | version "1.4.1"
743 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
744 | integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
745 |
746 | fast-deep-equal@^3.1.1:
747 | version "3.1.3"
748 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
749 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
750 |
751 | fast-json-stable-stringify@^2.0.0:
752 | version "2.1.0"
753 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
754 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
755 |
756 | fill-range@^7.0.1:
757 | version "7.0.1"
758 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
759 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
760 | dependencies:
761 | to-regex-range "^5.0.1"
762 |
763 | filter-obj@^1.1.0:
764 | version "1.1.0"
765 | resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b"
766 | integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs=
767 |
768 | follow-redirects@^1.14.0:
769 | version "1.14.5"
770 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381"
771 | integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==
772 |
773 | forever-agent@~0.6.1:
774 | version "0.6.1"
775 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
776 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
777 |
778 | form-data@~2.3.2:
779 | version "2.3.3"
780 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
781 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
782 | dependencies:
783 | asynckit "^0.4.0"
784 | combined-stream "^1.0.6"
785 | mime-types "^2.1.12"
786 |
787 | fresh@~0.5.2:
788 | version "0.5.2"
789 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
790 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
791 |
792 | fs-minipass@^1.2.7:
793 | version "1.2.7"
794 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
795 | integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
796 | dependencies:
797 | minipass "^2.6.0"
798 |
799 | fs.realpath@^1.0.0:
800 | version "1.0.0"
801 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
802 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
803 |
804 | fsevents@~2.3.2:
805 | version "2.3.2"
806 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
807 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
808 |
809 | fstream@^1.0.0, fstream@^1.0.12:
810 | version "1.0.12"
811 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
812 | integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
813 | dependencies:
814 | graceful-fs "^4.1.2"
815 | inherits "~2.0.0"
816 | mkdirp ">=0.5 0"
817 | rimraf "2"
818 |
819 | function-bind@^1.1.1:
820 | version "1.1.1"
821 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
822 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
823 |
824 | gauge@~2.7.3:
825 | version "2.7.4"
826 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
827 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
828 | dependencies:
829 | aproba "^1.0.3"
830 | console-control-strings "^1.0.0"
831 | has-unicode "^2.0.0"
832 | object-assign "^4.1.0"
833 | signal-exit "^3.0.0"
834 | string-width "^1.0.1"
835 | strip-ansi "^3.0.1"
836 | wide-align "^1.1.0"
837 |
838 | get-intrinsic@^1.0.2:
839 | version "1.1.1"
840 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
841 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
842 | dependencies:
843 | function-bind "^1.1.1"
844 | has "^1.0.3"
845 | has-symbols "^1.0.1"
846 |
847 | get-stream@^4.1.0:
848 | version "4.1.0"
849 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
850 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
851 | dependencies:
852 | pump "^3.0.0"
853 |
854 | get-stream@^5.1.0:
855 | version "5.2.0"
856 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
857 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
858 | dependencies:
859 | pump "^3.0.0"
860 |
861 | getpass@^0.1.1:
862 | version "0.1.7"
863 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
864 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
865 | dependencies:
866 | assert-plus "^1.0.0"
867 |
868 | glob-parent@~5.1.2:
869 | version "5.1.2"
870 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
871 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
872 | dependencies:
873 | is-glob "^4.0.1"
874 |
875 | glob@^7.0.3, glob@^7.1.3:
876 | version "7.2.0"
877 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
878 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
879 | dependencies:
880 | fs.realpath "^1.0.0"
881 | inflight "^1.0.4"
882 | inherits "2"
883 | minimatch "^3.0.4"
884 | once "^1.3.0"
885 | path-is-absolute "^1.0.0"
886 |
887 | global-dirs@^3.0.0:
888 | version "3.0.0"
889 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686"
890 | integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==
891 | dependencies:
892 | ini "2.0.0"
893 |
894 | got@^9.6.0:
895 | version "9.6.0"
896 | resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85"
897 | integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
898 | dependencies:
899 | "@sindresorhus/is" "^0.14.0"
900 | "@szmarczak/http-timer" "^1.1.2"
901 | cacheable-request "^6.0.0"
902 | decompress-response "^3.3.0"
903 | duplexer3 "^0.1.4"
904 | get-stream "^4.1.0"
905 | lowercase-keys "^1.0.1"
906 | mimic-response "^1.0.1"
907 | p-cancelable "^1.0.0"
908 | to-readable-stream "^1.0.0"
909 | url-parse-lax "^3.0.0"
910 |
911 | graceful-fs@^4.1.2:
912 | version "4.2.8"
913 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
914 | integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
915 |
916 | har-schema@^2.0.0:
917 | version "2.0.0"
918 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
919 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
920 |
921 | har-validator@~5.1.3:
922 | version "5.1.5"
923 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
924 | integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
925 | dependencies:
926 | ajv "^6.12.3"
927 | har-schema "^2.0.0"
928 |
929 | has-flag@^3.0.0:
930 | version "3.0.0"
931 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
932 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
933 |
934 | has-flag@^4.0.0:
935 | version "4.0.0"
936 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
937 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
938 |
939 | has-symbols@^1.0.1, has-symbols@^1.0.2:
940 | version "1.0.2"
941 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
942 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
943 |
944 | has-tostringtag@^1.0.0:
945 | version "1.0.0"
946 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
947 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
948 | dependencies:
949 | has-symbols "^1.0.2"
950 |
951 | has-unicode@^2.0.0:
952 | version "2.0.1"
953 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
954 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
955 |
956 | has-yarn@^2.1.0:
957 | version "2.1.0"
958 | resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77"
959 | integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==
960 |
961 | has@^1.0.3:
962 | version "1.0.3"
963 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
964 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
965 | dependencies:
966 | function-bind "^1.1.1"
967 |
968 | http-assert@^1.3.0:
969 | version "1.5.0"
970 | resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.5.0.tgz#c389ccd87ac16ed2dfa6246fd73b926aa00e6b8f"
971 | integrity sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==
972 | dependencies:
973 | deep-equal "~1.0.1"
974 | http-errors "~1.8.0"
975 |
976 | http-cache-semantics@^4.0.0:
977 | version "4.1.0"
978 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
979 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
980 |
981 | http-errors@1.8.1, http-errors@^1.6.3, http-errors@^1.7.3, http-errors@~1.8.0:
982 | version "1.8.1"
983 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c"
984 | integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==
985 | dependencies:
986 | depd "~1.1.2"
987 | inherits "2.0.4"
988 | setprototypeof "1.2.0"
989 | statuses ">= 1.5.0 < 2"
990 | toidentifier "1.0.1"
991 |
992 | http-errors@~1.6.2:
993 | version "1.6.3"
994 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
995 | integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
996 | dependencies:
997 | depd "~1.1.2"
998 | inherits "2.0.3"
999 | setprototypeof "1.1.0"
1000 | statuses ">= 1.4.0 < 2"
1001 |
1002 | http-signature@~1.2.0:
1003 | version "1.2.0"
1004 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
1005 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
1006 | dependencies:
1007 | assert-plus "^1.0.0"
1008 | jsprim "^1.2.2"
1009 | sshpk "^1.7.0"
1010 |
1011 | iconv-lite@0.4.24, iconv-lite@^0.4.4:
1012 | version "0.4.24"
1013 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
1014 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
1015 | dependencies:
1016 | safer-buffer ">= 2.1.2 < 3"
1017 |
1018 | ieee754@^1.1.13:
1019 | version "1.2.1"
1020 | resolved "https://registry.nlark.com/ieee754/download/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
1021 | integrity sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=
1022 |
1023 | ignore-by-default@^1.0.1:
1024 | version "1.0.1"
1025 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
1026 | integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk=
1027 |
1028 | ignore-walk@^3.0.1:
1029 | version "3.0.4"
1030 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335"
1031 | integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==
1032 | dependencies:
1033 | minimatch "^3.0.4"
1034 |
1035 | import-lazy@^2.1.0:
1036 | version "2.1.0"
1037 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
1038 | integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
1039 |
1040 | imurmurhash@^0.1.4:
1041 | version "0.1.4"
1042 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1043 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
1044 |
1045 | inflation@^2.0.0:
1046 | version "2.0.0"
1047 | resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f"
1048 | integrity sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=
1049 |
1050 | inflight@^1.0.4:
1051 | version "1.0.6"
1052 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1053 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
1054 | dependencies:
1055 | once "^1.3.0"
1056 | wrappy "1"
1057 |
1058 | inherits@2, inherits@2.0.4, inherits@~2.0.0, inherits@~2.0.3:
1059 | version "2.0.4"
1060 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
1061 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
1062 |
1063 | inherits@2.0.3:
1064 | version "2.0.3"
1065 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1066 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
1067 |
1068 | ini@2.0.0:
1069 | version "2.0.0"
1070 | resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
1071 | integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
1072 |
1073 | ini@~1.3.0:
1074 | version "1.3.8"
1075 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
1076 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
1077 |
1078 | is-binary-path@~2.1.0:
1079 | version "2.1.0"
1080 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
1081 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
1082 | dependencies:
1083 | binary-extensions "^2.0.0"
1084 |
1085 | is-ci@^2.0.0:
1086 | version "2.0.0"
1087 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
1088 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
1089 | dependencies:
1090 | ci-info "^2.0.0"
1091 |
1092 | is-class-hotfix@~0.0.6:
1093 | version "0.0.6"
1094 | resolved "https://registry.nlark.com/is-class-hotfix/download/is-class-hotfix-0.0.6.tgz#a527d31fb23279281dde5f385c77b5de70a72435"
1095 | integrity sha1-pSfTH7IyeSgd3l84XHe13nCnJDU=
1096 |
1097 | is-extglob@^2.1.1:
1098 | version "2.1.1"
1099 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1100 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
1101 |
1102 | is-fullwidth-code-point@^1.0.0:
1103 | version "1.0.0"
1104 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
1105 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
1106 | dependencies:
1107 | number-is-nan "^1.0.0"
1108 |
1109 | is-fullwidth-code-point@^3.0.0:
1110 | version "3.0.0"
1111 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
1112 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
1113 |
1114 | is-generator-function@^1.0.7:
1115 | version "1.0.10"
1116 | resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
1117 | integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
1118 | dependencies:
1119 | has-tostringtag "^1.0.0"
1120 |
1121 | is-glob@^4.0.1, is-glob@~4.0.1:
1122 | version "4.0.3"
1123 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
1124 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1125 | dependencies:
1126 | is-extglob "^2.1.1"
1127 |
1128 | is-installed-globally@^0.4.0:
1129 | version "0.4.0"
1130 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"
1131 | integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==
1132 | dependencies:
1133 | global-dirs "^3.0.0"
1134 | is-path-inside "^3.0.2"
1135 |
1136 | is-npm@^5.0.0:
1137 | version "5.0.0"
1138 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8"
1139 | integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==
1140 |
1141 | is-number@^7.0.0:
1142 | version "7.0.0"
1143 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1144 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1145 |
1146 | is-obj@^2.0.0:
1147 | version "2.0.0"
1148 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
1149 | integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
1150 |
1151 | is-path-inside@^3.0.2:
1152 | version "3.0.3"
1153 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
1154 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
1155 |
1156 | is-type-of@^1.0.0:
1157 | version "1.2.1"
1158 | resolved "https://registry.nlark.com/is-type-of/download/is-type-of-1.2.1.tgz#e263ec3857aceb4f28c47130ec78db09a920f8c5"
1159 | integrity sha1-4mPsOFes608oxHEw7HjbCakg+MU=
1160 | dependencies:
1161 | core-util-is "^1.0.2"
1162 | is-class-hotfix "~0.0.6"
1163 | isstream "~0.1.2"
1164 |
1165 | is-typedarray@^1.0.0, is-typedarray@~1.0.0:
1166 | version "1.0.0"
1167 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
1168 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
1169 |
1170 | is-yarn-global@^0.3.0:
1171 | version "0.3.0"
1172 | resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232"
1173 | integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
1174 |
1175 | isarray@~1.0.0:
1176 | version "1.0.0"
1177 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1178 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
1179 |
1180 | isexe@^2.0.0:
1181 | version "2.0.0"
1182 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1183 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
1184 |
1185 | isstream@~0.1.2:
1186 | version "0.1.2"
1187 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
1188 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
1189 |
1190 | jsbn@~0.1.0:
1191 | version "0.1.1"
1192 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
1193 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
1194 |
1195 | json-buffer@3.0.0:
1196 | version "3.0.0"
1197 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
1198 | integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
1199 |
1200 | json-schema-traverse@^0.4.1:
1201 | version "0.4.1"
1202 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1203 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1204 |
1205 | json-schema@0.2.3:
1206 | version "0.2.3"
1207 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
1208 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
1209 |
1210 | json-stringify-safe@~5.0.1:
1211 | version "5.0.1"
1212 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
1213 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
1214 |
1215 | jsprim@^1.2.2:
1216 | version "1.4.1"
1217 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
1218 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
1219 | dependencies:
1220 | assert-plus "1.0.0"
1221 | extsprintf "1.3.0"
1222 | json-schema "0.2.3"
1223 | verror "1.10.0"
1224 |
1225 | keygrip@~1.1.0:
1226 | version "1.1.0"
1227 | resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226"
1228 | integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==
1229 | dependencies:
1230 | tsscmp "1.0.6"
1231 |
1232 | keyv@^3.0.0:
1233 | version "3.1.0"
1234 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
1235 | integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
1236 | dependencies:
1237 | json-buffer "3.0.0"
1238 |
1239 | koa-bodyparser@^4.3.0:
1240 | version "4.3.0"
1241 | resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz#274c778555ff48fa221ee7f36a9fbdbace22759a"
1242 | integrity sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw==
1243 | dependencies:
1244 | co-body "^6.0.0"
1245 | copy-to "^2.0.1"
1246 |
1247 | koa-compose@^4.1.0:
1248 | version "4.1.0"
1249 | resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877"
1250 | integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==
1251 |
1252 | koa-convert@^2.0.0:
1253 | version "2.0.0"
1254 | resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-2.0.0.tgz#86a0c44d81d40551bae22fee6709904573eea4f5"
1255 | integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==
1256 | dependencies:
1257 | co "^4.6.0"
1258 | koa-compose "^4.1.0"
1259 |
1260 | koa-mount@^4.0.0:
1261 | version "4.0.0"
1262 | resolved "https://registry.yarnpkg.com/koa-mount/-/koa-mount-4.0.0.tgz#e0265e58198e1a14ef889514c607254ff386329c"
1263 | integrity sha512-rm71jaA/P+6HeCpoRhmCv8KVBIi0tfGuO/dMKicbQnQW/YJntJ6MnnspkodoA4QstMVEZArsCphmd0bJEtoMjQ==
1264 | dependencies:
1265 | debug "^4.0.1"
1266 | koa-compose "^4.1.0"
1267 |
1268 | koa-router@^10.0.0:
1269 | version "10.1.1"
1270 | resolved "https://registry.yarnpkg.com/koa-router/-/koa-router-10.1.1.tgz#20809f82648518b84726cd445037813cd99f17ff"
1271 | integrity sha512-z/OzxVjf5NyuNO3t9nJpx7e1oR3FSBAauiwXtMQu4ppcnuNZzTaQ4p21P8A6r2Es8uJJM339oc4oVW+qX7SqnQ==
1272 | dependencies:
1273 | debug "^4.1.1"
1274 | http-errors "^1.7.3"
1275 | koa-compose "^4.1.0"
1276 | methods "^1.1.2"
1277 | path-to-regexp "^6.1.0"
1278 |
1279 | koa-send@^5.0.0:
1280 | version "5.0.1"
1281 | resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79"
1282 | integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==
1283 | dependencies:
1284 | debug "^4.1.1"
1285 | http-errors "^1.7.3"
1286 | resolve-path "^1.4.0"
1287 |
1288 | koa-session@^6.2.0:
1289 | version "6.2.0"
1290 | resolved "https://registry.nlark.com/koa-session/download/koa-session-6.2.0.tgz#c0da2a808b520f62a25dac9f2914b580b2402078"
1291 | integrity sha1-wNoqgItSD2KiXayfKRS1gLJAIHg=
1292 | dependencies:
1293 | crc "^3.4.4"
1294 | debug "^3.1.0"
1295 | is-type-of "^1.0.0"
1296 | uuid "^3.3.2"
1297 |
1298 | koa-static@^5.0.0:
1299 | version "5.0.0"
1300 | resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943"
1301 | integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==
1302 | dependencies:
1303 | debug "^3.1.0"
1304 | koa-send "^5.0.0"
1305 |
1306 | koa2-connect-history-api-fallback@^0.1.3:
1307 | version "0.1.3"
1308 | resolved "https://registry.yarnpkg.com/koa2-connect-history-api-fallback/-/koa2-connect-history-api-fallback-0.1.3.tgz#dd07b6183ab111d48a6e14f0896d39397c2b879b"
1309 | integrity sha512-6SucVC8sn7ffaAKOhpNn1OJUqZDK37Jg/PSBAGSribQIikU/Et1aOkUcPH34dm55Kl94RrH4d1snOG6EErzE1Q==
1310 |
1311 | koa@^2.13.1:
1312 | version "2.13.4"
1313 | resolved "https://registry.yarnpkg.com/koa/-/koa-2.13.4.tgz#ee5b0cb39e0b8069c38d115139c774833d32462e"
1314 | integrity sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==
1315 | dependencies:
1316 | accepts "^1.3.5"
1317 | cache-content-type "^1.0.0"
1318 | content-disposition "~0.5.2"
1319 | content-type "^1.0.4"
1320 | cookies "~0.8.0"
1321 | debug "^4.3.2"
1322 | delegates "^1.0.0"
1323 | depd "^2.0.0"
1324 | destroy "^1.0.4"
1325 | encodeurl "^1.0.2"
1326 | escape-html "^1.0.3"
1327 | fresh "~0.5.2"
1328 | http-assert "^1.3.0"
1329 | http-errors "^1.6.3"
1330 | is-generator-function "^1.0.7"
1331 | koa-compose "^4.1.0"
1332 | koa-convert "^2.0.0"
1333 | on-finished "^2.3.0"
1334 | only "~0.0.2"
1335 | parseurl "^1.3.2"
1336 | statuses "^1.5.0"
1337 | type-is "^1.6.16"
1338 | vary "^1.1.2"
1339 |
1340 | latest-version@^5.1.0:
1341 | version "5.1.0"
1342 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
1343 | integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
1344 | dependencies:
1345 | package-json "^6.3.0"
1346 |
1347 | lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
1348 | version "1.0.1"
1349 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
1350 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
1351 |
1352 | lowercase-keys@^2.0.0:
1353 | version "2.0.0"
1354 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
1355 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
1356 |
1357 | lru-cache@^6.0.0:
1358 | version "6.0.0"
1359 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
1360 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1361 | dependencies:
1362 | yallist "^4.0.0"
1363 |
1364 | make-dir@^3.0.0:
1365 | version "3.1.0"
1366 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
1367 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
1368 | dependencies:
1369 | semver "^6.0.0"
1370 |
1371 | make-error@^1.1.1:
1372 | version "1.3.6"
1373 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
1374 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
1375 |
1376 | media-typer@0.3.0:
1377 | version "0.3.0"
1378 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
1379 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
1380 |
1381 | methods@^1.1.2:
1382 | version "1.1.2"
1383 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
1384 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
1385 |
1386 | mime-db@1.51.0:
1387 | version "1.51.0"
1388 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
1389 | integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
1390 |
1391 | mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.19, mime-types@~2.1.24:
1392 | version "2.1.34"
1393 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
1394 | integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==
1395 | dependencies:
1396 | mime-db "1.51.0"
1397 |
1398 | mimic-response@^1.0.0, mimic-response@^1.0.1:
1399 | version "1.0.1"
1400 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
1401 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
1402 |
1403 | minimatch@^3.0.4:
1404 | version "3.0.4"
1405 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1406 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1407 | dependencies:
1408 | brace-expansion "^1.1.7"
1409 |
1410 | minimist@^1.2.0, minimist@^1.2.5:
1411 | version "1.2.5"
1412 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
1413 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
1414 |
1415 | minipass@^2.6.0, minipass@^2.9.0:
1416 | version "2.9.0"
1417 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
1418 | integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
1419 | dependencies:
1420 | safe-buffer "^5.1.2"
1421 | yallist "^3.0.0"
1422 |
1423 | minizlib@^1.3.3:
1424 | version "1.3.3"
1425 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
1426 | integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
1427 | dependencies:
1428 | minipass "^2.9.0"
1429 |
1430 | "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5:
1431 | version "0.5.5"
1432 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
1433 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
1434 | dependencies:
1435 | minimist "^1.2.5"
1436 |
1437 | ms@2.1.2:
1438 | version "2.1.2"
1439 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1440 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1441 |
1442 | ms@^2.1.1:
1443 | version "2.1.3"
1444 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1445 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1446 |
1447 | needle@^2.2.1:
1448 | version "2.9.1"
1449 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684"
1450 | integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==
1451 | dependencies:
1452 | debug "^3.2.6"
1453 | iconv-lite "^0.4.4"
1454 | sax "^1.2.4"
1455 |
1456 | negotiator@0.6.2:
1457 | version "0.6.2"
1458 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
1459 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
1460 |
1461 | node-addon-api@^3.0.0:
1462 | version "3.2.1"
1463 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161"
1464 | integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==
1465 |
1466 | node-gyp@3.x:
1467 | version "3.8.0"
1468 | resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
1469 | integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==
1470 | dependencies:
1471 | fstream "^1.0.0"
1472 | glob "^7.0.3"
1473 | graceful-fs "^4.1.2"
1474 | mkdirp "^0.5.0"
1475 | nopt "2 || 3"
1476 | npmlog "0 || 1 || 2 || 3 || 4"
1477 | osenv "0"
1478 | request "^2.87.0"
1479 | rimraf "2"
1480 | semver "~5.3.0"
1481 | tar "^2.0.0"
1482 | which "1"
1483 |
1484 | node-pre-gyp@^0.11.0:
1485 | version "0.11.0"
1486 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054"
1487 | integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==
1488 | dependencies:
1489 | detect-libc "^1.0.2"
1490 | mkdirp "^0.5.1"
1491 | needle "^2.2.1"
1492 | nopt "^4.0.1"
1493 | npm-packlist "^1.1.6"
1494 | npmlog "^4.0.2"
1495 | rc "^1.2.7"
1496 | rimraf "^2.6.1"
1497 | semver "^5.3.0"
1498 | tar "^4"
1499 |
1500 | nodemon@^2.0.7:
1501 | version "2.0.15"
1502 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.15.tgz#504516ce3b43d9dc9a955ccd9ec57550a31a8d4e"
1503 | integrity sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==
1504 | dependencies:
1505 | chokidar "^3.5.2"
1506 | debug "^3.2.7"
1507 | ignore-by-default "^1.0.1"
1508 | minimatch "^3.0.4"
1509 | pstree.remy "^1.1.8"
1510 | semver "^5.7.1"
1511 | supports-color "^5.5.0"
1512 | touch "^3.1.0"
1513 | undefsafe "^2.0.5"
1514 | update-notifier "^5.1.0"
1515 |
1516 | "nopt@2 || 3":
1517 | version "3.0.6"
1518 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
1519 | integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
1520 | dependencies:
1521 | abbrev "1"
1522 |
1523 | nopt@^4.0.1:
1524 | version "4.0.3"
1525 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
1526 | integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
1527 | dependencies:
1528 | abbrev "1"
1529 | osenv "^0.1.4"
1530 |
1531 | nopt@~1.0.10:
1532 | version "1.0.10"
1533 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
1534 | integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=
1535 | dependencies:
1536 | abbrev "1"
1537 |
1538 | normalize-path@^3.0.0, normalize-path@~3.0.0:
1539 | version "3.0.0"
1540 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1541 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1542 |
1543 | normalize-url@^4.1.0:
1544 | version "4.5.1"
1545 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
1546 | integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
1547 |
1548 | npm-bundled@^1.0.1:
1549 | version "1.1.2"
1550 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1"
1551 | integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==
1552 | dependencies:
1553 | npm-normalize-package-bin "^1.0.1"
1554 |
1555 | npm-normalize-package-bin@^1.0.1:
1556 | version "1.0.1"
1557 | resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
1558 | integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
1559 |
1560 | npm-packlist@^1.1.6:
1561 | version "1.4.8"
1562 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
1563 | integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
1564 | dependencies:
1565 | ignore-walk "^3.0.1"
1566 | npm-bundled "^1.0.1"
1567 | npm-normalize-package-bin "^1.0.1"
1568 |
1569 | "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2:
1570 | version "4.1.2"
1571 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
1572 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
1573 | dependencies:
1574 | are-we-there-yet "~1.1.2"
1575 | console-control-strings "~1.1.0"
1576 | gauge "~2.7.3"
1577 | set-blocking "~2.0.0"
1578 |
1579 | number-is-nan@^1.0.0:
1580 | version "1.0.1"
1581 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1582 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
1583 |
1584 | oauth-sign@~0.9.0:
1585 | version "0.9.0"
1586 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
1587 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
1588 |
1589 | object-assign@^4.1.0:
1590 | version "4.1.1"
1591 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1592 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1593 |
1594 | object-inspect@^1.9.0:
1595 | version "1.11.0"
1596 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1"
1597 | integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==
1598 |
1599 | on-finished@^2.3.0:
1600 | version "2.3.0"
1601 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
1602 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
1603 | dependencies:
1604 | ee-first "1.1.1"
1605 |
1606 | once@^1.3.0, once@^1.3.1, once@^1.4.0:
1607 | version "1.4.0"
1608 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1609 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1610 | dependencies:
1611 | wrappy "1"
1612 |
1613 | only@~0.0.2:
1614 | version "0.0.2"
1615 | resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4"
1616 | integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=
1617 |
1618 | os-homedir@^1.0.0:
1619 | version "1.0.2"
1620 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1621 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
1622 |
1623 | os-tmpdir@^1.0.0:
1624 | version "1.0.2"
1625 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1626 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
1627 |
1628 | osenv@0, osenv@^0.1.4:
1629 | version "0.1.5"
1630 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
1631 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
1632 | dependencies:
1633 | os-homedir "^1.0.0"
1634 | os-tmpdir "^1.0.0"
1635 |
1636 | p-cancelable@^1.0.0:
1637 | version "1.1.0"
1638 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
1639 | integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
1640 |
1641 | package-json@^6.3.0:
1642 | version "6.5.0"
1643 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
1644 | integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
1645 | dependencies:
1646 | got "^9.6.0"
1647 | registry-auth-token "^4.0.0"
1648 | registry-url "^5.0.0"
1649 | semver "^6.2.0"
1650 |
1651 | parseurl@^1.3.2:
1652 | version "1.3.3"
1653 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
1654 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
1655 |
1656 | path-is-absolute@1.0.1, path-is-absolute@^1.0.0:
1657 | version "1.0.1"
1658 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1659 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1660 |
1661 | path-key@^3.1.0:
1662 | version "3.1.1"
1663 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1664 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1665 |
1666 | path-to-regexp@^6.1.0:
1667 | version "6.2.0"
1668 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38"
1669 | integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==
1670 |
1671 | performance-now@^2.1.0:
1672 | version "2.1.0"
1673 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
1674 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
1675 |
1676 | picomatch@^2.0.4, picomatch@^2.2.1:
1677 | version "2.3.0"
1678 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
1679 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
1680 |
1681 | prepend-http@^2.0.0:
1682 | version "2.0.0"
1683 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
1684 | integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
1685 |
1686 | process-nextick-args@~2.0.0:
1687 | version "2.0.1"
1688 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
1689 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
1690 |
1691 | psl@^1.1.28:
1692 | version "1.8.0"
1693 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
1694 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
1695 |
1696 | pstree.remy@^1.1.8:
1697 | version "1.1.8"
1698 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
1699 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
1700 |
1701 | pump@^3.0.0:
1702 | version "3.0.0"
1703 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
1704 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
1705 | dependencies:
1706 | end-of-stream "^1.1.0"
1707 | once "^1.3.1"
1708 |
1709 | punycode@^2.1.0, punycode@^2.1.1:
1710 | version "2.1.1"
1711 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1712 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1713 |
1714 | pupa@^2.1.1:
1715 | version "2.1.1"
1716 | resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62"
1717 | integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==
1718 | dependencies:
1719 | escape-goat "^2.0.0"
1720 |
1721 | qs@^6.5.2:
1722 | version "6.10.1"
1723 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a"
1724 | integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==
1725 | dependencies:
1726 | side-channel "^1.0.4"
1727 |
1728 | qs@~6.5.2:
1729 | version "6.5.2"
1730 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
1731 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
1732 |
1733 | query-string@^7.0.1:
1734 | version "7.0.1"
1735 | resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.0.1.tgz#45bd149cf586aaa582dffc7ec7a8ad97dd02f75d"
1736 | integrity sha512-uIw3iRvHnk9to1blJCG3BTc+Ro56CBowJXKmNNAm3RulvPBzWLRqKSiiDk+IplJhsydwtuNMHi8UGQFcCLVfkA==
1737 | dependencies:
1738 | decode-uri-component "^0.2.0"
1739 | filter-obj "^1.1.0"
1740 | split-on-first "^1.0.0"
1741 | strict-uri-encode "^2.0.0"
1742 |
1743 | raw-body@^2.3.3:
1744 | version "2.4.2"
1745 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.2.tgz#baf3e9c21eebced59dd6533ac872b71f7b61cb32"
1746 | integrity sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==
1747 | dependencies:
1748 | bytes "3.1.1"
1749 | http-errors "1.8.1"
1750 | iconv-lite "0.4.24"
1751 | unpipe "1.0.0"
1752 |
1753 | rc@^1.2.7, rc@^1.2.8:
1754 | version "1.2.8"
1755 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
1756 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
1757 | dependencies:
1758 | deep-extend "^0.6.0"
1759 | ini "~1.3.0"
1760 | minimist "^1.2.0"
1761 | strip-json-comments "~2.0.1"
1762 |
1763 | readable-stream@^2.0.6:
1764 | version "2.3.7"
1765 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
1766 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
1767 | dependencies:
1768 | core-util-is "~1.0.0"
1769 | inherits "~2.0.3"
1770 | isarray "~1.0.0"
1771 | process-nextick-args "~2.0.0"
1772 | safe-buffer "~5.1.1"
1773 | string_decoder "~1.1.1"
1774 | util-deprecate "~1.0.1"
1775 |
1776 | readdirp@~3.6.0:
1777 | version "3.6.0"
1778 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
1779 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
1780 | dependencies:
1781 | picomatch "^2.2.1"
1782 |
1783 | registry-auth-token@^4.0.0:
1784 | version "4.2.1"
1785 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250"
1786 | integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==
1787 | dependencies:
1788 | rc "^1.2.8"
1789 |
1790 | registry-url@^5.0.0:
1791 | version "5.1.0"
1792 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"
1793 | integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==
1794 | dependencies:
1795 | rc "^1.2.8"
1796 |
1797 | request@^2.87.0:
1798 | version "2.88.2"
1799 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
1800 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
1801 | dependencies:
1802 | aws-sign2 "~0.7.0"
1803 | aws4 "^1.8.0"
1804 | caseless "~0.12.0"
1805 | combined-stream "~1.0.6"
1806 | extend "~3.0.2"
1807 | forever-agent "~0.6.1"
1808 | form-data "~2.3.2"
1809 | har-validator "~5.1.3"
1810 | http-signature "~1.2.0"
1811 | is-typedarray "~1.0.0"
1812 | isstream "~0.1.2"
1813 | json-stringify-safe "~5.0.1"
1814 | mime-types "~2.1.19"
1815 | oauth-sign "~0.9.0"
1816 | performance-now "^2.1.0"
1817 | qs "~6.5.2"
1818 | safe-buffer "^5.1.2"
1819 | tough-cookie "~2.5.0"
1820 | tunnel-agent "^0.6.0"
1821 | uuid "^3.3.2"
1822 |
1823 | resolve-path@^1.4.0:
1824 | version "1.4.0"
1825 | resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7"
1826 | integrity sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=
1827 | dependencies:
1828 | http-errors "~1.6.2"
1829 | path-is-absolute "1.0.1"
1830 |
1831 | responselike@^1.0.2:
1832 | version "1.0.2"
1833 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"
1834 | integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
1835 | dependencies:
1836 | lowercase-keys "^1.0.0"
1837 |
1838 | rimraf@2, rimraf@^2.6.1:
1839 | version "2.7.1"
1840 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
1841 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
1842 | dependencies:
1843 | glob "^7.1.3"
1844 |
1845 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1846 | version "5.1.2"
1847 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
1848 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
1849 |
1850 | safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1:
1851 | version "5.2.1"
1852 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1853 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1854 |
1855 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
1856 | version "2.1.2"
1857 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1858 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1859 |
1860 | sax@>=0.6.0, sax@^1.2.4:
1861 | version "1.2.4"
1862 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
1863 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
1864 |
1865 | semver-diff@^3.1.1:
1866 | version "3.1.1"
1867 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b"
1868 | integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==
1869 | dependencies:
1870 | semver "^6.3.0"
1871 |
1872 | semver@^5.3.0, semver@^5.7.1:
1873 | version "5.7.1"
1874 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
1875 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
1876 |
1877 | semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
1878 | version "6.3.0"
1879 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
1880 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
1881 |
1882 | semver@^7.3.4:
1883 | version "7.3.5"
1884 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
1885 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
1886 | dependencies:
1887 | lru-cache "^6.0.0"
1888 |
1889 | semver@~5.3.0:
1890 | version "5.3.0"
1891 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
1892 | integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
1893 |
1894 | set-blocking@~2.0.0:
1895 | version "2.0.0"
1896 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
1897 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
1898 |
1899 | setprototypeof@1.1.0:
1900 | version "1.1.0"
1901 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
1902 | integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
1903 |
1904 | setprototypeof@1.2.0:
1905 | version "1.2.0"
1906 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
1907 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
1908 |
1909 | shebang-command@^2.0.0:
1910 | version "2.0.0"
1911 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1912 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1913 | dependencies:
1914 | shebang-regex "^3.0.0"
1915 |
1916 | shebang-regex@^3.0.0:
1917 | version "3.0.0"
1918 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1919 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1920 |
1921 | short-uuid@^4.2.0:
1922 | version "4.2.0"
1923 | resolved "https://registry.yarnpkg.com/short-uuid/-/short-uuid-4.2.0.tgz#3706d9e7287ac589dc5ffe324d3e34817a07540b"
1924 | integrity sha512-r3cxuPPZSuF0QkKsK9bBR7u+7cwuCRzWzgjPh07F5N2iIUNgblnMHepBY16xgj5t1lG9iOP9k/TEafY1qhRzaw==
1925 | dependencies:
1926 | any-base "^1.1.0"
1927 | uuid "^8.3.2"
1928 |
1929 | side-channel@^1.0.4:
1930 | version "1.0.4"
1931 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
1932 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
1933 | dependencies:
1934 | call-bind "^1.0.0"
1935 | get-intrinsic "^1.0.2"
1936 | object-inspect "^1.9.0"
1937 |
1938 | signal-exit@^3.0.0, signal-exit@^3.0.2:
1939 | version "3.0.6"
1940 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af"
1941 | integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==
1942 |
1943 | source-map-support@^0.5.17:
1944 | version "0.5.21"
1945 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
1946 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
1947 | dependencies:
1948 | buffer-from "^1.0.0"
1949 | source-map "^0.6.0"
1950 |
1951 | source-map@^0.6.0:
1952 | version "0.6.1"
1953 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
1954 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
1955 |
1956 | split-on-first@^1.0.0:
1957 | version "1.1.0"
1958 | resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
1959 | integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
1960 |
1961 | sqlite3@^5.0.2:
1962 | version "5.0.2"
1963 | resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.0.2.tgz#00924adcc001c17686e0a6643b6cbbc2d3965083"
1964 | integrity sha512-1SdTNo+BVU211Xj1csWa8lV6KM0CtucDwRyA0VHl91wEH1Mgh7RxUpI4rVvG7OhHrzCSGaVyW5g8vKvlrk9DJA==
1965 | dependencies:
1966 | node-addon-api "^3.0.0"
1967 | node-pre-gyp "^0.11.0"
1968 | optionalDependencies:
1969 | node-gyp "3.x"
1970 |
1971 | sshpk@^1.7.0:
1972 | version "1.16.1"
1973 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
1974 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
1975 | dependencies:
1976 | asn1 "~0.2.3"
1977 | assert-plus "^1.0.0"
1978 | bcrypt-pbkdf "^1.0.0"
1979 | dashdash "^1.12.0"
1980 | ecc-jsbn "~0.1.1"
1981 | getpass "^0.1.1"
1982 | jsbn "~0.1.0"
1983 | safer-buffer "^2.0.2"
1984 | tweetnacl "~0.14.0"
1985 |
1986 | "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0:
1987 | version "1.5.0"
1988 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
1989 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
1990 |
1991 | strict-uri-encode@^2.0.0:
1992 | version "2.0.0"
1993 | resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
1994 | integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
1995 |
1996 | string-width@^1.0.1:
1997 | version "1.0.2"
1998 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
1999 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
2000 | dependencies:
2001 | code-point-at "^1.0.0"
2002 | is-fullwidth-code-point "^1.0.0"
2003 | strip-ansi "^3.0.0"
2004 |
2005 | "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.2:
2006 | version "4.2.3"
2007 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
2008 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
2009 | dependencies:
2010 | emoji-regex "^8.0.0"
2011 | is-fullwidth-code-point "^3.0.0"
2012 | strip-ansi "^6.0.1"
2013 |
2014 | string_decoder@~1.1.1:
2015 | version "1.1.1"
2016 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
2017 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
2018 | dependencies:
2019 | safe-buffer "~5.1.0"
2020 |
2021 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
2022 | version "3.0.1"
2023 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
2024 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
2025 | dependencies:
2026 | ansi-regex "^2.0.0"
2027 |
2028 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
2029 | version "6.0.1"
2030 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
2031 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
2032 | dependencies:
2033 | ansi-regex "^5.0.1"
2034 |
2035 | strip-json-comments@~2.0.1:
2036 | version "2.0.1"
2037 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
2038 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
2039 |
2040 | supports-color@^5.5.0:
2041 | version "5.5.0"
2042 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
2043 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
2044 | dependencies:
2045 | has-flag "^3.0.0"
2046 |
2047 | supports-color@^7.1.0:
2048 | version "7.2.0"
2049 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
2050 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
2051 | dependencies:
2052 | has-flag "^4.0.0"
2053 |
2054 | tar@^2.0.0:
2055 | version "2.2.2"
2056 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
2057 | integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==
2058 | dependencies:
2059 | block-stream "*"
2060 | fstream "^1.0.12"
2061 | inherits "2"
2062 |
2063 | tar@^4:
2064 | version "4.4.19"
2065 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3"
2066 | integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==
2067 | dependencies:
2068 | chownr "^1.1.4"
2069 | fs-minipass "^1.2.7"
2070 | minipass "^2.9.0"
2071 | minizlib "^1.3.3"
2072 | mkdirp "^0.5.5"
2073 | safe-buffer "^5.2.1"
2074 | yallist "^3.1.1"
2075 |
2076 | to-readable-stream@^1.0.0:
2077 | version "1.0.0"
2078 | resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771"
2079 | integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
2080 |
2081 | to-regex-range@^5.0.1:
2082 | version "5.0.1"
2083 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
2084 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
2085 | dependencies:
2086 | is-number "^7.0.0"
2087 |
2088 | toidentifier@1.0.1:
2089 | version "1.0.1"
2090 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
2091 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
2092 |
2093 | touch@^3.1.0:
2094 | version "3.1.0"
2095 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
2096 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==
2097 | dependencies:
2098 | nopt "~1.0.10"
2099 |
2100 | tough-cookie@~2.5.0:
2101 | version "2.5.0"
2102 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
2103 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
2104 | dependencies:
2105 | psl "^1.1.28"
2106 | punycode "^2.1.1"
2107 |
2108 | ts-node@^9.1.1:
2109 | version "9.1.1"
2110 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d"
2111 | integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==
2112 | dependencies:
2113 | arg "^4.1.0"
2114 | create-require "^1.1.0"
2115 | diff "^4.0.1"
2116 | make-error "^1.1.1"
2117 | source-map-support "^0.5.17"
2118 | yn "3.1.1"
2119 |
2120 | tsscmp@1.0.6:
2121 | version "1.0.6"
2122 | resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
2123 | integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
2124 |
2125 | tunnel-agent@^0.6.0:
2126 | version "0.6.0"
2127 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
2128 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
2129 | dependencies:
2130 | safe-buffer "^5.0.1"
2131 |
2132 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
2133 | version "0.14.5"
2134 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
2135 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
2136 |
2137 | type-fest@^0.20.2:
2138 | version "0.20.2"
2139 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
2140 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
2141 |
2142 | type-is@^1.6.16:
2143 | version "1.6.18"
2144 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
2145 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
2146 | dependencies:
2147 | media-typer "0.3.0"
2148 | mime-types "~2.1.24"
2149 |
2150 | typedarray-to-buffer@^3.1.5:
2151 | version "3.1.5"
2152 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
2153 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
2154 | dependencies:
2155 | is-typedarray "^1.0.0"
2156 |
2157 | typescript@^4.2.3:
2158 | version "4.5.2"
2159 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.2.tgz#8ac1fba9f52256fdb06fb89e4122fa6a346c2998"
2160 | integrity sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==
2161 |
2162 | undefsafe@^2.0.5:
2163 | version "2.0.5"
2164 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
2165 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
2166 |
2167 | unique-string@^2.0.0:
2168 | version "2.0.0"
2169 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
2170 | integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
2171 | dependencies:
2172 | crypto-random-string "^2.0.0"
2173 |
2174 | unpipe@1.0.0:
2175 | version "1.0.0"
2176 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
2177 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
2178 |
2179 | update-notifier@^5.1.0:
2180 | version "5.1.0"
2181 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9"
2182 | integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==
2183 | dependencies:
2184 | boxen "^5.0.0"
2185 | chalk "^4.1.0"
2186 | configstore "^5.0.1"
2187 | has-yarn "^2.1.0"
2188 | import-lazy "^2.1.0"
2189 | is-ci "^2.0.0"
2190 | is-installed-globally "^0.4.0"
2191 | is-npm "^5.0.0"
2192 | is-yarn-global "^0.3.0"
2193 | latest-version "^5.1.0"
2194 | pupa "^2.1.1"
2195 | semver "^7.3.4"
2196 | semver-diff "^3.1.1"
2197 | xdg-basedir "^4.0.0"
2198 |
2199 | uri-js@^4.2.2:
2200 | version "4.4.1"
2201 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
2202 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
2203 | dependencies:
2204 | punycode "^2.1.0"
2205 |
2206 | url-parse-lax@^3.0.0:
2207 | version "3.0.0"
2208 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c"
2209 | integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
2210 | dependencies:
2211 | prepend-http "^2.0.0"
2212 |
2213 | util-deprecate@~1.0.1:
2214 | version "1.0.2"
2215 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2216 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
2217 |
2218 | uuid@^3.3.2:
2219 | version "3.4.0"
2220 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
2221 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
2222 |
2223 | uuid@^8.3.2:
2224 | version "8.3.2"
2225 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
2226 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
2227 |
2228 | vary@^1.1.2:
2229 | version "1.1.2"
2230 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
2231 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
2232 |
2233 | verror@1.10.0:
2234 | version "1.10.0"
2235 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
2236 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
2237 | dependencies:
2238 | assert-plus "^1.0.0"
2239 | core-util-is "1.0.2"
2240 | extsprintf "^1.2.0"
2241 |
2242 | which@1:
2243 | version "1.3.1"
2244 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
2245 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
2246 | dependencies:
2247 | isexe "^2.0.0"
2248 |
2249 | which@^2.0.1:
2250 | version "2.0.2"
2251 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
2252 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
2253 | dependencies:
2254 | isexe "^2.0.0"
2255 |
2256 | wide-align@^1.1.0:
2257 | version "1.1.5"
2258 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
2259 | integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
2260 | dependencies:
2261 | string-width "^1.0.2 || 2 || 3 || 4"
2262 |
2263 | widest-line@^3.1.0:
2264 | version "3.1.0"
2265 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
2266 | integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
2267 | dependencies:
2268 | string-width "^4.0.0"
2269 |
2270 | wrap-ansi@^7.0.0:
2271 | version "7.0.0"
2272 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
2273 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
2274 | dependencies:
2275 | ansi-styles "^4.0.0"
2276 | string-width "^4.1.0"
2277 | strip-ansi "^6.0.0"
2278 |
2279 | wrappy@1:
2280 | version "1.0.2"
2281 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2282 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
2283 |
2284 | write-file-atomic@^3.0.0:
2285 | version "3.0.3"
2286 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
2287 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
2288 | dependencies:
2289 | imurmurhash "^0.1.4"
2290 | is-typedarray "^1.0.0"
2291 | signal-exit "^3.0.2"
2292 | typedarray-to-buffer "^3.1.5"
2293 |
2294 | xdg-basedir@^4.0.0:
2295 | version "4.0.0"
2296 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
2297 | integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
2298 |
2299 | xml2js@^0.4.23:
2300 | version "0.4.23"
2301 | resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
2302 | integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
2303 | dependencies:
2304 | sax ">=0.6.0"
2305 | xmlbuilder "~11.0.0"
2306 |
2307 | xmlbuilder@~11.0.0:
2308 | version "11.0.1"
2309 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
2310 | integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
2311 |
2312 | yallist@^3.0.0, yallist@^3.1.1:
2313 | version "3.1.1"
2314 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
2315 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
2316 |
2317 | yallist@^4.0.0:
2318 | version "4.0.0"
2319 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
2320 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
2321 |
2322 | ylru@^1.2.0:
2323 | version "1.2.1"
2324 | resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f"
2325 | integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==
2326 |
2327 | yn@3.1.1:
2328 | version "3.1.1"
2329 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
2330 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
2331 |
--------------------------------------------------------------------------------