From 9abe39681fa6898e97232d006657683e249ae3f8 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:22:05 +0100 Subject: [PATCH 1/9] feat: add vale --- .github/workflows/tests.yml | 9 + .vale.ini | 16 + .vale/styles/Vocab/Vocab/accept.txt | 4 + .vale/styles/write-good/Cliches.yml | 702 ++++++++++++++++++++++++++ .vale/styles/write-good/E-Prime.yml | 32 ++ .vale/styles/write-good/Illusions.yml | 11 + .vale/styles/write-good/Passive.yml | 183 +++++++ .vale/styles/write-good/README.md | 27 + .vale/styles/write-good/So.yml | 5 + .vale/styles/write-good/ThereIs.yml | 6 + .vale/styles/write-good/TooWordy.yml | 221 ++++++++ .vale/styles/write-good/Weasel.yml | 207 ++++++++ .vale/styles/write-good/meta.json | 4 + 13 files changed, 1427 insertions(+) create mode 100644 .vale.ini create mode 100644 .vale/styles/Vocab/Vocab/accept.txt create mode 100644 .vale/styles/write-good/Cliches.yml create mode 100644 .vale/styles/write-good/E-Prime.yml create mode 100644 .vale/styles/write-good/Illusions.yml create mode 100644 .vale/styles/write-good/Passive.yml create mode 100644 .vale/styles/write-good/README.md create mode 100644 .vale/styles/write-good/So.yml create mode 100644 .vale/styles/write-good/ThereIs.yml create mode 100644 .vale/styles/write-good/TooWordy.yml create mode 100644 .vale/styles/write-good/Weasel.yml create mode 100644 .vale/styles/write-good/meta.json diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 11c5d72908..a7bb002005 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,6 +7,15 @@ on: branches: [main] jobs: + vale: + name: runner / vale + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: errata-ai/vale-action@reviewdog + with: + files: "**/*.md" + reporter: github-pr-check build: runs-on: ubuntu-latest steps: diff --git a/.vale.ini b/.vale.ini new file mode 100644 index 0000000000..9b93f8e08b --- /dev/null +++ b/.vale.ini @@ -0,0 +1,16 @@ +StylesPath=".vale/styles" + +Vocab = Vocab +Packages = write-good + +MinAlertLevel = suggestion + +IgnoredScopes = code, tt +SkippedScopes = script, style, pre, figure + +[formats] +markdoc = md + +[*.md] +BasedOnStyles = Vale, write-good +BlockIgnores = {%.*%} \ No newline at end of file diff --git a/.vale/styles/Vocab/Vocab/accept.txt b/.vale/styles/Vocab/Vocab/accept.txt new file mode 100644 index 0000000000..806aca5612 --- /dev/null +++ b/.vale/styles/Vocab/Vocab/accept.txt @@ -0,0 +1,4 @@ +Appwrite +Vue +Vite +NPM \ No newline at end of file diff --git a/.vale/styles/write-good/Cliches.yml b/.vale/styles/write-good/Cliches.yml new file mode 100644 index 0000000000..c95314387b --- /dev/null +++ b/.vale/styles/write-good/Cliches.yml @@ -0,0 +1,702 @@ +extends: existence +message: "Try to avoid using clichés like '%s'." +ignorecase: true +level: warning +tokens: + - a chip off the old block + - a clean slate + - a dark and stormy night + - a far cry + - a fine kettle of fish + - a loose cannon + - a penny saved is a penny earned + - a tough row to hoe + - a word to the wise + - ace in the hole + - acid test + - add insult to injury + - against all odds + - air your dirty laundry + - all fun and games + - all in a day's work + - all talk, no action + - all thumbs + - all your eggs in one basket + - all's fair in love and war + - all's well that ends well + - almighty dollar + - American as apple pie + - an axe to grind + - another day, another dollar + - armed to the teeth + - as luck would have it + - as old as time + - as the crow flies + - at loose ends + - at my wits end + - avoid like the plague + - babe in the woods + - back against the wall + - back in the saddle + - back to square one + - back to the drawing board + - bad to the bone + - badge of honor + - bald faced liar + - ballpark figure + - banging your head against a brick wall + - baptism by fire + - barking up the wrong tree + - bat out of hell + - be all and end all + - beat a dead horse + - beat around the bush + - been there, done that + - beggars can't be choosers + - behind the eight ball + - bend over backwards + - benefit of the doubt + - bent out of shape + - best thing since sliced bread + - bet your bottom dollar + - better half + - better late than never + - better mousetrap + - better safe than sorry + - between a rock and a hard place + - beyond the pale + - bide your time + - big as life + - big cheese + - big fish in a small pond + - big man on campus + - bigger they are the harder they fall + - bird in the hand + - bird's eye view + - birds and the bees + - birds of a feather flock together + - bit the hand that feeds you + - bite the bullet + - bite the dust + - bitten off more than he can chew + - black as coal + - black as pitch + - black as the ace of spades + - blast from the past + - bleeding heart + - blessing in disguise + - blind ambition + - blind as a bat + - blind leading the blind + - blood is thicker than water + - blood sweat and tears + - blow off steam + - blow your own horn + - blushing bride + - boils down to + - bolt from the blue + - bone to pick + - bored stiff + - bored to tears + - bottomless pit + - boys will be boys + - bright and early + - brings home the bacon + - broad across the beam + - broken record + - brought back to reality + - bull by the horns + - bull in a china shop + - burn the midnight oil + - burning question + - burning the candle at both ends + - burst your bubble + - bury the hatchet + - busy as a bee + - by hook or by crook + - call a spade a spade + - called onto the carpet + - calm before the storm + - can of worms + - can't cut the mustard + - can't hold a candle to + - case of mistaken identity + - cat got your tongue + - cat's meow + - caught in the crossfire + - caught red-handed + - checkered past + - chomping at the bit + - cleanliness is next to godliness + - clear as a bell + - clear as mud + - close to the vest + - cock and bull story + - cold shoulder + - come hell or high water + - cool as a cucumber + - cool, calm, and collected + - cost a king's ransom + - count your blessings + - crack of dawn + - crash course + - creature comforts + - cross that bridge when you come to it + - crushing blow + - cry like a baby + - cry me a river + - cry over spilt milk + - crystal clear + - curiosity killed the cat + - cut and dried + - cut through the red tape + - cut to the chase + - cute as a bugs ear + - cute as a button + - cute as a puppy + - cuts to the quick + - dark before the dawn + - day in, day out + - dead as a doornail + - devil is in the details + - dime a dozen + - divide and conquer + - dog and pony show + - dog days + - dog eat dog + - dog tired + - don't burn your bridges + - don't count your chickens + - don't look a gift horse in the mouth + - don't rock the boat + - don't step on anyone's toes + - don't take any wooden nickels + - down and out + - down at the heels + - down in the dumps + - down the hatch + - down to earth + - draw the line + - dressed to kill + - dressed to the nines + - drives me up the wall + - dull as dishwater + - dyed in the wool + - eagle eye + - ear to the ground + - early bird catches the worm + - easier said than done + - easy as pie + - eat your heart out + - eat your words + - eleventh hour + - even the playing field + - every dog has its day + - every fiber of my being + - everything but the kitchen sink + - eye for an eye + - face the music + - facts of life + - fair weather friend + - fall by the wayside + - fan the flames + - feast or famine + - feather your nest + - feathered friends + - few and far between + - fifteen minutes of fame + - filthy vermin + - fine kettle of fish + - fish out of water + - fishing for a compliment + - fit as a fiddle + - fit the bill + - fit to be tied + - flash in the pan + - flat as a pancake + - flip your lid + - flog a dead horse + - fly by night + - fly the coop + - follow your heart + - for all intents and purposes + - for the birds + - for what it's worth + - force of nature + - force to be reckoned with + - forgive and forget + - fox in the henhouse + - free and easy + - free as a bird + - fresh as a daisy + - full steam ahead + - fun in the sun + - garbage in, garbage out + - gentle as a lamb + - get a kick out of + - get a leg up + - get down and dirty + - get the lead out + - get to the bottom of + - get your feet wet + - gets my goat + - gilding the lily + - give and take + - go against the grain + - go at it tooth and nail + - go for broke + - go him one better + - go the extra mile + - go with the flow + - goes without saying + - good as gold + - good deed for the day + - good things come to those who wait + - good time was had by all + - good times were had by all + - greased lightning + - greek to me + - green thumb + - green-eyed monster + - grist for the mill + - growing like a weed + - hair of the dog + - hand to mouth + - happy as a clam + - happy as a lark + - hasn't a clue + - have a nice day + - have high hopes + - have the last laugh + - haven't got a row to hoe + - head honcho + - head over heels + - hear a pin drop + - heard it through the grapevine + - heart's content + - heavy as lead + - hem and haw + - high and dry + - high and mighty + - high as a kite + - hit paydirt + - hold your head up high + - hold your horses + - hold your own + - hold your tongue + - honest as the day is long + - horns of a dilemma + - horse of a different color + - hot under the collar + - hour of need + - I beg to differ + - icing on the cake + - if the shoe fits + - if the shoe were on the other foot + - in a jam + - in a jiffy + - in a nutshell + - in a pig's eye + - in a pinch + - in a word + - in hot water + - in the gutter + - in the nick of time + - in the thick of it + - in your dreams + - it ain't over till the fat lady sings + - it goes without saying + - it takes all kinds + - it takes one to know one + - it's a small world + - it's only a matter of time + - ivory tower + - Jack of all trades + - jockey for position + - jog your memory + - joined at the hip + - judge a book by its cover + - jump down your throat + - jump in with both feet + - jump on the bandwagon + - jump the gun + - jump to conclusions + - just a hop, skip, and a jump + - just the ticket + - justice is blind + - keep a stiff upper lip + - keep an eye on + - keep it simple, stupid + - keep the home fires burning + - keep up with the Joneses + - keep your chin up + - keep your fingers crossed + - kick the bucket + - kick up your heels + - kick your feet up + - kid in a candy store + - kill two birds with one stone + - kiss of death + - knock it out of the park + - knock on wood + - knock your socks off + - know him from Adam + - know the ropes + - know the score + - knuckle down + - knuckle sandwich + - knuckle under + - labor of love + - ladder of success + - land on your feet + - lap of luxury + - last but not least + - last hurrah + - last-ditch effort + - law of the jungle + - law of the land + - lay down the law + - leaps and bounds + - let sleeping dogs lie + - let the cat out of the bag + - let the good times roll + - let your hair down + - let's talk turkey + - letter perfect + - lick your wounds + - lies like a rug + - life's a bitch + - life's a grind + - light at the end of the tunnel + - lighter than a feather + - lighter than air + - like clockwork + - like father like son + - like taking candy from a baby + - like there's no tomorrow + - lion's share + - live and learn + - live and let live + - long and short of it + - long lost love + - look before you leap + - look down your nose + - look what the cat dragged in + - looking a gift horse in the mouth + - looks like death warmed over + - loose cannon + - lose your head + - lose your temper + - loud as a horn + - lounge lizard + - loved and lost + - low man on the totem pole + - luck of the draw + - luck of the Irish + - make hay while the sun shines + - make money hand over fist + - make my day + - make the best of a bad situation + - make the best of it + - make your blood boil + - man of few words + - man's best friend + - mark my words + - meaningful dialogue + - missed the boat on that one + - moment in the sun + - moment of glory + - moment of truth + - money to burn + - more power to you + - more than one way to skin a cat + - movers and shakers + - moving experience + - naked as a jaybird + - naked truth + - neat as a pin + - needle in a haystack + - needless to say + - neither here nor there + - never look back + - never say never + - nip and tuck + - nip it in the bud + - no guts, no glory + - no love lost + - no pain, no gain + - no skin off my back + - no stone unturned + - no time like the present + - no use crying over spilled milk + - nose to the grindstone + - not a hope in hell + - not a minute's peace + - not in my backyard + - not playing with a full deck + - not the end of the world + - not written in stone + - nothing to sneeze at + - nothing ventured nothing gained + - now we're cooking + - off the top of my head + - off the wagon + - off the wall + - old hat + - older and wiser + - older than dirt + - older than Methuselah + - on a roll + - on cloud nine + - on pins and needles + - on the bandwagon + - on the money + - on the nose + - on the rocks + - on the spot + - on the tip of my tongue + - on the wagon + - on thin ice + - once bitten, twice shy + - one bad apple doesn't spoil the bushel + - one born every minute + - one brick short + - one foot in the grave + - one in a million + - one red cent + - only game in town + - open a can of worms + - open and shut case + - open the flood gates + - opportunity doesn't knock twice + - out of pocket + - out of sight, out of mind + - out of the frying pan into the fire + - out of the woods + - out on a limb + - over a barrel + - over the hump + - pain and suffering + - pain in the + - panic button + - par for the course + - part and parcel + - party pooper + - pass the buck + - patience is a virtue + - pay through the nose + - penny pincher + - perfect storm + - pig in a poke + - pile it on + - pillar of the community + - pin your hopes on + - pitter patter of little feet + - plain as day + - plain as the nose on your face + - play by the rules + - play your cards right + - playing the field + - playing with fire + - pleased as punch + - plenty of fish in the sea + - point with pride + - poor as a church mouse + - pot calling the kettle black + - pretty as a picture + - pull a fast one + - pull your punches + - pulling your leg + - pure as the driven snow + - put it in a nutshell + - put one over on you + - put the cart before the horse + - put the pedal to the metal + - put your best foot forward + - put your foot down + - quick as a bunny + - quick as a lick + - quick as a wink + - quick as lightning + - quiet as a dormouse + - rags to riches + - raining buckets + - raining cats and dogs + - rank and file + - rat race + - reap what you sow + - red as a beet + - red herring + - reinvent the wheel + - rich and famous + - rings a bell + - ripe old age + - ripped me off + - rise and shine + - road to hell is paved with good intentions + - rob Peter to pay Paul + - roll over in the grave + - rub the wrong way + - ruled the roost + - running in circles + - sad but true + - sadder but wiser + - salt of the earth + - scared stiff + - scared to death + - sealed with a kiss + - second to none + - see eye to eye + - seen the light + - seize the day + - set the record straight + - set the world on fire + - set your teeth on edge + - sharp as a tack + - shoot for the moon + - shoot the breeze + - shot in the dark + - shoulder to the wheel + - sick as a dog + - sigh of relief + - signed, sealed, and delivered + - sink or swim + - six of one, half a dozen of another + - skating on thin ice + - slept like a log + - slinging mud + - slippery as an eel + - slow as molasses + - smart as a whip + - smooth as a baby's bottom + - sneaking suspicion + - snug as a bug in a rug + - sow wild oats + - spare the rod, spoil the child + - speak of the devil + - spilled the beans + - spinning your wheels + - spitting image of + - spoke with relish + - spread like wildfire + - spring to life + - squeaky wheel gets the grease + - stands out like a sore thumb + - start from scratch + - stick in the mud + - still waters run deep + - stitch in time + - stop and smell the roses + - straight as an arrow + - straw that broke the camel's back + - strong as an ox + - stubborn as a mule + - stuff that dreams are made of + - stuffed shirt + - sweating blood + - sweating bullets + - take a load off + - take one for the team + - take the bait + - take the bull by the horns + - take the plunge + - takes one to know one + - takes two to tango + - the more the merrier + - the real deal + - the real McCoy + - the red carpet treatment + - the same old story + - there is no accounting for taste + - thick as a brick + - thick as thieves + - thin as a rail + - think outside of the box + - third time's the charm + - this day and age + - this hurts me worse than it hurts you + - this point in time + - three sheets to the wind + - through thick and thin + - throw in the towel + - tie one on + - tighter than a drum + - time and time again + - time is of the essence + - tip of the iceberg + - tired but happy + - to coin a phrase + - to each his own + - to make a long story short + - to the best of my knowledge + - toe the line + - tongue in cheek + - too good to be true + - too hot to handle + - too numerous to mention + - touch with a ten foot pole + - tough as nails + - trial and error + - trials and tribulations + - tried and true + - trip down memory lane + - twist of fate + - two cents worth + - two peas in a pod + - ugly as sin + - under the counter + - under the gun + - under the same roof + - under the weather + - until the cows come home + - unvarnished truth + - up the creek + - uphill battle + - upper crust + - upset the applecart + - vain attempt + - vain effort + - vanquish the enemy + - vested interest + - waiting for the other shoe to drop + - wakeup call + - warm welcome + - watch your p's and q's + - watch your tongue + - watching the clock + - water under the bridge + - weather the storm + - weed them out + - week of Sundays + - went belly up + - wet behind the ears + - what goes around comes around + - what you see is what you get + - when it rains, it pours + - when push comes to shove + - when the cat's away + - when the going gets tough, the tough get going + - white as a sheet + - whole ball of wax + - whole hog + - whole nine yards + - wild goose chase + - will wonders never cease? + - wisdom of the ages + - wise as an owl + - wolf at the door + - words fail me + - work like a dog + - world weary + - worst nightmare + - worth its weight in gold + - wrong side of the bed + - yanking your chain + - yappy as a dog + - years young + - you are what you eat + - you can run but you can't hide + - you only live once + - you're the boss + - young and foolish + - young and vibrant diff --git a/.vale/styles/write-good/E-Prime.yml b/.vale/styles/write-good/E-Prime.yml new file mode 100644 index 0000000000..074a102b25 --- /dev/null +++ b/.vale/styles/write-good/E-Prime.yml @@ -0,0 +1,32 @@ +extends: existence +message: "Try to avoid using '%s'." +ignorecase: true +level: suggestion +tokens: + - am + - are + - aren't + - be + - been + - being + - he's + - here's + - here's + - how's + - i'm + - is + - isn't + - it's + - she's + - that's + - there's + - they're + - was + - wasn't + - we're + - were + - weren't + - what's + - where's + - who's + - you're diff --git a/.vale/styles/write-good/Illusions.yml b/.vale/styles/write-good/Illusions.yml new file mode 100644 index 0000000000..b4f1321859 --- /dev/null +++ b/.vale/styles/write-good/Illusions.yml @@ -0,0 +1,11 @@ +extends: repetition +message: "'%s' is repeated!" +level: warning +alpha: true +action: + name: edit + params: + - truncate + - " " +tokens: + - '[^\s]+' diff --git a/.vale/styles/write-good/Passive.yml b/.vale/styles/write-good/Passive.yml new file mode 100644 index 0000000000..f472cb9049 --- /dev/null +++ b/.vale/styles/write-good/Passive.yml @@ -0,0 +1,183 @@ +extends: existence +message: "'%s' may be passive voice. Use active voice if you can." +ignorecase: true +level: warning +raw: + - \b(am|are|were|being|is|been|was|be)\b\s* +tokens: + - '[\w]+ed' + - awoken + - beat + - become + - been + - begun + - bent + - beset + - bet + - bid + - bidden + - bitten + - bled + - blown + - born + - bought + - bound + - bred + - broadcast + - broken + - brought + - built + - burnt + - burst + - cast + - caught + - chosen + - clung + - come + - cost + - crept + - cut + - dealt + - dived + - done + - drawn + - dreamt + - driven + - drunk + - dug + - eaten + - fallen + - fed + - felt + - fit + - fled + - flown + - flung + - forbidden + - foregone + - forgiven + - forgotten + - forsaken + - fought + - found + - frozen + - given + - gone + - gotten + - ground + - grown + - heard + - held + - hidden + - hit + - hung + - hurt + - kept + - knelt + - knit + - known + - laid + - lain + - leapt + - learnt + - led + - left + - lent + - let + - lighted + - lost + - made + - meant + - met + - misspelt + - mistaken + - mown + - overcome + - overdone + - overtaken + - overthrown + - paid + - pled + - proven + - put + - quit + - read + - rid + - ridden + - risen + - run + - rung + - said + - sat + - sawn + - seen + - sent + - set + - sewn + - shaken + - shaven + - shed + - shod + - shone + - shorn + - shot + - shown + - shrunk + - shut + - slain + - slept + - slid + - slit + - slung + - smitten + - sold + - sought + - sown + - sped + - spent + - spilt + - spit + - split + - spoken + - spread + - sprung + - spun + - stolen + - stood + - stridden + - striven + - struck + - strung + - stuck + - stung + - stunk + - sung + - sunk + - swept + - swollen + - sworn + - swum + - swung + - taken + - taught + - thought + - thrived + - thrown + - thrust + - told + - torn + - trodden + - understood + - upheld + - upset + - wed + - wept + - withheld + - withstood + - woken + - won + - worn + - wound + - woven + - written + - wrung diff --git a/.vale/styles/write-good/README.md b/.vale/styles/write-good/README.md new file mode 100644 index 0000000000..3edcc9b376 --- /dev/null +++ b/.vale/styles/write-good/README.md @@ -0,0 +1,27 @@ +Based on [write-good](https://github.com/btford/write-good). + +> Naive linter for English prose for developers who can't write good and wanna learn to do other stuff good too. + +``` +The MIT License (MIT) + +Copyright (c) 2014 Brian Ford + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` diff --git a/.vale/styles/write-good/So.yml b/.vale/styles/write-good/So.yml new file mode 100644 index 0000000000..e57f099dc0 --- /dev/null +++ b/.vale/styles/write-good/So.yml @@ -0,0 +1,5 @@ +extends: existence +message: "Don't start a sentence with '%s'." +level: error +raw: + - '(?:[;-]\s)so[\s,]|\bSo[\s,]' diff --git a/.vale/styles/write-good/ThereIs.yml b/.vale/styles/write-good/ThereIs.yml new file mode 100644 index 0000000000..8b82e8f6cc --- /dev/null +++ b/.vale/styles/write-good/ThereIs.yml @@ -0,0 +1,6 @@ +extends: existence +message: "Don't start a sentence with '%s'." +ignorecase: false +level: error +raw: + - '(?:[;-]\s)There\s(is|are)|\bThere\s(is|are)\b' diff --git a/.vale/styles/write-good/TooWordy.yml b/.vale/styles/write-good/TooWordy.yml new file mode 100644 index 0000000000..275701b196 --- /dev/null +++ b/.vale/styles/write-good/TooWordy.yml @@ -0,0 +1,221 @@ +extends: existence +message: "'%s' is too wordy." +ignorecase: true +level: warning +tokens: + - a number of + - abundance + - accede to + - accelerate + - accentuate + - accompany + - accomplish + - accorded + - accrue + - acquiesce + - acquire + - additional + - adjacent to + - adjustment + - admissible + - advantageous + - adversely impact + - advise + - aforementioned + - aggregate + - aircraft + - all of + - all things considered + - alleviate + - allocate + - along the lines of + - already existing + - alternatively + - amazing + - ameliorate + - anticipate + - apparent + - appreciable + - as a matter of fact + - as a means of + - as far as I'm concerned + - as of yet + - as to + - as yet + - ascertain + - assistance + - at the present time + - at this time + - attain + - attributable to + - authorize + - because of the fact that + - belated + - benefit from + - bestow + - by means of + - by virtue of + - by virtue of the fact that + - cease + - close proximity + - commence + - comply with + - concerning + - consequently + - consolidate + - constitutes + - demonstrate + - depart + - designate + - discontinue + - due to the fact that + - each and every + - economical + - eliminate + - elucidate + - employ + - endeavor + - enumerate + - equitable + - equivalent + - evaluate + - evidenced + - exclusively + - expedite + - expend + - expiration + - facilitate + - factual evidence + - feasible + - finalize + - first and foremost + - for all intents and purposes + - for the most part + - for the purpose of + - forfeit + - formulate + - have a tendency to + - honest truth + - however + - if and when + - impacted + - implement + - in a manner of speaking + - in a timely manner + - in a very real sense + - in accordance with + - in addition + - in all likelihood + - in an effort to + - in between + - in excess of + - in lieu of + - in light of the fact that + - in many cases + - in my opinion + - in order to + - in regard to + - in some instances + - in terms of + - in the case of + - in the event that + - in the final analysis + - in the nature of + - in the near future + - in the process of + - inception + - incumbent upon + - indicate + - indication + - initiate + - irregardless + - is applicable to + - is authorized to + - is responsible for + - it is + - it is essential + - it seems that + - it was + - magnitude + - maximum + - methodology + - minimize + - minimum + - modify + - monitor + - multiple + - necessitate + - nevertheless + - not certain + - not many + - not often + - not unless + - not unlike + - notwithstanding + - null and void + - numerous + - objective + - obligate + - obtain + - on the contrary + - on the other hand + - one particular + - optimum + - overall + - owing to the fact that + - participate + - particulars + - pass away + - pertaining to + - point in time + - portion + - possess + - preclude + - previously + - prior to + - prioritize + - procure + - proficiency + - provided that + - purchase + - put simply + - readily apparent + - refer back + - regarding + - relocate + - remainder + - remuneration + - requirement + - reside + - residence + - retain + - satisfy + - shall + - should you wish + - similar to + - solicit + - span across + - strategize + - subsequent + - substantial + - successfully complete + - sufficient + - terminate + - the month of + - the point I am trying to make + - therefore + - time period + - took advantage of + - transmit + - transpire + - type of + - until such time as + - utilization + - utilize + - validate + - various different + - what I mean to say is + - whether or not + - with respect to + - with the exception of + - witnessed diff --git a/.vale/styles/write-good/Weasel.yml b/.vale/styles/write-good/Weasel.yml new file mode 100644 index 0000000000..e29391444b --- /dev/null +++ b/.vale/styles/write-good/Weasel.yml @@ -0,0 +1,207 @@ +extends: existence +message: "'%s' is a weasel word!" +ignorecase: true +level: warning +tokens: + - absolutely + - accidentally + - additionally + - allegedly + - alternatively + - angrily + - anxiously + - approximately + - awkwardly + - badly + - barely + - beautifully + - blindly + - boldly + - bravely + - brightly + - briskly + - bristly + - bubbly + - busily + - calmly + - carefully + - carelessly + - cautiously + - cheerfully + - clearly + - closely + - coldly + - completely + - consequently + - correctly + - courageously + - crinkly + - cruelly + - crumbly + - cuddly + - currently + - daily + - daringly + - deadly + - definitely + - deliberately + - doubtfully + - dumbly + - eagerly + - early + - easily + - elegantly + - enormously + - enthusiastically + - equally + - especially + - eventually + - exactly + - exceedingly + - exclusively + - extremely + - fairly + - faithfully + - fatally + - fiercely + - finally + - fondly + - few + - foolishly + - fortunately + - frankly + - frantically + - generously + - gently + - giggly + - gladly + - gracefully + - greedily + - happily + - hardly + - hastily + - healthily + - heartily + - helpfully + - honestly + - hourly + - hungrily + - hurriedly + - immediately + - impatiently + - inadequately + - ingeniously + - innocently + - inquisitively + - interestingly + - irritably + - jiggly + - joyously + - justly + - kindly + - largely + - lately + - lazily + - likely + - literally + - lonely + - loosely + - loudly + - loudly + - luckily + - madly + - many + - mentally + - mildly + - monthly + - mortally + - mostly + - mysteriously + - neatly + - nervously + - nightly + - noisily + - normally + - obediently + - occasionally + - only + - openly + - painfully + - particularly + - patiently + - perfectly + - politely + - poorly + - powerfully + - presumably + - previously + - promptly + - punctually + - quarterly + - quickly + - quietly + - rapidly + - rarely + - really + - recently + - recklessly + - regularly + - remarkably + - relatively + - reluctantly + - repeatedly + - rightfully + - roughly + - rudely + - sadly + - safely + - selfishly + - sensibly + - seriously + - sharply + - shortly + - shyly + - significantly + - silently + - simply + - sleepily + - slowly + - smartly + - smelly + - smoothly + - softly + - solemnly + - sparkly + - speedily + - stealthily + - sternly + - stupidly + - substantially + - successfully + - suddenly + - surprisingly + - suspiciously + - swiftly + - tenderly + - tensely + - thoughtfully + - tightly + - timely + - truthfully + - unexpectedly + - unfortunately + - usually + - very + - victoriously + - violently + - vivaciously + - warmly + - waverly + - weakly + - wearily + - weekly + - wildly + - wisely + - worldly + - wrinkly + - yearly diff --git a/.vale/styles/write-good/meta.json b/.vale/styles/write-good/meta.json new file mode 100644 index 0000000000..a115d2886a --- /dev/null +++ b/.vale/styles/write-good/meta.json @@ -0,0 +1,4 @@ +{ + "feed": "https://github.com/errata-ai/write-good/releases.atom", + "vale_version": ">=1.0.0" +} From dcfe85fe019200857cf329ee7bad10b9221bb880 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:31:59 +0100 Subject: [PATCH 2/9] ci: vale lint only change files --- .github/workflows/tests.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a7bb002005..91956658f5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -14,7 +14,8 @@ jobs: - uses: actions/checkout@v3 - uses: errata-ai/vale-action@reviewdog with: - files: "**/*.md" + files: | + $(git diff --name-only --diff-filter=ACMRB ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(markdoc)$') reporter: github-pr-check build: runs-on: ubuntu-latest From 984b1a3179f963a0cbc406ca00c5aa17a7c6e78d Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Wed, 4 Oct 2023 15:19:34 +0100 Subject: [PATCH 3/9] feat: remove write-good, add sentence case --- .github/workflows/tests.yml | 8 +- .vale.ini | 7 +- .vale/styles/Vocab/{Vocab => Docs}/accept.txt | 1 + .vale/styles/appwrite/SentenceCase.yml | 5 + .vale/styles/write-good/Cliches.yml | 702 ------------------ .vale/styles/write-good/E-Prime.yml | 32 - .vale/styles/write-good/Illusions.yml | 11 - .vale/styles/write-good/Passive.yml | 183 ----- .vale/styles/write-good/README.md | 27 - .vale/styles/write-good/So.yml | 5 - .vale/styles/write-good/ThereIs.yml | 6 - .vale/styles/write-good/TooWordy.yml | 221 ------ .vale/styles/write-good/Weasel.yml | 207 ------ .vale/styles/write-good/meta.json | 4 - .vscode/settings.json | 3 + package.json | 2 + pnpm-lock.yaml | 585 ++++++++++++++- 17 files changed, 604 insertions(+), 1405 deletions(-) rename .vale/styles/Vocab/{Vocab => Docs}/accept.txt (53%) create mode 100644 .vale/styles/appwrite/SentenceCase.yml delete mode 100644 .vale/styles/write-good/Cliches.yml delete mode 100644 .vale/styles/write-good/E-Prime.yml delete mode 100644 .vale/styles/write-good/Illusions.yml delete mode 100644 .vale/styles/write-good/Passive.yml delete mode 100644 .vale/styles/write-good/README.md delete mode 100644 .vale/styles/write-good/So.yml delete mode 100644 .vale/styles/write-good/ThereIs.yml delete mode 100644 .vale/styles/write-good/TooWordy.yml delete mode 100644 .vale/styles/write-good/Weasel.yml delete mode 100644 .vale/styles/write-good/meta.json create mode 100644 .vscode/settings.json diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 91956658f5..880dbfee5c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -12,10 +12,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - name: Get list of changed markdoc files + id: get-changed-files + run: | + files=$(git diff --name-only --diff-filter=ACMRB ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(markdoc)$') + echo "::set-output name=files::$files" - uses: errata-ai/vale-action@reviewdog with: - files: | - $(git diff --name-only --diff-filter=ACMRB ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(markdoc)$') + files: ${{ steps.get-changed-files.outputs.files }} reporter: github-pr-check build: runs-on: ubuntu-latest diff --git a/.vale.ini b/.vale.ini index 9b93f8e08b..2c271c41fc 100644 --- a/.vale.ini +++ b/.vale.ini @@ -1,7 +1,7 @@ StylesPath=".vale/styles" -Vocab = Vocab -Packages = write-good +Vocab = Docs +Packages = appwrite MinAlertLevel = suggestion @@ -12,5 +12,6 @@ SkippedScopes = script, style, pre, figure markdoc = md [*.md] -BasedOnStyles = Vale, write-good +BasedOnStyles = Vale, appwrite + BlockIgnores = {%.*%} \ No newline at end of file diff --git a/.vale/styles/Vocab/Vocab/accept.txt b/.vale/styles/Vocab/Docs/accept.txt similarity index 53% rename from .vale/styles/Vocab/Vocab/accept.txt rename to .vale/styles/Vocab/Docs/accept.txt index 806aca5612..b5d127aa96 100644 --- a/.vale/styles/Vocab/Vocab/accept.txt +++ b/.vale/styles/Vocab/Docs/accept.txt @@ -1,4 +1,5 @@ Appwrite +Appwrite Realtime Vue Vite NPM \ No newline at end of file diff --git a/.vale/styles/appwrite/SentenceCase.yml b/.vale/styles/appwrite/SentenceCase.yml new file mode 100644 index 0000000000..6e3b2bc279 --- /dev/null +++ b/.vale/styles/appwrite/SentenceCase.yml @@ -0,0 +1,5 @@ +extends: capitalization +message: "'%s' should be in sentence case" +level: warning +scope: heading +match: $sentence \ No newline at end of file diff --git a/.vale/styles/write-good/Cliches.yml b/.vale/styles/write-good/Cliches.yml deleted file mode 100644 index c95314387b..0000000000 --- a/.vale/styles/write-good/Cliches.yml +++ /dev/null @@ -1,702 +0,0 @@ -extends: existence -message: "Try to avoid using clichés like '%s'." -ignorecase: true -level: warning -tokens: - - a chip off the old block - - a clean slate - - a dark and stormy night - - a far cry - - a fine kettle of fish - - a loose cannon - - a penny saved is a penny earned - - a tough row to hoe - - a word to the wise - - ace in the hole - - acid test - - add insult to injury - - against all odds - - air your dirty laundry - - all fun and games - - all in a day's work - - all talk, no action - - all thumbs - - all your eggs in one basket - - all's fair in love and war - - all's well that ends well - - almighty dollar - - American as apple pie - - an axe to grind - - another day, another dollar - - armed to the teeth - - as luck would have it - - as old as time - - as the crow flies - - at loose ends - - at my wits end - - avoid like the plague - - babe in the woods - - back against the wall - - back in the saddle - - back to square one - - back to the drawing board - - bad to the bone - - badge of honor - - bald faced liar - - ballpark figure - - banging your head against a brick wall - - baptism by fire - - barking up the wrong tree - - bat out of hell - - be all and end all - - beat a dead horse - - beat around the bush - - been there, done that - - beggars can't be choosers - - behind the eight ball - - bend over backwards - - benefit of the doubt - - bent out of shape - - best thing since sliced bread - - bet your bottom dollar - - better half - - better late than never - - better mousetrap - - better safe than sorry - - between a rock and a hard place - - beyond the pale - - bide your time - - big as life - - big cheese - - big fish in a small pond - - big man on campus - - bigger they are the harder they fall - - bird in the hand - - bird's eye view - - birds and the bees - - birds of a feather flock together - - bit the hand that feeds you - - bite the bullet - - bite the dust - - bitten off more than he can chew - - black as coal - - black as pitch - - black as the ace of spades - - blast from the past - - bleeding heart - - blessing in disguise - - blind ambition - - blind as a bat - - blind leading the blind - - blood is thicker than water - - blood sweat and tears - - blow off steam - - blow your own horn - - blushing bride - - boils down to - - bolt from the blue - - bone to pick - - bored stiff - - bored to tears - - bottomless pit - - boys will be boys - - bright and early - - brings home the bacon - - broad across the beam - - broken record - - brought back to reality - - bull by the horns - - bull in a china shop - - burn the midnight oil - - burning question - - burning the candle at both ends - - burst your bubble - - bury the hatchet - - busy as a bee - - by hook or by crook - - call a spade a spade - - called onto the carpet - - calm before the storm - - can of worms - - can't cut the mustard - - can't hold a candle to - - case of mistaken identity - - cat got your tongue - - cat's meow - - caught in the crossfire - - caught red-handed - - checkered past - - chomping at the bit - - cleanliness is next to godliness - - clear as a bell - - clear as mud - - close to the vest - - cock and bull story - - cold shoulder - - come hell or high water - - cool as a cucumber - - cool, calm, and collected - - cost a king's ransom - - count your blessings - - crack of dawn - - crash course - - creature comforts - - cross that bridge when you come to it - - crushing blow - - cry like a baby - - cry me a river - - cry over spilt milk - - crystal clear - - curiosity killed the cat - - cut and dried - - cut through the red tape - - cut to the chase - - cute as a bugs ear - - cute as a button - - cute as a puppy - - cuts to the quick - - dark before the dawn - - day in, day out - - dead as a doornail - - devil is in the details - - dime a dozen - - divide and conquer - - dog and pony show - - dog days - - dog eat dog - - dog tired - - don't burn your bridges - - don't count your chickens - - don't look a gift horse in the mouth - - don't rock the boat - - don't step on anyone's toes - - don't take any wooden nickels - - down and out - - down at the heels - - down in the dumps - - down the hatch - - down to earth - - draw the line - - dressed to kill - - dressed to the nines - - drives me up the wall - - dull as dishwater - - dyed in the wool - - eagle eye - - ear to the ground - - early bird catches the worm - - easier said than done - - easy as pie - - eat your heart out - - eat your words - - eleventh hour - - even the playing field - - every dog has its day - - every fiber of my being - - everything but the kitchen sink - - eye for an eye - - face the music - - facts of life - - fair weather friend - - fall by the wayside - - fan the flames - - feast or famine - - feather your nest - - feathered friends - - few and far between - - fifteen minutes of fame - - filthy vermin - - fine kettle of fish - - fish out of water - - fishing for a compliment - - fit as a fiddle - - fit the bill - - fit to be tied - - flash in the pan - - flat as a pancake - - flip your lid - - flog a dead horse - - fly by night - - fly the coop - - follow your heart - - for all intents and purposes - - for the birds - - for what it's worth - - force of nature - - force to be reckoned with - - forgive and forget - - fox in the henhouse - - free and easy - - free as a bird - - fresh as a daisy - - full steam ahead - - fun in the sun - - garbage in, garbage out - - gentle as a lamb - - get a kick out of - - get a leg up - - get down and dirty - - get the lead out - - get to the bottom of - - get your feet wet - - gets my goat - - gilding the lily - - give and take - - go against the grain - - go at it tooth and nail - - go for broke - - go him one better - - go the extra mile - - go with the flow - - goes without saying - - good as gold - - good deed for the day - - good things come to those who wait - - good time was had by all - - good times were had by all - - greased lightning - - greek to me - - green thumb - - green-eyed monster - - grist for the mill - - growing like a weed - - hair of the dog - - hand to mouth - - happy as a clam - - happy as a lark - - hasn't a clue - - have a nice day - - have high hopes - - have the last laugh - - haven't got a row to hoe - - head honcho - - head over heels - - hear a pin drop - - heard it through the grapevine - - heart's content - - heavy as lead - - hem and haw - - high and dry - - high and mighty - - high as a kite - - hit paydirt - - hold your head up high - - hold your horses - - hold your own - - hold your tongue - - honest as the day is long - - horns of a dilemma - - horse of a different color - - hot under the collar - - hour of need - - I beg to differ - - icing on the cake - - if the shoe fits - - if the shoe were on the other foot - - in a jam - - in a jiffy - - in a nutshell - - in a pig's eye - - in a pinch - - in a word - - in hot water - - in the gutter - - in the nick of time - - in the thick of it - - in your dreams - - it ain't over till the fat lady sings - - it goes without saying - - it takes all kinds - - it takes one to know one - - it's a small world - - it's only a matter of time - - ivory tower - - Jack of all trades - - jockey for position - - jog your memory - - joined at the hip - - judge a book by its cover - - jump down your throat - - jump in with both feet - - jump on the bandwagon - - jump the gun - - jump to conclusions - - just a hop, skip, and a jump - - just the ticket - - justice is blind - - keep a stiff upper lip - - keep an eye on - - keep it simple, stupid - - keep the home fires burning - - keep up with the Joneses - - keep your chin up - - keep your fingers crossed - - kick the bucket - - kick up your heels - - kick your feet up - - kid in a candy store - - kill two birds with one stone - - kiss of death - - knock it out of the park - - knock on wood - - knock your socks off - - know him from Adam - - know the ropes - - know the score - - knuckle down - - knuckle sandwich - - knuckle under - - labor of love - - ladder of success - - land on your feet - - lap of luxury - - last but not least - - last hurrah - - last-ditch effort - - law of the jungle - - law of the land - - lay down the law - - leaps and bounds - - let sleeping dogs lie - - let the cat out of the bag - - let the good times roll - - let your hair down - - let's talk turkey - - letter perfect - - lick your wounds - - lies like a rug - - life's a bitch - - life's a grind - - light at the end of the tunnel - - lighter than a feather - - lighter than air - - like clockwork - - like father like son - - like taking candy from a baby - - like there's no tomorrow - - lion's share - - live and learn - - live and let live - - long and short of it - - long lost love - - look before you leap - - look down your nose - - look what the cat dragged in - - looking a gift horse in the mouth - - looks like death warmed over - - loose cannon - - lose your head - - lose your temper - - loud as a horn - - lounge lizard - - loved and lost - - low man on the totem pole - - luck of the draw - - luck of the Irish - - make hay while the sun shines - - make money hand over fist - - make my day - - make the best of a bad situation - - make the best of it - - make your blood boil - - man of few words - - man's best friend - - mark my words - - meaningful dialogue - - missed the boat on that one - - moment in the sun - - moment of glory - - moment of truth - - money to burn - - more power to you - - more than one way to skin a cat - - movers and shakers - - moving experience - - naked as a jaybird - - naked truth - - neat as a pin - - needle in a haystack - - needless to say - - neither here nor there - - never look back - - never say never - - nip and tuck - - nip it in the bud - - no guts, no glory - - no love lost - - no pain, no gain - - no skin off my back - - no stone unturned - - no time like the present - - no use crying over spilled milk - - nose to the grindstone - - not a hope in hell - - not a minute's peace - - not in my backyard - - not playing with a full deck - - not the end of the world - - not written in stone - - nothing to sneeze at - - nothing ventured nothing gained - - now we're cooking - - off the top of my head - - off the wagon - - off the wall - - old hat - - older and wiser - - older than dirt - - older than Methuselah - - on a roll - - on cloud nine - - on pins and needles - - on the bandwagon - - on the money - - on the nose - - on the rocks - - on the spot - - on the tip of my tongue - - on the wagon - - on thin ice - - once bitten, twice shy - - one bad apple doesn't spoil the bushel - - one born every minute - - one brick short - - one foot in the grave - - one in a million - - one red cent - - only game in town - - open a can of worms - - open and shut case - - open the flood gates - - opportunity doesn't knock twice - - out of pocket - - out of sight, out of mind - - out of the frying pan into the fire - - out of the woods - - out on a limb - - over a barrel - - over the hump - - pain and suffering - - pain in the - - panic button - - par for the course - - part and parcel - - party pooper - - pass the buck - - patience is a virtue - - pay through the nose - - penny pincher - - perfect storm - - pig in a poke - - pile it on - - pillar of the community - - pin your hopes on - - pitter patter of little feet - - plain as day - - plain as the nose on your face - - play by the rules - - play your cards right - - playing the field - - playing with fire - - pleased as punch - - plenty of fish in the sea - - point with pride - - poor as a church mouse - - pot calling the kettle black - - pretty as a picture - - pull a fast one - - pull your punches - - pulling your leg - - pure as the driven snow - - put it in a nutshell - - put one over on you - - put the cart before the horse - - put the pedal to the metal - - put your best foot forward - - put your foot down - - quick as a bunny - - quick as a lick - - quick as a wink - - quick as lightning - - quiet as a dormouse - - rags to riches - - raining buckets - - raining cats and dogs - - rank and file - - rat race - - reap what you sow - - red as a beet - - red herring - - reinvent the wheel - - rich and famous - - rings a bell - - ripe old age - - ripped me off - - rise and shine - - road to hell is paved with good intentions - - rob Peter to pay Paul - - roll over in the grave - - rub the wrong way - - ruled the roost - - running in circles - - sad but true - - sadder but wiser - - salt of the earth - - scared stiff - - scared to death - - sealed with a kiss - - second to none - - see eye to eye - - seen the light - - seize the day - - set the record straight - - set the world on fire - - set your teeth on edge - - sharp as a tack - - shoot for the moon - - shoot the breeze - - shot in the dark - - shoulder to the wheel - - sick as a dog - - sigh of relief - - signed, sealed, and delivered - - sink or swim - - six of one, half a dozen of another - - skating on thin ice - - slept like a log - - slinging mud - - slippery as an eel - - slow as molasses - - smart as a whip - - smooth as a baby's bottom - - sneaking suspicion - - snug as a bug in a rug - - sow wild oats - - spare the rod, spoil the child - - speak of the devil - - spilled the beans - - spinning your wheels - - spitting image of - - spoke with relish - - spread like wildfire - - spring to life - - squeaky wheel gets the grease - - stands out like a sore thumb - - start from scratch - - stick in the mud - - still waters run deep - - stitch in time - - stop and smell the roses - - straight as an arrow - - straw that broke the camel's back - - strong as an ox - - stubborn as a mule - - stuff that dreams are made of - - stuffed shirt - - sweating blood - - sweating bullets - - take a load off - - take one for the team - - take the bait - - take the bull by the horns - - take the plunge - - takes one to know one - - takes two to tango - - the more the merrier - - the real deal - - the real McCoy - - the red carpet treatment - - the same old story - - there is no accounting for taste - - thick as a brick - - thick as thieves - - thin as a rail - - think outside of the box - - third time's the charm - - this day and age - - this hurts me worse than it hurts you - - this point in time - - three sheets to the wind - - through thick and thin - - throw in the towel - - tie one on - - tighter than a drum - - time and time again - - time is of the essence - - tip of the iceberg - - tired but happy - - to coin a phrase - - to each his own - - to make a long story short - - to the best of my knowledge - - toe the line - - tongue in cheek - - too good to be true - - too hot to handle - - too numerous to mention - - touch with a ten foot pole - - tough as nails - - trial and error - - trials and tribulations - - tried and true - - trip down memory lane - - twist of fate - - two cents worth - - two peas in a pod - - ugly as sin - - under the counter - - under the gun - - under the same roof - - under the weather - - until the cows come home - - unvarnished truth - - up the creek - - uphill battle - - upper crust - - upset the applecart - - vain attempt - - vain effort - - vanquish the enemy - - vested interest - - waiting for the other shoe to drop - - wakeup call - - warm welcome - - watch your p's and q's - - watch your tongue - - watching the clock - - water under the bridge - - weather the storm - - weed them out - - week of Sundays - - went belly up - - wet behind the ears - - what goes around comes around - - what you see is what you get - - when it rains, it pours - - when push comes to shove - - when the cat's away - - when the going gets tough, the tough get going - - white as a sheet - - whole ball of wax - - whole hog - - whole nine yards - - wild goose chase - - will wonders never cease? - - wisdom of the ages - - wise as an owl - - wolf at the door - - words fail me - - work like a dog - - world weary - - worst nightmare - - worth its weight in gold - - wrong side of the bed - - yanking your chain - - yappy as a dog - - years young - - you are what you eat - - you can run but you can't hide - - you only live once - - you're the boss - - young and foolish - - young and vibrant diff --git a/.vale/styles/write-good/E-Prime.yml b/.vale/styles/write-good/E-Prime.yml deleted file mode 100644 index 074a102b25..0000000000 --- a/.vale/styles/write-good/E-Prime.yml +++ /dev/null @@ -1,32 +0,0 @@ -extends: existence -message: "Try to avoid using '%s'." -ignorecase: true -level: suggestion -tokens: - - am - - are - - aren't - - be - - been - - being - - he's - - here's - - here's - - how's - - i'm - - is - - isn't - - it's - - she's - - that's - - there's - - they're - - was - - wasn't - - we're - - were - - weren't - - what's - - where's - - who's - - you're diff --git a/.vale/styles/write-good/Illusions.yml b/.vale/styles/write-good/Illusions.yml deleted file mode 100644 index b4f1321859..0000000000 --- a/.vale/styles/write-good/Illusions.yml +++ /dev/null @@ -1,11 +0,0 @@ -extends: repetition -message: "'%s' is repeated!" -level: warning -alpha: true -action: - name: edit - params: - - truncate - - " " -tokens: - - '[^\s]+' diff --git a/.vale/styles/write-good/Passive.yml b/.vale/styles/write-good/Passive.yml deleted file mode 100644 index f472cb9049..0000000000 --- a/.vale/styles/write-good/Passive.yml +++ /dev/null @@ -1,183 +0,0 @@ -extends: existence -message: "'%s' may be passive voice. Use active voice if you can." -ignorecase: true -level: warning -raw: - - \b(am|are|were|being|is|been|was|be)\b\s* -tokens: - - '[\w]+ed' - - awoken - - beat - - become - - been - - begun - - bent - - beset - - bet - - bid - - bidden - - bitten - - bled - - blown - - born - - bought - - bound - - bred - - broadcast - - broken - - brought - - built - - burnt - - burst - - cast - - caught - - chosen - - clung - - come - - cost - - crept - - cut - - dealt - - dived - - done - - drawn - - dreamt - - driven - - drunk - - dug - - eaten - - fallen - - fed - - felt - - fit - - fled - - flown - - flung - - forbidden - - foregone - - forgiven - - forgotten - - forsaken - - fought - - found - - frozen - - given - - gone - - gotten - - ground - - grown - - heard - - held - - hidden - - hit - - hung - - hurt - - kept - - knelt - - knit - - known - - laid - - lain - - leapt - - learnt - - led - - left - - lent - - let - - lighted - - lost - - made - - meant - - met - - misspelt - - mistaken - - mown - - overcome - - overdone - - overtaken - - overthrown - - paid - - pled - - proven - - put - - quit - - read - - rid - - ridden - - risen - - run - - rung - - said - - sat - - sawn - - seen - - sent - - set - - sewn - - shaken - - shaven - - shed - - shod - - shone - - shorn - - shot - - shown - - shrunk - - shut - - slain - - slept - - slid - - slit - - slung - - smitten - - sold - - sought - - sown - - sped - - spent - - spilt - - spit - - split - - spoken - - spread - - sprung - - spun - - stolen - - stood - - stridden - - striven - - struck - - strung - - stuck - - stung - - stunk - - sung - - sunk - - swept - - swollen - - sworn - - swum - - swung - - taken - - taught - - thought - - thrived - - thrown - - thrust - - told - - torn - - trodden - - understood - - upheld - - upset - - wed - - wept - - withheld - - withstood - - woken - - won - - worn - - wound - - woven - - written - - wrung diff --git a/.vale/styles/write-good/README.md b/.vale/styles/write-good/README.md deleted file mode 100644 index 3edcc9b376..0000000000 --- a/.vale/styles/write-good/README.md +++ /dev/null @@ -1,27 +0,0 @@ -Based on [write-good](https://github.com/btford/write-good). - -> Naive linter for English prose for developers who can't write good and wanna learn to do other stuff good too. - -``` -The MIT License (MIT) - -Copyright (c) 2014 Brian Ford - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/.vale/styles/write-good/So.yml b/.vale/styles/write-good/So.yml deleted file mode 100644 index e57f099dc0..0000000000 --- a/.vale/styles/write-good/So.yml +++ /dev/null @@ -1,5 +0,0 @@ -extends: existence -message: "Don't start a sentence with '%s'." -level: error -raw: - - '(?:[;-]\s)so[\s,]|\bSo[\s,]' diff --git a/.vale/styles/write-good/ThereIs.yml b/.vale/styles/write-good/ThereIs.yml deleted file mode 100644 index 8b82e8f6cc..0000000000 --- a/.vale/styles/write-good/ThereIs.yml +++ /dev/null @@ -1,6 +0,0 @@ -extends: existence -message: "Don't start a sentence with '%s'." -ignorecase: false -level: error -raw: - - '(?:[;-]\s)There\s(is|are)|\bThere\s(is|are)\b' diff --git a/.vale/styles/write-good/TooWordy.yml b/.vale/styles/write-good/TooWordy.yml deleted file mode 100644 index 275701b196..0000000000 --- a/.vale/styles/write-good/TooWordy.yml +++ /dev/null @@ -1,221 +0,0 @@ -extends: existence -message: "'%s' is too wordy." -ignorecase: true -level: warning -tokens: - - a number of - - abundance - - accede to - - accelerate - - accentuate - - accompany - - accomplish - - accorded - - accrue - - acquiesce - - acquire - - additional - - adjacent to - - adjustment - - admissible - - advantageous - - adversely impact - - advise - - aforementioned - - aggregate - - aircraft - - all of - - all things considered - - alleviate - - allocate - - along the lines of - - already existing - - alternatively - - amazing - - ameliorate - - anticipate - - apparent - - appreciable - - as a matter of fact - - as a means of - - as far as I'm concerned - - as of yet - - as to - - as yet - - ascertain - - assistance - - at the present time - - at this time - - attain - - attributable to - - authorize - - because of the fact that - - belated - - benefit from - - bestow - - by means of - - by virtue of - - by virtue of the fact that - - cease - - close proximity - - commence - - comply with - - concerning - - consequently - - consolidate - - constitutes - - demonstrate - - depart - - designate - - discontinue - - due to the fact that - - each and every - - economical - - eliminate - - elucidate - - employ - - endeavor - - enumerate - - equitable - - equivalent - - evaluate - - evidenced - - exclusively - - expedite - - expend - - expiration - - facilitate - - factual evidence - - feasible - - finalize - - first and foremost - - for all intents and purposes - - for the most part - - for the purpose of - - forfeit - - formulate - - have a tendency to - - honest truth - - however - - if and when - - impacted - - implement - - in a manner of speaking - - in a timely manner - - in a very real sense - - in accordance with - - in addition - - in all likelihood - - in an effort to - - in between - - in excess of - - in lieu of - - in light of the fact that - - in many cases - - in my opinion - - in order to - - in regard to - - in some instances - - in terms of - - in the case of - - in the event that - - in the final analysis - - in the nature of - - in the near future - - in the process of - - inception - - incumbent upon - - indicate - - indication - - initiate - - irregardless - - is applicable to - - is authorized to - - is responsible for - - it is - - it is essential - - it seems that - - it was - - magnitude - - maximum - - methodology - - minimize - - minimum - - modify - - monitor - - multiple - - necessitate - - nevertheless - - not certain - - not many - - not often - - not unless - - not unlike - - notwithstanding - - null and void - - numerous - - objective - - obligate - - obtain - - on the contrary - - on the other hand - - one particular - - optimum - - overall - - owing to the fact that - - participate - - particulars - - pass away - - pertaining to - - point in time - - portion - - possess - - preclude - - previously - - prior to - - prioritize - - procure - - proficiency - - provided that - - purchase - - put simply - - readily apparent - - refer back - - regarding - - relocate - - remainder - - remuneration - - requirement - - reside - - residence - - retain - - satisfy - - shall - - should you wish - - similar to - - solicit - - span across - - strategize - - subsequent - - substantial - - successfully complete - - sufficient - - terminate - - the month of - - the point I am trying to make - - therefore - - time period - - took advantage of - - transmit - - transpire - - type of - - until such time as - - utilization - - utilize - - validate - - various different - - what I mean to say is - - whether or not - - with respect to - - with the exception of - - witnessed diff --git a/.vale/styles/write-good/Weasel.yml b/.vale/styles/write-good/Weasel.yml deleted file mode 100644 index e29391444b..0000000000 --- a/.vale/styles/write-good/Weasel.yml +++ /dev/null @@ -1,207 +0,0 @@ -extends: existence -message: "'%s' is a weasel word!" -ignorecase: true -level: warning -tokens: - - absolutely - - accidentally - - additionally - - allegedly - - alternatively - - angrily - - anxiously - - approximately - - awkwardly - - badly - - barely - - beautifully - - blindly - - boldly - - bravely - - brightly - - briskly - - bristly - - bubbly - - busily - - calmly - - carefully - - carelessly - - cautiously - - cheerfully - - clearly - - closely - - coldly - - completely - - consequently - - correctly - - courageously - - crinkly - - cruelly - - crumbly - - cuddly - - currently - - daily - - daringly - - deadly - - definitely - - deliberately - - doubtfully - - dumbly - - eagerly - - early - - easily - - elegantly - - enormously - - enthusiastically - - equally - - especially - - eventually - - exactly - - exceedingly - - exclusively - - extremely - - fairly - - faithfully - - fatally - - fiercely - - finally - - fondly - - few - - foolishly - - fortunately - - frankly - - frantically - - generously - - gently - - giggly - - gladly - - gracefully - - greedily - - happily - - hardly - - hastily - - healthily - - heartily - - helpfully - - honestly - - hourly - - hungrily - - hurriedly - - immediately - - impatiently - - inadequately - - ingeniously - - innocently - - inquisitively - - interestingly - - irritably - - jiggly - - joyously - - justly - - kindly - - largely - - lately - - lazily - - likely - - literally - - lonely - - loosely - - loudly - - loudly - - luckily - - madly - - many - - mentally - - mildly - - monthly - - mortally - - mostly - - mysteriously - - neatly - - nervously - - nightly - - noisily - - normally - - obediently - - occasionally - - only - - openly - - painfully - - particularly - - patiently - - perfectly - - politely - - poorly - - powerfully - - presumably - - previously - - promptly - - punctually - - quarterly - - quickly - - quietly - - rapidly - - rarely - - really - - recently - - recklessly - - regularly - - remarkably - - relatively - - reluctantly - - repeatedly - - rightfully - - roughly - - rudely - - sadly - - safely - - selfishly - - sensibly - - seriously - - sharply - - shortly - - shyly - - significantly - - silently - - simply - - sleepily - - slowly - - smartly - - smelly - - smoothly - - softly - - solemnly - - sparkly - - speedily - - stealthily - - sternly - - stupidly - - substantially - - successfully - - suddenly - - surprisingly - - suspiciously - - swiftly - - tenderly - - tensely - - thoughtfully - - tightly - - timely - - truthfully - - unexpectedly - - unfortunately - - usually - - very - - victoriously - - violently - - vivaciously - - warmly - - waverly - - weakly - - wearily - - weekly - - wildly - - wisely - - worldly - - wrinkly - - yearly diff --git a/.vale/styles/write-good/meta.json b/.vale/styles/write-good/meta.json deleted file mode 100644 index a115d2886a..0000000000 --- a/.vale/styles/write-good/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "feed": "https://github.com/errata-ai/write-good/releases.atom", - "vale_version": ">=1.0.0" -} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..6ea857582f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "vale.valeCLI.path": "${workspaceFolder}/node_modules/.bin/vale" +} diff --git a/package.json b/package.json index 355580f18e..d699672e8e 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "lint": "prettier --plugin-search-dir . --check . && eslint .", + "lint:docs": "vale --config=.vale.ini --glob='**/*.md' .", "format": "prettier --plugin-search-dir . --write .", "test:integration": "playwright test", "test:unit": "vitest", @@ -18,6 +19,7 @@ "devDependencies": { "@melt-ui/pp": "^0.1.2", "@melt-ui/svelte": "^0.51.0", + "@ocular-d/vale-bin": "^2.29.1", "@playwright/test": "^1.37.1", "@sveltejs/adapter-node": "^1.3.1", "@sveltejs/adapter-static": "^2.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eeb62719d3..47715950b2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,6 +43,9 @@ devDependencies: '@melt-ui/svelte': specifier: ^0.51.0 version: 0.51.0(svelte@4.2.0) + '@ocular-d/vale-bin': + specifier: ^2.29.1 + version: 2.29.1 '@playwright/test': specifier: ^1.37.1 version: 1.38.0 @@ -617,6 +620,16 @@ packages: semver: 7.5.4 dev: true + /@ocular-d/vale-bin@2.29.1: + resolution: {integrity: sha512-2miaoFdslddXMlcuiUCRWyH7iCw/i52l9un2QySw8vx23DEBY0Wlnuv5aiZG22FTU/rPk9YIShe8XDdfyKEdhQ==} + engines: {node: '>=8'} + hasBin: true + requiresBuild: true + dependencies: + chalk: 4.1.2 + download: 7.1.0 + dev: true + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -704,6 +717,11 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true + /@sindresorhus/is@0.7.0: + resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==} + engines: {node: '>=4'} + dev: true + /@splinetool/viewer@0.9.455: resolution: {integrity: sha512-SqgjM5RJn/hq8mbqteTOS+uFPZrtJDScMzjIr3mXRIV6nL55AMH52fQ5xgETy7IAjZPgKajL0sHyavGIHHZkPA==} dependencies: @@ -890,6 +908,12 @@ packages: '@types/node': 20.5.0 dev: true + /@types/keyv@3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + dependencies: + '@types/node': 20.5.0 + dev: true + /@types/linkify-it@3.0.3: resolution: {integrity: sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==} dev: true @@ -948,6 +972,12 @@ packages: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: true + /@types/responselike@1.0.1: + resolution: {integrity: sha512-TiGnitEDxj2X0j+98Eqk5lv/Cij8oHd32bU4D/Yw6AOq7vvTk0gSD2GPj0G/HkvhMoVsdlhYF4yqqlyPBTM6Sg==} + dependencies: + '@types/node': 20.5.0 + dev: true + /@types/semver@7.5.0: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true @@ -1284,6 +1314,13 @@ packages: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} dev: true + /archive-type@4.0.0: + resolution: {integrity: sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==} + engines: {node: '>=4'} + dependencies: + file-type: 4.4.0 + dev: true + /are-we-there-yet@3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -1404,6 +1441,13 @@ packages: file-uri-to-path: 1.0.0 dev: true + /bl@1.2.3: + resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} + dependencies: + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + dev: true + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: @@ -1474,10 +1518,25 @@ packages: fill-range: 7.0.1 dev: true + /buffer-alloc-unsafe@1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + dev: true + + /buffer-alloc@1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} + dependencies: + buffer-alloc-unsafe: 1.1.0 + buffer-fill: 1.0.0 + dev: true + /buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: true + /buffer-fill@1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + dev: true + /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: @@ -1552,6 +1611,18 @@ packages: unset-value: 1.0.0 dev: true + /cacheable-request@2.1.4: + resolution: {integrity: sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==} + dependencies: + clone-response: 1.0.2 + get-stream: 3.0.0 + http-cache-semantics: 3.8.1 + keyv: 3.0.0 + lowercase-keys: 1.0.0 + normalize-url: 2.0.1 + responselike: 1.0.2 + dev: true + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: @@ -1564,6 +1635,16 @@ packages: engines: {node: '>=6'} dev: true + /caw@2.0.1: + resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} + engines: {node: '>=4'} + dependencies: + get-proxy: 2.1.0 + isurl: 1.0.0 + tunnel-agent: 0.6.0 + url-to-options: 1.0.1 + dev: true + /chai@4.3.7: resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} engines: {node: '>=4'} @@ -1661,6 +1742,12 @@ packages: wrap-ansi: 7.0.0 dev: true + /clone-response@1.0.2: + resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==} + dependencies: + mimic-response: 1.0.1 + dev: true + /code-red@1.0.4: resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} dependencies: @@ -1715,6 +1802,10 @@ packages: hasBin: true dev: true + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -1764,6 +1855,13 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + dev: true + /console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} dev: true @@ -1773,7 +1871,6 @@ packages: engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 - dev: false /content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} @@ -1905,6 +2002,13 @@ packages: engines: {node: '>=0.10'} dev: true + /decompress-response@3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} + dependencies: + mimic-response: 1.0.1 + dev: true + /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -1912,6 +2016,59 @@ packages: mimic-response: 3.1.0 dev: true + /decompress-tar@4.1.1: + resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==} + engines: {node: '>=4'} + dependencies: + file-type: 5.2.0 + is-stream: 1.1.0 + tar-stream: 1.6.2 + dev: true + + /decompress-tarbz2@4.1.1: + resolution: {integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==} + engines: {node: '>=4'} + dependencies: + decompress-tar: 4.1.1 + file-type: 6.2.0 + is-stream: 1.1.0 + seek-bzip: 1.0.6 + unbzip2-stream: 1.4.3 + dev: true + + /decompress-targz@4.1.1: + resolution: {integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==} + engines: {node: '>=4'} + dependencies: + decompress-tar: 4.1.1 + file-type: 5.2.0 + is-stream: 1.1.0 + dev: true + + /decompress-unzip@4.0.1: + resolution: {integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==} + engines: {node: '>=4'} + dependencies: + file-type: 3.9.0 + get-stream: 2.3.1 + pify: 2.3.0 + yauzl: 2.10.0 + dev: true + + /decompress@4.2.1: + resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} + engines: {node: '>=4'} + dependencies: + decompress-tar: 4.1.1 + decompress-tarbz2: 4.1.1 + decompress-targz: 4.1.1 + decompress-unzip: 4.0.1 + graceful-fs: 4.2.11 + make-dir: 1.3.0 + pify: 2.3.0 + strip-dirs: 2.1.0 + dev: true + /deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} @@ -2048,6 +2205,28 @@ packages: domhandler: 5.0.3 dev: true + /download@7.1.0: + resolution: {integrity: sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==} + engines: {node: '>=6'} + dependencies: + archive-type: 4.0.0 + caw: 2.0.1 + content-disposition: 0.5.4 + decompress: 4.2.1 + ext-name: 5.0.0 + file-type: 8.1.0 + filenamify: 2.1.0 + get-stream: 3.0.0 + got: 8.3.2 + make-dir: 1.3.0 + p-event: 2.3.1 + pify: 3.0.0 + dev: true + + /duplexer3@0.1.5: + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} + dev: true + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true @@ -2157,6 +2336,11 @@ packages: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: false + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -2386,6 +2570,21 @@ packages: - supports-color dev: false + /ext-list@2.2.2: + resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} + engines: {node: '>=0.10.0'} + dependencies: + mime-db: 1.52.0 + dev: true + + /ext-name@5.0.0: + resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} + engines: {node: '>=4'} + dependencies: + ext-list: 2.2.2 + sort-keys-length: 1.0.1 + dev: true + /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -2450,6 +2649,12 @@ packages: reusify: 1.0.4 dev: true + /fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + dev: true + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -2457,6 +2662,31 @@ packages: flat-cache: 3.0.4 dev: true + /file-type@3.9.0: + resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==} + engines: {node: '>=0.10.0'} + dev: true + + /file-type@4.4.0: + resolution: {integrity: sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==} + engines: {node: '>=4'} + dev: true + + /file-type@5.2.0: + resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==} + engines: {node: '>=4'} + dev: true + + /file-type@6.2.0: + resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==} + engines: {node: '>=4'} + dev: true + + /file-type@8.1.0: + resolution: {integrity: sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==} + engines: {node: '>=6'} + dev: true + /file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} dev: true @@ -2467,6 +2697,20 @@ packages: minimatch: 5.1.6 dev: true + /filename-reserved-regex@2.0.0: + resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} + engines: {node: '>=4'} + dev: true + + /filenamify@2.1.0: + resolution: {integrity: sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==} + engines: {node: '>=4'} + dependencies: + filename-reserved-regex: 2.0.0 + strip-outer: 1.0.1 + trim-repeated: 1.0.0 + dev: true + /fill-range@4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} @@ -2555,6 +2799,13 @@ packages: engines: {node: '>= 0.6'} dev: false + /from2@2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + dev: true + /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true @@ -2629,6 +2880,26 @@ packages: has-symbols: 1.0.3 dev: false + /get-proxy@2.1.0: + resolution: {integrity: sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==} + engines: {node: '>=4'} + dependencies: + npm-conf: 1.1.3 + dev: true + + /get-stream@2.3.1: + resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==} + engines: {node: '>=0.10.0'} + dependencies: + object-assign: 4.1.1 + pinkie-promise: 2.0.1 + dev: true + + /get-stream@3.0.0: + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} + engines: {node: '>=4'} + dev: true + /get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} @@ -2724,6 +2995,31 @@ packages: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} dev: true + /got@8.3.2: + resolution: {integrity: sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==} + engines: {node: '>=4'} + dependencies: + '@sindresorhus/is': 0.7.0 + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.1 + cacheable-request: 2.1.4 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 3.0.0 + into-stream: 3.1.0 + is-retry-allowed: 1.2.0 + isurl: 1.0.0 + lowercase-keys: 1.0.1 + mimic-response: 1.0.1 + p-cancelable: 0.4.1 + p-timeout: 2.0.1 + pify: 3.0.0 + safe-buffer: 5.2.1 + timed-out: 4.0.1 + url-parse-lax: 3.0.0 + url-to-options: 1.0.1 + dev: true + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true @@ -2742,11 +3038,21 @@ packages: engines: {node: '>= 0.4'} dev: false + /has-symbol-support-x@1.4.2: + resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==} + dev: true + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: false + /has-to-string-tag-x@1.4.1: + resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==} + dependencies: + has-symbol-support-x: 1.4.2 + dev: true + /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} dev: true @@ -2810,6 +3116,10 @@ packages: entities: 4.5.0 dev: true + /http-cache-semantics@3.8.1: + resolution: {integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==} + dev: true + /http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: true @@ -2922,6 +3232,14 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true + /into-stream@3.1.0: + resolution: {integrity: sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==} + engines: {node: '>=4'} + dependencies: + from2: 2.3.0 + p-is-promise: 1.1.0 + dev: true + /ip@2.0.0: resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} dev: true @@ -3042,6 +3360,10 @@ packages: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: true + /is-natural-number@4.0.1: + resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} + dev: true + /is-number@3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} engines: {node: '>=0.10.0'} @@ -3054,6 +3376,10 @@ packages: engines: {node: '>=0.12.0'} dev: true + /is-object@1.0.2: + resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} + dev: true + /is-path-cwd@2.2.0: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} @@ -3064,6 +3390,11 @@ packages: engines: {node: '>=8'} dev: true + /is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: true + /is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} @@ -3083,6 +3414,16 @@ packages: '@types/estree': 1.0.1 dev: true + /is-retry-allowed@1.2.0: + resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + dev: true + /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -3108,6 +3449,14 @@ packages: engines: {node: '>=0.10.0'} dev: true + /isurl@1.0.0: + resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==} + engines: {node: '>= 4'} + dependencies: + has-to-string-tag-x: 1.4.1 + is-object: 1.0.2 + dev: true + /jackspeak@2.3.1: resolution: {integrity: sha512-4iSY3Bh1Htv+kLhiiZunUhQ+OYXIn0ze3ulq8JeWrFKmhPAJSySV2+kdtRh2pGcCeF0s6oR8Oc+pYZynJj4t8A==} engines: {node: '>=14'} @@ -3140,6 +3489,10 @@ packages: argparse: 2.0.1 dev: true + /json-buffer@3.0.0: + resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} + dev: true + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true @@ -3170,6 +3523,12 @@ packages: graceful-fs: 4.2.11 dev: true + /keyv@3.0.0: + resolution: {integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==} + dependencies: + json-buffer: 3.0.0 + dev: true + /kind-of@3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} @@ -3282,6 +3641,16 @@ packages: resolution: {integrity: sha512-dPvYcBok38QvXC+X8/v2BZJDA/iZfCfkRXAwp+s9rvBxY+ZWkMuhNNxukQVIUVMNutIonKpN140Vfv6LCli/wQ==} dev: true + /lowercase-keys@1.0.0: + resolution: {integrity: sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==} + engines: {node: '>=0.10.0'} + dev: true + + /lowercase-keys@1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + dev: true + /lru-cache@10.0.1: resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} engines: {node: 14 || >=16.14} @@ -3313,6 +3682,13 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /make-dir@1.3.0: + resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} + engines: {node: '>=4'} + dependencies: + pify: 3.0.0 + dev: true + /make-fetch-happen@11.1.1: resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -3447,7 +3823,6 @@ packages: /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - dev: false /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} @@ -3468,6 +3843,11 @@ packages: hasBin: true dev: true + /mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + dev: true + /mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -3757,10 +4137,27 @@ packages: engines: {node: '>=0.10.0'} dev: true + /normalize-url@2.0.1: + resolution: {integrity: sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==} + engines: {node: '>=4'} + dependencies: + prepend-http: 2.0.0 + query-string: 5.1.1 + sort-keys: 2.0.0 + dev: true + /normalize.css@8.0.1: resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} dev: false + /npm-conf@1.1.3: + resolution: {integrity: sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==} + engines: {node: '>=4'} + dependencies: + config-chain: 1.1.13 + pify: 3.0.0 + dev: true + /npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -3843,6 +4240,28 @@ packages: type-check: 0.4.0 dev: true + /p-cancelable@0.4.1: + resolution: {integrity: sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==} + engines: {node: '>=4'} + dev: true + + /p-event@2.3.1: + resolution: {integrity: sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==} + engines: {node: '>=6'} + dependencies: + p-timeout: 2.0.1 + dev: true + + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: true + + /p-is-promise@1.1.0: + resolution: {integrity: sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==} + engines: {node: '>=4'} + dev: true + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -3871,6 +4290,13 @@ packages: aggregate-error: 3.1.0 dev: true + /p-timeout@2.0.1: + resolution: {integrity: sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==} + engines: {node: '>=4'} + dependencies: + p-finally: 1.0.0 + dev: true + /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} dev: true @@ -3949,6 +4375,10 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true + /pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: true + /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: @@ -3966,6 +4396,28 @@ packages: engines: {node: '>=8.6'} dev: true + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: true + + /pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + dependencies: + pinkie: 2.0.4 + dev: true + + /pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + dev: true + /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -4085,6 +4537,11 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /prepend-http@2.0.0: + resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} + engines: {node: '>=4'} + dev: true + /prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@4.2.0): resolution: {integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==} peerDependencies: @@ -4122,6 +4579,10 @@ packages: retry: 0.12.0 dev: true + /proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + dev: true + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -4156,6 +4617,15 @@ packages: side-channel: 1.0.4 dev: false + /query-string@5.1.1: + resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} + engines: {node: '>=0.10.0'} + dependencies: + decode-uri-component: 0.2.2 + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + dev: true + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -4274,6 +4744,12 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /responselike@1.0.2: + resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} + dependencies: + lowercase-keys: 1.0.1 + dev: true + /ret@0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} @@ -4363,6 +4839,13 @@ packages: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} dev: true + /seek-bzip@1.0.6: + resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} + hasBin: true + dependencies: + commander: 2.20.3 + dev: true + /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -4572,6 +5055,27 @@ packages: sander: 0.5.1 dev: true + /sort-keys-length@1.0.1: + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} + engines: {node: '>=0.10.0'} + dependencies: + sort-keys: 1.1.2 + dev: true + + /sort-keys@1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-obj: 1.1.0 + dev: true + + /sort-keys@2.0.0: + resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==} + engines: {node: '>=4'} + dependencies: + is-plain-obj: 1.1.0 + dev: true + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -4651,6 +5155,11 @@ packages: queue-tick: 1.0.1 dev: true + /strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + dev: true + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -4695,6 +5204,12 @@ packages: ansi-regex: 6.0.1 dev: true + /strip-dirs@2.1.0: + resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} + dependencies: + is-natural-number: 4.0.1 + dev: true + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -4718,6 +5233,13 @@ packages: acorn: 8.10.0 dev: true + /strip-outer@1.0.1: + resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /sucrase@3.34.0: resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} engines: {node: '>=8'} @@ -4986,6 +5508,19 @@ packages: tar-stream: 3.1.6 dev: true + /tar-stream@1.6.2: + resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} + engines: {node: '>= 0.8.0'} + dependencies: + bl: 1.2.3 + buffer-alloc: 1.2.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + readable-stream: 2.3.8 + to-buffer: 1.1.1 + xtend: 4.0.2 + dev: true + /tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -5045,6 +5580,15 @@ packages: xtend: 4.0.2 dev: true + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /timed-out@4.0.1: + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} + engines: {node: '>=0.10.0'} + dev: true + /tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} dependencies: @@ -5066,6 +5610,10 @@ packages: engines: {node: '>=14.0.0'} dev: true + /to-buffer@1.1.1: + resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} + dev: true + /to-object-path@0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} engines: {node: '>=0.10.0'} @@ -5119,6 +5667,13 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: false + /trim-repeated@1.0.0: + resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true @@ -5214,6 +5769,13 @@ packages: resolution: {integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==} dev: true + /unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + dependencies: + buffer: 5.7.1 + through: 2.3.8 + dev: true + /undici@5.23.0: resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} engines: {node: '>=14.0'} @@ -5274,6 +5836,18 @@ packages: deprecated: Please see https://github.com/lydell/urix#deprecated dev: true + /url-parse-lax@3.0.0: + resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} + engines: {node: '>=4'} + dependencies: + prepend-http: 2.0.0 + dev: true + + /url-to-options@1.0.1: + resolution: {integrity: sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==} + engines: {node: '>= 4'} + dev: true + /use@3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} @@ -5555,6 +6129,13 @@ packages: yargs-parser: 21.1.1 dev: true + /yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} From 808ed8a54fdc3f7211dbcda06f40e8dbd68b1ccd Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Wed, 4 Oct 2023 15:34:26 +0100 Subject: [PATCH 4/9] fix: more vocab --- .vale.ini | 3 ++- .vale/styles/Vocab/{Docs => Base}/accept.txt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) rename .vale/styles/Vocab/{Docs => Base}/accept.txt (73%) diff --git a/.vale.ini b/.vale.ini index 2c271c41fc..37fcfa8841 100644 --- a/.vale.ini +++ b/.vale.ini @@ -1,6 +1,6 @@ StylesPath=".vale/styles" -Vocab = Docs +Vocab = Base Packages = appwrite MinAlertLevel = suggestion @@ -14,4 +14,5 @@ markdoc = md [*.md] BasedOnStyles = Vale, appwrite +# Ignore text inside markdoc components BlockIgnores = {%.*%} \ No newline at end of file diff --git a/.vale/styles/Vocab/Docs/accept.txt b/.vale/styles/Vocab/Base/accept.txt similarity index 73% rename from .vale/styles/Vocab/Docs/accept.txt rename to .vale/styles/Vocab/Base/accept.txt index b5d127aa96..c91a406e36 100644 --- a/.vale/styles/Vocab/Docs/accept.txt +++ b/.vale/styles/Vocab/Base/accept.txt @@ -1,5 +1,6 @@ Appwrite Appwrite Realtime +Hacktoberfest Vue Vite NPM \ No newline at end of file From 8d3ee3dfd78fab8e3249068c45d810f491787800 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Wed, 4 Oct 2023 15:54:26 +0100 Subject: [PATCH 5/9] ci: vale lint everything --- .github/workflows/tests.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 880dbfee5c..a7bb002005 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -12,14 +12,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Get list of changed markdoc files - id: get-changed-files - run: | - files=$(git diff --name-only --diff-filter=ACMRB ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(markdoc)$') - echo "::set-output name=files::$files" - uses: errata-ai/vale-action@reviewdog with: - files: ${{ steps.get-changed-files.outputs.files }} + files: "**/*.md" reporter: github-pr-check build: runs-on: ubuntu-latest From d50bee5ad7bbb3d534aec9a89b929bd51630e24c Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Wed, 4 Oct 2023 16:05:58 +0100 Subject: [PATCH 6/9] fix: remove appwrite vale package --- .vale.ini | 1 - 1 file changed, 1 deletion(-) diff --git a/.vale.ini b/.vale.ini index 37fcfa8841..55539e801b 100644 --- a/.vale.ini +++ b/.vale.ini @@ -1,7 +1,6 @@ StylesPath=".vale/styles" Vocab = Base -Packages = appwrite MinAlertLevel = suggestion From 6d5d7a0060cc03ab81fc2f01047355077d1ea052 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Tue, 24 Oct 2023 11:09:47 +0100 Subject: [PATCH 7/9] fix: add vocab, fix typos --- .vale.ini | 5 +- .vale/styles/Vocab/Appwrite/accept.txt | 10 + .vale/styles/Vocab/Base/accept.txt | 80 ++++- package.json | 2 +- pnpm-lock.yaml | 2 +- src/partials/account-vs-user.md | 2 +- .../+page.markdoc | 2 +- .../post/hacktoberfest-2023/+page.markdoc | 20 +- .../+page.markdoc | 10 +- .../+page.markdoc | 10 +- .../post/password-protection/+page.markdoc | 4 +- .../blog/post/public-beta/+page.markdoc | 7 +- .../+page.markdoc | 4 +- .../platform/response-codes/+page.markdoc | 274 +++++++++--------- .../environment-variables/+page.markdoc | 6 +- .../self-hosting/production/+page.markdoc | 2 +- src/routes/docs/apis/realtime/+page.markdoc | 4 +- .../docs/products/auth/accounts/+page.markdoc | 10 +- .../auth/email-password/+page.markdoc | 6 +- .../docs/products/auth/jwt/+page.markdoc | 8 +- .../docs/products/auth/oauth2/+page.markdoc | 40 +-- .../products/auth/quick-start/+page.markdoc | 8 +- .../docs/products/auth/security/+page.markdoc | 2 +- .../databases/collections/+page.markdoc | 2 +- .../databases/databases/+page.markdoc | 4 +- .../databases/relationships/+page.markdoc | 4 +- .../functions/deployment/+page.markdoc | 8 +- .../functions/development/+page.markdoc | 2 +- .../functions/quick-start/+page.markdoc | 42 +-- .../products/storage/buckets/+page.markdoc | 4 +- .../storage/upload-download/+page.markdoc | 8 +- .../docs/quick-starts/android/+page.markdoc | 4 +- .../docs/quick-starts/flutter/+page.markdoc | 23 +- src/routes/docs/references/+page.markdoc | 6 +- .../[service]/descriptions/locale.md | 2 +- src/routes/docs/sdks/+page.markdoc | 4 +- .../command-line/deployment/+page.markdoc | 8 +- .../docs/tutorials/react/step-5/+page.markdoc | 4 +- .../docs/tutorials/react/step-6/+page.markdoc | 15 +- .../tutorials/sveltekit/step-5/+page.markdoc | 2 +- .../tutorials/sveltekit/step-6/+page.markdoc | 17 +- .../docs/tutorials/vue/step-5/+page.markdoc | 2 +- .../docs/tutorials/vue/step-6/+page.markdoc | 14 +- 43 files changed, 397 insertions(+), 296 deletions(-) create mode 100644 .vale/styles/Vocab/Appwrite/accept.txt diff --git a/.vale.ini b/.vale.ini index 55539e801b..f48ad76500 100644 --- a/.vale.ini +++ b/.vale.ini @@ -1,10 +1,11 @@ StylesPath=".vale/styles" -Vocab = Base +Vocab = Base, Appwrite MinAlertLevel = suggestion -IgnoredScopes = code, tt +# Ignore text in code blocks and tables +IgnoredScopes = code, tt, a SkippedScopes = script, style, pre, figure [formats] diff --git a/.vale/styles/Vocab/Appwrite/accept.txt b/.vale/styles/Vocab/Appwrite/accept.txt new file mode 100644 index 0000000000..01c356bf88 --- /dev/null +++ b/.vale/styles/Vocab/Appwrite/accept.txt @@ -0,0 +1,10 @@ +Appwrite +Appwrite Realtime +Appwrite Cloud +Appwrite Console +Backend as a Service +Console +Realtime +Eldad +Fux +Christy \ No newline at end of file diff --git a/.vale/styles/Vocab/Base/accept.txt b/.vale/styles/Vocab/Base/accept.txt index c91a406e36..9b98d8ab72 100644 --- a/.vale/styles/Vocab/Base/accept.txt +++ b/.vale/styles/Vocab/Base/accept.txt @@ -1,6 +1,80 @@ -Appwrite -Appwrite Realtime Hacktoberfest +Bitwarden +Twilio +Instacart +Trustpilot +Gradle +Authy +Supabase +Bcrypt +Scrypt +Zendesk +Deno +Excali Vue +React +Svelte +SvelteKit Vite -NPM \ No newline at end of file +Datadog +Markdoc +runtime +SDK +REST +Rest +rest +SMS +GraphQL +GET +Get +get +POST +Post +post +PUT +Put +put +PATCH +Patch +patch +DELETE +Delete +delete +API +CLI +HTML +CSS +PDF +URL +Nuxt +Xcode +UIKit +VSCode +PowerShell +BaaS +JWT +JSON +GPU +ASIC +OAuth +OAuth2 +CAPTCHA +Bundler +reputational +cyberattack +inclusivity +admin +console +viewport +repository +keyframe +todo +favicons +wireframe +hostname +Hostname +destructuring +Destructuring +async +rebrand +serverless \ No newline at end of file diff --git a/package.json b/package.json index dcbbf9b421..61aa78256a 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "devDependencies": { "@melt-ui/pp": "^0.1.2", "@melt-ui/svelte": "^0.55.0", - "@ocular-d/vale-bin": "^2.29.6", + "@ocular-d/vale-bin": "^2.29.4", "@playwright/test": "^1.37.1", "@sveltejs/adapter-node": "^1.3.1", "@sveltejs/adapter-static": "^2.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9aa6422c21..f8ea19ccb6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,7 +47,7 @@ devDependencies: specifier: ^0.55.0 version: 0.55.4(svelte@4.2.0) '@ocular-d/vale-bin': - specifier: ^2.29.6 + specifier: ^2.29.4 version: 2.29.6 '@playwright/test': specifier: ^1.37.1 diff --git a/src/partials/account-vs-user.md b/src/partials/account-vs-user.md index f4d5c5b121..3648466155 100644 --- a/src/partials/account-vs-user.md +++ b/src/partials/account-vs-user.md @@ -6,5 +6,5 @@ Sessions respect [permissions](/docs/advanced/platform/permissions), which means The Users API is a dedicated API for managing users from an admin's perspective. It should be used with backend or server-side applications with [Server SDKs](/docs/sdks#server). Users API uses API keys instead of sessions. -This means they're not resticted by permissions, but by the scopes granted to the API key used. +This means they're not restricted by permissions, but by the scopes granted to the API key used. {% /info %} \ No newline at end of file diff --git a/src/routes/blog/post/dont-blame-the-readers-write-the-docs-they-need/+page.markdoc b/src/routes/blog/post/dont-blame-the-readers-write-the-docs-they-need/+page.markdoc index 7bd1cc052e..aecbae7211 100644 --- a/src/routes/blog/post/dont-blame-the-readers-write-the-docs-they-need/+page.markdoc +++ b/src/routes/blog/post/dont-blame-the-readers-write-the-docs-they-need/+page.markdoc @@ -26,7 +26,7 @@ Over the past year, we’ve noticed conversations like this in Appwrite communit # Identifying the issues -The Appwrite team has always valued documentation as a core part of the product. After all, most adoption begins at the documentation. The old documentation was minimalistic and to the point and reflects our product philosophy. You can skim through it in one sitting and learn how to start building with Appwrite. +The Appwrite team has always valued documentation as a core part of the product. After all, most adoption begins at the documentation. The old documentation was minimal and to the point and reflects our product philosophy. You can skim through it in one sitting and learn how to start building with Appwrite. The old Appwrite docs are good but designed for a different audience and a different product. As Appwrite’s capabilities grow, so does the amount of documentation. More features simply need more words to explain, and the single-side navigation becomes more bloated with more information than we ever intended. diff --git a/src/routes/blog/post/hacktoberfest-2023/+page.markdoc b/src/routes/blog/post/hacktoberfest-2023/+page.markdoc index 471cd84fda..96d91b1195 100644 --- a/src/routes/blog/post/hacktoberfest-2023/+page.markdoc +++ b/src/routes/blog/post/hacktoberfest-2023/+page.markdoc @@ -11,38 +11,38 @@ category: hacktoberfest Hacktoberfest is back, celebrating a decade of open source! Appwrite is proud to support open-source developers for the fifth consecutive year of [Hacktoberfest 2023](https://hacktoberfest.com), partnered with DigitalOcean. Here is how you can get involved and grab some cool Appwrite swag! -## Quick Guide to Getting Involved +## Quick guide to getting involved -### 1. Appwrite Repository: -- Check out the Appwrite repository on [GitHub](https://github.com/appwrite). Ensure you “Star” and “Like” the repo so you can find it easily +### 1. Appwrite repository: +- Check out the Appwrite repository on [GitHub](https://github.com/appwrite). Ensure you “Star” and “Like” the repository so you can find it easily -### 2. Search for Issues: +### 2. Search for issues: - Look for [issues labeled `hacktoberfest`](https://github.com/appwrite/appwrite/labels/hacktoberfest). Not seeing enough to choose from? Do not worry, we will be adding more issues throughout the month - Can't find an issue you want to work on? You can create an issue if you have great ideas on how you can contribute to improving Appwrite. Keep in mind this years focus is on quality, not quantity -### 3. Choose Your Contribution: +### 3. Choose your contribution: - Find the Issue you want to contribute to - Reply with a comment, “I would like to work on this. Can you assign it to me?” - Be sure to follow up with the issue within 3 days, so we know you are still working on it - Once your PR is ready, link the PR in the issue and tag a maintainer to let them know it is ready for review - Your PR will be confirmed within 7 days, and if it's accepted, we will label it as `hacktoberfest-accepted` -### 4. Get Support: +### 4. Get support: - Our maintainers are here to assist, guide, and mentor you through your contribution. Need alternative ways to contribute or additional help? Contact us on [Discord](https://appwrite.io/discord)! -### 5. Win Swags: +### 5. Win swags: - Earn an Appwrite hoodie and stickers for contributing only one accepted and merged PR! - Earn a Digital Swag Bag from DigitalOcean for contributing 4 PRs+ from any open-source project participating in Hacktoberfest. We have a surprise gift inside this swag bag waiting for you ![Hacktoberfest swag](/images/blog/hacktoberfest2023-swag.png) -## How Appwrite Supports Developers +## How Appwrite supports developers - We are hosting several events that you can find in the Appwrite Discord community to introduce you to open-source projects, guide your contributions, and prep you for October. We are hosting two PR Review parties each week where you can watch our engineers live reviewing your pull requests and giving tips on contributing - We are consistently sharing content on how to build with Appwrite and become a better developer -## Join the Appwrite Community +## Join the Appwrite community -Stay informed on new announcements, events, and features, and interact with other Appwriters from the community! [Join us on Discord](https://appwrite.io/discord), join the #hacktoberfest channel, and celebrate open-source together! +Stay informed on new announcements, events, and features, and interact with other Appwriters from the community! [Join us on Discord](https://appwrite.io/discord), join the `#hacktoberfest` channel, and celebrate open-source together! diff --git a/src/routes/blog/post/its-the-contributors-in-open-source-who-make-the-community-great/+page.markdoc b/src/routes/blog/post/its-the-contributors-in-open-source-who-make-the-community-great/+page.markdoc index 1ebe9ece91..72b588ada9 100644 --- a/src/routes/blog/post/its-the-contributors-in-open-source-who-make-the-community-great/+page.markdoc +++ b/src/routes/blog/post/its-the-contributors-in-open-source-who-make-the-community-great/+page.markdoc @@ -24,7 +24,7 @@ But what does this actually mean to be open source as a company? It means that o ## 1.4 contributors -The latest version of Appwrite was built with the help of over 40 developers, truly showing off what building together can achieve and how the community comes together. The collective knowledge and skills of the open source community make it possible to do a lot more with less. With this in mind, we want to shed light on the contributors of the Appwrite 1.4 release and thank every single dev in the community who helped us launch. It was the biggest release to date, and that also led to having the most contributions ever. We are grateful for each contribution, from coding to translations to documentation, with each pull request Appwrite improved. We want to celebrate each and every one of you. Therefore our deepest gratitude goes out to: +The latest version of Appwrite was built with the help of over 40 developers, truly showing off what building together can achieve and how the community comes together. The collective knowledge and skills of the open source community make it possible to do a lot more with less. With this in mind, we want to shed light on the contributors of the Appwrite 1.4 release and thank every single developer in the community who helped us launch. It was the biggest release to date, and that also led to having the most contributions ever. We are grateful for each contribution, from coding to translations to documentation, with each pull request Appwrite improved. We want to celebrate each and every one of you. Therefore our deepest gratitude goes out to: - [@keul](https://github.com/keul) who [contributed to our Readme](https://github.com/appwrite/appwrite/pull/4537) - [@sarthakroy2002](https://github.com/sarthakroy2002) who updated [codeql-action to v3](https://github.com/appwrite/appwrite/pull/4534) @@ -32,8 +32,8 @@ The latest version of Appwrite was built with the help of over 40 developers, tr - [@kalpeshT101](https://github.com/kalpeshT101) who [contributed to our Readme](https://github.com/appwrite/appwrite/pull/4298) - [@Sushrut1101](https://github.com/Sushrut1101) who [updated actions/checkout to v3](https://github.com/appwrite/appwrite/pull/4332) - [@karniv00l](https://github.com/karniv00l) who helped us [fix a bug that appeared when user not found exception happened](https://github.com/appwrite/appwrite/pull/4506) -- [@vimode](https://github.com/vimode) who helped us [update Windows powershell commands](https://github.com/appwrite/appwrite/pull/4533) -- [@megatank58](https://github.com/megatank58) who helped us [fix Appwrite upgradation bug](https://github.com/appwrite/appwrite/pull/4341) +- [@vimode](https://github.com/vimode) who helped us [update Windows PowerShell commands](https://github.com/appwrite/appwrite/pull/4533) +- [@megatank58](https://github.com/megatank58) who helped us [fix Appwrite upgrade bug](https://github.com/appwrite/appwrite/pull/4341) - [@pomarec](https://github.com/pomarec) who [fixed French translation](https://github.com/appwrite/appwrite/pull/4783) - [@aayushbisen](https://github.com/aayushbisen) who [added a restart policy in the `appwrite-worker-messaging` service](https://github.com/appwrite/appwrite/pull/4994) - [@motasimmakki](https://github.com/motasimmakki) who [contributed to docs](https://github.com/appwrite/appwrite/pull/4556) @@ -61,7 +61,7 @@ The latest version of Appwrite was built with the help of over 40 developers, tr - [@erezhod](https://github.com/erezhod) who helped us [fix Apple code snippet bugs in our documentation](https://github.com/appwrite/console/pull/468) - [@Chaitanya-Upadhye](https://github.com/Chaitanya-Upadhye) who helped us [fix a bug that appeared in indexes](https://github.com/appwrite/console/pull/486) - [@safwanyp](https://github.com/safwanyp) who helped us [fix a bug that prevented the document from updating after deleting the array element](https://github.com/appwrite/console/pull/495) -- [@KaranJagtiani](https://github.com/KaranJagtiani) who helped us [fiix CDN code sample](https://github.com/appwrite/console/pull/504) +- [@KaranJagtiani](https://github.com/KaranJagtiani) who helped us [fix CDN code sample](https://github.com/appwrite/console/pull/504) Every single contributor and every single contribution made the product better for the next developer. That is what makes it all the more exciting, knowing that your PR actually has value for the next person. With that in mind, shouldn't we all contribute to OSS projects? Maybe, but where to begin? @@ -69,7 +69,7 @@ Every single contributor and every single contribution made the product better f As mentioned previously, many of our team members were first contributors before they joined. Our very own [Christy Jacob](https://github.com/christyjacob4) once started as a contributor during [Hacktoberfest](https://appwrite.io/blog/post/hacktoberfest-2023), the largest celebration of open source, and is now a Lead Engineer building Appwrite Cloud. It all starts with that first step and pull request. -![hacktoberfest partecipants](/images/blog/badge.png) +![Hacktoberfest participants](/images/blog/badge.png) So there is more to open source contributing than just helping build a project. It can help you progress in your future career by learning, building your portfolio, networking, and even finding job opportunities. All the more reasons to jump on the wagon. With that said, we also understand that for some, contributing might seem daunting, but it really isn't if you get the right help and guidance. This is where [Hacktoberfest](https://appwrite.io/blog/post/hacktoberfest-2023) comes in. It is an amazing event that allows you to contribute to many different projects in many different ways together with others, so you don't have to start your journey alone. It started on the 1st of October 2023, and you can join the entire month. This is your chance to kickstart your open source journey. diff --git a/src/routes/blog/post/leveraging-baas-tools-to-scale-faster/+page.markdoc b/src/routes/blog/post/leveraging-baas-tools-to-scale-faster/+page.markdoc index 829cf305db..d045e32e78 100644 --- a/src/routes/blog/post/leveraging-baas-tools-to-scale-faster/+page.markdoc +++ b/src/routes/blog/post/leveraging-baas-tools-to-scale-faster/+page.markdoc @@ -10,17 +10,17 @@ category: engineering featured: false --- -There are many tools that developers use every day to abstract away complexity, but many are seriously underutilizing the benefits of "Backend As A Service" tools for developing the entire backend of an app, or at least the key components. +There are many tools that developers use every day to abstract away complexity, but many are seriously underutilizing the benefits of "Backend as a Service" tools for developing the entire backend of an app, or at least the key components. The idea of trusting such a vital part of the development process to a 3rd party tool can be scary; we get it. It's natural to want to have control over every bit of code and build things from scratch, but at what cost? Many of the features we require in most apps are necessary but don't represent the core product. This includes authentication, security, file storage and database management. Do you really need to reinvent the wheel and build this from scratch every time? -We believe in most cases there is an easier way, which is where the idea of "Backend As A Service" can help. +We believe in most cases there is an easier way, which is where the idea of "Backend as a Service" can help. # What is a Backend as a Service (BaaS) -A backend as a service is a third party service that lets you develop the backend part of your application without building things from scratch. It's about NOT reinventing the wheel for every app you launch. +A Backend as a Service is a third party service that lets you develop the backend part of your application without building things from scratch. It's about NOT reinventing the wheel for every app you launch. Each BaaS platform has its own set of tools and features, so let's use [Appwrite](https://appwrite.io/) as an example of offerings you may see. A service like Appwrite provides you with a console from which you can manage your entire backend. From your console's dashboard you'll have the ability to create and manage services such as: @@ -45,7 +45,7 @@ In the process of writing this article, we did some research to find out which c Many developers at the highest level are adopting the idea of using these tools to optimize their effectiveness and efficiency. We've seen this in cases from developers trying to get a product to market in the shortest possible time or integrating features with efficiency into large-scale applications. -In one interview, the CEO of Appwrite, [Eldad Fux](https://twitter.com/eldadfux), said, "Appwrite was born out of necessity". After working on multiple startups and years of experience in the industry, Eldad said, "I didn't want to suffer from doing the same thing over and over again." +In one interview, the CEO of Appwrite, [Eldad Fux](https://twitter.com/eldadfux), said, "Appwrite was born out of necessity". After working on multiple startups and years of experience in the industry, Eldad said, "I didn't want to suffer from doing the same thing over and over again." # Choosing a BaaS provider @@ -65,7 +65,7 @@ One of the main concerns with using Firebase is that the data stored in Firebase ## The open-source solution -These concerns are exactly why Appwrite was developed as the truly 100% open source Backend As A Service. A platform that is committed to giving you control over your tools and data while developing with the open source community. +These concerns are exactly why Appwrite was developed as the truly 100% open source Backend as a Service. A platform that is committed to giving you control over your tools and data while developing with the open source community. Appwrite has addressed many of the problems developers in the community face, which is why it is being adopted at an incredible pace with amazing support! Since its launch in 2019, Appwrite has raised $37 million in seed rounds, was named Product Hunt's #1 product of the day after launching version 1.0, has gained over 33k GitHub stars with over 700 open source contributors, and has grown one of the most active developer communities on discord with over 17,000 members! diff --git a/src/routes/blog/post/password-protection/+page.markdoc b/src/routes/blog/post/password-protection/+page.markdoc index 73e6a9d01a..58f5d01a04 100644 --- a/src/routes/blog/post/password-protection/+page.markdoc +++ b/src/routes/blog/post/password-protection/+page.markdoc @@ -61,7 +61,7 @@ Implement password reset functionality using a secure token that expires after a Always store hashed and salted passwords instead of plain text. Hashing is a one-way function that transforms a password into a fixed-length string of characters, while salting adds a random value to the password before hashing to prevent precomputed attacks like rainbow tables. Use modern hashing algorithms like `bcrypt`, `scrypt`, or `Argon2`, which are designed to be slow and computationally expensive, making brute-force attacks more difficult. - **Use rate limiting and account lockout mechanisms** -Prevent brute-force attacks by temporarily locking accounts or requiring users to complete a captcha after a certain number of failed login attempts. Implement rate limiting to limit the number of authentication attempts within a specific time frame. This will also give your team time to investigate and prevent attacks before damage is caused. +Prevent brute-force attacks by temporarily locking accounts or requiring users to complete a CAPTCHA after a certain number of failed login attempts. Implement rate limiting to limit the number of authentication attempts within a specific time frame. This will also give your team time to investigate and prevent attacks before damage is caused. - **Monitor and audit** Regularly monitor and audit your authentication system for suspicious activity and maintain logs to help with incident response and forensic analysis. @@ -70,6 +70,6 @@ Regularly monitor and audit your authentication system for suspicious activity a Please help your users understand why setting strong passwords is necessary and how password managers like LastPass, 1Password, or Bitwarden can help them generate and manage their passwords. -## Moving Forward +## Moving forward Security is a shared responsibility between developers and users. Collaborating with them in this process is essential to implement better password protection and keep your applications secure. As a developer, by the way, if you would like to try an authentication solution that implements better password protection policies out-of-the-box, look at [Appwrite](https://appwrite.io/docs/products/auth). With various features such as password hashing, session limits, a strong permissions system, password history, a password dictionary, and personal data checks in passwords, [Appwrite Authentication](https://appwrite.io/docs/products/auth) offers an easy-to-implement yet robust authentication system for you to build with. diff --git a/src/routes/blog/post/public-beta/+page.markdoc b/src/routes/blog/post/public-beta/+page.markdoc index d5534c8bc4..28fd516284 100644 --- a/src/routes/blog/post/public-beta/+page.markdoc +++ b/src/routes/blog/post/public-beta/+page.markdoc @@ -1,7 +1,7 @@ --- layout: post title: Appwrite Cloud is now in public beta -description: We're happy to announce Cloud is now available for everyone to signup. +description: We're happy to announce Cloud is now available for everyone to sign up. date: 2023-05-02 cover: /images/blog/cloud-beta.png timeToRead: 5 @@ -39,7 +39,7 @@ We’re conducting a series of interviews & surveys with participants of the Pub If you’re part of the Beta and would like to participate in these interviews, please reach out to me on the Appwrite Discord or my email, and we’d be glad to set up a call. ## Pricing -Our goal is to make Appwrite Cloud affordable and accessible to all developers. We’ve had some really great feedback from our initial pricing survey and are really close to sharing our model with you all. We will continue working together with the Appwrite community to refine this pricing model. Rest assured, there will be a generous free tier for all the hobby projects you’ve been wanting to create! +Our goal is to make Appwrite Cloud affordable and accessible to all developers. We’ve had some really great feedback from our initial pricing survey and are really close to sharing our model with you all. We will continue working together with the Appwrite community to refine this pricing model. There will be a generous free tier for all the hobby projects you’ve been wanting to create! ## Self-hosted edition A lot of us may have questions about the open source version of Appwrite and its future. We can proudly say, we will continue to stand among the handful of companies that have been open-source first. Our vibrant community is a testament that, for the longest time, we have prioritized the open source version, and we will continue to do so. In fact, all major features will roll out to the open source version even before they hit the cloud! Appwrite will forever remain open source! @@ -48,8 +48,7 @@ A lot of us may have questions about the open source version of Appwrite and its During the Beta, we’re operating with Frankfurt as our primary region. This is a careful decision to ensure we are geographically centrally located. As we get closer to general availability, we will focus on 3 more regions, namely San Francisco, New York, and Singapore with more regions to follow. ## Compliance -Compliances are frameworks that help organizations ensure they are meeting certain standards and requirements in regard to data security and privacy. For most SaaS/BaaS companies, SOC 2, HIPAA & GDPR are the essential ones. These certifications help companies demonstrate to their customers and stakeholders they are taking data security and privacy seriously, and are committed to protecting their sensitive information. - +Compliance frameworks help organizations ensure they meet certain standards and requirements, especially in regard to data security and privacy. For many SaaS/BaaS companies, key standards include SOC 2, HIPAA, and GDPR. Adhering to these standards helps companies demonstrate to their customers and stakeholders that they take data security and privacy seriously, and are committed to protecting sensitive information. These usually involve a lot of paperwork, documentation, and administrative processes. We’re in the process of ensuring we meet the highest standards for data security and privacy. ## Support for more function runtimes diff --git a/src/routes/blog/post/the-journey-and-meaning-behind-our-new-logo/+page.markdoc b/src/routes/blog/post/the-journey-and-meaning-behind-our-new-logo/+page.markdoc index e221e4f445..2714f7a915 100644 --- a/src/routes/blog/post/the-journey-and-meaning-behind-our-new-logo/+page.markdoc +++ b/src/routes/blog/post/the-journey-and-meaning-behind-our-new-logo/+page.markdoc @@ -61,12 +61,12 @@ The new logo features lines that converge to form a globe. This represents our d The lines in the logo evoke the idea of code - lines of code coming together to build something meaningful. This symbolism reflects the essence of our platform, empowering developers to create with ease and efficiency. These lines also feature prominently in our imagery style. -Finally, its overall look is reminiscent of the lowercase letter 'a,' standing for the first letter of appwrite. +Finally, its overall look is reminiscent of the lowercase letter 'a,' standing for the first letter of Appwrite. ![Decorative lines](/images/blog/the-journey-and-meaning-behind-our-new-logo/lines.png) -Our new logo inspired the rest of our visual identity. Our [website](https://appwrite.io/), promotional materials, and even [documentation](https://appwrite.io/docs) are now harmonized with this new identity, giving Appwrite a fresh, meaningful, and cohesive look. +Our new logo inspired the remainder of our visual identity. Our [website](https://appwrite.io/), promotional materials, and even [documentation](https://appwrite.io/docs) are now harmonized with this new identity, giving Appwrite a fresh, meaningful, and cohesive look. # The road ahead diff --git a/src/routes/docs/advanced/platform/response-codes/+page.markdoc b/src/routes/docs/advanced/platform/response-codes/+page.markdoc index 607802dca2..8e5f44da76 100644 --- a/src/routes/docs/advanced/platform/response-codes/+page.markdoc +++ b/src/routes/docs/advanced/platform/response-codes/+page.markdoc @@ -52,140 +52,140 @@ For example, a `400` HTTP response code could indicate a Bad Request due to a va | Code | Type | Description | | ---- | ---- | ----------- | -| 400 | general_mock | General errors thrown by the mock controller used for testing. | -| 400 | general_argument_invalid | The request contains one or more invalid arguments. Please refer to the endpoint documentation. | -| 400 | general_query_limit_exceeded | Query limit exceeded for the current attribute. Usage of more than 100 query values on a single attribute is prohibited. | -| 400 | general_query_invalid | The query's syntax is invalid. Please check the query and try again. | -| 400 | general_cursor_not_found | The cursor is invalid. This can happen if the item represented by the cursor has been deleted. | -| 400 | user_password_mismatch | Passwords do not match. Please check the password and confirm password. | -| 400 | password_recently_used | The password you are trying to use is similar to your previous password. For your security, please choose a different password and try again. | -| 400 | password_personal_data | The password you are trying to use contains references to your name, email, phone or userID. For your security, please choose a different password and try again. | -| 400 | user_phone_not_found | The current user does not have a phone number associated with their account. | -| 400 | user_missing_id | Missing ID from OAuth2 provider. | -| 400 | user_oauth2_bad_request | OAuth2 provider rejected the bad request. | -| 400 | storage_device_not_found | The requested storage device could not be found. | -| 400 | storage_file_empty | Empty file passed to the endpoint. | -| 400 | storage_file_type_unsupported | The given file extension is not supported. | -| 400 | storage_invalid_file_size | The file size is either not valid or exceeds the maximum allowed size. Please check the file or the value of the `_APP_STORAGE_LIMIT` environment variable. | -| 400 | storage_invalid_content_range | The content range is invalid. Please check the value of the `Content-Range` header. | -| 400 | storage_invalid_appwrite_id | The value for `x-appwrite-id` header is invalid. Please check the value of the `x-appwrite-id` header is a valid id and not `unique()`. | -| 400 | general_provider_failure | VCS (Version Control System) provider failed to process the request. We believe this is an error with the VCS provider. Try again, or contact support for more information. | -| 400 | build_not_ready | Build with the requested ID is building and not ready for execution. | -| 400 | build_in_progress | Build with the requested ID is already in progress. Please wait before you can retry. | -| 400 | collection_limit_exceeded | The maximum number of collections has been reached. | -| 400 | document_invalid_structure | The document structure is invalid. Please ensure the attributes match the collection definition. | -| 400 | document_missing_data | The document data is missing. Try again with document data populated. | -| 400 | document_missing_payload | The document data and permissions are missing. You must provide either document data or permissions to be updated. | -| 400 | attribute_unknown | The attribute required for the index could not be found. Please confirm all your attributes are in the available state. | -| 400 | attribute_not_available | The requested attribute is not yet available. Please try again later. | -| 400 | attribute_format_unsupported | The requested attribute format is not supported. | -| 400 | attribute_default_unsupported | Default values cannot be set for array or required attributes. | -| 400 | attribute_limit_exceeded | The maximum number of attributes has been reached. | -| 400 | attribute_value_invalid | The attribute value is invalid. Please check the type, range and value of the attribute. | -| 400 | attribute_type_invalid | The attribute type is invalid. | -| 400 | index_limit_exceeded | The maximum number of indexes has been reached. | -| 400 | index_invalid | Index invalid. | -| 400 | project_unknown | The project ID is either missing or not valid. Please check the value of the `X-Appwrite-Project` header to ensure the correct project ID is being used. | -| 400 | project_invalid_success_url | Invalid redirect URL for OAuth success. | -| 400 | project_invalid_failure_url | Invalid redirect URL for OAuth failure. | -| 400 | project_reserved_project | The project ID is reserved. Please choose another project ID. | -| 400 | project_smtp_config_invalid | Provided SMTP config is invalid. Please check the configured values and try again. | -| 400 | graphql_no_query | Param "query" is not optional. | -| 400 | graphql_too_many_queries | Too many queries. | -| 401 | general_access_forbidden | Access to this API is forbidden. | -| 401 | general_unauthorized_scope | The current user or API key does not have the required scopes to access the requested resource. | -| 401 | user_jwt_invalid | The JWT token is invalid. Please check the value of the `X-Appwrite-JWT` header to ensure the correct token is being used. | -| 401 | user_blocked | The current user has been blocked. You can unblock the user by making a request to the User API's "Update User Status" endpoint or in the Appwrite Console's Auth section. | -| 401 | user_invalid_token | Invalid token passed in the request. | -| 401 | user_email_not_whitelisted | Console registration is restricted to specific emails. Contact your administrator for more information. | -| 401 | user_invalid_code | The specified code is not valid. Contact your administrator for more information. | -| 401 | user_ip_not_whitelisted | Console registration is restricted to specific IPs. Contact your administrator for more information. | -| 401 | user_invalid_credentials | Invalid credentials. Please check the email and password. | -| 401 | user_anonymous_console_prohibited | Anonymous users cannot be created for the console project. | -| 401 | user_session_already_exists | Creation of anonymous users is prohibited when a session is active. | -| 401 | user_unauthorized | The current user is not authorized to perform the requested action. | -| 401 | user_oauth2_unauthorized | OAuth2 provider rejected the unauthorized request. | -| 401 | team_invalid_secret | The team invitation secret is invalid. Please request a new invitation and try again. | -| 401 | team_invite_mismatch | The invite does not belong to the current user. | -| 401 | project_key_expired | The project key has expired. Please generate a new key using the Appwrite console. | -| 401 | rule_verification_failed | Domain verification failed. Please check if your DNS records are correct and try again. | -| 401 | project_template_default_deletion | You can't delete default template. If you are trying to reset your template changes, you can ignore this error as it's already been reset. | -| 403 | general_unknown_origin | The request originated from an unknown origin. If you trust this domain, please list it as a trusted platform in the Appwrite console. | -| 403 | storage_invalid_file | The uploaded file is invalid. Please check the file and try again. | -| 403 | document_delete_restricted | Document cannot be deleted because it is referenced by another document. | -| 404 | general_route_not_found | The requested route was not found. Please refer to the API docs and try again. | -| 404 | user_not_found | User with the requested ID could not be found. | -| 404 | user_session_not_found | The current user session could not be found. | -| 404 | user_identity_not_found | The identity could not be found. Please sign in with OAuth provider to create identity first. | -| 404 | team_not_found | Team with the requested ID could not be found. | -| 404 | team_invite_not_found | The requested team invitation could not be found. | -| 404 | team_membership_mismatch | The membership ID does not belong to the team ID. | -| 404 | membership_not_found | Membership with the requested ID could not be found. | -| 404 | avatar_set_not_found | The requested avatar set could not be found. | -| 404 | avatar_not_found | The request avatar could not be found. | -| 404 | avatar_image_not_found | The requested image was not found at the URL. | -| 404 | avatar_remote_url_failed | Failed to fetch favicon from the requested URL. | -| 404 | avatar_icon_not_found | The requested favicon could not be found. | -| 404 | storage_file_not_found | The requested file could not be found. | -| 404 | storage_bucket_not_found | Storage bucket with the requested ID could not be found. | -| 404 | installation_not_found | Installation with the requested ID could not be found. Check to see if the ID is correct, or create the installation. | -| 404 | provider_repository_not_found | VCS (Version Control System) repository with the requested ID could not be found. Check to see if the ID is correct, and if it belongs to installationId you provided. | -| 404 | repository_not_found | Repository with the requested ID could not be found. Check to see if the ID is correct, or create the repository. | -| 404 | function_not_found | Function with the requested ID could not be found. | -| 404 | function_runtime_unsupported | The requested runtime is either inactive or unsupported. Please check the value of the `_APP_FUNCTIONS_RUNTIMES` environment variable. | -| 404 | function_runtime_unsupported | Entrypoint for your Appwrite Function is missing. Please specify it when making deployment or update the entrypoint under your function's "Settings" > "Configuration" > "Entrypoint". | -| 404 | build_not_found | Build with the requested ID could not be found. | -| 404 | deployment_not_found | Deployment with the requested ID could not be found. | -| 404 | execution_not_found | Execution with the requested ID could not be found. | -| 404 | database_not_found | Database not found | -| 404 | collection_not_found | Collection with the requested ID could not be found. | -| 404 | document_not_found | Document with the requested ID could not be found. | -| 404 | attribute_not_found | Attribute with the requested ID could not be found. | -| 404 | index_not_found | Index with the requested ID could not be found. | -| 404 | project_not_found | Project with the requested ID could not be found. Please check the value of the `X-Appwrite-Project` header to ensure the correct project ID is being used. | -| 404 | router_host_not_found | Host is not trusted. This could occur because you have not configured a custom domain. Add a custom domain to your project first and try again. | -| 404 | rule_resource_not_found | Resource could not be found. Please check if the `resourceId` and `resourceType` are correct, or if the resource actually exists. | -| 404 | rule_not_found | Rule with the requested ID could not be found. Please check if the ID provided is correct or if the rule actually exists. | -| 404 | webhook_not_found | Webhook with the requested ID could not be found. | -| 404 | key_not_found | Key with the requested ID could not be found. | -| 404 | platform_not_found | Platform with the requested ID could not be found. | -| 404 | variable_not_found | Variable with the requested ID could not be found. | -| 404 | migration_not_found | Migration with the requested ID could not be found. Please verify that the provided ID is correct and try again. | -| 405 | general_not_implemented | This method was not fully implemented yet. If you believe this is a mistake, please upgrade your Appwrite server version. | -| 409 | user_already_exists | A user with the same id, email, or phone already exists in this project. | -| 409 | user_email_already_exists | A user with the same email already exists in the current project. | -| 409 | user_phone_already_exists | A user with the same phone number already exists in the current project. | -| 409 | team_invite_already_exists | User has already been invited or is already a member of this team | -| 409 | team_already_exists | Team with requested ID already exists. Please choose a different ID and try again. | -| 409 | membership_already_confirmed | Membership is already confirmed. | -| 409 | storage_file_already_exists | A storage file with the requested ID already exists. | -| 409 | storage_bucket_already_exists | A storage bucket with the requested ID already exists. Try again with a different ID or use `unique()` to generate a unique ID. | -| 409 | provider_contribution_conflict | External contribution is already authorized. | -| 409 | database_already_exists | Database already exists | -| 409 | collection_already_exists | A collection with the requested ID already exists. Try again with a different ID or use `unique()` to generate a unique ID. | -| 409 | document_already_exists | Document with the requested ID already exists. Try again with a different ID or use `unique()` to generate a unique ID. | -| 409 | document_update_conflict | Remote document is newer than local. | -| 409 | attribute_already_exists | Attribute with the requested ID already exists. Try again with a different ID or use `unique()` to generate a unique ID. | -| 409 | index_already_exists | Index with the requested ID already exists. Try again with a different ID or use `unique()` to generate a unique ID. | -| 409 | project_already_exists | Project with the requested ID already exists. Try again with a different ID or use `unique()` to generate a unique ID. | -| 409 | rule_already_exists | Domain is already used. Please try again with a different domain. | -| 409 | variable_already_exists | Variable with the same ID already exists in this project. Try again with a different ID. | -| 409 | migration_already_exists | Migration with the requested ID already exists. Try again with a different ID. | -| 409 | migration_in_progress | Migration is already in progress. You can check the status of the migration in your Appwrite Console's "Settings" > "Migrations". | -| 412 | user_password_reset_required | The current user requires a password reset. | -| 412 | project_provider_disabled | The chosen OAuth provider is disabled. You can enable the OAuth provider using the Appwrite console. | -| 416 | storage_invalid_range | The requested range is not satisfiable. Please check the value of the `Range` header. | -| 424 | user_oauth2_provider_error | OAuth2 provider returned some error. | -| 429 | general_rate_limit_exceeded | Rate limit for the current endpoint has been exceeded. Please try again after some time. | -| 500 | general_unknown | An unknown error has occurred. Please check the logs for more information. | -| 500 | general_server_error | An internal server error occurred. | -| 500 | general_protocol_unsupported | The request cannot be fulfilled with the current protocol. Please check the value of the `_APP_OPTIONS_FORCE_HTTPS` environment variable. | -| 500 | general_codes_disabled | Invitation codes are disabled on this server. Please contact the server administrator. | -| 500 | router_domain_not_configured | `_APP_DOMAIN`, `_APP_DOMAIN_TARGET`, and `_APP_DOMAIN_FUNCTIONS` environment variables have not been configured. Please configure the domain environment variables before accessing the Appwrite Console via any IP address or hostname other than localhost. This value could be an IP like 203.0.113.0 or a hostname like example.com. | -| 501 | general_usage_disabled | Usage stats is not configured. Please check the value of the `_APP_USAGE_STATS` environment variable of your Appwrite server. | -| 501 | user_count_exceeded | The current project has exceeded the maximum number of users. Please check your user limit in the Appwrite console. | -| 501 | user_auth_method_unsupported | The requested authentication method is either disabled or unsupported. Please check the supported authentication methods in the Appwrite console. | -| 501 | project_provider_unsupported | The chosen OAuth provider is unsupported. Please check the Create OAuth2 Session docs for the complete list of supported OAuth providers. | -| 503 | general_service_disabled | The requested service is disabled. You can enable the service from the Appwrite console. | -| 503 | general_smtp_disabled | SMTP is disabled on your Appwrite instance. You can learn more about setting up SMTP in our docs. | -| 503 | general_phone_disabled | Phone provider is not configured. Please check the `_APP_SMS_PROVIDER` environment variable of your Appwrite server. | \ No newline at end of file +| 400 | `general_mock` | General errors thrown by the mock controller used for testing. | +| 400 | `general_argument_invalid` | The request contains one or more invalid arguments. Please refer to the endpoint documentation. | +| 400 | `general_query_limit_exceeded` | Query limit exceeded for the current attribute. Usage of more than 100 query values on a single attribute is prohibited. | +| 400 | `general_query_invalid` | The query's syntax is invalid. Please check the query and try again. | +| 400 | `general_cursor_not_found` | The cursor is invalid. This can happen if the item represented by the cursor has been deleted. | +| 400 | `user_password_mismatch` | Passwords do not match. Please check the password and confirm password. | +| 400 | `password_recently_used` | The password you are trying to use is similar to your previous password. For your security, please choose a different password and try again. | +| 400 | `password_personal_data` | The password you are trying to use contains references to your name, email, phone or userID. For your security, please choose a different password and try again. | +| 400 | `user_phone_not_found` | The current user does not have a phone number associated with their account. | +| 400 | `user_missing_id` | Missing ID from OAuth2 provider. | +| 400 | `user_oauth2_bad_request` | OAuth2 provider rejected the bad request. | +| 400 | `storage_device_not_found` | The requested storage device could not be found. | +| 400 | `storage_file_empty` | Empty file passed to the endpoint. | +| 400 | `storage_file_type_unsupported` | The given file extension is not supported. | +| 400 | `storage_invalid_file_size` | The file size is either not valid or exceeds the maximum allowed size. Please check the file or the value of the `_APP_STORAGE_LIMIT` environment variable. | +| 400 | `storage_invalid_content_range` | The content range is invalid. Please check the value of the `Content-Range` header. | +| 400 | `storage_invalid_appwrite_id` | The value for `x-appwrite-id` header is invalid. Please check the value of the `x-appwrite-id` header is a valid id and not `unique()`. | +| 400 | `general_provider_failure` | VCS (Version Control System) provider failed to process the request. We believe this is an error with the VCS provider. Try again, or contact support for more information. | +| 400 | `build_not_ready` | Build with the requested ID is building and not ready for execution. | +| 400 | `build_in_progress` | Build with the requested ID is already in progress. Please wait before you can retry. | +| 400 | `collection_limit_exceeded` | The maximum number of collections has been reached. | +| 400 | `document_invalid_structure` | The document structure is invalid. Please ensure the attributes match the collection definition. | +| 400 | `document_missing_data` | The document data is missing. Try again with document data populated. | +| 400 | `document_missing_payload` | The document data and permissions are missing. You must provide either document data or permissions to be updated. | +| 400 | `attribute_unknown` | The attribute required for the index could not be found. Please confirm all your attributes are in the available state. | +| 400 | `attribute_not_available` | The requested attribute is not yet available. Please try again later. | +| 400 | `attribute_format_unsupported` | The requested attribute format is not supported. | +| 400 | `attribute_default_unsupported` | Default values cannot be set for array or required attributes. | +| 400 | `attribute_limit_exceeded` | The maximum number of attributes has been reached. | +| 400 | `attribute_value_invalid` | The attribute value is invalid. Please check the type, range and value of the attribute. | +| 400 | `attribute_type_invalid` | The attribute type is invalid. | +| 400 | `index_limit_exceeded` | The maximum number of indexes has been reached. | +| 400 | `index_invalid` | Index invalid. | +| 400 | `project_unknown` | The project ID is either missing or not valid. Please check the value of the `X-Appwrite-Project` header to ensure the correct project ID is being used. | +| 400 | `project_invalid_success_url` | Invalid redirect URL for OAuth success. | +| 400 | `project_invalid_failure_url` | Invalid redirect URL for OAuth failure. | +| 400 | `project_reserved_project` | The project ID is reserved. Please choose another project ID. | +| 400 | `project_smtp_config_invalid` | Provided SMTP config is invalid. Please check the configured values and try again. | +| 400 | `graphql_no_query` | Param "query" is not optional. | +| 400 | `graphql_too_many_queries` | Too many queries. | +| 401 | `general_access_forbidden` | Access to this API is forbidden. | +| 401 | `general_unauthorized_scope` | The current user or API key does not have the required scopes to access the requested resource. | +| 401 | `user_jwt_invalid` | The JWT token is invalid. Please check the value of the `X-Appwrite-JWT` header to ensure the correct token is being used. | +| 401 | `user_blocked` | The current user has been blocked. You can unblock the user by making a request to the User API's "Update User Status" endpoint or in the Appwrite Console's Auth section. | +| 401 | `user_invalid_token` | Invalid token passed in the request. | +| 401 | `user_email_not_whitelisted` | Console registration is restricted to specific emails. Contact your administrator for more information. | +| 401 | `user_invalid_code` | The specified code is not valid. Contact your administrator for more information. | +| 401 | `user_ip_not_whitelisted` | Console registration is restricted to specific IPs. Contact your administrator for more information. | +| 401 | `user_invalid_credentials` | Invalid credentials. Please check the email and password. | +| 401 | `user_anonymous_console_prohibited` | Anonymous users cannot be created for the console project. | +| 401 | `user_session_already_exists` | Creation of anonymous users is prohibited when a session is active. | +| 401 | `user_unauthorized` | The current user is not authorized to perform the requested action. | +| 401 | `user_oauth2_unauthorized` | OAuth2 provider rejected the unauthorized request. | +| 401 | `team_invalid_secret` | The team invitation secret is invalid. Please request a new invitation and try again. | +| 401 | `team_invite_mismatch` | The invite does not belong to the current user. | +| 401 | `project_key_expired` | The project key has expired. Please generate a new key using the Appwrite console. | +| 401 | `rule_verification_failed` | Domain verification failed. Please check if your DNS records are correct and try again. | +| 401 | `project_template_default_deletion` | You can't delete default template. If you are trying to reset your template changes, you can ignore this error as it's already been reset. | +| 403 | `general_unknown_origin` | The request originated from an unknown origin. If you trust this domain, please list it as a trusted platform in the Appwrite console. | +| 403 | `storage_invalid_file` | The uploaded file is invalid. Please check the file and try again. | +| 403 | `document_delete_restricted` | Document cannot be deleted because it is referenced by another document. | +| 404 | `general_route_not_found` | The requested route was not found. Please refer to the API docs and try again. | +| 404 | `user_not_found` | User with the requested ID could not be found. | +| 404 | `user_session_not_found` | The current user session could not be found. | +| 404 | `user_identity_not_found` | The identity could not be found. Please sign in with OAuth provider to create identity first. | +| 404 | `team_not_found` | Team with the requested ID could not be found. | +| 404 | `team_invite_not_found` | The requested team invitation could not be found. | +| 404 | `team_membership_mismatch` | The membership ID does not belong to the team ID. | +| 404 | `membership_not_found` | Membership with the requested ID could not be found. | +| 404 | `avatar_set_not_found` | The requested avatar set could not be found. | +| 404 | `avatar_not_found` | The request avatar could not be found. | +| 404 | `avatar_image_not_found` | The requested image was not found at the URL. | +| 404 | `avatar_remote_url_failed` | Failed to fetch favicon from the requested URL. | +| 404 | `avatar_icon_not_found` | The requested favicon could not be found. | +| 404 | `storage_file_not_found` | The requested file could not be found. | +| 404 | `storage_bucket_not_found` | Storage bucket with the requested ID could not be found. | +| 404 | `installation_not_found` | Installation with the requested ID could not be found. Check to see if the ID is correct, or create the installation. | +| 404 | `provider_repository_not_found` | VCS (Version Control System) repository with the requested ID could not be found. Check to see if the ID is correct, and if it belongs to installationId you provided. | +| 404 | `repository_not_found` | Repository with the requested ID could not be found. Check to see if the ID is correct, or create the repository. | +| 404 | `function_not_found` | Function with the requested ID could not be found. | +| 404 | `function_runtime_unsupported` | The requested runtime is either inactive or unsupported. Please check the value of the `_APP_FUNCTIONS_RUNTIMES` environment variable. | +| 404 | `function_runtime_unsupported` | Entrypoint for your Appwrite Function is missing. Please specify it when making deployment or update the entrypoint under your function's "Settings" > "Configuration" > "Entrypoint". | +| 404 | `build_not_found` | Build with the requested ID could not be found. | +| 404 | `deployment_not_found` | Deployment with the requested ID could not be found. | +| 404 | `execution_not_found` | Execution with the requested ID could not be found. | +| 404 | `database_not_found` | Database not found | +| 404 | `collection_not_found` | Collection with the requested ID could not be found. | +| 404 | `document_not_found` | Document with the requested ID could not be found. | +| 404 | `attribute_not_found` | Attribute with the requested ID could not be found. | +| 404 | `index_not_found` | Index with the requested ID could not be found. | +| 404 | `project_not_found` | Project with the requested ID could not be found. Please check the value of the `X-Appwrite-Project` header to ensure the correct project ID is being used. | +| 404 | `router_host_not_found` | Host is not trusted. This could occur because you have not configured a custom domain. Add a custom domain to your project first and try again. | +| 404 | `rule_resource_not_found` | Resource could not be found. Please check if the `resourceId` and `resourceType` are correct, or if the resource actually exists. | +| 404 | `rule_not_found` | Rule with the requested ID could not be found. Please check if the ID provided is correct or if the rule actually exists. | +| 404 | `webhook_not_found` | Webhook with the requested ID could not be found. | +| 404 | `key_not_found` | Key with the requested ID could not be found. | +| 404 | `platform_not_found` | Platform with the requested ID could not be found. | +| 404 | `variable_not_found` | Variable with the requested ID could not be found. | +| 404 | `migration_not_found` | Migration with the requested ID could not be found. Please verify that the provided ID is correct and try again. | +| 405 | `general_not_implemented` | This method was not fully implemented yet. If you believe this is a mistake, please upgrade your Appwrite server version. | +| 409 | `user_already_exists` | A user with the same id, email, or phone already exists in this project. | +| 409 | `user_email_already_exists` | A user with the same email already exists in the current project. | +| 409 | `user_phone_already_exists` | A user with the same phone number already exists in the current project. | +| 409 | `team_invite_already_exists` | User has already been invited or is already a member of this team | +| 409 | `team_already_exists` | Team with requested ID already exists. Please choose a different ID and try again. | +| 409 | `membership_already_confirmed` | Membership is already confirmed. | +| 409 | `storage_file_already_exists` | A storage file with the requested ID already exists. | +| 409 | `storage_bucket_already_exists` | A storage bucket with the requested ID already exists. Try again with a different ID or use `unique()` to generate a unique ID. | +| 409 | `provider_contribution_conflict` | External contribution is already authorized. | +| 409 | `database_already_exists` | Database already exists | +| 409 | `collection_already_exists` | A collection with the requested ID already exists. Try again with a different ID or use `unique()` to generate a unique ID. | +| 409 | `document_already_exists` | Document with the requested ID already exists. Try again with a different ID or use `unique()` to generate a unique ID. | +| 409 | `document_update_conflict` | Remote document is newer than local. | +| 409 | `attribute_already_exists` | Attribute with the requested ID already exists. Try again with a different ID or use `unique()` to generate a unique ID. | +| 409 | `index_already_exists` | Index with the requested ID already exists. Try again with a different ID or use `unique()` to generate a unique ID. | +| 409 | `project_already_exists` | Project with the requested ID already exists. Try again with a different ID or use `unique()` to generate a unique ID. | +| 409 | `rule_already_exists` | Domain is already used. Please try again with a different domain. | +| 409 | `variable_already_exists` | Variable with the same ID already exists in this project. Try again with a different ID. | +| 409 | `migration_already_exists` | Migration with the requested ID already exists. Try again with a different ID. | +| 409 | `migration_in_progress` | Migration is already in progress. You can check the status of the migration in your Appwrite Console's "Settings" > "Migrations". | +| 412 | `user_password_reset_required` | The current user requires a password reset. | +| 412 | `project_provider_disabled` | The chosen OAuth provider is disabled. You can enable the OAuth provider using the Appwrite console. | +| 416 | `storage_invalid_range` | The requested range is not satisfiable. Please check the value of the `Range` header. | +| 424 | `user_oauth2_provider_error` | OAuth2 provider returned some error. | +| 429 | `general_rate_limit_exceeded` | Rate limit for the current endpoint has been exceeded. Please try again after some time. | +| 500 | `general_unknown` | An unknown error has occurred. Please check the logs for more information. | +| 500 | `general_server_error` | An internal server error occurred. | +| 500 | `general_protocol_unsupported` | The request cannot be fulfilled with the current protocol. Please check the value of the `_APP_OPTIONS_FORCE_HTTPS` environment variable. | +| 500 | `general_codes_disabled` | Invitation codes are disabled on this server. Please contact the server administrator. | +| 500 | `router_domain_not_configured` | `_APP_DOMAIN`, `_APP_DOMAIN_TARGET`, and `_APP_DOMAIN_FUNCTIONS` environment variables have not been configured. Please configure the domain environment variables before accessing the Appwrite Console via any IP address or hostname other than localhost. This value could be an IP like 203.0.113.0 or a hostname like example.com. | +| 501 | `general_usage_disabled` | Usage stats is not configured. Please check the value of the `_APP_USAGE_STATS` environment variable of your Appwrite server. | +| 501 | `user_count_exceeded` | The current project has exceeded the maximum number of users. Please check your user limit in the Appwrite console. | +| 501 | `user_auth_method_unsupported` | The requested authentication method is either disabled or unsupported. Please check the supported authentication methods in the Appwrite console. | +| 501 | `project_provider_unsupported` | The chosen OAuth provider is unsupported. Please check the Create OAuth2 Session docs for the complete list of supported OAuth providers. | +| 503 | `general_service_disabled` | The requested service is disabled. You can enable the service from the Appwrite console. | +| 503 | `general_smtp_disabled` | SMTP is disabled on your Appwrite instance. You can learn more about setting up SMTP in our docs. | +| 503 | `general_phone_disabled` | Phone provider is not configured. Please check the `_APP_SMS_PROVIDER` environment variable of your Appwrite server. | \ No newline at end of file diff --git a/src/routes/docs/advanced/self-hosting/environment-variables/+page.markdoc b/src/routes/docs/advanced/self-hosting/environment-variables/+page.markdoc index 9bf2c7abe2..a198bed67b 100644 --- a/src/routes/docs/advanced/self-hosting/environment-variables/+page.markdoc +++ b/src/routes/docs/advanced/self-hosting/environment-variables/+page.markdoc @@ -7,7 +7,7 @@ description: Customize the behavior of your self-hosted Appwrite instance to you Appwrite environment variables allow you to edit your server setup configuration and customize it. You can easily change the environment variables by changing them when running Appwrite using Docker CLI or Docker Compose. -Updating your Appwrite environment variables requires you to edit your Appwrite `.env` file. Your Docker files should be located inside the "appwrite" folder at the location where you first run the Appwrite installation script. It's recommended to use the `.env` file as a central point for updating your Appwrite configuration rather than changing them directly in your `docker-compose.yml` file. +Updating your Appwrite environment variables requires you to edit your Appwrite `.env` file. Your Docker files should be located inside the `appwrite` folder at the location where you first run the Appwrite installation script. It's recommended to use the `.env` file as a central point for updating your Appwrite configuration rather than changing them directly in your `docker-compose.yml` file. After editing your `docker-compose.yml` or `.env` files, you will need to recreate your Appwrite stack by running the following compose command in your terminal: ```bash @@ -33,8 +33,8 @@ docker compose exec appwrite vars | `_APP_CONSOLE_WHITELIST_ROOT`| This option allows you to disable the creation of new users on the Appwrite console. When enabled only 1 user will be able to use the registration form. New users can be added by inviting them to your project. By default this option is enabled. | | `_APP_CONSOLE_WHITELIST_EMAILS` | This option allows you to limit creation of new users on the Appwrite console. This option is very useful for small teams or sole developers. To enable it, pass a list of allowed email addresses separated by a comma. | | `_APP_CONSOLE_WHITELIST_IPS` | This last option allows you to limit creation of users in Appwrite console for users sharing the same set of IP addresses. This option is very useful for team working with a VPN service or a company IP. To enable/activate this option, pass a list of allowed IP addresses separated by a comma. | -| `_APP_SYSTEM_EMAIL_NAME`| This is the sender name value that will appear on email messages sent to developers from the Appwrite console. The default value is: 'Appwrite'. You can use url encoded strings for spaces and special chars. | -| `_APP_SYSTEM_EMAIL_ADDRESS` | This is the sender email address that will appear on email messages sent to developers from the Appwrite console. The default value is 'team@appwrite.io'. You should choose an email address that is allowed to be used from your SMTP server to avoid the server email ending in the users' SPAM folders. | +| `_APP_SYSTEM_EMAIL_NAME`| This is the sender name value that will appear on email messages sent to developers from the Appwrite console. The default value is: 'Appwrite'. You can use URL encoded strings for spaces and special chars. | +| `_APP_SYSTEM_EMAIL_ADDRESS` | This is the sender email address that will appear on email messages sent to developers from the Appwrite console. The default value is `team@appwrite.io`. You should choose an email address that is allowed to be used from your SMTP server to avoid the server email ending in the users' SPAM folders. | | `_APP_SYSTEM_RESPONSE_FORMAT` | Use this environment variable to set the default Appwrite HTTP response format to support an older version of Appwrite. This option is useful to overcome breaking changes between versions. You can also use the `X-Appwrite-Response-Format` HTTP request header to overwrite the response for a specific request. This variable accepts any valid Appwrite version. To use the current version format, leave the value of the variable empty. | | `_APP_SYSTEM_SECURITY_EMAIL_ADDRESS` | This is the email address used to issue SSL certificates for custom domains or the user agent in your webhooks payload. | | `_APP_USAGE_STATS` | This variable allows you to disable the collection and displaying of usage stats. This value is set to 'enabled' by default, to disable the usage stats set the value to 'disabled'. When disabled, it's recommended to turn off the Worker Usage container to reduce resource usage. | diff --git a/src/routes/docs/advanced/self-hosting/production/+page.markdoc b/src/routes/docs/advanced/self-hosting/production/+page.markdoc index 426c013a87..aff7ad9885 100644 --- a/src/routes/docs/advanced/self-hosting/production/+page.markdoc +++ b/src/routes/docs/advanced/self-hosting/production/+page.markdoc @@ -25,7 +25,7 @@ Appwrite provides three different methods to limit access to your Appwrite Conso 1. Whitelist a group of developers by IP using the `_APP_CONSOLE_WHITELIST_IPS` environment variable. 2. Whitelist a group of developers by email using the `_APP_CONSOLE_WHITELIST_EMAILS` environment variable. -3. Only the root user can signup. All other developers must be added through invitations. This is configured using the `_APP_CONSOLE_WHITELIST_ROOT` environment variable. +3. Only the root user can sign up. All other developers must be added through invitations. This is configured using the `_APP_CONSOLE_WHITELIST_ROOT` environment variable. By default, only the first user can sign up on the Appwrite instance's dashboard. All other users must be added to the dashboard through invitation. diff --git a/src/routes/docs/apis/realtime/+page.markdoc b/src/routes/docs/apis/realtime/+page.markdoc index 0235a8e338..f855c23e56 100644 --- a/src/routes/docs/apis/realtime/+page.markdoc +++ b/src/routes/docs/apis/realtime/+page.markdoc @@ -109,7 +109,7 @@ More information and examples of authenticating users can be found in the dedica # Examples {% #examples %} The examples below will show you how you can use Realtime in various ways. -## Subscribe to a Channel {% #subscribe-to-a-channel %} +## Subscribe to a channel {% #subscribe-to-a-channel %} In this example we are subscribing to all updates related to our account by using the `account` channel. This will be triggered by any update related to the authenticated user, like updating the user's name or e-mail address. {% multicode %} @@ -177,7 +177,7 @@ val subscription = realtime.subscribe("account") { {% /multicode %} -## Subscribe to Multiple Channels {% #subscribe-to-multiple-channel %} +## Subscribe to multiple channels {% #subscribe-to-multiple-channel %} You can also listen to multiple channels at once by passing an array of channels. This will trigger the callback for any events for all channels passed. diff --git a/src/routes/docs/products/auth/accounts/+page.markdoc b/src/routes/docs/products/auth/accounts/+page.markdoc index 27d4265439..d78b0ff6ad 100644 --- a/src/routes/docs/products/auth/accounts/+page.markdoc +++ b/src/routes/docs/products/auth/accounts/+page.markdoc @@ -1,23 +1,23 @@ --- layout: article title: Accounts -description: Unlock advanced user management - Appwrite's Account API for seamless signups, store user preferences, and dynamic permissions. +description: Unlock advanced user management - Appwrite's Account API for seamless sign ups, store user preferences, and dynamic permissions. --- -Appwrite Account API is used for user signup and login in client applications. +Appwrite Account API is used for user sign up and login in client applications. Users can be organized into teams and be given labels, so they can be given different permissions and access different resources. Each user's account can also have their own preference object, which you can use to save preferences such as theme, language, and notification settings. {% partial file="account-vs-user.md" /%} -# Signup and login {% #signup-login %} +# Sign up and login {% #sign up-login %} -You can signup and login a user with an account create through +You can sign up and login a user with an account create through [email password](/docs/products/auth/email-password), [phone (SMS)](/docs/products/auth/phone-sms), [Anonymous](/docs/products/auth/anonymous), [magic URL](/docs/products/auth/magic-url), and -[OAuth 2](/docs/products/auth/oauth2) +[OAuth2](/docs/products/auth/oauth2) authentication. # Preferences {% #preferences %} diff --git a/src/routes/docs/products/auth/email-password/+page.markdoc b/src/routes/docs/products/auth/email-password/+page.markdoc index 2ae01695ff..c2d048ea62 100644 --- a/src/routes/docs/products/auth/email-password/+page.markdoc +++ b/src/routes/docs/products/auth/email-password/+page.markdoc @@ -6,7 +6,7 @@ description: Implement email and password authentication with Appwrite. Securely Email and password login is the most commonly used authentication method. Appwrite Authentication promotes a safer internet by providing secure APIs and promoting better password choices to end users. Appwrite supports added security features like blocking personal info in passwords, password dictionary, and password history to help users choose good passwords. -# Signup {% #sign-up %} +# Sign up {% #sign-up %} You can use the Appwrite Client SDKs to create an account using email and password. @@ -56,7 +56,7 @@ promise.then(function (response) { Next, implement the verification page in your app. This page will parse the secrets passed in through the `userId` and `secret` query parameters. In this example, the code below will be found in the page served at `https://example.com/verify`. -Since the secrets are passed in through url params, it will be easiest to perform this step in the browser. +Since the secrets are passed in through URL params, it will be easiest to perform this step in the browser. ```js import { Client, Account } from "appwrite"; @@ -102,7 +102,7 @@ promise.then(function (response) { }); ``` -# Password Recovery {% #password-recovery %} +# Password recovery {% #password-recovery %} If a user forgets their password, they can initiate a password recovery flow to recover their password. The Create Password Recovery endpoint sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link, they are redirected back to the password reset URL with the secret key and email address values attached to the URL as query strings. diff --git a/src/routes/docs/products/auth/jwt/+page.markdoc b/src/routes/docs/products/auth/jwt/+page.markdoc index 24f1a181b1..0048e77c34 100644 --- a/src/routes/docs/products/auth/jwt/+page.markdoc +++ b/src/routes/docs/products/auth/jwt/+page.markdoc @@ -8,13 +8,13 @@ You can extend Appwrite's APIs by building backend apps using [Server SDKs](/doc If you are already authenticated on your client-side app and need your backend app to **act on behalf of the user**, this guide will walk you through the process. -# Proof of Identity {% #proof-of-identity %} +# Proof of identity {% #proof-of-identity %} Before making requests to your backend APIs, your client application needs to first create a session **directly with Appwrite** using the account service. This session will act like an ID card for the user and can be used to access resources in Appwrite. The client will **only receive information accessible to the user** based on the resources' [permissions](/docs/advanced/platform/permissions). When you build backend APIs to extend Appwrite's functionality, these APIs should still **respect access permissions** to keep user data secure. Appwrite's backend SDKs allow you to securely act on behalf of a user with the same permissions by using JWT authentication. -# JWT Authentication {% #jwt %} +# JWT authentication {% #jwt %} [JSON Web Tokens](https://jwt.io/introduction) (JWTs) are a secure means to transfer information or claims between two parties. JWTs act like temporary copies of the user's ID card that allow Appwrite's Server SDKs to access information on behalf of a user. @@ -169,9 +169,9 @@ var client = new Client() {% /multicode %} -# When should I use JWTs? {% #when-to-use %} +# When to use JWT authentication? {% #when-to-use %} -JWT auth is useful when you need your backend app's Server SDK to be restricted by the same set of permissions. +JWT authentication is useful when you need your backend app's Server SDK to be restricted by the same set of permissions. If your backend app's Server SDK is using an [API key](/docs/advanced/platform/api-keys), it will fetch **all resources** regardless of permissions. This means the Server SDK might fetch files and documents your user should not be able to see, which is not helpful when you need to act on behalf of a user. diff --git a/src/routes/docs/products/auth/oauth2/+page.markdoc b/src/routes/docs/products/auth/oauth2/+page.markdoc index d984076d17..114db43f4e 100644 --- a/src/routes/docs/products/auth/oauth2/+page.markdoc +++ b/src/routes/docs/products/auth/oauth2/+page.markdoc @@ -1,28 +1,28 @@ --- layout: article -title: OAuth 2 login +title: OAuth2 login description: Integrate OAuth2 authentication seamlessly with Appwrite. Learn how to connect your application with third-party OAuth2 providers for secure user login and access. --- OAuth authentication allows users to log in using accounts from other popular services. This can be convenient for users because they can start using your app without creating a new account. It can also be more secure, because the user has one less password that could become vulnerable. -When using OAuth to authenticate, the authentication request is initiated from the client application. The user is then redirected to an OAuth 2 provider to complete the authentication step, and finally, the user is redirected back to the client application. +When using OAuth to authenticate, the authentication request is initiated from the client application. The user is then redirected to an OAuth2 provider to complete the authentication step, and finally, the user is redirected back to the client application. -# Configure OAuth 2 login {% #configure %} +# Configure OAuth2 login {% #configure %} -Before using OAuth 2 login, you need to enable and configure an OAuth 2 login provider. +Before using OAuth2 login, you need to enable and configure an OAuth2 login provider. 1. Navigate to your Appwrite project. 2. Navigate to **Auth** > **Settings**. 3. Find and open the OAuth provider. -4. In the OAuth 2 settings modal, use the toggle to enable the provider. -5. Create and OAuth 2 app on the provider's developer platform. +4. In the OAuth2 settings modal, use the toggle to enable the provider. +5. Create and OAuth2 app on the provider's developer platform. 6. Copy information from your OAuth2 provider's developer platform to fill the **OAuth2 Settings** modal in the Appwrite Console. -7. Configure redirect URL in your OAuth 2 provider's developer platform. Set it to URL provided to you by **OAuth2 Settings** modal in Appwrite Console. +7. Configure redirect URL in your OAuth2 provider's developer platform. Set it to URL provided to you by **OAuth2 Settings** modal in Appwrite Console. -# Initialize OAuth 2 login {% #init %} +# Initialize OAuth2 login {% #init %} -To initialize the OAuth 2 login process, use the [Create OAuth 2 Session](/docs/references/cloud/client-web/account#createOAuth2Session) route. +To initialize the OAuth2 login process, use the [Create OAuth2 Session](/docs/references/cloud/client-web/account#createOAuth2Session) route. {% tabs %} {% tabsitem #js title="Javascript" %} @@ -131,15 +131,15 @@ try await account.createOAuth2Session(provider: "amazon") {% /tabsitem %} {% /tabs %} -You'll be redirected to the OAuth 2 provider's login page to log in. Once complete, your user will be redirected back to your app. +You'll be redirected to the OAuth2 provider's login page to log in. Once complete, your user will be redirected back to your app. You can optionally configure `success` or `failure` redirect links on web to handle success and failure scenarios. -# OAuth 2 profile {% #profile %} +# OAuth2 profile {% #profile %} -After authenticating a user through their OAuth 2 provider, you can fetch their profile information such as their avatar image or name. To do this you can use the access token from the OAuth 2 provider and make API calls to the provider. +After authenticating a user through their OAuth2 provider, you can fetch their profile information such as their avatar image or name. To do this you can use the access token from the OAuth2 provider and make API calls to the provider. -After creating an OAuth 2 session, you can fetch the session to get information about the provider. +After creating an OAuth2 session, you can fetch the session to get information about the provider. {% multicode %} ```js @@ -221,20 +221,20 @@ print(session.providerAccessToken); {% /multicode %} -An OAuth 2 [session](/docs/references/cloud/models/session) will have the following attributes. +An OAuth2 [session](/docs/references/cloud/models/session) will have the following attributes. | Property | Description | | -------------------------- | --------------------------------------------------------------------------------------------------------- | | provider | The OAuth2 Provider. | -| providerUid | User ID from the OAuth 2 Provider. | -| providerAccessToken | Access token from the OAuth 2 provider. Use this to **make requests to the OAuth 2 provider** to fetch personal data. | +| providerUid | User ID from the OAuth2 Provider. | +| providerAccessToken | Access token from the OAuth2 provider. Use this to **make requests to the OAuth2 provider** to fetch personal data. | | providerAccessTokenExpiry | Check this value to know if an access token is about to expire. | -You can use the `providerAccessToken` to make requests to your OAuth 2 provider. Refer to the docs for the OAuth 2 provider you're using to learn about making API calls with the access token. +You can use the `providerAccessToken` to make requests to your OAuth2 provider. Refer to the docs for the OAuth2 provider you're using to learn about making API calls with the access token. -# OAuth 2 profile {% #profile %} +# OAuth2 profile {% #profile %} -OAuth 2 sessions expire to protect from security risks. OAuth 2 sessions should be refreshed periodically, so access tokens don't expire. Check value of `providerAccessTokenExpiry` to know if the token is expired or is about to expire. Refreshing before every request might cause rate limit problems. You can do this by calling the [Update OAuth Session](/docs/references/cloud/client-web/account#updateSession) endpoint when ever your user visits your app. +OAuth2 sessions expire to protect from security risks. OAuth2 sessions should be refreshed periodically, so access tokens don't expire. Check value of `providerAccessTokenExpiry` to know if the token is expired or is about to expire. Refreshing before every request might cause rate limit problems. You can do this by calling the [Update OAuth Session](/docs/references/cloud/client-web/account#updateSession) endpoint when ever your user visits your app. {% multicode %} ```js @@ -294,5 +294,5 @@ let session = try await account.updateSession( {% /multicode %} {% info title="GraphQL" %} -OAuth 2 is not available through the GraphQL API. You can use the REST API or any Client SDK instead. +OAuth2 is not available through the GraphQL API. You can use the REST API or any Client SDK instead. {% /info %} \ No newline at end of file diff --git a/src/routes/docs/products/auth/quick-start/+page.markdoc b/src/routes/docs/products/auth/quick-start/+page.markdoc index 341767b3ed..44f7a916a8 100644 --- a/src/routes/docs/products/auth/quick-start/+page.markdoc +++ b/src/routes/docs/products/auth/quick-start/+page.markdoc @@ -1,10 +1,10 @@ --- layout: article title: Start with Authentication -description: Effortlessly add authentication to your apps - simple signup & login in just minutes with Appwrite Authentication +description: Effortlessly add authentication to your apps - simple sign up & login in just minutes with Appwrite Authentication --- You can get up and running with Appwrite Authentication in minutes. -Adding signup and login is as simple as this. +Adding sign up and login is as simple as this. # Sign up {% #sign-up %} @@ -169,11 +169,11 @@ mutation { {% /multicode %} # More ways to authenticate {% #more-ways-to-authenticate %} -You can signup and login a user with an account create through +You can sign up and login a user with an account create through [email password](/docs/products/auth/email-password), [phone (SMS)](/docs/products/auth/phone-sms), [Anonymous](/docs/products/auth/anonymous) [magic URL](/docs/products/auth/magic-url), and -[OAuth 2](/docs/products/auth/oauth2) +[OAuth2](/docs/products/auth/oauth2) authentication. diff --git a/src/routes/docs/products/auth/security/+page.markdoc b/src/routes/docs/products/auth/security/+page.markdoc index 4d9a3e0b3d..5681765b7c 100644 --- a/src/routes/docs/products/auth/security/+page.markdoc +++ b/src/routes/docs/products/auth/security/+page.markdoc @@ -17,7 +17,7 @@ Only keep user sessions active as long as needed and maintain exactly **one** in | {% width=70 %} | Framework {% width=120 %} | Storage method | |:----------------------------------------------------------------------------------------------------:|:---:|:----------------------------------------------------------------------------------------------------------------------:| | {% only_dark %}{% icon_image src="/images/platforms/dark/javascript.svg" alt="Javascript logo" size="m" /%}{% /only_dark %}{% only_light %}{% icon_image src="/images/platforms/javascript.svg" alt="Javascript logo" size="m" /%}{% /only_light %} | Web | Uses a secure session cookie and falls back to local storage when a session cookie is not available. | -| {% only_dark %}{% icon_image src="/images/platforms/dark/flutter.svg" alt="Javascript logo" size="m" /%}{% /only_dark %}{% only_light %}{% icon_image src="/images/platforms/flutter.svg" alt="Javascript logo" size="m" /%}{% /only_light %} | Flutter | Uses a session cookie stored in Application Documents through the **path_provider** package. | +| {% only_dark %}{% icon_image src="/images/platforms/dark/flutter.svg" alt="Javascript logo" size="m" /%}{% /only_dark %}{% only_light %}{% icon_image src="/images/platforms/flutter.svg" alt="Javascript logo" size="m" /%}{% /only_light %} | Flutter | Uses a session cookie stored in Application Documents through the `path_provider` package. | | {% only_dark %}{% icon_image src="/images/platforms/dark/apple.svg" alt="Javascript logo" size="m" /%}{% /only_dark %}{% only_light %}{% icon_image src="/images/platforms/apple.svg" alt="Javascript logo" size="m" /%}{% /only_light %} | Apple | Uses a session cookie stored in **UserDefaults**. | | {% only_dark %}{% icon_image src="/images/platforms/dark/android.svg" alt="Javascript logo" size="m" /%}{% /only_dark %}{% only_light %}{% icon_image src="/images/platforms/android.svg" alt="Javascript logo" size="m" /%}{% /only_light %} | Android | Uses a session cookie stored in **SharedPreferences**. | diff --git a/src/routes/docs/products/databases/collections/+page.markdoc b/src/routes/docs/products/databases/collections/+page.markdoc index 78c79e1392..036a80fcb7 100644 --- a/src/routes/docs/products/databases/collections/+page.markdoc +++ b/src/routes/docs/products/databases/collections/+page.markdoc @@ -228,7 +228,7 @@ You can also configure **permissions** in the `createCollection` method, learn m # Permissions {% #permissions %} Appwrite uses permissions to control data access. For security, only users that are granted permissions can access a resource. -This helps prevent accidental data leaks by forcing you to make more concious decisions around permissions. +This helps prevent accidental data leaks by forcing you to make more conscious decisions around permissions. By default, Appwrite doesn't grant permissions to any users when a new collection is created. This means users can't create new documents or read, update, and delete existing documents. diff --git a/src/routes/docs/products/databases/databases/+page.markdoc b/src/routes/docs/products/databases/databases/+page.markdoc index a24cebefbb..f9f41866b2 100644 --- a/src/routes/docs/products/databases/databases/+page.markdoc +++ b/src/routes/docs/products/databases/databases/+page.markdoc @@ -7,13 +7,13 @@ Databases are the largest organizational unit in Appwrite. Each database contains a group [collections](/docs/products/databases/collections). In future versions, different databases may be backed by a different database technology of your choosing. -# Create in Console {% #create-in-console %} +# Create in Appwrite Console {% #create-in-console %} The easiest way to create a database using the Appwrite Console. You can create a database by navigating to the **Databases** page and clicking **Create database**. -# Create using Server SDKs {% #create-using-server-sdks %} +# Create using server SDKs {% #create-using-server-sdks %} You can programmatically create databases using a [Server SDK](/docs/sdks#server). Appwrite [Server SDKs](/docs/sdks#server) require an [API key](/docs/advanced/platform/api-keys). {% multicode %} diff --git a/src/routes/docs/products/databases/relationships/+page.markdoc b/src/routes/docs/products/databases/relationships/+page.markdoc index 7f403968f6..217d77f7b5 100644 --- a/src/routes/docs/products/databases/relationships/+page.markdoc +++ b/src/routes/docs/products/databases/relationships/+page.markdoc @@ -13,7 +13,7 @@ These types of association between entities can be modeled in Appwrite using rel Appwrite Relationships is an experimental feature. The API and behavior are subject to change in future versions. {% /info %} -# Relationship Attributes {% #relationship-attributes %} +# Relationship attributes {% #relationship-attributes %} Relationships are represented in a collection using **relationship attributes**. The relationship attribute contains the ID of related documents, which it references during read, update, and delete operations. @@ -512,7 +512,7 @@ databases.createDocument( # Queries {% #queries %} Queries are currently not available in the experimental version of Appwrite Relationships but will be added in a later version. -# Update Relationships {% #update %} +# Update relationships {% #update %} Relationships can be updated by updating the relationship attribute. {% multicode %} diff --git a/src/routes/docs/products/functions/deployment/+page.markdoc b/src/routes/docs/products/functions/deployment/+page.markdoc index 1abd0cec8f..98f1d6581f 100644 --- a/src/routes/docs/products/functions/deployment/+page.markdoc +++ b/src/routes/docs/products/functions/deployment/+page.markdoc @@ -21,7 +21,7 @@ The recommended way to manage your Appwrite Function deployments is to use a ver ## Create function {% #create-function %} -Before deploying your function with Git, create a new function attached to your Git repo. +Before deploying your function with Git, create a new function attached to your Git repository. 1. Navigate to **Functions** from the side bar of the Appwrite Console. 2. Click **Create function**. @@ -63,7 +63,7 @@ appwrite deploy function If you made changes in the Appwrite Console that are different from your `appwrite.json`, using the CLI deploy command will overwrite your console changes. Update your `appwrite.json` manually before deploying. -# Manual Deployment {% #manual %} +# Manual deployment {% #manual %} You can upload your functions to be deployed using the Appwrite Console. The example below shows a simple Node.js function. @@ -113,7 +113,7 @@ To find or add a domain: DNS records can take up to 48 hours to propagate. -# Debugging Build {% #debugging %} +# Debugging build {% #debugging %} After deploying a function, you can find the status and build logs in the Appwrite Console. @@ -122,7 +122,7 @@ After deploying a function, you can find the status and build logs in the Appwri 3. Under the **Deployments** tab, find the status of the current and previous deployments. 4. Access build logs by clicking the **Build logs** button. -# Redeploy Builds {% #redeploy %} +# Redeploy builds {% #redeploy %} After updating the configuration, redeploy your function for changes to take effect. You can also redeploy to retry failed builds. diff --git a/src/routes/docs/products/functions/development/+page.markdoc b/src/routes/docs/products/functions/development/+page.markdoc index 3de8d1f803..7f5c28ef63 100644 --- a/src/routes/docs/products/functions/development/+page.markdoc +++ b/src/routes/docs/products/functions/development/+page.markdoc @@ -420,7 +420,7 @@ You'll find these properties in the context object. | req | Contains request information like method, body, and headers. See full examples [in the request section](#request). | | res | Contains methods to build a response and return information. See full examples [in the response section](#response). | | log() | Method to log information to the Appwrite Console, end users will not be able to see these logs. See full examples [in the logging section](#logging). | -| error() | Methoc to log errors to the Appwrite Console, end users will not be able to see these errors. See full examples [in the logging section](#logging). | +| error() | Method to log errors to the Appwrite Console, end users will not be able to see these errors. See full examples [in the logging section](#logging). | ### Destructuring assignment {% #destructuring %} Some languages, namely JavaScript, support destructuring. diff --git a/src/routes/docs/products/functions/quick-start/+page.markdoc b/src/routes/docs/products/functions/quick-start/+page.markdoc index afff98e8c1..510060d8e8 100644 --- a/src/routes/docs/products/functions/quick-start/+page.markdoc +++ b/src/routes/docs/products/functions/quick-start/+page.markdoc @@ -3,36 +3,40 @@ layout: article title: Start with Functions description: Get started quickly with Appwrite Functions. Follow a step-by-step guide to create your first serverless function, define triggers, and execute code. --- + You can create and execute your first Appwrite Function in minutes. -# Create function {% #create-function %} +# Create function {% #create-function %} Before deploying your function with Git, create a new function attached to your Git repository. {% only_dark %} ![Create function screen](/images/docs/functions/quick-start/dark/create-function.png) {% /only_dark %} + {% only_light %} ![Create function screen](/images/docs/functions/quick-start/create-function.png) {% /only_light %} 1. In the Appwrite Console's sidebar, click **Functions**. -2. Click **Create function**. -3. Under **Connect Git repository**, select your provider. -4. After connecting to GitHub, under **Quick start**, select a starter template. -5. Follow the step-by-step wizard and create the function. -6. The function will be created and a build will begin. Once the build completes, you'll have created your first function. +1. Click **Create function**. +1. Under **Connect Git repository**, select your provider. +1. After connecting to GitHub, under **Quick start**, select a starter template. +1. Follow the step-by-step wizard and create the function. +1. The function will be created and a build will begin. Once the build completes, you'll have created your first function. + +You can find the code used by the starter template in your newly created Git repository. +Each push to your Git repository will trigger a new deployment. -You can find the code used by the starter template in your newly created Git repository. -Each push to your Git repo will trigger a new deployment. +## Execute {% #execute %} -## Execute {% #execute %} You can execute your Appwrite Function through [many different triggers](/docs/products/functions/execution). The easiest way to execute your first function is to use the Appwrite Console. {% only_dark %} ![Execution-screen](/images/docs/functions/quick-start/dark/function-execution.png) {% /only_dark %} + {% only_light %} ![Execution-screen](/images/docs/functions/quick-start/function-execution.png) {% /only_light %} @@ -42,16 +46,16 @@ The easiest way to execute your first function is to use the Appwrite Console. 1. Click **Execute** to execute the starter template function. 1. Wait for the execution to be marked **completed** and click to view the execution logs. - # Explore {% #explore %} + Use this your first function as a springboard to explore the flexible and powerful features of Appwrite Functions. -| Explore | | -|-------------------------------------------------------------------------|----------------------------------------------------| -| [Develop](/docs/products/functions/development) | Learn about how to parse request, build responses, and log to Console in Appwrite Functions. | -| [Response](/docs/products/functions/development#response) | Learn about function response types, like text, json, html, redirect, and empty responses.| -| [Deploy](/docs/products/functions/deployment) | Learn to deploy Appwrite Functions from Git, the CLI, or manual uploads. | -| [Execute](/docs/products/functions/execution) | Appwrite functions can be executed in a variety of ways, like SDK, domains, schedules, events, and more. Learn about executions. | -| [Domains](/docs/products/functions/execution#domains) | Each Appwrite Function can be executed through it's own domain, generated or custom. Learn about domains. | -| [Runtime](/docs/products/functions/runtimes) | Appwrite supports over a dozen runtimes to meet your preferences. Learn about runtimes. | -| [Examples](/docs/products/functions/examples) | Enjoy learning from examples? Checkout these examples functions. | +| Explore | | +| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| [Develop](/docs/products/functions/development) | Learn about how to parse request, build responses, and log to Console in Appwrite Functions. | +| [Response](/docs/products/functions/development#response) | Learn about function response types, like text, JSON, HTML, redirect, and empty responses. | +| [Deploy](/docs/products/functions/deployment) | Learn to deploy Appwrite Functions from Git, the CLI, or manual uploads. | +| [Execute](/docs/products/functions/execution) | Appwrite functions can be executed in a variety of ways, like SDK, domains, schedules, events, and more. Learn about executions. | +| [Domains](/docs/products/functions/execution#domains) | Each Appwrite Function can be executed through it's own domain, generated or custom. Learn about domains. | +| [Runtime](/docs/products/functions/runtimes) | Appwrite supports over a dozen runtimes to meet your preferences. Learn about runtimes. | +| [Examples](/docs/products/functions/examples) | Enjoy learning from examples? Checkout these examples functions. | diff --git a/src/routes/docs/products/storage/buckets/+page.markdoc b/src/routes/docs/products/storage/buckets/+page.markdoc index aefb8d4082..3e5d32a9fc 100644 --- a/src/routes/docs/products/storage/buckets/+page.markdoc +++ b/src/routes/docs/products/storage/buckets/+page.markdoc @@ -7,7 +7,7 @@ description: Organize and manage your files effectively with Appwrite Storage Bu Storage buckets are a group of files, similar to collections in Appwrite Databases. Buckets let you limit file size and extensions, whether or not to encrypt the files, and more. -# Create Bucket {% #create-bucket %} +# Create bucket {% #create-bucket %} You can create your bucket from the Appwrite Console or a [Server SDK](/docs/sdks#server). {% tabs %} @@ -231,7 +231,7 @@ This means users can't create new files or read, update, and delete existing fil [Learn about configuring permissions](/docs/products/storage/permissions). -# Encrption {% #encryption %} +# Encryption {% #encryption %} Appwrite provides added security settings for your buckets. Enable encryption under your bucket's **Settings** > **Security settings**. You can enable encryption to encrypt files in your buckets. If your files are leaked, encrypted files cannot be read by the malicious actor. Files bigger than 20MB cannot be encrypted. diff --git a/src/routes/docs/products/storage/upload-download/+page.markdoc b/src/routes/docs/products/storage/upload-download/+page.markdoc index 7131a8e2d4..deb8447434 100644 --- a/src/routes/docs/products/storage/upload-download/+page.markdoc +++ b/src/routes/docs/products/storage/upload-download/+page.markdoc @@ -127,7 +127,7 @@ When you are trying to upload any files above 5MB, you will need to upload them If you're using an Appwrite SDK, this is handled automatically. If you're not using an SDK, you can [learn more about REST API file handling](/docs/apis/rest#files). -# InputFile {% #input-file %} +# Input file {% #input-file %} Every language and platform handles file inputs differently. This section documents the expected input type of each SDK. Where applicable, Appwrite provides an `InputFile` class to accept multiple file sources, like paths, buffers, streams, or plain text. # Client SDKs {% #client-sdks %} @@ -489,7 +489,7 @@ class MainActivity : AppCompatActivity() { ``` {% /multicode %} -# Get File {% #get-file %} +# Get file {% #get-file %} To get a file, use the `getFile` method. {% multicode %} @@ -598,7 +598,7 @@ class MainActivity : AppCompatActivity() { ``` {% /multicode %} -# Get File Preview {% #get-file-preview %} +# Get file preview {% #get-file-preview %} To get a file preview image , use the `getFilePreview` method. {% multicode %} @@ -703,7 +703,7 @@ class MainActivity : AppCompatActivity() { ``` {% /multicode %} -# View File {% #view-file%} +# View file {% #view-file%} To view a file, use the `getFileView` method. diff --git a/src/routes/docs/quick-starts/android/+page.markdoc b/src/routes/docs/quick-starts/android/+page.markdoc index 35b2b9ccb7..97d6f72901 100644 --- a/src/routes/docs/quick-starts/android/+page.markdoc +++ b/src/routes/docs/quick-starts/android/+page.markdoc @@ -32,7 +32,7 @@ If this is your first time using Appwrite, create an account and create your fir Then, under **Add a platform**, add an **Android app**. -Add your app's **name** and **package name**, your package name is the one entered when creating an Android project. For existing projects, you should use the **applicationId** in your app-level [build.gradle](https://github.com/appwrite/playground-for-android/blob/master/app/build.gradle#L11) file. +Add your app's **name** and **package name**, your package name is the one entered when creating an Android project. For existing projects, you should use the `applicationId` in your app-level [build.gradle](https://github.com/appwrite/playground-for-android/blob/master/app/build.gradle#L11) file. {% only_dark %} ![Add a platform](/images/docs/quick-starts/dark/add-platform.png) @@ -46,7 +46,7 @@ You can skip optional steps. {% /section %} {% section #step-3 step=3 title="Add the Appwrite SDK" %} -To add the Appwrite SDK for Android as a dependency, add the following to your app-level **build.gradle.kts** file inside the **dependencies** block. +To add the Appwrite SDK for Android as a dependency, add the following to your app-level `build.gradle.kts` file inside the **dependencies** block. ```kotlin implementation("io.appwrite:sdk-for-android:4.0.0") diff --git a/src/routes/docs/quick-starts/flutter/+page.markdoc b/src/routes/docs/quick-starts/flutter/+page.markdoc index 1cd81e991d..681ecef31c 100644 --- a/src/routes/docs/quick-starts/flutter/+page.markdoc +++ b/src/routes/docs/quick-starts/flutter/+page.markdoc @@ -29,13 +29,13 @@ Head to the [Appwrite Console](https://cloud.appwrite.io/console). If this is your first time using Appwrite, create an account and create your first project. -Then, under **Add a platform**, add a **Flutter app**. You can choose between many different platfroms. +Then, under **Add a platform**, add a **Flutter app**. You can choose between many different platforms. {% tabs %} {% tabsitem #web title="Web" %} Add your app **name** and **Hostname**. If you're testing your app locally, **Hostname** should be `localhost`. -For web, in order to capture the OAuth2 callback URL and send it to the application using JavaScript `postMessage()`, you need to create an html file inside `./web` folder of your Flutter project. For example `auth.html` with the following content. +For web, in order to capture the OAuth2 callback URL and send it to the application using JavaScript `postMessage()`, you need to create an HTML file inside `./web` folder of your Flutter project. For example `auth.html` with the following content. ```html @@ -63,21 +63,21 @@ In production, Appwrite allows you to set multiple [custom-domains](/docs/advanc {% tabsitem #ios title="iOS" %} -Add your app **name** and **Bundle ID**. You can find your **Bundle Identifier** in the **General** tab for your app's primary target in XCode. +Add your app **name** and **Bundle ID**. You can find your **Bundle Identifier** in the **General** tab for your app's primary target in Xcode. The Appwrite SDK uses `ASWebAuthenticationSession` on iOS 12+ and `SFAuthenticationSession` on iOS 11 to allow OAuth authentication. You have to change your iOS Deployment Target in Xcode to be iOS >= 11 to be able to build your app on an emulator or a real device. -1. In **XCode**, open `Runner.xcworkspace` in your app's iOS folder. -2. To view your app's settings, select the Runner project in the XCode project navigator. Then, in the main view sidebar, select the **Runner target**. +1. In **Xcode**, open `Runner.xcworkspace` in your app's iOS folder. +2. To view your app's settings, select the Runner project in the Xcode project navigator. Then, in the main view sidebar, select the **Runner target**. 3. Select the **General** tab. 4. In **Deployment Info** > **Target**, select iOS 11.0 or above {% /tabsitem %} {% tabsitem #android title="Android" %} -Add your app's **name** and **package name**, Your package name is generally the **applicationId** in your app-level [build.gradle](https://github.com/appwrite/playground-for-flutter/blob/master/android/app/build.gradle#L41) file. +Add your app's **name** and **package name**, Your package name is generally the `applicationId` in your app-level [build.gradle](https://github.com/appwrite/playground-for-flutter/blob/master/android/app/build.gradle#L41) file. -In order to capture the Appwrite OAuth callback url, the following activity needs to be added inside the `` tag, along side the existing `` tags in your [AndroidManifest.xml](https://github.com/appwrite/playground-for-flutter/blob/master/android/app/src/main/AndroidManifest.xml). +In order to capture the Appwrite OAuth callback URL, the following activity needs to be added inside the `` tag, along side the existing `` tags in your [AndroidManifest.xml](https://github.com/appwrite/playground-for-flutter/blob/master/android/app/src/main/AndroidManifest.xml). Be sure to replace the **[PROJECT_ID]** string with your actual Appwrite project ID. You can find your Appwrite project ID in you project settings screen in your Appwrite Console. @@ -111,11 +111,11 @@ You should get the application ID needed to add in the received error message. {% tabsitem #macos title="macOS" %} -Add your app **name** and **Bundle ID**. You can find your **Bundle Identifier** in the **General** tab for your app's primary target in XCode. +Add your app **name** and **Bundle ID**. You can find your **Bundle Identifier** in the **General** tab for your app's primary target in Xcode. -The Appwrite SDK uses `ASWebAuthenticationSession` on macOS 10.15+ to allow OAuth authentication. You have to change your macOS **Deployment Target** in XCode to be macOS >= 10.15 to be able to build your app for macOS. +The Appwrite SDK uses `ASWebAuthenticationSession` on macOS 10.15+ to allow OAuth authentication. You have to change your macOS **Deployment Target** in Xcode to be macOS >= 10.15 to be able to build your app for macOS. -In order to capture the Appwrite OAuth 2 callback url, the following URL scheme needs to added to your `Info.plist`. +In order to capture the Appwrite OAuth2 callback URL, the following URL scheme needs to added to your `Info.plist`. ```xml CFBundleURLTypes @@ -197,9 +197,10 @@ void main() { {% /section %} {% section #step-5 step=5 title="Create a login page" %} Then, append the following widgets to `lib/main.dart` create your login page. -import 'package:appwrite/appwrite.dart'; ```dart +import 'package:appwrite/appwrite.dart'; + class MyForm extends StatefulWidget { final Account account; diff --git a/src/routes/docs/references/+page.markdoc b/src/routes/docs/references/+page.markdoc index c7f75eff9d..95dc01f184 100644 --- a/src/routes/docs/references/+page.markdoc +++ b/src/routes/docs/references/+page.markdoc @@ -5,7 +5,7 @@ description: Complete API references for Appwrite SDK, REST, and GraphQL APIs. L --- Appwrite lets you build integrations on web, mobile, native, and server platforms through a set of APIs. You can use one of our many [SDKs](/docs/sdks) or integrate directly through the [REST API](/docs/apis/rest) or [GraphQL API](/docs/apis/graphql). -## Client vs Server APIs {% #client-vs-server %} +## Client vs server APIs {% #client-vs-server %} Client APIs and SDKs are for integrating with Appwrite to build client-based applications and websites. Client APIs only give access to resources if users have been [granted permissions](/docs/advanced/platform/permissions). @@ -15,7 +15,7 @@ Server APIs are constrained by an [API key's](/docs/advanced/platform/api-keys) ## APIs {% #api %} Before using the Appwrite APIs, in the **Settings** of your Appwrite project, obtain your **API endpoint** and **Project ID**. -Client APIs require an active session, created from [signing up and logging in](/docs/products/auth/accounts#signup-login). +Client APIs require an active session, created from [signing up and logging in](/docs/products/auth/accounts#sign up-login). Server APIs require [API keys](/docs/advanced/platform/api-keys). @@ -28,7 +28,7 @@ Server APIs require [API keys](/docs/advanced/platform/api-keys). {% cards %} {% cards_item href="/docs/references/cloud/client-web/account" title="Account" %} -Add signup, login, logout, and other common authentication methods to client apps. +Add sign up, login, logout, and other common authentication methods to client apps. {% /cards_item %} {% cards_item href="/docs/references/cloud/server-nodejs/users" title="Users" %} Manage users from an admin scope to build server integrations. diff --git a/src/routes/docs/references/[version]/[platform]/[service]/descriptions/locale.md b/src/routes/docs/references/[version]/[platform]/[service]/descriptions/locale.md index bd373a0938..bcb7780226 100644 --- a/src/routes/docs/references/[version]/[platform]/[service]/descriptions/locale.md +++ b/src/routes/docs/references/[version]/[platform]/[service]/descriptions/locale.md @@ -1,3 +1,3 @@ The Locale service allows you to customize your app based on your users' location. Using this service, you can get your users' location, IP address, list of countries and continents names, phone codes, currencies, and more. Country codes returned follow the [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1) standard. -The user service supports multiple locales. This feature allows you to fetch countries and continents information in your app language. To switch locales, all you need to do is pass the 'X-Appwrite-Locale' header or set the 'setLocale' method using any of our available SDKs. [View here the list of available locales](https://github.com/appwrite/appwrite/blob/master/app/config/locale/codes.php). +The user service supports multiple locales. This feature allows you to fetch countries and continents information in your app language. To switch locales, all you need to do is pass the `X-Appwrite-Locale` header or set the `setLocale` method using any of our available SDKs. [View here the list of available locales](https://github.com/appwrite/appwrite/blob/master/app/config/locale/codes.php). diff --git a/src/routes/docs/sdks/+page.markdoc b/src/routes/docs/sdks/+page.markdoc index dd3ae43ed9..9d015b644d 100644 --- a/src/routes/docs/sdks/+page.markdoc +++ b/src/routes/docs/sdks/+page.markdoc @@ -15,7 +15,7 @@ Client libraries for integrating with Appwrite to build client-based application {% table %} *   {% width=48 %} * Platform -* GitHub Repository +* GitHub repository *   {% width=80 %} --- * {% only_dark %}{% icon_image src="/images/platforms/dark/javascript.svg" alt="Javascript logo" size="m" /%}{% /only_dark %} @@ -50,7 +50,7 @@ Server libraries for integrating with Appwrite to build server side integrations {% table %} *   {% width=48 %} * Platform -* GitHub Repository +* GitHub repository *   {% width=80 %} --- * {% only_dark %}{% icon_image src="/images/platforms/dark/nodejs.svg" alt="Node.js logo" size="m" /%}{% /only_dark %} diff --git a/src/routes/docs/tooling/command-line/deployment/+page.markdoc b/src/routes/docs/tooling/command-line/deployment/+page.markdoc index 7954563056..ef825e481d 100644 --- a/src/routes/docs/tooling/command-line/deployment/+page.markdoc +++ b/src/routes/docs/tooling/command-line/deployment/+page.markdoc @@ -28,7 +28,7 @@ You can fetch all the existing teams in your current project using: appwrite init team ``` -# Deploying Functions {% #deploying-function %} +# Deploying functions {% #deploying-function %} The CLI also handles the creation and deployment of Appwrite Functions. Run this command in the folder holding your `appwrite.json` file. @@ -50,7 +50,7 @@ appwrite deploy function ✓ Success Deployed Awesome Function ( 621229798628cf5bf712 ) ``` -# Deploying Collections {% #deploying-collections %} +# Deploying collections {% #deploying-collections %} The Appwrite CLI also helps you deploy your project's databases and collections schema from one project to another. @@ -62,7 +62,7 @@ The deploy command will overwrite existing collections causing existing data to appwrite deploy collection ``` -# Deploying Teams {% #deploying-teams %} +# Deploying teams {% #deploying-teams %} The Appwrite CLI can create teams to organize users. Teams can be used to grant access permissions to a group of users. Learn more about permissions. @@ -72,7 +72,7 @@ Deploy teams by running this command in the folder holding your `appwrite.json` appwrite deploy team ``` -# Deploying Storage {% #deploying-storage %} +# Deploying storage {% #deploying-storage %} The Appwrite CLI allows you to configure and deploy buckets across projects. All the bucket's settings are available through the [appwrite.json](/docs/tooling/command-line/deployment#appwrite-json) file. diff --git a/src/routes/docs/tutorials/react/step-5/+page.markdoc b/src/routes/docs/tutorials/react/step-5/+page.markdoc index c834cef653..ca39202336 100644 --- a/src/routes/docs/tutorials/react/step-5/+page.markdoc +++ b/src/routes/docs/tutorials/react/step-5/+page.markdoc @@ -9,7 +9,7 @@ In our app we want to have a navigation bar that is always visible. We will add - a logout button if the user is logged in. - a login button if the user is not logged in. -Update the App componenent in `src/App.jsx`: +Update the App component in `src/App.jsx`: ```js import { Login } from "./pages/Login"; @@ -22,7 +22,7 @@ function App() { return (
- {/* Add the navbar before page content */} + {/* Add the navigation bar before page content */}
{isLoginPage ? : }
diff --git a/src/routes/docs/tutorials/react/step-6/+page.markdoc b/src/routes/docs/tutorials/react/step-6/+page.markdoc index e90a9ed455..5804ba0d29 100644 --- a/src/routes/docs/tutorials/react/step-6/+page.markdoc +++ b/src/routes/docs/tutorials/react/step-6/+page.markdoc @@ -4,22 +4,26 @@ title: Add database description: Add a database to your React application using Appwrite Web SDK. step: 6 --- + # Create collection {% #create-collection %} + In Appwrite, data is stored as a collection of documents. Create a collection in the [Appwrite Console](https://cloud.appwrite.io/) to store our ideas. {% only_dark %} ![Create project screen](/images/docs/tutorials/dark/idea-tracker-collection.png) {% /only_dark %} + {% only_light %} ![Create project screen](/images/docs/tutorials/idea-tracker-collection.png) {% /only_light %} Create a new collection with the following attributes: -| Field | Type | Required | -|-------------|--------|----------| -| userId | String | Yes | -| title | String | Yes | -| description | String | No | + +| Field | Type | Required | +| ------------- | ------------- | ------------- | +| `userId` | String | Yes | +| `title` | String | Yes | +| `description` | String | No | # Ideas context {% #ideas-context %} @@ -79,4 +83,3 @@ export function IdeasProvider(props) { ); } ``` - diff --git a/src/routes/docs/tutorials/sveltekit/step-5/+page.markdoc b/src/routes/docs/tutorials/sveltekit/step-5/+page.markdoc index f8d17f271a..ce0bce035c 100644 --- a/src/routes/docs/tutorials/sveltekit/step-5/+page.markdoc +++ b/src/routes/docs/tutorials/sveltekit/step-5/+page.markdoc @@ -5,7 +5,7 @@ description: Add navigation to your SvelteKit application with Appwrite authenti step: 5 --- -Create a layout component, used by all pages, to display a navbar. The navbar will show a login button if the user is not logged in, and a logout button if the user is logged in. +Create a layout component, used by all pages, to display a navigation bar. The navigation bar will show a login button if the user is not logged in, and a logout button if the user is logged in. In this component, we can call our `user.init()` function to check if the user is logged in when the page loads. diff --git a/src/routes/docs/tutorials/sveltekit/step-6/+page.markdoc b/src/routes/docs/tutorials/sveltekit/step-6/+page.markdoc index a734306545..a6159ba08d 100644 --- a/src/routes/docs/tutorials/sveltekit/step-6/+page.markdoc +++ b/src/routes/docs/tutorials/sveltekit/step-6/+page.markdoc @@ -4,24 +4,29 @@ title: Add database description: Add databases and queries to store user data in you SvelteKit project. step: 6 --- + # Create collection {% #create-collection %} + In Appwrite, data is stored as a collection of documents. Create a collection in the [Appwrite Console](https://cloud.appwrite.io/) to store our ideas. {% only_dark %} ![Create project screen](/images/docs/tutorials/dark/idea-tracker-collection.png) {% /only_dark %} + {% only_light %} ![Create project screen](/images/docs/tutorials/idea-tracker-collection.png) {% /only_light %} Create a new collection with the following attributes: -| Field | Type | Required | -|-------------|--------|----------| -| userId | String | Yes | -| title | String | Yes | -| description | String | No | + +| Field | Type | Required | +| ------------- | ------------- | ------------- | +| `userId` | String | Yes | +| `title` | String | Yes | +| `description` | String | No | # Add and remove methods {% #add-and-remove-methods %} + Now that you have a collection to hold ideas, we can read and write to it from our app. Create a new file `src/lib/stores/ideas.js` and add the following code to it. @@ -74,4 +79,4 @@ export const ideas = { }; ``` -Remember to use a store to hold data returned from Appwrite Databases, so your components can be updated when the data changes. \ No newline at end of file +Remember to use a store to hold data returned from Appwrite Databases, so your components can be updated when the data changes. diff --git a/src/routes/docs/tutorials/vue/step-5/+page.markdoc b/src/routes/docs/tutorials/vue/step-5/+page.markdoc index 9d70878590..b2781d3d44 100644 --- a/src/routes/docs/tutorials/vue/step-5/+page.markdoc +++ b/src/routes/docs/tutorials/vue/step-5/+page.markdoc @@ -9,7 +9,7 @@ In our app we want to have a navigation bar that is always visible. Use the `use - a logout button if the user is logged in. - a login button if the user is not logged in. -Update the App componenent in `src/App.vue`: +Update the App component in `src/App.vue`: ```vue