UNPKG

@vitjs/vit

Version:

🛠 React application framework inspired by UmiJS.

84 lines (83 loc) • 3.73 kB
"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;