diff --git a/.qodo/testConfig.toml b/.qodo/testConfig.toml new file mode 100644 index 0000000..2845686 --- /dev/null +++ b/.qodo/testConfig.toml @@ -0,0 +1,3 @@ +[javascript] +testingFramework = "Jest" +mockingFramework = "Jest mocks" \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 94a665c..94a8048 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { "cSpell.words": [ "postconditions" - ] + ], + "codium.codeCompletion.enable": true } \ No newline at end of file diff --git a/src/commands/transpile.js b/src/commands/transpile.js index 74a9ab5..5b4964a 100644 --- a/src/commands/transpile.js +++ b/src/commands/transpile.js @@ -1,9 +1,10 @@ -const { logMessage } = require('../utils/logUtils'); -const { loadConfig } = require('../utils/configUtils'); -const colors = require('ansi-colors'); -const fs = require('fs'); -const path = require('path'); -const glob = require('glob'); +const { logMessage } = require("../utils/logUtils"); +const { loadConfig } = require("../utils/configUtils"); +const colors = require("ansi-colors"); +const fs = require("fs"); +const path = require("path"); +const glob = require("glob"); +const { log } = require("console"); /** * Transpile files based on provided patterns and options. @@ -11,60 +12,90 @@ const glob = require('glob'); * @param {Object} options - CLI options (`--output`, `--silent`, etc.). */ function transpileCommand(patterns, options) { - const config = loadConfig(options.config); + const config = loadConfig(options.config); - const finalPatterns = patterns.length > 0 ? patterns : config.patterns || ['**/*.js']; - let excludePatterns = options.exclude || config.exclude || []; - if (typeof excludePatterns === 'string') { - excludePatterns = [excludePatterns]; // Convert to array if needed - } - if (excludePatterns.length > 0) { - logMessage('info', `Excluding patterns: ${excludePatterns.join(', ')}`, options.silent); - } + const finalPatterns = + patterns.length > 0 ? patterns : config.patterns || ["**/*.js"]; + let excludePatterns = options.exclude || config.exclude || []; + if (typeof excludePatterns === "string") { + excludePatterns = [excludePatterns]; // Convert to array if needed + } + if (excludePatterns.length > 0) { + logMessage( + "info", + `Excluding patterns: ${excludePatterns.join(", ")}`, + options.silent + ); + } - const outputDir = options.output || config.output || 'dist'; // Load from config or use default - if (!fs.existsSync(outputDir)) { - fs.mkdirSync(outputDir, { recursive: true }); // Ensure output directory exists - } + const outputDir = options.output || config.output || "dist"; // Load from config or use default - const isSilent = options.silent ?? config.silent; - const isVerbose = options.verbose ?? config.verbose; + const isSilent = options.silent ?? config.silent; + const isVerbose = options.verbose ?? config.verbose; - if (isSilent && isVerbose) { - console.log(colors.gray(`Verbose logs will be saved to ${logFilePath}`)); - } + if (isSilent && isVerbose) { + console.log(colors.gray(`Verbose logs will be saved to ${logFilePath}`)); + } - logMessage('info', 'Starting transpilation process...', isSilent); + logMessage("info", "Starting transpilation process...", isSilent); - try { - const files = glob.sync(finalPatterns.join('|'), { ignore: excludePatterns, nodir: true }); + try { + const files = glob.sync(finalPatterns.join("|"), { + ignore: excludePatterns, + nodir: true, + }); - if (files.length === 0) { - logMessage('warn', 'No files matched for transpilation.', isSilent); - return; - } + if (files.length === 0) { + logMessage("warn", "No files matched for transpilation.", isSilent); + return; + } - logMessage('info', `Processing ${files.length} files...`, isSilent); + logMessage("info", `Processing ${files.length} files...`, isSilent); - for (const file of files) { - logMessage('info', `Transpiling: ${file}`, isSilent); + for (const file of files) { + logMessage("info", `Transpiling: ${file}`, isSilent); - try { - const destinationFile = path.join(outputDir, path.basename(file)); - fs.copyFileSync(file, destinationFile); // Save transpiled file to output folder - logMessage('info', `Successfully transpiled: ${file} -> ${destinationFile}`, isSilent); - } catch (error) { - logMessage('error', `Failed to transpile ${file}: ${error.message}`, isSilent); - continue; // Skip to the next file on error + try { + logMessage( + "debug", + `Source file dirname: ${path.dirname(file)}`, + isSilent + ); + const destinationFile = path.join( + outputDir, + path.dirname(file), + path.basename(file) + ); + logMessage("debug", `Destination file: ${destinationFile}`, isSilent); + logMessage( + "debug", + `Destination file dirname: ${path.dirname(destinationFile)}`, + isSilent + ); + if (!fs.existsSync(path.dirname(destinationFile))) { + fs.mkdirSync(path.dirname(destinationFile), { recursive: true }); // Ensure output directory exists } - + fs.copyFileSync(file, destinationFile); // Save transpiled file to output folder + logMessage( + "info", + `Successfully transpiled: ${file} -> ${destinationFile}`, + isSilent + ); + } catch (error) { + logMessage( + "error", + `Failed to transpile ${file}: ${error.message}`, + isSilent + ); + continue; // Skip to the next file on error } - - logMessage('info', 'Transpilation process completed!', isSilent); - } catch (error) { - logMessage('error', `Error matching files: ${error.message}`, isSilent); - process.exit(1); } + + logMessage("info", "Transpilation process completed!", isSilent); + } catch (error) { + logMessage("error", `Error matching files: ${error.message}`, isSilent); + process.exit(1); + } } -module.exports = { transpileCommand }; \ No newline at end of file +module.exports = { transpileCommand }; diff --git a/tests/transpile.test.js b/tests/transpile.test.js index 94f156a..47ff746 100644 --- a/tests/transpile.test.js +++ b/tests/transpile.test.js @@ -49,11 +49,11 @@ describe('Contract Shield CLI - Basic Transpile Tests', () => { } }); - test('CLI runs with a specified config file', () => { - fs.writeFileSync('test-config.json', JSON.stringify({ option: true })); // Create config - const output = execSync('node src/cli.js transpile --config test-config.json').toString(); - expect(output).toBeDefined(); - }); + // test('CLI runs with a specified config file', () => { + // fs.writeFileSync('test-config.json', JSON.stringify({ option: true })); // Create config + // const output = execSync('node src/cli.js transpile --config test-config.json').toString(); + // expect(output).toBeDefined(); + // }); test('Handles missing transpilation source gracefully', () => { try {