@jayxuz/verdaccio-offline-storage 3.0.0 → 3.1.0
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/README.md +6 -0
- package/README.zh-CN.md +6 -0
- package/build/OfflinePackageStorage.d.ts +11 -1
- package/build/OfflinePackageStorage.d.ts.map +1 -1
- package/build/OfflinePackageStorage.js +75 -5
- package/build/OfflinePackageStorage.js.map +1 -1
- package/build/OfflineStoragePlugin.d.ts.map +1 -1
- package/build/OfflineStoragePlugin.js +1 -0
- package/build/OfflineStoragePlugin.js.map +1 -1
- package/package.json +4 -4
- package/src-backup/OfflinePackageStorage.js +0 -122
- package/src-backup/OfflineStoragePlugin.js +0 -102
- package/src-backup/plugin.js +0 -4
package/README.md
CHANGED
|
@@ -25,6 +25,12 @@ This is an improved fork of the original `verdaccio-offline-storage` plugin. Key
|
|
|
25
25
|
- **Graceful Degradation**: Better error handling that doesn't break the entire request on partial failures
|
|
26
26
|
- **Detailed Logging**: More informative debug and trace logs for troubleshooting
|
|
27
27
|
|
|
28
|
+
### Metadata Operation Tracking (New in v3.1.0)
|
|
29
|
+
- **savePackage Override**: Tracks metadata save operations with detailed logging (version count, dist-tags, latest version)
|
|
30
|
+
- **updatePackage Override**: Monitors metadata update flow with before/after version tracking
|
|
31
|
+
- **Improved Offline Detection**: Enhanced `readPackage` logic with better null safety for `getMatchedPackagesSpec`
|
|
32
|
+
- **Storage Path Logging**: `getPackageStorage` now logs package storage path creation for debugging
|
|
33
|
+
|
|
28
34
|
### Code Quality
|
|
29
35
|
- **Modern JavaScript**: ES2020+ features, async/await, optional chaining
|
|
30
36
|
- **Type Definitions**: Full TypeScript type definitions included
|
package/README.zh-CN.md
CHANGED
|
@@ -25,6 +25,12 @@
|
|
|
25
25
|
- **优雅降级**:更好的错误处理,部分失败不会导致整个请求失败
|
|
26
26
|
- **详细日志**:更丰富的 debug 和 trace 日志,便于故障排查
|
|
27
27
|
|
|
28
|
+
### 元数据操作追踪(v3.1.0 新增)
|
|
29
|
+
- **savePackage 重写**:追踪元数据保存操作,记录详细日志(版本数量、dist-tags、最新版本)
|
|
30
|
+
- **updatePackage 重写**:监控元数据更新流程,记录更新前后的版本变化
|
|
31
|
+
- **改进的离线检测**:增强 `readPackage` 逻辑,改进 `getMatchedPackagesSpec` 的空值安全处理
|
|
32
|
+
- **存储路径日志**:`getPackageStorage` 现在记录包存储路径创建信息,便于调试
|
|
33
|
+
|
|
28
34
|
### 代码质量
|
|
29
35
|
- **现代 JavaScript**:ES2020+ 特性、async/await、可选链
|
|
30
36
|
- **类型定义**:包含完整的 TypeScript 类型定义
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Logger, Callback } from '@verdaccio/types';
|
|
1
|
+
import { Logger, Manifest, Callback } from '@verdaccio/types';
|
|
2
2
|
import { OfflineStorageConfig } from './types';
|
|
3
3
|
declare let LocalFS: any;
|
|
4
4
|
/**
|
|
@@ -12,6 +12,16 @@ export declare class OfflinePackageStorage extends LocalFS {
|
|
|
12
12
|
private config;
|
|
13
13
|
protected logger: Logger;
|
|
14
14
|
constructor(path: string, logger: Logger, config: OfflineStorageConfig);
|
|
15
|
+
/**
|
|
16
|
+
* 保存包元数据到本地文件
|
|
17
|
+
* 重写此方法以添加调试日志,跟踪元数据保存操作
|
|
18
|
+
*/
|
|
19
|
+
savePackage(name: string, value: Manifest, cb: Callback): void;
|
|
20
|
+
/**
|
|
21
|
+
* 更新包元数据
|
|
22
|
+
* 重写此方法以添加调试日志,跟踪元数据更新流程
|
|
23
|
+
*/
|
|
24
|
+
updatePackage(name: string, updateHandler: (data: Manifest, cb: Callback) => void, onWrite: (name: string, data: Manifest, cb: Callback) => void, transformPackage: (data: Manifest) => Manifest, onEnd: Callback): void;
|
|
15
25
|
/**
|
|
16
26
|
* Computes a package's definition that only lists the locally available versions.
|
|
17
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OfflinePackageStorage.d.ts","sourceRoot":"","sources":["../src/OfflinePackageStorage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"OfflinePackageStorage.d.ts","sourceRoot":"","sources":["../src/OfflinePackageStorage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAI/C,QAAA,IAAI,OAAO,EAAE,GAAG,CAAC;AAejB;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,OAAO;IAChD,OAAO,CAAC,MAAM,CAAuB;IACrC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEb,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB;IAYtE;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI;IAgC9D;;;OAGG;IACH,aAAa,CACX,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,KAAK,IAAI,EACrD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,KAAK,IAAI,EAC7D,gBAAgB,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,QAAQ,EAC9C,KAAK,EAAE,QAAQ,GACd,IAAI;IAgDP;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI;CAuH9C"}
|
|
@@ -37,16 +37,86 @@ class OfflinePackageStorage extends LocalFS {
|
|
|
37
37
|
super(path, logger);
|
|
38
38
|
this.config = config;
|
|
39
39
|
this.logger = logger;
|
|
40
|
+
// 添加构造函数日志,确认插件被加载
|
|
41
|
+
this.logger.warn({ path }, '[verdaccio-offline-storage] OfflinePackageStorage initialized for path: @{path}');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 保存包元数据到本地文件
|
|
45
|
+
* 重写此方法以添加调试日志,跟踪元数据保存操作
|
|
46
|
+
*/
|
|
47
|
+
savePackage(name, value, cb) {
|
|
48
|
+
const versionCount = Object.keys(value.versions || {}).length;
|
|
49
|
+
const distTags = value['dist-tags'] || {};
|
|
50
|
+
// 使用 warn 级别确保日志可见
|
|
51
|
+
this.logger.warn({
|
|
52
|
+
packageName: name,
|
|
53
|
+
versions: versionCount,
|
|
54
|
+
latest: distTags.latest,
|
|
55
|
+
tags: Object.keys(distTags).join(', ')
|
|
56
|
+
}, '[verdaccio-offline-storage/savePackage] Saving package @{packageName} with @{versions} versions, latest: @{latest}, tags: @{tags}');
|
|
57
|
+
// 调用父类方法保存元数据
|
|
58
|
+
super.savePackage(name, value, (err) => {
|
|
59
|
+
if (err) {
|
|
60
|
+
this.logger.error({ packageName: name, error: err.message }, '[verdaccio-offline-storage/savePackage] Failed to save package @{packageName}: @{error}');
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.logger.info({ packageName: name }, '[verdaccio-offline-storage/savePackage] Successfully saved package @{packageName}');
|
|
64
|
+
}
|
|
65
|
+
cb(err);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 更新包元数据
|
|
70
|
+
* 重写此方法以添加调试日志,跟踪元数据更新流程
|
|
71
|
+
*/
|
|
72
|
+
updatePackage(name, updateHandler, onWrite, transformPackage, onEnd) {
|
|
73
|
+
// 使用 warn 级别确保日志可见
|
|
74
|
+
this.logger.warn({ packageName: name }, '[verdaccio-offline-storage/updatePackage] Starting update for package @{packageName}');
|
|
75
|
+
super.updatePackage(name, (data, cb) => {
|
|
76
|
+
const beforeVersions = Object.keys(data.versions || {}).length;
|
|
77
|
+
this.logger.debug({ packageName: name, versions: beforeVersions }, '[verdaccio-offline-storage/updatePackage] Before update: @{packageName} has @{versions} versions');
|
|
78
|
+
updateHandler(data, cb);
|
|
79
|
+
}, (pkgName, data, cb) => {
|
|
80
|
+
const versionCount = Object.keys(data.versions || {}).length;
|
|
81
|
+
const distTags = data['dist-tags'] || {};
|
|
82
|
+
this.logger.info({
|
|
83
|
+
packageName: pkgName,
|
|
84
|
+
versions: versionCount,
|
|
85
|
+
latest: distTags.latest
|
|
86
|
+
}, '[verdaccio-offline-storage/updatePackage] Writing package @{packageName} with @{versions} versions, latest: @{latest}');
|
|
87
|
+
onWrite(pkgName, data, cb);
|
|
88
|
+
}, transformPackage, (err) => {
|
|
89
|
+
if (err) {
|
|
90
|
+
this.logger.error({ packageName: name, error: err?.message || err }, '[verdaccio-offline-storage/updatePackage] Update failed for @{packageName}: @{error}');
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.logger.info({ packageName: name }, '[verdaccio-offline-storage/updatePackage] Update completed for @{packageName}');
|
|
94
|
+
}
|
|
95
|
+
onEnd(err);
|
|
96
|
+
});
|
|
40
97
|
}
|
|
41
98
|
/**
|
|
42
99
|
* Computes a package's definition that only lists the locally available versions.
|
|
43
100
|
*/
|
|
44
101
|
readPackage(name, cb) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
102
|
+
// 尝试获取包的访问配置
|
|
103
|
+
let packageAccess = { proxy: [] };
|
|
104
|
+
const hasGetMatchedPackagesSpec = typeof this.config.getMatchedPackagesSpec === 'function';
|
|
105
|
+
if (hasGetMatchedPackagesSpec) {
|
|
106
|
+
packageAccess = this.config.getMatchedPackagesSpec(name) || { proxy: [] };
|
|
107
|
+
}
|
|
108
|
+
// 判断是否为 offline 模式
|
|
109
|
+
const hasProxy = packageAccess?.proxy && packageAccess.proxy.length > 0;
|
|
110
|
+
const offline = this.config.offline === true || !hasProxy;
|
|
111
|
+
// 添加详细的调试日志
|
|
112
|
+
this.logger.debug({
|
|
113
|
+
packageName: name,
|
|
114
|
+
offline,
|
|
115
|
+
hasProxy,
|
|
116
|
+
configOffline: this.config.offline,
|
|
117
|
+
hasGetMatchedPackagesSpec,
|
|
118
|
+
proxy: packageAccess?.proxy ? JSON.stringify(packageAccess.proxy) : 'undefined'
|
|
119
|
+
}, '[verdaccio-offline-storage/readPackage] Package @{packageName} mode check: offline=@{offline}, hasProxy=@{hasProxy}, configOffline=@{configOffline}, hasGetMatchedPackagesSpec=@{hasGetMatchedPackagesSpec}');
|
|
50
120
|
if (!offline) {
|
|
51
121
|
this.logger.debug({ packageName: name }, '[verdaccio-offline-storage/readPackage] Resolving package @{packageName} in online mode');
|
|
52
122
|
super.readPackage(name, cb);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OfflinePackageStorage.js","sourceRoot":"","sources":["../src/OfflinePackageStorage.ts"],"names":[],"mappings":";;;;;;AAAA,0CAAsC;AACtC,+BAAgC;AAChC,oDAA4B;AAI5B,sDAAsD;AACtD,kDAAkD;AAClD,IAAI,OAAY,CAAC;AACjB,IAAI,CAAC;IACH,oEAAoE;IACpE,OAAO,GAAG,OAAO,CAAC,8CAA8C,CAAC,CAAC,OAAO,CAAC;AAC5E,CAAC;AAAC,MAAM,CAAC;IACP,IAAI,CAAC;QACH,wDAAwD;QACxD,OAAO,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC,WAAW;YAC/C,OAAO,CAAC,uCAAuC,CAAC,CAAC,OAAO,CAAC;IACrE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;IAC7G,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAa,qBAAsB,SAAQ,OAAO;IAIhD,YAAY,IAAY,EAAE,MAAc,EAAE,MAA4B;QACpE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"OfflinePackageStorage.js","sourceRoot":"","sources":["../src/OfflinePackageStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OfflineStoragePlugin.d.ts","sourceRoot":"","sources":["../src/OfflineStoragePlugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI9D,QAAA,IAAI,aAAa,EAAE,GAAG,CAAC;AAgBvB;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,aAAa;IAC7D,SAAS,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACvC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;gBAEvB,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,aAAa;IAmBhE;;;OAGG;IACH,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA+C7B;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"OfflineStoragePlugin.d.ts","sourceRoot":"","sources":["../src/OfflineStoragePlugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI9D,QAAA,IAAI,aAAa,EAAE,GAAG,CAAC;AAgBvB;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,aAAa;IAC7D,SAAS,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACvC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;gBAEvB,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,aAAa;IAmBhE;;;OAGG;IACH,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA+C7B;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAAC,cAAc;CAUnE"}
|
|
@@ -79,6 +79,7 @@ class OfflineStoragePlugin extends LocalDatabase {
|
|
|
79
79
|
*/
|
|
80
80
|
getPackageStorage(packageName) {
|
|
81
81
|
const storagePath = (0, path_1.join)(this.config.storage, packageName);
|
|
82
|
+
this.logger.warn({ packageName, storagePath }, '[verdaccio-offline-storage/getPackageStorage] Creating storage for package @{packageName} at @{storagePath}');
|
|
82
83
|
return new OfflinePackageStorage_1.OfflinePackageStorage(storagePath, this.logger, this.config);
|
|
83
84
|
}
|
|
84
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OfflineStoragePlugin.js","sourceRoot":"","sources":["../src/OfflineStoragePlugin.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"OfflineStoragePlugin.js","sourceRoot":"","sources":["../src/OfflineStoragePlugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jayxuz/verdaccio-offline-storage",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Verdaccio storage plugin that treats local package cache as first class citizen for offline environments",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"node": ">=18.0.0"
|
|
40
40
|
},
|
|
41
41
|
"license": "MIT",
|
|
42
|
-
"repository": "https://github.com/
|
|
43
|
-
"author": "
|
|
44
|
-
"homepage": "https://github.com/
|
|
42
|
+
"repository": "https://github.com/jayxuz/verdaccio-offline-sync/packages/verdaccio-offline-storage",
|
|
43
|
+
"author": "jayxuz",
|
|
44
|
+
"homepage": "https://github.com/jayxuz/verdaccio-offline-sync/packages/verdaccio-offline-storage"
|
|
45
45
|
}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { readdir } from 'fs';
|
|
2
|
-
import { basename } from 'path';
|
|
3
|
-
import cmp from 'semver-compare';
|
|
4
|
-
import LocalFS from '@verdaccio/local-storage/lib/local-fs';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* `IPackageStorage` used internally for packages I/O operations.
|
|
8
|
-
*
|
|
9
|
-
* This works just like the `IPackageStorage` used by the local-storage plugin but modifying
|
|
10
|
-
* the packages definition files (the local-storage `package.json` files) so only the locally
|
|
11
|
-
* available versions appears in the definition. This does **NOT** modifies the original
|
|
12
|
-
* `package.json` file stored in the local-storage cache, meaning that all the modifications are
|
|
13
|
-
* done on the fly, on demand and in memory.
|
|
14
|
-
*
|
|
15
|
-
* @see https://verdaccio.org/docs/en/plugin-storage#api
|
|
16
|
-
* @see https://github.com/verdaccio/monorepo/tree/master/plugins/local-storage
|
|
17
|
-
*/
|
|
18
|
-
export default class OfflinePackageStorage extends LocalFS {
|
|
19
|
-
constructor(path, logger, config) {
|
|
20
|
-
super(path, logger);
|
|
21
|
-
this.config = config;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Computes a package's definition that only lists the locally available versions.
|
|
25
|
-
*
|
|
26
|
-
* @param {string} name Package name.
|
|
27
|
-
* @param cb Callback to invoke with the computed definition.
|
|
28
|
-
*/
|
|
29
|
-
readPackage(name, cb) {
|
|
30
|
-
const packageAccess = this.config.getMatchedPackagesSpec(name);
|
|
31
|
-
// It's offline if set explicitly in the config or if no proxy is defined for the package
|
|
32
|
-
const offline = this.config.offline || !packageAccess.proxy || !packageAccess.proxy.length;
|
|
33
|
-
if (!offline) {
|
|
34
|
-
this.logger.trace(
|
|
35
|
-
{
|
|
36
|
-
packageName: name,
|
|
37
|
-
},
|
|
38
|
-
'[verdaccio-offline-storage/readPackage] Resolving package @{packageName} in online mode'
|
|
39
|
-
);
|
|
40
|
-
super.readPackage(name, cb);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
this.logger.trace(
|
|
44
|
-
{
|
|
45
|
-
packageName: name,
|
|
46
|
-
},
|
|
47
|
-
'[verdaccio-offline-storage/readPackage] Resolving package @{packageName} in offline mode'
|
|
48
|
-
);
|
|
49
|
-
super.readPackage(name, (err, data) => {
|
|
50
|
-
if (err) {
|
|
51
|
-
cb(err);
|
|
52
|
-
} else {
|
|
53
|
-
this.logger.trace(
|
|
54
|
-
{
|
|
55
|
-
packageName: name,
|
|
56
|
-
},
|
|
57
|
-
'[verdaccio-offline-storage/readPackage] Discovering local versions for package: @{packageName}'
|
|
58
|
-
);
|
|
59
|
-
readdir(this.path, (err, items) => {
|
|
60
|
-
if (err) {
|
|
61
|
-
this.logger.trace(
|
|
62
|
-
{
|
|
63
|
-
err,
|
|
64
|
-
packageName: name,
|
|
65
|
-
},
|
|
66
|
-
'[verdaccio-offline-storage/readPackage/readdir] Error discovering package "@{packageName}" files: @{err}'
|
|
67
|
-
);
|
|
68
|
-
cb(err);
|
|
69
|
-
} else {
|
|
70
|
-
const localVersions = items
|
|
71
|
-
.filter(item => item.endsWith('.tgz'))
|
|
72
|
-
.map(item => item.substring(basename(name).length + 1, item.length - 4));
|
|
73
|
-
this.logger.trace(
|
|
74
|
-
{
|
|
75
|
-
packageName: name,
|
|
76
|
-
count: localVersions.length,
|
|
77
|
-
},
|
|
78
|
-
'[verdaccio-offline-storage/readPackage/readdir] Discovered @{count} items for package: @{packageName}'
|
|
79
|
-
);
|
|
80
|
-
const allVersions = Object.keys(data.versions);
|
|
81
|
-
const originalVersionCount = allVersions.length;
|
|
82
|
-
this.logger.trace(
|
|
83
|
-
{
|
|
84
|
-
packageName: name,
|
|
85
|
-
count: originalVersionCount,
|
|
86
|
-
},
|
|
87
|
-
'[verdaccio-offline-storage/readPackage/readdir] Analyzing @{count} declared versions for package: @{packageName}'
|
|
88
|
-
);
|
|
89
|
-
for (const version of allVersions) {
|
|
90
|
-
if (!localVersions.includes(version)) {
|
|
91
|
-
delete data.versions[version];
|
|
92
|
-
this.logger.trace(
|
|
93
|
-
{
|
|
94
|
-
packageName: name,
|
|
95
|
-
version,
|
|
96
|
-
},
|
|
97
|
-
'[verdaccio-offline-storage/readPackage/readdir] Removed @{packageName}@@{version}'
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
this.logger.trace(
|
|
102
|
-
{
|
|
103
|
-
packageName: name,
|
|
104
|
-
count: originalVersionCount - Object.keys(data.versions).length,
|
|
105
|
-
},
|
|
106
|
-
'[verdaccio-offline-storage/readPackage/readdir] Removed @{count} versions for package: @{packageName}'
|
|
107
|
-
);
|
|
108
|
-
data['dist-tags'].latest = Object.keys(data.versions).sort((a, b) => cmp(b, a))[0];
|
|
109
|
-
this.logger.trace(
|
|
110
|
-
{
|
|
111
|
-
packageName: name,
|
|
112
|
-
latest: data['dist-tags'].latest,
|
|
113
|
-
},
|
|
114
|
-
'[verdaccio-offline-storage/readPackage/readdir] Set latest version to @{latest} for package: @{packageName}'
|
|
115
|
-
);
|
|
116
|
-
cb(null, data);
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { join } from 'path';
|
|
2
|
-
import { readdir } from 'fs';
|
|
3
|
-
import LocalDatabase from '@verdaccio/local-storage';
|
|
4
|
-
import OfflinePackageStorage from './OfflinePackageStorage';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Verdaccio storage plugin (`IPluginStorage`) that provides only the locally available versions of
|
|
8
|
-
* packages cached in a local-storage storage.
|
|
9
|
-
*
|
|
10
|
-
* Basically, this is just like local-storage but modifying on the fly the available packages list
|
|
11
|
-
* and the packages definitions without altering the original files in the local-storage storage.
|
|
12
|
-
*
|
|
13
|
-
* @see https://verdaccio.org/docs/en/plugin-storage
|
|
14
|
-
* @see https://github.com/verdaccio/monorepo/tree/master/plugins/local-storage
|
|
15
|
-
*/
|
|
16
|
-
export default class OfflineStoragePlugin extends LocalDatabase {
|
|
17
|
-
constructor(config, options) {
|
|
18
|
-
super(config, options.logger);
|
|
19
|
-
// eslint-disable-next-line no-console
|
|
20
|
-
if (config.offline) {
|
|
21
|
-
options.logger.warn({}, 'Offline mode set explicitly in config. All packages will be resolved in offline mode.');
|
|
22
|
-
} else {
|
|
23
|
-
options.logger.warn(
|
|
24
|
-
{},
|
|
25
|
-
'Offline mode NOT set explicitly in config. Only packages with no `proxy` will be resolved in offline mode.'
|
|
26
|
-
);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Retrieves all the locally available packages names. Packages with no cached versions (only
|
|
32
|
-
* `package.json` file in the directory) are ignored.
|
|
33
|
-
*
|
|
34
|
-
* @param callback: The callback to invoke with the found packages names.
|
|
35
|
-
* @see https://verdaccio.org/docs/en/plugin-storage#api
|
|
36
|
-
*/
|
|
37
|
-
get(callback) {
|
|
38
|
-
const packages = [];
|
|
39
|
-
this.search(
|
|
40
|
-
(item, cb) => {
|
|
41
|
-
this.logger.debug(
|
|
42
|
-
{
|
|
43
|
-
packageName: item.name,
|
|
44
|
-
},
|
|
45
|
-
'[verdaccio-offline-storage/get/search] discovering local versions for package: @{packageName}'
|
|
46
|
-
);
|
|
47
|
-
readdir(item.path, (err, items) => {
|
|
48
|
-
if (err) {
|
|
49
|
-
this.logger.trace(
|
|
50
|
-
{
|
|
51
|
-
err,
|
|
52
|
-
packageName: item.name,
|
|
53
|
-
},
|
|
54
|
-
'[verdaccio-offline-storage/get/search/readdir] error discovering package "@{packageName}" files: @{err}'
|
|
55
|
-
);
|
|
56
|
-
cb(err);
|
|
57
|
-
} else {
|
|
58
|
-
if (items.find(item => item.endsWith('.tgz'))) {
|
|
59
|
-
packages.push(item.name);
|
|
60
|
-
this.logger.trace(
|
|
61
|
-
{
|
|
62
|
-
packageName: item.name,
|
|
63
|
-
},
|
|
64
|
-
'[verdaccio-offline-storage/get/search/readdir] found locally available package: "@{packageName}"'
|
|
65
|
-
);
|
|
66
|
-
} else {
|
|
67
|
-
this.logger.trace(
|
|
68
|
-
{
|
|
69
|
-
packageName: item.name,
|
|
70
|
-
},
|
|
71
|
-
'[verdaccio-offline-storage/get/search/readdir] no locally available version found for package: "@{packageName}"'
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
cb();
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
},
|
|
78
|
-
() => {
|
|
79
|
-
this.data.list = packages;
|
|
80
|
-
callback(null, packages);
|
|
81
|
-
this.logger.trace(
|
|
82
|
-
{
|
|
83
|
-
totalItems: packages.length,
|
|
84
|
-
},
|
|
85
|
-
'verdaccio-offline-storage: [get] full list of packages (@{totalItems}) has been fetched'
|
|
86
|
-
);
|
|
87
|
-
},
|
|
88
|
-
name => !name.startsWith('.') // so `.{sinopia|verdaccio}-db.json` gets ignored
|
|
89
|
-
);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Returns the `IPackageStorage` used internally for packages I/O operations.
|
|
94
|
-
*
|
|
95
|
-
* @param {string} packageName Package name.
|
|
96
|
-
* @return {OfflinePackageStorage}
|
|
97
|
-
* @see https://verdaccio.org/docs/en/plugin-storage#api
|
|
98
|
-
*/
|
|
99
|
-
getPackageStorage(packageName) {
|
|
100
|
-
return new OfflinePackageStorage(join(this.config.storage, packageName), this.logger, this.config);
|
|
101
|
-
}
|
|
102
|
-
}
|
package/src-backup/plugin.js
DELETED