@nathievzm/lumi 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.commitlintrc.json +1 -1
- package/.gitattributes +2 -0
- package/.github/workflows/auto-assign.yml +30 -0
- package/.oxfmtrc.json +39 -32
- package/.oxlintrc.json +36 -35
- package/.vscode/launch.json +36 -36
- package/.vscode/settings.json +10 -9
- package/CHANGELOG.md +81 -0
- package/README.md +115 -108
- package/lefthook.yml +24 -0
- package/package.json +70 -62
- package/src/env.d.ts +32 -28
- package/src/index.ts +92 -66
- package/src/lib/args.ts +88 -80
- package/src/lib/folder.ts +70 -62
- package/src/lib/image.ts +164 -144
- package/src/lib/prompt.ts +86 -151
- package/tsconfig.json +34 -34
- package/.husky/commit-msg +0 -4
- package/.husky/pre-commit +0 -10
- package/.husky/pre-push +0 -6
- package/src/lib/error.ts +0 -21
package/.commitlintrc.json
CHANGED
package/.gitattributes
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: auto assign author
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issues:
|
|
5
|
+
types: [opened]
|
|
6
|
+
pull_request:
|
|
7
|
+
types: [opened]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
assign:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
permissions:
|
|
13
|
+
issues: write
|
|
14
|
+
pull-requests: write
|
|
15
|
+
steps:
|
|
16
|
+
- name: assign the user who opened the ticket or pr
|
|
17
|
+
uses: actions/github-script@v7
|
|
18
|
+
with:
|
|
19
|
+
github-token: ${{ secrets.LUMI_AUTOASSIGN_TOKEN }}
|
|
20
|
+
script: |
|
|
21
|
+
// grab the username of the person who triggered the action
|
|
22
|
+
const author = context.actor
|
|
23
|
+
|
|
24
|
+
// tell github's api to assign the ticket to that username
|
|
25
|
+
await github.rest.issues.addAssignees({
|
|
26
|
+
owner: context.repo.owner,
|
|
27
|
+
repo: context.repo.repo,
|
|
28
|
+
issue_number: context.issue.number,
|
|
29
|
+
assignees: [author]
|
|
30
|
+
})
|
package/.oxfmtrc.json
CHANGED
|
@@ -1,32 +1,39 @@
|
|
|
1
|
-
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./node_modules/oxfmt/configuration_schema.json",
|
|
3
|
+
"arrowParens": "avoid",
|
|
4
|
+
"bracketSameLine": true,
|
|
5
|
+
"bracketSpacing": true,
|
|
6
|
+
"embeddedLanguageFormatting": "auto",
|
|
7
|
+
"endOfLine": "lf",
|
|
8
|
+
"insertFinalNewline": true,
|
|
9
|
+
"jsdoc": {
|
|
10
|
+
"bracketSpacing": true,
|
|
11
|
+
"lineWrappingStyle": "balance",
|
|
12
|
+
"separateReturnsFromParam": true,
|
|
13
|
+
"capitalizeDescriptions": true,
|
|
14
|
+
"descriptionWithDot": false,
|
|
15
|
+
"commentLineStrategy": "multiline"
|
|
16
|
+
},
|
|
17
|
+
"objectWrap": "preserve",
|
|
18
|
+
"printWidth": 120,
|
|
19
|
+
"proseWrap": "always",
|
|
20
|
+
"quoteProps": "consistent",
|
|
21
|
+
"semi": false,
|
|
22
|
+
"singleQuote": true,
|
|
23
|
+
"sortImports": {
|
|
24
|
+
"newlinesBetween": true
|
|
25
|
+
},
|
|
26
|
+
"sortPackageJson": {
|
|
27
|
+
"sortScripts": true
|
|
28
|
+
},
|
|
29
|
+
"tabWidth": 4,
|
|
30
|
+
"trailingComma": "none",
|
|
31
|
+
"overrides": [
|
|
32
|
+
{
|
|
33
|
+
"files": ["*.yml", "*.yaml"],
|
|
34
|
+
"options": {
|
|
35
|
+
"tabWidth": 2
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
package/.oxlintrc.json
CHANGED
|
@@ -1,35 +1,36 @@
|
|
|
1
|
-
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
|
3
|
+
"plugins": ["typescript", "unicorn", "oxc", "eslint", "import", "jsdoc", "node", "promise"],
|
|
4
|
+
"categories": {
|
|
5
|
+
"correctness": "error",
|
|
6
|
+
"suspicious": "error",
|
|
7
|
+
"pedantic": "warn",
|
|
8
|
+
"perf": "warn",
|
|
9
|
+
"style": "warn",
|
|
10
|
+
"restriction": "off",
|
|
11
|
+
"nursery": "off"
|
|
12
|
+
},
|
|
13
|
+
"rules": {
|
|
14
|
+
"no-nodejs-modules": "off",
|
|
15
|
+
"no-magic-numbers": "off",
|
|
16
|
+
"no-ternary": "off",
|
|
17
|
+
"sort-imports": ["warn", { "ignoreDeclarationSort": true }],
|
|
18
|
+
"consistent-type-specifier-style": ["warn", "prefer-inline"],
|
|
19
|
+
"prefer-default-export": "off",
|
|
20
|
+
"no-named-export": "off",
|
|
21
|
+
"prefer-readonly-parameter-types": ["warn", { "ignoreInferredTypes": true }],
|
|
22
|
+
"group-exports": "off",
|
|
23
|
+
"unicorn/no-useless-undefined": "off",
|
|
24
|
+
"no-continue": "off",
|
|
25
|
+
"require-param-type": "off",
|
|
26
|
+
"require-returns-type": "off",
|
|
27
|
+
"max-dependencies": ["warn", { "max": 12 }]
|
|
28
|
+
},
|
|
29
|
+
"env": {
|
|
30
|
+
"builtin": true
|
|
31
|
+
},
|
|
32
|
+
"options": {
|
|
33
|
+
"typeAware": true,
|
|
34
|
+
"typeCheck": true
|
|
35
|
+
}
|
|
36
|
+
}
|
package/.vscode/launch.json
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
1
|
+
{
|
|
2
|
+
// Use IntelliSense to learn about possible attributes.
|
|
3
|
+
// Hover to view descriptions of existing attributes.
|
|
4
|
+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
5
|
+
"version": "0.2.0",
|
|
6
|
+
"configurations": [
|
|
7
|
+
{
|
|
8
|
+
"type": "bun",
|
|
9
|
+
"internalConsoleOptions": "neverOpen",
|
|
10
|
+
"request": "launch",
|
|
11
|
+
"name": "Debug File",
|
|
12
|
+
"program": "${file}",
|
|
13
|
+
"cwd": "${workspaceFolder}",
|
|
14
|
+
"stopOnEntry": false,
|
|
15
|
+
"watchMode": false
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"type": "bun",
|
|
19
|
+
"internalConsoleOptions": "neverOpen",
|
|
20
|
+
"request": "launch",
|
|
21
|
+
"name": "Run File",
|
|
22
|
+
"program": "${file}",
|
|
23
|
+
"cwd": "${workspaceFolder}",
|
|
24
|
+
"noDebug": true,
|
|
25
|
+
"watchMode": false
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"type": "bun",
|
|
29
|
+
"internalConsoleOptions": "neverOpen",
|
|
30
|
+
"request": "attach",
|
|
31
|
+
"name": "Attach Bun",
|
|
32
|
+
"url": "ws://localhost:6499/",
|
|
33
|
+
"stopOnEntry": false
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
package/.vscode/settings.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
"oxc.fmt.configPath": ".oxfmtrc.json",
|
|
3
|
+
"editor.defaultFormatter": "oxc.oxc-vscode",
|
|
4
|
+
"editor.formatOnSave": true,
|
|
5
|
+
"oxc.enable.oxlint": true,
|
|
6
|
+
"oxc.enable.oxfmt": true,
|
|
7
|
+
"editor.codeActionsOnSave": {
|
|
8
|
+
"source.fixAll.oxc": "always"
|
|
9
|
+
},
|
|
10
|
+
"files.insertFinalNewline": false,
|
|
11
|
+
"files.trimTrailingWhitespace": true
|
|
11
12
|
}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# [1.1.0](https://github.com/nathievzm/lumi/compare/v1.0.1...v1.1.0) (2026-05-12)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
- add colors to logs ([#44](https://github.com/nathievzm/lumi/issues/44))
|
|
6
|
+
([2dcca2e](https://github.com/nathievzm/lumi/commit/2dcca2e3df40ac577ca5fdaeddbaedecd67d3256))
|
|
7
|
+
- add recursive arg to toggle the recursiveness when reading the input folder
|
|
8
|
+
([#25](https://github.com/nathievzm/lumi/issues/25))
|
|
9
|
+
([3644d34](https://github.com/nathievzm/lumi/commit/3644d346569aa40a2d6b7007ece64be6b787dc42))
|
|
10
|
+
- clear console on start and add a cute banner at the beginning
|
|
11
|
+
([1ad4ade](https://github.com/nathievzm/lumi/commit/1ad4adef1090224915b724374f0e537f371a93a7))
|
|
12
|
+
- **image, index:** make getImages function pure by removing any side effect
|
|
13
|
+
([addea55](https://github.com/nathievzm/lumi/commit/addea5542f6b923c36d093797d0b9387c199cfc3))
|
|
14
|
+
- **index:** replace spinnies with clack spinner for cleaner cli ([#42](https://github.com/nathievzm/lumi/issues/42))
|
|
15
|
+
([6c59c5a](https://github.com/nathievzm/lumi/commit/6c59c5a62af9d3ac13c94997f063842591f9a799))
|
|
16
|
+
- show the seconds that took to process the files in the result log ([#43](https://github.com/nathievzm/lumi/issues/43))
|
|
17
|
+
([439482e](https://github.com/nathievzm/lumi/commit/439482e075af4aaba70da2967743250456b35b20))
|
|
18
|
+
|
|
19
|
+
### Performance Improvements
|
|
20
|
+
|
|
21
|
+
- optimize path parsing by using extname and basename instead of parse
|
|
22
|
+
([962299f](https://github.com/nathievzm/lumi/commit/962299ffc519826d1c023275290525d92b7d4db2))
|
|
23
|
+
|
|
24
|
+
## [1.0.1](https://github.com/nathievzm/lumi/compare/v1.0.0...v1.0.1) (2026-05-10)
|
|
25
|
+
|
|
26
|
+
### Bug Fixes
|
|
27
|
+
|
|
28
|
+
- format arg by passing cli value ([#22](https://github.com/nathievzm/lumi/issues/22))
|
|
29
|
+
([8a88391](https://github.com/nathievzm/lumi/commit/8a88391009addb9129eac53a6744affad7693ddf))
|
|
30
|
+
- **index, image:** add support to all image extensions using an third-party library
|
|
31
|
+
([#24](https://github.com/nathievzm/lumi/issues/24))
|
|
32
|
+
([183189f](https://github.com/nathievzm/lumi/commit/183189f724c3ecf444308384eb5d11de3e28ed80))
|
|
33
|
+
- **index, image:** exclude all files that aren't images ([#24](https://github.com/nathievzm/lumi/issues/24))
|
|
34
|
+
([ebb03f4](https://github.com/nathievzm/lumi/commit/ebb03f49cc0628dd19ce303d74417f435f2fc268))
|
|
35
|
+
|
|
36
|
+
### Features
|
|
37
|
+
|
|
38
|
+
- **package.json:** update urls for repository and bugs
|
|
39
|
+
([781733a](https://github.com/nathievzm/lumi/commit/781733a84562a5e4940a4d645c5845cda496a16a))
|
|
40
|
+
- **prompt:** ask width and height in a single prompt ([#30](https://github.com/nathievzm/lumi/issues/30))
|
|
41
|
+
([93872d4](https://github.com/nathievzm/lumi/commit/93872d42caddb6aee8da0cdacb41533bb1946ccd))
|
|
42
|
+
- remove prompt for input folder and assume current folder as input ([#23](https://github.com/nathievzm/lumi/issues/23))
|
|
43
|
+
([f0f43c8](https://github.com/nathievzm/lumi/commit/f0f43c8841450364f130670336685b2a1b5f0aa5))
|
|
44
|
+
- rename package name and bin command
|
|
45
|
+
([44df0a7](https://github.com/nathievzm/lumi/commit/44df0a734d6ba5e1a629a49658c1511eb01bc485))
|
|
46
|
+
- use current path and default name of 'output' for the output folder
|
|
47
|
+
([#40](https://github.com/nathievzm/lumi/issues/40))
|
|
48
|
+
([6bb9dd6](https://github.com/nathievzm/lumi/commit/6bb9dd6bc87ddb9df1aae2a374198909fc64cdfa))
|
|
49
|
+
|
|
50
|
+
# [1.0.0](https://github.com/nathievzm/lumi/compare/bd74fd40baea7cd88c4f547d1aeabcc2c53b47ac...v1.0.0) (2026-05-05)
|
|
51
|
+
|
|
52
|
+
### Bug Fixes
|
|
53
|
+
|
|
54
|
+
- **folder:** change log type to info
|
|
55
|
+
([ede37a1](https://github.com/nathievzm/lumi/commit/ede37a1485bd1b5de82d71b9722ae7686ac61d25))
|
|
56
|
+
|
|
57
|
+
### Features
|
|
58
|
+
|
|
59
|
+
- add .env.example file ([917b862](https://github.com/nathievzm/lumi/commit/917b862a558847d16e86ca6ff94fabe33f2a5992))
|
|
60
|
+
- add logic to allow users select the format for each extension found in the input
|
|
61
|
+
([0461325](https://github.com/nathievzm/lumi/commit/0461325e9a414ab71903b16da3f7b20fd1134bb3))
|
|
62
|
+
- add logic to prompt width and height if user didn't provide it via cli or env
|
|
63
|
+
([d7a0a21](https://github.com/nathievzm/lumi/commit/d7a0a21eee9d3b4e1c4544e92ce0406cb26b521e))
|
|
64
|
+
- add prompt to ask for the input folder in case it's not by cli or env
|
|
65
|
+
([59551de](https://github.com/nathievzm/lumi/commit/59551decf7a3b6cdb6e665dd28e4e20a860f642a))
|
|
66
|
+
- add support to specify default concurrency limit by env variable
|
|
67
|
+
([eda599d](https://github.com/nathievzm/lumi/commit/eda599d88bef56af992482a58a08d3004e33d378))
|
|
68
|
+
- allow setting the default format and limit via cli
|
|
69
|
+
([d273210](https://github.com/nathievzm/lumi/commit/d273210efb0512b8800d889974f670d96f6a302f))
|
|
70
|
+
- create images module and add prompt for the output folder name
|
|
71
|
+
([88c68f4](https://github.com/nathievzm/lumi/commit/88c68f41b716fb2aff90b8fe82fcf7f184723eff))
|
|
72
|
+
- develop functionality to resize images
|
|
73
|
+
([bd74fd4](https://github.com/nathievzm/lumi/commit/bd74fd40baea7cd88c4f547d1aeabcc2c53b47ac))
|
|
74
|
+
- implement @clack/prompts to enhance the cli ux
|
|
75
|
+
([6138c15](https://github.com/nathievzm/lumi/commit/6138c15f4c484cbea711a5c1e11b59221e008097))
|
|
76
|
+
- implement p-limit to limit the concurrent promises
|
|
77
|
+
([bb25145](https://github.com/nathievzm/lumi/commit/bb25145092d75f51845810b30de524cb1b3bdd31))
|
|
78
|
+
- move all helper files to the lib folder
|
|
79
|
+
([9df89cf](https://github.com/nathievzm/lumi/commit/9df89cf28b1d6510fce115f7db5ef989c47cf71c))
|
|
80
|
+
- move logic to check the output folder to an isolated module
|
|
81
|
+
([35b3e0a](https://github.com/nathievzm/lumi/commit/35b3e0ae732a60ec49ca6fea4c8e1b5388528e12))
|
package/README.md
CHANGED
|
@@ -1,108 +1,115 @@
|
|
|
1
|
-
# ✨ lumi ✨
|
|
2
|
-
|
|
3
|
-
A fast, interactive CLI tool for batch image processing. Resize, convert, and optimize your images with ease, powered by
|
|
4
|
-
[Bun](https://bun.sh) and [Sharp](https://sharp.pixelplumbing.com/).
|
|
5
|
-
|
|
6
|
-
## 🚀 Features
|
|
7
|
-
|
|
8
|
-
- **Batch Processing:** Process hundreds of images in seconds with high concurrency.
|
|
9
|
-
- **Interactive UI:** User-friendly prompts for missing configurations using `@clack/prompts`.
|
|
10
|
-
- **
|
|
11
|
-
- **
|
|
12
|
-
- **
|
|
13
|
-
- **
|
|
14
|
-
- **
|
|
15
|
-
- **
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
| `--
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
###
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
- `bun
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
1
|
+
# ✨ lumi ✨
|
|
2
|
+
|
|
3
|
+
A fast, interactive CLI tool for batch image processing. Resize, convert, and optimize your images with ease, powered by
|
|
4
|
+
[Bun](https://bun.sh) and [Sharp](https://sharp.pixelplumbing.com/).
|
|
5
|
+
|
|
6
|
+
## 🚀 Features
|
|
7
|
+
|
|
8
|
+
- **Batch Processing:** Process hundreds of images in seconds with high concurrency.
|
|
9
|
+
- **Interactive UI:** User-friendly prompts for missing configurations using `@clack/prompts`.
|
|
10
|
+
- **Recursive Processing:** Automatically finds all images in the input folder and its subdirectories.
|
|
11
|
+
- **Progress Tracking:** Real-time feedback with `spinnies` progress indicators.
|
|
12
|
+
- **Smart Resizing:** Automatically fits images while maintaining aspect ratio (`contain` fit).
|
|
13
|
+
- **Multi-Format Support:** Convert between all formats supported by Sharp (WebP, PNG, JPEG, GIF, AVIF, etc.).
|
|
14
|
+
- **Animated Support:** Seamlessly handles animated GIFs and WebP files.
|
|
15
|
+
- **Concurrency Control:** Fine-tune performance with configurable processing limits.
|
|
16
|
+
- **Environment Driven:** Fully configurable via `.env` files or CLI flags.
|
|
17
|
+
|
|
18
|
+
## 📦 Installation
|
|
19
|
+
|
|
20
|
+
You don't even need to install it if you use `bunx`! Run it directly from anywhere in your terminal:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
bunx @nathievzm/lumi
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or install it globally:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
bun install -g @nathievzm/lumi
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 🛠️ Usage
|
|
33
|
+
|
|
34
|
+
If installed globally, simply run:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
lumi [options]
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Interactive Mode
|
|
41
|
+
|
|
42
|
+
If you run **lumi** without providing required flags (like dimensions or output formats), it will guide you through the
|
|
43
|
+
configuration using cute, interactive prompts.
|
|
44
|
+
|
|
45
|
+
- **Dimensions:** You can enter a single number for square images (e.g., `1080`) or two numbers for custom dimensions
|
|
46
|
+
(e.g., `1920 1080`).
|
|
47
|
+
- **Formats:** Choose specific output formats for each unique extension found in your input!
|
|
48
|
+
- **Folders:** By default, **lumi** uses your current directory as the input and creates an `output` folder for the
|
|
49
|
+
results.
|
|
50
|
+
|
|
51
|
+
### CLI Options
|
|
52
|
+
|
|
53
|
+
You can bypass the prompts by providing the flags directly:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
bunx @nathievzm/lumi -i ./my-vacation-pics -s 1080 -f .webp
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
| Flag | Shortcut | Description | Default / Env |
|
|
60
|
+
| :--------- | :------- | :---------------------------- | :--------------------------- |
|
|
61
|
+
| `--input` | `-i` | Input directory path | `.` / `INPUT_FOLDER` |
|
|
62
|
+
| `--output` | `-o` | Output directory path | `./output` / `OUTPUT_FOLDER` |
|
|
63
|
+
| `--width` | `-w` | Target width in pixels | Prompt / `WIDTH` |
|
|
64
|
+
| `--height` | `-h` | Target height in pixels | Prompt / `HEIGHT` |
|
|
65
|
+
| `--size` | `-s` | Sets both width and height | - |
|
|
66
|
+
| `--format` | `-f` | Output format (e.g., `.webp`) | Prompt / `FORMAT` |
|
|
67
|
+
| `--limit` | `-l` | Max concurrent operations | `10` / `LIMIT` |
|
|
68
|
+
|
|
69
|
+
### 🌍 Environment Variables
|
|
70
|
+
|
|
71
|
+
**lumi** also reads from a `.env` file in your current working directory. This is useful for saving your preferred
|
|
72
|
+
defaults:
|
|
73
|
+
|
|
74
|
+
```env
|
|
75
|
+
WIDTH = '800'
|
|
76
|
+
HEIGHT = '600'
|
|
77
|
+
INPUT_FOLDER = './input'
|
|
78
|
+
OUTPUT_FOLDER = './output'
|
|
79
|
+
FORMAT = '.webp'
|
|
80
|
+
LIMIT = '10'
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 🧑💻 Local Development
|
|
86
|
+
|
|
87
|
+
If you want to contribute or run the project from source:
|
|
88
|
+
|
|
89
|
+
### Clone the repository
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
git clone https://github.com/nathievzm/lumi.git
|
|
93
|
+
cd lumi
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Install dependencies
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
bun install
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Available Scripts
|
|
103
|
+
|
|
104
|
+
- `bun start`: Run the application.
|
|
105
|
+
- `bun dev`: Start with hot reloading.
|
|
106
|
+
- `bun lint`: Check for code quality issues using `oxlint`.
|
|
107
|
+
- `bun lint:fix`: Fix linting issues automatically.
|
|
108
|
+
- `bun fmt`: Format the codebase using `oxfmt`.
|
|
109
|
+
- `bun fmt:check`: Check for formatting issues.
|
|
110
|
+
- `bun changelog`: Update the changelog.
|
|
111
|
+
- `bun release`: Release a new version with `bumpp` and update the changelog.
|
|
112
|
+
|
|
113
|
+
## 📄 License
|
|
114
|
+
|
|
115
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
package/lefthook.yml
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
pre-commit:
|
|
2
|
+
# running all checks at the same time for maximum speed ⚡
|
|
3
|
+
parallel: true
|
|
4
|
+
jobs:
|
|
5
|
+
- name: format
|
|
6
|
+
glob: '*.{ts,js,json,yml,yaml,md}'
|
|
7
|
+
run: bun fmt {staged_files} && git add {staged_files}
|
|
8
|
+
|
|
9
|
+
- name: lint
|
|
10
|
+
run: bun lint
|
|
11
|
+
|
|
12
|
+
- name: types
|
|
13
|
+
run: bunx --bun tsc --noEmit
|
|
14
|
+
|
|
15
|
+
commit-msg:
|
|
16
|
+
jobs:
|
|
17
|
+
- name: commitlint
|
|
18
|
+
# using bun to run commitlint as fast as possible 🌸
|
|
19
|
+
run: bunx --bun commitlint --edit {1}
|
|
20
|
+
|
|
21
|
+
pre-push:
|
|
22
|
+
jobs:
|
|
23
|
+
- name: test-placeholder
|
|
24
|
+
run: echo "ready to push! tests will go here in the future ✨"
|