CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-vue--cli-plugin-typescript

Vue CLI plugin that adds comprehensive TypeScript support to Vue.js projects with webpack configuration, project scaffolding, and build optimization.

Pending
Overview
Eval results
Files

file-conversion.mddocs/

File Conversion

Utilities for converting JavaScript files to TypeScript during project setup with configurable conversion strategies.

Capabilities

Convert Function

Main conversion function that handles JavaScript to TypeScript file conversion.

/**
 * Converts JavaScript files to TypeScript during project generation
 * Handles file renaming and content preservation with configurable strategies
 * @param api - Generator API instance providing file manipulation methods
 * @param options - Conversion configuration options
 */
function convert(api, options: ConvertOptions = {}): void;

interface ConvertOptions {
  convertJsToTs?: boolean;     // Convert all .js files to .ts (default: true)
}

Usage Example:

// Used internally by the generator module
const convert = require('@vue/cli-plugin-typescript/generator/convert');

// Applied during project generation
convert(api, { convertJsToTs: true });

File Processing Strategy

Post-processing logic for handling JavaScript to TypeScript conversion:

/**
 * File processing logic applied after template rendering
 * Uses api.postProcessFiles to modify generated file structure
 * @param files - File object containing generated files
 */
api.postProcessFiles((files) => {
  // Conversion logic applied here
});

Full Conversion Mode

When convertJsToTs is true (default), converts all applicable JavaScript files:

/**
 * Full conversion mode configuration
 * Converts all .js files to .ts except excluded patterns
 */
const fullConversionConfig = {
  jsRE: /\.js$/,                              // Matches .js files
  excludeRE: /^tests\/e2e\/|(\.config|rc)\.js$/, // Default exclusions
  
  // Modified exclusions when e2e-webdriverio plugin is present
  webdriverioExcludeRE: /(\.config|rc)\.js$/
};

Full Conversion Process:

  1. Identify all .js files in the project
  2. Skip files matching exclusion patterns (config files, e2e tests)
  3. For each .js file, create corresponding .ts file with same content
  4. If .ts file already exists, prioritize existing .ts file
  5. Remove original .js file after successful conversion

Selective Conversion Mode

When convertJsToTs is false, only converts the main entry file:

/**
 * Selective conversion mode configuration
 * Only converts the main application entry file to TypeScript
 */
const selectiveConversionConfig = {
  entryFile: api.entryFile,        // Main entry file (usually src/main.js)
  targetFile: string               // Converted .ts version of entry file
};

Selective Conversion Process:

  1. Identify main entry file (typically src/main.js)
  2. Create TypeScript version (e.g., src/main.ts)
  3. Copy content from JavaScript file to TypeScript file
  4. Remove original JavaScript entry file
  5. Leave all other JavaScript files unchanged

File Exclusion Patterns

Regular expressions for excluding files from conversion:

/**
 * File exclusion pattern configuration
 * Defines which files should not be converted to TypeScript
 */
const exclusionPatterns = {
  // Default exclusions
  default: /^tests\/e2e\/|(\.config|rc)\.js$/,
  
  // WebDriverIO specific exclusions (less restrictive)
  webdriverio: /(\.config|rc)\.js$/
};

Excluded File Types:

  • Configuration files: *.config.js, *rc.js
  • E2E test files: tests/e2e/**/*.js (unless using WebDriverIO)
  • Build and tooling configuration files

File Content Preservation

Content handling during conversion process:

/**
 * File content preservation during conversion
 * Ensures no content is lost during .js to .ts conversion
 */
const contentPreservation = {
  sourceContent: files[jsFile],     // Original JavaScript content
  targetContent: files[tsFile],     // Existing TypeScript content (if any)
  
  // Priority: existing .ts file > converted .js file content
  finalContent: files[tsFile] || files[jsFile]
};

Integration with Plugin System

E2E testing plugin integration affecting conversion behavior:

/**
 * Plugin integration affecting file conversion behavior
 * Different exclusion patterns based on installed plugins
 */
if (api.hasPlugin('e2e-webdriverio')) {
  // Use less restrictive exclusion pattern
  // Allows WebDriverIO test files to be converted to TypeScript
  excludeRE = /(\.config|rc)\.js$/;
} else {
  // Use default exclusion pattern  
  // Excludes all e2e test files from conversion
  excludeRE = /^tests\/e2e\/|(\.config|rc)\.js$/;
}

Conversion Examples

Full Conversion Example:

// Before conversion (project files)
files = {
  'src/main.js': 'import Vue from "vue"...',
  'src/components/HelloWorld.js': 'export default {...}',
  'vue.config.js': 'module.exports = {...}',
  'tests/e2e/specs/test.js': 'describe(...)'
};

// After conversion (convertJsToTs: true)
files = {
  'src/main.ts': 'import Vue from "vue"...',
  'src/components/HelloWorld.ts': 'export default {...}',
  'vue.config.js': 'module.exports = {...}', // Excluded
  'tests/e2e/specs/test.js': 'describe(...)'  // Excluded
};

Selective Conversion Example:

// Before conversion (project files)
files = {
  'src/main.js': 'import Vue from "vue"...',
  'src/components/HelloWorld.js': 'export default {...}',
  'src/utils/helpers.js': 'export function helper() {...}'
};

// After conversion (convertJsToTs: false)
files = {
  'src/main.ts': 'import Vue from "vue"...',           // Converted
  'src/components/HelloWorld.js': 'export default {...}', // Unchanged
  'src/utils/helpers.js': 'export function helper() {...}' // Unchanged
};

Conflict Resolution:

// When both .js and .ts files exist
files = {
  'src/component.js': '// JavaScript version',
  'src/component.ts': '// TypeScript version (existing)'
};

// Result: TypeScript version is preserved
files = {
  'src/component.ts': '// TypeScript version (existing)'
  // JavaScript version is removed
};

Install with Tessl CLI

npx tessl i tessl/npm-vue--cli-plugin-typescript

docs

file-conversion.md

index.md

project-generation.md

project-migration.md

webpack-config.md

tile.json