@pnpm/resolving.npm-resolver 1102.1.2 → 1102.1.3

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.
Files changed (3) hide show
  1. package/CHANGELOG.md +1878 -0
  2. package/lib/fetch.js +18 -3
  3. package/package.json +26 -26
package/lib/fetch.js CHANGED
@@ -81,20 +81,31 @@ function consumeTrailingDigits(s, end) {
81
81
  export async function fetchMetadataFromFromRegistry(fetchOpts, pkgName, { authHeaderValue, etag: cachedEtag, fullMetadata, modified: cachedModified, registry, }) {
82
82
  const uri = toUri(pkgName, registry);
83
83
  const op = retry.operation(fetchOpts.retry);
84
+ const ifModifiedSince = cachedModified ? new Date(cachedModified).toUTCString() : undefined;
85
+ const hasValidator = Boolean(cachedEtag || ifModifiedSince);
84
86
  return new Promise((resolve, reject) => {
85
87
  op.attempt(async (attempt) => {
86
88
  let response;
87
89
  const startTime = Date.now();
88
90
  try {
89
- response = await fetchOpts.fetch(uri, {
91
+ const requestOptions = {
90
92
  authHeaderValue,
91
93
  compress: true,
92
94
  fullMetadata,
93
95
  ifNoneMatch: cachedEtag,
94
- ifModifiedSince: cachedModified ? new Date(cachedModified).toUTCString() : undefined,
96
+ ifModifiedSince,
95
97
  retry: fetchOpts.retry,
96
98
  timeout: fetchOpts.timeout,
97
- });
99
+ };
100
+ response = await fetchOpts.fetch(uri, requestOptions);
101
+ if (response.status === 304 && !hasValidator) {
102
+ response = await fetchOpts.fetch(uri, {
103
+ ...requestOptions,
104
+ headers: {
105
+ 'cache-control': 'no-cache',
106
+ },
107
+ });
108
+ }
98
109
  }
99
110
  catch (error) { // eslint-disable-line
100
111
  // Redact credentials embedded in the URL from the cause as well, not
@@ -112,6 +123,10 @@ export async function fetchMetadataFromFromRegistry(fetchOpts, pkgName, { authHe
112
123
  return;
113
124
  }
114
125
  if (response.status === 304) {
126
+ if (!hasValidator) {
127
+ reject(new PnpmError('META_NOT_MODIFIED_WITHOUT_CACHE', `Registry returned 304 for ${pkgName} without an existing cache to refresh.`));
128
+ return;
129
+ }
115
130
  resolve({ notModified: true });
116
131
  return;
117
132
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pnpm/resolving.npm-resolver",
3
- "version": "1102.1.2",
3
+ "version": "1102.1.3",
4
4
  "description": "Resolver for npm-hosted packages",
5
5
  "keywords": [
6
6
  "pnpm",
@@ -29,6 +29,23 @@
29
29
  "!*.map"
30
30
  ],
31
31
  "dependencies": {
32
+ "@pnpm/config.pick-registry-for-package": "1100.0.10",
33
+ "@pnpm/config.version-policy": "1100.1.7",
34
+ "@pnpm/constants": "1100.0.0",
35
+ "@pnpm/core-loggers": "1100.2.2",
36
+ "@pnpm/crypto.hash": "1100.0.1",
37
+ "@pnpm/error": "1100.0.1",
38
+ "@pnpm/fetching.types": "1100.0.2",
39
+ "@pnpm/fs.graceful-fs": "1100.1.0",
40
+ "@pnpm/resolving.jsr-specifier-parser": "1100.0.2",
41
+ "@pnpm/resolving.registry.pkg-metadata-filter": "1100.0.10",
42
+ "@pnpm/resolving.registry.types": "1100.1.4",
43
+ "@pnpm/resolving.resolver-base": "1100.5.2",
44
+ "@pnpm/store.cafs": "1100.1.13",
45
+ "@pnpm/store.index": "1100.2.1",
46
+ "@pnpm/types": "1101.4.0",
47
+ "@pnpm/workspace.range-resolver": "1100.0.2",
48
+ "@pnpm/workspace.spec-parser": "1100.0.0",
32
49
  "@zkochan/retry": "^0.2.0",
33
50
  "encode-registry": "^3.0.1",
34
51
  "lru-cache": "^11.5.0",
@@ -42,43 +59,26 @@
42
59
  "semver-utils": "^1.1.4",
43
60
  "ssri": "13.0.1",
44
61
  "validate-npm-package-name": "7.0.2",
45
- "version-selector-type": "^3.0.0",
46
- "@pnpm/config.pick-registry-for-package": "1100.0.9",
47
- "@pnpm/crypto.hash": "1100.0.1",
48
- "@pnpm/error": "1100.0.1",
49
- "@pnpm/config.version-policy": "1100.1.6",
50
- "@pnpm/fetching.types": "1100.0.2",
51
- "@pnpm/resolving.registry.pkg-metadata-filter": "1100.0.9",
52
- "@pnpm/resolving.registry.types": "1100.1.3",
53
- "@pnpm/resolving.jsr-specifier-parser": "1100.0.2",
54
- "@pnpm/resolving.resolver-base": "1100.5.1",
55
- "@pnpm/types": "1101.3.2",
56
- "@pnpm/fs.graceful-fs": "1100.1.0",
57
- "@pnpm/workspace.range-resolver": "1100.0.2",
58
- "@pnpm/store.index": "1100.2.1",
59
- "@pnpm/workspace.spec-parser": "1100.0.0",
60
- "@pnpm/store.cafs": "1100.1.12",
61
- "@pnpm/core-loggers": "1100.2.1",
62
- "@pnpm/constants": "1100.0.0"
62
+ "version-selector-type": "^3.0.0"
63
63
  },
64
64
  "peerDependencies": {
65
65
  "@pnpm/logger": "^1100.0.0",
66
- "@pnpm/worker": "^1100.2.3"
66
+ "@pnpm/worker": "^1100.2.4"
67
67
  },
68
68
  "devDependencies": {
69
69
  "@jest/globals": "30.4.1",
70
+ "@pnpm/logger": "1100.0.0",
71
+ "@pnpm/network.fetch": "1100.1.5",
72
+ "@pnpm/resolving.npm-resolver": "1102.1.3",
73
+ "@pnpm/test-fixtures": "1100.0.0",
74
+ "@pnpm/testing.mock-agent": "1101.0.5",
70
75
  "@types/normalize-path": "^3.0.2",
71
76
  "@types/ramda": "0.31.1",
72
77
  "@types/semver": "7.7.1",
73
78
  "@types/ssri": "^7.1.5",
74
79
  "@types/validate-npm-package-name": "^4.0.2",
75
80
  "load-json-file": "^7.0.1",
76
- "tempy": "3.0.0",
77
- "@pnpm/resolving.npm-resolver": "1102.1.2",
78
- "@pnpm/test-fixtures": "1100.0.0",
79
- "@pnpm/logger": "1100.0.0",
80
- "@pnpm/testing.mock-agent": "1101.0.4",
81
- "@pnpm/network.fetch": "1100.1.4"
81
+ "tempy": "3.0.0"
82
82
  },
83
83
  "engines": {
84
84
  "node": ">=22.13"