gpt-tokenizer 1.0.2 → 1.0.4

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.
Files changed (59) hide show
  1. package/cjs/data/bpeRanks.d.ts +50003 -0
  2. package/cjs/data/bpeRanks.js +7 -0
  3. package/cjs/data/bpeRanks.js.map +1 -0
  4. package/cjs/data/encoder.d.ts +50260 -0
  5. package/cjs/data/encoder.js +7 -0
  6. package/cjs/data/encoder.js.map +1 -0
  7. package/cjs/{getBpe.js → getData.js} +6 -2
  8. package/cjs/getData.js.map +1 -0
  9. package/cjs/main.d.ts +28 -1
  10. package/cjs/main.js +208 -14
  11. package/cjs/main.js.map +1 -1
  12. package/cjs/main.test.js +86 -0
  13. package/cjs/main.test.js.map +1 -0
  14. package/cjs/utils.d.ts +22 -6
  15. package/cjs/utils.js +29 -1
  16. package/cjs/utils.js.map +1 -1
  17. package/esm/data/bpeRanks.d.ts +50003 -0
  18. package/esm/data/bpeRanks.js +5 -0
  19. package/esm/data/bpeRanks.js.map +1 -0
  20. package/esm/data/encoder.d.ts +50260 -0
  21. package/esm/data/encoder.js +5 -0
  22. package/esm/data/encoder.js.map +1 -0
  23. package/esm/getData.js +16 -0
  24. package/esm/getData.js.map +1 -0
  25. package/esm/main.d.ts +28 -1
  26. package/esm/main.js +196 -1
  27. package/esm/main.js.map +1 -1
  28. package/esm/{encoder.test.js → main.test.js} +2 -2
  29. package/esm/main.test.js.map +1 -0
  30. package/esm/package.json +1 -0
  31. package/esm/utils.d.ts +22 -6
  32. package/esm/utils.js +29 -1
  33. package/esm/utils.js.map +1 -1
  34. package/package.json +8 -4
  35. package/src/data/bpeRanks.js +4 -0
  36. package/src/data/encoder.js +4 -0
  37. package/src/getData.ts +34 -0
  38. package/src/{encoder.test.ts → main.test.ts} +1 -1
  39. package/src/main.ts +266 -1
  40. package/src/utils.js +61 -0
  41. package/cjs/encoder.d.ts +0 -16
  42. package/cjs/encoder.js +0 -201
  43. package/cjs/encoder.js.map +0 -1
  44. package/cjs/encoder.test.js +0 -86
  45. package/cjs/encoder.test.js.map +0 -1
  46. package/cjs/getBpe.js.map +0 -1
  47. package/esm/encoder.d.ts +0 -16
  48. package/esm/encoder.js +0 -188
  49. package/esm/encoder.js.map +0 -1
  50. package/esm/encoder.test.js.map +0 -1
  51. package/esm/getBpe.js +0 -12
  52. package/esm/getBpe.js.map +0 -1
  53. package/src/encoder.ts +0 -252
  54. package/src/getBpe.ts +0 -23
  55. package/src/utils.ts +0 -36
  56. /package/cjs/{encoder.test.d.ts → getData.d.ts} +0 -0
  57. /package/cjs/{getBpe.d.ts → main.test.d.ts} +0 -0
  58. /package/esm/{encoder.test.d.ts → getData.d.ts} +0 -0
  59. /package/esm/{getBpe.d.ts → main.test.d.ts} +0 -0
@@ -13,5 +13,9 @@ const bpeMerges = lines.slice(1, -1).map((x) => x
13
13
  .filter((e) => e.trim().length > 0)
14
14
  .join(','));
15
15
  const bpeRanks = (0, utils_1.dictZip)(bpeMerges, (0, utils_1.range)(0, bpeMerges.length));
16
- fs_1.default.writeFileSync(path_1.default.join(__dirname, '../data/bpeRanks.json'), JSON.stringify(bpeRanks));
17
- //# sourceMappingURL=getBpe.js.map
16
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
17
+ const encoder = require('../data/encoder.json');
18
+ fs_1.default.mkdirSync(path_1.default.join(__dirname, 'data'), { recursive: true });
19
+ fs_1.default.writeFileSync(path_1.default.join(__dirname, 'data/bpeRanks.js'), `/* eslint-disable */\n// @ts-nocheck\n// prettier-ignore\nexport default ${JSON.stringify(bpeRanks)}`);
20
+ fs_1.default.writeFileSync(path_1.default.join(__dirname, 'data/encoder.js'), `/* eslint-disable */\n// @ts-nocheck\n// prettier-ignore\nexport default ${JSON.stringify(encoder)}`);
21
+ //# sourceMappingURL=getData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getData.js","sourceRoot":"","sources":["../src/getData.ts"],"names":[],"mappings":";;;;;AAAA,4CAAmB;AACnB,gDAAuB;AACvB,mCAAwC;AAExC,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAC7B,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,EACzC,MAAM,CACP,CAAA;AACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAEjC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7C,CAAC;KACE,KAAK,CAAC,OAAO,CAAC;KACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;KAClC,IAAI,CAAC,GAAG,CAAC,CACb,CAAA;AAED,MAAM,QAAQ,GAAG,IAAA,eAAO,EAAC,SAAS,EAAE,IAAA,aAAK,EAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;AAC/D,mEAAmE;AACnE,MAAM,OAAO,GAAW,OAAO,CAAC,sBAAsB,CAAC,CAAA;AAEvD,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AAC/D,YAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EACxC,4EAA4E,IAAI,CAAC,SAAS,CACxF,QAAQ,CACT,EAAE,CACJ,CAAA;AACD,YAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EACvC,4EAA4E,IAAI,CAAC,SAAS,CACxF,OAAO,CACR,EAAE,CACJ,CAAA"}
package/cjs/main.d.ts CHANGED
@@ -1 +1,28 @@
1
- export * from './encoder';
1
+ export declare function bpe(token: string, cache?: Map<string, string>): string;
2
+ export declare function encodeGenerator(text: string, cache?: Map<string, string>): Generator<number[], void, undefined>;
3
+ /**
4
+ * @returns {false | number} false if token limit is exceeded, otherwise the number of tokens
5
+ */
6
+ export declare function isWithinTokenLimit(text: string, tokenLimit: number, cache?: Map<string, string>): false | number;
7
+ export declare function encode(text: string, cache?: Map<string, string>): number[];
8
+ export declare function decodeToken(token: number): string;
9
+ export declare function endsWithIncompleteUtfPairSurrogate(string: string): boolean;
10
+ export declare function decodeGenerator(tokens: Iterable<number>): Generator<string, void, undefined>;
11
+ /**
12
+ * Decode tokens asynchronously and yield the decoded strings, one by one.
13
+ * Will not yield for tokens that include a high surrogate, but wait for the next token.
14
+ * @param {AsyncIterable<number>} tokens
15
+ * @returns {AsyncGenerator<string, void, undefined>}
16
+ */
17
+ export declare function decodeAsyncGenerator(tokens: AsyncIterable<number>): AsyncGenerator<string, void, undefined>;
18
+ export declare function decode(tokens: number[]): string;
19
+ declare const gptEncoder: {
20
+ encode: typeof encode;
21
+ decode: typeof decode;
22
+ encodeGenerator: typeof encodeGenerator;
23
+ decodeGenerator: typeof decodeGenerator;
24
+ decodeAsyncGenerator: typeof decodeAsyncGenerator;
25
+ isWithinTokenLimit: typeof isWithinTokenLimit;
26
+ bpe: typeof bpe;
27
+ };
28
+ export default gptEncoder;
package/cjs/main.js CHANGED
@@ -1,18 +1,212 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
2
+ /* eslint-disable import/extensions */
3
+ /* eslint-disable unicorn/prefer-spread */
4
+ /* eslint-disable unicorn/prefer-code-point */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
7
  };
16
8
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./encoder"), exports);
9
+ exports.decode = exports.decodeAsyncGenerator = exports.decodeGenerator = exports.endsWithIncompleteUtfPairSurrogate = exports.decodeToken = exports.encode = exports.isWithinTokenLimit = exports.encodeGenerator = exports.bpe = void 0;
10
+ const bpeRanks_js_1 = __importDefault(require("./data/bpeRanks.js"));
11
+ const encoder_js_1 = __importDefault(require("./data/encoder.js"));
12
+ const utils_js_1 = require("./utils.js");
13
+ const encoder = encoder_js_1.default;
14
+ const bpeRanks = bpeRanks_js_1.default;
15
+ const decoder = (0, utils_js_1.dictZip)(Object.values(encoder), Object.keys(encoder));
16
+ const textEncoder = new TextEncoder();
17
+ const textDecoder = new TextDecoder();
18
+ // eslint-disable-next-line no-magic-numbers
19
+ const UPPER_BYTE_VALUE = 2 ** 8;
20
+ function createByteToUnicodeMap() {
21
+ const asciiRange = (0, utils_js_1.range)((0, utils_js_1.getCharCode)('!'), (0, utils_js_1.getCharCode)('~') + 1);
22
+ const latin1Range1 = (0, utils_js_1.range)((0, utils_js_1.getCharCode)('¡'), (0, utils_js_1.getCharCode)('¬') + 1);
23
+ const latin1Range2 = (0, utils_js_1.range)((0, utils_js_1.getCharCode)('®'), (0, utils_js_1.getCharCode)('ÿ') + 1);
24
+ const initialCodePoints = [...asciiRange, ...latin1Range1, ...latin1Range2];
25
+ const mappedCodePoints = [...initialCodePoints];
26
+ let newCodePointOffset = 0;
27
+ for (let byteValue = 0; byteValue < UPPER_BYTE_VALUE; byteValue++) {
28
+ if (!initialCodePoints.includes(byteValue)) {
29
+ initialCodePoints.push(byteValue);
30
+ mappedCodePoints.push(UPPER_BYTE_VALUE + newCodePointOffset);
31
+ newCodePointOffset += 1;
32
+ }
33
+ }
34
+ const unicodeChars = mappedCodePoints.map(utils_js_1.getCharFromCode);
35
+ return new Map(initialCodePoints.map((x, i) => [x, unicodeChars[i]]));
36
+ }
37
+ const pat = /'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+/gu;
38
+ const byteEncoder = createByteToUnicodeMap();
39
+ const byteDecoder = new Map([...byteEncoder].map(([k, v]) => [v, k]));
40
+ function bpe(token, cache = new Map()) {
41
+ if (cache.has(token)) {
42
+ return cache.get(token);
43
+ }
44
+ let word = (0, utils_js_1.splitToken)(token);
45
+ let pairs = (0, utils_js_1.getPairs)(word);
46
+ if (pairs.length === 0) {
47
+ return token;
48
+ }
49
+ // eslint-disable-next-line no-constant-condition
50
+ while (true) {
51
+ const minPairs = new Map();
52
+ pairs.forEach((pair) => {
53
+ const rank = bpeRanks[pair.join(',')];
54
+ minPairs.set(
55
+ // eslint-disable-next-line no-magic-numbers
56
+ typeof rank === 'undefined' || Number.isNaN(rank) ? 10e10 : rank, pair);
57
+ });
58
+ const keys = [...minPairs.keys()];
59
+ const bigram = minPairs.get(Math.min(...keys));
60
+ if (!bigram || !(bigram.join(',') in bpeRanks)) {
61
+ break;
62
+ }
63
+ const [first, second] = bigram;
64
+ let newWord = [];
65
+ let i = 0;
66
+ while (i < word.length) {
67
+ const j = word.indexOf(first, i);
68
+ if (j === -1) {
69
+ newWord = newWord.concat(word.slice(i));
70
+ break;
71
+ }
72
+ newWord = newWord.concat(word.slice(i, j));
73
+ i = j;
74
+ if (word[i] === first && i < word.length - 1 && word[i + 1] === second) {
75
+ newWord.push(first + second);
76
+ i += 2;
77
+ }
78
+ else {
79
+ newWord.push(word[i]);
80
+ i += 1;
81
+ }
82
+ }
83
+ word = newWord;
84
+ if (word.length === 1) {
85
+ break;
86
+ }
87
+ else {
88
+ pairs = (0, utils_js_1.getPairs)(word);
89
+ }
90
+ }
91
+ const result = word.join(' ');
92
+ cache.set(token, result);
93
+ return result;
94
+ }
95
+ exports.bpe = bpe;
96
+ function* encodeGenerator(text, cache = new Map()) {
97
+ for (let [token] of text.matchAll(pat)) {
98
+ token = [...textEncoder.encode(token)]
99
+ .map((x) => byteEncoder.get(x) ?? '')
100
+ .join('');
101
+ const newTokens = bpe(token, cache)
102
+ .split(' ')
103
+ .map((x) => encoder[x]);
104
+ yield newTokens;
105
+ }
106
+ }
107
+ exports.encodeGenerator = encodeGenerator;
108
+ /**
109
+ * @returns {false | number} false if token limit is exceeded, otherwise the number of tokens
110
+ */
111
+ function isWithinTokenLimit(text, tokenLimit, cache = new Map()) {
112
+ const tokenGenerator = encodeGenerator(text, cache);
113
+ let count = 0;
114
+ for (const tokens of tokenGenerator) {
115
+ count += tokens.length;
116
+ if (count > tokenLimit) {
117
+ return false;
118
+ }
119
+ }
120
+ return count;
121
+ }
122
+ exports.isWithinTokenLimit = isWithinTokenLimit;
123
+ function encode(text, cache = new Map()) {
124
+ return [...encodeGenerator(text, cache)].flat(1);
125
+ }
126
+ exports.encode = encode;
127
+ function decodeToken(token) {
128
+ const decodedToken = decoder[token];
129
+ if (typeof decodedToken === 'undefined') {
130
+ return '';
131
+ }
132
+ const decodedBytes = (0, utils_js_1.splitToken)(decodedToken).map((x) => byteDecoder.get(x));
133
+ return textDecoder.decode(new Uint8Array(decodedBytes), {
134
+ stream: true,
135
+ });
136
+ }
137
+ exports.decodeToken = decodeToken;
138
+ const HIGH_SURROGATE_START = 55296;
139
+ const HIGH_SURROGATE_END = 56319;
140
+ function endsWithIncompleteUtfPairSurrogate(string) {
141
+ if (string.length === 0)
142
+ return false;
143
+ // Check if the last character is a high surrogate
144
+ const lastCharCode = string.charCodeAt(string.length - 1);
145
+ return (lastCharCode >= HIGH_SURROGATE_START && lastCharCode <= HIGH_SURROGATE_END);
146
+ }
147
+ exports.endsWithIncompleteUtfPairSurrogate = endsWithIncompleteUtfPairSurrogate;
148
+ function* decodeGenerator(tokens) {
149
+ let buffer = '';
150
+ for (const token of tokens) {
151
+ buffer += decodeToken(token);
152
+ if (buffer.length === 0 || endsWithIncompleteUtfPairSurrogate(buffer)) {
153
+ // Keep the high surrogate in the buffer and continue with the next token
154
+ // eslint-disable-next-line no-continue
155
+ continue;
156
+ }
157
+ else {
158
+ yield buffer;
159
+ // reset buffer
160
+ buffer = '';
161
+ }
162
+ }
163
+ // Yield any remaining characters in the buffer
164
+ if (buffer.length > 0) {
165
+ yield buffer;
166
+ }
167
+ }
168
+ exports.decodeGenerator = decodeGenerator;
169
+ /**
170
+ * Decode tokens asynchronously and yield the decoded strings, one by one.
171
+ * Will not yield for tokens that include a high surrogate, but wait for the next token.
172
+ * @param {AsyncIterable<number>} tokens
173
+ * @returns {AsyncGenerator<string, void, undefined>}
174
+ */
175
+ async function* decodeAsyncGenerator(tokens) {
176
+ let buffer = '';
177
+ for await (const token of tokens) {
178
+ buffer += decodeToken(token);
179
+ if (buffer.length === 0 || endsWithIncompleteUtfPairSurrogate(buffer)) {
180
+ // Keep the high surrogate in the buffer and continue with the next token
181
+ // eslint-disable-next-line no-continue
182
+ continue;
183
+ }
184
+ else {
185
+ yield buffer;
186
+ // reset buffer
187
+ buffer = '';
188
+ }
189
+ }
190
+ // Yield any remaining characters in the buffer
191
+ if (buffer.length > 0) {
192
+ yield buffer;
193
+ }
194
+ }
195
+ exports.decodeAsyncGenerator = decodeAsyncGenerator;
196
+ function decode(tokens) {
197
+ return [...decodeGenerator(tokens)].join('');
198
+ }
199
+ exports.decode = decode;
200
+ const gptEncoder = {
201
+ encode,
202
+ decode,
203
+ encodeGenerator,
204
+ decodeGenerator,
205
+ decodeAsyncGenerator,
206
+ isWithinTokenLimit,
207
+ bpe,
208
+ };
209
+ // used by the UMD export
210
+ // eslint-disable-next-line import/no-default-export
211
+ exports.default = gptEncoder;
18
212
  //# sourceMappingURL=main.js.map
package/cjs/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAAyB"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable compat/compat */
4
+ const main_1 = require("./main");
5
+ describe('basic functionality', () => {
6
+ it('empty string', () => {
7
+ const str = '';
8
+ expect((0, main_1.encode)(str)).toEqual([]);
9
+ expect((0, main_1.decode)((0, main_1.encode)(str))).toEqual(str);
10
+ expect((0, main_1.isWithinTokenLimit)(str, 0)).toBe(0);
11
+ expect((0, main_1.isWithinTokenLimit)(str, 3)).toBe(0);
12
+ });
13
+ it('space', () => {
14
+ const str = ' ';
15
+ expect((0, main_1.encode)(str)).toEqual([220]);
16
+ expect((0, main_1.decode)((0, main_1.encode)(str))).toEqual(str);
17
+ expect((0, main_1.isWithinTokenLimit)(str, 3)).toBe(1);
18
+ expect((0, main_1.isWithinTokenLimit)(str, 0)).toBe(false);
19
+ });
20
+ it('tab', () => {
21
+ const str = '\t';
22
+ expect((0, main_1.encode)(str)).toEqual([197]);
23
+ expect((0, main_1.decode)((0, main_1.encode)(str))).toEqual(str);
24
+ });
25
+ it('simple text', () => {
26
+ const str = 'This is some text';
27
+ expect((0, main_1.encode)(str)).toEqual([1212, 318, 617, 2420]);
28
+ expect((0, main_1.decode)((0, main_1.encode)(str))).toEqual(str);
29
+ expect((0, main_1.isWithinTokenLimit)(str, 3)).toBe(false);
30
+ expect((0, main_1.isWithinTokenLimit)(str, 5)).toBe(4);
31
+ });
32
+ it('multi-token word', () => {
33
+ const str = 'indivisible';
34
+ expect((0, main_1.encode)(str)).toEqual([521, 452, 12843]);
35
+ expect((0, main_1.decode)((0, main_1.encode)(str))).toEqual(str);
36
+ expect((0, main_1.isWithinTokenLimit)(str, 3)).toBe(3);
37
+ });
38
+ const helloWorldTokens = [31373, 50169, 233, 995, 12520, 234, 235];
39
+ it('emojis', () => {
40
+ const str = 'hello 👋 world 🌍';
41
+ expect((0, main_1.encode)(str)).toEqual(helloWorldTokens);
42
+ expect((0, main_1.decode)((0, main_1.encode)(str))).toEqual(str);
43
+ expect((0, main_1.isWithinTokenLimit)(str, 4)).toBe(false);
44
+ expect((0, main_1.isWithinTokenLimit)(str, 400)).toBe(7);
45
+ });
46
+ it('decode token-by-token via generator', () => {
47
+ const generator = (0, main_1.decodeGenerator)(helloWorldTokens);
48
+ expect(generator.next().value).toBe('hello');
49
+ expect(generator.next().value).toBe(' ');
50
+ expect(generator.next().value).toBe('👋');
51
+ expect(generator.next().value).toBe(' world');
52
+ expect(generator.next().value).toBe(' ');
53
+ expect(generator.next().value).toBe('🌍');
54
+ });
55
+ async function* getHelloWorldTokensAsync() {
56
+ for (const token of helloWorldTokens) {
57
+ // eslint-disable-next-line no-await-in-loop
58
+ yield await Promise.resolve(token);
59
+ }
60
+ }
61
+ it('decode token-by-token via async generator', async () => {
62
+ const generator = (0, main_1.decodeAsyncGenerator)(getHelloWorldTokensAsync());
63
+ const decoded = ['hello', ' ', '👋', ' world', ' ', '🌍'];
64
+ for await (const value of generator) {
65
+ expect(value).toEqual(decoded.shift());
66
+ }
67
+ });
68
+ it('properties of Object', () => {
69
+ const str = 'toString constructor hasOwnProperty valueOf';
70
+ expect((0, main_1.encode)(str)).toEqual([
71
+ 1462, 10100, 23772, 468, 23858, 21746, 1988, 5189,
72
+ ]);
73
+ expect((0, main_1.decode)((0, main_1.encode)(str))).toEqual(str);
74
+ });
75
+ it('text with commas', () => {
76
+ const str = 'hello, I am a text, and I have commas. a,b,c';
77
+ expect((0, main_1.decode)((0, main_1.encode)(str))).toEqual(str);
78
+ expect((0, main_1.encode)(str)).toStrictEqual([
79
+ 31373, 11, 314, 716, 257, 2420, 11, 290, 314, 423, 725, 292, 13, 257,
80
+ 11, 65, 11, 66,
81
+ ]);
82
+ expect((0, main_1.isWithinTokenLimit)(str, 15)).toBe(false);
83
+ expect((0, main_1.isWithinTokenLimit)(str, 300)).toBe(18);
84
+ });
85
+ });
86
+ //# sourceMappingURL=main.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.test.js","sourceRoot":"","sources":["../src/main.test.ts"],"names":[],"mappings":";;AAAA,kCAAkC;AAClC,iCAMe;AAEf,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACtB,MAAM,GAAG,GAAG,EAAE,CAAA;QACd,MAAM,CAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC/B,MAAM,CAAC,IAAA,aAAM,EAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,IAAA,yBAAkB,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,IAAA,yBAAkB,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACf,MAAM,GAAG,GAAG,GAAG,CAAA;QACf,MAAM,CAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,IAAA,aAAM,EAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,IAAA,yBAAkB,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,IAAA,yBAAkB,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,IAAI,CAAA;QAChB,MAAM,CAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,IAAA,aAAM,EAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,GAAG,GAAG,mBAAmB,CAAA;QAC/B,MAAM,CAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CAAC,CAAA;QACrD,MAAM,CAAC,IAAA,aAAM,EAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,IAAA,yBAAkB,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC9C,MAAM,CAAC,IAAA,yBAAkB,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,GAAG,GAAG,aAAa,CAAA;QACzB,MAAM,CAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAM,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,IAAA,aAAM,EAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,IAAA,yBAAkB,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAG,CAAC,KAAM,EAAE,KAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IAErE,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QAChB,MAAM,GAAG,GAAG,mBAAmB,CAAA;QAC/B,MAAM,CAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC7C,MAAM,CAAC,IAAA,aAAM,EAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,IAAA,yBAAkB,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC9C,MAAM,CAAC,IAAA,yBAAkB,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,SAAS,GAAG,IAAA,sBAAe,EAAC,gBAAgB,CAAC,CAAA;QACnD,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5C,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC7C,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,KAAK,SAAS,CAAC,CAAC,wBAAwB;QACtC,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE;YACpC,4CAA4C;YAC5C,MAAM,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;SACnC;IACH,CAAC;IAED,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,SAAS,GAAG,IAAA,2BAAoB,EAAC,wBAAwB,EAAE,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QACzD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,EAAE;YACnC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;SACvC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,GAAG,GAAG,6CAA6C,CAAA;QAEzD,MAAM,CAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1B,IAAK,EAAE,KAAM,EAAE,KAAM,EAAE,GAAG,EAAE,KAAM,EAAE,KAAM,EAAE,IAAK,EAAE,IAAK;SACzD,CAAC,CAAA;QACF,MAAM,CAAC,IAAA,aAAM,EAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,GAAG,GAAG,8CAA8C,CAAA;QAC1D,MAAM,CAAC,IAAA,aAAM,EAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,CAAC,IAAA,aAAM,EAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC;YAChC,KAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG;YACtE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;SACf,CAAC,CAAA;QACF,MAAM,CAAC,IAAA,yBAAkB,EAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,CAAC,IAAA,yBAAkB,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
package/cjs/utils.d.ts CHANGED
@@ -1,6 +1,22 @@
1
- export declare function dictZip<T extends PropertyKey, U>(x: T[], y: U[]): Record<T, U>;
2
- export declare function range(x: number, y: number): number[];
3
- export declare const getCharCode: (x: string) => number;
4
- export declare const getCharFromCode: (x: number) => string;
5
- export declare function getPairs(word: string[]): [string, string][];
6
- export declare const splitToken: (token: string) => string[];
1
+ /**
2
+ * @template T
3
+ * @template U
4
+ * @param {T[]} x
5
+ * @param {U[]} y
6
+ * @returns {Record<T, U>}
7
+ */
8
+ export function dictZip<T, U>(x: T[], y: U[]): Record<T, U>;
9
+ /**
10
+ * @param {number} x
11
+ * @param {number} y
12
+ * @returns {number[]}
13
+ */
14
+ export function range(x: number, y: number): number[];
15
+ /**
16
+ * @param {string[]} word
17
+ * @returns {[string, string][]}
18
+ */
19
+ export function getPairs(word: string[]): [string, string][];
20
+ export function getCharCode(x: string): number;
21
+ export function getCharFromCode(x: number): string;
22
+ export function splitToken(token: string): string[];
package/cjs/utils.js CHANGED
@@ -3,8 +3,15 @@
3
3
  /* eslint-disable unicorn/prefer-code-point */
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.splitToken = exports.getPairs = exports.getCharFromCode = exports.getCharCode = exports.range = exports.dictZip = void 0;
6
+ /**
7
+ * @template T
8
+ * @template U
9
+ * @param {T[]} x
10
+ * @param {U[]} y
11
+ * @returns {Record<T, U>}
12
+ */
6
13
  function dictZip(x, y) {
7
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
14
+ /** @type {Record<T, U>} */
8
15
  const result = {};
9
16
  x.forEach((k, i) => {
10
17
  result[k] = y[i];
@@ -12,14 +19,31 @@ function dictZip(x, y) {
12
19
  return result;
13
20
  }
14
21
  exports.dictZip = dictZip;
22
+ /**
23
+ * @param {number} x
24
+ * @param {number} y
25
+ * @returns {number[]}
26
+ */
15
27
  function range(x, y) {
16
28
  return Array.from({ length: y - x }, (_, i) => x + i);
17
29
  }
18
30
  exports.range = range;
31
+ /**
32
+ * @param {string} x
33
+ * @returns {number}
34
+ */
19
35
  const getCharCode = (x) => x.charCodeAt(0);
20
36
  exports.getCharCode = getCharCode;
37
+ /**
38
+ * @param {number} x
39
+ * @returns {string}
40
+ */
21
41
  const getCharFromCode = (x) => String.fromCharCode(x);
22
42
  exports.getCharFromCode = getCharFromCode;
43
+ /**
44
+ * @param {string[]} word
45
+ * @returns {[string, string][]}
46
+ */
23
47
  function getPairs(word) {
24
48
  /** @type {[string, string][]} */
25
49
  const pairs = [];
@@ -32,6 +56,10 @@ function getPairs(word) {
32
56
  return pairs;
33
57
  }
34
58
  exports.getPairs = getPairs;
59
+ /**
60
+ * @param {string} token
61
+ * @returns {string[]}
62
+ */
35
63
  const splitToken = (token) => token.split('');
36
64
  exports.splitToken = splitToken;
37
65
  //# sourceMappingURL=utils.js.map
package/cjs/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,8CAA8C;;;AAE9C,SAAgB,OAAO,CACrB,CAAM,EACN,CAAM;IAEN,yEAAyE;IACzE,MAAM,MAAM,GAAG,EAAkB,CAAA;IACjC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACjB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;IACnB,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC;AAVD,0BAUC;AAED,SAAgB,KAAK,CAAC,CAAS,EAAE,CAAS;IACxC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AACvD,CAAC;AAFD,sBAEC;AAEM,MAAM,WAAW,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAApD,QAAA,WAAW,eAAyC;AAE1D,MAAM,eAAe,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;AAA/D,QAAA,eAAe,mBAAgD;AAE5E,SAAgB,QAAQ,CAAC,IAAc;IACrC,iCAAiC;IACjC,MAAM,KAAK,GAAuB,EAAE,CAAA;IACpC,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC,QAAS,EAAE,IAAK,CAAC,CAAC,CAAA;QAC9B,QAAQ,GAAG,IAAI,CAAA;KAChB;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAVD,4BAUC;AAEM,MAAM,UAAU,GAAG,CAAC,KAAa,EAAY,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AAAzD,QAAA,UAAU,cAA+C"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.js"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,8CAA8C;;;AAE9C;;;;;;GAMG;AACH,SAAgB,OAAO,CAAC,CAAC,EAAE,CAAC;IAC1B,2BAA2B;IAC3B,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACjB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC;AAPD,0BAOC;AAED;;;;GAIG;AACH,SAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;IACxB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AACvD,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACI,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAApC,QAAA,WAAW,eAAyB;AAEjD;;;GAGG;AACI,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;AAA/C,QAAA,eAAe,mBAAgC;AAE5D;;;GAGG;AACH,SAAgB,QAAQ,CAAC,IAAI;IAC3B,iCAAiC;IACjC,MAAM,KAAK,GAAG,EAAE,CAAA;IAChB,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;QAC5B,QAAQ,GAAG,IAAI,CAAA;KAChB;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAVD,4BAUC;AAED;;;GAGG;AACI,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AAAvC,QAAA,UAAU,cAA6B"}