Compare commits

..

No commits in common. "database-functions-refactor" and "main" have entirely different histories.

27 changed files with 276 additions and 1079 deletions

View File

@ -1,17 +1,17 @@
import getNewPrompt from "./database-calls/getNewPrompt.mjs"
import createNote from "./firefish-calls/createNote.mjs" import createNote from "./firefish-calls/createNote.mjs"
import makeText from "./makeText.mjs" import makeText from "./makeText.mjs"
import {insertPublished} from "./database-calls/INSERTFunctions.mjs" import insertPublished from "./database-calls/insertPublished.mjs"
import logger from "./logger.mjs" import logger from "./logger.mjs"
import { deleteFromBuffer } from "./database-calls/DELETEFunctions.mjs" import {deleteFromBuffer, todaysPromptAlreadyPublished, tableIsNotEmpty, getPromptFromBuffer} from "./database-calls/db.mjs"
import { todaysPromptAlreadyPublished, tableIsNotEmpty } from "./database-calls/EXISTSFunctions.mjs"
import { getPromptFromBuffer, getNewPrompt } from "./database-calls/GETFunctions.mjs"
export default async function checkAndPublish (db) {
export default async function checkAndPublish () {
logger.trace("checkAndPublish called") logger.trace("checkAndPublish called")
logger.trace(todaysPromptAlreadyPublished(db)) logger.trace(todaysPromptAlreadyPublished())
if(!await todaysPromptAlreadyPublished(db)){ if(!await todaysPromptAlreadyPublished()){
try { try {
const prompt = await tableIsNotEmpty(db,'buffer') ? await getPromptFromBuffer(db) : await getNewPrompt(db) const prompt = await tableIsNotEmpty('buffer') ? await getPromptFromBuffer() : await getNewPrompt()
logger.trace({prompt:prompt},"prompt acquired successfully!") logger.trace({prompt:prompt},"prompt acquired successfully!")
try { try {
const text = makeText(prompt) const text = makeText(prompt)
@ -19,9 +19,9 @@ export default async function checkAndPublish (db) {
const note = await createNote(text) const note = await createNote(text)
logger.trace("createNote successful!") logger.trace("createNote successful!")
try { try {
let response = await deleteFromBuffer(db,prompt.word) let response = await deleteFromBuffer(prompt.word)
if(response===0){logger.error("deleteFromBuffer failed! Are you trying to delete a word that isn't there?")} if(response===0){logger.error("deleteFromBuffer failed! Are you trying to delete a word that isn't there?")}
response = await insertPublished(db,note, prompt.word) response = await insertPublished(note, prompt.word)
logger.trace("insertPublished successful!") logger.trace("insertPublished successful!")
} catch (error) { } catch (error) {
logger.error(error, 'insertPublished failed!') logger.error(error, 'insertPublished failed!')

View File

@ -1,700 +0,0 @@
id,name
1,Aardvark
2,Abyssinian
3,Adelie Penguin
4,Affenpinscher
5,Afghan Hound
6,African Bush Elephant
7,African Civet
8,African Clawed Frog
9,African Forest Elephant
10,African Palm Civet
11,African Penguin
12,African Tree Toad
13,African Wild Dog
14,Ainu Dog
15,Airedale Terrier
16,Akbash
17,Akita
18,Alaskan Malamute
19,Albatross
20,Aldabra Giant Tortoise
21,Alligator
22,Alpaca
23,Alpine Dachsbracke
24,Amazon River Dolphin (Pink Dolphin)
25,American Alsatian
26,American Bulldog
27,American Cocker Spaniel
28,American Coonhound
29,American Eskimo Dog
30,American Foxhound
31,American Pit Bull Terrier
32,American Staffordshire Terrier
33,American Water Spaniel
34,Amur Leopard
35,Anatolian Shepherd Dog
36,Anchovies
37,Angelfish
38,Ant
39,Anteater
40,Antelope
41,Appenzeller Dog
42,Arapaima
43,Arctic Fox
44,Arctic Hare
45,Arctic Wolf
46,Armadillo
47,Asian Elephant
48,Asian Giant Hornet
49,Asian Palm Civet
50,Asiatic Black Bear
51,Aurochs
52,Australian Cattle Dog
53,Australian Kelpie Dog
54,Australian Mist
55,Australian Shepherd
56,Australian Terrier
57,Avocet
58,Axolotl
59,Aye Aye
60,Baboon
61,Bactrian Camel
62,Badger
63,Baiji
64,Balinese
65,Banded Palm Civet
66,Bandicoot
67,Barb
68,Barn Owl
69,Barnacle
70,Barracuda
71,Barramundi Fish
72,Basenji Dog
73,Basking Shark
74,Basset Fauve de Bretagne
75,Basset Hound
76,Bat
77,Bavarian Mountain Hound
78,Beagle
79,Bear
80,Bearded Collie
81,Bearded Dragon
82,Beaver
83,Bedlington Terrier
84,Beetle
85,Beluga Sturgeon
86,Bengal Tiger
87,Bernese Mountain Dog
88,Bichir
89,Bichon Frise
90,Biewer Terrier
91,Binturong
92,Bird
93,Birds Of Paradise
94,Birman
95,Bison
96,Black Marlin
97,Black Rhinoceros
98,Black Russian Terrier
99,Black Widow Spider
100,Blobfish
101,Bloodhound
102,Blue Jay
103,Blue Lacy Dog
104,Blue Whale
105,Bluetick Coonhound
106,Bobcat
107,Bolognese Dog
108,Bombay
109,Bongo
110,Bonito Fish
111,Bonobo
112,Booby
113,Border Collie
114,Border Terrier
115,Bornean Orang-utan
116,Borneo Elephant
117,Boston Terrier: Complete Pet Guide
118,Bottlenose Dolphin
119,Bowfin
120,Bowhead Whale
121,Boxer Dog
122,Boykin Spaniel
123,Brazilian Terrier
124,British Timber
125,Brown Bear
126,Budgerigar
127,Buffalo
128,Bull Shark
129,Bull Terrier
130,Bulldog
131,Bullfrog
132,Bullmastiff
133,Bumblebee
134,Burmese
135,Burrowing Frog
136,Butterfly
137,Butterfly Fish
138,Caiman
139,Caiman Lizard
140,Cairn Terrier
141,Camel
142,Camel Spider
143,Canaan Dog
144,Canadian Eskimo Dog
145,Capybara
146,Caracal
147,Carolina Dog
148,Carp
149,Cassowary
150,Cat
151,Caterpillar
152,Catfish
153,Cavalier King Charles Spaniel
154,Centipede
155,Cesky Fousek
156,Chameleon
157,Chamois
158,Cheetah
159,Chesapeake Bay Retriever
160,Chicken
161,Chihuahua
162,Chimaera
163,Chimpanzee
164,Chinchilla
165,Chinese Crested Dog
166,Chinook
167,Chinstrap Penguin
168,Chipmunk
169,Chow Chow
170,Cichlid
171,Clouded Leopard
172,Clownfish
173,Clumber Spaniel
174,Coati
175,Cockatoo
176,Cockroach
177,Coelacanth
178,Collared Peccary
179,Collie
180,Colossal Squid
181,Common Buzzard
182,Common Frog
183,Common Loon
184,Common Toad
185,Coopers Hawk
186,Coral
187,Cotton-top Tamarin
188,Cougar
189,Cow
190,Coyote
191,Crab
192,Crab-Eating Macaque
193,Crane
194,Crested Penguin
195,Crocodile
196,Cross River Gorilla
197,Curly Coated Retriever
198,Cuscus
199,Cuttlefish
200,Dachshund
201,Dalmatian
202,Darwins Frog
203,Deer
204,Desert Tortoise
205,Deutsche Bracke
206,Dhole
207,Dingo
208,Discus
209,Doberman Pinscher
210,Dodo
211,Dog
212,Dogo Argentino
213,Dogue De Bordeaux
214,Dolphin
215,Donkey
216,Dormouse
217,Dragonfish
218,Dragonfly
219,Drever
220,Drum Fish
221,Duck
222,Dugong
223,Dunker
224,Dusky Dolphin
225,Dwarf Crocodile
226,Eagle
227,Earwig
228,Eastern Gorilla
229,Eastern Lowland Gorilla
230,Echidna
231,Edible Frog
232,Eel
233,Egyptian Mau
234,Electric Eel
235,Elephant
236,Elephant Seal
237,Elephant Shrew
238,Emperor Penguin
239,Emperor Tamarin
240,Emu
241,English Cocker Spaniel
242,English Shepherd
243,English Springer Spaniel
244,Entlebucher Mountain Dog
245,Epagneul Pont Audemer
246,Ermine
247,Eskimo Dog
248,Estrela Mountain Dog
249,Falcon
250,False Killer Whale
251,Fangtooth
252,Fennec Fox
253,Ferret
254,Field Spaniel
255,Fin Whale
256,Finnish Spitz
257,Fire-Bellied Toad
258,Fish
259,Fishing Cat
260,Flamingo
261,Flat Coat Retriever
262,Flounder
263,Fluke Fish (summer flounder)
264,Fly
265,Flying Squirrel
266,Fossa
267,Fox
268,Fox Terrier
269,French Bulldog
270,Frigatebird
271,Frilled Lizard
272,Frilled Shark
273,Frog
274,Fur Seal
275,Galapagos Penguin
276,Galapagos Tortoise
277,Gar
278,Gecko
279,Gentoo Penguin
280,Geoffroys Tamarin
281,Gerbil
282,German Pinscher
283,German Shepherd Guide
284,Gharial
285,Giant African Land Snail
286,Giant Clam
287,Giant Panda Bear
288,Giant Schnauzer
289,Gibbon
290,Gila Monster
291,Giraffe
292,Glass Lizard
293,Glow Worm
294,Goat
295,Goblin Shark
296,Golden Lion Tamarin
297,Golden Masked Owl
298,Golden Oriole
299,Golden Retriever Complete Pet Guide
300,Golden-Crowned Flying Fox
301,Goose
302,Gopher
303,Gorilla
304,Grasshopper
305,Great Dane
306,Great Pyrenees
307,Great White Shark
308,Greater Swiss Mountain Dog
309,Green Anole
310,Green Bee-Eater
311,Greenland Dog
312,Grey Mouse Lemur
313,Grey Reef Shark
314,Grey Seal
315,Greyhound
316,Grizzly Bear
317,Grouse
318,Guinea Fowl
319,Guinea Pig
320,Guppy
321,Hagfish
322,Hammerhead Shark
323,Hamster
324,Hare
325,Harpy Eagle
326,Harrier
327,Havanese
328,Hawaiian Crow
329,Hedgehog
330,Hercules Beetle
331,Hermit Crab
332,Heron
333,Herring
334,Highland Cattle
335,Himalayan
336,Hippopotamus
337,Honey Badger
338,Honey Bee
339,Hoopoe
340,Horn Shark
341,Hornbill
342,Horned Frog
343,Horse
344,Horseshoe Crab
345,Howler Monkey
346,Human
347,Humboldt Penguin
348,Hummingbird
349,Humpback Whale
350,Hyena
351,Ibis
352,Ibizan Hound
353,Iguana
354,Immortal Jellyfish
355,Impala
356,Indian Elephant
357,Indian Palm Squirrel
358,Indian Rhinoceros
359,Indian Star Tortoise
360,Indochinese Tiger
361,Indri
362,Insects
363,Irish Setter Complete Pet Guide
364,Irish WolfHound
365,Italian Greyhound
366,Jack Russel
367,Jackal
368,Jaguar
369,Japanese Chin
370,Japanese Macaque
371,Javan Rhinoceros
372,Javanese
373,Jellyfish
374,Jerboa
375,Kakapo
376,Kangaroo
377,Keel-Billed Toucan
378,Keeshond
379,Killer Whale
380,King Cobra
381,King Crab
382,King Penguin
383,Kingfisher
384,Kiwi
385,Koala
386,Komodo Dragon
387,Krill
388,Kudu
389,Labradoodle
390,Labrador Retriever
391,Ladybug
392,Lamprey
393,Leaf-Tailed Gecko
394,Lemming
395,Lemur
396,Leopard
397,Leopard Cat
398,Leopard Seal
399,Leopard Tortoise
400,Liger
401,Lion
402,Lionfish
403,Little Penguin
404,Lizard
405,Llama
406,Lobster
407,Long-Eared Owl
408,Lungfish
409,Lynx
410,Macaroni Penguin
411,Macaw
412,Magellanic Penguin
413,Magpie
414,Maine Coon
415,Malayan Civet
416,Malayan Tiger
417,Maltese
418,Mammals
419,Manatee
420,Mandrill
421,Maned Wolf
422,Manta Ray
423,Marine Toad
424,Markhor
425,Marmot
426,Marsh Frog
427,Masked Palm Civet
428,Mastiff
429,Mayfly
430,Meerkat
431,Megalodon
432,Mexican Free-Tailed Bat
433,Milkfish
434,Millipede
435,Mink
436,Minke Whale
437,Mole
438,Molly
439,Monarch Butterfly
440,Mongoose
441,Mongrel
442,Monitor Lizard
443,Monkey
444,Monkfish
445,Monte Iberia Eleuth
446,Moorhen
447,Moose
448,Moray Eel
449,Moth
450,Mountain Gorilla
451,Mountain Lion
452,Mouse
453,Mule
454,Muskrat
455,Narwhal
456,Neanderthal
457,Neapolitan Mastiff
458,Newfoundland
459,Newt
460,Nightingale
461,Norfolk Terrier
462,North American Black Bear
463,Northern Inuit Dog
464,Norwegian Forest
465,Numbat
466,Nurse Shark
467,Ocelot
468,Octopus
469,Okapi
470,Old English Sheepdog
471,Olm
472,Opossum
473,Orang-utan
474,Ostrich
475,Otter
476,Oyster
477,Paddlefish
478,Pademelon
479,Pangolin
480,Panther
481,Parrot
482,Patas Monkey
483,Peacock
484,Pekingese
485,Pelican
486,Penguin
487,Pere Davids Deer
488,Peregrine Falcon
489,Persian
490,Petit Basset Griffon Vendéen
491,Pheasant
492,Pied Tamarin
493,Pig
494,Pika
495,Pike Fish
496,Pink Fairy Armadillo
497,Piranha
498,Platypus
499,Pointer
500,Poison Dart Frog
501,Polar Bear
502,Pond Skater
503,Poodle
504,Pool Frog
505,Porcupine
506,Porpoise
507,Possum
508,Prawn
509,Proboscis Monkey
510,Pufferfish
511,Puffin
512,Pug
513,Puma
514,Purple Emperor Butterfly
515,Puss Moth
516,Pygmy Hippopotamus
517,Pygmy Marmoset
518,Quail
519,Quetzal
520,Quokka
521,Quoll
522,Rabbit
523,Raccoon
524,Raccoon Dog
525,Radiated Tortoise
526,Ragdoll
527,Rat
528,Rattlesnake
529,Red Finch
530,Red Fox
531,Red Knee Tarantula
532,Red Panda
533,Red Wolf
534,Red-handed Tamarin
535,Reindeer
536,Rhinoceros
537,River Turtle
538,Robin
539,Rock Hyrax
540,Rockfish
541,Rockhopper Penguin
542,Roseate Spoonbill
543,Rottweiler
544,Royal Penguin
545,Russian Blue
546,Saarloos Wolfdog
547,Saber-Toothed Tiger
548,Sable
549,Saiga
550,Saint Bernard
551,Salamander
552,Salmon
553,Samoyed
554,Sand Lizard
555,Saola
556,Sardines
557,Sawfish
558,Scimitar-horned Oryx
559,Scorpion
560,Scorpion Fish
561,Sea Dragon
562,Sea Lion
563,Sea Otter
564,Sea Slug
565,Sea Squirt
566,Sea Turtle
567,Sea Urchin
568,Seahorse
569,Seal
570,Serval
571,Shark
572,Sheep
573,Shiba Inu
574,Shih Tzu
575,Shrimp
576,Siamese
577,Siamese Fighting Fish
578,Siberian
579,Siberian Husky
580,Siberian Tiger
581,Silver Dollar
582,Skate Fish
583,Skunk
584,Sloth
585,Slow Worm
586,Snail
587,Snake
588,Snapping Turtle
589,Snowshoe
590,Snowy Owl
591,Somali
592,South China Tiger
593,Spadefoot Toad
594,Sparrow
595,Spectacled Bear
596,Sperm Whale
597,Spider Monkey
598,Spiny Dogfish
599,Spixs Macaw
600,Sponge
601,Squid
602,Squirrel
603,Squirrel Monkey
604,Sri Lankan Elephant
605,Staffordshire Bull Terrier
606,Stag Beetle
607,Starfish
608,Stellers Sea Cow
609,Stick Insect
610,Stingray
611,Stoat
612,Striped Rocket Frog
613,Sturgeon
614,Sucker Fish
615,Sugar Glider
616,Sumatran Elephant
617,Sumatran Orang-utan
618,Sumatran Rhinoceros
619,Sumatran Tiger
620,Sun Bear
621,Swai Fish
622,Swan
623,Swedish Vallhund
624,Tamaskan
625,Tang
626,Tapanuli Orang-utan
627,Tapir
628,Tarpon
629,Tarsier
630,Tasmanian Devil
631,Tawny Owl
632,Teddy Roosevelt Terrier
633,Termite
634,Tetra
635,Thorny Devil
636,Tibetan Mastiff
637,Tiffany
638,Tiger
639,Tiger Salamander
640,Tiger Shark
641,Tortoise
642,Toucan
643,Tree Frog
644,Tropicbird
645,Tuatara
646,Turkey
647,Turkish Angora
648,Uakari
649,Uguisu
650,Umbrellabird
651,Utonagan
652,Vampire Bat
653,Vampire Squid
654,Vaquita
655,Vervet Monkey
656,Vulture
657,Wallaby
658,Walleye Fish
659,Walrus
660,Wandering Albatross
661,Warthog
662,Wasp
663,Water Buffalo
664,Water Dragon
665,Water Vole
666,Weasel
667,Welsh Corgi: The Complete Pet Guide
668,West Highland Terrier
669,Western Gorilla
670,Western Lowland Gorilla
671,Whale Shark
672,Whippet
673,White Rhinoceros
674,White Tiger
675,White-Faced Capuchin
676,Wild Boar
677,Wildebeest
678,Wolf
679,Wolf Eel
680,Wolf Spider
681,Wolffish
682,Wolverine
683,Wombat
684,Woodlouse
685,Woodpecker
686,Woolly Mammoth
687,Woolly Monkey
688,Wrasse
689,Wyoming Toad
690,X-Ray Tetra
691,Xerus
692,Yak
693,Yellow-Eyed Penguin
694,Yorkshire Terrier
695,Zebra
696,Zebra Shark
697,Zebu
698,Zonkey
699,Zorse
1 id name
2 1 Aardvark
3 2 Abyssinian
4 3 Adelie Penguin
5 4 Affenpinscher
6 5 Afghan Hound
7 6 African Bush Elephant
8 7 African Civet
9 8 African Clawed Frog
10 9 African Forest Elephant
11 10 African Palm Civet
12 11 African Penguin
13 12 African Tree Toad
14 13 African Wild Dog
15 14 Ainu Dog
16 15 Airedale Terrier
17 16 Akbash
18 17 Akita
19 18 Alaskan Malamute
20 19 Albatross
21 20 Aldabra Giant Tortoise
22 21 Alligator
23 22 Alpaca
24 23 Alpine Dachsbracke
25 24 Amazon River Dolphin (Pink Dolphin)
26 25 American Alsatian
27 26 American Bulldog
28 27 American Cocker Spaniel
29 28 American Coonhound
30 29 American Eskimo Dog
31 30 American Foxhound
32 31 American Pit Bull Terrier
33 32 American Staffordshire Terrier
34 33 American Water Spaniel
35 34 Amur Leopard
36 35 Anatolian Shepherd Dog
37 36 Anchovies
38 37 Angelfish
39 38 Ant
40 39 Anteater
41 40 Antelope
42 41 Appenzeller Dog
43 42 Arapaima
44 43 Arctic Fox
45 44 Arctic Hare
46 45 Arctic Wolf
47 46 Armadillo
48 47 Asian Elephant
49 48 Asian Giant Hornet
50 49 Asian Palm Civet
51 50 Asiatic Black Bear
52 51 Aurochs
53 52 Australian Cattle Dog
54 53 Australian Kelpie Dog
55 54 Australian Mist
56 55 Australian Shepherd
57 56 Australian Terrier
58 57 Avocet
59 58 Axolotl
60 59 Aye Aye
61 60 Baboon
62 61 Bactrian Camel
63 62 Badger
64 63 Baiji
65 64 Balinese
66 65 Banded Palm Civet
67 66 Bandicoot
68 67 Barb
69 68 Barn Owl
70 69 Barnacle
71 70 Barracuda
72 71 Barramundi Fish
73 72 Basenji Dog
74 73 Basking Shark
75 74 Basset Fauve de Bretagne
76 75 Basset Hound
77 76 Bat
78 77 Bavarian Mountain Hound
79 78 Beagle
80 79 Bear
81 80 Bearded Collie
82 81 Bearded Dragon
83 82 Beaver
84 83 Bedlington Terrier
85 84 Beetle
86 85 Beluga Sturgeon
87 86 Bengal Tiger
88 87 Bernese Mountain Dog
89 88 Bichir
90 89 Bichon Frise
91 90 Biewer Terrier
92 91 Binturong
93 92 Bird
94 93 Birds Of Paradise
95 94 Birman
96 95 Bison
97 96 Black Marlin
98 97 Black Rhinoceros
99 98 Black Russian Terrier
100 99 Black Widow Spider
101 100 Blobfish
102 101 Bloodhound
103 102 Blue Jay
104 103 Blue Lacy Dog
105 104 Blue Whale
106 105 Bluetick Coonhound
107 106 Bobcat
108 107 Bolognese Dog
109 108 Bombay
110 109 Bongo
111 110 Bonito Fish
112 111 Bonobo
113 112 Booby
114 113 Border Collie
115 114 Border Terrier
116 115 Bornean Orang-utan
117 116 Borneo Elephant
118 117 Boston Terrier: Complete Pet Guide
119 118 Bottlenose Dolphin
120 119 Bowfin
121 120 Bowhead Whale
122 121 Boxer Dog
123 122 Boykin Spaniel
124 123 Brazilian Terrier
125 124 British Timber
126 125 Brown Bear
127 126 Budgerigar
128 127 Buffalo
129 128 Bull Shark
130 129 Bull Terrier
131 130 Bulldog
132 131 Bullfrog
133 132 Bullmastiff
134 133 Bumblebee
135 134 Burmese
136 135 Burrowing Frog
137 136 Butterfly
138 137 Butterfly Fish
139 138 Caiman
140 139 Caiman Lizard
141 140 Cairn Terrier
142 141 Camel
143 142 Camel Spider
144 143 Canaan Dog
145 144 Canadian Eskimo Dog
146 145 Capybara
147 146 Caracal
148 147 Carolina Dog
149 148 Carp
150 149 Cassowary
151 150 Cat
152 151 Caterpillar
153 152 Catfish
154 153 Cavalier King Charles Spaniel
155 154 Centipede
156 155 Cesky Fousek
157 156 Chameleon
158 157 Chamois
159 158 Cheetah
160 159 Chesapeake Bay Retriever
161 160 Chicken
162 161 Chihuahua
163 162 Chimaera
164 163 Chimpanzee
165 164 Chinchilla
166 165 Chinese Crested Dog
167 166 Chinook
168 167 Chinstrap Penguin
169 168 Chipmunk
170 169 Chow Chow
171 170 Cichlid
172 171 Clouded Leopard
173 172 Clownfish
174 173 Clumber Spaniel
175 174 Coati
176 175 Cockatoo
177 176 Cockroach
178 177 Coelacanth
179 178 Collared Peccary
180 179 Collie
181 180 Colossal Squid
182 181 Common Buzzard
183 182 Common Frog
184 183 Common Loon
185 184 Common Toad
186 185 Cooper’s Hawk
187 186 Coral
188 187 Cotton-top Tamarin
189 188 Cougar
190 189 Cow
191 190 Coyote
192 191 Crab
193 192 Crab-Eating Macaque
194 193 Crane
195 194 Crested Penguin
196 195 Crocodile
197 196 Cross River Gorilla
198 197 Curly Coated Retriever
199 198 Cuscus
200 199 Cuttlefish
201 200 Dachshund
202 201 Dalmatian
203 202 Darwin’s Frog
204 203 Deer
205 204 Desert Tortoise
206 205 Deutsche Bracke
207 206 Dhole
208 207 Dingo
209 208 Discus
210 209 Doberman Pinscher
211 210 Dodo
212 211 Dog
213 212 Dogo Argentino
214 213 Dogue De Bordeaux
215 214 Dolphin
216 215 Donkey
217 216 Dormouse
218 217 Dragonfish
219 218 Dragonfly
220 219 Drever
221 220 Drum Fish
222 221 Duck
223 222 Dugong
224 223 Dunker
225 224 Dusky Dolphin
226 225 Dwarf Crocodile
227 226 Eagle
228 227 Earwig
229 228 Eastern Gorilla
230 229 Eastern Lowland Gorilla
231 230 Echidna
232 231 Edible Frog
233 232 Eel
234 233 Egyptian Mau
235 234 Electric Eel
236 235 Elephant
237 236 Elephant Seal
238 237 Elephant Shrew
239 238 Emperor Penguin
240 239 Emperor Tamarin
241 240 Emu
242 241 English Cocker Spaniel
243 242 English Shepherd
244 243 English Springer Spaniel
245 244 Entlebucher Mountain Dog
246 245 Epagneul Pont Audemer
247 246 Ermine
248 247 Eskimo Dog
249 248 Estrela Mountain Dog
250 249 Falcon
251 250 False Killer Whale
252 251 Fangtooth
253 252 Fennec Fox
254 253 Ferret
255 254 Field Spaniel
256 255 Fin Whale
257 256 Finnish Spitz
258 257 Fire-Bellied Toad
259 258 Fish
260 259 Fishing Cat
261 260 Flamingo
262 261 Flat Coat Retriever
263 262 Flounder
264 263 Fluke Fish (summer flounder)
265 264 Fly
266 265 Flying Squirrel
267 266 Fossa
268 267 Fox
269 268 Fox Terrier
270 269 French Bulldog
271 270 Frigatebird
272 271 Frilled Lizard
273 272 Frilled Shark
274 273 Frog
275 274 Fur Seal
276 275 Galapagos Penguin
277 276 Galapagos Tortoise
278 277 Gar
279 278 Gecko
280 279 Gentoo Penguin
281 280 Geoffroys Tamarin
282 281 Gerbil
283 282 German Pinscher
284 283 German Shepherd Guide
285 284 Gharial
286 285 Giant African Land Snail
287 286 Giant Clam
288 287 Giant Panda Bear
289 288 Giant Schnauzer
290 289 Gibbon
291 290 Gila Monster
292 291 Giraffe
293 292 Glass Lizard
294 293 Glow Worm
295 294 Goat
296 295 Goblin Shark
297 296 Golden Lion Tamarin
298 297 Golden Masked Owl
299 298 Golden Oriole
300 299 Golden Retriever Complete Pet Guide
301 300 Golden-Crowned Flying Fox
302 301 Goose
303 302 Gopher
304 303 Gorilla
305 304 Grasshopper
306 305 Great Dane
307 306 Great Pyrenees
308 307 Great White Shark
309 308 Greater Swiss Mountain Dog
310 309 Green Anole
311 310 Green Bee-Eater
312 311 Greenland Dog
313 312 Grey Mouse Lemur
314 313 Grey Reef Shark
315 314 Grey Seal
316 315 Greyhound
317 316 Grizzly Bear
318 317 Grouse
319 318 Guinea Fowl
320 319 Guinea Pig
321 320 Guppy
322 321 Hagfish
323 322 Hammerhead Shark
324 323 Hamster
325 324 Hare
326 325 Harpy Eagle
327 326 Harrier
328 327 Havanese
329 328 Hawaiian Crow
330 329 Hedgehog
331 330 Hercules Beetle
332 331 Hermit Crab
333 332 Heron
334 333 Herring
335 334 Highland Cattle
336 335 Himalayan
337 336 Hippopotamus
338 337 Honey Badger
339 338 Honey Bee
340 339 Hoopoe
341 340 Horn Shark
342 341 Hornbill
343 342 Horned Frog
344 343 Horse
345 344 Horseshoe Crab
346 345 Howler Monkey
347 346 Human
348 347 Humboldt Penguin
349 348 Hummingbird
350 349 Humpback Whale
351 350 Hyena
352 351 Ibis
353 352 Ibizan Hound
354 353 Iguana
355 354 Immortal Jellyfish
356 355 Impala
357 356 Indian Elephant
358 357 Indian Palm Squirrel
359 358 Indian Rhinoceros
360 359 Indian Star Tortoise
361 360 Indochinese Tiger
362 361 Indri
363 362 Insects
364 363 Irish Setter Complete Pet Guide
365 364 Irish WolfHound
366 365 Italian Greyhound
367 366 Jack Russel
368 367 Jackal
369 368 Jaguar
370 369 Japanese Chin
371 370 Japanese Macaque
372 371 Javan Rhinoceros
373 372 Javanese
374 373 Jellyfish
375 374 Jerboa
376 375 Kakapo
377 376 Kangaroo
378 377 Keel-Billed Toucan
379 378 Keeshond
380 379 Killer Whale
381 380 King Cobra
382 381 King Crab
383 382 King Penguin
384 383 Kingfisher
385 384 Kiwi
386 385 Koala
387 386 Komodo Dragon
388 387 Krill
389 388 Kudu
390 389 Labradoodle
391 390 Labrador Retriever
392 391 Ladybug
393 392 Lamprey
394 393 Leaf-Tailed Gecko
395 394 Lemming
396 395 Lemur
397 396 Leopard
398 397 Leopard Cat
399 398 Leopard Seal
400 399 Leopard Tortoise
401 400 Liger
402 401 Lion
403 402 Lionfish
404 403 Little Penguin
405 404 Lizard
406 405 Llama
407 406 Lobster
408 407 Long-Eared Owl
409 408 Lungfish
410 409 Lynx
411 410 Macaroni Penguin
412 411 Macaw
413 412 Magellanic Penguin
414 413 Magpie
415 414 Maine Coon
416 415 Malayan Civet
417 416 Malayan Tiger
418 417 Maltese
419 418 Mammals
420 419 Manatee
421 420 Mandrill
422 421 Maned Wolf
423 422 Manta Ray
424 423 Marine Toad
425 424 Markhor
426 425 Marmot
427 426 Marsh Frog
428 427 Masked Palm Civet
429 428 Mastiff
430 429 Mayfly
431 430 Meerkat
432 431 Megalodon
433 432 Mexican Free-Tailed Bat
434 433 Milkfish
435 434 Millipede
436 435 Mink
437 436 Minke Whale
438 437 Mole
439 438 Molly
440 439 Monarch Butterfly
441 440 Mongoose
442 441 Mongrel
443 442 Monitor Lizard
444 443 Monkey
445 444 Monkfish
446 445 Monte Iberia Eleuth
447 446 Moorhen
448 447 Moose
449 448 Moray Eel
450 449 Moth
451 450 Mountain Gorilla
452 451 Mountain Lion
453 452 Mouse
454 453 Mule
455 454 Muskrat
456 455 Narwhal
457 456 Neanderthal
458 457 Neapolitan Mastiff
459 458 Newfoundland
460 459 Newt
461 460 Nightingale
462 461 Norfolk Terrier
463 462 North American Black Bear
464 463 Northern Inuit Dog
465 464 Norwegian Forest
466 465 Numbat
467 466 Nurse Shark
468 467 Ocelot
469 468 Octopus
470 469 Okapi
471 470 Old English Sheepdog
472 471 Olm
473 472 Opossum
474 473 Orang-utan
475 474 Ostrich
476 475 Otter
477 476 Oyster
478 477 Paddlefish
479 478 Pademelon
480 479 Pangolin
481 480 Panther
482 481 Parrot
483 482 Patas Monkey
484 483 Peacock
485 484 Pekingese
486 485 Pelican
487 486 Penguin
488 487 Pere Davids Deer
489 488 Peregrine Falcon
490 489 Persian
491 490 Petit Basset Griffon Vendéen
492 491 Pheasant
493 492 Pied Tamarin
494 493 Pig
495 494 Pika
496 495 Pike Fish
497 496 Pink Fairy Armadillo
498 497 Piranha
499 498 Platypus
500 499 Pointer
501 500 Poison Dart Frog
502 501 Polar Bear
503 502 Pond Skater
504 503 Poodle
505 504 Pool Frog
506 505 Porcupine
507 506 Porpoise
508 507 Possum
509 508 Prawn
510 509 Proboscis Monkey
511 510 Pufferfish
512 511 Puffin
513 512 Pug
514 513 Puma
515 514 Purple Emperor Butterfly
516 515 Puss Moth
517 516 Pygmy Hippopotamus
518 517 Pygmy Marmoset
519 518 Quail
520 519 Quetzal
521 520 Quokka
522 521 Quoll
523 522 Rabbit
524 523 Raccoon
525 524 Raccoon Dog
526 525 Radiated Tortoise
527 526 Ragdoll
528 527 Rat
529 528 Rattlesnake
530 529 Red Finch
531 530 Red Fox
532 531 Red Knee Tarantula
533 532 Red Panda
534 533 Red Wolf
535 534 Red-handed Tamarin
536 535 Reindeer
537 536 Rhinoceros
538 537 River Turtle
539 538 Robin
540 539 Rock Hyrax
541 540 Rockfish
542 541 Rockhopper Penguin
543 542 Roseate Spoonbill
544 543 Rottweiler
545 544 Royal Penguin
546 545 Russian Blue
547 546 Saarloos Wolfdog
548 547 Saber-Toothed Tiger
549 548 Sable
550 549 Saiga
551 550 Saint Bernard
552 551 Salamander
553 552 Salmon
554 553 Samoyed
555 554 Sand Lizard
556 555 Saola
557 556 Sardines
558 557 Sawfish
559 558 Scimitar-horned Oryx
560 559 Scorpion
561 560 Scorpion Fish
562 561 Sea Dragon
563 562 Sea Lion
564 563 Sea Otter
565 564 Sea Slug
566 565 Sea Squirt
567 566 Sea Turtle
568 567 Sea Urchin
569 568 Seahorse
570 569 Seal
571 570 Serval
572 571 Shark
573 572 Sheep
574 573 Shiba Inu
575 574 Shih Tzu
576 575 Shrimp
577 576 Siamese
578 577 Siamese Fighting Fish
579 578 Siberian
580 579 Siberian Husky
581 580 Siberian Tiger
582 581 Silver Dollar
583 582 Skate Fish
584 583 Skunk
585 584 Sloth
586 585 Slow Worm
587 586 Snail
588 587 Snake
589 588 Snapping Turtle
590 589 Snowshoe
591 590 Snowy Owl
592 591 Somali
593 592 South China Tiger
594 593 Spadefoot Toad
595 594 Sparrow
596 595 Spectacled Bear
597 596 Sperm Whale
598 597 Spider Monkey
599 598 Spiny Dogfish
600 599 Spixs Macaw
601 600 Sponge
602 601 Squid
603 602 Squirrel
604 603 Squirrel Monkey
605 604 Sri Lankan Elephant
606 605 Staffordshire Bull Terrier
607 606 Stag Beetle
608 607 Starfish
609 608 Steller’s Sea Cow
610 609 Stick Insect
611 610 Stingray
612 611 Stoat
613 612 Striped Rocket Frog
614 613 Sturgeon
615 614 Sucker Fish
616 615 Sugar Glider
617 616 Sumatran Elephant
618 617 Sumatran Orang-utan
619 618 Sumatran Rhinoceros
620 619 Sumatran Tiger
621 620 Sun Bear
622 621 Swai Fish
623 622 Swan
624 623 Swedish Vallhund
625 624 Tamaskan
626 625 Tang
627 626 Tapanuli Orang-utan
628 627 Tapir
629 628 Tarpon
630 629 Tarsier
631 630 Tasmanian Devil
632 631 Tawny Owl
633 632 Teddy Roosevelt Terrier
634 633 Termite
635 634 Tetra
636 635 Thorny Devil
637 636 Tibetan Mastiff
638 637 Tiffany
639 638 Tiger
640 639 Tiger Salamander
641 640 Tiger Shark
642 641 Tortoise
643 642 Toucan
644 643 Tree Frog
645 644 Tropicbird
646 645 Tuatara
647 646 Turkey
648 647 Turkish Angora
649 648 Uakari
650 649 Uguisu
651 650 Umbrellabird
652 651 Utonagan
653 652 Vampire Bat
654 653 Vampire Squid
655 654 Vaquita
656 655 Vervet Monkey
657 656 Vulture
658 657 Wallaby
659 658 Walleye Fish
660 659 Walrus
661 660 Wandering Albatross
662 661 Warthog
663 662 Wasp
664 663 Water Buffalo
665 664 Water Dragon
666 665 Water Vole
667 666 Weasel
668 667 Welsh Corgi: The Complete Pet Guide
669 668 West Highland Terrier
670 669 Western Gorilla
671 670 Western Lowland Gorilla
672 671 Whale Shark
673 672 Whippet
674 673 White Rhinoceros
675 674 White Tiger
676 675 White-Faced Capuchin
677 676 Wild Boar
678 677 Wildebeest
679 678 Wolf
680 679 Wolf Eel
681 680 Wolf Spider
682 681 Wolffish
683 682 Wolverine
684 683 Wombat
685 684 Woodlouse
686 685 Woodpecker
687 686 Woolly Mammoth
688 687 Woolly Monkey
689 688 Wrasse
690 689 Wyoming Toad
691 690 X-Ray Tetra
692 691 Xerus
693 692 Yak
694 693 Yellow-Eyed Penguin
695 694 Yorkshire Terrier
696 695 Zebra
697 696 Zebra Shark
698 697 Zebu
699 698 Zonkey
700 699 Zorse

Binary file not shown.

Binary file not shown.

View File

14
data/scripts/db.mjs Normal file
View File

@ -0,0 +1,14 @@
import Knex from 'knex'
export const db = Knex({
client: 'sqlite3', // or 'better-sqlite3'
connection: {
filename: "../database"
}
})
export const getWords = async (db) => {
return db
.select("word")
.from("dictionary")
}

View File

@ -1,6 +1,6 @@
import { db } from '../../database-calls/db.mjs' import {db, getWords} from './db.mjs'
import { isMisspelled } from 'spellchecker' import { isMisspelled } from 'spellchecker'
import { getWords } from '../../database-calls/GETFunctions.mjs'
const words = await getWords(db) const words = await getWords(db)

View File

@ -1,6 +1,4 @@
import { db } from '../../database-calls/db.mjs' import { db, getWords } from './db.mjs'
import { getWords } from '../../database-calls/GETFunctions.mjs'
//const words = getWords(db) //const words = getWords(db)
const allDefinitionsAreFormOf = (meanings) => { const allDefinitionsAreFormOf = (meanings) => {

View File

@ -1,6 +1,4 @@
import { db } from '../../database-calls/db.mjs' import { db, getWords } from './db.mjs'
import { getWords } from '../../database-calls/GETFunctions.mjs'
const words = await getWords(db) const words = await getWords(db)
const allDefinitionsAreScientific = (meanings) => { const allDefinitionsAreScientific = (meanings) => {

View File

@ -1,4 +1,4 @@
import { db } from '../../database-calls/db.mjs' import {db} from './db.mjs'
import fs from 'fs' import fs from 'fs'
const IPAs = JSON.parse(fs.readFileSync('../IPAs_en_UK.json')).en_UK[0] const IPAs = JSON.parse(fs.readFileSync('../IPAs_en_UK.json')).en_UK[0]

View File

@ -1,4 +1,4 @@
import { db } from '../../database-calls/db.mjs' import {db} from './db.mjs'
import fs from 'fs' import fs from 'fs'
const wiktionary = JSON.parse(fs.readFileSync('../processing/wiktionary-p3.json')) const wiktionary = JSON.parse(fs.readFileSync('../processing/wiktionary-p3.json'))

View File

@ -1,20 +0,0 @@
import logger from "../logger.mjs"
export const deleteFromTable = async (db,table,word) => {
logger.trace(`deleteFromBuffer called for word ${word}!`)
return db(table)
.where('word', word)
.del()
}
export const deleteFromBuffer = async (db,word) => {
logger.trace(`deleteFromBuffer called for word ${word}!`)
return deleteFromTable(db,'buffer',word)
}
export const deleteFromPublished = async (db,word) => {
logger.trace(`delteFromPublished called for word ${word}`)
return deleteFromTable(db,'published',word)
}

View File

@ -1,26 +0,0 @@
import { isoDate } from "../utilities.mjs"
export const valueExistsInColumn = async (db, table, column, value) => {
const number = await db(table)
.count('* as count')
.where(column, value)
return number[0].count > 0
}
export const wordExistsInDictionary = async (db, word) => {
return valueExistsInColumn(db,'dictionary','word',word)
}
export const todaysPromptAlreadyPublished = async (db) => {
return valueExistsInColumn(db,'published', 'date', isoDate())
}
export const wordIsAlreadyInBuffer = async (db, word) => {
return valueExistsInColumn(db,'buffer', 'word', word)
}
export const tableIsNotEmpty = async (db, table) => {
const number = await db(table)
.count('* as count')
return number[0].count > 0
}

View File

@ -1,67 +0,0 @@
import config from '../config.mjs'
import {blocklist} from './db.mjs'
import logger from "../logger.mjs"
export const getAcceptablePrompts = async (db,word) => {
logger.trace("getAcceptablePrompt called")
return db('dictionary')
.select('*')
.where({
derivative: 0,
scientific: 0,
})
.modify(queryBuilder=>{
if(word){queryBuilder.andWhere('word',word)}
})
.andWhere('count', '<', config.maxCount)
.andWhere('count', '>', config.minCount)
.andWhere('word', 'not in', blocklist)
.whereRaw('length(word) > 3')
.whereNotNull('pronunciation')
.orderByRaw('count desc')
}
export const getWords = async (db) => {
logger.trace("getWords called")
return db
.select("word")
.from("dictionary")
.catch(error => { throw error })
}
export async function getNewPrompt(db) {
logger.trace("getNewPrompt called")
const getBiasedRng = (min, max, bias, influence) => {
const random = Math.random() * (max - min) + min
const mix = Math.random() * influence
return random * (1 - mix) + bias * mix
}
const randomEntry = (array) => {
const random = getBiasedRng(0, 1, config.rarityBias, 1)
const mix = Math.random()
return array[
parseInt(
array.length * random
)
]
}
return randomEntry(await getAcceptablePrompts(db))
}
export const getPromptFromBuffer = async (db) => {
logger.trace("getting prompt from buffer")
const oldestWordInBuffer = await db('buffer').select('word').orderBy('timestamp', 'asc').limit(1)
const word = oldestWordInBuffer[0].word
if(!word){throw new Error("Requested oldest word in buffer but got an empty array! Is buffer empty?")}
const prompt = await getAcceptablePrompts(db,word)
if(prompt.length===0){throw new Error("Prompt from buffer is not acceptable! Has it already been published? Have the acceptability criteria changed?")}
return prompt[0]
}
export const getDatePublished = async (db,word) => {
return db('published')
.select('date')
.where('word',word)
}

View File

@ -1,21 +0,0 @@
import { isoDate } from "../utilities.mjs"
import logger from "../logger.mjs"
import { sampleRes } from "./db.mjs"
export async function insertPublished(db, res, word) {
logger.trace("insertPublished called")
return db('published')
.insert({
id: res.createdNote.id,
word,
date: isoDate()
})
}
export const insertIntoBuffer = async (db,word,timestamp) => {
return db('buffer')
.insert({
word:word,
timestamp:timestamp
})
}

View File

@ -1,87 +1,108 @@
import Knex from 'knex' import Knex from 'knex'
import logger from '../logger.mjs'
import { isoDate } from "../utilities.mjs"
import config from "../config.mjs"
export const db = Knex({ export const db = Knex({
client: 'sqlite3', client: 'sqlite3', // or 'better-sqlite3'
connection: {
filename: "data/database"
},
useNullAsDefault: true
})
export const testDb = Knex({
client: 'sqlite3',
connection: { connection: {
//filename: "data/database"
filename: "data/database-testing" filename: "data/database-testing"
}, },
useNullAsDefault: true useNullAsDefault: true
}) })
export const sampleRes = {
createdNote: {
id: '9i8urek4jtzhmtuh',
createdAt: '2023-08-10T15:02:35.380Z',
userId: '9i5z5o9zy11l3skl',
user: {
id: '9i5z5o9zy11l3skl',
name: null,
username: 'micro365',
host: null,
avatarUrl: 'https://localhost:3000/files/thumbnail-4e0e8b82-df72-48f7-8100-b7515173da9d',
avatarBlurhash: 'ySPjGct7xu%M-;xu-;%MRjWBoffQofWB~qRjRjayRjfQM{M{t7ofWBt7ayfQ~qj[WBj[M{WBof?bofayfQM{WBfQt7xuofWBofofM{',
avatarColor: null,
isLocked: false,
speakAsCat: true,
emojis: [],
onlineStatus: 'active',
driveCapacityOverrideMb: null
},
text: "Today's #micro365 prompt is:\n" +
'<small><small><small># </small></small></small>$[x2 $[font.serif **marmalade**]]\n' +
'/mˈɑːmɐlˌeɪd/\n' +
'<small>**noun**:\n' +
'- A kind of jam made with citrus fruit, distinguished by being made slightly bitter by the addition of the peel and by partial caramelisation during manufacture. Most commonly made with Seville oranges, and usually qualified by the name of the fruit when made with other types of fruit.\n' +
'- A kind of jam made with citrus fruit, distinguished by being made slightly bitter by the addition of the peel and by partial caramelisation during manufacture. Most commonly made with Seville oranges, and usually qualified by the name of the fruit when made with other types of fruit. Ellipsis of orange marmalade.\n' +
'- quince jam\n' +
'**verb**:\n' +
'- To spread marmalade on.\n' +
'</small>#writing #microfiction #vss #marmalade',
cw: null,
visibility: 'public',
renoteCount: 0,
repliesCount: 0,
reactions: {},
reactionEmojis: [],
emojis: [],
tags: ['micro365', 'writing', 'microfiction', 'vss', 'marmalade'],
fileIds: [],
files: [],
replyId: null,
renoteId: null
}
}
const blocklist = db.union([
export const blocklist = db.union([
db('bad_words').select('word'), db('bad_words').select('word'),
db('medical_dictionary').select('word'), db('medical_dictionary').select('word'),
db('published').select('word') db('published').select('word')
]) ])
export const getAcceptablePrompts = async (word) => {
logger.trace("getAcceptablePrompt called")
return db('dictionary')
.select('*')
.where({
derivative: 0,
scientific: 0,
})
.modify(queryBuilder=>{
if(word){queryBuilder.andWhere('word',word)}
})
.andWhere('count', '<', config.maxCount)
.andWhere('count', '>', config.minCount)
.andWhere('word', 'not in', blocklist)
.whereRaw('length(word) > 3')
.whereNotNull('pronunciation')
.orderByRaw('count desc')
}
export const getWords = async () => {
logger.trace("getWords called")
return db
.select("word")
.from("dictionary")
.catch(error => { throw error })
}
export const insertIntoBuffer = async (word,timestamp) => {
return db('buffer')
.insert({
word:word,
timestamp:timestamp
})
}
export const valueExistsInColumn = async (table, column, value) => {
const number = await db(table)
.count('* as count')
.where(column, value)
return number[0].count > 0
}
export const wordExistsInDictionary = async (word) => {
return valueExistsInColumn('dictionary','word',word)
}
export const todaysPromptAlreadyPublished = async () => {
return valueExistsInColumn('published', 'date', isoDate())
}
export const wordIsAlreadyInBuffer = async (word) => {
return valueExistsInColumn('buffer', 'word', word)
}
export const tableIsNotEmpty = async (table) => {
const number = await db(table)
.count('* as count')
return number[0].count > 0
}
export const getPromptFromBuffer = async () => {
logger.trace("getting prompt from buffer")
const oldestWordInBuffer = await db('buffer').select('word').orderBy('timestamp', 'asc').limit(1)
const word = oldestWordInBuffer[0].word
if(!word){throw new Error("Requested oldest word in buffer but got an empty array! Is buffer empty?")}
const prompt = await getAcceptablePrompts(word)
if(prompt.length===0){throw new Error("Prompt from buffer is not acceptable! Has it already been published? Have the acceptability criteria changed?")}
return prompt[0]
}
export const deleteFromBuffer = async (word) => {
logger.trace(`deleteFromBuffer called for word ${word}!`)
return db('buffer')
.where('word', word)
.del()
}
export const getDatePublished = async (word) => {
return db('published')
.select('date')
.where('word',word)
}

View File

@ -0,0 +1,31 @@
import logger from "../logger.mjs"
import { getAcceptablePrompts } from "./db.mjs"
import config from "../config.mjs"
export default async function getNewPrompt() {
logger.trace("getNewPrompt called")
const getBiasedRng = (min, max, bias, influence) => {
const random = Math.random() * (max - min) + min
const mix = Math.random() * influence
return random * (1 - mix) + bias * mix
}
const randomEntry = (array) => {
const random = getBiasedRng(0, 1, config.rarityBias, 1)
const mix = Math.random()
return array[
parseInt(
array.length * random
)
]
}
return randomEntry(await getAcceptablePrompts())
}

View File

@ -0,0 +1,57 @@
import { db } from "./db.mjs"
import { isoDate } from "../utilities.mjs"
import logger from "../logger.mjs"
const sampleRes = {
createdNote: {
id: '9i8urek4jtzhmtuh',
createdAt: '2023-08-10T15:02:35.380Z',
userId: '9i5z5o9zy11l3skl',
user: {
id: '9i5z5o9zy11l3skl',
name: null,
username: 'micro365',
host: null,
avatarUrl: 'https://localhost:3000/files/thumbnail-4e0e8b82-df72-48f7-8100-b7515173da9d',
avatarBlurhash: 'ySPjGct7xu%M-;xu-;%MRjWBoffQofWB~qRjRjayRjfQM{M{t7ofWBt7ayfQ~qj[WBj[M{WBof?bofayfQM{WBfQt7xuofWBofofM{',
avatarColor: null,
isLocked: false,
speakAsCat: true,
emojis: [],
onlineStatus: 'active',
driveCapacityOverrideMb: null
},
text: "Today's #micro365 prompt is:\n" +
'<small><small><small># </small></small></small>$[x2 $[font.serif **marmalade**]]\n' +
'/mˈɑːmɐlˌeɪd/\n' +
'<small>**noun**:\n' +
'- A kind of jam made with citrus fruit, distinguished by being made slightly bitter by the addition of the peel and by partial caramelisation during manufacture. Most commonly made with Seville oranges, and usually qualified by the name of the fruit when made with other types of fruit.\n' +
'- A kind of jam made with citrus fruit, distinguished by being made slightly bitter by the addition of the peel and by partial caramelisation during manufacture. Most commonly made with Seville oranges, and usually qualified by the name of the fruit when made with other types of fruit. Ellipsis of orange marmalade.\n' +
'- quince jam\n' +
'**verb**:\n' +
'- To spread marmalade on.\n' +
'</small>#writing #microfiction #vss #marmalade',
cw: null,
visibility: 'public',
renoteCount: 0,
repliesCount: 0,
reactions: {},
reactionEmojis: [],
emojis: [],
tags: ['micro365', 'writing', 'microfiction', 'vss', 'marmalade'],
fileIds: [],
files: [],
replyId: null,
renoteId: null
}
}
export default async function insertPublished(res, word) {
logger.trace("insertPublished called")
return db('published')
.insert({
id: res.createdNote.id,
word,
date: isoDate(sampleRes.createdNote.createdAt)
})
}
//console.log(await insertPublished(sampleRes,'marmalade'))

View File

@ -4,7 +4,6 @@ import logger from "./logger.mjs";
import pinoHTTP from 'pino-http' import pinoHTTP from 'pino-http'
import start from "./start.mjs"; import start from "./start.mjs";
import handleMention from "./social-interaction/handleMention.mjs"; import handleMention from "./social-interaction/handleMention.mjs";
import { db } from "./database-calls/db.mjs";
const app = express() const app = express()
const port = 4000 const port = 4000
app.use(bodyParser.json()) app.use(bodyParser.json())
@ -16,7 +15,7 @@ app.use(
app.post('/api', async (req,res) => { app.post('/api', async (req,res) => {
logger.info({body:req.body.body},"webhook received!") logger.info({body:req.body.body},"webhook received!")
res.sendStatus(200) res.sendStatus(200)
const result = await handleMention(db,req.body.body) const result = await handleMention(req.body.body)
logger.info(`handleMention returned ${result.code}`) logger.info(`handleMention returned ${result.code}`)
}) })
@ -40,4 +39,4 @@ process.on('uncaughtException', (err) => {
process.exit(1); process.exit(1);
}); });
start(db) start()

127
package-lock.json generated
View File

@ -11,21 +11,20 @@
"dependencies": { "dependencies": {
"axios": "^1.4.0", "axios": "^1.4.0",
"body-parser": "^1.20.2", "body-parser": "^1.20.2",
"chai": "^4.3.7",
"express": "^4.18.2", "express": "^4.18.2",
"knex": "^2.5.1", "mocha": "^10.2.0",
"luxon": "^3.4.0",
"node-cron": "^3.0.2", "node-cron": "^3.0.2",
"pino": "^8.15.0", "pino": "^8.15.0",
"pino-http": "^8.4.0", "pino-http": "^8.4.0",
"pino-pretty": "^10.2.0", "pino-pretty": "^10.2.0",
"promised-sqlite3": "^2.1.0", "promised-sqlite3": "^2.1.0",
"sqlite3": "^5.1.6",
"undici": "^5.23.0" "undici": "^5.23.0"
}, },
"devDependencies": { "devDependencies": {
"chai": "^4.3.7", "knex": "^2.5.1",
"mocha": "^10.2.0", "spellchecker": "^3.7.1",
"spellchecker": "^3.7.1" "sqlite3": "^5.1.6"
} }
}, },
"node_modules/@gar/promisify": { "node_modules/@gar/promisify": {
@ -200,7 +199,6 @@
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
"dev": true,
"engines": { "engines": {
"node": ">=6" "node": ">=6"
} }
@ -217,7 +215,6 @@
"version": "4.3.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": { "dependencies": {
"color-convert": "^2.0.1" "color-convert": "^2.0.1"
}, },
@ -238,7 +235,6 @@
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"dependencies": { "dependencies": {
"normalize-path": "^3.0.0", "normalize-path": "^3.0.0",
"picomatch": "^2.0.4" "picomatch": "^2.0.4"
@ -267,8 +263,7 @@
"node_modules/argparse": { "node_modules/argparse": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
"dev": true
}, },
"node_modules/array-flatten": { "node_modules/array-flatten": {
"version": "1.1.1", "version": "1.1.1",
@ -279,7 +274,6 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true,
"engines": { "engines": {
"node": "*" "node": "*"
} }
@ -335,7 +329,6 @@
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@ -387,7 +380,6 @@
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"dependencies": { "dependencies": {
"fill-range": "^7.0.1" "fill-range": "^7.0.1"
}, },
@ -398,8 +390,7 @@
"node_modules/browser-stdout": { "node_modules/browser-stdout": {
"version": "1.3.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="
"dev": true
}, },
"node_modules/buffer": { "node_modules/buffer": {
"version": "6.0.3", "version": "6.0.3",
@ -488,7 +479,6 @@
"version": "6.3.0", "version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
}, },
@ -500,7 +490,6 @@
"version": "4.3.7", "version": "4.3.7",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
"integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==",
"dev": true,
"dependencies": { "dependencies": {
"assertion-error": "^1.1.0", "assertion-error": "^1.1.0",
"check-error": "^1.0.2", "check-error": "^1.0.2",
@ -518,7 +507,6 @@
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": { "dependencies": {
"ansi-styles": "^4.1.0", "ansi-styles": "^4.1.0",
"supports-color": "^7.1.0" "supports-color": "^7.1.0"
@ -534,7 +522,6 @@
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": { "dependencies": {
"has-flag": "^4.0.0" "has-flag": "^4.0.0"
}, },
@ -546,7 +533,6 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
"integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
"dev": true,
"engines": { "engines": {
"node": "*" "node": "*"
} }
@ -555,7 +541,6 @@
"version": "3.5.3", "version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",
@ -599,7 +584,6 @@
"version": "7.0.4", "version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
"dependencies": { "dependencies": {
"string-width": "^4.2.0", "string-width": "^4.2.0",
"strip-ansi": "^6.0.0", "strip-ansi": "^6.0.0",
@ -610,7 +594,6 @@
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": { "dependencies": {
"color-name": "~1.1.4" "color-name": "~1.1.4"
}, },
@ -621,8 +604,7 @@
"node_modules/color-name": { "node_modules/color-name": {
"version": "1.1.4", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
"dev": true
}, },
"node_modules/color-support": { "node_modules/color-support": {
"version": "1.1.3", "version": "1.1.3",
@ -652,6 +634,7 @@
"version": "10.0.1", "version": "10.0.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
"integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
"dev": true,
"engines": { "engines": {
"node": ">=14" "node": ">=14"
} }
@ -718,7 +701,6 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
}, },
@ -730,7 +712,6 @@
"version": "4.1.3", "version": "4.1.3",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
"integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
"dev": true,
"dependencies": { "dependencies": {
"type-detect": "^4.0.0" "type-detect": "^4.0.0"
}, },
@ -780,7 +761,6 @@
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
"integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
"dev": true,
"engines": { "engines": {
"node": ">=0.3.1" "node": ">=0.3.1"
} }
@ -852,7 +832,6 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
}, },
@ -864,6 +843,7 @@
"version": "3.2.25", "version": "3.2.25",
"resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
"integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
"dev": true,
"engines": { "engines": {
"node": ">=6" "node": ">=6"
} }
@ -1003,7 +983,6 @@
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"dependencies": { "dependencies": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
}, },
@ -1032,7 +1011,6 @@
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
"dependencies": { "dependencies": {
"locate-path": "^6.0.0", "locate-path": "^6.0.0",
"path-exists": "^4.0.0" "path-exists": "^4.0.0"
@ -1048,7 +1026,6 @@
"version": "5.0.2", "version": "5.0.2",
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
"dev": true,
"bin": { "bin": {
"flat": "cli.js" "flat": "cli.js"
} }
@ -1121,7 +1098,6 @@
"version": "2.3.2", "version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"optional": true, "optional": true,
"os": [ "os": [
@ -1167,7 +1143,6 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
"integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==",
"dev": true,
"engines": { "engines": {
"node": "*" "node": "*"
} }
@ -1190,6 +1165,7 @@
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true,
"engines": { "engines": {
"node": ">=8.0.0" "node": ">=8.0.0"
} }
@ -1197,7 +1173,8 @@
"node_modules/getopts": { "node_modules/getopts": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz", "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz",
"integrity": "sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==" "integrity": "sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==",
"dev": true
}, },
"node_modules/glob": { "node_modules/glob": {
"version": "7.2.3", "version": "7.2.3",
@ -1222,7 +1199,6 @@
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"dependencies": { "dependencies": {
"is-glob": "^4.0.1" "is-glob": "^4.0.1"
}, },
@ -1251,7 +1227,6 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@ -1287,7 +1262,6 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true,
"bin": { "bin": {
"he": "bin/he" "he": "bin/he"
} }
@ -1511,6 +1485,7 @@
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
"integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
"dev": true,
"engines": { "engines": {
"node": ">= 0.10" "node": ">= 0.10"
} }
@ -1533,7 +1508,6 @@
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"dependencies": { "dependencies": {
"binary-extensions": "^2.0.0" "binary-extensions": "^2.0.0"
}, },
@ -1545,6 +1519,7 @@
"version": "2.12.1", "version": "2.12.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
"integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
"dev": true,
"dependencies": { "dependencies": {
"has": "^1.0.3" "has": "^1.0.3"
}, },
@ -1556,7 +1531,6 @@
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -1573,7 +1547,6 @@
"version": "4.0.3", "version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": { "dependencies": {
"is-extglob": "^2.1.1" "is-extglob": "^2.1.1"
}, },
@ -1591,7 +1564,6 @@
"version": "7.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": { "engines": {
"node": ">=0.12.0" "node": ">=0.12.0"
} }
@ -1600,7 +1572,6 @@
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@ -1609,7 +1580,6 @@
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
}, },
@ -1635,7 +1605,6 @@
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
"dependencies": { "dependencies": {
"argparse": "^2.0.1" "argparse": "^2.0.1"
}, },
@ -1647,6 +1616,7 @@
"version": "2.5.1", "version": "2.5.1",
"resolved": "https://registry.npmjs.org/knex/-/knex-2.5.1.tgz", "resolved": "https://registry.npmjs.org/knex/-/knex-2.5.1.tgz",
"integrity": "sha512-z78DgGKUr4SE/6cm7ku+jHvFT0X97aERh/f0MUKAKgFnwCYBEW4TFBqtHWFYiJFid7fMrtpZ/gxJthvz5mEByA==", "integrity": "sha512-z78DgGKUr4SE/6cm7ku+jHvFT0X97aERh/f0MUKAKgFnwCYBEW4TFBqtHWFYiJFid7fMrtpZ/gxJthvz5mEByA==",
"dev": true,
"dependencies": { "dependencies": {
"colorette": "2.0.19", "colorette": "2.0.19",
"commander": "^10.0.0", "commander": "^10.0.0",
@ -1697,6 +1667,7 @@
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": { "dependencies": {
"ms": "2.1.2" "ms": "2.1.2"
}, },
@ -1712,13 +1683,13 @@
"node_modules/knex/node_modules/ms": { "node_modules/knex/node_modules/ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
}, },
"node_modules/locate-path": { "node_modules/locate-path": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
"dependencies": { "dependencies": {
"p-locate": "^5.0.0" "p-locate": "^5.0.0"
}, },
@ -1732,13 +1703,13 @@
"node_modules/lodash": { "node_modules/lodash": {
"version": "4.17.21", "version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
}, },
"node_modules/log-symbols": { "node_modules/log-symbols": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"dev": true,
"dependencies": { "dependencies": {
"chalk": "^4.1.0", "chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0" "is-unicode-supported": "^0.1.0"
@ -1754,7 +1725,6 @@
"version": "2.3.6", "version": "2.3.6",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
"integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==",
"dev": true,
"dependencies": { "dependencies": {
"get-func-name": "^2.0.0" "get-func-name": "^2.0.0"
} }
@ -1770,14 +1740,6 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/luxon": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.0.tgz",
"integrity": "sha512-7eDo4Pt7aGhoCheGFIuq4Xa2fJm4ZpmldpGhjTYBNUYNCN6TIEP6v7chwwwt3KRp7YR+rghbfvjyo3V5y9hgBw==",
"engines": {
"node": ">=12"
}
},
"node_modules/make-dir": { "node_modules/make-dir": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@ -2000,7 +1962,6 @@
"version": "10.2.0", "version": "10.2.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
"integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
"dev": true,
"dependencies": { "dependencies": {
"ansi-colors": "4.1.1", "ansi-colors": "4.1.1",
"browser-stdout": "1.3.1", "browser-stdout": "1.3.1",
@ -2040,7 +2001,6 @@
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": { "dependencies": {
"ms": "2.1.2" "ms": "2.1.2"
}, },
@ -2056,14 +2016,12 @@
"node_modules/mocha/node_modules/debug/node_modules/ms": { "node_modules/mocha/node_modules/debug/node_modules/ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
"dev": true
}, },
"node_modules/mocha/node_modules/glob": { "node_modules/mocha/node_modules/glob": {
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
"integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
"dev": true,
"dependencies": { "dependencies": {
"fs.realpath": "^1.0.0", "fs.realpath": "^1.0.0",
"inflight": "^1.0.4", "inflight": "^1.0.4",
@ -2083,7 +2041,6 @@
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"dependencies": { "dependencies": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
}, },
@ -2095,7 +2052,6 @@
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
"integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
"dev": true,
"dependencies": { "dependencies": {
"brace-expansion": "^2.0.1" "brace-expansion": "^2.0.1"
}, },
@ -2107,7 +2063,6 @@
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"dependencies": { "dependencies": {
"balanced-match": "^1.0.0" "balanced-match": "^1.0.0"
} }
@ -2115,8 +2070,7 @@
"node_modules/mocha/node_modules/ms": { "node_modules/mocha/node_modules/ms": {
"version": "2.1.3", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
"dev": true
}, },
"node_modules/ms": { "node_modules/ms": {
"version": "2.0.0", "version": "2.0.0",
@ -2133,7 +2087,6 @@
"version": "3.3.3", "version": "3.3.3",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
"integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
"dev": true,
"bin": { "bin": {
"nanoid": "bin/nanoid.cjs" "nanoid": "bin/nanoid.cjs"
}, },
@ -2273,7 +2226,6 @@
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -2333,7 +2285,6 @@
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"dependencies": { "dependencies": {
"yocto-queue": "^0.1.0" "yocto-queue": "^0.1.0"
}, },
@ -2348,7 +2299,6 @@
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
"dependencies": { "dependencies": {
"p-limit": "^3.0.2" "p-limit": "^3.0.2"
}, },
@ -2386,7 +2336,6 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@ -2402,7 +2351,8 @@
"node_modules/path-parse": { "node_modules/path-parse": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
}, },
"node_modules/path-to-regexp": { "node_modules/path-to-regexp": {
"version": "0.1.7", "version": "0.1.7",
@ -2413,7 +2363,6 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"dev": true,
"engines": { "engines": {
"node": "*" "node": "*"
} }
@ -2421,13 +2370,13 @@
"node_modules/pg-connection-string": { "node_modules/pg-connection-string": {
"version": "2.6.1", "version": "2.6.1",
"resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.1.tgz", "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.1.tgz",
"integrity": "sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg==" "integrity": "sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg==",
"dev": true
}, },
"node_modules/picomatch": { "node_modules/picomatch": {
"version": "2.3.1", "version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": { "engines": {
"node": ">=8.6" "node": ">=8.6"
}, },
@ -2624,7 +2573,6 @@
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"dependencies": { "dependencies": {
"safe-buffer": "^5.1.0" "safe-buffer": "^5.1.0"
} }
@ -2679,7 +2627,6 @@
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"dependencies": { "dependencies": {
"picomatch": "^2.2.1" "picomatch": "^2.2.1"
}, },
@ -2699,6 +2646,7 @@
"version": "0.8.0", "version": "0.8.0",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
"integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
"dev": true,
"dependencies": { "dependencies": {
"resolve": "^1.20.0" "resolve": "^1.20.0"
}, },
@ -2710,7 +2658,6 @@
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -2719,6 +2666,7 @@
"version": "1.22.2", "version": "1.22.2",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
"integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
"dev": true,
"dependencies": { "dependencies": {
"is-core-module": "^2.11.0", "is-core-module": "^2.11.0",
"path-parse": "^1.0.7", "path-parse": "^1.0.7",
@ -2735,6 +2683,7 @@
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@ -2845,7 +2794,6 @@
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
"integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
"dev": true,
"dependencies": { "dependencies": {
"randombytes": "^2.1.0" "randombytes": "^2.1.0"
} }
@ -3077,7 +3025,6 @@
"version": "8.1.1", "version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
"dependencies": { "dependencies": {
"has-flag": "^4.0.0" "has-flag": "^4.0.0"
}, },
@ -3092,6 +3039,7 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
}, },
@ -3127,6 +3075,7 @@
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz",
"integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==", "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==",
"dev": true,
"engines": { "engines": {
"node": ">=8.0.0" "node": ">=8.0.0"
} }
@ -3143,6 +3092,7 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz",
"integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==", "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@ -3151,7 +3101,6 @@
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": { "dependencies": {
"is-number": "^7.0.0" "is-number": "^7.0.0"
}, },
@ -3176,7 +3125,6 @@
"version": "4.0.8", "version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true,
"engines": { "engines": {
"node": ">=4" "node": ">=4"
} }
@ -3299,14 +3247,12 @@
"node_modules/workerpool": { "node_modules/workerpool": {
"version": "6.2.1", "version": "6.2.1",
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
"integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw=="
"dev": true
}, },
"node_modules/wrap-ansi": { "node_modules/wrap-ansi": {
"version": "7.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"dependencies": { "dependencies": {
"ansi-styles": "^4.0.0", "ansi-styles": "^4.0.0",
"string-width": "^4.1.0", "string-width": "^4.1.0",
@ -3328,7 +3274,6 @@
"version": "5.0.8", "version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
} }
@ -3342,7 +3287,6 @@
"version": "16.2.0", "version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
"dependencies": { "dependencies": {
"cliui": "^7.0.2", "cliui": "^7.0.2",
"escalade": "^3.1.1", "escalade": "^3.1.1",
@ -3360,7 +3304,6 @@
"version": "20.2.4", "version": "20.2.4",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
} }
@ -3369,7 +3312,6 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
"integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
"dev": true,
"dependencies": { "dependencies": {
"camelcase": "^6.0.0", "camelcase": "^6.0.0",
"decamelize": "^4.0.0", "decamelize": "^4.0.0",
@ -3384,7 +3326,6 @@
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
}, },

View File

@ -4,7 +4,7 @@
"description": "a server that delivers daily writing prompts via REST API", "description": "a server that delivers daily writing prompts via REST API",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"test": "mocha" "test": "mocha --timeout 15000"
}, },
"author": "Andrzej Stepien", "author": "Andrzej Stepien",
"license": "GPL-3.0-or-later", "license": "GPL-3.0-or-later",
@ -15,16 +15,16 @@
}, },
"dependencies": { "dependencies": {
"axios": "^1.4.0", "axios": "^1.4.0",
"sqlite3": "^5.1.6",
"body-parser": "^1.20.2", "body-parser": "^1.20.2",
"express": "^4.18.2", "express": "^4.18.2",
"knex": "^2.5.1", "knex": "^2.5.1",
"luxon": "^3.4.0",
"node-cron": "^3.0.2", "node-cron": "^3.0.2",
"pino": "^8.15.0", "pino": "^8.15.0",
"pino-http": "^8.4.0", "pino-http": "^8.4.0",
"pino-pretty": "^10.2.0", "pino-pretty": "^10.2.0",
"promised-sqlite3": "^2.1.0", "promised-sqlite3": "^2.1.0",
"sqlite3": "^5.1.6",
"undici": "^5.23.0" "undici": "^5.23.0"
} }
} }

View File

@ -1,5 +1,5 @@
import logger from "../logger.mjs" import logger from "../logger.mjs"
import { wordExistsInDictionary } from "../database-calls/EXISTSFunctions.mjs" import { wordExistsInDictionary } from "../database-calls/db.mjs"
const sampleNote = { const sampleNote = {
"id": "9id213fllx9y189f", "id": "9id213fllx9y189f",
"createdAt": "2023-08-13T13:37:09.537Z", "createdAt": "2023-08-13T13:37:09.537Z",
@ -78,10 +78,9 @@ const sampleNote = {
} }
export default class { export default class {
constructor(db,raw){ constructor(raw){
this.raw = raw this.raw = raw
logger.trace({id:raw.id},"new note constructed!") logger.trace({id:raw.id},"new note constructed!")
this.db = db
} }
#handle = /@[a-z,A-Z,0-9]* /g #handle = /@[a-z,A-Z,0-9]* /g
@ -107,7 +106,7 @@ get isSingleWord() {
} }
get isRealWord(){ get isRealWord(){
return wordExistsInDictionary(this.db,this.cleanText) return wordExistsInDictionary(this.cleanText)
} }
get author(){ get author(){

View File

@ -2,12 +2,10 @@ import logger from "../logger.mjs"
import { timestamp } from "../utilities.mjs" import { timestamp } from "../utilities.mjs"
import Note from "./Note.mjs" import Note from "./Note.mjs"
import createNote from "../firefish-calls/createNote.mjs" import createNote from "../firefish-calls/createNote.mjs"
import { insertIntoBuffer } from "../database-calls/INSERTFunctions.mjs" import { getDatePublished, wordIsAlreadyInBuffer, getAcceptablePrompts, valueExistsInColumn, insertIntoBuffer } from "../database-calls/db.mjs"
import { getDatePublished } from "../database-calls/GETFunctions.mjs"
import { valueExistsInColumn, wordIsAlreadyInBuffer } from "../database-calls/EXISTSFunctions.mjs" export default async function handleMentions(body) {
import { getAcceptablePrompts } from "../database-calls/GETFunctions.mjs" const note = new Note(body.note)
export default async function handleMentions(db,body) {
const note = new Note(db,body.note)
if(!note.hasCW){ if(!note.hasCW){
createNote("Please put your prompt suggestions behind a CW. No spoilers!") createNote("Please put your prompt suggestions behind a CW. No spoilers!")
return {code: "NOCW"} return {code: "NOCW"}
@ -17,7 +15,7 @@ export default async function handleMentions(db,body) {
return { code: "NOTONEWORD" } return { code: "NOTONEWORD" }
} }
const word = note.cleanText const word = note.cleanText
if (await valueExistsInColumn(db, 'bad_words', 'word', word)) { if (await valueExistsInColumn('bad_words', 'word', word)) {
createNote("That word is on my blocklist.",note.id) createNote("That word is on my blocklist.",note.id)
return { code: "BLOCKLIST" } return { code: "BLOCKLIST" }
} }
@ -26,20 +24,20 @@ export default async function handleMentions(db,body) {
createNote(`I'm afraid I can't do that, ${note.author}. That's not a 'real' word, at least as far as I'm aware! Have you checked the spelling?`,note.id) createNote(`I'm afraid I can't do that, ${note.author}. That's not a 'real' word, at least as far as I'm aware! Have you checked the spelling?`,note.id)
return { code: "NOTREAL" } return { code: "NOTREAL" }
} }
if (await wordIsAlreadyInBuffer(db,word)) { if (await wordIsAlreadyInBuffer(word)) {
createNote(`Believe it or not, somebody has already suggested that! Watch this space!`,note.id) createNote(`Believe it or not, somebody has already suggested that! Watch this space!`,note.id)
return { code: "INBUFFER" } return { code: "INBUFFER" }
} }
let unacceptable = await getAcceptablePrompts(db,word) let unacceptable = await getAcceptablePrompts(word)
unacceptable = unacceptable.length===0 unacceptable = unacceptable.length===0
if (unacceptable) { if (unacceptable) {
if (await valueExistsInColumn(db,'medical_dictionary', 'word', word)) { if (await valueExistsInColumn('medical_dictionary', 'word', word)) {
createNote("I'm afraid I can't use any word that appears in my medical dictionary. I know this delivers some false positives, but it was the only way.",note.id) createNote("I'm afraid I can't use any word that appears in my medical dictionary. I know this delivers some false positives, but it was the only way.",note.id)
return { code: "MEDICAL" } return { code: "MEDICAL" }
} }
if(await valueExistsInColumn(db,'published','word',word)){ if(await valueExistsInColumn('published','word',word)){
let datePublished = await getDatePublished(db,word) let datePublished = await getDatePublished(word)
datePublished = datePublished[0].date datePublished = datePublished[0].date
createNote(`I already used that prompt on ${datePublished}, actually!`,note.id) createNote(`I already used that prompt on ${datePublished}, actually!`,note.id)
return {code: "PUBLISHED"} return {code: "PUBLISHED"}
@ -47,7 +45,7 @@ export default async function handleMentions(db,body) {
createNote(`I'm afraid I can't do that, ${note.author}. The word you've suggested is either too quirky or not quirky enough. Them's the breaks.`,note.id) createNote(`I'm afraid I can't do that, ${note.author}. The word you've suggested is either too quirky or not quirky enough. Them's the breaks.`,note.id)
return { code: "RARITY" } return { code: "RARITY" }
} else { } else {
await insertIntoBuffer(db,word,timestamp()) await insertIntoBuffer(word,timestamp())
await createNote(`OK!`,note.id) await createNote(`OK!`,note.id)
return { code: "OK" } return { code: "OK" }
} }

View File

@ -1,16 +1,12 @@
import cron from 'node-cron' import cron from 'node-cron'
import logger from './logger.mjs'; import logger from './logger.mjs';
import checkAndPublish from './checkAndPublish.mjs'; import checkAndPublish from './checkAndPublish.mjs';
import { isoDate } from './utilities.mjs';
export default function start(db){ export default function start(){
process.env.TZ = 'Europe/Madrid'
logger.trace("start() called") logger.trace("start() called")
logger.trace(Date()) checkAndPublish()
logger.trace(isoDate())
checkAndPublish(db)
cron.schedule('* * * * *', () => { cron.schedule('* * * * *', () => {
checkAndPublish(db) checkAndPublish()
logger.trace('one-minute cron call'); logger.trace('one-minute cron call');
}); });
} }

View File

@ -1,5 +1,4 @@
import Note from "../social-interaction/Note.mjs"; import Note from "../social-interaction/Note.mjs";
import { testDb as db } from "../database-calls/db.mjs";
import { expect } from "chai"; import { expect } from "chai";
const sampleNote = { const sampleNote = {
"id": "9id213fllx9y189f", "id": "9id213fllx9y189f",
@ -77,7 +76,7 @@ const sampleNote = {
"renoteId": null "renoteId": null
} }
} }
const N1 = new Note(db,sampleNote) const N1 = new Note(sampleNote)
describe("Testing Note getters", function () { describe("Testing Note getters", function () {
it("1. .text returns a string", function (done) { it("1. .text returns a string", function (done) {
expect(N1.text).to.be.a("string") expect(N1.text).to.be.a("string")

View File

@ -1,10 +1,5 @@
import handleMentions from "../social-interaction/handleMention.mjs"; import handleMentions from "../social-interaction/handleMention.mjs";
import { testDb as db } from "../database-calls/db.mjs";
import { expect } from "chai"; import { expect } from "chai";
import {insertPublished, insertIntoBuffer }from "../database-calls/INSERTFunctions.mjs";
import { sampleRes } from "../database-calls/db.mjs";
import { deleteFromPublished, deleteFromBuffer } from "../database-calls/DELETEFunctions.mjs";
import { timestamp } from "../utilities.mjs";
const sampleBody = { const sampleBody = {
note: { note: {
"id": "9id213fllx9y189f", "id": "9id213fllx9y189f",
@ -89,70 +84,62 @@ describe("Testing handleMentions responses", async function(){
it("1. handleMentions() returns code MEDICAL when text = '@micro365 hysterectomy'", async function(){ it("1. handleMentions() returns code MEDICAL when text = '@micro365 hysterectomy'", async function(){
sampleBody.note.text = "@micro365 hysterectomy" sampleBody.note.text = "@micro365 hysterectomy"
const result = await handleMentions(db,sampleBody) const result = await handleMentions(sampleBody)
expect(result.code).to.equal("MEDICAL") expect(result.code).to.equal("MEDICAL")
//done() //done()
}) })
it("2. handleMentions() returns code BLOCKLIST when text = '@micro365 knockers'", async function(){ it("2. handleMentions() returns code BLOCKLIST when text = '@micro365 knockers'", async function(){
sampleBody.note.text = "@micro365 knockers" sampleBody.note.text = "@micro365 knockers"
const result = await handleMentions(db,sampleBody) const result = await handleMentions(sampleBody)
expect(result.code).to.equal("BLOCKLIST") expect(result.code).to.equal("BLOCKLIST")
//done() //done()
}) })
it("3. handleMentions() returns code RARITY when text = '@micro365 the'", async function(){ it("3. handleMentions() returns code RARITY when text = '@micro365 the'", async function(){
sampleBody.note.text = "@micro365 the" sampleBody.note.text = "@micro365 the"
const result = await handleMentions(db,sampleBody) const result = await handleMentions(sampleBody)
expect(result.code).to.equal("RARITY") expect(result.code).to.equal("RARITY")
//done() //done()
}) })
it("4. handleMentions() returns code INBUFFER when text = '@micro365 incapacity'", async function(){ it("4. handleMentions() returns code INBUFFER when text = '@micro365 incapacity'", async function(){
sampleBody.note.text = "@micro365 incapacity" sampleBody.note.text = "@micro365 incapacity"
await deleteFromBuffer(db,'incapacity') const result = await handleMentions(sampleBody)
await insertIntoBuffer(db, 'incapacity',timestamp())
const result = await handleMentions(db,sampleBody)
await deleteFromBuffer(db,'incapacity')
expect(result.code).to.equal("INBUFFER") expect(result.code).to.equal("INBUFFER")
//done() //done()
}) })
it("5. handleMentions() returns code NOTREAL when text = '@micro365 embiggensly'", async function(){ it("5. handleMentions() returns code NOTREAL when text = '@micro365 embiggensly'", async function(){
sampleBody.note.text = "@micro365 embiggensly" sampleBody.note.text = "@micro365 embiggensly"
const result = await handleMentions(db,sampleBody) const result = await handleMentions(sampleBody)
expect(result.code).to.equal("NOTREAL") expect(result.code).to.equal("NOTREAL")
//done() //done()
}) })
it("5.1 handleMentions() returns code NOTREAL when text = '@micro365 uydwgqi'", async function(){ it("5.1 handleMentions() returns code NOTREAL when text = '@micro365 uydwgqi'", async function(){
sampleBody.note.text = "@micro365 uydwgqi" sampleBody.note.text = "@micro365 uydwgqi"
const result = await handleMentions(db,sampleBody) const result = await handleMentions(sampleBody)
expect(result.code).to.equal("NOTREAL") expect(result.code).to.equal("NOTREAL")
//done() //done()
}) })
it("6. handleMentions() returns code NOTONEWORD when text = '@micro365 apple banana'", async function(){ it("6. handleMentions() returns code NOTONEWORD when text = '@micro365 apple banana'", async function(){
sampleBody.note.text = "@micro365 apple apple" sampleBody.note.text = "@micro365 apple apple"
const result = await handleMentions(db,sampleBody) const result = await handleMentions(sampleBody)
expect(result.code).to.equal("NOTONEWORD") expect(result.code).to.equal("NOTONEWORD")
//done() //done()
}) })
it("7. handleMentions() returns code OK when text = '@micro365 howler'", async function(){ it("7. handleMentions() returns code OK when text = '@micro365 howler'", async function(){
sampleBody.note.text = "@micro365 howler" sampleBody.note.text = "@micro365 howler"
const result = await handleMentions(sampleBody)
const result = await handleMentions(db,sampleBody)
expect(result.code).to.equal("OK") expect(result.code).to.equal("OK")
//done() //done()
}) })
it("8. handleMentions() returns code PUBLISHED when text = '@micro365 nudism'", async function(){ it("8. handleMentions() returns code PUBLISHED when text = '@micro365 nudism'", async function(){
sampleBody.note.text = "@micro365 nudism" sampleBody.note.text = "@micro365 nudism"
await deleteFromPublished(db,'nudism') const result = await handleMentions(sampleBody)
await insertPublished(db,sampleRes,'nudism')
const result = await handleMentions(db,sampleBody)
await deleteFromPublished(db,'nudism')
expect(result.code).to.equal("PUBLISHED") expect(result.code).to.equal("PUBLISHED")
//done() //done()
}) })
it("9. handleMentions() returns code NOCW when cw = ''", async function(){ it("9. handleMentions() returns code NOCW when cw = ''", async function(){
sampleBody.note.cw = "" sampleBody.note.cw = ""
const result = await handleMentions(db,sampleBody) const result = await handleMentions(sampleBody)
expect(result.code).to.equal("NOCW") expect(result.code).to.equal("NOCW")
//done() //done()
}) })

View File

@ -1,9 +1,5 @@
import { DateTime } from "luxon" export function isoDate(date=Date.now()){
export function isoDate(date){ return new Date().toISOString().split('T')[0]
if(date){
return DateTime.fromISO(date).toISODate()
}
return DateTime.now().toISODate()
} }
export function removeUrls(string) { export function removeUrls(string) {
@ -12,7 +8,4 @@ export function removeUrls(string) {
export function timestamp(){ export function timestamp(){
return Date.now() return Date.now()
} }
//console.log(isoDate('2023-08-10T15:02:35.380Z'))