npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

typescript-path-fix

v1.0.8

Published

Convert typescript paths starting with "@" to relative paths

Downloads

18

Readme

typescript-path-fix

Fix path resolution when compiling typescript.

Why you need this module?

As you know, Typescript introduced the flexible way of resolving paths using a mapping inside "tsconfig.json". Those paths are prefixed with symbol "@". Unfortunately, those paths do not work when compiling typescript to JavaScript. This package resolves this issue by replacing them with relative paths and setting the files extensions. You need to execute this package after compiling typescript in your pipeline.


Typescript do not support to import or export files with extension ".mjs". Because of this restriction, you need to execute this package on the compiled code. Otherwise, you can execute this package before or after the typescript compilation process.


//* Convert flexible typescript path like:
import { abc } from '@src/some/file';
// And
const myLib = await import('@lib/somelib');
// And
export * from '@src/some/file';

//* Into supported javascript relative paths:
import { abc } from '../some/file.js';
// OR
import { abc } from '../some/file/index.js';

const myLib = await import('../lib/somelib/index.js');
export * from './some/file.js';

// OR any extension: .mjs or .cjs

Using with Gulp

Gulp is the wildly used task runner for NodeJS.

Using old CommonJs

const { src, dest }= require('gulp');
const { Converter }= require('typescript-path-fix');
const GulpTypescript = require('gulp-typescript');

// Create your compiling logic
const TsProject = GulpTypescript.createProject('tsconfig.json');

// Create Converter instance
const tsPathFix = new Converter('tsconfig.json');

/** Your compiler function */
export.default= function(){
	return src('src/**/*.ts')
		// COMPILE TS TO JS
		.pipe(TsProject())
		// EXEC CONVERTER
		.pipe(tsPathFix.gulp())
		.pipe(dest('dist'));
};

Using typescript or Js modules

import Gulp from 'gulp';
import GulpTypescript from 'gulp-typescript';
import { Converter } from 'typescript-path-fix';

// -> because Gulp is a commonjs module
const { src, dest } = Gulp;

//* Init your converter
const tsPathFix = new Converter('tsconfig.json');

//* Init your typescript compiler
const TsProject = GulpTypescript.createProject('tsconfig.json');

/** Your compiler function */
export default function () {
	return (
		src('src/**/*.ts')
			// COMPILE TS TO JS
			.pipe(TsProject())
			// EXEC CONVERTER
			.pipe(tsPathFix.gulp())
			.pipe(dest('dist'))
	);
}

Make your app to support both old CommonJs and new ESNEXT

import Gulp from 'gulp';
import GulpTypescript from 'gulp-typescript';
import { Converter } from 'typescript-path-fix';

// -> because Gulp is a commonjs module
const { src, dest } = Gulp;

//* Init your converter
const tsPathFix = new Converter('tsconfig.json');

//* Init typescript compiler for CommonJs
const TsProjectCommonJs = GulpTypescript.createProject('tsconfig.json');
//* Init typescript compiler for ESNEXT
const TsProjectEsnext = GulpTypescript.createProject('tsconfig.json', {
	target: 'ESNext',
	module: 'ESNext'
});

/** Your compiler function */
export function compileCommonJS() {
	return (
		src('src/**/*.ts')
			// COMPILE TS TO JS
			.pipe(TsProjectCommonJs())
			// EXEC CONVERTER
			.pipe(tsPathFix.gulp())
			.pipe(dest('dist/commonjs'))
	);
}

export function compileEsnext() {
	return (
		src('src/**/*.ts')
			// COMPILE TS TO JS
			.pipe(TsProjectEsnext())
			// EXEC CONVERTER: Set target extension to ".mjs"
			.pipe(tsPathFix.gulp('.mjs'))
			.pipe(dest('dist/esnext'))
	);
}

Compile using an other task runner or standalone:

In this case, write your own adapter for your task runner or use it as standalone as follow:

import { Converter } from 'typescript-path-fix';

//* Start by creating the converter object
const tsPathFix = new Converter('tsconfig.json');

//* Compile your file
var fileContent: string= tsPathFix.convert(
	/**
	 * Path to target source file
	 */
	filePath: string,
	/**
	 * @Optional file content. If missing, the module will load it Synchronously
	 */
	contents?: Buffer | string,
	/**
	 * @Optional Destination file extension,
	 * @default ".js"
	 */
	targetExt: '.js' | '.mjs' | '.cjs' = '.js'
	);

Author

khalid RAFIK Senior full Stack Web, Mobile, Data & Security Engineer [email protected]