UNPKG

uni-string

Version:
1 lines 13.8 kB
{"version":3,"file":"index.esm.mjs","sources":["../src/index.ts"],"sourcesContent":["import { runes } from 'runes2';\nimport { classPrototype } from \"es6-class-prototype\";\n\nexport interface IObjectWithSymbolSplit\n{\n\t[Symbol.split](separator?: RegExp | string, limit?: number): string[]\n}\n\nexport type IStringSplitInput = RegExp | string | IObjectWithSymbolSplit;\n\nexport const STRING_PROTOTYPE = Object.getOwnPropertyNames(String.prototype);\n\nexport class UString extends String\n{\n\tprotected _arr: string[] = null;\n\n\tconstructor(str: unknown, ...argv: unknown[])\n\t{\n\t\tsuper(str);\n\n\t\tlet d = Object.getOwnPropertyDescriptor(this, '_arr');\n\t\tObject.defineProperty(this, '_arr', Object.assign(d, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t}));\n\t}\n\n\toverride [Symbol.iterator]()\n\t{\n\t\treturn UString.toArray(this)[Symbol.iterator]();\n\t}\n\n\tstatic isString(str: unknown): str is string | String\n\t{\n\t\treturn (typeof str === 'string' || str instanceof String);\n\t}\n\n\tstatic toArray(str: unknown)\n\t{\n\t\tif (str instanceof UString)\n\t\t{\n\t\t\treturn str.toArray();\n\t\t}\n\n\t\treturn runes(String(str));\n\t}\n\n\ttoArray(): string[]\n\t{\n\t\tif (!this._arr)\n\t\t{\n\t\t\tthis._arr = runes(String(this));\n\t\t}\n\n\t\treturn this._arr;\n\t}\n\n\toverride split(separator?: IStringSplitInput, limit?: number): string[]\n\t{\n\t\tlet ret: string[];\n\t\tlet str = String(this);\n\n\t\tif (separator === '')\n\t\t{\n\t\t\tret = UString.toArray(this);\n\n\t\t\tif (typeof limit !== 'undefined')\n\t\t\t{\n\t\t\t\tret = ret.slice(0, limit);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tret = String.prototype.split.call(str, separator as any, limit)\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\toverride substr(start: number, length?: number): string\n\t{\n\t\treturn UString.toArray(this).slice(start).slice(0, length).join('');\n\t}\n\n\toverride substring(start: number, indexEnd?: number)\n\t{\n\t\tif (Number.isNaN(start) || start < 0)\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\n\t\tif (typeof indexEnd === 'number')\n\t\t{\n\t\t\tif (Number.isNaN(indexEnd) || indexEnd < 0)\n\t\t\t{\n\t\t\t\tindexEnd = 0;\n\t\t\t}\n\n\t\t\tif (start > indexEnd)\n\t\t\t{\n\t\t\t\t[start, indexEnd] = [indexEnd, start];\n\t\t\t}\n\t\t}\n\n\t\treturn this.slice(start, indexEnd);\n\t}\n\n\toverride indexOf(search: string, start: number = 0): number\n\t{\n\t\tlet a = UString.toArray(this);\n\n\t\tstart = Math.max(0, Math.min(a.length, start));\n\t\tsearch = String(search);\n\n\t\tif (search === '')\n\t\t{\n\t\t\treturn start;\n\t\t}\n\n\t\ta = a.slice(start);\n\n\t\tlet s = UString.toArray(search);\n\n\t\tlet i = 0;\n\t\tlet j = 0;\n\n\t\tlet se = s[s.length - 1];\n\n\t\tdo\n\t\t{\n\t\t\ti = a.indexOf(s[0], j);\n\n\t\t\tif (i !== -1)\n\t\t\t{\n\t\t\t\tif (a.slice(i, i + s.length).join('') === search)\n\t\t\t\t{\n\t\t\t\t\treturn start + i;\n\t\t\t\t}\n\n\t\t\t\tj = i;\n\n\t\t\t\tif (s.length > 1)\n\t\t\t\t{\n\t\t\t\t\ti = a.indexOf(se, i + 1);\n\t\t\t\t\tj = i - s.length;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tj++;\n\t\t}\n\t\twhile (i !== -1 && j < a.length);\n\n\t\treturn -1;\n\t}\n\n\toverride includes(search: string, start: number = 0)\n\t{\n\t\treturn UString.toArray(this).slice(start).join('').indexOf(search) !== -1\n\t}\n\n\toverride slice(start: number, indexEnd?: number)\n\t{\n\t\treturn UString.toArray(this).slice(start, indexEnd).join('');\n\t}\n\n\toverride charAt(index: number): string\n\t{\n\t\treturn this.substr(index, 1);\n\t}\n\n\toverride startsWith(search: string, pos?: number): boolean\n\t{\n\t\treturn this.substr(!pos || pos < 0 ? 0 : +pos, search.length)\n\t\t\t.indexOf(search) === 0\n\t\t\t;\n\t}\n\n\toverride endsWith(search: string, length?: number): boolean\n\t{\n\t\tlet a = UString.toArray(this);\n\t\tlet s = UString.toArray(search);\n\n\t\tif (typeof length === 'undefined' || length > a.length)\n\t\t{\n\t\t\tlength = a.length;\n\t\t}\n\n\t\treturn this.substring(length - s.length, length) === search;\n\t}\n\n\toverride padEnd(targetLength: number, padString: string)\n\t{\n\t\ttargetLength = targetLength >> 0; //floor if number or convert non-number to 0;\n\t\tpadString = String((typeof padString !== 'undefined' ? padString : ' '));\n\n\t\tlet str = this.split('');\n\t\tlet pad = this.split.call(padString, '');\n\n\t\tif (str.length > targetLength)\n\t\t{\n\t\t\treturn String(this);\n\t\t}\n\t\telse\n\t\t{\n\t\t\ttargetLength = targetLength - str.length;\n\t\t\tif (targetLength > pad.length)\n\t\t\t{\n\t\t\t\tpadString += padString.repeat(targetLength / pad.length); //append to original to ensure we are longer than needed\n\n\t\t\t\t// @ts-ignore\n\t\t\t\tpad = new UString(padString);\n\t\t\t}\n\t\t\treturn String(this) + pad.slice(0, targetLength);\n\t\t}\n\t}\n\n\toverride padStart(targetLength: number, padString: string)\n\t{\n\t\ttargetLength = targetLength >> 0; //truncate if number or convert non-number to 0;\n\t\tpadString = String((typeof padString !== 'undefined' ? padString : ' '));\n\n\t\tlet str = this.split('');\n\t\tlet pad = this.split.call(padString, '');\n\n\t\tif (str.length > targetLength)\n\t\t{\n\t\t\treturn String(this);\n\t\t}\n\t\telse\n\t\t{\n\t\t\ttargetLength = targetLength - str.length;\n\t\t\tif (targetLength > pad.length)\n\t\t\t{\n\t\t\t\tpadString += padString.repeat(targetLength / pad.length); //append to original to ensure we are longer than needed\n\n\t\t\t\t// @ts-ignore\n\t\t\t\tpad = new UString(padString);\n\t\t\t}\n\n\t\t\treturn pad.slice(0, targetLength) + String(this);\n\t\t}\n\t}\n\n\n\n\t/**\n\t * 𠮷 134071 20bb7\n\t */\n\toverride codePointAt(pos: number): number\n\t{\n\t\treturn this.toArray()[pos].codePointAt(0)\n\t}\n\n\tstatic UString = UString;\n\t/**\n\t * @private\n\t */\n\tstatic default = UString;\n\n\tstatic create(str: unknown, ...argv: unknown[])\n\t{\n\t\treturn new this(str, ...argv);\n\t}\n\n\t/**\n\t * 顯示 目前支援 unicode 的 method\n\t */\n\tstatic get support(): {\n\n\t\tsplit?: boolean,\n\t\tsubstr?: boolean,\n\t\tsubstring?: boolean,\n\t\tindexOf?: boolean,\n\t\tincludes?: boolean,\n\t\tslice?: boolean,\n\t\tcharAt?: boolean,\n\t\tstartsWith?: boolean,\n\t\tendsWith?: boolean,\n\t\tpadEnd?: boolean,\n\t\tpadStart?: boolean,\n\n\t\tcodePointAt?: boolean,\n\n\t\t[key: string]: boolean,\n\t}\n\t{\n\t\tlet prototype = classPrototype(this);\n\n\t\treturn Object.keys(prototype).reduce(function (a, b)\n\t\t{\n\t\t\tif (STRING_PROTOTYPE.includes(b))\n\t\t\t{\n\t\t\t\t// @ts-ignore\n\t\t\t\ta[b] = true;\n\t\t\t}\n\n\t\t\treturn a;\n\t\t}, {} as Record<keyof String, true | undefined>)\n\t}\n\n\tstatic indexOf(str: unknown, search: string, start: number = 0)\n\t{\n\t\treturn this.create(str).indexOf(search, start);\n\t}\n\n\tstatic includes(str: unknown, search: string, start: number = 0)\n\t{\n\t\treturn this.create(str).includes(search, start);\n\t}\n\n\t/**\n\t * splits a String object into an array of strings by separating the string into substrings, using a specified separator string to determine where to make each split.\n\t */\n\tstatic split(str: unknown, separator?: any, limit?: number)\n\t{\n\t\treturn this.create(str).split(separator, limit);\n\t}\n\n\tstatic substr(str: unknown, start: number, length?: number)\n\t{\n\t\treturn this.create(str).substr(start, length);\n\t}\n\n\tstatic substring(str: unknown, start: number, indexEnd?: number)\n\t{\n\t\treturn this.create(str).substring(start, indexEnd);\n\t}\n\n\tstatic slice(str: unknown, start: number, indexEnd?: number)\n\t{\n\t\treturn this.create(str).slice(start, indexEnd);\n\t}\n\n\tstatic charAt(str: unknown, index: number)\n\t{\n\t\treturn this.create(str).charAt(index);\n\t}\n\n\tstatic padEnd(str: unknown, targetLength: number, padString: string)\n\t{\n\t\treturn this.create(str).padEnd(targetLength, padString);\n\t}\n\n\tstatic padStart(str: unknown, targetLength: number, padString: string)\n\t{\n\t\treturn this.create(str).padStart(targetLength, padString);\n\t}\n\n\tstatic startsWith(str: unknown, search: string, pos?: number)\n\t{\n\t\treturn this.create(str).startsWith(search, pos);\n\t}\n\n\tstatic endsWith(str: unknown, search: string, length?: number)\n\t{\n\t\treturn this.create(str).endsWith(search, length);\n\t}\n\n\tget charLength()\n\t{\n\t\treturn UString.toArray(this).length;\n\t}\n\n\tsize()\n\t{\n\t\treturn UString.toArray(this).length;\n\t}\n\n\tstatic size(str: unknown)\n\t{\n\t\treturn this.create(str).size();\n\t}\n\n\t/**\n\t * 𠮷 134071 20bb7\n\t */\n\tstatic codePointAt(str: unknown, pos: number): number\n\t{\n\t\treturn this.create(str).codePointAt(pos)\n\t}\n\n}\n\nexport default UString;\n\n// @ts-ignore\nif (process.env.TSDX_FORMAT !== 'esm')\n{\n\tObject.defineProperty(UString, 'UString', { value: UString });\n\tObject.defineProperty(UString, 'default', { value: UString });\n\tObject.defineProperty(UString, \"__esModule\", { value: true });\n}\n"],"names":["STRING_PROTOTYPE","Object","getOwnPropertyNames","String","prototype","UString","_arr","constructor","str","argv","super","d","getOwnPropertyDescriptor","this","defineProperty","assign","configurable","enumerable","Symbol","iterator","toArray","isString","runes","split","separator","limit","ret","slice","call","substr","start","length","join","substring","indexEnd","Number","isNaN","indexOf","search","a","Math","max","min","s","i","j","se","includes","charAt","index","startsWith","pos","endsWith","padEnd","targetLength","padString","pad","repeat","padStart","codePointAt","static","create","support","classPrototype","keys","reduce","b","charLength","size"],"mappings":"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"}