diff --git a/README.md b/README.md index 25abdf4a52f753e2fdf6f36dd3404cf6e6f12fc0..bacaeb67ede2717aff8de3c752d2c992ff7d26e1 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,8 @@ The idea is based on this [blog post](https://www.metachris.com/2021/04/starting - ~~Add options to add github / gitlab CI actions~~ - ~~Option to setup postCSS and browser env~~ (this will be in another package) -- Add serverless CI option -- for ava.js, work out a way to use `esbuild` instead of `node-ts/register` (just like using `esm`) +- ~~Add serverless CI option (added in 0.3.0)~~ +- ~~for ava.js, work out a way to use `esbuild` instead of `node-ts/register` (just like using `esm`)~~ (v0.5.0) using [esbuild-register](https://github.com/egoist/esbuild-register) --- diff --git a/package-lock.json b/package-lock.json index e7aa01dc69da484aec2de7067318d327de8b045e..54409293449a0aa50ac018ae796a8490aa5cdfec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { "name": "create-tsdev", - "version": "0.2.0", + "version": "0.4.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "0.2.0", + "version": "0.4.0", "license": "MIT", "dependencies": { "fs-extra": "^10.0.0", @@ -21,7 +21,9 @@ "@typescript-eslint/eslint-plugin": "^4.23.0", "@typescript-eslint/parser": "^4.23.0", "ava": "^3.15.0", + "aws-v-cli": "^0.2.3", "esbuild": "^0.12.0", + "esbuild-register": "^2.5.0", "eslint": "^7.26.0", "ts-node": "^9.1.1", "typedoc": "^0.20.36", @@ -726,6 +728,30 @@ "node": ">=10.18.0 <11 || >=12.14.0 <12.17.0 || >=12.17.0 <13 || >=14.0.0 <15 || >=15" } }, + "node_modules/aws-v-cli": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/aws-v-cli/-/aws-v-cli-0.2.3.tgz", + "integrity": "sha512-gs4ngTIb0Hj+JtieaMN4euzEFSbd9iZ0MdSJy5UNg2FFBPqF2zmLqXfGqRUZh2gko3TbjFZOKjHo6Xe3clsXXw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "axios": "^0.21.1", + "progress": "^2.0.3" + }, + "bin": { + "awsv": "index.js", + "awsv-update": "src/updater.js" + } + }, + "node_modules/axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1460,6 +1486,26 @@ "esbuild": "bin/esbuild" } }, + "node_modules/esbuild-register": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-2.5.0.tgz", + "integrity": "sha512-5a8W3rH7IQbIPR9pPXJFkC3+CRMtm/OSpBz3hkWUUU63oPZ3NU6dVDGfaIjKnRizCTIRoGjNE6KEDt5p1sLwEw==", + "dev": true, + "dependencies": { + "esbuild": "^0.11.5", + "jsonc-parser": "^3.0.0" + } + }, + "node_modules/esbuild-register/node_modules/esbuild": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", + "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -1823,6 +1869,26 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", @@ -2462,6 +2528,12 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -5054,6 +5126,25 @@ "yargs": "^16.2.0" } }, + "aws-v-cli": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/aws-v-cli/-/aws-v-cli-0.2.3.tgz", + "integrity": "sha512-gs4ngTIb0Hj+JtieaMN4euzEFSbd9iZ0MdSJy5UNg2FFBPqF2zmLqXfGqRUZh2gko3TbjFZOKjHo6Xe3clsXXw==", + "dev": true, + "requires": { + "axios": "^0.21.1", + "progress": "^2.0.3" + } + }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dev": true, + "requires": { + "follow-redirects": "^1.10.0" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -5608,6 +5699,24 @@ "integrity": "sha512-WfQ00MKm/Y4ysz1u9PCUAsV66k5lbrcEvS6aG9jhBIavpB94FBdaWeBkaZXxCZB4w+oqh+j4ozJFWnnFprOXbg==", "dev": true }, + "esbuild-register": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-2.5.0.tgz", + "integrity": "sha512-5a8W3rH7IQbIPR9pPXJFkC3+CRMtm/OSpBz3hkWUUU63oPZ3NU6dVDGfaIjKnRizCTIRoGjNE6KEDt5p1sLwEw==", + "dev": true, + "requires": { + "esbuild": "^0.11.5", + "jsonc-parser": "^3.0.0" + }, + "dependencies": { + "esbuild": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz", + "integrity": "sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==", + "dev": true + } + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -5887,6 +5996,12 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "dev": true + }, "fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", @@ -6352,6 +6467,12 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", diff --git a/package.json b/package.json index d1d7c60427e8990fd2a36bdb1a3026c181fb6aa1..eb60e47d590470bc62ca7cc071ec535ccd84a7a2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "create-tsdev", - "version": "0.3.0", + "version": "0.5.0", "description": "Using npx to generate a TS dev env", "main": "index.js", "files": [ @@ -45,7 +45,9 @@ "@typescript-eslint/eslint-plugin": "^4.23.0", "@typescript-eslint/parser": "^4.23.0", "ava": "^3.15.0", + "aws-v-cli": "^0.2.3", "esbuild": "^0.12.0", + "esbuild-register": "^2.5.0", "eslint": "^7.26.0", "ts-node": "^9.1.1", "typedoc": "^0.20.36", @@ -56,7 +58,7 @@ "ts" ], "require": [ - "ts-node/register" + "esbuild-register" ] }, "dependencies": { diff --git a/src/lib.ts b/src/lib.ts index 50c934847add769e6dd47c4ba0aba78ba6160595..d39388bff29c6917614fa5dbf9eacb2680998f7d 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -20,7 +20,7 @@ export { CustomError } /** * @param {array} arg -- process.argv - * @return {promise} resolve nothing + * @return {promise} resolve */ export async function processArg(argv: any): Promise { return Promise.resolve(argv) @@ -130,7 +130,7 @@ export function runInstall(args: any): Promise { * @param {object} args from cli * @return {promise} true on success */ -export function installAction(args: any): Promise { +export async function installAction(args: any): Promise { const _act = args.action if (_act && _act !== PLACEHOLDER) { const ymlFile = join(__dirname, 'actions', [_act, YML_EXT].join('.')) @@ -150,11 +150,10 @@ export function installAction(args: any): Promise { console.error(`Copy ${_act} ${YML_EXT} failed`, err) }) } - // noting to do - return Promise.resolve(args) + // noting to do, same question as below + return args } - /** * To create some start-up template or not * 1. If skipTpl === true then no @@ -162,23 +161,31 @@ export function installAction(args: any): Promise { * @param {object} args * @return {Promise} */ -export function setupTpl(args: any): Promise { +export async function setupTpl(args: any): Promise { + const projectDir = process.cwd() + const files = [ + [join(__dirname, '..', 'clean.js'), join(projectDir, 'clean.js')] + ] if (args.skipTpl !== true) { - const projectDir = process.cwd() const tplDir = join(__dirname, 'tpl') const srcDir = join(projectDir, 'src') if (!fsx.existsSync(srcDir)) { - const files = [ + files.push( [join(tplDir, 'main.tpl'), join(projectDir, 'src' ,'main.ts')], [join(tplDir, 'main.test.tpl'), join(projectDir, 'tests', 'main.test.ts')] - ] - - return Promise.all( - files.map(fileTodo => Reflect.apply(fsx.copy, null, fileTodo)) ) - .then(() => args) } } - return Promise.resolve(args) + return Promise.all( + files.map(fileTodo => Reflect.apply(fsx.copy, null, fileTodo)) + ) + .then(() => args) +} + +/* +// just for testing purpose +export async function dummyFn(): Promise { + return 'something' } +*/ diff --git a/src/tpl/aws/README.md b/src/tpl/aws/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5de50192d4d4f2541d050d79e1252b77769ee28e --- /dev/null +++ b/src/tpl/aws/README.md @@ -0,0 +1,3 @@ +# AWS template + +this folder store all the AWS Lambda development files templates diff --git a/tests/lib.test.ts b/tests/lib.test.ts index f7a5dafd722d350406f408caca0c7e4459359f73..80aa4809513ab50ebd71f08e404ac5702e304823 100644 --- a/tests/lib.test.ts +++ b/tests/lib.test.ts @@ -1,27 +1,41 @@ -// main test file +// lib test file import test from 'ava' -import { copySync, removeSync, readJsonSync } from 'fs-extra' +import { copySync, removeSync, readJsonSync, existsSync, ensureDir } from 'fs-extra' import { join } from 'path' import { processArg, changeAndGetPkg, CustomError, - copyProps + copyProps, + setupTpl } from '../src/lib' - const fixtures: string = join(__dirname, 'fixtures') const pkgTpl: string = join(fixtures, 'package-tpl.json') const dest: string = join(fixtures, 'package.json' ) +const tmp = join(fixtures, 'tmp-1') + + test.before(() => { copySync(pkgTpl, dest) + ensureDir(tmp) }) test.after(() => { removeSync(dest) + removeSync(tmp) }) +/* +// result: IT DOES +test.only(`To see if the async method can return a promise`, t => { + return dummyFn() + .then(r => { + t.truthy(r) + }) +}) +*/ test(`Expect to able to get the right properties`, async t => { const p = '/home/joel/Projects/create-t1sts' @@ -47,3 +61,13 @@ test(`Expect to copy over the necessary properties to the package.json`, t => { t.true(result.scripts !== undefined) t.is(result.scripts.test, "ava") }) + + +test(`Expect to copy over the required tpl files`, async t => { + // move into the tmp directory as pwd + process.chdir(tmp) + + await setupTpl({skipTpl: true}) + + t.true(existsSync(join(tmp, 'clean.js'))) +})