Skip to content

Releases: colinhacks/motherload

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 20:36
f9e9fab

Docs: https://motherload.dev

Packages

Commits since v0.1.0

  • f9e9fab Every package is at 0.2.0, for the release of motherload/webpack, motherload/turbopack, motherload/vite and motherload/jest and each format package's own (nub run bump 0.2.0). Verified: CI run 39669622440 green at 1dadaab, the commit before this one.
  • 01a0a11 docs-kit synced to 0b58abc, from 8b2e2d3: a code-tab strip can hold the page's choice at its right end, marked aside, which Reylo's examples now use (main.ts | users_by_ids.sql on the left, Postgres | MySQL | SQLite on the right), and a with no variant for the page's choice shows its first. Nothing on this site uses either, so the page is unchanged. Verified: nub run build in site/.
  • 1dadaab The lab/jest tests and nub run check-dist match Jest's and Vitest's summaries without colour codes: CI run 39668941713 failed bee4872 on the Vitest test, whose output on GitHub's runner read Tests 1 passed (1) with colour codes around each part, where the same command in a terminal here wrote none, and Jest colours its own summary under FORCE_COLOR. Verified: FORCE_COLOR=1 with TERM set, the three lab/jest tests pass, and the Jest two failed before; nub run typecheck; nub run test, 75 of 75.
  • bee4872 Motherload's webpack loader is motherload/webpack, and the same function is motherload/turbopack, in every format package as well, the maintainer's answer of 2026-10-21 for Motherload and Reylo alike: "Rename to Webpack in both, but let's also include /turbopack. Unless there's a reason not to? Should be easy to share the code." Neither name had been published. Motherload also has a plugin for Vite, Vitest, Rollup and Rolldown, motherload/vite, and a Jest transformer, motherload/jest, each in every format package too, the maintainer's "Build both now." The plugin is one Rollup-shaped load hook, enforce: "pre" because Vite's asset handling otherwise makes .txt a data: URL, returning moduleType: "js" because Rolldown 1.2.14 otherwise exported a .txt module's code as a string, and leaving a file another Motherload plugin claims more strongly to it, found in Vite's resolved plugins or Rollup's and Rolldown's input options. A preload does not reach Jest's test code, which jest-runtime compiles itself, so the transformer gives Jest the module as ESM when Jest asks for it and otherwise as CommonJS, rewritten line by line, stepping over strings, with the module itself as the cache key. The .env module now reads the file with util.parseEnv and sets each variable the environment does not, which is what process.loadEnvFile does, because Jest gives each test file a copy of process.env that process.loadEnvFile never writes to; measured equal to process.loadEnvFile on eleven keys. Jest, like Turbopack, runs only the first transform pattern that matches, so the longer suffix goes first. lab/bundlers also bundles lab/basic's files with Vite, Rollup and Rolldown, lab/jest (Jest 30.5.2, Vitest 5.0.5, its own dependencies, installed in CI) imports them in a CommonJS test, an ES module test and Vitest, nub run check-dist installs the tarballs into copies of five labs and fails on any warning, and tests/host-types.ts type-checks the plugin in each host's config type. The docs page's Plugins has Vite and Jest panels, Loaders à la carte has Vite and webpack tabs beside Next.js's, and the agent prompt names every entry. Verified: nub run typecheck; nub run test, 75 of 75, among them all five bundlers printing lab/basic's output, deference to a stand-in for dotschema's loader in both orders in webpack, Rspack, Rollup, Rolldown and Vite, lab/nextjs built with Turbopack and with webpack, and lab/jest under Jest's CommonJS and ESM and Vitest; nub run build and nub run check-dist, every lab clean; nub run build in site/, the Vite and Jest panels opened in Puppeteer's headless shell.
  • 62d5a90 microsoft/TypeScript#64912, the maintainer's, filed on 2026-10-21, asks TypeScript to pass an import's query or its import attributes to a content mapper, so that ./app.yaml?widened could be typed widened beside the as const default; PLAN.md's Open section records it. A level per extension, a types map in a tsconfig entry's options, was prototyped and works, and the maintainer turned it down: "It kind of sucks. I think we should just request the ability to read query parameters." DESIGN.md's How an import chooses records it with the cost it would answer: 500,358 types and 326 MB for a YAML list of 50,000 five-field rows typed as const, 346 types and 29 MB widened. PLAN.md's content mapper facts gain two rows: each contentMappers entry is its own project, whose projectHandle each transform carries (measured on 20261002.1 with three entries of one probe package), and an import attribute on a mapped file is accepted and not forwarded (measured on 7.1.0-beta under bundler, nodenext and preserve), while at run time Node keys modules by URL, so two attribute variants of one file are one module and two queries are two, and esbuild keeps both apart. Verified: nub run typecheck; nub run test, 63 of 63.
  • 953627c Motherload has a webpack loader, motherload/webpack-loader and each format package's own, for webpack, Rspack and Next.js with Turbopack and with webpack, the maintainer's instruction of 2026-10-21 after a fresh agent, given only the docs' agent prompt, set Motherload up in a Next.js app and had to write a Turbopack loader of its own over the esbuild plugin: "That includes adding a dedicated Webpack/Turbopack loader. I'm kind of surprised we don't have that." Core's toWebpackLoader passes through a file another Motherload loader on the resource claims more strongly, found through this.loaders by Symbol.for("motherload.plugin"), and a file with a query. The .env module ends in export {}, without which Rspack 2.2.9 wrote var = __webpack_require__(…) for it, and tries the file at import.meta.url before the one from the working directory, since webpack and Rspack write the source file's URL there. lab/bundlers bundles lab/basic's files with webpack and Rspack, and lab/nextjs (Next.js 16.4.2, its own dependencies, installed in CI) imports them in a server and a client component. The docs page's Plugins has Next.js and webpack and Rspack panels and Loaders à la carte their tabs; the Next.js setup turns next build's own type check off and runs the typecheck script first, after next typegen, because Next.js runs tsc with fixed arguments and TypeScript takes runExternalCode from the command line only (TS18068), until the maintainer's vercel/next.js#99544 lands (PLAN.md, Open). The agent prompt points at /llms.txt and lab/nextjs, says which dependency field each kind of app uses, names every plugin, tells an agent not to write a loader for a host with none, and defaults the editor to VS Code. DESIGN.md's new section records the measurements, among them that Turbopack runs only the first rule that matches a file. Verified: nub run typecheck; nub run test, 63 of 63, among them webpack and Rspack bundles that print lab/basic's output, both orders of rules deferring to a stand-in for dotschema's loader in webpack and Rspack (both builds fail without the mark), the .env fallback, and lab/nextjs type-checked and built with Turbopack and with webpack, the data in the prerendered page and in the client component's chunk; nub run build, and nub run check-dist installing the tarballs into copies of all four labs, Next.js building with no warning; nub run build in site/, the new panels opened in Puppeteer's headless shell.
  • d867681 The docs page renders every closed accordion's and every tab's content into its HTML, and answers a request that asks for Markdown with the page as Markdown (docs-kit 8b2e2d3, synced), the maintainer's two requests of 2026-10-21 after a fresh agent set Motherload up from the agent prompt and found the Editors, Nub and esbuild panels empty when it fetched the page: "We definitely should be servicing the HTML for closed accordions. That's a huge problem", and "we should be actually returning Markdown or MDX or whatever if an agent accesses the page ... We should be doing that in both Reylo and Motherload, and DocsKit in general." docs-kit's own Accordion keeps each item's content in the page, closed items hidden until found, so find-in-page and a link into one open it, and every tab panel is rendered; a request whose Accept names text/markdown ahead of any text/html (Claude Code, Cursor, OpenCode and Copilot send it) gets /llms.txt for / through a routes entry in site/vercel.json, with Vary: Accept on both answers, and llms.ts builds the Markdown with docs-kit's pageMarkdown. Verified: nub run build in site/, the built page holding native-preview, useTsgo, typescript-ls, nub.jsonc and buildSync, which the live page lacks, and no empty tab panel; llms.txt byte-identical; under the dev server in Puppeteer's headless shell every accordion closed with hidden=until-found after hydration and opening with its animation; the same routes entry answers Markdown on reylo.dev (reylosql/reylo-dev 6ce0a1c).
  • 0a3316d DESIGN.md and AGENTS.md describ...
Read more

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 16:59
1e3fad2

Docs: https://motherload.dev

Packages

Commits since v0.0.1

  • 1e3fad2 Every package is at 0.1.0, the maintainer's instruction of 2026-10-21: "lets cut 0.1" (nub run bump 0.1.0). Ten packages now that JSON Schema left for dotschema: motherload, @motherload/core and the eight format packages. Verified at 0.1.0: nub run typecheck; nub run test, 53 of 53; nub run build and nub run check-dist.
  • 71e3a5a The hero imports a JSONC file, strings.jsonc, in place of strings.json5, by the maintainer's rule of 2026-10-21: "Be sure to always lead with JSONC. It's way more important than JSON5." The hero showed JSON5 and no JSONC at all; its file keeps its comment and trailing comma, with its keys and strings in double quotes. The share card (its third tab and import line, the same width), its alt text and /showcase follow. Verified: the card rendered by the dev server, the hero's import typed; nub run build in site/.
  • c1bb5fc Setup opens with the install, the JSON Schema section is a callout under JSONC and JSON5, JSONC comes before JSON5 everywhere, and the wordmark is bigger, the maintainer's requests of 2026-10-21. Setup starts with "Install Motherload and TypeScript 7.1:" and npm install -D motherload typescript@beta in place of typescript@next ("Pretty sure you need to install TypeScript@beta?": the beta tag is 7.1.0-beta, published 2026-10-20, and its darwin-arm64 tsc carries runExternalCode and contentMappers), a callout that content mappers are new in TypeScript 7.1 and that 7.1 is in beta, Node 24, then the agent prompt; the Install heading is gone, its anchor with it, and neither the install text nor the prompt's first step points at "Loaders à la carte" ("I don't think we need to be talking about loaders à la carte in the install section"). That section opens with the maintainer's words: "The motherload package provides one unified content mapper for all data formats. You can also consume them à la carte." The agent card loses its Copy instructions button and shows six lines of the prompt (docs-kit 0a12e56, synced). The .schema.jsonc heading is gone from the Loaders section and its sidebar ("I'm still seeing the JSON schema stuff in the sidebar. I think we should just remove it entirely ... It should be a callout underneath the JSONC and JSON5 section"): a callout under .json5 points at dotschema, and the README does the same. JSONC leads JSON5 ("Be sure to always lead with JSONC. It's way more important than JSON5") in the Loaders sections, the opening sentence and the page's description, Setup's extension list, table and agent prompt, /formats, the README, the root package's description, lab/basic's tsconfig, AGENTS.md and PLAN.md; AGENTS.md's writing conventions carry the rule. The wordmark is 18px beside a 24px icon, from 16px and 22px. Verified under the dev server in Puppeteer's headless shell (the prompt box 160.6px tall over 580px, no Copy button, no #install or #schemajsonc, the callouts, the wordmark); nub run typecheck; nub run test, 53 of 53; nub run build in site/.
  • a1da052 The format packages' README links Setup's "Loaders à la carte" by its anchor, #loaders-a-la-carte: scripts/build.ts still wrote #one-format-at-a-time, the anchor before the section's rename in d21b5ac, so every format package would have shipped a dead link. Verified: the built docs page has the id loaders-a-la-carte and no one-format-at-a-time.
  • 232668f JSON Schema leaves Motherload for its own package, dotschema, the maintainer's decision of 2026-10-21: "I think it's cleaner to extract it personally. It's not really the same as the data loading that we do in the other stuff. Let's go ahead and do it", and "We could always add support into Motherload later and give Motherload a dependency on dotschema, but not right now." So packages/schema/ is gone, with its four test files (schema, schema-types, json-schema, verdicts), its fixtures (tests/fixtures/json-schema, tests/fixtures/declaration, the error fixture's schema files) and the root's @motherload/schema link, ajv and ajv-formats; src/plugin.ts combines eight loaders, and motherload has no . export, since src/index.ts only re-exported the schema types and no data module imports a type. A .schema.jsonc or .schema.json5 file is now JSONC or JSON5 data unless another loader claims the longer suffix, and the Symbol.for("motherload.registered") and Symbol.for("motherload.plugin") keys stay as they were, for dotschema to join: tests/packages.test.ts checks the JSONC and JSON5 loaders yield both schema suffixes to a stand-in loader written with nothing from @motherload/core, in both orders under Node's hooks, Bun and esbuild, and tests/adapters.test.ts checks esbuild's watchFiles with a stand-in too. lab/basic loses its schema files and their checks, lab/packages is @motherload/toml and @motherload/jsonc alone, and scripts/check-dist.ts drops the schema expectations and the project hoisted beside ajv 6. The docs page's hero, /formats, /showcase and the link preview drop user.schema.jsonc (six imports); the Loaders section's .schema.jsonc is one sentence pointing at dotschema on npm, beside .sql's pointer at Reylo, as in the README; Setup's extension lists, agent prompt and "Loaders à la carte" table drop the schema. DESIGN.md's five schema sections and the schema rows and notes of Packaging go to dotschema's DESIGN.md, replaced by "JSON Schema left for dotschema", which supersedes that morning's "Keep it in motherload"; PLAN.md records the decision and drops the schema decisions and Open items, with one new Open item on the published @motherload/schema@0.0.1; AGENTS.md's layout follows. No version is bumped. Verified: nub run typecheck; nub run test, 53 of 53; nub run build then nub run check-dist (basic and packages); the site's nub run build, whose page shows six imports in the hero and renders the dotschema section.
  • 61c1c55 Motherload 0.0.1 is published, every package by release.yml: run 39560615518 staged all eleven with provenance through their stage-only trusted publishers, the maintainer approved them with stager, and the run created the GitHub release v0.0.1 at 6837089 once npm served every version. DESIGN.md's Releasing section records the run, the trusted publishers the fixed scripts/npm-first-publish.sh configured (each npm trust github answered 201), and the approval that took two sittings: stager listed motherload apart from the other ten, because it read the repository from the package's latest version, the 0.0.0 of 2026-10-03, which names none, so the notification's Approve took motherload@0.0.1 alone, and from 15:53 to 16:03 UTC npm install motherload@0.0.1 failed with ETARGET for @motherload/core@0.0.1. PLAN.md's step 7 has the first release, and AGENTS.md's release steps end on checking that nothing of the release is left staged. Verified: motherload@0.0.1 installed from npm into a copy of lab/basic outside the repository type-checks, runs under the preload and bundles with esbuild; nub run typecheck; nub run test, 125 of 125.
  • b0dd8d1 Each format's examples carry one fact apiece, the maintainer's instruction of 2026-10-21: "For things like YAML, the first sentence of the section should not be talking about the several documents stuff. That should be a second example. Every example needs to be a very clean little chunk containing just new information ... It's just one piece of information at a time, always." On the docs page: .toml loads a plain file, then shows its dates (an offset date-time a Date, a local one its ISO text); .yaml loads a plain file, then a file of several documents; .jsonc, .json5, .txt and .tsv lead into their one example; .csv drops its paragraph of quoting, blank-line and row-count rules; .md loads a post, then imports its frontmatter alone; .env sets and types its variables, then the editor's completion, then a misspelled name as an error, each its own block. A bigint, inf, CSV quoting and a file without frontmatter stay in DESIGN.md. The README does the same for .yaml, .env and .md, and AGENTS.md's writing rule now asks for one fact to each example. Verified under the dev server in Puppeteer's headless shell (every hover, the completion and the error); nub run typecheck; nub run test, 125 of 125.
  • 1b84682 The README's logo loads from GitHub, and its tagline is the site's, the maintainer's report of 2026-10-21: "Logo is not loading above the H1 on the README. It's also weird that the little tagline underneath the H1 is not the same as the one that we use on the website." GitHub shows a README's image from another host through its proxy, camo, which timed out on motherload.dev/motherload.svg (a 504 after 4 seconds on one try in two, while the file answers at once from here), so the logo is now site/public/motherload.svg from raw.githubusercontent.com, which GitHub shows directly (its markdown API leaves that src as written) and serves as image/svg+xml. The tagline is "Import data files into TypeScript, fully typed", the site's title and share card's, in place of "Import a data file and get a ty...
Read more

v0.0.1

Choose a tag to compare

@github-actions github-actions released this 21 Oct 16:02
6837089