@soga/utils 0.0.1

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/README.md ADDED
@@ -0,0 +1 @@
1
+ # no desc
@@ -0,0 +1 @@
1
+ export declare const getFileBufferSlice: (file_path: string, start: number, end?: number) => Promise<Buffer<ArrayBuffer>>;
package/dist/buffer.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getFileBufferSlice=void 0;const fs_extra_1=require("fs-extra"),getFileBufferSlice=async function(e,r,t){const f=(0,fs_extra_1.createReadStream)(e,{start:r,end:t}),i=[];return await new Promise(((e,r)=>{f.on("data",(e=>{i.push(e)})),f.on("end",(()=>{e(!0)})),f.on("error",(e=>{r(e)}))})),Buffer.concat(i)};exports.getFileBufferSlice=getFileBufferSlice;
@@ -0,0 +1,6 @@
1
+ export declare const isUtf8Text: (text: string) => Promise<boolean>;
2
+ export declare const isUtf8File: (filepath: string) => Promise<boolean>;
3
+ export declare const getAllCharcode: (filepath: string) => Promise<import("chardet").AnalyseResult>;
4
+ export declare function getBufferEncoding(buffer: Buffer<ArrayBufferLike>): string;
5
+ export declare function readFileAsUTF8(filePath: string): Promise<string>;
6
+ export declare function saveFileAsUtf8(inputFilePath: string, outputFilePath: string): Promise<void>;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getAllCharcode=exports.isUtf8File=exports.isUtf8Text=void 0,exports.getBufferEncoding=getBufferEncoding,exports.readFileAsUTF8=readFileAsUTF8,exports.saveFileAsUtf8=saveFileAsUtf8;const chardet_1=__importDefault(require("chardet")),fs_1=require("fs"),fs_extra_1=require("fs-extra"),iconv_lite_1=__importDefault(require("iconv-lite")),buffer_1=require("./buffer"),file_1=require("./file"),isUtf8Text=async e=>"UTF-8"===chardet_1.default.detect(Buffer.from(e)).toUpperCase();exports.isUtf8Text=isUtf8Text;const isUtf8File=async e=>"UTF-8"===(await chardet_1.default.detectFile(e)).toUpperCase();exports.isUtf8File=isUtf8File;const getAllCharcode=async e=>{const t=await(0,file_1.getFileSize)(e);let r=t-1;t>20480&&(r=20480);const i=await(0,buffer_1.getFileBufferSlice)(e,0,r);return chardet_1.default.analyse(i)};function getBufferEncoding(e){const t=chardet_1.default.analyse(e),r=t.find((e=>"UTF-8"===e.name)),i=t.find((e=>e.name.startsWith("GB")));return r?i?r.confidence>=i.confidence?r.name:i.name:r.name:i?i.name:t[0].name}async function readFileAsUTF8(e){return await new Promise(((t,r)=>{(0,fs_extra_1.readFile)(e,((e,i)=>{if(e)return void r(e);const a=getBufferEncoding(i);if("UTF-8"===a)t(i.toString("utf8"));else{const e=iconv_lite_1.default.decode(i,a);t(e)}}))}))}async function saveFileAsUtf8(e,t){await new Promise(((r,i)=>{const a=(0,fs_1.createReadStream)(e),s=(0,fs_1.createWriteStream)(t);a.on("error",(e=>{console.error(`读取文件时发生错误: ${e.message}`),i(e)})),s.on("error",(e=>{console.error(`写入文件时发生错误: ${e.message}`),i(e)})),(async()=>{try{const t=await(0,file_1.getFileSize)(e),o=Math.min(1023,t),f=getBufferEncoding(await(0,buffer_1.getFileBufferSlice)(e,0,o));if("UTF-8"===f)a.pipe(s);else{const e=iconv_lite_1.default.decodeStream(f),t=iconv_lite_1.default.encodeStream("utf8");a.pipe(e).pipe(t).pipe(s).on("finish",(()=>{r(!0)})).on("error",(e=>{console.error(`转换文件时发生错误: ${e.message}`),i(e)}))}}catch(e){i(e)}})()}))}exports.getAllCharcode=getAllCharcode;
package/dist/file.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare const getFileSize: (filePath: string) => Promise<number>;
2
+ export declare const isValidFile: (filepath: string) => Promise<boolean>;
package/dist/file.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isValidFile=exports.getFileSize=void 0;const fs_extra_1=require("fs-extra"),getFileSize=async e=>(await(0,fs_extra_1.stat)(e)).size;exports.getFileSize=getFileSize;const isValidFile=async e=>{if(!await(0,fs_extra_1.pathExists)(e))return!1;return await(0,exports.getFileSize)(e)>0};exports.isValidFile=isValidFile;
package/dist/gzip.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export declare const gzip: (inputFilePath: string, outputFilePath: string, onProgress?: (params: {
2
+ total: number;
3
+ current: number;
4
+ percent: number;
5
+ }) => void | Promise<void>) => Promise<void>;
package/dist/gzip.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.gzip=void 0;const fs_extra_1=require("fs-extra"),zlib_1=__importDefault(require("zlib")),file_1=require("./file"),gzip=async(e,t,r)=>{const i=(0,fs_extra_1.createReadStream)(e),a=(0,fs_extra_1.createWriteStream)(t),o=zlib_1.default.createGzip(),s=await(0,file_1.getFileSize)(e);i.pipe(o).pipe(a);let _=0,l=0;await new Promise(((e,t)=>{i.on("error",(e=>{t(e)})),a.on("error",(e=>{t(e)})),i.on("data",(async e=>{if(r&&(_+=e.length,_-l>31457280)){l=_;const e=Math.min(_/s,1);await r({total:s,current:_,percent:e})}})),a.on("close",(()=>{e(!0)}))}))};exports.gzip=gzip;
package/dist/hash.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ export declare const calculateMd5: (param: FileInput) => Promise<string>;
2
+ export declare const calculateSha1: (param: FileInput) => Promise<string>;
3
+ export declare const calculateMd4: ({ file, start, end, }: {
4
+ file: string;
5
+ start: number;
6
+ end: number;
7
+ }) => Promise<string>;
8
+ type FileInput = {
9
+ file: string;
10
+ start: number;
11
+ end: number;
12
+ };
13
+ export {};
package/dist/hash.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.calculateMd4=exports.calculateSha1=exports.calculateMd5=void 0;const crypto_1=require("crypto"),fs_extra_1=require("fs-extra"),calculateMd5=async a=>await calculateHash(a,"md5");exports.calculateMd5=calculateMd5;const calculateSha1=async a=>await calculateHash(a,"sha1");exports.calculateSha1=calculateSha1;const calculateMd4=async({file:a,start:t,end:e})=>{const c=Math.min(e,t+262144-1);return await calculateHash({file:a,start:t,end:c},"md5")};async function calculateHash({file:a,start:t,end:e},c="md5"){const l=(0,crypto_1.createHash)(c);await new Promise(((c,r)=>{const s=(0,fs_extra_1.createReadStream)(a,{start:t,end:e});s.on("data",(a=>{l.update(a)})),s.on("end",(()=>{c(!0)})),s.on("error",(a=>{r(a)}))}));return l.digest("hex")}exports.calculateMd4=calculateMd4;
@@ -0,0 +1,18 @@
1
+ export declare const languageMap: Record<string, {
2
+ name: string;
3
+ label: string;
4
+ eng: string;
5
+ lang: string;
6
+ }>;
7
+ export declare const languageList: {
8
+ name: string;
9
+ label: string;
10
+ eng: string;
11
+ lang: string;
12
+ }[];
13
+ export declare const defaultLanguage: {
14
+ name: string;
15
+ label: string;
16
+ eng: string;
17
+ lang: string;
18
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.defaultLanguage=exports.languageList=exports.languageMap=void 0,exports.languageMap={"zh-cn":{name:"中文简体",label:"中文(简体)",eng:"Chinese (Simplified)",lang:"zh-cn"},"zh-tw":{name:"中文繁体",label:"中文(繁體)",eng:"Chinese (Traditional)",lang:"zh-tw"},en:{name:"英语",label:"English",eng:"English",lang:"en"},af:{name:"南非语",label:"Afrikaans",eng:"Afrikaans",lang:"af"},ar:{name:"阿拉伯语",label:"عربي",eng:"Arabic",lang:"ar"},bg:{name:"保加利亚语",label:"български",eng:"Bulgarian",lang:"bg"},bn:{name:"孟加拉语",label:"বাংলা",eng:"Bengali",lang:"bn"},cs:{name:"捷克语",label:"čeština",eng:"Czech",lang:"cs"},da:{name:"丹麦语",label:"dansk",eng:"Danish",lang:"da"},de:{name:"德语",label:"Deutsch",eng:"German",lang:"de"},el:{name:"希腊语",label:"Ελληνικά",eng:"Greek",lang:"el"},es:{name:"西班牙语",label:"Español",eng:"Spanish",lang:"es"},et:{name:"爱沙尼亚语",label:"eesti",eng:"Estonian",lang:"et"},fa:{name:"波斯语",label:"فارسی",eng:"Persian",lang:"fa"},fi:{name:"芬兰语",label:"Suomalainen",eng:"Finnish",lang:"fi"},fr:{name:"法语",label:"Français",eng:"French",lang:"fr"},gu:{name:"古吉拉特语",label:"ગુજરાતી",eng:"Gujarati",lang:"gu"},he:{name:"希伯来语",label:"עִברִית",eng:"Hebrew",lang:"he"},hi:{name:"印地语",label:"हिंदी",eng:"Hindi",lang:"hi"},hr:{name:"克罗地亚语",label:"Hrvatski",eng:"Croatian",lang:"hr"},hu:{name:"匈牙利语",label:"Magyar",eng:"Hungarian",lang:"hu"},id:{name:"印度尼西亚语",label:"Bahasa Indonesia",eng:"Indonesian",lang:"id"},it:{name:"意大利语",label:"Italiana",eng:"Italian",lang:"it"},ja:{name:"日语",label:"日本語",eng:"Japanese",lang:"ja"},kn:{name:"卡纳达语",label:"ಕನ್ನಡ",eng:"Kannada",lang:"kn"},ko:{name:"朝鲜语",label:"한국인",eng:"Korean",lang:"ko"},lt:{name:"立陶宛语",label:"lietuvių",eng:"Lithuanian",lang:"lt"},lv:{name:"拉脱维亚语",label:"latviski",eng:"Latvian",lang:"lv"},mk:{name:"马其顿语",label:"македонски",eng:"Macedonian",lang:"mk"},ml:{name:"马拉雅拉姆语",label:"മലയാളം",eng:"Malayalam",lang:"ml"},mr:{name:"马拉地语",label:"मराठी",eng:"Marathi",lang:"mr"},ne:{name:"尼泊尔语",label:"नेपाली",eng:"Nepali",lang:"ne"},nl:{name:"荷兰语",label:"Nederlands",eng:"Dutch",lang:"nl"},no:{name:"挪威语",label:"norsk",eng:"Norwegian",lang:"no"},pa:{name:"旁遮普语",label:"ਪੰਜਾਬੀ",eng:"Punjabi",lang:"pa"},pl:{name:"波兰语",label:"Polski",eng:"Polish",lang:"pl"},pt:{name:"葡萄牙语",label:"Português",eng:"Portuguese",lang:"pt"},ro:{name:"罗马尼亚语",label:"Română",eng:"Romanian",lang:"ro"},ru:{name:"俄语",label:"Русский",eng:"Russian",lang:"ru"},sk:{name:"斯洛伐克语",label:"slovenský",eng:"Slovak",lang:"sk"},sl:{name:"斯洛文尼亚语",label:"Slovenščina",eng:"Slovenian",lang:"sl"},so:{name:"索马里语",label:"Soomaali",eng:"Somali",lang:"so"},sq:{name:"阿尔巴尼亚语",label:"shqiptare",eng:"Albanian",lang:"sq"},sv:{name:"瑞典语",label:"svenska",eng:"Swedish",lang:"sv"},sw:{name:"斯瓦希里语",label:"kiswahili",eng:"Swahili",lang:"sw"},ta:{name:"泰米尔语",label:"தமிழ்",eng:"Tamil",lang:"ta"},te:{name:"泰卢固语",label:"తెలుగు",eng:"Telugu",lang:"te"},th:{name:"泰语",label:"แบบไทย",eng:"Thai",lang:"th"},tl:{name:"他加禄语",label:"Tagalog",eng:"Tagalog",lang:"tl"},tr:{name:"土耳其语",label:"Türkçe",eng:"Turkish",lang:"tr"},uk:{name:"乌克兰语",label:"українська",eng:"Ukrainian",lang:"uk"},ur:{name:"乌尔都语",label:"اردو",eng:"Urdu",lang:"ur"},vi:{name:"越南语",label:"Tiếng Việt",eng:"Vietnamese",lang:"vi"}},exports.languageList=Object.keys(exports.languageMap).map((a=>exports.languageMap[a])),exports.defaultLanguage=exports.languageMap.en;
@@ -0,0 +1,12 @@
1
+ export declare const getTextLanguage: (text: string, useDefault?: boolean) => Promise<{
2
+ name: string;
3
+ label: string;
4
+ eng: string;
5
+ lang: string;
6
+ }>;
7
+ export declare const getFileLanguage: (filepath: string, useDefault?: boolean) => Promise<{
8
+ name: string;
9
+ label: string;
10
+ eng: string;
11
+ lang: string;
12
+ }>;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getFileLanguage=exports.getTextLanguage=void 0;const buffer_1=require("./buffer"),charcode_1=require("./charcode"),file_1=require("./file"),language_map_1=require("./language-map"),langdetect_1=__importDefault(require("langdetect")),iconv_lite_1=__importDefault(require("iconv-lite")),getTextLanguage=async(e,t=!0)=>{try{const a=langdetect_1.default.detectOne(e);return a||t?a&&language_map_1.languageMap[a]?language_map_1.languageMap[a]:language_map_1.defaultLanguage:null}catch(e){return language_map_1.defaultLanguage}};exports.getTextLanguage=getTextLanguage;const getFileLanguage=async(e,t=!0)=>{const a=await(0,file_1.getFileSize)(e);let g=a-1;a>20480&&(g=20480);const n=await(0,buffer_1.getFileBufferSlice)(e,0,g),u=(0,charcode_1.getBufferEncoding)(n);let r="";r="UTF-8"==u.toUpperCase()?n.toString("utf8"):iconv_lite_1.default.decode(n,u);const l=cleanSubtitleContent(r);return await(0,exports.getTextLanguage)(l,t)};function cleanSubtitleContent(e){return e.replace(/[\d:,.()[\]+-_@*]/gm,"")}exports.getFileLanguage=getFileLanguage;
package/dist/main.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export * from './buffer';
2
+ export * from './gzip';
3
+ export * from './file';
4
+ export * from './hash';
5
+ export * from './charcode';
6
+ export * from './language-map';
7
+ export * from './language';
package/dist/main.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t);var i=Object.getOwnPropertyDescriptor(r,t);i&&!("get"in i?!r.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,o,i)}:function(e,r,t,o){void 0===o&&(o=t),e[o]=r[t]}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./buffer"),exports),__exportStar(require("./gzip"),exports),__exportStar(require("./file"),exports),__exportStar(require("./hash"),exports),__exportStar(require("./charcode"),exports),__exportStar(require("./language-map"),exports),__exportStar(require("./language"),exports);
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@soga/utils",
3
+ "version": "0.0.1",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "description": "",
8
+ "main": "dist/main.js",
9
+ "types": "dist/main.d.ts",
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "rimraf dist && tsc && ts-node ./scripts/minify",
15
+ "minify": "ts-node ./scripts/minify",
16
+ "demo_backup": "ts-node ./demo/demo.ts",
17
+ "demo": "ts-node ./demo/demo.ts",
18
+ "worker": "tsc && ts-node ./demo/worker.ts",
19
+ "test": "jest",
20
+ "dev": "ts-node ./src/main.ts",
21
+ "lint": "eslint . --ext .ts",
22
+ "prepublishOnly": "npm run build"
23
+ },
24
+ "devDependencies": {
25
+ "@types/fs-extra": "^11.0.4",
26
+ "@types/glob": "^8.1.0",
27
+ "@types/jest": "^29.5.4",
28
+ "@types/langdetect": "^0.2.2",
29
+ "@types/node": "^20.8.7",
30
+ "@typescript-eslint/eslint-plugin": "^6.4.1",
31
+ "@typescript-eslint/parser": "^6.4.1",
32
+ "eslint": "^8.47.0",
33
+ "eslint-config-prettier": "^9.0.0",
34
+ "eslint-plugin-jest": "^27.2.3",
35
+ "eslint-plugin-prettier": "^5.0.0",
36
+ "glob": "^10.3.3",
37
+ "jest": "^29.6.3",
38
+ "prettier": "^3.0.2",
39
+ "terser": "^5.19.2",
40
+ "ts-jest": "^29.1.1",
41
+ "ts-node": "^10.9.1",
42
+ "typescript": "^5.1.6"
43
+ },
44
+ "keywords": [],
45
+ "author": "",
46
+ "license": "ISC",
47
+ "dependencies": {
48
+ "chardet": "^2.0.0",
49
+ "fs-extra": "^11.2.0",
50
+ "iconv-lite": "^0.6.3",
51
+ "langdetect": "^0.2.1"
52
+ }
53
+ }