{"version":3,"file":"index.umd.production.min.cjs","sources":["../src/index.ts"],"sourcesContent":["\nimport { EnumFullHalfTableType, toFullWidthCharCode, toHalfWidthCharCode } from '@lazy-cjk/fullhalf-char-code';\nimport UString from 'uni-string';\nimport { all } from 'deepmerge';\nimport { tableFullHalf, ITableFullHalfDefaultIncludeKey, tableFullHalfDefaultInclude, ITableFullHalfObject } from '@lazy-cjk/fullhalf-data';\n\nlet typeOnly: IOptions = {\n\tonly: {\n\t\tnumber: true,\n\t},\n};\n\nexport const toFullNumber = factory<string>(toFullWidthCharCode, EnumFullHalfTableType.FULL_WIDTH, typeOnly);\nexport const toHalfNumber = factory<string>(toHalfWidthCharCode, EnumFullHalfTableType.HALF_WIDTH, typeOnly);\n\ntypeOnly = {\n\tonly: {\n\t\teng: true,\n\t},\n};\n\nexport const toFullEnglish = factory<string>(toFullWidthCharCode, EnumFullHalfTableType.FULL_WIDTH, typeOnly);\nexport const toHalfEnglish = factory<string>(toHalfWidthCharCode, EnumFullHalfTableType.HALF_WIDTH, typeOnly);\n\ntypeOnly = {\n\tonly: {\n\t\tdefault: true,\n\t},\n};\n\nexport const toFullWidth = factory<string>(toFullWidthCharCode, EnumFullHalfTableType.FULL_WIDTH, typeOnly);\nexport const toHalfWidth = factory<string>(toHalfWidthCharCode, EnumFullHalfTableType.HALF_WIDTH, typeOnly);\n\nexport function _optionsType(data: IOptionsType)\n{\n\tif (data)\n\t{\n\t\tif (typeof data.exists === 'boolean')\n\t\t{\n\t\t\tfor (let key in tableFullHalf[0])\n\t\t\t{\n\t\t\t\tif (key.indexOf('default') == 0)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (data[key] !== false)\n\t\t\t\t{\n\t\t\t\t\tdata[key] = data.exists;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdelete data.exists;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (typeof data.default === 'boolean')\n\t\t\t{\n\t\t\t\tfor (let key of tableFullHalfDefaultInclude)\n\t\t\t\t{\n\t\t\t\t\tif (data[key] !== false)\n\t\t\t\t\t{\n\t\t\t\t\t\tdata[key] = data.default;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdelete data.default;\n\t\t\t}\n\n\t\t\tif (typeof data.not_default2 === 'boolean')\n\t\t\t{\n\t\t\t\tdata.both = data.space = data.not_default2;\n\t\t\t\tdelete data.not_default2;\n\t\t\t}\n\n\t\t\tif (typeof data.both === 'boolean')\n\t\t\t{\n\t\t\t\tdata.number = data.eng = data.both;\n\t\t\t\tdelete data.both;\n\t\t\t}\n\n\t\t\tif (typeof data.eng === 'boolean')\n\t\t\t{\n\t\t\t\tdata['a-z'] = data['A-Z'] = data.eng;\n\t\t\t\tdelete data.eng;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn data;\n}\n\nexport function _chkType(charCode: number, data: ITableFullHalfObject)\n{\n\tif (data.from && data.to && data.from <= charCode && charCode <= data.to)\n\t{\n\t\treturn true;\n\t}\n\telse if (data.values?.includes(charCode))\n\t{\n\t\treturn true;\n\t}\n}\n\nexport function chkType(charCode: number, key: ITableFullHalfDefaultIncludeKey, type: EnumFullHalfTableType)\n{\n\tlet data: ITableFullHalfObject = tableFullHalf[type][key];\n\n\t//console.log(charCode, data);\n\n\tif (Array.isArray(data.not) && data.not.length)\n\t{\n\t\tfor (let d of data.not)\n\t\t{\n\t\t\tif (_chkType(charCode, d))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (_chkType(charCode, data))\n\t{\n\t\treturn true;\n\t}\n}\n\n//@ts-ignore\nexport function process<T, U = string>(str: unknown, charProcess: ICharProcessor, options: IOptions)\n{\n\tlet ret: number[] = [];\n\n\toptions.skip = _optionsType(options.skip);\n\toptions.only = _optionsType(options.only);\n\n\t//console.log(options);\n\n\tlet _str = Array.isArray(str) ? str : new UString(str);\n\n\tfor (let char of _str)\n\t{\n\t\tlet _skip: boolean;\n\n\t\t// @ts-ignore\n\t\t//let charCode = typeof char == 'number' ? char : char.charCodeAt();\n\t\tlet charCode = typeof char == 'number' ? char : char.codePointAt();\n\n\t\tif (options.only)\n\t\t{\n\t\t\t_skip = true;\n\n\t\t\tfor (let key in options.only)\n\t\t\t{\n\t\t\t\t//console.log(char, charCode, [key], chkType(charCode, key, options.type));\n\n\t\t\t\tif (options.only[key] && chkType(charCode, key as ITableFullHalfDefaultIncludeKey, options.type))\n\t\t\t\t{\n\t\t\t\t\t_skip = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//console.log(char, charCode, _skip);\n\t\t}\n\n\t\tif (!_skip && options.skip)\n\t\t{\n\t\t\tfor (let key in options.skip)\n\t\t\t{\n\t\t\t\tif (options.skip[key] && chkType(charCode, key as ITableFullHalfDefaultIncludeKey, options.type))\n\t\t\t\t{\n\t\t\t\t\t_skip = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (_skip)\n\t\t{\n\t\t\tret.push(charCode);\n\t\t\tcontinue;\n\t\t}\n\n\t\tret.push(charProcess(charCode));\n\t}\n\n\tif (options.returnType)\n\t{\n\t\treturn ret as number[];\n\t}\n\n\t//return String.fromCharCode.apply(String, ret);\n\treturn String.fromCodePoint.apply(String, ret);\n}\n\nexport function factory<T = string>(charProcessor: ICharProcessor,\n\ttype: number | EnumFullHalfTableType,\n\toverwriteOptions?: IOptions\n): IFactoryFn\n{\n\t//const deepmerge = require('deepmerge');\n\n\t// @ts-ignore\n\treturn (str, options?: IOptions) =>\n\t{\n\t\toptions = all([\n\t\t\t{\n\t\t\t\t//skip: {},\n\t\t\t}, options || {}, overwriteOptions || {}, {\n\t\t\t\ttype: type,\n\t\t\t},\n\t\t]);\n\n\t\t//console.log(options);\n\n\t\treturn process<T>(str, charProcessor, options);\n\t};\n}\n\nexport function _filterTable(data: ITableFullHalfObject)\n{\n\tlet _a: number[] = [];\n\n\tif (data.from && data.to)\n\t{\n\t\tfor (let i = data.from; i <= data.to; i++)\n\t\t{\n\t\t\t_a.push(i);\n\t\t}\n\t}\n\n\tif (data.values)\n\t{\n\t\t_a = _a.concat(data.values)\n\t}\n\n\tif (Array.isArray(data.not) && data.not.length)\n\t{\n\t\t_a = _a.filter(function (charCode)\n\t\t{\n\t\t\tfor (let d of data.not)\n\t\t\t{\n\t\t\t\tif (_chkType(charCode, d))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\t}\n\n\treturn _a;\n}\n\nexport interface IOptionsType extends Partial<Record<ITableFullHalfDefaultIncludeKey, boolean>>\n{\n\teng?: boolean,\n\tnumber?: boolean,\n\n\t/**\n\t * eng & number\n\t */\n\tboth?: boolean;\n\n\tspace?: boolean;\n\texists?: boolean;\n\n\tdefault?: boolean;\n\tnot_default?: boolean;\n\tnot_default2?: boolean;\n\n\tslash?: boolean;\n\tbracket?: boolean;\n\n\t[index: string]: boolean;\n}\n\nexport interface IOptionsBase\n{\n\ttype?: number;\n\n\tskip?: IOptionsType;\n\tonly?: IOptionsType;\n\n\tmode?: {\n\t\tonly?: boolean,\n\n\t\t[index: string]: boolean;\n\t};\n}\n\nexport type IOptionsTrue = IOptionsBase & {\n\n\t/**\n\t * 回傳直接回傳陣列而不組合成字串\n\t */\n\treturnType: ILazyTrue;\n\n}\n\nexport type IOptionsFalse = IOptionsBase & {\n\n\t/**\n\t * 回傳直接回傳陣列而不組合成字串\n\t */\n\treturnType?: ILazyFalse;\n\n}\n\nexport interface IOptions extends IOptionsBase\n{\n\n\t/**\n\t * 回傳直接回傳陣列而不組合成字串\n\t */\n\treturnType?: ILazyTrue | ILazyFalse;\n\n}\n\ntype ILazyTrue = true | 1;\ntype ILazyFalse = 0 | false | void | undefined | null;\n\nexport interface IFactoryFn\n{\n\t(str: string | string[], options?: IOptionsFalse): string\n\n\t(str: (string | number)[], options: IOptionsTrue): number[]\n\n\t(str: unknown, options: IOptionsTrue): number[]\n\n\t(str: (string | number)[]): string\n\n\t(str: (string | number)[], options?: IOptionsFalse): string\n\n\t(str: unknown, options: IOptionsFalse): string\n\n\t(str: unknown, options: IOptions): string | number[]\n}\n\nexport type ICharProcessor = (charCode: number) => number\n\nexport default {\n\ttoFullNumber,\n\ttoHalfNumber,\n\n\ttoFullEnglish,\n\ttoHalfEnglish,\n\n\ttoFullWidth,\n\ttoHalfWidth,\n}\n"],"names":["typeOnly","only","number","toFullNumber","factory","toFullWidthCharCode","toHalfNumber","toHalfWidthCharCode","eng","toFullEnglish","toHalfEnglish","default","toFullWidth","toHalfWidth","_optionsType","data","exists","key","tableFullHalf","indexOf","tableFullHalfDefaultInclude","not_default2","both","space","_chkType","charCode","_data$values","from","to","values","includes","chkType","type","Array","isArray","not","length","d","process","str","charProcess","options","ret","skip","_str","UString","char","_skip","codePointAt","push","returnType","String","fromCodePoint","apply","charProcessor","overwriteOptions","all","index","_filterTable","_a","i","concat","filter"],"mappings":";;;;EAMA,IAAIA,IAAqB;IACxBC,MAAM;MACLC,SAAQ;;;EAIGC,MAAAA,IAAeC,QAAgBC,uBAAmB,GAAoCL,IACtFM,IAAeF,QAAgBG,uBAAmB,GAAoCP;EAEnGA,IAAW;IACVC,MAAM;MACLO,MAAK;;;EAIMC,MAAAA,IAAgBL,QAAgBC,uBAAmB,GAAoCL,IACvFU,IAAgBN,QAAgBG,uBAAmB,GAAoCP;EAEpGA,IAAW;IACVC,MAAM;MACLU,UAAS;;;EAIEC,MAAAA,IAAcR,QAAgBC,uBAAmB,GAAoCL,IACrFa,IAAcT,QAAgBG,uBAAmB,GAAoCP;EAE5F,SAAUc,aAAaC;IAE5B,IAAIA,GAEH,IAA2B,oBAAhBA,EAAKC,QAChB;MACC,KAAK,IAAIC,KAAOC,gBAAc,IAEC,KAA1BD,EAAIE,QAAQ,eAKE,MAAdJ,EAAKE,OAERF,EAAKE,KAAOF,EAAKC;aAIZD,EAAKC;AACb,WAEA;MACC,IAA4B,oBAAjBD,EAAKJ,SAChB;QACC,KAAK,IAAIM,KAAOG,gCAEG,MAAdL,EAAKE,OAERF,EAAKE,KAAOF,EAAKJ;eAIZI,EAAKJ;AACb;MAEiC,oBAAtBI,EAAKM,iBAEfN,EAAKO,OAAOP,EAAKQ,QAAQR,EAAKM,qBACvBN,EAAKM;MAGY,oBAAdN,EAAKO,SAEfP,EAAKb,SAASa,EAAKP,MAAMO,EAAKO,aACvBP,EAAKO,OAGW,oBAAbP,EAAKP,QAEfO,EAAK,SAASA,EAAK,SAASA,EAAKP;aAC1BO,EAAKP;AAEd;IAGD,OAAOO;AACR;EAEgB,SAAAS,SAASC,GAAkBV;IAA0B,IAAAW;IAEpE,UAAIX,EAAKY,QAAQZ,EAAKa,MAAMb,EAAKY,QAAQF,KAAYA,KAAYV,EAAKa,SAIlD,UAAfF,IAAIX,EAAKc,gBAAM,MAAAH,MAAXA,EAAaI,SAASL,YAA1B;AAIN;WAEgBM,QAAQN,GAAkBR,GAAsCe;IAE/E,IAAIjB,IAA6BG,EAAaA,cAACc,GAAMf;IAIrD,IAAIgB,MAAMC,QAAQnB,EAAKoB,QAAQpB,EAAKoB,IAAIC,QAEvC,KAAK,IAAIC,KAAKtB,EAAKoB,KAElB,IAAIX,SAASC,GAAUY,IAEtB,QAAO;IAKV,IAAIb,SAASC,GAAUV,IAEtB,QAAO;AAET;WAGgBuB,QAAuBC,GAAcC,GAA6BC;IAEjF,IAAIC,IAAgB;IAEpBD,EAAQE,OAAO7B,aAAa2B,EAAQE,OACpCF,EAAQxC,OAAOa,aAAa2B,EAAQxC;IAIpC,IAAI2C,IAAOX,MAAMC,QAAQK,KAAOA,IAAM,IAAIM,EAAQN;IAElD,KAAK,IAAIO,KAAQF,GACjB;MACC,IAAIG,GAIAtB,IAA0B,mBAARqB,IAAmBA,IAAOA,EAAKE;MAErD,IAAIP,EAAQxC,MACZ;QACC8C,KAAQ;QAER,KAAK,IAAI9B,KAAOwB,EAAQxC,MAIvB,IAAIwC,EAAQxC,KAAKgB,MAAQc,QAAQN,GAAUR,GAAwCwB,EAAQT,OAC3F;UACCe,KAAQ;UACR;AACD;AAIF;MAEA,KAAKA,KAASN,EAAQE,MAErB,KAAK,IAAI1B,KAAOwB,EAAQE,MAEvB,IAAIF,EAAQE,KAAK1B,MAAQc,QAAQN,GAAUR,GAAwCwB,EAAQT,OAC3F;QACCe,KAAQ;QACR;AACD;MAMDL,EAAIO,KAFDF,IAEMtB,IAIDe,EAAYf;AACtB;IAEA,OAAIgB,EAAQS,aAEJR,IAIDS,OAAOC,cAAcC,MAAMF,QAAQT;AAC3C;WAEgBtC,QAAoBkD,GACnCtB,GACAuB;IAMA,OAAO,CAAChB,GAAKE,OAEZA,IAAUe,EAAGA,IAAC,EACb,CAEC,GAAEf,KAAW,CAAE,GAAEc,KAAoB,IAAI;MACzCvB,MAAMA;UAMDM,QAAWC,GAAKe,GAAeb;AAExC;EA6He,IAAAgB,IAAA;IACdtD;IACAG;IAEAG;IACAC;IAEAE;IACAC;;0CAnIK,SAAU6C,aAAa3C;IAE5B,IAAI4C,IAAe;IAEnB,IAAI5C,EAAKY,QAAQZ,EAAKa,IAErB,KAAK,IAAIgC,IAAI7C,EAAKY,MAAMiC,KAAK7C,EAAKa,IAAIgC,KAErCD,EAAGV,KAAKW;IAyBV,OArBI7C,EAAKc,WAER8B,IAAKA,EAAGE,OAAO9C,EAAKc,UAGjBI,MAAMC,QAAQnB,EAAKoB,QAAQpB,EAAKoB,IAAIC,WAEvCuB,IAAKA,EAAGG,QAAO,SAAUrC;MAExB,KAAK,IAAIY,KAAKtB,EAAKoB,KAElB,IAAIX,SAASC,GAAUY,IAEtB,QAAO;MAIT,QAAO;AACR,UAGMsB;AACR;;;;;"}