@keymanapp/kmc-analyze 18.0.41-alpha → 18.0.46-alpha

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.
@@ -1,284 +1,281 @@
1
-
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f9a7a0ad-0a19-5873-822c-07a700ee3287")}catch(e){}}();
3
- import { KeymanFileTypes, KvksFileReader, TouchLayoutFileReader } from "@keymanapp/common-types";
4
- import { CompilerMessages } from '@keymanapp/kmc-kmn';
5
- import { escapeMarkdownChar } from '@keymanapp/developer-utils';
6
- import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js";
7
- import { AnalyzerMessages } from "../messages.js";
8
- const defaultOptions = {
9
- puaBase: 0xF100,
10
- stripDottedCircle: false,
11
- includeCounts: false,
12
- };
13
- /**
14
- * @public
15
- * Analyze the characters used in On Screen Keyboard files (.kvks,
16
- * .keyman-touch-layout) for use with `&displayMap`.
17
- */
18
- export class AnalyzeOskCharacterUse {
19
- callbacks;
20
- _strings = {};
21
- options;
22
- constructor(callbacks, options) {
23
- this.callbacks = callbacks;
24
- this.options = { ...defaultOptions, ...options };
25
- }
26
- /**
27
- * Clears analysis data collected from previous calls to
28
- * {@link AnalyzeOskCharacterUse.analyze}
29
- */
30
- clear() {
31
- this._strings = {};
32
- }
33
- //
34
- // Analyze a single file
35
- //
36
- /**
37
- * Analyzes a single source file for Unicode character usage. Can parse .kmn,
38
- * .kvks, .keyman-touch-layout file formats. Can be called multiple times to
39
- * collect results from more than one file. Use
40
- * {@link AnalyzeOskCharacterUse.getStrings} to retrieve results.
41
- *
42
- * Note: `analyze()` collects key cap data, so calling this for a .kmn file
43
- * will retrieve the key caps from the .kvks and .keyman-touch-layout files
44
- * that it references, rather than key cap data from the .kmn file itself.
45
- *
46
- * @param file - relative or absolute path to a Keyman source file
47
- * @returns true if the file is successfully loaded and parsed
48
- */
49
- async analyze(file) {
50
- switch (KeymanFileTypes.sourceTypeFromFilename(file)) {
51
- case ".kvks" /* KeymanFileTypes.Source.VisualKeyboard */: {
52
- let strings = this.scanVisualKeyboard(file);
53
- if (!strings) {
54
- return false;
55
- }
56
- this.addStrings(strings, file);
57
- break;
58
- }
59
- case ".keyman-touch-layout" /* KeymanFileTypes.Source.TouchLayout */: {
60
- let strings = this.scanTouchLayout(file);
61
- if (!strings) {
62
- return false;
63
- }
64
- this.addStrings(strings, file);
65
- break;
66
- }
67
- case ".kpj" /* KeymanFileTypes.Source.Project */:
68
- throw new Error('Passing a project to analyze is not permitted');
69
- break;
70
- case ".kmn" /* KeymanFileTypes.Source.KeymanKeyboard */:
71
- // The cleanest way to do this is to compile the .kmn to find the .kvks
72
- // and .keyman-touch-layout from the &VISUALKEYBOARD and &LAYOUTFILE
73
- // system stores
74
- if (!await this.analyzeKmnKeyboard(file)) {
75
- return false;
76
- }
77
- break;
78
- case ".xml" /* KeymanFileTypes.Source.LdmlKeyboard */:
79
- // TODO: await this.analyzeLdmlKeyboard(file);
80
- // note, will need to skip .xml files that are not ldml keyboards
81
- break;
82
- default:
83
- // Ignore any other file types; this way we can analyze project files/folders
84
- // easily also
85
- }
86
- return true;
87
- }
88
- async analyzeKmnKeyboard(filename) {
89
- this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'keyboard source', name: filename }));
90
- let osk = await getOskFromKmnFile(this.callbacks, filename);
91
- if (osk.kvksFilename) {
92
- let strings = this.scanVisualKeyboard(osk.kvksFilename);
93
- if (!strings) {
94
- return false;
95
- }
96
- this.addStrings(strings, osk.kvksFilename);
97
- }
98
- if (osk.touchLayoutFilename) {
99
- let strings = this.scanTouchLayout(osk.touchLayoutFilename);
100
- if (!strings) {
101
- return false;
102
- }
103
- this.addStrings(strings, osk.touchLayoutFilename);
104
- }
105
- return true;
106
- }
107
- addStrings(strings, filename) {
108
- // Reduce all references to get usage count per file
109
- let reducedStrings = [...new Set(strings)].map(e => ({
110
- str: e,
111
- usages: [{ filename: this.callbacks.path.basename(filename), count: strings.filter(n => n === e).length }]
112
- }));
113
- // Merge result with existing found strings
114
- for (let e of reducedStrings) {
115
- this._strings[e.str] = [].concat(this._strings[e.str] ?? [], ...e.usages);
116
- }
117
- }
118
- cleanString(s) {
119
- if (this.options.stripDottedCircle) {
120
- s = s.replace(/\u25cc/g, '');
121
- }
122
- return s.trim();
123
- }
124
- //
125
- // On Screen Keyboard file scanning
126
- //
127
- scanVisualKeyboard(filename) {
128
- this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'visual keyboard', name: filename }));
129
- let strings = [];
130
- const reader = new KvksFileReader();
131
- let source;
132
- try {
133
- source = reader.read(this.callbacks.loadFile(filename));
134
- }
135
- catch (e) {
136
- this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e }));
137
- return null;
138
- }
139
- let invalidKeys = [];
140
- const vk = reader.transform(source, invalidKeys);
141
- if (!vk) {
142
- this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e: null }));
143
- return null;
144
- }
145
- for (let key of vk.keys) {
146
- if (key.text) {
147
- strings.push(this.cleanString(key.text));
148
- }
149
- }
150
- return strings;
151
- }
152
- scanTouchLayout(filename) {
153
- this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'touch layout', name: filename }));
154
- let strings = [];
155
- const reader = new TouchLayoutFileReader();
156
- const source = reader.read(this.callbacks.loadFile(filename));
157
- const scanKey = (key) => {
158
- if (!key.text) {
159
- return;
160
- }
161
- if (key.text.length > 2 && key.text[0] == '*' && key.text[key.text.length - 1] == '*') {
162
- // Don't add '*special*' key captions
163
- return;
164
- }
165
- strings.push(this.cleanString(key.text));
166
- };
167
- const scanPlatform = (platform) => {
168
- if (!platform) {
169
- return;
170
- }
171
- for (let layer of platform.layer) {
172
- for (let row of layer.row) {
173
- for (let key of row.key) {
174
- scanKey(key);
175
- let f;
176
- for (f in key.flick ?? {}) {
177
- scanKey(key.flick[f]);
178
- }
179
- for (let sk of key.sk ?? []) {
180
- scanKey(sk);
181
- }
182
- for (let mt of key.multitap ?? []) {
183
- scanKey(mt);
184
- }
185
- }
186
- }
187
- }
188
- };
189
- scanPlatform(source.desktop);
190
- scanPlatform(source.phone);
191
- scanPlatform(source.tablet);
192
- return strings;
193
- }
194
- //
195
- // Results reporting
196
- //
197
- prepareResults(strings) {
198
- let result = [];
199
- let pua = this.options.puaBase;
200
- for (let str of Object.keys(strings)) {
201
- result.push({
202
- pua: pua.toString(16).toUpperCase(),
203
- str,
204
- unicode: AnalyzeOskCharacterUse.stringToUnicodeSequence(str, false),
205
- usages: this.options.includeCounts ? strings[str] : strings[str].map(item => item.filename)
206
- });
207
- pua++;
208
- }
209
- return result;
210
- }
211
- /**
212
- * Returns the collected results from earlier calls to
213
- * {@link AnalyzeOskCharacterUse.analyze}. This generates a mapping from a key
214
- * cap (one or more characters) to a PUA code, for use with `&displayMap`.
215
- *
216
- * Three output formats are supported:
217
- *
218
- * - .txt: tab-separated string format, with three columns: PUA, Key Cap, and
219
- * plain string. The PUA and Key Cap columns are formatted as Unicode Scalar
220
- * Values, e.g. U+0061, and the plain string is the original key cap string.
221
- *
222
- * - .md: formatted for documentation purposes. Generates a Markdown table
223
- * (GFM) with PUA, Key Cap, and plain string. The PUA and Key Cap columns
224
- * are formatted as Unicode Scalar Values, e.g. U+0061, and the plain string
225
- * is the original key cap string.
226
- *
227
- * - .json: returns the final aggregated data as an array of strings, which
228
- * can be joined to form a JSON blob of an object with a single member,
229
- * `map`, which is an array of {@link Osk.StringResult} objects.
230
- *
231
- * @param format - file format to return - can be '.txt', '.md', or '.json'
232
- * @returns an array of strings, formatted according to the `format`
233
- * parameter.
234
- */
235
- getStrings(format) {
236
- const final = this.prepareResults(this._strings);
237
- switch (format) {
238
- case '.md':
239
- return AnalyzeOskCharacterUse.getStringsAsMarkdown(final);
240
- case '.json':
241
- return AnalyzeOskCharacterUse.getStringsAsJson(final);
242
- }
243
- return AnalyzeOskCharacterUse.getStringsAsText(final);
244
- }
245
- // Following functions are static so that we can keep them pure
246
- // and potentially refactor into separate reporting class later
247
- static getStringsAsText(strings) {
248
- // Text result only returns PUA, unicode sequence, and plain string
249
- let lines = [];
250
- for (let s of strings) {
251
- const ux = this.stringToUnicodeSequence(s.str);
252
- lines.push('U+' + s.pua + '\t' + ux + '\t' + s.str);
253
- }
254
- return lines;
255
- }
256
- static getStringsAsMarkdown(strings) {
257
- // Markdown result only returns PUA, unicode sequence, and plain string
258
- let lines = [];
259
- lines.push('PUA | Code Points | Key Caps');
260
- lines.push('-------|-------------|---------');
261
- for (let s of strings) {
262
- const ux = this.stringToUnicodeSequence(s.str);
263
- lines.push('U+' + s.pua + ' | ' + ux + ' | ' + escapeMarkdownChar(s.str, true));
264
- }
265
- return lines;
266
- }
267
- static getStringsAsJson(strings) {
268
- // For future expansion, we wrap the array in a 'map' property
269
- let map = { "map": strings };
270
- return JSON.stringify(map, null, 2).split('\n');
271
- }
272
- static stringToUnicodeSequence(s, addUPlusPrefix = true) {
273
- let result = [];
274
- for (let ch of s) {
275
- let c = ch.codePointAt(0).toString(16).toUpperCase();
276
- if (c.length < 4)
277
- c = '0'.repeat(4 - c.length) + c;
278
- result.push((addUPlusPrefix ? 'U+' : '') + c);
279
- }
280
- return result.join(' ');
281
- }
282
- }
283
- //# sourceMappingURL=index.js.map
284
- //# debugId=f9a7a0ad-0a19-5873-822c-07a700ee3287
1
+ import { KeymanFileTypes, KvksFileReader, TouchLayoutFileReader } from "@keymanapp/common-types";
2
+ import { CompilerMessages } from '@keymanapp/kmc-kmn';
3
+ import { escapeMarkdownChar } from '@keymanapp/developer-utils';
4
+ import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js";
5
+ import { AnalyzerMessages } from "../messages.js";
6
+ const defaultOptions = {
7
+ puaBase: 0xF100,
8
+ stripDottedCircle: false,
9
+ includeCounts: false,
10
+ };
11
+ /**
12
+ * @public
13
+ * Analyze the characters used in On Screen Keyboard files (.kvks,
14
+ * .keyman-touch-layout) for use with `&displayMap`.
15
+ */
16
+ export class AnalyzeOskCharacterUse {
17
+ callbacks;
18
+ _strings = {};
19
+ options;
20
+ constructor(callbacks, options) {
21
+ this.callbacks = callbacks;
22
+ this.options = { ...defaultOptions, ...options };
23
+ }
24
+ /**
25
+ * Clears analysis data collected from previous calls to
26
+ * {@link AnalyzeOskCharacterUse.analyze}
27
+ */
28
+ clear() {
29
+ this._strings = {};
30
+ }
31
+ //
32
+ // Analyze a single file
33
+ //
34
+ /**
35
+ * Analyzes a single source file for Unicode character usage. Can parse .kmn,
36
+ * .kvks, .keyman-touch-layout file formats. Can be called multiple times to
37
+ * collect results from more than one file. Use
38
+ * {@link AnalyzeOskCharacterUse.getStrings} to retrieve results.
39
+ *
40
+ * Note: `analyze()` collects key cap data, so calling this for a .kmn file
41
+ * will retrieve the key caps from the .kvks and .keyman-touch-layout files
42
+ * that it references, rather than key cap data from the .kmn file itself.
43
+ *
44
+ * @param file - relative or absolute path to a Keyman source file
45
+ * @returns true if the file is successfully loaded and parsed
46
+ */
47
+ async analyze(file) {
48
+ switch (KeymanFileTypes.sourceTypeFromFilename(file)) {
49
+ case ".kvks" /* KeymanFileTypes.Source.VisualKeyboard */: {
50
+ let strings = this.scanVisualKeyboard(file);
51
+ if (!strings) {
52
+ return false;
53
+ }
54
+ this.addStrings(strings, file);
55
+ break;
56
+ }
57
+ case ".keyman-touch-layout" /* KeymanFileTypes.Source.TouchLayout */: {
58
+ let strings = this.scanTouchLayout(file);
59
+ if (!strings) {
60
+ return false;
61
+ }
62
+ this.addStrings(strings, file);
63
+ break;
64
+ }
65
+ case ".kpj" /* KeymanFileTypes.Source.Project */:
66
+ throw new Error('Passing a project to analyze is not permitted');
67
+ break;
68
+ case ".kmn" /* KeymanFileTypes.Source.KeymanKeyboard */:
69
+ // The cleanest way to do this is to compile the .kmn to find the .kvks
70
+ // and .keyman-touch-layout from the &VISUALKEYBOARD and &LAYOUTFILE
71
+ // system stores
72
+ if (!await this.analyzeKmnKeyboard(file)) {
73
+ return false;
74
+ }
75
+ break;
76
+ case ".xml" /* KeymanFileTypes.Source.LdmlKeyboard */:
77
+ // TODO: await this.analyzeLdmlKeyboard(file);
78
+ // note, will need to skip .xml files that are not ldml keyboards
79
+ break;
80
+ default:
81
+ // Ignore any other file types; this way we can analyze project files/folders
82
+ // easily also
83
+ }
84
+ return true;
85
+ }
86
+ async analyzeKmnKeyboard(filename) {
87
+ this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'keyboard source', name: filename }));
88
+ let osk = await getOskFromKmnFile(this.callbacks, filename);
89
+ if (osk.kvksFilename) {
90
+ let strings = this.scanVisualKeyboard(osk.kvksFilename);
91
+ if (!strings) {
92
+ return false;
93
+ }
94
+ this.addStrings(strings, osk.kvksFilename);
95
+ }
96
+ if (osk.touchLayoutFilename) {
97
+ let strings = this.scanTouchLayout(osk.touchLayoutFilename);
98
+ if (!strings) {
99
+ return false;
100
+ }
101
+ this.addStrings(strings, osk.touchLayoutFilename);
102
+ }
103
+ return true;
104
+ }
105
+ addStrings(strings, filename) {
106
+ // Reduce all references to get usage count per file
107
+ let reducedStrings = [...new Set(strings)].map(e => ({
108
+ str: e,
109
+ usages: [{ filename: this.callbacks.path.basename(filename), count: strings.filter(n => n === e).length }]
110
+ }));
111
+ // Merge result with existing found strings
112
+ for (let e of reducedStrings) {
113
+ this._strings[e.str] = [].concat(this._strings[e.str] ?? [], ...e.usages);
114
+ }
115
+ }
116
+ cleanString(s) {
117
+ if (this.options.stripDottedCircle) {
118
+ s = s.replace(/\u25cc/g, '');
119
+ }
120
+ return s.trim();
121
+ }
122
+ //
123
+ // On Screen Keyboard file scanning
124
+ //
125
+ scanVisualKeyboard(filename) {
126
+ this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'visual keyboard', name: filename }));
127
+ let strings = [];
128
+ const reader = new KvksFileReader();
129
+ let source;
130
+ try {
131
+ source = reader.read(this.callbacks.loadFile(filename));
132
+ }
133
+ catch (e) {
134
+ this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e }));
135
+ return null;
136
+ }
137
+ let invalidKeys = [];
138
+ const vk = reader.transform(source, invalidKeys);
139
+ if (!vk) {
140
+ this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e: null }));
141
+ return null;
142
+ }
143
+ for (let key of vk.keys) {
144
+ if (key.text) {
145
+ strings.push(this.cleanString(key.text));
146
+ }
147
+ }
148
+ return strings;
149
+ }
150
+ scanTouchLayout(filename) {
151
+ this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'touch layout', name: filename }));
152
+ let strings = [];
153
+ const reader = new TouchLayoutFileReader();
154
+ const source = reader.read(this.callbacks.loadFile(filename));
155
+ const scanKey = (key) => {
156
+ if (!key.text) {
157
+ return;
158
+ }
159
+ if (key.text.length > 2 && key.text[0] == '*' && key.text[key.text.length - 1] == '*') {
160
+ // Don't add '*special*' key captions
161
+ return;
162
+ }
163
+ strings.push(this.cleanString(key.text));
164
+ };
165
+ const scanPlatform = (platform) => {
166
+ if (!platform) {
167
+ return;
168
+ }
169
+ for (let layer of platform.layer) {
170
+ for (let row of layer.row) {
171
+ for (let key of row.key) {
172
+ scanKey(key);
173
+ let f;
174
+ for (f in key.flick ?? {}) {
175
+ scanKey(key.flick[f]);
176
+ }
177
+ for (let sk of key.sk ?? []) {
178
+ scanKey(sk);
179
+ }
180
+ for (let mt of key.multitap ?? []) {
181
+ scanKey(mt);
182
+ }
183
+ }
184
+ }
185
+ }
186
+ };
187
+ scanPlatform(source.desktop);
188
+ scanPlatform(source.phone);
189
+ scanPlatform(source.tablet);
190
+ return strings;
191
+ }
192
+ //
193
+ // Results reporting
194
+ //
195
+ prepareResults(strings) {
196
+ let result = [];
197
+ let pua = this.options.puaBase;
198
+ for (let str of Object.keys(strings)) {
199
+ result.push({
200
+ pua: pua.toString(16).toUpperCase(),
201
+ str,
202
+ unicode: AnalyzeOskCharacterUse.stringToUnicodeSequence(str, false),
203
+ usages: this.options.includeCounts ? strings[str] : strings[str].map(item => item.filename)
204
+ });
205
+ pua++;
206
+ }
207
+ return result;
208
+ }
209
+ /**
210
+ * Returns the collected results from earlier calls to
211
+ * {@link AnalyzeOskCharacterUse.analyze}. This generates a mapping from a key
212
+ * cap (one or more characters) to a PUA code, for use with `&displayMap`.
213
+ *
214
+ * Three output formats are supported:
215
+ *
216
+ * - .txt: tab-separated string format, with three columns: PUA, Key Cap, and
217
+ * plain string. The PUA and Key Cap columns are formatted as Unicode Scalar
218
+ * Values, e.g. U+0061, and the plain string is the original key cap string.
219
+ *
220
+ * - .md: formatted for documentation purposes. Generates a Markdown table
221
+ * (GFM) with PUA, Key Cap, and plain string. The PUA and Key Cap columns
222
+ * are formatted as Unicode Scalar Values, e.g. U+0061, and the plain string
223
+ * is the original key cap string.
224
+ *
225
+ * - .json: returns the final aggregated data as an array of strings, which
226
+ * can be joined to form a JSON blob of an object with a single member,
227
+ * `map`, which is an array of {@link Osk.StringResult} objects.
228
+ *
229
+ * @param format - file format to return - can be '.txt', '.md', or '.json'
230
+ * @returns an array of strings, formatted according to the `format`
231
+ * parameter.
232
+ */
233
+ getStrings(format) {
234
+ const final = this.prepareResults(this._strings);
235
+ switch (format) {
236
+ case '.md':
237
+ return AnalyzeOskCharacterUse.getStringsAsMarkdown(final);
238
+ case '.json':
239
+ return AnalyzeOskCharacterUse.getStringsAsJson(final);
240
+ }
241
+ return AnalyzeOskCharacterUse.getStringsAsText(final);
242
+ }
243
+ // Following functions are static so that we can keep them pure
244
+ // and potentially refactor into separate reporting class later
245
+ static getStringsAsText(strings) {
246
+ // Text result only returns PUA, unicode sequence, and plain string
247
+ let lines = [];
248
+ for (let s of strings) {
249
+ const ux = this.stringToUnicodeSequence(s.str);
250
+ lines.push('U+' + s.pua + '\t' + ux + '\t' + s.str);
251
+ }
252
+ return lines;
253
+ }
254
+ static getStringsAsMarkdown(strings) {
255
+ // Markdown result only returns PUA, unicode sequence, and plain string
256
+ let lines = [];
257
+ lines.push('PUA | Code Points | Key Caps');
258
+ lines.push('-------|-------------|---------');
259
+ for (let s of strings) {
260
+ const ux = this.stringToUnicodeSequence(s.str);
261
+ lines.push('U+' + s.pua + ' | ' + ux + ' | ' + escapeMarkdownChar(s.str, true));
262
+ }
263
+ return lines;
264
+ }
265
+ static getStringsAsJson(strings) {
266
+ // For future expansion, we wrap the array in a 'map' property
267
+ let map = { "map": strings };
268
+ return JSON.stringify(map, null, 2).split('\n');
269
+ }
270
+ static stringToUnicodeSequence(s, addUPlusPrefix = true) {
271
+ let result = [];
272
+ for (let ch of s) {
273
+ let c = ch.codePointAt(0).toString(16).toUpperCase();
274
+ if (c.length < 4)
275
+ c = '0'.repeat(4 - c.length) + c;
276
+ result.push((addUPlusPrefix ? 'U+' : '') + c);
277
+ }
278
+ return result.join(' ');
279
+ }
280
+ }
281
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/osk-character-use/index.ts"],"sourceRoot":"","names":[],"mappings":";;AAAA,OAAO,EAAqB,eAAe,EAAY,cAAc,EAAe,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3I,OAAO,EAAE,gBAAgB,EAAO,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AA0BlD,MAAM,cAAc,GAAkC;IACpD,OAAO,EAAE,MAAM;IACf,iBAAiB,EAAE,KAAK;IACxB,aAAa,EAAE,KAAK;CACrB,CAAA;AAED;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IAIb;IAHZ,QAAQ,GAAsB,EAAE,CAAC;IACjC,OAAO,CAAgC;IAE/C,YAAoB,SAA4B,EAAE,OAAuC;QAArE,cAAS,GAAT,SAAS,CAAmB;QAC9C,IAAI,CAAC,OAAO,GAAG,EAAC,GAAG,cAAc,EAAE,GAAG,OAAO,EAAC,CAAC;IACjD,CAAC;IAED;;;OAGG;IACI,KAAK;QACV,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,EAAE;IACF,wBAAwB;IACxB,EAAE;IAEF;;;;;;;;;;;;OAYG;IACI,KAAK,CAAC,OAAO,CAAC,IAAY;QAC/B,QAAO,eAAe,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;YACnD,wDAA0C,CAAC,CAAC;gBAC1C,IAAI,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAG,CAAC,OAAO,EAAE;oBACX,OAAO,KAAK,CAAC;iBACd;gBACD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC/B,MAAM;aACP;YACD,oEAAuC,CAAC,CAAC;gBACvC,IAAI,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAG,CAAC,OAAO,EAAE;oBACX,OAAO,KAAK,CAAC;iBACd;gBACD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC/B,MAAM;aACP;YACD;gBACE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBACjE,MAAM;YACR;gBACE,uEAAuE;gBACvE,oEAAoE;gBACpE,gBAAgB;gBAChB,IAAG,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;oBACvC,OAAO,KAAK,CAAC;iBACd;gBACD,MAAM;YACR;gBACE,8CAA8C;gBAC9C,iEAAiE;gBACjE,MAAM;YACR,QAAQ;YACN,6EAA6E;YAC7E,cAAc;SACjB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,QAAgB;QAC/C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAC,IAAI,EAAC,iBAAiB,EAAE,IAAI,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;QAE1G,IAAI,GAAG,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE5D,IAAG,GAAG,CAAC,YAAY,EAAE;YACnB,IAAI,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACxD,IAAG,CAAC,OAAO,EAAE;gBACX,OAAO,KAAK,CAAC;aACd;YACD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;SAC5C;QACD,IAAG,GAAG,CAAC,mBAAmB,EAAE;YAC1B,IAAI,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YAC5D,IAAG,CAAC,OAAO,EAAE;gBACX,OAAO,KAAK,CAAC;aACd;YACD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;SACnD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,OAAiB,EAAE,QAAgB;QACpD,oDAAoD;QACpD,IAAI,cAAc,GAAoB,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA,CAAC;YACnE,GAAG,EAAC,CAAC;YACL,MAAM,EAAE,CAAC,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACxG,CAAC,CAAC,CAAC;QAEJ,2CAA2C;QAC3C,KAAI,IAAI,CAAC,IAAI,cAAc,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;SAC3E;IACH,CAAC;IAEO,WAAW,CAAC,CAAS;QAC3B,IAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACjC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;SAC9B;QACD,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAClB,CAAC;IAED,EAAE;IACF,mCAAmC;IACnC,EAAE;IAEM,kBAAkB,CAAC,QAAgB;QACzC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAC,IAAI,EAAC,iBAAiB,EAAE,IAAI,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;QAC1G,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACpC,IAAI,MAAwB,CAAC;QAC7B,IAAI;YACF,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;SACzD;QAAC,OAAM,CAAC,EAAE;YACT,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,EAAC,QAAQ,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;YACpF,OAAO,IAAI,CAAC;SACb;QACD,IAAI,WAAW,GAAa,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACjD,IAAG,CAAC,EAAE,EAAE;YACN,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,EAAC,QAAQ,EAAE,CAAC,EAAC,IAAI,EAAC,CAAC,CAAC,CAAC;YACzF,OAAO,IAAI,CAAC;SACb;QACD,KAAI,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE;YACtB,IAAG,GAAG,CAAC,IAAI,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;aAC1C;SACF;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,eAAe,CAAC,QAAgB;QACtC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAC,IAAI,EAAC,cAAc,EAAE,IAAI,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;QACvG,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,CAAC,GAA+D,EAAE,EAAE;YAClF,IAAG,CAAC,GAAG,CAAC,IAAI,EAAE;gBACZ,OAAO;aACR;YACD,IAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAC,CAAC,CAAC,IAAI,GAAG,EAAE;gBAClF,qCAAqC;gBACrC,OAAO;aACR;YACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAA;QAED,MAAM,YAAY,GAAG,CAAC,QAAyC,EAAE,EAAE;YACjE,IAAG,CAAC,QAAQ,EAAE;gBACZ,OAAO;aACR;YACD,KAAI,IAAI,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE;gBAC/B,KAAI,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE;oBACxB,KAAI,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE;wBACtB,OAAO,CAAC,GAAG,CAAC,CAAC;wBACb,IAAI,CAAqC,CAAC;wBAC1C,KAAI,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE;4BACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;yBACvB;wBACD,KAAI,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE;4BAC1B,OAAO,CAAC,EAAE,CAAC,CAAC;yBACb;wBACD,KAAI,IAAI,EAAE,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE;4BAChC,OAAO,CAAC,EAAE,CAAC,CAAC;yBACb;qBACF;iBACF;aACF;QACH,CAAC,CAAA;QACD,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,EAAE;IACF,oBAAoB;IACpB,EAAE;IAEM,cAAc,CAAC,OAA0B;QAC/C,IAAI,MAAM,GAAuB,EAAE,CAAC;QACpC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC/B,KAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;gBACnC,GAAG;gBACH,OAAO,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC;gBACnE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC5F,CAAC,CAAC;YACH,GAAG,EAAE,CAAC;SACP;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACI,UAAU,CAAC,MAA6B;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,QAAO,MAAM,EAAE;YACb,KAAK,KAAK;gBACR,OAAO,sBAAsB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5D,KAAK,OAAO;gBACV,OAAO,sBAAsB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SACvD;QACH,OAAO,sBAAsB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,+DAA+D;IAC/D,+DAA+D;IAEvD,MAAM,CAAC,gBAAgB,CAAC,OAA2B;QACzD,mEAAmE;QACnE,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,KAAI,IAAI,CAAC,IAAI,OAAO,EAAE;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SACnD;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,OAA2B;QAC7D,uEAAuE;QACvE,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC9C,KAAI,IAAI,CAAC,IAAI,OAAO,EAAE;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;SAC/E;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,OAA2B;QACzD,8DAA8D;QAC9D,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAEO,MAAM,CAAC,uBAAuB,CAAC,CAAS,EAAE,iBAA0B,IAAI;QAC9E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAI,IAAI,EAAE,IAAI,CAAC,EAAE;YACf,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACrD,IAAG,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAC/C;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;CAEF","debug_id":"f9a7a0ad-0a19-5873-822c-07a700ee3287"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/osk-character-use/index.ts"],"names":[],"mappings":"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"}