From 6fc1d1e7fde6ed70d34ffcd5b249f7c24b9e24de Mon Sep 17 00:00:00 2001 From: devlooped-bot Date: Wed, 15 Apr 2026 00:48:15 +0000 Subject: [PATCH] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20files=20with=20dotn?= =?UTF-8?q?et-file=20sync=20=EF=BB=BF#=20devlooped/oss?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Enhance documentation instructions for project work https://github.com/devlooped/oss/commit/e616d89 - Use GH_TOKEN if available for PR https://github.com/devlooped/oss/commit/77e83f2 - Ignore .env files recursively https://github.com/devlooped/oss/commit/3776526 - Improve default Product metadata, remove .git from user-facing URLs https://github.com/devlooped/oss/commit/4339749 - Ignore *.local recursively https://github.com/devlooped/oss/commit/a225b7a - If the OSMF eula is present, switch to its license file https://github.com/devlooped/oss/commit/4b84c54 - Consider either None or Content for OSMF license patching https://github.com/devlooped/oss/commit/083a37b - Enhance include workflow with OSMF EULA support https://github.com/devlooped/oss/commit/f2050db - Set severity of IDE1100 to none https://github.com/devlooped/oss/commit/1ed9afe - Trim whitespace in file content replacement https://github.com/devlooped/oss/commit/e53557f - Set explicit tab size and eol for code files https://github.com/devlooped/oss/commit/5dba0d0 - Fix path pattern for markdown files in workflow https://github.com/devlooped/oss/commit/6a6de05 - Revert EOL change in editorconfig for C# files https://github.com/devlooped/oss/commit/2d0e5a5 - Revert indent size for project files https://github.com/devlooped/oss/commit/a62c459 - Fix error message quotes in includes.yml https://github.com/devlooped/oss/commit/26e8cb7 - Change label from 'docs' to 'dependencies' https://github.com/devlooped/oss/commit/2d1fb4e - Avoid failure on PR creation if osmfeula.txt doesn't exist in repo https://github.com/devlooped/oss/commit/8ff5178 - Update create-pull-request action to version 8 https://github.com/devlooped/oss/commit/0662872 - Group Spectre.Console updates https://github.com/devlooped/oss/commit/917ff54 - Group MEAI packages together https://github.com/devlooped/oss/commit/e733294 - Ensure lf for Scriban templates always https://github.com/devlooped/oss/commit/4a9aa32 - Add .NET 9.0 so format can succeed https://github.com/devlooped/oss/commit/ec9d7cd - Make sure the feed url is available to msbuild https://github.com/devlooped/oss/commit/931da83 - Move dotnet setup to composite action https://github.com/devlooped/oss/commit/08c7077 - Switch to dotnet-env for .NET SDK setup https://github.com/devlooped/oss/commit/56c2b85 - Switch to dnx retest shorthand https://github.com/devlooped/oss/commit/fddfd89 - Ensure quiet confirmation of tool download/install https://github.com/devlooped/oss/commit/e11b002 - Ensure dnx run succeeds even on Windows https://github.com/devlooped/oss/commit/7f5f9ee - Update branches for push event in build.yml https://github.com/devlooped/oss/commit/5da103c - Allow workflow to work cross-org https://github.com/devlooped/oss/commit/af171b7 - Add explicit write permissions from caller workflow https://github.com/devlooped/oss/commit/8fa147d - Publish builds should point to nuget.org not CI feed https://github.com/devlooped/oss/commit/db918f0 - Cap rate limit wait at 5 minutes, abort if longer https://github.com/devlooped/oss/commit/61a602f - Ignore slnx file format too https://github.com/devlooped/oss/commit/68b409c - Support using current Version from CVM https://github.com/devlooped/oss/commit/2fff747 - Update Directory.Build.props with support for underscores in branch name https://github.com/devlooped/oss/commit/81d972f - Add Company MSBuild property by default https://github.com/devlooped/oss/commit/c509be4 - Disable warnings for non-packable test projects https://github.com/devlooped/oss/commit/95b338b - Update versioning scheme in Directory.Build.props https://github.com/devlooped/oss/commit/f2400ef - Enable package pruning in Directory.Build.props https://github.com/devlooped/oss/commit/0ff8b7b - Change file type from None to Content for osmfeula.txt https://github.com/devlooped/oss/commit/fd03672 - Add Pack attribute to OSMFEULA content item https://github.com/devlooped/oss/commit/dd13ed3 --- .editorconfig | 5 + .gitattributes | 1 + .github/copilot-instructions.md | 94 +++++++ .github/dependabot.yml | 8 + .github/workflows/build.yml | 18 +- .github/workflows/dotnet-env.yml | 44 ++++ .github/workflows/dotnet-file.yml | 7 +- .github/workflows/includes.yml | 28 ++- .github/workflows/publish.yml | 15 +- .github/workflows/triage.yml | 6 +- .gitignore | 2 + .netconfig | 69 ++++-- _config.yml | 2 +- readme.md | 64 +++-- src/Directory.Build.props | 34 ++- src/Directory.Build.targets | 19 +- src/ISBN/groups.js | 400 +++++++++++++++++++++++++----- 17 files changed, 661 insertions(+), 155 deletions(-) create mode 100644 .github/copilot-instructions.md create mode 100644 .github/workflows/dotnet-env.yml diff --git a/.editorconfig b/.editorconfig index 4cab270..3ba6837 100644 --- a/.editorconfig +++ b/.editorconfig @@ -30,6 +30,8 @@ indent_size = 2 # Dotnet code style settings: [*.{cs,vb}] +tab_width = 4 + # Sort using and Import directives with System.* appearing first dotnet_sort_system_directives_first = true # Avoid "this." and "Me." if not necessary @@ -57,6 +59,9 @@ dotnet_style_require_accessibility_modifiers = omit_if_default:error # IDE0040: Add accessibility modifiers dotnet_diagnostic.IDE0040.severity = error +# IDE1100: Error reading content of source file 'Project.TargetFrameworkMoniker' (i.e. from ThisAssembly) +dotnet_diagnostic.IDE1100.severity = none + [*.cs] # Top-level files are definitely OK csharp_using_directive_placement = outside_namespace:silent diff --git a/.gitattributes b/.gitattributes index 4f89148..3095556 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,6 +1,7 @@ # normalize by default * text=auto encoding=UTF-8 *.sh text eol=lf +*.sbn eol=lf # These are windows specific files which we may as well ensure are # always crlf on checkout diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..514ebd5 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,94 @@ +# .NET Repository + +**Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.** + +## Working Effectively + +### Essential Build Commands +- **Restore dependencies**: `dotnet restore` + +- **Build the entire solution**: `dotnet build` + +- **Run tests**: `dnx --yes retest` + - Runs all unit tests across the solution + - If tests fail due to Azure Storage, run the following commands and retry: `npm install azurite` and `npx azurite &` + +### Build Validation and CI Requirements +- **Always run before committing**: + * `dnx --yes retest` + * `dotnet format whitespace -v:diag --exclude ~/.nuget` + * `dotnet format style -v:diag --exclude ~/.nuget` + +### Project Structure and Navigation + +| Directory | Description | +|-----------|-------------| +| `src/` | Contains the repo source code. | +| `bin/` | Contains built packages (if any) | + +### Code Style and Formatting + +#### EditorConfig Rules +The repository uses `.editorconfig` at the repo root for consistent code style. + +- **Indentation**: 4 spaces for C# files, 2 spaces for XML/YAML/JSON +- **Line endings**: LF (Unix-style) +- **Sort using directives**: System.* namespaces first (`dotnet_sort_system_directives_first = true`) +- **Type references**: Prefer language keywords over framework type names (`int` vs `Int32`) +- **Modern C# features**: Use object/collection initializers, coalesce expressions when possible, use var when the type is apparent from the right-hand side of the assignment +- **Visibility modifiers**: only explicitly specify visibility when different from the default (e.g. `public` for classes, no `internal` for classes or `private` for fields, etc.) + +#### Formatting Validation +- CI enforces formatting with `dotnet format whitespace` and `dotnet format style` +- Run locally: `dotnet format whitespace --verify-no-changes -v:diag --exclude ~/.nuget` +- Fix formatting: `dotnet format` (without `--verify-no-changes`) + +### Testing Practices + +#### Test Framework +- **xUnit** for all unit and integration tests +- **Moq** for mocking dependencies +- Located in `src/*.Tests/` + +#### Test Attributes +Custom xUnit attributes are sometimes used for conditional test execution: +- `[SecretsFact("XAI_API_KEY")]` - Skips test if required secrets are missing from user secrets or environment variables +- `[LocalFact("SECRET")]` - Runs only locally (skips in CI), requires specified secrets +- `[CIFact]` - Runs only in CI environment + +### Dependency Management + +#### Adding Dependencies +- Add to appropriate `.csproj` file +- Run `dotnet restore` to update dependencies +- Ensure version consistency across projects where applicable + +#### CI/CD Pipeline +- **Build workflow**: `.github/workflows/build.yml` - runs on PR and push to main/rel/feature branches +- **Publish workflow**: Publishes to Sleet feed when `SLEET_CONNECTION` secret is available +- **OS matrix**: Configured in `.github/workflows/os-matrix.json` (defaults to ubuntu-latest) + +### Special Files and Tools + +#### dnx Command +- **Purpose**: built-in tool for running arbitrary dotnet tools that are published on nuget.org. `--yes` auto-confirms install before run. +- **Example**: `dnx --yes retest` - runs tests with automatic retry on transient failures (retest being a tool package published at https://www.nuget.org/packages/retest) +- **In CI**: `dnx --yes retest -- --no-build` (skips build, runs tests only) + +#### Directory.Build.rsp +- MSBuild response file with default build arguments +- `-nr:false` - disables node reuse +- `-m:1` - single-threaded build (for stability) +- `-v:m` - minimal verbosity + +#### Code Quality +- All PRs must pass format validation +- Tests must pass on all target frameworks +- Follow existing patterns and conventions in the codebase + +## Documenting Work + +Project implemention details, design and key decisions should be documented in a top-level AGENTS.md file at the repo root. +Keep this file updated whenever you make change significant changes for future reference. + +User-facing features and APIs should be documented to highlight (not extensively, as an overview) key project features and capabilities, in the readme.md file at the repo root. diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c95eb73..11c5d7d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -24,6 +24,11 @@ updates: Extensions: patterns: - "Microsoft.Extensions*" + exclude-patterns: + - "Microsoft.Extensions.AI*" + ExtensionsAI: + patterns: + - "Microsoft.Extensions.AI*" Web: patterns: - "Microsoft.AspNetCore*" @@ -38,3 +43,6 @@ updates: ProtoBuf: patterns: - "protobuf-*" + Spectre: + patterns: + - "Spectre.Console*" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6653044..94db3ff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ on: - Release - Debug push: - branches: [ main, dev, 'dev/*', 'feature/*', 'rel/*' ] + branches: [ main, 'feature/*', 'rel/*' ] paths-ignore: - changelog.md - readme.md @@ -28,6 +28,7 @@ env: GH_TOKEN: ${{ secrets.GH_TOKEN }} MSBUILDTERMINALLOGGER: auto Configuration: ${{ github.event.inputs.configuration || 'Release' }} + SLEET_FEED_URL: ${{ vars.SLEET_FEED_URL }} defaults: run: @@ -65,20 +66,14 @@ jobs: fetch-depth: 0 - name: ⚙ dotnet - uses: actions/setup-dotnet@v4 - with: - dotnet-version: | - 6.x - 8.x - 9.x + uses: devlooped/actions-dotnet-env@v1 - name: 🙏 build run: dotnet build -m:1 -bl:build.binlog - name: 🧪 test - run: | - dotnet tool update -g dotnet-retest - dotnet retest -- --no-build + shell: pwsh + run: dnx --yes retest -- --no-build - name: 🐛 logs uses: actions/upload-artifact@v4 @@ -104,6 +99,9 @@ jobs: submodules: recursive fetch-depth: 0 + - name: ⚙ dotnet + uses: devlooped/actions-dotnet-env@v1 + - name: ✓ ensure format run: | dotnet format whitespace --verify-no-changes -v:diag --exclude ~/.nuget diff --git a/.github/workflows/dotnet-env.yml b/.github/workflows/dotnet-env.yml new file mode 100644 index 0000000..a76d0fd --- /dev/null +++ b/.github/workflows/dotnet-env.yml @@ -0,0 +1,44 @@ +name: dotnet-env +on: + workflow_dispatch: + push: + branches: + - main + paths: + - '**/*.*proj' + +jobs: + which-dotnet: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + + steps: + - name: 🤖 defaults + uses: devlooped/actions-bot@v1 + with: + name: ${{ secrets.BOT_NAME }} + email: ${{ secrets.BOT_EMAIL }} + gh_token: ${{ secrets.GH_TOKEN }} + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: 🤘 checkout + uses: actions/checkout@v4 + with: + token: ${{ env.GH_TOKEN }} + + - name: 🤌 dotnet + uses: devlooped/actions-which-dotnet@v1 + + - name: ✍ pull request + uses: peter-evans/create-pull-request@v7 + with: + base: main + branch: which-dotnet + delete-branch: true + labels: dependencies + title: "⚙ Update dotnet versions" + body: "Update dotnet versions" + commit-message: "Update dotnet versions" + token: ${{ env.GH_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/dotnet-file.yml b/.github/workflows/dotnet-file.yml index 083f24d..402f6ba 100644 --- a/.github/workflows/dotnet-file.yml +++ b/.github/workflows/dotnet-file.yml @@ -12,5 +12,10 @@ env: jobs: run: + permissions: + contents: write uses: devlooped/oss/.github/workflows/dotnet-file-core.yml@main - secrets: inherit \ No newline at end of file + secrets: + BOT_NAME: ${{ secrets.BOT_NAME }} + BOT_EMAIL: ${{ secrets.BOT_EMAIL }} + GH_TOKEN: ${{ secrets.GH_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/includes.yml b/.github/workflows/includes.yml index d787ccb..fc6dbeb 100644 --- a/.github/workflows/includes.yml +++ b/.github/workflows/includes.yml @@ -5,8 +5,9 @@ on: branches: - 'main' paths: - - '**.md' + - '**.md' - '!changelog.md' + - 'osmfeula.txt' jobs: includes: @@ -31,14 +32,33 @@ jobs: - name: +Mᐁ includes uses: devlooped/actions-includes@v1 + - name: 📝 OSMF EULA + shell: pwsh + run: | + $file = "osmfeula.txt" + $props = "src/Directory.Build.props" + if (-not (test-path $file) -or -not (test-path $props)) { + exit 0 + } + + $product = dotnet msbuild $props -getproperty:Product + if (-not $product) { + write-error 'To use OSMF EULA, ensure the $(Product) property is set in Directory.props' + exit 1 + } + + ((get-content -raw $file) -replace '\$product\$',$product).trim() | set-content $file + - name: ✍ pull request - uses: peter-evans/create-pull-request@v6 + uses: peter-evans/create-pull-request@v8 with: - add-paths: '**.md' + add-paths: | + **.md + *.txt base: main branch: markdown-includes delete-branch: true - labels: docs + labels: dependencies author: ${{ env.BOT_AUTHOR }} committer: ${{ env.BOT_AUTHOR }} commit-message: +Mᐁ includes diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8b065d7..035d811 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -15,7 +15,8 @@ env: VersionLabel: ${{ github.ref }} GH_TOKEN: ${{ secrets.GH_TOKEN }} MSBUILDTERMINALLOGGER: auto - + SLEET_FEED_URL: https://api.nuget.org/v3/index.json + jobs: publish: runs-on: ${{ vars.PUBLISH_AGENT || 'ubuntu-latest' }} @@ -27,20 +28,14 @@ jobs: fetch-depth: 0 - name: ⚙ dotnet - uses: actions/setup-dotnet@v4 - with: - dotnet-version: | - 6.x - 8.x - 9.x + uses: devlooped/actions-dotnet-env@v1 - name: 🙏 build run: dotnet build -m:1 -bl:build.binlog - name: 🧪 test - run: | - dotnet tool update -g dotnet-retest - dotnet retest -- --no-build + shell: pwsh + run: dnx --yes retest -- --no-build - name: 🐛 logs uses: actions/upload-artifact@v4 diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml index 56ff299..99eec76 100644 --- a/.github/workflows/triage.yml +++ b/.github/workflows/triage.yml @@ -49,7 +49,11 @@ jobs: # if we don't have at least 100 requests left, wait until reset if ($rate.remaining -lt 100) { $wait = ($rate.reset - (Get-Date (Get-Date).ToUniversalTime() -UFormat %s)) - echo "Rate limit remaining is $($rate.remaining), waiting for $($wait / 1000) seconds to reset" + if ($wait -gt 300) { + echo "Rate limit remaining is $($rate.remaining), reset in $wait seconds (more than 5'). Aborting." + exit 1 + } + echo "Rate limit remaining is $($rate.remaining), waiting $wait seconds to reset" sleep $wait $rate = gh api rate_limit | convertfrom-json | select -expandproperty rate echo "Rate limit has reset to $($rate.remaining) requests" diff --git a/.gitignore b/.gitignore index 2ac54a7..dfe1fe0 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ BenchmarkDotNet.Artifacts .genaiscript .idea local.settings.json +.env +*.local *.suo *.sdf diff --git a/.netconfig b/.netconfig index 7b42375..5b25a2f 100644 --- a/.netconfig +++ b/.netconfig @@ -27,26 +27,26 @@ skip [file ".editorconfig"] url = https://github.com/devlooped/oss/blob/main/.editorconfig - sha = e81ab754b366d52d92bd69b24bef1d5b1c610634 - etag = 7298c6450967975a8782b5c74f3071e1910fc59686e48f9c9d5cd7c68213cf59 + sha = a62c45934ac2952f2f5d54d8aea4a7ebc1babaff + etag = b5e919b472a52d4b522f86494f0f2c0ba74a6d9601454e20e4cbaf744317ff62 weak [file ".gitattributes"] url = https://github.com/devlooped/oss/blob/main/.gitattributes - sha = 5f92a68e302bae675b394ef343114139c075993e - etag = 338ba6d92c8d1774363396739c2be4257bfc58026f4b0fe92cb0ae4460e1eff7 + sha = 4a9aa321c4982b83c185cf8dffed181ff84667d5 + etag = 09cad18280ed04b67f7f87591e5481510df04d44c3403231b8af885664d8fd58 weak [file ".github/FUNDING.yml"] url = https://github.com/devlooped/.github/blob/main/.github/FUNDING.yml skip [file ".github/dependabot.yml"] url = https://github.com/devlooped/oss/blob/main/.github/dependabot.yml - sha = 49661dbf0720cde93eb5569be7523b5912351560 - etag = c147ea2f3431ca0338c315c4a45b56ee233c4d30f8d6ab698d0e1980a257fd6a + sha = e733294084fb3e75d517a2e961e87df8faae7dc6 + etag = 3bf8d9214a15c049ca5cfe80d212a8cbe4753b8a638a9804ef73d34c7def9618 weak [file ".github/workflows/build.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/build.yml - sha = 06e898ccba692566ebf845fa7c8833ac6c318c0a - etag = 0a4b3f0a875cd8c9434742b4046558aecf610d3fa3d490cfd2099266e95e9195 + sha = 5da103cfbc1c4f9b5f59cfa698d2afbd744a7525 + etag = 851af098748f7cfa5bc3cfd4cc404a6de930532b59ceb2b3b535282c41226f3a weak [file ".github/workflows/changelog.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/changelog.yml @@ -55,18 +55,18 @@ weak [file ".github/workflows/dotnet-file.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/dotnet-file.yml - sha = 59aaf432369b5ea597831d4feec5a6ac4024c2e3 - etag = 1374e3f8c9b7af69c443605c03f7262300dcb7d783738d9eb9fe84268ed2d10c + sha = 8fa147d4799d73819040736c399d0b1db2c2d86c + etag = 1ca805a23656e99c03f9d478dba8ccef6e571f5de2ac0e9bb7e3c5216c99a694 weak [file ".github/workflows/publish.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/publish.yml - sha = 06e898ccba692566ebf845fa7c8833ac6c318c0a - etag = 2f64f75ad01f735fd05290370fb8a826111ac8dd7e74ce04226bb627a54a62ba + sha = 7f5f9ee9f362f7e8f951d618f8f799033550e687 + etag = c60411d1aa4e98e7f69e2d34cbccb8eb7e387ec11f6f8e78ee8d8b92122d7025 weak [file ".gitignore"] url = https://github.com/devlooped/oss/blob/main/.gitignore - sha = e0be248fff1d39133345283b8227372b36574b75 - etag = c449ec6f76803e1891357ca2b8b4fcb5b2e5deeff8311622fd92ca9fbf1e6575 + sha = a225b7a9f609f26bcc24e0d84f663387be251a7d + etag = 20a8b49d57024abbd85aac5b0020c30e5eb68e0384b2761e93727c8780c4a991 weak [file "Directory.Build.rsp"] url = https://github.com/devlooped/oss/blob/main/Directory.Build.rsp @@ -75,8 +75,8 @@ weak [file "_config.yml"] url = https://github.com/devlooped/oss/blob/main/_config.yml - sha = fa83a5161ba52bc5d510ce0ba75ee0b1f8d4bc63 - etag = 9139148f845adf503fd3c3c140eb64421fc476a1f9c027fc50825c0efb05f557 + sha = 68b409c486842062e0de0e5b11e6fdb7cd12d6e2 + etag = d608aa0ddaedc2d8a87260f50756e8d8314964ad4671b76bd085bcb458757010 weak [file "assets/css/style.scss"] url = https://github.com/devlooped/oss/blob/main/assets/css/style.scss @@ -90,13 +90,13 @@ weak [file "src/Directory.Build.props"] url = https://github.com/devlooped/oss/blob/main/src/Directory.Build.props - sha = b76de49afb376aa48eb172963ed70663b59b31d3 - etag = c8b56f3860cc7ccb8773b7bd6189f5c7a6e3a2c27e9104c1ee201fbdc5af9873 + sha = dd13ed3334135c30dcb1e3b2295dc7622de298d9 + etag = bd05f9f240823c0ac79ddfefe654061550c36f82dd94fa513b82900e92686a5f weak [file "src/Directory.Build.targets"] url = https://github.com/devlooped/oss/blob/main/src/Directory.Build.targets - sha = a8b208093599263b7f2d1fe3854634c588ea5199 - etag = 19087699f05396205e6b050d999a43b175bd242f6e8fac86f6df936310178b03 + sha = 083a37bd9307ec820bac6ee3c7384083151d36d8 + etag = 907682e5632a2ba430357e6e042a4ca33cb8c94a3a215d3091aa03f5958a4877 weak [file "src/kzu.snk"] url = https://github.com/devlooped/oss/blob/main/src/kzu.snk @@ -106,12 +106,12 @@ [file "src/ISBN/groups.js"] url = https://github.com/inventaire/isbn3/blob/master/lib/groups.js sha = 469a46f5b93875349cb7fae88aea25101910c179 - etag = 8e0bf213916abd3e148bb825e0ba4b6131c24c18b3a518f7656f9e976142c7b2 + etag = 2ef8cc17f45fb9f32250fdb34af9e571bb3b362df71c991c37b5a585571966f5 weak [file ".github/workflows/includes.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/includes.yml - sha = 85829f2510f335f4a411867f3dbaaa116c3ab3de - etag = 086f6b6316cc6ea7089c0dcc6980be519e6ed6e6201e65042ef41b82634ec0ee + sha = 06628725a6303bb8c4cf3076a384fc982a91bc0b + etag = 478f91d4126230e57cc601382da1ba23f9daa054645b4af89800d8dd862e64fd weak [file ".github/workflows/combine-prs.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/combine-prs.yml @@ -141,11 +141,30 @@ skip [file ".github/workflows/triage.yml"] url = https://github.com/devlooped/oss/blob/main/.github/workflows/triage.yml - sha = 33000c0c4ab4eb4e0e142fa54515b811a189d55c - etag = 013a47739e348f06891f37c45164478cca149854e6cd5c5158e6f073f852b61a + sha = 61a602fc61eedbdae235f01e93657a6219ac2427 + etag = 152cd3a559c08da14d1da12a5262ba1d2e0ed6bed6d2eabf5bd209b0c35d8a75 weak [file "src/nuget.config"] url = https://github.com/devlooped/oss/blob/main/src/nuget.config sha = 032439dbf180fca0539a5bd3a019f18ab3484b76 etag = da7c0104131bd474b52fc9bc9f9bda6470e24ae38d4fb9f5c4f719bc01370ab5 weak +[file "readme.tmp.md"] + url = https://github.com/devlooped/oss/blob/main/readme.tmp.md + skip +[file "oss.cs"] + url = https://github.com/devlooped/oss/blob/main/oss.cs + skip +[file ".github/actions/dotnet/action.yml"] + url = https://github.com/devlooped/oss/blob/main/.github/actions/dotnet/action.yml + skip +[file ".github/copilot-instructions.md"] + url = https://github.com/devlooped/oss/blob/main/.github/copilot-instructions.md + sha = e616d89d9537c4b8ccf1c20dd277ab82104167c4 + etag = 6ee650d118a57494d3545d54718ccaa5257b09d54504e9c21514fe596edd9678 + weak +[file ".github/workflows/dotnet-env.yml"] + url = https://github.com/devlooped/oss/blob/main/.github/workflows/dotnet-env.yml + sha = 77e83f238196d2723640abef0c7b6f43994f9747 + etag = fcb9759a96966df40dcd24906fd328ddec05953b7e747a6bb8d0d1e4c3865274 + weak diff --git a/_config.yml b/_config.yml index a61f7e0..04e6093 100644 --- a/_config.yml +++ b/_config.yml @@ -1,3 +1,3 @@ theme: jekyll-theme-slate -exclude: [ 'src/', '*.sln', 'Gemfile*', '*.rsp' ] \ No newline at end of file +exclude: [ 'src/', '*.sln', '*.slnx', 'Gemfile*', '*.rsp' ] diff --git a/readme.md b/readme.md index fc70df2..2f85e37 100644 --- a/readme.md +++ b/readme.md @@ -34,44 +34,38 @@ isbn3 repository which in turn fetches [isbn-international.org](https://www.isbn # Sponsors -[![Clarius Org](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/clarius.png "Clarius Org")](https://github.com/clarius) -[![MFB Technologies, Inc.](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/MFB-Technologies-Inc.png "MFB Technologies, Inc.")](https://github.com/MFB-Technologies-Inc) -[![Torutek](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/torutek-gh.png "Torutek")](https://github.com/torutek-gh) -[![DRIVE.NET, Inc.](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/drivenet.png "DRIVE.NET, Inc.")](https://github.com/drivenet) -[![Keith Pickford](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/Keflon.png "Keith Pickford")](https://github.com/Keflon) -[![Thomas Bolon](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/tbolon.png "Thomas Bolon")](https://github.com/tbolon) -[![Kori Francis](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/kfrancis.png "Kori Francis")](https://github.com/kfrancis) -[![Toni Wenzel](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/twenzel.png "Toni Wenzel")](https://github.com/twenzel) -[![Uno Platform](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/unoplatform.png "Uno Platform")](https://github.com/unoplatform) -[![Dan Siegel](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/dansiegel.png "Dan Siegel")](https://github.com/dansiegel) -[![Reuben Swartz](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/rbnswartz.png "Reuben Swartz")](https://github.com/rbnswartz) -[![Jacob Foshee](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/jfoshee.png "Jacob Foshee")](https://github.com/jfoshee) -[![](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/Mrxx99.png "")](https://github.com/Mrxx99) -[![Eric Johnson](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/eajhnsn1.png "Eric Johnson")](https://github.com/eajhnsn1) -[![Ix Technologies B.V.](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/IxTechnologies.png "Ix Technologies B.V.")](https://github.com/IxTechnologies) -[![David JENNI](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/davidjenni.png "David JENNI")](https://github.com/davidjenni) -[![Jonathan ](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/Jonathan-Hickey.png "Jonathan ")](https://github.com/Jonathan-Hickey) -[![Charley Wu](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/akunzai.png "Charley Wu")](https://github.com/akunzai) -[![Jakob Tikjøb Andersen](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/jakobt.png "Jakob Tikjøb Andersen")](https://github.com/jakobt) -[![Tino Hager](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/tinohager.png "Tino Hager")](https://github.com/tinohager) -[![Ken Bonny](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/KenBonny.png "Ken Bonny")](https://github.com/KenBonny) -[![Simon Cropp](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/SimonCropp.png "Simon Cropp")](https://github.com/SimonCropp) -[![agileworks-eu](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/agileworks-eu.png "agileworks-eu")](https://github.com/agileworks-eu) -[![sorahex](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/sorahex.png "sorahex")](https://github.com/sorahex) -[![Zheyu Shen](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/arsdragonfly.png "Zheyu Shen")](https://github.com/arsdragonfly) -[![Vezel](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/vezel-dev.png "Vezel")](https://github.com/vezel-dev) -[![ChilliCream](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/ChilliCream.png "ChilliCream")](https://github.com/ChilliCream) -[![4OTC](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/4OTC.png "4OTC")](https://github.com/4OTC) -[![Vincent Limo](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/v-limo.png "Vincent Limo")](https://github.com/v-limo) -[![Jordan S. Jones](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/jordansjones.png "Jordan S. Jones")](https://github.com/jordansjones) -[![domischell](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/DominicSchell.png "domischell")](https://github.com/DominicSchell) -[![Joseph Kingry](https://raw.githubusercontent.com/devlooped/sponsors/main/.github/avatars/jkingry.png "Joseph Kingry")](https://github.com/jkingry) +[![Clarius Org](https://avatars.githubusercontent.com/u/71888636?v=4&s=39 "Clarius Org")](https://github.com/clarius) +[![MFB Technologies, Inc.](https://avatars.githubusercontent.com/u/87181630?v=4&s=39 "MFB Technologies, Inc.")](https://github.com/MFB-Technologies-Inc) +[![Khamza Davletov](https://avatars.githubusercontent.com/u/13615108?u=11b0038e255cdf9d1940fbb9ae9d1d57115697ab&v=4&s=39 "Khamza Davletov")](https://github.com/khamza85) +[![SandRock](https://avatars.githubusercontent.com/u/321868?u=99e50a714276c43ae820632f1da88cb71632ec97&v=4&s=39 "SandRock")](https://github.com/sandrock) +[![DRIVE.NET, Inc.](https://avatars.githubusercontent.com/u/15047123?v=4&s=39 "DRIVE.NET, Inc.")](https://github.com/drivenet) +[![Keith Pickford](https://avatars.githubusercontent.com/u/16598898?u=64416b80caf7092a885f60bb31612270bffc9598&v=4&s=39 "Keith Pickford")](https://github.com/Keflon) +[![Thomas Bolon](https://avatars.githubusercontent.com/u/127185?u=7f50babfc888675e37feb80851a4e9708f573386&v=4&s=39 "Thomas Bolon")](https://github.com/tbolon) +[![Kori Francis](https://avatars.githubusercontent.com/u/67574?u=3991fb983e1c399edf39aebc00a9f9cd425703bd&v=4&s=39 "Kori Francis")](https://github.com/kfrancis) +[![Reuben Swartz](https://avatars.githubusercontent.com/u/724704?u=2076fe336f9f6ad678009f1595cbea434b0c5a41&v=4&s=39 "Reuben Swartz")](https://github.com/rbnswartz) +[![Jacob Foshee](https://avatars.githubusercontent.com/u/480334?v=4&s=39 "Jacob Foshee")](https://github.com/jfoshee) +[![](https://avatars.githubusercontent.com/u/33566379?u=bf62e2b46435a267fa246a64537870fd2449410f&v=4&s=39 "")](https://github.com/Mrxx99) +[![Eric Johnson](https://avatars.githubusercontent.com/u/26369281?u=41b560c2bc493149b32d384b960e0948c78767ab&v=4&s=39 "Eric Johnson")](https://github.com/eajhnsn1) +[![Jonathan ](https://avatars.githubusercontent.com/u/5510103?u=98dcfbef3f32de629d30f1f418a095bf09e14891&v=4&s=39 "Jonathan ")](https://github.com/Jonathan-Hickey) +[![Ken Bonny](https://avatars.githubusercontent.com/u/6417376?u=569af445b6f387917029ffb5129e9cf9f6f68421&v=4&s=39 "Ken Bonny")](https://github.com/KenBonny) +[![Simon Cropp](https://avatars.githubusercontent.com/u/122666?v=4&s=39 "Simon Cropp")](https://github.com/SimonCropp) +[![agileworks-eu](https://avatars.githubusercontent.com/u/5989304?v=4&s=39 "agileworks-eu")](https://github.com/agileworks-eu) +[![Zheyu Shen](https://avatars.githubusercontent.com/u/4067473?v=4&s=39 "Zheyu Shen")](https://github.com/arsdragonfly) +[![Vezel](https://avatars.githubusercontent.com/u/87844133?v=4&s=39 "Vezel")](https://github.com/vezel-dev) +[![ChilliCream](https://avatars.githubusercontent.com/u/16239022?v=4&s=39 "ChilliCream")](https://github.com/ChilliCream) +[![4OTC](https://avatars.githubusercontent.com/u/68428092?v=4&s=39 "4OTC")](https://github.com/4OTC) +[![domischell](https://avatars.githubusercontent.com/u/66068846?u=0a5c5e2e7d90f15ea657bc660f175605935c5bea&v=4&s=39 "domischell")](https://github.com/DominicSchell) +[![Adrian Alonso](https://avatars.githubusercontent.com/u/2027083?u=129cf516d99f5cb2fd0f4a0787a069f3446b7522&v=4&s=39 "Adrian Alonso")](https://github.com/adalon) +[![torutek](https://avatars.githubusercontent.com/u/33917059?v=4&s=39 "torutek")](https://github.com/torutek) +[![mccaffers](https://avatars.githubusercontent.com/u/16667079?u=110034edf51097a5ee82cb6a94ae5483568e3469&v=4&s=39 "mccaffers")](https://github.com/mccaffers) +[![Seika Logiciel](https://avatars.githubusercontent.com/u/2564602?v=4&s=39 "Seika Logiciel")](https://github.com/SeikaLogiciel) +[![Andrew Grant](https://avatars.githubusercontent.com/devlooped-user?s=39 "Andrew Grant")](https://github.com/wizardness) +[![Lars](https://avatars.githubusercontent.com/u/1727124?v=4&s=39 "Lars")](https://github.com/latonz) +[![prime167](https://avatars.githubusercontent.com/u/3722845?v=4&s=39 "prime167")](https://github.com/prime167) - -[![Sponsor this project](https://raw.githubusercontent.com/devlooped/sponsors/main/sponsor.png "Sponsor this project")](https://github.com/sponsors/devlooped) -  +[![Sponsor this project](https://avatars.githubusercontent.com/devlooped-sponsor?s=118 "Sponsor this project")](https://github.com/sponsors/devlooped) [Learn more about GitHub Sponsors](https://github.com/sponsors) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 381c383..91e383a 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,4 +1,4 @@ - + @@ -20,6 +20,7 @@ Daniel Cazzulino + Devlooped Copyright (C) Daniel Cazzulino and Contributors. All rights reserved. false MIT @@ -42,6 +43,10 @@ true + + false + + true @@ -126,11 +131,22 @@ <_VersionLabel>$(_VersionLabel.Replace('/merge', '')) <_VersionLabel>$(_VersionLabel.Replace('/', '-')) + + <_VersionLabel>$(_VersionLabel.Replace('_', '-')) $(_VersionLabel) $(_VersionLabel) + + + true + 42.42.0 + $(VersionSuffix).$(GITHUB_RUN_NUMBER) @@ -150,9 +166,25 @@ + + + + + + + 1.0.0 + $(VersionPrefix)-$(VersionSuffix) + $(VersionPrefix) + + diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets index 6232750..a3df56d 100644 --- a/src/Directory.Build.targets +++ b/src/Directory.Build.targets @@ -165,22 +165,35 @@ @(_GitSourceRoot) + + $([System.IO.Path]::GetFileNameWithoutExtension($(PrivateRepositoryUrl))) + $(ProductFromUrl) - $(RepositoryUrl) + $(RepositoryUrl.Replace('.git', '')) $(Description) - $(RepositoryUrl)/blob/main/changelog.md + $(RepositoryUrl.Replace('.git', ''))/blob/main/changelog.md + + + + + OSMFEULA.txt + true + + + + diff --git a/src/ISBN/groups.js b/src/ISBN/groups.js index 58e8eed..aa0495a 100644 --- a/src/ISBN/groups.js +++ b/src/ISBN/groups.js @@ -110,7 +110,11 @@ module.exports = { ], [ '040', - '049' + '047' + ], + [ + '0480', + '0499' ], [ '05', @@ -250,6 +254,14 @@ module.exports = { ], [ '916908', + '919163' + ], + [ + '9191640', + '9195649' + ], + [ + '919565', '919599' ], [ @@ -388,6 +400,14 @@ module.exports = { ], [ '200', + '312' + ], + [ + '3130', + '3139' + ], + [ + '314', '389' ], [ @@ -878,10 +898,10 @@ module.exports = { ], [ '600', - '694' + '691' ], [ - '69500', + '69200', '69999' ], [ @@ -973,7 +993,11 @@ module.exports = { ], [ '5000', - '5224' + '5299' + ], + [ + '99000', + '99999' ] ] }, @@ -1149,6 +1173,26 @@ module.exports = { '00', '10' ], + [ + '110', + '129' + ], + [ + '1300', + '1799' + ], + [ + '180', + '181' + ], + [ + '1830', + '1899' + ], + [ + '19500', + '19999' + ], [ '200', '459' @@ -1196,11 +1240,11 @@ module.exports = { '249' ], [ - '5000', + '4850', '6899' ], [ - '93000', + '91000', '99999' ] ] @@ -1234,10 +1278,10 @@ module.exports = { ], [ '7795', - '8499' + '8999' ], [ - '94000', + '90000', '99999' ] ] @@ -1258,7 +1302,7 @@ module.exports = { '7999' ], [ - '95000', + '92500', '99999' ] ] @@ -1267,12 +1311,12 @@ module.exports = { name: 'Pakistan', ranges: [ [ - '30', + '28', '31' ], [ '500', - '529' + '534' ], [ '7400', @@ -1313,7 +1357,7 @@ module.exports = { '02' ], [ - '460', + '455', '499' ], [ @@ -1321,7 +1365,7 @@ module.exports = { '7999' ], [ - '95000', + '92000', '99999' ] ] @@ -1424,7 +1468,7 @@ module.exports = { ranges: [ [ '00', - '01' + '02' ], [ '250', @@ -1436,14 +1480,14 @@ module.exports = { ], [ '5000', - '6149' + '6349' ], [ '80000', '81824' ], [ - '83000', + '82000', '89999' ], [ @@ -1451,11 +1495,24 @@ module.exports = { '902449' ], [ - '980000', + '975500', '999999' ] ] }, + '978-69990': { + name: 'Zambia registration group', + ranges: [ + [ + '50', + '50' + ], + [ + '997', + '999' + ] + ] + }, '978-7': { name: 'China, People\'s Republic', ranges: [ @@ -1535,7 +1592,11 @@ module.exports = { ], [ '200', - '699' + '689' + ], + [ + '69000', + '69999' ], [ '7000', @@ -2000,7 +2061,7 @@ module.exports = { '649' ], [ - '7000', + '6850', '8199' ], [ @@ -2051,7 +2112,11 @@ module.exports = { ], [ '100', - '479' + '469' + ], + [ + '47000', + '47999' ], [ '48000', @@ -2599,7 +2664,11 @@ module.exports = { ranges: [ [ '00', - '19' + '18' + ], + [ + '19500', + '19999' ], [ '200', @@ -3561,7 +3630,15 @@ module.exports = { ], [ '30000', - '69999' + '67999' + ], + [ + '68', + '68' + ], + [ + '690', + '699' ], [ '765', @@ -3663,11 +3740,7 @@ module.exports = { '5999' ], [ - '94', - '94' - ], - [ - '96', + '92', '99' ] ] @@ -3743,7 +3816,31 @@ module.exports = { ranges: [ [ '00', - '39' + '21' + ], + [ + '220', + '224' + ], + [ + '2250', + '2599' + ], + [ + '26', + '28' + ], + [ + '29000', + '29999' + ], + [ + '30', + '38' + ], + [ + '3900', + '3999' ], [ '400', @@ -3920,7 +4017,7 @@ module.exports = { ranges: [ [ '0', - '1' + '0' ], [ '20', @@ -3932,6 +4029,14 @@ module.exports = { ], [ '37', + '48' + ], + [ + '49000', + '49999' + ], + [ + '50', '52' ], [ @@ -3952,6 +4057,65 @@ module.exports = { ] ] }, + '978-9905': { + name: 'Nepal', + ranges: [ + [ + '0', + '0' + ], + [ + '20', + '23' + ], + [ + '600', + '624' + ], + [ + '9900', + '9999' + ] + ] + }, + '978-9906': { + name: 'Tajikistan', + ranges: [ + [ + '20', + '20' + ], + [ + '700', + '724' + ], + [ + '9900', + '9999' + ] + ] + }, + '978-9907': { + name: 'Ecuador', + ranges: [ + [ + '0', + '0' + ], + [ + '50', + '64' + ], + [ + '800', + '874' + ], + [ + '9500', + '9999' + ] + ] + }, '978-9908': { name: 'Estonia', ranges: [ @@ -3995,14 +4159,22 @@ module.exports = { ranges: [ [ '01', - '09' + '15' ], [ - '630', + '225', + '299' + ], + [ + '5000', + '5499' + ], + [ + '550', '799' ], [ - '8600', + '8000', '9999' ] ] @@ -4046,14 +4218,14 @@ module.exports = { ranges: [ [ '00', - '07' + '09' ], [ '600', - '699' + '709' ], [ - '9550', + '9500', '9999' ] ] @@ -4062,15 +4234,15 @@ module.exports = { name: 'Kenya', ranges: [ [ - '35', + '27', '55' ], [ '700', - '774' + '799' ], [ - '9450', + '9300', '9999' ] ] @@ -4145,7 +4317,7 @@ module.exports = { '699' ], [ - '9700', + '9625', '9999' ] ] @@ -4195,6 +4367,10 @@ module.exports = { '978-9920': { name: 'Morocco', ranges: [ + [ + '200', + '229' + ], [ '23', '42' @@ -4237,12 +4413,16 @@ module.exports = { '20', '29' ], + [ + '5500', + '5999' + ], [ '600', '799' ], [ - '8250', + '8000', '9999' ] ] @@ -4650,7 +4830,11 @@ module.exports = { ], [ '400', - '799' + '789' + ], + [ + '7900', + '7999' ], [ '8', @@ -5366,14 +5550,14 @@ module.exports = { ranges: [ [ '00', - '12' + '19' ], [ '500', - '649' + '749' ], [ - '9700', + '9300', '9999' ] ] @@ -7302,6 +7486,10 @@ module.exports = { '700', '799' ], + [ + '900', + '924' + ], [ '975', '999' @@ -7397,14 +7585,14 @@ module.exports = { ranges: [ [ '0', - '2' + '3' ], [ '50', - '71' + '76' ], [ - '885', + '865', '999' ] ] @@ -7421,7 +7609,7 @@ module.exports = { '69' ], [ - '900', + '850', '999' ] ] @@ -7452,7 +7640,7 @@ module.exports = { ], [ '200', - '219' + '229' ], [ '23', @@ -7485,7 +7673,7 @@ module.exports = { name: 'Luxembourg', ranges: [ [ - '700', + '550', '999' ] ] @@ -7497,6 +7685,10 @@ module.exports = { '0', '0' ], + [ + '10', + '10' + ], [ '50', '54' @@ -7526,6 +7718,23 @@ module.exports = { }, '978-99990': { name: 'Ethiopia', + ranges: [ + [ + '0', + '1' + ], + [ + '45', + '57' + ], + [ + '930', + '999' + ] + ] + }, + '978-99991': { + name: 'Burkina Faso', ranges: [ [ '0', @@ -7533,7 +7742,7 @@ module.exports = { ], [ '50', - '57' + '60' ], [ '960', @@ -7546,14 +7755,14 @@ module.exports = { ranges: [ [ '0', - '1' + '2' ], [ '50', - '64' + '69' ], [ - '950', + '900', '999' ] ] @@ -7563,7 +7772,7 @@ module.exports = { ranges: [ [ '0', - '2' + '4' ], [ '50', @@ -7584,10 +7793,10 @@ module.exports = { ], [ '50', - '52' + '56' ], [ - '985', + '960', '999' ] ] @@ -7597,7 +7806,7 @@ module.exports = { ranges: [ [ '50', - '52' + '55' ], [ '975', @@ -7605,6 +7814,49 @@ module.exports = { ] ] }, + '978-99996': { + name: 'Macau', + ranges: [ + [ + '0', + '1' + ], + [ + '40', + '59' + ], + [ + '900', + '999' + ] + ] + }, + '978-99997': { + name: 'Srpska, Republic of', + ranges: [ + [ + '0', + '0' + ], + [ + '40', + '54' + ], + [ + '950', + '999' + ] + ] + }, + '978-99998': { + name: 'Namibia', + ranges: [ + [ + '80', + '89' + ] + ] + }, '979-10': { name: 'France', ranges: [ @@ -7635,7 +7887,11 @@ module.exports = { ranges: [ [ '00', - '24' + '23' + ], + [ + '24000', + '24999' ], [ '250', @@ -7704,6 +7960,10 @@ module.exports = { '979-8': { name: 'United States', ranges: [ + [ + '1950', + '1999' + ], [ '200', '229' @@ -7713,15 +7973,19 @@ module.exports = { '239' ], [ - '3000', - '3199' + '2400', + '2599' ], [ - '3200', - '3499' + '2600', + '2799' ], [ - '3500', + '2800', + '2999' + ], + [ + '3000', '8849' ], [ @@ -7732,6 +7996,10 @@ module.exports = { '90000', '90999' ], + [ + '950000', + '969999' + ], [ '9850000', '9899999' @@ -7740,6 +8008,10 @@ module.exports = { '9900000', '9929999' ], + [ + '9930000', + '9959999' + ], [ '9985000', '9999999'