{"_id":"@aminzer/normalize-file-names","_rev":"8-f1d92f89939e2c1654f2870cd9cc744d","name":"@aminzer/normalize-file-names","dist-tags":{"latest":"1.4.2"},"versions":{"1.3.0":{"name":"@aminzer/normalize-file-names","version":"1.3.0","keywords":["normalize","normalization","file name","file naming","creation date","creation time"],"author":{"name":"aminzer"},"license":"MIT","_id":"@aminzer/normalize-file-names@1.3.0","maintainers":[{"name":"aminzer","email":"minzer.alexey@gmail.com"}],"homepage":"https://github.com/aminzer/normalize-file-names#readme","bugs":{"url":"https://github.com/aminzer/normalize-file-names/issues"},"bin":{"normalize-file-names":"dist/cli.js"},"dist":{"shasum":"1a7d57d32aae7b1ec9fb1b8083fd90016459cf5c","tarball":"https://registry.npmjs.org/@aminzer/normalize-file-names/-/normalize-file-names-1.3.0.tgz","fileCount":138,"integrity":"sha512-lCs0zDwd6frh1FmzszTGrepyIH2xQYkfCMX36P9h8wB78McK8bNizXNHwgwxGS84zQBk6G2m5kaW2MHWxLzYkA==","signatures":[{"sig":"MEUCIQCih8fNEmvMlwr0kUAHIk3IkZdcFMbkuSdSaTloPd57UAIgDd/yuQdrvBlatNSPiKuTL9pvXPcpzGrPCx+RdbVev8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114669},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"d4798f57a7ccf20a8d504be8821761f8236063b9","scripts":{"lint":"eslint src/**/*.ts","test":"tsx --test src/**/*.test.ts","build":"tsc --project tsconfig.build.json","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","start":"node --env-file=.env dist/main.js","prepare":"npm run rebuild","rebuild":"run-s clean build","lint:fix":"npm run lint -- --fix","codestyle":"run-p lint typescript:check","build:watch":"npm run build -- --watch","typescript:check":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"aminzer","email":"minzer.alexey@gmail.com"},"repository":{"url":"git+https://github.com/aminzer/normalize-file-names.git","type":"git"},"_npmVersion":"11.7.0","description":"Utility for file name normalization","directories":{},"_nodeVersion":"24.4.0","dependencies":{"date-fns":"^4.1.0","single-line-log":"^1.1.2","@aminzer/traverse-directory":"^1.2.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","eslint":"^9.36.0","prettier":"^3.6.2","@eslint/js":"^9.36.0","typescript":"^5.9.2","@types/node":"^24.5.2","npm-run-all":"^4.1.5","typescript-eslint":"^8.44.1","@types/single-line-log":"^1.1.2","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4"},"_npmOperationalInternal":{"tmp":"tmp/normalize-file-names_1.3.0_1775680960471_0.4660688919678213","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@aminzer/normalize-file-names","version":"1.3.1","keywords":["normalize","normalization","file name","file naming","creation date","creation time"],"author":{"name":"aminzer"},"license":"MIT","_id":"@aminzer/normalize-file-names@1.3.1","maintainers":[{"name":"aminzer","email":"minzer.alexey@gmail.com"}],"homepage":"https://github.com/aminzer/normalize-file-names#readme","bugs":{"url":"https://github.com/aminzer/normalize-file-names/issues"},"bin":{"normalize-file-names":"dist/cli.js"},"dist":{"shasum":"35901ce418dca3e1d5e83c7cdcb326241d43db29","tarball":"https://registry.npmjs.org/@aminzer/normalize-file-names/-/normalize-file-names-1.3.1.tgz","fileCount":138,"integrity":"sha512-cI5H00Suha9z20THOsdlgnm6aZcnohZ+YmINIpCT39eBUCInCFDo3yeGcY66DtAan+2av5MWQ+XV0cPPTZxCCQ==","signatures":[{"sig":"MEQCIBpVmoeGbCUlwFcEc8FNKcljtQTI16Lu+sbFP6MnDmF+AiAtaeSUi2hYFwEsXtNFaWAy7RuX7ZJfGNPwagm9Jrv53A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114224},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"7cfe90efb3e9f22fc0f6e0a6a4919758178a878d","scripts":{"lint":"eslint src/**/*.ts","test":"tsx --test src/**/*.test.ts","build":"tsc --project tsconfig.build.json","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","start":"node --env-file=.env dist/main.js","prepare":"npm run rebuild","rebuild":"run-s clean build","lint:fix":"npm run lint -- --fix","codestyle":"run-p lint typescript:check","build:watch":"npm run build -- --watch","typescript:check":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"aminzer","email":"minzer.alexey@gmail.com"},"repository":{"url":"git+https://github.com/aminzer/normalize-file-names.git","type":"git"},"_npmVersion":"11.7.0","description":"Utility for file name normalization","directories":{},"_nodeVersion":"24.4.0","dependencies":{"date-fns":"^4.1.0","single-line-log":"^1.1.2","@aminzer/traverse-directory":"^1.2.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","eslint":"^9.36.0","prettier":"^3.6.2","@eslint/js":"^9.36.0","typescript":"^5.9.2","@types/node":"^24.5.2","npm-run-all":"^4.1.5","typescript-eslint":"^8.44.1","@types/single-line-log":"^1.1.2","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4"},"_npmOperationalInternal":{"tmp":"tmp/normalize-file-names_1.3.1_1775717727955_0.2874747879999193","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@aminzer/normalize-file-names","version":"1.3.2","keywords":["normalize","normalization","file name","file naming","creation date","creation time"],"author":{"name":"aminzer"},"license":"MIT","_id":"@aminzer/normalize-file-names@1.3.2","maintainers":[{"name":"aminzer","email":"minzer.alexey@gmail.com"}],"homepage":"https://github.com/aminzer/normalize-file-names#readme","bugs":{"url":"https://github.com/aminzer/normalize-file-names/issues"},"bin":{"normalize-file-names":"dist/cli.js"},"dist":{"shasum":"0de8ed05e9a6cd47ca230d4d0f5ce457bd275009","tarball":"https://registry.npmjs.org/@aminzer/normalize-file-names/-/normalize-file-names-1.3.2.tgz","fileCount":138,"integrity":"sha512-/Z9hkZoRgMvY3LCBqA6XlLtFp9V7gwOHzDbsr4WYcMDYH6LRgLnG5Uc3xoviIvGJvz/Xyl88y7GCrtYBwxyw3A==","signatures":[{"sig":"MEYCIQCO67fEER7WzRytfy8gIENk73Ijhyi4cq5y9hedi2XDdgIhAMGvPTkErCYiCESRWfUYvHI11MhGJGP56kwy1464aVKi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114224},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"30ad9d51dae66cd42b00f5ee00c8dcf94c6d7a21","scripts":{"lint":"eslint src/**/*.ts","test":"tsx --test src/**/*.test.ts","build":"tsc --project tsconfig.build.json","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","start":"node --env-file=.env dist/main.js","prepare":"npm run rebuild","rebuild":"run-s clean build","lint:fix":"npm run lint -- --fix","codestyle":"run-p lint typescript:check","build:watch":"npm run build -- --watch","typescript:check":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"aminzer","email":"minzer.alexey@gmail.com"},"repository":{"url":"git+https://github.com/aminzer/normalize-file-names.git","type":"git"},"_npmVersion":"11.7.0","description":"Utility for file name normalization","directories":{},"_nodeVersion":"24.4.0","dependencies":{"date-fns":"^4.1.0","single-line-log":"^1.1.2","@aminzer/traverse-directory":"^1.2.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","eslint":"^9.36.0","prettier":"^3.6.2","@eslint/js":"^9.36.0","typescript":"^5.9.2","@types/node":"^24.5.2","npm-run-all":"^4.1.5","typescript-eslint":"^8.44.1","@types/single-line-log":"^1.1.2","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4"},"_npmOperationalInternal":{"tmp":"tmp/normalize-file-names_1.3.2_1775761312534_0.15350503847938946","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@aminzer/normalize-file-names","version":"1.3.3","keywords":["normalize","normalization","file name","file naming","creation date","creation time"],"author":{"name":"aminzer"},"license":"MIT","_id":"@aminzer/normalize-file-names@1.3.3","maintainers":[{"name":"aminzer","email":"minzer.alexey@gmail.com"}],"homepage":"https://github.com/aminzer/normalize-file-names#readme","bugs":{"url":"https://github.com/aminzer/normalize-file-names/issues"},"bin":{"normalize-file-names":"dist/cli.js"},"dist":{"shasum":"7593ad05b99c610adeca61a818ae8a9db616082d","tarball":"https://registry.npmjs.org/@aminzer/normalize-file-names/-/normalize-file-names-1.3.3.tgz","fileCount":138,"integrity":"sha512-TyItIpKqs6HKyMyNrWEF50fJbHss7KVUWW73I9eyLfBwX1ulYUaHSA02IGiVBMOSuoIOAiYZbLb1TjPgZEdsow==","signatures":[{"sig":"MEUCIQDaiCjwextdhOLAZuZ0H4Nfd8QSw14y7lPQTX3MHDT33AIgNxwBQ3S/6ZP/KljFgRLQvHOwWVC0zyejrbCkZf3dzGQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114224},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"08a3ed4a96279b284831838c2bc7330302b67bb1","scripts":{"lint":"eslint src/**/*.ts","test":"tsx --test src/**/*.test.ts","build":"tsc --project tsconfig.build.json","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","start":"node --env-file=.env dist/main.js","prepare":"npm run rebuild","rebuild":"run-s clean build","lint:fix":"npm run lint -- --fix","codestyle":"run-p lint typescript:check","build:watch":"npm run build -- --watch","typescript:check":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"aminzer","email":"minzer.alexey@gmail.com"},"repository":{"url":"git+https://github.com/aminzer/normalize-file-names.git","type":"git"},"_npmVersion":"11.7.0","description":"Utility for file name normalization","directories":{},"_nodeVersion":"24.4.0","dependencies":{"date-fns":"^4.1.0","single-line-log":"^1.1.2","@aminzer/traverse-directory":"^1.2.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","eslint":"^9.36.0","prettier":"^3.6.2","@eslint/js":"^9.36.0","typescript":"^5.9.2","@types/node":"^24.5.2","npm-run-all":"^4.1.5","typescript-eslint":"^8.44.1","@types/single-line-log":"^1.1.2","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4"},"_npmOperationalInternal":{"tmp":"tmp/normalize-file-names_1.3.3_1788255275261_0.443828938764542","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"@aminzer/normalize-file-names","version":"1.3.4","keywords":["normalize","normalization","file name","file naming","creation date","creation time"],"author":{"name":"aminzer"},"license":"MIT","_id":"@aminzer/normalize-file-names@1.3.4","maintainers":[{"name":"aminzer","email":"minzer.alexey@gmail.com"}],"homepage":"https://github.com/aminzer/normalize-file-names#readme","bugs":{"url":"https://github.com/aminzer/normalize-file-names/issues"},"bin":{"normalize-file-names":"dist/cli.js"},"dist":{"shasum":"b82901f15b31c4225a01fe46580fe8a6ae1c6b8c","tarball":"https://registry.npmjs.org/@aminzer/normalize-file-names/-/normalize-file-names-1.3.4.tgz","fileCount":138,"integrity":"sha512-PLWNQrJ5mj8dZCBJDD6txZ901uKH7FSLKTh0GgqRGLrC9GKJRtaBAZE+ABP75xKMnZMtw9pY/3ho8EMo1L2vxw==","signatures":[{"sig":"MEQCIETa1P147on7zOaNvJblyIgQMm9N3Fex+2UWCaEdftA0AiBXC32WCUI5815uKKH5xfxYJk+A5Wo4CD7fU9FGbEc82g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aminzer%2fnormalize-file-names@1.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":114150},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"112a8ba7c0947f31b7fb1a09d09fc9cc2b4ccb2e","scripts":{"lint":"eslint src/**/*.ts","test":"tsx --test src/**/*.test.ts","build":"tsc --project tsconfig.build.json","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","start":"node --env-file=.env dist/main.js","prepare":"npm run rebuild","rebuild":"run-s clean build","lint:fix":"npm run lint -- --fix","codestyle":"run-p lint typescript:check","build:watch":"npm run build -- --watch","typescript:check":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"aminzer","email":"minzer.alexey@gmail.com"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:47578456-8870-4279-a2e9-9fdda4cf49aa"}},"repository":{"url":"git+https://github.com/aminzer/normalize-file-names.git","type":"git"},"_npmVersion":"11.19.1","description":"Utility for file name normalization","directories":{},"_nodeVersion":"24.20.0","dependencies":{"date-fns":"^4.1.0","single-line-log":"^1.1.2","@aminzer/traverse-directory":"^1.2.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","eslint":"^9.36.0","prettier":"^3.6.2","@eslint/js":"^9.36.0","typescript":"^5.9.2","@types/node":"^24.5.2","npm-run-all":"^4.1.5","typescript-eslint":"^8.44.1","@types/single-line-log":"^1.1.2","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4"},"_npmOperationalInternal":{"tmp":"tmp/normalize-file-names_1.3.4_1788469781408_0.09479095546697214","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@aminzer/normalize-file-names","version":"1.4.0","keywords":["normalize","normalization","file name","file naming","creation date","creation time"],"author":{"name":"aminzer"},"license":"MIT","_id":"@aminzer/normalize-file-names@1.4.0","maintainers":[{"name":"aminzer","email":"minzer.alexey@gmail.com"}],"homepage":"https://github.com/aminzer/normalize-file-names#readme","bugs":{"url":"https://github.com/aminzer/normalize-file-names/issues"},"bin":{"normalize-file-names":"dist/cli.js"},"dist":{"shasum":"a99a776ad59461ebef8679a8073801c7ded0b617","tarball":"https://registry.npmjs.org/@aminzer/normalize-file-names/-/normalize-file-names-1.4.0.tgz","fileCount":138,"integrity":"sha512-q/2OuH8TJk6bAxSAOdzk7blyd1jdmQcKEWvYtkMEeNR2h+l+6JPktpT1exdqs7JYC9nUvEfwhPdSy/oFuENCYw==","signatures":[{"sig":"MEYCIQCDwpPgrFl83H+qIOgyC+fj4leuXAe1q39SkCADvVkl1gIhAJjd8ETnltIMkpEDmMTFKm/MMu6QCw6cvdVZ9kcj3N5j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aminzer%2fnormalize-file-names@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121461},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"a8581bd2146927c48754c954d44f92374c364c64","scripts":{"lint":"eslint src/**/*.ts","test":"tsx --test src/**/*.test.ts","build":"tsc --project tsconfig.build.json","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","start":"node --env-file=.env dist/main.js","prepare":"npm run rebuild","rebuild":"run-s clean build","lint:fix":"npm run lint -- --fix","codestyle":"run-p lint typescript:check","build:watch":"npm run build -- --watch","typescript:check":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"aminzer","email":"minzer.alexey@gmail.com"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:47578456-8870-4279-a2e9-9fdda4cf49aa"}},"repository":{"url":"git+https://github.com/aminzer/normalize-file-names.git","type":"git"},"_npmVersion":"11.19.1","description":"Utility for file name normalization","directories":{},"_nodeVersion":"24.20.0","dependencies":{"date-fns":"^4.1.0","single-line-log":"^1.1.2","@aminzer/traverse-directory":"^1.2.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","eslint":"^9.36.0","prettier":"^3.6.2","@eslint/js":"^9.36.0","typescript":"^5.9.2","@types/node":"^24.5.2","npm-run-all":"^4.1.5","typescript-eslint":"^8.44.1","@types/single-line-log":"^1.1.2","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4"},"_npmOperationalInternal":{"tmp":"tmp/normalize-file-names_1.4.0_1788643394249_0.7344641734270094","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@aminzer/normalize-file-names","version":"1.4.1","keywords":["normalize","normalization","file name","file naming","creation date","creation time"],"author":{"name":"aminzer"},"license":"MIT","_id":"@aminzer/normalize-file-names@1.4.1","maintainers":[{"name":"aminzer","email":"minzer.alexey@gmail.com"}],"homepage":"https://github.com/aminzer/normalize-file-names#readme","bugs":{"url":"https://github.com/aminzer/normalize-file-names/issues"},"bin":{"normalize-file-names":"dist/cli.js"},"dist":{"shasum":"8f6da908d074aee37ed2119f15cdaf06d70f25e1","tarball":"https://registry.npmjs.org/@aminzer/normalize-file-names/-/normalize-file-names-1.4.1.tgz","fileCount":144,"integrity":"sha512-i/aXKYtT7AHx1adLnxG+rk9FKtPRAaTlcWGM1G5DHxxsDPlTFjMxfGOc1761pxxguI9vKqzQh+lBpCeWkyDs/Q==","signatures":[{"sig":"MEYCIQD9Cs8m/futYbrz8JskWf4dqeuDeNLhUy2FXvCX7mjtcwIhAN7P1uRZ6XRo5dqePGHgNs2NRfJhDp/BFk4HL0UBw/6Q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aminzer%2fnormalize-file-names@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":130226},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"06700d82aa3f612585bf19fdfe5e4911a92205f0","scripts":{"lint":"eslint src/**/*.ts","test":"tsx --test src/**/*.test.ts","build":"tsc --project tsconfig.build.json","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","start":"node --env-file=.env dist/main.js","prepare":"npm run rebuild","rebuild":"run-s clean build","lint:fix":"npm run lint -- --fix","codestyle":"run-p lint typescript:check","build:watch":"npm run build -- --watch","typescript:check":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"aminzer","email":"minzer.alexey@gmail.com"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:47578456-8870-4279-a2e9-9fdda4cf49aa"}},"repository":{"url":"git+https://github.com/aminzer/normalize-file-names.git","type":"git"},"_npmVersion":"11.19.1","description":"Utility for file name normalization","directories":{},"_nodeVersion":"24.20.0","dependencies":{"date-fns":"^4.1.0","single-line-log":"^1.1.2","@aminzer/traverse-directory":"^1.2.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","eslint":"^9.36.0","prettier":"^3.6.2","@eslint/js":"^9.36.0","typescript":"^5.9.2","@types/node":"^24.5.2","npm-run-all":"^4.1.5","typescript-eslint":"^8.44.1","@types/single-line-log":"^1.1.2","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4"},"_npmOperationalInternal":{"tmp":"tmp/normalize-file-names_1.4.1_1788726791179_0.45072842423260706","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"_id":"@aminzer/normalize-file-names@1.4.2","bin":{"normalize-file-names":"dist/cli.js"},"bugs":{"url":"https://github.com/aminzer/normalize-file-names/issues"},"dist":{"shasum":"7057731c785f9281b3b93ba7d54b1e68e17fbd9b","tarball":"https://registry.npmjs.org/@aminzer/normalize-file-names/-/normalize-file-names-1.4.2.tgz","integrity":"sha512-gUUgOufNPbBFp/oLcbQafm3zpADN79ZVNS8k9D3fPsMVjJRH1ixU5a6UYPKjeu8lnZi0Y6aCmWxATZpQNBCjfA==","fileCount":144,"unpackedSize":130228,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aminzer%2fnormalize-file-names@1.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAeq39K9OLdt/2O0LSzUfxLaqQ7DNTssKdWyZlU8N3pyAiEA3o4RgxuEzakt1DF+lD2RxXok0fldkLQ9jpsc8xk2J3A="}]},"main":"dist/index.js","name":"@aminzer/normalize-file-names","type":"module","types":"dist/index.d.ts","author":{"name":"aminzer"},"engines":{"node":">=22.0.0"},"gitHead":"71f00046a041c2acf4408e0aff3042c659f7fc7f","license":"MIT","scripts":{"lint":"eslint src/**/*.ts","test":"tsx --test src/**/*.test.ts","build":"tsc --project tsconfig.build.json","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","start":"node --env-file=.env dist/main.js","prepare":"npm run rebuild","rebuild":"run-s clean build","lint:fix":"npm run lint -- --fix","codestyle":"run-p lint typescript:check","build:watch":"npm run build -- --watch","typescript:check":"tsc --project tsconfig.json --noEmit"},"version":"1.4.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:47578456-8870-4279-a2e9-9fdda4cf49aa"},"approver":{"name":"aminzer","email":"minzer.alexey@gmail.com"}},"homepage":"https://github.com/aminzer/normalize-file-names#readme","keywords":["normalize","normalization","file name","file naming","creation date","creation time"],"repository":{"url":"git+https://github.com/aminzer/normalize-file-names.git","type":"git"},"_npmVersion":"11.19.1","description":"Utility for file name normalization","directories":{},"maintainers":[{"name":"aminzer","email":"minzer.alexey@gmail.com"}],"_nodeVersion":"24.20.0","dependencies":{"date-fns":"^4.4.0","single-line-log":"^1.1.2","@aminzer/traverse-directory":"^1.2.9"},"publishConfig":{"access":"public"},"devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","prettier":"^3.9.6","@eslint/js":"^10.0.1","typescript":"^5.9.2","@types/node":"^26.4.1","npm-run-all":"^4.1.5","typescript-eslint":"^8.69.0","@types/single-line-log":"^1.1.2","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.6"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/normalize-file-names_1.4.2_1788726800406_0.8410672351546435"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-08T20:42:40.410Z","modified":"2026-09-06T20:33:20.806Z","1.3.0":"2026-04-08T20:42:40.640Z","1.3.1":"2026-04-09T06:55:28.088Z","1.3.2":"2026-04-09T19:01:52.683Z","1.3.3":"2026-09-01T09:34:35.388Z","1.3.4":"2026-09-03T21:09:41.503Z","1.4.0":"2026-09-05T21:23:14.337Z","1.4.1":"2026-09-06T20:33:11.256Z","1.4.2":"2026-09-06T20:33:20.488Z"},"bugs":{"url":"https://github.com/aminzer/normalize-file-names/issues"},"author":{"name":"aminzer"},"license":"MIT","homepage":"https://github.com/aminzer/normalize-file-names#readme","keywords":["normalize","normalization","file name","file naming","creation date","creation time"],"repository":{"url":"git+https://github.com/aminzer/normalize-file-names.git","type":"git"},"description":"Utility for file name normalization","maintainers":[{"name":"aminzer","email":"minzer.alexey@gmail.com"}],"readme":"# normalize-file-names\n\n### Overview\n\n[Node.js](https://nodejs.org) utility for file name normalizing based on embedded or inferred creation dates.\n\nIt helps bring order to media files originating from various devices or apps by renaming them into a unified, chronological format.\n\n---\n\n### Why\n\nDifferent devices and apps use inconsistent file naming conventions.\nFor example:\n\n**Smartphone camera:**\n\n```\nIMG_20250715_114509.jpg\n```\n\n**Messenger app (e.g., Viber):**\n\n```\nviber_image_2025-07-15_11-45-09.jpg\n```\n\nWhen you merge files from multiple sources into a single folder, chronological sorting can break - especially if the original creation / modification timestamps were lost during transfer.\n\nThis utility renames files into a consistent format that encodes the date and time:\n\n```\n2025_07_15__11_45_09_000.jpg\n```\n\nThis way, **sorting by file name = sorting by time**.\n\n---\n\n### Installation\n\n```bash\nnpm install @aminzer/normalize-file-names\n```\n\n---\n\n### Programmatic usage\n\n```ts\nimport { normalizeFileNames } from '@aminzer/normalize-file-names';\n\nawait normalizeFileNames({\n  inputDirPath: '/path/to/input',\n  outputDirPath: '/path/to/output',\n});\n```\n\n#### `normalizeFileNames` parameters\n\n- **`inputDirPath`** (`string`, required) — Path to the input directory containing files to rename. Files in nested subdirectories are also processed. The original files are not modified — copies are created in the output directory.\n- **`outputDirPath`** (`string`, required) — Path to the output directory where renamed files are written. All files with recognized names are copied directly into this directory's root (subdirectory structure is flattened).\n- **`outputFileNameFormat`** (`string`, required) — Format of the output file names, using [date-fns format](https://date-fns.org/v4.1.0/docs/format).\n- **`unrecognizedFilesOutputDirPath`** (`string`, optional, default: `<outputDirPath>/_UNRECOGNIZED`) — Path to the directory where files with unrecognized names are copied.\n- **`recognizedFromFsFilesOutputDirPath`** (`string`, optional, default: `<outputDirPath>/_RECOGNIZED_FROM_FS`) — Path to the directory where files recognized via filesystem metadata are copied.\n- **`isFileSystemMetadataFallbackEnabled`** (`boolean`, optional, default: `false`) — If enabled, files with unrecognized names will fall back to using filesystem metadata: the earlier of the file's creation (`birthtime`) and modification (`mtime`) timestamps.\n- **`isDryRun`** (`boolean`, optional, default: `false`) — If enabled, files are not copied. Instead, the planned name changes are logged. Useful for testing recognition logic.\n- **`logger`** (`LoggerInterface`, optional, default: `NoopLogger`) — Logger instance for progress and diagnostic output.\n\nThe package also exports `LoggerInterface` and `StdoutLogger`.\n\n`LoggerInterface` defines the logging contract expected by `normalizeFileNames`:\n\n- **`log(message: string): void`** — logs a message on a new line.\n- **`logSingleLine(message: string): void`** — logs a message by overwriting the current line (used for progress indicators).\n- **`clearSingleLine(): void`** — clears the current single-line output.\n\n`StdoutLogger` is a built-in implementation that writes progress and diagnostics to stdout:\n\n```ts\nimport { normalizeFileNames, StdoutLogger } from '@aminzer/normalize-file-names';\n\nawait normalizeFileNames({\n  inputDirPath: '/path/to/input',\n  outputDirPath: '/path/to/output',\n  logger: new StdoutLogger(),\n});\n```\n\nYou can provide your own implementation of `LoggerInterface` for custom logging behavior.\n\n---\n\n### CLI usage\n\n```bash\nnpm install --global @aminzer/normalize-file-names\n```\n\n```bash\nnormalize-file-names --input <path> --output <path> [options]\n```\n\n#### Flags\n\n| Flag | Parameter |\n| --- | --- |\n| `-i, --input <path>` | `inputDirPath` |\n| `-o, --output <path>` | `outputDirPath` |\n| `--output-file-name-format <fmt>` | `outputFileNameFormat` |\n| `--fs-metadata-fallback` | `isFileSystemMetadataFallbackEnabled` |\n| `--dry-run` | `isDryRun` |\n\n**Example:**\n\n```bash\nnormalize-file-names \\\n  --input ~/photos/raw \\\n  --output ~/photos/normalized \\\n  --fs-metadata-fallback\n```\n\n---\n\n### Usage from project root\n\n```bash\ngit clone git@github.com:aminzer/normalize-file-names.git\ncd normalize-file-names\nnpm install\n```\n\nArguments are provided via environment variables or a `.env` file:\n\n| Name | Parameter |\n| --- | --- |\n| **`INPUT_DIR_PATH`** | `inputDirPath` |\n| **`OUTPUT_DIR_PATH`** | `outputDirPath` |\n| **`OUTPUT_FILE_NAME_FORMAT`** | `outputFileNameFormat` |\n| **`FS_METADATA_FALLBACK`** | `isFileSystemMetadataFallbackEnabled` |\n| **`DRY_RUN`** | `isDryRun` |\n\n**Inline:**\n\n```bash\nINPUT_DIR_PATH=~/photos/raw \\\nOUTPUT_DIR_PATH=~/photos/normalized \\\nFS_METADATA_FALLBACK=true \\\nnpm start\n```\n\n**`.env` file** in the project root:\n\n```env\nINPUT_DIR_PATH=/path/to/input\nOUTPUT_DIR_PATH=/path/to/output\nFS_METADATA_FALLBACK=true\nDRY_RUN=false\n```\n\n```bash\nnpm start\n```\n\n---\n\n### Result\n\nBefore:\n```\nviber_image_2025-07-15_11-45-09.jpg\nIMG_20250716_231551.png\n20250717.mp4\n```\n\nAfter:\n```\n2025_07_15__11_45_09_000.jpg\n2025_07_16__23_15_51_000.png\n2025_07_17__00_00_00_000.mp4\n```\n\nNow, simply sorting by name reflects the chronological order of your files.\n","readmeFilename":"README.md"}