Skip to content

v0.3.0

Choose a tag to compare

@bjacobgordon bjacobgordon released this 21 Jul 21:49
e3134ab

Release v0.3.0

🦈 Welcome to the Next Wave! 🦈

  • We're strengthening our foundation to support our next-gen API, stay tuned!

🗒️ Notes

✨ User Features

🛠️ DX

  • @bjacobgordon in #364: "prefeature(library/Attempt): enables type-safe error identification"
  • @bjacobgordon in #381: "prefeature(reporting): accompanies user-facing issue dialog with entry to debug log"
  • @bjacobgordon in #382: "prefeature(library/Attempt): ensures that built-in errors are escorted on rethrow"
  • @bjacobgordon in #386: "prefeature(library/Attempt): reports whenever potentially actionable errors are thrown within new attempts"
  • @bjacobgordon in #393: "prefeature(library/Parser): defines string parsers with type-safe errors"
  • @bjacobgordon in #417: "prefeature(library/Attempt): adds easier way to "rewrap" discriminated outcomes"
  • @bjacobgordon in #419: "prefeature(library/Attempt): adds easier way to "rewrap" outcomes in general"
  • @bjacobgordon in #408: "prefeature(library/Attempt): adds easier way to "rewrap" outcomes within fresh attempts"

🪲 Fixes

  • @bjacobgordon in #346: "fix(library/Attempt): prevents nested NonActionableError instances"
  • @bjacobgordon in #358: "fix(library/Attempt): ensures rethrown errors are offered for interpretation"
  • @bjacobgordon in #359: "fix(library/Attempt): avoids nesting built-in non-actionable errors"
  • @bjacobgordon in #361: "fix(library/Attempt): hides non-actionable errors from interpreter callback"
  • @bjacobgordon in #362: "fix(library/Attempt): considers all escorted errors to be potentially actionable"
  • @bjacobgordon in #376: "fix(library/Range): avoids repeated bounds for inclusiveSteps in DiscreteRange"
  • @bjacobgordon in #383: "fix(library/Attempt): prevents escort of NonActionableError for all its subclasses"
  • @bjacobgordon in #384: "fix(library/HTTP): plugs leaky abstraction"
  • @bjacobgordon in #457: "fix(library/URI): adds missing call to .unwrapped"
  • @bjacobgordon in #479: "fix(library/URI): avoids serializing non-conformant encodings"

🛁 Refactorings

  • @bjacobgordon in #335: "refactor(text-to-image): makes it more obvious that server errors are delegated to caller"
  • @bjacobgordon in #336: "refactor(library/Attempt): ensures consistent use of raw try-catch"
  • @bjacobgordon in #337: "refactor(library/Attempt): ensures consistent error casting in try-catch"
  • @bjacobgordon in #338: "refactor(text-to-image): highlights interpretation concerns in SDXL client"
  • @bjacobgordon in #339: "refactor(library/Attempt): makes relationship between adapters and factories more obvious"
  • @bjacobgordon in #340: "refactor(library/Attempt): makes guarantee of appropriately thrown errors more obvious"
  • @bjacobgordon in #344: "refactor(text-to-image): separates error propagation concerns from SDXL client"
  • @bjacobgordon in #348: "refactor(library/Attempt): documents concept of error interpreter"
  • @bjacobgordon in #347: "refactor(library/Attempt): moves error interpretation concern to base adapter"
  • @bjacobgordon in #349: "refactor(library/Attempt): ensures that sanctionedAsync propagates same way as sanctioned"
  • @bjacobgordon in #350: "refactor(library/Attempt): highlights where failure outcome is actually returned"
  • @bjacobgordon in #351: "refactor(library/Attempt): removes unreachable code in async adapter"
  • @bjacobgordon in #357: "linter: suppresses compiler error regarding FlatConfig.LanguageOptions"
  • @bjacobgordon in #360: "refactor(library/Attempt): simplifies happy path in Attempt.toEventually"
  • @bjacobgordon in #363: "refactor: leverages type imports/exports to shrink bundle size"
  • @bjacobgordon in #365: "refactor(library/Attempt): moves assertPotentiallyActionable closer to other assertions"
  • @bjacobgordon in #366: "refactor(library/Attempt): adds Success and Failure to namespace"
  • @bjacobgordon in #372: "linter: improves config readability via modules"
  • @bjacobgordon in #373: "linter: documents custom typescript eslint config"
  • @bjacobgordon in #374: "linter: documents custom config for vanilla eslint"
  • @bjacobgordon in #375: "refactor(library/Range): simplifies iteration in DiscreteRange"
  • @bjacobgordon in #377: "linter: enforces guard pattern"
  • @bjacobgordon in #385: "refactor(library/HTTP): repackages HTTPClient library"
  • @bjacobgordon in #388: "refactor(library/typeUtilities): preps force parsers for replacement"
  • @bjacobgordon in #390: "refactor(text-to-image): extracts conversions from SDXL client"
  • @bjacobgordon in #389: "linter: enforces extensible function signatures"
  • @bjacobgordon in #391: "refactor(library): preps string parsers for migration to type-safe error propagation"
  • @bjacobgordon in #392: "refactor: standardizes guards"
  • @bjacobgordon in #394: "refactor(library/NonTrivialString): propagates parsing errors safely"
  • @bjacobgordon in #395: "refactor(library/URLPath): propagates parsing errors safely"
  • @bjacobgordon in #396: "refactor(library/URLOrigin): propagates parsing errors safely"
  • @bjacobgordon in #397: "refactor(library/URI): propagates errors safely when parsing StructuredSyntaxNameSuffix"
  • @bjacobgordon in #398: "refactor(library/Byte): propagates encoding errors safely"
  • @bjacobgordon in #399: "refactor(library/Base64): propagates conformance errors safely"
  • @bjacobgordon in #402: "linter: enforces style of import groupings"
  • @bjacobgordon in #403: "linter: minimizes noise in diffs when rearranging unions or intersections"
  • @bjacobgordon in #409: "refactor(library/Attempt): dissolves "outcome.ts" into more manageable pieces"
  • @bjacobgordon in #412: "refactor(text-to-image): separates response conversion concerns from main logic in SDXL client"
  • @bjacobgordon in #415: "linter(style): prevents noise in diffs when modifying generic declarations"
  • @bjacobgordon in #413: "refactor(library/Attempt): makes Attempt.Outcome discriminant more obvious"
  • @bjacobgordon in #416: "types(library/Attempt): formalizes constraint of Attempt.Failure payload to ActionableError"
  • @bjacobgordon in #418: "refactor(text-to-image): simplifies outcome propagation using "rewraps""
  • @bjacobgordon in #420: "refactor(text-to-image): simplifies outcome propagation using static "rewraps""
  • @bjacobgordon in #421: "refactor(text-to-image): simplifies outcome propagation using in-attempt rewraps"
  • @bjacobgordon in #422: "refactor(library/Base64CharacterEncodedByteSequence): unnests file"
  • @bjacobgordon in #423: "refactor(library/Base64CharacterEncodedByteSequence): highlights blockage of parsing propagation"
  • @bjacobgordon in #426: "refactor: labels all logic involving serialization"
  • @bjacobgordon in #427: "refactor: differentiates string concatenation from numeric addition"
  • @bjacobgordon in #428: "refactor: highlights anonymous string concatenation"
  • @bjacobgordon in #433: "refactor: simplifies prepending for string subsets"
  • @bjacobgordon in #432: "refactor(library/URI): co-locates component concerns"
  • @bjacobgordon in #434: "refactor(library/URI): clarifies logic involving serializable components"
  • @bjacobgordon in #435: "refactor(library/URI): highlights logic involving serializable components"
  • @bjacobgordon in #436: "refactor(library/URI): captures ordering intention within serialization implementation"
  • @bjacobgordon in #438: "refactor(library/URI): highlights concatenation of strings in array"
  • @bjacobgordon in #439: "refactor(library/URI): removes unnecessary union member"
  • @bjacobgordon in #440: "refactor(library/StringSubset): centralizes appending concatenation"
  • @bjacobgordon in #441: "refactor: centralizes concatenation of StringLike instances"
  • @bjacobgordon in #442: "refactor: centralizes concatenation of sparse StringLike arrays"
  • @bjacobgordon in #443: "refactor(library/URI): proves that MediaType serializes into non-trivial string"
  • @bjacobgordon in #437: "refactor(library/URI): avoids forcible unwrap in DataURI getter"
  • @bjacobgordon in #449: "refactor(library/URI): preps results of component parsing for extraction"
  • @bjacobgordon in #448: "refactor(library/URI): separates component parsing from instantiation"
  • @bjacobgordon in #447: "refactor(library/URI): preps force unwraps to be converted to guards"
  • @bjacobgordon in #452: "refactor(library/URI): separates component parsing from instantiation in MediaType"
  • @bjacobgordon in #451: "refactor: preps subjects of guards against force unwraps"
  • @bjacobgordon in #450: "refactor: tees up forcible unwraps to be converted to safe error propagation"
  • @bjacobgordon in #456: "refactor(library/Byte): avoids imports that could become circular"
  • @bjacobgordon in #455: "refactor(library/Byte): streamlines exports"
  • @bjacobgordon in #454: "refactor(library/Base64): streamlines exports"
  • @bjacobgordon in #453: "refactor(library/Base64CharacterEncodedByteSequence): preps for StringParsable conformance"
  • @bjacobgordon in #459: "refactor(library/URI): corrects misnomer in ImageURI"
  • @bjacobgordon in #458: "refactor: clarifies intent when returning new instances from some scope"
  • @bjacobgordon in #461: "refactor(library/URI): highlights parsed components"
  • @bjacobgordon in #460: "refactor(library/URI): prefers parsing components right after their declaration"
  • @bjacobgordon in #411: "refactor(library/Base64CharacterEncodedByteSequence): propagates parsing errors safely"
  • @bjacobgordon in #468: "linter(cypress): centralizes configuration"
  • @bjacobgordon in #467: "linter: prefers config option in lieu of rule overrides for "no-unsafe-*" rules"
  • @bjacobgordon in #477: "refactor(library/URI): removes unused string parsers"
  • @bjacobgordon in #478: "refactor(library/typeUtilities): removes suite of unsafe string parsers"
  • @bjacobgordon in #485: "refactor(library/URI): simplifies imports for class properties"
  • @bjacobgordon in #486: "refactor: preserves intent of named re-exports"
  • @bjacobgordon in #487: "refactor(library/MediaType): un-nests directory from URI library"
  • @bjacobgordon in #490: "refactor(library/Range): avoids anti-pattern of guards in constructors"
  • @bjacobgordon in #489: "refactor: avoids duplicate assignment of parameter properties"
  • @bjacobgordon in #494: "refactor(library/vue): ensures all imports are behind facade"
  • @bjacobgordon in #493: "refactor: avoids misuse of "underscore prefix" convention"
  • @bjacobgordon in #492: "refactor(library/URI): avoids unnecessary private members"
  • @bjacobgordon in #496: "refactor: avoids destructuring within parameter-property-eligible constructors"
  • @bjacobgordon in #497: "style: ensures multiline parameters in constructors"
  • @bjacobgordon in #491: "refactor: prefers parameter properties"
  • @bjacobgordon in #488: "refactor(library/ContentDescriptor): renames concept from "media type""
  • @bjacobgordon in #499: "refactor(library/ContentDescriptor): clarifies serializableParameters implementation"
  • @bjacobgordon in #509: "refactor(library/ShimmedStabilityAIClient): clarifies context of schemas"
  • @bjacobgordon in #508: "refactor(library/Schema): preps for zod v4"
  • @bjacobgordon in #510: "linter(vitest): preps for first unit tests"
  • @bjacobgordon in #515: "refactor(library): flattens contents of "/customTypes" into parent"
  • @bjacobgordon in #518: "refactor(library/math): preps directory for tests"

🧹 Chores

Dependencies

  • @dependabot[bot] in #319: "chore(deps): bump zod from 3.25.51 to 3.25.55"
  • @dependabot[bot] in #332: "chore(deps): bump zod from 3.25.55 to 3.25.63"
  • @dependabot[bot] in #328: "chore(deps): bump typescript-eslint from 8.33.1 to 8.34.0"
  • @dependabot[bot] in #342: "chore(deps): bump vuetify from 3.8.8 to 3.8.9"
  • @dependabot[bot] in #343: "chore(deps): bump zod from 3.25.63 to 3.25.64"
  • @dependabot[bot] in #369: "chore(deps): bump zod from 3.25.64 to 3.25.67"
  • @bjacobgordon in #371: "chore(dev): bump typescript-eslint from 8.34.0 to 8.34.1"
  • @dependabot[bot] in #379: "chore(deps): bump vuetify from 3.8.9 to 3.8.10"
  • @dependabot[bot] in #387: "chore(deps): bump vue from 3.5.16 to 3.5.17"
  • @dependabot[bot] in #404: "chore(deps): bump vuetify from 3.8.10 to 3.8.11"
  • @dependabot[bot] in #405: "chore(deps): bump typescript-eslint from 8.34.1 to 8.35.0"
  • @dependabot[bot] in #444: "chore(deps): bump typescript-eslint from 8.35.0 to 8.35.1"
  • @dependabot[bot] in #470: "chore(deps): bump vuetify from 3.8.11 to 3.8.12"
  • @dependabot[bot] in #475: "chore(deps): bump zod from 3.25.67 to 3.25.73"
  • @dependabot[bot] in #483: "chore(deps): bump zod from 3.25.73 to 3.25.76"
  • @dependabot[bot] in #480: "chore(deps): bump typescript-eslint from 8.35.1 to 8.36.0"
  • @dependabot[bot] in #481: "chore(deps): bump vuetify from 3.8.12 to 3.9.0"
  • @dependabot[bot] in #507: "chore(deps): bump zod from 3.25.76 to 4.0.2"
  • @dependabot[bot] in #516: "chore(deps): bump zod from 4.0.2 to 4.0.5"
  • @dependabot[bot] in #521: "chore(deps): bump typescript-eslint from 8.36.0 to 8.37.0"

Dev Dependencies

  • @dependabot[bot] in #318: "chore(deps-dev): bump vitest from 3.2.1 to 3.2.2"
  • @dependabot[bot] in #317: "chore(deps-dev): bump @types/node from 22.15.29 to 22.15.30"
  • @dependabot[bot] in #316: "chore(deps-dev): bump eslint-import-resolver-typescript from 4.4.2 to 4.4.3"
  • @dependabot[bot] in #320: "chore(deps-dev): bump eslint-plugin-vue from 10.1.0 to 10.2.0"
  • @dependabot[bot] in #334: "chore(deps-dev): bump brace-expansion from 1.1.11 to 1.1.12"
  • @dependabot[bot] in #333: "chore(deps-dev): bump @types/node from 22.15.30 to 24.0.1"
  • @dependabot[bot] in #331: "chore(deps-dev): bump @vitest/eslint-plugin from 1.2.1 to 1.2.2"
  • @dependabot[bot] in #326: "chore(deps-dev): bump vitest from 3.2.2 to 3.2.3"
  • @dependabot[bot] in #341: "chore(deps-dev): bump @vitest/eslint-plugin from 1.2.2 to 1.2.4"
  • @dependabot[bot] in #355: "chore(deps-dev): bump @types/node from 24.0.1 to 24.0.3"
  • @dependabot[bot] in #352: "chore(deps-dev): bump @vitest/eslint-plugin from 1.2.4 to 1.2.5"
  • @dependabot[bot] in #356: "chore(deps-dev): bump vite-plugin-vue-devtools from 7.7.6 to 7.7.7"
  • @dependabot[bot] in #353: "chore(deps-dev): bump lint-staged from 16.1.0 to 16.1.2"
  • @dependabot[bot] in #354: "chore(deps-dev): bump eslint from 9.28.0 to 9.29.0"
  • @dependabot[bot] in #367: "chore(deps-dev): bump @vitest/eslint-plugin from 1.2.5 to 1.2.7"
  • @dependabot[bot] in #370: "chore(deps-dev): bump @vue/eslint-config-typescript from 14.5.0 to 14.5.1"
  • @dependabot[bot] in #380: "chore(deps-dev): bump vitest from 3.2.3 to 3.2.4"
  • @dependabot[bot] in #378: "chore(deps-dev): bump cypress from 14.4.1 to 14.5.0"
  • @dependabot[bot] in #400: "chore(deps-dev): bump @stylistic/eslint-plugin from 4.4.1 to 5.0.0"
  • @dependabot[bot] in #401: "chore(deps-dev): bump eslint-plugin-import from 2.31.0 to 2.32.0"
  • @dependabot[bot] in #407: "chore(deps-dev): bump @vitejs/plugin-vue from 5.2.4 to 6.0.0"
  • @dependabot[bot] in #406: "chore(deps-dev): bump vite from 6.3.5 to 7.0.0"
  • @dependabot[bot] in #410: "chore(deps-dev): bump @types/node from 24.0.3 to 24.0.4"
  • @dependabot[bot] in #414: "chore(deps-dev): bump eslint-import-resolver-typescript from 4.4.3 to 4.4.4"
  • @dependabot[bot] in #424: "chore(deps-dev): bump @vitest/eslint-plugin from 1.2.7 to 1.3.3"
  • @dependabot[bot] in #431: "chore(deps-dev): bump @types/node from 24.0.4 to 24.0.7"
  • @dependabot[bot] in #430: "chore(deps-dev): bump @stylistic/eslint-plugin from 5.0.0 to 5.1.0"
  • @dependabot[bot] in #429: "chore(deps-dev): bump eslint from 9.29.0 to 9.30.0"
  • @dependabot[bot] in #445: "chore(deps-dev): bump @types/node from 24.0.7 to 24.0.8"
  • @dependabot[bot] in #462: "chore(deps-dev): bump cypress from 14.5.0 to 14.5.1"
  • @dependabot[bot] in #464: "chore(deps-dev): bump @vitest/eslint-plugin from 1.3.3 to 1.3.4"
  • @dependabot[bot] in #466: "chore(deps-dev): bump eslint from 9.30.0 to 9.30.1"
  • @dependabot[bot] in #465: "chore(deps-dev): bump vue-tsc from 2.2.10 to 3.0.1"
  • @dependabot[bot] in #463: "chore(deps-dev): bump @vue/eslint-config-typescript from 14.5.1 to 14.6.0"
  • @dependabot[bot] in #473: "chore(deps-dev): bump @types/node from 24.0.8 to 24.0.10"
  • @dependabot[bot] in #474: "chore(deps-dev): bump vite from 7.0.0 to 7.0.2"
  • @dependabot[bot] in #469: "chore(deps-dev): bump eslint-plugin-vue from 10.2.0 to 10.3.0"
  • @dependabot[bot] in #482: "chore(deps-dev): bump vite from 7.0.2 to 7.0.3"
  • @dependabot[bot] in #495: "chore(deps-dev): bump @types/node from 24.0.10 to 24.0.12"
  • @dependabot[bot] in #506: "chore(deps-dev): bump vite from 7.0.3 to 7.0.4"
  • @dependabot[bot] in #517: "chore(deps-dev): bump @types/node from 24.0.12 to 24.0.13"
  • @dependabot[bot] in #519: "chore(deps-dev): bump eslint from 9.30.1 to 9.31.0"
  • @dependabot[bot] in #520: "chore(deps-dev): bump @types/node from 24.0.13 to 24.0.14"

Repo