UNPKG

@nx/cypress

Version:

The Nx Plugin for Cypress contains executors and generators allowing your workspace to use the powerful Cypress integration testing capabilities.

98 lines (97 loc) 3.77 kB
"use strict"; /** * https://github.com/mammadataei/cypress-vite * * MIT License * * Copyright (c) 2022 Mohammad Ataei * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. **/ Object.defineProperty(exports, "__esModule", { value: true }); const path_1 = require("path"); const cache = new Map(); /** * Use Vite as a file preprocess for Cypress test files. * This preprocessor shouldn't be used directly. * Instead, use the nxE2EPreset(__filename, { bundler: 'vite' }) function instead. */ function vitePreprocessor(configOverrides = {}) { return async (file) => { const { outputPath, filePath, shouldWatch } = file; if (cache.has(filePath)) { return cache.get(filePath); } const fileName = (0, path_1.basename)(outputPath); const filenameWithoutExtension = (0, path_1.basename)(outputPath, (0, path_1.extname)(outputPath)); const defaultConfig = { logLevel: 'silent', define: { 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), }, build: { emptyOutDir: false, minify: false, outDir: (0, path_1.dirname)(outputPath), sourcemap: true, write: true, watch: getWatcherConfig(shouldWatch), lib: { entry: filePath, fileName: () => fileName, formats: ['umd'], name: filenameWithoutExtension, }, }, }; cache.set(filePath, outputPath); const { build } = await Function('return import("vite")')(); const watcher = (await build({ ...defaultConfig, ...configOverrides, })); return new Promise((resolve, reject) => { if (shouldWatch && isWatcher(watcher)) { watcher.on('event', (event) => { if (event.code === 'END') { resolve(outputPath); file.emit('rerun'); } if (event.code === 'ERROR') { console.error(event); reject(new Error(event.error.message)); } }); file.on('close', () => { cache.delete(filePath); watcher.close(); }); } else { resolve(outputPath); } }); }; } function isWatcher(maybeWatcher) { return maybeWatcher.on !== undefined; } function getWatcherConfig(shouldWatch) { return shouldWatch ? {} : null; } exports.default = vitePreprocessor;