cnpmcore 3.22.0 → 3.22.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/dist/app/common/constants.d.ts +4 -0
- package/dist/app/common/constants.js +7 -2
- package/dist/app/common/typing.d.ts +2 -2
- package/dist/app/core/service/RegistryManagerService.js +2 -2
- package/dist/app/port/config.d.ts +145 -0
- package/dist/app/port/config.js +1 -1
- package/dist/config/config.default.d.ts +2 -147
- package/dist/config/config.default.js +2 -106
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PackageAccessLevel = exports.PresetRegistryName = exports.SyncDeleteMode = exports.SyncMode = exports.GLOBAL_WORKER = exports.LATEST_TAG = exports.BUG_VERSIONS = void 0;
|
|
3
|
+
exports.PackageAccessLevel = exports.PresetRegistryName = exports.SyncDeleteMode = exports.ChangesStreamMode = exports.SyncMode = exports.GLOBAL_WORKER = exports.LATEST_TAG = exports.BUG_VERSIONS = void 0;
|
|
4
4
|
exports.BUG_VERSIONS = 'bug-versions';
|
|
5
5
|
exports.LATEST_TAG = 'latest';
|
|
6
6
|
exports.GLOBAL_WORKER = 'GLOBAL_WORKER';
|
|
@@ -11,6 +11,11 @@ var SyncMode;
|
|
|
11
11
|
SyncMode["exist"] = "exist";
|
|
12
12
|
SyncMode["all"] = "all";
|
|
13
13
|
})(SyncMode = exports.SyncMode || (exports.SyncMode = {}));
|
|
14
|
+
var ChangesStreamMode;
|
|
15
|
+
(function (ChangesStreamMode) {
|
|
16
|
+
ChangesStreamMode["json"] = "json";
|
|
17
|
+
ChangesStreamMode["streaming"] = "streaming";
|
|
18
|
+
})(ChangesStreamMode = exports.ChangesStreamMode || (exports.ChangesStreamMode = {}));
|
|
14
19
|
var SyncDeleteMode;
|
|
15
20
|
(function (SyncDeleteMode) {
|
|
16
21
|
SyncDeleteMode["ignore"] = "ignore";
|
|
@@ -27,4 +32,4 @@ var PackageAccessLevel;
|
|
|
27
32
|
PackageAccessLevel["write"] = "write";
|
|
28
33
|
PackageAccessLevel["read"] = "read";
|
|
29
34
|
})(PackageAccessLevel = exports.PackageAccessLevel || (exports.PackageAccessLevel = {}));
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBwL2NvbW1vbi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxZQUFZLEdBQUcsY0FBYyxDQUFDO0FBQzlCLFFBQUEsVUFBVSxHQUFHLFFBQVEsQ0FBQztBQUN0QixRQUFBLGFBQWEsR0FBRyxlQUFlLENBQUM7QUFDN0MsSUFBWSxRQUtYO0FBTEQsV0FBWSxRQUFRO0lBQ2xCLHlCQUFhLENBQUE7SUFDYiwyQkFBZSxDQUFBO0lBQ2YsMkJBQWUsQ0FBQTtJQUNmLHVCQUFXLENBQUE7QUFDYixDQUFDLEVBTFcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFLbkI7QUFDRCxJQUFZLGlCQUdYO0FBSEQsV0FBWSxpQkFBaUI7SUFDM0Isa0NBQWEsQ0FBQTtJQUNiLDRDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFIVyxpQkFBaUIsR0FBakIseUJBQWlCLEtBQWpCLHlCQUFpQixRQUc1QjtBQUNELElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixpQ0FBZSxDQUFBO0lBQ2YsbUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBSXpCO0FBRUQsSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLHlDQUFtQixDQUFBO0lBQ25CLG1DQUFhLENBQUE7QUFDZixDQUFDLEVBSFcsa0JBQWtCLEdBQWxCLDBCQUFrQixLQUFsQiwwQkFBa0IsUUFHN0I7QUFFRCxJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDNUIscUNBQWUsQ0FBQTtJQUNmLG1DQUFhLENBQUE7QUFDZixDQUFDLEVBSFcsa0JBQWtCLEdBQWxCLDBCQUFrQixLQUFsQiwwQkFBa0IsUUFHN0IifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
|
-
import {
|
|
3
|
+
import { CnpmcoreConfig } from '../port/config';
|
|
4
4
|
import { Readable } from 'stream';
|
|
5
5
|
import { IncomingHttpHeaders } from 'http';
|
|
6
6
|
import { EggContext } from '@eggjs/tegg';
|
|
@@ -51,6 +51,6 @@ export interface AuthClient {
|
|
|
51
51
|
}
|
|
52
52
|
declare module 'egg' {
|
|
53
53
|
interface EggAppConfig {
|
|
54
|
-
cnpmcore:
|
|
54
|
+
cnpmcore: CnpmcoreConfig;
|
|
55
55
|
}
|
|
56
56
|
}
|
|
@@ -108,7 +108,7 @@ let RegistryManagerService = class RegistryManagerService extends AbstractServic
|
|
|
108
108
|
}
|
|
109
109
|
// 从配置文件默认生成
|
|
110
110
|
const { changesStreamRegistryMode, changesStreamRegistry: changesStreamHost, sourceRegistry: host } = this.config.cnpmcore;
|
|
111
|
-
const type = changesStreamRegistryMode ===
|
|
111
|
+
const type = changesStreamRegistryMode === constants_1.ChangesStreamMode.json ? Registry_2.RegistryType.Cnpmcore : Registry_2.RegistryType.Npm;
|
|
112
112
|
const registry = await this.createRegistry({
|
|
113
113
|
name: constants_1.PresetRegistryName.default,
|
|
114
114
|
type,
|
|
@@ -137,4 +137,4 @@ RegistryManagerService = __decorate([
|
|
|
137
137
|
})
|
|
138
138
|
], RegistryManagerService);
|
|
139
139
|
exports.RegistryManagerService = RegistryManagerService;
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaXN0cnlNYW5hZ2VyU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9jb3JlL3NlcnZpY2UvUmVnaXN0cnlNYW5hZ2VyU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzQ0FJcUI7QUFDckIsMkNBQWlEO0FBQ2pELDRFQUF5RTtBQUN6RSxrRUFBK0Q7QUFDL0QsaURBQThDO0FBRTlDLCtEQUE0RDtBQUM1RCwrQ0FBNEM7QUFDNUMseUNBQXNDO0FBQ3RDLHNEQUErRTtBQUMvRSx5REFBMEQ7QUFxQjFELElBQWEsc0JBQXNCLEdBQW5DLE1BQWEsc0JBQXVCLFNBQVEsaUNBQWU7SUFRekQsS0FBSyxDQUFDLHVCQUF1QixDQUFDLFlBQTBCO1FBQ3RELE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFZLENBQUM7UUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUdBQW1HLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNySixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsTUFBTSxJQUFJLDBCQUFhLENBQUMsWUFBWSxVQUFVLFlBQVksQ0FBQyxDQUFDO1NBQzdEO1FBRUQsMkNBQTJDO1FBQzNDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pGLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRTtZQUNyQixNQUFNLElBQUksaUJBQUksQ0FBQyxZQUFZLFVBQVUsNENBQTRDLENBQUMsQ0FBQztTQUNwRjtRQUVELGtCQUFrQjtRQUNsQixNQUFNLFVBQVUsR0FB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
|
|
@@ -1 +1,146 @@
|
|
|
1
|
+
import { SyncDeleteMode, SyncMode, ChangesStreamMode } from '../common/constants';
|
|
1
2
|
export { cnpmcoreConfig } from '../../config/config.default';
|
|
3
|
+
export type CnpmcoreConfig = {
|
|
4
|
+
name: string;
|
|
5
|
+
/**
|
|
6
|
+
* enable hook or not
|
|
7
|
+
*/
|
|
8
|
+
hookEnable: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* mac custom hooks count
|
|
11
|
+
*/
|
|
12
|
+
hooksLimit: number;
|
|
13
|
+
/**
|
|
14
|
+
* upstream registry url
|
|
15
|
+
*/
|
|
16
|
+
sourceRegistry: string;
|
|
17
|
+
/**
|
|
18
|
+
* upstream registry is base on `cnpmcore` or not
|
|
19
|
+
* if your upstream is official npm registry, please turn it off
|
|
20
|
+
*/
|
|
21
|
+
sourceRegistryIsCNpm: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* sync upstream first
|
|
24
|
+
*/
|
|
25
|
+
syncUpstreamFirst: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* sync upstream timeout, default is 3mins
|
|
28
|
+
*/
|
|
29
|
+
sourceRegistrySyncTimeout: number;
|
|
30
|
+
/**
|
|
31
|
+
* sync task high water size, default is 100
|
|
32
|
+
*/
|
|
33
|
+
taskQueueHighWaterSize: number;
|
|
34
|
+
/**
|
|
35
|
+
* sync mode
|
|
36
|
+
* - none: don't sync npm package
|
|
37
|
+
* - admin: don't sync npm package,only admin can create sync task by sync contorller.
|
|
38
|
+
* - all: sync all npm packages
|
|
39
|
+
* - exist: only sync exist packages, effected when `enableCheckRecentlyUpdated` or `enableChangesStream` is enabled
|
|
40
|
+
*/
|
|
41
|
+
syncMode: SyncMode;
|
|
42
|
+
syncDeleteMode: SyncDeleteMode;
|
|
43
|
+
syncPackageWorkerMaxConcurrentTasks: number;
|
|
44
|
+
triggerHookWorkerMaxConcurrentTasks: number;
|
|
45
|
+
createTriggerHookWorkerMaxConcurrentTasks: number;
|
|
46
|
+
/**
|
|
47
|
+
* stop syncing these packages in future
|
|
48
|
+
*/
|
|
49
|
+
syncPackageBlockList: string[];
|
|
50
|
+
/**
|
|
51
|
+
* check recently from https://www.npmjs.com/browse/updated, if use set changesStreamRegistry to cnpmcore,
|
|
52
|
+
* maybe you should disable it
|
|
53
|
+
*/
|
|
54
|
+
enableCheckRecentlyUpdated: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* mirror binary, default is false
|
|
57
|
+
*/
|
|
58
|
+
enableSyncBinary: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* sync binary source api, default is `${sourceRegistry}/-/binary`
|
|
61
|
+
*/
|
|
62
|
+
syncBinaryFromAPISource: string;
|
|
63
|
+
/**
|
|
64
|
+
* enable sync downloads data from source registry https://github.com/cnpm/cnpmcore/issues/108
|
|
65
|
+
* all three parameters must be configured at the same time to take effect
|
|
66
|
+
*/
|
|
67
|
+
enableSyncDownloadData: boolean;
|
|
68
|
+
syncDownloadDataSourceRegistry: string;
|
|
69
|
+
/**
|
|
70
|
+
* should be YYYY-MM-DD format
|
|
71
|
+
*/
|
|
72
|
+
syncDownloadDataMaxDate: string;
|
|
73
|
+
/**
|
|
74
|
+
* @see https://github.com/npm/registry-follower-tutorial
|
|
75
|
+
*/
|
|
76
|
+
enableChangesStream: boolean;
|
|
77
|
+
checkChangesStreamInterval: number;
|
|
78
|
+
changesStreamRegistry: string;
|
|
79
|
+
/**
|
|
80
|
+
* handle _changes request mode, default is 'streaming', please set it to 'json' when on cnpmcore registry
|
|
81
|
+
*/
|
|
82
|
+
changesStreamRegistryMode: ChangesStreamMode;
|
|
83
|
+
/**
|
|
84
|
+
* registry url
|
|
85
|
+
*/
|
|
86
|
+
registry: string;
|
|
87
|
+
/**
|
|
88
|
+
* https://docs.npmjs.com/cli/v6/using-npm/config#always-auth npm <= 6
|
|
89
|
+
* if `alwaysAuth=true`, all api request required access token
|
|
90
|
+
*/
|
|
91
|
+
alwaysAuth: boolean;
|
|
92
|
+
/**
|
|
93
|
+
* white scope list
|
|
94
|
+
*/
|
|
95
|
+
allowScopes: string[];
|
|
96
|
+
/**
|
|
97
|
+
* allow publish non-scope package, disable by default
|
|
98
|
+
*/
|
|
99
|
+
allowPublishNonScopePackage: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Public registration is allowed, otherwise only admins can login
|
|
102
|
+
*/
|
|
103
|
+
allowPublicRegistration: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* default system admins
|
|
106
|
+
*/
|
|
107
|
+
admins: Record<string, string>;
|
|
108
|
+
/**
|
|
109
|
+
* use webauthn for login, https://webauthn.guide/
|
|
110
|
+
* only support platform authenticators, browser support: https://webauthn.me/browser-support
|
|
111
|
+
*/
|
|
112
|
+
enableWebAuthn: boolean;
|
|
113
|
+
/**
|
|
114
|
+
* http response cache control header
|
|
115
|
+
*/
|
|
116
|
+
enableCDN: boolean;
|
|
117
|
+
/**
|
|
118
|
+
* if you are using CDN, can override it
|
|
119
|
+
* it meaning cache 300s on CDN server and client side.
|
|
120
|
+
*/
|
|
121
|
+
cdnCacheControlHeader: string;
|
|
122
|
+
/**
|
|
123
|
+
* if you are using CDN, can set it to 'Accept, Accept-Encoding'
|
|
124
|
+
*/
|
|
125
|
+
cdnVaryHeader: string;
|
|
126
|
+
/**
|
|
127
|
+
* store full package version manifests data to database table(package_version_manifests), default is false
|
|
128
|
+
*/
|
|
129
|
+
enableStoreFullPackageVersionManifestsToDatabase: boolean;
|
|
130
|
+
/**
|
|
131
|
+
* only support npm as client and npm >= 7.0.0 allow publish action
|
|
132
|
+
*/
|
|
133
|
+
enableNpmClientAndVersionCheck: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* sync when package not found, only effect when syncMode = all/exist
|
|
136
|
+
*/
|
|
137
|
+
syncNotFound: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* redirect to source registry when package not found
|
|
140
|
+
*/
|
|
141
|
+
redirectNotFound: boolean;
|
|
142
|
+
/**
|
|
143
|
+
* enable unpkg features, https://github.com/cnpm/cnpmcore/issues/452
|
|
144
|
+
*/
|
|
145
|
+
enableUnpkg: boolean;
|
|
146
|
+
};
|
package/dist/app/port/config.js
CHANGED
|
@@ -3,4 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.cnpmcoreConfig = void 0;
|
|
4
4
|
var config_default_1 = require("../../config/config.default");
|
|
5
5
|
Object.defineProperty(exports, "cnpmcoreConfig", { enumerable: true, get: function () { return config_default_1.cnpmcoreConfig; } });
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBwL3BvcnQvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLDhEQUE2RDtBQUFwRCxnSEFBQSxjQUFjLE9BQUEifQ==
|
|
@@ -1,150 +1,5 @@
|
|
|
1
1
|
import { EggAppConfig, PowerPartial } from 'egg';
|
|
2
|
-
import {
|
|
3
|
-
export declare const cnpmcoreConfig:
|
|
4
|
-
name: string;
|
|
5
|
-
/**
|
|
6
|
-
* enable hook or not
|
|
7
|
-
*/
|
|
8
|
-
hookEnable: boolean;
|
|
9
|
-
/**
|
|
10
|
-
* mac custom hooks count
|
|
11
|
-
*/
|
|
12
|
-
hooksLimit: number;
|
|
13
|
-
/**
|
|
14
|
-
* upstream registry url
|
|
15
|
-
*/
|
|
16
|
-
sourceRegistry: string;
|
|
17
|
-
/**
|
|
18
|
-
* upstream registry is base on `cnpmcore` or not
|
|
19
|
-
* if your upstream is official npm registry, please turn it off
|
|
20
|
-
*/
|
|
21
|
-
sourceRegistryIsCNpm: boolean;
|
|
22
|
-
/**
|
|
23
|
-
* sync upstream first
|
|
24
|
-
*/
|
|
25
|
-
syncUpstreamFirst: boolean;
|
|
26
|
-
/**
|
|
27
|
-
* sync upstream timeout, default is 3mins
|
|
28
|
-
*/
|
|
29
|
-
sourceRegistrySyncTimeout: number;
|
|
30
|
-
/**
|
|
31
|
-
* sync task high water size, default is 100
|
|
32
|
-
*/
|
|
33
|
-
taskQueueHighWaterSize: number;
|
|
34
|
-
/**
|
|
35
|
-
* sync mode
|
|
36
|
-
* - none: don't sync npm package
|
|
37
|
-
* - admin: don't sync npm package,only admin can create sync task by sync contorller.
|
|
38
|
-
* - all: sync all npm packages
|
|
39
|
-
* - exist: only sync exist packages, effected when `enableCheckRecentlyUpdated` or `enableChangesStream` is enabled
|
|
40
|
-
*/
|
|
41
|
-
syncMode: SyncMode;
|
|
42
|
-
syncDeleteMode: SyncDeleteMode;
|
|
43
|
-
syncPackageWorkerMaxConcurrentTasks: number;
|
|
44
|
-
triggerHookWorkerMaxConcurrentTasks: number;
|
|
45
|
-
createTriggerHookWorkerMaxConcurrentTasks: number;
|
|
46
|
-
/**
|
|
47
|
-
* stop syncing these packages in future
|
|
48
|
-
*/
|
|
49
|
-
syncPackageBlockList: string[];
|
|
50
|
-
/**
|
|
51
|
-
* check recently from https://www.npmjs.com/browse/updated, if use set changesStreamRegistry to cnpmcore,
|
|
52
|
-
* maybe you should disable it
|
|
53
|
-
*/
|
|
54
|
-
enableCheckRecentlyUpdated: boolean;
|
|
55
|
-
/**
|
|
56
|
-
* mirror binary, default is false
|
|
57
|
-
*/
|
|
58
|
-
enableSyncBinary: boolean;
|
|
59
|
-
/**
|
|
60
|
-
* sync binary source api, default is `${sourceRegistry}/-/binary`
|
|
61
|
-
*/
|
|
62
|
-
syncBinaryFromAPISource: string;
|
|
63
|
-
/**
|
|
64
|
-
* enable sync downloads data from source registry https://github.com/cnpm/cnpmcore/issues/108
|
|
65
|
-
* all three parameters must be configured at the same time to take effect
|
|
66
|
-
*/
|
|
67
|
-
enableSyncDownloadData: boolean;
|
|
68
|
-
syncDownloadDataSourceRegistry: string;
|
|
69
|
-
/**
|
|
70
|
-
* should be YYYY-MM-DD format
|
|
71
|
-
*/
|
|
72
|
-
syncDownloadDataMaxDate: string;
|
|
73
|
-
/**
|
|
74
|
-
* @see https://github.com/npm/registry-follower-tutorial
|
|
75
|
-
*/
|
|
76
|
-
enableChangesStream: boolean;
|
|
77
|
-
checkChangesStreamInterval: number;
|
|
78
|
-
changesStreamRegistry: string;
|
|
79
|
-
/**
|
|
80
|
-
* handle _changes request mode, default is 'streaming', please set it to 'json' when on cnpmcore registry
|
|
81
|
-
*/
|
|
82
|
-
changesStreamRegistryMode: string;
|
|
83
|
-
/**
|
|
84
|
-
* registry url
|
|
85
|
-
*/
|
|
86
|
-
registry: string;
|
|
87
|
-
/**
|
|
88
|
-
* https://docs.npmjs.com/cli/v6/using-npm/config#always-auth npm <= 6
|
|
89
|
-
* if `alwaysAuth=true`, all api request required access token
|
|
90
|
-
*/
|
|
91
|
-
alwaysAuth: boolean;
|
|
92
|
-
/**
|
|
93
|
-
* white scope list
|
|
94
|
-
*/
|
|
95
|
-
allowScopes: string[];
|
|
96
|
-
/**
|
|
97
|
-
* allow publish non-scope package, disable by default
|
|
98
|
-
*/
|
|
99
|
-
allowPublishNonScopePackage: boolean;
|
|
100
|
-
/**
|
|
101
|
-
* Public registration is allowed, otherwise only admins can login
|
|
102
|
-
*/
|
|
103
|
-
allowPublicRegistration: boolean;
|
|
104
|
-
/**
|
|
105
|
-
* default system admins
|
|
106
|
-
*/
|
|
107
|
-
admins: {
|
|
108
|
-
cnpmcore_admin: string;
|
|
109
|
-
};
|
|
110
|
-
/**
|
|
111
|
-
* use webauthn for login, https://webauthn.guide/
|
|
112
|
-
* only support platform authenticators, browser support: https://webauthn.me/browser-support
|
|
113
|
-
*/
|
|
114
|
-
enableWebAuthn: boolean;
|
|
115
|
-
/**
|
|
116
|
-
* http response cache control header
|
|
117
|
-
*/
|
|
118
|
-
enableCDN: boolean;
|
|
119
|
-
/**
|
|
120
|
-
* if you are using CDN, can override it
|
|
121
|
-
* it meaning cache 300s on CDN server and client side.
|
|
122
|
-
*/
|
|
123
|
-
cdnCacheControlHeader: string;
|
|
124
|
-
/**
|
|
125
|
-
* if you are using CDN, can set it to 'Accept, Accept-Encoding'
|
|
126
|
-
*/
|
|
127
|
-
cdnVaryHeader: string;
|
|
128
|
-
/**
|
|
129
|
-
* store full package version manifests data to database table(package_version_manifests), default is false
|
|
130
|
-
*/
|
|
131
|
-
enableStoreFullPackageVersionManifestsToDatabase: boolean;
|
|
132
|
-
/**
|
|
133
|
-
* only support npm as client and npm >= 7.0.0 allow publish action
|
|
134
|
-
*/
|
|
135
|
-
enableNpmClientAndVersionCheck: boolean;
|
|
136
|
-
/**
|
|
137
|
-
* sync when package not found, only effect when syncMode = all/exist
|
|
138
|
-
*/
|
|
139
|
-
syncNotFound: boolean;
|
|
140
|
-
/**
|
|
141
|
-
* redirect to source registry when package not found
|
|
142
|
-
*/
|
|
143
|
-
redirectNotFound: boolean;
|
|
144
|
-
/**
|
|
145
|
-
* enable unpkg features, https://github.com/cnpm/cnpmcore/issues/452
|
|
146
|
-
*/
|
|
147
|
-
enableUnpkg: boolean;
|
|
148
|
-
};
|
|
2
|
+
import { CnpmcoreConfig } from '../app/port/config';
|
|
3
|
+
export declare const cnpmcoreConfig: CnpmcoreConfig;
|
|
149
4
|
declare const _default: (appInfo: EggAppConfig) => PowerPartial<EggAppConfig>;
|
|
150
5
|
export default _default;
|
|
@@ -11,153 +11,49 @@ const typebox_1 = require("../app/port/typebox");
|
|
|
11
11
|
const constants_1 = require("../app/common/constants");
|
|
12
12
|
exports.cnpmcoreConfig = {
|
|
13
13
|
name: 'cnpm',
|
|
14
|
-
/**
|
|
15
|
-
* enable hook or not
|
|
16
|
-
*/
|
|
17
14
|
hookEnable: false,
|
|
18
|
-
/**
|
|
19
|
-
* mac custom hooks count
|
|
20
|
-
*/
|
|
21
15
|
hooksLimit: 20,
|
|
22
|
-
/**
|
|
23
|
-
* upstream registry url
|
|
24
|
-
*/
|
|
25
16
|
sourceRegistry: 'https://registry.npmjs.org',
|
|
26
|
-
/**
|
|
27
|
-
* upstream registry is base on `cnpmcore` or not
|
|
28
|
-
* if your upstream is official npm registry, please turn it off
|
|
29
|
-
*/
|
|
30
17
|
sourceRegistryIsCNpm: false,
|
|
31
|
-
/**
|
|
32
|
-
* sync upstream first
|
|
33
|
-
*/
|
|
34
18
|
syncUpstreamFirst: false,
|
|
35
|
-
/**
|
|
36
|
-
* sync upstream timeout, default is 3mins
|
|
37
|
-
*/
|
|
38
19
|
sourceRegistrySyncTimeout: 180000,
|
|
39
|
-
/**
|
|
40
|
-
* sync task high water size, default is 100
|
|
41
|
-
*/
|
|
42
20
|
taskQueueHighWaterSize: 100,
|
|
43
|
-
/**
|
|
44
|
-
* sync mode
|
|
45
|
-
* - none: don't sync npm package
|
|
46
|
-
* - admin: don't sync npm package,only admin can create sync task by sync contorller.
|
|
47
|
-
* - all: sync all npm packages
|
|
48
|
-
* - exist: only sync exist packages, effected when `enableCheckRecentlyUpdated` or `enableChangesStream` is enabled
|
|
49
|
-
*/
|
|
50
21
|
syncMode: constants_1.SyncMode.none,
|
|
51
22
|
syncDeleteMode: constants_1.SyncDeleteMode.delete,
|
|
52
23
|
syncPackageWorkerMaxConcurrentTasks: 10,
|
|
53
24
|
triggerHookWorkerMaxConcurrentTasks: 10,
|
|
54
25
|
createTriggerHookWorkerMaxConcurrentTasks: 10,
|
|
55
|
-
/**
|
|
56
|
-
* stop syncing these packages in future
|
|
57
|
-
*/
|
|
58
26
|
syncPackageBlockList: [],
|
|
59
|
-
/**
|
|
60
|
-
* check recently from https://www.npmjs.com/browse/updated, if use set changesStreamRegistry to cnpmcore,
|
|
61
|
-
* maybe you should disable it
|
|
62
|
-
*/
|
|
63
27
|
enableCheckRecentlyUpdated: true,
|
|
64
|
-
/**
|
|
65
|
-
* mirror binary, default is false
|
|
66
|
-
*/
|
|
67
28
|
enableSyncBinary: false,
|
|
68
|
-
/**
|
|
69
|
-
* sync binary source api, default is `${sourceRegistry}/-/binary`
|
|
70
|
-
*/
|
|
71
29
|
syncBinaryFromAPISource: '',
|
|
72
|
-
/**
|
|
73
|
-
* enable sync downloads data from source registry https://github.com/cnpm/cnpmcore/issues/108
|
|
74
|
-
* all three parameters must be configured at the same time to take effect
|
|
75
|
-
*/
|
|
76
30
|
enableSyncDownloadData: false,
|
|
77
31
|
syncDownloadDataSourceRegistry: '',
|
|
78
|
-
/**
|
|
79
|
-
* should be YYYY-MM-DD format
|
|
80
|
-
*/
|
|
81
32
|
syncDownloadDataMaxDate: '',
|
|
82
|
-
/**
|
|
83
|
-
* @see https://github.com/npm/registry-follower-tutorial
|
|
84
|
-
*/
|
|
85
33
|
enableChangesStream: false,
|
|
86
34
|
checkChangesStreamInterval: 500,
|
|
87
35
|
changesStreamRegistry: 'https://replicate.npmjs.com',
|
|
88
|
-
|
|
89
|
-
* handle _changes request mode, default is 'streaming', please set it to 'json' when on cnpmcore registry
|
|
90
|
-
*/
|
|
91
|
-
changesStreamRegistryMode: 'streaming',
|
|
92
|
-
/**
|
|
93
|
-
* registry url
|
|
94
|
-
*/
|
|
36
|
+
changesStreamRegistryMode: constants_1.ChangesStreamMode.streaming,
|
|
95
37
|
registry: 'http://localhost:7001',
|
|
96
|
-
/**
|
|
97
|
-
* https://docs.npmjs.com/cli/v6/using-npm/config#always-auth npm <= 6
|
|
98
|
-
* if `alwaysAuth=true`, all api request required access token
|
|
99
|
-
*/
|
|
100
38
|
alwaysAuth: false,
|
|
101
|
-
/**
|
|
102
|
-
* white scope list
|
|
103
|
-
*/
|
|
104
39
|
allowScopes: [
|
|
105
40
|
'@cnpm',
|
|
106
41
|
'@cnpmcore',
|
|
107
42
|
'@example',
|
|
108
43
|
],
|
|
109
|
-
/**
|
|
110
|
-
* allow publish non-scope package, disable by default
|
|
111
|
-
*/
|
|
112
44
|
allowPublishNonScopePackage: false,
|
|
113
|
-
/**
|
|
114
|
-
* Public registration is allowed, otherwise only admins can login
|
|
115
|
-
*/
|
|
116
45
|
allowPublicRegistration: true,
|
|
117
|
-
/**
|
|
118
|
-
* default system admins
|
|
119
|
-
*/
|
|
120
46
|
admins: {
|
|
121
|
-
// name: email
|
|
122
47
|
cnpmcore_admin: 'admin@cnpmjs.org',
|
|
123
48
|
},
|
|
124
|
-
/**
|
|
125
|
-
* use webauthn for login, https://webauthn.guide/
|
|
126
|
-
* only support platform authenticators, browser support: https://webauthn.me/browser-support
|
|
127
|
-
*/
|
|
128
49
|
enableWebAuthn: false,
|
|
129
|
-
/**
|
|
130
|
-
* http response cache control header
|
|
131
|
-
*/
|
|
132
50
|
enableCDN: false,
|
|
133
|
-
/**
|
|
134
|
-
* if you are using CDN, can override it
|
|
135
|
-
* it meaning cache 300s on CDN server and client side.
|
|
136
|
-
*/
|
|
137
51
|
cdnCacheControlHeader: 'public, max-age=300',
|
|
138
|
-
/**
|
|
139
|
-
* if you are using CDN, can set it to 'Accept, Accept-Encoding'
|
|
140
|
-
*/
|
|
141
52
|
cdnVaryHeader: 'Accept, Accept-Encoding',
|
|
142
|
-
/**
|
|
143
|
-
* store full package version manifests data to database table(package_version_manifests), default is false
|
|
144
|
-
*/
|
|
145
53
|
enableStoreFullPackageVersionManifestsToDatabase: false,
|
|
146
|
-
/**
|
|
147
|
-
* only support npm as client and npm >= 7.0.0 allow publish action
|
|
148
|
-
*/
|
|
149
54
|
enableNpmClientAndVersionCheck: true,
|
|
150
|
-
/**
|
|
151
|
-
* sync when package not found, only effect when syncMode = all/exist
|
|
152
|
-
*/
|
|
153
55
|
syncNotFound: false,
|
|
154
|
-
/**
|
|
155
|
-
* redirect to source registry when package not found
|
|
156
|
-
*/
|
|
157
56
|
redirectNotFound: true,
|
|
158
|
-
/**
|
|
159
|
-
* enable unpkg features, https://github.com/cnpm/cnpmcore/issues/452
|
|
160
|
-
*/
|
|
161
57
|
enableUnpkg: true,
|
|
162
58
|
};
|
|
163
59
|
exports.default = (appInfo) => {
|
|
@@ -247,4 +143,4 @@ exports.default = (appInfo) => {
|
|
|
247
143
|
};
|
|
248
144
|
return config;
|
|
249
145
|
};
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jb25maWcvY29uZmlnLmRlZmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLCtCQUE0QjtBQUU1Qix3REFBaUM7QUFDakMsaURBQStDO0FBQy9DLHVEQUFzRjtBQUd6RSxRQUFBLGNBQWMsR0FBbUI7SUFDNUMsSUFBSSxFQUFFLE1BQU07SUFDWixVQUFVLEVBQUUsS0FBSztJQUNqQixVQUFVLEVBQUUsRUFBRTtJQUNkLGNBQWMsRUFBRSw0QkFBNEI7SUFDNUMsb0JBQW9CLEVBQUUsS0FBSztJQUMzQixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLHlCQUF5QixFQUFFLE1BQU07SUFDakMsc0JBQXNCLEVBQUUsR0FBRztJQUMzQixRQUFRLEVBQUUsb0JBQVEsQ0FBQyxJQUFJO0lBQ3ZCLGNBQWMsRUFBRSwwQkFBYyxDQUFDLE1BQU07SUFDckMsbUNBQW1DLEVBQUUsRUFBRTtJQUN2QyxtQ0FBbUMsRUFBRSxFQUFFO0lBQ3ZDLHlDQUF5QyxFQUFFLEVBQUU7SUFDN0Msb0JBQW9CLEVBQUUsRUFBRTtJQUN4QiwwQkFBMEIsRUFBRSxJQUFJO0lBQ2hDLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsdUJBQXVCLEVBQUUsRUFBRTtJQUMzQixzQkFBc0IsRUFBRSxLQUFLO0lBQzdCLDhCQUE4QixFQUFFLEVBQUU7SUFDbEMsdUJBQXVCLEVBQUUsRUFBRTtJQUMzQixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLDBCQUEwQixFQUFFLEdBQUc7SUFDL0IscUJBQXFCLEVBQUUsNkJBQTZCO0lBQ3BELHlCQUF5QixFQUFFLDZCQUFpQixDQUFDLFNBQVM7SUFDdEQsUUFBUSxFQUFFLHVCQUF1QjtJQUNqQyxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUU7UUFDWCxPQUFPO1FBQ1AsV0FBVztRQUNYLFVBQVU7S0FDWDtJQUNELDJCQUEyQixFQUFFLEtBQUs7SUFDbEMsdUJBQXVCLEVBQUUsSUFBSTtJQUM3QixNQUFNLEVBQUU7UUFDTixjQUFjLEVBQUUsa0JBQWtCO0tBQ25DO0lBQ0QsY0FBYyxFQUFFLEtBQUs7SUFDckIsU0FBUyxFQUFFLEtBQUs7SUFDaEIscUJBQXFCLEVBQUUscUJBQXFCO0lBQzVDLGFBQWEsRUFBRSx5QkFBeUI7SUFDeEMsZ0RBQWdELEVBQUUsS0FBSztJQUN2RCw4QkFBOEIsRUFBRSxJQUFJO0lBQ3BDLFlBQVksRUFBRSxLQUFLO0lBQ25CLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsV0FBVyxFQUFFLElBQUk7Q0FDbEIsQ0FBQztBQUVGLGtCQUFlLENBQUMsT0FBcUIsRUFBRSxFQUFFO0lBQ3ZDLE1BQU0sTUFBTSxHQUFHLEVBQWdDLENBQUM7SUFFaEQsTUFBTSxDQUFDLFFBQVEsR0FBRyxzQkFBYyxDQUFDO0lBRWpDLDBDQUEwQztJQUMxQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUEsV0FBSSxFQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFakQsTUFBTSxDQUFDLEdBQUcsR0FBRztRQUNYLE1BQU0sRUFBRSxPQUFPO1FBQ2YsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLFVBQVU7UUFDbEQsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLFdBQVc7UUFDM0MsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLElBQUk7UUFDcEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLE1BQU07UUFDdEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYztRQUNwQyxPQUFPLEVBQUUsU0FBUztRQUNsQixNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsTUFBTSxFQUFFO1lBQ04sSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsV0FBVztZQUNqQixRQUFRLEVBQUUsRUFBRTtZQUNaLEVBQUUsRUFBRSxDQUFDO1NBQ047S0FDRixDQUFDO0lBRUYsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNoQixJQUFJLEVBQUU7WUFDSixNQUFNLEVBQUUsS0FBSztTQUNkO0tBQ0YsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixvQkFBb0I7UUFDcEIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFVLEVBQUU7WUFDdEIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxXQUFXLEVBQUUsSUFBSTtLQUNsQixDQUFDO0lBRUYsTUFBTSxDQUFDLEdBQUcsR0FBRztRQUNYLE1BQU0sRUFBRSxJQUFJO1FBQ1osR0FBRyxFQUFFLElBQUEsV0FBSSxFQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO0tBQ2pDLENBQUM7SUFDRix1QkFBdUI7SUFDdkIscUNBQXFDO0lBQ3JDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLEVBQUU7UUFDM0MsSUFBQSxnQkFBTSxFQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUscUNBQXFDLENBQUMsQ0FBQztRQUNuRixJQUFBLGdCQUFNLEVBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3ZGLElBQUEsZ0JBQU0sRUFBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDM0UsSUFBQSxnQkFBTSxFQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUscUNBQXFDLENBQUMsQ0FBQztRQUNuRixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLGtCQUFTLENBQUM7WUFDaEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CO1lBQzVDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QjtZQUMvQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUI7WUFDM0MsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO1lBQzVDLGVBQWUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QjtZQUNwRCxjQUFjLEVBQUU7Z0JBQ2QsZUFBZSxFQUFFLHdCQUF3QjthQUMxQztTQUNGLENBQUMsQ0FBQztLQUNKO0lBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRztRQUNkLHNCQUFzQixFQUFFLElBQUk7UUFDNUIsdUJBQXVCLEVBQUUsSUFBSTtLQUM5QixDQUFDO0lBRUYsTUFBTSxDQUFDLFVBQVUsR0FBRztRQUNsQiw2QkFBNkI7UUFDN0IsT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFDO0lBRUYsTUFBTSxDQUFDLFVBQVUsR0FBRztRQUNsQixrREFBa0Q7UUFDbEQsTUFBTSxFQUFFLEtBQUs7UUFDYix5RUFBeUU7UUFDekUsU0FBUyxFQUFFLE1BQU07S0FDbEIsQ0FBQztJQUVGLCtJQUErSTtJQUMvSSxNQUFNLENBQUMsZUFBZSxHQUFHLEVBQUUsUUFBUSxFQUFSLGtCQUFRLEVBQUUsQ0FBQztJQUV0QyxNQUFNLENBQUMsVUFBVSxHQUFHO1FBQ2xCLGlCQUFpQixFQUFFLElBQUk7S0FDeEIsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixJQUFJLEVBQUUsSUFBQSxXQUFJLEVBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7UUFDdkMsaUJBQWlCLEVBQUUsVUFBVTtLQUM5QixDQUFDO0lBRUYsTUFBTSxDQUFDLFlBQVksR0FBRztRQUNwQixTQUFTLEVBQUU7WUFDVCxJQUFJLEVBQUUsU0FBUztTQUNoQjtLQUNGLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMifQ==
|