@pnpm/pnpr 0.0.0-26070301 → 0.1.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +118 -0
- package/install.js +24 -0
- package/package.json +12 -12
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# @pnpm/pnpr
|
|
2
|
+
|
|
3
|
+
## 0.1.0-alpha.10
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- A shared build artifact publication that cannot unregister itself no longer stops the registry reclaiming space or refusing further publications. A publication says at intervals that it is still working, and a registration that has gone quiet for an hour is written off, so a publication whose bookkeeping write failed stops holding back the collector that reclaims unreferenced blobs and returns the compatibility scopes a failed publication claimed, and stops counting toward the limit on publications in flight.
|
|
8
|
+
|
|
9
|
+
## 0.1.0-alpha.9
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- Made the signed shared-artifact cache horizontally scalable with S3-compatible storage and an independent top-level `artifacts` feature toggle.
|
|
14
|
+
|
|
15
|
+
- Generalized the experimental shared-artifact protocol so candidates and signed payloads identify a discriminated subject. Dependency side effects use package and source-integrity subjects, while workspace tasks use project and task subjects.
|
|
16
|
+
|
|
17
|
+
This changes shared-artifact request bodies and signed payloads. A pnpr server and its clients have to be on matching versions.
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- A published build artifact is now immutable: one input key and one set of compatibility constraints admit one artifact, so publishing a different one over it answers `409 Conflict`, the same as a re-published `name@version`. Republishing the identical artifact still succeeds. Artifacts already stored by an earlier version keep their slot, so upgrading a populated registry does not leave them replaceable.
|
|
22
|
+
|
|
23
|
+
- A published build artifact is now immutable for every consumer it can reach, not only for the exact compatibility constraints it declares. Publishing an artifact that reaches a machine an existing one already reaches answers `409 Conflict`, so a later universal, broader, or higher-floor build can no longer take precedence over the artifact a consumer already receives. Publishing across a platform matrix is unaffected: artifacts for different operating systems, architectures, or Node majors reach no machine in common and coexist as before.
|
|
24
|
+
|
|
25
|
+
- pnpr reclaims unreferenced shared artifact blobs after ambiguous object-storage write failures once active publications drain.
|
|
26
|
+
|
|
27
|
+
- Recognize `pnpm install --fix-lockfile`, including filtered installs, and regenerate broken lockfile metadata while preserving compatible locked versions [pnpm/pnpm#14250](https://github.com/pnpm/pnpm/issues/14250).
|
|
28
|
+
|
|
29
|
+
- pnpr retains shared artifact quota after object storage reports an ambiguous write failure.
|
|
30
|
+
|
|
31
|
+
## 0.1.0-alpha.8
|
|
32
|
+
|
|
33
|
+
### Minor Changes
|
|
34
|
+
|
|
35
|
+
- Added an opt-in proof of concept that lets installs reuse a dependency's build output across machines, by publishing and restoring signed, organization-scoped artifacts through pnpr instead of running the lifecycle scripts locally.
|
|
36
|
+
|
|
37
|
+
Configure it with the new `remoteSideEffectsCache` setting. A workspace names the eligible `organization` and `packages`; everything describing the act of signing — `publish`, `keyId`, `builderId`, `trustedKeys`, `privateKey` and the provenance fields — is refused in `pnpm-workspace.yaml` and read from the global config file or the environment instead.
|
|
38
|
+
|
|
39
|
+
- Hosted pnpr registries now serve newly published original artifacts from registry-scoped SHA-512 digest URLs.
|
|
40
|
+
|
|
41
|
+
- Allowed `pnpm update --patches` to refresh registry revisions through a configured pnpr server while retaining locked package versions.
|
|
42
|
+
|
|
43
|
+
- Added explicit registry revision selection with `<version>+rN` and `pnpm update --patches` for refreshing revision artifacts without changing package versions. Registry-backed lockfile policy checks recognize historical revisions, and pnpr now preserves safe revision histories from upstream registries.
|
|
44
|
+
|
|
45
|
+
- Added support for registry replacement tarballs using standard integrity values, explicit revision fields, registry routing from the `registries` setting, non-redirecting integrity-addressed URLs, canonical safe-integer revision numbers, and pnpr proxying for immutable upstream revision artifacts.
|
|
46
|
+
|
|
47
|
+
### Patch Changes
|
|
48
|
+
|
|
49
|
+
- Forward `patchedDependencies` hashes and `packageExtensions` to pnpr so server-side resolution preserves patches and package extensions in the lockfile and installed packages.
|
|
50
|
+
|
|
51
|
+
## 0.1.0-alpha.7
|
|
52
|
+
|
|
53
|
+
### Minor Changes
|
|
54
|
+
|
|
55
|
+
- Packument responses now carry a `Last-Modified` header derived from the document's `time.modified`, so a client's release-age check can learn the package-level last-publish bound from a cheap `HEAD` probe instead of downloading the metadata body.
|
|
56
|
+
|
|
57
|
+
- A pnpr resolve request now carries the client's registries the way the `registries` setting declares them — keyed by URL, with the scopes routed to each, the bare-specifier prefix each answers to, and each one's `serverType` — in place of the prefix map it used to send.
|
|
58
|
+
|
|
59
|
+
The server routes them through the same inversion the config reader runs, so a pnpr-served install resolves a scoped dependency from the registry that scope is routed to, which it previously could not: only the default registry and the prefix-addressed ones reached the server. A declared `serverType` reaches it too, so the tarball URLs pnpr omits from the lockfile match the ones the client reconstructs.
|
|
60
|
+
|
|
61
|
+
Built-in scope routes the project has not pointed elsewhere are not declared, so a pnpr server's allowlist is not asked about `npm.jsr.io` on requests that resolve no JSR package.
|
|
62
|
+
|
|
63
|
+
A registry a request only declares is no longer refused up front for being off the server's allowlist — a client describes its whole configuration, including scopes a given resolve never reaches, so a stray `@scope:registry` in a developer's `~/.npmrc` no longer fails every install against a pnpr server that does not serve it. The boundary moves to the fetch itself: an origin the resolve does reach is refused before the request leaves the server, with the same message.
|
|
64
|
+
|
|
65
|
+
This changes the resolve and verify-lockfile request bodies. A pnpr server and its clients have to be on matching versions; the protocol is still experimental and unversioned.
|
|
66
|
+
|
|
67
|
+
- A resolve request now carries the client's `resolutionMode`, so an install delegated to a pnpr server picks versions the way the client would. `time-based` and `lowest-direct` reached the server as nothing at all, leaving it on its `highest` default: the returned lockfile pinned the highest satisfying version of every dependency, and the setting appeared to be ignored.
|
|
68
|
+
|
|
69
|
+
This adds a field to the resolve request body. A server older than its client ignores it and keeps resolving `highest`; the protocol is still experimental and unversioned.
|
|
70
|
+
|
|
71
|
+
### Patch Changes
|
|
72
|
+
|
|
73
|
+
- Fixed `pnpm` installs using pnpr to honor the client's `autoInstallPeers`, `dedupePeers`, and `excludeLinksFromLockfile` settings [pnpm/pnpm#13389](https://github.com/pnpm/pnpm/issues/13389).
|
|
74
|
+
|
|
75
|
+
## 0.1.0-alpha.6
|
|
76
|
+
|
|
77
|
+
### Patch Changes
|
|
78
|
+
|
|
79
|
+
- Validated forwarded catalog targets and kept catalog-specific resolutions isolated in the server cache.
|
|
80
|
+
|
|
81
|
+
## 0.1.0-alpha.5
|
|
82
|
+
|
|
83
|
+
### Patch Changes
|
|
84
|
+
|
|
85
|
+
- Fixed `catalog:` references in dependencies and overrides failing to resolve when installing through a pnpr server, which errored with "No catalog entry '<name>' was found for catalog 'default'." even though the catalog entry existed. Also fixed a crash on Windows when installing a nested workspace member (e.g. `packages/foo`) through a pnpr server [#13232](https://github.com/pnpm/pnpm/issues/13232).
|
|
86
|
+
|
|
87
|
+
## 0.1.0-alpha.4
|
|
88
|
+
|
|
89
|
+
### Patch Changes
|
|
90
|
+
|
|
91
|
+
- Fixed Pacquet workspace commands to honor project filters, preserve complete lockfile state, and materialize only the selected dependency closure, including pnpr-backed installs.
|
|
92
|
+
|
|
93
|
+
- Fixed pnpr workspace resolution to preserve project names and versions for `workspace:` dependencies.
|
|
94
|
+
|
|
95
|
+
## 0.1.0-alpha.3
|
|
96
|
+
|
|
97
|
+
### Patch Changes
|
|
98
|
+
|
|
99
|
+
- The `--help` text now reads as user-facing help rather than developer documentation. Command and flag descriptions say what each option does for you, and the leftover markdown that was printing verbatim in the terminal — intra-doc links, an inline link, and an HTML-like path placeholder — has been cleaned out.
|
|
100
|
+
|
|
101
|
+
## 0.1.0-alpha.2
|
|
102
|
+
|
|
103
|
+
### Patch Changes
|
|
104
|
+
|
|
105
|
+
- Bump version.
|
|
106
|
+
|
|
107
|
+
## 0.1.0-alpha.1
|
|
108
|
+
|
|
109
|
+
### Patch Changes
|
|
110
|
+
|
|
111
|
+
- On publish, the README of the `latest` version is now hoisted to the packument's top-level `readme` (and `readmeFilename`) field, matching npm and verdaccio. Publish clients only send the readme inside the version manifest, so without this a package published to pnpr exposed no top-level readme for full-packument consumers and registry UIs to render.
|
|
112
|
+
|
|
113
|
+
## 0.1.0-alpha.0
|
|
114
|
+
|
|
115
|
+
### Minor Changes
|
|
116
|
+
|
|
117
|
+
- `@pnpm/pnpr` is now versioned with changesets and released from the unified release workflow. Versions switch from the `0.0.0-<datestamp>` scheme to semver, starting the 0.1.0 prerelease line at 0.1.0-alpha.0.
|
|
118
|
+
- The install script exits without error in the pnpm monorepo checkout, where the per-platform binary packages are not generated.
|
package/install.js
CHANGED
|
@@ -44,6 +44,13 @@ const PLATFORMS = {
|
|
|
44
44
|
setup()
|
|
45
45
|
|
|
46
46
|
function setup () {
|
|
47
|
+
// The committed manifest has no `optionalDependencies`; generate-packages.mjs
|
|
48
|
+
// adds them at release time. Without them this is the monorepo checkout, where
|
|
49
|
+
// the wrapper is a workspace package and there is no native binary to link.
|
|
50
|
+
if (readOwnManifest().optionalDependencies == null) {
|
|
51
|
+
return
|
|
52
|
+
}
|
|
53
|
+
|
|
47
54
|
const candidates = getBinCandidates()
|
|
48
55
|
if (candidates.length === 0) {
|
|
49
56
|
fail(`@pnpm/pnpr does not ship a prebuilt binary for ${platform}-${arch}.`)
|
|
@@ -142,6 +149,23 @@ function fail (message) {
|
|
|
142
149
|
process.exit(1)
|
|
143
150
|
}
|
|
144
151
|
|
|
152
|
+
// A successful read with no optionalDependencies is the dev checkout (setup
|
|
153
|
+
// no-ops there); a read/parse failure is a corrupt published package and must
|
|
154
|
+
// not be silently swallowed into that same no-op path.
|
|
155
|
+
function readOwnManifest () {
|
|
156
|
+
const manifestPath = path.join(ownDir, 'package.json')
|
|
157
|
+
let manifest
|
|
158
|
+
try {
|
|
159
|
+
manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'))
|
|
160
|
+
} catch (err) {
|
|
161
|
+
throw new Error(`Failed to read ${manifestPath}: ${err.message}`)
|
|
162
|
+
}
|
|
163
|
+
if (typeof manifest !== 'object' || manifest == null || Array.isArray(manifest)) {
|
|
164
|
+
throw new Error(`Expected ${manifestPath} to contain a JSON object`)
|
|
165
|
+
}
|
|
166
|
+
return manifest
|
|
167
|
+
}
|
|
168
|
+
|
|
145
169
|
/**
|
|
146
170
|
* Native binary specifiers to try, most-preferred first; empty when the host is
|
|
147
171
|
* unsupported. The linux glibc/musl pair is ordered by detected libc, which
|
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pnpm/pnpr",
|
|
3
|
+
"version": "0.1.0-alpha.10",
|
|
3
4
|
"description": "pnpm-compatible npm registry server, written in Rust",
|
|
4
5
|
"keywords": [
|
|
5
6
|
"pnpm",
|
|
@@ -14,6 +15,9 @@
|
|
|
14
15
|
"url": "https://github.com/pnpm/pnpm",
|
|
15
16
|
"directory": "pnpr/npm/pnpr"
|
|
16
17
|
},
|
|
18
|
+
"bin": {
|
|
19
|
+
"pnpr": "bin/pnpr"
|
|
20
|
+
},
|
|
17
21
|
"type": "module",
|
|
18
22
|
"engines": {
|
|
19
23
|
"node": ">=18.*"
|
|
@@ -23,21 +27,17 @@
|
|
|
23
27
|
"install.js",
|
|
24
28
|
"LICENSE.md"
|
|
25
29
|
],
|
|
26
|
-
"version": "0.0.0-26070301",
|
|
27
30
|
"optionalDependencies": {
|
|
28
|
-
"@pnpm/pnpr.win32-x64": "0.
|
|
29
|
-
"@pnpm/pnpr.win32-arm64": "0.
|
|
30
|
-
"@pnpm/pnpr.darwin-x64": "0.
|
|
31
|
-
"@pnpm/pnpr.darwin-arm64": "0.
|
|
32
|
-
"@pnpm/pnpr.linux-x64": "0.
|
|
33
|
-
"@pnpm/pnpr.linux-arm64": "0.
|
|
34
|
-
"@pnpm/pnpr.linux-x64-musl": "0.
|
|
35
|
-
"@pnpm/pnpr.linux-arm64-musl": "0.
|
|
31
|
+
"@pnpm/pnpr.win32-x64": "0.1.0-alpha.10",
|
|
32
|
+
"@pnpm/pnpr.win32-arm64": "0.1.0-alpha.10",
|
|
33
|
+
"@pnpm/pnpr.darwin-x64": "0.1.0-alpha.10",
|
|
34
|
+
"@pnpm/pnpr.darwin-arm64": "0.1.0-alpha.10",
|
|
35
|
+
"@pnpm/pnpr.linux-x64": "0.1.0-alpha.10",
|
|
36
|
+
"@pnpm/pnpr.linux-arm64": "0.1.0-alpha.10",
|
|
37
|
+
"@pnpm/pnpr.linux-x64-musl": "0.1.0-alpha.10",
|
|
38
|
+
"@pnpm/pnpr.linux-arm64-musl": "0.1.0-alpha.10"
|
|
36
39
|
},
|
|
37
40
|
"scripts": {
|
|
38
41
|
"preinstall": "node install.js"
|
|
39
|
-
},
|
|
40
|
-
"bin": {
|
|
41
|
-
"pnpr": "bin/pnpr"
|
|
42
42
|
}
|
|
43
43
|
}
|