@vitjs/vit
Version:
🛠React application framework inspired by UmiJS.
84 lines (83 loc) • 3.73 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = require("fs");
const path_1 = require("path");
const utils_1 = require("@vitjs/utils");
const globby_1 = __importDefault(require("globby"));
const get_1 = __importDefault(require("lodash/get"));
const mustache_1 = __importDefault(require("mustache"));
const semver_1 = __importDefault(require("semver"));
const import_1 = require("./import");
function getMockData(service) {
const mockList = globby_1.default.sync(`${service.paths.cwd}/mock/**/*.ts`);
const imports = mockList.map((item, index) => {
return `import mock${index} from '${item}'`;
});
return [
`${imports.join('\n')}`,
`export default [${mockList.map((_, index) => `...mock${index}`).join(', ')}];`,
].join('\n\n');
}
function generateVit(options) {
var _a;
const { service, command, mock, globalImport, reactStrictMode = true, debug } = options;
const customImportAheadModules = (0, get_1.default)(globalImport, 'aheadModules', []);
const customImportModules = (0, get_1.default)(globalImport, 'modules', []);
const defaultTpl = './vit.tpl';
const getVitTpl = () => {
const customApp = service.getCustomApp();
if (customApp) {
const appContent = (0, fs_1.readFileSync)((0, utils_1.winPath)((0, path_1.resolve)(service.paths.absSrcPath, customApp)), 'utf-8');
if (appContent.trim()) {
return (0, fs_1.readFileSync)((0, path_1.resolve)(__dirname, './vit-custom.tpl'), 'utf-8');
}
}
return (0, fs_1.readFileSync)((0, path_1.resolve)(__dirname, defaultTpl), 'utf-8');
};
const productionEnabled = command === 'build' && (0, get_1.default)(mock, 'productionEnabled') === true;
if (productionEnabled) {
const mockFetchTs = (0, fs_1.readFileSync)((0, path_1.resolve)(__dirname, './mockFetch.tpl'), 'utf-8');
const mockTs = (0, fs_1.readFileSync)((0, path_1.resolve)(__dirname, './mock.tpl'), 'utf-8');
service.writeTmpFile({
path: 'mockModules.ts',
content: getMockData(service),
});
service.writeTmpFile({
path: 'mockFetch.ts',
content: mockFetchTs,
});
service.writeTmpFile({
path: 'mock.ts',
content: mockTs,
});
}
const tpl = getVitTpl();
const coerceVersion = (_a = semver_1.default.coerce(service.getReactVersion())) === null || _a === void 0 ? void 0 : _a.version;
const isReact18 = coerceVersion ? semver_1.default.satisfies(coerceVersion, '^18.0.0') : false;
if (debug) {
console.log('[vit-app] react version:', coerceVersion);
console.log('[vit-app] is react 18:', isReact18);
}
service.writeTmpFile({
path: 'vit.tsx',
content: mustache_1.default.render(tpl, {
react18: isReact18,
reactStrictMode,
importsAhead: service.dumpGlobalImports((0, import_1.getImportAheadModules)(customImportAheadModules)),
imports: service.dumpGlobalImports((0, import_1.getImportModules)(customImportModules)),
entryCodeAhead: productionEnabled
? [
"import mockModules from './mockModules.ts';",
"import mockFetch from './mockFetch';",
"import mock from './mock';",
'\nmockFetch();',
'mock(mockModules);',
].join('\n')
: null,
}),
});
}
exports.default = generateVit;