pool changelog
Every pool release, newest first.
Versions
0.3.0
1 addedAdded
reorderSlot(pool, mod, beatmapId, to): move a map within its own bucket (or the no-slot group) without changing its mod, renumbering the group 1..N. packs.haruhime.moe's map drag and drop uses this.
0.2.0
4 added, 3 changed, 5 fixedAdded
@haruhimemoe/pool/service, the contract between pools.haruhime.moe and packs.haruhime.moe:packInputSchema,poolsPackBodySchema(thePUT /api/service/pools/{ref}body),poolsRefSchema,poolsSyncAnswerSchema,poolsStatsAnswerSchema,MAX_DESCRIPTION_LENGTHand the visibilities. Each app had its own copy, and pools couldn't check the description limit.@haruhimemoe/pool/content-filter, a second entry point withhasBlockedLanguage(text): the slur and hate slogan blocklist packs.haruhime.moe and pools.haruhime.moe each had a copy of, unchanged. The main entry point never loads its word list.changesStarRating(mods),ratingMods(mods)andspeedRate(mods): which mods change a star rating, and how fast DT (1.5) and HT (0.75) play, with NC read as DT and DC as HT. packs.haruhime.moe and pools.haruhime.moe had their own copies.displayPoolName(name): a pool name safe to show and store, with control characters and line breaks turned into spaces and bidi controls removed. Keys carry names as typed, so the README now says to treat them as untrusted.
Changed
checkBucketCoderefuses a code that is another slot's code plus a number (NM1next toNM,RCnext toRC1) with the newclasherror, soaddBucketandrenameBucketrefuse it too. With both codes,slotLabelprints NM slot 1 asNM1, whichparsePoolTextreads as NM1's slot 1. Pools that already have such codes still validate and open.parsePoolTextreports a line that would create such a code with the newclasherror code.checkBucketCoderefuses a code with no letter (12) with the newdigitserror.parsePoolTextalready read such lines as beatmap IDs or a numbered list, so their labels didn't read back.
Fixed
parsePoolTextsplits lines on a lone CR, U+2028 and U+2029 too. Before, every line after the first was lost without an error.parsePoolTextreads a slot line whose beatmap is followed by a comma (NM1 129891, Freedom Dive), as ID lines already did.planMergecounts the same slot twice inincomingonce, so it previewsmergeSlotsexactly. Before, one slot could be both added and replaced, and a slot pasted back to its current map was reported as replaced.freemodSetsandmodSetsForreturn frozen sets, at both levels. Before, a caller could change the shared arrays for every other module.moveBucket(andwithBuckets) put the slots in the new pool order. Before, they kept the old order, unlike every other edit anddecodePackKey.
0.1.0
6 addedAdded
- The
Poolshape and zod schemas (poolSchema,poolDraftSchema,poolFields), with zod^4.0.16as a peer dependency. - Mods on custom slots: forced sets (1 to 3, never EZ with HR or DT with HT) or freemod, with helpers for star-rating mod sets.
- Pure bucket and slot editing (
addSlot,moveSlot,mergeSlots,addBucket, …); a refused edit returns the same object. parsePoolTextfor pasted pools, spreadsheet rows and osu! links, with coded errors.- The pack key codec:
encodePackKey,decodePackKeyandextractPackKeyforpk1.,pk2.andpk3.keys, byte for byte compatible with packs.haruhime.moe. docs/pack-key.md, the key format's specification, including the exact decoder rules.
- The