mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-05-05 05:29:26 +08:00
* fix: add license code * fix: bug * fix: bug * fix: upgrade * fix: improve * chore: add copyright information to the file header * fix: d.ts bug * fix: bug * fix: e2e bug * fix: merge main --------- Co-authored-by: chenos <chenlinxh@gmail.com>
117 lines
3.3 KiB
TypeScript
117 lines
3.3 KiB
TypeScript
/**
|
|
* This file is part of the NocoBase (R) project.
|
|
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
* Authors: NocoBase Team.
|
|
*
|
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
*/
|
|
|
|
import chalk from 'chalk';
|
|
import path from 'path';
|
|
import fg from 'fast-glob';
|
|
import fs from 'fs-extra';
|
|
import { Options as TsupConfig } from 'tsup'
|
|
import { InlineConfig as ViteConfig } from 'vite'
|
|
import { register } from 'esbuild-register/dist/node';
|
|
import { NODE_MODULES } from '../constant';
|
|
|
|
let previousColor = '';
|
|
function randomColor() {
|
|
const colors = [
|
|
'red',
|
|
'green',
|
|
'yellow',
|
|
'blue',
|
|
'magenta',
|
|
'cyan',
|
|
'gray',
|
|
'redBright',
|
|
'greenBright',
|
|
'yellowBright',
|
|
'blueBright',
|
|
'magentaBright',
|
|
'cyanBright',
|
|
];
|
|
|
|
let color = previousColor;
|
|
while (color === previousColor) {
|
|
const randomIndex = Math.floor(Math.random() * colors.length);
|
|
color = colors[randomIndex];
|
|
}
|
|
|
|
previousColor = color;
|
|
return chalk[color];
|
|
}
|
|
|
|
export type PkgLog = (msg: string, ...args: any[]) => void;
|
|
export const getPkgLog = (pkgName: string) => {
|
|
const pkgColor = randomColor();
|
|
const pkgStr = chalk.bold(pkgColor(pkgName));
|
|
const pkgLog: PkgLog = (msg: string, ...optionalParams: any[]) => console.log(`${pkgStr}: ${msg}`, ...optionalParams);
|
|
return pkgLog;
|
|
};
|
|
|
|
export function toUnixPath(filepath: string) {
|
|
return filepath.replace(/\\/g, '/');
|
|
}
|
|
|
|
export function getPackageJson(cwd: string) {
|
|
return require(path.join(cwd, 'package.json'));
|
|
}
|
|
|
|
export interface UserConfig {
|
|
modifyTsupConfig?: (config: TsupConfig) => TsupConfig;
|
|
modifyViteConfig?: (config: ViteConfig) => ViteConfig;
|
|
beforeBuild?: (log: PkgLog) => void | Promise<void>;
|
|
afterBuild?: (log: PkgLog) => void | Promise<void>;
|
|
}
|
|
|
|
export function defineConfig(config: UserConfig): UserConfig {
|
|
return config;
|
|
}
|
|
|
|
export function getUserConfig(cwd: string) {
|
|
const config = defineConfig({
|
|
modifyTsupConfig: (config: TsupConfig) => config,
|
|
modifyViteConfig: (config: ViteConfig) => config,
|
|
});
|
|
|
|
const buildConfigs = fg.sync(['build.config.js', 'build.config.ts'], { cwd });
|
|
if (buildConfigs.length > 1) {
|
|
throw new Error(`Multiple build configs found: ${buildConfigs.join(', ')}`);
|
|
}
|
|
if (buildConfigs.length === 1) {
|
|
const { unregister } = register({})
|
|
const userConfig = require(path.join(cwd, buildConfigs[0]));
|
|
unregister()
|
|
Object.assign(config, userConfig.default || userConfig);
|
|
}
|
|
return config;
|
|
}
|
|
|
|
const CACHE_DIR = path.join(NODE_MODULES, '.cache', 'nocobase');
|
|
export function writeToCache(key: string, data: Record<string, any>) {
|
|
const cachePath = path.join(CACHE_DIR, `${key}.json`);
|
|
fs.ensureDirSync(path.dirname(cachePath));
|
|
fs.writeJsonSync(cachePath, data, { spaces: 2 });
|
|
}
|
|
|
|
export function readFromCache(key: string) {
|
|
const cachePath = path.join(CACHE_DIR, `${key}.json`);
|
|
if (fs.existsSync(cachePath)) {
|
|
return fs.readJsonSync(cachePath);
|
|
}
|
|
return {};
|
|
}
|
|
|
|
|
|
export function getEnvDefine() {
|
|
return {
|
|
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'production'),
|
|
'process.env.__TEST__': false,
|
|
'process.env.__E2E__': process.env.__E2E__ ? true : false,
|
|
'process.env.APP_ENV': process.env.APP_ENV,
|
|
}
|
|
}
|