From b7bcdf082446cc7657c954a73ed02c6128ec77dc Mon Sep 17 00:00:00 2001 From: Emre Sakarya Date: Tue, 26 Mar 2024 22:57:40 +0100 Subject: [PATCH] fix: typescript issues fixed --- .eslintrc.js | 2 +- cli/cli.ts | 55 ++++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 20 ++++++++++++++++ package.json | 1 + src/blur-hash-map.ts | 2 +- src/index.ts | 1 + tsconfig.cli.json | 10 ++++++++ 7 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 cli/cli.ts create mode 100644 tsconfig.cli.json diff --git a/.eslintrc.js b/.eslintrc.js index f50c356..05d15d6 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,7 +4,7 @@ module.exports = { plugins: ['@typescript-eslint', 'node', 'prettier'], parserOptions: { tsconfigRootDir: __dirname, - project: ['./tsconfig.json'], + project: ['./tsconfig.json', './tsconfig.cli.json'], }, extends: [ 'eslint:recommended', diff --git a/cli/cli.ts b/cli/cli.ts new file mode 100644 index 0000000..3153f99 --- /dev/null +++ b/cli/cli.ts @@ -0,0 +1,55 @@ +#!/usr/bin/env node + +const nodemon = require('nodemon'); +import { program } from 'commander'; +import { readFileSync } from 'fs'; +import { + AllowedImageTypeList, + BlurHashMap, + ComponentRange, +} from '../lib/blur-hash-map'; + +interface CommanderActionOptions { + assets: string; + extensions: string; + componentX: string; + componentY: string; +} +const packageJson: Record = JSON.parse( + readFileSync('./package.json', 'utf-8') +); +program + .version(packageJson.version) + .description(packageJson.description) + .option('-a, --assets ', 'Required. Set path to your assets folder') + .option( + '-e, --extensions ', + 'Optional. Define image file extensions. Default: jpg,jpeg,png,bmp,webp' + ) + .option('-x, --componentX ', 'Optional. Default : 4') + .option('-y, --componentY ', 'Optional. Default : 3') + .action(async function (options: CommanderActionOptions) { + const blurHashGenerator = new BlurHashMap({ + assetsRoot: options.assets, + imageExtensions: options.extensions.split(',') as AllowedImageTypeList, + components: { + x: parseInt(options.componentX) as ComponentRange, + y: parseInt(options.componentY) as ComponentRange, + }, + }); + + await blurHashGenerator.init(); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + nodemon({ watch: options.assets, ext: options.extensions + ',hash' }) + .on('quit', function () { + throw 'nodemon exited'; + }) + .on('restart', function (changedFiles = []) { + for (const file of changedFiles) { + blurHashGenerator.generateOrDelete(file); + } + }); + }); + +program.parse(process.argv); diff --git a/package-lock.json b/package-lock.json index eff1ee4..77ecb8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "devDependencies": { "@ryansonshine/commitizen": "^4.2.8", "@ryansonshine/cz-conventional-changelog": "^3.3.4", + "@types/commander": "^2.12.2", "@types/glob": "^8.1.0", "@types/jest": "^27.5.2", "@types/node": "^12.20.11", @@ -2509,6 +2510,16 @@ "@babel/types": "^7.3.0" } }, + "node_modules/@types/commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/@types/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-0QEFiR8ljcHp9bAbWxecjVRuAMr16ivPiGOw6KFQBVrVd0RQIcM3xKdRisH2EDWgVWujiYtHwhSkSUoAAGzH7Q==", + "deprecated": "This is a stub types definition for commander (https://github.com/tj/commander.js). commander provides its own type definitions, so you don't need @types/commander installed!", + "dev": true, + "dependencies": { + "commander": "*" + } + }, "node_modules/@types/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", @@ -16185,6 +16196,15 @@ "@babel/types": "^7.3.0" } }, + "@types/commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/@types/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-0QEFiR8ljcHp9bAbWxecjVRuAMr16ivPiGOw6KFQBVrVd0RQIcM3xKdRisH2EDWgVWujiYtHwhSkSUoAAGzH7Q==", + "dev": true, + "requires": { + "commander": "*" + } + }, "@types/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", diff --git a/package.json b/package.json index 8c351f5..1c01b8b 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "devDependencies": { "@ryansonshine/commitizen": "^4.2.8", "@ryansonshine/cz-conventional-changelog": "^3.3.4", + "@types/commander": "^2.12.2", "@types/glob": "^8.1.0", "@types/jest": "^27.5.2", "@types/node": "^12.20.11", diff --git a/src/blur-hash-map.ts b/src/blur-hash-map.ts index 232e30f..b571ced 100644 --- a/src/blur-hash-map.ts +++ b/src/blur-hash-map.ts @@ -8,7 +8,7 @@ import { renameSync, } from 'fs'; import { extname, resolve } from 'path'; -type ComponentRange = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; +export type ComponentRange = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; export type AllowedImageTypes = 'jpg' | 'jpeg' | 'png' | 'bmp' | 'webp'; export type AllowedImageTypeList = AllowedImageTypes[]; diff --git a/src/index.ts b/src/index.ts index fd4c807..bf254d1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,4 +4,5 @@ export type { BlurHashMapData, AllowedImageTypeList, DefaultComponentRatio, + ComponentRange, } from './blur-hash-map'; diff --git a/tsconfig.cli.json b/tsconfig.cli.json new file mode 100644 index 0000000..c983739 --- /dev/null +++ b/tsconfig.cli.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "CommonJS", + "outDir": "bin", + "rootDir": "./cli/", + "strict": true + }, + "include": ["cli/*.ts"] +}