{"_id":"@alwatr/bobbin","_rev":"4-bc3446d66ae73e82f4ef50d8f836d5f1","name":"@alwatr/bobbin","dist-tags":{"latest":"10.2.0"},"versions":{"10.0.0":{"name":"@alwatr/bobbin","version":"10.0.0","keywords":["alwatr","build-time","bun","cache","data-pipeline","fetch","schema-validation"],"author":{"name":"S. Ali Mihandoost","email":"ali.mihandoost@gmail.com"},"license":"MPL-2.0","_id":"@alwatr/bobbin@10.0.0","maintainers":[{"name":"alimd","email":"ali.mihan.doost@gmail.com"}],"homepage":"https://github.com/Alwatr/alwatr/tree/next/pkg/bobbin#readme","bugs":{"url":"https://github.com/Alwatr/alwatr/issues"},"dist":{"shasum":"0423ca7e0f0173ebebd62823d7b04fbf1d6b406a","tarball":"https://registry.npmjs.org/@alwatr/bobbin/-/bobbin-10.0.0.tgz","fileCount":11,"integrity":"sha512-C0zyJgBUtx3Eae1cNd2K/M3WbGSn/lq5UpEMnn5h3CgQFy6KaKdRMkfQGzNqr7xdJrc4qeC6ZKzaONNsRnGa6g==","signatures":[{"sig":"MEUCIQCHAWthm0y56A7DbaxkpBwb+s2wfuK4LOl2KQCsD964zwIgbQG5Z4Br+UoKFoRR+inbQJ7ag9ZMfnmZsMtCA9P8Ccw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36651},"type":"module","exports":{".":{"types":"./dist/main.d.ts","import":"./dist/main.js","default":"./dist/main.js","development":"./dist/dev/main.js"}},"gitHead":"ad367007af237263a64306c359d05fea63fb2dc7","scripts":{"b":"bun run build","t":"bun run test","w":"bun run watch","cl":"bun run clean","lint":"eslint src/ --ext .ts","test":"bun test","build":"bun run build:ts && bun run build:es","clean":"rm -rfv dist *.tsbuildinfo","watch":"bun run watch:ts & bun run watch:es","format":"prettier --write \"src/**/*.ts\"","build:es":"bun run build:es:dev && bun run build:es:prod","build:ts":"tsc --build","watch:es":"bun run build:es:dev --watch","watch:ts":"bun run build:ts --watch --preserveWatchOutput","build:es:dev":"nano-build --preset=bun-service --packages=external --outdir=dist/dev src/main.ts","build:es:prod":"NODE_ENV=production nano-build --preset=bun-service --packages=external --outdir=dist src/main.ts"},"_npmUser":{"name":"alimd","email":"ali.mihan.doost@gmail.com"},"repository":{"url":"git+https://github.com/Alwatr/alwatr.git","type":"git","directory":"pkg/bobbin"},"_npmVersion":"lerna/5.4.2/node@v22.23.1+x64 (linux)","description":"A declarative, build-time data pipeline for fetching, validating, and caching external APIs into JSON files.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^7.0.2","@alwatr/standard":"10.0.0","@alwatr/nano-build":"10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bobbin_10.0.0_1785075706124_0.14735149942982062","host":"s3://npm-registry-packages-npm-production"}},"10.0.1":{"name":"@alwatr/bobbin","version":"10.0.1","keywords":["alwatr","build-time","bun","cache","data-pipeline","fetch","schema-validation"],"author":{"name":"S. Ali Mihandoost","email":"ali.mihandoost@gmail.com"},"license":"MPL-2.0","_id":"@alwatr/bobbin@10.0.1","maintainers":[{"name":"alimd","email":"ali.mihan.doost@gmail.com"}],"homepage":"https://github.com/Alwatr/alwatr/tree/next/pkg/bobbin#readme","bugs":{"url":"https://github.com/Alwatr/alwatr/issues"},"dist":{"shasum":"a64149faee53deb591bc0581014b14ae5da349e6","tarball":"https://registry.npmjs.org/@alwatr/bobbin/-/bobbin-10.0.1.tgz","fileCount":12,"integrity":"sha512-AEqMbZ6IOv/C46oaUNJ2ZCHmi17pAOmn6gBYAoVcKacdsPh8fuBy7ZmHQdvcvPf3SCOLStYIJE26C1O/dpdK8g==","signatures":[{"sig":"MEUCIQCTfCU5c3/MQ8+GI708/tkdt1R6hnHeh255cgR8fF+sGwIgXi23zU1gmFhHj5E93seWWCWtUhR/qz1vts5+W09Ty1k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42478},"type":"module","exports":{".":{"types":"./dist/main.d.ts","import":"./dist/main.js","default":"./dist/main.js","development":"./dist/dev/main.js"}},"gitHead":"f5c58d9c370be18b310796f77a8f80d5d99dcfd5","scripts":{"b":"bun run build","t":"bun run test","w":"bun run watch","cl":"bun run clean","lint":"eslint src/ --ext .ts","test":"bun test","build":"bun run build:ts && bun run build:es","clean":"rm -rfv dist *.tsbuildinfo","watch":"bun run watch:ts & bun run watch:es","format":"prettier --write \"src/**/*.ts\"","build:es":"bun run build:es:dev && bun run build:es:prod","build:ts":"tsc --build","watch:es":"bun run build:es:dev --watch","watch:ts":"bun run build:ts --watch --preserveWatchOutput","build:es:dev":"nano-build --preset=module --outdir=dist/dev src/main.ts","build:es:prod":"NODE_ENV=production nano-build --preset=module --outdir=dist src/main.ts"},"_npmUser":{"name":"alimd","email":"ali.mihan.doost@gmail.com"},"repository":{"url":"git+https://github.com/Alwatr/alwatr.git","type":"git","directory":"pkg/bobbin"},"_npmVersion":"lerna/5.4.2/node@v22.23.1+x64 (linux)","description":"A declarative, build-time data pipeline for fetching, validating, and caching external APIs into JSON files.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.14","typescript":"^7.0.2","@alwatr/standard":"10.0.0","@alwatr/nano-build":"10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bobbin_10.0.1_1785085504024_0.9325201096284721","host":"s3://npm-registry-packages-npm-production"}},"10.1.0":{"name":"@alwatr/bobbin","version":"10.1.0","keywords":["alwatr","build-time","bun","cache","data-pipeline","fetch","schema-validation"],"author":{"name":"S. Ali Mihandoost","email":"ali.mihandoost@gmail.com"},"license":"MPL-2.0","_id":"@alwatr/bobbin@10.1.0","maintainers":[{"name":"alimd","email":"ali.mihan.doost@gmail.com"}],"homepage":"https://github.com/Alwatr/alwatr/tree/next/pkg/bobbin#readme","bugs":{"url":"https://github.com/Alwatr/alwatr/issues"},"dist":{"shasum":"fcb8bcc21ada159c139ebdf435d3573e650ef187","tarball":"https://registry.npmjs.org/@alwatr/bobbin/-/bobbin-10.1.0.tgz","fileCount":12,"integrity":"sha512-VVms+AE+BWi2lx7BKURoMmp4svSKeCxmacyC4Vl/+GnyY6AT8cBBBxGhYU8Jj5g6viy5Qwnr/A+oYAX3kgDH8w==","signatures":[{"sig":"MEUCIFPL2isYFCjUA8HlHj1wnK/HbcTJ+AY4BjrXCSYEXH5WAiEAjTdbySG/QKiL0LhYvExyUqD6WK6tMZt+EhHA8np0TXw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42477},"type":"module","exports":{".":{"types":"./dist/main.d.ts","import":"./dist/main.js","default":"./dist/main.js","development":"./dist/dev/main.js"}},"gitHead":"b9efc218052a99652c3cb0bc990496f26b5b18cf","scripts":{"b":"bun run build","t":"bun run test","w":"bun run watch","cl":"bun run clean","lint":"eslint src/ --ext .ts","test":"bun test","build":"bun run build:ts && bun run build:es","clean":"rm -rfv dist *.tsbuildinfo","watch":"bun run watch:ts & bun run watch:es","format":"prettier --write \"src/**/*.ts\"","build:es":"bun run build:es:dev && bun run build:es:prod","build:ts":"tsc --build","watch:es":"bun run build:es:dev --watch","watch:ts":"bun run build:ts --watch --preserveWatchOutput","build:es:dev":"nano-build --preset=module --outdir=dist/dev src/main.ts","build:es:prod":"NODE_ENV=production nano-build --preset=module --outdir=dist src/main.ts"},"_npmUser":{"name":"alimd","email":"ali.mihan.doost@gmail.com"},"repository":{"url":"git+https://github.com/Alwatr/alwatr.git","type":"git","directory":"pkg/bobbin"},"_npmVersion":"lerna/5.6.1/node@v22.23.2+x64 (linux)","description":"A declarative, build-time data pipeline for fetching, validating, and caching external APIs into JSON files.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.4.0","typescript":"^7.0.2","@alwatr/standard":"10.0.0","@alwatr/nano-build":"10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bobbin_10.1.0_1788188308052_0.13512373588825555","host":"s3://npm-registry-packages-npm-production"}},"10.2.0":{"name":"@alwatr/bobbin","version":"10.2.0","description":"A declarative, build-time data pipeline for fetching, validating, and caching external APIs into JSON files.","license":"MPL-2.0","author":{"name":"S. Ali Mihandoost","email":"ali.mihandoost@gmail.com"},"type":"module","repository":{"type":"git","url":"git+https://github.com/Alwatr/alwatr.git","directory":"pkg/bobbin"},"homepage":"https://github.com/Alwatr/alwatr/tree/next/pkg/bobbin#readme","bugs":{"url":"https://github.com/Alwatr/alwatr/issues"},"exports":{".":{"types":"./dist/main.d.ts","development":"./dist/dev/main.js","import":"./dist/main.js","default":"./dist/main.js"}},"sideEffects":false,"devDependencies":{"@alwatr/nano-build":"10.0.0","@alwatr/standard":"10.0.0","@types/bun":"^1.4.2","typescript":"^7.0.2"},"scripts":{"b":"bun run build","build":"bun run build:ts && bun run build:es","build:es":"bun run build:es:dev && bun run build:es:prod","build:es:dev":"nano-build --preset=module --outdir=dist/dev src/main.ts","build:es:prod":"NODE_ENV=production nano-build --preset=module --outdir=dist src/main.ts","build:ts":"tsc --build","cl":"bun run clean","clean":"rm -rfv dist *.tsbuildinfo","format":"prettier --write \"src/**/*.ts\"","lint":"eslint src/ --ext .ts","t":"bun run test","test":"ALWATR_DEBUG=0 bun test","w":"bun run watch","watch":"bun run watch:ts & bun run watch:es","watch:es":"bun run build:es:dev --watch","watch:ts":"bun run build:ts --watch --preserveWatchOutput"},"publishConfig":{"access":"public"},"keywords":["alwatr","build-time","bun","cache","data-pipeline","fetch","schema-validation"],"gitHead":"2a0a52415ec6af039244806419c3b79734994c71","_id":"@alwatr/bobbin@10.2.0","_nodeVersion":"22.23.2","_npmVersion":"lerna/5.6.1/node@v22.23.2+x64 (linux)","dist":{"integrity":"sha512-g8v0M80/WcZhd7AYM+zHjEFk7nK9Al7WGDtVTbzp3UrkTy0DL1KKyUvRE0wBWVhAOmG6sCONHOeqzQzszp8f/w==","shasum":"30a64e2988875f947a0f24f9ab5f81fcdeb43374","tarball":"https://registry.npmjs.org/@alwatr/bobbin/-/bobbin-10.2.0.tgz","fileCount":12,"unpackedSize":42492,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCciLPas7uzhLRAl/9rtNheTUKJttiQZQX9E8+AaG0D8gIgE+7B4pa/KdfNbH23zmz0K22Rbhl3y0XRk5C7fMekpCQ="}]},"_npmUser":{"name":"alimd","email":"ali.mihan.doost@gmail.com"},"directories":{},"maintainers":[{"name":"alimd","email":"ali.mihan.doost@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bobbin_10.2.0_1788887073391_0.689426149846315"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-26T14:21:46.023Z","modified":"2026-09-08T17:04:33.712Z","10.0.0":"2026-07-26T14:21:46.278Z","10.0.1":"2026-07-26T17:05:04.174Z","10.1.0":"2026-08-31T14:58:28.193Z","10.2.0":"2026-09-08T17:04:33.534Z"},"bugs":{"url":"https://github.com/Alwatr/alwatr/issues"},"author":{"name":"S. Ali Mihandoost","email":"ali.mihandoost@gmail.com"},"license":"MPL-2.0","homepage":"https://github.com/Alwatr/alwatr/tree/next/pkg/bobbin#readme","keywords":["alwatr","build-time","bun","cache","data-pipeline","fetch","schema-validation"],"repository":{"type":"git","url":"git+https://github.com/Alwatr/alwatr.git","directory":"pkg/bobbin"},"description":"A declarative, build-time data pipeline for fetching, validating, and caching external APIs into JSON files.","maintainers":[{"name":"alimd","email":"ali.mihan.doost@gmail.com"}],"readme":"# `@alwatr/bobbin`\n\nA declarative, zero-dependency, build-time data pipeline for fetching, validating, and caching external APIs into JSON files.\n\nPart of the Alwatr framework, originally extracted from `@alwatr/loom` to provide a standalone caching mechanism for static assets and page content during build-time.\n\n## Installation\n\nThis is a private monorepo package. In client workspaces:\n\n```json\n\"devDependencies\": {\n  \"@alwatr/bobbin\": \"workspace:*\"\n}\n```\n\n## API Usage\n\n### 1. Defining a Source\n\nA `Source` represents an external data endpoint (e.g. an API, Google Sheet, local file). It contains a name, a loader function, and an optional schema validator.\n\n```typescript\nimport { defineSource } from \"@alwatr/bobbin\";\n\nexport interface Post {\n  id: number;\n  title: string;\n}\n\nexport const postsSource = defineSource<Post>({\n  name: \"posts\",\n  load: async () => {\n    const res = await fetch(\"https://api.example.com/posts\");\n    return res.json();\n  },\n  schema: (data): data is Post => {\n    return Array.isArray(data) && data.every((item) => typeof item.id === \"number\");\n  },\n});\n```\n\n### 2. Defining a Configuration\n\nA configuration groups one or more data sources and defines where to write the results.\n\n```typescript\nimport { defineData } from \"@alwatr/bobbin\";\nimport { postsSource } from \"./posts.source.js\";\n\nexport const config = defineData({\n  outDir: \"src/data/.generated\",\n  sources: [postsSource],\n  /**\n   * Optional: minify the JSON files written to disk (removes whitespace/newlines).\n   * By default, this is false and JSON outputs are pretty-printed with 2 spaces.\n   */\n  minify: true,\n});\n```\n\n### 3. Building the Data\n\nTrigger the data compilation script. Typically run once on checkout or when data updates.\n\n```typescript\nimport { buildData } from \"@alwatr/bobbin\";\nimport { config } from \"./config.js\";\n\nawait buildData(config);\nconsole.log(\"Data successfully fetched and written to disk!\");\n```\n\n## License\n\nMPL-2.0\n","readmeFilename":"README.md"}