Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
15af2e4e2d | |||
59c6e72187 | |||
5369e8d931 | |||
88444e835f |
14
changelog.md
14
changelog.md
@ -1,5 +1,19 @@
|
||||
# Changelog
|
||||
|
||||
## 2024-11-05 - 2.2.0 - feat(cli)
|
||||
Enhance CLI for TypeScript folder compilation ordering based on rank and predefined rules.
|
||||
|
||||
- CLI now supports automatic ordering of TypeScript folders for compilation using tspublish.json based ranking.
|
||||
- Ensures 'ts_interfaces' and 'ts_shared' are always transpiled first if certain conditions are met.
|
||||
- Updated TypeScript compilerOptions to support additional path transformations.
|
||||
- Updated dependencies versions and added '@git.zone/tspublish' in ts/plugins.ts.
|
||||
|
||||
## 2024-10-27 - 2.1.85 - fix(compiler)
|
||||
Improve path handling in compiler options
|
||||
|
||||
- Refactored path import in tsbuild.classes.compiler.ts.
|
||||
- Enhanced mergeCompilerOptions to read paths and baseUrl from tsconfig.json if present.
|
||||
|
||||
## 2024-07-22 - 2.1.84 - fix(cli)
|
||||
Fixed transpilation order issue in tsfolders command
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@git.zone/tsbuild",
|
||||
"version": "2.1.84",
|
||||
"version": "2.2.0",
|
||||
"private": false,
|
||||
"description": "TypeScript nightly to easily make use of latest features",
|
||||
"main": "dist_ts/index.js",
|
||||
@ -28,6 +28,7 @@
|
||||
},
|
||||
"homepage": "https://gitlab.com/pushrocks/tsn#README",
|
||||
"dependencies": {
|
||||
"@git.zone/tspublish": "^1.7.5",
|
||||
"@push.rocks/early": "^4.0.4",
|
||||
"@push.rocks/smartcli": "^4.0.11",
|
||||
"@push.rocks/smartdelay": "^3.0.5",
|
||||
@ -35,12 +36,12 @@
|
||||
"@push.rocks/smartlog": "^3.0.7",
|
||||
"@push.rocks/smartpath": "^5.0.18",
|
||||
"@push.rocks/smartpromise": "^4.0.4",
|
||||
"typescript": "5.5.2"
|
||||
"typescript": "5.6.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@git.zone/tsrun": "^1.2.47",
|
||||
"@push.rocks/tapbundle": "^5.0.23",
|
||||
"@types/node": "^20.14.8"
|
||||
"@types/node": "^22.8.7"
|
||||
},
|
||||
"files": [
|
||||
"ts/**/*",
|
||||
|
4582
pnpm-lock.yaml
generated
4582
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@git.zone/tsbuild',
|
||||
version: '2.1.84',
|
||||
version: '2.2.0',
|
||||
description: 'TypeScript nightly to easily make use of latest features'
|
||||
}
|
||||
|
@ -5,6 +5,13 @@ export {
|
||||
path
|
||||
}
|
||||
|
||||
// @git.zone scope
|
||||
import * as tspublish from '@git.zone/tspublish';
|
||||
|
||||
export {
|
||||
tspublish
|
||||
}
|
||||
|
||||
// @push.rocks scope
|
||||
import * as smartcli from '@push.rocks/smartcli';
|
||||
import * as smartdelay from '@push.rocks/smartdelay';
|
||||
|
@ -1,5 +1,6 @@
|
||||
// import all the stuff we need
|
||||
import * as plugins from './plugins.js';
|
||||
import * as paths from './paths.js';
|
||||
import type { CompilerOptions, ScriptTarget, ModuleKind } from './tsbuild.exports.js';
|
||||
|
||||
/**
|
||||
@ -20,6 +21,7 @@ export const compilerOptionsDefault: CompilerOptions = {
|
||||
esModuleInterop: true,
|
||||
useDefineForClassFields: false,
|
||||
verbatimModuleSyntax: true,
|
||||
baseUrl: './',
|
||||
};
|
||||
|
||||
/**
|
||||
@ -49,6 +51,23 @@ export const mergeCompilerOptions = (
|
||||
moduleResolution: plugins.typescript.ModuleResolutionKind.NodeJs,
|
||||
}
|
||||
: {}),
|
||||
...(() => {
|
||||
const returnObject: CompilerOptions = {};
|
||||
console.log(`looking at tsconfig.json at ${paths.cwd}`);
|
||||
const tsconfig = plugins.smartfile.fs.toObjectSync(plugins.path.join(paths.cwd, 'tsconfig.json'));
|
||||
if (tsconfig && tsconfig.compilerOptions && tsconfig.compilerOptions.baseUrl) {
|
||||
console.log('baseUrl found in tsconfig.json');
|
||||
returnObject.baseUrl = tsconfig.compilerOptions.baseUrl;
|
||||
}
|
||||
if (tsconfig && tsconfig.compilerOptions && tsconfig.compilerOptions.paths) {
|
||||
console.log('paths found in tsconfig.json');
|
||||
returnObject.paths = tsconfig.compilerOptions.paths;
|
||||
for (const path of Object.keys(tsconfig.compilerOptions.paths)) {
|
||||
returnObject.paths[path][0] = returnObject.paths[path][0].replace('./ts_', './dist_ts_');
|
||||
}
|
||||
}
|
||||
return returnObject;
|
||||
})(),
|
||||
};
|
||||
|
||||
console.log(mergedOptions);
|
||||
|
@ -37,36 +37,52 @@ export const runCli = async () => {
|
||||
*/
|
||||
tsbuildCli.addCommand('tsfolders').subscribe(async (argvArg) => {
|
||||
const tsFolders = await plugins.smartfile.fs.listFolders(paths.cwd, /^ts/);
|
||||
// lets make sure shared is always transpiled first
|
||||
const indexShared = tsFolders.indexOf('ts_shared');
|
||||
if (indexShared > -1) {
|
||||
tsFolders.splice(indexShared, 1);
|
||||
tsFolders.unshift('ts_shared');
|
||||
|
||||
// Now tsFolders contains all other folders except 'ts_shared' and 'ts_interfaces'
|
||||
|
||||
// We've established a base order. Now let's look at tspublish.json based ranking.
|
||||
const tsPublishInstance = new plugins.tspublish.TsPublish();
|
||||
const tsPublishModules = await tsPublishInstance.getModuleSubDirs(paths.cwd);
|
||||
// tsPublishModules is an object: { [folderName]: tspublishJsonData }
|
||||
|
||||
// Create an array with folder names and their ranks
|
||||
const foldersWithOrder = [];
|
||||
|
||||
for (const folder of tsFolders) {
|
||||
let rank = Infinity; // Default rank if not specified
|
||||
if (tsPublishModules[folder] && tsPublishModules[folder].order !== undefined) {
|
||||
rank = tsPublishModules[folder].order;
|
||||
}
|
||||
foldersWithOrder.push({ folder, rank });
|
||||
}
|
||||
|
||||
// Sort the folders based on rank
|
||||
foldersWithOrder.sort((a, b) => a.rank - b.rank);
|
||||
|
||||
// lets make sure interfaces are always transpiled first
|
||||
const indexInterfaces = tsFolders.indexOf('ts_interfaces');
|
||||
if (indexInterfaces > -1) {
|
||||
tsFolders.splice(indexInterfaces, 1);
|
||||
tsFolders.unshift('ts_interfaces');
|
||||
// Construct the sorted list of folders
|
||||
const sortedTsFolders = [];
|
||||
|
||||
// Add the rest of the folders in sorted order
|
||||
for (const item of foldersWithOrder) {
|
||||
sortedTsFolders.push(item.folder);
|
||||
}
|
||||
|
||||
// Let's make sure 'ts_shared' is always transpiled first
|
||||
const ensurePosition = (folderNameArg: string, ensuredPosition: number) => {
|
||||
if (tsFolders.indexOf(folderNameArg) > -1 && Object.keys(tsPublishModules).indexOf(folderNameArg) === -1) {
|
||||
sortedTsFolders.splice(tsFolders.indexOf(folderNameArg), 1);
|
||||
sortedTsFolders.splice(ensuredPosition, 0, folderNameArg);
|
||||
}
|
||||
}
|
||||
|
||||
ensurePosition('ts_interfaces', 0);
|
||||
ensurePosition('ts_shared', 1);
|
||||
|
||||
|
||||
const compilationCommandObject: { [key: string]: string } = {};
|
||||
console.log(`compiling in this order:`);
|
||||
console.log(tsFolders);
|
||||
for (const tsFolder of tsFolders) {
|
||||
compilationCommandObject[`./${tsFolder}/**/*.ts`] = `./dist_${tsFolder}`;
|
||||
}
|
||||
await tsbuild.compileGlobStringObject(compilationCommandObject, {}, process.cwd(), argvArg);
|
||||
});
|
||||
|
||||
/**
|
||||
* the custom command compiles any customDir to dist_customDir
|
||||
*/
|
||||
tsbuildCli.addCommand('interfaces').subscribe(async (argvArg) => {
|
||||
const tsFolders = ['ts_interfaces'];
|
||||
const compilationCommandObject: { [key: string]: string } = {};
|
||||
for (const tsFolder of tsFolders) {
|
||||
console.log(sortedTsFolders);
|
||||
for (const tsFolder of sortedTsFolders) {
|
||||
compilationCommandObject[`./${tsFolder}/**/*.ts`] = `./dist_${tsFolder}`;
|
||||
}
|
||||
await tsbuild.compileGlobStringObject(compilationCommandObject, {}, process.cwd(), argvArg);
|
||||
|
Reference in New Issue
Block a user