python-to-typescript-porting-mcp-server
Version:
Comprehensive MCP server providing systematic tools and references for Python-to-TypeScript porting with real-world examples
80 lines • 2.29 kB
JavaScript
import * as crypto from 'crypto';
/**
* Generate a secure random ID using crypto
*/
export function randomid(byteSize = 8) {
const bytes = crypto.getRandomValues(new Uint8Array(byteSize));
return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('');
}
/**
* Validate if a filename is acceptable for TypeScript/JavaScript
*/
export function validFilename(filename) {
return /^[a-zA-Z0-9_-]+\.(js|cjs|mjs|ts|cts|mts)$/.test(filename);
}
/**
* Check if filename is a JavaScript file
*/
export function isJavaScriptFile(filename) {
return /\.(js|cjs|mjs)$/.test(filename);
}
/**
* Check if filename is a TypeScript file
*/
export function isTypeScriptFile(filename) {
return /\.(ts|cts|mts)$/.test(filename);
}
/**
* Determine language from filename extension
*/
export function languageFromFilename(filename) {
if (isJavaScriptFile(filename)) {
return 'javascript';
}
else if (isTypeScriptFile(filename)) {
return 'typescript';
}
else {
throw new Error(`Language is not one of 'javascript' or 'typescript' based on filename '${filename}'`);
}
}
/**
* Get file extensions for a language
*/
export function extensionsForLanguage(language) {
switch (language) {
case 'javascript':
return ['js', 'cjs', 'mjs'];
case 'typescript':
return ['ts', 'cts', 'mts'];
default:
throw new Error(`Unrecognized language ${language}`);
}
}
/**
* Get default file extension for a language
*/
export function getDefaultExtensionForLanguage(language) {
switch (language) {
case 'javascript':
return '.js';
case 'typescript':
return '.ts';
default:
throw new Error(`Unrecognized language ${language}`);
}
}
/**
* Generate a suitable filename for porting steps
*/
export function generatePortingFilename(stepTitle, language = 'typescript') {
const sanitized = stepTitle
.toLowerCase()
.replace(/[^a-z0-9]/g, '-')
.replace(/-+/g, '-')
.replace(/^-|-$/g, '')
.substring(0, 30);
const extension = getDefaultExtensionForLanguage(language);
return `${sanitized}-${randomid(4)}${extension}`;
}
//# sourceMappingURL=utils.js.map