lol

Merge remote-tracking branch 'origin/master' into staging-next

K900 b5f3cd3a 73e4d026

+4567 -1729
+158 -96
.github/workflows/labels.yml
··· 6 6 name: "Label PR" 7 7 8 8 on: 9 + schedule: 10 + - cron: '37 * * * *' 9 11 workflow_call: 10 - workflow_run: 11 - workflows: 12 - - Review dismissed 13 - - Review submitted 14 - types: [completed] 12 + workflow_dispatch: 13 + inputs: 14 + updatedWithin: 15 + description: 'Updated within [hours]' 16 + type: number 17 + required: false 18 + default: 0 # everything since last run 15 19 16 20 concurrency: 17 - group: labels-${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.run_id }} 18 - cancel-in-progress: true 21 + # This explicitly avoids using `run_id` for the concurrency key to make sure that only 22 + # *one* non-PR run can run at a time. 23 + group: labels-${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number }} 24 + # PR- and manually-triggered runs will be cancelled, but scheduled runs will be queued. 25 + cancel-in-progress: ${{ github.event_name != 'schedule' }} 19 26 20 27 permissions: 21 28 issues: write # needed to create *new* labels ··· 31 38 runs-on: ubuntu-24.04-arm 32 39 if: "!contains(github.event.pull_request.title, '[skip treewide]')" 33 40 steps: 34 - - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 35 - id: eval 36 - with: 37 - script: | 38 - const run_id = (await github.rest.actions.listWorkflowRuns({ 39 - owner: context.repo.owner, 40 - repo: context.repo.repo, 41 - workflow_id: 'eval.yml', 42 - event: 'pull_request_target', 43 - head_sha: context.payload.pull_request?.head.sha ?? context.payload.workflow_run.head_sha 44 - })).data.workflow_runs[0]?.id 45 - core.setOutput('run-id', run_id) 46 - 47 - - name: Download the comparison results 48 - if: steps.eval.outputs.run-id 49 - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 50 - with: 51 - run-id: ${{ steps.eval.outputs.run-id }} 52 - github-token: ${{ github.token }} 53 - pattern: comparison 54 - path: comparison 55 - merge-multiple: true 41 + - name: Install dependencies 42 + run: npm install @actions/artifact 56 43 57 - - name: Labels from eval 58 - if: steps.eval.outputs.run-id && github.event_name != 'pull_request' 44 + - name: Labels from API data and Eval results 59 45 uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 46 + env: 47 + UPDATED_WITHIN: ${{ inputs.updatedWithin }} 60 48 with: 61 49 script: | 50 + const path = require('node:path') 51 + const { DefaultArtifactClient } = require('@actions/artifact') 62 52 const { readFile } = require('node:fs/promises') 63 53 64 - let pull_requests 65 - if (context.payload.workflow_run) { 66 - // PRs from forks don't have any PRs associated by default. 67 - // Thus, we request the PR number with an API call *to* the fork's repo. 68 - // Multiple pull requests can be open from the same head commit, either via 69 - // different base branches or head branches. 70 - const { head_repository, head_sha, repository } = context.payload.workflow_run 71 - pull_requests = (await github.paginate(github.rest.repos.listPullRequestsAssociatedWithCommit, { 72 - owner: head_repository.owner.login, 73 - repo: head_repository.name, 74 - commit_sha: head_sha 75 - })).filter(pull_request => pull_request.base.repo.id == repository.id) 76 - } else { 77 - pull_requests = [ context.payload.pull_request ] 54 + const artifactClient = new DefaultArtifactClient() 55 + 56 + if (process.env.UPDATED_WITHIN && !/^\d+$/.test(process.env.UPDATED_WITHIN)) 57 + throw new Error('Please enter "updated within" as integer in hours.') 58 + 59 + const cutoff = new Date(await (async () => { 60 + // Always run for Pull Request triggers, no cutoff since there will be a single 61 + // response only anyway. 0 is the Unix epoch, so always smaller. 62 + if (context.payload.pull_request?.number) return 0 63 + 64 + // Manually triggered via UI when updatedWithin is set. Will fallthrough to the last 65 + // option if the updatedWithin parameter is set to 0, which is the default. 66 + const updatedWithin = Number.parseInt(process.env.UPDATED_WITHIN, 10) 67 + if (updatedWithin) return new Date().getTime() - updatedWithin * 60 * 60 * 1000 68 + 69 + // Normally a scheduled run, but could be workflow_dispatch, see above. Go back as far 70 + // as the last successful run of this workflow to make sure we are not leaving anyone 71 + // behind on GHA failures. 72 + // Defaults to go back 1 hour on the first run. 73 + return (await github.rest.actions.listWorkflowRuns({ 74 + ...context.repo, 75 + workflow_id: 'labels.yml', 76 + event: 'schedule', 77 + status: 'success', 78 + exclude_pull_requests: true 79 + })).data.workflow_runs[0]?.created_at ?? new Date().getTime() - 1 * 60 * 60 * 1000 80 + })()) 81 + core.info('cutoff timestamp: ' + cutoff.toISOString()) 82 + 83 + // To simplify this action's logic we fetch the pull_request data again below, even if 84 + // we are already in a pull_request event's context and would have the data readily 85 + // available. We do this by filtering the list of pull requests with head and base 86 + // branch - there can only be a single open Pull Request for any such combination. 87 + const prEventCondition = !context.payload.pull_request ? undefined : { 88 + // "label" is in the format of `user:branch` or `org:branch` 89 + head: context.payload.pull_request.head.label, 90 + base: context.payload.pull_request.base.ref 78 91 } 79 92 80 - await Promise.all( 81 - pull_requests.map(async (pull_request) => { 82 - const pr = { 83 - owner: context.repo.owner, 84 - repo: context.repo.repo, 85 - issue_number: pull_request.number 86 - } 93 + await github.paginate( 94 + github.rest.pulls.list, 95 + { 96 + ...context.repo, 97 + state: 'open', 98 + sort: 'updated', 99 + direction: 'desc', 100 + ...prEventCondition 101 + }, 102 + async (response, done) => (await Promise.allSettled(response.data.map(async (pull_request) => { 103 + try { 104 + const log = (k,v) => core.info(`PR #${pull_request.number} - ${k}: ${v}`) 87 105 88 - // Get all currently set labels that we manage 89 - const before = 90 - (await github.paginate(github.rest.issues.listLabelsOnIssue, pr)) 91 - .map(({ name }) => name) 92 - .filter(name => 93 - name.startsWith('10.rebuild') || 94 - name == '11.by: package-maintainer' || 95 - name.startsWith('12.approvals:') || 96 - name == '12.approved-by: package-maintainer' 97 - ) 106 + log('Last updated at', pull_request.updated_at) 107 + if (new Date(pull_request.updated_at) < cutoff) return done() 98 108 99 - const approvals = new Set( 100 - (await github.paginate(github.rest.pulls.listReviews, { 101 - owner: context.repo.owner, 102 - repo: context.repo.repo, 103 - pull_number: pull_request.number 104 - })) 105 - .filter(review => review.state == 'APPROVED') 106 - .map(review => review.user.id) 107 - ) 109 + const run_id = (await github.rest.actions.listWorkflowRuns({ 110 + ...context.repo, 111 + workflow_id: 'eval.yml', 112 + event: 'pull_request_target', 113 + // For PR events, the workflow run is still in progress with this job itself. 114 + status: prEventCondition ? 'in_progress' : 'success', 115 + exclude_pull_requests: true, 116 + head_sha: pull_request.head.sha 117 + })).data.workflow_runs[0]?.id 108 118 109 - const maintainers = new Set(Object.keys( 110 - JSON.parse(await readFile('comparison/maintainers.json', 'utf-8')) 111 - )) 119 + // Newer PRs might not have run Eval to completion, yet. We can skip them, because this 120 + // job will be run as part of that Eval run anyway. 121 + log('Last eval run', run_id) 122 + if (!run_id) return; 112 123 113 - // And the labels that should be there 114 - const after = JSON.parse(await readFile('comparison/changed-paths.json', 'utf-8')).labels 115 - if (approvals.size > 0) after.push(`12.approvals: ${approvals.size > 2 ? '3+' : approvals.size}`) 116 - if (Array.from(maintainers).some(m => approvals.has(m))) after.push('12.approved-by: package-maintainer') 124 + const artifact = (await github.rest.actions.listWorkflowRunArtifacts({ 125 + ...context.repo, 126 + run_id, 127 + name: 'comparison' 128 + })).data.artifacts[0] 117 129 118 - // Remove the ones not needed anymore 119 - await Promise.all( 120 - before.filter(name => !after.includes(name)) 121 - .map(name => github.rest.issues.removeLabel({ 122 - ...pr, 123 - name 124 - })) 125 - ) 130 + // Instead of checking the boolean artifact.expired, we will give us a minute to 131 + // actually download the artifact in the next step and avoid that race condition. 132 + log('Artifact expires at', artifact.expires_at) 133 + if (new Date(artifact.expires_at) < new Date(new Date().getTime() + 60 * 1000)) return; 126 134 127 - // And add the ones that aren't set already 128 - const added = after.filter(name => !before.includes(name)) 129 - if (added.length > 0) { 130 - await github.rest.issues.addLabels({ 131 - ...pr, 132 - labels: added 135 + await artifactClient.downloadArtifact(artifact.id, { 136 + findBy: { 137 + repositoryName: context.repo.repo, 138 + repositoryOwner: context.repo.owner, 139 + token: core.getInput('github-token') 140 + }, 141 + path: path.resolve(pull_request.number.toString()), 142 + expectedHash: artifact.digest 133 143 }) 144 + 145 + // Get all currently set labels that we manage 146 + const before = 147 + pull_request.labels.map(({ name }) => name) 148 + .filter(name => 149 + name.startsWith('10.rebuild') || 150 + name == '11.by: package-maintainer' || 151 + name.startsWith('12.approvals:') || 152 + name == '12.approved-by: package-maintainer' 153 + ) 154 + 155 + const approvals = new Set( 156 + (await github.paginate(github.rest.pulls.listReviews, { 157 + ...context.repo, 158 + pull_number: pull_request.number 159 + })) 160 + .filter(review => review.state == 'APPROVED') 161 + .map(review => review.user.id) 162 + ) 163 + 164 + const maintainers = new Set(Object.keys( 165 + JSON.parse(await readFile(`${pull_request.number}/maintainers.json`, 'utf-8')) 166 + )) 167 + 168 + // And the labels that should be there 169 + const after = JSON.parse(await readFile(`${pull_request.number}/changed-paths.json`, 'utf-8')).labels 170 + if (approvals.size > 0) after.push(`12.approvals: ${approvals.size > 2 ? '3+' : approvals.size}`) 171 + if (Array.from(maintainers).some(m => approvals.has(m))) after.push('12.approved-by: package-maintainer') 172 + 173 + // Remove the ones not needed anymore 174 + await Promise.all( 175 + before.filter(name => !after.includes(name)) 176 + .map(name => github.rest.issues.removeLabel({ 177 + ...context.repo, 178 + issue_number: pull_request.number, 179 + name 180 + })) 181 + ) 182 + 183 + // And add the ones that aren't set already 184 + const added = after.filter(name => !before.includes(name)) 185 + if (added.length > 0) { 186 + await github.rest.issues.addLabels({ 187 + ...context.repo, 188 + issue_number: pull_request.number, 189 + labels: added 190 + }) 191 + } 192 + } catch (cause) { 193 + throw new Error(`Labeling PR #${pull_request.number} failed.`, { cause }) 134 194 } 135 - }) 195 + }))) 196 + .filter(({ status }) => status == 'rejected') 197 + .map(({ reason }) => core.setFailed(`${reason.message}\n${reason.cause.stack}`)) 136 198 ) 137 199 138 200 - uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0 139 201 name: Labels from touched files 140 202 if: | 141 - github.event_name != 'workflow_run' && 203 + github.event_name == 'pull_request_target' && 142 204 github.event.pull_request.head.repo.owner.login != 'NixOS' || !( 143 205 github.head_ref == 'haskell-updates' || 144 206 github.head_ref == 'python-updates' || ··· 153 215 - uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0 154 216 name: Labels from touched files (no sync) 155 217 if: | 156 - github.event_name != 'workflow_run' && 218 + github.event_name == 'pull_request_target' && 157 219 github.event.pull_request.head.repo.owner.login != 'NixOS' || !( 158 220 github.head_ref == 'haskell-updates' || 159 221 github.head_ref == 'python-updates' || ··· 171 233 # This is to avoid the mass of labels there, which is mostly useless - and really annoying for 172 234 # the backport labels. 173 235 if: | 174 - github.event_name != 'workflow_run' && 236 + github.event_name == 'pull_request_target' && 175 237 github.event.pull_request.head.repo.owner.login == 'NixOS' && ( 176 238 github.head_ref == 'haskell-updates' || 177 239 github.head_ref == 'python-updates' ||
-17
.github/workflows/review-submitted.yml
··· 1 - name: Review submitted 2 - 3 - on: 4 - pull_request_review: 5 - types: [submitted] 6 - 7 - permissions: {} 8 - 9 - defaults: 10 - run: 11 - shell: bash 12 - 13 - jobs: 14 - trigger: 15 - runs-on: ubuntu-24.04-arm 16 - steps: 17 - - run: echo This is a no-op only used as a trigger for workflow_run.
+393
doc/languages-frameworks/javascript.section.md
··· 879 879 }) 880 880 ``` 881 881 882 + ### buildDenoPackage {#javascript-buildDenoPackage} 883 + 884 + `buildDenoPackage` allows you to package [Deno](https://deno.com/) projects in Nixpkgs without the use of an auto-generated dependencies file (as used in [node2nix](#javascript-node2nix)). 885 + It works by utilizing Deno's cache functionality -- creating a reproducible cache that contains the dependencies of a project, and pointing Deno to it. 886 + 887 + #### buildDenoDeps {#javascript-buildDenoPackage-buildDenoDeps} 888 + 889 + For every `buildDenoPackage`, first, a [fixed output derivation](https://nix.dev/manual/nix/2.18/language/advanced-attributes.html#adv-attr-outputHash) is 890 + created with all the dependencies mentioned in the `deno.lock`. 891 + This works as follows: 892 + 1. They are installed using `deno install`. 893 + 1. All non-reproducible data is pruned. 894 + 1. The directories `.deno`, `node_modules` and `vendor` are copied to `$out`. 895 + 1. The output of the FOD is checked against the `denoDepsHash`. 896 + 1. The output is copied into the build of `buildDenoPackage`, which is not an FOD. 897 + 1. The dependencies are installed again using `deno install`, this time from the local cache only. 898 + 899 + The `buildDenoDeps` derivation is in `passthru`, so it can be accessed from a `buildDenoPackage` derivation with `.denoDeps` 900 + 901 + Related options: 902 + 903 + *`denoDepsHash`* (String) 904 + 905 + : The output hash of the `buildDenoDeps` fixed output derivation. 906 + 907 + *`denoInstallFlags`* (Array of strings; optional) 908 + 909 + : The Flags passed to `deno install`. 910 + 911 + : _Default:_ `[ "--allow-scripts" "--frozen" "--cached-only" ]` for `buildDenoPackage` 912 + : _Default:_ `[ "--allow-scripts" "--frozen" ]` for `buildDenoDeps` (`"--cached-only"` is filtered out) 913 + 914 + ::: {.tip} 915 + If you receive errors like these: 916 + 917 + ``` 918 + error: The lockfile is out of date. Run `deno install --frozen=false`, or rerun with `--frozen=false` to update it. 919 + ``` 920 + 921 + or 922 + 923 + ``` 924 + error: Import '<url>' failed. 925 + 0: error sending request for url (<url>): client error (Connect): dns error: failed to lookup address information: Temporary failure in name resolution: failed to lookup address information:Temporary failure in name resolution 926 + 1: client error (Connect) 927 + 2: dns error: failed to lookup address information: Temporary failure in name resolution 928 + 3: failed to lookup address information: Temporary failure in name resolution 929 + at file:///build/source/src/lib/helpers/verifyRequest.ts:2:21 930 + build for <your-package> failed in buildPhase with exit code 1 931 + ``` 932 + 933 + or 934 + 935 + ``` 936 + error: Specifier not found in cache: "<url>", --cached-only is specified. 937 + 938 + ERROR: deno failed to install dependencies 939 + ``` 940 + 941 + This can happen due to the `deno install` command deducing different packages than what the actual package needs. 942 + 943 + To fix this, add the entrypoint to the install flags: 944 + 945 + ```nix 946 + { buildDenoPackage, nix-gitignore }: 947 + buildDenoPackage { 948 + pname = "myPackage"; 949 + version = "0.1.0"; 950 + denoDepsHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; 951 + src = nix-gitignore.gitignoreSource [ ] ./.; 952 + binaryEntrypointPath = "main.ts"; 953 + denoInstallFlags = [ 954 + "--allow-scripts" 955 + "--frozen" 956 + "--cached-only" 957 + "--entrypoint" 958 + "<path/to/entrypoint/script>" 959 + ]; 960 + } 961 + ``` 962 + 963 + ::: 964 + 965 + #### Private registries {#javascript-buildDenoPackage-private-registries} 966 + There are currently 2 options, which enable the use of private registries in a `buildDenoPackage` derivation. 967 + 968 + *`denoDepsImpureEnvVars`* (Array of strings; optional) 969 + 970 + : Names of impure environment variables passed to the `buildDenoDeps` derivation. They are forwarded to `deno install`. 971 + 972 + : _Example:_ `[ "NPM_TOKEN" ]` 973 + 974 + : It can be used to set tokens for private NPM registries (in a `.npmrc` file). 975 + 976 + : In a single-user installation of Nix, you can put the variables into the environment, when running the nix build. 977 + 978 + : In multi-user installations of Nix, it's necessary to set the environment variables in the nix-daemon, probably with systemd. 979 + 980 + :::{.example} 981 + 982 + ##### configure nix-daemon {#javascript-buildDenoPackage-private-registries-daemon-example} 983 + In NixOS: 984 + 985 + ```nix 986 + # configuration.nix 987 + { 988 + config, 989 + lib, 990 + pkgs, 991 + ... 992 + }: 993 + { 994 + systemd.services.nix-daemon.environment.NPM_TOKEN = "<token>"; 995 + } 996 + ``` 997 + 998 + In other Linux distributions use 999 + 1000 + ``` 1001 + $ sudo systemctl edit nix-daemon 1002 + $ sudo systemctl cat nix-daemon 1003 + $ sudo systemctl restart nix-daemon 1004 + ``` 1005 + 1006 + ::: 1007 + 1008 + *`denoDepsInjectedEnvVars`* (Attrset; optional) 1009 + 1010 + : Environment variables as key value pairs. They are forwarded to `deno install`. 1011 + 1012 + : _Example:_ `{ "NPM_TOKEN" = "<token>"; }` 1013 + 1014 + : It can be used to set tokens for private NPM registries (in a `.npmrc` file). 1015 + You could pass these tokens from the Nix CLI with `--arg`, 1016 + however this can hurt the reproducibility of your builds and such an injected 1017 + token will also need to be injected in every build that depends on this build. 1018 + 1019 + :::{.example} 1020 + 1021 + ##### example `.npmrc` {#javascript-buildDenoPackage-private-registries-npmrc-example} 1022 + 1023 + ```ini 1024 + @<scope>:registry=https://<domain>/<path to private registry> 1025 + //<domain>/<path to private registry>:_authToken=${NPM_TOKEN} 1026 + ``` 1027 + 1028 + ::: 1029 + 1030 + ::: {.caution} 1031 + 1032 + Hardcoding a token into your NixOS configuration or some other nix build, will as a consequence write that token into `/nix/store`, which is considered world readable. 1033 + 1034 + ::: 1035 + 1036 + ::: {.note} 1037 + Neither approach is ideal. For `buildNpmPackage`, there exists a third 1038 + option called `sourceOverrides`, which allows the user to inject Nix packages into 1039 + the output `node_modules` folder. 1040 + Since a Nix build implicitly uses the SSH keys of the machine, 1041 + this offers a third option to access private packages. 1042 + But this creates the requirement, that the imported package is packaged with nix first, 1043 + and that the source code can be retrieved with SSH. 1044 + This is possible for Deno, too, albeit it not 1045 + completely analogous to `buildNpmPackage`'s solution. 1046 + However, it has not been implemented yet. 1047 + ::: 1048 + 1049 + #### Compile to binary {#javascript-buildDenoPackage-compile-to-binary} 1050 + 1051 + It's possible to compile a Deno project to a single binary using `deno compile`. 1052 + The binary will be named like the `.name` property in `deno.json`, if available, 1053 + or the `name` attribute of the derivation. 1054 + 1055 + :::{.caution} 1056 + When using packages with a `npm:` specifier, the resulting binary will not be reproducible. 1057 + See [this issue](https://github.com/denoland/deno/issues/29619) for more information. 1058 + ::: 1059 + 1060 + Related options: 1061 + 1062 + *`hostPlatform`* (String; optional) 1063 + 1064 + : The [host platform](#ssec-cross-platform-parameters) the binary is built for. 1065 + 1066 + : _Default:_ `builtins.currentSystem`. 1067 + 1068 + : _Supported values:_ 1069 + - `"x86_64-darwin"` 1070 + - `"aarch64-darwin"` 1071 + - `"x86_64-linux"` 1072 + - `"aarch64-linux"` 1073 + 1074 + *`denoCompileFlags`* (Array of string; optional) 1075 + 1076 + : Flags passed to `deno compile [denoTaskFlags] ${binaryEntrypointPath} [extraCompileFlags]`. 1077 + 1078 + *`extraCompileFlags`* (Array of string; optional) 1079 + 1080 + : Flags passed to `deno compile [denoTaskFlags] ${binaryEntrypointPath} [extraCompileFlags]`. 1081 + 1082 + *`binaryEntrypointPath`* (String or null; optional) 1083 + 1084 + : If not `null`, a binary is created using the specified path as the entry point. 1085 + The binary is copied to `$out/bin` in the `installPhase`. 1086 + 1087 + : _Default:_ `null` 1088 + 1089 + : It's prefixed by `denoWorkspacePath`. 1090 + 1091 + *`denortPackage`* (Derivation; optional) 1092 + 1093 + : The package used as the Deno runtime, which is bundled with the JavaScript code to create the binary. 1094 + 1095 + : _Default:_ `pkgs.denort` 1096 + 1097 + : Don't use `pkgs.deno` for this, since that is the full Deno CLI, with all the development tooling. 1098 + 1099 + : If you're cross compiling, this needs to be the `denort` of the `hostPlatform`. 1100 + 1101 + ::: {.note} 1102 + The binary will be dynamically linked and not executable on NixOS without [nix-ld](https://github.com/nix-community/nix-ld) 1103 + or [other methods](https://unix.stackexchange.com/questions/522822/different-methods-to-run-a-non-nixos-executable-on-nixos). 1104 + 1105 + ```nix 1106 + # configuration.nix 1107 + { 1108 + config, 1109 + lib, 1110 + pkgs, 1111 + ... 1112 + }: 1113 + { 1114 + programs.nix-ld.enable = true; 1115 + programs.nix-ld.libraries = with pkgs; [ 1116 + glibc 1117 + gcc-unwrapped 1118 + ]; 1119 + } 1120 + ``` 1121 + 1122 + ::: 1123 + 1124 + :::{.example} 1125 + 1126 + ##### example binary build {#javascript-buildDenoPackage-compile-to-binary-example} 1127 + 1128 + ```nix 1129 + { buildDenoPackage, nix-gitignore }: 1130 + buildDenoPackage { 1131 + pname = "myPackage"; 1132 + version = "0.1.0"; 1133 + denoDepsHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; 1134 + src = nix-gitignore.gitignoreSource [ ] ./.; 1135 + binaryEntrypointPath = "main.ts"; 1136 + } 1137 + ``` 1138 + 1139 + ::: 1140 + 1141 + #### Create artifacts in the build {#javascript-buildDenoPackage-artifacts-in-build} 1142 + 1143 + Instead of compiling to a binary, `deno task` can be executed inside the build 1144 + to produce some artifact, which can then be copied out in the `installPhase`. 1145 + 1146 + Related options: 1147 + 1148 + *`denoTaskScript`* (String; optional) 1149 + 1150 + : The task in `deno.json` that's executed with `deno task`. 1151 + 1152 + : _Default:_ `"build"` 1153 + 1154 + *`denoTaskFlags`* (Array of strings; optional) 1155 + 1156 + : The flags passed to `deno task [denoTaskFlags] ${denoTaskScript} [extraTaskFlags]`. 1157 + 1158 + *`extraTaskFlags`* (Array of strings; optional) 1159 + 1160 + : The flags passed to `deno task [denoTaskFlags] ${denoTaskScript} [extraTaskFlags]`. 1161 + 1162 + *`denoTaskPrefix`* (String; optional) 1163 + 1164 + : An unquoted string injected before `deno task`. 1165 + 1166 + *`denoTaskSuffix`* (String; optional) 1167 + 1168 + : An unquoted string injected after `deno task` and all its flags. For example to pipe stdout to a file. 1169 + 1170 + :::{.example} 1171 + 1172 + ##### example artifact build {#javascript-buildDenoPackage-artifacts-in-build-example} 1173 + 1174 + `deno.json` 1175 + 1176 + ```json 1177 + { 1178 + "tasks": { 1179 + "build": "deno run --allow-all main.ts" 1180 + } 1181 + } 1182 + ``` 1183 + 1184 + ```nix 1185 + { buildDenoPackage, nix-gitignore }: 1186 + buildDenoPackage { 1187 + pname = "myPackage"; 1188 + version = "0.1.0"; 1189 + denoDepsHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; 1190 + src = nix-gitignore.gitignoreSource [ ] ./.; 1191 + denoTaskSuffix = ">out.txt"; 1192 + installPhase = '' 1193 + cp ./out.txt $out 1194 + ''; 1195 + } 1196 + ``` 1197 + 1198 + ::: 1199 + 1200 + #### Workspaces {#javascript-buildDenoPackage-workspaces} 1201 + 1202 + Deno's workspaces are supported. 1203 + 1204 + To make them work, the whole project needs to be added as source, since the `deno.lock` 1205 + is always in the root of the project and contains all dependencies. 1206 + 1207 + This means a build with only the required dependencies of a workspace is not possible. 1208 + Also, the `denoDepsHash` for all workspaces is the same, since they 1209 + all share the same dependencies. 1210 + 1211 + When [running a task inside the build](#javascript-buildDenoPackage-artifacts-in-build), 1212 + `denoWorkspacePath` can be used to let the task run inside a workspace. 1213 + 1214 + When [compiling to a binary](#javascript-buildDenoPackage-compile-to-binary), 1215 + `binaryEntrypointPath` is prefixed by `denoWorkspacePath`. 1216 + 1217 + Related options: 1218 + 1219 + *`denoWorkspacePath`* (String; optional) 1220 + 1221 + : The path to a workspace. 1222 + 1223 + :::{.example} 1224 + 1225 + ##### example workspaces {#javascript-buildDenoPackage-workspaces-example} 1226 + 1227 + ```nix 1228 + { buildDenoPackage, nix-gitignore }: 1229 + rec { 1230 + sub1 = buildDenoPackage { 1231 + pname = "sub1"; 1232 + version = "0.1.0"; 1233 + denoDepsHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; 1234 + src = nix-gitignore.gitignoreSource [ ] ./.; 1235 + denoWorkspacePath = "./sub1"; 1236 + denoTaskFlags = [ 1237 + "--text" 1238 + "sub1" 1239 + ]; 1240 + denoTaskSuffix = ">out.txt"; 1241 + installPhase = '' 1242 + cp out.txt $out 1243 + ''; 1244 + }; 1245 + sub2 = buildDenoPackage { 1246 + # Note that we are reusing denoDeps and src, 1247 + # since they must be the same for both workspaces. 1248 + inherit (sub1) denoDeps src; 1249 + pname = "sub2"; 1250 + version = "0.1.0"; 1251 + denoWorkspacePath = "./sub2"; 1252 + binaryEntrypointPath = "./main.ts"; 1253 + }; 1254 + } 1255 + ``` 1256 + 1257 + ::: 1258 + 1259 + #### Other Options {#javascript-buildDenoPackage-other-options} 1260 + 1261 + *`denoDir`* (String; optional) 1262 + 1263 + : `DENO_DIR` will be set to this value for all `deno` commands. 1264 + 1265 + *`denoFlags`* (Array of string; optional) 1266 + 1267 + : The flags passed to all `deno` commands. 1268 + 1269 + *`denoPackage`* (Derivation; optional) 1270 + 1271 + : The Deno CLI used for all `deno` commands inside the build. 1272 + 1273 + : _Default:_ `pkgs.deno` 1274 + 882 1275 ## Outside Nixpkgs {#javascript-outside-nixpkgs} 883 1276 884 1277 There are some other tools available, which are written in the Nix language.
+36
doc/redirects.json
··· 3390 3390 "javascript-nix-npm-buildpackage-pitfalls": [ 3391 3391 "index.html#javascript-nix-npm-buildpackage-pitfalls" 3392 3392 ], 3393 + "javascript-buildDenoPackage-workspaces-example": [ 3394 + "index.html#javascript-buildDenoPackage-workspaces-example" 3395 + ], 3396 + "javascript-buildDenoPackage-private-registries": [ 3397 + "index.html#javascript-buildDenoPackage-private-registries" 3398 + ], 3399 + "javascript-buildDenoPackage-buildDenoDeps": [ 3400 + "index.html#javascript-buildDenoPackage-buildDenoDeps" 3401 + ], 3402 + "javascript-buildDenoPackage-artifacts-in-build": [ 3403 + "index.html#javascript-buildDenoPackage-artifacts-in-build" 3404 + ], 3405 + "javascript-buildDenoPackage-artifacts-in-build-example": [ 3406 + "index.html#javascript-buildDenoPackage-artifacts-in-build-example" 3407 + ], 3408 + "javascript-buildDenoPackage-private-registries-daemon-example": [ 3409 + "index.html#javascript-buildDenoPackage-private-registries-daemon-example" 3410 + ], 3411 + "javascript-buildDenoPackage-private-registries-npmrc-example": [ 3412 + "index.html#javascript-buildDenoPackage-private-registries-npmrc-example" 3413 + ], 3414 + "javascript-buildDenoPackage-compile-to-binary-example": [ 3415 + "index.html#javascript-buildDenoPackage-compile-to-binary-example" 3416 + ], 3417 + "javascript-buildDenoPackage-workspaces": [ 3418 + "index.html#javascript-buildDenoPackage-workspaces" 3419 + ], 3420 + "javascript-buildDenoPackage": [ 3421 + "index.html#javascript-buildDenoPackage" 3422 + ], 3423 + "javascript-buildDenoPackage-other-options": [ 3424 + "index.html#javascript-buildDenoPackage-other-options" 3425 + ], 3426 + "javascript-buildDenoPackage-compile-to-binary": [ 3427 + "index.html#javascript-buildDenoPackage-compile-to-binary" 3428 + ], 3393 3429 "language-julia": [ 3394 3430 "index.html#language-julia" 3395 3431 ],
+2
doc/release-notes/rl-2505.section.md
··· 551 551 552 552 - `ddclient` was updated from 3.11.2 to 4.0.0 [Release notes](https://github.com/ddclient/ddclient/releases/tag/v4.0.0) 553 553 554 + - `buildDenoPackage` was added [see docs](https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/javascript.section.md#avascript-buildDenoPackage) for more details 555 + 554 556 ## Nixpkgs Library {#sec-nixpkgs-release-25.05-lib} 555 557 556 558 ### Breaking changes {#sec-nixpkgs-release-25.05-lib-breaking}
+4 -4
pkgs/applications/editors/vscode/extensions/default.nix
··· 1165 1165 mktplcRef = { 1166 1166 name = "dbclient-jdbc"; 1167 1167 publisher = "cweijan"; 1168 - version = "1.4.4"; 1169 - hash = "sha256-hrymsnprfrRQeS/WRGqdV3MNPw+C+iJCcXF1IfNjGWE="; 1168 + version = "1.4.6"; 1169 + hash = "sha256-989egeJlpJ2AfZra9VSQDQ8e+nQCa2sfoUeti674ecA="; 1170 1170 }; 1171 1171 meta = { 1172 1172 description = "JDBC Adapter For Database Client"; ··· 4621 4621 mktplcRef = { 4622 4622 name = "vscode-stylelint"; 4623 4623 publisher = "stylelint"; 4624 - version = "1.5.1"; 4625 - hash = "sha256-Sbp2zy/6PcsMlUPe94spm3JrWxBYHfd7py3f4rb+0G4="; 4624 + version = "1.5.3"; 4625 + hash = "sha256-fgMs9/gYhhHCkiKJX5rDRbiXy6gxvmLhU6blNxEoNc8="; 4626 4626 }; 4627 4627 meta = { 4628 4628 description = "Official Stylelint extension for Visual Studio Code";
+2 -2
pkgs/applications/editors/vscode/extensions/rooveterinaryinc.roo-cline/default.nix
··· 8 8 mktplcRef = { 9 9 publisher = "RooVeterinaryInc"; 10 10 name = "roo-cline"; 11 - version = "3.19.3"; 12 - hash = "sha256-7GZD7oCrkGcG7B/pgXK92hL0QyyodmqyxOcRhTt5LMs="; 11 + version = "3.20.3"; 12 + hash = "sha256-YCO8TjUZ2IpjTkDYf/4wQgsqGEvn2bt4+yVwWlb2eUQ="; 13 13 }; 14 14 15 15 passthru.updateScript = vscode-extension-update-script { };
+2 -2
pkgs/applications/graphics/tesseract/tesseract5.nix
··· 16 16 17 17 stdenv.mkDerivation rec { 18 18 pname = "tesseract"; 19 - version = "5.5.0"; 19 + version = "5.5.1"; 20 20 21 21 src = fetchFromGitHub { 22 22 owner = "tesseract-ocr"; 23 23 repo = "tesseract"; 24 24 rev = version; 25 - sha256 = "sha256-qyckAQZs3gR1NBqWgE+COSKXhv3kPF+iHVQrt6OPi8s="; 25 + sha256 = "sha256-bLTYdT9CNfgrmmjP6m0rRqJDHiSOkcuGVCFwPqT12jk="; 26 26 }; 27 27 28 28 enableParallelBuilding = true;
+15 -12
pkgs/applications/misc/osmscout-server/default.nix
··· 1 1 { 2 2 lib, 3 - mkDerivation, 3 + stdenv, 4 4 fetchFromGitHub, 5 5 pkg-config, 6 6 qmake, 7 7 qttools, 8 + wrapQtAppsHook, 8 9 boost, 9 10 kirigami2, 10 11 kyotocabinet, ··· 24 25 date = fetchFromGitHub { 25 26 owner = "HowardHinnant"; 26 27 repo = "date"; 27 - rev = "a2fdba1adcb076bf9a8343c07524afdf09aa8dcc"; 28 - sha256 = "00sf1pbaz0g0gsa0dlm23lxk4h46xm1jv1gzbjj5rr9sf1qccyr5"; 28 + rev = "a45ea7c17b4a7f320e199b71436074bd624c9e15"; 29 + hash = "sha256-Mq7Yd+y8M3JNG9BEScwVEmxGWYEy6gaNNSlTGgR9LB4="; 29 30 }; 30 31 in 31 - mkDerivation rec { 32 + stdenv.mkDerivation (finalAttrs: { 32 33 pname = "osmscout-server"; 33 - version = "3.1.0"; 34 + version = "3.1.5"; 34 35 35 36 src = fetchFromGitHub { 36 37 owner = "rinigus"; 37 38 repo = "osmscout-server"; 38 - rev = version; 39 - hash = "sha256-GqUXHn3ZK8gdDlm3TitEp/jhBpQoVeQZUCfAyiyrDEg="; 39 + tag = finalAttrs.version; 40 + hash = "sha256-gmAHX7Gt2oAvTSTCypAjzI5a9TWOPDAYAMD1i1fJVUY="; 40 41 fetchSubmodules = true; 41 42 }; 42 43 ··· 44 45 qmake 45 46 pkg-config 46 47 qttools 48 + wrapQtAppsHook 47 49 ]; 50 + 48 51 buildInputs = [ 49 52 kirigami2 50 53 qtquickcontrols2 ··· 67 70 "CONFIG+=disable_mapnik" # Disable the optional mapnik backend 68 71 ]; 69 72 70 - meta = with lib; { 73 + meta = { 71 74 description = "Maps server providing tiles, geocoder, and router"; 72 75 homepage = "https://github.com/rinigus/osmscout-server"; 73 - license = licenses.gpl3Only; 74 - maintainers = [ maintainers.Thra11 ]; 75 - platforms = platforms.linux; 76 + license = lib.licenses.gpl3Only; 77 + maintainers = [ lib.maintainers.Thra11 ]; 78 + platforms = lib.platforms.linux; 76 79 }; 77 - } 80 + })
+25 -28
pkgs/applications/misc/prusa-slicer/default.nix
··· 3 3 lib, 4 4 binutils, 5 5 fetchFromGitHub, 6 - fetchpatch, 7 6 cmake, 8 7 pkg-config, 9 8 wrapGAppsHook3, ··· 33 32 xorg, 34 33 libbgcode, 35 34 heatshrink, 36 - catch2, 35 + catch2_3, 37 36 webkitgtk_4_1, 38 37 ctestCheckHook, 39 38 withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd, 40 39 systemd, 41 40 udevCheckHook, 41 + z3, 42 42 wxGTK-override ? null, 43 43 opencascade-override ? null, 44 44 }: ··· 61 61 in 62 62 stdenv.mkDerivation (finalAttrs: { 63 63 pname = "prusa-slicer"; 64 - version = "2.9.0"; 64 + version = "2.9.2"; 65 65 66 66 src = fetchFromGitHub { 67 67 owner = "prusa3d"; 68 68 repo = "PrusaSlicer"; 69 - hash = "sha256-6BrmTNIiu6oI/CbKPKoFQIh1aHEVfJPIkxomQou0xKk="; 69 + hash = "sha256-j/fdEgcFq0nWBLpyapwZIbBIXCnqEWV6Tk+6sTHk/Bc="; 70 70 rev = "version_${finalAttrs.version}"; 71 71 }; 72 72 73 - # https://github.com/prusa3d/PrusaSlicer/pull/14010 74 - patches = [ 75 - (fetchpatch { 76 - url = "https://github.com/prusa3d/PrusaSlicer/commit/cdc3db58f9002778a0ca74517865527f50ade4c3.patch"; 77 - hash = "sha256-zgpGg1jtdnCBaWjR6oUcHo5sGuZx5oEzpux3dpRdMAM="; 78 - }) 79 - # https://github.com/prusa3d/PrusaSlicer/pull/11769 80 - ./fix-ambiguous-constructors.patch 81 - ]; 82 - 83 - # Patch required for GCC 14. 84 73 # (not applicable to super-slicer fork) 85 - # Make Gcode viewer open newer bgcode files. 86 - postPatch = lib.optionalString (finalAttrs.pname == "prusa-slicer") '' 87 - substituteInPlace src/slic3r-arrange/include/arrange/DataStoreTraits.hpp \ 88 - --replace-fail \ 89 - "WritableDataStoreTraits<ArrItem>::template set" \ 90 - "WritableDataStoreTraits<ArrItem>::set" 91 - substituteInPlace src/platform/unix/PrusaGcodeviewer.desktop \ 92 - --replace-fail 'MimeType=text/x.gcode;' 'MimeType=application/x-bgcode;text/x.gcode;' 93 - ''; 74 + postPatch = lib.optionalString (finalAttrs.pname == "prusa-slicer") ( 75 + # Patch required for GCC 14, but breaks on clang 76 + lib.optionalString stdenv.cc.isGNU '' 77 + substituteInPlace src/slic3r-arrange/include/arrange/DataStoreTraits.hpp \ 78 + --replace-fail \ 79 + "WritableDataStoreTraits<ArrItem>::template set" \ 80 + "WritableDataStoreTraits<ArrItem>::set" 81 + '' 82 + # Make Gcode viewer open newer bgcode files. 83 + + '' 84 + substituteInPlace src/platform/unix/PrusaGcodeviewer.desktop \ 85 + --replace-fail 'MimeType=text/x.gcode;' 'MimeType=application/x-bgcode;text/x.gcode;' 86 + '' 87 + ); 94 88 95 89 nativeBuildInputs = [ 96 90 cmake ··· 129 123 xorg.libX11 130 124 libbgcode 131 125 heatshrink 132 - catch2 126 + catch2_3 133 127 webkitgtk_4_1 128 + z3 134 129 ] 135 130 ++ lib.optionals withSystemd [ 136 131 systemd ··· 165 160 # dlopen(3) for context. 166 161 if [ -f "src/libslic3r/Format/STEP.cpp" ]; then 167 162 substituteInPlace src/libslic3r/Format/STEP.cpp \ 168 - --replace 'libpath /= "OCCTWrapper.so";' 'libpath = "OCCTWrapper.so";' 163 + --replace-fail 'libpath /= "OCCTWrapper.so";' 'libpath = "OCCTWrapper.so";' 169 164 fi 170 165 # https://github.com/prusa3d/PrusaSlicer/issues/9581 171 166 if [ -f "cmake/modules/FindEXPAT.cmake" ]; then ··· 173 168 fi 174 169 175 170 # Fix resources folder location on macOS 176 - substituteInPlace src/PrusaSlicer.cpp \ 177 - --replace "#ifdef __APPLE__" "#if 0" 171 + substituteInPlace src/${ 172 + if finalAttrs.pname == "prusa-slicer" then "CLI/Setup.cpp" else "PrusaSlicer.cpp" 173 + } \ 174 + --replace-fail "#ifdef __APPLE__" "#if 0" 178 175 ''; 179 176 180 177 cmakeFlags = [
-37
pkgs/applications/misc/prusa-slicer/fix-ambiguous-constructors.patch
··· 1 - From 910328f3131e24e330808f5d4cb814454dbe201d Mon Sep 17 00:00:00 2001 2 - From: Gregor Riepl <onitake@gmail.com> 3 - Date: Mon, 27 Nov 2023 13:01:55 +0100 4 - Subject: [PATCH] Make initializers explicit to avoid ambiguous wxArrayString 5 - overloads 6 - 7 - --- 8 - src/slic3r/GUI/PhysicalPrinterDialog.cpp | 2 +- 9 - src/slic3r/GUI/Plater.cpp | 2 +- 10 - 2 files changed, 2 insertions(+), 2 deletions(-) 11 - 12 - diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp 13 - index 849e987c731..7d0c628c23f 100644 14 - --- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp 15 - +++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp 16 - @@ -607,7 +607,7 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr 17 - // Always fill in the "printhost_port" combo box from the config and select it. 18 - { 19 - Choice* choice = dynamic_cast<Choice*>(m_optgroup->get_field("printhost_port")); 20 - - choice->set_values({ m_config->opt_string("printhost_port") }); 21 - + choice->set_values(std::vector<std::string>({ m_config->opt_string("printhost_port") })); 22 - choice->set_selection(); 23 - } 24 - 25 - diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp 26 - index debfe625fd4..4d61e29a2dc 100644 27 - --- a/src/slic3r/GUI/Plater.cpp 28 - +++ b/src/slic3r/GUI/Plater.cpp 29 - @@ -4420,7 +4420,7 @@ void Plater::load_project(const wxString& filename) 30 - s_multiple_beds.set_loading_project_flag(true); 31 - ScopeGuard guard([](){ s_multiple_beds.set_loading_project_flag(false);}); 32 - 33 - - if (! load_files({ into_path(filename) }).empty()) { 34 - + if (! load_files(std::vector<boost::filesystem::path>({ into_path(filename) })).empty()) { 35 - // At least one file was loaded. 36 - p->set_project_filename(filename); 37 - // Save the names of active presets and project specific config into ProjectDirtyStateManager.
+11 -4
pkgs/applications/virtualization/docker/default.nix
··· 315 315 316 316 installPhase = 317 317 '' 318 + runHook preInstall 319 + 318 320 install -Dm755 ./build/docker $out/libexec/docker/docker 319 321 320 322 makeWrapper $out/libexec/docker/docker $out/bin/docker \ ··· 330 332 ln -s ${moby}/etc/systemd/system/docker.service $out/etc/systemd/system/docker.service 331 333 ln -s ${moby}/etc/systemd/system/docker.socket $out/etc/systemd/system/docker.socket 332 334 '' 335 + # Required to avoid breaking cross builds 336 + + lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) '' 337 + # completion (cli) 338 + installShellCompletion --cmd docker \ 339 + --bash <($out/bin/docker completion bash) \ 340 + --fish <($out/bin/docker completion fish) \ 341 + --zsh <($out/bin/docker completion zsh) 342 + '' 333 343 + '' 334 - # completion (cli) 335 - installShellCompletion --bash ./contrib/completion/bash/docker 336 - installShellCompletion --fish ./contrib/completion/fish/docker.fish 337 - installShellCompletion --zsh ./contrib/completion/zsh/_docker 344 + runHook postInstall 338 345 ''; 339 346 340 347 passthru = {
+172
pkgs/build-support/deno/build-deno-package/default.nix
··· 1 + # NOTE: much of this structure is inspired from https://github.com/NixOS/nixpkgs/tree/fff29a3e5f7991512e790617d1a693df5f3550f6/pkgs/build-support/node 2 + { 3 + stdenvNoCC, 4 + deno, 5 + denort, 6 + diffutils, 7 + zip, 8 + jq, 9 + fetchDenoDeps, 10 + buildPackages, 11 + lib, 12 + }: 13 + { 14 + name ? "${args.pname}-${args.version}", 15 + src ? null, 16 + # The output hash of the dependencies for this project. 17 + denoDepsHash ? lib.fakeHash, 18 + # The host platform, the output binary is compiled for. 19 + hostPlatform ? stdenvNoCC.hostPlatform.system, 20 + # A list of strings, which are names of impure env vars passed to the deps build. 21 + # Example: 22 + # `[ "NPM_TOKEN" ]` 23 + # They will be forwarded to `deno install`. 24 + # It can be used to set tokens for private NPM registries (in an `.npmrc` file). 25 + # In multi user installations of Nix, you need to set the env vars in the daemon (probably with systemd). 26 + # In nixos: `systemd.services.nix-daemon.environment.NPM_TOKEN = "<token>";` 27 + denoDepsImpureEnvVars ? [ ], 28 + # An attr set with env vars as key value pairs. 29 + # Example: 30 + # `{ "NPM_TOKEN" = "<token>"; }` 31 + # They will be forwarded to `deno install`. 32 + # It can be used to set tokens for private NPM registries (in an `.npmrc` file). 33 + # You could pass these tokens from the cli with `--arg` (this can make your builds painful). 34 + denoDepsInjectedEnvVars ? { }, 35 + # TODO: source overrides like in buildNpmPackage, i.e. injecting nix packages into the denoDeps 36 + # this is more involved, since they can't directly be injected into the fixed output derivation 37 + # of fetchDenoDeps. Instead we need to patch the lock file and remove the packages we intend to 38 + # inject, then we need to build the rest of the packages like before and in a 39 + # second step create normal derivation with the injected packages. 40 + # then the two need to be merged into a single denoDeps derivation and finally the lock file needs 41 + # to be reverted back to it's original form. 42 + # It is possible to manipulate the registry.json files of the injected packages so that deno accepts them as is. 43 + denoDeps ? fetchDenoDeps { 44 + inherit 45 + src 46 + denoDepsInjectedEnvVars 47 + denoDepsImpureEnvVars 48 + denoFlags 49 + denoDir 50 + ; 51 + denoInstallFlags = builtins.filter (e: e != "--cached-only") denoInstallFlags; 52 + name = "${name}-deno-deps"; 53 + hash = denoDepsHash; 54 + }, 55 + # The package used for every deno command in the build 56 + denoPackage ? deno, 57 + # The package used as the runtime that is bundled with the the src to create the binary. 58 + denortPackage ? denort, 59 + # The script to run to build the project. 60 + # You still need to specify in the installPhase, what artifacts to copy to `$out`. 61 + denoTaskScript ? "build", 62 + # If not null, create a binary using the specified path as the entrypoint, 63 + # copy it to `$out/bin` in installPhase and fix it in fixupPhase. 64 + binaryEntrypointPath ? null, 65 + # Flags to pass to all deno commands. 66 + denoFlags ? [ ], 67 + # Flags to pass to `deno task [denoTaskFlags] ${denoTaskScript}`. 68 + denoTaskFlags ? [ ], 69 + # Flags to pass to `deno compile [denoTaskFlags] ${binaryEntrypointPath}`. 70 + denoCompileFlags ? [ ], 71 + # Flags to pass to `deno install [denoInstallFlags]`. 72 + denoInstallFlags ? [ 73 + "--allow-scripts" 74 + "--frozen" 75 + "--cached-only" 76 + ], 77 + # Flags to pass to `deno task [denoTaskFlags] ${denoTaskScript} [extraTaskFlags]`. 78 + extraTaskFlags ? [ ], 79 + # Flags to pass to `deno compile [denoTaskFlags] ${binaryEntrypointPath} [extraCompileFlags]`. 80 + extraCompileFlags ? [ ], 81 + nativeBuildInputs ? [ ], 82 + dontFixup ? true, 83 + # Custom denoConfigHook 84 + denoConfigHook ? null, 85 + # Custom denoBuildHook 86 + denoBuildHook ? null, 87 + # Custom denoInstallHook 88 + denoInstallHook ? null, 89 + # Path to deno workspace, where the denoTaskScript should be run 90 + denoWorkspacePath ? null, 91 + # Unquoted string injected before `deno task` 92 + denoTaskPrefix ? "", 93 + # Unquoted string injected after `deno task` and all its flags 94 + denoTaskSuffix ? "", 95 + # Used as the name of the local DENO_DIR 96 + denoDir ? "./.deno", 97 + ... 98 + }@args: 99 + let 100 + denoFlags_ = builtins.concatStringsSep " " denoFlags; 101 + denoTaskFlags_ = builtins.concatStringsSep " " denoTaskFlags; 102 + denoCompileFlags_ = builtins.concatStringsSep " " denoCompileFlags; 103 + denoInstallFlags_ = builtins.concatStringsSep " " denoInstallFlags; 104 + extraTaskFlags_ = builtins.concatStringsSep " " extraTaskFlags; 105 + extraCompileFlags_ = builtins.concatStringsSep " " extraCompileFlags; 106 + 107 + args' = builtins.removeAttrs args [ "denoDepsInjectedEnvVars" ]; 108 + 109 + denoHooks = 110 + (buildPackages.denoHooks.override { 111 + denort = denortPackage; 112 + }) 113 + { 114 + inherit denoTaskSuffix denoTaskPrefix binaryEntrypointPath; 115 + }; 116 + systemLookupTable = { 117 + "x86_64-darwin" = "x86_64-apple-darwin"; 118 + "arm64-darwin" = "aarch64-apple-darwin"; 119 + "aarch64-darwin" = "aarch64-apple-darwin"; 120 + "x86_64-linux" = "x86_64-unknown-linux-gnu"; 121 + "arm64-linux" = "aarch64-unknown-linux-gnu"; 122 + "aarch64-linux" = "aarch64-unknown-linux-gnu"; 123 + }; 124 + hostPlatform_ = 125 + if builtins.hasAttr hostPlatform systemLookupTable then 126 + systemLookupTable."${hostPlatform}" 127 + else 128 + (lib.systems.elaborate hostPlatform).config; 129 + in 130 + stdenvNoCC.mkDerivation ( 131 + args' 132 + // { 133 + inherit 134 + name 135 + denoDeps 136 + src 137 + denoFlags_ 138 + denoTaskFlags_ 139 + denoCompileFlags_ 140 + denoInstallFlags_ 141 + extraTaskFlags_ 142 + extraCompileFlags_ 143 + binaryEntrypointPath 144 + hostPlatform_ 145 + denoWorkspacePath 146 + denoTaskScript 147 + ; 148 + 149 + nativeBuildInputs = nativeBuildInputs ++ [ 150 + # Prefer passed hooks 151 + (if denoConfigHook != null then denoConfigHook else denoHooks.denoConfigHook) 152 + (if denoBuildHook != null then denoBuildHook else denoHooks.denoBuildHook) 153 + (if denoInstallHook != null then denoInstallHook else denoHooks.denoInstallHook) 154 + denoPackage 155 + diffutils 156 + zip 157 + jq 158 + ]; 159 + 160 + DENO_DIR = denoDir; 161 + 162 + dontFixup = if binaryEntrypointPath != null then false else dontFixup; 163 + 164 + passthru = { 165 + inherit denoDeps; 166 + }; 167 + 168 + meta = (args.meta or { }) // { 169 + platforms = args.meta.platforms or denoPackage.meta.platforms; 170 + }; 171 + } 172 + )
+29
pkgs/build-support/deno/build-deno-package/hooks/default.nix
··· 1 + { 2 + makeSetupHook, 3 + denort, 4 + lib, 5 + }: 6 + { 7 + denoTaskSuffix, 8 + denoTaskPrefix, 9 + binaryEntrypointPath, 10 + }: 11 + { 12 + denoConfigHook = makeSetupHook { 13 + name = "deno-config-hook"; 14 + substitutions = { 15 + denortBinary = lib.optionalString (binaryEntrypointPath != null) (lib.getExe denort); 16 + }; 17 + } ./deno-config-hook.sh; 18 + 19 + denoBuildHook = makeSetupHook { 20 + name = "deno-build-hook"; 21 + substitutions = { 22 + inherit denoTaskSuffix denoTaskPrefix; 23 + }; 24 + } ./deno-build-hook.sh; 25 + 26 + denoInstallHook = makeSetupHook { 27 + name = "deno-install-hook"; 28 + } ./deno-install-hook.sh; 29 + }
+58
pkgs/build-support/deno/build-deno-package/hooks/deno-build-hook.sh
··· 1 + # shellcheck shell=bash 2 + 3 + denoBuildHook() { 4 + echo "Executing denoBuildHook" 5 + 6 + runHook preBuild 7 + 8 + if [ -n "${binaryEntrypointPath-}" ]; then 9 + echo "Creating binary" 10 + 11 + package_name=$(jq -r '.name' deno.json) 12 + if [ "$package_name" == "null" ]; then 13 + package_name="$name" 14 + fi 15 + 16 + deno compile \ 17 + --output "$package_name" \ 18 + --target "$hostPlatform_" \ 19 + $denoCompileFlags \ 20 + $denoFlags \ 21 + "${denoWorkspacePath+$denoWorkspacePath/}$binaryEntrypointPath" 22 + $extraCompileFlags \ 23 + 24 + elif [ -n "${denoTaskScript-}" ]; then 25 + if ! @denoTaskPrefix@ \ 26 + deno task \ 27 + ${denoWorkspacePath+--cwd=$denoWorkspacePath} \ 28 + $denoTaskFlags \ 29 + $denoFlags \ 30 + "$denoTaskScript" \ 31 + $extraTaskFlags \ 32 + @denoTaskSuffix@; then 33 + echo 34 + echo 'ERROR: `deno task` failed' 35 + echo 36 + echo "Here are a few things you can try, depending on the error:" 37 + echo "1. Make sure your task script ($denoTaskScript) exists" 38 + echo 39 + 40 + exit 1 41 + fi 42 + else 43 + echo 44 + echo "ERROR: nothing to do in buildPhase" 45 + echo "Specify either 'binaryEntrypointPath' or 'denoTaskScript' or override 'buildPhase'" 46 + echo 47 + 48 + exit 1 49 + fi 50 + 51 + runHook postBuild 52 + 53 + echo "Finished denoBuildHook" 54 + } 55 + 56 + if [ -z "${buildPhase-}" ]; then 57 + buildPhase=denoBuildHook 58 + fi
+108
pkgs/build-support/deno/build-deno-package/hooks/deno-config-hook.sh
··· 1 + # shellcheck shell=bash 2 + 3 + denoConfigHook() { 4 + echo "Executing denoConfigHook" 5 + 6 + if [ -z "${denoDeps-}" ]; then 7 + echo 8 + echo "ERROR: no dependencies were specified" 9 + echo 'Hint: set `denoDeps` if using these hooks individually. If this is happening with `buildDenoPackage`, please open an issue.' 10 + echo 11 + 12 + exit 1 13 + fi 14 + 15 + local -r cacheLockfile="$denoDeps/deno.lock" 16 + local -r srcLockfile="$PWD/deno.lock" 17 + 18 + echo "Validating consistency between $srcLockfile and $cacheLockfile" 19 + 20 + if ! diff "$srcLockfile" "$cacheLockfile"; then 21 + # If the diff failed, first double-check that the file exists, so we can 22 + # give a friendlier error msg. 23 + if ! [ -e "$srcLockfile" ]; then 24 + echo 25 + echo "ERROR: Missing deno.lock from src. Expected to find it at: $srcLockfile" 26 + echo 27 + 28 + exit 1 29 + fi 30 + 31 + if ! [ -e "$cacheLockfile" ]; then 32 + echo 33 + echo "ERROR: Missing lockfile from cache. Expected to find it at: $cacheLockfile" 34 + echo 35 + 36 + exit 1 37 + fi 38 + 39 + echo 40 + echo "ERROR: denoDepsHash is out of date" 41 + echo 42 + echo "The deno.lock in src is not the same as the in $denoDeps." 43 + echo 44 + echo "To fix the issue:" 45 + echo '1. Use `lib.fakeHash` as the denoDepsHash value' 46 + echo "2. Build the derivation and wait for it to fail with a hash mismatch" 47 + echo "3. Copy the 'got: sha256-' value back into the denoDepsHash field" 48 + echo 49 + 50 + exit 1 51 + fi 52 + 53 + # NOTE: we need to use vendor in the build too, since we used it for the deps 54 + useVendor() { 55 + jq '.vendor = true' deno.json >temp.json && 56 + rm -f deno.json && 57 + mv temp.json deno.json 58 + } 59 + echo "Adding vendor to deno.json" 60 + useVendor 61 + 62 + echo "Installing dependencies" 63 + 64 + export DENO_DIR="$(pwd)"/"$DENO_DIR" 65 + 66 + installDeps() { 67 + if [[ -d "$denoDeps/.deno" ]]; then 68 + cp -r --no-preserve=mode "$denoDeps/.deno" "$DENO_DIR" 69 + fi 70 + if [[ -d "$denoDeps/vendor" ]]; then 71 + cp -r --no-preserve=mode "$denoDeps/vendor" ./vendor 72 + fi 73 + if [[ -d "$denoDeps/node_modules" ]]; then 74 + cp -r --no-preserve=mode "$denoDeps/node_modules" ./node_modules 75 + fi 76 + } 77 + installDeps 78 + 79 + if ! deno install $denoInstallFlags_ $denoFlags_; then 80 + echo 81 + echo "ERROR: deno failed to install dependencies" 82 + echo 83 + 84 + exit 1 85 + fi 86 + 87 + installDenort() { 88 + version="$(deno --version | head -1 | awk '{print $2}')" 89 + zipfile=denort-"$hostPlatform_".zip 90 + dir="$DENO_DIR"/dl/release/v"$version" 91 + mkdir -p "$dir" 92 + cp "@denortBinary@" ./denort 93 + zip "$dir"/"$zipfile" ./denort 94 + rm ./denort 95 + } 96 + if [ -n "${binaryEntrypointPath-}" ]; then 97 + echo "Installing denort for binary build" 98 + installDenort 99 + fi 100 + 101 + patchShebangs .deno 102 + patchShebangs node_modules 103 + patchShebangs vendor 104 + 105 + echo "Finished denoConfigHook" 106 + } 107 + 108 + postPatchHooks+=(denoConfigHook)
+32
pkgs/build-support/deno/build-deno-package/hooks/deno-install-hook.sh
··· 1 + # shellcheck shell=bash 2 + 3 + denoInstallHook() { 4 + echo "Executing denoInstallHook" 5 + 6 + runHook preInstall 7 + 8 + if [ -n "${binaryEntrypointPath-}" ]; then 9 + package_name=$(jq -r '.name' deno.json) 10 + if [ "$package_name" == "null" ]; then 11 + package_name="$name" 12 + fi 13 + 14 + mkdir -p "$out/bin" 15 + cp "$package_name"* "$out/bin" 16 + else 17 + echo 18 + echo "ERROR: nothing to do in installPhase" 19 + echo "Specify either 'binaryEntrypointPath' or override 'installPhase'" 20 + echo 21 + 22 + exit 1 23 + fi 24 + 25 + runHook postInstall 26 + 27 + echo "Finished denoInstallHook" 28 + } 29 + 30 + if [ -z "${dontDenoInstall-}" ] && [ -z "${installPhase-}" ]; then 31 + installPhase=denoInstallHook 32 + fi
+4
pkgs/build-support/deno/fetch-deno-deps/.gitignore
··· 1 + .deno/ 2 + vendor/ 3 + node_modules/ 4 + .direnv
+185
pkgs/build-support/deno/fetch-deno-deps/default.nix
··· 1 + # NOTE: much of this structure is inspired from https://github.com/NixOS/nixpkgs/tree/fff29a3e5f7991512e790617d1a693df5f3550f6/pkgs/build-support/node 2 + { 3 + lib, 4 + stdenvNoCC, 5 + deno, 6 + jq, 7 + cacert, 8 + }: 9 + { 10 + fetchDenoDeps = 11 + { 12 + name ? "deno-deps", 13 + src, 14 + hash ? lib.fakeHash, 15 + denoPackage ? deno, 16 + denoFlags ? [ ], 17 + denoInstallFlags ? [ 18 + "--allow-scripts" 19 + "--frozen" 20 + ], 21 + nativeBuildInputs ? [ ], 22 + denoDepsImpureEnvVars ? [ ], 23 + denoDepsInjectedEnvVars ? { }, 24 + denoDir ? "./.deno", 25 + ... 26 + }@args: 27 + let 28 + hash_ = 29 + if hash != "" then 30 + { outputHash = hash; } 31 + else 32 + { 33 + outputHash = ""; 34 + outputHashAlgo = "sha256"; 35 + }; 36 + denoInstallFlags_ = builtins.concatStringsSep " " denoInstallFlags; 37 + denoFlags_ = builtins.concatStringsSep " " denoFlags; 38 + denoDepsInjectedEnvVarsString = 39 + if denoDepsInjectedEnvVars != { } then 40 + lib.attrsets.foldlAttrs ( 41 + acc: name: value: 42 + "${acc} ${name}=${value}" 43 + ) "" denoDepsInjectedEnvVars 44 + else 45 + ""; 46 + # need to remove denoDepsInjectedEnvVars, since it's an attrset and 47 + # stdenv.mkDerivation would try to convert it to string 48 + args' = builtins.removeAttrs args [ "denoDepsInjectedEnvVars" ]; 49 + in 50 + stdenvNoCC.mkDerivation ( 51 + args' 52 + // { 53 + inherit name src; 54 + 55 + nativeBuildInputs = nativeBuildInputs ++ [ 56 + denoPackage 57 + jq 58 + ]; 59 + 60 + DENO_DIR = denoDir; 61 + 62 + buildPhase = '' 63 + runHook preBuild 64 + 65 + if [[ ! -e "deno.json" ]]; then 66 + echo "" 67 + echo "ERROR: deno.json required, but not found" 68 + echo "" 69 + exit 1 70 + fi 71 + 72 + if [[ ! -e "deno.lock" ]]; then 73 + echo "" 74 + echo "ERROR: deno.lock required, but not found" 75 + echo "" 76 + exit 1 77 + fi 78 + 79 + # NOTE: using vendor reduces the pruning effort a little 80 + useVendor() { 81 + jq '.vendor = true' deno.json >temp.json && \ 82 + rm -f deno.json && \ 83 + mv temp.json deno.json 84 + } 85 + useVendor 86 + 87 + # uses $DENO_DIR 88 + ${denoDepsInjectedEnvVarsString} deno install ${denoInstallFlags_} ${denoFlags_} 89 + 90 + echo "pruning non reproducible files" 91 + 92 + # `node_modules` is used when there are install scripts in a dependencies' package.json. 93 + # these install scripts can also require internet, so they should also be executed in this fetcher 94 + pruneNonReproducibles() { 95 + export tempDenoDir="$DENO_DIR" 96 + 97 + # `registry.json` files can't just be deleted, else deno install won't work, 98 + # but they contain non reproducible data, 99 + # which needs to be pruned, leaving only the necessary data behind. 100 + # This pruning is done with a helper script written in typescript and executed with deno 101 + DENO_DIR=./extra_deno_cache deno run \ 102 + --lock="${./deno.lock}" \ 103 + --config="${./deno.json}" \ 104 + --allow-all \ 105 + "${./prune-registries.ts}" \ 106 + --lock-json="./deno.lock" \ 107 + --cache-path="$tempDenoDir" \ 108 + --vendor-path="./vendor" 109 + 110 + # Keys in `registry.json` files are not deterministically sorted, 111 + # so we do it here. 112 + for file in $(find -L "$DENO_DIR" -name registry.json -type f); do 113 + jq --sort-keys '.' "$file" >temp.json && \ 114 + rm -f "$file" && \ 115 + mv temp.json "$file" 116 + done 117 + 118 + # There are various small databases used by deno for caching that 119 + # we can simply delete. 120 + if [[ -d "./node_modules" ]]; then 121 + find -L ./node_modules -name '*cache_v2-shm' -type f | xargs rm -f 122 + find -L ./node_modules -name '*cache_v2-wal' -type f | xargs rm -f 123 + find -L ./node_modules -name 'dep_analysis_cache_v2' -type f | xargs rm -f 124 + find -L ./node_modules -name 'node_analysis_cache_v2' -type f | xargs rm -f 125 + find -L ./node_modules -name v8_code_cache_v2 -type f | xargs rm -f 126 + rm -f ./node_modules/.deno/.deno.lock.poll 127 + 128 + # sometimes a .deno dir is slipped into a node_modules package 129 + # it's unclear why. but it can just be deleted 130 + find -L ./node_modules -name ".deno" -type d | sort -r | head -n-1 | xargs rm -rf 131 + fi 132 + 133 + rm -f "$DENO_DIR"/dep_analysis_cache_v2-shm 134 + rm -f "$DENO_DIR"/dep_analysis_cache_v2-wal 135 + rm -f "$DENO_DIR"/dep_analysis_cache_v2 136 + } 137 + pruneNonReproducibles 138 + 139 + runHook postBuild 140 + ''; 141 + 142 + installPhase = '' 143 + runHook preInstall 144 + 145 + if [[ -d "$DENO_DIR" ]]; then 146 + mkdir -p $out/$DENO_DIR 147 + cp -r --no-preserve=mode $DENO_DIR $out 148 + fi 149 + if [[ -d "./vendor" ]]; then 150 + mkdir -p $out/vendor 151 + cp -r --no-preserve=mode ./vendor $out 152 + fi 153 + if [[ -d "./node_modules" ]]; then 154 + mkdir -p $out/node_modules 155 + cp -r --no-preserve=mode ./node_modules $out 156 + fi 157 + 158 + cp ./deno.lock $out 159 + 160 + runHook postInstall 161 + ''; 162 + 163 + dontFixup = true; 164 + 165 + outputHashMode = "recursive"; 166 + 167 + impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ denoDepsImpureEnvVars; 168 + 169 + SSL_CERT_FILE = 170 + if 171 + ( 172 + hash_.outputHash == "" 173 + || hash_.outputHash == lib.fakeSha256 174 + || hash_.outputHash == lib.fakeSha512 175 + || hash_.outputHash == lib.fakeHash 176 + ) 177 + then 178 + "${cacert}/etc/ssl/certs/ca-bundle.crt" 179 + else 180 + "/no-cert-file.crt"; 181 + 182 + } 183 + // hash_ 184 + ); 185 + }
+8
pkgs/build-support/deno/fetch-deno-deps/deno.json
··· 1 + { 2 + "tasks": { "test": "deno test" }, 3 + "imports": { 4 + "@std/assert": "jsr:@std/assert@1.0.13", 5 + "@std/cli": "jsr:@std/cli@1.0.16", 6 + "@std/fs": "jsr:@std/fs@1.0.16" 7 + } 8 + }
+53
pkgs/build-support/deno/fetch-deno-deps/deno.lock
··· 1 + { 2 + "version": "5", 3 + "specifiers": { 4 + "jsr:@std/assert@1.0.13": "1.0.13", 5 + "jsr:@std/cli@1.0.16": "1.0.16", 6 + "jsr:@std/fs@1.0.16": "1.0.16", 7 + "jsr:@std/internal@^1.0.6": "1.0.7", 8 + "jsr:@std/path@1.0.9": "1.0.9", 9 + "jsr:@std/path@^1.0.8": "1.0.9", 10 + "npm:@types/node@*": "22.15.15" 11 + }, 12 + "jsr": { 13 + "@std/assert@1.0.13": { 14 + "integrity": "ae0d31e41919b12c656c742b22522c32fb26ed0cba32975cb0de2a273cb68b29", 15 + "dependencies": [ 16 + "jsr:@std/internal" 17 + ] 18 + }, 19 + "@std/cli@1.0.16": { 20 + "integrity": "02df293099c35b9e97d8ca05f57f54bd1ee08134f25d19a4756b3924695f4b00" 21 + }, 22 + "@std/fs@1.0.16": { 23 + "integrity": "81878f62b6eeda0bf546197fc3daa5327c132fee1273f6113f940784a468b036", 24 + "dependencies": [ 25 + "jsr:@std/path@^1.0.8" 26 + ] 27 + }, 28 + "@std/internal@1.0.7": { 29 + "integrity": "39eeb5265190a7bc5d5591c9ff019490bd1f2c3907c044a11b0d545796158a0f" 30 + }, 31 + "@std/path@1.0.9": { 32 + "integrity": "260a49f11edd3db93dd38350bf9cd1b4d1366afa98e81b86167b4e3dd750129e" 33 + } 34 + }, 35 + "npm": { 36 + "@types/node@22.15.15": { 37 + "integrity": "sha512-R5muMcZob3/Jjchn5LcO8jdKwSCbzqmPB6ruBxMcf9kbxtniZHP327s6C37iOfuw8mbKK3cAQa7sEl7afLrQ8A==", 38 + "dependencies": [ 39 + "undici-types" 40 + ] 41 + }, 42 + "undici-types@6.21.0": { 43 + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" 44 + } 45 + }, 46 + "workspace": { 47 + "dependencies": [ 48 + "jsr:@std/assert@1.0.13", 49 + "jsr:@std/cli@1.0.16", 50 + "jsr:@std/fs@1.0.16" 51 + ] 52 + } 53 + }
+1054
pkgs/build-support/deno/fetch-deno-deps/prune-registries.test.ts
··· 1 + import { assertEquals } from "@std/assert"; 2 + import type { 3 + LockJson, 4 + MetaJson, 5 + PackageInfo, 6 + PackagesByRegistry, 7 + PackageSpecifiers, 8 + RegistryJson, 9 + } from "./prune-registries.ts"; 10 + import { 11 + getAllPackageRegistries, 12 + getAllPackagesByPackageRegistry, 13 + getScopedName, 14 + parsePackageSpecifier, 15 + pruneMetaJson, 16 + pruneRegistryJson, 17 + } from "./prune-registries.ts"; 18 + 19 + type Fixture<T, R> = { 20 + testValue: T; 21 + expectedValue: R; 22 + }; 23 + 24 + type Fixtures<T, R> = Array<Fixture<T, R>>; 25 + 26 + function testFactory<T, R>( 27 + assertFunction: (actual: R, expected: R, msg?: string) => void, 28 + testFunction: (args: T) => R, 29 + fixtures: Fixtures<T, R> 30 + ): () => void { 31 + return () => { 32 + fixtures.forEach((fixture) => { 33 + assertFunction(testFunction(fixture.testValue), fixture.expectedValue); 34 + }); 35 + }; 36 + } 37 + 38 + Deno.test("parsePackageSpecifier", () => { 39 + type Args = string; 40 + type ReturnValue = PackageInfo; 41 + const fixtures: Array<Fixture<Args, ReturnValue>> = [ 42 + { 43 + testValue: "jsr:@std/assert@1.0.13", 44 + expectedValue: { 45 + full: "jsr:@std/assert@1.0.13", 46 + registry: "jsr", 47 + scope: "@std", 48 + name: "assert", 49 + version: "1.0.13", 50 + suffix: undefined, 51 + }, 52 + }, 53 + { 54 + testValue: "npm:ini@5.0.0", 55 + expectedValue: { 56 + full: "npm:ini@5.0.0", 57 + registry: "npm", 58 + scope: undefined, 59 + name: "ini", 60 + version: "5.0.0", 61 + suffix: undefined, 62 + }, 63 + }, 64 + { 65 + testValue: "npm:@amazn/style-dictionary@4.2.4_prettier@3.5.3", 66 + expectedValue: { 67 + full: "npm:@amazn/style-dictionary@4.2.4_prettier@3.5.3", 68 + registry: "npm", 69 + scope: "@amazn", 70 + name: "style-dictionary", 71 + version: "4.2.4", 72 + suffix: "_prettier@3.5.3", 73 + }, 74 + }, 75 + ]; 76 + testFactory(assertEquals, parsePackageSpecifier, fixtures)(); 77 + }); 78 + 79 + Deno.test("getScopedName", () => { 80 + type Args = { name: string; scope?: string }; 81 + type ReturnValue = string; 82 + const fixtures: Array<Fixture<Args, ReturnValue>> = [ 83 + { 84 + testValue: { name: "assert", scope: undefined }, 85 + expectedValue: "assert", 86 + }, 87 + { 88 + testValue: { name: "assert", scope: "std" }, 89 + expectedValue: "@std/assert", 90 + }, 91 + { 92 + testValue: { name: "assert", scope: "@std" }, 93 + expectedValue: "@std/assert", 94 + }, 95 + ]; 96 + testFactory( 97 + assertEquals, 98 + (args: Args) => getScopedName(args.name, args.scope), 99 + fixtures 100 + )(); 101 + }); 102 + 103 + Deno.test("getAllPackageRegistries", () => { 104 + type Args = PackageSpecifiers; 105 + type ReturnValue = Set<string>; 106 + const fixtures: Array<Fixture<Args, ReturnValue>> = [ 107 + { 108 + testValue: { 109 + "jsr:@std/assert@1.0.13": "1.0.13", 110 + "jsr:@std/cli@1.0.16": "1.0.16", 111 + "jsr:@std/fs@1.0.16": "1.0.16", 112 + "jsr:@std/internal@^1.0.6": "1.0.7", 113 + "jsr:@std/path@1.0.9": "1.0.9", 114 + "jsr:@std/path@^1.0.8": "1.0.9", 115 + "npm:ini@5.0.0": "5.0.0", 116 + }, 117 + expectedValue: new Set(["jsr", "npm"]), 118 + }, 119 + ]; 120 + testFactory(assertEquals, getAllPackageRegistries, fixtures)(); 121 + }); 122 + 123 + Deno.test("getAllPackagesByPackageRegistry", () => { 124 + type Args = { lockJson: LockJson; registries: Set<string> }; 125 + type ReturnValue = PackagesByRegistry; 126 + const fixtures: Array<Fixture<Args, ReturnValue>> = [ 127 + { 128 + testValue: { 129 + lockJson: JSON.parse(` 130 + { 131 + "version": "4", 132 + "specifiers": { 133 + "jsr:@std/assert@1.0.13": "1.0.13", 134 + "jsr:@std/cli@1.0.16": "1.0.16", 135 + "jsr:@std/fs@1.0.16": "1.0.16", 136 + "jsr:@std/internal@^1.0.6": "1.0.7", 137 + "jsr:@std/path@1.0.9": "1.0.9", 138 + "jsr:@std/path@^1.0.8": "1.0.9", 139 + "npm:ini@5.0.0": "5.0.0" 140 + }, 141 + "jsr": { 142 + "@std/assert@1.0.13": { 143 + "integrity": "ae0d31e41919b12c656c742b22522c32fb26ed0cba32975cb0de2a273cb68b29", 144 + "dependencies": [ 145 + "jsr:@std/internal" 146 + ] 147 + }, 148 + "@std/cli@1.0.16": { 149 + "integrity": "02df293099c35b9e97d8ca05f57f54bd1ee08134f25d19a4756b3924695f4b00" 150 + }, 151 + "@std/fs@1.0.16": { 152 + "integrity": "81878f62b6eeda0bf546197fc3daa5327c132fee1273f6113f940784a468b036", 153 + "dependencies": [ 154 + "jsr:@std/path@^1.0.8" 155 + ] 156 + }, 157 + "@std/internal@1.0.7": { 158 + "integrity": "39eeb5265190a7bc5d5591c9ff019490bd1f2c3907c044a11b0d545796158a0f" 159 + }, 160 + "@std/path@1.0.9": { 161 + "integrity": "260a49f11edd3db93dd38350bf9cd1b4d1366afa98e81b86167b4e3dd750129e" 162 + } 163 + }, 164 + "npm": { 165 + "ini@5.0.0": { 166 + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==" 167 + } 168 + }, 169 + "workspace": { 170 + "dependencies": [ 171 + "jsr:@std/assert@1.0.13", 172 + "jsr:@std/cli@1.0.16", 173 + "jsr:@std/fs@1.0.16", 174 + "jsr:@std/path@1.0.9", 175 + "npm:ini@5.0.0" 176 + ] 177 + } 178 + } 179 + `), 180 + registries: new Set(["npm", "jsr"]), 181 + }, 182 + expectedValue: { 183 + jsr: { 184 + "@std/assert": { 185 + "1.0.13": { 186 + full: "@std/assert@1.0.13", 187 + registry: undefined, 188 + scope: "@std", 189 + name: "assert", 190 + version: "1.0.13", 191 + suffix: undefined, 192 + }, 193 + }, 194 + "@std/cli": { 195 + "1.0.16": { 196 + full: "@std/cli@1.0.16", 197 + registry: undefined, 198 + scope: "@std", 199 + name: "cli", 200 + version: "1.0.16", 201 + suffix: undefined, 202 + }, 203 + }, 204 + "@std/fs": { 205 + "1.0.16": { 206 + full: "@std/fs@1.0.16", 207 + registry: undefined, 208 + scope: "@std", 209 + name: "fs", 210 + version: "1.0.16", 211 + suffix: undefined, 212 + }, 213 + }, 214 + "@std/internal": { 215 + "1.0.7": { 216 + full: "@std/internal@1.0.7", 217 + registry: undefined, 218 + scope: "@std", 219 + name: "internal", 220 + version: "1.0.7", 221 + suffix: undefined, 222 + }, 223 + }, 224 + "@std/path": { 225 + "1.0.9": { 226 + full: "@std/path@1.0.9", 227 + registry: undefined, 228 + scope: "@std", 229 + name: "path", 230 + version: "1.0.9", 231 + suffix: undefined, 232 + }, 233 + }, 234 + }, 235 + npm: { 236 + ini: { 237 + "5.0.0": { 238 + full: "ini@5.0.0", 239 + registry: undefined, 240 + scope: undefined, 241 + name: "ini", 242 + version: "5.0.0", 243 + suffix: undefined, 244 + }, 245 + }, 246 + }, 247 + }, 248 + }, 249 + ]; 250 + testFactory( 251 + assertEquals, 252 + (args: Args) => 253 + getAllPackagesByPackageRegistry(args.lockJson, args.registries), 254 + fixtures 255 + )(); 256 + }); 257 + 258 + Deno.test("pruneMetaJson", () => { 259 + type Args = { 260 + metaJson: MetaJson; 261 + jsrPackages: PackagesByRegistry; 262 + registry: string; 263 + }; 264 + type ReturnValue = MetaJson; 265 + const fixtures: Array<Fixture<Args, ReturnValue>> = [ 266 + { 267 + testValue: { 268 + metaJson: { 269 + scope: "std", 270 + name: "cli", 271 + latest: "1.0.17", 272 + versions: { 273 + "0.222.0": {}, 274 + "1.0.16": {}, 275 + "0.218.2": {}, 276 + "0.218.0": {}, 277 + "1.0.10": {}, 278 + "0.224.6": {}, 279 + "1.0.4": {}, 280 + "1.0.8": {}, 281 + "1.0.2": {}, 282 + "0.211.0": {}, 283 + "0.213.0": {}, 284 + "1.0.0-rc.2": {}, 285 + "1.0.3": {}, 286 + "1.0.0-rc.5": {}, 287 + "0.210.0": {}, 288 + "0.209.0": {}, 289 + "0.212.0": {}, 290 + "0.208.0": {}, 291 + "1.0.7": {}, 292 + "1.0.0": {}, 293 + "0.220.1": {}, 294 + "0.224.2": {}, 295 + "1.0.17": {}, 296 + "1.0.1": {}, 297 + "0.221.0": {}, 298 + "0.224.5": {}, 299 + "0.216.0": {}, 300 + "0.207.0": {}, 301 + "0.224.4": {}, 302 + "1.0.0-rc.4": {}, 303 + "0.214.0": {}, 304 + "0.223.0": {}, 305 + "1.0.6": {}, 306 + "0.224.1": {}, 307 + "0.224.0": {}, 308 + "1.0.15": {}, 309 + "1.0.0-rc.3": {}, 310 + "0.224.3": {}, 311 + "1.0.14": {}, 312 + "1.0.9": {}, 313 + "0.222.1": {}, 314 + "1.0.13": {}, 315 + "1.0.0-rc.1": {}, 316 + "0.219.0": {}, 317 + "1.0.5": {}, 318 + "1.0.11": {}, 319 + "0.224.7": {}, 320 + "0.215.0": {}, 321 + "1.0.12": {}, 322 + "0.217.0": {}, 323 + "0.213.1": {}, 324 + "0.219.1": {}, 325 + "0.218.1": {}, 326 + }, 327 + }, 328 + jsrPackages: { 329 + jsr: { 330 + "@luca/cases": { 331 + "1.0.0": { 332 + full: "@luca/cases@1.0.0", 333 + registry: undefined, 334 + scope: "@luca", 335 + name: "cases", 336 + version: "1.0.0", 337 + suffix: undefined, 338 + }, 339 + }, 340 + "@std/cli": { 341 + "1.0.17": { 342 + full: "@std/cli@1.0.17", 343 + registry: undefined, 344 + scope: "@std", 345 + name: "cli", 346 + version: "1.0.17", 347 + suffix: undefined, 348 + }, 349 + }, 350 + }, 351 + }, 352 + registry: "jsr", 353 + }, 354 + expectedValue: { 355 + scope: "std", 356 + name: "cli", 357 + latest: "", 358 + versions: { "1.0.17": {} }, 359 + }, 360 + }, 361 + { 362 + testValue: { 363 + metaJson: { 364 + scope: "luca", 365 + name: "cases", 366 + latest: "1.0.0", 367 + versions: { "1.0.0": {} }, 368 + }, 369 + jsrPackages: { 370 + jsr: { 371 + "@luca/cases": { 372 + "1.0.0": { 373 + full: "@luca/cases@1.0.0", 374 + registry: undefined, 375 + scope: "@luca", 376 + name: "cases", 377 + version: "1.0.0", 378 + suffix: undefined, 379 + }, 380 + }, 381 + "@std/cli": { 382 + "1.0.17": { 383 + full: "@std/cli@1.0.17", 384 + registry: undefined, 385 + scope: "@std", 386 + name: "cli", 387 + version: "1.0.17", 388 + suffix: undefined, 389 + }, 390 + }, 391 + }, 392 + }, 393 + registry: "jsr", 394 + }, 395 + expectedValue: { 396 + scope: "luca", 397 + name: "cases", 398 + latest: "", 399 + versions: { "1.0.0": {} }, 400 + }, 401 + }, 402 + ]; 403 + testFactory( 404 + assertEquals, 405 + (args: Args) => 406 + pruneMetaJson(args.metaJson, args.jsrPackages, args.registry), 407 + fixtures 408 + )(); 409 + }); 410 + 411 + Deno.test("pruneRegistryJson", () => { 412 + type Args = { 413 + registryJson: RegistryJson; 414 + nonJsrPackages: PackagesByRegistry; 415 + registry: string; 416 + }; 417 + type ReturnValue = RegistryJson; 418 + const fixtures: Array<Fixture<Args, ReturnValue>> = [ 419 + { 420 + testValue: { 421 + registryJson: { 422 + name: "decamelize", 423 + versions: { 424 + "1.1.0": { 425 + version: "1.1.0", 426 + dist: { 427 + tarball: 428 + "https://registry.npmjs.org/decamelize/-/decamelize-1.1.0.tgz", 429 + shasum: "fe90c002a0acec1435120ce83a6945641018d0c8", 430 + integrity: 431 + "sha512-n7ZK2Y9+g6neJhxuH+BejddHBOZXp9vh5KcKbedUHVjl1SCU3nnO8iWTqNxLi7OCYabTpypddtlylvtecwrW1w==", 432 + }, 433 + bin: null, 434 + dependencies: {}, 435 + optionalDependencies: {}, 436 + peerDependencies: {}, 437 + peerDependenciesMeta: {}, 438 + os: [], 439 + cpu: [], 440 + scripts: { test: "node test.js" }, 441 + deprecated: null, 442 + }, 443 + "3.1.1": { 444 + version: "3.1.1", 445 + dist: { 446 + tarball: 447 + "https://registry.npmjs.org/decamelize/-/decamelize-3.1.1.tgz", 448 + shasum: "ebf473c6f8607bd70fd9ed6d892da27c5eb8539e", 449 + integrity: 450 + "sha512-pSJTQCBDZxv8siK5p/M42ZdhThhTtx3JU/OKli0yQSKebfM9q92op6zF7krYrWVKRtsE/RwTDiZLliMV3ECkXQ==", 451 + }, 452 + bin: null, 453 + dependencies: { xregexp: "^4.2.4" }, 454 + optionalDependencies: {}, 455 + peerDependencies: {}, 456 + peerDependenciesMeta: {}, 457 + os: [], 458 + cpu: [], 459 + scripts: { test: "xo && ava && tsd" }, 460 + deprecated: null, 461 + }, 462 + "3.1.0": { 463 + version: "3.1.0", 464 + dist: { 465 + tarball: 466 + "https://registry.npmjs.org/decamelize/-/decamelize-3.1.0.tgz", 467 + shasum: "81cd3f2e9911b8874e290d249da2c366453641d4", 468 + integrity: 469 + "sha512-fgHaR077tSDdzV2ExQwtJ8Kx8LYOvnf1cm5JaQ1ESeGgO8CTH7wv3202zJEg1YND0Fx7WQDxeuDPdAPMERXBEg==", 470 + }, 471 + bin: null, 472 + dependencies: { xregexp: "^4.2.4" }, 473 + optionalDependencies: {}, 474 + peerDependencies: {}, 475 + peerDependenciesMeta: {}, 476 + os: [], 477 + cpu: [], 478 + scripts: { test: "xo && ava && tsd" }, 479 + deprecated: null, 480 + }, 481 + "1.1.1": { 482 + version: "1.1.1", 483 + dist: { 484 + tarball: 485 + "https://registry.npmjs.org/decamelize/-/decamelize-1.1.1.tgz", 486 + shasum: "8871479a6c0487f5653d48a992f1d0381ca6f031", 487 + integrity: 488 + "sha512-l2nWbx7Uy2MCRQjEJQm6lep1GwWzl1DHr9wTcQzLQYOSes2RwALmR87OG91eNjoMbih7xrYhZX9cPWP3U7Kxmw==", 489 + }, 490 + bin: null, 491 + dependencies: {}, 492 + optionalDependencies: {}, 493 + peerDependencies: {}, 494 + peerDependenciesMeta: {}, 495 + os: [], 496 + cpu: [], 497 + scripts: { test: "node test.js" }, 498 + deprecated: null, 499 + }, 500 + "1.2.0": { 501 + version: "1.2.0", 502 + dist: { 503 + tarball: 504 + "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 505 + shasum: "f6534d15148269b20352e7bee26f501f9a191290", 506 + integrity: 507 + "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", 508 + }, 509 + bin: null, 510 + dependencies: {}, 511 + optionalDependencies: {}, 512 + peerDependencies: {}, 513 + peerDependenciesMeta: {}, 514 + os: [], 515 + cpu: [], 516 + scripts: { test: "xo && ava" }, 517 + deprecated: null, 518 + }, 519 + "2.0.0": { 520 + version: "2.0.0", 521 + dist: { 522 + tarball: 523 + "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", 524 + shasum: "656d7bbc8094c4c788ea53c5840908c9c7d063c7", 525 + integrity: 526 + "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", 527 + }, 528 + bin: null, 529 + dependencies: { xregexp: "4.0.0" }, 530 + optionalDependencies: {}, 531 + peerDependencies: {}, 532 + peerDependenciesMeta: {}, 533 + os: [], 534 + cpu: [], 535 + scripts: { test: "xo && ava" }, 536 + deprecated: null, 537 + }, 538 + "3.0.0": { 539 + version: "3.0.0", 540 + dist: { 541 + tarball: 542 + "https://registry.npmjs.org/decamelize/-/decamelize-3.0.0.tgz", 543 + shasum: "5efdacb0ff1b6e4031ccd0da71257340c1b846b7", 544 + integrity: 545 + "sha512-NUW7GyGP5Al0a4QIr3qj/FVzPNjpixU/HWPMJ7kuFlMpVnLcNeUrKsvOOMlywL2QPr/JG3am40S5a2G9F0REcw==", 546 + }, 547 + bin: null, 548 + dependencies: { xregexp: "^4.2.4" }, 549 + optionalDependencies: {}, 550 + peerDependencies: {}, 551 + peerDependenciesMeta: {}, 552 + os: [], 553 + cpu: [], 554 + scripts: { test: "xo && ava && tsd-check" }, 555 + deprecated: null, 556 + }, 557 + "5.0.0": { 558 + version: "5.0.0", 559 + dist: { 560 + tarball: 561 + "https://registry.npmjs.org/decamelize/-/decamelize-5.0.0.tgz", 562 + shasum: "88358157b010ef133febfd27c18994bd80c6215b", 563 + integrity: 564 + "sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w==", 565 + }, 566 + bin: null, 567 + dependencies: {}, 568 + optionalDependencies: {}, 569 + peerDependencies: {}, 570 + peerDependenciesMeta: {}, 571 + os: [], 572 + cpu: [], 573 + scripts: { test: "xo && ava && tsd" }, 574 + deprecated: null, 575 + }, 576 + "1.1.2": { 577 + version: "1.1.2", 578 + dist: { 579 + tarball: 580 + "https://registry.npmjs.org/decamelize/-/decamelize-1.1.2.tgz", 581 + shasum: "dcc93727be209632e98b02718ef4cb79602322f2", 582 + integrity: 583 + "sha512-TzUj+sMdUozL/R01HUZfQNgHBclsYvlLLDoXpoVT//50AAuGNYj1jayRptx0gBgBWaViSim8YHnx0NgLmdx2KQ==", 584 + }, 585 + bin: null, 586 + dependencies: { "escape-string-regexp": "^1.0.4" }, 587 + optionalDependencies: {}, 588 + peerDependencies: {}, 589 + peerDependenciesMeta: {}, 590 + os: [], 591 + cpu: [], 592 + scripts: { test: "xo && ava" }, 593 + deprecated: null, 594 + }, 595 + "4.0.0": { 596 + version: "4.0.0", 597 + dist: { 598 + tarball: 599 + "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 600 + shasum: "aa472d7bf660eb15f3494efd531cab7f2a709837", 601 + integrity: 602 + "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 603 + }, 604 + bin: null, 605 + dependencies: {}, 606 + optionalDependencies: {}, 607 + peerDependencies: {}, 608 + peerDependenciesMeta: {}, 609 + os: [], 610 + cpu: [], 611 + scripts: { test: "xo && ava && tsd" }, 612 + deprecated: null, 613 + }, 614 + "5.0.1": { 615 + version: "5.0.1", 616 + dist: { 617 + tarball: 618 + "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", 619 + shasum: "db11a92e58c741ef339fb0a2868d8a06a9a7b1e9", 620 + integrity: 621 + "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", 622 + }, 623 + bin: null, 624 + dependencies: {}, 625 + optionalDependencies: {}, 626 + peerDependencies: {}, 627 + peerDependenciesMeta: {}, 628 + os: [], 629 + cpu: [], 630 + scripts: { test: "xo && ava && tsd" }, 631 + deprecated: null, 632 + }, 633 + "1.0.0": { 634 + version: "1.0.0", 635 + dist: { 636 + tarball: 637 + "https://registry.npmjs.org/decamelize/-/decamelize-1.0.0.tgz", 638 + shasum: "5287122f71691d4505b18ff2258dc400a5b23847", 639 + integrity: 640 + "sha512-6OlbjTSfBWyqM8oFO7TYc6DgCIiT6vgCiZ973GDA98xVf+DOXVZvYLzRyi0HEJy5J31/69lel4AeY78OaasBLQ==", 641 + }, 642 + bin: null, 643 + dependencies: {}, 644 + optionalDependencies: {}, 645 + peerDependencies: {}, 646 + peerDependenciesMeta: {}, 647 + os: [], 648 + cpu: [], 649 + scripts: { test: "node test.js" }, 650 + deprecated: null, 651 + }, 652 + "3.2.0": { 653 + version: "3.2.0", 654 + dist: { 655 + tarball: 656 + "https://registry.npmjs.org/decamelize/-/decamelize-3.2.0.tgz", 657 + shasum: "84b8e8f4f8c579f938e35e2cc7024907e0090851", 658 + integrity: 659 + "sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw==", 660 + }, 661 + bin: null, 662 + dependencies: { xregexp: "^4.2.4" }, 663 + optionalDependencies: {}, 664 + peerDependencies: {}, 665 + peerDependenciesMeta: {}, 666 + os: [], 667 + cpu: [], 668 + scripts: { test: "xo && ava && tsd" }, 669 + deprecated: null, 670 + }, 671 + "6.0.0": { 672 + version: "6.0.0", 673 + dist: { 674 + tarball: 675 + "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", 676 + shasum: "8cad4d916fde5c41a264a43d0ecc56fe3d31749e", 677 + integrity: 678 + "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", 679 + }, 680 + bin: null, 681 + dependencies: {}, 682 + optionalDependencies: {}, 683 + peerDependencies: {}, 684 + peerDependenciesMeta: {}, 685 + os: [], 686 + cpu: [], 687 + scripts: { test: "xo && ava && tsd" }, 688 + deprecated: null, 689 + }, 690 + }, 691 + "dist-tags": { latest: "6.0.0" }, 692 + }, 693 + nonJsrPackages: { 694 + npm: { 695 + "ansi-regex": { 696 + "3.0.1": { 697 + full: "ansi-regex@3.0.1", 698 + registry: undefined, 699 + scope: undefined, 700 + name: "ansi-regex", 701 + version: "3.0.1", 702 + suffix: undefined, 703 + }, 704 + "5.0.1": { 705 + full: "ansi-regex@5.0.1", 706 + registry: undefined, 707 + scope: undefined, 708 + name: "ansi-regex", 709 + version: "5.0.1", 710 + suffix: undefined, 711 + }, 712 + }, 713 + "ansi-styles": { 714 + "4.3.0": { 715 + full: "ansi-styles@4.3.0", 716 + registry: undefined, 717 + scope: undefined, 718 + name: "ansi-styles", 719 + version: "4.3.0", 720 + suffix: undefined, 721 + }, 722 + }, 723 + camelcase: { 724 + "5.3.1": { 725 + full: "camelcase@5.3.1", 726 + registry: undefined, 727 + scope: undefined, 728 + name: "camelcase", 729 + version: "5.3.1", 730 + suffix: undefined, 731 + }, 732 + }, 733 + cliui: { 734 + "6.0.0": { 735 + full: "cliui@6.0.0", 736 + registry: undefined, 737 + scope: undefined, 738 + name: "cliui", 739 + version: "6.0.0", 740 + suffix: undefined, 741 + }, 742 + }, 743 + "color-convert": { 744 + "2.0.1": { 745 + full: "color-convert@2.0.1", 746 + registry: undefined, 747 + scope: undefined, 748 + name: "color-convert", 749 + version: "2.0.1", 750 + suffix: undefined, 751 + }, 752 + }, 753 + "color-name": { 754 + "1.1.4": { 755 + full: "color-name@1.1.4", 756 + registry: undefined, 757 + scope: undefined, 758 + name: "color-name", 759 + version: "1.1.4", 760 + suffix: undefined, 761 + }, 762 + }, 763 + cowsay: { 764 + "1.6.0": { 765 + full: "cowsay@1.6.0", 766 + registry: undefined, 767 + scope: undefined, 768 + name: "cowsay", 769 + version: "1.6.0", 770 + suffix: undefined, 771 + }, 772 + }, 773 + decamelize: { 774 + "1.2.0": { 775 + full: "decamelize@1.2.0", 776 + registry: undefined, 777 + scope: undefined, 778 + name: "decamelize", 779 + version: "1.2.0", 780 + suffix: undefined, 781 + }, 782 + }, 783 + "emoji-regex": { 784 + "8.0.0": { 785 + full: "emoji-regex@8.0.0", 786 + registry: undefined, 787 + scope: undefined, 788 + name: "emoji-regex", 789 + version: "8.0.0", 790 + suffix: undefined, 791 + }, 792 + }, 793 + "find-up": { 794 + "4.1.0": { 795 + full: "find-up@4.1.0", 796 + registry: undefined, 797 + scope: undefined, 798 + name: "find-up", 799 + version: "4.1.0", 800 + suffix: undefined, 801 + }, 802 + }, 803 + "get-caller-file": { 804 + "2.0.5": { 805 + full: "get-caller-file@2.0.5", 806 + registry: undefined, 807 + scope: undefined, 808 + name: "get-caller-file", 809 + version: "2.0.5", 810 + suffix: undefined, 811 + }, 812 + }, 813 + "get-stdin": { 814 + "8.0.0": { 815 + full: "get-stdin@8.0.0", 816 + registry: undefined, 817 + scope: undefined, 818 + name: "get-stdin", 819 + version: "8.0.0", 820 + suffix: undefined, 821 + }, 822 + }, 823 + "is-fullwidth-code-point": { 824 + "2.0.0": { 825 + full: "is-fullwidth-code-point@2.0.0", 826 + registry: undefined, 827 + scope: undefined, 828 + name: "is-fullwidth-code-point", 829 + version: "2.0.0", 830 + suffix: undefined, 831 + }, 832 + "3.0.0": { 833 + full: "is-fullwidth-code-point@3.0.0", 834 + registry: undefined, 835 + scope: undefined, 836 + name: "is-fullwidth-code-point", 837 + version: "3.0.0", 838 + suffix: undefined, 839 + }, 840 + }, 841 + "locate-path": { 842 + "5.0.0": { 843 + full: "locate-path@5.0.0", 844 + registry: undefined, 845 + scope: undefined, 846 + name: "locate-path", 847 + version: "5.0.0", 848 + suffix: undefined, 849 + }, 850 + }, 851 + "p-limit": { 852 + "2.3.0": { 853 + full: "p-limit@2.3.0", 854 + registry: undefined, 855 + scope: undefined, 856 + name: "p-limit", 857 + version: "2.3.0", 858 + suffix: undefined, 859 + }, 860 + }, 861 + "p-locate": { 862 + "4.1.0": { 863 + full: "p-locate@4.1.0", 864 + registry: undefined, 865 + scope: undefined, 866 + name: "p-locate", 867 + version: "4.1.0", 868 + suffix: undefined, 869 + }, 870 + }, 871 + "p-try": { 872 + "2.2.0": { 873 + full: "p-try@2.2.0", 874 + registry: undefined, 875 + scope: undefined, 876 + name: "p-try", 877 + version: "2.2.0", 878 + suffix: undefined, 879 + }, 880 + }, 881 + "path-exists": { 882 + "4.0.0": { 883 + full: "path-exists@4.0.0", 884 + registry: undefined, 885 + scope: undefined, 886 + name: "path-exists", 887 + version: "4.0.0", 888 + suffix: undefined, 889 + }, 890 + }, 891 + "require-directory": { 892 + "2.1.1": { 893 + full: "require-directory@2.1.1", 894 + registry: undefined, 895 + scope: undefined, 896 + name: "require-directory", 897 + version: "2.1.1", 898 + suffix: undefined, 899 + }, 900 + }, 901 + "require-main-filename": { 902 + "2.0.0": { 903 + full: "require-main-filename@2.0.0", 904 + registry: undefined, 905 + scope: undefined, 906 + name: "require-main-filename", 907 + version: "2.0.0", 908 + suffix: undefined, 909 + }, 910 + }, 911 + "set-blocking": { 912 + "2.0.0": { 913 + full: "set-blocking@2.0.0", 914 + registry: undefined, 915 + scope: undefined, 916 + name: "set-blocking", 917 + version: "2.0.0", 918 + suffix: undefined, 919 + }, 920 + }, 921 + "string-width": { 922 + "2.1.1": { 923 + full: "string-width@2.1.1", 924 + registry: undefined, 925 + scope: undefined, 926 + name: "string-width", 927 + version: "2.1.1", 928 + suffix: undefined, 929 + }, 930 + "4.2.3": { 931 + full: "string-width@4.2.3", 932 + registry: undefined, 933 + scope: undefined, 934 + name: "string-width", 935 + version: "4.2.3", 936 + suffix: undefined, 937 + }, 938 + }, 939 + "strip-ansi": { 940 + "4.0.0": { 941 + full: "strip-ansi@4.0.0", 942 + registry: undefined, 943 + scope: undefined, 944 + name: "strip-ansi", 945 + version: "4.0.0", 946 + suffix: undefined, 947 + }, 948 + "6.0.1": { 949 + full: "strip-ansi@6.0.1", 950 + registry: undefined, 951 + scope: undefined, 952 + name: "strip-ansi", 953 + version: "6.0.1", 954 + suffix: undefined, 955 + }, 956 + }, 957 + "strip-final-newline": { 958 + "2.0.0": { 959 + full: "strip-final-newline@2.0.0", 960 + registry: undefined, 961 + scope: undefined, 962 + name: "strip-final-newline", 963 + version: "2.0.0", 964 + suffix: undefined, 965 + }, 966 + }, 967 + "which-module": { 968 + "2.0.1": { 969 + full: "which-module@2.0.1", 970 + registry: undefined, 971 + scope: undefined, 972 + name: "which-module", 973 + version: "2.0.1", 974 + suffix: undefined, 975 + }, 976 + }, 977 + "wrap-ansi": { 978 + "6.2.0": { 979 + full: "wrap-ansi@6.2.0", 980 + registry: undefined, 981 + scope: undefined, 982 + name: "wrap-ansi", 983 + version: "6.2.0", 984 + suffix: undefined, 985 + }, 986 + }, 987 + y18n: { 988 + "4.0.3": { 989 + full: "y18n@4.0.3", 990 + registry: undefined, 991 + scope: undefined, 992 + name: "y18n", 993 + version: "4.0.3", 994 + suffix: undefined, 995 + }, 996 + }, 997 + "yargs-parser": { 998 + "18.1.3": { 999 + full: "yargs-parser@18.1.3", 1000 + registry: undefined, 1001 + scope: undefined, 1002 + name: "yargs-parser", 1003 + version: "18.1.3", 1004 + suffix: undefined, 1005 + }, 1006 + }, 1007 + yargs: { 1008 + "15.4.1": { 1009 + full: "yargs@15.4.1", 1010 + registry: undefined, 1011 + scope: undefined, 1012 + name: "yargs", 1013 + version: "15.4.1", 1014 + suffix: undefined, 1015 + }, 1016 + }, 1017 + }, 1018 + }, 1019 + registry: "npm", 1020 + }, 1021 + expectedValue: { 1022 + name: "decamelize", 1023 + versions: { 1024 + "1.2.0": { 1025 + version: "1.2.0", 1026 + dist: { 1027 + tarball: 1028 + "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 1029 + shasum: "f6534d15148269b20352e7bee26f501f9a191290", 1030 + integrity: 1031 + "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", 1032 + }, 1033 + bin: null, 1034 + dependencies: {}, 1035 + optionalDependencies: {}, 1036 + peerDependencies: {}, 1037 + peerDependenciesMeta: {}, 1038 + os: [], 1039 + cpu: [], 1040 + scripts: { test: "xo && ava" }, 1041 + deprecated: null, 1042 + }, 1043 + }, 1044 + "dist-tags": {}, 1045 + }, 1046 + }, 1047 + ]; 1048 + testFactory( 1049 + assertEquals, 1050 + (args: Args) => 1051 + pruneRegistryJson(args.registryJson, args.nonJsrPackages, args.registry), 1052 + fixtures 1053 + )(); 1054 + });
+346
pkgs/build-support/deno/fetch-deno-deps/prune-registries.ts
··· 1 + #!/usr/bin/env deno 2 + import { parseArgs } from "@std/cli/parse-args"; 3 + import { walkSync } from "@std/fs/walk"; 4 + 5 + /** 6 + * NOTE: The problem this script solves, is that in every npm dependency in the deno cache 7 + * is a registry.json file, which serves as a sort of local registry cache for the deno cli. 8 + * Such a file looks like this (with deno v2.1.4): 9 + * ```json 10 + * { 11 + * "name": "@floating-ui/core", 12 + * "versions": { 13 + * "0.7.0": { ... }, 14 + * "1.6.0": { ... }, 15 + * "0.1.2": { ... }, 16 + * ... 17 + * }, 18 + * "dist-tags": { "latest": "1.7.0" } 19 + * } 20 + * ``` 21 + * The deno cli will look into this file when called to look up if the required versions are there. 22 + * The problem is that the available versions for a package change over time. The registry.json files 23 + * need to be part of the fixed output derivation, which will eventually change the hash of the FOD, 24 + * if all those unwanted versions aren't pruned. 25 + * 26 + * On top of that a similar thing happens for jsr packages in the vendor directory 27 + * with `meta.json` files. These also need to be pruned. 28 + * Such a file looks like this (with deno v2.1.4): 29 + * ```json 30 + * { 31 + * "scope": "std", 32 + * "name": "internal", 33 + * "latest": "1.0.6", 34 + * "versions": { 35 + * "0.202.0": {}, 36 + * "1.0.1": {}, 37 + * "0.225.0": { 38 + * "yanked": true 39 + * }, 40 + * } 41 + * ``` 42 + */ 43 + 44 + export type PackageSpecifiers = { 45 + [packageIdent: string]: string; 46 + }; 47 + 48 + export type LockJson = { 49 + specifiers: PackageSpecifiers; 50 + version: string; 51 + workspace: any; 52 + [registry: string]: any; 53 + }; 54 + 55 + export type Config = { 56 + lockJson: LockJson; 57 + cachePath: string; 58 + vendorPath: string; 59 + }; 60 + 61 + export type PackageInfo = { 62 + full: string; 63 + registry: string | undefined; 64 + scope: string | undefined; 65 + name: string; 66 + version: string; 67 + suffix: string | undefined; 68 + }; 69 + 70 + export type PackagesByRegistry = { 71 + [registry: string]: { 72 + [packageName: string]: { 73 + [version: string]: PackageInfo; 74 + }; 75 + }; 76 + }; 77 + 78 + export type PathsByRegistry = { 79 + [packageRegistry: string]: string[]; 80 + }; 81 + 82 + export type RegistryJson = { 83 + "dist-tags": any; 84 + "_deno.etag": string; 85 + versions: { [version: string]: any }; 86 + name: string; 87 + }; 88 + 89 + export type MetaJson = { 90 + scope: string; 91 + name: string; 92 + latest: string; 93 + versions: { 94 + [version: string]: any; 95 + }; 96 + }; 97 + 98 + export function getConfig(): Config { 99 + const flags = parseArgs(Deno.args, { 100 + string: ["lock-json", "cache-path", "vendor-path"], 101 + }); 102 + 103 + if (!flags["lock-json"]) { 104 + throw "--lock-json flag not set but required"; 105 + } 106 + if (!flags["cache-path"]) { 107 + throw "--cache-path flag not set but required"; 108 + } 109 + if (!flags["vendor-path"]) { 110 + throw "--vendor-path flag not set but required"; 111 + } 112 + 113 + const lockJson = JSON.parse( 114 + new TextDecoder("utf-8").decode(Deno.readFileSync(flags["lock-json"])) 115 + ); 116 + if (!lockJson) { 117 + throw `could not parse lockJson at ${flags["lock-json"]}`; 118 + } 119 + 120 + return { 121 + lockJson, 122 + cachePath: flags["cache-path"], 123 + vendorPath: flags["vendor-path"], 124 + }; 125 + } 126 + 127 + export function getAllPackageRegistries( 128 + specifiers: PackageSpecifiers 129 + ): Set<string> { 130 + return Object.keys(specifiers).reduce((acc: Set<string>, v: string) => { 131 + const s = v.split(":"); 132 + if (s.length !== 2) { 133 + throw "unexpected registry format"; 134 + } 135 + const registry = s[0]; 136 + acc.add(registry); 137 + return acc; 138 + }, new Set()); 139 + } 140 + 141 + export function parsePackageSpecifier(packageSpecifier: string): PackageInfo { 142 + const match = 143 + /^((?<registry>.*):)?((?<scope>@.*?)\/)?(?<name>.*?)@(?<version>.*?)(?<suffix>_.*)?$/.exec( 144 + packageSpecifier 145 + ); 146 + if ( 147 + match !== null && 148 + match.groups?.name !== undefined && 149 + match.groups?.version !== undefined 150 + ) { 151 + return { 152 + // npm:@amazn/style-dictionary@4.2.4_prettier@3.5.3 153 + full: match[0], 154 + // npm 155 + registry: match.groups?.registry, 156 + // @amazn 157 + scope: match.groups?.scope, 158 + // style-dictionary 159 + name: match.groups?.name, 160 + // 4.2.4 161 + version: match.groups?.version, 162 + // _prettier@3.5.3 163 + suffix: match.groups?.suffix, 164 + }; 165 + } 166 + 167 + throw "unexpected package specifier format"; 168 + } 169 + 170 + export function getScopedName(name: string, scope?: string): string { 171 + if (scope !== undefined) { 172 + return `${scope[0] === "@" ? "" : "@"}${scope}/${name}`; 173 + } 174 + return name; 175 + } 176 + 177 + export function getAllPackagesByPackageRegistry( 178 + lockJson: LockJson, 179 + registries: Set<string> 180 + ): PackagesByRegistry { 181 + const result: PackagesByRegistry = {}; 182 + for (const registry of Array.from(registries)) { 183 + const packageInfosOfRegistries = Object.keys(lockJson[registry]).map( 184 + parsePackageSpecifier 185 + ); 186 + result[registry] = {}; 187 + for (const packageInfo of packageInfosOfRegistries) { 188 + const scopedName = getScopedName(packageInfo.name, packageInfo.scope); 189 + if (result[registry][scopedName] === undefined) { 190 + result[registry][scopedName] = {}; 191 + } 192 + result[registry][scopedName][packageInfo.version] = packageInfo; 193 + } 194 + } 195 + return result; 196 + } 197 + 198 + export function findRegistryJsonPaths( 199 + cachePath: string, 200 + nonJsrPackages: PackagesByRegistry 201 + ): PathsByRegistry { 202 + const result: PathsByRegistry = {}; 203 + for (const registry of Object.keys(nonJsrPackages)) { 204 + const path = `${cachePath}/${registry}`; 205 + const registryJsonPaths = Array.from(walkSync(path)) 206 + .filter((v) => v.name === "registry.json") 207 + .map((v) => v.path); 208 + result[registry] = registryJsonPaths; 209 + } 210 + return result; 211 + } 212 + 213 + export function pruneRegistryJson( 214 + registryJson: RegistryJson, 215 + nonJsrPackages: PackagesByRegistry, 216 + registry: string 217 + ) { 218 + const scopedName = registryJson.name; 219 + const packageInfoByVersion = nonJsrPackages[registry][scopedName]; 220 + if (!packageInfoByVersion) { 221 + throw `could not find key "${scopedName}" in\n${Object.keys( 222 + nonJsrPackages[registry] 223 + )}`; 224 + } 225 + 226 + const newRegistryJson: RegistryJson = { 227 + ...registryJson, 228 + "_deno.etag": "", 229 + "dist-tags": {}, 230 + versions: {}, 231 + }; 232 + 233 + for (const version of Object.keys(packageInfoByVersion)) { 234 + newRegistryJson.versions[version] = registryJson.versions[version]; 235 + } 236 + 237 + return newRegistryJson; 238 + } 239 + 240 + export function pruneRegistryJsonFiles( 241 + nonJsrPackages: PackagesByRegistry, 242 + registryJsonPathsByRegistry: PathsByRegistry 243 + ): void { 244 + for (const [registry, paths] of Object.entries(registryJsonPathsByRegistry)) { 245 + for (const path of paths) { 246 + const registryJson: RegistryJson = JSON.parse( 247 + new TextDecoder("utf-8").decode(Deno.readFileSync(path)) 248 + ); 249 + 250 + const newRegistryJson = pruneRegistryJson( 251 + registryJson, 252 + nonJsrPackages, 253 + registry 254 + ); 255 + 256 + Deno.writeFileSync( 257 + path, 258 + new TextEncoder().encode(JSON.stringify(newRegistryJson)) 259 + ); 260 + } 261 + } 262 + } 263 + 264 + export function findMetaJsonPaths( 265 + vendorPath: string, 266 + jsrPackages: PackagesByRegistry 267 + ): PathsByRegistry { 268 + const result: PathsByRegistry = {}; 269 + for (const registry of Object.keys(jsrPackages)) { 270 + const path = `${vendorPath}`; 271 + const metaJsonPaths = Array.from(walkSync(path)) 272 + .filter((v) => v.name === "meta.json") 273 + .map((v) => v.path); 274 + result[registry] = metaJsonPaths; 275 + } 276 + return result; 277 + } 278 + 279 + export function pruneMetaJson( 280 + metaJson: MetaJson, 281 + jsrPackages: PackagesByRegistry, 282 + registry: string 283 + ): MetaJson { 284 + const scopedName = getScopedName(metaJson.name, metaJson.scope); 285 + const packageInfoByVersion = jsrPackages[registry][scopedName]; 286 + if (!packageInfoByVersion) { 287 + throw `could not find key "${scopedName}" in\n${Object.keys( 288 + jsrPackages[registry] 289 + )}`; 290 + } 291 + const newMetaJson: MetaJson = { 292 + ...metaJson, 293 + latest: "", 294 + versions: {}, 295 + }; 296 + 297 + for (const version of Object.keys(packageInfoByVersion)) { 298 + newMetaJson.versions[version] = metaJson.versions[version]; 299 + } 300 + return newMetaJson; 301 + } 302 + 303 + export function pruneMetaJsonFiles( 304 + jsrPackages: PackagesByRegistry, 305 + metaJsonPathsByRegistry: PathsByRegistry 306 + ): void { 307 + for (const [registry, paths] of Object.entries(metaJsonPathsByRegistry)) { 308 + for (const path of paths) { 309 + const metaJson: MetaJson = JSON.parse( 310 + new TextDecoder("utf-8").decode(Deno.readFileSync(path)) 311 + ); 312 + 313 + const newMetaJson = pruneMetaJson(metaJson, jsrPackages, registry); 314 + 315 + Deno.writeFileSync( 316 + path, 317 + new TextEncoder().encode(JSON.stringify(newMetaJson)) 318 + ); 319 + } 320 + } 321 + } 322 + 323 + function main() { 324 + const config = getConfig(); 325 + const registries = getAllPackageRegistries(config.lockJson.specifiers); 326 + const packages = getAllPackagesByPackageRegistry(config.lockJson, registries); 327 + 328 + const jsrPackages = { 329 + jsr: structuredClone(packages.jsr), 330 + } satisfies PackagesByRegistry; 331 + delete packages.jsr; 332 + const nonJsrPackages = packages; 333 + 334 + const metaJsonpaths = findMetaJsonPaths(config.vendorPath, jsrPackages); 335 + pruneMetaJsonFiles(jsrPackages, metaJsonpaths); 336 + 337 + const registryJsonPaths = findRegistryJsonPaths( 338 + config.cachePath, 339 + nonJsrPackages 340 + ); 341 + pruneRegistryJsonFiles(nonJsrPackages, registryJsonPaths); 342 + } 343 + 344 + if (import.meta.main) { 345 + main(); 346 + }
+7
pkgs/build-support/deno/fetch-deno-deps/shell.nix
··· 1 + let 2 + pkgs = import ../../../../default.nix { }; 3 + in 4 + pkgs.mkShell { 5 + buildInputs = [ pkgs.deno ]; 6 + DENO_DIR = "./.deno"; 7 + }
+2
pkgs/by-name/_1/_1password-gui/darwin.nix
··· 30 30 31 31 # 1Password is notarized. 32 32 dontFixup = true; 33 + 34 + passthru.updateScript = ./update.sh; 33 35 }
+2
pkgs/by-name/_1/_1password-gui/linux.nix
··· 153 153 # https://1password.community/discussion/comment/624011/#Comment_624011 154 154 #--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" 155 155 ''; 156 + 157 + passthru.updateScript = ./update.sh; 156 158 }
+15 -10
pkgs/by-name/_1/_1password-gui/package.nix
··· 11 11 let 12 12 pname = "1password"; 13 13 14 - versions = builtins.fromJSON (builtins.readFile ./versions.json); 15 - hostOs = if stdenv.hostPlatform.isLinux then "linux" else "darwin"; 16 - version = versions."${channel}-${hostOs}" or (throw "unknown channel-os ${channel}-${hostOs}"); 14 + hostOs = stdenv.hostPlatform.parsed.kernel.name; 15 + hostArch = stdenv.hostPlatform.parsed.cpu.name; 16 + sources = builtins.fromJSON (builtins.readFile ./sources.json); 17 17 18 - sources = builtins.fromJSON (builtins.readFile ./sources.json); 18 + sourcesChan = sources.${channel} or (throw "unsupported channel ${channel}"); 19 + sourcesChanOs = sourcesChan.${hostOs} or (throw "unsupported OS ${hostOs}"); 20 + sourcesChanOsArch = 21 + sourcesChanOs.sources.${hostArch} or (throw "unsupported architecture ${hostArch}"); 19 22 23 + inherit (sourcesChanOs) version; 20 24 src = fetchurl { 21 - inherit 22 - (sources.${channel}.${stdenv.system} or (throw "unsupported system ${stdenv.hostPlatform.system}")) 23 - url 24 - hash 25 - ; 25 + inherit (sourcesChanOsArch) url hash; 26 26 }; 27 27 28 28 meta = { ··· 37 37 sebtm 38 38 bdd 39 39 ]; 40 - platforms = builtins.attrNames sources.${channel}; 40 + platforms = [ 41 + "x86_64-linux" 42 + "x86_64-darwin" 43 + "aarch64-linux" 44 + "aarch64-darwin" 45 + ]; 41 46 mainProgram = "1password"; 42 47 }; 43 48
+48 -28
pkgs/by-name/_1/_1password-gui/sources.json
··· 1 1 { 2 2 "stable": { 3 - "x86_64-linux": { 4 - "url": "https://downloads.1password.com/linux/tar/stable/x86_64/1password-8.10.78.x64.tar.gz", 5 - "hash": "sha256-COmXSjbCetPsbm40OrWGVtULPheEgnHEO0ZcIgWaG1w=" 6 - }, 7 - "aarch64-linux": { 8 - "url": "https://downloads.1password.com/linux/tar/stable/aarch64/1password-8.10.78.arm64.tar.gz", 9 - "hash": "sha256-diy7VhKRluSnVSR35Ogamf9RDHdqxSJifLOOYmMrJHE=" 10 - }, 11 - "x86_64-darwin": { 12 - "url": "https://downloads.1password.com/mac/1Password-8.10.78-x86_64.zip", 13 - "hash": "sha256-8fbjEc/Z0xCdXq/uHp4bQE5Js5hNLbVCRZxnepUdLUs=" 3 + "linux": { 4 + "version": "8.10.78", 5 + "sources": { 6 + "x86_64": { 7 + "url": "https://downloads.1password.com/linux/tar/stable/x86_64/1password-8.10.78.x64.tar.gz", 8 + "hash": "sha256-COmXSjbCetPsbm40OrWGVtULPheEgnHEO0ZcIgWaG1w=" 9 + }, 10 + "aarch64": { 11 + "url": "https://downloads.1password.com/linux/tar/stable/aarch64/1password-8.10.78.arm64.tar.gz", 12 + "hash": "sha256-diy7VhKRluSnVSR35Ogamf9RDHdqxSJifLOOYmMrJHE=" 13 + } 14 + } 14 15 }, 15 - "aarch64-darwin": { 16 - "url": "https://downloads.1password.com/mac/1Password-8.10.78-aarch64.zip", 17 - "hash": "sha256-x03dZ/eVrvFcbese1cBAvyJKwtWe6rOcgytn0OsEFDQ=" 16 + "darwin": { 17 + "version": "8.10.78", 18 + "sources": { 19 + "x86_64": { 20 + "url": "https://downloads.1password.com/mac/1Password-8.10.78-x86_64.zip", 21 + "hash": "sha256-8fbjEc/Z0xCdXq/uHp4bQE5Js5hNLbVCRZxnepUdLUs=" 22 + }, 23 + "aarch64": { 24 + "url": "https://downloads.1password.com/mac/1Password-8.10.78-aarch64.zip", 25 + "hash": "sha256-x03dZ/eVrvFcbese1cBAvyJKwtWe6rOcgytn0OsEFDQ=" 26 + } 27 + } 18 28 } 19 29 }, 20 30 "beta": { 21 - "x86_64-linux": { 22 - "url": "https://downloads.1password.com/linux/tar/beta/x86_64/1password-8.10.80-18.BETA.x64.tar.gz", 23 - "hash": "sha256-X2Wu/dQQ7fv+tTAU2/70S38wL6WdJuc/DXWoiHZvSP4=" 24 - }, 25 - "aarch64-linux": { 26 - "url": "https://downloads.1password.com/linux/tar/beta/aarch64/1password-8.10.80-18.BETA.arm64.tar.gz", 27 - "hash": "sha256-52aRg6QD/fKOzOHoG88q8VNJIizxnISFnpxek7bJ05w=" 28 - }, 29 - "x86_64-darwin": { 30 - "url": "https://downloads.1password.com/mac/1Password-8.10.80-18.BETA-x86_64.zip", 31 - "hash": "sha256-kUU+nm19DmdY8ZG6d+EJFQXcCy/BOauXh83suQLSvz0=" 31 + "linux": { 32 + "version": "8.10.80-18.BETA", 33 + "sources": { 34 + "x86_64": { 35 + "url": "https://downloads.1password.com/linux/tar/beta/x86_64/1password-8.10.80-18.BETA.x64.tar.gz", 36 + "hash": "sha256-X2Wu/dQQ7fv+tTAU2/70S38wL6WdJuc/DXWoiHZvSP4=" 37 + }, 38 + "aarch64": { 39 + "url": "https://downloads.1password.com/linux/tar/beta/aarch64/1password-8.10.80-18.BETA.arm64.tar.gz", 40 + "hash": "sha256-52aRg6QD/fKOzOHoG88q8VNJIizxnISFnpxek7bJ05w=" 41 + } 42 + } 32 43 }, 33 - "aarch64-darwin": { 34 - "url": "https://downloads.1password.com/mac/1Password-8.10.80-18.BETA-aarch64.zip", 35 - "hash": "sha256-eZG0QaB5NRwRCYcmlfZA/HTceLq7eUzR+AvzDeOrzAY=" 44 + "darwin": { 45 + "version": "8.10.80-18.BETA", 46 + "sources": { 47 + "x86_64": { 48 + "url": "https://downloads.1password.com/mac/1Password-8.10.80-18.BETA-x86_64.zip", 49 + "hash": "sha256-kUU+nm19DmdY8ZG6d+EJFQXcCy/BOauXh83suQLSvz0=" 50 + }, 51 + "aarch64": { 52 + "url": "https://downloads.1password.com/mac/1Password-8.10.80-18.BETA-aarch64.zip", 53 + "hash": "sha256-eZG0QaB5NRwRCYcmlfZA/HTceLq7eUzR+AvzDeOrzAY=" 54 + } 55 + } 36 56 } 37 57 } 38 58 }
+122
pkgs/by-name/_1/_1password-gui/update-sources.py
··· 1 + #!/usr/bin/env nix-shell 2 + #!nix-shell -i python3 -p python3 gnupg 3 + import json 4 + import os 5 + import shutil 6 + import subprocess 7 + import sys 8 + import tempfile 9 + from collections import OrderedDict 10 + 11 + DOWNLOADS_BASE_URL = "https://downloads.1password.com" 12 + OP_PGP_KEYID = "3FEF9748469ADBE15DA7CA80AC2D62742012EA22" 13 + 14 + 15 + class Sources(OrderedDict): 16 + def __init__(self): 17 + self._jsonfp = open("sources.json", "r+") 18 + self.update(json.load(self._jsonfp)) 19 + self._jsonfp.seek(0, os.SEEK_SET) 20 + 21 + def persist(self): 22 + json.dump(self, self._jsonfp, indent=2) 23 + self._jsonfp.write("\n") # keep fmt.check happy 24 + 25 + 26 + class GPG: 27 + def __new__(cls): 28 + if not hasattr(cls, "_instance"): 29 + cls._instance = super().__new__(cls) 30 + return cls._instance 31 + 32 + def __init__(self): 33 + if hasattr(self, "gnupghome"): 34 + return 35 + 36 + self.gpg = shutil.which("gpg") 37 + self.gpgv = shutil.which("gpgv") 38 + self.gnupghome = tempfile.mkdtemp(prefix="1password-gui-gnupghome.") 39 + self.env = {"GNUPGHOME": self.gnupghome} 40 + self._run( 41 + self.gpg, 42 + "--no-default-keyring", 43 + "--keyring", 44 + "trustedkeys.kbx", 45 + "--keyserver", 46 + "keyserver.ubuntu.com", 47 + "--receive-keys", 48 + OP_PGP_KEYID, 49 + ) 50 + 51 + def __del__(self): 52 + shutil.rmtree(self.gnupghome) 53 + 54 + def _run(self, *args): 55 + try: 56 + subprocess.run(args, env=self.env, check=True, capture_output=True) 57 + except subprocess.CalledProcessError as cpe: 58 + print(cpe.stderr, file=sys.stderr) 59 + raise SystemExit(f"gpg error: {cpe.cmd}") 60 + 61 + def verify(self, sigfile, datafile): 62 + return self._run(self.gpgv, sigfile, datafile) 63 + 64 + 65 + def nix_store_prefetch(url): 66 + nix = shutil.which("nix") 67 + cp = subprocess.run( 68 + [nix, "store", "prefetch-file", "--json", url], check=True, capture_output=True 69 + ) 70 + out = json.loads(cp.stdout) 71 + 72 + return out["storePath"], out["hash"] 73 + 74 + 75 + def mk_url(channel, os, version, arch): 76 + if os == "linux": 77 + arch_alias = {"x86_64": "x64", "aarch64": "arm64"}[arch] 78 + path = f"linux/tar/{channel}/{arch}/1password-{version}.{arch_alias}.tar.gz" 79 + elif os == "darwin": 80 + path = f"mac/1Password-{version}-{arch}.zip" 81 + else: 82 + raise SystemExit(f"update-sources.py: unsupported OS {os}") 83 + 84 + return f"{DOWNLOADS_BASE_URL}/{path}" 85 + 86 + 87 + def download(channel, os, version, arch): 88 + url = mk_url(channel, os, version, arch) 89 + store_path_tarball, hash = nix_store_prefetch(url) 90 + 91 + # Linux release tarballs come with detached PGP signatures. 92 + if os == "linux": 93 + store_path_sig, _ = nix_store_prefetch(url + ".sig") 94 + GPG().verify(store_path_sig, store_path_tarball) 95 + 96 + return url, hash 97 + 98 + 99 + def main(args): 100 + """Gets called with args in `channel/os/version` format. 101 + 102 + e.g.: 103 + update-sources.py stable/linux/8.10.80 beta/linux/8.10.82-12.BETA 104 + """ 105 + sources = Sources() 106 + 107 + for triplet in args[1:]: 108 + channel, os, version = triplet.split("/") 109 + release = sources[channel][os] 110 + if release["version"] == version: 111 + continue 112 + 113 + release["version"] = version 114 + for arch in release["sources"]: 115 + url, hash = download(channel, os, version, arch) 116 + release["sources"][arch].update({"url": url, "hash": hash}) 117 + 118 + sources.persist() 119 + 120 + 121 + if __name__ == "__main__": 122 + sys.exit(main(sys.argv))
+99 -65
pkgs/by-name/_1/_1password-gui/update.sh
··· 1 1 #!/usr/bin/env nix-shell 2 - #!nix-shell -i bash -p jq gnupg 2 + #!nix-shell -i bash -p jq curl 3 3 #shellcheck shell=bash 4 + set -euo pipefail 5 + 6 + # For Linux version checks we rely on Repology API to check 1Password managed Arch User Repository. 7 + REPOLOGY_PROJECT_URI="https://repology.org/api/v1/project/1password" 4 8 5 - set -euo pipefail 9 + # For Darwin version checks we query the same endpoint 1Password 8 for Mac queries. 10 + # This is the base URI. For stable channel an additional path of "N", for beta channel, "Y" is required. 11 + APP_UPDATES_URI_BASE="https://app-updates.agilebits.com/check/2/99/aarch64/OPM8/en/0/A1" 6 12 7 - cd -- "$(dirname "${BASH_SOURCE[0]}")" 13 + CURL=( 14 + "curl" "--silent" "--show-error" "--fail" 15 + "--proto" "=https" # enforce https 16 + "--tlsv1.2" # do not accept anything below tls 1.2 17 + "-H" "user-agent: nixpkgs#_1password-gui update.sh" # repology requires a descriptive user-agent 18 + ) 8 19 9 - mk_url() { 10 - local \ 11 - base_url="https://downloads.1password.com" \ 12 - os="$1" \ 13 - channel="$2" \ 14 - arch="$3" \ 15 - version="$4" 20 + JQ=( 21 + "jq" 22 + "--raw-output" 23 + "--exit-status" # exit non-zero if no output is produced 24 + ) 16 25 17 - if [[ ${os} == "linux" ]]; then 18 - if [[ ${arch} == "x86_64" ]]; then 19 - ext="x64.tar.gz" 20 - else 21 - ext="arm64.tar.gz" 22 - fi 23 - url="${base_url}/${os}/tar/${channel}/${arch}/1password-${version}.${ext}" 24 - else 25 - ext="${arch}.zip" 26 - url="${base_url}/mac/1Password-${version}-${ext}" 27 - fi 28 26 29 - echo "${url}" 27 + read_local_versions() { 28 + local channel="$1" 29 + 30 + while IFS='=' read -r key value; do 31 + local_versions["${key}"]="${value}" 32 + done < <(jq -r --arg channel "${channel}" ' 33 + .[$channel] | to_entries[] | .key as $os | .value.version as $version | 34 + "\($channel)/\($os)=\($version)" 35 + ' sources.json) 30 36 } 31 37 32 - cleanup() { 33 - if [[ -d ${TMP_GNUPGHOME-} ]]; then 34 - rm -r "${TMP_GNUPGHOME}" 35 - fi 38 + read_remote_versions() { 39 + local channel="$1" 40 + 41 + if [[ ${channel} == "stable" ]]; then 42 + remote_versions["stable/linux"]=$( 43 + "${CURL[@]}" "${REPOLOGY_PROJECT_URI}" \ 44 + | "${JQ[@]}" '.[] | select(.repo == "aur" and .srcname == "1password" and .status == "newest") | .version' 45 + ) 46 + 47 + remote_versions["stable/darwin"]=$( 48 + "${CURL[@]}" "${APP_UPDATES_URI_BASE}/N" \ 49 + | "${JQ[@]}" 'select(.available == "1") | .version' 50 + ) 51 + else 52 + remote_versions["beta/linux"]=$( 53 + # AUR version string uses underscores instead of dashes for betas. 54 + # We fix that with a `sub` in jq query. 55 + "${CURL[@]}" "${REPOLOGY_PROJECT_URI}" \ 56 + | "${JQ[@]}" '.[] | select(.repo == "aur" and .srcname == "1password-beta") | .version | sub("_"; "-")' 57 + ) 36 58 37 - if [[ -f ${JSON_HEAP-} ]]; then 38 - rm "${JSON_HEAP}" 59 + remote_versions["beta/darwin"]=$( 60 + "${CURL[@]}" "${APP_UPDATES_URI_BASE}/Y" \ 61 + | "${JQ[@]}" 'select(.available == "1") | .version' 62 + ) 39 63 fi 40 64 } 41 65 42 - trap cleanup EXIT 66 + render_versions_json() { 67 + local key value 43 68 44 - # Get channel versions from versions.json 45 - declare -A versions 46 - while IFS='=' read -r key value; do 47 - versions["${key}"]="${value}" 48 - done < <(jq -r 'to_entries[] | "\(.key)=\(.value)"' versions.json) 69 + for key in "${!local_versions[@]}"; do 70 + value="${local_versions[${key}]}" 71 + echo "${key}" 72 + echo "${value}" 73 + done \ 74 + | jq -nR 'reduce inputs as $i ({}; . + { $i: input })' 75 + } 49 76 50 - TMP_GNUPGHOME=$(mktemp -dt 1password-gui.gnupghome.XXXXXX) 51 - export GNUPGHOME="${TMP_GNUPGHOME}" 52 - gpg --no-default-keyring --keyring trustedkeys.kbx \ 53 - --keyserver keyserver.ubuntu.com \ 54 - --receive-keys 3FEF9748469ADBE15DA7CA80AC2D62742012EA22 55 77 56 - JSON_HEAP=$(mktemp -t 1password-gui.jsonheap.XXXXXX) 57 - for channel in stable beta; do 58 - for os in linux darwin; do 59 - for arch in x86_64 aarch64; do 60 - version="${versions[${channel}-${os}]}" 61 - url=$(mk_url ${os} ${channel} ${arch} ${version}) 62 - nix store prefetch-file --json "${url}" | jq " 63 - { 64 - \"${channel}\": { 65 - \"${arch}-${os}\": { 66 - \"url\": \"${url}\", 67 - \"hash\": .hash, 68 - \"storePath\": .storePath 69 - } 70 - } 71 - }" >> "${JSON_HEAP}" 78 + cd -- "$(dirname "${BASH_SOURCE[0]}")" 72 79 73 - # For some reason 1Password PGP signs only Linux binaries. 74 - if [[ ${os} == "linux" ]]; then 75 - gpgv \ 76 - $(nix store prefetch-file --json "${url}.sig" | jq -r .storePath) \ 77 - $(jq -r --slurp ".[-1].[].[].storePath" "${JSON_HEAP}") 78 - fi 79 - done 80 - done 80 + attr_path=${UPDATE_NIX_ATTR_PATH} 81 + case "${attr_path}" in 82 + _1password-gui) channel="stable" ;; 83 + _1password-gui-beta) channel="beta" ;; 84 + *) 85 + echo "Unknown attribute path ${attr_path}" >&2 86 + exit 1 87 + esac 88 + 89 + declare -A local_versions remote_versions 90 + declare -a new_version_available=() 91 + read_local_versions "${channel}" 92 + read_remote_versions "${channel}" 93 + for i in "${!remote_versions[@]}"; do 94 + if [[ "${local_versions[$i]}" != "${remote_versions[$i]}" ]]; then 95 + old_version="${local_versions[$i]}" 96 + new_version="${remote_versions[$i]}" 97 + new_version_available+=("$i/$new_version") 98 + fi 81 99 done 82 100 83 - # Combine heap of hash+url objects into a single JSON object. 84 - jq --slurp 'reduce .[] as $x ({}; . * $x) | del (.[].[].storePath)' "${JSON_HEAP}" > sources.json 101 + if [[ ${#new_version_available[@]} -eq 0 ]]; then 102 + # up to date 103 + exit 104 + fi 105 + 106 + ./update-sources.py "${new_version_available[@]}" 107 + cat <<EOF 108 + [ 109 + { 110 + "attrPath": "${attr_path}", 111 + "oldVersion": "${old_version}", 112 + "newVersion": "${new_version}", 113 + "files": [ 114 + "$PWD/sources.json" 115 + ] 116 + } 117 + ] 118 + EOF
-6
pkgs/by-name/_1/_1password-gui/versions.json
··· 1 - { 2 - "stable-linux": "8.10.78", 3 - "stable-darwin": "8.10.78", 4 - "beta-linux":"8.10.80-18.BETA", 5 - "beta-darwin": "8.10.80-18.BETA" 6 - }
+3 -3
pkgs/by-name/al/alistral/package.nix
··· 10 10 11 11 rustPlatform.buildRustPackage (finalAttrs: { 12 12 pname = "alistral"; 13 - version = "0.5.10"; 13 + version = "0.5.11"; 14 14 15 15 src = fetchFromGitHub { 16 16 owner = "RustyNova016"; 17 17 repo = "Alistral"; 18 18 tag = "v${finalAttrs.version}"; 19 - hash = "sha256-O19Btz6jLJJnCbAusRHKfUa6II8mofzifW+cbPOaHVI="; 19 + hash = "sha256-wiNXwg6mC24nWwakA9cX8OYDOhghoEgm0yVR3Tmtod4="; 20 20 }; 21 21 22 22 useFetchCargoVendor = true; 23 - cargoHash = "sha256-zQvPgigUQW9dpyLe7fgW8i9I4nm38bQKDLwezeSYx9Q="; 23 + cargoHash = "sha256-M3nwa93vzVm+GtCdmBn/jqIvgJRcULw+8FFFLPmfbyg="; 24 24 25 25 nativeBuildInputs = [ 26 26 pkg-config
-35
pkgs/by-name/an/anubis-xess/package.nix
··· 1 - { buildNpmPackage, anubis }: 2 - 3 - buildNpmPackage { 4 - pname = "${anubis.pname}-xess"; 5 - inherit (anubis) version src; 6 - 7 - npmDepsHash = "sha256-wI8XCUGq3aI20B++RAT3lc/nBrDMEmE9+810lewzXa0="; 8 - 9 - buildPhase = '' 10 - runHook preBuild 11 - 12 - npx postcss ./xess/xess.css -o xess.min.css 13 - 14 - runHook postBuild 15 - ''; 16 - 17 - installPhase = '' 18 - runHook preInstall 19 - 20 - install -Dm644 xess.min.css $out/xess.min.css 21 - 22 - runHook postInstall 23 - ''; 24 - 25 - meta = anubis.meta // { 26 - description = "Xess files for Anubis"; 27 - longDescription = '' 28 - This package is consumed by the main `anubis` package to render the final 29 - styling for the bot check page. 30 - 31 - **It is not supposed to be used as a standalone package**, and it exists to 32 - ensure Anubis' styling is override-able by downstreams. 33 - ''; 34 - }; 35 - }
+30 -15
pkgs/by-name/an/anubis/package.nix
··· 4 4 fetchFromGitHub, 5 5 nixosTests, 6 6 stdenv, 7 - 8 - anubis-xess, 7 + buildNpmPackage, 9 8 10 9 esbuild, 11 10 brotli, ··· 31 30 zstd 32 31 ]; 33 32 34 - subPackages = [ 35 - "cmd/anubis" 36 - ]; 33 + xess = buildNpmPackage { 34 + pname = "anubis-xess"; 35 + inherit (finalAttrs) version src; 36 + 37 + npmDepsHash = "sha256-wI8XCUGq3aI20B++RAT3lc/nBrDMEmE9+810lewzXa0="; 38 + 39 + buildPhase = '' 40 + runHook preBuild 41 + npx postcss ./xess/xess.css -o xess.min.css 42 + runHook postBuild 43 + ''; 44 + 45 + installPhase = '' 46 + runHook preInstall 47 + install -Dm644 xess.min.css $out/xess.min.css 48 + runHook postInstall 49 + ''; 50 + }; 51 + 52 + subPackages = [ "cmd/anubis" ]; 37 53 38 - ldflags = 39 - [ 40 - "-s" 41 - "-w" 42 - "-X=github.com/TecharoHQ/anubis.Version=v${finalAttrs.version}" 43 - ] 44 - ++ lib.optionals stdenv.hostPlatform.isLinux [ 45 - "-extldflags=-static" 46 - ]; 54 + ldflags = [ 55 + "-s" 56 + "-w" 57 + "-X=github.com/TecharoHQ/anubis.Version=v${finalAttrs.version}" 58 + ] ++ lib.optionals stdenv.hostPlatform.isLinux [ "-extldflags=-static" ]; 47 59 48 60 postPatch = '' 49 61 patchShebangs ./web/build.sh 50 62 ''; 51 63 52 64 preBuild = '' 53 - go generate ./... && ./web/build.sh && cp -r ${anubis-xess}/xess.min.css ./xess 65 + go generate ./... && ./web/build.sh && cp -r ${finalAttrs.xess}/xess.min.css ./xess 54 66 ''; 55 67 56 68 preCheck = '' ··· 58 70 ''; 59 71 60 72 passthru.tests = { inherit (nixosTests) anubis; }; 73 + passthru.updateScript = ./update.sh; 61 74 62 75 meta = { 63 76 description = "Weighs the soul of incoming HTTP requests using proof-of-work to stop AI crawlers"; 64 77 homepage = "https://anubis.techaro.lol/"; 78 + downloadPage = "https://github.com/TecharoHQ/anubis"; 65 79 changelog = "https://github.com/TecharoHQ/anubis/releases/tag/v${finalAttrs.version}"; 66 80 license = lib.licenses.mit; 67 81 maintainers = with lib.maintainers; [ ··· 69 83 soopyc 70 84 ryand56 71 85 sigmasquadron 86 + defelo 72 87 ]; 73 88 mainProgram = "anubis"; 74 89 };
+8
pkgs/by-name/an/anubis/update.sh
··· 1 + #!/usr/bin/env nix-shell 2 + #!nix-shell -i bash -p nix-update 3 + 4 + set -euo pipefail 5 + 6 + nix-update anubis --src-only 7 + nix-update anubis.xess --version=skip 8 + nix-update anubis --version=skip
+4 -4
pkgs/by-name/cc/ccextractor/package.nix
··· 30 30 31 31 stdenv.mkDerivation (finalAttrs: { 32 32 pname = "ccextractor"; 33 - version = "0.94-unstable-2024-08-12"; 33 + version = "0.94-unstable-2025-05-20"; 34 34 35 35 src = fetchFromGitHub { 36 36 owner = "CCExtractor"; 37 37 repo = "ccextractor"; 38 - rev = "92f2ce0fa026b01fb07db6751210e6bd8c8944d3"; 39 - hash = "sha256-bp7T9uJK4bauR2Co4lKqqnM6oGa3WZ+1toEKmzOx4mI="; 38 + rev = "407d0f4e93611c5b0ceb14b7fc01d4a4c2e90433"; 39 + hash = "sha256-BfsQmCNB4HRafqJ3pC2ECiwhOgwKuIqiLjr2/bvHr7Q="; 40 40 }; 41 41 42 42 patches = [ ··· 51 51 cargoDeps = rustPlatform.fetchCargoVendor { 52 52 inherit (finalAttrs) src cargoRoot; 53 53 patches = [ ./use-rsmpeg-0.15.patch ]; 54 - hash = "sha256-7v3gQghByUDWZLJRRGa/7X2ivUumirq6BbexNQcCXCk="; 54 + hash = "sha256-68Y8nzPHxhVIRHoPXOy9tc71177lCBuOf//z3cqyDGQ="; 55 55 }; 56 56 57 57 nativeBuildInputs = [
+3 -4
pkgs/by-name/cc/ccextractor/use-rsmpeg-0.15.patch
··· 34 34 +++ b/src/rust/Cargo.toml 35 35 @@ -15,7 +15,7 @@ 36 36 env_logger = "0.8.4" 37 - iconv = "0.1.1" 38 - palette = "0.6.0" 39 - -rsmpeg = { version = "0.14.1", optional = true, features = [ 37 + palette = "0.6.1" 38 + -rsmpeg = { version = "0.14.2", optional = true, features = [ 40 39 +rsmpeg = { version = "0.15.1", optional = true, features = [ 41 40 "link_system_ffmpeg", 42 41 ] } 43 - tesseract-sys = { version = "0.5.14", optional = true, default-features = false } 42 + tesseract-sys = { version = "0.5.15", optional = true, default-features = false }
+30
pkgs/by-name/de/denort/package.nix
··· 1 + { 2 + deno, 3 + lib, 4 + }: 5 + deno.overrideAttrs ( 6 + final: prev: { 7 + pname = "denort"; 8 + buildAndTestSubdir = "cli/rt"; 9 + postInstall = ""; 10 + installCheckPhase = ""; 11 + passthru = { }; 12 + meta = with lib; { 13 + homepage = "https://deno.land/"; 14 + changelog = "https://github.com/denoland/deno/releases/tag/v${final.version}"; 15 + description = "Slim version of the deno runtime, usually bundled with deno projects into standalone binaries"; 16 + license = licenses.mit; 17 + mainProgram = "denort"; 18 + maintainers = with maintainers; [ 19 + jk 20 + ofalvai 21 + ]; 22 + platforms = [ 23 + "x86_64-linux" 24 + "aarch64-linux" 25 + "x86_64-darwin" 26 + "aarch64-darwin" 27 + ]; 28 + }; 29 + } 30 + )
+3 -3
pkgs/by-name/di/difftastic/package.nix
··· 8 8 9 9 rustPlatform.buildRustPackage (finalAttrs: { 10 10 pname = "difftastic"; 11 - version = "0.63.0"; 11 + version = "0.64.0"; 12 12 13 13 src = fetchFromGitHub { 14 14 owner = "wilfred"; 15 15 repo = "difftastic"; 16 16 tag = finalAttrs.version; 17 - hash = "sha256-BxWCSkSeDyiiGBY2u0ahPrIhYq2lbujoPPtZGq/OkI0="; 17 + hash = "sha256-XMvysYO6Kji9cbfGayB6wPVuNp0j2uXLHfZ9H+dBLt0="; 18 18 }; 19 19 20 20 useFetchCargoVendor = true; 21 - cargoHash = "sha256-kIqaZ8truDivMV6uo1+j9bmXQReREZjHSr89ZvVDWCw="; 21 + cargoHash = "sha256-1u3oUbqhwHXD90ld70pjK2XPJe5hpUbJtU78QpIjAE8="; 22 22 23 23 # skip flaky tests 24 24 checkFlags = [ "--skip=options::tests::test_detect_display_width" ];
+2 -2
pkgs/by-name/do/dotnet-ef/package.nix
··· 2 2 3 3 buildDotnetGlobalTool { 4 4 pname = "dotnet-ef"; 5 - version = "9.0.5"; 5 + version = "9.0.6"; 6 6 7 - nugetHash = "sha256-Mu+MlsjH/qa4kMb7z/TuG1lSVSKPX9j9S4mJLVRZ2+E="; 7 + nugetHash = "sha256-dHOGvqdIfYhuAz7JwQoG/4uJNE9wpfI/dnL4zj3lD6A="; 8 8 9 9 meta = { 10 10 description = "Tools to help with design-time development tasks";
+2 -2
pkgs/by-name/fl/fllog/package.nix
··· 8 8 }: 9 9 10 10 stdenv.mkDerivation rec { 11 - version = "1.2.8"; 11 + version = "1.2.9"; 12 12 pname = "fllog"; 13 13 14 14 src = fetchurl { 15 15 url = "mirror://sourceforge/fldigi/${pname}-${version}.tar.gz"; 16 - sha256 = "sha256-kJLb1ifd8sUOwGgNsIEmlhH29fQLdTfDMjKLrzK7r1I="; 16 + sha256 = "sha256-3eJvT9PjHTrMn0/pArUDIIE7T7y1YnayG5PuGokwtRk="; 17 17 }; 18 18 19 19 buildInputs = [
+2 -2
pkgs/by-name/go/gosmee/package.nix
··· 7 7 8 8 buildGoModule rec { 9 9 pname = "gosmee"; 10 - version = "0.26.0"; 10 + version = "0.26.1"; 11 11 12 12 src = fetchFromGitHub { 13 13 owner = "chmouel"; 14 14 repo = "gosmee"; 15 15 rev = "v${version}"; 16 - hash = "sha256-dmv2fxL6jV6bpWvtMiLEtb/yg5vuD+B52P1PWVap1NA="; 16 + hash = "sha256-qNO7mY03aWabTeUm8rXojy2Ek2IKNG6wimVhwZKxh9g="; 17 17 }; 18 18 vendorHash = null; 19 19
+2 -2
pkgs/by-name/ja/jailer/package.nix
··· 14 14 15 15 stdenv.mkDerivation (finalAttrs: { 16 16 pname = "jailer"; 17 - version = "16.6.2"; 17 + version = "16.7"; 18 18 19 19 src = fetchFromGitHub { 20 20 owner = "Wisser"; 21 21 repo = "Jailer"; 22 22 tag = "v${finalAttrs.version}"; 23 - hash = "sha256-CeehX+btGexbFFD3p+FVmzXpH0bVWMW9Qdu5q6MJ5lw="; 23 + hash = "sha256-lHBthOZu4utJd2X8cTJ7HCp8zLs0su78RIdf/QBbSJk="; 24 24 }; 25 25 26 26 nativeBuildInputs = [
+5 -5
pkgs/by-name/li/libbgcode/package.nix
··· 7 7 heatshrink, 8 8 zlib, 9 9 boost, 10 - catch2, 10 + catch2_3, 11 11 }: 12 12 stdenv.mkDerivation { 13 13 pname = "libbgcode"; 14 - version = "2023-11-16"; 14 + version = "0-unstable-2025-02-19"; 15 15 16 16 src = fetchFromGitHub { 17 17 owner = "prusa3d"; 18 18 repo = "libbgcode"; 19 - rev = "bc390aab4427589a6402b4c7f65cf4d0a8f987ec"; 20 - hash = "sha256-TZShYeDAh+fNdmTr1Xqctji9f0vEGpNZv1ba/IY5EoY="; 19 + rev = "5041c093b33e2748e76d6b326f2251310823f3df"; 20 + hash = "sha256-EaxVZerH2v8b1Yqk+RW/r3BvnJvrAelkKf8Bd+EHbEc="; 21 21 }; 22 22 23 23 nativeBuildInputs = [ ··· 29 29 heatshrink 30 30 zlib 31 31 boost 32 - catch2 32 + catch2_3 33 33 ]; 34 34 35 35 meta = with lib; {
+38
pkgs/by-name/mc/mcp-grafana/package.nix
··· 1 + { 2 + lib, 3 + buildGoModule, 4 + fetchFromGitHub, 5 + }: 6 + 7 + buildGoModule (finalAttrs: { 8 + pname = "mcp-grafana"; 9 + version = "0.4.2"; 10 + 11 + src = fetchFromGitHub { 12 + owner = "grafana"; 13 + repo = "mcp-grafana"; 14 + tag = "v${finalAttrs.version}"; 15 + hash = "sha256-3w6xnDAcuDMZPr6lGGh0FpcyG2fRpkeVcJlZMdszu/g="; 16 + }; 17 + 18 + vendorHash = "sha256-61nn/p6Un+uHuPK4hipJ3A2DhAEqpWTGefM8ENAOP1E="; 19 + 20 + ldflags = [ 21 + "-s" 22 + "-w" 23 + ]; 24 + 25 + postInstall = '' 26 + rm $out/bin/jsonschema 27 + ''; 28 + 29 + __darwinAllowLocalNetworking = true; 30 + 31 + meta = { 32 + description = "MCP server for Grafana"; 33 + homepage = "https://github.com/grafana/mcp-grafana"; 34 + license = lib.licenses.asl20; 35 + maintainers = with lib.maintainers; [ pilz ]; 36 + mainProgram = "mcp-grafana"; 37 + }; 38 + })
+3 -3
pkgs/by-name/me/melonDS/package.nix
··· 27 27 in 28 28 stdenv.mkDerivation (finalAttrs: { 29 29 pname = "melonDS"; 30 - version = "1.0rc-unstable-2025-05-15"; 30 + version = "1.0rc-unstable-2025-05-27"; 31 31 32 32 src = fetchFromGitHub { 33 33 owner = "melonDS-emu"; 34 34 repo = "melonDS"; 35 - rev = "0e64a06c84f9b9428f8647c2aafde110c9d917f3"; 36 - hash = "sha256-T+AcpAITNALtZbuwY+oh4RnMgjCAi7n2HPyDjFqpQPI="; 35 + rev = "7117178c2dd56df32b6534ba6a54ad1f8547e693"; 36 + hash = "sha256-6bwagPFIv87WtmQ3cl8cDZ/1A8Ab6itLHAr33CJy/Eo="; 37 37 }; 38 38 39 39 nativeBuildInputs = [
+6 -6
pkgs/by-name/mi/mihomo-party/package.nix
··· 14 14 libGL, 15 15 }: 16 16 17 - stdenv.mkDerivation rec { 17 + stdenv.mkDerivation (finalAttrs: { 18 18 pname = "mihomo-party"; 19 - version = "1.7.4"; 19 + version = "1.7.5"; 20 20 21 21 src = 22 22 let ··· 29 29 }; 30 30 in 31 31 fetchurl { 32 - url = "https://github.com/mihomo-party-org/mihomo-party/releases/download/v${version}/mihomo-party-linux-${version}-${arch}.deb"; 32 + url = "https://github.com/mihomo-party-org/mihomo-party/releases/download/v${finalAttrs.version}/mihomo-party-linux-${finalAttrs.version}-${arch}.deb"; 33 33 hash = selectSystem { 34 - x86_64-linux = "sha256-pQcDW9ztCTIS5dbmPuvig32cXWfzYiHksa3Jv/O5J7E="; 35 - aarch64-linux = "sha256-YHLHJ05sdMj/Wz/WAEianbDIUz9X+AER2wm9T/QHRXI="; 34 + x86_64-linux = "sha256-Kw7VDyJ07DeinAzsilJU0vBhDLViB8zlpIA+mAPpp2M="; 35 + aarch64-linux = "sha256-OljIM8BI8umkRB1wUqcwQ/H1i1FhYtQ4d5cXMi/Lt9E="; 36 36 }; 37 37 }; 38 38 ··· 88 88 sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; 89 89 maintainers = with lib.maintainers; [ ]; 90 90 }; 91 - } 91 + })
+2 -2
pkgs/by-name/ng/nghttp3/package.nix
··· 8 8 9 9 stdenv.mkDerivation rec { 10 10 pname = "nghttp3"; 11 - version = "1.9.0"; 11 + version = "1.10.1"; 12 12 13 13 src = fetchFromGitHub { 14 14 owner = "ngtcp2"; 15 15 repo = "nghttp3"; 16 16 rev = "v${version}"; 17 - hash = "sha256-CTra8vmpIig8LX7RWqRzhWhX9yn0RnFrnV/kYPgZgJk="; 17 + hash = "sha256-V4JFqi3VdblpBlZJ1uFX56AlJn894oiX86OfoxVjBbE="; 18 18 fetchSubmodules = true; 19 19 }; 20 20
+3 -3
pkgs/by-name/ox/oxigraph/package.nix
··· 13 13 in 14 14 rustPlatform.buildRustPackage (finalAttrs: { 15 15 pname = "oxigraph"; 16 - version = "0.4.9"; 16 + version = "0.4.11"; 17 17 18 18 src = fetchFromGitHub { 19 19 owner = "oxigraph"; 20 20 repo = "oxigraph"; 21 21 tag = "v${finalAttrs.version}"; 22 - hash = "sha256-sv9LpAoPQ4oFrGI6j6NgVZwEwpM1wt93lHkUwnvmhIY="; 22 + hash = "sha256-M5C+SNZYXKfcosnRe9a+Zicyjuo6wli2uWv/SJxufJc="; 23 23 fetchSubmodules = true; 24 24 }; 25 25 26 26 useFetchCargoVendor = true; 27 - cargoHash = "sha256-nVlvmYOxZDMLvxP8JaKTyKMgW6+48B8B+UzlwgthJS0="; 27 + cargoHash = "sha256-TgeHmCMwXK+OlTGIyzus/N+MY29lgK+JuzUBwVFbpsI="; 28 28 29 29 nativeBuildInputs = [ 30 30 rustPlatform.bindgenHook
+5 -3
pkgs/by-name/pl/plant-it-frontend/package.nix
··· 1 1 { 2 2 lib, 3 - flutter326, 3 + flutter329, 4 4 plant-it, 5 5 }: 6 6 7 - flutter326.buildFlutterApplication { 7 + flutter329.buildFlutterApplication { 8 8 pname = "plant-it-frontend"; 9 9 inherit (plant-it) version src; 10 - sourceRoot = "source/frontend"; 10 + 11 + sourceRoot = "${plant-it.src.name}/frontend"; 11 12 12 13 targetFlutterPlatform = "web"; 13 14 ··· 15 16 16 17 meta = plant-it.meta // { 17 18 description = "Frontend for Plant It"; 19 + platforms = lib.platforms.linux; 18 20 }; 19 21 }
+3 -3
pkgs/by-name/po/pocketbase/package.nix
··· 7 7 8 8 buildGoModule rec { 9 9 pname = "pocketbase"; 10 - version = "0.28.2"; 10 + version = "0.28.3"; 11 11 12 12 src = fetchFromGitHub { 13 13 owner = "pocketbase"; 14 14 repo = "pocketbase"; 15 15 rev = "v${version}"; 16 - hash = "sha256-R8sXa3Cs7GFRAs8/+wAoWteFYBUVsgVA+eJDKACb0k8="; 16 + hash = "sha256-oFM2QcMxW+1iVUy7GzpNBtMQznq0vL7eeDiUhVPYCOM="; 17 17 }; 18 18 19 - vendorHash = "sha256-bTXxhHibKiu+btHhnktTpNycMJSzGekRJ+w9b1IwAQs="; 19 + vendorHash = "sha256-hOB8MOfG+RHDJEP5DSDvSiphb+c86QySNEmRr8633cM="; 20 20 21 21 # This is the released subpackage from upstream repo 22 22 subPackages = [ "examples/base" ];
+3 -3
pkgs/by-name/sm/smplayer/package.nix
··· 15 15 src = fetchFromGitHub { 16 16 owner = "smplayer-dev"; 17 17 repo = "smplayer"; 18 - rev = "v${finalAttrs.version}"; 19 - hash = "sha256-dyUT8PdvsFZsEZQNSsC2TQd90KOrY9FIb9Do+JKdUHs="; 18 + tag = "v${finalAttrs.version}"; 19 + hash = "sha256-txGz6v9hkvnrmVmBHsi1B2eC/iNT1tg4dU5AcMsSCic="; 20 20 }; 21 21 22 22 nativeBuildInputs = [ ··· 51 51 options of MPlayer, SMPlayer adds other interesting features like the 52 52 possibility to play Youtube videos or download subtitles. 53 53 ''; 54 - changelog = "https://github.com/smplayer-dev/smplayer/releases/tag/${finalAttrs.src.rev}"; 54 + changelog = "https://github.com/smplayer-dev/smplayer/releases/tag/${finalAttrs.src.tag}"; 55 55 license = lib.licenses.gpl3Plus; 56 56 maintainers = with lib.maintainers; [ ]; 57 57 platforms = lib.platforms.linux;
+7 -22
pkgs/by-name/st/steel/package.nix
··· 11 11 sqlite, 12 12 zlib, 13 13 14 - unstableGitUpdater, 15 - writeShellScript, 16 - yq, 17 - 14 + nix-update-script, 18 15 includeLSP ? true, 19 16 includeForge ? true, 20 17 }: 21 18 rustPlatform.buildRustPackage { 22 19 pname = "steel"; 23 - version = "0.6.0-unstable-2025-04-17"; 20 + version = "0-unstable-2025-06-15"; 24 21 25 22 src = fetchFromGitHub { 26 23 owner = "mattwparas"; 27 24 repo = "steel"; 28 - rev = "2f28ab10523198726d343257d29d892864e897b0"; 29 - hash = "sha256-GcbuuaevPK5EOh0/IVgoL2MPC9ukDc8VXkdgbPX4quE="; 25 + rev = "123adb314702d6520f8ab04115e79308d2400c38"; 26 + hash = "sha256-o1RZBlAGUht0Q7UVF+yPlrWW7B016fpBBcoaxuzRQo4="; 30 27 }; 31 28 32 29 useFetchCargoVendor = true; 33 - cargoHash = "sha256-PWE64CwHCQWvOGeOqdsqX6rAruWlnCwsQpcxS221M3g="; 30 + cargoHash = "sha256-/vPDVVOhLO7mnULyU8QLW+YHh+kGd+BSiPi55jrOWps="; 34 31 35 32 nativeBuildInputs = [ 36 33 curl ··· 95 92 STEEL_HOME = "${placeholder "out"}/lib/steel"; 96 93 }; 97 94 98 - passthru.updateScript = unstableGitUpdater { 99 - tagConverter = writeShellScript "steel-tagConverter.sh" '' 100 - export PATH="${ 101 - lib.makeBinPath [ 102 - curl 103 - yq 104 - ] 105 - }:$PATH" 106 - 107 - version=$(curl -s https://raw.githubusercontent.com/mattwparas/steel/refs/heads/master/Cargo.toml | tomlq -r .workspace.package.version) 108 - 109 - read -r tag 110 - test "$tag" = "0" && tag="$version"; echo "$tag" 111 - ''; 95 + passthru.updateScript = nix-update-script { 96 + extraArgs = [ "--version=branch" ]; 112 97 }; 113 98 114 99 meta = {
+3 -3
pkgs/by-name/sv/svix-server/package.nix
··· 10 10 11 11 rustPlatform.buildRustPackage rec { 12 12 pname = "svix-server"; 13 - version = "1.66.0"; 13 + version = "1.67.0"; 14 14 15 15 src = fetchFromGitHub { 16 16 owner = "svix"; 17 17 repo = "svix-webhooks"; 18 18 rev = "v${version}"; 19 - hash = "sha256-Us/Bkp5ujC1rd/zpPzXL4kiFAiAygPWvRJF836ErK/0="; 19 + hash = "sha256-H9SrYWwSwW03LSKzCTVgtgZIM+o6nL3USBmJ61qxFos="; 20 20 }; 21 21 22 22 sourceRoot = "${src.name}/server"; 23 23 24 24 useFetchCargoVendor = true; 25 - cargoHash = "sha256-fGXdWPJYauLQYC7o7I8q8okXn8JXzwnX6Pq71hj36Wo="; 25 + cargoHash = "sha256-xDSxevVnUPG95djjq//tjYI7WPb6qkXcvVKa6rBIwF0="; 26 26 27 27 nativeBuildInputs = [ pkg-config ]; 28 28
-1056
pkgs/development/compilers/flutter/versions/3_26/data.json
··· 1 - { 2 - "version": "3.26.0-0.1.pre", 3 - "engineVersion": "059e4e6d8ff6de39c29441c53e949bfb0bf17972", 4 - "engineSwiftShaderHash": "sha256-mRLCvhNkmHz7Rv6GzXkY7OB1opBSq+ATWZ466qZdgto=", 5 - "engineSwiftShaderRev": "2fa7e9b99ae4e70ea5ae2cc9c8d3afb43391384f", 6 - "channel": "beta", 7 - "engineHashes": { 8 - "aarch64-linux": { 9 - "aarch64-linux": "sha256-cDXCGikGuPWxMZZ0HWcnbS7Dt22no9wwbh4wei7w8Bw=", 10 - "x86_64-linux": "sha256-cDXCGikGuPWxMZZ0HWcnbS7Dt22no9wwbh4wei7w8Bw=" 11 - }, 12 - "x86_64-linux": { 13 - "aarch64-linux": "sha256-deuArmKBZvkjjt986wAAwGArKYMW01QvbgqzQ9FLBS8=", 14 - "x86_64-linux": "sha256-deuArmKBZvkjjt986wAAwGArKYMW01QvbgqzQ9FLBS8=" 15 - } 16 - }, 17 - "dartVersion": "3.6.0-216.1.beta", 18 - "dartHash": { 19 - "x86_64-linux": "sha256-Vvdx4Bi7a/ySrxAv3UejlmmbNyKzdDr9RCS9tVGscDQ=", 20 - "aarch64-linux": "sha256-SHqk1bm/5+ixOA5RHuToHQDN/NrNKZIrkkaBh9Cvl/I=", 21 - "x86_64-darwin": "sha256-dbw0+OtjYkdRCgLDP+oNcOUgR5C8gC12NdftNAk7x0Q=", 22 - "aarch64-darwin": "sha256-XOpBwyrMqIKutXgLEjGuta/3yhK+DpoSChNVXc9MMYA=" 23 - }, 24 - "flutterHash": "sha256-4YXm/MbhQsifJYpeUjmP8h6sm7pWrjBSpbCTV9p659o=", 25 - "artifactHashes": { 26 - "android": { 27 - "aarch64-darwin": "sha256-CmjEq9T5gNgNKp8mik6HwVAsAfdWXBK2nHwL28L08xk=", 28 - "aarch64-linux": "sha256-sucpfdtDzNMmCpWOZGVp48uNSrj221fOROI8huRs8Xc=", 29 - "x86_64-darwin": "sha256-CmjEq9T5gNgNKp8mik6HwVAsAfdWXBK2nHwL28L08xk=", 30 - "x86_64-linux": "sha256-sucpfdtDzNMmCpWOZGVp48uNSrj221fOROI8huRs8Xc=" 31 - }, 32 - "fuchsia": { 33 - "aarch64-darwin": "sha256-eu0BERdz53CkSexbpu3KA7O6Q4g0s9SGD3t1Snsk3Fk=", 34 - "aarch64-linux": "sha256-eu0BERdz53CkSexbpu3KA7O6Q4g0s9SGD3t1Snsk3Fk=", 35 - "x86_64-darwin": "sha256-eu0BERdz53CkSexbpu3KA7O6Q4g0s9SGD3t1Snsk3Fk=", 36 - "x86_64-linux": "sha256-eu0BERdz53CkSexbpu3KA7O6Q4g0s9SGD3t1Snsk3Fk=" 37 - }, 38 - "ios": { 39 - "aarch64-darwin": "sha256-kRgyKtnMs7xefe+XmCoYbO7sa7Dz1o0ltcRdiDvSeik=", 40 - "aarch64-linux": "sha256-kRgyKtnMs7xefe+XmCoYbO7sa7Dz1o0ltcRdiDvSeik=", 41 - "x86_64-darwin": "sha256-kRgyKtnMs7xefe+XmCoYbO7sa7Dz1o0ltcRdiDvSeik=", 42 - "x86_64-linux": "sha256-kRgyKtnMs7xefe+XmCoYbO7sa7Dz1o0ltcRdiDvSeik=" 43 - }, 44 - "linux": { 45 - "aarch64-darwin": "sha256-tnvQp4Vdthqwgt1bFRpZVJOuTX752yJE91yJNpwSOp4=", 46 - "aarch64-linux": "sha256-tnvQp4Vdthqwgt1bFRpZVJOuTX752yJE91yJNpwSOp4=", 47 - "x86_64-darwin": "sha256-vIfHgLif151Ymtu/aFtwHZTk28H2feHd9cOedUmSWXY=", 48 - "x86_64-linux": "sha256-vIfHgLif151Ymtu/aFtwHZTk28H2feHd9cOedUmSWXY=" 49 - }, 50 - "macos": { 51 - "aarch64-darwin": "sha256-/4R3Wlcs6ksMkTTZJ/YzEgWWCQJBKlnWr+PNCtcL3oc=", 52 - "aarch64-linux": "sha256-/4R3Wlcs6ksMkTTZJ/YzEgWWCQJBKlnWr+PNCtcL3oc=", 53 - "x86_64-darwin": "sha256-/4R3Wlcs6ksMkTTZJ/YzEgWWCQJBKlnWr+PNCtcL3oc=", 54 - "x86_64-linux": "sha256-/4R3Wlcs6ksMkTTZJ/YzEgWWCQJBKlnWr+PNCtcL3oc=" 55 - }, 56 - "universal": { 57 - "aarch64-darwin": "sha256-M2Fuqfgq79+FilJ5vU0Iarn0cpV3+4AxuxFEc3fwm+4=", 58 - "aarch64-linux": "sha256-NqlNboNjLFAeuLHu6lNnMnrEb902nwIV1b/DNfrr3h8=", 59 - "x86_64-darwin": "sha256-tlGwnwAov1eBe54mD9Q6D86qIEBkHBODJs5SVJyP5M0=", 60 - "x86_64-linux": "sha256-0lxLRRQq+bRDPXyxEtZVGtzzqhrcsTYx01jeFX3ejLc=" 61 - }, 62 - "web": { 63 - "aarch64-darwin": "sha256-fVOuJCTciHWv+HRFtSgn8zrexspBe+MUnc/cZlOeoqM=", 64 - "aarch64-linux": "sha256-fVOuJCTciHWv+HRFtSgn8zrexspBe+MUnc/cZlOeoqM=", 65 - "x86_64-darwin": "sha256-fVOuJCTciHWv+HRFtSgn8zrexspBe+MUnc/cZlOeoqM=", 66 - "x86_64-linux": "sha256-fVOuJCTciHWv+HRFtSgn8zrexspBe+MUnc/cZlOeoqM=" 67 - }, 68 - "windows": { 69 - "x86_64-darwin": "sha256-mwbk0VwxsbnMjy8trtjgZZ96jF3QuQJDcc0VSs6mQxI=", 70 - "x86_64-linux": "sha256-mwbk0VwxsbnMjy8trtjgZZ96jF3QuQJDcc0VSs6mQxI=" 71 - } 72 - }, 73 - "pubspecLock": { 74 - "packages": { 75 - "_fe_analyzer_shared": { 76 - "dependency": "direct main", 77 - "description": { 78 - "name": "_fe_analyzer_shared", 79 - "sha256": "45cfa8471b89fb6643fe9bf51bd7931a76b8f5ec2d65de4fb176dba8d4f22c77", 80 - "url": "https://pub.dev" 81 - }, 82 - "source": "hosted", 83 - "version": "73.0.0" 84 - }, 85 - "_macros": { 86 - "dependency": "transitive", 87 - "description": "dart", 88 - "source": "sdk", 89 - "version": "0.3.2" 90 - }, 91 - "analyzer": { 92 - "dependency": "direct main", 93 - "description": { 94 - "name": "analyzer", 95 - "sha256": "4959fec185fe70cce007c57e9ab6983101dbe593d2bf8bbfb4453aaec0cf470a", 96 - "url": "https://pub.dev" 97 - }, 98 - "source": "hosted", 99 - "version": "6.8.0" 100 - }, 101 - "archive": { 102 - "dependency": "direct main", 103 - "description": { 104 - "name": "archive", 105 - "sha256": "cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d", 106 - "url": "https://pub.dev" 107 - }, 108 - "source": "hosted", 109 - "version": "3.6.1" 110 - }, 111 - "args": { 112 - "dependency": "direct main", 113 - "description": { 114 - "name": "args", 115 - "sha256": "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a", 116 - "url": "https://pub.dev" 117 - }, 118 - "source": "hosted", 119 - "version": "2.5.0" 120 - }, 121 - "async": { 122 - "dependency": "direct main", 123 - "description": { 124 - "name": "async", 125 - "sha256": "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c", 126 - "url": "https://pub.dev" 127 - }, 128 - "source": "hosted", 129 - "version": "2.11.0" 130 - }, 131 - "boolean_selector": { 132 - "dependency": "direct main", 133 - "description": { 134 - "name": "boolean_selector", 135 - "sha256": "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66", 136 - "url": "https://pub.dev" 137 - }, 138 - "source": "hosted", 139 - "version": "2.1.1" 140 - }, 141 - "browser_launcher": { 142 - "dependency": "direct main", 143 - "description": { 144 - "name": "browser_launcher", 145 - "sha256": "54a2da4d152c34760b87cbd4a9fe8a563379487e57bfcd1b387be394dfa91734", 146 - "url": "https://pub.dev" 147 - }, 148 - "source": "hosted", 149 - "version": "1.1.2" 150 - }, 151 - "built_collection": { 152 - "dependency": "direct main", 153 - "description": { 154 - "name": "built_collection", 155 - "sha256": "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100", 156 - "url": "https://pub.dev" 157 - }, 158 - "source": "hosted", 159 - "version": "5.1.1" 160 - }, 161 - "built_value": { 162 - "dependency": "direct main", 163 - "description": { 164 - "name": "built_value", 165 - "sha256": "c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb", 166 - "url": "https://pub.dev" 167 - }, 168 - "source": "hosted", 169 - "version": "8.9.2" 170 - }, 171 - "checked_yaml": { 172 - "dependency": "direct dev", 173 - "description": { 174 - "name": "checked_yaml", 175 - "sha256": "feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff", 176 - "url": "https://pub.dev" 177 - }, 178 - "source": "hosted", 179 - "version": "2.0.3" 180 - }, 181 - "cli_config": { 182 - "dependency": "direct main", 183 - "description": { 184 - "name": "cli_config", 185 - "sha256": "ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec", 186 - "url": "https://pub.dev" 187 - }, 188 - "source": "hosted", 189 - "version": "0.2.0" 190 - }, 191 - "clock": { 192 - "dependency": "direct main", 193 - "description": { 194 - "name": "clock", 195 - "sha256": "cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf", 196 - "url": "https://pub.dev" 197 - }, 198 - "source": "hosted", 199 - "version": "1.1.1" 200 - }, 201 - "collection": { 202 - "dependency": "direct dev", 203 - "description": { 204 - "name": "collection", 205 - "sha256": "a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf", 206 - "url": "https://pub.dev" 207 - }, 208 - "source": "hosted", 209 - "version": "1.19.0" 210 - }, 211 - "completion": { 212 - "dependency": "direct main", 213 - "description": { 214 - "name": "completion", 215 - "sha256": "f11b7a628e6c42b9edc9b0bc3aa490e2d930397546d2f794e8e1325909d11c60", 216 - "url": "https://pub.dev" 217 - }, 218 - "source": "hosted", 219 - "version": "1.0.1" 220 - }, 221 - "convert": { 222 - "dependency": "direct main", 223 - "description": { 224 - "name": "convert", 225 - "sha256": "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592", 226 - "url": "https://pub.dev" 227 - }, 228 - "source": "hosted", 229 - "version": "3.1.1" 230 - }, 231 - "coverage": { 232 - "dependency": "direct main", 233 - "description": { 234 - "name": "coverage", 235 - "sha256": "7b594a150942e0d3be99cd45a1d0b5caff27ba5a27f292ed8e8d904ba3f167b5", 236 - "url": "https://pub.dev" 237 - }, 238 - "source": "hosted", 239 - "version": "1.9.1" 240 - }, 241 - "crypto": { 242 - "dependency": "direct main", 243 - "description": { 244 - "name": "crypto", 245 - "sha256": "ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27", 246 - "url": "https://pub.dev" 247 - }, 248 - "source": "hosted", 249 - "version": "3.0.5" 250 - }, 251 - "csslib": { 252 - "dependency": "direct main", 253 - "description": { 254 - "name": "csslib", 255 - "sha256": "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb", 256 - "url": "https://pub.dev" 257 - }, 258 - "source": "hosted", 259 - "version": "1.0.0" 260 - }, 261 - "dap": { 262 - "dependency": "direct main", 263 - "description": { 264 - "name": "dap", 265 - "sha256": "c0e53b52c9529d901329045afc4c5acb04304a28acde4b54ab0a08a93da546aa", 266 - "url": "https://pub.dev" 267 - }, 268 - "source": "hosted", 269 - "version": "1.3.0" 270 - }, 271 - "dds": { 272 - "dependency": "direct main", 273 - "description": { 274 - "name": "dds", 275 - "sha256": "263f8831bfe57136fd4c07cf87df9b3f65457438b8b4d237e1b1d603c6d1cdbd", 276 - "url": "https://pub.dev" 277 - }, 278 - "source": "hosted", 279 - "version": "4.2.6" 280 - }, 281 - "dds_service_extensions": { 282 - "dependency": "direct main", 283 - "description": { 284 - "name": "dds_service_extensions", 285 - "sha256": "390ae1d0128bb43ffe11f8e3c6cd3a481c1920492d1026883d379cee50bdf1a2", 286 - "url": "https://pub.dev" 287 - }, 288 - "source": "hosted", 289 - "version": "2.0.0" 290 - }, 291 - "devtools_shared": { 292 - "dependency": "direct main", 293 - "description": { 294 - "name": "devtools_shared", 295 - "sha256": "72369878105eccd563547afbad97407a2431b96bd4c04a1d6da75cb068437f50", 296 - "url": "https://pub.dev" 297 - }, 298 - "source": "hosted", 299 - "version": "10.0.2" 300 - }, 301 - "dtd": { 302 - "dependency": "direct main", 303 - "description": { 304 - "name": "dtd", 305 - "sha256": "6e4e508c0d03e12e2c96f21faa0e5acc191f9431ecd02adb8daee64dbfae6b86", 306 - "url": "https://pub.dev" 307 - }, 308 - "source": "hosted", 309 - "version": "2.3.0" 310 - }, 311 - "dwds": { 312 - "dependency": "direct main", 313 - "description": { 314 - "name": "dwds", 315 - "sha256": "d0cf9d18511df6b397c40527f3fd8ddb47b7efcc501e703dd94f13cabaf82ffc", 316 - "url": "https://pub.dev" 317 - }, 318 - "source": "hosted", 319 - "version": "24.1.0" 320 - }, 321 - "extension_discovery": { 322 - "dependency": "direct main", 323 - "description": { 324 - "name": "extension_discovery", 325 - "sha256": "20735622d0763865f9d94c3ecdce4441174530870760253e9d364fb4f3da8688", 326 - "url": "https://pub.dev" 327 - }, 328 - "source": "hosted", 329 - "version": "2.0.0" 330 - }, 331 - "fake_async": { 332 - "dependency": "direct main", 333 - "description": { 334 - "name": "fake_async", 335 - "sha256": "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78", 336 - "url": "https://pub.dev" 337 - }, 338 - "source": "hosted", 339 - "version": "1.3.1" 340 - }, 341 - "ffi": { 342 - "dependency": "direct main", 343 - "description": { 344 - "name": "ffi", 345 - "sha256": "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6", 346 - "url": "https://pub.dev" 347 - }, 348 - "source": "hosted", 349 - "version": "2.1.3" 350 - }, 351 - "file": { 352 - "dependency": "direct main", 353 - "description": { 354 - "name": "file", 355 - "sha256": "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c", 356 - "url": "https://pub.dev" 357 - }, 358 - "source": "hosted", 359 - "version": "7.0.0" 360 - }, 361 - "file_testing": { 362 - "dependency": "direct dev", 363 - "description": { 364 - "name": "file_testing", 365 - "sha256": "0aaadb4025bd350403f4308ad6c4cea953278d9407814b8342558e4946840fb5", 366 - "url": "https://pub.dev" 367 - }, 368 - "source": "hosted", 369 - "version": "3.0.0" 370 - }, 371 - "fixnum": { 372 - "dependency": "direct main", 373 - "description": { 374 - "name": "fixnum", 375 - "sha256": "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1", 376 - "url": "https://pub.dev" 377 - }, 378 - "source": "hosted", 379 - "version": "1.1.0" 380 - }, 381 - "flutter_template_images": { 382 - "dependency": "direct main", 383 - "description": { 384 - "name": "flutter_template_images", 385 - "sha256": "fd3e55af73c577b9e3f88d4080d3e366cb5c8ef3fbd50b94dfeca56bb0235df6", 386 - "url": "https://pub.dev" 387 - }, 388 - "source": "hosted", 389 - "version": "4.2.0" 390 - }, 391 - "frontend_server_client": { 392 - "dependency": "direct main", 393 - "description": { 394 - "name": "frontend_server_client", 395 - "sha256": "f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694", 396 - "url": "https://pub.dev" 397 - }, 398 - "source": "hosted", 399 - "version": "4.0.0" 400 - }, 401 - "glob": { 402 - "dependency": "direct main", 403 - "description": { 404 - "name": "glob", 405 - "sha256": "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63", 406 - "url": "https://pub.dev" 407 - }, 408 - "source": "hosted", 409 - "version": "2.1.2" 410 - }, 411 - "graphs": { 412 - "dependency": "direct main", 413 - "description": { 414 - "name": "graphs", 415 - "sha256": "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0", 416 - "url": "https://pub.dev" 417 - }, 418 - "source": "hosted", 419 - "version": "2.3.2" 420 - }, 421 - "html": { 422 - "dependency": "direct main", 423 - "description": { 424 - "name": "html", 425 - "sha256": "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a", 426 - "url": "https://pub.dev" 427 - }, 428 - "source": "hosted", 429 - "version": "0.15.4" 430 - }, 431 - "http": { 432 - "dependency": "direct main", 433 - "description": { 434 - "name": "http", 435 - "sha256": "b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010", 436 - "url": "https://pub.dev" 437 - }, 438 - "source": "hosted", 439 - "version": "1.2.2" 440 - }, 441 - "http_multi_server": { 442 - "dependency": "direct main", 443 - "description": { 444 - "name": "http_multi_server", 445 - "sha256": "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b", 446 - "url": "https://pub.dev" 447 - }, 448 - "source": "hosted", 449 - "version": "3.2.1" 450 - }, 451 - "http_parser": { 452 - "dependency": "direct main", 453 - "description": { 454 - "name": "http_parser", 455 - "sha256": "40f592dd352890c3b60fec1b68e786cefb9603e05ff303dbc4dda49b304ecdf4", 456 - "url": "https://pub.dev" 457 - }, 458 - "source": "hosted", 459 - "version": "4.1.0" 460 - }, 461 - "intl": { 462 - "dependency": "direct main", 463 - "description": { 464 - "name": "intl", 465 - "sha256": "d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf", 466 - "url": "https://pub.dev" 467 - }, 468 - "source": "hosted", 469 - "version": "0.19.0" 470 - }, 471 - "io": { 472 - "dependency": "direct main", 473 - "description": { 474 - "name": "io", 475 - "sha256": "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e", 476 - "url": "https://pub.dev" 477 - }, 478 - "source": "hosted", 479 - "version": "1.0.4" 480 - }, 481 - "js": { 482 - "dependency": "direct main", 483 - "description": { 484 - "name": "js", 485 - "sha256": "c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf", 486 - "url": "https://pub.dev" 487 - }, 488 - "source": "hosted", 489 - "version": "0.7.1" 490 - }, 491 - "json_annotation": { 492 - "dependency": "direct dev", 493 - "description": { 494 - "name": "json_annotation", 495 - "sha256": "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1", 496 - "url": "https://pub.dev" 497 - }, 498 - "source": "hosted", 499 - "version": "4.9.0" 500 - }, 501 - "json_rpc_2": { 502 - "dependency": "direct main", 503 - "description": { 504 - "name": "json_rpc_2", 505 - "sha256": "5e469bffa23899edacb7b22787780068d650b106a21c76db3c49218ab7ca447e", 506 - "url": "https://pub.dev" 507 - }, 508 - "source": "hosted", 509 - "version": "3.0.2" 510 - }, 511 - "logging": { 512 - "dependency": "direct main", 513 - "description": { 514 - "name": "logging", 515 - "sha256": "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340", 516 - "url": "https://pub.dev" 517 - }, 518 - "source": "hosted", 519 - "version": "1.2.0" 520 - }, 521 - "macros": { 522 - "dependency": "transitive", 523 - "description": { 524 - "name": "macros", 525 - "sha256": "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536", 526 - "url": "https://pub.dev" 527 - }, 528 - "source": "hosted", 529 - "version": "0.1.2-main.4" 530 - }, 531 - "matcher": { 532 - "dependency": "direct main", 533 - "description": { 534 - "name": "matcher", 535 - "sha256": "d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb", 536 - "url": "https://pub.dev" 537 - }, 538 - "source": "hosted", 539 - "version": "0.12.16+1" 540 - }, 541 - "meta": { 542 - "dependency": "direct main", 543 - "description": { 544 - "name": "meta", 545 - "sha256": "bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7", 546 - "url": "https://pub.dev" 547 - }, 548 - "source": "hosted", 549 - "version": "1.15.0" 550 - }, 551 - "mime": { 552 - "dependency": "direct main", 553 - "description": { 554 - "name": "mime", 555 - "sha256": "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a", 556 - "url": "https://pub.dev" 557 - }, 558 - "source": "hosted", 559 - "version": "1.0.6" 560 - }, 561 - "multicast_dns": { 562 - "dependency": "direct main", 563 - "description": { 564 - "name": "multicast_dns", 565 - "sha256": "982c4cc4cda5f98dd477bddfd623e8e4bd1014e7dbf9e7b05052e14a5b550b99", 566 - "url": "https://pub.dev" 567 - }, 568 - "source": "hosted", 569 - "version": "0.3.2+7" 570 - }, 571 - "mustache_template": { 572 - "dependency": "direct main", 573 - "description": { 574 - "name": "mustache_template", 575 - "sha256": "a46e26f91445bfb0b60519be280555b06792460b27b19e2b19ad5b9740df5d1c", 576 - "url": "https://pub.dev" 577 - }, 578 - "source": "hosted", 579 - "version": "2.0.0" 580 - }, 581 - "native_assets_builder": { 582 - "dependency": "direct main", 583 - "description": { 584 - "name": "native_assets_builder", 585 - "sha256": "3368f3eda23d59e98c8eadeafe609feb3bf6c342e5885796d6eceadc3d4581f8", 586 - "url": "https://pub.dev" 587 - }, 588 - "source": "hosted", 589 - "version": "0.8.2" 590 - }, 591 - "native_assets_cli": { 592 - "dependency": "direct main", 593 - "description": { 594 - "name": "native_assets_cli", 595 - "sha256": "1ff032c0ca050391c4c5107485f1a26e0e95cee18d1fdb2b7bdbb990efd3c188", 596 - "url": "https://pub.dev" 597 - }, 598 - "source": "hosted", 599 - "version": "0.7.3" 600 - }, 601 - "native_stack_traces": { 602 - "dependency": "direct main", 603 - "description": { 604 - "name": "native_stack_traces", 605 - "sha256": "8ba566c10ea781491c203876b04b9bdcf19dfbe17b9e486869f20eaae0ee470f", 606 - "url": "https://pub.dev" 607 - }, 608 - "source": "hosted", 609 - "version": "0.6.0" 610 - }, 611 - "node_preamble": { 612 - "dependency": "direct main", 613 - "description": { 614 - "name": "node_preamble", 615 - "sha256": "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db", 616 - "url": "https://pub.dev" 617 - }, 618 - "source": "hosted", 619 - "version": "2.0.2" 620 - }, 621 - "package_config": { 622 - "dependency": "direct main", 623 - "description": { 624 - "name": "package_config", 625 - "sha256": "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd", 626 - "url": "https://pub.dev" 627 - }, 628 - "source": "hosted", 629 - "version": "2.1.0" 630 - }, 631 - "path": { 632 - "dependency": "direct main", 633 - "description": { 634 - "name": "path", 635 - "sha256": "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af", 636 - "url": "https://pub.dev" 637 - }, 638 - "source": "hosted", 639 - "version": "1.9.0" 640 - }, 641 - "petitparser": { 642 - "dependency": "direct main", 643 - "description": { 644 - "name": "petitparser", 645 - "sha256": "c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27", 646 - "url": "https://pub.dev" 647 - }, 648 - "source": "hosted", 649 - "version": "6.0.2" 650 - }, 651 - "platform": { 652 - "dependency": "direct main", 653 - "description": { 654 - "name": "platform", 655 - "sha256": "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65", 656 - "url": "https://pub.dev" 657 - }, 658 - "source": "hosted", 659 - "version": "3.1.5" 660 - }, 661 - "pool": { 662 - "dependency": "direct main", 663 - "description": { 664 - "name": "pool", 665 - "sha256": "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a", 666 - "url": "https://pub.dev" 667 - }, 668 - "source": "hosted", 669 - "version": "1.5.1" 670 - }, 671 - "process": { 672 - "dependency": "direct main", 673 - "description": { 674 - "name": "process", 675 - "sha256": "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32", 676 - "url": "https://pub.dev" 677 - }, 678 - "source": "hosted", 679 - "version": "5.0.2" 680 - }, 681 - "pub_semver": { 682 - "dependency": "direct main", 683 - "description": { 684 - "name": "pub_semver", 685 - "sha256": "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c", 686 - "url": "https://pub.dev" 687 - }, 688 - "source": "hosted", 689 - "version": "2.1.4" 690 - }, 691 - "pubspec_parse": { 692 - "dependency": "direct dev", 693 - "description": { 694 - "name": "pubspec_parse", 695 - "sha256": "c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8", 696 - "url": "https://pub.dev" 697 - }, 698 - "source": "hosted", 699 - "version": "1.3.0" 700 - }, 701 - "shelf": { 702 - "dependency": "direct main", 703 - "description": { 704 - "name": "shelf", 705 - "sha256": "e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12", 706 - "url": "https://pub.dev" 707 - }, 708 - "source": "hosted", 709 - "version": "1.4.2" 710 - }, 711 - "shelf_packages_handler": { 712 - "dependency": "direct main", 713 - "description": { 714 - "name": "shelf_packages_handler", 715 - "sha256": "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e", 716 - "url": "https://pub.dev" 717 - }, 718 - "source": "hosted", 719 - "version": "3.0.2" 720 - }, 721 - "shelf_proxy": { 722 - "dependency": "direct main", 723 - "description": { 724 - "name": "shelf_proxy", 725 - "sha256": "a71d2307f4393211930c590c3d2c00630f6c5a7a77edc1ef6436dfd85a6a7ee3", 726 - "url": "https://pub.dev" 727 - }, 728 - "source": "hosted", 729 - "version": "1.0.4" 730 - }, 731 - "shelf_static": { 732 - "dependency": "direct main", 733 - "description": { 734 - "name": "shelf_static", 735 - "sha256": "a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e", 736 - "url": "https://pub.dev" 737 - }, 738 - "source": "hosted", 739 - "version": "1.1.2" 740 - }, 741 - "shelf_web_socket": { 742 - "dependency": "direct main", 743 - "description": { 744 - "name": "shelf_web_socket", 745 - "sha256": "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611", 746 - "url": "https://pub.dev" 747 - }, 748 - "source": "hosted", 749 - "version": "2.0.0" 750 - }, 751 - "source_map_stack_trace": { 752 - "dependency": "direct main", 753 - "description": { 754 - "name": "source_map_stack_trace", 755 - "sha256": "c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b", 756 - "url": "https://pub.dev" 757 - }, 758 - "source": "hosted", 759 - "version": "2.1.2" 760 - }, 761 - "source_maps": { 762 - "dependency": "direct main", 763 - "description": { 764 - "name": "source_maps", 765 - "sha256": "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703", 766 - "url": "https://pub.dev" 767 - }, 768 - "source": "hosted", 769 - "version": "0.10.12" 770 - }, 771 - "source_span": { 772 - "dependency": "direct main", 773 - "description": { 774 - "name": "source_span", 775 - "sha256": "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c", 776 - "url": "https://pub.dev" 777 - }, 778 - "source": "hosted", 779 - "version": "1.10.0" 780 - }, 781 - "sprintf": { 782 - "dependency": "direct main", 783 - "description": { 784 - "name": "sprintf", 785 - "sha256": "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23", 786 - "url": "https://pub.dev" 787 - }, 788 - "source": "hosted", 789 - "version": "7.0.0" 790 - }, 791 - "sse": { 792 - "dependency": "direct main", 793 - "description": { 794 - "name": "sse", 795 - "sha256": "111a05843ea9035042975744fe61d5e8b95bc4d38656dbafc5532da77a0bb89a", 796 - "url": "https://pub.dev" 797 - }, 798 - "source": "hosted", 799 - "version": "4.1.6" 800 - }, 801 - "stack_trace": { 802 - "dependency": "direct main", 803 - "description": { 804 - "name": "stack_trace", 805 - "sha256": "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b", 806 - "url": "https://pub.dev" 807 - }, 808 - "source": "hosted", 809 - "version": "1.11.1" 810 - }, 811 - "standard_message_codec": { 812 - "dependency": "direct main", 813 - "description": { 814 - "name": "standard_message_codec", 815 - "sha256": "fc7dd712d191b7e33196a0ecf354c4573492bb95995e7166cb6f73b047f9cae0", 816 - "url": "https://pub.dev" 817 - }, 818 - "source": "hosted", 819 - "version": "0.0.1+4" 820 - }, 821 - "stream_channel": { 822 - "dependency": "direct main", 823 - "description": { 824 - "name": "stream_channel", 825 - "sha256": "ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7", 826 - "url": "https://pub.dev" 827 - }, 828 - "source": "hosted", 829 - "version": "2.1.2" 830 - }, 831 - "string_scanner": { 832 - "dependency": "direct main", 833 - "description": { 834 - "name": "string_scanner", 835 - "sha256": "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3", 836 - "url": "https://pub.dev" 837 - }, 838 - "source": "hosted", 839 - "version": "1.3.0" 840 - }, 841 - "sync_http": { 842 - "dependency": "direct main", 843 - "description": { 844 - "name": "sync_http", 845 - "sha256": "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961", 846 - "url": "https://pub.dev" 847 - }, 848 - "source": "hosted", 849 - "version": "0.3.1" 850 - }, 851 - "term_glyph": { 852 - "dependency": "direct main", 853 - "description": { 854 - "name": "term_glyph", 855 - "sha256": "a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84", 856 - "url": "https://pub.dev" 857 - }, 858 - "source": "hosted", 859 - "version": "1.2.1" 860 - }, 861 - "test": { 862 - "dependency": "direct main", 863 - "description": { 864 - "name": "test", 865 - "sha256": "713a8789d62f3233c46b4a90b174737b2c04cb6ae4500f2aa8b1be8f03f5e67f", 866 - "url": "https://pub.dev" 867 - }, 868 - "source": "hosted", 869 - "version": "1.25.8" 870 - }, 871 - "test_api": { 872 - "dependency": "direct main", 873 - "description": { 874 - "name": "test_api", 875 - "sha256": "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c", 876 - "url": "https://pub.dev" 877 - }, 878 - "source": "hosted", 879 - "version": "0.7.3" 880 - }, 881 - "test_core": { 882 - "dependency": "direct main", 883 - "description": { 884 - "name": "test_core", 885 - "sha256": "12391302411737c176b0b5d6491f466b0dd56d4763e347b6714efbaa74d7953d", 886 - "url": "https://pub.dev" 887 - }, 888 - "source": "hosted", 889 - "version": "0.6.5" 890 - }, 891 - "typed_data": { 892 - "dependency": "direct main", 893 - "description": { 894 - "name": "typed_data", 895 - "sha256": "facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c", 896 - "url": "https://pub.dev" 897 - }, 898 - "source": "hosted", 899 - "version": "1.3.2" 900 - }, 901 - "unified_analytics": { 902 - "dependency": "direct main", 903 - "description": { 904 - "name": "unified_analytics", 905 - "sha256": "916215af2dc2f54a204c6bfbc645ec401b6a150048764814379f42e09b557d2d", 906 - "url": "https://pub.dev" 907 - }, 908 - "source": "hosted", 909 - "version": "6.1.2" 910 - }, 911 - "usage": { 912 - "dependency": "direct main", 913 - "description": { 914 - "name": "usage", 915 - "sha256": "0bdbde65a6e710343d02a56552eeaefd20b735e04bfb6b3ee025b6b22e8d0e15", 916 - "url": "https://pub.dev" 917 - }, 918 - "source": "hosted", 919 - "version": "4.1.1" 920 - }, 921 - "uuid": { 922 - "dependency": "direct main", 923 - "description": { 924 - "name": "uuid", 925 - "sha256": "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90", 926 - "url": "https://pub.dev" 927 - }, 928 - "source": "hosted", 929 - "version": "4.4.2" 930 - }, 931 - "vm_service": { 932 - "dependency": "direct main", 933 - "description": { 934 - "name": "vm_service", 935 - "sha256": "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d", 936 - "url": "https://pub.dev" 937 - }, 938 - "source": "hosted", 939 - "version": "14.2.5" 940 - }, 941 - "vm_service_interface": { 942 - "dependency": "direct main", 943 - "description": { 944 - "name": "vm_service_interface", 945 - "sha256": "f827453d9a3f8ceae04e389810da26f9b67636bdd13aa2dd9405b110c4daf59c", 946 - "url": "https://pub.dev" 947 - }, 948 - "source": "hosted", 949 - "version": "1.1.0" 950 - }, 951 - "vm_snapshot_analysis": { 952 - "dependency": "direct main", 953 - "description": { 954 - "name": "vm_snapshot_analysis", 955 - "sha256": "5a79b9fbb6be2555090f55b03b23907e75d44c3fd7bdd88da09848aa5a1914c8", 956 - "url": "https://pub.dev" 957 - }, 958 - "source": "hosted", 959 - "version": "0.7.6" 960 - }, 961 - "watcher": { 962 - "dependency": "direct main", 963 - "description": { 964 - "name": "watcher", 965 - "sha256": "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8", 966 - "url": "https://pub.dev" 967 - }, 968 - "source": "hosted", 969 - "version": "1.1.0" 970 - }, 971 - "web": { 972 - "dependency": "direct main", 973 - "description": { 974 - "name": "web", 975 - "sha256": "d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062", 976 - "url": "https://pub.dev" 977 - }, 978 - "source": "hosted", 979 - "version": "1.0.0" 980 - }, 981 - "web_socket": { 982 - "dependency": "direct main", 983 - "description": { 984 - "name": "web_socket", 985 - "sha256": "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83", 986 - "url": "https://pub.dev" 987 - }, 988 - "source": "hosted", 989 - "version": "0.1.6" 990 - }, 991 - "web_socket_channel": { 992 - "dependency": "direct main", 993 - "description": { 994 - "name": "web_socket_channel", 995 - "sha256": "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f", 996 - "url": "https://pub.dev" 997 - }, 998 - "source": "hosted", 999 - "version": "3.0.1" 1000 - }, 1001 - "webdriver": { 1002 - "dependency": "direct main", 1003 - "description": { 1004 - "name": "webdriver", 1005 - "sha256": "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e", 1006 - "url": "https://pub.dev" 1007 - }, 1008 - "source": "hosted", 1009 - "version": "3.0.3" 1010 - }, 1011 - "webkit_inspection_protocol": { 1012 - "dependency": "direct main", 1013 - "description": { 1014 - "name": "webkit_inspection_protocol", 1015 - "sha256": "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572", 1016 - "url": "https://pub.dev" 1017 - }, 1018 - "source": "hosted", 1019 - "version": "1.2.1" 1020 - }, 1021 - "xml": { 1022 - "dependency": "direct main", 1023 - "description": { 1024 - "name": "xml", 1025 - "sha256": "b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226", 1026 - "url": "https://pub.dev" 1027 - }, 1028 - "source": "hosted", 1029 - "version": "6.5.0" 1030 - }, 1031 - "yaml": { 1032 - "dependency": "direct main", 1033 - "description": { 1034 - "name": "yaml", 1035 - "sha256": "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5", 1036 - "url": "https://pub.dev" 1037 - }, 1038 - "source": "hosted", 1039 - "version": "3.1.2" 1040 - }, 1041 - "yaml_edit": { 1042 - "dependency": "direct main", 1043 - "description": { 1044 - "name": "yaml_edit", 1045 - "sha256": "e9c1a3543d2da0db3e90270dbb1e4eebc985ee5e3ffe468d83224472b2194a5f", 1046 - "url": "https://pub.dev" 1047 - }, 1048 - "source": "hosted", 1049 - "version": "2.2.1" 1050 - } 1051 - }, 1052 - "sdks": { 1053 - "dart": ">=3.4.3 <4.0.0" 1054 - } 1055 - } 1056 - }
-19
pkgs/development/compilers/flutter/versions/3_26/patches/deregister-pub-dependencies-artifact.patch
··· 1 - diff --git a/packages/flutter_tools/lib/src/flutter_cache.dart b/packages/flutter_tools/lib/src/flutter_cache.dart 2 - index 252021cf78..e50ef0885d 100644 3 - --- a/packages/flutter_tools/lib/src/flutter_cache.dart 4 - +++ b/packages/flutter_tools/lib/src/flutter_cache.dart 5 - @@ -51,14 +51,6 @@ class FlutterCache extends Cache { 6 - registerArtifact(IosUsbArtifacts(artifactName, this, platform: platform)); 7 - } 8 - registerArtifact(FontSubsetArtifacts(this, platform: platform)); 9 - - registerArtifact(PubDependencies( 10 - - logger: logger, 11 - - // flutter root and pub must be lazily initialized to avoid accessing 12 - - // before the version is determined. 13 - - flutterRoot: () => Cache.flutterRoot!, 14 - - pub: () => pub, 15 - - projectFactory: projectFactory, 16 - - )); 17 - } 18 - } 19 -
-30
pkgs/development/compilers/flutter/versions/3_26/patches/disable-auto-update.patch
··· 1 - diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart 2 - index e4e474ab6e..5548599802 100644 3 - --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart 4 - +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart 5 - @@ -1693,7 +1693,7 @@ Run 'flutter -h' (or 'flutter <command> -h') for available flutter commands and 6 - 7 - // Populate the cache. We call this before pub get below so that the 8 - // sky_engine package is available in the flutter cache for pub to find. 9 - - if (shouldUpdateCache) { 10 - + if (false) { 11 - // First always update universal artifacts, as some of these (e.g. 12 - // ios-deploy on macOS) are required to determine `requiredArtifacts`. 13 - final bool offline; 14 - diff --git a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart 15 - index 50783f8435..db94062840 100644 16 - --- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart 17 - +++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart 18 - @@ -377,11 +377,7 @@ class FlutterCommandRunner extends CommandRunner<void> { 19 - globals.analytics.suppressTelemetry(); 20 - } 21 - 22 - - globals.flutterVersion.ensureVersionFile(); 23 - final bool machineFlag = topLevelResults[FlutterGlobalOptions.kMachineFlag] as bool? ?? false; 24 - - if (await _shouldCheckForUpdates(topLevelResults, topLevelMachineFlag: machineFlag)) { 25 - - await globals.flutterVersion.checkFlutterVersionFreshness(); 26 - - } 27 - 28 - // See if the user specified a specific device. 29 - final String? specifiedDeviceId = topLevelResults[FlutterGlobalOptions.kDeviceIdOption] as String?; 30 -
-69
pkgs/development/compilers/flutter/versions/3_26/patches/fix-ios-build-xcode-backend-sh.patch
··· 1 - From 6df275df3b8694daf16302b407520e3b1dee6724 Mon Sep 17 00:00:00 2001 2 - From: Philip Hayes <philiphayes9@gmail.com> 3 - Date: Thu, 12 Sep 2024 13:23:00 -0700 4 - Subject: [PATCH] fix: cleanup xcode_backend.sh to fix iOS build w/ 5 - `NixOS/nixpkgs` flutter 6 - 7 - This patch cleans up `xcode_backend.sh`. It now effectively just runs 8 - `exec $FLUTTER_ROOT/bin/dart ./xcode_backend.dart`. 9 - 10 - The previous `xcode_backend.sh` tries to discover `$FLUTTER_ROOT` from 11 - argv[0], even though its presence is already guaranteed (the wrapped 12 - `xcode_backend.dart` also relies on this env). 13 - 14 - When using nixpkgs flutter, the flutter SDK directory is composed of several 15 - layers, joined together using symlinks (called a `symlinkJoin`). Without this 16 - patch, the auto-discover traverses the symlinks into the wrong layer, and so it 17 - uses an "unwrapped" `dart` command instead of a "wrapped" dart that sets some 18 - important envs/flags (like `$FLUTTER_ROOT`). 19 - 20 - Using the "unwrapped" dart then manifests in this error when compiling, since 21 - it doesn't see the ios build-support artifacts: 22 - 23 - ``` 24 - $ flutter run -d iphone 25 - Running Xcode build... 26 - Xcode build done. 6.4s 27 - Failed to build iOS app 28 - Error (Xcode): Target debug_unpack_ios failed: Error: Flutter failed to create a directory at "/<nix-store>/XXXX-flutter-3.24.1-unwrapped/bin/cache/artifacts". 29 - ``` 30 - --- 31 - packages/flutter_tools/bin/xcode_backend.sh | 25 ++++----------------- 32 - 1 file changed, 4 insertions(+), 21 deletions(-) 33 - 34 - diff --git a/packages/flutter_tools/bin/xcode_backend.sh b/packages/flutter_tools/bin/xcode_backend.sh 35 - index 2889d7c8e4..48b9d06c6e 100755 36 - --- a/packages/flutter_tools/bin/xcode_backend.sh 37 - +++ b/packages/flutter_tools/bin/xcode_backend.sh 38 - @@ -6,24 +6,7 @@ 39 - # exit on error, or usage of unset var 40 - set -euo pipefail 41 - 42 - -# Needed because if it is set, cd may print the path it changed to. 43 - -unset CDPATH 44 - - 45 - -function follow_links() ( 46 - - cd -P "$(dirname -- "$1")" 47 - - file="$PWD/$(basename -- "$1")" 48 - - while [[ -h "$file" ]]; do 49 - - cd -P "$(dirname -- "$file")" 50 - - file="$(readlink -- "$file")" 51 - - cd -P "$(dirname -- "$file")" 52 - - file="$PWD/$(basename -- "$file")" 53 - - done 54 - - echo "$file" 55 - -) 56 - - 57 - -PROG_NAME="$(follow_links "${BASH_SOURCE[0]}")" 58 - -BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)" 59 - -FLUTTER_ROOT="$BIN_DIR/../../.." 60 - -DART="$FLUTTER_ROOT/bin/dart" 61 - - 62 - -"$DART" "$BIN_DIR/xcode_backend.dart" "$@" 63 - +# Run `dart ./xcode_backend.dart` with the dart from $FLUTTER_ROOT. 64 - +dart="${FLUTTER_ROOT}/bin/dart" 65 - +xcode_backend_dart="${BASH_SOURCE[0]%.sh}.dart" 66 - +exec "${dart}" "${xcode_backend_dart}" "$@" 67 - -- 68 - 2.46.0 69 -
-44
pkgs/development/compilers/flutter/versions/3_26/patches/gradle-flutter-tools-wrapper.patch
··· 1 - This patch introduces an intermediate Gradle build step to alter the behavior 2 - of flutter_tools' Gradle project, specifically moving the creation of `build` 3 - and `.gradle` directories from within the Nix Store to somewhere in `$HOME/.cache/flutter/nix-flutter-tools-gradle/$engineShortRev`. 4 - 5 - Without this patch, flutter_tools' Gradle project tries to generate `build` and `.gradle` 6 - directories within the Nix Store. Resulting in read-only errors when trying to build a 7 - Flutter Android app at runtime. 8 - 9 - This patch takes advantage of the fact settings.gradle takes priority over settings.gradle.kts to build the intermediate Gradle project 10 - when a Flutter app runs `includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")` 11 - 12 - `rootProject.buildFileName = "/dev/null"` so that the intermediate project doesn't use `build.gradle.kts` that's in the same directory. 13 - 14 - The intermediate project makes a `settings.gradle` file in `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/` and `includeBuild`s it. 15 - This Gradle project will build the actual `packages/flutter_tools/gradle` project by setting 16 - `rootProject.projectDir = new File("$settingsDir")` and `apply from: new File("$settingsDir/settings.gradle.kts")`. 17 - 18 - Now the `.gradle` will be built in `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/`, but `build` doesn't. 19 - To move `build` to `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/` as well, we need to set `buildDirectory`. 20 - diff --git a/packages/flutter_tools/gradle/settings.gradle b/packages/flutter_tools/gradle/settings.gradle 21 - new file mode 100644 22 - index 0000000000..b2485c94b4 23 - --- /dev/null 24 - +++ b/packages/flutter_tools/gradle/settings.gradle 25 - @@ -0,0 +1,19 @@ 26 - +rootProject.buildFileName = "/dev/null" 27 - + 28 - +def engineShortRev = (new File("$settingsDir/../../../bin/internal/engine.version")).text.take(10) 29 - +def dir = new File("$System.env.HOME/.cache/flutter/nix-flutter-tools-gradle/$engineShortRev") 30 - +dir.mkdirs() 31 - +def file = new File(dir, "settings.gradle") 32 - + 33 - +file.text = """ 34 - +rootProject.projectDir = new File("$settingsDir") 35 - +apply from: new File("$settingsDir/settings.gradle.kts") 36 - + 37 - +gradle.allprojects { project -> 38 - + project.beforeEvaluate { 39 - + project.layout.buildDirectory = new File("$dir/build") 40 - + } 41 - +} 42 - +""" 43 - + 44 - +includeBuild(dir)
+171 -6
pkgs/development/compilers/flutter/versions/3_29/patches/gradle-flutter-tools-wrapper.patch
··· 15 15 This Gradle project will build the actual `packages/flutter_tools/gradle` project by setting 16 16 `rootProject.projectDir = new File("$settingsDir")` and `apply from: new File("$settingsDir/settings.gradle.kts")`. 17 17 18 - Now the `.gradle` will be built in `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/`, but `build` doesn't. 19 - To move `build` to `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/` as well, we need to set `buildDirectory`. 20 - diff --git a/packages/flutter_tools/gradle/settings.gradle b/packages/flutter_tools/gradle/settings.gradle 21 - new file mode 100644 22 - index 0000000000..b2485c94b4 18 + To move `build` to `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/`, we need to set `buildDirectory`. 19 + To move `.gradle` as well, the `--project-cache-dir` argument must be passed to the Gradle wrapper. 20 + Changing the `GradleUtils.getExecutable` function signature is a delibarate choice, to ensure that no new unpatched usages slip in. 23 21 --- /dev/null 24 22 +++ b/packages/flutter_tools/gradle/settings.gradle 25 23 @@ -0,0 +1,19 @@ ··· 44 42 +includeBuild(dir) 45 43 --- a/packages/flutter_tools/gradle/build.gradle.kts 46 44 +++ b/packages/flutter_tools/gradle/build.gradle.kts 47 - @@ -4,6 +4,8 @@ 45 + @@ -4,6 +4,11 @@ 48 46 49 47 import org.jetbrains.kotlin.gradle.dsl.JvmTarget 50 48 49 + +// While flutter_tools runs Gradle with a --project-cache-dir, this startParameter 50 + +// is not passed correctly to the Kotlin Gradle plugin for some reason, and so 51 + +// must be set here as well. 51 52 +gradle.startParameter.projectCacheDir = layout.buildDirectory.dir("cache").get().asFile 52 53 + 53 54 plugins { 54 55 `java-gradle-plugin` 55 56 groovy 57 + --- a/packages/flutter_tools/lib/src/android/gradle.dart 58 + +++ b/packages/flutter_tools/lib/src/android/gradle.dart 59 + @@ -456,9 +456,9 @@ class AndroidGradleBuilder implements AndroidBuilder { 60 + // from the local.properties file. 61 + updateLocalProperties(project: project, buildInfo: androidBuildInfo.buildInfo); 62 + 63 + - final List<String> options = <String>[]; 64 + - 65 + - final String gradleExecutablePath = _gradleUtils.getExecutable(project); 66 + + final [String gradleExecutablePath, ...List<String> options] = _gradleUtils.getExecutable( 67 + + project, 68 + + ); 69 + 70 + // All automatically created files should exist. 71 + if (configOnly) { 72 + @@ -781,7 +781,7 @@ class AndroidGradleBuilder implements AndroidBuilder { 73 + 'aar_init_script.gradle', 74 + ); 75 + final List<String> command = <String>[ 76 + - _gradleUtils.getExecutable(project), 77 + + ..._gradleUtils.getExecutable(project), 78 + '-I=$initScript', 79 + '-Pflutter-root=$flutterRoot', 80 + '-Poutput-dir=${outputDirectory.path}', 81 + @@ -896,6 +896,10 @@ class AndroidGradleBuilder implements AndroidBuilder { 82 + final List<String> results = <String>[]; 83 + 84 + try { 85 + + final [String gradleExecutablePath, ...List<String> options] = _gradleUtils.getExecutable( 86 + + project, 87 + + ); 88 + + 89 + exitCode = await _runGradleTask( 90 + _kBuildVariantTaskName, 91 + preRunTask: () { 92 + @@ -911,10 +915,10 @@ class AndroidGradleBuilder implements AndroidBuilder { 93 + ), 94 + ); 95 + }, 96 + - options: const <String>['-q'], 97 + + options: <String>[...options, '-q'], 98 + project: project, 99 + localGradleErrors: gradleErrors, 100 + - gradleExecutablePath: _gradleUtils.getExecutable(project), 101 + + gradleExecutablePath: gradleExecutablePath, 102 + outputParser: (String line) { 103 + if (_kBuildVariantRegex.firstMatch(line) case final RegExpMatch match) { 104 + results.add(match.namedGroup(_kBuildVariantRegexGroupName)!); 105 + @@ -948,6 +952,10 @@ class AndroidGradleBuilder implements AndroidBuilder { 106 + late Stopwatch sw; 107 + int exitCode = 1; 108 + try { 109 + + final [String gradleExecutablePath, ...List<String> options] = _gradleUtils.getExecutable( 110 + + project, 111 + + ); 112 + + 113 + exitCode = await _runGradleTask( 114 + taskName, 115 + preRunTask: () { 116 + @@ -963,10 +971,10 @@ class AndroidGradleBuilder implements AndroidBuilder { 117 + ), 118 + ); 119 + }, 120 + - options: <String>['-q', '-PoutputPath=$outputPath'], 121 + + options: <String>[...options, '-q', '-PoutputPath=$outputPath'], 122 + project: project, 123 + localGradleErrors: gradleErrors, 124 + - gradleExecutablePath: _gradleUtils.getExecutable(project), 125 + + gradleExecutablePath: gradleExecutablePath, 126 + ); 127 + } on Error catch (error) { 128 + _logger.printError(error.toString()); 129 + --- a/packages/flutter_tools/lib/src/android/gradle_errors.dart 130 + +++ b/packages/flutter_tools/lib/src/android/gradle_errors.dart 131 + @@ -240,7 +240,12 @@ final GradleHandledError flavorUndefinedHandler = GradleHandledError( 132 + required bool usesAndroidX, 133 + }) async { 134 + final RunResult tasksRunResult = await globals.processUtils.run( 135 + - <String>[globals.gradleUtils!.getExecutable(project), 'app:tasks', '--all', '--console=auto'], 136 + + <String>[ 137 + + ...globals.gradleUtils!.getExecutable(project), 138 + + 'app:tasks', 139 + + '--all', 140 + + '--console=auto', 141 + + ], 142 + throwOnError: true, 143 + workingDirectory: project.android.hostAppGradleRoot.path, 144 + environment: globals.java?.environment, 145 + --- a/packages/flutter_tools/lib/src/android/gradle_utils.dart 146 + +++ b/packages/flutter_tools/lib/src/android/gradle_utils.dart 147 + @@ -3,6 +3,7 @@ 148 + // found in the LICENSE file. 149 + 150 + import 'package:meta/meta.dart'; 151 + +import 'package:path/path.dart'; 152 + import 'package:process/process.dart'; 153 + import 'package:unified_analytics/unified_analytics.dart'; 154 + 155 + @@ -154,9 +155,29 @@ class GradleUtils { 156 + final Logger _logger; 157 + final OperatingSystemUtils _operatingSystemUtils; 158 + 159 + + List<String> get _requiredArguments { 160 + + final String cacheDir = join( 161 + + switch (globals.platform.environment['XDG_CACHE_HOME']) { 162 + + final String cacheHome => cacheHome, 163 + + _ => join( 164 + + globals.fsUtils.homeDirPath ?? throwToolExit('No cache directory has been specified.'), 165 + + '.cache', 166 + + ), 167 + + }, 168 + + 'flutter', 169 + + 'nix-flutter-tools-gradle', 170 + + globals.flutterVersion.engineRevision.substring(0, 10), 171 + + ); 172 + + 173 + + return <String>[ 174 + + '--project-cache-dir=${join(cacheDir, 'cache')}', 175 + + '-Pkotlin.project.persistent.dir=${join(cacheDir, 'kotlin')}', 176 + + ]; 177 + + } 178 + + 179 + /// Gets the Gradle executable path and prepares the Gradle project. 180 + /// This is the `gradlew` or `gradlew.bat` script in the `android/` directory. 181 + - String getExecutable(FlutterProject project) { 182 + + List<String> getExecutable(FlutterProject project) { 183 + final Directory androidDir = project.android.hostAppGradleRoot; 184 + injectGradleWrapperIfNeeded(androidDir); 185 + 186 + @@ -167,7 +188,7 @@ class GradleUtils { 187 + // If the Gradle executable doesn't have execute permission, 188 + // then attempt to set it. 189 + _operatingSystemUtils.makeExecutable(gradle); 190 + - return gradle.absolute.path; 191 + + return <String>[gradle.absolute.path, ..._requiredArguments]; 192 + } 193 + throwToolExit( 194 + 'Unable to locate gradlew script. Please check that ${gradle.path} ' 195 + --- a/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart 196 + +++ b/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart 197 + @@ -2740,8 +2740,8 @@ Gradle Crashed 198 + 199 + class FakeGradleUtils extends Fake implements GradleUtils { 200 + @override 201 + - String getExecutable(FlutterProject project) { 202 + - return 'gradlew'; 203 + + List<String> getExecutable(FlutterProject project) { 204 + + return const <String>['gradlew']; 205 + } 206 + } 207 + 208 + --- a/packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart 209 + +++ b/packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart 210 + @@ -1580,8 +1580,8 @@ Platform fakePlatform(String name) { 211 + 212 + class FakeGradleUtils extends Fake implements GradleUtils { 213 + @override 214 + - String getExecutable(FlutterProject project) { 215 + - return 'gradlew'; 216 + + List<String> getExecutable(FlutterProject project) { 217 + + return const <String>['gradlew']; 218 + } 219 + } 220 +
+171 -6
pkgs/development/compilers/flutter/versions/3_32/patches/gradle-flutter-tools-wrapper.patch
··· 15 15 This Gradle project will build the actual `packages/flutter_tools/gradle` project by setting 16 16 `rootProject.projectDir = new File("$settingsDir")` and `apply from: new File("$settingsDir/settings.gradle.kts")`. 17 17 18 - Now the `.gradle` will be built in `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/`, but `build` doesn't. 19 - To move `build` to `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/` as well, we need to set `buildDirectory`. 20 - diff --git a/packages/flutter_tools/gradle/settings.gradle b/packages/flutter_tools/gradle/settings.gradle 21 - new file mode 100644 22 - index 0000000000..b2485c94b4 18 + To move `build` to `$HOME/.cache/flutter/nix-flutter-tools-gradle/<short engine rev>/`, we need to set `buildDirectory`. 19 + To move `.gradle` as well, the `--project-cache-dir` argument must be passed to the Gradle wrapper. 20 + Changing the `GradleUtils.getExecutable` function signature is a delibarate choice, to ensure that no new unpatched usages slip in. 23 21 --- /dev/null 24 22 +++ b/packages/flutter_tools/gradle/settings.gradle 25 23 @@ -0,0 +1,19 @@ ··· 44 42 +includeBuild(dir) 45 43 --- a/packages/flutter_tools/gradle/build.gradle.kts 46 44 +++ b/packages/flutter_tools/gradle/build.gradle.kts 47 - @@ -4,6 +4,8 @@ 45 + @@ -4,6 +4,11 @@ 48 46 49 47 import org.jetbrains.kotlin.gradle.dsl.JvmTarget 50 48 49 + +// While flutter_tools runs Gradle with a --project-cache-dir, this startParameter 50 + +// is not passed correctly to the Kotlin Gradle plugin for some reason, and so 51 + +// must be set here as well. 51 52 +gradle.startParameter.projectCacheDir = layout.buildDirectory.dir("cache").get().asFile 52 53 + 53 54 plugins { 54 55 `java-gradle-plugin` 55 56 groovy 57 + --- a/packages/flutter_tools/lib/src/android/gradle.dart 58 + +++ b/packages/flutter_tools/lib/src/android/gradle.dart 59 + @@ -456,9 +456,9 @@ class AndroidGradleBuilder implements AndroidBuilder { 60 + // from the local.properties file. 61 + updateLocalProperties(project: project, buildInfo: androidBuildInfo.buildInfo); 62 + 63 + - final List<String> options = <String>[]; 64 + - 65 + - final String gradleExecutablePath = _gradleUtils.getExecutable(project); 66 + + final [String gradleExecutablePath, ...List<String> options] = _gradleUtils.getExecutable( 67 + + project, 68 + + ); 69 + 70 + // All automatically created files should exist. 71 + if (configOnly) { 72 + @@ -781,7 +781,7 @@ class AndroidGradleBuilder implements AndroidBuilder { 73 + 'aar_init_script.gradle', 74 + ); 75 + final List<String> command = <String>[ 76 + - _gradleUtils.getExecutable(project), 77 + + ..._gradleUtils.getExecutable(project), 78 + '-I=$initScript', 79 + '-Pflutter-root=$flutterRoot', 80 + '-Poutput-dir=${outputDirectory.path}', 81 + @@ -896,6 +896,10 @@ class AndroidGradleBuilder implements AndroidBuilder { 82 + final List<String> results = <String>[]; 83 + 84 + try { 85 + + final [String gradleExecutablePath, ...List<String> options] = _gradleUtils.getExecutable( 86 + + project, 87 + + ); 88 + + 89 + exitCode = await _runGradleTask( 90 + _kBuildVariantTaskName, 91 + preRunTask: () { 92 + @@ -911,10 +915,10 @@ class AndroidGradleBuilder implements AndroidBuilder { 93 + ), 94 + ); 95 + }, 96 + - options: const <String>['-q'], 97 + + options: <String>[...options, '-q'], 98 + project: project, 99 + localGradleErrors: gradleErrors, 100 + - gradleExecutablePath: _gradleUtils.getExecutable(project), 101 + + gradleExecutablePath: gradleExecutablePath, 102 + outputParser: (String line) { 103 + if (_kBuildVariantRegex.firstMatch(line) case final RegExpMatch match) { 104 + results.add(match.namedGroup(_kBuildVariantRegexGroupName)!); 105 + @@ -948,6 +952,10 @@ class AndroidGradleBuilder implements AndroidBuilder { 106 + late Stopwatch sw; 107 + int exitCode = 1; 108 + try { 109 + + final [String gradleExecutablePath, ...List<String> options] = _gradleUtils.getExecutable( 110 + + project, 111 + + ); 112 + + 113 + exitCode = await _runGradleTask( 114 + taskName, 115 + preRunTask: () { 116 + @@ -963,10 +971,10 @@ class AndroidGradleBuilder implements AndroidBuilder { 117 + ), 118 + ); 119 + }, 120 + - options: <String>['-q', '-PoutputPath=$outputPath'], 121 + + options: <String>[...options, '-q', '-PoutputPath=$outputPath'], 122 + project: project, 123 + localGradleErrors: gradleErrors, 124 + - gradleExecutablePath: _gradleUtils.getExecutable(project), 125 + + gradleExecutablePath: gradleExecutablePath, 126 + ); 127 + } on Error catch (error) { 128 + _logger.printError(error.toString()); 129 + --- a/packages/flutter_tools/lib/src/android/gradle_errors.dart 130 + +++ b/packages/flutter_tools/lib/src/android/gradle_errors.dart 131 + @@ -240,7 +240,12 @@ final GradleHandledError flavorUndefinedHandler = GradleHandledError( 132 + required bool usesAndroidX, 133 + }) async { 134 + final RunResult tasksRunResult = await globals.processUtils.run( 135 + - <String>[globals.gradleUtils!.getExecutable(project), 'app:tasks', '--all', '--console=auto'], 136 + + <String>[ 137 + + ...globals.gradleUtils!.getExecutable(project), 138 + + 'app:tasks', 139 + + '--all', 140 + + '--console=auto', 141 + + ], 142 + throwOnError: true, 143 + workingDirectory: project.android.hostAppGradleRoot.path, 144 + environment: globals.java?.environment, 145 + --- a/packages/flutter_tools/lib/src/android/gradle_utils.dart 146 + +++ b/packages/flutter_tools/lib/src/android/gradle_utils.dart 147 + @@ -3,6 +3,7 @@ 148 + // found in the LICENSE file. 149 + 150 + import 'package:meta/meta.dart'; 151 + +import 'package:path/path.dart'; 152 + import 'package:process/process.dart'; 153 + import 'package:unified_analytics/unified_analytics.dart'; 154 + 155 + @@ -154,9 +155,29 @@ class GradleUtils { 156 + final Logger _logger; 157 + final OperatingSystemUtils _operatingSystemUtils; 158 + 159 + + List<String> get _requiredArguments { 160 + + final String cacheDir = join( 161 + + switch (globals.platform.environment['XDG_CACHE_HOME']) { 162 + + final String cacheHome => cacheHome, 163 + + _ => join( 164 + + globals.fsUtils.homeDirPath ?? throwToolExit('No cache directory has been specified.'), 165 + + '.cache', 166 + + ), 167 + + }, 168 + + 'flutter', 169 + + 'nix-flutter-tools-gradle', 170 + + globals.flutterVersion.engineRevision.substring(0, 10), 171 + + ); 172 + + 173 + + return <String>[ 174 + + '--project-cache-dir=${join(cacheDir, 'cache')}', 175 + + '-Pkotlin.project.persistent.dir=${join(cacheDir, 'kotlin')}', 176 + + ]; 177 + + } 178 + + 179 + /// Gets the Gradle executable path and prepares the Gradle project. 180 + /// This is the `gradlew` or `gradlew.bat` script in the `android/` directory. 181 + - String getExecutable(FlutterProject project) { 182 + + List<String> getExecutable(FlutterProject project) { 183 + final Directory androidDir = project.android.hostAppGradleRoot; 184 + injectGradleWrapperIfNeeded(androidDir); 185 + 186 + @@ -167,7 +188,7 @@ class GradleUtils { 187 + // If the Gradle executable doesn't have execute permission, 188 + // then attempt to set it. 189 + _operatingSystemUtils.makeExecutable(gradle); 190 + - return gradle.absolute.path; 191 + + return <String>[gradle.absolute.path, ..._requiredArguments]; 192 + } 193 + throwToolExit( 194 + 'Unable to locate gradlew script. Please check that ${gradle.path} ' 195 + --- a/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart 196 + +++ b/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart 197 + @@ -2740,8 +2740,8 @@ Gradle Crashed 198 + 199 + class FakeGradleUtils extends Fake implements GradleUtils { 200 + @override 201 + - String getExecutable(FlutterProject project) { 202 + - return 'gradlew'; 203 + + List<String> getExecutable(FlutterProject project) { 204 + + return const <String>['gradlew']; 205 + } 206 + } 207 + 208 + --- a/packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart 209 + +++ b/packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart 210 + @@ -1580,8 +1580,8 @@ Platform fakePlatform(String name) { 211 + 212 + class FakeGradleUtils extends Fake implements GradleUtils { 213 + @override 214 + - String getExecutable(FlutterProject project) { 215 + - return 'gradlew'; 216 + + List<String> getExecutable(FlutterProject project) { 217 + + return const <String>['gradlew']; 218 + } 219 + } 220 +
+44
pkgs/development/ocaml-modules/patricia-tree/default.nix
··· 1 + { 2 + lib, 3 + buildDunePackage, 4 + fetchFromGitHub, 5 + findlib, 6 + mdx, 7 + qcheck-core, 8 + ppx_inline_test, 9 + }: 10 + 11 + buildDunePackage rec { 12 + pname = "patricia-tree"; 13 + version = "0.11.0"; 14 + 15 + minimalOCamlVersion = "4.14"; 16 + 17 + src = fetchFromGitHub { 18 + owner = "codex-semantics-library"; 19 + repo = "patricia-tree"; 20 + tag = "v${version}"; 21 + hash = "sha256-lpmU0KhsyIHxPBiw38ssA7XFEMsRvOT03MByoJG88Xs="; 22 + }; 23 + 24 + nativeCheckInputs = [ 25 + mdx.bin 26 + ]; 27 + 28 + checkInputs = [ 29 + mdx 30 + ppx_inline_test 31 + qcheck-core 32 + ]; 33 + 34 + doCheck = true; 35 + 36 + meta = { 37 + description = "Patricia Tree data structure in OCaml"; 38 + homepage = "https://codex.top/api/patricia-tree/"; 39 + downloadPage = "https://github.com/codex-semantics-library/patricia-tree"; 40 + changelog = "https://github.com/codex-semantics-library/patricia-tree/releases/tag/v${version}"; 41 + license = lib.licenses.lgpl21Only; 42 + maintainers = [ lib.maintainers.ethancedwards8 ]; 43 + }; 44 + }
+30
pkgs/development/ocaml-modules/processor/default.nix
··· 1 + { 2 + lib, 3 + buildDunePackage, 4 + fetchFromGitHub, 5 + }: 6 + 7 + buildDunePackage rec { 8 + pname = "processor"; 9 + version = "0.1"; 10 + 11 + minimalOCamlVersion = "4.08"; 12 + 13 + src = fetchFromGitHub { 14 + owner = "haesbaert"; 15 + repo = "ocaml-processor"; 16 + tag = "v${version}"; 17 + hash = "sha256-eGSNYjVbUIUMelajqZYOd3gvmRKQ9UP3TfMflLR9i7k="; 18 + }; 19 + 20 + doCheck = true; 21 + 22 + meta = { 23 + description = "CPU topology and affinity for ocaml-multicore"; 24 + homepage = "https://haesbaert.github.io/ocaml-processor/processor/index.html"; 25 + downloadPage = "https://github.com/haesbaert/ocaml-processor"; 26 + changelog = "https://github.com/haesbaert/ocaml-processor/releases/tag/v${version}"; 27 + license = lib.licenses.isc; 28 + maintainers = [ lib.maintainers.ethancedwards8 ]; 29 + }; 30 + }
+2 -2
pkgs/development/python-modules/backtesting/default.nix
··· 12 12 13 13 buildPythonPackage rec { 14 14 pname = "backtesting"; 15 - version = "0.6.3"; 15 + version = "0.6.4"; 16 16 pyproject = true; 17 17 18 18 src = fetchPypi { 19 19 inherit pname version; 20 - hash = "sha256-xryzvjKT+FRbF4pnniHvkRA98jrZVoCyYOmjYU93Ta4="; 20 + hash = "sha256-8Xasb7VG39XXQ/A47lgkYk5Vo4pJPE3Vghcxt0yGeq4="; 21 21 }; 22 22 23 23 build-system = [
+3 -3
pkgs/development/python-modules/bagit/default.nix
··· 11 11 12 12 buildPythonPackage rec { 13 13 pname = "bagit"; 14 - version = "1.9b2"; 14 + version = "1.9.0"; 15 15 pyproject = true; 16 16 build-system = [ 17 17 setuptools ··· 21 21 src = fetchFromGitHub { 22 22 owner = "LibraryOfCongress"; 23 23 repo = "bagit-python"; 24 - rev = "v${version}"; 25 - hash = "sha256-IkRMsCrtX8nS0nrxs5B9csMq1YrI75QLDuT8eTPILkw="; 24 + tag = "v${version}"; 25 + hash = "sha256-gHilCG07BXL28vBOaqvKhEQw+9l/AkzZRQxucBTEDos="; 26 26 }; 27 27 28 28 nativeBuildInputs = [
+2 -2
pkgs/development/python-modules/genie-partner-sdk/default.nix
··· 9 9 10 10 buildPythonPackage rec { 11 11 pname = "genie-partner-sdk"; 12 - version = "1.0.4"; 12 + version = "1.0.5"; 13 13 pyproject = true; 14 14 15 15 disabled = pythonOlder "3.11"; ··· 17 17 src = fetchPypi { 18 18 inherit version; 19 19 pname = "genie_partner_sdk"; 20 - hash = "sha256-DwbIe1pq1YKAA3hRlhYCVJ9xtvfxvoqLLjDSQicUKuw="; 20 + hash = "sha256-JxsUaC7WgspUU9ngIc4GOjFr/lHjD2+5YlcLXtJH6LE="; 21 21 }; 22 22 23 23 nativeBuildInputs = [ hatchling ];
+33 -33
pkgs/development/python-modules/pycrdt/Cargo.lock
··· 44 44 45 45 [[package]] 46 46 name = "bumpalo" 47 - version = "3.17.0" 47 + version = "3.18.1" 48 48 source = "registry+https://github.com/rust-lang/crates.io-index" 49 - checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 49 + checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" 50 50 51 51 [[package]] 52 52 name = "cfg-if" 53 - version = "1.0.0" 53 + version = "1.0.1" 54 54 source = "registry+https://github.com/rust-lang/crates.io-index" 55 - checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 55 + checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" 56 56 57 57 [[package]] 58 58 name = "concurrent-queue" ··· 162 162 163 163 [[package]] 164 164 name = "libc" 165 - version = "0.2.172" 165 + version = "0.2.173" 166 166 source = "registry+https://github.com/rust-lang/crates.io-index" 167 - checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" 167 + checksum = "d8cfeafaffdbc32176b64fb251369d52ea9f0a8fbc6f8759edffef7b525d64bb" 168 168 169 169 [[package]] 170 170 name = "lock_api" 171 - version = "0.4.12" 171 + version = "0.4.13" 172 172 source = "registry+https://github.com/rust-lang/crates.io-index" 173 - checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 173 + checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" 174 174 dependencies = [ 175 175 "autocfg", 176 176 "scopeguard", ··· 184 184 185 185 [[package]] 186 186 name = "memchr" 187 - version = "2.7.4" 187 + version = "2.7.5" 188 188 source = "registry+https://github.com/rust-lang/crates.io-index" 189 - checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 189 + checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 190 190 191 191 [[package]] 192 192 name = "memoffset" ··· 211 211 212 212 [[package]] 213 213 name = "parking_lot_core" 214 - version = "0.9.10" 214 + version = "0.9.11" 215 215 source = "registry+https://github.com/rust-lang/crates.io-index" 216 - checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 216 + checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" 217 217 dependencies = [ 218 218 "cfg-if", 219 219 "libc", ··· 230 230 231 231 [[package]] 232 232 name = "portable-atomic" 233 - version = "1.11.0" 233 + version = "1.11.1" 234 234 source = "registry+https://github.com/rust-lang/crates.io-index" 235 - checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" 235 + checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 236 236 237 237 [[package]] 238 238 name = "proc-macro2" ··· 245 245 246 246 [[package]] 247 247 name = "pycrdt" 248 - version = "0.12.20" 248 + version = "0.12.21" 249 249 dependencies = [ 250 250 "pyo3", 251 251 "yrs", ··· 253 253 254 254 [[package]] 255 255 name = "pyo3" 256 - version = "0.25.0" 256 + version = "0.25.1" 257 257 source = "registry+https://github.com/rust-lang/crates.io-index" 258 - checksum = "f239d656363bcee73afef85277f1b281e8ac6212a1d42aa90e55b90ed43c47a4" 258 + checksum = "8970a78afe0628a3e3430376fc5fd76b6b45c4d43360ffd6cdd40bdde72b682a" 259 259 dependencies = [ 260 260 "indoc", 261 261 "libc", ··· 270 270 271 271 [[package]] 272 272 name = "pyo3-build-config" 273 - version = "0.25.0" 273 + version = "0.25.1" 274 274 source = "registry+https://github.com/rust-lang/crates.io-index" 275 - checksum = "755ea671a1c34044fa165247aaf6f419ca39caa6003aee791a0df2713d8f1b6d" 275 + checksum = "458eb0c55e7ece017adeba38f2248ff3ac615e53660d7c71a238d7d2a01c7598" 276 276 dependencies = [ 277 277 "once_cell", 278 278 "target-lexicon", ··· 280 280 281 281 [[package]] 282 282 name = "pyo3-ffi" 283 - version = "0.25.0" 283 + version = "0.25.1" 284 284 source = "registry+https://github.com/rust-lang/crates.io-index" 285 - checksum = "fc95a2e67091e44791d4ea300ff744be5293f394f1bafd9f78c080814d35956e" 285 + checksum = "7114fe5457c61b276ab77c5055f206295b812608083644a5c5b2640c3102565c" 286 286 dependencies = [ 287 287 "libc", 288 288 "pyo3-build-config", ··· 290 290 291 291 [[package]] 292 292 name = "pyo3-macros" 293 - version = "0.25.0" 293 + version = "0.25.1" 294 294 source = "registry+https://github.com/rust-lang/crates.io-index" 295 - checksum = "a179641d1b93920829a62f15e87c0ed791b6c8db2271ba0fd7c2686090510214" 295 + checksum = "a8725c0a622b374d6cb051d11a0983786448f7785336139c3c94f5aa6bef7e50" 296 296 dependencies = [ 297 297 "proc-macro2", 298 298 "pyo3-macros-backend", ··· 302 302 303 303 [[package]] 304 304 name = "pyo3-macros-backend" 305 - version = "0.25.0" 305 + version = "0.25.1" 306 306 source = "registry+https://github.com/rust-lang/crates.io-index" 307 - checksum = "9dff85ebcaab8c441b0e3f7ae40a6963ecea8a9f5e74f647e33fcf5ec9a1e89e" 307 + checksum = "4109984c22491085343c05b0dbc54ddc405c3cf7b4374fc533f5c3313a572ccc" 308 308 dependencies = [ 309 309 "heck", 310 310 "proc-macro2", ··· 324 324 325 325 [[package]] 326 326 name = "redox_syscall" 327 - version = "0.5.12" 327 + version = "0.5.13" 328 328 source = "registry+https://github.com/rust-lang/crates.io-index" 329 - checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" 329 + checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" 330 330 dependencies = [ 331 331 "bitflags", 332 332 ] ··· 386 386 387 387 [[package]] 388 388 name = "smallvec" 389 - version = "1.15.0" 389 + version = "1.15.1" 390 390 source = "registry+https://github.com/rust-lang/crates.io-index" 391 - checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" 391 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 392 392 393 393 [[package]] 394 394 name = "syn" 395 - version = "2.0.101" 395 + version = "2.0.103" 396 396 source = "registry+https://github.com/rust-lang/crates.io-index" 397 - checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" 397 + checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8" 398 398 dependencies = [ 399 399 "proc-macro2", 400 400 "quote", ··· 441 441 442 442 [[package]] 443 443 name = "wasi" 444 - version = "0.11.0+wasi-snapshot-preview1" 444 + version = "0.11.1+wasi-snapshot-preview1" 445 445 source = "registry+https://github.com/rust-lang/crates.io-index" 446 - checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 446 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 447 447 448 448 [[package]] 449 449 name = "wasm-bindgen"
+2 -2
pkgs/development/python-modules/pycrdt/default.nix
··· 19 19 20 20 buildPythonPackage rec { 21 21 pname = "pycrdt"; 22 - version = "0.12.20"; 22 + version = "0.12.21"; 23 23 pyproject = true; 24 24 25 25 src = fetchFromGitHub { 26 26 owner = "y-crdt"; 27 27 repo = "pycrdt"; 28 28 tag = version; 29 - hash = "sha256-kSwmQf46c5UJD75cfJxR3EfxFXExHhLXB+xdExr4lCk="; 29 + hash = "sha256-QfgBq/jL/dFOr1YAC4y0s0tpdIC4bwxknPd1wJ/Z1lo="; 30 30 }; 31 31 32 32 postPatch = ''
+3 -3
pkgs/development/python-modules/pypck/default.nix
··· 12 12 13 13 buildPythonPackage rec { 14 14 pname = "pypck"; 15 - version = "0.8.6"; 15 + version = "0.8.8"; 16 16 pyproject = true; 17 17 18 18 disabled = pythonOlder "3.11"; ··· 21 21 owner = "alengwenus"; 22 22 repo = "pypck"; 23 23 tag = version; 24 - hash = "sha256-Us6CkRt6s/Dfw2k1R4WLWfl9ekhSwTL54BJg2hToOYY="; 24 + hash = "sha256-n7UFmWQyw60FTWNxs4mA9ZziZ2EwphkMI9pOLx7gFcA="; 25 25 }; 26 26 27 27 postPatch = '' ··· 47 47 meta = with lib; { 48 48 description = "LCN-PCK library written in Python"; 49 49 homepage = "https://github.com/alengwenus/pypck"; 50 - changelog = "https://github.com/alengwenus/pypck/releases/tag/${version}"; 50 + changelog = "https://github.com/alengwenus/pypck/releases/tag/${src.tag}"; 51 51 license = licenses.epl20; 52 52 maintainers = with maintainers; [ fab ]; 53 53 };
+7 -5
pkgs/development/python-modules/python-djvulibre/default.nix
··· 1 1 { 2 2 lib, 3 - python3Packages, 3 + buildPythonPackage, 4 4 fetchFromGitHub, 5 + cython, 5 6 djvulibre, 7 + setuptools, 6 8 ghostscript_headless, 7 9 pkg-config, 8 10 unittestCheckHook, 9 11 }: 10 12 11 - python3Packages.buildPythonPackage rec { 13 + buildPythonPackage rec { 12 14 pname = "python-djvulibre"; 13 15 version = "0.9.3"; 14 16 pyproject = true; ··· 21 23 }; 22 24 23 25 build-system = [ 24 - python3Packages.cython 26 + cython 25 27 djvulibre 26 28 ghostscript_headless 27 29 pkg-config 28 - python3Packages.setuptools 30 + setuptools 29 31 ]; 30 32 31 - dependencies = with python3Packages; [ 33 + dependencies = [ 32 34 djvulibre 33 35 ghostscript_headless 34 36 ];
+40
pkgs/development/python-modules/robotframework-assertion-engine/default.nix
··· 1 + { 2 + lib, 3 + buildPythonPackage, 4 + fetchPypi, 5 + poetry-core, 6 + robotframework, 7 + robotframework-pythonlibcore, 8 + }: 9 + 10 + buildPythonPackage rec { 11 + pname = "robotframework-assertion-engine"; 12 + version = "3.0.3"; 13 + pyproject = true; 14 + 15 + src = fetchPypi { 16 + pname = "robotframework_assertion_engine"; 17 + inherit version; 18 + hash = "sha256-HGCNTGnZZSCYah3cbe8Px/foSVIPHmiCpjO1HbuY/Yg="; 19 + }; 20 + 21 + build-system = [ 22 + poetry-core 23 + ]; 24 + 25 + dependencies = [ 26 + robotframework 27 + robotframework-pythonlibcore 28 + ]; 29 + 30 + pythonImportsCheck = [ 31 + "assertionengine" 32 + ]; 33 + 34 + meta = { 35 + description = "Generic way to create meaningful and easy to use assertions for the Robot Framework libraries"; 36 + homepage = "https://pypi.org/project/robotframework-assertion-engine/"; 37 + license = lib.licenses.asl20; 38 + maintainers = with lib.maintainers; [ bjornfor ]; 39 + }; 40 + }
+2
pkgs/development/python-modules/robotframework-databaselibrary/default.nix
··· 4 4 fetchFromGitHub, 5 5 setuptools, 6 6 robotframework, 7 + robotframework-assertion-engine, 7 8 robotframework-excellib, 8 9 pytestCheckHook, 9 10 }: ··· 27 28 28 29 propagatedBuildInputs = [ 29 30 robotframework 31 + robotframework-assertion-engine 30 32 robotframework-excellib 31 33 ]; 32 34
+6
pkgs/development/python-modules/textual/default.nix
··· 77 77 disabledTests = [ 78 78 # Assertion issues 79 79 "test_textual_env_var" 80 + 81 + # Fail since tree-sitter-markdown was updated to 0.5.0 82 + # ValueError: Incompatible Language version 15. Must be between 13 and 14 83 + # https://github.com/Textualize/textual/issues/5868 84 + "test_setting_builtin_language_via_attribute" 85 + "test_setting_builtin_language_via_constructor" 80 86 ]; 81 87 82 88 pytestFlagsArray = [
+5
pkgs/development/python-modules/torch/source/default.nix
··· 46 46 47 47 # dependencies 48 48 astunparse, 49 + binutils, 49 50 expecttest, 50 51 filelock, 51 52 fsspec, ··· 331 332 # flag from cmakeFlags doesn't work, not clear why 332 333 # setting it at the top of NNPACK's own CMakeLists does 333 334 sed -i '2s;^;set(PYTHON_SIX_SOURCE_DIR ${six.src})\n;' third_party/NNPACK/CMakeLists.txt 335 + 336 + # Ensure that torch profiler unwind uses addr2line from nix 337 + substituteInPlace torch/csrc/profiler/unwind/unwind.cpp \ 338 + --replace-fail 'addr2line_binary_ = "addr2line"' 'addr2line_binary_ = "${lib.getExe' binutils "addr2line"}"' 334 339 '' 335 340 + lib.optionalString rocmSupport '' 336 341 # https://github.com/facebookincubator/gloo/pull/297
+100
pkgs/development/python-modules/torchao/default.nix
··· 1 + { 2 + lib, 3 + stdenv, 4 + buildPythonPackage, 5 + fetchFromGitHub, 6 + 7 + # build-system 8 + setuptools, 9 + 10 + # dependencies 11 + torch, 12 + 13 + # tests 14 + bitsandbytes, 15 + expecttest, 16 + fire, 17 + pytest-xdist, 18 + pytestCheckHook, 19 + parameterized, 20 + tabulate, 21 + transformers, 22 + unittest-xml-reporting, 23 + }: 24 + 25 + buildPythonPackage rec { 26 + pname = "ao"; 27 + version = "0.11.0"; 28 + pyproject = true; 29 + 30 + src = fetchFromGitHub { 31 + owner = "pytorch"; 32 + repo = "ao"; 33 + tag = "v${version}"; 34 + hash = "sha256-CNb9xaubOmIRanLq3TM4sBbszTcVK/WFpcq/sWpof44="; 35 + }; 36 + 37 + build-system = [ 38 + setuptools 39 + ]; 40 + 41 + dependencies = [ 42 + torch 43 + ]; 44 + 45 + env = { 46 + USE_SYSTEM_LIBS = true; 47 + }; 48 + 49 + # Otherwise, the tests are loading the python module from the source instead of the installed one 50 + preCheck = '' 51 + rm -rf torchao 52 + ''; 53 + 54 + pythonImportsCheck = [ 55 + "torchao" 56 + ]; 57 + 58 + nativeCheckInputs = [ 59 + bitsandbytes 60 + expecttest 61 + fire 62 + parameterized 63 + pytest-xdist 64 + pytestCheckHook 65 + tabulate 66 + transformers 67 + unittest-xml-reporting 68 + ]; 69 + 70 + disabledTests = 71 + [ 72 + # Requires internet access 73 + "test_on_dummy_distilbert" 74 + 75 + # FileNotFoundError: [Errno 2] No such file or directory: 'checkpoints/meta-llama/Llama-2-7b-chat-hf/model.pth' 76 + "test_gptq_mt" 77 + ] 78 + ++ lib.optionals (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64) [ 79 + # RuntimeError: failed to initialize QNNPACK 80 + "test_smooth_linear_cpu" 81 + 82 + # torch._inductor.exc.InductorError: LoweringException: AssertionError: Expect L1_cache_size > 0 but got 0 83 + "test_int8_weight_only_quant_with_freeze_0_cpu" 84 + "test_int8_weight_only_quant_with_freeze_1_cpu" 85 + "test_int8_weight_only_quant_with_freeze_2_cpu" 86 + 87 + # FileNotFoundError: [Errno 2] No such file or directory: 'test.pth' 88 + "test_save_load_int4woqtensors_2_cpu" 89 + "test_save_load_int8woqtensors_0_cpu" 90 + "test_save_load_int8woqtensors_1_cpu" 91 + ]; 92 + 93 + meta = { 94 + description = "PyTorch native quantization and sparsity for training and inference"; 95 + homepage = "https://github.com/pytorch/ao"; 96 + changelog = "https://github.com/pytorch/ao/releases/tag/v${version}"; 97 + license = lib.licenses.bsd3; 98 + maintainers = with lib.maintainers; [ GaetanLepage ]; 99 + }; 100 + }
+3 -3
pkgs/development/python-modules/tree-sitter-markdown/default.nix
··· 9 9 10 10 buildPythonPackage rec { 11 11 pname = "tree-sitter-markdown"; 12 - version = "0.4.1"; 12 + version = "0.5.0"; 13 13 pyproject = true; 14 14 15 15 src = fetchFromGitHub { 16 16 owner = "tree-sitter-grammars"; 17 17 repo = "tree-sitter-markdown"; 18 18 tag = "v${version}"; 19 - hash = "sha256-Oe2iL5b1Cyv+dK0nQYFNLCCOCe+93nojxt6ukH2lEmU="; 19 + hash = "sha256-I9KDE1yZce8KIGPLG5tmv5r/NCWwN95R6fIyvGdx+So="; 20 20 }; 21 21 22 22 build-system = [ ··· 39 39 meta = { 40 40 description = "Markdown grammar for tree-sitter"; 41 41 homepage = "https://github.com/tree-sitter-grammars/tree-sitter-markdown"; 42 - changelog = "https://github.com/tree-sitter-grammars/tree-sitter-markdown/releases/tag/v${version}"; 42 + changelog = "https://github.com/tree-sitter-grammars/tree-sitter-markdown/releases/tag/${src.tag}"; 43 43 license = lib.licenses.mit; 44 44 maintainers = with lib.maintainers; [ GaetanLepage ]; 45 45 };
+3 -3
pkgs/servers/spicedb/default.nix
··· 7 7 8 8 buildGoModule rec { 9 9 pname = "spicedb"; 10 - version = "1.44.0"; 10 + version = "1.44.3"; 11 11 12 12 src = fetchFromGitHub { 13 13 owner = "authzed"; 14 14 repo = "spicedb"; 15 15 rev = "v${version}"; 16 - hash = "sha256-7QWYqMAX3K16ITkDaVlrEzTH7uIaKDtZom04mBhPZS8="; 16 + hash = "sha256-V/uUfysSHDtkZjRoJMI4qbfl1PuCE6pbwRhk6D14s60="; 17 17 }; 18 18 19 - vendorHash = "sha256-X+AQgn5aVIFOV+F8H8Byf1tsu7CVb0PwjzS8x5xn3l0="; 19 + vendorHash = "sha256-Tdg9HOzH7N465QX7m65S7+HfT+sdgVpdTnHjhart1ec="; 20 20 21 21 ldflags = [ 22 22 "-X 'github.com/jzelinskie/cobrautil/v2.Version=${src.rev}'"
+3
pkgs/test/build-deno-package/.gitignore
··· 1 + .deno/ 2 + node_modules/ 3 + vendor/
+33
pkgs/test/build-deno-package/binaries/default.nix
··· 1 + { nix-gitignore, buildDenoPackage }: 2 + { 3 + with-npm-linux = buildDenoPackage rec { 4 + pname = "test-deno-build-binaries-with-npm-${targetSystem}"; 5 + version = "0.1.0"; 6 + denoDepsHash = "sha256-k2js/8XsxGVu83rGMJed457orraue8WUZF+JUMMfhVQ="; 7 + src = nix-gitignore.gitignoreSource [ ] ./with-npm; 8 + binaryEntrypointPath = "./main.ts"; 9 + targetSystem = "x86_64-linux"; 10 + }; 11 + without-npm-linux = buildDenoPackage rec { 12 + pname = "test-deno-build-binaries-without-npm-${targetSystem}"; 13 + version = "0.1.0"; 14 + denoDepsHash = "sha256-keshKcgawVcuSGNYAIepUrRl7iqpp0ExRJag4aiV18c="; 15 + src = nix-gitignore.gitignoreSource [ ] ./without-npm; 16 + binaryEntrypointPath = "./main.ts"; 17 + targetSystem = "x86_64-linux"; 18 + }; 19 + # mac = 20 + # let 21 + # targetSystem = "aarch64-darwin"; 22 + # macpkgs = import ../../../../default.nix { crossSystem = { config = "arm64-apple-darwin"; };}; 23 + # in 24 + # buildDenoPackage { 25 + # pname = "test-deno-build-binaries-${targetSystem}"; 26 + # version = "0.1.0"; 27 + # denoDepsHash = ""; 28 + # src = nix-gitignore.gitignoreSource [ ] ./.; 29 + # binaryEntrypointPath = "./main.ts"; 30 + # denortPackage = macpkgs.denort; 31 + # inherit targetSystem; 32 + # }; 33 + }
+3
pkgs/test/build-deno-package/binaries/with-npm/.gitignore
··· 1 + .deno/ 2 + node_modules/ 3 + vendor/
+13
pkgs/test/build-deno-package/binaries/with-npm/deno.json
··· 1 + { 2 + "name": "binary build", 3 + "tasks": { 4 + "build": "deno run --allow-all main.ts" 5 + }, 6 + "imports": { 7 + "@luca/cases": "jsr:@luca/cases@1.0.0", 8 + "@std/cli": "jsr:@std/cli@1.0.17", 9 + "cowsay": "npm:cowsay@1.6.0", 10 + "cases": "https://deno.land/x/case@2.2.0/mod.ts" 11 + }, 12 + "vendor": true 13 + }
+215
pkgs/test/build-deno-package/binaries/with-npm/deno.lock
··· 1 + { 2 + "version": "5", 3 + "specifiers": { 4 + "jsr:@luca/cases@1.0.0": "1.0.0", 5 + "jsr:@std/cli@1.0.17": "1.0.17", 6 + "npm:cowsay@1.6.0": "1.6.0" 7 + }, 8 + "jsr": { 9 + "@luca/cases@1.0.0": { 10 + "integrity": "b5f9471f1830595e63a2b7d62821ac822a19e16899e6584799be63f17a1fbc30" 11 + }, 12 + "@std/cli@1.0.17": { 13 + "integrity": "e15b9abe629e17be90cc6216327f03a29eae613365f1353837fa749aad29ce7b" 14 + } 15 + }, 16 + "npm": { 17 + "ansi-regex@3.0.1": { 18 + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" 19 + }, 20 + "ansi-regex@5.0.1": { 21 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 22 + }, 23 + "ansi-styles@4.3.0": { 24 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 25 + "dependencies": [ 26 + "color-convert" 27 + ] 28 + }, 29 + "camelcase@5.3.1": { 30 + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 31 + }, 32 + "cliui@6.0.0": { 33 + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", 34 + "dependencies": [ 35 + "string-width@4.2.3", 36 + "strip-ansi@6.0.1", 37 + "wrap-ansi" 38 + ] 39 + }, 40 + "color-convert@2.0.1": { 41 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 42 + "dependencies": [ 43 + "color-name" 44 + ] 45 + }, 46 + "color-name@1.1.4": { 47 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 48 + }, 49 + "cowsay@1.6.0": { 50 + "integrity": "sha512-8C4H1jdrgNusTQr3Yu4SCm+ZKsAlDFbpa0KS0Z3im8ueag+9pGOf3CrioruvmeaW/A5oqg9L0ar6qeftAh03jw==", 51 + "dependencies": [ 52 + "get-stdin", 53 + "string-width@2.1.1", 54 + "strip-final-newline", 55 + "yargs" 56 + ], 57 + "bin": true 58 + }, 59 + "decamelize@1.2.0": { 60 + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" 61 + }, 62 + "emoji-regex@8.0.0": { 63 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 64 + }, 65 + "find-up@4.1.0": { 66 + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 67 + "dependencies": [ 68 + "locate-path", 69 + "path-exists" 70 + ] 71 + }, 72 + "get-caller-file@2.0.5": { 73 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 74 + }, 75 + "get-stdin@8.0.0": { 76 + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==" 77 + }, 78 + "is-fullwidth-code-point@2.0.0": { 79 + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" 80 + }, 81 + "is-fullwidth-code-point@3.0.0": { 82 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 83 + }, 84 + "locate-path@5.0.0": { 85 + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 86 + "dependencies": [ 87 + "p-locate" 88 + ] 89 + }, 90 + "p-limit@2.3.0": { 91 + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 92 + "dependencies": [ 93 + "p-try" 94 + ] 95 + }, 96 + "p-locate@4.1.0": { 97 + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 98 + "dependencies": [ 99 + "p-limit" 100 + ] 101 + }, 102 + "p-try@2.2.0": { 103 + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 104 + }, 105 + "path-exists@4.0.0": { 106 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 107 + }, 108 + "require-directory@2.1.1": { 109 + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" 110 + }, 111 + "require-main-filename@2.0.0": { 112 + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 113 + }, 114 + "set-blocking@2.0.0": { 115 + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" 116 + }, 117 + "string-width@2.1.1": { 118 + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 119 + "dependencies": [ 120 + "is-fullwidth-code-point@2.0.0", 121 + "strip-ansi@4.0.0" 122 + ] 123 + }, 124 + "string-width@4.2.3": { 125 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 126 + "dependencies": [ 127 + "emoji-regex", 128 + "is-fullwidth-code-point@3.0.0", 129 + "strip-ansi@6.0.1" 130 + ] 131 + }, 132 + "strip-ansi@4.0.0": { 133 + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", 134 + "dependencies": [ 135 + "ansi-regex@3.0.1" 136 + ] 137 + }, 138 + "strip-ansi@6.0.1": { 139 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 140 + "dependencies": [ 141 + "ansi-regex@5.0.1" 142 + ] 143 + }, 144 + "strip-final-newline@2.0.0": { 145 + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" 146 + }, 147 + "which-module@2.0.1": { 148 + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" 149 + }, 150 + "wrap-ansi@6.2.0": { 151 + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 152 + "dependencies": [ 153 + "ansi-styles", 154 + "string-width@4.2.3", 155 + "strip-ansi@6.0.1" 156 + ] 157 + }, 158 + "y18n@4.0.3": { 159 + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" 160 + }, 161 + "yargs-parser@18.1.3": { 162 + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 163 + "dependencies": [ 164 + "camelcase", 165 + "decamelize" 166 + ] 167 + }, 168 + "yargs@15.4.1": { 169 + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", 170 + "dependencies": [ 171 + "cliui", 172 + "decamelize", 173 + "find-up", 174 + "get-caller-file", 175 + "require-directory", 176 + "require-main-filename", 177 + "set-blocking", 178 + "string-width@4.2.3", 179 + "which-module", 180 + "y18n", 181 + "yargs-parser" 182 + ] 183 + } 184 + }, 185 + "remote": { 186 + "https://deno.land/x/case@2.2.0/camelCase.ts": "b9a4cf361a7c9740ecb75e00b5e2c006bd4e5d40e442d26c5f2760286fa66796", 187 + "https://deno.land/x/case@2.2.0/constantCase.ts": "c698fc32f00cd267c1684b1d413d784260d7e7798f2bf506803e418497d839b5", 188 + "https://deno.land/x/case@2.2.0/dotCase.ts": "03ae55d5635e6a4ca894a003d9297cd9cd283af2e7d761dd3de13663849a9423", 189 + "https://deno.land/x/case@2.2.0/headerCase.ts": "3f6c8ab2ab30a88147326bce28a00d1189ec98ab61c83ab72ce79e852afddc4a", 190 + "https://deno.land/x/case@2.2.0/lowerCase.ts": "d75eb55cadfa589f9f2a973924a8a209054477d9574da669410f4d817ab25b41", 191 + "https://deno.land/x/case@2.2.0/lowerFirstCase.ts": "b001efbf2d715b53d066b22cdbf8eda7f99aa7108e3d12fb02f80d499bae93d9", 192 + "https://deno.land/x/case@2.2.0/mod.ts": "28b0b1329c7b18730799ac05627a433d9547c04b9bfb429116247c60edecd97b", 193 + "https://deno.land/x/case@2.2.0/normalCase.ts": "085c8b6f9d69283c8b86f2e504d43278c2be8b7e56a3ed8d4a5f395e398bdc29", 194 + "https://deno.land/x/case@2.2.0/paramCase.ts": "a234c9c17dfbaddee647b6571c2c90e8f6530123fed26c4546f4063d67c1609f", 195 + "https://deno.land/x/case@2.2.0/pascalCase.ts": "4b3ef0a68173871a821d306d4067e8f72d42aeeef1eea6aeab30af6bfa3d7427", 196 + "https://deno.land/x/case@2.2.0/pathCase.ts": "330a34b4df365b0291d8e36158235340131730aae6f6add66962ed2d0fbead4a", 197 + "https://deno.land/x/case@2.2.0/sentenceCase.ts": "b312cef147a13b58ffdf3c36bf55b33aa8322c91f4aa9b32318f3911bb92327f", 198 + "https://deno.land/x/case@2.2.0/snakeCase.ts": "e5ac1e08532ca397aa3150a0a3255d59f63a186d934e5094a8ffd24cbca7f955", 199 + "https://deno.land/x/case@2.2.0/swapCase.ts": "bb03742fcf613f733890680ceca1b39b65ed290f36a317fcd47edd517c4e0e1e", 200 + "https://deno.land/x/case@2.2.0/titleCase.ts": "c287131ea2c955e67cdd5cf604de96d31a8e2813305759922b9ed27e3be354e7", 201 + "https://deno.land/x/case@2.2.0/types.ts": "8e2bd6edaa27c0d1972c0d5b76698564740f37b4d3787d58d1fb5f48de611e61", 202 + "https://deno.land/x/case@2.2.0/upperCase.ts": "6cca267bb04d098bf4abf21e42e60c3e68ede89b12e525643c6b6eff3e10de34", 203 + "https://deno.land/x/case@2.2.0/upperFirstCase.ts": "b964c2d8d3a85c78cd35f609135cbde99d84b9522a21470336b5af80a37facbd", 204 + "https://deno.land/x/case@2.2.0/vendor/camelCaseRegexp.ts": "7d9ff02aad4ab6429eeab7c7353f7bcdd6cc5909a8bd3dda97918c8bbb7621ae", 205 + "https://deno.land/x/case@2.2.0/vendor/camelCaseUpperRegexp.ts": "292de54a698370f90adcdf95727993d09888b7f33d17f72f8e54ba75f7791787", 206 + "https://deno.land/x/case@2.2.0/vendor/nonWordRegexp.ts": "c1a052629a694144b48c66b0175a22a83f4d61cb40f4e45293fc5d6b123f927e" 207 + }, 208 + "workspace": { 209 + "dependencies": [ 210 + "jsr:@luca/cases@1.0.0", 211 + "jsr:@std/cli@1.0.17", 212 + "npm:cowsay@1.6.0" 213 + ] 214 + } 215 + }
+15
pkgs/test/build-deno-package/binaries/with-npm/main.ts
··· 1 + import { camelCase } from "@luca/cases"; 2 + import { say } from "cowsay"; 3 + import { pascalCase } from "cases"; 4 + import { parseArgs } from "@std/cli"; 5 + 6 + const flags = parseArgs(Deno.args, { 7 + string: ["text"], 8 + }); 9 + 10 + if (!flags.text) { 11 + throw "--text required but not specified"; 12 + } 13 + 14 + console.log(camelCase(say({ text: flags.text }))); 15 + console.log(pascalCase(say({ text: flags.text })));
+3
pkgs/test/build-deno-package/binaries/without-npm/.gitignore
··· 1 + .deno/ 2 + node_modules/ 3 + vendor/
+12
pkgs/test/build-deno-package/binaries/without-npm/deno.json
··· 1 + { 2 + "name": "binary build", 3 + "tasks": { 4 + "build": "deno run --allow-all main.ts" 5 + }, 6 + "imports": { 7 + "@luca/cases": "jsr:@luca/cases@1.0.0", 8 + "@std/cli": "jsr:@std/cli@1.0.17", 9 + "cases": "https://deno.land/x/case@2.2.0/mod.ts" 10 + }, 11 + "vendor": true 12 + }
+44
pkgs/test/build-deno-package/binaries/without-npm/deno.lock
··· 1 + { 2 + "version": "5", 3 + "specifiers": { 4 + "jsr:@luca/cases@1.0.0": "1.0.0", 5 + "jsr:@std/cli@1.0.17": "1.0.17" 6 + }, 7 + "jsr": { 8 + "@luca/cases@1.0.0": { 9 + "integrity": "b5f9471f1830595e63a2b7d62821ac822a19e16899e6584799be63f17a1fbc30" 10 + }, 11 + "@std/cli@1.0.17": { 12 + "integrity": "e15b9abe629e17be90cc6216327f03a29eae613365f1353837fa749aad29ce7b" 13 + } 14 + }, 15 + "remote": { 16 + "https://deno.land/x/case@2.2.0/camelCase.ts": "b9a4cf361a7c9740ecb75e00b5e2c006bd4e5d40e442d26c5f2760286fa66796", 17 + "https://deno.land/x/case@2.2.0/constantCase.ts": "c698fc32f00cd267c1684b1d413d784260d7e7798f2bf506803e418497d839b5", 18 + "https://deno.land/x/case@2.2.0/dotCase.ts": "03ae55d5635e6a4ca894a003d9297cd9cd283af2e7d761dd3de13663849a9423", 19 + "https://deno.land/x/case@2.2.0/headerCase.ts": "3f6c8ab2ab30a88147326bce28a00d1189ec98ab61c83ab72ce79e852afddc4a", 20 + "https://deno.land/x/case@2.2.0/lowerCase.ts": "d75eb55cadfa589f9f2a973924a8a209054477d9574da669410f4d817ab25b41", 21 + "https://deno.land/x/case@2.2.0/lowerFirstCase.ts": "b001efbf2d715b53d066b22cdbf8eda7f99aa7108e3d12fb02f80d499bae93d9", 22 + "https://deno.land/x/case@2.2.0/mod.ts": "28b0b1329c7b18730799ac05627a433d9547c04b9bfb429116247c60edecd97b", 23 + "https://deno.land/x/case@2.2.0/normalCase.ts": "085c8b6f9d69283c8b86f2e504d43278c2be8b7e56a3ed8d4a5f395e398bdc29", 24 + "https://deno.land/x/case@2.2.0/paramCase.ts": "a234c9c17dfbaddee647b6571c2c90e8f6530123fed26c4546f4063d67c1609f", 25 + "https://deno.land/x/case@2.2.0/pascalCase.ts": "4b3ef0a68173871a821d306d4067e8f72d42aeeef1eea6aeab30af6bfa3d7427", 26 + "https://deno.land/x/case@2.2.0/pathCase.ts": "330a34b4df365b0291d8e36158235340131730aae6f6add66962ed2d0fbead4a", 27 + "https://deno.land/x/case@2.2.0/sentenceCase.ts": "b312cef147a13b58ffdf3c36bf55b33aa8322c91f4aa9b32318f3911bb92327f", 28 + "https://deno.land/x/case@2.2.0/snakeCase.ts": "e5ac1e08532ca397aa3150a0a3255d59f63a186d934e5094a8ffd24cbca7f955", 29 + "https://deno.land/x/case@2.2.0/swapCase.ts": "bb03742fcf613f733890680ceca1b39b65ed290f36a317fcd47edd517c4e0e1e", 30 + "https://deno.land/x/case@2.2.0/titleCase.ts": "c287131ea2c955e67cdd5cf604de96d31a8e2813305759922b9ed27e3be354e7", 31 + "https://deno.land/x/case@2.2.0/types.ts": "8e2bd6edaa27c0d1972c0d5b76698564740f37b4d3787d58d1fb5f48de611e61", 32 + "https://deno.land/x/case@2.2.0/upperCase.ts": "6cca267bb04d098bf4abf21e42e60c3e68ede89b12e525643c6b6eff3e10de34", 33 + "https://deno.land/x/case@2.2.0/upperFirstCase.ts": "b964c2d8d3a85c78cd35f609135cbde99d84b9522a21470336b5af80a37facbd", 34 + "https://deno.land/x/case@2.2.0/vendor/camelCaseRegexp.ts": "7d9ff02aad4ab6429eeab7c7353f7bcdd6cc5909a8bd3dda97918c8bbb7621ae", 35 + "https://deno.land/x/case@2.2.0/vendor/camelCaseUpperRegexp.ts": "292de54a698370f90adcdf95727993d09888b7f33d17f72f8e54ba75f7791787", 36 + "https://deno.land/x/case@2.2.0/vendor/nonWordRegexp.ts": "c1a052629a694144b48c66b0175a22a83f4d61cb40f4e45293fc5d6b123f927e" 37 + }, 38 + "workspace": { 39 + "dependencies": [ 40 + "jsr:@luca/cases@1.0.0", 41 + "jsr:@std/cli@1.0.17" 42 + ] 43 + } 44 + }
+14
pkgs/test/build-deno-package/binaries/without-npm/main.ts
··· 1 + import { camelCase } from "@luca/cases"; 2 + import { pascalCase } from "cases"; 3 + import { parseArgs } from "@std/cli"; 4 + 5 + const flags = parseArgs(Deno.args, { 6 + string: ["text"], 7 + }); 8 + 9 + if (!flags.text) { 10 + throw "--text required but not specified"; 11 + } 12 + 13 + console.log(camelCase(flags.text)); 14 + console.log(pascalCase(flags.text));
+4
pkgs/test/build-deno-package/default.nix
··· 1 + { pkgs }: 2 + (pkgs.callPackage ./workspaces { }) 3 + // (pkgs.callPackage ./binaries { }) 4 + // (pkgs.callPackage ./external { })
+67
pkgs/test/build-deno-package/external/default.nix
··· 1 + { fetchFromGitHub, buildDenoPackage }: 2 + { 3 + readma-cli-linux = buildDenoPackage rec { 4 + pname = "readma-cli"; 5 + version = "2.11.0"; 6 + denoDepsHash = "sha256-ixet3k6OEWfxVnN/V7vk4qDvoXjA+6bU/JjXk76aThE="; 7 + src = fetchFromGitHub { 8 + owner = "elcoosp"; 9 + repo = "readma"; 10 + rev = "${version}"; 11 + hash = "sha256-FVQTn+r7Ztj02vNvqFZIRIsokWeo1tPfFYffK2tvxjA="; 12 + }; 13 + denoInstallFlags = [ 14 + "--allow-scripts" 15 + "--frozen" 16 + "--cached-only" 17 + "--entrypoint" 18 + "./cli/mod.ts" 19 + ]; 20 + binaryEntrypointPath = "./cli/mod.ts"; 21 + targetSystem = "x86_64-linux"; 22 + }; 23 + fresh-init-cli-linux = buildDenoPackage { 24 + pname = "fresh-init-cli"; 25 + version = ""; 26 + denoDepsHash = "sha256-WlMv431qTt3gw0w/V7lG8LnLkEt8VW1fNpyclzBwMcw="; 27 + src = fetchFromGitHub { 28 + owner = "denoland"; 29 + repo = "fresh"; 30 + rev = "c7c341b695bad8d0f3e3575e5fa9c82e0fa28bd4"; 31 + hash = "sha256-bC4akr4Wt4sRqGkgjNuXztW8Q6YBLBsbuIOhsXH8NQU="; 32 + }; 33 + denoWorkspacePath = "./init"; 34 + binaryEntrypointPath = "./src/mod.ts"; 35 + targetSystem = "x86_64-linux"; 36 + }; 37 + invidious-companion-cli-linux = buildDenoPackage { 38 + pname = "invidious-companion-cli"; 39 + version = ""; 40 + denoDepsHash = "sha256-sPcvVaVb4VsLI87kiYe3Z3eoXL1uDKwTQMck91cXVnM="; 41 + src = fetchFromGitHub { 42 + owner = "iv-org"; 43 + repo = "invidious-companion"; 44 + rev = "a34c27ff63e51f9e3adc0e8647cd12382f8f1ffe"; 45 + hash = "sha256-/S8F7G8li12k0objsdFuh+mle6p2mk8zNUUCrG9hgns="; 46 + }; 47 + binaryEntrypointPath = "src/main.ts"; 48 + denoCompileFlags = [ 49 + "--include=./src/lib/helpers/youtubePlayerReq.ts" 50 + "--include=./src/lib/helpers/getFetchClient.ts" 51 + "--allow-import=github.com:443,jsr.io:443,cdn.jsdelivr.net:443,esm.sh:443,deno.land:443" 52 + "--allow-net" 53 + "--allow-env" 54 + "--allow-read" 55 + "--allow-sys=hostname" 56 + "--allow-write=/var/tmp/youtubei.js" 57 + ]; 58 + denoInstallFlags = [ 59 + "--allow-scripts" 60 + "--frozen" 61 + "--cached-only" 62 + "--entrypoint" 63 + "src/main.ts" 64 + ]; 65 + targetSystem = "x86_64-linux"; 66 + }; 67 + }
+9
pkgs/test/build-deno-package/shell.nix
··· 1 + let 2 + pkgs = import ../../../default.nix { }; 3 + in 4 + pkgs.mkShell { 5 + buildInputs = [ pkgs.deno ]; 6 + DENO_DIR = "./.deno"; 7 + 8 + shellHook = ''''; 9 + }
+3
pkgs/test/build-deno-package/workspaces/.gitignore
··· 1 + .deno/ 2 + node_modules/ 3 + vendor/
+40
pkgs/test/build-deno-package/workspaces/default.nix
··· 1 + { nix-gitignore, buildDenoPackage }: 2 + rec { 3 + sub1 = buildDenoPackage { 4 + pname = "test-deno-build-workspaces-sub1"; 5 + version = "0.1.0"; 6 + denoDepsHash = "sha256-imraVvtIJqi31aaWv7U1ODVRmOuou1ZR++z7QqnTPr0="; 7 + src = nix-gitignore.gitignoreSource [ ] ./.; 8 + denoWorkspacePath = "./sub1"; 9 + extraTaskFlags = [ 10 + "--text" 11 + "sub1" 12 + ]; 13 + denoTaskSuffix = ">out.txt"; 14 + 15 + installPhase = '' 16 + cp out.txt $out 17 + ''; 18 + }; 19 + sub2 = buildDenoPackage { 20 + pname = "test-deno-build-workspaces-sub2"; 21 + version = "0.1.0"; 22 + inherit (sub1) denoDeps src; 23 + denoWorkspacePath = "./sub2"; 24 + extraTaskFlags = [ 25 + "--text" 26 + "sub2" 27 + ]; 28 + denoTaskSuffix = ">out.txt"; 29 + installPhase = '' 30 + cp out.txt $out 31 + ''; 32 + }; 33 + sub1Binary = buildDenoPackage { 34 + pname = "test-deno-build-workspaces-sub1-binary"; 35 + version = "0.1.0"; 36 + inherit (sub1) denoDeps src; 37 + denoWorkspacePath = "./sub1"; 38 + binaryEntrypointPath = "./main.ts"; 39 + }; 40 + }
+7
pkgs/test/build-deno-package/workspaces/deno.json
··· 1 + { 2 + "workspace":[ 3 + "./sub1", 4 + "./sub2" 5 + ], 6 + "vendor": true 7 + }
+225
pkgs/test/build-deno-package/workspaces/deno.lock
··· 1 + { 2 + "version": "5", 3 + "specifiers": { 4 + "jsr:@luca/cases@1.0.0": "1.0.0", 5 + "jsr:@std/cli@1.0.17": "1.0.17", 6 + "npm:cowsay@1.6.0": "1.6.0" 7 + }, 8 + "jsr": { 9 + "@luca/cases@1.0.0": { 10 + "integrity": "b5f9471f1830595e63a2b7d62821ac822a19e16899e6584799be63f17a1fbc30" 11 + }, 12 + "@std/cli@1.0.17": { 13 + "integrity": "e15b9abe629e17be90cc6216327f03a29eae613365f1353837fa749aad29ce7b" 14 + } 15 + }, 16 + "npm": { 17 + "ansi-regex@3.0.1": { 18 + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" 19 + }, 20 + "ansi-regex@5.0.1": { 21 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 22 + }, 23 + "ansi-styles@4.3.0": { 24 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 25 + "dependencies": [ 26 + "color-convert" 27 + ] 28 + }, 29 + "camelcase@5.3.1": { 30 + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 31 + }, 32 + "cliui@6.0.0": { 33 + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", 34 + "dependencies": [ 35 + "string-width@4.2.3", 36 + "strip-ansi@6.0.1", 37 + "wrap-ansi" 38 + ] 39 + }, 40 + "color-convert@2.0.1": { 41 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 42 + "dependencies": [ 43 + "color-name" 44 + ] 45 + }, 46 + "color-name@1.1.4": { 47 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 48 + }, 49 + "cowsay@1.6.0": { 50 + "integrity": "sha512-8C4H1jdrgNusTQr3Yu4SCm+ZKsAlDFbpa0KS0Z3im8ueag+9pGOf3CrioruvmeaW/A5oqg9L0ar6qeftAh03jw==", 51 + "dependencies": [ 52 + "get-stdin", 53 + "string-width@2.1.1", 54 + "strip-final-newline", 55 + "yargs" 56 + ], 57 + "bin": true 58 + }, 59 + "decamelize@1.2.0": { 60 + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" 61 + }, 62 + "emoji-regex@8.0.0": { 63 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 64 + }, 65 + "find-up@4.1.0": { 66 + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 67 + "dependencies": [ 68 + "locate-path", 69 + "path-exists" 70 + ] 71 + }, 72 + "get-caller-file@2.0.5": { 73 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 74 + }, 75 + "get-stdin@8.0.0": { 76 + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==" 77 + }, 78 + "is-fullwidth-code-point@2.0.0": { 79 + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" 80 + }, 81 + "is-fullwidth-code-point@3.0.0": { 82 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 83 + }, 84 + "locate-path@5.0.0": { 85 + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 86 + "dependencies": [ 87 + "p-locate" 88 + ] 89 + }, 90 + "p-limit@2.3.0": { 91 + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 92 + "dependencies": [ 93 + "p-try" 94 + ] 95 + }, 96 + "p-locate@4.1.0": { 97 + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 98 + "dependencies": [ 99 + "p-limit" 100 + ] 101 + }, 102 + "p-try@2.2.0": { 103 + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 104 + }, 105 + "path-exists@4.0.0": { 106 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 107 + }, 108 + "require-directory@2.1.1": { 109 + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" 110 + }, 111 + "require-main-filename@2.0.0": { 112 + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 113 + }, 114 + "set-blocking@2.0.0": { 115 + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" 116 + }, 117 + "string-width@2.1.1": { 118 + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 119 + "dependencies": [ 120 + "is-fullwidth-code-point@2.0.0", 121 + "strip-ansi@4.0.0" 122 + ] 123 + }, 124 + "string-width@4.2.3": { 125 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 126 + "dependencies": [ 127 + "emoji-regex", 128 + "is-fullwidth-code-point@3.0.0", 129 + "strip-ansi@6.0.1" 130 + ] 131 + }, 132 + "strip-ansi@4.0.0": { 133 + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", 134 + "dependencies": [ 135 + "ansi-regex@3.0.1" 136 + ] 137 + }, 138 + "strip-ansi@6.0.1": { 139 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 140 + "dependencies": [ 141 + "ansi-regex@5.0.1" 142 + ] 143 + }, 144 + "strip-final-newline@2.0.0": { 145 + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" 146 + }, 147 + "which-module@2.0.1": { 148 + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" 149 + }, 150 + "wrap-ansi@6.2.0": { 151 + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 152 + "dependencies": [ 153 + "ansi-styles", 154 + "string-width@4.2.3", 155 + "strip-ansi@6.0.1" 156 + ] 157 + }, 158 + "y18n@4.0.3": { 159 + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" 160 + }, 161 + "yargs-parser@18.1.3": { 162 + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 163 + "dependencies": [ 164 + "camelcase", 165 + "decamelize" 166 + ] 167 + }, 168 + "yargs@15.4.1": { 169 + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", 170 + "dependencies": [ 171 + "cliui", 172 + "decamelize", 173 + "find-up", 174 + "get-caller-file", 175 + "require-directory", 176 + "require-main-filename", 177 + "set-blocking", 178 + "string-width@4.2.3", 179 + "which-module", 180 + "y18n", 181 + "yargs-parser" 182 + ] 183 + } 184 + }, 185 + "remote": { 186 + "https://deno.land/x/case@2.2.0/camelCase.ts": "b9a4cf361a7c9740ecb75e00b5e2c006bd4e5d40e442d26c5f2760286fa66796", 187 + "https://deno.land/x/case@2.2.0/constantCase.ts": "c698fc32f00cd267c1684b1d413d784260d7e7798f2bf506803e418497d839b5", 188 + "https://deno.land/x/case@2.2.0/dotCase.ts": "03ae55d5635e6a4ca894a003d9297cd9cd283af2e7d761dd3de13663849a9423", 189 + "https://deno.land/x/case@2.2.0/headerCase.ts": "3f6c8ab2ab30a88147326bce28a00d1189ec98ab61c83ab72ce79e852afddc4a", 190 + "https://deno.land/x/case@2.2.0/lowerCase.ts": "d75eb55cadfa589f9f2a973924a8a209054477d9574da669410f4d817ab25b41", 191 + "https://deno.land/x/case@2.2.0/lowerFirstCase.ts": "b001efbf2d715b53d066b22cdbf8eda7f99aa7108e3d12fb02f80d499bae93d9", 192 + "https://deno.land/x/case@2.2.0/mod.ts": "28b0b1329c7b18730799ac05627a433d9547c04b9bfb429116247c60edecd97b", 193 + "https://deno.land/x/case@2.2.0/normalCase.ts": "085c8b6f9d69283c8b86f2e504d43278c2be8b7e56a3ed8d4a5f395e398bdc29", 194 + "https://deno.land/x/case@2.2.0/paramCase.ts": "a234c9c17dfbaddee647b6571c2c90e8f6530123fed26c4546f4063d67c1609f", 195 + "https://deno.land/x/case@2.2.0/pascalCase.ts": "4b3ef0a68173871a821d306d4067e8f72d42aeeef1eea6aeab30af6bfa3d7427", 196 + "https://deno.land/x/case@2.2.0/pathCase.ts": "330a34b4df365b0291d8e36158235340131730aae6f6add66962ed2d0fbead4a", 197 + "https://deno.land/x/case@2.2.0/sentenceCase.ts": "b312cef147a13b58ffdf3c36bf55b33aa8322c91f4aa9b32318f3911bb92327f", 198 + "https://deno.land/x/case@2.2.0/snakeCase.ts": "e5ac1e08532ca397aa3150a0a3255d59f63a186d934e5094a8ffd24cbca7f955", 199 + "https://deno.land/x/case@2.2.0/swapCase.ts": "bb03742fcf613f733890680ceca1b39b65ed290f36a317fcd47edd517c4e0e1e", 200 + "https://deno.land/x/case@2.2.0/titleCase.ts": "c287131ea2c955e67cdd5cf604de96d31a8e2813305759922b9ed27e3be354e7", 201 + "https://deno.land/x/case@2.2.0/types.ts": "8e2bd6edaa27c0d1972c0d5b76698564740f37b4d3787d58d1fb5f48de611e61", 202 + "https://deno.land/x/case@2.2.0/upperCase.ts": "6cca267bb04d098bf4abf21e42e60c3e68ede89b12e525643c6b6eff3e10de34", 203 + "https://deno.land/x/case@2.2.0/upperFirstCase.ts": "b964c2d8d3a85c78cd35f609135cbde99d84b9522a21470336b5af80a37facbd", 204 + "https://deno.land/x/case@2.2.0/vendor/camelCaseRegexp.ts": "7d9ff02aad4ab6429eeab7c7353f7bcdd6cc5909a8bd3dda97918c8bbb7621ae", 205 + "https://deno.land/x/case@2.2.0/vendor/camelCaseUpperRegexp.ts": "292de54a698370f90adcdf95727993d09888b7f33d17f72f8e54ba75f7791787", 206 + "https://deno.land/x/case@2.2.0/vendor/nonWordRegexp.ts": "c1a052629a694144b48c66b0175a22a83f4d61cb40f4e45293fc5d6b123f927e" 207 + }, 208 + "workspace": { 209 + "members": { 210 + "sub1": { 211 + "dependencies": [ 212 + "jsr:@std/cli@1.0.17", 213 + "npm:cowsay@1.6.0" 214 + ] 215 + }, 216 + "sub2": { 217 + "dependencies": [ 218 + "jsr:@luca/cases@1.0.0", 219 + "jsr:@std/cli@1.0.17", 220 + "npm:cowsay@1.6.0" 221 + ] 222 + } 223 + } 224 + } 225 + }
+10
pkgs/test/build-deno-package/workspaces/sub1/deno.json
··· 1 + { 2 + "tasks": { 3 + "build": "deno run --allow-all main.ts" 4 + }, 5 + "imports": { 6 + "@std/cli": "jsr:@std/cli@1.0.17", 7 + "cowsay": "npm:cowsay@1.6.0", 8 + "cases": "https://deno.land/x/case@2.2.0/mod.ts" 9 + } 10 + }
+13
pkgs/test/build-deno-package/workspaces/sub1/main.ts
··· 1 + import { say } from "cowsay"; 2 + import { pascalCase } from "cases"; 3 + import { parseArgs } from "@std/cli"; 4 + 5 + const flags = parseArgs(Deno.args, { 6 + string: ["text"], 7 + }); 8 + 9 + if (!flags.text) { 10 + throw "--text required but not specified"; 11 + } 12 + 13 + console.log(pascalCase(say({ text: flags.text })));
+10
pkgs/test/build-deno-package/workspaces/sub2/deno.json
··· 1 + { 2 + "tasks": { 3 + "build": "deno run --allow-all main.ts" 4 + }, 5 + "imports": { 6 + "@luca/cases": "jsr:@luca/cases@1.0.0", 7 + "@std/cli": "jsr:@std/cli@1.0.17", 8 + "cowsay": "npm:cowsay@1.6.0" 9 + } 10 + }
+13
pkgs/test/build-deno-package/workspaces/sub2/main.ts
··· 1 + import { camelCase } from "@luca/cases"; 2 + import { say } from "cowsay"; 3 + import { parseArgs } from "@std/cli"; 4 + 5 + const flags = parseArgs(Deno.args, { 6 + string: ["text"], 7 + }); 8 + 9 + if (!flags.text) { 10 + throw "--text required but not specified"; 11 + } 12 + 13 + console.log(camelCase(say({ text: flags.text })));
+2
pkgs/test/default.nix
··· 226 226 rust-hooks = recurseIntoAttrs (callPackages ../build-support/rust/hooks/test { }); 227 227 228 228 setup-hooks = recurseIntoAttrs (callPackages ../build-support/setup-hooks/tests { }); 229 + 230 + build-deno-package = callPackage ./build-deno-package { }; 229 231 }
+5 -5
pkgs/tools/filesystems/garage/default.nix
··· 131 131 cargoPatches = [ ./update-time.patch ]; 132 132 }; 133 133 134 - garage_1_1_0 = generic { 135 - version = "1.1.0"; 136 - hash = "sha256-ysf/GYR39trXTPRdw8uB6E4YDp4nAR8dbU9k9rQTxz0="; 137 - cargoHash = "sha256-SkDr/e9YZ3raTGucaiv/RV2zF9tEDIeqZeri6Xk3xEU="; 134 + garage_1_2_0 = generic { 135 + version = "1.2.0"; 136 + hash = "sha256-JoOwCbChSL7mjegnLHOH2Abfmsnw9BwNsjFj7nqBN6o="; 137 + cargoHash = "sha256-vcvD0Fn/etnAuXrM3+rj16cqpEmW2nzRmrjXsftKTFE="; 138 138 }; 139 139 140 140 garage_0_8 = garage_0_8_7; 141 141 142 142 garage_0_9 = garage_0_9_4; 143 143 144 - garage_1_x = garage_1_1_0; 144 + garage_1_x = garage_1_2_0; 145 145 146 146 garage = garage_1_x; 147 147 }
+1
pkgs/top-level/aliases.nix
··· 690 690 flutter319 = throw "flutter319 has been removed because it isn't updated anymore, and no packages in nixpkgs use it. If you still need it, use flutter.mkFlutter to get a custom version"; # Added 2024-12-03 691 691 flutter322 = throw "flutter322 has been removed because it isn't updated anymore, and no packages in nixpkgs use it. If you still need it, use flutter.mkFlutter to get a custom version"; # Added 2024-10-05 692 692 flutter323 = throw "flutter323 has been removed because it isn't updated anymore, and no packages in nixpkgs use it. If you still need it, use flutter.mkFlutter to get a custom version"; # Added 2024-10-05 693 + flutter326 = throw "flutter326 has been removed because it isn't updated anymore, and no packages in nixpkgs use it. If you still need it, use flutter.mkFlutter to get a custom version"; # Added 2025-06-08 693 694 fluxctl = throw "fluxctl is unmaintained and has been removed. Migration to flux2 is recommended"; # Added 2025-05-11 694 695 fluxus = throw "fluxus has been removed because it hasn't been updated in 9 years and depended on insecure Racket 7.9"; # Added 2024-12-06 695 696 fmt_8 = throw "fmt_8 has been removed as it is obsolete and was no longer used in the tree"; # Added 2024-11-12
+7 -2
pkgs/top-level/all-packages.nix
··· 3040 3040 garage_0_9 3041 3041 garage_0_8_7 3042 3042 garage_0_9_4 3043 - garage_1_1_0 3043 + garage_1_2_0 3044 3044 garage_1_x 3045 3045 ; 3046 3046 ··· 3627 3627 nodePackages = dontRecurseIntoAttrs nodejs.pkgs; 3628 3628 3629 3629 node2nix = nodePackages.node2nix; 3630 + 3631 + buildDenoPackage = callPackage ../build-support/deno/build-deno-package { }; 3632 + 3633 + inherit (callPackages ../build-support/deno/fetch-deno-deps { }) fetchDenoDeps; 3634 + 3635 + denoHooks = callPackage ../build-support/deno/build-deno-package/hooks { }; 3630 3636 3631 3637 kcollectd = libsForQt5.callPackage ../tools/misc/kcollectd { }; 3632 3638 ··· 5059 5065 flutter332 = flutterPackages.v3_32; 5060 5066 flutter329 = flutterPackages.v3_29; 5061 5067 flutter327 = flutterPackages.v3_27; 5062 - flutter326 = flutterPackages.v3_26; 5063 5068 flutter324 = flutterPackages.v3_24; 5064 5069 5065 5070 fpc = callPackage ../development/compilers/fpc { };
+4
pkgs/top-level/ocaml-packages.nix
··· 1654 1654 1655 1655 path_glob = callPackage ../development/ocaml-modules/path_glob { }; 1656 1656 1657 + patricia-tree = callPackage ../development/ocaml-modules/patricia-tree { }; 1658 + 1657 1659 pbkdf = callPackage ../development/ocaml-modules/pbkdf { }; 1658 1660 1659 1661 pbrt = callPackage ../development/ocaml-modules/pbrt { }; ··· 1777 1779 printbox-text = callPackage ../development/ocaml-modules/printbox/text.nix { }; 1778 1780 1779 1781 process = callPackage ../development/ocaml-modules/process { }; 1782 + 1783 + processor = callPackage ../development/ocaml-modules/processor { }; 1780 1784 1781 1785 prometheus = callPackage ../development/ocaml-modules/prometheus { }; 1782 1786
+6
pkgs/top-level/python-packages.nix
··· 15496 15496 15497 15497 robotframework = callPackage ../development/python-modules/robotframework { }; 15498 15498 15499 + robotframework-assertion-engine = 15500 + callPackage ../development/python-modules/robotframework-assertion-engine 15501 + { }; 15502 + 15499 15503 robotframework-databaselibrary = 15500 15504 callPackage ../development/python-modules/robotframework-databaselibrary 15501 15505 { }; ··· 17811 17815 torchWithoutCuda = self.torch.override { cudaSupport = false; }; 17812 17816 17813 17817 torchWithoutRocm = self.torch.override { rocmSupport = false; }; 17818 + 17819 + torchao = callPackage ../development/python-modules/torchao { }; 17814 17820 17815 17821 torchaudio = callPackage ../development/python-modules/torchaudio { }; 17816 17822