diff --git a/package-lock.json b/package-lock.json index a8d6093..b5a1590 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,14 +10,16 @@ "license": "MIT", "dependencies": { "@pushrocks/smartfile": "^9.0.6", + "@pushrocks/smartshell": "^2.0.30", "ts-node": "^10.7.0", - "typescript": "^4.6.2" + "typescript": "4.7.0-dev.20220311" }, "bin": { "tsrun": "cli.js" }, "devDependencies": { "@gitzone/tsbuild": "^2.1.43", + "@pushrocks/smartcli": "^3.0.14", "@types/node": "^17.0.21", "node-fetch": "^3.2.2", "tslint": "^6.1.2", @@ -109,20 +111,6 @@ "tsbuild": "cli.js" } }, - "node_modules/@gitzone/tsbuild/node_modules/typescript": { - "version": "4.7.0-dev.20220311", - "resolved": "https://verdaccio.lossless.one/typescript/-/typescript-4.7.0-dev.20220311.tgz", - "integrity": "sha512-ZNMv/ta7e5SqRO591yC36VBmsM4+S6u60MFW3xOwKrrm/RbPCNJjwS+lmSY57avA0VIAUnokWlm+ThWBNo0awQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, "node_modules/@pushrocks/consolecolor": { "version": "2.0.1", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fconsolecolor/-/consolecolor-2.0.1.tgz", @@ -156,7 +144,6 @@ "version": "4.0.20", "resolved": "https://verdaccio.lossless.one/@pushrocks%2flik/-/lik-4.0.20.tgz", "integrity": "sha512-DJbxSZFwDuHe4W7dU5anyO72gy4woZpkxSpySphdHbSYZf50VJ1sMOKIccSpgRIczeB0BTR5i0c+cKnNFrg2jw==", - "dev": true, "license": "MIT", "dependencies": { "@pushrocks/smartdelay": "^2.0.10", @@ -193,6 +180,16 @@ "@pushrocks/smartpromise": "^3.0.6" } }, + "node_modules/@pushrocks/smartexit": { + "version": "1.0.20", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartexit/-/smartexit-1.0.20.tgz", + "integrity": "sha512-u/KgA7s2zAtZ7gZvL13HZbO3mZATvjfCLU8Ez6h8VweG8UsIBVaPfYziMDCmJOWIPYLGzEW8eG/u4mCHuyLBow==", + "license": "MIT", + "dependencies": { + "@pushrocks/lik": "^4.0.20", + "@pushrocks/smartdelay": "^2.0.3" + } + }, "node_modules/@pushrocks/smartfile": { "version": "9.0.6", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile/-/smartfile-9.0.6.tgz", @@ -381,6 +378,20 @@ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", "license": "0BSD" }, + "node_modules/@pushrocks/smartshell": { + "version": "2.0.30", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartshell/-/smartshell-2.0.30.tgz", + "integrity": "sha512-HPgdTFzfzhk2TQau/jVdYNSANlxyBZdqq2vyZ+bZahegVHfH/27Zur5Fk+2vE16VJjJMqP7zcvDITUe2+ipgJg==", + "license": "MIT", + "dependencies": { + "@pushrocks/smartdelay": "^2.0.13", + "@pushrocks/smartexit": "^1.0.20", + "@pushrocks/smartpromise": "^3.1.6", + "@types/which": "^2.0.1", + "tree-kill": "^1.2.2", + "which": "^2.0.2" + } + }, "node_modules/@pushrocks/smarttime": { "version": "3.0.45", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmarttime/-/smarttime-3.0.45.tgz", @@ -509,6 +520,12 @@ "@types/node": "*" } }, + "node_modules/@types/which": { + "version": "2.0.1", + "resolved": "https://verdaccio.lossless.one/@types%2fwhich/-/which-2.0.1.tgz", + "integrity": "sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ==", + "license": "MIT" + }, "node_modules/@types/yargs": { "version": "16.0.3", "resolved": "https://verdaccio.lossless.one/@types%2fyargs/-/yargs-16.0.3.tgz", @@ -1105,6 +1122,12 @@ "dev": true, "license": "MIT" }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://verdaccio.lossless.one/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "license": "ISC" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://verdaccio.lossless.one/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1471,6 +1494,15 @@ "readable-stream": "3" } }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://verdaccio.lossless.one/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/ts-node": { "version": "10.7.0", "resolved": "https://verdaccio.lossless.one/ts-node/-/ts-node-10.7.0.tgz", @@ -1565,7 +1597,7 @@ "node": ">=4.0.0" } }, - "node_modules/tsutils": { + "node_modules/tslint/node_modules/tsutils": { "version": "2.29.0", "resolved": "https://verdaccio.lossless.one/tsutils/-/tsutils-2.29.0.tgz", "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", @@ -1579,9 +1611,9 @@ } }, "node_modules/typescript": { - "version": "4.6.2", - "resolved": "https://verdaccio.lossless.one/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "version": "4.7.0-dev.20220311", + "resolved": "https://verdaccio.lossless.one/typescript/-/typescript-4.7.0-dev.20220311.tgz", + "integrity": "sha512-ZNMv/ta7e5SqRO591yC36VBmsM4+S6u60MFW3xOwKrrm/RbPCNJjwS+lmSY57avA0VIAUnokWlm+ThWBNo0awQ==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -1622,6 +1654,21 @@ "node": ">= 8" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://verdaccio.lossless.one/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://verdaccio.lossless.one/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -1790,14 +1837,6 @@ "@pushrocks/smartpath": "^4.0.3", "@pushrocks/smartpromise": "^3.1.7", "typescript": "4.7.0-dev.20220311" - }, - "dependencies": { - "typescript": { - "version": "4.7.0-dev.20220311", - "resolved": "https://verdaccio.lossless.one/typescript/-/typescript-4.7.0-dev.20220311.tgz", - "integrity": "sha512-ZNMv/ta7e5SqRO591yC36VBmsM4+S6u60MFW3xOwKrrm/RbPCNJjwS+lmSY57avA0VIAUnokWlm+ThWBNo0awQ==", - "dev": true - } } }, "@pushrocks/consolecolor": { @@ -1830,7 +1869,6 @@ "version": "4.0.20", "resolved": "https://verdaccio.lossless.one/@pushrocks%2flik/-/lik-4.0.20.tgz", "integrity": "sha512-DJbxSZFwDuHe4W7dU5anyO72gy4woZpkxSpySphdHbSYZf50VJ1sMOKIccSpgRIczeB0BTR5i0c+cKnNFrg2jw==", - "dev": true, "requires": { "@pushrocks/smartdelay": "^2.0.10", "@pushrocks/smartmatch": "^1.0.7", @@ -1864,6 +1902,15 @@ "@pushrocks/smartpromise": "^3.0.6" } }, + "@pushrocks/smartexit": { + "version": "1.0.20", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartexit/-/smartexit-1.0.20.tgz", + "integrity": "sha512-u/KgA7s2zAtZ7gZvL13HZbO3mZATvjfCLU8Ez6h8VweG8UsIBVaPfYziMDCmJOWIPYLGzEW8eG/u4mCHuyLBow==", + "requires": { + "@pushrocks/lik": "^4.0.20", + "@pushrocks/smartdelay": "^2.0.3" + } + }, "@pushrocks/smartfile": { "version": "9.0.6", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile/-/smartfile-9.0.6.tgz", @@ -2035,6 +2082,19 @@ } } }, + "@pushrocks/smartshell": { + "version": "2.0.30", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartshell/-/smartshell-2.0.30.tgz", + "integrity": "sha512-HPgdTFzfzhk2TQau/jVdYNSANlxyBZdqq2vyZ+bZahegVHfH/27Zur5Fk+2vE16VJjJMqP7zcvDITUe2+ipgJg==", + "requires": { + "@pushrocks/smartdelay": "^2.0.13", + "@pushrocks/smartexit": "^1.0.20", + "@pushrocks/smartpromise": "^3.1.6", + "@types/which": "^2.0.1", + "tree-kill": "^1.2.2", + "which": "^2.0.2" + } + }, "@pushrocks/smarttime": { "version": "3.0.45", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmarttime/-/smarttime-3.0.45.tgz", @@ -2148,6 +2208,11 @@ "@types/node": "*" } }, + "@types/which": { + "version": "2.0.1", + "resolved": "https://verdaccio.lossless.one/@types%2fwhich/-/which-2.0.1.tgz", + "integrity": "sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ==" + }, "@types/yargs": { "version": "16.0.3", "resolved": "https://verdaccio.lossless.one/@types%2fyargs/-/yargs-16.0.3.tgz", @@ -2555,6 +2620,11 @@ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", "dev": true }, + "isexe": { + "version": "2.0.0", + "resolved": "https://verdaccio.lossless.one/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://verdaccio.lossless.one/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2795,6 +2865,11 @@ "readable-stream": "3" } }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://verdaccio.lossless.one/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" + }, "ts-node": { "version": "10.7.0", "resolved": "https://verdaccio.lossless.one/ts-node/-/ts-node-10.7.0.tgz", @@ -2840,6 +2915,17 @@ "semver": "^5.3.0", "tslib": "^1.13.0", "tsutils": "^2.29.0" + }, + "dependencies": { + "tsutils": { + "version": "2.29.0", + "resolved": "https://verdaccio.lossless.one/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } } }, "tslint-config-prettier": { @@ -2848,19 +2934,10 @@ "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", "dev": true }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://verdaccio.lossless.one/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, "typescript": { - "version": "4.6.2", - "resolved": "https://verdaccio.lossless.one/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==" + "version": "4.7.0-dev.20220311", + "resolved": "https://verdaccio.lossless.one/typescript/-/typescript-4.7.0-dev.20220311.tgz", + "integrity": "sha512-ZNMv/ta7e5SqRO591yC36VBmsM4+S6u60MFW3xOwKrrm/RbPCNJjwS+lmSY57avA0VIAUnokWlm+ThWBNo0awQ==" }, "universalify": { "version": "2.0.0", @@ -2883,6 +2960,14 @@ "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", "dev": true }, + "which": { + "version": "2.0.2", + "resolved": "https://verdaccio.lossless.one/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://verdaccio.lossless.one/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index 05b6e42..e416b3a 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,13 @@ "tsrun": "./cli.js" }, "scripts": { - "test": "(tsbuild && node ./cli.js test/test.ts)", + "test": "(tsbuild && node ./cli.js test/test.js sayhello)", "format": "(gitzone format)", "build": "(tsbuild)" }, "devDependencies": { "@gitzone/tsbuild": "^2.1.43", + "@pushrocks/smartcli": "^3.0.14", "@types/node": "^17.0.21", "node-fetch": "^3.2.2", "tslint": "^6.1.2", @@ -24,8 +25,9 @@ }, "dependencies": { "@pushrocks/smartfile": "^9.0.6", + "@pushrocks/smartshell": "^2.0.30", "ts-node": "^10.7.0", - "typescript": "^4.6.2" + "typescript": "4.7.0-dev.20220311" }, "private": false, "files": [ diff --git a/test/test.ts b/test/test.ts index 79fd77a..4dfcaef 100644 --- a/test/test.ts +++ b/test/test.ts @@ -2,9 +2,13 @@ const textToPost: string = 'Test runs!'; console.log(textToPost); const run = async () => { - // lets test esm - console.warn('remember to enable esm checks once TypeScript 4.5 is released.') - // const nodeFetch = await import('node-fetch'); + const smartcli = await import('@pushrocks/smartcli'); + const smartcliInstance = new smartcli.Smartcli(); + console.log(process.argv) + smartcliInstance.addCommand('sayhello').subscribe(async argvArg => { + console.log('hello there'); + }) + smartcliInstance.startParse(); } run(); \ No newline at end of file diff --git a/ts/index.ts b/ts/index.ts index e91defa..eb4bfb4 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,32 +1,27 @@ -import * as path from 'path'; -import * as tsNode from 'ts-node'; -import { CompilerOptions } from 'typescript'; +import * as plugins from './plugins.js'; -const defaultTsNodeOptions: tsNode.CreateOptions = { - compilerOptions: { - lib: ['dom'], - target: 'es2020', // Script Target should be a string -> 2 is for ES2015 - experimentalDecorators: true, - esModuleInterop: true, - strictNullChecks: false, - moduleResolution: 'node12', - module: 'es2020', - importsNotUsedAsValues: 'preserve', - } as CompilerOptions, - skipIgnore: true, - esm: true, -}; +import { dirname } from 'path'; +import { fileURLToPath } from 'url'; -tsNode.register(defaultTsNodeOptions); +const __dirname = dirname(fileURLToPath(import.meta.url)); export const runCli = async () => { // contents of argv array // process.argv[0] -> node Executable // process.argv[1] -> tsrun executable const pathToTsFile = process.argv[2]; - - const pathToLoad = path.join(process.cwd(), pathToTsFile); - process.argv.splice(2, 1); + + const tsNodeLoaderPath = plugins.path.join(__dirname, 'loader.js') + const pathToLoad = plugins.path.join(process.cwd(), pathToTsFile); + process.argv.splice(0, 3); // console.log(process.argv); - import(pathToLoad); + + const smartshellInstance = new plugins.smartshell.Smartshell({ + executor: 'bash' + }); + + smartshellInstance.exec(`node --loader ${tsNodeLoaderPath} ${pathToLoad} ${process.argv.reduce((prevArg, currentArg) => { + return prevArg + ' ' + currentArg; + })}`); + }; diff --git a/ts/loader.ts b/ts/loader.ts new file mode 100644 index 0000000..b140a1e --- /dev/null +++ b/ts/loader.ts @@ -0,0 +1,20 @@ +import * as plugins from './plugins.js'; +import type { CompilerOptions } from 'typescript'; + +const defaultTsNodeOptions: plugins.tsNode.CreateOptions = { + compilerOptions: { + lib: ['dom'], + target: 'es2020', // Script Target should be a string -> 2 is for ES2015 + experimentalDecorators: true, + esModuleInterop: true, + strictNullChecks: false, + moduleResolution: 'node12', + module: 'ESNext', + importsNotUsedAsValues: 'preserve', + } as CompilerOptions, + esm: true, + skipIgnore: true, + transpileOnly: true +}; + +export const { resolve, load, getFormat, transformSource } = plugins.tsNode.createEsmHooks(plugins.tsNode.register(defaultTsNodeOptions)) as any; \ No newline at end of file diff --git a/ts/plugins.ts b/ts/plugins.ts new file mode 100644 index 0000000..7d3243b --- /dev/null +++ b/ts/plugins.ts @@ -0,0 +1,15 @@ +// @pushrocks scope +import * as smartshell from '@pushrocks/smartshell'; + +export { + smartshell +} + +// third party scope +import * as path from 'path'; +import * as tsNode from 'ts-node'; + +export { + path, + tsNode +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..d439366 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "module": "ES2022", + "target": "ES2020", + "moduleResolution": "Node12" + } +} \ No newline at end of file