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

project-migration.mddocs/

Project Migration

Migration utilities for upgrading existing projects to TypeScript support with version-specific transformations and dependency management.

Capabilities

Migrator Function

Main migration function for existing projects upgrading to TypeScript support.

/**
 * Migrates existing projects to TypeScript support
 * Handles dependency updates and Vue version-specific transformations
 * @param api - Migrator API instance providing project modification methods
 * @param options - Migration configuration options
 * @param rootOptions - Root project options including Vue version information
 */
function migrator(api, options: any, rootOptions: RootOptions): void;

interface RootOptions {
  vueVersion?: number;         // Vue major version (2 or 3)
  [key: string]: any;          // Additional project configuration
}

Usage Example:

// Applied automatically during Vue CLI plugin migration
const migrator = require('@vue/cli-plugin-typescript/migrator');

// Called during project upgrade or migration
migrator(api, {}, { vueVersion: 3 });

Dependency Management

Automatic TypeScript dependency installation with version compatibility.

/**
 * Dependency configuration for migration
 * Ensures TypeScript is added without version conflicts
 */
const migrationDependencies = {
  devDependencies: {
    typescript: string  // Version from plugin's package.json
  }
};

// Installation options
const installOptions = {
  warnIncompatibleVersions: false  // Suppress version warnings during migration
};

Vue 3 Migration Support

Specialized migration support for Vue 3 projects with component type updates.

/**
 * Vue 3 specific migration logic
 * Updates Vue component type declarations for Vue 3 compatibility
 */
if (rootOptions.vueVersion === 3) {
  // Apply Vue 3 component type migration
  api.transformScript('src/shims-vue.d.ts', codemod);
}

Component Type Migration

AST transformation for Vue 3 component type declarations:

/**
 * Component type migration using AST transformations
 * Updates outdated Vue 3 component type patterns
 * @param filePath - Path to the file being transformed
 * @param codemod - JSCodeshift transformation function
 */
api.transformScript(
  'src/shims-vue.d.ts', 
  require('../codemods/migrateComponentType')
);

Codemod Transformations

Component Type Codemod

JSCodeshift transformation for migrating Vue 3 component type definitions:

/**
 * Migrates Vue 3 component type definitions from outdated patterns
 * Transforms ReturnType<typeof defineComponent> to DefineComponent
 * @param file - File AST and source information
 * @param api - JSCodeshift API instance
 * @returns Transformed source code
 */
function migrateComponentType(file, api): string;

Migration Pattern

Specific transformation pattern for Vue 3 component types:

// Before migration (outdated pattern)
declare module '*.vue' {
  import { defineComponent } from 'vue';
  const component: ReturnType<typeof defineComponent>;
  export default component;
}

// After migration (current pattern)  
declare module '*.vue' {
  import { DefineComponent } from 'vue';
  const component: DefineComponent<{}, {}, any>;
  export default component;
}

AST Transformation Details

Low-level AST transformation operations:

/**
 * AST transformation configuration for component type migration
 * Identifies and replaces specific TypeScript type patterns
 */
const transformationConfig = {
  // Target pattern: ReturnType<typeof defineComponent>
  targetPattern: {
    typeName: { name: 'ReturnType' },
    typeParameters: {
      params: [{
        exprName: { name: 'defineComponent' }
      }]
    }
  },
  
  // Replacement pattern: DefineComponent<{}, {}, any>
  replacementPattern: {
    typeName: 'DefineComponent',
    typeParameters: ['{}', '{}', 'any']
  }
};

Import Statement Management

Automatic import statement updates during transformation:

/**
 * Import statement management during component type migration
 * Updates Vue imports to include DefineComponent type
 */
const importManagement = {
  // Add DefineComponent to existing Vue imports
  addImport: 'DefineComponent',
  
  // Remove unused defineComponent import (if no other usage)
  removeUnusedImport: 'defineComponent'
};

Parser Configuration

JSCodeshift parser configuration for TypeScript files:

/**
 * Parser configuration for TypeScript file transformations
 * Ensures proper TypeScript AST parsing
 */
migrateComponentType.parser = 'ts';

Code Quality Preservation

Source code formatting and style preservation:

/**
 * Code formatting preservation during transformation
 * Maintains original code style and formatting preferences
 */
const formattingConfig = {
  lineTerminator: '\n',        // Preserve line endings
  quote: 'single' | 'double'   // Detect and preserve quote style
};

Usage Detection

Smart import usage detection to avoid breaking changes:

/**
 * Import usage detection for safe transformations
 * Prevents removal of imports that are still needed
 */
const usageDetection = {
  // Find all references to defineComponent
  findUsages: (ast, identifier) => {
    // Filter out import/export statements
    // Return actual usage locations
  },
  
  // Safe to remove import if no usages found
  canRemoveImport: boolean
};

Migration Examples

Successful Migration:

// Input file (src/shims-vue.d.ts)
declare module '*.vue' {
  import { defineComponent } from 'vue';
  const component: ReturnType<typeof defineComponent>;
  export default component;
}

// Output after migration
declare module '*.vue' {
  import { DefineComponent } from 'vue';
  const component: DefineComponent<{}, {}, any>;
  export default component;
}

Import Cleanup:

// Before - defineComponent not used elsewhere
import { defineComponent } from 'vue';

// After - defineComponent removed, DefineComponent added
import { DefineComponent } from 'vue';

Conditional Migration:

// Migration only applies to specific patterns
// Files without target pattern remain unchanged
if (componentDecl.length !== 1) {
  return file.source; // No changes made
}

Migration Process:

  1. Check if project is using Vue 3
  2. Install TypeScript dependency with compatibility settings
  3. Apply component type transformation to src/shims-vue.d.ts
  4. Update import statements (add DefineComponent, remove unused defineComponent)
  5. Preserve code formatting and style preferences
  6. Return transformed source code or original if no changes needed

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