assets-toolkit 1.0.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/LICENSE +7 -0
- package/README.md +354 -0
- package/dist/cacheHelper.d.ts +2 -0
- package/dist/cacheHelper.d.ts.map +1 -0
- package/dist/cacheHelper.js +2 -0
- package/dist/cacheHelper.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +91 -0
- package/dist/cli.js.map +1 -0
- package/dist/colorConsole.d.ts +3 -0
- package/dist/colorConsole.d.ts.map +1 -0
- package/dist/colorConsole.js +22 -0
- package/dist/colorConsole.js.map +1 -0
- package/dist/config-types.d.ts +2 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-types.js +2 -0
- package/dist/config-types.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +82 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +12 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +52 -0
- package/dist/constants.js.map +1 -0
- package/dist/detect-target.d.ts +3 -0
- package/dist/detect-target.d.ts.map +1 -0
- package/dist/detect-target.js +21 -0
- package/dist/detect-target.js.map +1 -0
- package/dist/generator.d.ts +6 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +170 -0
- package/dist/generator.js.map +1 -0
- package/dist/helps/cacheHelper.d.ts +4 -0
- package/dist/helps/cacheHelper.d.ts.map +1 -0
- package/dist/helps/cacheHelper.js +19 -0
- package/dist/helps/cacheHelper.js.map +1 -0
- package/dist/helps/checkAssetsDir.d.ts +2 -0
- package/dist/helps/checkAssetsDir.d.ts.map +1 -0
- package/dist/helps/checkAssetsDir.js +21 -0
- package/dist/helps/checkAssetsDir.js.map +1 -0
- package/dist/helps/checkFileValidations.d.ts +31 -0
- package/dist/helps/checkFileValidations.d.ts.map +1 -0
- package/dist/helps/checkFileValidations.js +134 -0
- package/dist/helps/checkFileValidations.js.map +1 -0
- package/dist/helps/checkInvalidFileNames.d.ts +2 -0
- package/dist/helps/checkInvalidFileNames.d.ts.map +1 -0
- package/dist/helps/checkInvalidFileNames.js +23 -0
- package/dist/helps/checkInvalidFileNames.js.map +1 -0
- package/dist/helps/checkLargeFiles.d.ts +5 -0
- package/dist/helps/checkLargeFiles.d.ts.map +1 -0
- package/dist/helps/checkLargeFiles.js +36 -0
- package/dist/helps/checkLargeFiles.js.map +1 -0
- package/dist/helps/doctorConfirmation.d.ts +2 -0
- package/dist/helps/doctorConfirmation.d.ts.map +1 -0
- package/dist/helps/doctorConfirmation.js +14 -0
- package/dist/helps/doctorConfirmation.js.map +1 -0
- package/dist/helps/duplicateFiles.d.ts +2 -0
- package/dist/helps/duplicateFiles.d.ts.map +1 -0
- package/dist/helps/duplicateFiles.js +2 -0
- package/dist/helps/duplicateFiles.js.map +1 -0
- package/dist/helps/getProjectAssetFiles.d.ts +2 -0
- package/dist/helps/getProjectAssetFiles.d.ts.map +1 -0
- package/dist/helps/getProjectAssetFiles.js +11 -0
- package/dist/helps/getProjectAssetFiles.js.map +1 -0
- package/dist/helps/getUniqueFileName.d.ts +2 -0
- package/dist/helps/getUniqueFileName.d.ts.map +1 -0
- package/dist/helps/getUniqueFileName.js +13 -0
- package/dist/helps/getUniqueFileName.js.map +1 -0
- package/dist/helps/gitignore.d.ts +2 -0
- package/dist/helps/gitignore.d.ts.map +1 -0
- package/dist/helps/gitignore.js +24 -0
- package/dist/helps/gitignore.js.map +1 -0
- package/dist/helps/incrementalHash.d.ts +3 -0
- package/dist/helps/incrementalHash.d.ts.map +1 -0
- package/dist/helps/incrementalHash.js +8 -0
- package/dist/helps/incrementalHash.js.map +1 -0
- package/dist/helps/logger.d.ts +9 -0
- package/dist/helps/logger.d.ts.map +1 -0
- package/dist/helps/logger.js +30 -0
- package/dist/helps/logger.js.map +1 -0
- package/dist/helps/normalizeFileName.d.ts +2 -0
- package/dist/helps/normalizeFileName.d.ts.map +1 -0
- package/dist/helps/normalizeFileName.js +14 -0
- package/dist/helps/normalizeFileName.js.map +1 -0
- package/dist/helps/normalizeFiles.d.ts +2 -0
- package/dist/helps/normalizeFiles.d.ts.map +1 -0
- package/dist/helps/normalizeFiles.js +2 -0
- package/dist/helps/normalizeFiles.js.map +1 -0
- package/dist/helps/platform-support.d.ts +3 -0
- package/dist/helps/platform-support.d.ts.map +1 -0
- package/dist/helps/platform-support.js +69 -0
- package/dist/helps/platform-support.js.map +1 -0
- package/dist/helps/printHelp.d.ts +2 -0
- package/dist/helps/printHelp.d.ts.map +1 -0
- package/dist/helps/printHelp.js +72 -0
- package/dist/helps/printHelp.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime.d.ts +8 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +23 -0
- package/dist/runtime.js.map +1 -0
- package/dist/toolkits/clean.d.ts +2 -0
- package/dist/toolkits/clean.d.ts.map +1 -0
- package/dist/toolkits/clean.js +40 -0
- package/dist/toolkits/clean.js.map +1 -0
- package/dist/toolkits/doctor.d.ts +2 -0
- package/dist/toolkits/doctor.d.ts.map +1 -0
- package/dist/toolkits/doctor.js +110 -0
- package/dist/toolkits/doctor.js.map +1 -0
- package/dist/toolkits/doctorFix.d.ts +3 -0
- package/dist/toolkits/doctorFix.d.ts.map +1 -0
- package/dist/toolkits/doctorFix.js +105 -0
- package/dist/toolkits/doctorFix.js.map +1 -0
- package/dist/toolkits/generator.d.ts +8 -0
- package/dist/toolkits/generator.d.ts.map +1 -0
- package/dist/toolkits/generator.js +212 -0
- package/dist/toolkits/generator.js.map +1 -0
- package/dist/toolkits/reports.d.ts +2 -0
- package/dist/toolkits/reports.d.ts.map +1 -0
- package/dist/toolkits/reports.js +145 -0
- package/dist/toolkits/reports.js.map +1 -0
- package/dist/types.d.ts +41 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +16 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +177 -0
- package/dist/util.js.map +1 -0
- package/dist/writer.d.ts +6 -0
- package/dist/writer.d.ts.map +1 -0
- package/dist/writer.js +3 -0
- package/dist/writer.js.map +1 -0
- package/dist/writers/assetWriter.d.ts +3 -0
- package/dist/writers/assetWriter.d.ts.map +1 -0
- package/dist/writers/assetWriter.js +19 -0
- package/dist/writers/assetWriter.js.map +1 -0
- package/dist/writers/index.d.ts +4 -0
- package/dist/writers/index.d.ts.map +1 -0
- package/dist/writers/index.js +18 -0
- package/dist/writers/index.js.map +1 -0
- package/dist/writers/react-native.d.ts +3 -0
- package/dist/writers/react-native.d.ts.map +1 -0
- package/dist/writers/react-native.js +19 -0
- package/dist/writers/react-native.js.map +1 -0
- package/dist/writers/types.d.ts +10 -0
- package/dist/writers/types.d.ts.map +1 -0
- package/dist/writers/types.js +2 -0
- package/dist/writers/types.js.map +1 -0
- package/dist/writers/unknown.d.ts +3 -0
- package/dist/writers/unknown.d.ts.map +1 -0
- package/dist/writers/unknown.js +9 -0
- package/dist/writers/unknown.js.map +1 -0
- package/dist/writers/web.d.ts +3 -0
- package/dist/writers/web.d.ts.map +1 -0
- package/dist/writers/web.js +23 -0
- package/dist/writers/web.js.map +1 -0
- package/package.json +41 -0
package/LICENSE
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
# Assets Toolkit
|
|
2
|
+
|
|
3
|
+
> Generate clean, typed, production-ready asset maps for React Native, Expo, React, Next.js, and Vite projects.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+

|
|
8
|
+

|
|
9
|
+
|
|
10
|
+
Assets Toolkit scans your project assets, validates them, detects duplicates and risky files, then generates a typed asset map you can import from your app code. It is built for teams that want asset access to feel boring in the best way: consistent names, stable imports, and fewer surprises during release.
|
|
11
|
+
|
|
12
|
+
```txt
|
|
13
|
+
assets/ generated-assets/
|
|
14
|
+
logo.png ─────▶ index.ts
|
|
15
|
+
icons/search.svg images-generate.ts
|
|
16
|
+
fonts/Inter.ttf svg-generate.ts
|
|
17
|
+
fonts-generate.ts
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## ✨ Why Use It?
|
|
21
|
+
|
|
22
|
+
- 🚀 Generate one tidy `Assets` object from images, SVGs, fonts, audio, video, and Lottie files.
|
|
23
|
+
- 🗂️ Keep nested folder structure in the generated output.
|
|
24
|
+
- 🧹 Detect duplicate files before they bloat your app.
|
|
25
|
+
- 🛡️ Catch invalid filenames before Metro, Vite, Next.js, or CI complains.
|
|
26
|
+
- 📊 Check large assets and platform support from one simple command.
|
|
27
|
+
- ♻️ Clean generated files and cache whenever you want a fresh build.
|
|
28
|
+
|
|
29
|
+
## 📦 Installation
|
|
30
|
+
|
|
31
|
+
Install it as a development dependency:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
npm install --save-dev assets-toolkit
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Or run it directly with `npx`:
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
npx assets-toolkit help
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## ⚡ Quick Start
|
|
44
|
+
|
|
45
|
+
Put assets in one of the default folders:
|
|
46
|
+
|
|
47
|
+
```txt
|
|
48
|
+
assets/
|
|
49
|
+
logo.png
|
|
50
|
+
home@2x.png
|
|
51
|
+
icons/
|
|
52
|
+
search.svg
|
|
53
|
+
fonts/
|
|
54
|
+
Inter.ttf
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Generate the asset files:
|
|
58
|
+
|
|
59
|
+
```sh
|
|
60
|
+
npx assets-toolkit generate
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Import the generated output in your app:
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
import { Assets, images, svg, fonts } from "./generated-assets";
|
|
67
|
+
|
|
68
|
+
const logo = Assets.images.logo;
|
|
69
|
+
const searchIcon = svg.icons.search;
|
|
70
|
+
const interFont = fonts.fonts.Inter;
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
By default, Assets Toolkit looks in:
|
|
74
|
+
|
|
75
|
+
```txt
|
|
76
|
+
./src/assets
|
|
77
|
+
./assets
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
And writes generated files to:
|
|
81
|
+
|
|
82
|
+
```txt
|
|
83
|
+
./generated-assets
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## 🧭 CLI Commands
|
|
87
|
+
|
|
88
|
+
| Command | Purpose |
|
|
89
|
+
| ----------------- | -------------------------------------------------------------- |
|
|
90
|
+
| `generate`, `-g` | Generate typed asset files. |
|
|
91
|
+
| `doctor` | Validate assets and detect common problems. |
|
|
92
|
+
| `doctor --fix` | Rename invalid files and remove duplicates after confirmation. |
|
|
93
|
+
| `reports` | Print asset statistics and project insights. |
|
|
94
|
+
| `clean`, `-c` | Remove generated files and cache. |
|
|
95
|
+
| `--version`, `-v` | Show installed package version. |
|
|
96
|
+
| `help`, `-h` | Show CLI help. |
|
|
97
|
+
|
|
98
|
+
### `generate`
|
|
99
|
+
|
|
100
|
+
🚀 Generate asset maps from your project assets.
|
|
101
|
+
|
|
102
|
+
```sh
|
|
103
|
+
npx assets-toolkit generate
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Alias:
|
|
107
|
+
|
|
108
|
+
```sh
|
|
109
|
+
npx assets-toolkit -g
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Useful options:
|
|
113
|
+
|
|
114
|
+
```sh
|
|
115
|
+
npx assets-toolkit generate --outDir src/generated-assets
|
|
116
|
+
npx assets-toolkit generate -o src/generated-assets
|
|
117
|
+
npx assets-toolkit generate --assetsDir assets
|
|
118
|
+
npx assets-toolkit generate --assetsDirs assets,src/shared/assets
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
What it does:
|
|
122
|
+
|
|
123
|
+
- Creates generated category files like `images-generate.ts`, `svg-generate.ts`, and `fonts-generate.ts`.
|
|
124
|
+
- Creates a generated `index.ts` that exports `Assets` plus each category.
|
|
125
|
+
- Preserves nested folders as nested object keys.
|
|
126
|
+
- Skips invalid asset filenames.
|
|
127
|
+
- Reports duplicate files and validation warnings.
|
|
128
|
+
|
|
129
|
+
### `doctor`
|
|
130
|
+
|
|
131
|
+
🩺 Inspect your asset setup and find issues before they become runtime problems.
|
|
132
|
+
|
|
133
|
+
```sh
|
|
134
|
+
npx assets-toolkit doctor
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Checks include:
|
|
138
|
+
|
|
139
|
+
- Missing asset directories
|
|
140
|
+
- Invalid filenames
|
|
141
|
+
- Duplicate assets
|
|
142
|
+
- Unsupported platform assets
|
|
143
|
+
- Large files over the recommended threshold
|
|
144
|
+
|
|
145
|
+
### `doctor --fix`
|
|
146
|
+
|
|
147
|
+
🛠️ Preview and fix invalid asset filenames.
|
|
148
|
+
|
|
149
|
+
```sh
|
|
150
|
+
npx assets-toolkit doctor --fix
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Skip the confirmation prompt when you want an automated cleanup:
|
|
154
|
+
|
|
155
|
+
```sh
|
|
156
|
+
npx assets-toolkit doctor --fix --yes
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
This command can:
|
|
160
|
+
|
|
161
|
+
- Rename invalid filenames into safe asset names.
|
|
162
|
+
- Avoid collisions with files that already exist.
|
|
163
|
+
- Remove duplicate asset files after confirmation.
|
|
164
|
+
|
|
165
|
+
### `reports`
|
|
166
|
+
|
|
167
|
+
📊 Show a project asset report.
|
|
168
|
+
|
|
169
|
+
```sh
|
|
170
|
+
npx assets-toolkit reports
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The report includes:
|
|
174
|
+
|
|
175
|
+
- Current configuration
|
|
176
|
+
- Asset counts by category
|
|
177
|
+
- Storage usage
|
|
178
|
+
- Largest assets
|
|
179
|
+
- Extension breakdown
|
|
180
|
+
- Generated output status
|
|
181
|
+
|
|
182
|
+
### `clean`
|
|
183
|
+
|
|
184
|
+
♻️ Remove generated files and the Assets Toolkit cache.
|
|
185
|
+
|
|
186
|
+
```sh
|
|
187
|
+
npx assets-toolkit clean
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Alias:
|
|
191
|
+
|
|
192
|
+
```sh
|
|
193
|
+
npx assets-toolkit -c
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Use this when you want to regenerate from a clean state.
|
|
197
|
+
|
|
198
|
+
### `--version`
|
|
199
|
+
|
|
200
|
+
🏷️ Print the installed package version.
|
|
201
|
+
|
|
202
|
+
```sh
|
|
203
|
+
npx assets-toolkit --version
|
|
204
|
+
npx assets-toolkit -v
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### `help`
|
|
208
|
+
|
|
209
|
+
💡 Show CLI help.
|
|
210
|
+
|
|
211
|
+
```sh
|
|
212
|
+
npx assets-toolkit help
|
|
213
|
+
npx assets-toolkit -h
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## ⚙️ Configuration
|
|
217
|
+
|
|
218
|
+
On first use, Assets Toolkit creates `assets-toolkit.config.json` if it does not already exist.
|
|
219
|
+
|
|
220
|
+
Default config:
|
|
221
|
+
|
|
222
|
+
```json
|
|
223
|
+
{
|
|
224
|
+
"assets": ["./src/assets", "./assets"],
|
|
225
|
+
"output": "generated-assets",
|
|
226
|
+
"target": "auto",
|
|
227
|
+
"duplicates": "ignore"
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Config Options
|
|
232
|
+
|
|
233
|
+
| Option | Type | Description |
|
|
234
|
+
| ------------ | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
235
|
+
| `assets` | `string[]` | Asset directories to scan. |
|
|
236
|
+
| `output` | `string` | Directory where generated files are written. Must stay inside the project root. |
|
|
237
|
+
| `target` | `string` | Valid target value: `auto`, `react-native`, `expo`, `react`, `next`, `vite`, or `unknown`. The CLI auto-detects the active platform from package dependencies. |
|
|
238
|
+
| `duplicates` | `string` | Duplicate preference value: `ignore`, `warn`, or `error`. Duplicate files are surfaced by `generate`, `doctor`, and `doctor --fix`. |
|
|
239
|
+
|
|
240
|
+
Example:
|
|
241
|
+
|
|
242
|
+
```json
|
|
243
|
+
{
|
|
244
|
+
"assets": ["./assets", "./src/shared/assets"],
|
|
245
|
+
"output": "src/generated-assets",
|
|
246
|
+
"target": "react-native",
|
|
247
|
+
"duplicates": "warn"
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## 🧩 Supported Assets
|
|
252
|
+
|
|
253
|
+
| Category | Extensions |
|
|
254
|
+
| -------- | ---------------------------------------------------------------------------------------------------- |
|
|
255
|
+
| Images | `.png`, `.jpg`, `.jpeg`, `.gif`, `.webp`, `.bmp`, `.heic`, `.heif`, `.avif`, `.tiff`, `.tif`, `.ico` |
|
|
256
|
+
| SVG | `.svg` |
|
|
257
|
+
| Fonts | `.ttf`, `.otf`, `.woff`, `.woff2` |
|
|
258
|
+
| Audio | `.mp3`, `.wav`, `.aac`, `.m4a`, `.ogg`, `.flac`, `.amr`, `.opus`, `.caf`, `.aiff` |
|
|
259
|
+
| Video | `.mp4`, `.mov`, `.m4v`, `.avi`, `.mkv`, `.webm`, `.3gp`, `.mpeg`, `.mpg` |
|
|
260
|
+
| Lottie | `.lottie`, plus valid Lottie `.json` files |
|
|
261
|
+
|
|
262
|
+
## ✅ Filename Rules
|
|
263
|
+
|
|
264
|
+
Use simple, portable filenames:
|
|
265
|
+
|
|
266
|
+
```txt
|
|
267
|
+
logo.png
|
|
268
|
+
logo-dark.svg
|
|
269
|
+
home@2x.png
|
|
270
|
+
home@3x.png
|
|
271
|
+
Inter.ttf
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Avoid:
|
|
275
|
+
|
|
276
|
+
```txt
|
|
277
|
+
bad name.png
|
|
278
|
+
bad!name.svg
|
|
279
|
+
logo.PNG
|
|
280
|
+
___.png
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Safe filenames make generated keys cleaner and reduce cross-platform build issues.
|
|
284
|
+
|
|
285
|
+
## 🏗️ Generated Output
|
|
286
|
+
|
|
287
|
+
After running `generate`, you will get output similar to:
|
|
288
|
+
|
|
289
|
+
```txt
|
|
290
|
+
generated-assets/
|
|
291
|
+
index.ts
|
|
292
|
+
images-generate.ts
|
|
293
|
+
svg-generate.ts
|
|
294
|
+
fonts-generate.ts
|
|
295
|
+
audio-generate.ts
|
|
296
|
+
video-generate.ts
|
|
297
|
+
lottie-generate.ts
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
Example generated shape:
|
|
301
|
+
|
|
302
|
+
```ts
|
|
303
|
+
export const Assets = {
|
|
304
|
+
images,
|
|
305
|
+
svg,
|
|
306
|
+
fonts,
|
|
307
|
+
audio,
|
|
308
|
+
video,
|
|
309
|
+
lottie,
|
|
310
|
+
} as const;
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
Nested folders become nested object keys, so your file layout stays readable in code.
|
|
314
|
+
|
|
315
|
+
## 🧪 Recommended Workflow
|
|
316
|
+
|
|
317
|
+
Add these scripts to your project:
|
|
318
|
+
|
|
319
|
+
```json
|
|
320
|
+
{
|
|
321
|
+
"scripts": {
|
|
322
|
+
"assets": "assets-toolkit generate",
|
|
323
|
+
"assets:check": "assets-toolkit doctor",
|
|
324
|
+
"assets:fix": "assets-toolkit doctor --fix",
|
|
325
|
+
"assets:report": "assets-toolkit reports",
|
|
326
|
+
"assets:clean": "assets-toolkit clean"
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Then run:
|
|
332
|
+
|
|
333
|
+
```sh
|
|
334
|
+
npm run assets:check
|
|
335
|
+
npm run assets
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
For CI, a simple check is often enough:
|
|
339
|
+
|
|
340
|
+
```sh
|
|
341
|
+
npx assets-toolkit doctor
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
## 💎 Practical Tips
|
|
345
|
+
|
|
346
|
+
- 📁 Keep app assets in `assets` or `src/assets` for zero-config usage.
|
|
347
|
+
- 🧪 Run `doctor` before release builds to catch large, duplicate, or unsupported files.
|
|
348
|
+
- 🛠️ Use `doctor --fix` when designers or teammates add files with spaces or special characters.
|
|
349
|
+
- 📌 Commit generated assets only if your team wants stable generated files in source control.
|
|
350
|
+
- ♻️ Run `clean` when switching branches if generated output looks stale.
|
|
351
|
+
|
|
352
|
+
## 📄 License
|
|
353
|
+
|
|
354
|
+
This project is licensed under the [MIT License](LICENSE).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheHelper.d.ts","sourceRoot":"","sources":["../src/cacheHelper.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheHelper.js","sourceRoot":"","sources":["../src/cacheHelper.ts"],"names":[],"mappings":""}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { runClean } from "./toolkits/clean.js";
|
|
3
|
+
import { runDoctor } from "./toolkits/doctor.js";
|
|
4
|
+
import { generateAssets } from "./toolkits/generator.js";
|
|
5
|
+
import { runReport } from "./toolkits/reports.js";
|
|
6
|
+
import packageJson from "../package.json" with { type: "json" };
|
|
7
|
+
import { runDoctorFix } from "./toolkits/doctorFix.js";
|
|
8
|
+
import { colorText } from "./colorConsole.js";
|
|
9
|
+
import { printHelp } from "./helps/printHelp.js";
|
|
10
|
+
function parseArguments() {
|
|
11
|
+
const argv = process.argv.slice(2);
|
|
12
|
+
const result = {
|
|
13
|
+
command: "",
|
|
14
|
+
options: {},
|
|
15
|
+
};
|
|
16
|
+
if (argv.length === 0) {
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
result.command = argv[0] ?? "";
|
|
20
|
+
for (let index = 1; index < argv.length; index += 1) {
|
|
21
|
+
const arg = argv[index];
|
|
22
|
+
const nextArg = argv[index + 1];
|
|
23
|
+
if (arg === "--outDir" || arg === "-o") {
|
|
24
|
+
if (typeof nextArg === "string") {
|
|
25
|
+
result.options.outputDir = nextArg;
|
|
26
|
+
}
|
|
27
|
+
index += 1;
|
|
28
|
+
}
|
|
29
|
+
else if (arg === "--assetsDir") {
|
|
30
|
+
if (typeof nextArg === "string") {
|
|
31
|
+
result.options.assetDirectories = [nextArg];
|
|
32
|
+
}
|
|
33
|
+
index += 1;
|
|
34
|
+
}
|
|
35
|
+
else if (arg === "--assetsDirs") {
|
|
36
|
+
if (typeof nextArg === "string") {
|
|
37
|
+
result.options.assetDirectories = nextArg
|
|
38
|
+
.split(",")
|
|
39
|
+
.map((dir) => dir.trim());
|
|
40
|
+
}
|
|
41
|
+
index += 1;
|
|
42
|
+
}
|
|
43
|
+
else if (arg === "--fix") {
|
|
44
|
+
result.options.fix = true;
|
|
45
|
+
}
|
|
46
|
+
else if (arg === "--yes") {
|
|
47
|
+
result.options.yes = true;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
const { command, options } = parseArguments();
|
|
53
|
+
if (command === "generate" || command === "-g") {
|
|
54
|
+
try {
|
|
55
|
+
generateAssets({
|
|
56
|
+
outputDir: options.outputDir,
|
|
57
|
+
assetDirectories: options.assetDirectories,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (command === "reports") {
|
|
66
|
+
runReport();
|
|
67
|
+
}
|
|
68
|
+
else if (command === "doctor") {
|
|
69
|
+
if (options.fix) {
|
|
70
|
+
await runDoctorFix(process.cwd(), {
|
|
71
|
+
yes: options.yes,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
await runDoctor(process.cwd());
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (command === "clean" || command === "-c") {
|
|
79
|
+
runClean();
|
|
80
|
+
}
|
|
81
|
+
else if (command === "help" || command === "-h") {
|
|
82
|
+
printHelp();
|
|
83
|
+
}
|
|
84
|
+
else if (command === "--version" || command === "-v") {
|
|
85
|
+
console.log(packageJson.version);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log(colorText("info", 'Unknown command. Run "assets-toolkit --help" to see available commands.'));
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colorConsole.d.ts","sourceRoot":"","sources":["../src/colorConsole.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,GACN,OAAO,GACP,OAAO,GACP,SAAS,CAAC;AAEd,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0BlE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import pc from "picocolors";
|
|
2
|
+
export function colorText(type, message) {
|
|
3
|
+
switch (type) {
|
|
4
|
+
case "success":
|
|
5
|
+
return pc.green(message);
|
|
6
|
+
case "warning":
|
|
7
|
+
return pc.yellow(message);
|
|
8
|
+
case "error":
|
|
9
|
+
return pc.red(message);
|
|
10
|
+
case "info":
|
|
11
|
+
return pc.cyan(message);
|
|
12
|
+
case "title":
|
|
13
|
+
return pc.bold(pc.cyan(message));
|
|
14
|
+
case "muted":
|
|
15
|
+
return pc.gray(message);
|
|
16
|
+
case "command":
|
|
17
|
+
return pc.blue(message);
|
|
18
|
+
default:
|
|
19
|
+
return message;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=colorConsole.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colorConsole.js","sourceRoot":"","sources":["../src/colorConsole.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAW5B,MAAM,UAAU,SAAS,CAAC,IAAe,EAAE,OAAe;IACxD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE3B,KAAK,SAAS;YACZ,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE5B,KAAK,OAAO;YACV,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEzB,KAAK,MAAM;YACT,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1B,KAAK,OAAO;YACV,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAEnC,KAAK,OAAO;YACV,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1B,KAAK,SAAS;YACZ,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1B;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-types.d.ts","sourceRoot":"","sources":["../src/config-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-types.js","sourceRoot":"","sources":["../src/config-types.ts"],"names":[],"mappings":""}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AssetsToolkitConfig } from "./types.js";
|
|
2
|
+
export declare const defaultConfig: Required<AssetsToolkitConfig>;
|
|
3
|
+
export declare function createDefaultConfig(root: string): void;
|
|
4
|
+
export declare function loadConfig(root: string): AssetsToolkitConfig;
|
|
5
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAMtD,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,mBAAmB,CAKvD,CAAC;AAMF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAStD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAgC5D"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { ensureGitIgnore } from "./helps/gitignore.js";
|
|
4
|
+
import { colorText } from "./colorConsole.js";
|
|
5
|
+
const CONFIG_FILE = "assets-toolkit.config.json";
|
|
6
|
+
export const defaultConfig = {
|
|
7
|
+
assets: ["./src/assets", "./assets"],
|
|
8
|
+
output: "generated-assets",
|
|
9
|
+
target: "auto",
|
|
10
|
+
duplicates: "ignore",
|
|
11
|
+
};
|
|
12
|
+
function getConfigPath(root) {
|
|
13
|
+
return path.join(root, CONFIG_FILE);
|
|
14
|
+
}
|
|
15
|
+
export function createDefaultConfig(root) {
|
|
16
|
+
const configPath = getConfigPath(root);
|
|
17
|
+
if (fs.existsSync(configPath)) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
fs.writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2), "utf8");
|
|
21
|
+
ensureGitIgnore(root);
|
|
22
|
+
console.log(colorText("success", "✓ Created assets-toolkit.config.json"));
|
|
23
|
+
}
|
|
24
|
+
export function loadConfig(root) {
|
|
25
|
+
const configPath = getConfigPath(root);
|
|
26
|
+
// First run
|
|
27
|
+
if (!fs.existsSync(configPath)) {
|
|
28
|
+
createDefaultConfig(root);
|
|
29
|
+
return defaultConfig;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const content = fs.readFileSync(configPath, "utf8");
|
|
33
|
+
const userConfig = JSON.parse(content);
|
|
34
|
+
updateConfigWithDefaults(configPath, userConfig);
|
|
35
|
+
const config = {
|
|
36
|
+
...defaultConfig,
|
|
37
|
+
...userConfig,
|
|
38
|
+
};
|
|
39
|
+
validateConfig(config);
|
|
40
|
+
return config;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
throw new Error(`Invalid assets-toolkit.config.json: ${error instanceof Error ? error.message : String(error)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function validateConfig(config) {
|
|
47
|
+
if (!Array.isArray(config.assets)) {
|
|
48
|
+
throw new Error(`"assets" must be an array`);
|
|
49
|
+
}
|
|
50
|
+
if (typeof config.output !== "string") {
|
|
51
|
+
throw new Error(`"output" must be a string`);
|
|
52
|
+
}
|
|
53
|
+
const validTargets = [
|
|
54
|
+
"auto",
|
|
55
|
+
"react-native",
|
|
56
|
+
"expo",
|
|
57
|
+
"react",
|
|
58
|
+
"next",
|
|
59
|
+
"vite",
|
|
60
|
+
"unknown",
|
|
61
|
+
];
|
|
62
|
+
if (!validTargets.includes(config.target)) {
|
|
63
|
+
throw new Error(`Invalid target "${config.target}"`);
|
|
64
|
+
}
|
|
65
|
+
const validDuplicates = ["ignore", "warn", "error"];
|
|
66
|
+
if (!validDuplicates.includes(config.duplicates)) {
|
|
67
|
+
throw new Error(`Invalid duplicates option "${config.duplicates}"`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function updateConfigWithDefaults(configPath, userConfig) {
|
|
71
|
+
const mergedConfig = {
|
|
72
|
+
...defaultConfig,
|
|
73
|
+
...userConfig,
|
|
74
|
+
};
|
|
75
|
+
const missingKeys = Object.keys(defaultConfig).filter((key) => !(key in userConfig));
|
|
76
|
+
if (missingKeys.length === 0) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
fs.writeFileSync(configPath, JSON.stringify(mergedConfig, null, 2), "utf8");
|
|
80
|
+
console.log(colorText("success", `✓ Updated assets-toolkit.config.json (${missingKeys.join(", ")})`));
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AssetCategory } from "./types.js";
|
|
2
|
+
export declare const categoryExtensions: Record<AssetCategory, string[]>;
|
|
3
|
+
export declare const SUPPORTED_EXTENSIONS: Set<string>;
|
|
4
|
+
export declare const VALID_FILE_NAME: RegExp;
|
|
5
|
+
export declare const INVALID_FILE_NAME_REASONS: {
|
|
6
|
+
readonly EMPTY: "Empty filename";
|
|
7
|
+
readonly ONLY_UNDERSCORES: "Filename contains only underscores";
|
|
8
|
+
readonly STARTS_WITH_NUMBER: "Filename starts with a number";
|
|
9
|
+
readonly INVALID_CHARACTERS: "Filename contains invalid characters";
|
|
10
|
+
readonly UPPERCASE_EXTENSION: "Uppercase extension";
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAyC9D,CAAC;AAEF,eAAO,MAAM,oBAAoB,aAEhC,CAAC;AAEF,eAAO,MAAM,eAAe,QAC0B,CAAC;AAEvD,eAAO,MAAM,yBAAyB;aACpC,KAAK,EAAE,gBAAgB;aACvB,gBAAgB,EAAE,oCAAoC;aACtD,kBAAkB,EAAE,+BAA+B;aACnD,kBAAkB,EAAE,sCAAsC;aAC1D,mBAAmB,EAAE,qBAAqB;CAClC,CAAC"}
|