{"id":17146527,"url":"https://github.com/chrisjohnsen/isbn-export-tool","last_synced_at":"2026-05-03T19:34:37.653Z","repository":{"id":153678418,"uuid":"620679922","full_name":"ChrisJohnsen/ISBN-Export-Tool","owner":"ChrisJohnsen","description":"Scriptable and Node tool for extracting ISBNs from book list exports, optionally including other editions","archived":false,"fork":false,"pushed_at":"2025-02-19T03:48:22.000Z","size":2386,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-19T04:28:10.934Z","etag":null,"topics":["dynamic-type","goodreads","isbn","librarything","node","open-library","scriptable-app","uitable"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ChrisJohnsen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-29T06:53:28.000Z","updated_at":"2025-02-19T03:48:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"48d333d0-d2f0-4c99-af89-e1de868d3320","html_url":"https://github.com/ChrisJohnsen/ISBN-Export-Tool","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChrisJohnsen%2FISBN-Export-Tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChrisJohnsen%2FISBN-Export-Tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChrisJohnsen%2FISBN-Export-Tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChrisJohnsen%2FISBN-Export-Tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ChrisJohnsen","download_url":"https://codeload.github.com/ChrisJohnsen/ISBN-Export-Tool/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245257504,"owners_count":20585973,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dynamic-type","goodreads","isbn","librarything","node","open-library","scriptable-app","uitable"],"created_at":"2024-10-14T21:08:55.645Z","updated_at":"2026-05-03T19:34:37.623Z","avatar_url":"https://github.com/ChrisJohnsen.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Using a book list app or service is a great way to track books you have read and those you want to read. Unfortunately it is quite easy for your \"to be read\" list to grow until it is difficult to review while browsing books.\n\nMany book sources (libraries, stores, etc.) will let you maintain lists (or wishlists), but there may be no good way to import your \"to be read\" list from your book list service.\n\nThis programs in this repository aim to bridge that gap for services that can import a list of ISBNs. Starting with an export from your book list service, they can:\n\n1. select a portion of your book list entries (e.g. your \"to be read\" list)\n2. review entries that are missing ISBNs (some eBooks and audio books do not use ISBNs and book list services sometimes use these as the default edition of a book if you do not pick a different one),\n3. extract the ISBNs of your book entries,\n4. optionally add the ISBNs of other editions of your books (using external services),\n5. produce the extracted (and, optionally, expanded) list of ISBNs.\n\nThen you can upload this list of ISBNs to a book source (i.e. library or book store) to find out which books they have available.\n\n# Platforms\n\nThis repository has a Node program for command-line use on \"PC\" systems\n(Windows/Mac), and a Scriptable program for use on iOS devices.\n\n# Supported Book List Services\n\nThe programs understand these services' export formats:\n\n* Goodreads\n    * CSV with its specific set of columns\n    * its \"shelves\" system\n* LibraryThing\n    * TSV with its specific set of columns\n    * its \"collections and tags\" system\n\nSuggest your favorite book list format for support in future versions!\n\n# Development\n\nThis software is developed with Node.js using the IDE and tooling described\nbelow. It runs in the iOS Scriptable app, and in Node.js (for easier testing of\nthe functionality that can be shared). A webpage-based version should also be\npossible, but is not a primary focus.\n\n## Editor/IDE\n\nThis repository is set up for use with VS Code. Other editors might benefit from\nadditional [Yarn Editor SDKs][sdks].\n\n[sdks]: https://yarnpkg.com/getting-started/editor-sdks\n\n## CLI\n\nNote: The `yarn workspace` command version of the following commands uses the\nworkspace's package name. The other top level command uses some form of the path\nto the package. These might not always be the same (i.e. `package.json` `\"name\"`\ncan be different from the name of the directory that contains the\n`package.json`).\n\n### TypeScript\n\nNote: Files under `tests/` are not included in the package-level\n`tsconfig.json`. Those must be processed separately, as shown below.\n\n    yarn tsc -p packages/foo\n    yarn workspace foo run --top-level tsc\n    packages/foo\u003e yarn run --top-level tsc          # cwd in workspace\n\n    yarn tsc -p packages/foo/tests\n    packages/foo/tests\u003e yarn run --top-level tsc    # cwd in workspace tests\n\n### ESLint\n\n    yarn eslint packages/foo\n    yarn workspace foo run --top-level eslint\n    packages/foo\u003e yarn run --top-level eslint       # cwd in workspace\n\n### Rollup\n\n    yarn rollup -c      # top level config \"imports\" each package's config\n\n    yarn workspace foo run --top-level rollup -c\n    packages/foo\u003e yarn run --top-level rollup -c    # cwd in workspace\n\n### Jest\n\nNote: A `package.json` `\"script\"` is used to add `--experimental-vm-modules` to\nNode's options. This lets us directly use ESM test files. If Jest is run\nwith/without this flag the cached transformations can cause problems when Jest\nis run again without/with the flag (e.g. `Cannot use import statement outside a\nmodule` (ESM files, cached with, run again without) and `exports is not defined`\n(TS ESM files, cached without, run again with)). So, avoid using\n`--binaries-only`/`-B` with the `jest` script.\n\n    yarn jest               # all tests in all packages\n    yarn jest packages/foo  # regexp filter test pathnames\n    yarn jest -t regexp     # regexp filter describe and test strings\n\n# Releases\n\nThe Node tool is not currently bundled and released (if you already have Node, a\n`yarn install` and `yarn rollup -c` should get you there).\n\nThe fully-bundled Scriptable tool is released on a separately-rooted (\"orphan\")\nbranch named `released`. This pre-bundled file can be used to distribute the\nprogram to iOS-only Scriptable users.\n\nThe Scriptable content of this branch is created with these steps:\n\n1. Commit all the desired changes and stash any incomplete changes to tracked files.\n\n    The committed changes to `packages/utils/src/version.ts` should include a new\n    (previously untagged) version number.\n\n2. Create an annotated (or annotated and signed) tag for the new release.\n\n        git tag -a v1.0\n\n    The tag's annotation text should include a summary of what has changed.\n\n3. Make sure the `released` branch is checked out in a worktree at the top of\n   the main repository. Skip this step, if it is already present.\n\n        git worktree add released\n\n4. Run the Scriptable release helper:\n\n        yarn workspace scriptable run release\n\n    Or, from inside the Scriptable package:\n\n        packages/Scriptable\u003e yarn run release\n\n    This will check that the worktree is clean and tagged, run a release-mode\n    Rollup, and check the released file's header for a Git description\n    annotation, production mode, and make sure it doesn't have too many newlines\n    (as a proxy for minification).\n\n5. Commit in the `released` worktree.\n\n        released\u003e git commit -a\n\n    The commit message should mention which version is being released.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisjohnsen%2Fisbn-export-tool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchrisjohnsen%2Fisbn-export-tool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisjohnsen%2Fisbn-export-tool/lists"}