@verdaccio/local-storage 10.5.0 → 10.5.1
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 +4 -6
- package/lib/_virtual/_rolldown/runtime.js +23 -0
- package/lib/dir-utils.js +77 -104
- package/lib/dir-utils.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +10 -14
- package/lib/index.js.map +1 -1
- package/lib/local-database.d.ts +9 -9
- package/lib/local-database.js +223 -258
- package/lib/local-database.js.map +1 -1
- package/lib/local-fs.d.ts +2 -3
- package/lib/local-fs.js +268 -314
- package/lib/local-fs.js.map +1 -1
- package/lib/pkg-utils.js +27 -35
- package/lib/pkg-utils.js.map +1 -1
- package/lib/token.d.ts +2 -2
- package/lib/token.js +75 -93
- package/lib/token.js.map +1 -1
- package/lib/utils.d.ts +2 -3
- package/package.json +17 -17
- package/lib/utils.js +0 -79
- package/lib/utils.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Used by 6.x versions
|
|
4
4
|
|
|
5
|
-
📦 File system storage plugin for verdaccio
|
|
5
|
+
📦 File system storage plugin for verdaccio
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/@verdaccio/local-storage)
|
|
8
8
|
[](https://circleci.com/gh/verdaccio/local-storage/tree/master)
|
|
@@ -31,8 +31,8 @@ The main object that handle a JSON database the private packages.
|
|
|
31
31
|
new LocalDatabase(config, logger);
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
- **config**: A verdaccio configuration instance.
|
|
35
|
+
- **logger**: A logger instance
|
|
36
36
|
|
|
37
37
|
### LocalFS
|
|
38
38
|
|
|
@@ -42,10 +42,8 @@ A class that handle an package instance in the File System
|
|
|
42
42
|
new LocalFS(packageStoragePath, logger);
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
45
|
## License
|
|
48
|
-
Verdaccio is [MIT licensed](https://github.com/verdaccio/local-storage/blob/master/LICENSE).
|
|
49
46
|
|
|
47
|
+
Verdaccio is [MIT licensed](https://github.com/verdaccio/local-storage/blob/master/LICENSE).
|
|
50
48
|
|
|
51
49
|
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fverdaccio%2Flocal-storage?ref=badge_large)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
+
key = keys[i];
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
+
get: ((k) => from[k]).bind(null, key),
|
|
13
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
+
value: mod,
|
|
20
|
+
enumerable: true
|
|
21
|
+
}) : target, mod));
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.__toESM = __toESM;
|
package/lib/dir-utils.js
CHANGED
|
@@ -1,110 +1,83 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var
|
|
10
|
-
var _path = require("path");
|
|
11
|
-
var _core = require("@verdaccio/core");
|
|
12
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
-
const debug = (0, _debug.default)('verdaccio:plugin:local-storage:dir-utils');
|
|
14
|
-
|
|
1
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.js");
|
|
2
|
+
let debug = require("debug");
|
|
3
|
+
debug = require_runtime.__toESM(debug);
|
|
4
|
+
let path = require("path");
|
|
5
|
+
let _verdaccio_core = require("@verdaccio/core");
|
|
6
|
+
let globby = require("globby");
|
|
7
|
+
globby = require_runtime.__toESM(globby);
|
|
8
|
+
//#region src/dir-utils.ts
|
|
9
|
+
var debug$1 = (0, debug.default)("verdaccio:plugin:local-storage:dir-utils");
|
|
15
10
|
/**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
async function getFolders(storagePath, pattern =
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
caseSensitiveMatch: true,
|
|
33
|
-
unique: true
|
|
34
|
-
// FIXME: add here list of forbidden patterns
|
|
35
|
-
// don't include scoped folders.
|
|
36
|
-
// ignore: [`@*`],
|
|
37
|
-
});
|
|
38
|
-
return files;
|
|
11
|
+
* Retrieve a list of absolute paths to all folders in the given storage path
|
|
12
|
+
* @param storagePath the base path of the storage
|
|
13
|
+
* @return a promise that resolves to an array of absolute paths
|
|
14
|
+
*/
|
|
15
|
+
async function getFolders(storagePath, pattern = "*") {
|
|
16
|
+
return await (0, globby.default)(pattern, {
|
|
17
|
+
cwd: storagePath,
|
|
18
|
+
expandDirectories: true,
|
|
19
|
+
onlyDirectories: true,
|
|
20
|
+
onlyFiles: false,
|
|
21
|
+
deep: 10,
|
|
22
|
+
dot: false,
|
|
23
|
+
followSymbolicLinks: true,
|
|
24
|
+
caseSensitiveMatch: true,
|
|
25
|
+
unique: true
|
|
26
|
+
});
|
|
39
27
|
}
|
|
40
|
-
|
|
41
28
|
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
29
|
+
* Search packages on the the storage. The storage could be
|
|
30
|
+
* - storage
|
|
31
|
+
* - pkg1
|
|
32
|
+
* - @company
|
|
33
|
+
* - pkg2 -> @scompany/pkg2
|
|
34
|
+
* - storage1
|
|
35
|
+
* - pkg2
|
|
36
|
+
* - pkg3
|
|
37
|
+
* - storage2
|
|
38
|
+
* - @scope
|
|
39
|
+
* - pkg4 > @scope/pkg4
|
|
40
|
+
* The search return a data structure like:
|
|
41
|
+
* [
|
|
42
|
+
* {
|
|
43
|
+
* name: 'pkg1', // package name could be @scope/pkg1
|
|
44
|
+
* path: absolute/path/package/name
|
|
45
|
+
* }
|
|
46
|
+
* ]
|
|
47
|
+
* @param {string} storagePath is the base path of the storage folder,
|
|
48
|
+
* inside could be packages, storages and @scope packages.
|
|
49
|
+
* @param {Set<string>} storages storages are defined peer package access pattern via `storage` property
|
|
50
|
+
* @param query is the search query from the user via npm search command.
|
|
51
|
+
* and are intended to organize packages in a tree structure.
|
|
52
|
+
* @returns {Promise<searchUtils.SearchItemPkg[]>}
|
|
53
|
+
*/
|
|
67
54
|
async function searchOnStorage(storagePath, storages) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const foldersOnStorage = await getFolders((0, _path.join)(storagePath, store), '*');
|
|
93
|
-
for (let pkgName of foldersOnStorage) {
|
|
94
|
-
if (_core.validatioUtils.isPackageNameScoped(pkgName)) {
|
|
95
|
-
const scopedPackages = await getFolders((0, _path.join)(storagePath, store, pkgName), '*');
|
|
96
|
-
const listScoped = scopedPackages.map(scoped => ({
|
|
97
|
-
name: `${pkgName}/${scoped}`,
|
|
98
|
-
scoped: pkgName
|
|
99
|
-
}));
|
|
100
|
-
results.push(...listScoped);
|
|
101
|
-
} else {
|
|
102
|
-
results.push({
|
|
103
|
-
name: pkgName
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return results;
|
|
55
|
+
const matchedStorages = Array.from(storages);
|
|
56
|
+
const storageFolders = Array.from(storages.keys());
|
|
57
|
+
debug$1("search on %o", storagePath);
|
|
58
|
+
debug$1("storage folders %o", matchedStorages.length);
|
|
59
|
+
const results = [];
|
|
60
|
+
const basePathFolders = (await getFolders(storagePath, "*")).filter((storageFolder) => !storageFolders.includes(storageFolder));
|
|
61
|
+
for (const store of basePathFolders) if (_verdaccio_core.validatioUtils.isPackageNameScoped(store)) {
|
|
62
|
+
const listScoped = (await getFolders((0, path.join)(storagePath, store), "*")).map((scoped) => ({
|
|
63
|
+
name: `${store}/${scoped}`,
|
|
64
|
+
scoped: store
|
|
65
|
+
}));
|
|
66
|
+
results.push(...listScoped);
|
|
67
|
+
} else results.push({ name: store });
|
|
68
|
+
for (const store of storageFolders) {
|
|
69
|
+
const foldersOnStorage = await getFolders((0, path.join)(storagePath, store), "*");
|
|
70
|
+
for (const pkgName of foldersOnStorage) if (_verdaccio_core.validatioUtils.isPackageNameScoped(pkgName)) {
|
|
71
|
+
const listScoped = (await getFolders((0, path.join)(storagePath, store, pkgName), "*")).map((scoped) => ({
|
|
72
|
+
name: `${pkgName}/${scoped}`,
|
|
73
|
+
scoped: pkgName
|
|
74
|
+
}));
|
|
75
|
+
results.push(...listScoped);
|
|
76
|
+
} else results.push({ name: pkgName });
|
|
77
|
+
}
|
|
78
|
+
return results;
|
|
109
79
|
}
|
|
80
|
+
//#endregion
|
|
81
|
+
exports.searchOnStorage = searchOnStorage;
|
|
82
|
+
|
|
110
83
|
//# sourceMappingURL=dir-utils.js.map
|
package/lib/dir-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dir-utils.js","names":[
|
|
1
|
+
{"version":3,"file":"dir-utils.js","names":[],"sources":["../src/dir-utils.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport globby from 'globby';\nimport { join } from 'path';\n\nimport type { searchUtils } from '@verdaccio/core';\nimport { validatioUtils } from '@verdaccio/core';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage:dir-utils');\n\n/**\n * Retrieve a list of absolute paths to all folders in the given storage path\n * @param storagePath the base path of the storage\n * @return a promise that resolves to an array of absolute paths\n */\nexport async function getFolders(storagePath: string, pattern = '*'): Promise<string[]> {\n // @ts-ignore - check why this fails, types are correct\n const files = await globby(pattern, {\n // @ts-ignore\n cwd: storagePath,\n expandDirectories: true,\n onlyDirectories: true,\n onlyFiles: false,\n // should not go deeper than the storage path (10 is reseaon for the storage))\n deep: 10,\n dot: false,\n followSymbolicLinks: true,\n caseSensitiveMatch: true,\n unique: true,\n // FIXME: add here list of forbidden patterns\n // don't include scoped folders.\n // ignore: [`@*`],\n });\n return files;\n}\n\n/**\n * Search packages on the the storage. The storage could be\n * - storage\n * - pkg1\n * - @company\n * - pkg2 -> @scompany/pkg2\n * - storage1\n * - pkg2\n * - pkg3\n * - storage2\n * - @scope\n * - pkg4 > @scope/pkg4\n * The search return a data structure like:\n * [\n * {\n * name: 'pkg1', // package name could be @scope/pkg1\n * path: absolute/path/package/name\n * }\n * ]\n * @param {string} storagePath is the base path of the storage folder,\n * inside could be packages, storages and @scope packages.\n * @param {Set<string>} storages storages are defined peer package access pattern via `storage` property\n * @param query is the search query from the user via npm search command.\n * and are intended to organize packages in a tree structure.\n * @returns {Promise<searchUtils.SearchItemPkg[]>}\n */\nexport async function searchOnStorage(\n storagePath: string,\n storages: Map<string, string>\n): Promise<searchUtils.SearchItemPkg[]> {\n const matchedStorages = Array.from(storages);\n const storageFolders = Array.from(storages.keys());\n debug('search on %o', storagePath);\n debug('storage folders %o', matchedStorages.length);\n const results: searchUtils.SearchItemPkg[] = [];\n // watch base path and ignore storage folders\n const basePathFolders = (await getFolders(storagePath, '*')).filter(\n (storageFolder) => !storageFolders.includes(storageFolder)\n );\n\n for (const store of basePathFolders) {\n if (validatioUtils.isPackageNameScoped(store)) {\n const scopedPackages = await getFolders(join(storagePath, store), '*');\n const listScoped = scopedPackages.map((scoped) => ({\n name: `${store}/${scoped}`,\n scoped: store,\n }));\n results.push(...listScoped);\n } else {\n results.push({\n name: store,\n });\n }\n }\n\n // iterate each storage folder\n for (const store of storageFolders) {\n const foldersOnStorage = await getFolders(join(storagePath, store), '*');\n for (const pkgName of foldersOnStorage) {\n if (validatioUtils.isPackageNameScoped(pkgName)) {\n const scopedPackages = await getFolders(join(storagePath, store, pkgName), '*');\n const listScoped = scopedPackages.map((scoped) => ({\n name: `${pkgName}/${scoped}`,\n scoped: pkgName,\n }));\n results.push(...listScoped);\n } else {\n results.push({\n name: pkgName,\n });\n }\n }\n }\n\n return results;\n}\n"],"mappings":";;;;;;;;AAOA,IAAM,WAAA,GAAA,MAAA,SAAmB,2CAA2C;;;;;;AAOpE,eAAsB,WAAW,aAAqB,UAAU,KAAwB;AAkBtF,QAhBc,OAAA,GAAA,OAAA,SAAa,SAAS;EAElC,KAAK;EACL,mBAAmB;EACnB,iBAAiB;EACjB,WAAW;EAEX,MAAM;EACN,KAAK;EACL,qBAAqB;EACrB,oBAAoB;EACpB,QAAQ;EAIT,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BJ,eAAsB,gBACpB,aACA,UACsC;CACtC,MAAM,kBAAkB,MAAM,KAAK,SAAS;CAC5C,MAAM,iBAAiB,MAAM,KAAK,SAAS,MAAM,CAAC;AAClD,SAAM,gBAAgB,YAAY;AAClC,SAAM,sBAAsB,gBAAgB,OAAO;CACnD,MAAM,UAAuC,EAAE;CAE/C,MAAM,mBAAmB,MAAM,WAAW,aAAa,IAAI,EAAE,QAC1D,kBAAkB,CAAC,eAAe,SAAS,cAAc,CAC3D;AAED,MAAK,MAAM,SAAS,gBAClB,KAAI,gBAAA,eAAe,oBAAoB,MAAM,EAAE;EAE7C,MAAM,cADiB,MAAM,YAAA,GAAA,KAAA,MAAgB,aAAa,MAAM,EAAE,IAAI,EACpC,KAAK,YAAY;GACjD,MAAM,GAAG,MAAM,GAAG;GAClB,QAAQ;GACT,EAAE;AACH,UAAQ,KAAK,GAAG,WAAW;OAE3B,SAAQ,KAAK,EACX,MAAM,OACP,CAAC;AAKN,MAAK,MAAM,SAAS,gBAAgB;EAClC,MAAM,mBAAmB,MAAM,YAAA,GAAA,KAAA,MAAgB,aAAa,MAAM,EAAE,IAAI;AACxE,OAAK,MAAM,WAAW,iBACpB,KAAI,gBAAA,eAAe,oBAAoB,QAAQ,EAAE;GAE/C,MAAM,cADiB,MAAM,YAAA,GAAA,KAAA,MAAgB,aAAa,OAAO,QAAQ,EAAE,IAAI,EAC7C,KAAK,YAAY;IACjD,MAAM,GAAG,QAAQ,GAAG;IACpB,QAAQ;IACT,EAAE;AACH,WAAQ,KAAK,GAAG,WAAW;QAE3B,SAAQ,KAAK,EACX,MAAM,SACP,CAAC;;AAKR,QAAO"}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "LocalDatabase", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _localDatabase.default;
|
|
10
|
-
}
|
|
1
|
+
Object.defineProperties(exports, {
|
|
2
|
+
__esModule: { value: true },
|
|
3
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
11
4
|
});
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
5
|
+
const require_local_database = require("./local-database.js");
|
|
6
|
+
//#region src/index.ts
|
|
7
|
+
var src_default = require_local_database.default;
|
|
8
|
+
//#endregion
|
|
9
|
+
exports.LocalDatabase = require_local_database.default;
|
|
10
|
+
exports.default = src_default;
|
|
11
|
+
|
|
16
12
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import LocalDatabase from './local-database';\n\nexport { LocalDatabase };\n\nexport default LocalDatabase;\n"],"mappings":";;;;;;AAIA,IAAA,cAAe,uBAAA"}
|
package/lib/local-database.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Callback, Config, Logger } from '@verdaccio/types';
|
|
2
1
|
import { searchUtils } from '@verdaccio/core';
|
|
2
|
+
import { Callback, Config, Logger } from '@verdaccio/types';
|
|
3
|
+
import { default as LocalDriver } from './local-fs';
|
|
4
|
+
import { default as TokenActions } from './token';
|
|
3
5
|
import { LocalStorage } from './utils';
|
|
4
|
-
import LocalDriver from './local-fs';
|
|
5
|
-
import TokenActions from './token';
|
|
6
6
|
declare class LocalDatabase extends TokenActions {
|
|
7
7
|
path: string;
|
|
8
8
|
logger: Logger;
|
|
@@ -14,8 +14,8 @@ declare class LocalDatabase extends TokenActions {
|
|
|
14
14
|
setSecret(secret: string): Promise<Error | null>;
|
|
15
15
|
add(name: string, cb: Callback): void;
|
|
16
16
|
/**
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
* Filter and only match those values that the query define.
|
|
18
|
+
**/
|
|
19
19
|
filterByQuery(results: searchUtils.SearchItemPkg[], query: searchUtils.SearchQuery): Promise<searchUtils.SearchItemPkg[]>;
|
|
20
20
|
getScore(_pkg: searchUtils.SearchItemPkg): Promise<searchUtils.Score>;
|
|
21
21
|
private _getCustomPackageLocalStorages;
|
|
@@ -36,10 +36,10 @@ declare class LocalDatabase extends TokenActions {
|
|
|
36
36
|
private _sync;
|
|
37
37
|
private getBaseConfigPath;
|
|
38
38
|
/**
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
* The field storage could be absolute or relative.
|
|
40
|
+
* If relative, it will be resolved against the config path.
|
|
41
|
+
* If absolute, it will be returned as is.
|
|
42
|
+
**/
|
|
43
43
|
private getStoragePath;
|
|
44
44
|
/**
|
|
45
45
|
* Verify the right local storage location.
|