Skip to content

Commit

Permalink
feat: easy config
Browse files Browse the repository at this point in the history
  • Loading branch information
elrrrrrrr committed May 21, 2023
1 parent 80ab054 commit 02556f2
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 84 deletions.
16 changes: 15 additions & 1 deletion INTEGRATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,21 @@
}
```

3. 修改 `config.default.ts` 文件,可以直接复制 cnpmcore 中的内容
3. 修改 `config.default.ts` 文件,可以直接覆盖默认配置
```typescript
import { SyncMode } from 'cnpmcore/common/constants';
import { cnpmcoreConfig } from 'cnpmcore/common/config';

export default () => {
const config = {};
config.cnpmcore = {
...cnpmcoreConfig,
enableChangesStream: false,
syncMode: SyncMode.block,
};
return config;
}
```

### 🧑‍🤝‍🧑 集成 cnpmcore

Expand Down
10 changes: 10 additions & 0 deletions app/common/typing.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { cnpmcoreConfig } from '../port/config';
import { Readable } from 'stream';
import { IncomingHttpHeaders } from 'http';
import { EggContext } from '@eggjs/tegg';
Expand Down Expand Up @@ -62,3 +63,12 @@ export interface AuthClient {
getAuthUrl(ctx: EggContext): Promise<AuthUrlResult>;
ensureCurrentUser(): Promise<userResult | null>;
}

declare module 'egg' {
// eslint-disable-next-line
// @ts-ignore
// avoid TS2310 Type 'EggAppConfig' recursively references itself as a base type.
interface EggAppConfig {
cnpmcore: typeof cnpmcoreConfig;
}
}
1 change: 1 addition & 0 deletions app/port/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { cnpmcoreConfig } from '../../config/config.default';
2 changes: 1 addition & 1 deletion app/port/controller/HomeController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ type LegacyInfo = {

type SiteEnvInfo = {
sync_model: string;
sync_binary: string;
sync_binary: boolean;
instance_start_time: Date;
node_version: string;
app_version: string;
Expand Down
166 changes: 84 additions & 82 deletions config/config.default.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,91 +5,93 @@ import OSSClient from 'oss-cnpm';
import { patchAjv } from '../app/port/typebox';
import { SyncDeleteMode, SyncMode } from '../app/common/constants';

export const cnpmcoreConfig = {
name: 'cnpm',
hooksLimit: 20,
sourceRegistry: 'https://registry.npmjs.org',
// upstream registry is base on `cnpmcore` or not
// if your upstream is official npm registry, please turn it off
sourceRegistryIsCNpm: false,
syncUpstreamFirst: false,
// 3 mins
sourceRegistrySyncTimeout: 180000,
taskQueueHighWaterSize: 100,
// sync mode
// - none: don't sync npm package
// - admin: don't sync npm package,only admin can create sync task by sync contorller.
// - all: sync all npm packages
// - exist: only sync exist packages, effected when `enableCheckRecentlyUpdated` or `enableChangesStream` is enabled
syncMode: SyncMode.none,
syncDeleteMode: SyncDeleteMode.delete,
hookEnable: false,
syncPackageWorkerMaxConcurrentTasks: 10,
triggerHookWorkerMaxConcurrentTasks: 10,
createTriggerHookWorkerMaxConcurrentTasks: 10,
// stop syncing these packages in future
syncPackageBlockList: [] as string[],
// check recently from https://www.npmjs.com/browse/updated, if use set changesStreamRegistry to cnpmcore,
// maybe you should disable it
enableCheckRecentlyUpdated: true,
// mirror binary, default is false
enableSyncBinary: false,
// cnpmcore api: https://r.cnpmjs.org/-/binary
syncBinaryFromAPISource: '',
// enable sync downloads data from source registry https://github.com/cnpm/cnpmcore/issues/108
// all three parameters must be configured at the same time to take effect
enableSyncDownloadData: false,
syncDownloadDataSourceRegistry: '',
syncDownloadDataMaxDate: '', // should be YYYY-MM-DD format
// https://github.com/npm/registry-follower-tutorial
enableChangesStream: false,
checkChangesStreamInterval: 500,
changesStreamRegistry: 'https://replicate.npmjs.com',
// handle _changes request mode, default is 'streaming', please set it to 'json' when on cnpmcore registry
changesStreamRegistryMode: 'streaming',
registry: 'http://localhost:7001',
// https://docs.npmjs.com/cli/v6/using-npm/config#always-auth npm <= 6
// if `alwaysAuth=true`, all api request required access token
alwaysAuth: false,
// white scope list
allowScopes: [
'@cnpm',
'@cnpmcore',
'@example',
],
// allow publish non-scope package, disable by default
allowPublishNonScopePackage: false,
// Public registration is allowed, otherwise only admins can login
allowPublicRegistration: true,
// default system admins
admins: {
// name: email
cnpmcore_admin: 'admin@cnpmjs.org',
},
// use webauthn for login, https://webauthn.guide/
// only support platform authenticators, browser support: https://webauthn.me/browser-support
enableWebAuthn: false,
// http response cache control header
enableCDN: false,
// if you are using CDN, can override it
// it meaning cache 300s on CDN server and client side.
cdnCacheControlHeader: 'public, max-age=300',
// if you are using CDN, can set it to 'Accept, Accept-Encoding'
cdnVaryHeader: 'Accept, Accept-Encoding',
// store full package version manifests data to database table(package_version_manifests), default is false
enableStoreFullPackageVersionManifestsToDatabase: false,
// only support npm as client and npm >= 7.0.0 allow publish action
enableNpmClientAndVersionCheck: true,
// sync when package not found, only effect when syncMode = all/exist
syncNotFound: false,
// redirect to source registry when package not found
redirectNotFound: true,
// enable unpkg features, https://github.com/cnpm/cnpmcore/issues/452
enableUnpkg: true,
};

export default (appInfo: EggAppConfig) => {
const config = {} as PowerPartial<EggAppConfig>;

config.cnpmcore = {
name: 'cnpm',
hooksLimit: 20,
sourceRegistry: 'https://registry.npmjs.org',
// upstream registry is base on `cnpmcore` or not
// if your upstream is official npm registry, please turn it off
sourceRegistryIsCNpm: false,
syncUpstreamFirst: false,
// 3 mins
sourceRegistrySyncTimeout: 180000,
taskQueueHighWaterSize: 100,
// sync mode
// - none: don't sync npm package
// - admin: don't sync npm package,only admin can create sync task by sync contorller.
// - all: sync all npm packages
// - exist: only sync exist packages, effected when `enableCheckRecentlyUpdated` or `enableChangesStream` is enabled
syncMode: SyncMode.none,
syncDeleteMode: SyncDeleteMode.delete,
hookEnable: false,
syncPackageWorkerMaxConcurrentTasks: 10,
triggerHookWorkerMaxConcurrentTasks: 10,
createTriggerHookWorkerMaxConcurrentTasks: 10,
// stop syncing these packages in future
syncPackageBlockList: [],
// check recently from https://www.npmjs.com/browse/updated, if use set changesStreamRegistry to cnpmcore,
// maybe you should disable it
enableCheckRecentlyUpdated: true,
// mirror binary, default is false
enableSyncBinary: false,
// cnpmcore api: https://r.cnpmjs.org/-/binary
syncBinaryFromAPISource: '',
// enable sync downloads data from source registry https://github.com/cnpm/cnpmcore/issues/108
// all three parameters must be configured at the same time to take effect
enableSyncDownloadData: false,
syncDownloadDataSourceRegistry: '',
syncDownloadDataMaxDate: '', // should be YYYY-MM-DD format
// https://github.com/npm/registry-follower-tutorial
enableChangesStream: false,
checkChangesStreamInterval: 500,
changesStreamRegistry: 'https://replicate.npmjs.com',
// handle _changes request mode, default is 'streaming', please set it to 'json' when on cnpmcore registry
changesStreamRegistryMode: 'streaming',
registry: 'http://localhost:7001',
// https://docs.npmjs.com/cli/v6/using-npm/config#always-auth npm <= 6
// if `alwaysAuth=true`, all api request required access token
alwaysAuth: false,
// white scope list
allowScopes: [
'@cnpm',
'@cnpmcore',
'@example',
],
// allow publish non-scope package, disable by default
allowPublishNonScopePackage: false,
// Public registration is allowed, otherwise only admins can login
allowPublicRegistration: true,
// default system admins
admins: {
// name: email
cnpmcore_admin: 'admin@cnpmjs.org',
},
// use webauthn for login, https://webauthn.guide/
// only support platform authenticators, browser support: https://webauthn.me/browser-support
enableWebAuthn: false,
// http response cache control header
enableCDN: false,
// if you are using CDN, can override it
// it meaning cache 300s on CDN server and client side.
cdnCacheControlHeader: 'public, max-age=300',
// if you are using CDN, can set it to 'Accept, Accept-Encoding'
cdnVaryHeader: 'Accept, Accept-Encoding',
// store full package version manifests data to database table(package_version_manifests), default is false
enableStoreFullPackageVersionManifestsToDatabase: false,
// only support npm as client and npm >= 7.0.0 allow publish action
enableNpmClientAndVersionCheck: true,
// sync when package not found, only effect when syncMode = all/exist
syncNotFound: false,
// redirect to source registry when package not found
redirectNotFound: true,
// enable unpkg features, https://github.com/cnpm/cnpmcore/issues/452
enableUnpkg: true,
};
config.cnpmcore = cnpmcoreConfig;

// override config from framework / plugin
config.dataDir = join(appInfo.root, '.cnpmcore');
Expand Down

0 comments on commit 02556f2

Please sign in to comment.